summaryrefslogtreecommitdiffstats
path: root/trunk/src
diff options
context:
space:
mode:
Diffstat (limited to 'trunk/src')
-rw-r--r--trunk/src/Makefile.in49
-rw-r--r--trunk/src/arguments.cpp17
-rw-r--r--trunk/src/arguments.h99
-rw-r--r--trunk/src/bib2xhtml.h290
-rwxr-xr-xtrunk/src/bib2xhtml.pl290
-rw-r--r--trunk/src/bufstr.h118
-rw-r--r--trunk/src/cite.cpp254
-rw-r--r--trunk/src/cite.h100
-rw-r--r--trunk/src/classdef.cpp4022
-rw-r--r--trunk/src/classdef.h495
-rw-r--r--trunk/src/classlist.cpp163
-rw-r--r--trunk/src/classlist.h63
-rw-r--r--trunk/src/cmdmapper.cpp204
-rw-r--r--trunk/src/cmdmapper.h222
-rw-r--r--trunk/src/code.h35
-rw-r--r--trunk/src/code.l3567
-rw-r--r--trunk/src/commentcnv.h27
-rw-r--r--trunk/src/commentcnv.l881
-rw-r--r--trunk/src/commentscan.h84
-rw-r--r--trunk/src/commentscan.l2906
-rw-r--r--trunk/src/compound.xsd829
-rw-r--r--trunk/src/compound_xsd.h829
-rw-r--r--trunk/src/config.h610
-rw-r--r--trunk/src/config.l1609
-rw-r--r--trunk/src/config.xml1641
-rwxr-xr-xtrunk/src/configgen.py137
-rw-r--r--trunk/src/configoptions.cpp2494
-rw-r--r--trunk/src/configoptions.h26
-rw-r--r--trunk/src/constexp.h33
-rw-r--r--trunk/src/constexp.l120
-rw-r--r--trunk/src/constexp.y278
-rw-r--r--trunk/src/cppvalue.cpp95
-rw-r--r--trunk/src/cppvalue.h62
-rw-r--r--trunk/src/dbusxmlscanner.cpp875
-rw-r--r--trunk/src/dbusxmlscanner.h58
-rw-r--r--trunk/src/debug.cpp118
-rw-r--r--trunk/src/debug.h51
-rw-r--r--trunk/src/declinfo.h33
-rw-r--r--trunk/src/declinfo.l357
-rw-r--r--trunk/src/defargs.h29
-rw-r--r--trunk/src/defargs.l482
-rw-r--r--trunk/src/defgen.cpp631
-rw-r--r--trunk/src/defgen.h20
-rw-r--r--trunk/src/define.cpp52
-rw-r--r--trunk/src/define.h91
-rw-r--r--trunk/src/definition.cpp1791
-rw-r--r--trunk/src/definition.h386
-rw-r--r--trunk/src/diagram.cpp1306
-rw-r--r--trunk/src/diagram.h133
-rw-r--r--trunk/src/dirdef.cpp982
-rw-r--r--trunk/src/dirdef.h182
-rw-r--r--trunk/src/docparser.cpp6970
-rw-r--r--trunk/src/docparser.h1284
-rw-r--r--trunk/src/docsets.cpp488
-rw-r--r--trunk/src/docsets.h85
-rw-r--r--trunk/src/doctokenizer.h155
-rw-r--r--trunk/src/doctokenizer.l1319
-rw-r--r--trunk/src/docvisitor.h191
-rw-r--r--trunk/src/dot.cpp4576
-rw-r--r--trunk/src/dot.h456
-rw-r--r--trunk/src/doxygen.bst1388
-rw-r--r--trunk/src/doxygen.cpp10844
-rw-r--r--trunk/src/doxygen.css1015
-rw-r--r--trunk/src/doxygen.h177
-rw-r--r--trunk/src/doxygen.pro.in39
-rw-r--r--trunk/src/doxygen_bst.h1388
-rw-r--r--trunk/src/doxygen_css.h1015
-rw-r--r--trunk/src/eclipsehelp.cpp205
-rw-r--r--trunk/src/eclipsehelp.h77
-rw-r--r--trunk/src/entry.cpp458
-rw-r--r--trunk/src/entry.h351
-rw-r--r--trunk/src/example.h45
-rw-r--r--trunk/src/filedef.cpp1679
-rw-r--r--trunk/src/filedef.h326
-rw-r--r--trunk/src/filename.cpp144
-rw-r--r--trunk/src/filename.h69
-rw-r--r--trunk/src/filestorage.h135
-rw-r--r--trunk/src/footer.html16
-rw-r--r--trunk/src/footer_html.h16
-rw-r--r--trunk/src/formula.cpp329
-rw-r--r--trunk/src/formula.h59
-rw-r--r--trunk/src/fortrancode.h35
-rw-r--r--trunk/src/fortrancode.l1073
-rw-r--r--trunk/src/fortranscanner.h51
-rw-r--r--trunk/src/fortranscanner.l2252
-rw-r--r--trunk/src/ftextstream.cpp259
-rw-r--r--trunk/src/ftextstream.h82
-rw-r--r--trunk/src/ftvhelp.cpp992
-rw-r--r--trunk/src/ftvhelp.h80
-rw-r--r--trunk/src/groupdef.cpp1475
-rw-r--r--trunk/src/groupdef.h192
-rw-r--r--trunk/src/growbuf.h38
-rw-r--r--trunk/src/header.html49
-rw-r--r--trunk/src/header_html.h49
-rw-r--r--trunk/src/htags.cpp179
-rw-r--r--trunk/src/htags.h28
-rw-r--r--trunk/src/htmlattrib.h77
-rw-r--r--trunk/src/htmldocvisitor.cpp1855
-rw-r--r--trunk/src/htmldocvisitor.h165
-rw-r--r--trunk/src/htmlgen.cpp3021
-rw-r--r--trunk/src/htmlgen.h290
-rw-r--r--trunk/src/htmlhelp.cpp708
-rw-r--r--trunk/src/htmlhelp.h104
-rw-r--r--trunk/src/image.cpp540
-rw-r--r--trunk/src/image.h69
-rwxr-xr-xtrunk/src/increasebuffer.pl9
-rw-r--r--trunk/src/index.cpp3932
-rw-r--r--trunk/src/index.h271
-rw-r--r--trunk/src/index.xsd66
-rw-r--r--trunk/src/index_xsd.h66
-rw-r--r--trunk/src/indexlog.cpp152
-rw-r--r--trunk/src/indexlog.h57
-rw-r--r--trunk/src/jquery.js13
-rw-r--r--trunk/src/jquery_fx.js47
-rw-r--r--trunk/src/jquery_fx_js.h47
-rw-r--r--trunk/src/jquery_js.h13
-rw-r--r--trunk/src/jquery_ui.js32
-rw-r--r--trunk/src/jquery_ui_js.h32
-rw-r--r--trunk/src/lang_cfg.h40
-rw-r--r--trunk/src/language.cpp422
-rw-r--r--trunk/src/language.h26
-rw-r--r--trunk/src/latexdocvisitor.cpp1825
-rw-r--r--trunk/src/latexdocvisitor.h192
-rw-r--r--trunk/src/latexgen.cpp2623
-rw-r--r--trunk/src/latexgen.h272
-rw-r--r--trunk/src/layout.cpp1328
-rw-r--r--trunk/src/layout.h198
-rw-r--r--trunk/src/layout_default.h188
-rw-r--r--trunk/src/layout_default.xml188
-rw-r--r--trunk/src/libdoxycfg.pro.in27
-rw-r--r--trunk/src/libdoxycfg.t.in52
-rw-r--r--trunk/src/libdoxygen.pro.in274
-rw-r--r--trunk/src/libdoxygen.t.in177
-rw-r--r--trunk/src/lockingptr.h162
-rw-r--r--trunk/src/lodepng.cpp4158
-rw-r--r--trunk/src/lodepng.h1575
-rw-r--r--trunk/src/logos.cpp1986
-rw-r--r--trunk/src/logos.h27
-rw-r--r--trunk/src/main.cpp41
-rw-r--r--trunk/src/mandocvisitor.cpp1010
-rw-r--r--trunk/src/mandocvisitor.h160
-rw-r--r--trunk/src/mangen.cpp787
-rw-r--r--trunk/src/mangen.h262
-rw-r--r--trunk/src/markdown.cpp2237
-rw-r--r--trunk/src/markdown.h54
-rw-r--r--trunk/src/marshal.cpp830
-rw-r--r--trunk/src/marshal.h95
-rw-r--r--trunk/src/memberdef.cpp4507
-rw-r--r--trunk/src/memberdef.h399
-rw-r--r--trunk/src/membergroup.cpp365
-rw-r--r--trunk/src/membergroup.h153
-rw-r--r--trunk/src/memberlist.cpp831
-rw-r--r--trunk/src/memberlist.h202
-rw-r--r--trunk/src/membername.cpp83
-rw-r--r--trunk/src/membername.h98
-rw-r--r--trunk/src/message.cpp196
-rw-r--r--trunk/src/message.h31
-rw-r--r--trunk/src/msc.cpp198
-rw-r--r--trunk/src/msc.h38
-rw-r--r--trunk/src/namespacedef.cpp992
-rw-r--r--trunk/src/namespacedef.h168
-rw-r--r--trunk/src/navtree.css127
-rw-r--r--trunk/src/navtree.js355
-rw-r--r--trunk/src/navtree_css.h127
-rw-r--r--trunk/src/navtree_js.h355
-rw-r--r--trunk/src/objcache.cpp326
-rw-r--r--trunk/src/objcache.h127
-rw-r--r--trunk/src/outputgen.cpp82
-rw-r--r--trunk/src/outputgen.h494
-rw-r--r--trunk/src/outputlist.cpp316
-rw-r--r--trunk/src/outputlist.h518
-rw-r--r--trunk/src/pagedef.cpp283
-rw-r--r--trunk/src/pagedef.h86
-rw-r--r--trunk/src/parserintf.h171
-rw-r--r--trunk/src/perlmodgen.cpp2930
-rw-r--r--trunk/src/perlmodgen.h23
-rw-r--r--trunk/src/portable.cpp410
-rw-r--r--trunk/src/portable.h47
-rw-r--r--trunk/src/portable_c.c24
-rw-r--r--trunk/src/pre.h33
-rw-r--r--trunk/src/pre.l3051
-rw-r--r--trunk/src/printdocvisitor.h712
-rw-r--r--trunk/src/pycode.h41
-rw-r--r--trunk/src/pycode.l1486
-rw-r--r--trunk/src/pyscanner.h60
-rw-r--r--trunk/src/pyscanner.l1727
-rw-r--r--trunk/src/qhp.cpp340
-rw-r--r--trunk/src/qhp.h69
-rw-r--r--trunk/src/qhpxmlwriter.cpp151
-rw-r--r--trunk/src/qhpxmlwriter.h63
-rw-r--r--trunk/src/qtbc.h45
-rw-r--r--trunk/src/reflist.cpp171
-rw-r--r--trunk/src/reflist.h94
-rw-r--r--trunk/src/resize.js81
-rw-r--r--trunk/src/resize_js.h81
-rw-r--r--trunk/src/rtfdocvisitor.cpp1750
-rw-r--r--trunk/src/rtfdocvisitor.h166
-rw-r--r--trunk/src/rtfgen.cpp2931
-rw-r--r--trunk/src/rtfgen.h284
-rw-r--r--trunk/src/rtfstyle.cpp518
-rw-r--r--trunk/src/rtfstyle.h83
-rw-r--r--trunk/src/scanner.h55
-rw-r--r--trunk/src/scanner.l6154
-rw-r--r--trunk/src/search.css238
-rw-r--r--trunk/src/search.js778
-rw-r--r--trunk/src/search_css.h238
-rw-r--r--trunk/src/search_functions.php374
-rw-r--r--trunk/src/search_functions_php.h374
-rw-r--r--trunk/src/search_js.h778
-rw-r--r--trunk/src/search_opensearch.php127
-rw-r--r--trunk/src/search_opensearch_php.h127
-rw-r--r--trunk/src/searchindex.cpp1084
-rw-r--r--trunk/src/searchindex.h79
-rw-r--r--trunk/src/section.h68
-rw-r--r--trunk/src/sizzle.js19
-rw-r--r--trunk/src/sizzle_js.h19
-rw-r--r--trunk/src/sortdict.h665
-rw-r--r--trunk/src/store.cpp481
-rw-r--r--trunk/src/store.h123
-rw-r--r--trunk/src/svgpan.js319
-rw-r--r--trunk/src/svgpan_js.h319
-rw-r--r--trunk/src/tagreader.cpp1408
-rw-r--r--trunk/src/tagreader.h28
-rw-r--r--trunk/src/tclscanner.h52
-rw-r--r--trunk/src/tclscanner.l2683
-rw-r--r--trunk/src/textdocvisitor.cpp88
-rw-r--r--trunk/src/textdocvisitor.h139
-rw-r--r--trunk/src/translator.cpp248
-rw-r--r--trunk/src/translator.h509
-rw-r--r--trunk/src/translator_adapter.h202
-rw-r--r--trunk/src/translator_am.h1853
-rw-r--r--trunk/src/translator_ar.h1615
-rw-r--r--trunk/src/translator_br.h1888
-rw-r--r--trunk/src/translator_ca.h1893
-rw-r--r--trunk/src/translator_cn.h1886
-rw-r--r--trunk/src/translator_cz.h1926
-rw-r--r--trunk/src/translator_de.h1986
-rw-r--r--trunk/src/translator_dk.h1834
-rw-r--r--trunk/src/translator_en.h1891
-rw-r--r--trunk/src/translator_eo.h1880
-rw-r--r--trunk/src/translator_es.h1935
-rw-r--r--trunk/src/translator_fa.h1834
-rw-r--r--trunk/src/translator_fi.h1903
-rw-r--r--trunk/src/translator_fr.h1950
-rw-r--r--trunk/src/translator_gr.h1864
-rw-r--r--trunk/src/translator_hr.h1572
-rw-r--r--trunk/src/translator_hu.h1546
-rw-r--r--trunk/src/translator_id.h1867
-rw-r--r--trunk/src/translator_it.h1853
-rw-r--r--trunk/src/translator_je.h67
-rw-r--r--trunk/src/translator_jp.h1772
-rw-r--r--trunk/src/translator_ke.h59
-rw-r--r--trunk/src/translator_kr.h1889
-rw-r--r--trunk/src/translator_lt.h1563
-rw-r--r--trunk/src/translator_mk.h1767
-rw-r--r--trunk/src/translator_nl.h1470
-rw-r--r--trunk/src/translator_no.h1617
-rw-r--r--trunk/src/translator_pl.h1804
-rw-r--r--trunk/src/translator_pt.h1891
-rw-r--r--trunk/src/translator_ro.h1797
-rw-r--r--trunk/src/translator_ru.h1846
-rw-r--r--trunk/src/translator_sc.h1805
-rw-r--r--trunk/src/translator_si.h1251
-rw-r--r--trunk/src/translator_sk.h1854
-rw-r--r--trunk/src/translator_sr.h1838
-rw-r--r--trunk/src/translator_sv.h1662
-rw-r--r--trunk/src/translator_tr.h1872
-rw-r--r--trunk/src/translator_tw.h1864
-rw-r--r--trunk/src/translator_ua.h1589
-rw-r--r--trunk/src/translator_vi.h1787
-rw-r--r--trunk/src/translator_za.h1767
-rw-r--r--trunk/src/translatordecoder.h760
-rw-r--r--trunk/src/types.h92
-rw-r--r--trunk/src/util.cpp7361
-rw-r--r--trunk/src/util.h407
-rw-r--r--trunk/src/version.h23
-rw-r--r--trunk/src/vhdlcode.h18
-rw-r--r--trunk/src/vhdlcode.l1606
-rw-r--r--trunk/src/vhdldocgen.cpp2785
-rw-r--r--trunk/src/vhdldocgen.h285
-rw-r--r--trunk/src/vhdlparser.y2392
-rw-r--r--trunk/src/vhdlscanner.h131
-rw-r--r--trunk/src/vhdlscanner.l991
-rw-r--r--trunk/src/xmldocvisitor.cpp1002
-rw-r--r--trunk/src/xmldocvisitor.h163
-rw-r--r--trunk/src/xmlgen.cpp2015
-rw-r--r--trunk/src/xmlgen.h20
287 files changed, 0 insertions, 241774 deletions
diff --git a/trunk/src/Makefile.in b/trunk/src/Makefile.in
deleted file mode 100644
index 2ecffd2..0000000
--- a/trunk/src/Makefile.in
+++ /dev/null
@@ -1,49 +0,0 @@
-
-#
-#
-#
-# Copyright (C) 1997-2012 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.
-#
-
-all: Makefile.libdoxygen Makefile.libdoxycfg Makefile.doxygen Makefile
- $(MAKE) -f Makefile.libdoxycfg PERL=$(PERL) $@
- $(MAKE) -f Makefile.libdoxygen PERL=$(PERL) $@
- $(MAKE) -f Makefile.doxygen PERL=$(PERL) $@
-
-Makefile.libdoxygen: libdoxygen.pro libdoxygen.t
- $(ENV) $(PERL) $(TMAKE) libdoxygen.pro >Makefile.libdoxygen
-
-Makefile.libdoxycfg: libdoxycfg.pro libdoxycfg.t
- $(ENV) $(PERL) $(TMAKE) libdoxycfg.pro >Makefile.libdoxycfg
-
-Makefile.doxygen: doxygen.pro
- $(ENV) $(PERL) $(TMAKE) doxygen.pro >Makefile.doxygen
-
-tmake:
- $(ENV) $(PERL) $(TMAKE) libdoxygen.pro >Makefile.libdoxygen
- $(ENV) $(PERL) $(TMAKE) libdoxycfg.pro >Makefile.libdoxycfg
- $(ENV) $(PERL) $(TMAKE) doxygen.pro >Makefile.doxygen
-
-clean: Makefile.libdoxygen Makefile.libdoxycfg Makefile.doxygen
- $(MAKE) -f Makefile.libdoxygen clean
- $(MAKE) -f Makefile.libdoxycfg clean
- $(MAKE) -f Makefile.doxygen clean
-
-distclean: clean
- -$(RM) scanner.cpp code.cpp config.cpp pre.cpp ce_lex.cpp \
- ce_parse.cpp ce_parse.h tag.cpp commentscan.cpp \
- declinfo.cpp defargs.cpp commentcnv.cpp doctokenizer.cpp \
- pycode.cpp pyscanner.cpp fortrancode.cpp fortranscanner.cpp \
- vhdlscanner.cpp vhdlcode.cpp tclscanner.cpp vhdlparser.h \
- vhdlparser.cpp
-
-FORCE:
diff --git a/trunk/src/arguments.cpp b/trunk/src/arguments.cpp
deleted file mode 100644
index 128223b..0000000
--- a/trunk/src/arguments.cpp
+++ /dev/null
@@ -1,17 +0,0 @@
-#include "arguments.h"
-
-/*! the argument list is documented if one of its
- * arguments is documented
- */
-bool ArgumentList::hasDocumentation() const
-{
- bool hasDocs=FALSE;
- ArgumentListIterator ali(*this);
- Argument *a;
- for (ali.toFirst();!hasDocs && (a=ali.current());++ali)
- {
- hasDocs = a->hasDocumentation();
- }
- return hasDocs;
-}
-
diff --git a/trunk/src/arguments.h b/trunk/src/arguments.h
deleted file mode 100644
index c5ca942..0000000
--- a/trunk/src/arguments.h
+++ /dev/null
@@ -1,99 +0,0 @@
-/******************************************************************************
- *
- * Copyright (C) 1997-2012 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.
- *
- */
-
-#ifndef ARGUMENTS_H
-#define ARGUMENTS_H
-
-#include "qtbc.h"
-#include <qlist.h>
-
-/*! \brief This class contains the information about the argument of a
- * function or template
- *
- */
-struct Argument
-{
- /*! Construct a new argument. */
- Argument() {}
- /*! Copy an argument (does a deep copy of all strings). */
- Argument(const Argument &a)
- {
- attrib=a.attrib.copy();
- type=a.type.copy();
- name=a.name.copy();
- defval=a.defval.copy();
- docs=a.docs.copy();
- array=a.array.copy();
- }
- /*! Assignment of an argument (does a deep copy of all strings). */
- Argument &operator=(const Argument &a)
- {
- if (this!=&a)
- {
- attrib=a.attrib.copy();
- type=a.type.copy();
- name=a.name.copy();
- defval=a.defval.copy();
- docs=a.docs.copy();
- array=a.array.copy();
- }
- return *this;
- }
- /*! return TRUE if this argument is documentation and the argument has a
- * non empty name.
- */
- bool hasDocumentation() const
- {
- return !name.isEmpty() && !docs.isEmpty();
- }
-
- QCString attrib; /*!< Argument's attribute (IDL only) */
- QCString type; /*!< Argument's type */
- QCString canType; /*!< Cached value of canonical type (after type resolution). Empty initially. */
- QCString name; /*!< Argument's name (may be empty) */
- QCString array; /*!< Argument's array specifier (may be empty) */
- QCString defval; /*!< Argument's default value (may be empty) */
- QCString docs; /*!< Argument's documentation (may be empty) */
-};
-
-/*! \brief This class represents an function or template argument list.
- *
- * This class also stores some information about member that is typically
- * put after the argument list, such as wether the member is const,
- * volatile or pure virtual.
- */
-class ArgumentList : public QList<Argument>
-{
- public:
- /*! Creates an empty argument list */
- ArgumentList() : QList<Argument>(),
- constSpecifier(FALSE),
- volatileSpecifier(FALSE),
- pureSpecifier(FALSE)
- { setAutoDelete(TRUE); }
- /*! Destroys the argument list */
- ~ArgumentList() {}
- bool hasDocumentation() const;
- /*! Does the member modify the state of the class? default: FALSE. */
- bool constSpecifier;
- /*! Is the member volatile? default: FALSE. */
- bool volatileSpecifier;
- /*! Is this a pure virtual member? default: FALSE */
- bool pureSpecifier;
-};
-
-typedef QListIterator<Argument> ArgumentListIterator;
-
-#endif
diff --git a/trunk/src/bib2xhtml.h b/trunk/src/bib2xhtml.h
deleted file mode 100644
index 65e4ed4..0000000
--- a/trunk/src/bib2xhtml.h
+++ /dev/null
@@ -1,290 +0,0 @@
-"#\n"
-"# Below is a stripped down version of bib2xhtml used by doxygen.\n"
-"# For the full version see http://www.spinellis.gr/sw/textproc/bib2xhtml/\n"
-"#\n"
-"# Convert from bibtex to XHTML.\n"
-"#\n"
-"# (C) Copyright 1995, 1996 David Hull.\n"
-"# (David Hull / hull@cs.uiuc.edu / http://www.uiuc.edu/ph/www/dlhull)\n"
-"#\n"
-"# (C) Copyright 2002-2010 Diomidis Spinellis\n"
-"# http://www.spinellis.gr\n"
-"#\n"
-"# This program is free software. You can redistribute it and/or modify\n"
-"# it under the terms of the GNU General Public License. See the\n"
-"# files README and COPYING for details.\n"
-"#\n"
-"# This source code contains UTF-8 characters. You might want to use\n"
-"# an appropriate editor, if you want to view/modify the LaTeX to Unicode\n"
-"# substitution commands.\n"
-"#\n"
-"\n"
-"use Getopt::Std;\n"
-"use open IO => ':crlf';\n"
-"$label_styles{'numbered'} = $LABEL_NUMBERED = 2;\n"
-"$list_start[$LABEL_NUMBERED] = 'dl class=\"citelist\"';\n"
-"$list_end[$LABEL_NUMBERED] = \"/dl\";\n"
-"@tmpfiles = ();\n"
-"sub html_ent {\n"
-" s/\\\\i\\b/i/g;\n"
-" s/\\\\\\'(\\001\\d+)\\{([AEIOUaeiou])\\1\\}/&$2acute;/gs;\n"
-" s/\\\\\\'([AEIOUaeiou])/&$1acute;/g;\n"
-" s/\\\\\\`(\\001\\d+)\\{([AEIOUaeiou])\\1\\}/&$2grave;/gs;\n"
-" s/\\\\\\`([AEIOUaeiou])/&$1grave;/g;\n"
-" s/\\\\\\\"(\\001\\d+)\\{([AEIOUaeiouy])\\1\\}/&$2uml;/gs;\n"
-" s/\\\\\\\"([AEIOUaeiouy])/&$1uml;/g;\n"
-" s/\\\\\\~(\\001\\d+)\\{([ANOano])\\1\\}/&$2tilde;/gs;\n"
-" s/\\\\\\~([ANOano])/&$1tilde;/g;\n"
-" s/\\\\\\^(\\001\\d+)\\{([AEIOUaeiou])\\1\\}/&$2circ;/gs;\n"
-" s/\\\\\\^([AEIOUaeiou])/&$1circ;/g;\n"
-" s/\\\\c(\\001\\d+)\\{([Cc])\\1\\}/&$2cedil;/gs;\n"
-" s/\\\\u(\\001\\d+)\\{(.)\\1\\}/$2/gs;\n"
-" s/\\\\v(\\001\\d+)\\{(.)\\1\\}/$2/gs;\n"
-" s/\\\\([lL])\\b/$1/g;\n"
-" s/\\\\\\=(\\001\\d+)\\{(.)\\1\\}/$2/gs;\n"
-" s/\\\\\\=(.)/$1/g;\n"
-" s/\\\\\\.(\\001\\d+)\\{(.)\\1\\}/$2/gs;\n"
-" s/\\\\\\.(.)/$1/g;\n"
-" s/\\\\([Oo])\\b\\s*/&$1slash;/g;\n"
-" s/\\\\AA\\b\\s*/&Aring;/g;\n"
-" s/\\\\aa\\b\\s*/&aring;/g;\n"
-" s/\\\\AE\\b\\s*/&AElig;/g;\n"
-" s/\\\\ae\\b\\s*/&aelig;/g;\n"
-" s/\\\\ss\\b\\s*/&szlig;/g;\n"
-" s/\\\\S\\b\\s*/&sect;/g;\n"
-" s/\\\\P\\b\\s*/&para;/g;\n"
-" s/\\\\pounds\\b\\s*/&pound;/g;\n"
-" s/\\?\\`/&iquest;/g;\n"
-" s/\\!\\`/&iexcl;/g;\n"
-" s/\\-\\-\\-/&mdash;/g;\n"
-" s/([^\\!])\\-\\-([^\\>])/$1&ndash;$2/g;\n"
-" s/\\\\([aA]lpha)\\b/&$1;/g;\n"
-" s/\\\\([bB]eta)\\b/&$1;/g;\n"
-" s/\\\\([gG]amma)\\b/&$1;/g;\n"
-" s/\\\\([dD]elta)\\b/&$1;/g;\n"
-" s/\\\\varepsilon\\b/&epsilon;/g;\n"
-" s/\\\\([eE]psilon)\\b/&$1;/g;\n"
-" s/\\\\([zZ]eta)\\b/&$1;/g;\n"
-" s/\\\\([eE]ta)\\b/&$1;/g;\n"
-" s/\\\\([tT]heta)\\b/&$1;/g;\n"
-" s/\\\\vartheta\\b/&theta;/g;\n"
-" s/\\\\([iI]ota)\\b/&$1;/g;\n"
-" s/\\\\([kK]appa)\\b/&$1;/g;\n"
-" s/\\\\([lL]ambda)\\b/&$1;/g;\n"
-" s/\\\\([mM]u)\\b/&$1;/g;\n"
-" s/\\\\([nN]u)\\b/&$1;/g;\n"
-" s/\\\\([xX]i)\\b/&$1;/g;\n"
-" s/\\\\([oO]micron)\\b/&$1;/g;\n"
-" s/\\\\([pP]i)\\b/&$1;/g;\n"
-" s/\\\\varpi\\b/&pi;/g;\n"
-" s/\\\\([rR]ho)\\b/&$1;/g;\n"
-" s/\\\\varrho\\b/&rho;/g;\n"
-" s/\\\\([sS]igma)\\b/&$1;/g;\n"
-" s/\\\\varsigma\\b/&sigmaf;/g;\n"
-" s/\\\\([tT]au)\\b/&$1;/g;\n"
-" s/\\\\([uU]psilon)\\b/&$1;/g;\n"
-" s/\\\\([pP]hi)\\b/&$1;/g;\n"
-" s/\\\\varphi\\b/&phi;/g;\n"
-" s/\\\\([cC]hi)\\b/&$1;/g;\n"
-" s/\\\\([pP]si)\\b/&$1;/g;\n"
-" s/\\\\([oO]mega)\\b/&$1;/g;\n"
-"}\n"
-"foreach (@ARGV) {\n"
-" if (/\\.bib$/) {\n"
-" $bibfile = $_;\n"
-" $bibfile =~ s/\\.bib$//;\n"
-" push(@bibfiles,$bibfile);\n"
-" } else {\n"
-" $htmlfile = $_;\n"
-" }\n"
-"}\n"
-"exit(1) unless defined($htmlfile);\n"
-"$bibdatacmd=\"\\\\bibdata{\".join(',',@bibfiles).\"}\";\n"
-"$label_style = $LABEL_NUMBERED;\n"
-"$bstfile = \"doxygen\";\n"
-"umask(077);\n"
-"open(HTMLFILE,\">$htmlfile$$\");\n"
-"if (open(OHTMLFILE, \"$htmlfile\")) {\n"
-" $mode = (stat OHTMLFILE)[2] & 0xfff;\n"
-"} else {\n"
-" print \"Error opening $htmlfile\\n\";\n"
-" exit(1);\n"
-"}\n"
-"$beginstring = \"<!-- BEGIN CITATIONS -->\";\n"
-"$endstring = \"<!-- END CITATIONS -->\";\n"
-"@citations = ();\n"
-"loop:\n"
-"while (<OHTMLFILE>) {\n"
-" print HTMLFILE;\n"
-" last loop if m/^$beginstring$/;\n"
-"}\n"
-"loop:\n"
-"while (<OHTMLFILE>) {\n"
-" print HTMLFILE;\n"
-" last loop if m/^$endstring$/;\n"
-" push(@citations, $2) if m/^([^\\\\]*)?(.+\\})(.*)?$/;\n"
-"}\n"
-"push(@citations, $bibdatacmd);\n"
-"$auxfile = \"bib$$\";\n"
-"push(@tmpfiles, \"$auxfile.aux\");\n"
-"open(AUXFILE, \">$auxfile\" . \".aux\");\n"
-"print AUXFILE \"\\\\relax\\n\\\\bibstyle{$bstfile}\\n\";\n"
-"foreach $citation (@citations) {\n"
-" print AUXFILE \"$citation\\n\";\n"
-"}\n"
-"close(AUXFILE);\n"
-"push(@tmpfiles, \"$auxfile.blg\");\n"
-"push(@tmpfiles, \"$auxfile.bbl\");\n"
-"`bibtex $auxfile 2>&1`;\n"
-"if ($?==-1)\n"
-"{\n"
-" print \"bibtex command failed: $!\\n\";\n"
-"}\n"
-"$beginstring = \"<!-- BEGIN BIBLIOGRAPHY -->\";\n"
-"$endstring = \"<!-- END BIBLIOGRAPHY -->\";\n"
-"loop:\n"
-"while (<OHTMLFILE>) {\n"
-" last loop if m/^$beginstring$/;\n"
-" print HTMLFILE;\n"
-"}\n"
-"loop:\n"
-"while (<OHTMLFILE>) {\n"
-" last loop if m/^$endstring$/;\n"
-"}\n"
-"print HTMLFILE \"$beginstring\\n\";\n"
-"$t = $auxfile . \".bbl\";\n"
-"$/ = \"\";\n"
-"open(BBLFILE, \"<$t\") || die \"error opening $t: $!\\n\";\n"
-"$nentry = 0;\n"
-"loop:\n"
-"while (<BBLFILE>) {\n"
-" if (($nentry == 0) && (m/^#/)) {\n"
-" if ((m/#\\s*label-style:\\s*(\\S+)/) && (! defined $label_style)) {\n"
-" $label_style = $label_styles{$1};\n"
-" if (! defined $label_style) {\n"
-" print STDERR \"label style unknown: \\n\";\n"
-" next loop;\n"
-" }\n"
-" }\n"
-" next loop;\n"
-" }\n"
-" $nentry++;\n"
-" ($bcite, $blabel) = m+<dt><a name=\\\"([^\\\"]*)\\\">\\[([^\\]]*)\\]</a></dt><dd>+;\n"
-" $blabel = \"$nentry\";\n"
-" $bibcite{$bcite} = $blabel;\n"
-"}\n"
-"close(BBLFILE);\n"
-"$label_style = $LABEL_DEFAULT if (! defined $label_style);\n"
-"$list_start = $list_start[$label_style];\n"
-"$list_end = $list_end[$label_style];\n"
-"print HTMLFILE \"<$list_start>\\n\\n\";\n"
-"open(BBLFILE, \"<$t\") || die \"error opening $t: $!\\n\";\n"
-"$nentry = 0;\n"
-"loop:\n"
-"while (<BBLFILE>) {\n"
-" next loop if (($nentry == 0) && (m/^#/));\n"
-" $nentry++;\n"
-" s/\\\\\\{/\\002/g;\n"
-" s/\\\\\\}/\\003/g;\n"
-" s/\\\\\\$/\\004/g;\n"
-" {\n"
-" local ($c, $l, $z) = (0, 0, ());\n"
-" s/([\\{\\}])/join(\"\",\"\\001\",($1 eq \"\\{\" ? $z[$l++]=$c++ : $z[--$l]),$1)/ge;\n"
-" }\n"
-" s/\\%\\n//g;\n"
-" s/(\\.(<\\/cite>|<\\/a>|\\')+)\\./$1/g;\n"
-" s:(<dt><a name=\\\"[^\\\"]*\\\">\\[)[^\\]]*(\\]</a></dt><dd>):$1$nentry$2:;\n"
-" while (m/(\\\\(cite(label)?)(\\001\\d+)\\{([^\\001]+)\\4\\})/) {\n"
-" $old = $1;\n"
-" $cmd = $2;\n"
-" $doxref = defined($3);\n"
-" $bcite = $5;\n"
-" if (! defined $bibcite{$bcite}) {\n"
-" $blabel = \" [\" . $bcite . \"]\";\n"
-" } elsif ($doxref) {\n"
-" $blabel = \" <a href=\\\"#$bcite\\\">[\" . $bibcite{$bcite} . \"]<\\/a>\";\n"
-" } else {\n"
-" $blabel = \" [\" . $bibcite{$bcite} . \"]\";\n"
-" }\n"
-" $old =~ s/(\\W)/\\\\$1/g;\n"
-" s/\\s*$old/$blabel/g;\n"
-" }\n"
-" s/In (<a href=\\\"[^\\\"]*\\\">)([^\\[]+) \\[(\\2)/In $1\\[$2/;\n"
-" s/\\\\htmladdnormallink(foot)?(\\001\\d+)\\{([^\\001]+)\\2\\}(\\001\\d+)\\{([^\\001]+)\\4\\}/<a href=\"$5\">$3<\\/a>/gs;\n"
-" s/\\&amp;/\\005/g;\n"
-" s/\\\\?&/&amp;/g;\n"
-" s/\\005/&amp;/g;\n"
-" html_ent();\n"
-" while (m/\\\\char([\\'\\\"]?[0-9a-fA-F]+)/) {\n"
-" $o = $r = $1;\n"
-" if ($r =~ s/^\\'//) {\n"
-" $r = oct($r);\n"
-" } elsif ($r =~ s/^\\\"//) {\n"
-" $r = hex($r);\n"
-" }\n"
-" s/\\\\char$o\\s*/&#$r;/g;\n"
-" }\n"
-" s/{\\\\etalchar\\001(\\d+)\\{(.)}\\001\\1\\}/$2/g;\n"
-" s/\\\\par\\b/<p \\/>/g;\n"
-" s/\\\\url(\\001\\d+)\\{(.*)\\1\\}/<a href=\"$2\">$2<\\/a>/gs;\n"
-" s/\\\\href(\\001\\d+)\\{(.*)\\1\\}(\\001\\d+)\\{([^\\001]*)\\3\\}/<a href=\"$2\">$4<\\/a>/gs;\n"
-" s/\\\\href(\\001\\d+)\\{(.*)\\1\\}/<a href=\"$2\">$2<\\/a>/gs;\n"
-" s/(\\001\\d+)\\{\\\\rm\\s+(.*)\\1\\}/$2/gs;\n"
-" s/\\\\textrm(\\001\\d+)\\{(.*)\\1\\}/$2/gs;\n"
-" s/(\\001\\d+)\\{\\\\em\\s+(.*)\\1\\}/<em>$2<\\/em>/gs;\n"
-" s/(\\001\\d+)\\{\\\\it\\s+(.*)\\1\\}/<i>$2<\\/i>/gs;\n"
-" s/(\\001\\d+)\\{\\\\bf\\s+(.*)\\1\\}/<b>$2<\\/b>/gs;\n"
-" s/(\\001\\d+)\\{\\\\tt\\s+(.*)\\1\\}/<tt>$2<\\/tt>/gs;\n"
-" s/\\\\emph(\\001\\d+)\\{(.*)\\1\\}/<em>$2<\\/em>/gs;\n"
-" s/\\\\textit(\\001\\d+)\\{(.*)\\1\\}/<i>$2<\\/i>/gs;\n"
-" s/\\\\textbf(\\001\\d+)\\{(.*)\\1\\}/<b>$2<\\/b>/gs;\n"
-" s/\\\\texttt(\\001\\d+)\\{(.*)\\1\\}/<tt>$2<\\/tt>/gs;\n"
-" s/\\\\mathrm(\\001\\d+)\\{(.*)\\1\\}/$2/gs;\n"
-" s/\\\\mathnormal(\\001\\d+)\\{(.*)\\1\\}/$2/gs;\n"
-" s/\\\\mathsf(\\001\\d+)\\{(.*)\\1\\}/$2/gs;\n"
-" s/\\\\mathbf(\\001\\d+)\\{(.*)\\1\\}/<b>$2<\\/b>/gs;\n"
-" s/\\\\mathcal(\\001\\d+)\\{(.*)\\1\\}/<i>$2<\\/i>/gs;\n"
-" s/\\\\mathit(\\001\\d+)\\{(.*)\\1\\}/<i>$2<\\/i>/gs;\n"
-" s/\\\\mathtt(\\001\\d+)\\{(.*)\\1\\}/<tt>$2<\\/tt>/gs;\n"
-" s/\\\\bibxhtmlname(\\001\\d+)\\{(.*)\\1\\}/$2/ges;\n"
-" sub domath {\n"
-" local($t) = @_;\n"
-" $t =~ s/\\^(\\001\\d+)\\{\\\\circ\\1\\}/\\&\\#176;/gs;\n"
-" $t =~ s/\\^\\\\circ/\\&\\#176;/g;\n"
-" $t =~ s/\\^(\\001\\d+)\\{(.*)\\1\\}/<sup>$2<\\/sup>/gs;\n"
-" $t =~ s/\\^(\\w)/<sup>$1<\\/sup>/g;\n"
-" $t =~ s/\\_(\\001\\d+)\\{(.*)\\1\\}/<sub>$2<\\/sub>/gs;\n"
-" $t =~ s/\\_(\\w)/<sub>$1<\\/sub>/g;\n"
-" $t;\n"
-" }\n"
-" s/(\\$([^\\$]+)\\$)/&domath($2)/ge;\n"
-" s/(\\\\\\((([^\\\\]|\\\\[^\\(\\)])+)\\\\\\))/&domath($2)/ge;\n"
-" s/\\\\mbox(\\001\\d+)\\{(.*)\\1\\}/$2/gs;\n"
-" while (s/(\\<a href\\=\\\"[^\"]*?)\\~/$1\\005/g) { ; }\n"
-" s/([^\\\\])~/$1&nbsp;/g;\n"
-" s/\\\\\\,/&thinsp;/g;\n"
-" s/\\\\ldots\\b/&hellip;/g;\n"
-" s/\\\\dots\\b/&hellip;/g;\n"
-" s/\\005/\\~/g;\n"
-" s/\\\\ / /g;\n"
-" s/\\\\textasciitilde\\b\\s*/~/g;\n"
-" s/\\\\([\\#\\&\\%\\~\\_\\^\\|])/$1/g;\n"
-" s/\\\\\\W//g;\n"
-" s/\\001(\\d+)\\{\\\\[A-Za-z]+\\001(\\d+)\\{([^\\001]*)\\001\\2\\}\\001\\1\\}/$3/g;\n"
-" s/\\\\([A-Za-z]+)/ $1 /g;\n"
-" s+In <a href=\\\"[^\\\"]*\\\"></a>++;\n"
-" s/\\001\\d+[\\{\\}]//gs;\n"
-" tr/\\002\\003\\004/{}$/;\n"
-" print HTMLFILE $_;\n"
-"}\n"
-"close(BBLFILE);\n"
-"print HTMLFILE \"<$list_end>\\n\\n$endstring\\n\";\n"
-"while (<OHTMLFILE>) {\n"
-" print HTMLFILE;\n"
-"}\n"
-"close (OHTMLFILE);\n"
-"close(HTMLFILE);\n"
-"chmod($mode, \"$htmlfile$$\");\n"
-"rename(\"$htmlfile$$\", $htmlfile);\n"
-"unlink(@tmpfiles);\n"
-"exit(0);\n"
diff --git a/trunk/src/bib2xhtml.pl b/trunk/src/bib2xhtml.pl
deleted file mode 100755
index 146435f..0000000
--- a/trunk/src/bib2xhtml.pl
+++ /dev/null
@@ -1,290 +0,0 @@
-#
-# Below is a stripped down version of bib2xhtml used by doxygen.
-# For the full version see http://www.spinellis.gr/sw/textproc/bib2xhtml/
-#
-# Convert from bibtex to XHTML.
-#
-# (C) Copyright 1995, 1996 David Hull.
-# (David Hull / hull@cs.uiuc.edu / http://www.uiuc.edu/ph/www/dlhull)
-#
-# (C) Copyright 2002-2010 Diomidis Spinellis
-# http://www.spinellis.gr
-#
-# This program is free software. You can redistribute it and/or modify
-# it under the terms of the GNU General Public License. See the
-# files README and COPYING for details.
-#
-# This source code contains UTF-8 characters. You might want to use
-# an appropriate editor, if you want to view/modify the LaTeX to Unicode
-# substitution commands.
-#
-
-use Getopt::Std;
-use open IO => ':crlf';
-$label_styles{'numbered'} = $LABEL_NUMBERED = 2;
-$list_start[$LABEL_NUMBERED] = 'dl class="citelist"';
-$list_end[$LABEL_NUMBERED] = "/dl";
-@tmpfiles = ();
-sub html_ent {
- s/\\i\b/i/g;
- s/\\\'(\001\d+)\{([AEIOUaeiou])\1\}/&$2acute;/gs;
- s/\\\'([AEIOUaeiou])/&$1acute;/g;
- s/\\\`(\001\d+)\{([AEIOUaeiou])\1\}/&$2grave;/gs;
- s/\\\`([AEIOUaeiou])/&$1grave;/g;
- s/\\\"(\001\d+)\{([AEIOUaeiouy])\1\}/&$2uml;/gs;
- s/\\\"([AEIOUaeiouy])/&$1uml;/g;
- s/\\\~(\001\d+)\{([ANOano])\1\}/&$2tilde;/gs;
- s/\\\~([ANOano])/&$1tilde;/g;
- s/\\\^(\001\d+)\{([AEIOUaeiou])\1\}/&$2circ;/gs;
- s/\\\^([AEIOUaeiou])/&$1circ;/g;
- s/\\c(\001\d+)\{([Cc])\1\}/&$2cedil;/gs;
- s/\\u(\001\d+)\{(.)\1\}/$2/gs;
- s/\\v(\001\d+)\{(.)\1\}/$2/gs;
- s/\\([lL])\b/$1/g;
- s/\\\=(\001\d+)\{(.)\1\}/$2/gs;
- s/\\\=(.)/$1/g;
- s/\\\.(\001\d+)\{(.)\1\}/$2/gs;
- s/\\\.(.)/$1/g;
- s/\\([Oo])\b\s*/&$1slash;/g;
- s/\\AA\b\s*/&Aring;/g;
- s/\\aa\b\s*/&aring;/g;
- s/\\AE\b\s*/&AElig;/g;
- s/\\ae\b\s*/&aelig;/g;
- s/\\ss\b\s*/&szlig;/g;
- s/\\S\b\s*/&sect;/g;
- s/\\P\b\s*/&para;/g;
- s/\\pounds\b\s*/&pound;/g;
- s/\?\`/&iquest;/g;
- s/\!\`/&iexcl;/g;
- s/\-\-\-/&mdash;/g;
- s/([^\!])\-\-([^\>])/$1&ndash;$2/g;
- s/\\([aA]lpha)\b/&$1;/g;
- s/\\([bB]eta)\b/&$1;/g;
- s/\\([gG]amma)\b/&$1;/g;
- s/\\([dD]elta)\b/&$1;/g;
- s/\\varepsilon\b/&epsilon;/g;
- s/\\([eE]psilon)\b/&$1;/g;
- s/\\([zZ]eta)\b/&$1;/g;
- s/\\([eE]ta)\b/&$1;/g;
- s/\\([tT]heta)\b/&$1;/g;
- s/\\vartheta\b/&theta;/g;
- s/\\([iI]ota)\b/&$1;/g;
- s/\\([kK]appa)\b/&$1;/g;
- s/\\([lL]ambda)\b/&$1;/g;
- s/\\([mM]u)\b/&$1;/g;
- s/\\([nN]u)\b/&$1;/g;
- s/\\([xX]i)\b/&$1;/g;
- s/\\([oO]micron)\b/&$1;/g;
- s/\\([pP]i)\b/&$1;/g;
- s/\\varpi\b/&pi;/g;
- s/\\([rR]ho)\b/&$1;/g;
- s/\\varrho\b/&rho;/g;
- s/\\([sS]igma)\b/&$1;/g;
- s/\\varsigma\b/&sigmaf;/g;
- s/\\([tT]au)\b/&$1;/g;
- s/\\([uU]psilon)\b/&$1;/g;
- s/\\([pP]hi)\b/&$1;/g;
- s/\\varphi\b/&phi;/g;
- s/\\([cC]hi)\b/&$1;/g;
- s/\\([pP]si)\b/&$1;/g;
- s/\\([oO]mega)\b/&$1;/g;
-}
-foreach (@ARGV) {
- if (/\.bib$/) {
- $bibfile = $_;
- $bibfile =~ s/\.bib$//;
- push(@bibfiles,$bibfile);
- } else {
- $htmlfile = $_;
- }
-}
-exit(1) unless defined($htmlfile);
-$bibdatacmd="\\bibdata{".join(',',@bibfiles)."}";
-$label_style = $LABEL_NUMBERED;
-$bstfile = "doxygen";
-umask(077);
-open(HTMLFILE,">$htmlfile$$");
-if (open(OHTMLFILE, "$htmlfile")) {
- $mode = (stat OHTMLFILE)[2] & 0xfff;
-} else {
- print "Error opening $htmlfile\n";
- exit(1);
-}
-$beginstring = "<!-- BEGIN CITATIONS -->";
-$endstring = "<!-- END CITATIONS -->";
-@citations = ();
-loop:
-while (<OHTMLFILE>) {
- print HTMLFILE;
- last loop if m/^$beginstring$/;
-}
-loop:
-while (<OHTMLFILE>) {
- print HTMLFILE;
- last loop if m/^$endstring$/;
- push(@citations, $2) if m/^([^\\]*)?(.+\})(.*)?$/;
-}
-push(@citations, $bibdatacmd);
-$auxfile = "bib$$";
-push(@tmpfiles, "$auxfile.aux");
-open(AUXFILE, ">$auxfile" . ".aux");
-print AUXFILE "\\relax\n\\bibstyle{$bstfile}\n";
-foreach $citation (@citations) {
- print AUXFILE "$citation\n";
-}
-close(AUXFILE);
-push(@tmpfiles, "$auxfile.blg");
-push(@tmpfiles, "$auxfile.bbl");
-`bibtex $auxfile 2>&1`;
-if ($?==-1)
-{
- print "bibtex command failed: $!\n";
-}
-$beginstring = "<!-- BEGIN BIBLIOGRAPHY -->";
-$endstring = "<!-- END BIBLIOGRAPHY -->";
-loop:
-while (<OHTMLFILE>) {
- last loop if m/^$beginstring$/;
- print HTMLFILE;
-}
-loop:
-while (<OHTMLFILE>) {
- last loop if m/^$endstring$/;
-}
-print HTMLFILE "$beginstring\n";
-$t = $auxfile . ".bbl";
-$/ = "";
-open(BBLFILE, "<$t") || die "error opening $t: $!\n";
-$nentry = 0;
-loop:
-while (<BBLFILE>) {
- if (($nentry == 0) && (m/^#/)) {
- if ((m/#\s*label-style:\s*(\S+)/) && (! defined $label_style)) {
- $label_style = $label_styles{$1};
- if (! defined $label_style) {
- print STDERR "label style unknown: \n";
- next loop;
- }
- }
- next loop;
- }
- $nentry++;
- ($bcite, $blabel) = m+<dt><a name=\"([^\"]*)\">\[([^\]]*)\]</a></dt><dd>+;
- $blabel = "$nentry";
- $bibcite{$bcite} = $blabel;
-}
-close(BBLFILE);
-$label_style = $LABEL_DEFAULT if (! defined $label_style);
-$list_start = $list_start[$label_style];
-$list_end = $list_end[$label_style];
-print HTMLFILE "<$list_start>\n\n";
-open(BBLFILE, "<$t") || die "error opening $t: $!\n";
-$nentry = 0;
-loop:
-while (<BBLFILE>) {
- next loop if (($nentry == 0) && (m/^#/));
- $nentry++;
- s/\\\{/\002/g;
- s/\\\}/\003/g;
- s/\\\$/\004/g;
- {
- local ($c, $l, $z) = (0, 0, ());
- s/([\{\}])/join("","\001",($1 eq "\{" ? $z[$l++]=$c++ : $z[--$l]),$1)/ge;
- }
- s/\%\n//g;
- s/(\.(<\/cite>|<\/a>|\')+)\./$1/g;
- s:(<dt><a name=\"[^\"]*\">\[)[^\]]*(\]</a></dt><dd>):$1$nentry$2:;
- while (m/(\\(cite(label)?)(\001\d+)\{([^\001]+)\4\})/) {
- $old = $1;
- $cmd = $2;
- $doxref = defined($3);
- $bcite = $5;
- if (! defined $bibcite{$bcite}) {
- $blabel = " [" . $bcite . "]";
- } elsif ($doxref) {
- $blabel = " <a href=\"#$bcite\">[" . $bibcite{$bcite} . "]<\/a>";
- } else {
- $blabel = " [" . $bibcite{$bcite} . "]";
- }
- $old =~ s/(\W)/\\$1/g;
- s/\s*$old/$blabel/g;
- }
- s/In (<a href=\"[^\"]*\">)([^\[]+) \[(\2)/In $1\[$2/;
- s/\\htmladdnormallink(foot)?(\001\d+)\{([^\001]+)\2\}(\001\d+)\{([^\001]+)\4\}/<a href="$5">$3<\/a>/gs;
- s/\&amp;/\005/g;
- s/\\?&/&amp;/g;
- s/\005/&amp;/g;
- html_ent();
- while (m/\\char([\'\"]?[0-9a-fA-F]+)/) {
- $o = $r = $1;
- if ($r =~ s/^\'//) {
- $r = oct($r);
- } elsif ($r =~ s/^\"//) {
- $r = hex($r);
- }
- s/\\char$o\s*/&#$r;/g;
- }
- s/{\\etalchar\001(\d+)\{(.)}\001\1\}/$2/g;
- s/\\par\b/<p \/>/g;
- s/\\url(\001\d+)\{(.*)\1\}/<a href="$2">$2<\/a>/gs;
- s/\\href(\001\d+)\{(.*)\1\}(\001\d+)\{([^\001]*)\3\}/<a href="$2">$4<\/a>/gs;
- s/\\href(\001\d+)\{(.*)\1\}/<a href="$2">$2<\/a>/gs;
- s/(\001\d+)\{\\rm\s+(.*)\1\}/$2/gs;
- s/\\textrm(\001\d+)\{(.*)\1\}/$2/gs;
- s/(\001\d+)\{\\em\s+(.*)\1\}/<em>$2<\/em>/gs;
- s/(\001\d+)\{\\it\s+(.*)\1\}/<i>$2<\/i>/gs;
- s/(\001\d+)\{\\bf\s+(.*)\1\}/<b>$2<\/b>/gs;
- s/(\001\d+)\{\\tt\s+(.*)\1\}/<tt>$2<\/tt>/gs;
- s/\\emph(\001\d+)\{(.*)\1\}/<em>$2<\/em>/gs;
- s/\\textit(\001\d+)\{(.*)\1\}/<i>$2<\/i>/gs;
- s/\\textbf(\001\d+)\{(.*)\1\}/<b>$2<\/b>/gs;
- s/\\texttt(\001\d+)\{(.*)\1\}/<tt>$2<\/tt>/gs;
- s/\\mathrm(\001\d+)\{(.*)\1\}/$2/gs;
- s/\\mathnormal(\001\d+)\{(.*)\1\}/$2/gs;
- s/\\mathsf(\001\d+)\{(.*)\1\}/$2/gs;
- s/\\mathbf(\001\d+)\{(.*)\1\}/<b>$2<\/b>/gs;
- s/\\mathcal(\001\d+)\{(.*)\1\}/<i>$2<\/i>/gs;
- s/\\mathit(\001\d+)\{(.*)\1\}/<i>$2<\/i>/gs;
- s/\\mathtt(\001\d+)\{(.*)\1\}/<tt>$2<\/tt>/gs;
- s/\\bibxhtmlname(\001\d+)\{(.*)\1\}/$2/ges;
- sub domath {
- local($t) = @_;
- $t =~ s/\^(\001\d+)\{\\circ\1\}/\&\#176;/gs;
- $t =~ s/\^\\circ/\&\#176;/g;
- $t =~ s/\^(\001\d+)\{(.*)\1\}/<sup>$2<\/sup>/gs;
- $t =~ s/\^(\w)/<sup>$1<\/sup>/g;
- $t =~ s/\_(\001\d+)\{(.*)\1\}/<sub>$2<\/sub>/gs;
- $t =~ s/\_(\w)/<sub>$1<\/sub>/g;
- $t;
- }
- s/(\$([^\$]+)\$)/&domath($2)/ge;
- s/(\\\((([^\\]|\\[^\(\)])+)\\\))/&domath($2)/ge;
- s/\\mbox(\001\d+)\{(.*)\1\}/$2/gs;
- while (s/(\<a href\=\"[^"]*?)\~/$1\005/g) { ; }
- s/([^\\])~/$1&nbsp;/g;
- s/\\\,/&thinsp;/g;
- s/\\ldots\b/&hellip;/g;
- s/\\dots\b/&hellip;/g;
- s/\005/\~/g;
- s/\\ / /g;
- s/\\textasciitilde\b\s*/~/g;
- s/\\([\#\&\%\~\_\^\|])/$1/g;
- s/\\\W//g;
- s/\001(\d+)\{\\[A-Za-z]+\001(\d+)\{([^\001]*)\001\2\}\001\1\}/$3/g;
- s/\\([A-Za-z]+)/ $1 /g;
- s+In <a href=\"[^\"]*\"></a>++;
- s/\001\d+[\{\}]//gs;
- tr/\002\003\004/{}$/;
- print HTMLFILE $_;
-}
-close(BBLFILE);
-print HTMLFILE "<$list_end>\n\n$endstring\n";
-while (<OHTMLFILE>) {
- print HTMLFILE;
-}
-close (OHTMLFILE);
-close(HTMLFILE);
-chmod($mode, "$htmlfile$$");
-rename("$htmlfile$$", $htmlfile);
-unlink(@tmpfiles);
-exit(0);
diff --git a/trunk/src/bufstr.h b/trunk/src/bufstr.h
deleted file mode 100644
index 2945b5b..0000000
--- a/trunk/src/bufstr.h
+++ /dev/null
@@ -1,118 +0,0 @@
-/******************************************************************************
- *
- *
- *
- *
- * Copyright (C) 1997-2012 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.
- *
- */
-#ifndef _BUFSTR_H
-#define _BUFSTR_H
-
-#include "qtbc.h"
-#include <stdio.h>
-#include <stdlib.h>
-
-/*! @brief Buffer used to store strings
- *
- * This buffer is used append characters and strings. It will automatically
- * resize itself, yet provide efficient random access to the content.
- */
-class BufStr
-{
- public:
- BufStr(int size)
- : m_size(size), m_writeOffset(0), m_spareRoom(10240), m_buf(0)
- {
- m_buf = (char *)malloc(size);
- }
- ~BufStr()
- {
- free(m_buf);
- }
- void addChar(char c)
- {
- makeRoomFor(1);
- m_buf[m_writeOffset++]=c;
- }
- void addArray(const char *a,int len)
- {
- makeRoomFor(len);
- memcpy(m_buf+m_writeOffset,a,len);
- m_writeOffset+=len;
- }
- void skip(uint s)
- {
- makeRoomFor(s);
- m_writeOffset+=s;
- }
- void shrink( uint newlen )
- {
- m_writeOffset=newlen;
- resize(newlen);
- }
- void resize( uint newlen )
- {
- m_size=newlen;
- if (m_writeOffset>=m_size) // offset out of range -> enlarge
- {
- m_size=m_writeOffset+m_spareRoom;
- }
- m_buf = (char *)realloc(m_buf,m_size);
- }
- int size() const
- {
- return m_size;
- }
- char *data() const
- {
- return m_buf;
- }
- char &at(uint i) const
- {
- return m_buf[i];
- }
- bool isEmpty() const
- {
- return m_writeOffset==0;
- }
- operator const char *() const
- {
- return m_buf;
- }
- uint curPos() const
- {
- return m_writeOffset;
- }
- void dropFromStart(uint bytes)
- {
- if (bytes>m_size) bytes=m_size;
- if (bytes>0) qmemmove(m_buf,m_buf+bytes,m_size-bytes);
- m_size-=bytes;
- m_writeOffset-=bytes;
- }
- private:
- void makeRoomFor(uint size)
- {
- if (m_writeOffset+size>=m_size)
- {
- resize(m_size+size+m_spareRoom);
- }
- }
- uint m_size;
- uint m_writeOffset;
- const int m_spareRoom; // 10Kb extra room to avoid frequent resizing
- char *m_buf;
-};
-
-
-#endif
diff --git a/trunk/src/cite.cpp b/trunk/src/cite.cpp
deleted file mode 100644
index 96e88ae..0000000
--- a/trunk/src/cite.cpp
+++ /dev/null
@@ -1,254 +0,0 @@
-/******************************************************************************
- *
- * Copyright (C) 2011 by Dimitri van Heesch
- * Based on a patch by David Munger
- *
- * 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.
- *
- */
-
-#include "cite.h"
-#include "portable.h"
-#include "config.h"
-#include "message.h"
-#include "util.h"
-#include "language.h"
-#include "ftextstream.h"
-#include <qdir.h>
-
-//--------------------------------------------------------------------------
-
-static const char *doxygen_bst =
-#include "doxygen_bst.h"
-;
-
-static const char *bib2xhtml_pl =
-#include "bib2xhtml.h"
-;
-
-//--------------------------------------------------------------------------
-
-const QCString CiteConsts::fileName("citelist");
-const QCString CiteConsts::anchorPrefix("CITEREF_");
-
-//--------------------------------------------------------------------------
-
-CiteDict::CiteDict(int size) : m_entries(size, FALSE)
-{
- m_entries.setAutoDelete(TRUE);
-}
-
-static QCString getListOfBibFiles(const QCString &sep,bool stripExtension)
-{
- QCString result;
- QStrList &citeDataList = Config_getList("CITE_BIB_FILES");
- const char *bibdata = citeDataList.first();
- while (bibdata)
- {
- int i;
- QCString bibFile = bibdata;
- if (stripExtension && bibFile.right(4)==".bib")
- {
- bibFile = bibFile.left(bibFile.length()-4);
- }
- if (stripExtension && (i=bibFile.findRev('/'))!=-1)
- {
- bibFile = bibFile.mid(i+1);
- }
- if (!bibFile.isEmpty())
- {
- result+=bibFile;
- bibdata = citeDataList.next();
- if (bibdata)
- {
- result+=sep;
- }
- }
- else
- {
- bibdata = citeDataList.next();
- }
- }
- return result;
-}
-
-void CiteDict::writeLatexBibliography(FTextStream &t)
-{
- if (m_entries.count()==0) return;
- QCString style = Config_getString("LATEX_BIB_STYLE");
- if (style.isEmpty()) style="plain";
- t << "\\newpage \\bibliographystyle{" << style << "}" << endl;
- t << "\\bibliography{" << getListOfBibFiles(",",TRUE) << "}" << endl;
-}
-
-void CiteDict::insert(const char *label)
-{
- m_entries.insert(label,new CiteInfo(label));
-}
-
-CiteInfo *CiteDict::find(const char *label) const
-{
- return label ? m_entries.find(label) : 0;
-}
-
-void CiteDict::clear()
-{
- m_entries.clear();
-}
-
-bool CiteDict::isEmpty() const
-{
- QStrList &citeBibFiles = Config_getList("CITE_BIB_FILES");
- return (citeBibFiles.count()==0 || m_entries.isEmpty());
-}
-
-void CiteDict::generatePage() const
-{
- //printf("** CiteDict::generatePage() count=%d\n",m_ordering.count());
-
- // do not generate an empty citations page
- if (isEmpty()) return; // nothing to cite
-
- // 1. generate file with markers and citations to OUTPUT_DIRECTORY
- QFile f;
- QCString outputDir = Config_getString("OUTPUT_DIRECTORY");
- QCString citeListFile = outputDir+"/citelist.doc";
- f.setName(citeListFile);
- if (!f.open(IO_WriteOnly))
- {
- err("error: could not open file %s for writing\n",citeListFile.data());
- }
- FTextStream t(&f);
- t << "<!-- BEGIN CITATIONS -->" << endl;
- t << "<!--" << endl;
- QDictIterator<CiteInfo> it(m_entries);
- CiteInfo *ci;
- for (it.toFirst();(ci=it.current());++it)
- {
- t << "\\citation{" << ci->label << "}" << endl;
- }
- t << "-->" << endl;
- t << "<!-- END CITATIONS -->" << endl;
- t << "<!-- BEGIN BIBLIOGRAPHY -->" << endl;
- t << "<!-- END BIBLIOGRAPHY -->" << endl;
- f.close();
-
- // 2. generate bib2xhtml
- QCString bib2xhtmlFile = outputDir+"/bib2xhtml.pl";
- f.setName(bib2xhtmlFile);
- QCString bib2xhtml = bib2xhtml_pl;
- if (!f.open(IO_WriteOnly))
- {
- err("error: could not open file %s for writing\n",bib2xhtmlFile.data());
- }
- f.writeBlock(bib2xhtml, bib2xhtml.length());
- f.close();
-
- // 3. generate doxygen.bst
- QCString doxygenBstFile = outputDir+"/doxygen.bst";
- QCString bstData = doxygen_bst;
- f.setName(doxygenBstFile);
- if (!f.open(IO_WriteOnly))
- {
- err("error: could not open file %s for writing\n",doxygenBstFile.data());
- }
- f.writeBlock(bstData, bstData.length());
- f.close();
-
- // 4. run bib2xhtml perl script on the generated file which will insert the
- // bibliography in citelist.doc
- portable_system("perl",bib2xhtmlFile+" "+getListOfBibFiles(" ",FALSE)+" "+
- citeListFile);
-
- // 5. read back the file
- f.setName(citeListFile);
- if (!f.open(IO_ReadOnly))
- {
- err("error: could not open file %s/citelist.doc for reading\n",outputDir.data());
- }
- bool insideBib=FALSE;
-
- QCString doc;
- QFileInfo fi(citeListFile);
- QCString input(fi.size()+1);
- f.readBlock(input.data(),fi.size());
- input.at(fi.size())='\0';
- int p=0,s;
- //printf("input=[%s]\n",input.data());
- while ((s=input.find('\n',p))!=-1)
- {
- QCString line = input.mid(p,s-p);
- //printf("p=%d s=%d line=[%s]\n",p,s,line.data());
- p=s+1;
-
- if (line.find("<!-- BEGIN BIBLIOGRAPHY")!=-1) insideBib=TRUE;
- else if (line.find("<!-- END BIBLIOGRAPH")!=-1) insideBib=FALSE;
- else if (insideBib) doc+=line+"\n";
- int i;
- // determine text to use at the location of the @cite command
- if (insideBib && (i=line.find("<a name=\"CITEREF_"))!=-1)
- {
- int j=line.find("\">[");
- int k=line.find("]</a>");
- if (j!=-1 && k!=-1)
- {
- QCString label = line.mid(i+17,j-i-17);
- QCString number = line.mid(j+2,k-j-1);
- CiteInfo *ci = m_entries.find(label);
- //printf("label='%s' number='%s' => %p\n",label.data(),number.data(),ci);
- if (ci)
- {
- ci->text = number;
- }
- }
- }
- }
- //printf("doc=[%s]\n",doc.data());
-
- // 6. add it as a page
- addRelatedPage(CiteConsts::fileName,
- theTranslator->trCiteReferences(),doc,0,CiteConsts::fileName,1,0,0,0);
-
- // 7. for latex we just copy the bib files to the output and let
- // latex do this work.
- if (Config_getBool("GENERATE_LATEX"))
- {
- // copy bib files to the latex output dir
- QStrList &citeDataList = Config_getList("CITE_BIB_FILES");
- QCString latexOutputDir = Config_getString("LATEX_OUTPUT")+"/";
- const char *bibdata = citeDataList.first();
- while (bibdata)
- {
- QCString bibFile = bibdata;
- if (!bibFile.isEmpty() && bibFile.right(4)!=".bib") bibFile+=".bib";
- QFileInfo fi(bibFile);
- if (fi.exists())
- {
- if (!bibFile.isEmpty())
- {
- copyFile(bibFile,latexOutputDir+fi.fileName().data());
- }
- }
- else
- {
- err("Error: bib file %s not found!\n",bibFile.data());
- }
- bibdata = citeDataList.next();
- }
- }
-
- // 8. Remove temporary files
- QDir thisDir;
- thisDir.remove(citeListFile);
- thisDir.remove(doxygenBstFile);
- thisDir.remove(bib2xhtmlFile);
-
-}
-
diff --git a/trunk/src/cite.h b/trunk/src/cite.h
deleted file mode 100644
index 10fc56e..0000000
--- a/trunk/src/cite.h
+++ /dev/null
@@ -1,100 +0,0 @@
-/******************************************************************************
- *
- *
- *
- * Copyright (C) 2011 by Dimitri van Heesch
- * Based on a patch by David Munger
- *
- * 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.
- *
- */
-
-#ifndef CITEDB_H
-#define CITEDB_H
-
-#include "qtbc.h"
-#include <qdict.h>
-#include <qlist.h>
-
-class FTextStream;
-
-/// String constants for citations
-struct CiteConsts
-{
- static const QCString fileName;
- static const QCString anchorPrefix;
-};
-
-/// Citation-related data.
-struct CiteInfo
-{
- CiteInfo(const char *label_, const char *text_=0, const char *fullText_=0,
- const char *ref_=0) :
- label(label_), text(text_), fullText(fullText_), ref(ref_)
- { }
-
- CiteInfo(const CiteInfo &o)
- { label=o.label.copy(); text=o.text.copy(); fullText=o.fullText.copy(); ref=o.ref.copy(); }
-
- QCString label;
- QCString text;
- QCString fullText;
- QCString ref;
-
-};
-
-/**
- * @brief Cite database access class.
- * @details This class provides access do the database of bibliographic
- * references through the bibtex backend.
- */
-class CiteDict
-{
- public:
- /** Create the database, with an expected maximum of \a size entries */
- CiteDict(int size);
-
-// /** Resolve references to citations */
-// void resolve();
-
- /** Insert a citation identified by \a label into the database */
- void insert(const char *label);
-
- /** Return the citation info for a given \a label */
- CiteInfo *find(const char *label) const;
-
- /** Generate the citations page */
- void generatePage() const;
-
- /** clears the database */
- void clear();
-
- /** return TRUE if there are no citations.
- * Only valid after calling resolve()
- */
- bool isEmpty() const;
-
- /** writes the latex code for the standard bibliography
- * section to text stream \a t
- */
- void writeLatexBibliography(FTextStream &t);
-
- private:
-// bool writeAux();
-// bool writeBst();
-// bool execute();
-// void parse();
-// void clean();
- QDict<CiteInfo> m_entries;
-// QList<QCString> m_ordering;
- QCString m_baseFileName;
-};
-
-#endif
diff --git a/trunk/src/classdef.cpp b/trunk/src/classdef.cpp
deleted file mode 100644
index 5e91836..0000000
--- a/trunk/src/classdef.cpp
+++ /dev/null
@@ -1,4022 +0,0 @@
-/******************************************************************************
- *
- *
- *
- * Copyright (C) 1997-2012 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.
- *
- */
-
-#include <stdio.h>
-#include <qfile.h>
-#include <qregexp.h>
-#include "classdef.h"
-#include "classlist.h"
-#include "entry.h"
-#include "doxygen.h"
-#include "membername.h"
-#include "message.h"
-#include "config.h"
-#include "util.h"
-#include "diagram.h"
-#include "language.h"
-#include "htmlhelp.h"
-#include "example.h"
-#include "outputlist.h"
-#include "dot.h"
-#include "defargs.h"
-#include "debug.h"
-#include "docparser.h"
-#include "searchindex.h"
-#include "vhdldocgen.h"
-#include "layout.h"
-#include "arguments.h"
-
-//-----------------------------------------------------------------------------
-
-//static inline MemberList *createNewMemberList(MemberList::ListType lt)
-//{
-// MemberList *result = new MemberList(lt);
-// return result;
-//}
-
-class ClassDefImpl
-{
- public:
- ClassDefImpl();
- ~ClassDefImpl();
- void init(const char *defFileName, const char *name,
- const QCString &ctStr, const char *fName);
-
- /*! file name that forms the base for the output file containing the
- * class documentation. For compatibility with Qt (e.g. links via tag
- * files) this name cannot be derived from the class name directly.
- */
- QCString fileName;
-
- /*! Include information about the header file should be included
- * in the documentation. 0 by default, set by setIncludeFile().
- */
- IncludeInfo *incInfo;
-
- /*! List of base class (or super-classes) from which this class derives
- * directly.
- */
- BaseClassList *inherits;
-
- /*! List of sub-classes that directly derive from this class
- */
- BaseClassList *inheritedBy;
-
- /*! Namespace this class is part of
- * (this is the inner most namespace in case of nested namespaces)
- */
- NamespaceDef *nspace;
-
- /*! File this class is defined in */
- FileDef *fileDef;
-
- /*! List of all members (including inherited members) */
- MemberNameInfoSDict *allMemberNameInfoSDict;
-
- /*! Template arguments of this class */
- ArgumentList *tempArgs;
-
- /*! Type constraints for template parameters */
- ArgumentList *typeConstraints;
-
- /*! Files that were used for generating the class documentation. */
- QStrList files;
-
- /*! Examples that use this class */
- ExampleSDict *exampleSDict;
-
- /*! Holds the kind of "class" this is. */
- ClassDef::CompoundType compType;
-
- /*! The protection level in which this class was found.
- * Typically Public, but for nested classes this can also be Protected
- * or Private.
- */
- Protection prot;
-
- /*! The inner classes contained in this class. Will be 0 if there are
- * no inner classes.
- */
- ClassSDict *innerClasses;
-
- /* classes for the collaboration diagram */
- UsesClassDict *usesImplClassDict;
- UsesClassDict *usedByImplClassDict;
- UsesClassDict *usesIntfClassDict;
-
- /*! Template instances that exists of this class, the key in the
- * dictionary is the template argument list.
- */
- QDict<ClassDef> *templateInstances;
-
- /*! Template instances that exists of this class, as defined by variables.
- * We do NOT want to document these individually. The key in the
- * dictionary is the template argument list.
- */
- QDict<ClassDef> *variableInstances;
-
- QDict<int> *templBaseClassNames;
-
- /*! The class this class is an instance of. */
- ClassDef *templateMaster;
-
- /*! local class name which could be a typedef'ed alias name. */
- QCString className;
-
- /*! If this class is a Objective-C category, then this points to the
- * class which is extended.
- */
- ClassDef *categoryOf;
-
- QList<MemberList> memberLists;
-
- /* user defined member groups */
- MemberGroupSDict *memberGroupSDict;
-
- /*! Is this an abstact class? */
- bool isAbstract;
-
- /*! Is the class part of an unnamed namespace? */
- bool isStatic;
-
- /*! TRUE if classes members are merged with those of the base classes. */
- bool membersMerged;
-
- /*! TRUE if the class is defined in a source file rather than a header file. */
- bool isLocal;
-
- bool isTemplArg;
-
- /*! Does this class group its user-grouped members
- * as a sub-section of the normal (public/protected/..)
- * groups?
- */
- bool subGrouping;
-
- /** Reason of existance is a "use" relation */
- bool usedOnly;
-
- /** List of titles to use for the summary */
- SDict<QCString> vhdlSummaryTitles;
-
- /** Is this a simple (non-nested) C structure? */
- bool isSimple;
-
- /** Does this class overloaded the -> operator? */
- MemberDef *arrowOperator;
-
- ClassList *taggedInnerClasses;
- ClassDef *tagLessRef;
-
- /** Does this class represent a Java style enum? */
- bool isJavaEnum;
-};
-
-void ClassDefImpl::init(const char *defFileName, const char *name,
- const QCString &ctStr, const char *fName)
-{
- if (fName)
- {
- fileName=stripExtension(fName);
- }
- else
- {
- fileName=ctStr+name;
- }
- exampleSDict = 0;
- inherits = 0;
- inheritedBy = 0;
- allMemberNameInfoSDict = 0;
- incInfo=0;
- tempArgs=0;
- typeConstraints=0;
- prot=Public;
- nspace=0;
- fileDef=0;
- usesImplClassDict=0;
- usedByImplClassDict=0;
- usesIntfClassDict=0;
- memberGroupSDict = 0;
- innerClasses = 0;
- subGrouping=Config_getBool("SUBGROUPING");
- templateInstances = 0;
- variableInstances = 0;
- templateMaster =0;
- templBaseClassNames = 0;
- isAbstract = FALSE;
- isStatic = FALSE;
- isTemplArg = FALSE;
- membersMerged = FALSE;
- categoryOf = 0;
- usedOnly = FALSE;
- isSimple = Config_getBool("INLINE_SIMPLE_STRUCTS");
- arrowOperator = 0;
- taggedInnerClasses = 0;
- tagLessRef = 0;
- //QCString ns;
- //extractNamespaceName(name,className,ns);
- //printf("m_name=%s m_className=%s ns=%s\n",m_name.data(),m_className.data(),ns.data());
-
- // we cannot use getLanguage at this point, as setLanguage has not been called.
- SrcLangExt lang = getLanguageFromFileName(defFileName);
- if ((lang==SrcLangExt_Cpp || lang==SrcLangExt_ObjC) &&
- guessSection(defFileName)==Entry::SOURCE_SEC)
- {
- isLocal=TRUE;
- }
- else
- {
- isLocal=FALSE;
- }
-}
-
-ClassDefImpl::ClassDefImpl() : vhdlSummaryTitles(17)
-{
- vhdlSummaryTitles.setAutoDelete(TRUE);
-}
-
-ClassDefImpl::~ClassDefImpl()
-{
- delete inherits;
- delete inheritedBy;
- delete allMemberNameInfoSDict;
- delete exampleSDict;
- delete usesImplClassDict;
- delete usedByImplClassDict;
- delete usesIntfClassDict;
- delete incInfo;
- delete memberGroupSDict;
- delete innerClasses;
- delete templateInstances;
- delete variableInstances;
- delete templBaseClassNames;
- delete tempArgs;
- delete typeConstraints;
- delete taggedInnerClasses;
-}
-
-// constructs a new class definition
-ClassDef::ClassDef(
- const char *defFileName,int defLine,
- const char *nm,CompoundType ct,
- const char *lref,const char *fName,
- bool isSymbol,bool isJavaEnum)
- : Definition(defFileName,defLine,removeRedundantWhiteSpace(nm),0,0,isSymbol)
-{
- visited=FALSE;
- setReference(lref);
- m_impl = new ClassDefImpl;
- m_impl->compType = ct;
- m_impl->isJavaEnum = isJavaEnum;
- m_impl->init(defFileName,name(),compoundTypeString(),fName);
-}
-
-// destroy the class definition
-ClassDef::~ClassDef()
-{
- delete m_impl;
-}
-
-QCString ClassDef::getMemberListFileName() const
-{
- return convertNameToFile(compoundTypeString()+name()+"-members");
-}
-
-QCString ClassDef::displayName() const
-{
- //static bool optimizeOutputForJava = Config_getBool("OPTIMIZE_OUTPUT_JAVA");
- SrcLangExt lang = getLanguage();
- //static bool vhdlOpt = Config_getBool("OPTIMIZE_OUTPUT_VHDL");
- QCString n;
- if (lang==SrcLangExt_VHDL)
- {
- n = VhdlDocGen::getClassName(this);
- }
- else
- {
- n=qualifiedNameWithTemplateParameters();
- }
- QCString sep=getLanguageSpecificSeparator(lang);
- if (sep!="::")
- {
- n=substitute(n,"::",sep);
- }
- if (m_impl->compType==ClassDef::Protocol && n.right(2)=="-p")
- {
- n="<"+n.left(n.length()-2)+">";
- }
- else if (n.right(2)=="-g")
- {
- n = n.left(n.length()-2);
- }
- //printf("ClassDef::displayName()=%s\n",n.data());
- return n;
-}
-
-// inserts a base class in the inheritance list
-void ClassDef::insertBaseClass(ClassDef *cd,const char *n,Protection p,
- Specifier s,const char *t)
-{
- //printf("*** insert base class %s into %s\n",cd->name().data(),name().data());
- //inherits->inSort(new BaseClassDef(cd,p,s,t));
- if (m_impl->inherits==0)
- {
- m_impl->inherits = new BaseClassList;
- m_impl->inherits->setAutoDelete(TRUE);
- }
- m_impl->inherits->append(new BaseClassDef(cd,n,p,s,t));
- m_impl->isSimple = FALSE;
-}
-
-// inserts a sub class in the inherited list
-void ClassDef::insertSubClass(ClassDef *cd,Protection p,
- Specifier s,const char *t)
-{
- //printf("*** insert sub class %s into %s\n",cd->name().data(),name().data());
- if (m_impl->inheritedBy==0)
- {
- m_impl->inheritedBy = new BaseClassList;
- m_impl->inheritedBy->setAutoDelete(TRUE);
- }
- m_impl->inheritedBy->inSort(new BaseClassDef(cd,0,p,s,t));
- m_impl->isSimple = FALSE;
-}
-
-void ClassDef::addMembersToMemberGroup()
-{
- QListIterator<MemberList> mli(m_impl->memberLists);
- MemberList *ml;
- for (mli.toFirst();(ml=mli.current());++mli)
- {
- if ((ml->listType()&MemberList::detailedLists)==0)
- {
- ::addMembersToMemberGroup(ml,&m_impl->memberGroupSDict,this);
- }
- }
-
- // add members inside sections to their groups
- if (m_impl->memberGroupSDict)
- {
- MemberGroupSDict::Iterator mgli(*m_impl->memberGroupSDict);
- MemberGroup *mg;
- for (;(mg=mgli.current());++mgli)
- {
- if (mg->allMembersInSameSection() && m_impl->subGrouping)
- {
- //printf("addToDeclarationSection(%s)\n",mg->header().data());
- mg->addToDeclarationSection();
- }
- }
- }
-}
-
-// adds new member definition to the class
-void ClassDef::internalInsertMember(MemberDef *md,
- Protection prot,
- bool addToAllList
- )
-{
- //printf("insertInternalMember(%s) isHidden()=%d\n",md->name().data(),md->isHidden());
- if (md->isHidden()) return;
-
- if (getLanguage()==SrcLangExt_VHDL)
- {
- QCString title=VhdlDocGen::trVhdlType(md->getMemberSpecifiers(),FALSE);
- if (!m_impl->vhdlSummaryTitles.find(title))
- {
- m_impl->vhdlSummaryTitles.append(title,new QCString(title));
- }
- }
-
- if (1 /*!isReference()*/) // changed to 1 for showing members of external
- // classes when HAVE_DOT and UML_LOOK are enabled.
- {
- bool isSimple=FALSE;
-
- /********************************************/
- /* insert member in the declaration section */
- /********************************************/
- if (md->isRelated() && protectionLevelVisible(prot))
- {
- addMemberToList(MemberList::related,md,TRUE);
- }
- else if (md->isFriend())
- {
- addMemberToList(MemberList::friends,md,TRUE);
- }
- else
- {
- switch (md->memberType())
- {
- case MemberDef::Signal: // Qt specific
- addMemberToList(MemberList::signals,md,TRUE);
- break;
- case MemberDef::DCOP: // KDE2 specific
- addMemberToList(MemberList::dcopMethods,md,TRUE);
- break;
- case MemberDef::Property:
- addMemberToList(MemberList::properties,md,TRUE);
- break;
- case MemberDef::Event:
- addMemberToList(MemberList::events,md,TRUE);
- break;
- case MemberDef::Slot: // Qt specific
- switch (prot)
- {
- case Protected:
- case Package: // slots in packages are not possible!
- addMemberToList(MemberList::proSlots,md,TRUE);
- break;
- case Public:
- addMemberToList(MemberList::pubSlots,md,TRUE);
- break;
- case Private:
- addMemberToList(MemberList::priSlots,md,TRUE);
- break;
- }
- break;
- default: // any of the other members
- if (md->isStatic())
- {
- if (md->isVariable())
- {
- switch (prot)
- {
- case Protected:
- addMemberToList(MemberList::proStaticAttribs,md,TRUE);
- break;
- case Package:
- addMemberToList(MemberList::pacStaticAttribs,md,TRUE);
- break;
- case Public:
- addMemberToList(MemberList::pubStaticAttribs,md,TRUE);
- break;
- case Private:
- addMemberToList(MemberList::priStaticAttribs,md,TRUE);
- break;
- }
- }
- else // function
- {
- switch (prot)
- {
- case Protected:
- addMemberToList(MemberList::proStaticMethods,md,TRUE);
- break;
- case Package:
- addMemberToList(MemberList::pacStaticMethods,md,TRUE);
- break;
- case Public:
- addMemberToList(MemberList::pubStaticMethods,md,TRUE);
- break;
- case Private:
- addMemberToList(MemberList::priStaticMethods,md,TRUE);
- break;
- }
- }
- }
- else // not static
- {
- if (md->isVariable())
- {
- switch (prot)
- {
- case Protected:
- addMemberToList(MemberList::proAttribs,md,TRUE);
- break;
- case Package:
- addMemberToList(MemberList::pacAttribs,md,TRUE);
- break;
- case Public:
- addMemberToList(MemberList::pubAttribs,md,TRUE);
- isSimple=!md->isFunctionPtr();
- break;
- case Private:
- addMemberToList(MemberList::priAttribs,md,TRUE);
- break;
- }
- }
- else if (md->isTypedef() || md->isEnumerate() || md->isEnumValue())
- {
- switch (prot)
- {
- case Protected:
- addMemberToList(MemberList::proTypes,md,TRUE);
- break;
- case Package:
- addMemberToList(MemberList::pacTypes,md,TRUE);
- break;
- case Public:
- addMemberToList(MemberList::pubTypes,md,TRUE);
- break;
- case Private:
- addMemberToList(MemberList::priTypes,md,TRUE);
- break;
- }
- }
- else // member function
- {
- switch (prot)
- {
- case Protected:
- addMemberToList(MemberList::proMethods,md,TRUE);
- break;
- case Package:
- addMemberToList(MemberList::pacMethods,md,TRUE);
- break;
- case Public:
- addMemberToList(MemberList::pubMethods,md,TRUE);
- break;
- case Private:
- addMemberToList(MemberList::priMethods,md,TRUE);
- break;
- }
- }
- }
- break;
- }
- }
- if (!isSimple) // not a simple field -> not a simple struct
- {
- m_impl->isSimple = FALSE;
- }
- //printf("adding %s simple=%d total_simple=%d\n",name().data(),isSimple,m_impl->isSimple);
-
- /*******************************************************/
- /* insert member in the detailed documentation section */
- /*******************************************************/
- if ((md->isRelated() && protectionLevelVisible(prot)) || md->isFriend())
- {
- addMemberToList(MemberList::relatedMembers,md,FALSE);
- }
- else
- {
- switch (md->memberType())
- {
- case MemberDef::Property:
- addMemberToList(MemberList::propertyMembers,md,FALSE);
- break;
- case MemberDef::Event:
- addMemberToList(MemberList::eventMembers,md,FALSE);
- break;
- case MemberDef::Signal: // fall through
- case MemberDef::DCOP:
- addMemberToList(MemberList::functionMembers,md,FALSE);
- break;
- case MemberDef::Slot:
- if (protectionLevelVisible(prot))
- {
- addMemberToList(MemberList::functionMembers,md,FALSE);
- }
- break;
- default: // any of the other members
- if (protectionLevelVisible(prot))
- {
- switch (md->memberType())
- {
- case MemberDef::Typedef:
- addMemberToList(MemberList::typedefMembers,md,FALSE);
- break;
- case MemberDef::Enumeration:
- addMemberToList(MemberList::enumMembers,md,FALSE);
- break;
- case MemberDef::EnumValue:
- addMemberToList(MemberList::enumValMembers,md,FALSE);
- break;
- case MemberDef::Function:
- if (md->isConstructor() || md->isDestructor())
- {
- MemberList *ml = createMemberList(MemberList::constructors);
- ml->append(md);
- }
- else
- {
- addMemberToList(MemberList::functionMembers,md,FALSE);
- }
- break;
- case MemberDef::Variable:
- addMemberToList(MemberList::variableMembers,md,FALSE);
- break;
- default:
- err("Unexpected member type %d found!\n",md->memberType());
- }
- }
- break;
- }
- }
-
- /*************************************************/
- /* insert member in the appropriate member group */
- /*************************************************/
- // Note: this must be done AFTER inserting the member in the
- // regular groups
- //addMemberToGroup(md,groupId);
-
- }
-
- if (md->virtualness()==Pure)
- {
- m_impl->isAbstract=TRUE;
- }
-
- if (md->name()=="operator->")
- {
- m_impl->arrowOperator=md;
- }
-
- //::addClassMemberNameToIndex(md);
- if (addToAllList &&
- !(Config_getBool("HIDE_FRIEND_COMPOUNDS") &&
- md->isFriend() &&
- (QCString(md->typeString())=="friend class" ||
- QCString(md->typeString())=="friend struct" ||
- QCString(md->typeString())=="friend union")))
- {
- //printf("=======> adding member %s to class %s\n",md->name().data(),name().data());
- MemberInfo *mi = new MemberInfo((MemberDef *)md,
- prot,md->virtualness(),FALSE);
- MemberNameInfo *mni=0;
- if (m_impl->allMemberNameInfoSDict==0)
- {
- m_impl->allMemberNameInfoSDict = new MemberNameInfoSDict(17);
- m_impl->allMemberNameInfoSDict->setAutoDelete(TRUE);
- }
- if ((mni=m_impl->allMemberNameInfoSDict->find(md->name())))
- {
- mni->append(mi);
- }
- else
- {
- mni = new MemberNameInfo(md->name());
- mni->append(mi);
- m_impl->allMemberNameInfoSDict->append(mni->memberName(),mni);
- }
- }
-}
-
-void ClassDef::insertMember(MemberDef *md)
-{
- internalInsertMember(md,md->protection(),TRUE);
-}
-
-// compute the anchors for all members
-void ClassDef::computeAnchors()
-{
- ClassDef *context = Config_getBool("INLINE_INHERITED_MEMB") ? this : 0;
- const char *letters = "abcdefghijklmnopqrstuvwxyz0123456789";
- QListIterator<MemberList> mli(m_impl->memberLists);
- MemberList *ml;
- int index = 0;
- for (mli.toFirst();(ml=mli.current());++mli)
- {
- if ((ml->listType()&MemberList::detailedLists)==0)
- {
- setAnchors(context,letters[index++],ml);
- }
- }
-
- if (m_impl->memberGroupSDict)
- {
- MemberGroupSDict::Iterator mgli(*m_impl->memberGroupSDict);
- MemberGroup *mg;
- for (;(mg=mgli.current());++mgli)
- {
- mg->setAnchors(context);
- }
- }
-}
-
-void ClassDef::distributeMemberGroupDocumentation()
-{
- if (m_impl->memberGroupSDict)
- {
- MemberGroupSDict::Iterator mgli(*m_impl->memberGroupSDict);
- MemberGroup *mg;
- for (;(mg=mgli.current());++mgli)
- {
- mg->distributeMemberGroupDocumentation();
- }
- }
-}
-
-void ClassDef::findSectionsInDocumentation()
-{
- docFindSections(documentation(),this,0,docFile());
- if (m_impl->memberGroupSDict)
- {
- MemberGroupSDict::Iterator mgli(*m_impl->memberGroupSDict);
- MemberGroup *mg;
- for (;(mg=mgli.current());++mgli)
- {
- mg->findSectionsInDocumentation();
- }
- }
- QListIterator<MemberList> mli(m_impl->memberLists);
- MemberList *ml;
- for (mli.toFirst();(ml=mli.current());++mli)
- {
- if ((ml->listType()&MemberList::detailedLists)==0)
- {
- ml->findSectionsInDocumentation();
- }
- }
-}
-
-
-// add a file name to the used files set
-void ClassDef::insertUsedFile(const char *f)
-{
- if (m_impl->files.find(f)==-1) m_impl->files.append(f);
- if (m_impl->templateInstances)
- {
- QDictIterator<ClassDef> qdi(*m_impl->templateInstances);
- ClassDef *cd;
- for (qdi.toFirst();(cd=qdi.current());++qdi)
- {
- cd->insertUsedFile(f);
- }
- }
-}
-
-static void writeInheritanceSpecifier(OutputList &ol,BaseClassDef *bcd)
-{
- if (bcd->prot!=Public || bcd->virt!=Normal)
- {
- ol.startTypewriter();
- ol.docify(" [");
- QStrList sl;
- if (bcd->prot==Protected) sl.append("protected");
- else if (bcd->prot==Private) sl.append("private");
- if (bcd->virt==Virtual) sl.append("virtual");
- const char *s=sl.first();
- while (s)
- {
- ol.docify(s);
- s=sl.next();
- if (s) ol.docify(", ");
- }
- ol.docify("]");
- ol.endTypewriter();
- }
-}
-
-void ClassDef::setIncludeFile(FileDef *fd,
- const char *includeName,bool local, bool force)
-{
- //printf("ClassDef::setIncludeFile(%p,%s,%d,%d)\n",fd,includeName,local,force);
- if (!m_impl->incInfo) m_impl->incInfo=new IncludeInfo;
- if ((includeName && m_impl->incInfo->includeName.isEmpty()) ||
- (fd!=0 && m_impl->incInfo->fileDef==0)
- )
- {
- //printf("Setting file info\n");
- m_impl->incInfo->fileDef = fd;
- m_impl->incInfo->includeName = includeName;
- m_impl->incInfo->local = local;
- }
- if (force && includeName) m_impl->incInfo->includeName = includeName;
-}
-
-// TODO: fix this: a nested template class can have multiple outer templates
-//ArgumentList *ClassDef::outerTemplateArguments() const
-//{
-// int ti;
-// ClassDef *pcd=0;
-// int pi=0;
-// if (m_impl->tempArgs) return m_impl->tempArgs;
-// // find the outer most class scope
-// while ((ti=name().find("::",pi))!=-1 &&
-// (pcd=getClass(name().left(ti)))==0
-// ) pi=ti+2;
-// if (pcd)
-// {
-// return pcd->templateArguments();
-// }
-// return 0;
-//}
-
-static void searchTemplateSpecs(/*in*/ Definition *d,
- /*out*/ QList<ArgumentList> &result,
- /*out*/ QCString &name)
-{
- if (d->definitionType()==Definition::TypeClass)
- {
- if (d->getOuterScope())
- {
- searchTemplateSpecs(d->getOuterScope(),result,name);
- }
- ClassDef *cd=(ClassDef *)d;
- if (!name.isEmpty()) name+="::";
- QCString clName = d->localName();
- if (clName.right(2)=="-g" || clName.right(2)=="-p")
- {
- clName = clName.left(clName.length()-2);
- }
- name+=clName;
- bool isSpecialization = d->localName().find('<')!=-1;
- if (cd->templateArguments())
- {
- result.append(cd->templateArguments());
- if (!isSpecialization)
- {
- name+=tempArgListToString(cd->templateArguments());
- }
- }
- }
- else
- {
- name+=d->qualifiedName();
- }
-}
-
-static void writeTemplateSpec(OutputList &ol,Definition *d,
- const QCString &type)
-{
- QList<ArgumentList> specs;
- QCString name;
- searchTemplateSpecs(d,specs,name);
- if (specs.count()>0) // class has template scope specifiers
- {
- ol.startSubsubsection();
- QListIterator<ArgumentList> spi(specs);
- ArgumentList *al;
- for (spi.toFirst();(al=spi.current());++spi)
- {
- ol.docify("template<");
- Argument *a=al->first();
- while (a)
- {
- ol.docify(a->type);
- if (!a->name.isEmpty())
- {
- ol.docify(" ");
- ol.docify(a->name);
- }
- if (a->defval.length()!=0)
- {
- ol.docify(" = ");
- ol.docify(a->defval);
- }
- a=al->next();
- if (a) ol.docify(", ");
- }
- ol.docify(">");
- ol.pushGeneratorState();
- ol.disableAllBut(OutputGenerator::Html);
- ol.lineBreak();
- ol.popGeneratorState();
- }
- ol.docify(type.lower()+" "+name);
- ol.endSubsubsection();
- ol.writeString("\n");
- }
-}
-
-void ClassDef::writeBriefDescription(OutputList &ol,bool exampleFlag)
-{
- if (!briefDescription().isEmpty() && Config_getBool("BRIEF_MEMBER_DESC"))
- {
- ol.startParagraph();
- ol.parseDoc(briefFile(),briefLine(),this,0,
- briefDescription(),TRUE,FALSE,0,TRUE,FALSE);
- ol.pushGeneratorState();
- ol.disable(OutputGenerator::RTF);
- ol.writeString(" \n");
- ol.enable(OutputGenerator::RTF);
- ol.popGeneratorState();
-
- if (Config_getBool("REPEAT_BRIEF") ||
- !documentation().isEmpty() ||
- exampleFlag
- )
- {
- writeMoreLink(ol,anchor());
- }
-
- ol.endParagraph();
- }
- ol.writeSynopsis();
-}
-
-void ClassDef::writeDetailedDocumentationBody(OutputList &ol)
-{
- static bool repeatBrief = Config_getBool("REPEAT_BRIEF");
-
- ol.startTextBlock();
-
- if (getLanguage()==SrcLangExt_Cpp)
- {
- writeTemplateSpec(ol,this,compoundTypeString());
- }
-
- // repeat brief description
- if (!briefDescription().isEmpty() && repeatBrief)
- {
- ol.parseDoc(briefFile(),briefLine(),this,0,briefDescription(),FALSE,FALSE);
- }
- if (!briefDescription().isEmpty() && repeatBrief &&
- !documentation().isEmpty())
- {
- ol.pushGeneratorState();
- ol.disable(OutputGenerator::Html);
- ol.writeString("\n\n");
- ol.popGeneratorState();
- }
- // write documentation
- if (!documentation().isEmpty())
- {
- ol.parseDoc(docFile(),docLine(),this,0,documentation(),TRUE,FALSE);
- }
- // write type constraints
- writeTypeConstraints(ol,this,m_impl->typeConstraints);
-
- // write examples
- if (hasExamples() && m_impl->exampleSDict)
- {
- ol.startSimpleSect(BaseOutputDocInterface::Examples,0,0,theTranslator->trExamples()+": ");
- ol.startDescForItem();
- //ol.startParagraph();
- writeExample(ol,m_impl->exampleSDict);
- //ol.endParagraph();
- ol.endDescForItem();
- ol.endSimpleSect();
- }
- //ol.newParagraph();
- writeSourceDef(ol,name());
- ol.endTextBlock();
-}
-
-// write the detailed description for this class
-void ClassDef::writeDetailedDescription(OutputList &ol, const QCString &pageType, bool exampleFlag,
- const QCString &title,const QCString &anchor)
-{
- if ((!briefDescription().isEmpty() && Config_getBool("REPEAT_BRIEF")) ||
- !documentation().isEmpty() ||
- (Config_getBool("SOURCE_BROWSER") && getStartBodyLine()!=-1 && getBodyDef()) ||
- exampleFlag)
- {
- ol.writeRuler();
-
- ol.pushGeneratorState();
- ol.disableAllBut(OutputGenerator::Html);
- ol.writeAnchor(0,anchor.isEmpty() ? QCString("details") : anchor);
- ol.popGeneratorState();
-
- if (!anchor.isEmpty())
- {
- ol.pushGeneratorState();
- ol.disable(OutputGenerator::Html);
- ol.disable(OutputGenerator::Man);
- ol.writeAnchor(getOutputFileBase(),anchor);
- ol.popGeneratorState();
- }
-
- ol.startGroupHeader();
- ol.parseText(title);
- ol.endGroupHeader();
-
- writeDetailedDocumentationBody(ol);
-
- }
- else
- {
- writeTemplateSpec(ol,this,pageType);
- }
-}
-
-void ClassDef::showUsedFiles(OutputList &ol)
-{
- ol.pushGeneratorState();
- ol.disable(OutputGenerator::Man);
-
- SrcLangExt lang = getLanguage();
- ol.writeRuler();
- if (lang==SrcLangExt_Fortran)
- {
- ol.parseText(theTranslator->trGeneratedFromFilesFortran(
- getLanguage()==SrcLangExt_ObjC && m_impl->compType==Interface ? Class : m_impl->compType,
- m_impl->files.count()==1));
- }
- else if (isJavaEnum())
- {
- // TODO: TRANSLATE ME
- QCString s;
- if (m_impl->files.count()!=1) s="s";
- ol.parseText("The documentation for this enum was generated from the following file"+s+":");
- }
- else
- {
- ol.parseText(theTranslator->trGeneratedFromFiles(
- getLanguage()==SrcLangExt_ObjC && m_impl->compType==Interface ? Class : m_impl->compType,
- m_impl->files.count()==1));
- }
-
-
- bool first=TRUE;
- const char *file = m_impl->files.first();
- while (file)
- {
- bool ambig;
- FileDef *fd=findFileDef(Doxygen::inputNameDict,file,ambig);
- if (fd)
- {
- if (first)
- {
- first=FALSE;
- ol.startItemList();
- }
-
- ol.startItemListItem();
- QCString path=fd->getPath();
- if (Config_getBool("FULL_PATH_NAMES"))
- {
- ol.docify(stripFromPath(path));
- }
-
- QCString fname = fd->name();
- if (!fd->getVersion().isEmpty()) // append version if available
- {
- fname += " (" + fd->getVersion() + ")";
- }
-
- // for HTML
- ol.pushGeneratorState();
- ol.disableAllBut(OutputGenerator::Html);
- if (fd->generateSourceFile())
- {
- ol.writeObjectLink(0,fd->getSourceFileBase(),0,fname);
- }
- else if (fd->isLinkable())
- {
- ol.writeObjectLink(fd->getReference(),fd->getOutputFileBase(),0,
- fname);
- }
- else
- {
- ol.docify(fname);
- }
- ol.popGeneratorState();
-
- // for other output formats
- ol.pushGeneratorState();
- ol.disable(OutputGenerator::Html);
- if (fd->isLinkable())
- {
- ol.writeObjectLink(fd->getReference(),fd->getOutputFileBase(),0,
- fname);
- }
- else
- {
- ol.docify(fname);
- }
- ol.popGeneratorState();
-
- ol.endItemListItem();
- }
- file=m_impl->files.next();
- }
- if (!first) ol.endItemList();
-
- ol.popGeneratorState();
-}
-
-
-void ClassDef::writeInheritanceGraph(OutputList &ol)
-{
- // count direct inheritance relations
- int count=0;
- BaseClassDef *ibcd;
- if (m_impl->inheritedBy)
- {
- ibcd=m_impl->inheritedBy->first();
- while (ibcd)
- {
- ClassDef *icd=ibcd->classDef;
- if ( icd->isVisibleInHierarchy()) count++;
- ibcd=m_impl->inheritedBy->next();
- }
- }
- if (m_impl->inherits)
- {
- ibcd=m_impl->inherits->first();
- while (ibcd)
- {
- ClassDef *icd=ibcd->classDef;
- if ( icd->isVisibleInHierarchy()) count++;
- ibcd=m_impl->inherits->next();
- }
- }
-
-
- bool renderDiagram = FALSE;
- if (Config_getBool("HAVE_DOT") &&
- (Config_getBool("CLASS_DIAGRAMS") || Config_getBool("CLASS_GRAPH")))
- // write class diagram using dot
- {
- DotClassGraph inheritanceGraph(this,DotNode::Inheritance);
- if (!inheritanceGraph.isTrivial() && !inheritanceGraph.isTooBig())
- {
- ol.pushGeneratorState();
- ol.disable(OutputGenerator::Man);
- ol.startDotGraph();
- ol.parseText(theTranslator->trClassDiagram(displayName()));
- ol.endDotGraph(inheritanceGraph);
- ol.popGeneratorState();
- renderDiagram = TRUE;
- }
- }
- else if (Config_getBool("CLASS_DIAGRAMS") && count>0)
- // write class diagram using build-in generator
- {
- ClassDiagram diagram(this); // create a diagram of this class.
- ol.startClassDiagram();
- ol.disable(OutputGenerator::Man);
- ol.parseText(theTranslator->trClassDiagram(displayName()));
- ol.enable(OutputGenerator::Man);
- ol.endClassDiagram(diagram,getOutputFileBase(),displayName());
- renderDiagram = TRUE;
- }
-
- if (renderDiagram) // if we already show the inheritance relations graphically,
- // then hide the text version
- {
- ol.disableAllBut(OutputGenerator::Man);
- }
-
- if (m_impl->inherits && (count=m_impl->inherits->count())>0)
- {
- ol.startParagraph();
- //parseText(ol,theTranslator->trInherits()+" ");
-
- QCString inheritLine = theTranslator->trInheritsList(m_impl->inherits->count());
- QRegExp marker("@[0-9]+");
- int index=0,newIndex,matchLen;
- // now replace all markers in inheritLine with links to the classes
- while ((newIndex=marker.match(inheritLine,index,&matchLen))!=-1)
- {
- ol.parseText(inheritLine.mid(index,newIndex-index));
- bool ok;
- uint entryIndex = inheritLine.mid(newIndex+1,matchLen-1).toUInt(&ok);
- BaseClassDef *bcd=m_impl->inherits->at(entryIndex);
- if (ok && bcd)
- {
- ClassDef *cd=bcd->classDef;
-
- // use the class name but with the template arguments as given
- // in the inheritance relation
- QCString displayName = insertTemplateSpecifierInScope(
- cd->displayName(),bcd->templSpecifiers);
-
- if (cd->isLinkable())
- {
- if (!Config_getString("GENERATE_TAGFILE").isEmpty())
- {
- Doxygen::tagFile << " <base";
- if (bcd->prot==Protected)
- {
- Doxygen::tagFile << " protection=\"protected\"";
- }
- else if (bcd->prot==Private)
- {
- Doxygen::tagFile << " protection=\"private\"";
- }
- if (bcd->virt==Virtual)
- {
- Doxygen::tagFile << " virtualness=\"virtual\"";
- }
- Doxygen::tagFile << ">" << convertToXML(cd->name())
- << "</base>" << endl;
- }
- ol.writeObjectLink(cd->getReference(),
- cd->getOutputFileBase(),
- cd->anchor(),
- displayName);
- }
- else
- {
- ol.docify(displayName);
- }
- }
- else
- {
- err("error: invalid marker %d in inherits list!\n",entryIndex);
- }
- index=newIndex+matchLen;
- }
- ol.parseText(inheritLine.right(inheritLine.length()-index));
- ol.endParagraph();
- }
-
- // write subclasses
- if (m_impl->inheritedBy && (count=m_impl->inheritedBy->count())>0)
- {
- ol.startParagraph();
- QCString inheritLine = theTranslator->trInheritedByList(m_impl->inheritedBy->count());
- QRegExp marker("@[0-9]+");
- int index=0,newIndex,matchLen;
- // now replace all markers in inheritLine with links to the classes
- while ((newIndex=marker.match(inheritLine,index,&matchLen))!=-1)
- {
- ol.parseText(inheritLine.mid(index,newIndex-index));
- bool ok;
- uint entryIndex = inheritLine.mid(newIndex+1,matchLen-1).toUInt(&ok);
- BaseClassDef *bcd=m_impl->inheritedBy->at(entryIndex);
- if (ok && bcd)
- {
- ClassDef *cd=bcd->classDef;
- if (cd->isLinkable())
- {
- ol.writeObjectLink(cd->getReference(),cd->getOutputFileBase(),cd->anchor(),cd->displayName());
- }
- else
- {
- ol.docify(cd->displayName());
- }
- writeInheritanceSpecifier(ol,bcd);
- }
- index=newIndex+matchLen;
- }
- ol.parseText(inheritLine.right(inheritLine.length()-index));
- ol.endParagraph();
- }
-
- if (renderDiagram)
- {
- ol.enableAll();
- }
-}
-
-void ClassDef::writeCollaborationGraph(OutputList &ol)
-{
- if (Config_getBool("HAVE_DOT") /*&& Config_getBool("COLLABORATION_GRAPH")*/)
- {
- DotClassGraph usageImplGraph(this,DotNode::Collaboration);
- if (!usageImplGraph.isTrivial())
- {
- ol.pushGeneratorState();
- ol.disable(OutputGenerator::Man);
- ol.startDotGraph();
- ol.parseText(theTranslator->trCollaborationDiagram(displayName()));
- ol.endDotGraph(usageImplGraph);
- ol.popGeneratorState();
- }
- }
-}
-
-void ClassDef::writeIncludeFiles(OutputList &ol)
-{
- if (m_impl->incInfo /*&& Config_getBool("SHOW_INCLUDE_FILES")*/)
- {
- QCString nm=m_impl->incInfo->includeName.isEmpty() ?
- (m_impl->incInfo->fileDef ?
- m_impl->incInfo->fileDef->docName().data() : ""
- ) :
- m_impl->incInfo->includeName.data();
- if (!nm.isEmpty())
- {
- ol.startParagraph();
- ol.startTypewriter();
- SrcLangExt lang = getLanguage();
- bool isIDLorJava = lang==SrcLangExt_IDL || lang==SrcLangExt_Java;
- if (isIDLorJava)
- {
- ol.docify("import ");
- }
- else if (isObjectiveC())
- {
- ol.docify("#import ");
- }
- else
- {
- ol.docify("#include ");
- }
- if (m_impl->incInfo->local || isIDLorJava)
- ol.docify("\"");
- else
- ol.docify("<");
- ol.pushGeneratorState();
- ol.disable(OutputGenerator::Html);
- ol.docify(nm);
- ol.disableAllBut(OutputGenerator::Html);
- ol.enable(OutputGenerator::Html);
- if (m_impl->incInfo->fileDef)
- {
- ol.writeObjectLink(0,m_impl->incInfo->fileDef->includeName(),0,nm);
- }
- else
- {
- ol.docify(nm);
- }
- ol.popGeneratorState();
- if (m_impl->incInfo->local || isIDLorJava)
- ol.docify("\"");
- else
- ol.docify(">");
- if (isIDLorJava)
- ol.docify(";");
- ol.endTypewriter();
- ol.endParagraph();
- }
- }
-}
-
-void ClassDef::writeAllMembersLink(OutputList &ol)
-{
- // write link to list of all members (HTML only)
- if (m_impl->allMemberNameInfoSDict &&
- !Config_getBool("OPTIMIZE_OUTPUT_FOR_C")
- )
- {
- ol.pushGeneratorState();
- ol.disableAllBut(OutputGenerator::Html);
- ol.startParagraph();
- ol.startTextLink(getMemberListFileName(),0);
- ol.parseText(theTranslator->trListOfAllMembers());
- ol.endTextLink();
- ol.endParagraph();
- ol.enableAll();
- ol.popGeneratorState();
- }
-}
-
-void ClassDef::writeMemberGroups(OutputList &ol,bool showInline)
-{
- // write user defined member groups
- if (m_impl->memberGroupSDict)
- {
- m_impl->memberGroupSDict->sort();
- MemberGroupSDict::Iterator mgli(*m_impl->memberGroupSDict);
- MemberGroup *mg;
- for (;(mg=mgli.current());++mgli)
- {
- if (!mg->allMembersInSameSection() || !m_impl->subGrouping) // group is in its own section
- {
- mg->writeDeclarations(ol,this,0,0,0,showInline);
- }
- else // add this group to the corresponding member section
- {
- //printf("addToDeclarationSection(%s)\n",mg->header().data());
- //mg->addToDeclarationSection();
- }
- }
- }
-}
-
-void ClassDef::writeNestedClasses(OutputList &ol,const QCString &title)
-{
- // nested classes
- if (m_impl->innerClasses)
- {
- m_impl->innerClasses->writeDeclaration(ol,0,title,TRUE);
- }
-}
-
-void ClassDef::writeInlineClasses(OutputList &ol)
-{
- if (m_impl->innerClasses)
- {
- m_impl->innerClasses->writeDocumentation(ol,this);
- }
-}
-
-void ClassDef::startMemberDocumentation(OutputList &ol)
-{
- //printf("%s: ClassDef::startMemberDocumentation()\n",name().data());
- if (Config_getBool("SEPARATE_MEMBER_PAGES"))
- {
- ol.disable(OutputGenerator::Html);
- Doxygen::suppressDocWarnings = TRUE;
- }
-}
-
-void ClassDef::endMemberDocumentation(OutputList &ol)
-{
- //printf("%s: ClassDef::endMemberDocumentation()\n",name().data());
- if (Config_getBool("SEPARATE_MEMBER_PAGES"))
- {
- ol.enable(OutputGenerator::Html);
- Doxygen::suppressDocWarnings = FALSE;
- }
-}
-
-void ClassDef::startMemberDeclarations(OutputList &ol)
-{
- //printf("%s: ClassDef::startMemberDeclarations()\n",name().data());
- ol.startMemberSections();
-}
-
-void ClassDef::endMemberDeclarations(OutputList &ol)
-{
- //printf("%s: ClassDef::endMemberDeclarations()\n",name().data());
- ol.endMemberSections();
-}
-
-void ClassDef::writeAuthorSection(OutputList &ol)
-{
- ol.pushGeneratorState();
- ol.disableAllBut(OutputGenerator::Man);
- ol.writeString("\n");
- ol.startGroupHeader();
- ol.parseText(theTranslator->trAuthor(TRUE,TRUE));
- ol.endGroupHeader();
- ol.parseText(theTranslator->trGeneratedAutomatically(Config_getString("PROJECT_NAME")));
- ol.popGeneratorState();
-}
-
-
-void ClassDef::writeSummaryLinks(OutputList &ol)
-{
- ol.pushGeneratorState();
- ol.disableAllBut(OutputGenerator::Html);
- QListIterator<LayoutDocEntry> eli(
- LayoutDocManager::instance().docEntries(LayoutDocManager::Class));
- LayoutDocEntry *lde;
- bool first=TRUE;
-
- if (getLanguage()!=SrcLangExt_VHDL)
- {
- for (eli.toFirst();(lde=eli.current());++eli)
- {
- if (lde->kind()==LayoutDocEntry::ClassNestedClasses &&
- m_impl->innerClasses &&
- m_impl->innerClasses->declVisible()
- )
- {
- LayoutDocEntrySection *ls = (LayoutDocEntrySection*)lde;
- writeSummaryLink(ol,"nested-classes",ls->title,first);
- }
- else if (lde->kind()== LayoutDocEntry::MemberDecl)
- {
- LayoutDocEntryMemberDecl *lmd = (LayoutDocEntryMemberDecl*)lde;
- MemberList * ml = getMemberList(lmd->type);
- if (ml && ml->declVisible())
- {
- writeSummaryLink(ol,ml->listTypeAsString(),lmd->title,first);
- }
- }
- }
- }
- else // VDHL only
- {
- SDict<QCString>::Iterator li(m_impl->vhdlSummaryTitles);
- for (li.toFirst();li.current();++li)
- {
- writeSummaryLink(ol,li.current()->data(),li.current()->data(),first);
- }
- }
- if (!first)
- {
- ol.writeString(" </div>\n");
- }
- ol.popGeneratorState();
-}
-
-void ClassDef::writeTagFileMarker()
-{
- // write section to the tag file
- if (!Config_getString("GENERATE_TAGFILE").isEmpty())
- {
- Doxygen::tagFile << " <compound kind=\"" << compoundTypeString();
- Doxygen::tagFile << "\"";
- if (isObjectiveC()) { Doxygen::tagFile << " objc=\"yes\""; }
- Doxygen::tagFile << ">" << endl;
- Doxygen::tagFile << " <name>" << convertToXML(name()) << "</name>" << endl;
- Doxygen::tagFile << " <filename>" << convertToXML(getOutputFileBase()) << Doxygen::htmlFileExtension << "</filename>" << endl;
- if (!anchor().isEmpty())
- {
- Doxygen::tagFile << " <anchor>" << convertToXML(anchor()) << "</anchor>" << endl;
- }
- if (m_impl->tempArgs)
- {
- ArgumentListIterator ali(*m_impl->tempArgs);
- Argument *a;
- for (;(a=ali.current());++ali)
- {
- Doxygen::tagFile << " <templarg>" << convertToXML(a->name) << "</templarg>" << endl;
- }
- }
- }
-}
-
-/** Write class documentation inside another container (i.e. a group) */
-void ClassDef::writeInlineDocumentation(OutputList &ol)
-{
- bool isSimple = m_impl->isSimple;
-
- ol.addIndexItem(name(),0);
- //printf("ClassDef::writeInlineDocumentation(%s)\n",name().data());
- QListIterator<LayoutDocEntry> eli(
- LayoutDocManager::instance().docEntries(LayoutDocManager::Class));
- LayoutDocEntry *lde;
-
- // part 1: anchor and title
- QCString s = compoundTypeString()+" "+name();
-
- // part 1a
- ol.pushGeneratorState();
- ol.disableAllBut(OutputGenerator::Html);
- { // only HTML only
- ol.writeAnchor(0,anchor());
- ol.startMemberDoc(0,0,0,0,FALSE);
- ol.startMemberDocName(FALSE);
- ol.parseText(s);
- ol.endMemberDocName();
- ol.endMemberDoc(FALSE);
- ol.startIndent();
- }
- ol.popGeneratorState();
-
- // part 1b
- ol.pushGeneratorState();
- ol.disable(OutputGenerator::Html);
- ol.disable(OutputGenerator::Man);
- { // for LaTeX/RTF only
- ol.writeAnchor(getOutputFileBase(),anchor());
- }
- ol.popGeneratorState();
-
- // part 1c
- ol.pushGeneratorState();
- ol.disable(OutputGenerator::Html);
- {
- // for LaTeX/RTF/Man
- ol.startGroupHeader(1);
- ol.parseText(s);
- ol.endGroupHeader(1);
- }
- ol.popGeneratorState();
-
- // part 2: the header and detailed description
- for (eli.toFirst();(lde=eli.current());++eli)
- {
- switch (lde->kind())
- {
- case LayoutDocEntry::BriefDesc:
- {
- // since we already shown the brief description in the
- // declaration part of the container, so we use this to
- // show the details on top.
- writeDetailedDocumentationBody(ol);
- }
- break;
- case LayoutDocEntry::ClassInheritanceGraph:
- writeInheritanceGraph(ol);
- break;
- case LayoutDocEntry::ClassCollaborationGraph:
- writeCollaborationGraph(ol);
- break;
- case LayoutDocEntry::MemberDeclStart:
- if (!isSimple) startMemberDeclarations(ol);
- break;
- case LayoutDocEntry::MemberDecl:
- {
- LayoutDocEntryMemberDecl *lmd = (LayoutDocEntryMemberDecl*)lde;
- if (!isSimple) writeMemberDeclarations(ol,lmd->type,lmd->title,lmd->subscript,TRUE);
- }
- break;
- case LayoutDocEntry::MemberGroups:
- if (!isSimple) writeMemberGroups(ol,TRUE);
- break;
- case LayoutDocEntry::MemberDeclEnd:
- if (!isSimple) endMemberDeclarations(ol);
- break;
- case LayoutDocEntry::MemberDefStart:
- if (!isSimple) startMemberDocumentation(ol);
- break;
- case LayoutDocEntry::MemberDef:
- {
- LayoutDocEntryMemberDef *lmd = (LayoutDocEntryMemberDef*)lde;
- if (isSimple)
- {
- writeSimpleMemberDocumentation(ol,lmd->type);
- }
- else
- {
- writeMemberDocumentation(ol,lmd->type,lmd->title,TRUE);
- }
- }
- break;
- case LayoutDocEntry::MemberDefEnd:
- if (!isSimple) endMemberDocumentation(ol);
- break;
- default:
- break;
- }
- }
-
- // part 3: close the block
- ol.pushGeneratorState();
- ol.disableAllBut(OutputGenerator::Html);
- { // HTML only
- ol.endIndent();
- }
- ol.popGeneratorState();
-
- // part 4: write tag file information
- writeTagFileMarker();
-}
-
-void ClassDef::writeMoreLink(OutputList &ol,const QCString &anchor)
-{
- // TODO: clean up this mess by moving it to
- // the output generators...
- static bool pdfHyperlinks = Config_getBool("PDF_HYPERLINKS");
- static bool rtfHyperlinks = Config_getBool("RTF_HYPERLINKS");
- static bool usePDFLatex = Config_getBool("USE_PDFLATEX");
-
- // HTML only
- ol.pushGeneratorState();
- ol.disableAllBut(OutputGenerator::Html);
- ol.docify(" ");
- ol.startTextLink(getOutputFileBase(),
- anchor.isEmpty() ? QCString("details") : anchor);
- ol.parseText(theTranslator->trMore());
- ol.endTextLink();
- ol.popGeneratorState();
-
- if (!anchor.isEmpty())
- {
- ol.pushGeneratorState();
- // LaTeX + RTF
- ol.disable(OutputGenerator::Html);
- ol.disable(OutputGenerator::Man);
- if (!(usePDFLatex && pdfHyperlinks))
- {
- ol.disable(OutputGenerator::Latex);
- }
- if (!rtfHyperlinks)
- {
- ol.disable(OutputGenerator::RTF);
- }
- ol.docify(" ");
- ol.startTextLink(getOutputFileBase(), anchor);
- ol.parseText(theTranslator->trMore());
- ol.endTextLink();
- // RTF only
- ol.disable(OutputGenerator::Latex);
- ol.writeString("\\par");
- ol.popGeneratorState();
- }
-}
-
-
-void ClassDef::writeDeclarationLink(OutputList &ol,bool &found,const char *header,bool localNames)
-{
- //static bool fortranOpt = Config_getBool("OPTIMIZE_FOR_FORTRAN");
- //static bool vhdlOpt = Config_getBool("OPTIMIZE_OUTPUT_VHDL");
- static bool hideUndocClasses = Config_getBool("HIDE_UNDOC_CLASSES");
- static bool extractLocalClasses = Config_getBool("EXTRACT_LOCAL_CLASSES");
- bool isLink = isLinkable();
- SrcLangExt lang = getLanguage();
- if (isLink ||
- (!hideUndocClasses &&
- (!isLocal() || extractLocalClasses)
- )
- )
- {
- if (!found) // first class
- {
- ol.startMemberHeader("nested-classes");
- if (header)
- {
- ol.parseText(header);
- }
- else if (lang==SrcLangExt_VHDL)
- {
- ol.parseText(VhdlDocGen::trVhdlType(VhdlDocGen::ARCHITECTURE,FALSE));
- }
- else
- {
- ol.parseText(lang==SrcLangExt_Fortran ?
- theTranslator->trDataTypes() :
- theTranslator->trCompounds());
- }
- ol.endMemberHeader();
- ol.startMemberList();
- found=TRUE;
- }
- if (!Config_getString("GENERATE_TAGFILE").isEmpty() &&
- !isReference()) // skip classes found in tag files
- {
- Doxygen::tagFile << " <class kind=\"" << compoundTypeString()
- << "\">" << convertToXML(name()) << "</class>" << endl;
- }
- ol.startMemberItem(anchor(),FALSE);
- QCString ctype = compoundTypeString();
- QCString cname;
- if (localNames)
- {
- cname = localName();
- if (cname.right(2)=="-p" || cname.right(2)=="-g")
- {
- cname = cname.left(cname.length()-2);
- }
- }
- else
- {
- cname = displayName();
- }
-
- if (lang!=SrcLangExt_VHDL) // for VHDL we swap the name and the type
- {
- ol.writeString(ctype);
- ol.writeString(" ");
- ol.insertMemberAlign();
- }
- if (isLink)
- {
- ol.writeObjectLink(getReference(),
- getOutputFileBase(),
- anchor(),
- cname
- );
- }
- else
- {
- ol.startBold();
- ol.docify(cname);
- ol.endBold();
- }
- if (lang==SrcLangExt_VHDL) // now write the type
- {
- ol.writeString(" ");
- ol.insertMemberAlign();
- ol.writeString(VhdlDocGen::getProtectionName((VhdlDocGen::VhdlClasses)protection()));
- }
- ol.endMemberItem();
-
- // add the brief description if available
- if (!briefDescription().isEmpty())
- {
- ol.startMemberDescription(anchor());
- ol.parseDoc(briefFile(),briefLine(),this,0,
- briefDescription(),FALSE,FALSE,0,TRUE,FALSE);
- if (isLinkableInProject())
- {
- writeMoreLink(ol,anchor());
- }
- ol.endMemberDescription();
- }
- }
-}
-
-void ClassDef::writeDocumentationContents(OutputList &ol,const QCString &pageTitle)
-{
- ol.startContents();
-
- QCString pageType = " ";
- pageType += compoundTypeString();
- toupper(pageType.at(1));
-
- writeTagFileMarker();
-
- Doxygen::indexList.addIndexItem(this,0);
-
- if (Doxygen::searchIndex)
- {
- Doxygen::searchIndex->setCurrentDoc(pageTitle,getOutputFileBase(),anchor());
- Doxygen::searchIndex->addWord(localName(),TRUE);
- }
- bool exampleFlag=hasExamples();
-
- //---------------------------------------- start flexible part -------------------------------
-
- QListIterator<LayoutDocEntry> eli(
- LayoutDocManager::instance().docEntries(LayoutDocManager::Class));
- LayoutDocEntry *lde;
- for (eli.toFirst();(lde=eli.current());++eli)
- {
- switch (lde->kind())
- {
- case LayoutDocEntry::BriefDesc:
- writeBriefDescription(ol,exampleFlag);
- break;
- case LayoutDocEntry::ClassIncludes:
- writeIncludeFiles(ol);
- break;
- case LayoutDocEntry::ClassInheritanceGraph:
- writeInheritanceGraph(ol);
- break;
- case LayoutDocEntry::ClassCollaborationGraph:
- writeCollaborationGraph(ol);
- break;
- case LayoutDocEntry::ClassAllMembersLink:
- writeAllMembersLink(ol);
- break;
- case LayoutDocEntry::MemberDeclStart:
- startMemberDeclarations(ol);
- break;
- case LayoutDocEntry::MemberGroups:
- writeMemberGroups(ol);
- break;
- case LayoutDocEntry::MemberDecl:
- {
- LayoutDocEntryMemberDecl *lmd = (LayoutDocEntryMemberDecl*)lde;
- writeMemberDeclarations(ol,lmd->type,lmd->title,lmd->subscript);
- }
- break;
- case LayoutDocEntry::ClassNestedClasses:
- {
- LayoutDocEntrySection *ls = (LayoutDocEntrySection*)lde;
- writeNestedClasses(ol,ls->title);
- }
- break;
- case LayoutDocEntry::MemberDeclEnd:
- endMemberDeclarations(ol);
- break;
- case LayoutDocEntry::DetailedDesc:
- {
- LayoutDocEntrySection *ls = (LayoutDocEntrySection*)lde;
- writeDetailedDescription(ol,pageType,exampleFlag,ls->title);
- }
- break;
- case LayoutDocEntry::MemberDefStart:
- startMemberDocumentation(ol);
- break;
- case LayoutDocEntry::ClassInlineClasses:
- writeInlineClasses(ol);
- break;
- case LayoutDocEntry::MemberDef:
- {
- LayoutDocEntryMemberDef *lmd = (LayoutDocEntryMemberDef*)lde;
- writeMemberDocumentation(ol,lmd->type,lmd->title);
- }
- break;
- case LayoutDocEntry::MemberDefEnd:
- endMemberDocumentation(ol);
- break;
- case LayoutDocEntry::ClassUsedFiles:
- showUsedFiles(ol);
- break;
- case LayoutDocEntry::AuthorSection:
- writeAuthorSection(ol);
- break;
- case LayoutDocEntry::NamespaceNestedNamespaces:
- case LayoutDocEntry::NamespaceClasses:
- case LayoutDocEntry::NamespaceInlineClasses:
- case LayoutDocEntry::FileClasses:
- case LayoutDocEntry::FileNamespaces:
- case LayoutDocEntry::FileIncludes:
- case LayoutDocEntry::FileIncludeGraph:
- case LayoutDocEntry::FileIncludedByGraph:
- case LayoutDocEntry::FileSourceLink:
- case LayoutDocEntry::FileInlineClasses:
- case LayoutDocEntry::GroupClasses:
- case LayoutDocEntry::GroupInlineClasses:
- case LayoutDocEntry::GroupNamespaces:
- case LayoutDocEntry::GroupDirs:
- case LayoutDocEntry::GroupNestedGroups:
- case LayoutDocEntry::GroupFiles:
- case LayoutDocEntry::GroupGraph:
- case LayoutDocEntry::GroupPageDocs:
- case LayoutDocEntry::DirSubDirs:
- case LayoutDocEntry::DirFiles:
- case LayoutDocEntry::DirGraph:
- err("Internal inconsistency: member %d should not be part of "
- "LayoutDocManager::Class entry list\n",lde->kind());
- break;
- }
- }
-
- if (!Config_getString("GENERATE_TAGFILE").isEmpty())
- {
- writeDocAnchorsToTagFile();
- Doxygen::tagFile << " </compound>" << endl;
- }
- ol.endContents();
-}
-
-// write all documentation for this class
-void ClassDef::writeDocumentation(OutputList &ol)
-{
- static bool generateTreeView = Config_getBool("GENERATE_TREEVIEW");
- //static bool fortranOpt = Config_getBool("OPTIMIZE_FOR_FORTRAN");
- //static bool vhdlOpt = Config_getBool("OPTIMIZE_OUTPUT_VHDL");
- QCString pageTitle;
- SrcLangExt lang = getLanguage();
-
- if (lang==SrcLangExt_Fortran)
- {
- pageTitle = theTranslator->trCompoundReferenceFortran(displayName(),
- m_impl->compType,
- m_impl->tempArgs != 0);
- }
- else if (lang==SrcLangExt_VHDL)
- {
- // TODO: TRANSLATE ME
- pageTitle = VhdlDocGen::getClassTitle(this)+" Reference";
- }
- else if (isJavaEnum())
- {
- // TODO: TRANSLATE ME
- pageTitle = displayName()+" Enum Reference";
- }
- else
- {
- pageTitle = theTranslator->trCompoundReference(displayName(),
- m_impl->compType == Interface && getLanguage()==SrcLangExt_ObjC ? Class : m_impl->compType,
- m_impl->tempArgs != 0);
- }
-
- startFile(ol,getOutputFileBase(),name(),pageTitle,HLI_ClassVisible,!generateTreeView);
- if (!generateTreeView)
- {
- if (getOuterScope()!=Doxygen::globalScope)
- {
- writeNavigationPath(ol);
- }
- ol.endQuickIndices();
- }
-
- startTitle(ol,getOutputFileBase(),this);
- ol.parseText(pageTitle);
- addGroupListToTitle(ol,this);
- endTitle(ol,getOutputFileBase(),displayName());
- writeDocumentationContents(ol,pageTitle);
-
- endFileWithNavPath(this,ol);
-
- if (Config_getBool("SEPARATE_MEMBER_PAGES"))
- {
- writeMemberPages(ol);
- }
-}
-
-void ClassDef::writeMemberPages(OutputList &ol)
-{
- ///////////////////////////////////////////////////////////////////////////
- //// Member definitions on separate pages
- ///////////////////////////////////////////////////////////////////////////
-
- ol.pushGeneratorState();
- ol.disableAllBut(OutputGenerator::Html);
-
- QListIterator<MemberList> mli(m_impl->memberLists);
- MemberList *ml;
- for (mli.toFirst();(ml=mli.current());++mli)
- {
- if (ml->listType()&MemberList::detailedLists)
- {
- ml->writeDocumentationPage(ol,displayName(),this);
- }
- }
-
- ol.popGeneratorState();
-}
-
-void ClassDef::writeQuickMemberLinks(OutputList &ol,MemberDef *currentMd) const
-{
- static bool createSubDirs=Config_getBool("CREATE_SUBDIRS");
-
- ol.writeString(" <div class=\"navtab\">\n");
- ol.writeString(" <table>\n");
-
- if (m_impl->allMemberNameInfoSDict)
- {
- MemberNameInfoSDict::Iterator mnili(*m_impl->allMemberNameInfoSDict);
- MemberNameInfo *mni;
- for (;(mni=mnili.current());++mnili)
- {
- MemberNameInfoIterator mnii(*mni);
- MemberInfo *mi;
- for (mnii.toFirst();(mi=mnii.current());++mnii)
- {
- MemberDef *md=mi->memberDef;
- if (md->getClassDef()==this && md->isLinkable())
- {
- ol.writeString(" <tr><td class=\"navtab\">");
- if (md->isLinkableInProject())
- {
- if (md==currentMd) // selected item => highlight
- {
- ol.writeString("<a class=\"qindexHL\" ");
- }
- else
- {
- ol.writeString("<a class=\"qindex\" ");
- }
- ol.writeString("href=\"");
- if (createSubDirs) ol.writeString("../../");
- ol.writeString(md->getOutputFileBase()+Doxygen::htmlFileExtension+"#"+md->anchor());
- ol.writeString("\">");
- ol.writeString(convertToHtml(md->name()));
- ol.writeString("</a>");
- }
- ol.writeString("</td></tr>\n");
- }
- }
- }
- }
-
- ol.writeString(" </table>\n");
- ol.writeString(" </div>\n");
-}
-
-
-
-void ClassDef::writeDocumentationForInnerClasses(OutputList &ol)
-{
- // write inner classes after the parent, so the tag files contain
- // the definition in proper order!
- if (m_impl->innerClasses)
- {
- ClassSDict::Iterator cli(*m_impl->innerClasses);
- ClassDef *innerCd;
- for (cli.toFirst();(innerCd=cli.current());++cli)
- {
- if (innerCd->isLinkableInProject() && innerCd->templateMaster()==0 &&
- protectionLevelVisible(innerCd->protection()) &&
- !innerCd->isEmbeddedInOuterScope()
- )
- {
- msg("Generating docs for nested compound %s...\n",qPrint(innerCd->name()));
- innerCd->writeDocumentation(ol);
- innerCd->writeMemberList(ol);
- }
- innerCd->writeDocumentationForInnerClasses(ol);
- }
- }
-}
-
-// write the list of all (inherited) members for this class
-void ClassDef::writeMemberList(OutputList &ol)
-{
- static bool cOpt = Config_getBool("OPTIMIZE_OUTPUT_FOR_C");
- //static bool vhdlOpt = Config_getBool("OPTIMIZE_OUTPUT_VHDL");
- static bool generateTreeView = Config_getBool("GENERATE_TREEVIEW");
- if (m_impl->allMemberNameInfoSDict==0 || cOpt) return;
- // only for HTML
- ol.pushGeneratorState();
- ol.disableAllBut(OutputGenerator::Html);
-
- QCString memListFile = getMemberListFileName();
- startFile(ol,memListFile,memListFile,theTranslator->trMemberList(),
- HLI_ClassVisible,!generateTreeView,getOutputFileBase());
- if (!generateTreeView)
- {
- if (getOuterScope()!=Doxygen::globalScope)
- {
- writeNavigationPath(ol);
- }
- ol.endQuickIndices();
- }
- startTitle(ol,0);
- ol.parseText(displayName()+" "+theTranslator->trMemberList());
- endTitle(ol,0,0);
- ol.startContents();
- ol.parseText(theTranslator->trThisIsTheListOfAllMembers());
- ol.writeObjectLink(getReference(),getOutputFileBase(),anchor(),displayName());
- ol.parseText(theTranslator->trIncludingInheritedMembers());
-
- //ol.startItemList();
- ol.writeString("<table>\n");
-
- //MemberNameInfo *mni=m_impl->allMemberNameInfoList->first();
- MemberNameInfoSDict::Iterator mnii(*m_impl->allMemberNameInfoSDict);
- MemberNameInfo *mni;
- for (mnii.toFirst();(mni=mnii.current());++mnii)
- {
- MemberInfo *mi=mni->first();
- while (mi)
- {
- MemberDef *md=mi->memberDef;
- ClassDef *cd=md->getClassDef();
- Protection prot = mi->prot;
- Specifier virt=md->virtualness();
-
- //printf("%s: Member %s of class %s md->protection()=%d mi->prot=%d prot=%d inherited=%d\n",
- // name().data(),md->name().data(),cd->name().data(),md->protection(),mi->prot,prot,mi->inherited);
-
-
- if (cd && !md->name().isEmpty() && md->name()[0]!='@')
- {
- bool memberWritten=FALSE;
- if (cd->isLinkable() && md->isLinkable())
- // create a link to the documentation
- {
- QCString name=mi->ambiguityResolutionScope+md->name();
- //ol.writeListItem();
- ol.writeString(" <tr class=\"memlist\"><td>");
- if (cd->isObjectiveC())
- {
- if (md->isObjCMethod())
- {
- if (md->isStatic())
- ol.writeString("+&#160;</td><td>");
- else
- ol.writeString("-&#160;</td><td>");
- }
- else
- ol.writeString("</td><td>");
- }
- if (md->isObjCMethod())
- {
- ol.writeObjectLink(md->getReference(),
- md->getOutputFileBase(),
- md->anchor(),md->name());
- }
- else
- {
- //Definition *bd = md->getGroupDef();
- //if (bd==0) bd=cd;
- ol.writeObjectLink(md->getReference(),
- md->getOutputFileBase(),
- md->anchor(),name);
-
- if ( md->isFunction() || md->isSignal() || md->isSlot() ||
- (md->isFriend() && md->argsString()))
- ol.docify(md->argsString());
- else if (md->isEnumerate())
- ol.parseText(" "+theTranslator->trEnumName());
- else if (md->isEnumValue())
- ol.parseText(" "+theTranslator->trEnumValue());
- else if (md->isTypedef())
- ol.docify(" typedef");
- else if (md->isFriend() && !strcmp(md->typeString(),"friend class"))
- ol.docify(" class");
- //ol.writeString("\n");
- }
- ol.writeString("</td>");
- memberWritten=TRUE;
- }
- else if (!Config_getBool("HIDE_UNDOC_MEMBERS") &&
- (protectionLevelVisible(md->protection()) || md->isFriend())
- ) // no documentation,
- // generate link to the class instead.
- {
- //ol.writeListItem();
- ol.writeString(" <tr bgcolor=\"#f0f0f0\"><td>");
- if (cd->isObjectiveC())
- {
- if (md->isObjCMethod())
- {
- if (md->isStatic())
- ol.writeString("+&#160;</td><td>");
- else
- ol.writeString("-&#160;</td><td>");
- }
- else
- ol.writeString("</td><td>");
- }
- ol.startBold();
- ol.docify(md->name());
- ol.endBold();
- if (!md->isObjCMethod())
- {
- if ( md->isFunction() || md->isSignal() || md->isSlot() )
- ol.docify(md->argsString());
- else if (md->isEnumerate())
- ol.parseText(" "+theTranslator->trEnumName());
- else if (md->isEnumValue())
- ol.parseText(" "+theTranslator->trEnumValue());
- else if (md->isTypedef())
- ol.docify(" typedef");
- }
- ol.writeString(" (");
- ol.parseText(theTranslator->trDefinedIn()+" ");
- if (cd->isLinkable())
- {
- ol.writeObjectLink(
- cd->getReference(),
- cd->getOutputFileBase(),
- cd->anchor(),
- cd->displayName());
- }
- else
- {
- ol.startBold();
- ol.docify(cd->displayName());
- ol.endBold();
- }
- ol.writeString(")");
- ol.writeString("</td>");
- memberWritten=TRUE;
- }
- if (memberWritten)
- {
- ol.writeString("<td>");
- ol.writeObjectLink(cd->getReference(),
- cd->getOutputFileBase(),
- cd->anchor(),
- md->category() ?
- md->category()->displayName() :
- cd->displayName());
- ol.writeString("</td>");
- ol.writeString("<td>");
- }
- SrcLangExt lang = md->getLanguage();
- if (
- (prot!=Public || (virt!=Normal && getLanguage()!=SrcLangExt_ObjC) ||
- md->isFriend() || md->isRelated() || md->isExplicit() ||
- md->isMutable() || (md->isInline() && Config_getBool("INLINE_INFO")) ||
- md->isSignal() || md->isSlot() ||
- md->isStatic() || lang==SrcLangExt_VHDL
- )
- && memberWritten)
- {
- ol.startTypewriter();
- ol.docify(" [");
- QStrList sl;
- if (lang==SrcLangExt_VHDL)
- {
- sl.append(VhdlDocGen::trVhdlType(md->getMemberSpecifiers())); //append vhdl type
- }
- else if (md->isFriend()) sl.append("friend");
- else if (md->isRelated()) sl.append("related");
- else
- {
- if (Config_getBool("INLINE_INFO") && md->isInline())
- sl.append("inline");
- if (md->isExplicit()) sl.append("explicit");
- if (md->isMutable()) sl.append("mutable");
- if (prot==Protected) sl.append("protected");
- else if (prot==Private) sl.append("private");
- else if (prot==Package) sl.append("package");
- if (virt==Virtual && getLanguage()!=SrcLangExt_ObjC)
- sl.append("virtual");
- else if (virt==Pure) sl.append("pure virtual");
- if (md->isStatic()) sl.append("static");
- if (md->isSignal()) sl.append("signal");
- if (md->isSlot()) sl.append("slot");
- }
- const char *s=sl.first();
- while (s)
- {
- ol.docify(s);
- s=sl.next();
- if (s) ol.docify(", ");
- }
- ol.docify("]");
- ol.endTypewriter();
- }
- if (memberWritten)
- {
- ol.writeString("</td>");
- ol.writeString("</tr>\n");
- }
- }
- mi=mni->next();
- }
- }
- //ol.endItemList();
-
- ol.writeString("</table>");
-
- endFile(ol);
- ol.popGeneratorState();
-}
-
-
-// add a reference to an example
-bool ClassDef::addExample(const char *anchor,const char *nameStr,
- const char *file)
-{
- if (m_impl->exampleSDict==0)
- {
- m_impl->exampleSDict = new ExampleSDict;
- m_impl->exampleSDict->setAutoDelete(TRUE);
- }
- if (!m_impl->exampleSDict->find(nameStr))
- {
- Example *e=new Example;
- e->anchor=anchor;
- e->name=nameStr;
- e->file=file;
- m_impl->exampleSDict->inSort(nameStr,e);
- return TRUE;
- }
- return FALSE;
-}
-
-// returns TRUE if this class is used in an example
-bool ClassDef::hasExamples()
-{
- if (m_impl->exampleSDict==0)
- return FALSE;
- else
- return m_impl->exampleSDict->count()>0;
-}
-
-
-void ClassDef::setTemplateArguments(ArgumentList *al)
-{
- if (al==0) return;
- if (!m_impl->tempArgs) delete m_impl->tempArgs; // delete old list if needed
- m_impl->tempArgs=new ArgumentList;
- ArgumentListIterator ali(*al);
- Argument *a;
- for (;(a=ali.current());++ali)
- {
- m_impl->tempArgs->append(new Argument(*a));
- }
-}
-
-void ClassDef::setTypeConstraints(ArgumentList *al)
-{
- if (al==0) return;
- if (!m_impl->typeConstraints) delete m_impl->typeConstraints;
- m_impl->typeConstraints = new ArgumentList;
- ArgumentListIterator ali(*al);
- Argument *a;
- for (;(a=ali.current());++ali)
- {
- m_impl->typeConstraints->append(new Argument(*a));
- }
-}
-
-/*! Returns \c TRUE iff this class or a class inheriting from this class
- * is \e not defined in an external tag file.
- */
-bool ClassDef::hasNonReferenceSuperClass()
-{
- bool found=!isReference() && isLinkableInProject() && !isHidden();
- if (found)
- {
- return TRUE; // we're done if this class is not a reference
- }
- if (m_impl->inheritedBy)
- {
- BaseClassListIterator bcli(*m_impl->inheritedBy);
- for ( ; bcli.current() && !found ; ++bcli ) // for each super class
- {
- ClassDef *bcd=bcli.current()->classDef;
- // recurse into the super class branch
- found = found || bcd->hasNonReferenceSuperClass();
- if (!found)
- {
- // look for template instances that might have non-reference super classes
- QDict<ClassDef> *cil = bcd->getTemplateInstances();
- if (cil)
- {
- QDictIterator<ClassDef> tidi(*cil);
- for ( ; tidi.current() && !found ; ++tidi) // for each template instance
- {
- // recurse into the template instance branch
- found = found || tidi.current()->hasNonReferenceSuperClass();
- }
- }
- }
- }
- }
- return found;
-}
-
-/*! called from MemberDef::writeDeclaration() to (recusively) write the
- * definition of an anonymous struct, union or class.
- */
-void ClassDef::writeDeclaration(OutputList &ol,MemberDef *md,bool inGroup)
-{
- //ol.insertMemberAlign();
- //printf("ClassName=`%s' inGroup=%d\n",name().data(),inGroup);
-
- //if (inGroup && md && md->getClassDef()==this) return;
-
- ol.docify(compoundTypeString());
- int ri=name().findRev("::");
- if (ri==-1) ri=name().length();
- QCString cn=name().right(name().length()-ri-2);
- if (!cn.isEmpty() && cn.at(0)!='@' && md)
- {
- if (cn.right(2)=="-p" || cn.right(2)=="-g")
- {
- cn = cn.left(cn.length()-2);
- }
- ol.docify(" ");
- if (isLinkable())
- {
- ol.writeObjectLink(0,0,md->anchor(),cn);
- }
- else
- {
- ol.startBold();
- ol.docify(cn);
- ol.endBold();
- }
- }
- ol.docify(" {");
- ol.endMemberItem();
-
- // write user defined member groups
- if (m_impl->memberGroupSDict)
- {
- MemberGroupSDict::Iterator mgli(*m_impl->memberGroupSDict);
- MemberGroup *mg;
- for (;(mg=mgli.current());++mgli)
- {
- mg->setInGroup(inGroup);
- mg->writePlainDeclarations(ol,this,0,0,0);
- }
- }
- static bool extractPrivate = Config_getBool("EXTRACT_PRIVATE");
- static bool extractPackage = Config_getBool("EXTRACT_PACKAGE");
-
- writePlainMemberDeclaration(ol,MemberList::pubTypes,inGroup);
- writePlainMemberDeclaration(ol,MemberList::pubMethods,inGroup);
- writePlainMemberDeclaration(ol,MemberList::pubAttribs,inGroup);
- writePlainMemberDeclaration(ol,MemberList::pubSlots,inGroup);
- writePlainMemberDeclaration(ol,MemberList::signals,inGroup);
- writePlainMemberDeclaration(ol,MemberList::dcopMethods,inGroup);
- writePlainMemberDeclaration(ol,MemberList::properties,inGroup);
- writePlainMemberDeclaration(ol,MemberList::events,inGroup);
- writePlainMemberDeclaration(ol,MemberList::pubStaticMethods,inGroup);
- writePlainMemberDeclaration(ol,MemberList::pubStaticAttribs,inGroup);
- writePlainMemberDeclaration(ol,MemberList::proTypes,inGroup);
- writePlainMemberDeclaration(ol,MemberList::proMethods,inGroup);
- writePlainMemberDeclaration(ol,MemberList::proAttribs,inGroup);
- writePlainMemberDeclaration(ol,MemberList::proSlots,inGroup);
- writePlainMemberDeclaration(ol,MemberList::proStaticMethods,inGroup);
- writePlainMemberDeclaration(ol,MemberList::proStaticAttribs,inGroup);
- if (extractPackage)
- {
- writePlainMemberDeclaration(ol,MemberList::pacTypes,inGroup);
- writePlainMemberDeclaration(ol,MemberList::pacMethods,inGroup);
- writePlainMemberDeclaration(ol,MemberList::pacAttribs,inGroup);
- writePlainMemberDeclaration(ol,MemberList::pacStaticMethods,inGroup);
- writePlainMemberDeclaration(ol,MemberList::pacStaticAttribs,inGroup);
- }
- if (extractPrivate)
- {
- writePlainMemberDeclaration(ol,MemberList::priTypes,inGroup);
- writePlainMemberDeclaration(ol,MemberList::priMethods,inGroup);
- writePlainMemberDeclaration(ol,MemberList::priAttribs,inGroup);
- writePlainMemberDeclaration(ol,MemberList::priSlots,inGroup);
- writePlainMemberDeclaration(ol,MemberList::priStaticMethods,inGroup);
- writePlainMemberDeclaration(ol,MemberList::priStaticAttribs,inGroup);
- }
- writePlainMemberDeclaration(ol,MemberList::friends,inGroup);
- writePlainMemberDeclaration(ol,MemberList::related,inGroup);
-}
-
-/*! a link to this class is possible within this project */
-bool ClassDef::isLinkableInProject() const
-{
- static bool extractLocal = Config_getBool("EXTRACT_LOCAL_CLASSES");
- static bool extractStatic = Config_getBool("EXTRACT_STATIC");
- static bool hideUndoc = Config_getBool("HIDE_UNDOC_CLASSES");
- if (m_impl->templateMaster)
- {
- return m_impl->templateMaster->isLinkableInProject();
- }
- else
- {
- return !name().isEmpty() && /* has a name */
- !isArtificial() && !isHidden() && /* not hidden */
- name().find('@')==-1 && /* not anonymous */
- protectionLevelVisible(m_impl->prot) && /* private/internal */
- (!m_impl->isLocal || extractLocal) && /* local */
- (hasDocumentation() || !hideUndoc) && /* documented */
- (!m_impl->isStatic || extractStatic) && /* static */
- !isReference(); /* not an external reference */
- }
-}
-
-bool ClassDef::isLinkable() const
-{
- if (m_impl->templateMaster)
- {
- return m_impl->templateMaster->isLinkable();
- }
- else
- {
- return isLinkableInProject() || isReference();
- }
-}
-
-
-/*! the class is visible in a class diagram, or class hierarchy */
-bool ClassDef::isVisibleInHierarchy()
-{
- static bool allExternals = Config_getBool("ALLEXTERNALS");
- static bool hideUndocClasses = Config_getBool("HIDE_UNDOC_CLASSES");
- static bool extractStatic = Config_getBool("EXTRACT_STATIC");
-
- return // show all classes or a subclass is visible
- (allExternals || hasNonReferenceSuperClass()) &&
- // and not an anonymous compound
- name().find('@')==-1 &&
- // not an artificially introduced class
- !isArtificial() &&
- // and not privately inherited
- protectionLevelVisible(m_impl->prot) &&
- // documented or shown anyway or documentation is external
- (hasDocumentation() ||
- !hideUndocClasses ||
- (m_impl->templateMaster && m_impl->templateMaster->hasDocumentation()) ||
- isReference()
- ) &&
- // is not part of an unnamed namespace or shown anyway
- (!m_impl->isStatic || extractStatic);
-}
-
-bool ClassDef::hasDocumentation() const
-{
- return Definition::hasDocumentation();
-}
-
-//----------------------------------------------------------------------
-// recursive function:
-// returns TRUE iff class definition `bcd' represents an (in)direct base
-// class of class definition `cd'.
-
-bool ClassDef::isBaseClass(ClassDef *bcd, bool followInstances,int level)
-{
- bool found=FALSE;
- //printf("isBaseClass(cd=%s) looking for %s\n",name().data(),bcd->name().data());
- if (level>256)
- {
- err("Possible recursive class relation while inside %s and looking for %s\n",qPrint(name()),qPrint(bcd->name()));
- abort();
- return FALSE;
- }
- if (baseClasses())
- {
- // Beware: trying to optimise the iterator away using ->first() & ->next()
- // causes bug 625531
- BaseClassListIterator bcli(*baseClasses());
- for ( ; bcli.current() && !found ; ++bcli)
- {
- ClassDef *ccd=bcli.current()->classDef;
- if (!followInstances && ccd->templateMaster()) ccd=ccd->templateMaster();
- //printf("isBaseClass() baseclass %s\n",ccd->name().data());
- if (ccd==bcd)
- found=TRUE;
- else
- found=ccd->isBaseClass(bcd,followInstances,level+1);
- }
- }
- return found;
-}
-
-//----------------------------------------------------------------------------
-
-static bool isStandardFunc(MemberDef *md)
-{
- return md->name()=="operator=" || // assignment operator
- md->isConstructor() || // constructor
- md->isDestructor(); // destructor
-}
-
-/*!
- * recusively merges the `all members' lists of a class base
- * with that of this class. Must only be called for classes without
- * subclasses!
- */
-void ClassDef::mergeMembers()
-{
- if (m_impl->membersMerged) return;
-
- //static bool optimizeOutputForJava = Config_getBool("OPTIMIZE_OUTPUT_JAVA");
- //static bool vhdlOpt = Config_getBool("OPTIMIZE_OUTPUT_VHDL");
- SrcLangExt lang = getLanguage();
- QCString sep=getLanguageSpecificSeparator(lang,TRUE);
- int sepLen = sep.length();
-
- m_impl->membersMerged=TRUE;
- //printf(" mergeMembers for %s\n",name().data());
- bool inlineInheritedMembers = Config_getBool("INLINE_INHERITED_MEMB" );
- if (baseClasses())
- {
- //printf(" => has base classes!\n");
- BaseClassListIterator bcli(*baseClasses());
- BaseClassDef *bcd;
- for ( ; (bcd=bcli.current()) ; ++bcli )
- {
- ClassDef *bClass=bcd->classDef;
-
- // merge the members in the base class of this inheritance branch first
- bClass->mergeMembers();
-
- MemberNameInfoSDict *srcMnd = bClass->memberNameInfoSDict();
- MemberNameInfoSDict *dstMnd = m_impl->allMemberNameInfoSDict;
-
- if (srcMnd)
- {
- MemberNameInfoSDict::Iterator srcMnili(*srcMnd);
- MemberNameInfo *srcMni;
- for ( ; (srcMni=srcMnili.current()) ; ++srcMnili)
- {
- //printf(" Base member name %s\n",srcMni->memberName());
- MemberNameInfo *dstMni;
- if (dstMnd!=0 && (dstMni=dstMnd->find(srcMni->memberName())))
- // a member with that name is already in the class.
- // the member may hide or reimplement the one in the sub class
- // or there may be another path to the base class that is already
- // visited via another branch in the class hierarchy.
- {
- MemberNameInfoIterator srcMnii(*srcMni);
- MemberInfo *srcMi;
- for ( ; (srcMi=srcMnii.current()) ; ++srcMnii )
- {
- MemberDef *srcMd = srcMi->memberDef;
- bool found=FALSE;
- bool ambigue=FALSE;
- bool hidden=FALSE;
- MemberNameInfoIterator dstMnii(*dstMni);
- MemberInfo *dstMi;
- ClassDef *srcCd = srcMd->getClassDef();
- for ( ; (dstMi=dstMnii.current()) && !found; ++dstMnii )
- {
- MemberDef *dstMd = dstMi->memberDef;
- if (srcMd!=dstMd) // different members
- {
- ClassDef *dstCd = dstMd->getClassDef();
- //printf(" Is %s a base class of %s?\n",srcCd->name().data(),dstCd->name().data());
- if (srcCd==dstCd || dstCd->isBaseClass(srcCd,TRUE))
- // member is in the same or a base class
- {
- LockingPtr<ArgumentList> srcAl = srcMd->argumentList();
- LockingPtr<ArgumentList> dstAl = dstMd->argumentList();
- found=matchArguments2(
- srcMd->getOuterScope(),srcMd->getFileDef(),srcAl.pointer(),
- dstMd->getOuterScope(),dstMd->getFileDef(),dstAl.pointer(),
- TRUE
- );
- //printf(" Yes, matching (%s<->%s): %d\n",
- // argListToString(srcMd->argumentList()).data(),
- // argListToString(dstMd->argumentList()).data(),
- // found);
- hidden = hidden || !found;
- }
- else // member is in a non base class => multiple inheritance
- // using the same base class.
- {
- //printf("$$ Existing member %s %s add scope %s\n",
- // dstMi->ambiguityResolutionScope.data(),
- // dstMd->name().data(),
- // dstMi->scopePath.left(dstMi->scopePath.find("::")+2).data());
-
- QCString scope=dstMi->scopePath.left(dstMi->scopePath.find(sep)+sepLen);
- if (scope!=dstMi->ambiguityResolutionScope.left(scope.length()))
- dstMi->ambiguityResolutionScope.prepend(scope);
- ambigue=TRUE;
- }
- }
- else // same members
- {
- // do not add if base class is virtual or
- // if scope paths are equal or
- // if base class is an interface (and thus implicitly virtual).
- //printf("same member found srcMi->virt=%d dstMi->virt=%d\n",srcMi->virt,dstMi->virt);
- if ((srcMi->virt!=Normal && dstMi->virt!=Normal) ||
- bClass->name()+sep+srcMi->scopePath == dstMi->scopePath ||
- dstMd->getClassDef()->compoundType()==Interface
- )
- {
- found=TRUE;
- }
- else // member can be reached via multiple paths in the
- // inheritance tree
- {
- //printf("$$ Existing member %s %s add scope %s\n",
- // dstMi->ambiguityResolutionScope.data(),
- // dstMd->name().data(),
- // dstMi->scopePath.left(dstMi->scopePath.find("::")+2).data());
-
- QCString scope=dstMi->scopePath.left(dstMi->scopePath.find(sep)+sepLen);
- if (scope!=dstMi->ambiguityResolutionScope.left(scope.length()))
- {
- dstMi->ambiguityResolutionScope.prepend(scope);
- }
- ambigue=TRUE;
- }
- }
- }
- //printf("member %s::%s hidden %d ambigue %d srcMi->ambigClass=%p\n",
- // srcCd->name().data(),srcMd->name().data(),hidden,ambigue,srcMi->ambigClass);
-
- // TODO: fix the case where a member is hidden by inheritance
- // of a member with the same name but with another prototype,
- // while there is more than one path to the member in the
- // base class due to multiple inheritance. In this case
- // it seems that the member is not reachable by prefixing a
- // scope name either (according to my compiler). Currently,
- // this case is shown anyway.
- if (!found && srcMd->protection()!=Private)
- {
- Protection prot=srcMd->protection();
- if (bcd->prot==Protected && prot==Public) prot=bcd->prot;
- else if (bcd->prot==Private) prot=bcd->prot;
-
- if (inlineInheritedMembers)
- {
- if (!isStandardFunc(srcMd))
- {
- //printf(" insertMember `%s'\n",srcMd->name().data());
- internalInsertMember(srcMd,prot,FALSE);
- }
- }
-
- Specifier virt=srcMi->virt;
- if (srcMi->virt==Normal && bcd->virt!=Normal) virt=bcd->virt;
-
- MemberInfo *newMi = new MemberInfo(srcMd,prot,virt,TRUE);
- newMi->scopePath=bClass->name()+sep+srcMi->scopePath;
- if (ambigue)
- {
- //printf("$$ New member %s %s add scope %s::\n",
- // srcMi->ambiguityResolutionScope.data(),
- // srcMd->name().data(),
- // bClass->name().data());
-
- QCString scope=bClass->name()+sep;
- if (scope!=srcMi->ambiguityResolutionScope.left(scope.length()))
- {
- newMi->ambiguityResolutionScope=
- scope+srcMi->ambiguityResolutionScope.copy();
- }
- }
- if (hidden)
- {
- if (srcMi->ambigClass==0)
- {
- newMi->ambigClass=bClass;
- newMi->ambiguityResolutionScope=bClass->name()+sep;
- }
- else
- {
- newMi->ambigClass=srcMi->ambigClass;
- newMi->ambiguityResolutionScope=srcMi->ambigClass->name()+sep;
- }
- }
- dstMni->append(newMi);
- }
- }
- }
- else // base class has a member that is not in the sub class => copy
- {
- // create a deep copy of the list (only the MemberInfo's will be
- // copied, not the actual MemberDef's)
- MemberNameInfo *newMni = 0;
- newMni = new MemberNameInfo(srcMni->memberName());
-
- // copy the member(s) from the base to the sub class
- MemberNameInfoIterator mnii(*srcMni);
- MemberInfo *mi;
- for (;(mi=mnii.current());++mnii)
- {
- Protection prot = mi->prot;
- if (bcd->prot==Protected)
- {
- if (prot==Public) prot=Protected;
- }
- else if (bcd->prot==Private)
- {
- prot=Private;
- }
- //printf("%s::%s: prot=%d bcd->prot=%d result=%d\n",
- // name().data(),mi->memberDef->name().data(),mi->prot,
- // bcd->prot,prot);
-
- if (mi->prot!=Private)
- {
- Specifier virt=mi->virt;
- if (mi->virt==Normal && bcd->virt!=Normal) virt=bcd->virt;
-
- if (inlineInheritedMembers)
- {
- if (!isStandardFunc(mi->memberDef))
- {
- //printf(" insertMember `%s'\n",mi->memberDef->name().data());
- internalInsertMember(mi->memberDef,prot,FALSE);
- }
- }
- //printf("Adding!\n");
- MemberInfo *newMi=new MemberInfo(mi->memberDef,prot,virt,TRUE);
- newMi->scopePath=bClass->name()+sep+mi->scopePath;
- newMi->ambigClass=mi->ambigClass;
- newMi->ambiguityResolutionScope=mi->ambiguityResolutionScope.copy();
- newMni->append(newMi);
- }
- }
-
- if (dstMnd==0)
- {
- m_impl->allMemberNameInfoSDict = new MemberNameInfoSDict(17);
- m_impl->allMemberNameInfoSDict->setAutoDelete(TRUE);
- dstMnd = m_impl->allMemberNameInfoSDict;
- }
- // add it to the dictionary
- dstMnd->append(newMni->memberName(),newMni);
- }
- }
- }
- }
- }
- //printf(" end mergeMembers\n");
-}
-
-//----------------------------------------------------------------------------
-
-/*! Merges the members of a Objective-C category into this class.
- */
-void ClassDef::mergeCategory(ClassDef *category)
-{
- static bool extractLocalMethods = Config_getBool("EXTRACT_LOCAL_METHODS");
- bool makePrivate = category->isLocal();
- // in case extract local methods is not enabled we don't add the methods
- // of the category in case it is defined in the .m file.
- if (makePrivate && !extractLocalMethods) return;
-
- category->setCategoryOf(this);
- category->setArtificial(TRUE);
- // make methods private for categories defined in the .m file
- //printf("%s::mergeCategory makePrivate=%d\n",name().data(),makePrivate);
-
- MemberNameInfoSDict *srcMnd = category->memberNameInfoSDict();
- MemberNameInfoSDict *dstMnd = m_impl->allMemberNameInfoSDict;
-
- if (srcMnd && dstMnd)
- {
- MemberNameInfoSDict::Iterator srcMnili(*srcMnd);
- MemberNameInfo *srcMni;
- for ( ; (srcMni=srcMnili.current()) ; ++srcMnili)
- {
- MemberNameInfo *dstMni=dstMnd->find(srcMni->memberName());
- if (dstMni) // method is already defined in the class
- {
- //printf("Existing member %s\n",srcMni->memberName());
- // TODO: we should remove the other member and insert this one.
- MemberInfo *mi = dstMni->getFirst();
- if (mi)
- {
- Protection prot = mi->prot;
- if (makePrivate) prot = Private;
- removeMemberFromLists(mi->memberDef);
- internalInsertMember(mi->memberDef,prot,FALSE);
- }
- }
- else // new method name
- {
- //printf("New member %s\n",srcMni->memberName());
- // create a deep copy of the list
- MemberNameInfo *newMni = 0;
- newMni = new MemberNameInfo(srcMni->memberName());
-
- // copy the member(s) from the category to this class
- MemberNameInfoIterator mnii(*srcMni);
- MemberInfo *mi;
- for (;(mi=mnii.current());++mnii)
- {
- //printf("Adding '%s'\n",mi->memberDef->name().data());
- Protection prot = mi->prot;
- if (makePrivate) prot = Private;
- MemberInfo *newMi=new MemberInfo(mi->memberDef,prot,mi->virt,mi->inherited);
- newMi->scopePath=mi->scopePath;
- newMi->ambigClass=mi->ambigClass;
- newMi->ambiguityResolutionScope=mi->ambiguityResolutionScope;
- newMni->append(newMi);
- mi->memberDef->moveTo(this);
- mi->memberDef->setCategory(category);
- internalInsertMember(mi->memberDef,prot,FALSE);
- }
-
- // add it to the dictionary
- dstMnd->append(newMni->memberName(),newMni);
- }
- }
- }
-}
-
-//----------------------------------------------------------------------------
-
-void ClassDef::addUsedClass(ClassDef *cd,const char *accessName,
- Protection prot)
-{
- static bool extractPrivate = Config_getBool("EXTRACT_PRIVATE");
- if (prot==Private && !extractPrivate) return;
- //printf("%s::addUsedClass(%s,%s)\n",name().data(),cd->name().data(),accessName);
- if (m_impl->usesImplClassDict==0)
- {
- m_impl->usesImplClassDict = new UsesClassDict(17);
- m_impl->usesImplClassDict->setAutoDelete(TRUE);
- }
- UsesClassDef *ucd=m_impl->usesImplClassDict->find(cd->name());
- if (ucd==0)
- {
- ucd = new UsesClassDef(cd);
- m_impl->usesImplClassDict->insert(cd->name(),ucd);
- //printf("Adding used class %s to class %s via accessor %s\n",
- // cd->name().data(),name().data(),accessName);
- }
- ucd->addAccessor(accessName);
-}
-
-void ClassDef::addUsedByClass(ClassDef *cd,const char *accessName,
- Protection prot)
-{
- static bool extractPrivate = Config_getBool("EXTRACT_PRIVATE");
- if (prot==Private && !extractPrivate) return;
- //printf("%s::addUsedByClass(%s,%s)\n",name().data(),cd->name().data(),accessName);
- if (m_impl->usedByImplClassDict==0)
- {
- m_impl->usedByImplClassDict = new UsesClassDict(17);
- m_impl->usedByImplClassDict->setAutoDelete(TRUE);
- }
- UsesClassDef *ucd=m_impl->usedByImplClassDict->find(cd->name());
- if (ucd==0)
- {
- ucd = new UsesClassDef(cd);
- m_impl->usedByImplClassDict->insert(cd->name(),ucd);
- //printf("Adding used by class %s to class %s\n",
- // cd->name().data(),name().data());
- }
- ucd->addAccessor(accessName);
-}
-
-
-#if 0
-/*! Builds up a dictionary of all classes that are used by the state of this
- * class (the "implementation").
- * Must be called before mergeMembers() is called!
- */
-
-void ClassDef::determineImplUsageRelation()
-{
- MemberNameInfoSDict::Iterator mnili(*m_impl->allMemberNameInfoSDict);
- MemberNameInfo *mni;
- for (;(mni=mnili.current());++mnili)
- {
- MemberNameInfoIterator mnii(*mni);
- MemberInfo *mi;
- for (mnii.toFirst();(mi=mnii.current());++mnii)
- {
- MemberDef *md=mi->memberDef;
- if (md->isVariable()) // for each member variable in this class
- {
- QCString type=removeRedundantWhiteSpace(md->typeString());
- //printf("in class %s found var type=`%s' name=`%s'\n",
- // name().data(),type.data(),md->name().data());
- int pos=0;
- QCString usedClassName;
- QCString templSpec;
- bool found=FALSE;
- while (extractClassNameFromType(type,pos,usedClassName,templSpec)!=-1 && !found)
- {
- //printf("usedClassName=`%s' templSpec=%s\n",usedClassName.data(),templSpec.data());
- // check if usedClassName is a template argument of its class
- ClassDef *cd=md->getClassDef();
- if (cd && cd->templateArguments())
- {
- ArgumentListIterator ali(*cd->templateArguments());
- Argument *arg;
- int count=0;
- for (ali.toFirst();(arg=ali.current());++ali,++count)
- {
- if (arg->name==usedClassName) // type is a template argument
- {
- found=TRUE;
- if (m_impl->usesImplClassDict==0) m_impl->usesImplClassDict = new UsesClassDict(257);
- cd = new ClassDef(cd->getDefFileName(),cd->getDefLine(),
- usedClassName,ClassDef::Class);
- cd->setIsTemplateBaseClass(count);
- UsesClassDef *ucd = new UsesClassDef(cd);
- m_impl->usesImplClassDict->insert(cd->name(),ucd);
- ucd->templSpecifiers = templSpec;
- ucd->addAccessor(md->name());
- Doxygen::hiddenClasses.append(cd);
- //printf("Adding used template argument %s to class %s\n",
- // cd->name().data(),name().data());
- //printf("Adding accessor %s to class %s\n",
- // md->name().data(),ucd->classDef->name().data());
- }
- }
- }
-
- if (!found)
- {
- cd=0;
- if (getNamespaceDef()!=0)
- {
- cd=getResolvedClass(getNamespaceDef()->name()+"::"+usedClassName,0,&templSpec);
- }
- if (cd==0) cd=getResolvedClass(name()+"::"+usedClassName,0,&templSpec);
- if (cd==0) cd=getResolvedClass(usedClassName,0,&templSpec); // TODO: also try inbetween scopes!
- //printf("Search for class %s result=%p\n",usedClassName.data(),cd);
- if (cd) // class exists
- {
- found=TRUE;
- if (m_impl->usesImplClassDict==0)
- {
- m_impl->usesImplClassDict = new UsesClassDict(257);
- m_impl->usesImplClassDict->setAutoDelete(TRUE);
- }
- UsesClassDef *ucd=m_impl->usesImplClassDict->find(cd->name());
- if (ucd==0 || ucd->templSpecifiers!=templSpec)
- {
- ucd = new UsesClassDef(cd);
- m_impl->usesImplClassDict->insert(cd->name(),ucd);
- ucd->templSpecifiers = templSpec;
- //printf("Adding used class %s to class %s\n",
- // cd->name().data(),name().data());
- }
- ucd->addAccessor(md->name());
- //printf("Adding accessor %s to class %s\n",
- // md->name().data(),ucd->classDef->name().data());
- }
- }
- }
- }
- }
- }
-#ifdef DUMP
- if (m_impl->usesClassDict)
- {
- msg("Class %s uses the following classes:\n",name().data());
- UsesClassDictIterator ucdi(*m_impl->usesClassDict);
- UsesClassDef *ucd;
- for (;(ucd=ucdi.current());++ucdi)
- {
- msg(" %s via ",ucd->classDef->name().data());
- QDictIterator<void> dvi(*ucd->accessors);
- const char *s;
- for (;(s=dvi.currentKey());++dvi)
- {
- msg("%s ",s);
- }
- msg("\n");
- }
- }
-#endif
-}
-
-//----------------------------------------------------------------------------
-
-// I have disabled this code because the graphs it renders quickly become
-// too large to be of practical use.
-
-void ClassDef::addUsedInterfaceClasses(MemberDef *md,const char *typeStr)
-{
- QCString type = typeStr;
- static const QRegExp re("[a-z_A-Z][a-z_A-Z0-9:]*");
- int p=0,i,l;
- while ((i=re.match(type,p,&l))!=-1) // for each class name in the type
- {
- ClassDef *cd=getClass(name()+"::"+type.mid(i,l));
- if (cd==0) cd=getClass(type.mid(i,l)); // TODO: also try inbetween scopes!
- if (cd && cd!=this && !isBaseClass(cd))
- {
- if (m_impl->usesIntfClassDict==0)
- {
- m_impl->usesIntfClassDict = new UsesClassDict(257);
- }
- UsesClassDef *ucd=m_impl->usesIntfClassDict->find(cd->name());
- if (ucd==0)
- {
- ucd = new UsesClassDef(cd);
- m_impl->usesIntfClassDict->insert(cd->name(),ucd);
- //printf("in class `%s' adding used intf class `%s'\n",
- // name().data(),cd->name().data());
- }
- ucd->addAccessor(md->name());
- //printf("in class `%s' adding accessor `%s' to class `%s'\n",
- // name().data(),md->name().data(),ucd->classDef->name().data());
- }
- p=i+l;
- }
-}
-
-void ClassDef::determineIntfUsageRelation()
-{
- MemberNameInfoSDict::Iterator mnili(*m_impl->allMemberNameInfoList);
- MemberNameInfo *mni;
- for (;(mni=mnili.current());++mnili)
- {
- MemberNameInfoIterator mnii(*mni);
- MemberInfo *mi;
- for (mnii.toFirst();(mi=mnii.current());++mnii)
- {
- MemberDef *md=mi->memberDef;
-
- // compute the protection level for this member
- Protection protect=md->protection();
- if (mi->prot==Protected) // inherited protection
- {
- if (protect==Public) protect=Protected;
- else if (protect==Protected) protect=Private;
- }
-
- if (!md->name().isEmpty() && md->name()[0]!='@' &&
- (mi->prot!=Private && protect!=Private)
- )
- {
- // add classes found in the return type
- addUsedInterfaceClasses(md,md->typeString());
- ArgumentList *al = md->argumentList();
- if (al) // member has arguments
- {
- // add classes found in the types of the argument list
- ArgumentListIterator ali(*al);
- Argument *a;
- for (;(a=ali.current());++ali)
- {
- if (!a->type.isEmpty() && a->type.at(0)!='@')
- {
- addUsedInterfaceClasses(md,a->type);
- }
- }
- }
- }
- }
- }
-}
-#endif
-
-QCString ClassDef::compoundTypeString() const
-{
- if (getLanguage()==SrcLangExt_Fortran)
- {
- switch (m_impl->compType)
- {
- case Class: return "module";
- case Struct: return "type";
- case Union: return "union";
- case Interface: return "interface";
- case Protocol: return "protocol";
- case Category: return "category";
- case Exception: return "exception";
- default: return "unknown";
- }
- }
- else
- {
- switch (m_impl->compType)
- {
- case Class: return isJavaEnum() ? "enum" : "class";
- case Struct: return "struct";
- case Union: return "union";
- case Interface: return getLanguage()==SrcLangExt_ObjC ? "class" : "interface";
- case Protocol: return "protocol";
- case Category: return "category";
- case Exception: return "exception";
- default: return "unknown";
- }
- }
-}
-
-QCString ClassDef::getOutputFileBase() const
-{
- if (!Doxygen::generatingXmlOutput)
- {
- static bool inlineGroupedClasses = Config_getBool("INLINE_GROUPED_CLASSES");
- static bool inlineSimpleClasses = Config_getBool("INLINE_SIMPLE_STRUCTS");
- Definition *scope=0;
- if (inlineGroupedClasses && partOfGroups()!=0)
- {
- // point to the group that embeds this class
- return partOfGroups()->at(0)->getOutputFileBase();
- }
- else if (inlineSimpleClasses && m_impl->isSimple && partOfGroups()!=0)
- {
- // point to simple struct inside a group
- return partOfGroups()->at(0)->getOutputFileBase();
- }
- else if (inlineSimpleClasses && m_impl->isSimple && (scope=getOuterScope()))
- {
- if (scope==Doxygen::globalScope && getFileDef() && getFileDef()->isLinkableInProject()) // simple struct embedded in file
- {
- return getFileDef()->getOutputFileBase();
- }
- else if (scope->isLinkableInProject()) // simple struct embedded in other container (namespace/group/class)
- {
- return getOuterScope()->getOutputFileBase();
- }
- }
- }
- if (m_impl->templateMaster)
- {
- // point to the template of which this class is an instance
- return m_impl->templateMaster->getOutputFileBase();
- }
- else if (isReference())
- {
- // point to the external location
- return m_impl->fileName;
- }
- else
- {
- // normal locally defined class
- return convertNameToFile(m_impl->fileName);
- }
-}
-
-QCString ClassDef::getInstanceOutputFileBase() const
-{
- if (isReference())
- {
- return m_impl->fileName;
- }
- else
- {
- return convertNameToFile(m_impl->fileName);
- }
-}
-
-QCString ClassDef::getFileBase() const
-{
- if (m_impl->templateMaster)
- {
- return m_impl->templateMaster->getFileBase();
- }
- else
- {
- return m_impl->fileName;
- }
-}
-
-QCString ClassDef::getSourceFileBase() const
-{
- if (m_impl->templateMaster)
- {
- return m_impl->templateMaster->getSourceFileBase();
- }
- else
- {
- return convertNameToFile(m_impl->fileName)+"_source";
- }
-}
-
-void ClassDef::setGroupDefForAllMembers(GroupDef *gd,Grouping::GroupPri_t pri,const QCString &fileName,int startLine,bool hasDocs)
-{
- gd->addClass(this);
- //printf("ClassDef::setGroupDefForAllMembers(%s)\n",gd->name().data());
- if (m_impl->allMemberNameInfoSDict==0) return;
- MemberNameInfoSDict::Iterator mnili(*m_impl->allMemberNameInfoSDict);
- MemberNameInfo *mni;
- for (;(mni=mnili.current());++mnili)
- {
- MemberNameInfoIterator mnii(*mni);
- MemberInfo *mi;
- for (mnii.toFirst();(mi=mnii.current());++mnii)
- {
- MemberDef *md=mi->memberDef;
- md->setGroupDef(gd,pri,fileName,startLine,hasDocs);
- gd->insertMember(md,TRUE);
- ClassDef *innerClass = md->getClassDefOfAnonymousType();
- if (innerClass) innerClass->setGroupDefForAllMembers(gd,pri,fileName,startLine,hasDocs);
- }
- }
-}
-
-void ClassDef::addInnerCompound(Definition *d)
-{
- //printf("**** %s::addInnerCompound(%s)\n",name().data(),d->name().data());
- if (d->definitionType()==Definition::TypeClass) // only classes can be
- // nested in classes.
- {
- if (m_impl->innerClasses==0)
- {
- m_impl->innerClasses = new ClassSDict(17);
- }
- m_impl->innerClasses->inSort(d->localName(),(ClassDef *)d);
- }
-}
-
-Definition *ClassDef::findInnerCompound(const char *name)
-{
- Definition *result=0;
- if (name==0) return 0;
- if (m_impl->innerClasses)
- {
- result = m_impl->innerClasses->find(name);
- }
- return result;
-}
-
-//void ClassDef::initTemplateMapping()
-//{
-// m_impl->templateMapping->clear();
-// ArgumentList *al = templateArguments();
-// if (al)
-// {
-// ArgumentListIterator ali(*al);
-// Argument *arg;
-// for (ali.toFirst();(arg=ali.current());++ali)
-// {
-// setTemplateArgumentMapping(arg->name,arg->defval);
-// }
-// }
-//}
-//void ClassDef::setTemplateArgumentMapping(const char *formal,const char *actual)
-//{
-// //printf("ClassDef::setTemplateArgumentMapping(%s,%s)\n",formal,actual);
-// if (m_impl->templateMapping && formal)
-// {
-// if (m_impl->templateMapping->find(formal))
-// {
-// m_impl->templateMapping->remove(formal);
-// }
-// m_impl->templateMapping->insert(formal,new QCString(actual));
-// }
-//}
-//
-//QCString ClassDef::getTemplateArgumentMapping(const char *formal) const
-//{
-// if (m_impl->templateMapping && formal)
-// {
-// QCString *s = m_impl->templateMapping->find(formal);
-// if (s)
-// {
-// return *s;
-// }
-// }
-// return "";
-//}
-
-ClassDef *ClassDef::insertTemplateInstance(const QCString &fileName,
- int startLine, const QCString &templSpec,bool &freshInstance)
-{
- freshInstance = FALSE;
- if (m_impl->templateInstances==0)
- {
- m_impl->templateInstances = new QDict<ClassDef>(17);
- }
- ClassDef *templateClass=m_impl->templateInstances->find(templSpec);
- if (templateClass==0)
- {
- Debug::print(Debug::Classes,0," New template instance class `%s'`%s'\n",name().data(),templSpec.data());
- templateClass = new ClassDef(
- fileName,startLine,localName()+templSpec,ClassDef::Class);
- templateClass->setTemplateMaster(this);
- templateClass->setOuterScope(getOuterScope());
- templateClass->setHidden(isHidden());
- m_impl->templateInstances->insert(templSpec,templateClass);
- freshInstance=TRUE;
- }
- return templateClass;
-}
-
-ClassDef *ClassDef::getVariableInstance(const char *templSpec)
-{
- if (m_impl->variableInstances==0)
- {
- m_impl->variableInstances = new QDict<ClassDef>(17);
- m_impl->variableInstances->setAutoDelete(TRUE);
- }
- ClassDef *templateClass=m_impl->variableInstances->find(templSpec);
- if (templateClass==0)
- {
- Debug::print(Debug::Classes,0," New template variable instance class `%s'`%s'\n",qPrint(name()),qPrint(templSpec));
- templateClass = new ClassDef("<code>",1,name()+templSpec,
- ClassDef::Class,0,0,FALSE);
- templateClass->addMembersToTemplateInstance( this, templSpec );
- templateClass->setTemplateMaster(this);
- m_impl->variableInstances->insert(templSpec,templateClass);
- }
- return templateClass;
-}
-
-void ClassDef::setTemplateBaseClassNames(QDict<int> *templateNames)
-{
- if (templateNames==0) return;
- if (m_impl->templBaseClassNames==0)
- {
- m_impl->templBaseClassNames = new QDict<int>(17);
- m_impl->templBaseClassNames->setAutoDelete(TRUE);
- }
- // make a deep copy of the dictionary.
- QDictIterator<int> qdi(*templateNames);
- for (;qdi.current();++qdi)
- {
- if (m_impl->templBaseClassNames->find(qdi.currentKey())==0)
- {
- m_impl->templBaseClassNames->insert(qdi.currentKey(),new int(*qdi.current()));
- }
- }
-}
-
-QDict<int> *ClassDef::getTemplateBaseClassNames() const
-{
- return m_impl->templBaseClassNames;
-}
-
-void ClassDef::addMembersToTemplateInstance(ClassDef *cd,const char *templSpec)
-{
- //printf("%s::addMembersToTemplateInstance(%s,%s)\n",name().data(),cd->name().data(),templSpec);
- if (cd->memberNameInfoSDict()==0) return;
- MemberNameInfoSDict::Iterator mnili(*cd->memberNameInfoSDict());
- MemberNameInfo *mni;
- for (;(mni=mnili.current());++mnili)
- {
- MemberNameInfoIterator mnii(*mni);
- MemberInfo *mi;
- for (mnii.toFirst();(mi=mnii.current());++mnii)
- {
- ArgumentList *actualArguments = new ArgumentList;
- stringToArgumentList(templSpec,actualArguments);
- MemberDef *md = mi->memberDef;
- MemberDef *imd = md->createTemplateInstanceMember(
- cd->templateArguments(),actualArguments);
- delete actualArguments;
- //printf("%s->setMemberClass(%p)\n",imd->name().data(),this);
- imd->setMemberClass(this);
- imd->setTemplateMaster(md);
- imd->setDocumentation(md->documentation(),md->docFile(),md->docLine());
- imd->setBriefDescription(md->briefDescription(),md->briefFile(),md->briefLine());
- imd->setInbodyDocumentation(md->inbodyDocumentation(),md->inbodyFile(),md->inbodyLine());
- imd->setMemberSpecifiers(md->getMemberSpecifiers());
- imd->setMemberGroupId(md->getMemberGroupId());
- insertMember(imd);
- //printf("Adding member=%s %s%s to class %s templSpec %s\n",
- // imd->typeString(),imd->name().data(),imd->argsString(),
- // imd->getClassDef()->name().data(),templSpec);
- // insert imd in the list of all members
- //printf("Adding member=%s class=%s\n",imd->name().data(),name().data());
- MemberName *mn = Doxygen::memberNameSDict->find(imd->name());
- if (mn==0)
- {
- mn = new MemberName(imd->name());
- Doxygen::memberNameSDict->append(imd->name(),mn);
- }
- mn->append(imd);
- }
- }
-}
-
-QCString ClassDef::getReference() const
-{
- if (m_impl->templateMaster)
- {
- return m_impl->templateMaster->getReference();
- }
- else
- {
- return Definition::getReference();
- }
-}
-
-bool ClassDef::isReference() const
-{
- if (m_impl->templateMaster)
- {
- return m_impl->templateMaster->isReference();
- }
- else
- {
- return Definition::isReference();
- }
-}
-
-void ClassDef::getTemplateParameterLists(QList<ArgumentList> &lists) const
-{
- Definition *d=getOuterScope();
- if (d)
- {
- if (d->definitionType()==Definition::TypeClass)
- {
- ClassDef *cd=(ClassDef *)d;
- cd->getTemplateParameterLists(lists);
- }
- }
- if (templateArguments())
- {
- lists.append(templateArguments());
- }
-}
-
-QCString ClassDef::qualifiedNameWithTemplateParameters(
- QList<ArgumentList> *actualParams) const
-{
- //static bool optimizeOutputJava = Config_getBool("OPTIMIZE_OUTPUT_JAVA");
- static bool hideScopeNames = Config_getBool("HIDE_SCOPE_NAMES");
- //printf("qualifiedNameWithTemplateParameters() localName=%s\n",localName().data());
- QCString scName;
- Definition *d=getOuterScope();
- if (d)
- {
- if (d->definitionType()==Definition::TypeClass)
- {
- ClassDef *cd=(ClassDef *)d;
- scName = cd->qualifiedNameWithTemplateParameters(actualParams);
- }
- else if (!hideScopeNames)
- {
- scName = d->qualifiedName();
- }
- }
-
- SrcLangExt lang = getLanguage();
- QCString scopeSeparator = getLanguageSpecificSeparator(lang);
- if (!scName.isEmpty()) scName+=scopeSeparator;
-
- bool isSpecialization = localName().find('<')!=-1;
- bool isGeneric = getLanguage()==SrcLangExt_CSharp;
-
- QCString clName = className();
- if (isGeneric && clName.right(2)=="-g")
- {
- clName = clName.left(clName.length()-2);
- }
- //printf("m_impl->lang=%d clName=%s\n",m_impl->lang,clName.data());
- scName+=clName;
- ArgumentList *al=0;
- if (templateArguments())
- {
- if (actualParams && (al=actualParams->current()))
- {
- if (!isSpecialization)
- {
- scName+=tempArgListToString(al);
- }
- actualParams->next();
- }
- else
- {
- if (!isSpecialization)
- {
- scName+=tempArgListToString(templateArguments());
- }
- }
- }
- //printf("qualifiedNameWithTemplateParameters: scope=%s qualifiedName=%s\n",name().data(),scName.data());
- return scName;
-}
-
-QCString ClassDef::className() const
-{
- if (m_impl->className.isEmpty())
- {
- return localName();
- }
- else
- {
- return m_impl->className;
- }
-};
-
-void ClassDef::setClassName(const char *name)
-{
- m_impl->className = name;
-}
-
-void ClassDef::addListReferences()
-{
- SrcLangExt lang = getLanguage();
- if (!isLinkableInProject()) return;
- //printf("ClassDef(%s)::addListReferences()\n",name().data());
- {
- LockingPtr< QList<ListItemInfo> > xrefItems = xrefListItems();
- addRefItem(xrefItems.pointer(),
- qualifiedName(),
- lang==SrcLangExt_Fortran ? theTranslator->trType(TRUE,TRUE)
- : theTranslator->trClass(TRUE,TRUE),
- getOutputFileBase(),
- displayName(),
- 0
- );
- }
- if (m_impl->memberGroupSDict)
- {
- MemberGroupSDict::Iterator mgli(*m_impl->memberGroupSDict);
- MemberGroup *mg;
- for (;(mg=mgli.current());++mgli)
- {
- mg->addListReferences(this);
- }
- }
- QListIterator<MemberList> mli(m_impl->memberLists);
- MemberList *ml;
- for (mli.toFirst();(ml=mli.current());++mli)
- {
- if (ml->listType()&MemberList::detailedLists)
- {
- ml->addListReferences(this);
- }
- }
-}
-
-MemberDef *ClassDef::getMemberByName(const QCString &name) const
-{
- MemberDef *xmd = 0;
- if (m_impl->allMemberNameInfoSDict)
- {
- MemberNameInfo *mni = m_impl->allMemberNameInfoSDict->find(name);
- if (mni)
- {
- const int maxInheritanceDepth = 100000;
- int mdist=maxInheritanceDepth;
- MemberNameInfoIterator mnii(*mni);
- MemberInfo *mi;
- for (mnii.toFirst();(mi=mnii.current());++mnii)
- {
- ClassDef *mcd=mi->memberDef->getClassDef();
- int m=minClassDistance(this,mcd);
- //printf("found member in %s linkable=%d m=%d\n",
- // mcd->name().data(),mcd->isLinkable(),m);
- if (m<mdist && mcd->isLinkable())
- {
- mdist=m;
- xmd=mi->memberDef;
- }
- }
- }
- }
- //printf("getMemberByName(%s)=%p\n",name.data(),xmd);
- return xmd;
-}
-
-bool ClassDef::isAccessibleMember(MemberDef *md)
-{
- return md->getClassDef() && isBaseClass(md->getClassDef(),TRUE);
-}
-
-MemberList *ClassDef::createMemberList(MemberList::ListType lt)
-{
- m_impl->memberLists.setAutoDelete(TRUE);
- QListIterator<MemberList> mli(m_impl->memberLists);
- MemberList *ml;
- for (mli.toFirst();(ml=mli.current());++mli)
- {
- if (ml->listType()==lt)
- {
- return ml;
- }
- }
- // not found, create a new member list
- ml = new MemberList(lt);
- m_impl->memberLists.append(ml);
- return ml;
-}
-
-MemberList *ClassDef::getMemberList(MemberList::ListType lt)
-{
- MemberList *ml = m_impl->memberLists.first();
- while (ml)
- {
- if (ml->listType()==lt)
- {
- return ml;
- }
- ml = m_impl->memberLists.next();
- }
- return 0;
-}
-
-void ClassDef::addMemberToList(MemberList::ListType lt,MemberDef *md,bool isBrief)
-{
- static bool sortBriefDocs = Config_getBool("SORT_BRIEF_DOCS");
- static bool sortMemberDocs = Config_getBool("SORT_MEMBER_DOCS");
- MemberList *ml = createMemberList(lt);
- ml->setNeedsSorting((isBrief && sortBriefDocs) || (!isBrief && sortMemberDocs));
- ml->append(md);
-
- // for members in the declaration lists we set the section, needed for member grouping
- if ((ml->listType()&MemberList::detailedLists)==0) md->setSectionList(this,ml);
-}
-
-void ClassDef::sortMemberLists()
-{
- MemberList *ml = m_impl->memberLists.first();
- while (ml)
- {
- if (ml->needsSorting()) { ml->sort(); ml->setNeedsSorting(FALSE); }
- ml = m_impl->memberLists.next();
- }
-}
-
-void ClassDef::writeMemberDeclarations(OutputList &ol,MemberList::ListType lt,const QCString &title,
- const char *subTitle,bool showInline)
-{
- //printf("%s: ClassDef::writeMemberDeclarations\n",name().data());
- //static bool optimizeVhdl = Config_getBool("OPTIMIZE_OUTPUT_VHDL");
- MemberList * ml = getMemberList(lt);
- if (ml)
- {
- if (getLanguage()==SrcLangExt_VHDL) // use specific declarations function
- {
- VhdlDocGen::writeVhdlDeclarations(ml,ol,0,this,0,0);
- }
- else // use generic declaration function
- {
- ml->writeDeclarations(ol,this,0,0,0,title,subTitle,FALSE,showInline);
- }
- }
-}
-
-void ClassDef::writeMemberDocumentation(OutputList &ol,MemberList::ListType lt,const QCString &title,bool showInline)
-{
- //printf("%s: ClassDef::writeMemberDocumentation()\n",name().data());
- MemberList * ml = getMemberList(lt);
- if (ml) ml->writeDocumentation(ol,displayName(),this,title,FALSE,showInline);
-}
-
-void ClassDef::writeSimpleMemberDocumentation(OutputList &ol,MemberList::ListType lt)
-{
- //printf("%s: ClassDef::writeSimpleMemberDocumentation()\n",name().data());
- MemberList * ml = getMemberList(lt);
- if (ml) ml->writeSimpleDocumentation(ol,this);
-}
-
-void ClassDef::writePlainMemberDeclaration(OutputList &ol,MemberList::ListType lt,bool inGroup)
-{
- //printf("%s: ClassDef::writePlainMemberDeclaration()\n",name().data());
- MemberList * ml = getMemberList(lt);
- if (ml)
- {
- ml->setInGroup(inGroup);
- ml->writePlainDeclarations(ol,this,0,0,0);
- }
-}
-
-bool ClassDef::isLocal() const
-{
- return m_impl->isLocal;
-}
-
-ClassSDict *ClassDef::getClassSDict()
-{
- return m_impl->innerClasses;
-}
-
-ClassDef::CompoundType ClassDef::compoundType() const
-{
- return m_impl->compType;
-}
-
-BaseClassList *ClassDef::baseClasses() const
-{
- return m_impl->inherits;
-}
-
-BaseClassList *ClassDef::subClasses() const
-{
- return m_impl->inheritedBy;
-}
-
-MemberNameInfoSDict *ClassDef::memberNameInfoSDict() const
-{
- return m_impl->allMemberNameInfoSDict;
-}
-
-Protection ClassDef::protection() const
-{
- return m_impl->prot;
-}
-
-ArgumentList *ClassDef::templateArguments() const
-{
- return m_impl->tempArgs;
-}
-
-NamespaceDef *ClassDef::getNamespaceDef() const
-{
- return m_impl->nspace;
-}
-
-FileDef *ClassDef::getFileDef() const
-{
- return m_impl->fileDef;
-}
-
-QDict<ClassDef> *ClassDef::getTemplateInstances() const
-{
- return m_impl->templateInstances;
-}
-
-ClassDef *ClassDef::templateMaster() const
-{
- return m_impl->templateMaster;
-}
-
-bool ClassDef::isTemplate() const
-{
- return m_impl->tempArgs!=0;
-}
-
-IncludeInfo *ClassDef::includeInfo() const
-{
- return m_impl->incInfo;
-}
-
-UsesClassDict *ClassDef::usedImplementationClasses() const
-{
- return m_impl->usesImplClassDict;
-}
-
-UsesClassDict *ClassDef::usedByImplementationClasses() const
-{
- return m_impl->usedByImplClassDict;
-}
-
-UsesClassDict *ClassDef::usedInterfaceClasses() const
-{
- return m_impl->usesIntfClassDict;
-}
-
-bool ClassDef::isTemplateArgument() const
-{
- return m_impl->isTemplArg;
-}
-
-bool ClassDef::isAbstract() const
-{
- return m_impl->isAbstract;
-}
-
-bool ClassDef::isObjectiveC() const
-{
- return getLanguage()==SrcLangExt_ObjC;
-}
-
-bool ClassDef::isCSharp() const
-{
- return getLanguage()==SrcLangExt_CSharp;
-}
-
-ClassDef *ClassDef::categoryOf() const
-{
- return m_impl->categoryOf;
-}
-
-const QList<MemberList> &ClassDef::getMemberLists() const
-{
- return m_impl->memberLists;
-}
-
-MemberGroupSDict *ClassDef::getMemberGroupSDict() const
-{
- return m_impl->memberGroupSDict;
-}
-
-void ClassDef::setNamespace(NamespaceDef *nd)
-{
- m_impl->nspace = nd;
-}
-
-void ClassDef::setFileDef(FileDef *fd)
-{
- m_impl->fileDef=fd;
-}
-
-void ClassDef::setSubGrouping(bool enabled)
-{
- m_impl->subGrouping = enabled;
-}
-
-void ClassDef::setProtection(Protection p)
-{
- m_impl->prot=p;
-}
-
-void ClassDef::setIsStatic(bool b)
-{
- m_impl->isStatic=b;
-}
-
-void ClassDef::setCompoundType(CompoundType t)
-{
- m_impl->compType = t;
-}
-
-void ClassDef::setTemplateMaster(ClassDef *tm)
-{
- m_impl->templateMaster=tm;
-}
-
-void ClassDef::makeTemplateArgument(bool b)
-{
- m_impl->isTemplArg = b;
-}
-
-void ClassDef::setCategoryOf(ClassDef *cd)
-{
- m_impl->categoryOf = cd;
-}
-
-void ClassDef::setUsedOnly(bool b)
-{
- m_impl->usedOnly = b;
-}
-
-bool ClassDef::isUsedOnly() const
-{
- return m_impl->usedOnly;
-}
-
-bool ClassDef::isSimple() const
-{
- return m_impl->isSimple;
-}
-
-MemberDef *ClassDef::isSmartPointer() const
-{
- return m_impl->arrowOperator;
-}
-
-void ClassDef::reclassifyMember(MemberDef *md,MemberDef::MemberType t)
-{
- md->setMemberType(t);
- MemberList *ml = m_impl->memberLists.first();
- while (ml)
- {
- ml->remove(md);
- ml = m_impl->memberLists.next();
- }
- insertMember(md);
-}
-
-QCString ClassDef::anchor() const
-{
- QCString anc;
- if (isEmbeddedInOuterScope() && !Doxygen::generatingXmlOutput)
- {
- if (m_impl->templateMaster)
- {
- // point to the template of which this class is an instance
- anc = m_impl->templateMaster->getOutputFileBase();
- }
- else if (isReference())
- {
- // point to the external location
- anc = m_impl->fileName;
- }
- else
- {
- // normal locally defined class
- anc = convertNameToFile(m_impl->fileName);
- }
- }
- return anc;
-}
-
-bool ClassDef::isEmbeddedInOuterScope() const
-{
- static bool inlineGroupedClasses = Config_getBool("INLINE_GROUPED_CLASSES");
- static bool inlineSimpleClasses = Config_getBool("INLINE_SIMPLE_STRUCTS");
-
- Definition *container = getOuterScope();
-
- bool containerLinkable =
- container &&
- (
- (container==Doxygen::globalScope && getFileDef() && getFileDef()->isLinkableInProject()) || // global class in documented file
- container->isLinkableInProject() // class in documented scope
- );
-
- // inline because of INLINE_GROUPED_CLASSES=YES ?
- bool b1 = (inlineGroupedClasses && partOfGroups()!=0); // a grouped class
- // inline because of INLINE_SIMPLE_STRUCTS=YES ?
- bool b2 = (inlineSimpleClasses && m_impl->isSimple && // a simple class
- (containerLinkable || // in a documented container
- partOfGroups()!=0 // or part of a group
- )
- );
- //printf("%s::isEmbeddedInOuterScope(): inlineGroupedClasses=%d "
- // "inlineSimpleClasses=%d partOfGroups()=%p m_impl->isSimple=%d "
- // "getOuterScope()=%p b1=%d b2=%d\n",
- // name().data(),inlineGroupedClasses,inlineSimpleClasses,
- // partOfGroups().pointer(),m_impl->isSimple,getOuterScope(),b1,b2);
- return b1 || b2; // either reason will do
-}
-
-const ClassList *ClassDef::taggedInnerClasses() const
-{
- return m_impl->taggedInnerClasses;
-}
-
-void ClassDef::addTaggedInnerClass(ClassDef *cd)
-{
- if (m_impl->taggedInnerClasses==0)
- {
- m_impl->taggedInnerClasses = new ClassList;
- }
- m_impl->taggedInnerClasses->append(cd);
-}
-
-ClassDef *ClassDef::tagLessReference() const
-{
- return m_impl->tagLessRef;
-}
-
-void ClassDef::setTagLessReference(ClassDef *cd)
-{
- m_impl->tagLessRef = cd;
-}
-
-void ClassDef::removeMemberFromLists(MemberDef *md)
-{
- MemberList *ml = m_impl->memberLists.first();
- while (ml)
- {
- ml->remove(md);
- ml = m_impl->memberLists.next();
- }
-}
-
-bool ClassDef::isJavaEnum() const
-{
- return m_impl->isJavaEnum;
-}
diff --git a/trunk/src/classdef.h b/trunk/src/classdef.h
deleted file mode 100644
index 205b437..0000000
--- a/trunk/src/classdef.h
+++ /dev/null
@@ -1,495 +0,0 @@
-/******************************************************************************
- *
- *
- *
- * Copyright (C) 1997-2012 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.
- *
- */
-
-#ifndef CLASSDEF_H
-#define CLASSDEF_H
-
-#include "qtbc.h"
-#include <qlist.h>
-#include <qdict.h>
-#include <qstrlist.h>
-
-#include "util.h"
-#include "memberlist.h"
-#include "definition.h"
-#include "sortdict.h"
-
-class MemberDict;
-class ClassList;
-class ClassSDict;
-class OutputList;
-class FileDef;
-class BaseClassList;
-class NamespaceDef;
-class MemberDef;
-class ExampleSDict;
-class MemberNameInfoSDict;
-class UsesClassDict;
-class MemberGroupSDict;
-class QTextStream;
-class PackageDef;
-class GroupDef;
-class StringDict;
-struct IncludeInfo;
-class ClassDefImpl;
-
-/*! \brief This class contains all information about a compound.
- *
- * A compound can be a class, struct, union, interface, or exception.
- * \note This class should be renamed to CompoundDef
- */
-class ClassDef : public Definition
-{
- public:
- /*! The various compound types */
- enum CompoundType { Class, //=Entry::CLASS_SEC,
- Struct, //=Entry::STRUCT_SEC,
- Union, //=Entry::UNION_SEC,
- Interface, //=Entry::INTERFACE_SEC,
- Protocol, //=Entry::PROTOCOL_SEC,
- Category, //=Entry::CATEGORY_SEC,
- Exception //=Entry::EXCEPTION_SEC
- };
-
- /*! Creates a new compound definition.
- * \param fileName full path and file name in which this compound was
- * found.
- * \param startLine line number where the definition of this compound
- * starts.
- * \param name the name of this compound (including scope)
- * \param ct the kind of Compound
- * \param ref the tag file from which this compound is extracted
- * or 0 if the compound doesn't come from a tag file
- * \param fName the file name as found in the tag file.
- * This overwrites the file that doxygen normally
- * generates based on the compound type & name.
- * \param isSymbol If TRUE this class name is added as a publicly
- * visible (and referencable) symbol.
- * \param isJavaEnum If TRUE this class is actually a Java enum.
- * I didn't add this to CompoundType to avoid having
- * to adapt all translators.
- */
- ClassDef(const char *fileName,int startLine,
- const char *name,CompoundType ct,
- const char *ref=0,const char *fName=0,
- bool isSymbol=TRUE,bool isJavaEnum=FALSE);
- /*! Destroys a compound definition. */
- ~ClassDef();
-
- //-----------------------------------------------------------------------------------
- // --- getters
- //-----------------------------------------------------------------------------------
-
- /*! Used for RTTI, this is a class */
- DefType definitionType() const { return TypeClass; }
-
- /*! Returns the unique base name (without extension) of the class's file on disk */
- QCString getOutputFileBase() const;
- QCString getInstanceOutputFileBase() const;
- QCString getFileBase() const;
-
- /*! Returns the base name for the source code file */
- QCString getSourceFileBase() const;
-
- /*! If this class originated from a tagfile, this will return the tag file reference */
- QCString getReference() const;
-
- /*! Returns TRUE if this class is imported via a tag file */
- bool isReference() const;
-
- /*! Returns TRUE if this is a local class definition, see EXTRACT_LOCAL_CLASSES */
- bool isLocal() const;
-
- /*! returns the classes nested into this class */
- ClassSDict *getClassSDict();
-
- /*! returns TRUE if this class has documentation */
- bool hasDocumentation() const;
-
- /*! Returns the name as it is appears in the documentation */
- QCString displayName() const;
-
- /*! Returns the type of compound this is, i.e. class/struct/union/.. */
- CompoundType compoundType() const;
-
- /*! Returns the type of compound as a string */
- QCString compoundTypeString() const;
-
- /*! Returns the list of base classes from which this class directly
- * inherits.
- */
- BaseClassList *baseClasses() const;
-
- /*! Returns the list of sub classes that directly derive from this class
- */
- BaseClassList *subClasses() const;
-
- /*! Returns a dictionary of all members. This includes any inherited
- * members. Members are sorted alphabetically.
- */
- MemberNameInfoSDict *memberNameInfoSDict() const;
-
- /*! Return the protection level (Public,Protected,Private) in which
- * this compound was found.
- */
- Protection protection() const;
-
- /*! returns TRUE iff a link is possible to this item within this project.
- */
- bool isLinkableInProject() const;
-
- /*! return TRUE iff a link to this class is possible (either within
- * this project, or as a cross-reference to another project).
- */
- bool isLinkable() const;
-
- /*! the class is visible in a class diagram, or class hierarchy */
- bool isVisibleInHierarchy();
-
- /*! Returns the template arguments of this class
- * Will return 0 if not applicable.
- */
- ArgumentList *templateArguments() const;
-
- /*! Returns the namespace this compound is in, or 0 if it has a global
- * scope.
- */
- NamespaceDef *getNamespaceDef() const;
-
- /*! Returns the file in which this compound's definition can be found.
- * Should not return 0 (but it might be a good idea to check anyway).
- */
- FileDef *getFileDef() const;
-
- /*! Returns the Java package this class is in or 0 if not applicable.
- */
-
- MemberDef *getMemberByName(const QCString &) const;
-
- /*! Returns TRUE iff \a bcd is a direct or indirect base class of this
- * class. This function will recusively traverse all branches of the
- * inheritance tree.
- */
- bool isBaseClass(ClassDef *bcd,bool followInstances,int level=0);
-
- /*! returns TRUE iff \a md is a member of this class or of the
- * the public/protected members of a base class
- */
- bool isAccessibleMember(MemberDef *md);
-
- /*! Returns a sorted dictionary with all template instances found for
- * this template class. Returns 0 if not a template or no instances.
- */
- QDict<ClassDef> *getTemplateInstances() const;
-
- /*! Returns the template master of which this class is an instance.
- * Returns 0 if not applicable.
- */
- ClassDef *templateMaster() const;
-
- /*! Returns TRUE if this class is a template */
- bool isTemplate() const;
-
- IncludeInfo *includeInfo() const;
-
- UsesClassDict *usedImplementationClasses() const;
-
- UsesClassDict *usedByImplementationClasses() const;
-
- UsesClassDict *usedInterfaceClasses() const;
-
- bool isTemplateArgument() const;
-
- /*! Returns the definition of a nested compound if
- * available, or 0 otherwise.
- * @param name The name of the nested compound
- */
- virtual Definition *findInnerCompound(const char *name);
-
- /*! Returns the template parameter lists that form the template
- * declaration of this class.
- *
- * Example: <code>template<class T> class TC {};</code>
- * will return a list with one ArgumentList containing one argument
- * with type="class" and name="T".
- */
- void getTemplateParameterLists(QList<ArgumentList> &lists) const;
-
- QCString qualifiedNameWithTemplateParameters(
- QList<ArgumentList> *actualParams=0) const;
-
- /*! Returns TRUE if there is at least one pure virtual member in this
- * class.
- */
- bool isAbstract() const;
-
- /*! Returns TRUE if this class is implemented in Objective-C */
- bool isObjectiveC() const;
-
- /*! Returns TRUE if this class is implemented in C# */
- bool isCSharp() const;
-
- /*! Returns the class of which this is a category (Objective-C only) */
- ClassDef *categoryOf() const;
-
- /*! Returns the name of the class including outer classes, but not
- * including namespaces.
- */
- QCString className() const;
-
- /*! Returns the members in the list identified by \a lt */
- MemberList *getMemberList(MemberList::ListType lt);
-
- /*! Returns the list containing the list of members sorted per type */
- const QList<MemberList> &getMemberLists() const;
-
- /*! Returns the member groups defined for this class */
- MemberGroupSDict *getMemberGroupSDict() const;
-
- QDict<int> *getTemplateBaseClassNames() const;
-
- ClassDef *getVariableInstance(const char *templSpec);
-
- bool isUsedOnly() const;
-
- QCString anchor() const;
- bool isEmbeddedInOuterScope() const;
-
- bool isSimple() const;
-
- const ClassList *taggedInnerClasses() const;
- ClassDef *tagLessReference() const;
-
- MemberDef *isSmartPointer() const;
-
- bool isJavaEnum() const;
-
- //-----------------------------------------------------------------------------------
- // --- setters ----
- //-----------------------------------------------------------------------------------
-
- void insertBaseClass(ClassDef *,const char *name,Protection p,Specifier s,const char *t=0);
- void insertSubClass(ClassDef *,Protection p,Specifier s,const char *t=0);
- void setIncludeFile(FileDef *fd,const char *incName,bool local,bool force);
- void insertMember(MemberDef *);
- void insertUsedFile(const char *);
- bool addExample(const char *anchor,const char *name, const char *file);
- void mergeCategory(ClassDef *category);
- void setNamespace(NamespaceDef *nd);
- void setFileDef(FileDef *fd);
- void setSubGrouping(bool enabled);
- void setProtection(Protection p);
- void setGroupDefForAllMembers(GroupDef *g,Grouping::GroupPri_t pri,const QCString &fileName,int startLine,bool hasDocs);
- void addInnerCompound(Definition *d);
- ClassDef *insertTemplateInstance(const QCString &fileName,int startLine,
- const QCString &templSpec,bool &freshInstance);
- void addUsedClass(ClassDef *cd,const char *accessName,Protection prot);
- void addUsedByClass(ClassDef *cd,const char *accessName,Protection prot);
- void setIsStatic(bool b);
- void setCompoundType(CompoundType t);
- void setClassName(const char *name);
-
- void setTemplateArguments(ArgumentList *al);
- void setTemplateBaseClassNames(QDict<int> *templateNames);
- void setTemplateMaster(ClassDef *tm);
- void setTypeConstraints(ArgumentList *al);
- void addMembersToTemplateInstance(ClassDef *cd,const char *templSpec);
- void makeTemplateArgument(bool b=TRUE);
- void setCategoryOf(ClassDef *cd);
- void setUsedOnly(bool b);
-
- void addTaggedInnerClass(ClassDef *cd);
- void setTagLessReference(ClassDef *cd);
-
- //-----------------------------------------------------------------------------------
- // --- actions ----
- //-----------------------------------------------------------------------------------
-
- void findSectionsInDocumentation();
- void addMembersToMemberGroup();
- void addListReferences();
- void computeAnchors();
- void mergeMembers();
- void sortMemberLists();
- void distributeMemberGroupDocumentation();
- void writeDocumentation(OutputList &ol);
- void writeDocumentationForInnerClasses(OutputList &ol);
- void writeMemberPages(OutputList &ol);
- void writeMemberList(OutputList &ol);
- void writeDeclaration(OutputList &ol,MemberDef *md,bool inGroup);
- void writeQuickMemberLinks(OutputList &ol,MemberDef *md) const;
- void writeSummaryLinks(OutputList &ol);
- void reclassifyMember(MemberDef *md,MemberDef::MemberType t);
- void writeInlineDocumentation(OutputList &ol);
- void writeDeclarationLink(OutputList &ol,bool &found,
- const char *header,bool localNames);
- void removeMemberFromLists(MemberDef *md);
-
- bool visited;
-
- protected:
- void addUsedInterfaceClasses(MemberDef *md,const char *typeStr);
- bool hasExamples();
- bool hasNonReferenceSuperClass();
- void showUsedFiles(OutputList &ol);
-
- private:
- void writeTagFileMarker();
- void writeDocumentationContents(OutputList &ol,const QCString &pageTitle);
- void internalInsertMember(MemberDef *md,Protection prot,bool addToAllList);
- QCString getMemberListFileName() const;
- void addMemberToList(MemberList::ListType lt,MemberDef *md,bool isBrief);
- MemberList *createMemberList(MemberList::ListType lt);
- void writeMemberDeclarations(OutputList &ol,MemberList::ListType lt,const QCString &title,
- const char *subTitle=0,bool showInline=FALSE);
- void writeMemberDocumentation(OutputList &ol,MemberList::ListType lt,const QCString &title,bool showInline=FALSE);
- void writeSimpleMemberDocumentation(OutputList &ol,MemberList::ListType lt);
- void writePlainMemberDeclaration(OutputList &ol,MemberList::ListType lt,bool inGroup);
- void writeBriefDescription(OutputList &ol,bool exampleFlag);
- void writeDetailedDescription(OutputList &ol,const QCString &pageType,bool exampleFlag,
- const QCString &title,const QCString &anchor=QCString());
- void writeIncludeFiles(OutputList &ol);
- void writeAllMembersLink(OutputList &ol);
- void writeInheritanceGraph(OutputList &ol);
- void writeCollaborationGraph(OutputList &ol);
- void writeMemberGroups(OutputList &ol,bool showInline=FALSE);
- void writeNestedClasses(OutputList &ol,const QCString &title);
- void writeInlineClasses(OutputList &ol);
- void startMemberDeclarations(OutputList &ol);
- void endMemberDeclarations(OutputList &ol);
- void startMemberDocumentation(OutputList &ol);
- void endMemberDocumentation(OutputList &ol);
- void writeAuthorSection(OutputList &ol);
- void writeMoreLink(OutputList &ol,const QCString &anchor);
- void writeDetailedDocumentationBody(OutputList &ol);
-
- ClassDefImpl *m_impl;
-
-};
-
-/*! \brief Class that contains information about a usage relation.
- */
-struct UsesClassDef
-{
- UsesClassDef(ClassDef *cd) : classDef(cd)
- {
- accessors = new QDict<void>(17);
- containment = TRUE;
- }
- ~UsesClassDef()
- {
- delete accessors;
- }
- void addAccessor(const char *s)
- {
- if (accessors->find(s)==0)
- {
- accessors->insert(s,(void *)666);
- }
- }
- /*! Class definition that this relation uses. */
- ClassDef *classDef;
-
- /*! Dictionary of member variable names that form the edge labels of the
- * usage relation.
- */
- QDict<void> *accessors;
-
- /*! Template arguments used for the base class */
- QCString templSpecifiers;
-
- bool containment;
-};
-
-/*! \brief Dictionary of usage relations.
- */
-class UsesClassDict : public QDict<UsesClassDef>
-{
- public:
- UsesClassDict(int size) : QDict<UsesClassDef>(size) {}
- ~UsesClassDict() {}
-};
-
-/*! \brief Iterator class to iterate over a dictionary of usage relations.
- */
-class UsesClassDictIterator : public QDictIterator<UsesClassDef>
-{
- public:
- UsesClassDictIterator(const QDict<UsesClassDef> &d)
- : QDictIterator<UsesClassDef>(d) {}
- ~UsesClassDictIterator() {}
-};
-
-/*! \brief Class that contains information about an inheritance relation.
- */
-struct BaseClassDef
-{
- BaseClassDef(ClassDef *cd,const char *n,Protection p,
- Specifier v,const char *t) :
- classDef(cd), usedName(n), prot(p), virt(v), templSpecifiers(t) {}
-
- /*! Class definition that this relation inherits from. */
- ClassDef *classDef;
-
- /*! name used in the inheritance list
- * (may be a typedef name instead of the class name)
- */
- QCString usedName;
-
- /*! Protection level of the inheritance relation:
- * Public, Protected, or Private
- */
- Protection prot;
-
- /*! Virtualness of the inheritance relation:
- * Normal, or Virtual
- */
- Specifier virt;
-
- /*! Template arguments used for the base class */
- QCString templSpecifiers;
-};
-
-/*! \brief list of base classes
- *
- * The classes are alphabetically sorted on name if inSort() is used.
- */
-class BaseClassList : public QList<BaseClassDef>
-{
- public:
- ~BaseClassList() {}
- int compareItems(GCI item1,GCI item2)
- {
- ClassDef *c1=((BaseClassDef *)item1)->classDef;
- ClassDef *c2=((BaseClassDef *)item2)->classDef;
- if (c1==0 || c2==0)
- return FALSE;
- else
- return stricmp(c1->name(),c2->name());
- }
-};
-
-/*! \brief Iterator for a list of base classes
- */
-class BaseClassListIterator : public QListIterator<BaseClassDef>
-{
- public:
- BaseClassListIterator(const BaseClassList &bcl) :
- QListIterator<BaseClassDef>(bcl) {}
-};
-
-#endif
diff --git a/trunk/src/classlist.cpp b/trunk/src/classlist.cpp
deleted file mode 100644
index b85b178..0000000
--- a/trunk/src/classlist.cpp
+++ /dev/null
@@ -1,163 +0,0 @@
-/******************************************************************************
- *
- *
- *
- * Copyright (C) 1997-2012 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.
- *
- */
-
-#include "classlist.h"
-#include "config.h"
-#include "util.h"
-#include "outputlist.h"
-#include "language.h"
-#include "doxygen.h"
-#include "vhdldocgen.h"
-
-ClassList::ClassList() : QList<ClassDef>()
-{
-}
-
-ClassList::~ClassList()
-{
-}
-
-static int compItems(void *item1,void *item2)
-{
- ClassDef *c1=(ClassDef *)item1;
- ClassDef *c2=(ClassDef *)item2;
- static bool b = Config_getBool("SORT_BY_SCOPE_NAME");
- //printf("compItems: %d %s<->%s\n",b,c1->name().data(),c2->name().data());
- if (b)
- {
- return stricmp(c1->name(),
- c2->name());
- }
- else
- {
- return stricmp(c1->className(),
- c2->className());
- }
-}
-
-int ClassList::compareItems(GCI item1, GCI item2)
-{
- return compItems(item1,item2);
-}
-
-int ClassSDict::compareItems(GCI item1, GCI item2)
-{
- return compItems(item1,item2);
-}
-
-ClassListIterator::ClassListIterator(const ClassList &cllist) :
- QListIterator<ClassDef>(cllist)
-{
-}
-
-bool ClassSDict::declVisible(const ClassDef::CompoundType *filter) const
-{
- static bool hideUndocClasses = Config_getBool("HIDE_UNDOC_CLASSES");
- static bool extractLocalClasses = Config_getBool("EXTRACT_LOCAL_CLASSES");
- if (count()>0)
- {
- ClassSDict::Iterator sdi(*this);
- ClassDef *cd=0;
- for (sdi.toFirst();(cd=sdi.current());++sdi)
- {
- if (cd->name().find('@')==-1 &&
- (filter==0 || *filter==cd->compoundType())
- )
- {
- bool isLink = cd->isLinkable();
- if (isLink ||
- (!hideUndocClasses &&
- (!cd->isLocal() || extractLocalClasses)
- )
- )
- {
- return TRUE;
- }
- }
- }
- }
- return FALSE;
-}
-
-void ClassSDict::writeDeclaration(OutputList &ol,const ClassDef::CompoundType *filter,
- const char *header,bool localNames)
-{
- if (count()>0)
- {
- ClassSDict::Iterator sdi(*this);
- ClassDef *cd=0;
- bool found=FALSE;
- for (sdi.toFirst();(cd=sdi.current());++sdi)
- {
- //printf(" ClassSDict::writeDeclaration for %s\n",cd->name().data());
- if (cd->name().find('@')==-1 &&
- (filter==0 || *filter==cd->compoundType())
- )
- {
- cd->writeDeclarationLink(ol,found,header,localNames);
- }
- }
- if (found) ol.endMemberList();
- }
-}
-
-void ClassSDict::writeDocumentation(OutputList &ol,Definition * container)
-{
- static bool fortranOpt = Config_getBool("OPTIMIZE_FOR_FORTRAN");
-
- static bool inlineGroupedClasses = Config_getBool("INLINE_GROUPED_CLASSES");
- static bool inlineSimpleClasses = Config_getBool("INLINE_SIMPLE_STRUCTS");
- if (!inlineGroupedClasses && !inlineSimpleClasses) return;
-
- if (count()>0)
- {
- bool found=FALSE;
-
- ClassSDict::Iterator sdi(*this);
- ClassDef *cd=0;
- for (sdi.toFirst();(cd=sdi.current());++sdi)
- {
- //printf("%s:writeDocumentation() %p embedded=%d container=%p\n",
- // cd->name().data(),cd->getOuterScope(),cd->isEmbeddedInOuterScope(),
- // container);
-
- if (cd->name().find('@')==-1 &&
- cd->isLinkableInProject() &&
- cd->isEmbeddedInOuterScope() &&
- (container==0 || cd->partOfGroups()==0) // if container==0 -> show as part of the group docs, otherwise only show if not part of a group
- //&&
- //(container==0 || // no container -> used for groups
- // cd->getOuterScope()==container || // correct container -> used for namespaces and classes
- // (container->definitionType()==Definition::TypeFile && cd->getOuterScope()==Doxygen::globalScope && cd->partOfGroups()==0) // non grouped class with file scope -> used for files
- //)
- )
- {
- if (!found)
- {
- ol.writeRuler();
- ol.startGroupHeader();
- ol.parseText(fortranOpt?theTranslator->trTypeDocumentation():
- theTranslator->trClassDocumentation());
- ol.endGroupHeader();
- found=TRUE;
- }
- cd->writeInlineDocumentation(ol);
- }
- }
- }
-}
-
diff --git a/trunk/src/classlist.h b/trunk/src/classlist.h
deleted file mode 100644
index 9b76c39..0000000
--- a/trunk/src/classlist.h
+++ /dev/null
@@ -1,63 +0,0 @@
-/******************************************************************************
- *
- *
- *
- * Copyright (C) 1997-2012 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.
- *
- */
-
-#ifndef CLASSLIST_H
-#define CLASSLIST_H
-
-#include <qlist.h>
-#include <qdict.h>
-
-#include "classdef.h"
-#include "sortdict.h"
-
-class Definition;
-
-class ClassList : public QList<ClassDef>
-{
- public:
- ClassList();
- ~ClassList();
-
- int compareItems(GCI item1,GCI item2);
-};
-
-class ClassListIterator : public QListIterator<ClassDef>
-{
- public:
- ClassListIterator(const ClassList &list);
-};
-
-class ClassDict : public QDict<ClassDef>
-{
- public:
- ClassDict(int size) : QDict<ClassDef>(size) {}
- ~ClassDict() {}
-};
-
-class ClassSDict : public SDict<ClassDef>
-{
- public:
- ClassSDict(int size=17) : SDict<ClassDef>(size) {}
- ~ClassSDict() {}
- int compareItems(GCI item1,GCI item2);
- void writeDeclaration(OutputList &ol,const ClassDef::CompoundType *filter=0,
- const char *header=0,bool localNames=FALSE);
- void writeDocumentation(OutputList &ol,Definition *container=0);
- bool declVisible(const ClassDef::CompoundType *filter=0) const;
-};
-
-#endif
diff --git a/trunk/src/cmdmapper.cpp b/trunk/src/cmdmapper.cpp
deleted file mode 100644
index 5d52557..0000000
--- a/trunk/src/cmdmapper.cpp
+++ /dev/null
@@ -1,204 +0,0 @@
-/******************************************************************************
- *
- *
- *
- *
- * Copyright (C) 1997-2012 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.
- *
- */
-
-#include "cmdmapper.h"
-
-CommandMap cmdMap[] =
-{
- { "a", CMD_EMPHASIS },
- { "addindex", CMD_ADDINDEX },
- { "anchor", CMD_ANCHOR },
- { "arg", CMD_LI },
- { "attention", CMD_ATTENTION },
- { "author", CMD_AUTHOR },
- { "authors", CMD_AUTHORS },
- { "b", CMD_BOLD },
- { "c", CMD_CODE },
- { "cite", CMD_CITE },
- { "code", CMD_STARTCODE },
- { "copydoc", CMD_COPYDOC },
- { "copybrief", CMD_COPYBRIEF },
- { "copydetails", CMD_COPYDETAILS },
- { "copyright", CMD_COPYRIGHT },
- { "date", CMD_DATE },
- { "dontinclude", CMD_DONTINCLUDE },
- { "dotfile", CMD_DOTFILE },
- { "e", CMD_EMPHASIS },
- { "em", CMD_EMPHASIS },
- { "endcode", CMD_ENDCODE },
- { "endhtmlonly", CMD_ENDHTMLONLY },
- { "endlatexonly", CMD_ENDLATEXONLY },
- { "endlink", CMD_ENDLINK },
- { "endsecreflist", CMD_ENDSECREFLIST },
- { "endverbatim", CMD_ENDVERBATIM },
- { "endxmlonly", CMD_ENDXMLONLY },
- { "exception", CMD_EXCEPTION },
- { "form", CMD_FORMULA },
- { "htmlinclude", CMD_HTMLINCLUDE },
- { "htmlonly", CMD_HTMLONLY },
- { "image", CMD_IMAGE },
- { "include", CMD_INCLUDE },
- { "internal", CMD_INTERNAL },
- { "invariant", CMD_INVARIANT },
- { "javalink", CMD_JAVALINK },
- { "latexonly", CMD_LATEXONLY },
- { "li", CMD_LI },
- { "line", CMD_LINE },
- { "link", CMD_LINK },
- { "n", CMD_LINEBREAK },
- { "note", CMD_NOTE },
- { "p", CMD_CODE },
- { "par", CMD_PAR },
- { "param", CMD_PARAM },
- { "post", CMD_POST },
- { "pre", CMD_PRE },
- { "ref", CMD_REF },
- { "refitem", CMD_SECREFITEM },
- { "remark", CMD_REMARK },
- { "remarks", CMD_REMARK },
- { "result", CMD_RETURN },
- { "return", CMD_RETURN },
- { "returns", CMD_RETURN },
- { "retval", CMD_RETVAL },
- { "sa", CMD_SA },
- { "secreflist", CMD_SECREFLIST },
- { "section", CMD_SECTION },
- { "snippet", CMD_SNIPPET },
- { "subpage", CMD_SUBPAGE },
- { "subsection", CMD_SUBSECTION },
- { "subsubsection", CMD_SUBSUBSECTION },
- { "paragraph", CMD_PARAGRAPH },
- { "see", CMD_SA },
- { "since", CMD_SINCE },
- { "skip", CMD_SKIP },
- { "skipline", CMD_SKIPLINE },
- { "xmlonly", CMD_XMLONLY },
- { "xrefitem", CMD_XREFITEM },
- { "throw", CMD_EXCEPTION },
- { "until", CMD_UNTIL },
- { "verbatim", CMD_VERBATIM },
- { "verbinclude", CMD_VERBINCLUDE },
- { "version", CMD_VERSION },
- { "warning", CMD_WARNING },
- { "throws", CMD_EXCEPTION },
- { "tparam", CMD_TPARAM },
- { "\\", CMD_BSLASH },
- { "@", CMD_AT },
- { "<", CMD_LESS },
- { ">", CMD_GREATER },
- { "&", CMD_AMP },
- { "$", CMD_DOLLAR },
- { "#", CMD_HASH },
- { "%", CMD_PERCENT },
- { "::", CMD_DCOLON },
- { "\"", CMD_QUOTE },
- { "_internalref", CMD_INTERNALREF },
- { "dot", CMD_DOT },
- { "msc", CMD_MSC },
- { "enddot", CMD_ENDDOT },
- { "endmsc", CMD_ENDMSC },
- { "manonly", CMD_MANONLY },
- { "endmanonly", CMD_ENDMANONLY },
- { "includelineno", CMD_INCWITHLINES },
- { "inheritdoc", CMD_INHERITDOC },
- { "mscfile", CMD_MSCFILE },
- { 0, 0 },
-};
-
-//----------------------------------------------------------------------------
-
-CommandMap htmlTagMap[] =
-{
- { "strong", HTML_BOLD },
- { "center", HTML_CENTER },
- { "table", HTML_TABLE },
- { "caption", HTML_CAPTION },
- { "small", HTML_SMALL },
- { "code", HTML_CODE },
- { "dfn", HTML_CODE },
- { "var", HTML_EMPHASIS },
- { "img", HTML_IMG },
- { "pre", HTML_PRE },
- { "sub", HTML_SUB },
- { "sup", HTML_SUP },
- { "tr", HTML_TR },
- { "td", HTML_TD },
- { "th", HTML_TH },
- { "ol", HTML_OL },
- { "ul", HTML_UL },
- { "li", HTML_LI },
- { "tt", XML_C /*HTML_CODE*/ },
- { "kbd", XML_C /*HTML_CODE*/ },
- { "em", HTML_EMPHASIS },
- { "hr", HTML_HR },
- { "dl", HTML_DL },
- { "dt", HTML_DT },
- { "dd", HTML_DD },
- { "br", HTML_BR },
- { "i", HTML_EMPHASIS },
- { "a", HTML_A },
- { "b", HTML_BOLD },
- { "p", HTML_P },
- { "h1", HTML_H1 },
- { "h2", HTML_H2 },
- { "h3", HTML_H3 },
- { "h4", HTML_H4 },
- { "h5", HTML_H5 },
- { "h6", HTML_H6 },
- { "span", HTML_SPAN },
- { "div", HTML_DIV },
- { "blockquote", HTML_BLOCKQUOTE },
-
- { "c", XML_C },
- // { "code", XML_CODE }, <= ambiguous <code> is also a HTML tag
- { "description", XML_DESCRIPTION },
- { "example", XML_EXAMPLE },
- { "exception", XML_EXCEPTION },
- { "include", XML_INCLUDE },
- { "item", XML_ITEM },
- { "list", XML_LIST }, // type="table|bullet|number"
- { "listheader", XML_LISTHEADER },
- { "para", XML_PARA },
- { "param", XML_PARAM },
- { "paramref", XML_PARAMREF },
- { "typeparam", XML_TYPEPARAM },
- { "typeparamref", XML_TYPEPARAMREF },
- { "permission", XML_PERMISSION },
- { "remarks", XML_REMARKS },
- { "returns", XML_RETURNS },
- { "see", XML_SEE },
- { "seealso", XML_SEEALSO },
- { "summary", XML_SUMMARY },
- { "term", XML_TERM },
- { "value", XML_VALUE },
- { "inheritdoc", XML_INHERITDOC },
- { 0, 0 }
-};
-
-//----------------------------------------------------------------------------
-
-Mapper *Mappers::cmdMapper = new Mapper(cmdMap,TRUE);
-Mapper *Mappers::htmlTagMapper = new Mapper(htmlTagMap,FALSE);
-
-void Mappers::freeMappers()
-{
- delete cmdMapper; cmdMapper = 0;
- delete htmlTagMapper; htmlTagMapper = 0;
-}
-
-
diff --git a/trunk/src/cmdmapper.h b/trunk/src/cmdmapper.h
deleted file mode 100644
index 04bb3ed..0000000
--- a/trunk/src/cmdmapper.h
+++ /dev/null
@@ -1,222 +0,0 @@
-/******************************************************************************
- *
- *
- *
- *
- * Copyright (C) 1997-2012 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.
- *
- */
-
-#ifndef _CMDMAPPER_H
-#define _CMDMAPPER_H
-
-#include <qdict.h>
-
-struct CommandMap
-{
- const char *cmdName;
- int cmdId;
-};
-
-const int SIMPLESECT_BIT = 0x1000;
-
-enum CommandType
-{
- CMD_UNKNOWN = 0,
- CMD_ADDINDEX = 1,
- CMD_AMP = 2,
- CMD_ANCHOR = 3,
- CMD_AT = 4,
- CMD_ATTENTION = 5 | SIMPLESECT_BIT,
- CMD_AUTHOR = 6 | SIMPLESECT_BIT,
- CMD_AUTHORS = 7 | SIMPLESECT_BIT,
- CMD_BOLD = 8,
- CMD_BSLASH = 9,
- CMD_CODE = 10,
- CMD_COPYDOC = 11,
- CMD_DATE = 12 | SIMPLESECT_BIT,
- CMD_DOLLAR = 13,
- CMD_DONTINCLUDE = 14,
- CMD_DOTFILE = 15,
- CMD_EMPHASIS = 16,
- CMD_ENDCODE = 17,
- CMD_ENDHTMLONLY = 18,
- CMD_ENDLATEXONLY = 19,
- CMD_ENDLINK = 20,
- CMD_ENDSECREFLIST= 21,
- CMD_ENDVERBATIM = 22,
- CMD_ENDXMLONLY = 23,
- CMD_EXCEPTION = 24 | SIMPLESECT_BIT,
- CMD_FORMULA = 25,
- CMD_GREATER = 26,
- CMD_HASH = 27,
- CMD_HTMLINCLUDE = 28,
- CMD_HTMLONLY = 29,
- CMD_IMAGE = 30,
- CMD_INCLUDE = 31,
- CMD_INTERNAL = 32,
- CMD_INTERNALREF = 33,
- CMD_INVARIANT = 34 | SIMPLESECT_BIT ,
- CMD_LATEXONLY = 35,
- CMD_LESS = 36,
- CMD_LI = 37,
- CMD_LINE = 38,
- CMD_LINEBREAK = 39,
- CMD_LINK = 40,
- CMD_NOTE = 41 | SIMPLESECT_BIT,
- CMD_PAR = 42 | SIMPLESECT_BIT,
- CMD_PARAM = 43 | SIMPLESECT_BIT,
- CMD_PERCENT = 44,
- CMD_POST = 45 | SIMPLESECT_BIT,
- CMD_PRE = 46 | SIMPLESECT_BIT,
- CMD_REF = 47,
- CMD_SECREFITEM = 48,
- CMD_REMARK = 49 | SIMPLESECT_BIT ,
- CMD_RETURN = 50 | SIMPLESECT_BIT ,
- CMD_RETVAL = 51 | SIMPLESECT_BIT,
- CMD_SA = 52 | SIMPLESECT_BIT ,
- CMD_SECREFLIST = 53,
- CMD_SECTION = 54,
- CMD_SUBPAGE = 55,
- CMD_SUBSECTION = 56,
- CMD_SUBSUBSECTION= 57,
- CMD_PARAGRAPH = 58,
- CMD_SINCE = 59 | SIMPLESECT_BIT,
- CMD_SKIP = 60,
- CMD_SKIPLINE = 61,
- CMD_STARTCODE = 62,
- CMD_JAVALINK = 63,
- CMD_UNTIL = 64,
- CMD_VERBATIM = 65,
- CMD_VERBINCLUDE = 66,
- CMD_VERSION = 67 | SIMPLESECT_BIT,
- CMD_WARNING = 68 | SIMPLESECT_BIT,
- CMD_XREFITEM = 69 | SIMPLESECT_BIT,
- CMD_XMLONLY = 70,
- CMD_DOT = 71,
- CMD_ENDDOT = 72,
- CMD_MSC = 73,
- CMD_ENDMSC = 74,
- CMD_MANONLY = 75,
- CMD_ENDMANONLY = 76,
- CMD_INCWITHLINES = 77,
- CMD_INHERITDOC = 78,
- CMD_TPARAM = 79 | SIMPLESECT_BIT,
- CMD_COPYBRIEF = 80,
- CMD_COPYDETAILS = 81,
- CMD_QUOTE = 82,
- CMD_MSCFILE = 83,
- CMD_DCOLON = 84,
- CMD_COPYRIGHT = 85 | SIMPLESECT_BIT,
- CMD_CITE = 86,
- CMD_SNIPPET = 87
-};
-
-enum HtmlTagType
-{
- HTML_UNKNOWN = 0,
- HTML_CENTER = 1,
- HTML_TABLE = 2,
- HTML_CAPTION = 3,
- HTML_SMALL = 4,
- HTML_CODE = 5,
- HTML_IMG = 6,
- HTML_PRE = 7,
- HTML_SUB = 8,
- HTML_SUP = 9,
- HTML_TR = 10,
- HTML_TD = 11,
- HTML_TH = 12,
- HTML_OL = 13,
- HTML_UL = 14,
- HTML_LI = 15,
- HTML_EMPHASIS = 16,
- HTML_HR = 17,
- HTML_DL = 18,
- HTML_DT = 19,
- HTML_DD = 20,
- HTML_BR = 21,
- HTML_A = 22,
- HTML_BOLD = 23,
- HTML_P = 24,
- HTML_H1 = 25,
- HTML_H2 = 26,
- HTML_H3 = 27,
- HTML_H4 = 28,
- HTML_H5 = 29,
- HTML_H6 = 30,
- HTML_SPAN = 31,
- HTML_DIV = 32,
- HTML_BLOCKQUOTE= 33,
-
- XML_CmdMask = 0x100,
-
- XML_C = XML_CmdMask + 0,
- XML_CODE = XML_CmdMask + 1,
- XML_DESCRIPTION = XML_CmdMask + 2,
- XML_EXAMPLE = XML_CmdMask + 3,
- XML_EXCEPTION = XML_CmdMask + 4,
- XML_INCLUDE = XML_CmdMask + 5,
- XML_ITEM = XML_CmdMask + 6,
- XML_LIST = XML_CmdMask + 7,
- XML_LISTHEADER = XML_CmdMask + 8,
- XML_PARA = XML_CmdMask + 9,
- XML_PARAM = XML_CmdMask + 10,
- XML_PARAMREF = XML_CmdMask + 11,
- XML_PERMISSION = XML_CmdMask + 12,
- XML_REMARKS = XML_CmdMask + 13,
- XML_RETURNS = XML_CmdMask + 14,
- XML_SEE = XML_CmdMask + 15,
- XML_SEEALSO = XML_CmdMask + 16,
- XML_SUMMARY = XML_CmdMask + 17,
- XML_TERM = XML_CmdMask + 18,
- XML_TYPEPARAM = XML_CmdMask + 19,
- XML_TYPEPARAMREF = XML_CmdMask + 20,
- XML_VALUE = XML_CmdMask + 21,
- XML_INHERITDOC = XML_CmdMask + 22
-};
-
-class Mapper
-{
- public:
- int map(const char *n)
- {
- QCString name=n;
- if (!m_cs) name=name.lower();
- int *result;
- return !name.isEmpty() && (result=m_map.find(name)) ? *result: 0;
- }
-
- Mapper(const CommandMap *cm,bool caseSensitive) : m_map(89), m_cs(caseSensitive)
- {
- m_map.setAutoDelete(TRUE);
- const CommandMap *p = cm;
- while (p->cmdName)
- {
- m_map.insert(p->cmdName,new int(p->cmdId));
- p++;
- }
- }
- private:
- QDict<int> m_map;
- bool m_cs;
-};
-
-struct Mappers
-{
- static void freeMappers();
- static Mapper *cmdMapper;
- static Mapper *htmlTagMapper;
-};
-
-
-#endif
diff --git a/trunk/src/code.h b/trunk/src/code.h
deleted file mode 100644
index f811f55..0000000
--- a/trunk/src/code.h
+++ /dev/null
@@ -1,35 +0,0 @@
-/******************************************************************************
- *
- *
- *
- * Copyright (C) 1997-2012 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.
- *
- */
-
-#ifndef CODE_H
-#define CODE_H
-
-#include "qtbc.h"
-#include <stdio.h>
-
-class CodeOutputInterface;
-class FileDef;
-class MemberDef;
-
-void parseCCode(CodeOutputInterface &,const char *,const QCString &,
- bool ,const char *,FileDef *fd=0,
- int startLine=-1,int endLine=-1,bool inlineFragment=FALSE,
- MemberDef *memberDef=0,bool showLineNumbers=TRUE);
-void resetCCodeParserState();
-void codeFreeScanner();
-
-#endif
diff --git a/trunk/src/code.l b/trunk/src/code.l
deleted file mode 100644
index ae091de..0000000
--- a/trunk/src/code.l
+++ /dev/null
@@ -1,3567 +0,0 @@
-/******************************************************************************
- *
- *
- *
- * Copyright (C) 1997-2012 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.
- *
- */
-
-%{
-
-/*
- * includes
- */
-#include <stdio.h>
-#include <assert.h>
-#include <ctype.h>
-#include <qregexp.h>
-#include <qdir.h>
-
-#include "qtbc.h"
-#include "entry.h"
-#include "doxygen.h"
-#include "message.h"
-#include "outputlist.h"
-#include "util.h"
-#include "membername.h"
-#include "searchindex.h"
-#include "arguments.h"
-
-#define YY_NEVER_INTERACTIVE 1
-
-// Toggle for some debugging info
-//#define DBG_CTX(x) fprintf x
-#define DBG_CTX(x) do { } while(0)
-
-#define CLASSBLOCK (int *)4
-#define SCOPEBLOCK (int *)8
-#define INNERBLOCK (int *)12
-
-/* -----------------------------------------------------------------
- * statics
- */
-
-static CodeOutputInterface * g_code;
-
-static ClassSDict *g_codeClassSDict = 0;
-static QCString g_curClassName;
-static QStrList g_curClassBases;
-
-static QCString g_parmType;
-static QCString g_parmName;
-
-static const char * g_inputString; //!< the code fragment as text
-static int g_inputPosition; //!< read offset during parsing
-static int g_inputLines; //!< number of line in the code fragment
-static int g_yyLineNr; //!< current line number
-static bool g_needsTermination;
-
-static bool g_exampleBlock;
-static QCString g_exampleName;
-static QCString g_exampleFile;
-
-static bool g_insideTemplate = FALSE;
-static QCString g_type;
-static QCString g_name;
-static QCString g_args;
-static QCString g_classScope;
-static QCString g_realScope;
-static QStack<int> g_scopeStack; //!< 1 if bracket starts a scope,
- // 2 for internal blocks
-static int g_anchorCount;
-static FileDef * g_sourceFileDef;
-static bool g_lineNumbers;
-static Definition * g_currentDefinition;
-static MemberDef * g_currentMemberDef;
-static bool g_includeCodeFragment;
-static const char * g_currentFontClass;
-static bool g_searchingForBody;
-static bool g_insideBody;
-static int g_bodyCurlyCount;
-static QCString g_saveName;
-static QCString g_saveType;
-
-static int g_bracketCount = 0;
-static int g_curlyCount = 0;
-static int g_sharpCount = 0;
-static bool g_inFunctionTryBlock = FALSE;
-static bool g_inForEachExpression = FALSE;
-
-static int g_lastTemplCastContext;
-static int g_lastSpecialCContext;
-static int g_lastStringContext;
-static int g_lastSkipCppContext;
-static int g_lastVerbStringContext;
-static int g_memCallContext;
-static int g_lastCContext;
-
-static bool g_insideObjC;
-static bool g_insideProtocolList;
-
-static bool g_lexInit = FALSE;
-
-static QStack<int> g_classScopeLengthStack;
-
-// context for an Objective-C method call
-struct ObjCCallCtx
-{
- int id;
- QCString methodName;
- QCString objectTypeOrName;
- ClassDef *objectType;
- MemberDef *objectVar;
- MemberDef *method;
- QCString format;
- int lexState;
- int braceCount;
-};
-
-// globals for objective-C method calls
-static ObjCCallCtx *g_currentCtx=0;
-static int g_currentCtxId=0;
-static int g_currentNameId=0;
-static int g_currentObjId=0;
-static int g_currentWordId=0;
-static QStack<ObjCCallCtx> g_contextStack;
-static QIntDict<ObjCCallCtx> g_contextDict;
-static QIntDict<QCString> g_nameDict;
-static QIntDict<QCString> g_objectDict;
-static QIntDict<QCString> g_wordDict;
-static int g_braceCount=0;
-
-static void saveObjCContext();
-static void restoreObjCContext();
-
-static QCString g_forceTagReference;
-
-
-//-------------------------------------------------------------------
-
-/*! Represents a stack of variable to class mappings as found in the
- * code. Each scope is enclosed in pushScope() and popScope() calls.
- * Variables are added by calling addVariables() and one can search
- * for variable using findVariable().
- */
-class VariableContext
-{
- public:
- static const ClassDef *dummyContext;
-
- class Scope : public SDict<ClassDef>
- {
- public:
- Scope() : SDict<ClassDef>(17) {}
- };
-
- VariableContext()
- {
- m_scopes.setAutoDelete(TRUE);
- }
- virtual ~VariableContext()
- {
- }
-
- void pushScope()
- {
- m_scopes.append(new Scope);
- DBG_CTX((stderr,"** Push var context %d\n",m_scopes.count()));
- }
-
- void popScope()
- {
- if (m_scopes.count()>0)
- {
- DBG_CTX((stderr,"** Pop var context %d\n",m_scopes.count()));
- m_scopes.remove(m_scopes.count()-1);
- }
- else
- {
- DBG_CTX((stderr,"** ILLEGAL: Pop var context\n"));
- }
- }
-
- void clear()
- {
- m_scopes.clear();
- m_globalScope.clear();
- }
-
- void clearExceptGlobal()
- {
- DBG_CTX((stderr,"** Clear var context\n"));
- m_scopes.clear();
- }
-
- void addVariable(const QCString &type,const QCString &name);
- ClassDef *findVariable(const QCString &name);
-
- int count() const { return m_scopes.count(); }
-
- private:
- Scope m_globalScope;
- QList<Scope> m_scopes;
-};
-
-void VariableContext::addVariable(const QCString &type,const QCString &name)
-{
- //printf("VariableContext::addVariable(%s,%s)\n",type.data(),name.data());
- QCString ltype = type.simplifyWhiteSpace();
- QCString lname = name.simplifyWhiteSpace();
- if (ltype.left(7)=="struct ")
- {
- ltype = ltype.right(ltype.length()-7);
- }
- else if (ltype.left(6)=="union ")
- {
- ltype = ltype.right(ltype.length()-6);
- }
- if (ltype.isEmpty() || lname.isEmpty()) return;
- DBG_CTX((stderr,"** addVariable trying: type='%s' name='%s' g_currentDefinition=%s\n",
- ltype.data(),lname.data(),g_currentDefinition?g_currentDefinition->name().data():"<none>"));
- Scope *scope = m_scopes.count()==0 ? &m_globalScope : m_scopes.getLast();
- ClassDef *varType;
- int i=0;
- if (
- (varType=g_codeClassSDict->find(ltype)) || // look for class definitions inside the code block
- (varType=getResolvedClass(g_currentDefinition,g_sourceFileDef,ltype)) // look for global class definitions
- )
- {
- DBG_CTX((stderr,"** addVariable type='%s' name='%s'\n",ltype.data(),lname.data()));
- scope->append(lname,varType); // add it to a list
- }
- else if ((i=ltype.find('<'))!=-1)
- {
- // probably a template class
- QCString typeName(ltype.left(i));
- ClassDef* newDef = 0;
- QCString templateArgs(ltype.right(ltype.length() - i));
- if (
- ( // look for class definitions inside the code block
- (varType=g_codeClassSDict->find(typeName)) ||
- // otherwise look for global class definitions
- (varType=getResolvedClass(g_currentDefinition,g_sourceFileDef,typeName,0,0,TRUE,TRUE))
- ) && // and it must be a template
- varType->templateArguments())
- {
- newDef = varType->getVariableInstance( templateArgs );
- }
- if (newDef)
- {
- DBG_CTX((stderr,"** addVariable type='%s' templ='%s' name='%s'\n",typeName.data(),templateArgs.data(),lname.data()));
- scope->append(lname, newDef);
- }
- else
- {
- // Doesn't seem to be a template. Try just the base name.
- addVariable(typeName,name);
- }
- }
- else
- {
- if (m_scopes.count()>0) // for local variables add a dummy entry so the name
- // is hidden to avoid false links to global variables with the same name
- // TODO: make this work for namespaces as well!
- {
- DBG_CTX((stderr,"** addVariable: dummy context for '%s'\n",lname.data()));
- scope->append(lname,dummyContext);
- }
- else
- {
- DBG_CTX((stderr,"** addVariable: not adding variable!\n"));
- }
- }
-}
-
-ClassDef *VariableContext::findVariable(const QCString &name)
-{
- if (name.isEmpty()) return 0;
- ClassDef *result = 0;
- //QListIterator<Scope> sli(m_scopes);
- Scope *scope;
- QCString key = name;
- // search from inner to outer scope
- scope = m_scopes.last();
- //for (sli.toLast();(scope=sli.current());--sli)
- while (scope)
- {
- result = scope->find(key);
- if (result)
- {
- DBG_CTX((stderr,"** findVariable(%s)=%p\n",name.data(),result));
- return result;
- }
- scope = m_scopes.prev();
- }
- // nothing found -> also try the global scope
- result=m_globalScope.find(name);
- DBG_CTX((stderr,"** findVariable(%s)=%p\n",name.data(),result));
- return result;
-}
-
-static VariableContext g_theVarContext;
-const ClassDef *VariableContext::dummyContext = (ClassDef*)0x8;
-
-//-------------------------------------------------------------------
-
-class CallContext
-{
- public:
- struct Ctx
- {
- Ctx() : name(g_name), type(g_type), cd(0) {}
- QCString name;
- QCString type;
- ClassDef *cd;
- };
-
- CallContext()
- {
- m_classList.append(new Ctx);
- m_classList.setAutoDelete(TRUE);
- }
- virtual ~CallContext() {}
- void setClass(ClassDef *cd)
- {
- Ctx *ctx = m_classList.getLast();
- if (ctx)
- {
- DBG_CTX((stderr,"** Set call context %s (%p)\n",cd==0 ? "<null>" : cd->name().data(),cd));
- ctx->cd=cd;
- }
- }
- void pushScope()
- {
- m_classList.append(new Ctx);
- DBG_CTX((stderr,"** Push call context %d\n",m_classList.count()));
- }
- void popScope()
- {
- if (m_classList.count()>1)
- {
- DBG_CTX((stderr,"** Pop call context %d\n",m_classList.count()));
- Ctx *ctx = m_classList.getLast();
- if (ctx)
- {
- g_name = ctx->name;
- g_type = ctx->type;
- }
- m_classList.removeLast();
- }
- else
- {
- DBG_CTX((stderr,"** ILLEGAL: Pop call context\n"));
- }
- }
- void clear()
- {
- DBG_CTX((stderr,"** Clear call context\n"));
- m_classList.clear();
- m_classList.append(new Ctx);
- }
- ClassDef *getClass() const
- {
- Ctx *ctx = m_classList.getLast();
- if (ctx) return ctx->cd; else return 0;
- }
-
- private:
- QList<Ctx> m_classList;
-};
-
-static CallContext g_theCallContext;
-
-//-------------------------------------------------------------------
-
-/*! add class/namespace name s to the scope */
-static void pushScope(const char *s)
-{
- g_classScopeLengthStack.push(new int(g_classScope.length()));
- if (g_classScope.isEmpty())
- {
- g_classScope = s;
- }
- else
- {
- g_classScope += "::";
- g_classScope += s;
- }
- //printf("pushScope(%s) result: `%s'\n",s,g_classScope.data());
-}
-
-/*! remove the top class/namespace name from the scope */
-static void popScope()
-{
- if (!g_classScopeLengthStack.isEmpty())
- {
- int *pLength = g_classScopeLengthStack.pop();
- g_classScope.truncate(*pLength);
- delete pLength;
- }
- else
- {
- //err("Error: Too many end of scopes found!\n");
- }
- //printf("popScope() result: `%s'\n",g_classScope.data());
-}
-
-static void setCurrentDoc(const QCString &name,const QCString &base,const QCString &anchor="")
-{
- if (Doxygen::searchIndex)
- {
- Doxygen::searchIndex->setCurrentDoc(name,base,anchor);
- }
-}
-
-static void addToSearchIndex(const char *text)
-{
- if (Doxygen::searchIndex)
- {
- Doxygen::searchIndex->addWord(text,FALSE);
- }
-}
-
-static void setClassScope(const QCString &name)
-{
- //printf("setClassScope(%s)\n",name.data());
- QCString n=name;
- n=n.simplifyWhiteSpace();
- int ts=n.find('<'); // start of template
- int te=n.findRev('>'); // end of template
- //printf("ts=%d te=%d\n",ts,te);
- if (ts!=-1 && te!=-1 && te>ts)
- {
- // remove template from scope
- n=n.left(ts)+n.right(n.length()-te-1);
- }
- while (!g_classScopeLengthStack.isEmpty())
- {
- popScope();
- }
- g_classScope.resize(0);
- int i;
- while ((i=n.find("::"))!=-1)
- {
- pushScope(n.left(i));
- n = n.mid(i+2);
- }
- pushScope(n);
- //printf("--->New class scope `%s'\n",g_classScope.data());
-}
-
-/*! start a new line of code, inserting a line number if g_sourceFileDef
- * is TRUE. If a definition starts at the current line, then the line
- * number is linked to the documentation of that definition.
- */
-static void startCodeLine()
-{
- //if (g_currentFontClass) { g_code->endFontClass(); }
- if (g_sourceFileDef && g_lineNumbers)
- {
- //QCString lineNumber,lineAnchor;
- //lineNumber.sprintf("%05d",g_yyLineNr);
- //lineAnchor.sprintf("l%05d",g_yyLineNr);
-
- Definition *d = g_sourceFileDef->getSourceDefinition(g_yyLineNr);
- //printf("%s:startCodeLine(%d)=%p\n",g_sourceFileDef->name().data(),g_yyLineNr,d);
- if (!g_includeCodeFragment && d)
- {
- g_currentDefinition = d;
- g_currentMemberDef = g_sourceFileDef->getSourceMember(g_yyLineNr);
- //printf("->startCodeLine(%s)=%p\n",d->name().data(),g_currentMemberDef);
- g_insideBody = FALSE;
- g_searchingForBody = TRUE;
- g_realScope = d->name();
- //g_classScope = "";
- g_type.resize(0);
- g_name.resize(0);
- g_args.resize(0);
- g_parmType.resize(0);
- g_parmName.resize(0);
- //printf("Real scope: `%s'\n",g_realScope.data());
- g_bodyCurlyCount = 0;
- QCString lineAnchor;
- lineAnchor.sprintf("l%05d",g_yyLineNr);
- if (g_currentMemberDef)
- {
- g_code->writeLineNumber(g_currentMemberDef->getReference(),
- g_currentMemberDef->getOutputFileBase(),
- g_currentMemberDef->anchor(),g_yyLineNr);
- setCurrentDoc(
- g_currentMemberDef->qualifiedName(),
- g_sourceFileDef->getSourceFileBase(),
- lineAnchor);
- }
- else if (d->isLinkableInProject())
- {
- g_code->writeLineNumber(d->getReference(),
- d->getOutputFileBase(),
- 0,g_yyLineNr);
- setCurrentDoc(
- d->qualifiedName(),
- g_sourceFileDef->getSourceFileBase(),
- lineAnchor);
- }
- }
- else
- {
- g_code->writeLineNumber(0,0,0,g_yyLineNr);
- }
- }
- g_code->startCodeLine();
- if (g_currentFontClass)
- {
- g_code->startFontClass(g_currentFontClass);
- }
-}
-
-
-static void endFontClass();
-static void startFontClass(const char *s);
-
-static void endCodeLine()
-{
- endFontClass();
- g_code->endCodeLine();
-}
-
-static void nextCodeLine()
-{
- const char * fc = g_currentFontClass;
- endCodeLine();
- if (g_yyLineNr<g_inputLines)
- {
- g_currentFontClass = fc;
- startCodeLine();
- }
-}
-
-/*! write a code fragment `text' that may span multiple lines, inserting
- * line numbers for each line.
- */
-static void codifyLines(const char *text)
-{
- //printf("codifyLines(%d,\"%s\")\n",g_yyLineNr,text);
- const char *p=text,*sp=p;
- char c;
- bool done=FALSE;
- while (!done)
- {
- sp=p;
- while ((c=*p++) && c!='\n') { }
- if (c=='\n')
- {
- g_yyLineNr++;
- //*(p-1)='\0';
- int l = p-sp-1;
- char *tmp = (char*)malloc(l+1);
- memcpy(tmp,sp,l);
- tmp[l]='\0';
- g_code->codify(tmp);
- free(tmp);
- nextCodeLine();
- }
- else
- {
- g_code->codify(sp);
- done=TRUE;
- }
- }
-}
-
-/*! writes a link to a fragment \a text that may span multiple lines, inserting
- * line numbers for each line. If \a text contains newlines, the link will be
- * split into multiple links with the same destination, one for each line.
- */
-static void writeMultiLineCodeLink(CodeOutputInterface &ol,
- const char *ref,const char *file,
- const char *anchor,const char *text,
- const char *tooltip)
-{
- bool done=FALSE;
- char *p=(char *)text;
- while (!done)
- {
- char *sp=p;
- char c;
- while ((c=*p++) && c!='\n') { }
- if (c=='\n')
- {
- g_yyLineNr++;
- *(p-1)='\0';
- //printf("writeCodeLink(%s,%s,%s,%s)\n",ref,file,anchor,sp);
- ol.writeCodeLink(ref,file,anchor,sp,tooltip);
- nextCodeLine();
- }
- else
- {
- //printf("writeCodeLink(%s,%s,%s,%s)\n",ref,file,anchor,sp);
- ol.writeCodeLink(ref,file,anchor,sp,tooltip);
- done=TRUE;
- }
- }
-}
-
-static void addType()
-{
- if (g_name=="const") { g_name.resize(0); return; }
- if (!g_type.isEmpty()) g_type += ' ' ;
- g_type += g_name ;
- g_name.resize(0) ;
- if (!g_type.isEmpty()) g_type += ' ' ;
- g_type += g_args ;
- g_args.resize(0) ;
-}
-
-static void addParmType()
-{
- if (g_parmName=="const") { g_parmName.resize(0); return; }
- if (!g_parmType.isEmpty()) g_parmType += ' ' ;
- g_parmType += g_parmName ;
- g_parmName.resize(0) ;
-}
-
-static void addUsingDirective(const char *name)
-{
- if (g_sourceFileDef && name)
- {
- NamespaceDef *nd = Doxygen::namespaceSDict->find(name);
- if (nd)
- {
- g_sourceFileDef->addUsingDirective(nd);
- }
- }
-}
-
-static void setParameterList(MemberDef *md)
-{
- g_classScope = md->getClassDef() ? md->getClassDef()->name().data() : "";
- LockingPtr<ArgumentList> al = md->argumentList();
- if (al==0) return;
- Argument *a = al->first();
- while (a)
- {
- g_parmName = a->name.copy();
- g_parmType = a->type.copy();
- int i = g_parmType.find('*');
- if (i!=-1) g_parmType = g_parmType.left(i);
- i = g_parmType.find('&');
- if (i!=-1) g_parmType = g_parmType.left(i);
- g_parmType.stripPrefix("const ");
- g_parmType=g_parmType.stripWhiteSpace();
- g_theVarContext.addVariable(g_parmType,g_parmName);
- a = al->next();
- }
-}
-
-static ClassDef *stripClassName(const char *s,Definition *d=g_currentDefinition)
-{
- int pos=0;
- QCString type = s;
- QCString className;
- QCString templSpec;
- while (extractClassNameFromType(type,pos,className,templSpec)!=-1)
- {
- QCString clName=className+templSpec;
- ClassDef *cd=0;
- if (!g_classScope.isEmpty())
- {
- cd=getResolvedClass(d,g_sourceFileDef,g_classScope+"::"+clName);
- }
- if (cd==0)
- {
- cd=getResolvedClass(d,g_sourceFileDef,clName);
- }
- //printf("stripClass trying `%s' = %p\n",clName.data(),cd);
- if (cd)
- {
- return cd;
- }
- }
-
- return 0;
-}
-
-static MemberDef *setCallContextForVar(const QCString &name)
-{
- if (name.isEmpty()) return 0;
- //fprintf(stderr,"setCallContextForVar(%s) g_classScope=%s\n",name.data(),g_classScope.data());
-
- int scopeEnd = name.findRev("::");
- if (scopeEnd!=-1) // name with explicit scope
- {
- QCString scope = name.left(scopeEnd);
- QCString locName = name.right(name.length()-scopeEnd-2);
- //printf("explicit scope: name=%s scope=%s\n",locName.data(),scope.data());
- ClassDef *mcd = getClass(scope);
- if (mcd && !locName.isEmpty())
- {
- MemberDef *md=mcd->getMemberByName(locName);
- if (md)
- {
- //printf("name=%s scope=%s\n",locName.data(),scope.data());
- g_theCallContext.setClass(stripClassName(md->typeString(),md->getOuterScope()));
- return md;
- }
- }
- else // check namespace as well
- {
- NamespaceDef *mnd = getResolvedNamespace(scope);
- if (mnd && !locName.isEmpty())
- {
- MemberDef *md=mnd->getMemberByName(locName);
- if (md)
- {
- //printf("name=%s scope=%s\n",locName.data(),scope.data());
- g_theCallContext.setClass(stripClassName(md->typeString(),md->getOuterScope()));
- return md;
- }
- }
- }
- }
-
- MemberName *mn;
- ClassDef *mcd = g_theVarContext.findVariable(name);
- if (mcd) // local variable
- {
- //fprintf(stderr,"local variable?\n");
- if (mcd!=VariableContext::dummyContext)
- {
- //fprintf(stderr,"local var `%s' mcd=%s\n",name.data(),mcd->name().data());
- g_theCallContext.setClass(mcd);
- }
- }
- else
- {
- //fprintf(stderr,"class member? scope=%s\n",g_classScope.data());
- // look for a class member
- mcd = getClass(g_classScope);
- if (mcd)
- {
- //fprintf(stderr,"Inside class %s\n",mcd->name().data());
- MemberDef *md=mcd->getMemberByName(name);
- if (md)
- {
- //fprintf(stderr,"Found member %s\n",md->name().data());
- if (g_scopeStack.top()!=CLASSBLOCK)
- {
- //fprintf(stderr,"class member `%s' mcd=%s\n",name.data(),mcd->name().data());
- g_theCallContext.setClass(stripClassName(md->typeString(),md->getOuterScope()));
- }
- return md;
- }
- }
- }
-
- // look for a global member
- if ((mn=Doxygen::functionNameSDict->find(name)))
- {
- //printf("global var `%s'\n",name.data());
- if (mn->count()==1) // global defined only once
- {
- MemberDef *md=mn->getFirst();
- if (!md->isStatic() || md->getBodyDef()==g_sourceFileDef)
- {
- g_theCallContext.setClass(stripClassName(md->typeString(),md->getOuterScope()));
- return md;
- }
- return 0;
- }
- else if (mn->count()>1) // global defined more than once
- {
- MemberDef *md=mn->first();
- while (md)
- {
- //printf("mn=%p md=%p md->getBodyDef()=%p g_sourceFileDef=%p\n",
- // mn,md,
- // md->getBodyDef(),g_sourceFileDef);
-
- // in case there are multiple members we could link to, we
- // only link to members if defined in the same file or
- // defined as external.
- if ((!md->isStatic() || md->getBodyDef()==g_sourceFileDef) &&
- (g_forceTagReference.isEmpty() || g_forceTagReference==md->getReference())
- )
- {
- g_theCallContext.setClass(stripClassName(md->typeString(),md->getOuterScope()));
- //printf("returning member %s in source file %s\n",md->name().data(),g_sourceFileDef->name().data());
- return md;
- }
- md=mn->next();
- }
- return 0;
- }
- }
- return 0;
-}
-
-static void updateCallContextForSmartPointer()
-{
- ClassDef *cd = g_theCallContext.getClass();
- //printf("updateCallContextForSmartPointer() cd=%s\n",cd ? cd->name().data() : "<none>");
- MemberDef *md;
- if (cd && (md=cd->isSmartPointer()))
- {
- ClassDef *ncd = stripClassName(md->typeString(),md->getOuterScope());
- if (ncd)
- {
- g_theCallContext.setClass(ncd);
- //printf("Found smart pointer call %s->%s!\n",cd->name().data(),ncd->name().data());
- }
- }
-}
-
-static void addDocCrossReference(MemberDef *src,MemberDef *dst)
-{
- static bool referencedByRelation = Config_getBool("REFERENCED_BY_RELATION");
- static bool referencesRelation = Config_getBool("REFERENCES_RELATION");
- static bool callerGraph = Config_getBool("CALLER_GRAPH");
- static bool callGraph = Config_getBool("CALL_GRAPH");
-
- //printf("--> addDocCrossReference src=%s,dst=%s\n",src->name().data(),dst->name().data());
- if (dst->isTypedef() || dst->isEnumerate()) return; // don't add types
- if ((referencedByRelation || callerGraph || dst->hasCallerGraph()) &&
- (src->isFunction() || src->isSlot())
- )
- {
- dst->addSourceReferencedBy(src);
- MemberDef *mdDef = dst->memberDefinition();
- if (mdDef)
- {
- mdDef->addSourceReferencedBy(src);
- }
- MemberDef *mdDecl = dst->memberDeclaration();
- if (mdDecl)
- {
- mdDecl->addSourceReferencedBy(src);
- }
- }
- if ((referencesRelation || callGraph || src->hasCallGraph()) &&
- (src->isFunction() || src->isSlot())
- )
- {
- src->addSourceReferences(dst);
- MemberDef *mdDef = src->memberDefinition();
- if (mdDef)
- {
- mdDef->addSourceReferences(dst);
- }
- MemberDef *mdDecl = src->memberDeclaration();
- if (mdDecl)
- {
- mdDecl->addSourceReferences(dst);
- }
- }
-
-}
-
-static bool getLinkInScope(const QCString &c, // scope
- const QCString &m, // member
- const char *memberText, // exact text
- CodeOutputInterface &ol,
- const char *text,
- bool varOnly=FALSE
- )
-{
- MemberDef *md;
- ClassDef *cd;
- FileDef *fd;
- NamespaceDef *nd;
- GroupDef *gd;
- //fprintf(stderr,"getLinkInScope: trying `%s'::`%s' varOnly=%d\n",c.data(),m.data(),varOnly);
- if (getDefs(c,m,"()",md,cd,fd,nd,gd,FALSE,g_sourceFileDef,FALSE,g_forceTagReference) &&
- md->isLinkable() && (!varOnly || md->isVariable()))
- {
- //printf("found it!\n");
- if (g_exampleBlock)
- {
- QCString anchor;
- anchor.sprintf("a%d",g_anchorCount);
- //printf("addExampleFile(%s,%s,%s)\n",anchor.data(),g_exampleName.data(),
- // g_exampleFile.data());
- if (md->addExample(anchor,g_exampleName,g_exampleFile))
- {
- ol.writeCodeAnchor(anchor);
- g_anchorCount++;
- }
- }
-
- Definition *d = md->getOuterScope()==Doxygen::globalScope ?
- md->getBodyDef() : md->getOuterScope();
- if (md->getGroupDef()) d = md->getGroupDef();
- if (d && d->isLinkable())
- {
- g_theCallContext.setClass(stripClassName(md->typeString(),md->getOuterScope()));
- //printf("g_currentDefinition=%p g_currentMemberDef=%p g_insideBody=%d\n",
- // g_currentDefinition,g_currentMemberDef,g_insideBody);
-
- if (g_currentDefinition && g_currentMemberDef &&
- md!=g_currentMemberDef && g_insideBody)
- {
- addDocCrossReference(g_currentMemberDef,md);
- }
- //printf("d->getReference()=`%s' d->getOutputBase()=`%s' name=`%s' member name=`%s'\n",d->getReference().data(),d->getOutputFileBase().data(),d->name().data(),md->name().data());
-
- ol.linkableSymbol(g_yyLineNr,md->name(),md,
- g_currentMemberDef ? g_currentMemberDef : g_currentDefinition);
- writeMultiLineCodeLink(ol,md->getReference(),
- md->getOutputFileBase(),
- md->anchor(),
- text ? text : memberText,
- md->briefDescriptionAsTooltip());
- addToSearchIndex(text ? text : memberText);
- return TRUE;
- }
- }
- return FALSE;
-}
-
-static bool getLink(const char *className,
- const char *memberName,
- CodeOutputInterface &ol,
- const char *text=0,
- bool varOnly=FALSE)
-{
- //printf("getLink(%s,%s) g_curClassName=%s\n",className,memberName,g_curClassName.data());
- QCString m=removeRedundantWhiteSpace(memberName);
- QCString c=className;
- if (!getLinkInScope(c,m,memberName,ol,text,varOnly))
- {
- if (!g_curClassName.isEmpty())
- {
- if (!c.isEmpty()) c.prepend("::");
- c.prepend(g_curClassName);
- return getLinkInScope(c,m,memberName,ol,text,varOnly);
- }
- return FALSE;
- }
- return TRUE;
-}
-
-static void generateClassOrGlobalLink(CodeOutputInterface &ol,const char *clName,
- bool typeOnly=FALSE,bool varOnly=FALSE)
-{
- int i=0;
- if (*clName=='~') // correct for matching negated values i.s.o. destructors.
- {
- g_code->codify("~");
- clName++;
- }
- QCString className=clName;
- if (className.isEmpty()) return;
- if (g_insideProtocolList) // for Obj-C
- {
- className+="-p";
- }
- className = substitute(className,"\\","::"); // for PHP namespaces
- ClassDef *cd=0,*lcd=0;
- MemberDef *md=0;
- bool isLocal=FALSE;
-
- //printf("generateClassOrGlobalLink(className=%s)\n",className.data());
- if ((lcd=g_theVarContext.findVariable(className))==0) // not a local variable
- {
- Definition *d = g_currentDefinition;
- //printf("d=%s g_sourceFileDef=%s\n",d?d->name().data():"<none>",g_sourceFileDef?g_sourceFileDef->name().data():"<none>");
- cd = getResolvedClass(d,g_sourceFileDef,className,&md);
- //fprintf(stderr,"non-local variable name=%s context=%d cd=%s md=%s!\n",
- // className.data(),g_theVarContext.count(),cd?cd->name().data():"<none>",
- // md?md->name().data():"<none>");
- if (cd==0 && md==0 && (i=className.find('<'))!=-1)
- {
- QCString bareName = className.left(i); //stripTemplateSpecifiersFromScope(className);
- //fprintf(stderr,"bareName=%s\n",bareName.data());
- if (bareName!=className)
- {
- cd=getResolvedClass(d,g_sourceFileDef,bareName,&md); // try unspecialized version
- }
- }
- //printf("md=%s\n",md?md->name().data():"<none>");
- //fprintf(stderr,"is found as a type %s\n",cd?cd->name().data():"<null>");
- if (cd==0 && md==0) // also see if it is variable or enum or enum value
- {
- if (getLink(g_classScope,clName,ol,clName,varOnly))
- {
- return;
- }
- }
- }
- else
- {
- //printf("local variable!\n");
- if (lcd!=VariableContext::dummyContext)
- {
- //printf("non-dummy context lcd=%s!\n",lcd->name().data());
- g_theCallContext.setClass(lcd);
-
- // to following is needed for links to a global variable, but is
- // no good for a link to a local variable that is also a global symbol.
-
- //if (getLink(g_classScope,clName,ol,clName))
- //{
- //return;
- //}
- }
- isLocal=TRUE;
- //fprintf(stderr,"is a local variable cd=%p!\n",cd);
- }
- if (cd && cd->isLinkable()) // is it a linkable class
- {
- //fprintf(stderr,"is linkable class %s\n",clName);
- if (g_exampleBlock)
- {
- QCString anchor;
- anchor.sprintf("_a%d",g_anchorCount);
- //printf("addExampleClass(%s,%s,%s)\n",anchor.data(),g_exampleName.data(),
- // g_exampleFile.data());
- if (cd->addExample(anchor,g_exampleName,g_exampleFile))
- {
- ol.writeCodeAnchor(anchor);
- g_anchorCount++;
- }
- }
- ol.linkableSymbol(g_yyLineNr,cd->name(),cd,
- g_currentMemberDef ? g_currentMemberDef : g_currentDefinition);
- writeMultiLineCodeLink(ol,cd->getReference(),cd->getOutputFileBase(),cd->anchor(),clName,cd->briefDescriptionAsTooltip());
- addToSearchIndex(className);
- g_theCallContext.setClass(cd);
- if (md)
- {
- Definition *d = md->getOuterScope()==Doxygen::globalScope ?
- md->getBodyDef() : md->getOuterScope();
- if (md->getGroupDef()) d = md->getGroupDef();
- if (d && d->isLinkable() && md->isLinkable() && g_currentMemberDef)
- {
- addDocCrossReference(g_currentMemberDef,md);
- }
- }
- }
- else // not a class, maybe a global member
- {
- //fprintf(stderr,"class %s not linkable! cd=%p md=%p typeOnly=%d\n",clName,cd,md,typeOnly);
- if (!isLocal && (md!=0 || (cd==0 && !typeOnly))) // not a class, see if it is a global enum/variable/typedef.
- {
- if (md==0) // not found as a typedef
- {
- md = setCallContextForVar(clName);
- //printf("setCallContextForVar(%s) md=%p g_currentDefinition=%p\n",clName,md,g_currentDefinition);
- if (md && g_currentDefinition)
- {
- //fprintf(stderr,"%s accessible from %s? %d md->getOuterScope=%s\n",
- // md->name().data(),g_currentDefinition->name().data(),
- // isAccessibleFrom(g_currentDefinition,g_sourceFileDef,md),
- // md->getOuterScope()->name().data());
- }
-
- if (md && g_currentDefinition &&
- isAccessibleFrom(g_currentDefinition,g_sourceFileDef,md)==-1)
- {
- md=0; // variable not accessible
- }
- }
- if (md && (!varOnly || md->isVariable()))
- {
- //fprintf(stderr,"is a global md=%p g_currentDefinition=%s linkable=%d\n",md,g_currentDefinition?g_currentDefinition->name().data():"<none>",md->isLinkable());
- if (md->isLinkable())
- {
- QCString text;
- if (!g_forceTagReference.isEmpty()) // explicit reference to symbol in tag file
- {
- text=g_forceTagReference;
- if (text.right(4)==".tag") // strip .tag if present
- {
- text=text.left(text.length()-4);
- }
- text+=getLanguageSpecificSeparator(md->getLanguage());
- text+=clName;
- md->setName(text);
- md->setLocalName(text);
- }
- else // normal reference
- {
- text=clName;
- }
- ol.linkableSymbol(g_yyLineNr,md->name(),md,
- g_currentMemberDef ? g_currentMemberDef : g_currentDefinition);
- writeMultiLineCodeLink(ol,md->getReference(),md->getOutputFileBase(),md->anchor(),text,md->briefDescriptionAsTooltip());
- addToSearchIndex(clName);
- if (g_currentMemberDef)
- {
- addDocCrossReference(g_currentMemberDef,md);
- }
- return;
- }
- }
- }
-
- // nothing found, just write out the word
- //fprintf(stderr,"not found!\n");
- ol.linkableSymbol(g_yyLineNr,clName,0,
- g_currentMemberDef?g_currentMemberDef:g_currentDefinition);
- codifyLines(clName);
- addToSearchIndex(clName);
- }
-}
-
-static bool generateClassMemberLink(CodeOutputInterface &ol,MemberDef *xmd,const char *memName)
-{
- // extract class definition of the return type in order to resolve
- // a->b()->c() like call chains
-
- //printf("type=`%s' args=`%s' class=%s\n",
- // xmd->typeString(),xmd->argsString(),
- // xmd->getClassDef()->name().data());
-
- if (g_exampleBlock)
- {
- QCString anchor;
- anchor.sprintf("a%d",g_anchorCount);
- //printf("addExampleFile(%s,%s,%s)\n",anchor.data(),g_exampleName.data(),
- // g_exampleFile.data());
- if (xmd->addExample(anchor,g_exampleName,g_exampleFile))
- {
- ol.writeCodeAnchor(anchor);
- g_anchorCount++;
- }
- }
-
- ClassDef *typeClass = stripClassName(removeAnonymousScopes(xmd->typeString()),xmd->getOuterScope());
- //fprintf(stderr,"%s -> typeName=%p\n",xmd->typeString(),typeClass);
- g_theCallContext.setClass(typeClass);
-
- Definition *xd = xmd->getOuterScope()==Doxygen::globalScope ?
- xmd->getBodyDef() : xmd->getOuterScope();
- if (xmd->getGroupDef()) xd = xmd->getGroupDef();
- if (xd && xd->isLinkable())
- {
-
- //printf("g_currentDefiniton=%p g_currentMemberDef=%p xmd=%p g_insideBody=%d\n",g_currentDefinition,g_currentMemberDef,xmd,g_insideBody);
-
- if (xmd->templateMaster()) xmd = xmd->templateMaster();
-
- if (xmd->isLinkable())
- {
- // add usage reference
- if (g_currentDefinition && g_currentMemberDef &&
- /*xmd!=g_currentMemberDef &&*/ g_insideBody)
- {
- addDocCrossReference(g_currentMemberDef,xmd);
- }
-
- // write the actual link
- ol.linkableSymbol(g_yyLineNr,xmd->name(),xmd,
- g_currentMemberDef ? g_currentMemberDef : g_currentDefinition);
- writeMultiLineCodeLink(ol,xmd->getReference(),
- xmd->getOutputFileBase(),xmd->anchor(),memName,xmd->briefDescriptionAsTooltip());
- addToSearchIndex(memName);
- return TRUE;
- }
- }
-
- return FALSE;
-}
-
-static bool generateClassMemberLink(CodeOutputInterface &ol,ClassDef *mcd,const char *memName)
-{
- if (mcd)
- {
- MemberDef *xmd = mcd->getMemberByName(memName);
- //printf("generateClassMemberLink(class=%s,member=%s)=%p\n",mcd->name().data(),memName,xmd);
- if (xmd)
- {
- return generateClassMemberLink(ol,xmd,memName);
- }
- }
-
- return FALSE;
-}
-
-static void generateMemberLink(CodeOutputInterface &ol,const QCString &varName,
- char *memName)
-{
- //printf("generateMemberLink(object=%s,mem=%s) classScope=%s\n",
- // varName.data(),memName,g_classScope.data());
-
- if (varName.isEmpty()) return;
-
- // look for the variable in the current context
- ClassDef *vcd = g_theVarContext.findVariable(varName);
- if (vcd)
- {
- if (vcd!=VariableContext::dummyContext)
- {
- //printf("Class found!\n");
- if (getLink(vcd->name(),memName,ol))
- {
- //printf("Found result!\n");
- return;
- }
- if (vcd->baseClasses())
- {
- BaseClassListIterator bcli(*vcd->baseClasses());
- for ( ; bcli.current() ; ++bcli)
- {
- if (getLink(bcli.current()->classDef->name(),memName,ol))
- {
- //printf("Found result!\n");
- return;
- }
- }
- }
- }
- }
- else // variable not in current context, maybe it is in a parent context
- {
- vcd = getResolvedClass(g_currentDefinition,g_sourceFileDef,g_classScope);
- if (vcd && vcd->isLinkable())
- {
- //printf("Found class %s for variable `%s'\n",g_classScope.data(),varName.data());
- MemberName *vmn=Doxygen::memberNameSDict->find(varName);
- if (vmn==0)
- {
- int vi;
- QCString vn=varName;
- QCString scope;
- if ((vi=vn.findRev("::"))!=-1 || (vi=vn.findRev('.'))!=-1) // explicit scope A::b(), probably static member
- {
- ClassDef *jcd = getClass(vn.left(vi));
- vn=vn.right(vn.length()-vi-2);
- vmn=Doxygen::memberNameSDict->find(vn);
- //printf("Trying name `%s' scope=%s\n",vn.data(),scope.data());
- if (vmn)
- {
- MemberNameIterator vmni(*vmn);
- MemberDef *vmd;
- for (;(vmd=vmni.current());++vmni)
- {
- if (/*(vmd->isVariable() || vmd->isFunction()) && */
- vmd->getClassDef()==jcd)
- {
- //printf("Found variable type=%s\n",vmd->typeString());
- ClassDef *mcd=stripClassName(vmd->typeString(),vmd->getOuterScope());
- if (mcd && mcd->isLinkable())
- {
- if (generateClassMemberLink(ol,mcd,memName)) return;
- }
- }
- }
- }
- }
- }
- if (vmn)
- {
- //printf("There is a variable with name `%s'\n",varName);
- MemberNameIterator vmni(*vmn);
- MemberDef *vmd;
- for (;(vmd=vmni.current());++vmni)
- {
- if (/*(vmd->isVariable() || vmd->isFunction()) && */
- vmd->getClassDef()==vcd)
- {
- //printf("Found variable type=%s\n",vmd->typeString());
- ClassDef *mcd=stripClassName(vmd->typeString(),vmd->getOuterScope());
- if (mcd && mcd->isLinkable())
- {
- if (generateClassMemberLink(ol,mcd,memName)) return;
- }
- }
- }
- }
- }
- }
- // nothing found -> write result as is
- ol.linkableSymbol(g_yyLineNr,memName,0,
- g_currentMemberDef?g_currentMemberDef:g_currentDefinition);
- codifyLines(memName);
- addToSearchIndex(memName);
- return;
-}
-
-static void generatePHPVariableLink(CodeOutputInterface &ol,const char *varName)
-{
- QCString name = varName+7; // strip $this->
- name.prepend("$");
- //printf("generatePHPVariableLink(%s) name=%s scope=%s\n",varName,name.data(),g_classScope.data());
- if (!getLink(g_classScope,name,ol,varName))
- {
- codifyLines(varName);
- }
-}
-
-static void generateFunctionLink(CodeOutputInterface &ol,const char *funcName)
-{
- //CodeClassDef *ccd=0;
- ClassDef *ccd=0;
- QCString locScope=g_classScope;
- QCString locFunc=removeRedundantWhiteSpace(funcName);
- //fprintf(stdout,"*** locScope=%s locFunc=%s\n",locScope.data(),locFunc.data());
- int len=2;
- int i=locFunc.findRev("::");
- if (g_currentMemberDef && g_currentMemberDef->getClassDef() &&
- funcName==g_currentMemberDef->localName() &&
- g_currentMemberDef->getDefLine()==g_yyLineNr &&
- generateClassMemberLink(ol,g_currentMemberDef,funcName)
- )
- {
- // special case where funcName is the name of a method that is also
- // defined on this line. In this case we can directly link to
- // g_currentMemberDef, which is not only faster, but
- // in case of overloaded methods, this will make sure that we link to
- // the correct method, and thereby get the correct reimplemented relations.
- // See also bug 549022.
- goto exit;
- }
- if (i==-1) i=locFunc.findRev("."),len=1;
- if (i==-1) i=locFunc.findRev("\\"),len=1; // for PHP
- if (i>0)
- {
- if (locScope.isEmpty())
- {
- locScope=locFunc.left(i);
- }
- else
- {
- locScope+="::"+locFunc.left(i);
- }
- locFunc=locFunc.right(locFunc.length()-i-len).stripWhiteSpace();
- int ts=locScope.find('<'); // start of template
- int te=locScope.findRev('>'); // end of template
- //printf("ts=%d te=%d\n",ts,te);
- if (ts!=-1 && te!=-1 && te>ts)
- {
- // remove template from scope
- locScope=locScope.left(ts)+locScope.right(locScope.length()-te-1);
- }
- }
- //printf("generateFunctionLink(%s) classScope=`%s'\n",locFunc.data(),locScope.data());
- if (!locScope.isEmpty() && (ccd=g_codeClassSDict->find(locScope)))
- {
- //printf("using classScope %s\n",g_classScope.data());
- if (ccd->baseClasses())
- {
- BaseClassListIterator bcli(*ccd->baseClasses());
- for ( ; bcli.current() ; ++bcli)
- {
- if (getLink(bcli.current()->classDef->name(),locFunc,ol,funcName))
- {
- goto exit;
- }
- }
- }
- }
- if (!getLink(locScope,locFunc,ol,funcName))
- {
- generateClassOrGlobalLink(ol,funcName);
- }
-exit:
- g_forceTagReference.resize(0);
- return;
-}
-
-/*! counts the number of lines in the input */
-static int countLines()
-{
- const char *p=g_inputString;
- char c;
- int count=1;
- while ((c=*p))
- {
- p++ ;
- if (c=='\n') count++;
- }
- if (p>g_inputString && *(p-1)!='\n')
- { // last line does not end with a \n, so we add an extra
- // line and explicitly terminate the line after parsing.
- count++,
- g_needsTermination=TRUE;
- }
- return count;
-}
-
-static void endFontClass()
-{
- if (g_currentFontClass)
- {
- g_code->endFontClass();
- g_currentFontClass=0;
- }
-}
-
-static void startFontClass(const char *s)
-{
- endFontClass();
- g_code->startFontClass(s);
- g_currentFontClass=s;
-}
-
-//----------------------------------------------------------------------------
-
-// recursively writes a linkified Objective-C method call
-static void writeObjCMethodCall(ObjCCallCtx *ctx)
-{
- if (ctx==0) return;
- char c;
- const char *p = ctx->format.data();
- if (!ctx->methodName.isEmpty())
- {
- //printf("writeObjCMethodCall(%s) obj=%s method=%s\n",
- // ctx->format.data(),ctx->objectTypeOrName.data(),ctx->methodName.data());
- if (!ctx->objectTypeOrName.isEmpty() && ctx->objectTypeOrName.at(0)!='$')
- {
- //printf("Looking for object=%s method=%s\n",ctx->objectTypeOrName.data(),
- // ctx->methodName.data());
- ClassDef *cd = g_theVarContext.findVariable(ctx->objectTypeOrName);
- if (cd==0) // not a local variable
- {
- if (ctx->objectTypeOrName=="self")
- {
- if (g_currentDefinition &&
- g_currentDefinition->definitionType()==Definition::TypeClass)
- {
- ctx->objectType = (ClassDef *)g_currentDefinition;
- }
- }
- else
- {
- ctx->objectType = getResolvedClass(
- g_currentDefinition,
- g_sourceFileDef,
- ctx->objectTypeOrName,
- &ctx->method);
- }
- //printf(" object is class? %p\n",ctx->objectType);
- if (ctx->objectType) // found class
- {
- ctx->method = ctx->objectType->getMemberByName(ctx->methodName);
- //printf(" yes->method=%s\n",ctx->method?ctx->method->name().data():"<none>");
- }
- else if (ctx->method==0) // search for class variable with the same name
- {
- //printf(" no\n");
- //printf("g_currentDefinition=%p\n",g_currentDefinition);
- if (g_currentDefinition &&
- g_currentDefinition->definitionType()==Definition::TypeClass)
- {
- ctx->objectVar = ((ClassDef *)g_currentDefinition)->getMemberByName(ctx->objectTypeOrName);
- //printf(" ctx->objectVar=%p\n",ctx->objectVar);
- if (ctx->objectVar)
- {
- ctx->objectType = stripClassName(ctx->objectVar->typeString());
- //printf(" ctx->objectType=%p\n",ctx->objectType);
- if (ctx->objectType)
- {
- ctx->method = ctx->objectType->getMemberByName(ctx->methodName);
- //printf(" ctx->method=%p\n",ctx->method);
- }
- }
- }
- }
- }
- else // local variable
- {
- //printf(" object is local variable\n");
- if (cd!=VariableContext::dummyContext)
- {
- ctx->method = cd->getMemberByName(ctx->methodName);
- //printf(" class=%p method=%p\n",cd,ctx->method);
- }
- }
- }
- }
-
- //printf("[");
- while ((c=*p++)) // for each character in ctx->format
- {
- if (c=='$')
- {
- char nc=*p++;
- if (nc=='$') // escaped $
- {
- g_code->codify("$");
- }
- else // name fragment or reference to a nested call
- {
- if (nc=='n') // name fragment
- {
- nc=*p++;
- QCString refIdStr;
- while (nc!=0 && isdigit(nc)) { refIdStr+=nc; nc=*p++; }
- p--;
- int refId=refIdStr.toInt();
- QCString *pName = g_nameDict.find(refId);
- if (pName)
- {
- if (ctx->method && ctx->method->isLinkable())
- {
- g_code->linkableSymbol(g_yyLineNr,ctx->method->name(),ctx->method,
- g_currentMemberDef ? g_currentMemberDef : g_currentDefinition);
- writeMultiLineCodeLink(*g_code,
- ctx->method->getReference(),
- ctx->method->getOutputFileBase(),
- ctx->method->anchor(),
- pName->data(),
- ctx->method->briefDescriptionAsTooltip());
- if (g_currentMemberDef)
- {
- addDocCrossReference(g_currentMemberDef,ctx->method);
- }
- }
- else
- {
- g_code->linkableSymbol(g_yyLineNr,pName->data(),0,
- g_currentMemberDef ? g_currentMemberDef : g_currentDefinition);
- codifyLines(pName->data());
- }
- }
- else
- {
- //printf("Invalid name: id=%d\n",refId);
- }
- }
- else if (nc=='o') // reference to potential object name
- {
- nc=*p++;
- QCString refIdStr;
- while (nc!=0 && isdigit(nc)) { refIdStr+=nc; nc=*p++; }
- p--;
- int refId=refIdStr.toInt();
- QCString *pObject = g_objectDict.find(refId);
- if (pObject)
- {
- if (*pObject=="self")
- {
- if (g_currentDefinition &&
- g_currentDefinition->definitionType()==Definition::TypeClass)
- {
- ctx->objectType = (ClassDef *)g_currentDefinition;
- if (ctx->objectType->categoryOf())
- {
- ctx->objectType = ctx->objectType->categoryOf();
- }
- if (ctx->objectType)
- {
- ctx->method = ctx->objectType->getMemberByName(ctx->methodName);
- }
- }
- startFontClass("keyword");
- codifyLines(pObject->data());
- endFontClass();
- }
- else if (*pObject=="super")
- {
- if (g_currentDefinition &&
- g_currentDefinition->definitionType()==Definition::TypeClass)
- {
- ClassDef *cd = (ClassDef *)g_currentDefinition;
- if (cd->categoryOf())
- {
- cd = cd->categoryOf();
- }
- BaseClassList *bcd = cd->baseClasses();
- if (bcd) // get direct base class (there should be only one)
- {
- BaseClassListIterator bli(*bcd);
- BaseClassDef *bclass;
- for (bli.toFirst();(bclass=bli.current());++bli)
- {
- if (bclass->classDef->compoundType()!=ClassDef::Protocol)
- {
- ctx->objectType = bclass->classDef;
- if (ctx->objectType)
- {
- ctx->method = ctx->objectType->getMemberByName(ctx->methodName);
- }
- }
- }
- }
- }
- startFontClass("keyword");
- codifyLines(pObject->data());
- endFontClass();
- }
- else if (ctx->objectVar && ctx->objectVar->isLinkable()) // object is class variable
- {
- g_code->linkableSymbol(g_yyLineNr,ctx->objectVar->name(),ctx->objectVar,
- g_currentMemberDef ? g_currentMemberDef : g_currentDefinition);
- writeMultiLineCodeLink(*g_code,
- ctx->objectVar->getReference(),
- ctx->objectVar->getOutputFileBase(),
- ctx->objectVar->anchor(),
- pObject->data(),
- ctx->objectVar->briefDescriptionAsTooltip());
- if (g_currentMemberDef)
- {
- addDocCrossReference(g_currentMemberDef,ctx->objectVar);
- }
- }
- else if (ctx->objectType &&
- ctx->objectType!=VariableContext::dummyContext &&
- ctx->objectType->isLinkable()
- ) // object is class name
- {
- ClassDef *cd = ctx->objectType;
- g_code->linkableSymbol(g_yyLineNr,cd->name(),cd,
- g_currentMemberDef ? g_currentMemberDef : g_currentDefinition);
- writeMultiLineCodeLink(*g_code,
- cd->getReference(),
- cd->getOutputFileBase(),
- cd->anchor(),
- pObject->data(),
- cd->briefDescriptionAsTooltip());
- }
- else // object still needs to be resolved
- {
- ClassDef *cd = getResolvedClass(g_currentDefinition,
- g_sourceFileDef, *pObject);
- if (cd && cd->isLinkable())
- {
- if (ctx->objectType==0) ctx->objectType=cd;
- g_code->linkableSymbol(g_yyLineNr,cd->name(),cd,
- g_currentMemberDef ? g_currentMemberDef : g_currentDefinition);
- writeMultiLineCodeLink(*g_code,
- cd->getReference(),
- cd->getOutputFileBase(),
- cd->anchor(),
- pObject->data(),
- cd->briefDescriptionAsTooltip());
- }
- else
- {
- g_code->linkableSymbol(g_yyLineNr,pObject->data(),0,
- g_currentMemberDef ? g_currentMemberDef : g_currentDefinition);
- codifyLines(pObject->data());
- }
- }
- }
- else
- {
- //printf("Invalid object: id=%d\n",refId);
- }
- }
- else if (nc=='c') // reference to nested call
- {
- nc=*p++;
- QCString refIdStr;
- while (nc!=0 && isdigit(nc)) { refIdStr+=nc; nc=*p++; }
- p--;
- int refId=refIdStr.toInt();
- ObjCCallCtx *ictx = g_contextDict.find(refId);
- if (ictx) // recurse into nested call
- {
- writeObjCMethodCall(ictx);
- if (ictx->method) // link to nested call successfully
- {
- // get the ClassDef representing the method's return type
- if (QCString(ictx->method->typeString())=="id")
- {
- // see if the method name is unique, if so we link to it
- MemberName *mn=Doxygen::memberNameSDict->find(ctx->methodName);
- //printf("mn->count=%d ictx->method=%s ctx->methodName=%s\n",
- // mn==0?-1:(int)mn->count(),
- // ictx->method->name().data(),
- // ctx->methodName.data());
- if (mn && mn->count()==1) // member name unique
- {
- ctx->method = mn->getFirst();
- }
- }
- else
- {
- ctx->objectType = stripClassName(ictx->method->typeString());
- if (ctx->objectType)
- {
- ctx->method = ctx->objectType->getMemberByName(ctx->methodName);
- }
- }
- //printf(" ***** method=%s -> object=%p\n",ictx->method->name().data(),ctx->objectType);
- }
- }
- else
- {
- //printf("Invalid context: id=%d\n",refId);
- }
- }
- else if (nc=='w') // some word
- {
- nc=*p++;
- QCString refIdStr;
- while (nc!=0 && isdigit(nc)) { refIdStr+=nc; nc=*p++; }
- p--;
- int refId=refIdStr.toInt();
- QCString *pWord = g_wordDict.find(refId);
- if (pWord)
- {
- g_code->linkableSymbol(g_yyLineNr,pWord->data(),0,
- g_currentMemberDef ? g_currentMemberDef : g_currentDefinition);
- codifyLines(pWord->data());
- }
- }
- else // illegal marker
- {
- ASSERT(!"invalid escape sequence");
- }
- }
- }
- else // normal non-marker character
- {
- char s[2];
- s[0]=c;s[1]=0;
- codifyLines(s);
- }
- }
- //printf("%s %s]\n",ctx->objectTypeOrName.data(),ctx->methodName.data());
- //printf("}=(type='%s',name='%s')",
- // ctx->objectTypeOrName.data(),
- // ctx->methodName.data());
-}
-
-// Replaces an Objective-C method name fragment s by a marker of the form
-// $n12, the number (12) can later be used as a key for obtaining the name
-// fragment, from g_nameDict
-static QCString escapeName(const char *s)
-{
- QCString result;
- result.sprintf("$n%d",g_currentNameId);
- g_nameDict.insert(g_currentNameId,new QCString(s));
- g_currentNameId++;
- return result;
-}
-
-static QCString escapeObject(const char *s)
-{
- QCString result;
- result.sprintf("$o%d",g_currentObjId);
- g_objectDict.insert(g_currentObjId,new QCString(s));
- g_currentObjId++;
- return result;
-}
-
-static QCString escapeWord(const char *s)
-{
- QCString result;
- result.sprintf("$w%d",g_currentWordId);
- g_wordDict.insert(g_currentWordId,new QCString(s));
- g_currentWordId++;
- return result;
-}
-
-/* -----------------------------------------------------------------
- */
-#undef YY_INPUT
-#define YY_INPUT(buf,result,max_size) result=yyread(buf,max_size);
-
-static int yyread(char *buf,int max_size)
-{
- int c=0;
- while( c < max_size && g_inputString[g_inputPosition] )
- {
- *buf = g_inputString[g_inputPosition++] ;
- c++; buf++;
- }
- return c;
-}
-
-%}
-
-B [ \t]
-BN [ \t\n\r]
-ID "$"?[a-z_A-Z\x80-\xFF][a-z_A-Z0-9\x80-\xFF]*
-SEP ("::"|"\\")
-SCOPENAME ({SEP}{BN}*)?({ID}{BN}*{SEP}{BN}*)*("~"{BN}*)?{ID}
-TEMPLIST "<"[^\"\}\{\(\)\/\n\>]*">"
-SCOPETNAME (((({ID}{TEMPLIST}?){BN}*)?{SEP}{BN}*)*)((~{BN}*)?{ID})
-SCOPEPREFIX ({ID}{TEMPLIST}?{BN}*{SEP}{BN}*)+
-KEYWORD_OBJC ("@public"|"@private"|"@protected"|"@class"|"@implementation"|"@interface"|"@end"|"@selector"|"@protocol"|"@optional"|"@required"|"@throw"|"@synthesize"|"@property")
-KEYWORD ("asm"|"__assume"|"auto"|"class"|"const"|"delete"|"enum"|"explicit"|"extern"|"false"|"friend"|"gcnew"|"gcroot"|"get"|"inline"|"internal"|"mutable"|"namespace"|"new"|"nullptr"|"override"|"operator"|"pin_ptr"|"private"|"protected"|"public"|"raise"|"register"|"remove"|"self"|"set"|"sizeof"|"static"|"struct"|"__super"|"function"|"template"|"generic"|"this"|"true"|"typedef"|"typeid"|"typename"|"union"|"using"|"virtual"|"volatile"|"abstract"|"final"|"import"|"synchronized"|"transient"|{KEYWORD_OBJC})
-FLOWKW ("break"|"case"|"catch"|"continue"|"default"|"do"|"else"|"finally"|"for"|"foreach"|"for each"|"goto"|"if"|"return"|"switch"|"throw"|"throws"|"try"|"while"|"@try"|"@catch"|"@finally")
-TYPEKW ("bool"|"char"|"double"|"float"|"int"|"long"|"object"|"short"|"signed"|"unsigned"|"void"|"wchar_t"|"size_t"|"boolean"|"id"|"SEL"|"string")
-CASTKW ("const_cast"|"dynamic_cast"|"reinterpret_cast"|"static_cast")
-CHARLIT (("'"\\[0-7]{1,3}"'")|("'"\\."'")|("'"[^' \\\n]{1,4}"'"))
-ARITHOP "+"|"-"|"/"|"*"|"%"|"--"|"++"
-ASSIGNOP "="|"*="|"/="|"%="|"+="|"-="|"<<="|">>="|"&="|"^="|"|="
-LOGICOP "=="|"!="|">"|"<"|">="|"<="|"&&"|"||"|"!"
-BITOP "&"|"|"|"^"|"<<"|">>"|"~"
-OPERATOR {ARITHOP}|{ASSIGNOP}|{LOGICOP}|{BITOP}
-%option noyywrap
-
-%x SkipString
-%x SkipStringS
-%x SkipVerbString
-%x SkipCPP
-%x SkipComment
-%x SkipCxxComment
-%x RemoveSpecialCComment
-%x StripSpecialCComment
-%x Body
-%x FuncCall
-%x MemberCall
-%x MemberCall2
-%x SkipInits
-%x ClassName
-%x PackageName
-%x ClassVar
-%x CppCliTypeModifierFollowup
-%x Bases
-%x SkipSharp
-%x ReadInclude
-%x TemplDecl
-%x TemplCast
-%x CallEnd
-%x ObjCMethod
-%x ObjCParams
-%x ObjCParamType
-%x ObjCCall
-%x ObjCMName
-%x ObjCSkipStr
-%x OldStyleArgs
-%x UsingName
-
-%%
-
-<*>\x0d
-<Body>^([ \t]*"#"[ \t]*("include"|"import")[ \t]*)("<"|"\"") {
- startFontClass("preprocessor");
- g_code->codify(yytext);
- BEGIN( ReadInclude );
- }
-<Body>("@interface"|"@implementation"|"@protocol")[ \t\n]+ {
- g_insideObjC=TRUE;
- startFontClass("keyword");
- codifyLines(yytext);
- endFontClass();
- if (!g_insideTemplate)
- BEGIN( ClassName );
- }
-<Body>(("public"|"private"){B}+)?("ref"|"value"|"interface"|"enum"){B}+("class"|"struct") {
- if (g_insideTemplate) REJECT;
- startFontClass("keyword");
- codifyLines(yytext);
- endFontClass();
- BEGIN( ClassName );
- }
-<Body>"property"|"event"/{BN}* {
- if (g_insideTemplate) REJECT;
- startFontClass("keyword");
- codifyLines(yytext);
- endFontClass();
- }
-<Body>(KEYWORD_CPPCLI_DATATYPE|("partial"{B}+)?"class"|"struct"|"union"|"namespace"|"interface"){B}+ {
- startFontClass("keyword");
- codifyLines(yytext);
- endFontClass();
- if (!g_insideTemplate)
- BEGIN( ClassName );
- }
-<Body>("package")[ \t\n]+ {
- startFontClass("keyword");
- codifyLines(yytext);
- endFontClass();
- BEGIN( PackageName );
- }
-<ClassVar>\n {
- if (!g_insideObjC) REJECT;
- codifyLines(yytext);
- BEGIN(Body);
- }
-<Body,ClassVar,Bases>"-"|"+" {
- if (!g_insideObjC || g_insideBody)
- {
- g_code->codify(yytext);
- }
- else // Start of Objective-C method
- {
- //printf("Method!\n");
- g_code->codify(yytext);
- BEGIN(ObjCMethod);
- }
- }
-<ObjCMethod>":" {
- g_code->codify(yytext);
- BEGIN(ObjCParams);
- }
-<ObjCParams>"(" {
- g_code->codify(yytext);
- BEGIN(ObjCParamType);
- }
-<ObjCParams,ObjCMethod>";"|"{" {
- g_code->codify(yytext);
- if (*yytext=='{')
- {
- g_curlyCount++;
- if (g_searchingForBody)
- {
- g_searchingForBody=FALSE;
- g_insideBody=TRUE;
- }
- if (g_insideBody) g_bodyCurlyCount++;
- if (!g_curClassName.isEmpty()) // valid class name
- {
- pushScope(g_curClassName);
- DBG_CTX((stderr,"** scope stack push SCOPEBLOCK\n"));
- g_scopeStack.push(SCOPEBLOCK);
- }
- }
- g_type.resize(0);
- g_name.resize(0);
- BEGIN(Body);
- }
-<ObjCParams>{ID}{B}*":" {
- g_code->codify(yytext);
- }
-<ObjCParamType>{TYPEKW} {
- startFontClass("keywordtype");
- g_code->codify(yytext);
- endFontClass();
- g_parmType=yytext;
- }
-<ObjCParamType>{ID} {
- generateClassOrGlobalLink(*g_code,yytext);
- g_parmType=yytext;
- }
-<ObjCParamType>")" {
- g_code->codify(yytext);
- BEGIN(ObjCParams);
- }
-<ObjCParams>{ID} {
- g_code->linkableSymbol(g_yyLineNr,yytext,0,
- g_currentMemberDef?g_currentMemberDef:g_currentDefinition);
- g_code->codify(yytext);
- g_parmName=yytext;
- g_theVarContext.addVariable(g_parmType,g_parmName);
- g_parmType.resize(0);g_parmName.resize(0);
- }
-<ObjCMethod,ObjCParams,ObjCParamType>{ID} {
- generateClassOrGlobalLink(*g_code,yytext);
- }
-<ObjCMethod,ObjCParams,ObjCParamType>. {
- g_code->codify(yytext);
- }
-<ObjCMethod,ObjCParams,ObjCParamType>\n {
- codifyLines(yytext);
- }
-<ReadInclude>[^\n\"\>]+/(">"|"\"") {
- //FileInfo *f;
- bool ambig;
- bool found=FALSE;
- //QCString absPath = yytext;
- //if (g_sourceFileDef && QDir::isRelativePath(absPath))
- //{
- // absPath = QDir::cleanDirPath(g_sourceFileDef->getPath()+"/"+absPath);
- //}
-
- FileDef *fd=findFileDef(Doxygen::inputNameDict,yytext,ambig);
- //printf("looking for include %s -> %s fd=%p\n",yytext,absPath.data(),fd);
- if (fd && fd->isLinkable())
- {
- if (ambig) // multiple input files match the name
- {
- //printf("===== yes %s is ambiguous\n",yytext);
- QCString name = convertToQCString(QDir::cleanDirPath(yytext));
- if (!name.isEmpty() && g_sourceFileDef)
- {
- FileName *fn = Doxygen::inputNameDict->find(name);
- if (fn)
- {
- FileNameIterator fni(*fn);
- // for each include name
- for (fni.toFirst();!found && (fd=fni.current());++fni)
- {
- // see if this source file actually includes the file
- found = g_sourceFileDef->isIncluded(fd->absFilePath());
- //printf(" include file %s found=%d\n",fd->absFilePath().data(),found);
- }
- }
- }
- }
- else // not ambiguous
- {
- found = TRUE;
- }
- }
- //printf(" include file %s found=%d\n",fd ? fd->absFilePath().data() : "<none>",found);
- if (found)
- {
- g_code->writeCodeLink(fd->getReference(),fd->getOutputFileBase(),0,yytext,fd->briefDescriptionAsTooltip());
- }
- else
- {
- g_code->codify(yytext);
- }
- char c=yyinput();
- QCString text;
- text+=c;
- g_code->codify(text);
- endFontClass();
- BEGIN( Body );
- }
-<Body,Bases>^[ \t]*"#" {
- startFontClass("preprocessor");
- g_lastSkipCppContext = YY_START;
- g_code->codify(yytext);
- BEGIN( SkipCPP ) ;
- }
-<SkipCPP>. {
- g_code->codify(yytext);
- }
-<SkipCPP>[^\n\/\\]+ {
- g_code->codify(yytext);
- }
-<SkipCPP>\\[\r]?\n {
- codifyLines(yytext);
- }
-<SkipCPP>"//" {
- g_code->codify(yytext);
- }
-<Body,FuncCall>"{" {
- g_theVarContext.pushScope();
-
- DBG_CTX((stderr,"** scope stack push INNERBLOCK\n"));
- g_scopeStack.push(INNERBLOCK);
-
- if (g_searchingForBody)
- {
- g_searchingForBody=FALSE;
- g_insideBody=TRUE;
- }
- g_code->codify(yytext);
- g_curlyCount++;
- if (g_insideBody)
- {
- g_bodyCurlyCount++;
- }
- g_type.resize(0);
- g_name.resize(0);
- BEGIN( Body );
- }
-<Body,MemberCall,MemberCall2>"}" {
- g_theVarContext.popScope();
- g_type.resize(0);
- g_name.resize(0);
-
- int *scope = g_scopeStack.pop();
- DBG_CTX((stderr,"** scope stack pop SCOPEBLOCK=%d\n",scope==SCOPEBLOCK));
- if (scope==SCOPEBLOCK || scope==CLASSBLOCK)
- {
- popScope();
- }
-
- g_code->codify(yytext);
-
- //fprintf(stderr,"g_bodyCurlyCount=%d\n",g_bodyCurlyCount);
- if (--g_bodyCurlyCount<=0)
- {
- g_insideBody=FALSE;
- g_currentMemberDef=0;
- if (g_currentDefinition)
- g_currentDefinition=g_currentDefinition->getOuterScope();
- }
- BEGIN(Body);
- }
-<Body,ClassVar>"@end" {
- //printf("End of objc scope fd=%s\n",g_sourceFileDef->name().data());
- if (g_sourceFileDef)
- {
- FileDef *fd=g_sourceFileDef;
- g_insideObjC = fd->name().lower().right(2)==".m" ||
- fd->name().lower().right(3)==".mm";
- //printf("insideObjC=%d\n",g_insideObjC);
- }
- else
- {
- g_insideObjC = FALSE;
- }
- if (g_insideBody)
- {
- g_theVarContext.popScope();
-
- int *scope = g_scopeStack.pop();
- DBG_CTX((stderr,"** scope stack pop SCOPEBLOCK=%d\n",scope==SCOPEBLOCK));
- if (scope==SCOPEBLOCK || scope==CLASSBLOCK)
- {
- popScope();
- }
- g_insideBody=FALSE;
- }
-
- startFontClass("keyword");
- g_code->codify(yytext);
- endFontClass();
-
- g_currentMemberDef=0;
- if (g_currentDefinition)
- g_currentDefinition=g_currentDefinition->getOuterScope();
- BEGIN(Body);
- }
-<ClassName,ClassVar>";" {
- g_code->codify(yytext);
- g_searchingForBody=FALSE;
- BEGIN( Body );
- }
-<ClassName,ClassVar>[*&^%]+ {
- g_type=g_curClassName.copy();
- g_name.resize(0);
- g_code->codify(yytext);
- BEGIN( Body ); // variable of type struct *
- }
-<ClassName>"__declspec"{B}*"("{B}*{ID}{B}*")" {
- startFontClass("keyword");
- g_code->codify(yytext);
- endFontClass();
- }
-<ClassName>{ID}("::"{ID})* {
- g_curClassName=yytext;
- addType();
- generateClassOrGlobalLink(*g_code,yytext);
- BEGIN( ClassVar );
- }
-<ClassName>{ID}("\\"{ID})* { // PHP namespace
- g_curClassName=substitute(yytext,"\\","::");
- g_scopeStack.push(CLASSBLOCK);
- pushScope(g_curClassName);
- addType();
- generateClassOrGlobalLink(*g_code,yytext);
- BEGIN( ClassVar );
- }
-<PackageName>{ID}("."{ID})* {
- g_curClassName=substitute(yytext,".","::");
- //printf("found package: %s\n",g_curClassName.data());
- addType();
- codifyLines(yytext);
- }
-<ClassVar>"=" {
- unput(*yytext);
- BEGIN( Body );
- }
-<ClassVar>("extends"|"implements") { // Java
- startFontClass("keyword");
- codifyLines(yytext);
- endFontClass();
- g_curClassBases.clear();
- BEGIN( Bases );
- }
-<ClassVar>("sealed"|"abstract")/{BN}*(":"|"{") {
- //fprintf(stderr,"***** C++/CLI modifier %s on g_curClassName=%s\n",yytext,g_curClassName.data());
- startFontClass("keyword");
- codifyLines(yytext);
- endFontClass();
- BEGIN( CppCliTypeModifierFollowup );
- }
-<ClassVar>{ID} {
- g_type = g_curClassName.copy();
- g_name = yytext;
- if (g_insideBody)
- {
- g_theVarContext.addVariable(g_type,g_name);
- }
- generateClassOrGlobalLink(*g_code,yytext);
- }
-<ClassName,ClassVar,CppCliTypeModifierFollowup>{B}*":"{B}* {
- codifyLines(yytext);
- g_curClassBases.clear();
- BEGIN( Bases );
- }
-<PackageName>[ \t]*";" |
-<Bases,ClassName,ClassVar,CppCliTypeModifierFollowup>{B}*"{"{B}* {
- g_theVarContext.pushScope();
- g_code->codify(yytext);
- g_curlyCount++;
- if (YY_START==ClassVar && g_curClassName.isEmpty())
- {
- g_curClassName = g_name.copy();
- }
- if (g_searchingForBody)
- {
- g_searchingForBody=FALSE;
- g_insideBody=TRUE;
- }
- if (g_insideBody) g_bodyCurlyCount++;
- if (!g_curClassName.isEmpty()) // valid class name
- {
- DBG_CTX((stderr,"** scope stack push CLASSBLOCK\n"));
- g_scopeStack.push(CLASSBLOCK);
- pushScope(g_curClassName);
- //fprintf(stderr,"***** g_curClassName=%s\n",g_curClassName.data());
- if (getResolvedClass(g_currentDefinition,g_sourceFileDef,g_curClassName)==0)
- {
- //fprintf(stderr,"Adding new class %s\n",g_curClassName.data());
- ClassDef *ncd=new ClassDef("<code>",1,
- g_curClassName,ClassDef::Class,0,0,FALSE);
- g_codeClassSDict->append(g_curClassName,ncd);
- // insert base classes.
- char *s=g_curClassBases.first();
- while (s)
- {
- ClassDef *bcd;
- bcd=g_codeClassSDict->find(s);
- if (bcd==0) bcd=getResolvedClass(g_currentDefinition,g_sourceFileDef,s);
- if (bcd && bcd!=ncd)
- {
- ncd->insertBaseClass(bcd,s,Public,Normal);
- }
- s=g_curClassBases.next();
- }
- }
- //printf("g_codeClassList.count()=%d\n",g_codeClassList.count());
- }
- else // not a class name -> assume inner block
- {
- DBG_CTX((stderr,"** scope stack push INNERBLOCK\n"));
- g_scopeStack.push(INNERBLOCK);
- }
- g_curClassName.resize(0);
- g_curClassBases.clear();
- BEGIN( Body );
- }
-<Bases>"virtual"|"public"|"protected"|"private"|"@public"|"@private"|"@protected" {
- startFontClass("keyword");
- g_code->codify(yytext);
- endFontClass();
- }
-<Bases>{SEP}?({ID}{SEP})*{ID} {
- //fprintf(stderr,"%s:addBase(%s)\n",g_curClassName.data(),yytext);
- g_curClassBases.inSort(yytext);
- generateClassOrGlobalLink(*g_code,yytext);
- }
-<Bases>"<" {
- g_code->codify(yytext);
- if (!g_insideObjC)
- {
- g_sharpCount=1;
- BEGIN ( SkipSharp );
- }
- else
- {
- g_insideProtocolList=TRUE;
- }
- }
-<Bases>">" {
- g_code->codify(yytext);
- g_insideProtocolList=FALSE;
- }
-<SkipSharp>"<" {
- g_code->codify(yytext);
- ++g_sharpCount;
- }
-<SkipSharp>">" {
- g_code->codify(yytext);
- if (--g_sharpCount<=0)
- BEGIN ( Bases );
- }
-<Bases>"(" {
- g_code->codify(yytext);
- g_sharpCount=1;
- BEGIN ( SkipSharp );
- }
-<SkipSharp>"(" {
- g_code->codify(yytext);
- ++g_sharpCount;
- }
-<SkipSharp>")" {
- g_code->codify(yytext);
- if (--g_sharpCount<=0)
- BEGIN ( Bases );
- }
-
-
-<Bases>"," {
- g_code->codify(yytext);
- }
-
-
-<Body>{SCOPEPREFIX}?"operator"{B}*"()"{B}*/"(" {
- addType();
- generateFunctionLink(*g_code,yytext);
- g_bracketCount=0;
- g_args.resize(0);
- g_name+=yytext;
- BEGIN( FuncCall );
- }
-<Body>{SCOPEPREFIX}?"operator"/"(" {
- addType();
- generateFunctionLink(*g_code,yytext);
- g_bracketCount=0;
- g_args.resize(0);
- g_name+=yytext;
- BEGIN( FuncCall );
- }
-<Body>{SCOPEPREFIX}?"operator"[^a-z_A-Z0-9\(\n]+/"(" {
- addType();
- generateFunctionLink(*g_code,yytext);
- g_bracketCount=0;
- g_args.resize(0);
- g_name+=yytext;
- BEGIN( FuncCall );
- }
-<Body,TemplDecl>("template"|"generic")/([^a-zA-Z0-9]) {
- startFontClass("keyword");
- codifyLines(yytext);
- endFontClass();
- g_insideTemplate=TRUE;
- g_sharpCount=0;
- }
-<Body>"using"{BN}+"namespace"{BN}+ {
- startFontClass("keyword");
- codifyLines(yytext);
- endFontClass();
- BEGIN(UsingName);
- }
-<UsingName>{ID}("::"{ID})* { addUsingDirective(yytext);
- generateClassOrGlobalLink(*g_code,yytext);
- DBG_CTX((stderr,"** scope stack push CLASSBLOCK\n"));
- g_scopeStack.push(CLASSBLOCK);
- pushScope(yytext);
- BEGIN(Body);
- }
-<UsingName>\n { codifyLines(yytext); BEGIN(Body); }
-<UsingName>. { codifyLines(yytext); BEGIN(Body); }
-<Body,FuncCall>"$"?"this"("->"|".") { g_code->codify(yytext); // this-> for C++, this. for C#
- }
-<Body>{KEYWORD}/([^a-z_A-Z0-9]) {
- startFontClass("keyword");
- codifyLines(yytext);
- if (QCString(yytext)=="typedef")
- {
- addType();
- g_name+=yytext;
- }
- endFontClass();
- }
-<Body>{KEYWORD}/{B}* {
- startFontClass("keyword");
- codifyLines(yytext);
- endFontClass();
- }
-<Body>{KEYWORD}/{BN}*"(" {
- startFontClass("keyword");
- codifyLines(yytext);
- endFontClass();
- g_name.resize(0);g_type.resize(0);
- }
-<FuncCall>"in"/{BN}* {
- if (!g_inForEachExpression) REJECT;
- startFontClass("keywordflow");
- codifyLines(yytext);
- endFontClass();
- // insert the variable in the parent scope, see bug 546158
- g_theVarContext.popScope();
- g_theVarContext.addVariable(g_parmType,g_parmName);
- g_theVarContext.pushScope();
- g_name.resize(0);g_type.resize(0);
- }
-<Body>{FLOWKW}/{BN}*"(" {
- startFontClass("keywordflow");
- codifyLines(yytext);
- endFontClass();
- g_name.resize(0);g_type.resize(0);
- g_inForEachExpression = (strcmp(yytext,"for each")==0 || strcmp(yytext, "foreach")==0);
- BEGIN(FuncCall);
- }
-<Body>{FLOWKW}/([^a-z_A-Z0-9]) {
- startFontClass("keywordflow");
- codifyLines(yytext);
- endFontClass();
- if (g_inFunctionTryBlock && (strcmp(yytext,"catch")==0 || strcmp(yytext,"finally")==0))
- {
- g_inFunctionTryBlock=FALSE;
- }
- }
-<Body>{FLOWKW}/{B}* {
- startFontClass("keywordflow");
- codifyLines(yytext);
- endFontClass();
- }
-<Body>[\\|\)\+\-\/\%\~\!] {
- g_code->codify(yytext);
- g_name.resize(0);g_type.resize(0);
- if (*yytext==')')
- {
- g_theCallContext.popScope();
- g_bracketCount--;
- BEGIN(FuncCall);
- }
- }
-<Body,TemplDecl,ObjCMethod>{TYPEKW}/{B}* {
- startFontClass("keywordtype");
- g_code->codify(yytext);
- endFontClass();
- addType();
- g_name+=yytext;
- }
-<Body>"generic"/{B}*"<"[^\n\/\-\.\{\"\>]*">"{B}* {
- startFontClass("keyword");
- g_code->codify(yytext);
- endFontClass();
- g_sharpCount=0;
- BEGIN(TemplDecl);
- }
-<Body>"template"/{B}*"<"[^\n\/\-\.\{\"\>]*">"{B}* { // template<...>
- startFontClass("keyword");
- g_code->codify(yytext);
- endFontClass();
- g_sharpCount=0;
- BEGIN(TemplDecl);
- }
-<TemplDecl>"class"|"typename" {
- startFontClass("keyword");
- codifyLines(yytext);
- endFontClass();
- }
-<TemplDecl>"<" {
- g_code->codify(yytext);
- g_sharpCount++;
- }
-<TemplDecl>">" {
- g_code->codify(yytext);
- g_sharpCount--;
- if (g_sharpCount<=0)
- {
- BEGIN(Body);
- }
- }
-<TemplCast>">" {
- startFontClass("keyword");
- codifyLines(yytext);
- endFontClass();
- BEGIN( g_lastTemplCastContext );
- }
-<TemplCast>{ID}("::"{ID})* {
- generateClassOrGlobalLink(*g_code,yytext);
- }
-<TemplCast>("const"|"volatile"){B}* {
- startFontClass("keyword");
- codifyLines(yytext);
- endFontClass();
- }
-<TemplCast>[*^]* {
- codifyLines(yytext);
- }
-<Body,FuncCall>{CASTKW}"<" { // static_cast<T>(
- startFontClass("keyword");
- codifyLines(yytext);
- endFontClass();
- g_lastTemplCastContext = YY_START;
- BEGIN(TemplCast);
- }
-<Body>"$this->"{SCOPENAME}/{BN}*[;,)\]] { // PHP member variable
- addType();
- generatePHPVariableLink(*g_code,yytext);
- g_name+=yytext+7;
- }
-<Body,TemplCast>{SCOPENAME}{B}*"<"[^\n\/\-\.\{\"\>]*">"("::"{ID})*/{B}* { // A<T> *pt;
- int i=QCString(yytext).find('<');
- QCString kw = QCString(yytext).left(i).stripWhiteSpace();
- if (kw.right(5)=="_cast" && YY_START==Body)
- {
- REJECT;
- }
- addType();
- generateClassOrGlobalLink(*g_code,yytext);
- g_name+=yytext;
- }
-<Body>{SCOPENAME}/{BN}*[;,)\]] { // "int var;" or "var, var2" or "debug(f) macro"
- addType();
- // changed this to generateFunctionLink, see bug 624514
- //generateClassOrGlobalLink(*g_code,yytext,FALSE,TRUE);
- generateFunctionLink(*g_code,yytext);
- g_name+=yytext;
- }
-<Body>{SCOPENAME}/{B}* { // p->func()
- addType();
- generateClassOrGlobalLink(*g_code,yytext);
- g_name+=yytext;
- }
-<Body>"("{B}*("*"{B}*)+{SCOPENAME}*{B}*")"/{B}* { // (*p)->func() but not "if (p) ..."
- g_code->codify(yytext);
- int s=0;while (s<(int)yyleng && !isId(yytext[s])) s++;
- int e=(int)yyleng-1;while (e>=0 && !isId(yytext[e])) e--;
- QCString varname = ((QCString)yytext).mid(s,e-s+1);
- addType();
- g_name=varname;
- }
-<Body>{SCOPETNAME}/{BN}*"(" { // a() or c::a() or t<A,B>::a() or A\B\foo()
- addType();
- generateFunctionLink(*g_code,yytext);
- g_bracketCount=0;
- g_args.resize(0);
- g_name+=yytext;
- BEGIN( FuncCall );
- }
-<FuncCall,Body,MemberCall,MemberCall2,SkipInits>\" {
- startFontClass("stringliteral");
- g_code->codify(yytext);
- g_lastStringContext=YY_START;
- g_inForEachExpression = FALSE;
- BEGIN( SkipString );
- }
-<FuncCall,Body,MemberCall,MemberCall2,SkipInits>\' {
- startFontClass("stringliteral");
- g_code->codify(yytext);
- g_lastStringContext=YY_START;
- g_inForEachExpression = FALSE;
- BEGIN( SkipStringS );
- }
-<SkipString>[^\"\\\r\n]* {
- g_code->codify(yytext);
- }
-<SkipStringS>[^\'\\\r\n]* {
- g_code->codify(yytext);
- }
-<SkipString,SkipStringS>"//"|"/*" {
- g_code->codify(yytext);
- }
-<SkipString>@?\" {
- g_code->codify(yytext);
- endFontClass();
- BEGIN( g_lastStringContext );
- }
-<SkipStringS>\' {
- g_code->codify(yytext);
- endFontClass();
- BEGIN( g_lastStringContext );
- }
-<SkipString,SkipStringS>\\. {
- g_code->codify(yytext);
- }
-<SkipVerbString>[^"\n]+ {
- g_code->codify(yytext);
- }
-<SkipVerbString>\"\" { // escaped quote
- g_code->codify(yytext);
- }
-<SkipVerbString>\" { // end of string
- g_code->codify(yytext);
- endFontClass();
- BEGIN( g_lastVerbStringContext );
- }
-<SkipVerbString>. {
- g_code->codify(yytext);
- }
-<SkipVerbString>\n {
- codifyLines(yytext);
- }
-<Body>":" {
- g_code->codify(yytext);
- g_name.resize(0);g_type.resize(0);
- }
-<Body>"<" {
- if (g_insideTemplate)
- {
- g_sharpCount++;
- }
- g_code->codify(yytext);
- }
-<Body>">" {
- if (g_insideTemplate)
- {
- if (--g_sharpCount<=0)
- {
- g_insideTemplate=FALSE;
- }
- }
- g_code->codify(yytext);
- }
-<Body,MemberCall,MemberCall2,FuncCall>"'"((\\0[Xx0-9]+)|(\\.)|(.))"'" {
- startFontClass("charliteral");
- g_code->codify(yytext);
- endFontClass();
- }
-<Body>"."|"->" {
- if (yytext[0]=='-') // -> could be overloaded
- {
- updateCallContextForSmartPointer();
- }
- g_code->codify(yytext);
- g_memCallContext = YY_START;
- BEGIN( MemberCall );
- }
-<MemberCall>{SCOPETNAME}/{BN}*"(" {
- if (g_theCallContext.getClass())
- {
- if (!generateClassMemberLink(*g_code,g_theCallContext.getClass(),yytext))
- {
- g_code->linkableSymbol(g_yyLineNr,yytext,0,
- g_currentMemberDef?g_currentMemberDef:g_currentDefinition);
- g_code->codify(yytext);
- addToSearchIndex(yytext);
- }
- g_name.resize(0);
- }
- else
- {
- g_code->linkableSymbol(g_yyLineNr,yytext,0,
- g_currentMemberDef?g_currentMemberDef:g_currentDefinition);
- g_code->codify(yytext);
- addToSearchIndex(yytext);
- g_name.resize(0);
- }
- g_type.resize(0);
- g_bracketCount=0;
- if (g_memCallContext==Body)
- {
- BEGIN(FuncCall);
- }
- else
- {
- BEGIN(g_memCallContext);
- }
- }
-<MemberCall>{SCOPENAME}/{B}* {
- if (g_theCallContext.getClass())
- {
- //fprintf(stderr,"g_theCallContext.getClass()=%p\n",g_theCallContext.getClass());
- if (!generateClassMemberLink(*g_code,g_theCallContext.getClass(),yytext))
- {
- g_code->linkableSymbol(g_yyLineNr,yytext,0,
- g_currentMemberDef?g_currentMemberDef:g_currentDefinition);
- g_code->codify(yytext);
- addToSearchIndex(yytext);
- }
- g_name.resize(0);
- }
- else
- {
- //fprintf(stderr,"no class context!\n");
- g_code->codify(yytext);
- addToSearchIndex(yytext);
- g_name.resize(0);
- }
- g_type.resize(0);
- BEGIN(g_memCallContext);
- }
-<Body>[,=;\[] {
- if (g_insideObjC && *yytext=='[')
- {
- //printf("Found start of ObjC call!\n");
- // start of a method call
- g_contextDict.setAutoDelete(TRUE);
- g_nameDict.setAutoDelete(TRUE);
- g_objectDict.setAutoDelete(TRUE);
- g_wordDict.setAutoDelete(TRUE);
- g_contextDict.clear();
- g_nameDict.clear();
- g_objectDict.clear();
- g_wordDict.clear();
- g_currentCtxId = 0;
- g_currentNameId = 0;
- g_currentObjId = 0;
- g_currentCtx = 0;
- g_braceCount = 0;
- unput('[');
- BEGIN(ObjCCall);
- }
- else
- {
- g_code->codify(yytext);
- g_saveName = g_name.copy();
- g_saveType = g_type.copy();
- if (*yytext!='[' && !g_type.isEmpty())
- {
- //printf("g_scopeStack.bottom()=%p\n",g_scopeStack.bottom());
- if (g_scopeStack.top()!=CLASSBLOCK)
- {
- //printf("AddVariable: '%s' '%s' context=%d\n",
- // g_type.data(),g_name.data(),g_theVarContext.count());
- g_theVarContext.addVariable(g_type,g_name);
- }
- g_name.resize(0);
- }
- if (*yytext==';' || *yytext=='=')
- {
- g_type.resize(0);
- g_name.resize(0);
- }
- else if (*yytext=='[')
- {
- g_theCallContext.pushScope();
- }
- g_args.resize(0);
- g_parmType.resize(0);
- g_parmName.resize(0);
- }
- }
- /*
-<ObjCMemberCall>{ID} {
- if (strcmp(yytext,"self")==0 || strcmp(yytext,"super")==0)
- {
- // TODO: get proper base class for "super"
- g_theCallContext.setClass(getClass(g_curClassName));
- startFontClass("keyword");
- g_code->codify(yytext);
- endFontClass();
- }
- else
- {
- generateClassOrGlobalLink(*g_code,yytext);
- }
- g_name.resize(0);
- BEGIN(ObjCMemberCall2);
- }
-<ObjCMemberCall>"[" {
- g_code->codify(yytext);
- g_theCallContext.pushScope();
- }
-<ObjCMemberCall2>{ID}":"? {
- g_name+=yytext;
- if (g_theCallContext.getClass())
- {
- //printf("Calling method %s\n",g_name.data());
- if (!generateClassMemberLink(*g_code,g_theCallContext.getClass(),g_name))
- {
- g_code->codify(yytext);
- addToSearchIndex(g_name);
- }
- }
- else
- {
- g_code->codify(yytext);
- addToSearchIndex(g_name);
- }
- g_name.resize(0);
- BEGIN(ObjCMemberCall3);
- }
-<ObjCMemberCall2,ObjCMemberCall3>"]" {
- g_theCallContext.popScope();
- g_code->codify(yytext);
- BEGIN(Body);
- }
- */
-<ObjCCall,ObjCMName>"[" {
- saveObjCContext();
- g_currentCtx->format+=*yytext;
- BEGIN(ObjCCall);
- //printf("open\n");
- }
-<ObjCCall,ObjCMName>"]" {
- g_currentCtx->format+=*yytext;
- restoreObjCContext();
- BEGIN(ObjCMName);
- if (g_currentCtx==0)
- {
- // end of call
- writeObjCMethodCall(g_contextDict.find(0));
- BEGIN(Body);
- }
- //printf("close\n");
- }
-<ObjCCall>{ID} {
- g_currentCtx->format+=escapeObject(yytext);
- if (g_braceCount==0)
- {
- g_currentCtx->objectTypeOrName=yytext;
- //printf("new type=%s\n",g_currentCtx->objectTypeOrName.data());
- BEGIN(ObjCMName);
- }
- }
-<ObjCMName>{ID}/{BN}*"]" {
- if (g_braceCount==0 &&
- g_currentCtx->methodName.isEmpty())
- {
- g_currentCtx->methodName=yytext;
- g_currentCtx->format+=escapeName(yytext);
- }
- else
- {
- g_currentCtx->format+=escapeWord(yytext);
- }
- }
-<ObjCMName>{ID}/{BN}*":" {
- if (g_braceCount==0)
- {
- g_currentCtx->methodName+=yytext;
- g_currentCtx->methodName+=":";
- }
- g_currentCtx->format+=escapeName(yytext);
- }
-<ObjCSkipStr>[^\n\"$\\]* { g_currentCtx->format+=yytext; }
-<ObjCSkipStr>\\. { g_currentCtx->format+=yytext; }
-<ObjCSkipStr>"\"" { g_currentCtx->format+=yytext;
- BEGIN(g_lastStringContext);
- }
-<ObjCCall,ObjCMName>{CHARLIT} { g_currentCtx->format+=yytext; }
-<ObjCCall,ObjCMName>"@"?"\"" { g_currentCtx->format+=yytext;
- g_lastStringContext=YY_START;
- BEGIN(ObjCSkipStr);
- }
-<ObjCCall,ObjCMName,ObjCSkipStr>"$" { g_currentCtx->format+="$$"; }
-<ObjCCall,ObjCMName>"(" { g_currentCtx->format+=*yytext; g_braceCount++; }
-<ObjCCall,ObjCMName>")" { g_currentCtx->format+=*yytext; g_braceCount--; }
-<ObjCSkipStr>"@"/"\"" { // needed to prevent matching the global rule (for C#)
- g_currentCtx->format+=yytext;
- }
-<ObjCCall,ObjCMName,ObjCSkipStr>{ID} { g_currentCtx->format+=escapeWord(yytext); }
-<ObjCCall,ObjCMName,ObjCSkipStr>. { g_currentCtx->format+=*yytext; }
-<ObjCCall,ObjCMName,ObjCSkipStr>\n { g_currentCtx->format+=*yytext; }
-
-<Body>"]" {
- g_theCallContext.popScope();
- g_code->codify(yytext);
- // TODO: nested arrays like: a[b[0]->func()]->func()
- g_name = g_saveName.copy();
- g_type = g_saveType.copy();
- }
-<Body>[0-9]+ {
- g_code->codify(yytext);
- }
-<Body>[0-9]+[xX][0-9A-Fa-f]+ {
- g_code->codify(yytext);
- }
-<MemberCall2,FuncCall>{KEYWORD}/([^a-z_A-Z0-9]) {
- //addParmType();
- //g_parmName=yytext;
- startFontClass("keyword");
- g_code->codify(yytext);
- endFontClass();
- }
-<MemberCall2,FuncCall,OldStyleArgs,TemplCast>{TYPEKW}/([^a-z_A-Z0-9]) {
- addParmType();
- g_parmName=yytext;
- startFontClass("keywordtype");
- g_code->codify(yytext);
- endFontClass();
- }
-<MemberCall2,FuncCall>{FLOWKW}/([^a-z_A-Z0-9]) {
- addParmType();
- g_parmName=yytext;
- startFontClass("keywordflow");
- g_code->codify(yytext);
- endFontClass();
- }
-<MemberCall2,FuncCall>{ID}(({B}*"<"[^\n\[\](){}<>]*">")?({B}*"::"{B}*{ID})?)* {
- addParmType();
- g_parmName=yytext;
- generateClassOrGlobalLink(*g_code,yytext,!g_insideBody);
- }
-<FuncCall>";" { // probably a cast, not a function call
- g_code->codify(yytext);
- g_inForEachExpression = FALSE;
- BEGIN( Body );
- }
-<MemberCall2,FuncCall>, {
- g_code->codify(yytext);
- g_theVarContext.addVariable(g_parmType,g_parmName);
- g_parmType.resize(0);g_parmName.resize(0);
- }
-<MemberCall2,FuncCall>"(" {
- g_parmType.resize(0);g_parmName.resize(0);
- g_code->codify(yytext);
- g_bracketCount++;
- g_theCallContext.pushScope();
- if (YY_START==FuncCall && !g_insideBody)
- {
- g_theVarContext.pushScope();
- }
- }
-<MemberCall2,FuncCall>{OPERATOR} { // operator
- if (strcmp(yytext,"*") &&
- strcmp(yytext,"&") &&
- strcmp(yytext,"^") &&
- strcmp(yytext,"%")) // typically a pointer or reference
- {
- // not a * or &, or C++/CLI's ^ or %
- g_parmType.resize(0);g_parmName.resize(0);
- }
- g_code->codify(yytext);
- }
-<MemberCall,MemberCall2,FuncCall>")" {
- g_theVarContext.addVariable(g_parmType,g_parmName);
- g_theCallContext.popScope();
- g_inForEachExpression = FALSE;
- //g_theCallContext.setClass(0); // commented out, otherwise a()->b() does not work for b().
- g_code->codify(yytext);
- if (--g_bracketCount<=0)
- {
- if (g_name.isEmpty())
- {
- BEGIN( Body );
- }
- else
- {
- BEGIN( CallEnd );
- }
- }
- }
-<CallEnd>[ \t\n]* { codifyLines(yytext); }
- /*
-<MemberCall2,FuncCall>")"[ \t\n]*[;:] {
- */
-<CallEnd>[;:] {
- codifyLines(yytext);
- g_bracketCount=0;
- if (*yytext==';') g_searchingForBody=FALSE;
- if (!g_type.isEmpty())
- {
- //fprintf(stderr,"add variable g_type=%s g_name=%s)\n",g_type.data(),g_name.data());
- g_theVarContext.addVariable(g_type,g_name);
- }
- g_parmType.resize(0);g_parmName.resize(0);
- g_theCallContext.setClass(0);
- if (*yytext==';' || g_insideBody)
- {
- if (!g_insideBody)
- {
- g_theVarContext.popScope();
- }
- g_name.resize(0);g_type.resize(0);
- BEGIN( Body );
- }
- else
- {
- g_bracketCount=0;
- BEGIN( SkipInits );
- }
- }
-<CallEnd>("const"|"volatile"|"sealed"|"override")({BN}+("const"|"volatile"|"sealed"|"override"))*/{BN}*(";"|"="|"throw"{BN}*"(") {
- startFontClass("keyword");
- codifyLines(yytext);
- endFontClass();
- }
-<CallEnd,OldStyleArgs>("const"|"volatile"|"sealed"|"override")*({BN}+("const"|"volatile"|"sealed"|"override"))*{BN}*"{" {
- if (g_insideBody)
- {
- g_theVarContext.pushScope();
- }
- g_theVarContext.addVariable(g_parmType,g_parmName);
- //g_theCallContext.popScope();
- g_parmType.resize(0);g_parmName.resize(0);
- int index = g_name.findRev("::");
- //fprintf(stderr,"g_name=%s\n",g_name.data());
- if (index!=-1)
- {
- QCString scope = g_name.left(index);
- if (!g_classScope.isEmpty()) scope.prepend(g_classScope+"::");
- ClassDef *cd=getResolvedClass(Doxygen::globalScope,g_sourceFileDef,scope);
- if (cd)
- {
- setClassScope(cd->name());
- g_scopeStack.push(SCOPEBLOCK);
- DBG_CTX((stderr,"** scope stack push SCOPEBLOCK\n"));
- }
- else
- {
- //setClassScope(g_realScope);
- g_scopeStack.push(INNERBLOCK);
- DBG_CTX((stderr,"** scope stack push INNERBLOCK\n"));
- }
- }
- else
- {
- DBG_CTX((stderr,"** scope stack push INNERBLOCK\n"));
- g_scopeStack.push(INNERBLOCK);
- }
- yytext[yyleng-1]='\0';
- QCString cv(yytext);
- if (!cv.stripWhiteSpace().isEmpty())
- {
- startFontClass("keyword");
- codifyLines(yytext);
- endFontClass();
- }
- else // just whitespace
- {
- codifyLines(yytext);
- }
- g_code->codify("{");
- if (g_searchingForBody)
- {
- g_searchingForBody=FALSE;
- g_insideBody=TRUE;
- }
- if (g_insideBody) g_bodyCurlyCount++;
- g_curlyCount++;
- g_type.resize(0); g_name.resize(0);
- BEGIN( Body );
- }
-<CallEnd>"try" { // function-try-block
- startFontClass("keyword");
- g_code->codify(yytext);
- endFontClass();
- g_inFunctionTryBlock=TRUE;
- }
-<CallEnd>{ID} {
- if (g_insideBody || !g_parmType.isEmpty())
- {
- REJECT;
- }
- // could be K&R style definition
- addParmType();
- g_parmName=yytext;
- generateClassOrGlobalLink(*g_code,yytext,!g_insideBody);
- BEGIN(OldStyleArgs);
- }
-<OldStyleArgs>{ID} {
- addParmType();
- g_parmName=yytext;
- generateClassOrGlobalLink(*g_code,yytext,!g_insideBody);
- }
-<OldStyleArgs>[,;] {
- g_code->codify(yytext);
- g_theVarContext.addVariable(g_parmType,g_parmName);
- if (*yytext==';') g_parmType.resize(0);
- g_parmName.resize(0);
- }
-<CallEnd,OldStyleArgs>"#" {
- startFontClass("preprocessor");
- g_lastSkipCppContext = Body;
- g_code->codify(yytext);
- BEGIN( SkipCPP );
- }
-<CallEnd>. {
- unput(*yytext);
- if (!g_insideBody)
- {
- g_theVarContext.popScope();
- }
- g_name.resize(0);g_args.resize(0);
- g_parmType.resize(0);g_parmName.resize(0);
- BEGIN( Body );
- }
-<SkipInits>";" {
- g_code->codify(yytext);
- g_type.resize(0); g_name.resize(0);
- BEGIN( Body );
- }
-<SkipInits>"{" {
- g_code->codify(yytext);
- g_curlyCount++;
- if (g_searchingForBody)
- {
- g_searchingForBody=FALSE;
- g_insideBody=TRUE;
- }
- if (g_insideBody) g_bodyCurlyCount++;
- if (g_name.find("::")!=-1)
- {
- DBG_CTX((stderr,"** scope stack push SCOPEBLOCK\n"));
- g_scopeStack.push(SCOPEBLOCK);
- setClassScope(g_realScope);
- }
- else
- {
- DBG_CTX((stderr,"** scope stack push INNERBLOCK\n"));
- g_scopeStack.push(INNERBLOCK);
- }
- g_type.resize(0); g_name.resize(0);
- BEGIN( Body );
- }
-<SkipInits>{ID} {
- generateClassOrGlobalLink(*g_code,yytext);
- }
-<FuncCall>{ID}/"(" {
- generateFunctionLink(*g_code,yytext);
- }
-<FuncCall>{ID}/("."|"->") {
- g_name=yytext;
- generateClassOrGlobalLink(*g_code,yytext);
- BEGIN( MemberCall2 );
- }
-<FuncCall,MemberCall2>("("{B}*("*"{B}*)+{ID}*{B}*")"{B}*)/("."|"->") {
- g_code->codify(yytext);
- int s=0;while (!isId(yytext[s])) s++;
- int e=(int)yyleng-1;while (!isId(yytext[e])) e--;
- g_name=((QCString)yytext).mid(s,e-s+1);
- BEGIN( MemberCall2 );
- }
-<MemberCall2>{ID}/([ \t\n]*"(") {
- if (!g_args.isEmpty())
- generateMemberLink(*g_code,g_args,yytext);
- else
- generateClassOrGlobalLink(*g_code,yytext);
- g_args.resize(0);
- BEGIN( FuncCall );
- }
-<MemberCall2>{ID}/([ \t\n]*("."|"->")) {
- //g_code->codify(yytext);
- g_name=yytext;
- generateClassOrGlobalLink(*g_code,yytext);
- BEGIN( MemberCall2 );
- }
-<MemberCall2>"->"|"." {
- if (yytext[0]=='-') // -> could be overloaded
- {
- updateCallContextForSmartPointer();
- }
- g_code->codify(yytext);
- g_memCallContext = YY_START;
- BEGIN( MemberCall );
- }
-<SkipComment>"/*"("!"?)"*/" {
- g_code->codify(yytext);
- endFontClass();
- BEGIN( g_lastCContext ) ;
- }
-<SkipComment>"//"|"/*" {
- g_code->codify(yytext);
- }
-<SkipComment>[^*/\n]+ {
- g_code->codify(yytext);
- }
-<SkipComment>[ \t]*"*/" {
- g_code->codify(yytext);
- endFontClass();
- BEGIN( g_lastCContext ) ;
- }
-<SkipCxxComment>[^\r\n]*"\\"[\r]?\n { // line continuation
- codifyLines(yytext);
- }
-<SkipCxxComment>[^\r\n]+ {
- g_code->codify(yytext);
- }
-<SkipCxxComment>\r
-<SkipCxxComment>\n {
- unput('\n');
- endFontClass();
- BEGIN( g_lastCContext ) ;
- }
-<SkipCxxComment>. {
- g_code->codify(yytext);
- }
-<RemoveSpecialCComment>"*/"{B}*\n({B}*\n)*({B}*(("//@"[{}])|("/*@"[{}]"*/")){B}*\n)?{B}*"/*"[*!]/[^/*] {
- g_yyLineNr+=QCString(yytext).contains('\n');
- }
-<RemoveSpecialCComment>"*/"{B}*\n({B}*\n)*({B}*(("//@"[{}])|("/*@"[{}]"*/")){B}*\n)? {
- g_yyLineNr+=QCString(yytext).contains('\n');
- nextCodeLine();
- if (g_lastSpecialCContext==SkipCxxComment)
- { // force end of C++ comment here
- endFontClass();
- BEGIN( g_lastCContext ) ;
- }
- else
- {
- BEGIN(g_lastSpecialCContext);
- }
- }
-<RemoveSpecialCComment>"*/" {
- BEGIN(g_lastSpecialCContext);
- }
-<RemoveSpecialCComment>[^*\n]+
-<RemoveSpecialCComment>"//"|"/*"
-<RemoveSpecialCComment>\n { g_yyLineNr++; }
-<RemoveSpecialCComment>.
-<MemberCall>[^a-z_A-Z0-9(\n] {
- g_code->codify(yytext);
- g_type.resize(0);
- g_name.resize(0);
- BEGIN(g_memCallContext);
- }
-<*>\n({B}*"//"[!/][^\n]*\n)+ { // remove special one-line comment
- if (YY_START==SkipCPP) REJECT;
- if (Config_getBool("STRIP_CODE_COMMENTS"))
- {
- g_yyLineNr+=((QCString)yytext).contains('\n');
- nextCodeLine();
- }
- else
- {
- startFontClass("comment");
- codifyLines(yytext);
- endFontClass();
- }
- if (YY_START==SkipCxxComment)
- {
- endFontClass();
- BEGIN( g_lastCContext ) ;
- }
- }
-<SkipCPP>\n/.*\n {
- codifyLines(yytext);
- endFontClass();
- BEGIN( g_lastSkipCppContext ) ;
- }
-<*>\n{B}*"//@"[{}].*\n { // remove one-line group marker
- if (Config_getBool("STRIP_CODE_COMMENTS"))
- {
- g_yyLineNr+=2;
- nextCodeLine();
- }
- else
- {
- startFontClass("comment");
- codifyLines(yytext);
- endFontClass();
- }
- if (YY_START==SkipCxxComment)
- {
- endFontClass();
- BEGIN( g_lastCContext ) ;
- }
- }
-<*>\n{B}*"/*@"[{}] { // remove one-line group marker
- if (Config_getBool("STRIP_CODE_COMMENTS"))
- {
- g_lastSpecialCContext = YY_START;
- g_yyLineNr++;
- BEGIN(RemoveSpecialCComment);
- }
- else
- {
- // check is to prevent getting stuck in skipping C++ comments
- if (YY_START != SkipCxxComment)
- {
- g_lastCContext = YY_START ;
- }
- startFontClass("comment");
- codifyLines(yytext);
- BEGIN(SkipComment);
- }
- }
-<*>^{B}*"//@"[{}].*\n { // remove one-line group marker
- if (Config_getBool("STRIP_CODE_COMMENTS"))
- {
- g_yyLineNr++;
- nextCodeLine();
- }
- else
- {
- startFontClass("comment");
- codifyLines(yytext);
- endFontClass();
- }
- }
-<*>^{B}*"/*@"[{}] { // remove multi-line group marker
- if (Config_getBool("STRIP_CODE_COMMENTS"))
- {
- g_lastSpecialCContext = YY_START;
- BEGIN(RemoveSpecialCComment);
- }
- else
- {
- // check is to prevent getting stuck in skipping C++ comments
- if (YY_START != SkipCxxComment)
- {
- g_lastCContext = YY_START ;
- }
- startFontClass("comment");
- g_code->codify(yytext);
- BEGIN(SkipComment);
- }
- }
-<*>^{B}*"//"[!/][^\n]*\n { // remove special one-line comment
- if (Config_getBool("STRIP_CODE_COMMENTS"))
- {
- g_yyLineNr++;
- nextCodeLine();
- }
- else
- {
- startFontClass("comment");
- codifyLines(yytext);
- endFontClass();
- }
- }
-<*>"//"[!/][^\n]*\n { // strip special one-line comment
- if (YY_START==SkipComment || YY_START==SkipString || YY_START==SkipCPP) REJECT;
- if (Config_getBool("STRIP_CODE_COMMENTS"))
- {
- char c[2]; c[0]='\n'; c[1]=0;
- codifyLines(c);
- }
- else
- {
- startFontClass("comment");
- codifyLines(yytext);
- endFontClass();
- }
- }
-<*>"/*[tag:"[^\]\n]*"]*/"{B}* { // special pattern /*[tag:filename]*/ to force linking to a tag file
- g_forceTagReference=yytext;
- int s=g_forceTagReference.find(':');
- int e=g_forceTagReference.findRev(']');
- g_forceTagReference = g_forceTagReference.mid(s+1,e-s-1);
- }
-<*>\n{B}*"/*"[!*]/[^/*] {
- if (Config_getBool("STRIP_CODE_COMMENTS"))
- {
- g_lastSpecialCContext = YY_START;
- g_yyLineNr++;
- BEGIN(RemoveSpecialCComment);
- }
- else
- {
- // check is to prevent getting stuck in skipping C++ comments
- if (YY_START != SkipCxxComment)
- {
- g_lastCContext = YY_START ;
- }
- startFontClass("comment");
- codifyLines(yytext);
- BEGIN(SkipComment);
- }
- }
-<*>^{B}*"/*"[!*]/[^/*] { // special C comment block at a new line
- if (Config_getBool("STRIP_CODE_COMMENTS"))
- {
- g_lastSpecialCContext = YY_START;
- BEGIN(RemoveSpecialCComment);
- }
- else
- {
- // check is to prevent getting stuck in skipping C++ comments
- if (YY_START != SkipCxxComment)
- {
- g_lastCContext = YY_START ;
- }
- startFontClass("comment");
- g_code->codify(yytext);
- BEGIN(SkipComment);
- }
- }
-<*>"/*"[!*]/[^/*] { // special C comment block half way a line
- if (YY_START==SkipString) REJECT;
- if (Config_getBool("STRIP_CODE_COMMENTS"))
- {
- g_lastSpecialCContext = YY_START;
- BEGIN(RemoveSpecialCComment);
- }
- else
- {
- // check is to prevent getting stuck in skipping C++ comments
- if (YY_START != SkipCxxComment)
- {
- g_lastCContext = YY_START ;
- }
- startFontClass("comment");
- g_code->codify(yytext);
- BEGIN(SkipComment);
- }
- }
-<*>"/*"("!"?)"*/" {
- if (YY_START==SkipString) REJECT;
- if (!Config_getBool("STRIP_CODE_COMMENTS"))
- {
- startFontClass("comment");
- g_code->codify(yytext);
- endFontClass();
- }
- }
-<*>"/*" {
- startFontClass("comment");
- g_code->codify(yytext);
- // check is to prevent getting stuck in skipping C++ comments
- if (YY_START != SkipCxxComment)
- {
- g_lastCContext = YY_START ;
- }
- BEGIN( SkipComment ) ;
- }
-<*>@\" { // C# verbatim string
- startFontClass("stringliteral");
- g_code->codify(yytext);
- g_lastVerbStringContext=YY_START;
- BEGIN(SkipVerbString);
- }
-<*>"//" {
- startFontClass("comment");
- g_code->codify(yytext);
- g_lastCContext = YY_START ;
- BEGIN( SkipCxxComment ) ;
- }
-<*>"("|"[" {
- g_code->codify(yytext);
- g_theCallContext.pushScope();
- }
-<*>")"|"]" {
- g_code->codify(yytext);
- g_theCallContext.popScope();
- }
-<*>\n {
- codifyLines(yytext);
- }
-<*>. {
- g_code->codify(yytext);
- }
- /*
-<*>([ \t\n]*"\n"){2,} { // combine multiple blank lines
- //QCString sepLine=yytext;
- //g_code->codify("\n\n");
- //g_yyLineNr+=sepLine.contains('\n');
- //char sepLine[3]="\n\n";
- codifyLines(yytext);
- }
- */
-
-%%
-
-/*@ ----------------------------------------------------------------------------
- */
-
-static void saveObjCContext()
-{
- if (g_currentCtx)
- {
- g_currentCtx->format+=QCString().sprintf("$c%d",g_currentCtxId);
- if (g_braceCount==0 && YY_START==ObjCCall)
- {
- g_currentCtx->objectTypeOrName=g_currentCtx->format.mid(1);
- //printf("new type=%s\n",g_currentCtx->objectTypeOrName.data());
- }
- g_contextStack.push(g_currentCtx);
- }
- else
- {
- //printf("Trying to save NULL context!\n");
- }
- ObjCCallCtx *newCtx = new ObjCCallCtx;
- newCtx->id = g_currentCtxId;
- newCtx->lexState = YY_START;
- newCtx->braceCount = g_braceCount;
- newCtx->objectType = 0;
- newCtx->objectVar = 0;
- newCtx->method = 0;
- //printf("save state=%d\n",YY_START);
- g_contextDict.insert(g_currentCtxId,newCtx);
- g_currentCtx = newCtx;
- g_braceCount = 0;
- g_currentCtxId++;
-}
-
-static void restoreObjCContext()
-{
- //printf("restore state=%d->%d\n",YY_START,g_currentCtx->lexState);
- BEGIN(g_currentCtx->lexState);
- g_braceCount = g_currentCtx->braceCount;
- if (!g_contextStack.isEmpty())
- {
- g_currentCtx = g_contextStack.pop();
- }
- else
- {
- g_currentCtx = 0;
- //printf("Trying to pop context while g_contextStack is empty!\n");
- }
-}
-
-void resetCCodeParserState()
-{
- //printf("***initParseCodeContext()\n");
- g_forceTagReference.resize(0);
- g_theVarContext.clear();
- g_classScopeLengthStack.setAutoDelete(TRUE);
- g_classScopeLengthStack.clear();
- delete g_codeClassSDict;
- g_codeClassSDict = new ClassSDict(17);
- g_codeClassSDict->setAutoDelete(TRUE);
- g_codeClassSDict->clear();
- g_curClassBases.clear();
- g_anchorCount = 0;
-}
-
-void parseCCode(CodeOutputInterface &od,const char *className,const QCString &s,
- bool exBlock, const char *exName,FileDef *fd,
- int startLine,int endLine,bool inlineFragment,
- MemberDef *memberDef,bool showLineNumbers)
-{
- //printf("***parseCode() exBlock=%d exName=%s fd=%p className=%s\n",
- // exBlock,exName,fd,className);
- if (s.isEmpty()) return;
- if (g_codeClassSDict==0)
- {
- resetCCodeParserState();
- }
- g_code = &od;
- g_inputString = s;
- g_inputPosition = 0;
- g_currentFontClass = 0;
- g_needsTermination = FALSE;
- g_inFunctionTryBlock = FALSE;
- if (endLine!=-1)
- g_inputLines = endLine+1;
- else
- g_inputLines = countLines();
-
- if (startLine!=-1)
- g_yyLineNr = startLine;
- else
- g_yyLineNr = 1;
-
- g_curlyCount = 0;
- g_bodyCurlyCount = 0;
- g_bracketCount = 0;
- g_sharpCount = 0;
- g_insideTemplate = FALSE;
- g_theCallContext.clear();
- g_scopeStack.clear();
- g_classScope = className;
- //printf("parseCCode %s\n",className);
- g_exampleBlock = exBlock;
- g_exampleName = exName;
- g_sourceFileDef = fd;
- g_lineNumbers = fd!=0 && showLineNumbers;
- bool cleanupSourceDef = FALSE;
- if (/* exBlock */ fd==0)
- {
- // create a dummy filedef for the example
- g_sourceFileDef = new FileDef("",(exName?exName:"generated"));
- cleanupSourceDef = TRUE;
- }
- if (g_sourceFileDef)
- {
- setCurrentDoc(g_sourceFileDef->name(),g_sourceFileDef->getSourceFileBase());
- g_insideObjC = g_sourceFileDef->name().lower().right(2)==".m" ||
- g_sourceFileDef->name().lower().right(3)==".mm";
- }
- g_currentDefinition = 0;
- g_currentMemberDef = 0;
- g_searchingForBody = exBlock;
- g_insideBody = FALSE;
- g_bracketCount = 0;
- if (!g_exampleName.isEmpty())
- {
- g_exampleFile = convertNameToFile(g_exampleName+"-example",FALSE,TRUE);
- //printf("g_exampleFile=%s\n",g_exampleFile.data());
- }
- g_includeCodeFragment = inlineFragment;
- //printf("** exBlock=%d exName=%s include=%d\n",exBlock,exName,inlineFragment);
- startCodeLine();
- g_type.resize(0);
- g_name.resize(0);
- g_args.resize(0);
- g_parmName.resize(0);
- g_parmType.resize(0);
- if (memberDef) setParameterList(memberDef);
- codeYYrestart( codeYYin );
- BEGIN( Body );
- codeYYlex();
- g_lexInit=TRUE;
- if (g_needsTermination)
- {
- endFontClass();
- g_code->endCodeLine();
- }
- if (cleanupSourceDef)
- {
- // delete the temporary file definition used for this example
- delete g_sourceFileDef;
- g_sourceFileDef=0;
- }
- return;
-}
-
-void codeFreeScanner()
-{
-#if defined(YY_FLEX_SUBMINOR_VERSION)
- if (g_lexInit)
- {
- codeYYlex_destroy();
- }
-#endif
-}
-
-
-
-#if !defined(YY_FLEX_SUBMINOR_VERSION)
-extern "C" { // some bogus code to keep the compiler happy
- void codeYYdummy() { yy_flex_realloc(0,0); }
-}
-#elif YY_FLEX_SUBMINOR_VERSION<33
-#error "You seem to be using a version of flex newer than 2.5.4 but older than 2.5.33. These versions do NOT work with doxygen! Please use version <=2.5.4 or >=2.5.33 or expect things to be parsed wrongly!"
-#endif
-
diff --git a/trunk/src/commentcnv.h b/trunk/src/commentcnv.h
deleted file mode 100644
index 5277524..0000000
--- a/trunk/src/commentcnv.h
+++ /dev/null
@@ -1,27 +0,0 @@
-/*****************************************************************************
- *
- *
- *
- * Copyright (C) 1997-2012 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.
- *
- */
-
-#ifndef _COMMENTCNV_H
-#define _COMMNETCNV_H
-
-class BufStr;
-
-extern void convertCppComments(BufStr *inBuf,BufStr *outBuf,
- const char *fileName);
-
-#endif
-
diff --git a/trunk/src/commentcnv.l b/trunk/src/commentcnv.l
deleted file mode 100644
index b031265..0000000
--- a/trunk/src/commentcnv.l
+++ /dev/null
@@ -1,881 +0,0 @@
-/*****************************************************************************
- *
- *
- *
- * Copyright (C) 1997-2012 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.
- *
- */
-
-%{
-
-#define YY_NEVER_INTERACTIVE 1
-
-#include <stdio.h>
-#include <stdlib.h>
-
-#include <qstack.h>
-#include <qregexp.h>
-#include <qtextstream.h>
-#include <qglobal.h>
-
-#include "bufstr.h"
-#include "debug.h"
-#include "message.h"
-#include "config.h"
-#include "doxygen.h"
-#include "util.h"
-
-#include <assert.h>
-
-#define ADDCHAR(c) g_outBuf->addChar(c)
-#define ADDARRAY(a,s) g_outBuf->addArray(a,s)
-
-struct CondCtx
-{
- CondCtx(int line,QCString id,bool b)
- : lineNr(line),sectionId(id), skip(b) {}
- int lineNr;
- QCString sectionId;
- bool skip;
-};
-
-static BufStr * g_inBuf;
-static BufStr * g_outBuf;
-static int g_inBufPos;
-static int g_col;
-static int g_blockHeadCol;
-static bool g_mlBrief;
-static int g_readLineCtx;
-static bool g_skip;
-static QCString g_fileName;
-static int g_lineNr;
-static int g_condCtx;
-static QStack<CondCtx> g_condStack;
-static QCString g_blockName;
-static int g_lastCommentContext;
-static bool g_inSpecialComment;
-static bool g_inRoseComment;
-static int g_stringContext;
-static int g_charContext;
-static int g_javaBlock;
-static bool g_specialComment;
-
-static QCString g_aliasString;
-static int g_blockCount;
-static bool g_lastEscaped;
-static int g_lastBlockContext;
-static bool g_pythonDocString;
-
-
-static SrcLangExt g_lang;
-
-static void replaceCommentMarker(const char *s,int len)
-{
- const char *p=s;
- char c;
- // copy leading blanks
- while ((c=*p) && (c==' ' || c=='\t' || c=='\n'))
- {
- ADDCHAR(c);
- g_lineNr += c=='\n';
- p++;
- }
- // replace start of comment marker by blanks and the last character by a *
- int blanks=0;
- while ((c=*p) && (c=='/' || c=='!' || c=='#'))
- {
- blanks++;
- p++;
- if (*p=='<') // comment-after-item marker
- {
- blanks++;
- p++;
- }
- if (c=='!') // end after first !
- {
- break;
- }
- }
- if (blanks>0)
- {
- while (blanks>1)
- {
- ADDCHAR(' ');
- blanks--;
- }
- ADDCHAR('*');
- }
- // copy comment line to output
- ADDARRAY(p,len-(p-s));
-}
-
-static inline int computeIndent(const char *s)
-{
- int col=0;
- static int tabSize=Config_getInt("TAB_SIZE");
- const char *p=s;
- char c;
- while ((c=*p++))
- {
- if (c==' ') col++;
- else if (c=='\t') col+=tabSize-(col%tabSize);
- else break;
- }
- return col;
-}
-
-static inline void copyToOutput(const char *s,int len)
-{
- int i;
- if (g_skip) // only add newlines.
- {
- for (i=0;i<len;i++)
- {
- if (s[i]=='\n')
- {
- ADDCHAR('\n');
- //fprintf(stderr,"---> skip %d\n",g_lineNr);
- g_lineNr++;
- }
- }
- }
- else if (len>0)
- {
- ADDARRAY(s,len);
- static int tabSize=Config_getInt("TAB_SIZE");
- for (i=0;i<len;i++)
- {
- switch (s[i])
- {
- case '\n': g_col=0;
- //fprintf(stderr,"---> copy %d\n",g_lineNr);
- g_lineNr++; break;
- case '\t': g_col+=tabSize-(g_col%tabSize); break;
- default: g_col++; break;
- }
- }
- }
-}
-
-static void startCondSection(const char *sectId)
-{
- g_condStack.push(new CondCtx(g_lineNr,sectId,g_skip));
- if (Config_getList("ENABLED_SECTIONS").find(sectId)!=-1)
- {
- //printf("*** Section is enabled!\n");
- }
- else
- {
- //printf("*** Section is disabled!\n");
- g_skip=TRUE;
- }
-}
-
-static void endCondSection()
-{
- if (g_condStack.isEmpty())
- {
- warn(g_fileName,g_lineNr,"Found \\endcond command without matching \\cond");
- g_skip=FALSE;
- }
- else
- {
- CondCtx *ctx = g_condStack.pop();
- g_skip=ctx->skip;
- }
-}
-
-#if 0
-/** remove and executes cond and endcond commands in \a s */
-static QCString handleCondCmdInAliases(const QCString &s)
-{
- QCString result;
- //printf("handleCondCmdInAliases(%s)\n",s.data());
- static QRegExp cmdPat("[\\\\@][a-z_A-Z][a-z_A-Z0-9]*");
- int p=0,i,l;
- while ((i=cmdPat.match(s,p,&l))!=-1)
- {
- result+=s.mid(p,i-p);
- QCString cmd = s.mid(i+1,l-1);
- //printf("Found command %s\n",cmd.data());
- if (cmd=="cond")
- {
- int sp=i+l,ep;
- const char *arg=s.data()+sp;
- char c;
- // skip spaces
- while ((c=*arg) && (c==' ' || c=='\t')) arg++,sp++;
- // read argument
- if (*arg=='\n') // no arg
- {
- startCondSection(" ");
- ep=sp;
- }
- else // get argument
- {
- ep=sp;
- while ((c=*arg) && isId(c)) arg++,ep++;
- if (ep>sp)
- {
- QCString id = s.mid(sp,ep-sp);
- //printf("Found conditional section id %s\n",id.data());
- startCondSection(id);
- }
- else // invalid identifier
- {
- }
- }
- p=ep;
- }
- else if (cmd=="endcond")
- {
- endCondSection();
- p=i+l;
- }
- else
- {
- result+=s.mid(i,l);
- p=i+l;
- }
- }
- result+=s.right(s.length()-p);
- return result;
-}
-#endif
-
-/** copies string \a s with length \a len to the output, while
- * replacing any alias commands found in the string.
- */
-static void replaceAliases(const char *s)
-{
- QCString result = resolveAliasCmd(s);
- //printf("replaceAliases(%s)->'%s'\n",s,result.data());
- copyToOutput(result,result.length());
-}
-
-
-#undef YY_INPUT
-#define YY_INPUT(buf,result,max_size) result=yyread(buf,max_size);
-
-static int yyread(char *buf,int max_size)
-{
- int bytesInBuf = g_inBuf->curPos()-g_inBufPos;
- int bytesToCopy = QMIN(max_size,bytesInBuf);
- memcpy(buf,g_inBuf->data()+g_inBufPos,bytesToCopy);
- g_inBufPos+=bytesToCopy;
- return bytesToCopy;
-}
-
-void replaceComment(int offset);
-
-%}
-
-%option noyywrap
-
-%x Scan
-%x SkipString
-%x SkipChar
-%x SComment
-%x CComment
-%x Verbatim
-%x VerbatimCode
-%x ReadLine
-%x CondLine
-%x ReadAliasArgs
-
-%%
-
-<Scan>[^"'!\/\n\\#\\-]* { /* eat anything that is not " / or \n */
- copyToOutput(yytext,(int)yyleng);
- }
-<Scan>"\"\"\""! { /* start of python long comment */
- if (g_lang!=SrcLangExt_Python)
- {
- REJECT;
- }
- else
- {
- g_pythonDocString = TRUE;
- copyToOutput(yytext,(int)yyleng);
- BEGIN(CComment);
- }
- }
-<Scan>"!>" {
- if (g_lang!=SrcLangExt_Fortran)
- {
- REJECT;
- }
- else
- {
- copyToOutput(yytext,(int)yyleng);
- BEGIN(CComment);
- }
- }
-<Scan>"\"" { /* start of a string */
- copyToOutput(yytext,(int)yyleng);
- g_stringContext = YY_START;
- BEGIN(SkipString);
- }
-<Scan>' {
- copyToOutput(yytext,(int)yyleng);
- g_charContext = YY_START;
- BEGIN(SkipChar);
- }
-<Scan>\n { /* new line */
- copyToOutput(yytext,(int)yyleng);
- }
-<Scan>("//!"|"///").*/\n[ \t]*"//"[\/!][^\/] { /* start C++ style special comment block */
- if (g_mlBrief)
- {
- REJECT; // bail out if we do not need to convert
- }
- else
- {
- int i=3;
- if (yytext[2]=='/')
- {
- while (i<(int)yyleng && yytext[i]=='/') i++;
- }
- g_blockHeadCol=g_col;
- copyToOutput("/**",3);
- replaceAliases(yytext+i);
- g_inSpecialComment=TRUE;
- BEGIN(SComment);
- }
- }
-<Scan>"//##Documentation".*/\n { /* Start of Rational Rose ANSI C++ comment block */
- if (g_mlBrief) REJECT;
- int i=17; //=strlen("//##Documentation");
- g_blockHeadCol=g_col;
- copyToOutput("/**",3);
- replaceAliases(yytext+i);
- g_inRoseComment=TRUE;
- BEGIN(SComment);
- }
-<Scan>"//"/.*\n { /* one line C++ comment */
- copyToOutput(yytext,(int)yyleng);
- g_readLineCtx=YY_START;
- BEGIN(ReadLine);
- }
-<Scan>"/*"[*!]? { /* start of a C comment */
- g_specialComment=(int)yyleng==3;
- copyToOutput(yytext,(int)yyleng);
- BEGIN(CComment);
- }
-<Scan>"#"("#")? {
- if (g_lang!=SrcLangExt_Python)
- {
- REJECT;
- }
- else
- {
- copyToOutput(yytext,(int)yyleng);
- BEGIN(CComment);
- }
- }
-<Scan>"--!" {
- if (g_lang!=SrcLangExt_VHDL)
- {
- REJECT;
- }
- else
- {
- copyToOutput(yytext,(int)yyleng);
- BEGIN(CComment);
- }
- }
-<Scan>"!>" {
- if (g_lang!=SrcLangExt_Fortran)
- {
- REJECT;
- }
- else
- {
- copyToOutput(yytext,(int)yyleng);
- BEGIN(CComment);
- }
- }
-<CComment>"{@code"/[ \t\n] {
- copyToOutput("@code",5);
- g_lastCommentContext = YY_START;
- g_javaBlock=1;
- g_blockName=&yytext[1];
- BEGIN(VerbatimCode);
- }
-<CComment,ReadLine>[\\@]("dot"|"code"|"msc")/[^a-z_A-Z0-9] { /* start of a verbatim block */
- copyToOutput(yytext,(int)yyleng);
- g_lastCommentContext = YY_START;
- g_javaBlock=0;
- g_blockName=&yytext[1];
- BEGIN(VerbatimCode);
- }
-<CComment,ReadLine>[\\@]("f$"|"f["|"f{"[a-z]*) {
- copyToOutput(yytext,(int)yyleng);
- g_blockName=&yytext[1];
- if (g_blockName.at(1)=='[')
- {
- g_blockName.at(1)=']';
- }
- else if (g_blockName.at(1)=='{')
- {
- g_blockName.at(1)='}';
- }
- g_lastCommentContext = YY_START;
- BEGIN(Verbatim);
- }
-<CComment,ReadLine>[\\@]("verbatim"|"latexonly"|"htmlonly"|"xmlonly"|"rtfonly"|"manonly")/[^a-z_A-Z0-9] { /* start of a verbatim block */
- copyToOutput(yytext,(int)yyleng);
- g_blockName=&yytext[1];
- g_lastCommentContext = YY_START;
- BEGIN(Verbatim);
- }
-<Scan>. { /* any other character */
- copyToOutput(yytext,(int)yyleng);
- }
-<Verbatim>[\\@]("endverbatim"|"endlatexonly"|"endhtmlonly"|"endxmlonly"|"endrtfonly"|"endmanonly"|"f$"|"f]"|"f}") { /* end of verbatim block */
- copyToOutput(yytext,(int)yyleng);
- if (yytext[1]=='f') // end of formula
- {
- BEGIN(g_lastCommentContext);
- }
- else if (&yytext[4]==g_blockName)
- {
- BEGIN(g_lastCommentContext);
- }
- }
-<VerbatimCode>"{" {
- if (g_javaBlock==0)
- {
- REJECT;
- }
- else
- {
- g_javaBlock++;
- copyToOutput(yytext,(int)yyleng);
- }
- }
-<VerbatimCode>"}" {
- if (g_javaBlock==0)
- {
- REJECT;
- }
- else
- {
- g_javaBlock--;
- if (g_javaBlock==0)
- {
- copyToOutput(" @endcode ",10);
- BEGIN(g_lastCommentContext);
- }
- else
- {
- copyToOutput(yytext,(int)yyleng);
- }
- }
- }
-<VerbatimCode>[\\@]("enddot"|"endcode"|"endmsc") { /* end of verbatim block */
- copyToOutput(yytext,(int)yyleng);
- if (&yytext[4]==g_blockName)
- {
- BEGIN(g_lastCommentContext);
- }
- }
-<VerbatimCode>^[ \t]*"//"[\!\/]? { /* skip leading comments */
- if (!g_inSpecialComment)
- {
- copyToOutput(yytext,(int)yyleng);
- }
- }
-<Verbatim,VerbatimCode>[^@\/\\\n{}]* { /* any character not a backslash or new line or } */
- copyToOutput(yytext,(int)yyleng);
- }
-<Verbatim,VerbatimCode>\n { /* new line in verbatim block */
- copyToOutput(yytext,(int)yyleng);
- }
-<Verbatim,VerbatimCode>^[ \t]*"///" {
- if (g_blockName=="dot" || g_blockName=="msc" || g_blockName.at(0)=='f')
- {
- // see bug 487871, strip /// from dot images and formulas.
- copyToOutput(" ",3);
- }
- else // even slashes are verbatim (e.g. \verbatim, \code)
- {
- REJECT;
- }
- }
-<Verbatim,VerbatimCode>. { /* any other character */
- copyToOutput(yytext,(int)yyleng);
- }
-<SkipString>\\. { /* escaped character in string */
- copyToOutput(yytext,(int)yyleng);
- }
-<SkipString>"\"" { /* end of string */
- copyToOutput(yytext,(int)yyleng);
- BEGIN(g_stringContext);
- }
-<SkipString>. { /* any other string character */
- copyToOutput(yytext,(int)yyleng);
- }
-<SkipString>\n { /* new line inside string (illegal for some compilers) */
- copyToOutput(yytext,(int)yyleng);
- }
-<SkipChar>\\. { /* escaped character */
- copyToOutput(yytext,(int)yyleng);
- }
-<SkipChar>' { /* end of character literal */
- copyToOutput(yytext,(int)yyleng);
- BEGIN(g_charContext);
- }
-<SkipChar>. { /* any other string character */
- copyToOutput(yytext,(int)yyleng);
- }
-<SkipChar>\n { /* new line character */
- copyToOutput(yytext,(int)yyleng);
- }
-
-<CComment>[^\\!@*\n{\"]* { /* anything that is not a '*' or command */
- copyToOutput(yytext,(int)yyleng);
- }
-<CComment>"*"+[^*/\\@\n{\"]* { /* stars without slashes */
- copyToOutput(yytext,(int)yyleng);
- }
-<CComment>"\"\"\"" { /* end of Python docstring */
- if (g_lang!=SrcLangExt_Python)
- {
- REJECT;
- }
- else
- {
- g_pythonDocString = FALSE;
- copyToOutput(yytext,(int)yyleng);
- BEGIN(Scan);
- }
- }
-<CComment>\n { /* new line in comment */
- copyToOutput(yytext,(int)yyleng);
- }
-<CComment>"*"+"/" { /* end of C comment */
- if (g_lang==SrcLangExt_Python)
- {
- REJECT;
- }
- else
- {
- copyToOutput(yytext,(int)yyleng);
- BEGIN(Scan);
- }
- }
-<CComment>"\n"/[ \t]*[^#] { /* end of Python comment */
- if (g_lang!=SrcLangExt_Python || g_pythonDocString)
- {
- REJECT;
- }
- else
- {
- copyToOutput(yytext,(int)yyleng);
- BEGIN(Scan);
- }
- }
-<CComment>"\n"/[ \t]*[^\-] { /* end of VHDL comment */
- if (g_lang!=SrcLangExt_VHDL)
- {
- REJECT;
- }
- else
- {
- copyToOutput(yytext,(int)yyleng);
- BEGIN(Scan);
- }
- }
-<CComment>"\n"/[ \t]*[^!] { /* end of Fortran comment */
- if (g_lang!=SrcLangExt_Fortran)
- {
- REJECT;
- }
- else
- {
- copyToOutput(yytext,(int)yyleng);
- BEGIN(Scan);
- }
- }
-<CComment>"'" {
- g_charContext = YY_START;
- copyToOutput(yytext,(int)yyleng);
- BEGIN(SkipChar);
- }
-<CComment>"\"" {
- g_stringContext = YY_START;
- copyToOutput(yytext,(int)yyleng);
- BEGIN(SkipString);
- }
-<CComment>. {
- copyToOutput(yytext,(int)yyleng);
- }
-<SComment>^[ \t]*"///"[\/]*/\n {
- replaceComment(0);
- }
-<SComment>\n[ \t]*"///"[\/]*/\n {
- replaceComment(1);
- }
-<SComment>^[ \t]*"///"[^\/\n]/.*\n {
- replaceComment(0);
- g_readLineCtx=YY_START;
- BEGIN(ReadLine);
- }
-<SComment>\n[ \t]*"///"[^\/\n]/.*\n {
- replaceComment(1);
- g_readLineCtx=YY_START;
- BEGIN(ReadLine);
- }
-<SComment>^[ \t]*"//!" | // just //!
-<SComment>^[ \t]*"//!<"/.*\n | // or //!< something
-<SComment>^[ \t]*"//!"[^<]/.*\n { // or //!something
- replaceComment(0);
- g_readLineCtx=YY_START;
- BEGIN(ReadLine);
- }
-<SComment>\n[ \t]*"//!" |
-<SComment>\n[ \t]*"//!<"/.*\n |
-<SComment>\n[ \t]*"//!"[^<\n]/.*\n {
- replaceComment(1);
- g_readLineCtx=YY_START;
- BEGIN(ReadLine);
- }
-<SComment>^[ \t]*"//##"/.*\n {
- if (!g_inRoseComment)
- {
- REJECT;
- }
- else
- {
- replaceComment(0);
- g_readLineCtx=YY_START;
- BEGIN(ReadLine);
- }
- }
-<SComment>\n[ \t]*"//##"/.*\n {
- if (!g_inRoseComment)
- {
- REJECT;
- }
- else
- {
- replaceComment(1);
- g_readLineCtx=YY_START;
- BEGIN(ReadLine);
- }
- }
-<SComment>\n { /* end of special comment */
- copyToOutput(" */",3);
- copyToOutput(yytext,(int)yyleng);
- g_inSpecialComment=FALSE;
- g_inRoseComment=FALSE;
- BEGIN(Scan);
- }
-<ReadLine>[^\\@\n]*/\n {
- copyToOutput(yytext,(int)yyleng);
- BEGIN(g_readLineCtx);
- }
-<CComment,ReadLine>[\\@][\\@][~a-z_A-Z][a-z_A-Z0-9]*[ \t]* { // escaped command
- copyToOutput(yytext,(int)yyleng);
- }
-<CComment,ReadLine>[\\@]"cond"[ \t]+ { // conditional section
- g_condCtx = YY_START;
- BEGIN(CondLine);
- }
-<CComment,ReadLine>[\\@]"endcond"/[^a-z_A-Z0-9] { // end of conditional section
- bool oldSkip=g_skip;
- endCondSection();
- if (YY_START==CComment && oldSkip && !g_skip)
- {
- //printf("** Adding start of comment!\n");
- if (g_lang!=SrcLangExt_Python &&
- g_lang!=SrcLangExt_VHDL &&
- g_lang!=SrcLangExt_Fortran)
- {
- ADDCHAR('/');
- ADDCHAR('*');
- if (g_specialComment)
- {
- ADDCHAR('*');
- }
- }
- }
- }
-<CondLine>[a-z_A-Z][a-z_A-Z0-9.\-]* {
- bool oldSkip=g_skip;
- startCondSection(yytext);
- if (g_condCtx==CComment && !oldSkip && g_skip)
- {
- //printf("** Adding terminator for comment!\n");
- if (g_lang!=SrcLangExt_Python &&
- g_lang!=SrcLangExt_VHDL &&
- g_lang!=SrcLangExt_Fortran)
- {
- ADDCHAR('*');
- ADDCHAR('/');
- }
- }
- BEGIN(g_condCtx);
- }
-<CondLine>[ \t]*
-<CComment,ReadLine>[\\@]"cond"[ \t\r]*/\n |
-<CondLine>. { // forgot section id?
- if (YY_START!=CondLine) g_condCtx=YY_START;
- bool oldSkip=g_skip;
- startCondSection(" "); // fake section id causing the section to be hidden unconditionally
- if (g_condCtx==CComment && !oldSkip && g_skip)
- {
- //printf("** Adding terminator for comment!\n");
- if (g_lang!=SrcLangExt_Python &&
- g_lang!=SrcLangExt_VHDL)
- {
- ADDCHAR('*');
- ADDCHAR('/');
- }
- }
- if (*yytext=='\n') g_lineNr++;
- BEGIN(g_condCtx);
- }
-<CComment,ReadLine>[\\@][a-z_A-Z][a-z_A-Z0-9]* { // expand alias without arguments
- replaceAliases(yytext);
- }
-<CComment,ReadLine>[\\@][a-z_A-Z][a-z_A-Z0-9]*"{" { // expand alias with arguments
- g_lastBlockContext=YY_START;
- g_blockCount=1;
- g_aliasString=yytext;
- g_lastEscaped=0;
- BEGIN( ReadAliasArgs );
- }
-<ReadAliasArgs>^[ \t]*"//"[/!]/[^\n]+ { // skip leading special comments (see bug 618079)
- }
-<ReadAliasArgs>"*/" { // oops, end of comment in the middle of an alias?
- if (g_lang==SrcLangExt_Python)
- {
- REJECT;
- }
- else // abort the alias, restart scanning
- {
- copyToOutput(g_aliasString,g_aliasString.length());
- copyToOutput(yytext,(int)yyleng);
- BEGIN(Scan);
- }
- }
-<ReadAliasArgs>[^{}\n\\\*]+ {
- g_aliasString+=yytext;
- g_lastEscaped=FALSE;
- }
-<ReadAliasArgs>"\\" {
- if (g_lastEscaped) g_lastEscaped=FALSE;
- else g_lastEscaped=TRUE;
- g_aliasString+=yytext;
- }
-<ReadAliasArgs>\n {
- g_aliasString+=yytext;
- g_lineNr++;
- g_lastEscaped=FALSE;
- }
-<ReadAliasArgs>"{" {
- g_aliasString+=yytext;
- if (!g_lastEscaped) g_blockCount++;
- g_lastEscaped=FALSE;
- }
-<ReadAliasArgs>"}" {
- g_aliasString+=yytext;
- if (!g_lastEscaped) g_blockCount--;
- if (g_blockCount==0)
- {
- replaceAliases(g_aliasString);
- BEGIN( g_lastBlockContext );
- }
- g_lastEscaped=FALSE;
- }
-<ReadAliasArgs>. {
- g_aliasString+=yytext;
- g_lastEscaped=FALSE;
- }
-<ReadLine>. {
- copyToOutput(yytext,(int)yyleng);
- }
-
-%%
-
-void replaceComment(int offset)
-{
- if (g_mlBrief)
- {
- copyToOutput(yytext,(int)yyleng);
- }
- else
- {
- //printf("replaceComment(%s)\n",yytext);
- int i=computeIndent(&yytext[offset]);
- if (i==g_blockHeadCol)
- {
- replaceCommentMarker(yytext,(int)yyleng);
- }
- else
- {
- copyToOutput(" */",3);
- int i;for (i=(int)yyleng-1;i>=0;i--) unput(yytext[i]);
- g_inSpecialComment=FALSE;
- BEGIN(Scan);
- }
- }
-}
-
-/*! This function does three things:
- * -# It converts multi-line C++ style comment blocks (that are aligned)
- * to C style comment blocks (if MULTILINE_CPP_IS_BRIEF is set to NO).
- * -# It replaces aliases with their definition (see ALIASES)
- * -# It handles conditional sections (cond...endcond blocks)
- */
-void convertCppComments(BufStr *inBuf,BufStr *outBuf,const char *fileName)
-{
- //printf("convertCppComments(%s)\n",fileName);
- g_inBuf = inBuf;
- g_outBuf = outBuf;
- g_inBufPos = 0;
- g_col = 0;
- g_mlBrief = Config_getBool("MULTILINE_CPP_IS_BRIEF");
- g_skip = FALSE;
- g_fileName = fileName;
- g_lang = getLanguageFromFileName(fileName);
- g_pythonDocString = FALSE;
- g_lineNr = 1;
- g_condStack.clear();
- g_condStack.setAutoDelete(TRUE);
- BEGIN(Scan);
- yylex();
- while (!g_condStack.isEmpty())
- {
- CondCtx *ctx = g_condStack.pop();
- QCString sectionInfo = " ";
- if (ctx->sectionId!=" ") sectionInfo.sprintf(" with label %s ",ctx->sectionId.data());
- warn(g_fileName,ctx->lineNr,"Conditional section%sdoes not have "
- "a corresponding \\endcond command within this file.",sectionInfo.data());
- }
- if (Debug::isFlagSet(Debug::CommentCnv))
- {
- g_outBuf->at(g_outBuf->curPos())='\0';
- msg("-------------\n%s\n-------------\n",g_outBuf->data());
- }
-}
-
-
-//----------------------------------------------------------------------------
-#if !defined(YY_FLEX_SUBMINOR_VERSION)
-extern "C" { // some bogus code to keep the compiler happy
- void commentcnvYYdummy() { yy_flex_realloc(0,0); }
-}
-#endif
-
diff --git a/trunk/src/commentscan.h b/trunk/src/commentscan.h
deleted file mode 100644
index 41cf766..0000000
--- a/trunk/src/commentscan.h
+++ /dev/null
@@ -1,84 +0,0 @@
-/******************************************************************************
- *
- * Copyright (C) 1997-2012 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.
- *
- */
-
-#ifndef COMMENTSCAN_H
-#define COMMENTSCAN_H
-
-#include "qtbc.h"
-#include "entry.h"
-
-class ParserInterface;
-
-/** @file
- * @brief Interface for the comment block parser */
-
-/** Invokes the comment block parser with the request to parse a
- * single comment block.
- * @param[in] parser The language parse that invoked this function.
- * The comment block parse may invoke
- * ParserInterface::parsePrototype() in order to parse
- * the argument of a @@fn command.
- * @param[in] curEntry The Entry to which the comment block belongs.
- * Any information (like documentation) that is found in
- * the comment block will be stored in this entry.
- * @param[in] comment A string representing the actual comment block.
- * Note that leading *'s are already stripped from the comment block.
- * @param[in] fileName The name of the file in which the comment is found.
- * Mainly used for producing warnings.
- * @param[in,out] lineNr The line number at which the comment block was found.
- * When the function returns it will be set to the last line parsed.
- * @param[in] isBrief TRUE iff this comment block represents a brief description.
- * @param[in] isJavaDocStyle TRUE iff this comment block is in "JavaDoc" style.
- * This means that it starts as a brief description until the end of
- * the sentences is found and then proceeds as a detailed description.
- * @param[in] isInbody TRUE iff this comment block is located in the body of
- * a function.
- * @param[in,out] prot The protection level in which this comment block was
- * found. Commands in the comment block may override this.
- * @param[in,out] position The character position within \a comment where the
- * comment block starts. Typically used in case the comment block
- * contains multiple structural commands.
- * @param[out] newEntryNeeded Boolean that is TRUE if the comment block parser
- * finds that a the comment block finishes the entry and a new one
- * needs to be started.
- * @returns TRUE if the comment requires further processing. The
- * parameter \a newEntryNeeded will typically be true in this case and
- * \a position will indicate the offset inside the \a comment string
- * where to proceed parsing. FALSE indicates no further processing is
- * needed.
- */
-bool parseCommentBlock(ParserInterface *parser,
- Entry *curEntry,
- const QCString &comment,
- const QCString &fileName,
- int &lineNr,
- bool isBrief,
- bool isJavaDocStyle,
- bool isInbody,
- Protection &prot,
- int &position,
- bool &newEntryNeeded
- );
-
-void groupEnterFile(const char *file,int line);
-void groupLeaveFile(const char *file,int line);
-void groupLeaveCompound(const char *file,int line,const char *name);
-void groupEnterCompound(const char *file,int line,const char *name);
-void openGroup(Entry *e,const char *file,int line);
-void closeGroup(Entry *,const char *file,int line,bool foundInline=FALSE);
-void initGroupInfo(Entry *e);
-
-
-#endif
diff --git a/trunk/src/commentscan.l b/trunk/src/commentscan.l
deleted file mode 100644
index 56c0d08..0000000
--- a/trunk/src/commentscan.l
+++ /dev/null
@@ -1,2906 +0,0 @@
-/*****************************************************************************
- *
- * Copyright (C) 1997-2012 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.
- *
- */
-
-%{
-
-/*
- * includes
- */
-#include <stdio.h>
-#include <stdlib.h>
-#include <assert.h>
-#include <ctype.h>
-
-#include "qtbc.h"
-#include <qarray.h>
-#include <qstack.h>
-#include <qregexp.h>
-#include <unistd.h>
-#include <qfile.h>
-
-#include "scanner.h"
-#include "entry.h"
-#include "doxygen.h"
-#include "message.h"
-#include "config.h"
-#include "util.h"
-#include "index.h"
-#include "defargs.h"
-#include "language.h"
-#include "outputlist.h"
-#include "membergroup.h"
-#include "reflist.h"
-#include "debug.h"
-#include "parserintf.h"
-#include "cite.h"
-#include "markdown.h"
-
-// forward declarations
-static bool handleBrief(const QCString &);
-static bool handleFn(const QCString &);
-static bool handleDef(const QCString &);
-static bool handleOverload(const QCString &);
-static bool handleEnum(const QCString &);
-static bool handleDefGroup(const QCString &);
-static bool handleAddToGroup(const QCString &);
-static bool handleWeakGroup(const QCString &);
-static bool handleNamespace(const QCString &);
-static bool handlePackage(const QCString &);
-static bool handleClass(const QCString &);
-static bool handleHeaderFile(const QCString &);
-static bool handleProtocol(const QCString &);
-static bool handleCategory(const QCString &);
-static bool handleUnion(const QCString &);
-static bool handleStruct(const QCString &);
-static bool handleInterface(const QCString &);
-static bool handleIdlException(const QCString &);
-static bool handlePage(const QCString &);
-static bool handleMainpage(const QCString &);
-static bool handleFile(const QCString &);
-static bool handleDir(const QCString &);
-static bool handleExample(const QCString &);
-static bool handleDetails(const QCString &);
-static bool handleName(const QCString &);
-static bool handleTodo(const QCString &);
-static bool handleTest(const QCString &);
-static bool handleBug(const QCString &);
-static bool handleSubpage(const QCString &s);
-static bool handleDeprecated(const QCString &);
-static bool handleXRefItem(const QCString &);
-static bool handleRelated(const QCString &);
-static bool handleRelatedAlso(const QCString &);
-static bool handleMemberOf(const QCString &);
-static bool handleRefItem(const QCString &);
-static bool handleSection(const QCString &);
-static bool handleAnchor(const QCString &);
-static bool handleCite(const QCString &);
-static bool handleFormatBlock(const QCString &);
-static bool handleAddIndex(const QCString &);
-static bool handleIf(const QCString &);
-static bool handleIfNot(const QCString &);
-static bool handleElseIf(const QCString &);
-static bool handleElse(const QCString &);
-static bool handleEndIf(const QCString &);
-static bool handleIngroup(const QCString &);
-static bool handleNoSubGrouping(const QCString &);
-static bool handleShowInitializer(const QCString &);
-static bool handleHideInitializer(const QCString &);
-static bool handleCallgraph(const QCString &);
-static bool handleCallergraph(const QCString &);
-static bool handleInternal(const QCString &);
-static bool handleLineBr(const QCString &);
-static bool handleStatic(const QCString &);
-static bool handlePure(const QCString &);
-static bool handlePrivate(const QCString &);
-static bool handlePrivateSection(const QCString &);
-static bool handleProtected(const QCString &);
-static bool handleProtectedSection(const QCString &);
-static bool handlePublic(const QCString &s);
-static bool handlePublicSection(const QCString &s);
-static bool handleToc(const QCString &s);
-static bool handleInherit(const QCString &);
-static bool handleExtends(const QCString &);
-static bool handleCopyDoc(const QCString &);
-
-typedef bool (*DocCmdFunc)(const QCString &name);
-
-struct DocCmdMap
-{
- const char *cmdName;
- DocCmdFunc handler;
- bool endsBrief;
-};
-
-// map of command to handler function
-static DocCmdMap docCmdMap[] =
-{
- // command name handler function ends brief description
- { "brief", &handleBrief, FALSE },
- { "short", &handleBrief, FALSE },
- { "fn", &handleFn, FALSE },
- { "var", &handleFn, FALSE },
- { "typedef", &handleFn, FALSE },
- { "property", &handleFn, FALSE },
- { "def", &handleDef, FALSE },
- { "overload", &handleOverload, FALSE },
- { "enum", &handleEnum, FALSE },
- { "defgroup", &handleDefGroup, FALSE },
- { "addtogroup", &handleAddToGroup, FALSE },
- { "weakgroup", &handleWeakGroup, FALSE },
- { "namespace", &handleNamespace, FALSE },
- { "package", &handlePackage, FALSE },
- { "class", &handleClass, FALSE },
- { "headerfile", &handleHeaderFile, FALSE },
- { "protocol", &handleProtocol, FALSE },
- { "category", &handleCategory, FALSE },
- { "union", &handleUnion, FALSE },
- { "struct", &handleStruct, FALSE },
- { "interface", &handleInterface, FALSE },
- { "idlexcept", &handleIdlException, FALSE },
- { "page", &handlePage, FALSE },
- { "mainpage", &handleMainpage, FALSE },
- { "file", &handleFile, FALSE },
- { "dir", &handleDir, FALSE },
- { "example", &handleExample, FALSE },
- { "details", &handleDetails, TRUE },
- { "name", &handleName, FALSE },
- { "todo", &handleTodo, FALSE }, // end brief will be done differently
- { "test", &handleTest, FALSE }, // end brief will be done differently
- { "bug", &handleBug, FALSE }, // end brief will be done differently
- { "deprecated", &handleDeprecated, FALSE }, // end brief will be done differently
- { "xrefitem", &handleXRefItem, FALSE }, // end brief will be done differently
- { "related", &handleRelated, TRUE },
- { "relates", &handleRelated, TRUE },
- { "relatedalso", &handleRelatedAlso, TRUE },
- { "relatesalso", &handleRelatedAlso, TRUE },
- { "refitem", &handleRefItem, TRUE },
- { "cite", &handleCite, TRUE },
- { "subpage", &handleSubpage, TRUE },
- { "section", &handleSection, TRUE },
- { "subsection", &handleSection, TRUE },
- { "subsubsection", &handleSection, TRUE },
- { "paragraph", &handleSection, TRUE },
- { "anchor", &handleAnchor, TRUE },
- { "verbatim", &handleFormatBlock, TRUE },
- { "latexonly", &handleFormatBlock, FALSE },
- { "htmlonly", &handleFormatBlock, FALSE },
- { "xmlonly", &handleFormatBlock, FALSE },
- { "rtfonly", &handleFormatBlock, FALSE },
- { "manonly", &handleFormatBlock, FALSE },
- { "dot", &handleFormatBlock, TRUE },
- { "msc", &handleFormatBlock, TRUE },
- { "code", &handleFormatBlock, TRUE },
- { "addindex", &handleAddIndex, FALSE },
- { "if", &handleIf, FALSE },
- { "ifnot", &handleIfNot, FALSE },
- { "elseif", &handleElseIf, FALSE },
- { "else", &handleElse, FALSE },
- { "endif", &handleEndIf, FALSE },
- { "ingroup", &handleIngroup, FALSE },
- { "nosubgrouping", &handleNoSubGrouping, FALSE },
- { "showinitializer", &handleShowInitializer, FALSE },
- { "hideinitializer", &handleHideInitializer, FALSE },
- { "callgraph", &handleCallgraph, FALSE },
- { "callergraph", &handleCallergraph, FALSE },
- { "internal", &handleInternal, TRUE },
- { "_linebr", &handleLineBr, FALSE },
- { "static", &handleStatic, FALSE },
- { "pure", &handlePure, FALSE },
- { "private", &handlePrivate, FALSE },
- { "privatesection", &handlePrivateSection, FALSE },
- { "protected", &handleProtected, FALSE },
- { "protectedsection",&handleProtectedSection, FALSE },
- { "public", &handlePublic, FALSE },
- { "publicsection", &handlePublicSection, FALSE },
- { "tableofcontents", &handleToc, FALSE },
- { "inherit", &handleInherit, TRUE },
- { "extends", &handleExtends, TRUE },
- { "implements", &handleExtends, TRUE },
- { "memberof", &handleMemberOf, TRUE },
- { "arg", 0, TRUE },
- { "attention", 0, TRUE },
- { "author", 0, TRUE },
- { "authors", 0, TRUE },
- { "copydoc", &handleCopyDoc, TRUE },
- { "copybrief", 0, FALSE },
- { "copydetails", 0, TRUE },
- { "date", 0, TRUE },
- { "dotfile", 0, TRUE },
- { "htmlinclude", 0, FALSE },
- { "image", 0, TRUE },
- { "include", 0, TRUE },
- { "includelineno", 0, TRUE },
- { "invariant", 0, TRUE },
- { "li", 0, TRUE },
- { "line", 0, TRUE },
- { "note", 0, TRUE },
- { "par", 0, TRUE },
- { "param", 0, TRUE },
- { "tparam", 0, TRUE },
- { "post", 0, TRUE },
- { "pre", 0, TRUE },
- { "remark", 0, TRUE },
- { "remarks", 0, TRUE },
- { "result", 0, TRUE },
- { "return", 0, TRUE },
- { "returns", 0, TRUE },
- { "retval", 0, TRUE },
- { "sa", 0, TRUE },
- { "see", 0, TRUE },
- { "since", 0, TRUE },
- { "throw", 0, TRUE },
- { "throws", 0, TRUE },
- { "until", 0, TRUE },
- { "verbinclude", 0, FALSE },
- { "version", 0, TRUE },
- { "warning", 0, TRUE },
- { 0, 0, FALSE }
-};
-
-/** @brief Command mapper.
- *
- * Maps a command name (as found in a comment block) onto a
- * specific handler function.
- */
-class DocCmdMapper
-{
- public:
- struct Cmd
- {
- DocCmdFunc func;
- bool endsBrief;
- };
-
- /** maps a command name to a handler function */
- static Cmd *map(const char *name)
- {
- return instance()->find(name);
- }
-
- /** release the singleton */
- static void freeInstance()
- {
- delete s_instance; s_instance=0;
- }
-
- private:
- static DocCmdMapper *instance()
- {
- if (s_instance==0) s_instance = new DocCmdMapper;
- return s_instance;
- }
-
- DocCmdMapper() : m_map(113)
- {
- m_map.setAutoDelete(TRUE);
- DocCmdMap *p = docCmdMap;
- while (p->cmdName)
- {
- if (m_map.find(p->cmdName)!=0)
- {
- printf("Error: DocCmdMapper: command %s already added\n",p->cmdName);
- exit(1);
- }
- Cmd *cmd = new Cmd;
- cmd->func = p->handler;
- cmd->endsBrief = p->endsBrief;
- m_map.insert(p->cmdName,cmd);
- p++;
- }
- }
-
- Cmd *find(const char *name)
- {
- return m_map.find(name);
- }
- QDict<Cmd> m_map;
- static DocCmdMapper *s_instance;
-};
-
-DocCmdMapper *DocCmdMapper::s_instance=0;
-
-
-#define YY_NEVER_INTERACTIVE 1
-
-enum XRefKind
-{
- XRef_Item,
- XRef_Todo,
- XRef_Test,
- XRef_Bug,
- XRef_Deprecated,
- XRef_None
-};
-
-enum OutputContext
-{
- OutputDoc,
- OutputBrief,
- OutputXRef,
- OutputInbody
-};
-
-enum GuardType
-{
- Guard_If,
- Guard_IfNot,
- Guard_Skip
-};
-
-class GuardedSection
-{
- public:
- GuardedSection(bool enabled,bool parentVisible)
- : m_enabled(enabled),m_parentVisible(parentVisible) {}
- bool isEnabled() const { return m_enabled; }
- bool parentVisible() const { return m_parentVisible; }
-
- private:
- bool m_enabled;
- bool m_parentVisible;
-};
-
-void openGroup(Entry *e,const char *file,int line);
-void closeGroup(Entry *e,const char *file,int line,bool foundInline=FALSE);
-void initGroupInfo(Entry *e);
-static void groupAddDocs(Entry *e,const char *fileName);
-
-/* -----------------------------------------------------------------
- *
- * statics
- */
-
-static ParserInterface *langParser; // the language parser that is calling us
-static QCString inputString; // input string
-static int inputPosition; // read pointer
-static QCString yyFileName; // file name that is read from
-static int yyLineNr; // line number in the input
-static bool inBody; // was the comment found inside the body of a function?
-static OutputContext inContext; // are we inside the brief, details or xref part
-static bool briefEndsAtDot; // does the brief description stop at a dot?
-static QCString formulaText; // Running text of a formula
-static QCString formulaEnv; // environment name
-static int formulaNewLines; // amount of new lines in the formula
-static QCString *pOutputString; // pointer to string to which the output is appended.
-static QCString outputXRef; // temp argument of todo/test/../xrefitem commands
-static QCString blockName; // preformatted block name (e.g. verbatim, latexonly,...)
-static XRefKind xrefKind; // kind of cross-reference command
-static XRefKind newXRefKind; //
-static GuardType guardType; // kind of guard for conditional section
-static bool enabledSectionFound;
-static QCString functionProto; // function prototype
-static QStack<GuardedSection> guards; // tracks nested conditional sections (if,ifnot,..)
-static Entry* current = 0 ; // working entry
-//static Entry* current_root = 0 ; // parent of working entry
-
-
-//static Entry* previous = 0 ; // TODO: remove need for this
-static bool needNewEntry;
-
-static QCString g_sectionLabel;
-static QCString g_sectionTitle;
-static int g_sectionLevel;
-static QCString xrefItemKey;
-static QCString newXRefItemKey;
-static QCString xrefItemTitle;
-static QCString xrefListTitle;
-static Protection protection;
-
-static bool xrefAppendFlag;
-static bool inGroupParamFound;
-static int braceCount;
-static bool insidePre;
-static bool parseMore;
-static int g_condCount;
-
-static int g_commentCount;
-static bool g_spaceBeforeCmd;
-static bool g_spaceBeforeIf;
-static QCString g_copyDocArg;
-
-//-----------------------------------------------------------------------------
-
-static QStack<Grouping> g_autoGroupStack;
-static int g_memberGroupId = DOX_NOGROUP;
-static QCString g_memberGroupHeader;
-static QCString g_memberGroupDocs;
-static QCString g_memberGroupRelates;
-static QCString g_compoundName;
-
-//-----------------------------------------------------------------------------
-
-static void initParser()
-{
- g_sectionLabel.resize(0);
- g_sectionTitle.resize(0);
- g_memberGroupHeader.resize(0);
-}
-
-//-----------------------------------------------------------------------------
-
-static bool getDocSectionName(int s)
-{
- switch(s)
- {
- case Entry::CLASSDOC_SEC:
- case Entry::STRUCTDOC_SEC:
- case Entry::UNIONDOC_SEC:
- case Entry::EXCEPTIONDOC_SEC:
- case Entry::NAMESPACEDOC_SEC:
- case Entry::PROTOCOLDOC_SEC:
- case Entry::CATEGORYDOC_SEC:
- case Entry::ENUMDOC_SEC:
- case Entry::PAGEDOC_SEC:
- case Entry::VARIABLEDOC_SEC:
- case Entry::MEMBERDOC_SEC:
- case Entry::OVERLOADDOC_SEC:
- case Entry::FILEDOC_SEC:
- case Entry::DEFINEDOC_SEC:
- case Entry::GROUPDOC_SEC:
- case Entry::MAINPAGEDOC_SEC:
- case Entry::PACKAGEDOC_SEC:
- case Entry::DIRDOC_SEC:
- case Entry::EXAMPLE_SEC:
- case Entry::MEMBERGRP_SEC:
- return TRUE;
- default:
- return FALSE;
- }
-}
-
-//-----------------------------------------------------------------------------
-
-static bool makeStructuralIndicator(Entry::Sections s)
-{
- //printf("current->section=%x\n",current->section);
- if (getDocSectionName(current->section))
- {
- return TRUE;
- }
- else
- {
- needNewEntry = TRUE;
- current->section = s;
- current->fileName = yyFileName;
- current->startLine = yyLineNr;
- return FALSE;
- }
-}
-
-static void lineCount()
-{
- for( const char* c = yytext ; *c ; ++c )
- yyLineNr += (*c == '\n') ;
-}
-
-
-static QCString stripQuotes(const char *s)
-{
- QCString name;
- if (s==0 || *s==0) return name;
- name=s;
- if (name.at(0)=='"' && name.at(name.length()-1)=='"')
- {
- name=name.mid(1,name.length()-2);
- }
- return name;
-}
-
-//-----------------------------------------------------------------
-
-static void addXRefItem(const char *listName,const char *itemTitle,
- const char *listTitle,bool append)
-{
- Entry *docEntry = current; // inBody && previous ? previous : current;
- if (listName==0) return;
- //printf("addXRefItem(%s,%s,%s,%d)\n",listName,itemTitle,listTitle,append);
-
- ListItemInfo *lii=0;
- RefList *refList = Doxygen::xrefLists->find(listName);
- if (refList==0) // new list
- {
- refList = new RefList(listName,listTitle,itemTitle);
- Doxygen::xrefLists->insert(listName,refList);
- //printf("new list!\n");
- }
- if (docEntry->sli)
- {
- QListIterator<ListItemInfo> slii(*docEntry->sli);
- for (slii.toFirst();(lii=slii.current());++slii)
- {
- if (strcmp(lii->type,listName)==0)
- {
- //printf("found %s lii->type=%s\n",listName,lii->type);
- break;
- }
- }
- }
- if (lii && append) // already found item of same type just before this one
- {
- //printf("listName=%s item id = %d existing\n",listName,lii->itemId);
- RefItem *item = refList->getRefItem(lii->itemId);
- ASSERT(item!=0);
- item->text += " <p>";
- item->text += outputXRef;
- //printf("%s: text +=%s\n",listName,item->text.data());
- }
- else // new item
- {
- int itemId = refList->addRefItem();
- //printf("listName=%s item id = %d new current=%p\n",listName,itemId,current);
-
- // if we have already an item from the same list type (e.g. a second @todo)
- // in the same Entry (i.e. lii!=0) then we reuse its link anchor.
- char anchorLabel[1024];
- //sprintf(anchorLabel,"_%s%06d",listName,lii ? lii->itemId : itemId);
- sprintf(anchorLabel,"_%s%06d",listName,itemId);
- RefItem *item = refList->getRefItem(itemId);
- ASSERT(item!=0);
- item->text = outputXRef;
- item->listAnchor = anchorLabel;
- docEntry->addSpecialListItem(listName,itemId);
- QCString cmdString;
- cmdString.sprintf("\\xrefitem %s %d.",listName,itemId);
- if (inBody)
- {
- docEntry->inbodyDocs += cmdString;
- }
- else
- {
- docEntry->doc += cmdString;
- }
- SectionInfo *si=new SectionInfo(listName,anchorLabel,
- g_sectionTitle,SectionInfo::Anchor,
- g_sectionLevel);
- Doxygen::sectionDict.append(anchorLabel,si);
- docEntry->anchors->append(si);
- }
- outputXRef.resize(0);
-}
-
-//-----------------------------------------------------------------------------
-
-// Adds a formula text to the list/dictionary of formulas if it was
-// not already added. Returns the label of the formula.
-static QCString addFormula()
-{
- QCString formLabel;
- QCString fText=formulaText.simplifyWhiteSpace();
- Formula *f=0;
- if ((f=Doxygen::formulaDict[fText])==0)
- {
- f = new Formula(fText);
- Doxygen::formulaList.append(f);
- Doxygen::formulaDict.insert(fText,f);
- formLabel.sprintf("\\form#%d",f->getId());
- Doxygen::formulaNameDict.insert(formLabel,f);
- }
- else
- {
- formLabel.sprintf("\\form#%d",f->getId());
- }
- int i;
- for (i=0;i<formulaNewLines;i++) formLabel+="@_fakenl"; // add fake newlines to
- // keep the warnings
- // correctly aligned.
- return formLabel;
-}
-
-//-----------------------------------------------------------------------------
-
-static void checkFormula();
-//-----------------------------------------------------------------------------
-
-static SectionInfo::SectionType sectionLevelToType(int level)
-{
- if (level>=0 && level<5) return (SectionInfo::SectionType)level;
- return SectionInfo::Anchor;
-}
-
-static void addSection()
-{
- // create a new section element
- g_sectionTitle+=yytext;
- g_sectionTitle=g_sectionTitle.stripWhiteSpace();
- SectionInfo *si = new SectionInfo(yyFileName,g_sectionLabel,
- g_sectionTitle,sectionLevelToType(g_sectionLevel),g_sectionLevel);
-
- // add section to this entry
- current->anchors->append(si);
-
- // add section to the global dictionary
- Doxygen::sectionDict.append(g_sectionLabel,si);
-
-}
-
-//-----------------------------------------------------------------------------
-
-static void addCite()
-{
- Doxygen::citeDict->insert(yytext);
-}
-
-//-----------------------------------------------------------------------------
-
-// strip trailing whitespace (excluding newlines) from string s
-static void stripTrailingWhiteSpace(QCString &s)
-{
- uint len = s.length();
- int i = (int)len-1;
- char c;
- while (i>=0 && ((c = s.at(i))==' ' || c=='\t' || c=='\r')) i--;
- if (i!=(int)len-1)
- {
- s.resize(i+2); // string upto and including char at pos i and \0 terminator
- }
-}
-
-// selects the output to write to
-static inline void setOutput(OutputContext ctx)
-{
- bool xrefAppendToPrev = xrefAppendFlag;
- // determine append flag for the next item (i.e. the end of this item)
- xrefAppendFlag = !inBody &&
- inContext==OutputXRef && ctx==OutputXRef && // two consecutive xref items
- newXRefKind==xrefKind && // of the same kind
- (xrefKind!=XRef_Item ||
- newXRefItemKey==xrefItemKey); // with the same key if \xrefitem
- //printf("%d && %d && %d && (%d || %d)\n",
- // inContext==OutputXRef,
- // ctx==OutputXRef,
- // newXRefKind==xrefKind,
- // xrefKind!=XRef_Item,
- // newXRefItemKey==xrefItemKey);
-
- //printf("refKind=%d newXRefKind=%d xrefAppendToPrev=%d xrefAppendFlag=%d\n",
- // xrefKind,newXRefKind,xrefAppendToPrev,xrefAppendFlag);
-
- //printf("setOutput(inContext=%d ctx=%d)\n",inContext,ctx);
- if (inContext==OutputXRef) // end of XRef section => add the item
- {
- // See if we can append this new xref item to the previous one.
- // We know this at the start of the next item of the same
- // type and need to remember this until the end of that item.
- switch(xrefKind)
- {
- case XRef_Todo:
- addXRefItem("todo",
- theTranslator->trTodo(),
- theTranslator->trTodoList(),
- xrefAppendToPrev
- );
- break;
- case XRef_Test:
- addXRefItem("test",
- theTranslator->trTest(),
- theTranslator->trTestList(),
- xrefAppendToPrev
- );
- break;
- case XRef_Bug:
- addXRefItem("bug",
- theTranslator->trBug(),
- theTranslator->trBugList(),
- xrefAppendToPrev
- );
- break;
- case XRef_Deprecated:
- addXRefItem("deprecated",
- theTranslator->trDeprecated(),
- theTranslator->trDeprecatedList(),
- xrefAppendToPrev
- );
- break;
- case XRef_Item: // user defined list
- addXRefItem(xrefItemKey,
- xrefItemTitle,
- xrefListTitle,
- xrefAppendToPrev
- );
- break;
- case XRef_None:
- ASSERT(0);
- break;
- }
- }
- xrefItemKey = newXRefItemKey;
-
- int oldContext = inContext;
- inContext = ctx;
- if (inContext!=OutputXRef && inBody) inContext=OutputInbody;
- switch(inContext)
- {
- case OutputDoc:
- if (oldContext!=inContext)
- {
- stripTrailingWhiteSpace(current->doc);
- if (current->docFile.isEmpty())
- {
- current->docFile = yyFileName;
- current->docLine = yyLineNr;
- }
- }
- pOutputString = &current->doc;
- break;
- case OutputBrief:
- if (oldContext!=inContext)
- {
- if (current->briefFile.isEmpty())
- {
- current->briefFile = yyFileName;
- current->briefLine = yyLineNr;
- }
- }
- if (current->brief.stripWhiteSpace().isEmpty()) // we only want one brief
- // description even if multiple
- // are given...
- {
- pOutputString = &current->brief;
- }
- else
- {
- pOutputString = &current->doc;
- inContext = OutputDoc; // need to switch to detailed docs, see bug 631380
- }
- break;
- case OutputXRef:
- pOutputString = &outputXRef;
- // first item found, so can't append to previous
- //xrefAppendFlag = FALSE;
- break;
- case OutputInbody:
- pOutputString = &current->inbodyDocs;
- break;
- }
-}
-
-// add a string to the output
-static inline void addOutput(const char *s)
-{
- //printf("addOutput(%s)\n",s);
- *pOutputString+=s;
-}
-
-// add a character to the output
-static inline void addOutput(char c)
-{
- *pOutputString+=c;
-}
-
-static void endBrief(bool addToOutput=TRUE)
-{
- if (!current->brief.stripWhiteSpace().isEmpty())
- { // only go to the detailed description if we have
- // found some brief description and not just whitespace
- briefEndsAtDot=FALSE;
- setOutput(OutputDoc);
- if (addToOutput) addOutput(yytext);
- }
-}
-
-/* ----------------------------------------------------------------- */
-#undef YY_INPUT
-#define YY_INPUT(buf,result,max_size) result=yyread(buf,max_size);
-
-static int prevPosition=0;
-
-static int yyread(char *buf,int max_size)
-{
- prevPosition=inputPosition;
- int c=0;
- while( c < max_size && inputString[inputPosition] )
- {
- *buf = inputString[inputPosition++] ;
- //printf("%d (%c)\n",*buf,*buf);
- c++; buf++;
- }
- return c;
-}
-
-%}
-
- /* start command character */
-CMD ("\\"|"@")
-DCMD1 ("arg"|"attention"|"author"|"cite"|"code")
-DCMD2 ("date"|"dot"|"msc"|"dotfile"|"example")
-DCMD3 ("htmlinclude"|"htmlonly"|"image"|"include")
-DCMD4 ("includelineno"|"internal"|"invariant")
-DCMD5 ("latexonly"|"li"|"line"|"manonly"|"name")
-DCMD6 ("note"|"par"|"paragraph"|"param"|"post")
-DCMD7 ("pre"|"remarks"|(("relate"[sd])("also")?))
-DCMD8 ("remarks"|("return"[s]?)|"retval"|"sa"|"section")
-DCMD9 ("see"|"since"|"subsection"|"subsubsection")
-DCMD10 ("throw"|"until"|"verbatim")
-DCMD11 ("verbinclude"|"version"|"warning")
-DETAILEDCMD {CMD}({DCMD1}|{DCMD2}|{DCMD3}|{DCMD4}|{DCMD5}|{DCMD6}|{DCMD7}|{DCMD8}|{DCMD9}|{DCMD10}|{DCMD11})
-XREFCMD {CMD}("bug"|"deprecated"|"test"|"todo"|"xrefitem")
-PRE [pP][rR][eE]
-TABLE [tT][aA][bB][lL][eE]
-P [pP]
-UL [uU][lL]
-OL [oO][lL]
-DL [dD][lL]
-IMG [iI][mM][gG]
-HR [hH][rR]
-PARA [pP][aA][rR][aA]
-DETAILEDHTML {PRE}|{UL}|{TABLE}|{OL}|{DL}|{P}|[Hh][1-6]|{IMG}|{HR}|{PARA}
-BN [ \t\n\r]
-BL [ \t\r]*"\n"
-B [ \t]
-BS ^(({B}*"//")?)(({B}*"*"+)?){B}*
-ATTR ({B}+[^>\n]*)?
-DOCNL "\n"|"\\_linebr"
-LC "\\"{B}*"\n"
-NW [^a-z_A-Z0-9]
-FILESCHAR [a-z_A-Z0-9\x80-\xFF\\:\\\/\-\+]
-FILEECHAR [a-z_A-Z0-9\x80-\xFF\-\+]
-FILE ({FILESCHAR}*{FILEECHAR}+("."{FILESCHAR}*{FILEECHAR}+)*)|("\""[^\n\"]*"\"")
-ID "$"?[a-z_A-Z\x80-\xFF][a-z_A-Z0-9\x80-\xFF]*
-LABELID [a-z_A-Z\x80-\xFF][a-z_A-Z0-9\x80-\xFF\-]*
-CITEID [a-z_A-Z\x80-\xFF][a-z_A-Z0-9\x80-\xFF\-:/]*
-SCOPEID {ID}({ID}*{BN}*"::"{BN}*)*({ID}?)
-SCOPENAME "$"?(({ID}?{BN}*("::"|"."){BN}*)*)((~{BN}*)?{ID})
-MAILADR [a-z_A-Z0-9.+\-]+"@"[a-z_A-Z0-9\-]+("."[a-z_A-Z0-9\-]+)+[a-z_A-Z0-9\-]+
-RCSTAG "$"{ID}":"[^\n$]+"$"
-
-%option noyywrap
-
- /* comment parsing states. */
-%x Comment
-%x PageDocArg1
-%x PageDocArg2
-%x RelatesParam1
-%x ClassDocArg1
-%x ClassDocArg2
-%x ClassDocArg3
-%x CategoryDocArg1
-%x XRefItemParam1
-%x XRefItemParam2
-%x XRefItemParam3
-%x FileDocArg1
-%x EnumDocArg1
-%x NameSpaceDocArg1
-%x PackageDocArg1
-%x GroupDocArg1
-%x GroupDocArg2
-%x SectionLabel
-%x SectionTitle
-%x SubpageLabel
-%x SubpageTitle
-%x FormatBlock
-%x LineParam
-%x GuardParam
-%x GuardParamEnd
-%x SkipGuardedSection
-%x SkipInternal
-%x NameParam
-%x InGroupParam
-%x FnParam
-%x OverloadParam
-%x InheritParam
-%x ExtendsParam
-%x ReadFormulaShort
-%x ReadFormulaLong
-%x AnchorLabel
-%x HtmlComment
-%x SkipLang
-%x CiteLabel
-%x CopyDoc
-
-%%
-
- /* What can happen in while parsing a comment block:
- * commands (e.g. @page, or \page)
- * escaped commands (e.g. @@page or \\page).
- * formulas (e.g. \f$ \f[ \f{..)
- * directories (e.g. \doxygen\src\)
- * autolist end. (e.g. a dot on an otherwise empty line)
- * newlines.
- * end of brief description due to blank line.
- * end of brief description due to some command (@command, or <command>).
- * words and whitespace and other characters (#,?!, etc).
- * grouping commands (e.g. @{ and @})
- * language switch (e.g. \~english or \~).
- * mail adress (e.g. dimitri@stack.nl).
- * quoted text, such as "foo@bar"
- * XML commands, <summary></summary><remarks></remarks>
- */
-
-<Comment>{CMD}{CMD}[a-z_A-Z]+{B}* { // escaped command
- addOutput(yytext);
- }
-<Comment>{CMD}{CMD}"~"[a-z_A-Z]* { // escaped command
- addOutput(yytext);
- }
-<Comment>{MAILADR} { // mail adress
- addOutput(yytext);
- }
-<Comment>"\""[^"\n]*"\"" { // quoted text
- addOutput(yytext);
- }
-<Comment>("\\"[a-z_A-Z]+)+"\\" { // directory (or chain of commands!)
- addOutput(yytext);
- }
-<Comment>{XREFCMD}/[^a-z_A-Z]* { // xref command
- if (inContext!=OutputXRef)
- {
- briefEndsAtDot=FALSE;
- setOutput(OutputDoc);
- }
- // continue with the same input
- REJECT;
- }
- /*
-<Comment>{DETAILEDCMD}/[^a-z_A-Z]* { // command that can end a brief description
- briefEndsAtDot=FALSE;
- setOutput(OutputDoc);
- // continue with the same input
- REJECT;
- }
- */
-<Comment>"<"{DETAILEDHTML}{ATTR}">" { // HTML command that ends a brief description
- setOutput(OutputDoc);
- // continue with the same input
- REJECT;
- }
-<Comment>"<summary>" { // start of a .NET XML style brief description
- setOutput(OutputBrief);
- }
-<Comment>"<remarks>"|"</summary>" { // start of a .NET XML style detailed description
- setOutput(OutputDoc);
- }
-<Comment>"</remarks>" { // end of a brief or detailed description
- }
-<Comment>{RCSTAG} { // RCS tag which end a brief description
- setOutput(OutputDoc);
- REJECT;
- }
-<Comment>"<!--" {
- BEGIN(HtmlComment);
- }
-<Comment>{B}*{CMD}"endinternal"{B}* {
- warn(yyFileName,yyLineNr,
- "warning: found \\endinternal without matching \\internal"
- );
- }
-<Comment>{B}*{CMD}[a-z_A-Z]+{B}* { // potentially interesting command
- // the {B}* in the front was added for bug620924
- QCString cmdName = QCString(yytext).stripWhiteSpace().data()+1;
- DocCmdMapper::Cmd *cmdPtr = DocCmdMapper::map(cmdName);
- g_spaceBeforeCmd = yytext[0]==' ' || yytext[0]=='\t';
- if (cmdPtr) // special action is required
- {
- if (cmdPtr->endsBrief)
- {
- briefEndsAtDot=FALSE;
- // this command forces the end of brief description
- setOutput(OutputDoc);
- }
- if (cmdPtr->func && cmdPtr->func(cmdName))
- {
- // implicit split of the comment block into two
- // entries. Restart the next block at the start
- // of this command.
- parseMore=TRUE;
-
- // yuk, this is probably not very portable across lex implementations,
- // but we need to know the position in the input buffer where this
- // rule matched.
- // for flex 2.5.33+ we should use YY_CURRENT_BUFFER_LVALUE
-#if YY_FLEX_MINOR_VERSION>=5 && YY_FLEX_SUBMINOR_VERSION>=33
- inputPosition=prevPosition + yy_bp - YY_CURRENT_BUFFER_LVALUE->yy_ch_buf;
-#else
- inputPosition=prevPosition + yy_bp - yy_current_buffer->yy_ch_buf;
-#endif
- yyterminate();
- }
- else if (cmdPtr->func==0)
- {
- // command without handler, to be processed
- // later by parsedoc.cpp
- addOutput(yytext);
- }
- }
- else // command not relevant
- {
- addOutput(yytext);
- }
- }
-<Comment>{B}*("\\\\"|"@@")"f"[$\[{] { // escaped formula command
- addOutput(yytext);
- }
-<Comment>{B}*{CMD}"~"[a-z_A-Z]* { // language switch command
- QCString langId = QString(yytext).stripWhiteSpace().data()+2;
- if (!langId.isEmpty() &&
- stricmp(Config_getEnum("OUTPUT_LANGUAGE"),langId)!=0)
- { // enable language specific section
- BEGIN(SkipLang);
- }
- }
-<Comment>{B}*{CMD}"f{"[^}\n]+"}"("{"?) { // start of a formula with custom environment
- formulaText="\\begin";
- formulaEnv=QString(yytext).stripWhiteSpace().data()+2;
- if (formulaEnv.at(formulaEnv.length()-1)=='{')
- {
- // remove trailing open brace
- formulaEnv=formulaEnv.left(formulaEnv.length()-1);
- }
- formulaText+=formulaEnv;
- formulaNewLines=0;
- BEGIN(ReadFormulaLong);
- }
-<Comment>{B}*{CMD}"f$" { // start of a inline formula
- formulaText="$";
- formulaNewLines=0;
- BEGIN(ReadFormulaShort);
- }
-<Comment>{B}*{CMD}"f[" { // start of a block formula
- formulaText="\\[";
- formulaNewLines=0;
- BEGIN(ReadFormulaLong);
- }
-<Comment>{B}*{CMD}"{" { // begin of a group
- //langParser->handleGroupStartCommand(g_memberGroupHeader);
- openGroup(current,yyFileName,yyLineNr);
- }
-<Comment>{B}*{CMD}"}" { // end of a group
- //langParser->handleGroupEndCommand();
- closeGroup(current,yyFileName,yyLineNr,TRUE);
- g_memberGroupHeader.resize(0);
- parseMore=TRUE;
- needNewEntry = TRUE;
-#if YY_FLEX_MINOR_VERSION>=5 && YY_FLEX_SUBMINOR_VERSION>=33
- inputPosition=prevPosition + yy_bp - YY_CURRENT_BUFFER_LVALUE->yy_ch_buf + strlen(yytext);
-#else
- inputPosition=prevPosition + yy_bp - yy_current_buffer->yy_ch_buf + strlen(yytext);
-#endif
- yyterminate();
- }
-<Comment>{B}*{CMD}[$@\\&~<>#%] { // escaped character
- addOutput(yytext);
- }
-<Comment>[a-z_A-Z]+ { // normal word
- addOutput(yytext);
- }
-<Comment>^{B}*"."{B}*/\n { // explicit end autolist: e.g " ."
- addOutput(yytext);
- }
-<Comment>^{B}*[1-9][0-9]*"."{B}+ |
-<Comment>^{B}*[*+]{B}+ { // start of autolist
- if (!Doxygen::markdownSupport)
- {
- REJECT;
- }
- else
- {
- if (inContext!=OutputXRef)
- {
- briefEndsAtDot=FALSE;
- setOutput(OutputDoc);
- }
- addOutput(yytext);
- }
- }
-<Comment>^{B}*"-"{B}+ { // start of autolist
- if (inContext!=OutputXRef)
- {
- briefEndsAtDot=FALSE;
- setOutput(OutputDoc);
- }
- addOutput(yytext);
- }
-<Comment>("."+)[a-z_A-Z0-9\)] { // . at start or in the middle of a word, or ellipsis
- addOutput(yytext);
- }
-<Comment>".\\"[ \t] { // . with escaped space.
- addOutput(yytext[0]);
- addOutput(yytext[2]);
- }
-<Comment>".," { // . with comma such as "e.g.,"
- addOutput(yytext);
- }
-<Comment>"...\\"[ \t] { // ellipsis with escaped space.
- addOutput("... ");
- }
-<Comment>".."[\.]?/[^ \t\n] { // internal ellipsis
- addOutput(yytext);
- }
-<Comment>(\n|\\_linebr)({B}*(\n|\\_linebr))+ { // at least one blank line (or blank line command)
- if (inContext==OutputXRef)
- {
- // see bug 613024, we need to put the newlines after ending the XRef section.
- setOutput(OutputDoc);
- addOutput("\n\n");
- }
- else if (inContext!=OutputBrief)
- {
- addOutput("\n\n");
- setOutput(OutputDoc);
- }
- else // inContext==OutputBrief
- { // only go to the detailed description if we have
- // found some brief description and not just whitespace
- endBrief(FALSE);
- }
- lineCount();
- }
-<Comment>"." { // potential end of a JavaDoc style comment
- addOutput(*yytext);
- if (briefEndsAtDot)
- {
- setOutput(OutputDoc);
- briefEndsAtDot=FALSE;
- }
- }
-<Comment>\n { // newline
- addOutput(*yytext);
- yyLineNr++;
- }
-<Comment>. { // catch-all for anything else
- addOutput(*yytext);
- }
-
-
- /* -------------- Rules for handling HTML comments ----------- */
-
-<HtmlComment>"--"[!]?">"{B}* { BEGIN( Comment ); }
-<HtmlComment>{DOCNL} {
- if (*yytext=='\n') yyLineNr++;
- }
-<HtmlComment>[^\\\n\-]+ { // ignore unimportant characters
- }
-<HtmlComment>. { // ignore every else
- }
-
- /* -------------- Rules for handling formulas ---------------- */
-
-<ReadFormulaShort>{CMD}"f$" { // end of inline formula
- formulaText+="$";
- addOutput(" "+addFormula());
- BEGIN(Comment);
- }
-<ReadFormulaLong>{CMD}"f]" { // end of block formula
- formulaText+="\\]";
- addOutput(" "+addFormula());
- BEGIN(Comment);
- }
-<ReadFormulaLong>{CMD}"f}" { // end of custom env formula
- formulaText+="\\end";
- formulaText+=formulaEnv;
- addOutput(" "+addFormula());
- BEGIN(Comment);
- }
-<ReadFormulaLong,ReadFormulaShort>[^\\@\n]+ { // any non-special character
- formulaText+=yytext;
- }
-<ReadFormulaLong,ReadFormulaShort>\n { // new line
- formulaNewLines++;
- formulaText+=*yytext;
- yyLineNr++;
- }
-<ReadFormulaLong,ReadFormulaShort>. { // any othe character
- formulaText+=*yytext;
- }
-
- /* ------------ handle argument of enum command --------------- */
-
-<EnumDocArg1>{SCOPEID} { // handle argument
- current->name = yytext;
- BEGIN( Comment );
- }
-<EnumDocArg1>{LC} { // line continuation
- yyLineNr++;
- addOutput('\n');
- }
-<EnumDocArg1>{DOCNL} { // missing argument
- warn(yyFileName,yyLineNr,
- "warning: missing argument after \\enum."
- );
- addOutput('\n');
- if (*yytext=='\n') yyLineNr++;
- BEGIN( Comment );
- }
-<EnumDocArg1>. { // ignore other stuff
- }
-
- /* ------------ handle argument of namespace command --------------- */
-
-<NameSpaceDocArg1>{SCOPENAME} { // handle argument
- current->name = substitute(yytext,".","::");
- BEGIN( Comment );
- }
-<NameSpaceDocArg1>{LC} { // line continuation
- yyLineNr++;
- addOutput('\n');
- }
-<NameSpaceDocArg1>{DOCNL} { // missing argument
- warn(yyFileName,yyLineNr,
- "warning: missing argument after "
- "\\namespace."
- );
- addOutput('\n');
- if (*yytext=='\n') yyLineNr++;
- BEGIN( Comment );
- }
-<NameSpaceDocArg1>. { // ignore other stuff
- }
-
- /* ------------ handle argument of package command --------------- */
-
-<PackageDocArg1>{ID}("."{ID})* { // handle argument
- current->name = yytext;
- BEGIN( Comment );
- }
-<PackageDocArg1>{LC} { // line continuation
- yyLineNr++;
- addOutput('\n');
- }
-<PackageDocArg1>{DOCNL} { // missing argument
- warn(yyFileName,yyLineNr,
- "warning: missing argument after "
- "\\package."
- );
- addOutput('\n');
- if (*yytext=='\n') yyLineNr++;
- BEGIN( Comment );
- }
-<PackageDocArg1>. { // ignore other stuff
- }
-
- /* ------ handle argument of class/struct/union command --------------- */
-
-<ClassDocArg1>{SCOPENAME} { // first argument
- current->name = substitute(yytext,".","::");
- if (current->section==Entry::PROTOCOLDOC_SEC)
- {
- current->name+="-p";
- }
- // prepend outer scope name
- BEGIN( ClassDocArg2 );
- }
-<CategoryDocArg1>{SCOPENAME}{B}*"("[^\)]+")" {
- current->name = substitute(yytext,".","::");
- BEGIN( ClassDocArg2 );
- }
-<ClassDocArg1,CategoryDocArg1>{LC} { // line continuation
- yyLineNr++;
- addOutput('\n');
- }
-<ClassDocArg1,CategoryDocArg1>{DOCNL} {
- warn(yyFileName,yyLineNr,
- "warning: missing argument after "
- "\\%s.",YY_START==ClassDocArg1?"class":"category"
- );
- addOutput('\n');
- if (*yytext=='\n') yyLineNr++;
- BEGIN( Comment );
- }
-<ClassDocArg1,CategoryDocArg1>. { // ignore other stuff
- }
-
-<ClassDocArg2>{FILE}|"<>" { // second argument; include file
- current->includeFile = yytext;
- BEGIN( ClassDocArg3 );
- }
-<ClassDocArg2>{LC} { // line continuation
- yyLineNr++;
- addOutput('\n');
- }
-<ClassDocArg2>{DOCNL} {
- addOutput('\n');
- if (*yytext=='\n') yyLineNr++;
- BEGIN( Comment );
- }
-<ClassDocArg2>. { // ignore other stuff
- }
-
-<ClassDocArg3>[<]?{FILE}?[>]? { // third argument; include file name
- current->includeName = yytext;
- BEGIN( Comment );
- }
-<ClassDocArg3>{LC} { // line continuation
- yyLineNr++;
- addOutput('\n');
- }
-<ClassDocArg3>{DOCNL} {
- if (*yytext=='\n') yyLineNr++;
- BEGIN( Comment );
- }
-<ClassDocArg3>. { // ignore other stuff
- }
-
- /* --------- handle arguments of {def,add,weak}group commands --------- */
-
-<GroupDocArg1>{LABELID}(".html"?) { // group name
- current->name = yytext;
- //lastDefGroup.groupname = yytext;
- //lastDefGroup.pri = current->groupingPri();
- // the .html stuff is for Qt compatibility
- if (current->name.right(5)==".html")
- {
- current->name=current->name.left(current->name.length()-5);
- }
- current->type.resize(0);
- BEGIN(GroupDocArg2);
- }
-<GroupDocArg1>"\\"{B}*"\n" { // line continuation
- yyLineNr++;
- addOutput('\n');
- }
-<GroupDocArg1>{DOCNL} { // missing argument!
- warn(yyFileName,yyLineNr,
- "warning: missing group name after %s",
- current->groupDocCmd()
- );
- addOutput('\n');
- if (*yytext=='\n') yyLineNr++;
- BEGIN( Comment );
- }
-<GroupDocArg2>"\\"{B}*"\n" { // line continuation
- yyLineNr++;
- addOutput('\n');
- }
-<GroupDocArg2>[^\n\\\*]+ { // title (stored in type)
- current->type += yytext;
- current->type = current->type.stripWhiteSpace();
- }
-<GroupDocArg2>{DOCNL} {
- if ( current->groupDocType==Entry::GROUPDOC_NORMAL &&
- current->type.isEmpty()
- ) // defgroup requires second argument
- {
- warn(yyFileName,yyLineNr,
- "warning: missing title after "
- "\\defgroup %s", current->name.data()
- );
- }
- if (*yytext=='\n') yyLineNr++;
- addOutput('\n');
- BEGIN( Comment );
- }
-
- /* --------- handle arguments of page/mainpage command ------------------- */
-
-<PageDocArg1>{FILE} { // first argument; page name
- current->name = stripQuotes(yytext);
- BEGIN( PageDocArg2 );
- }
-<PageDocArg1>{LC} { yyLineNr++;
- addOutput('\n');
- }
-<PageDocArg1>{DOCNL} {
- warn(yyFileName,yyLineNr,
- "warning: missing argument after "
- "\\page."
- );
- if (*yytext=='\n') yyLineNr++;
- addOutput('\n');
- BEGIN( Comment );
- }
-<PageDocArg1>. { // ignore other stuff
- }
-<PageDocArg2>.*"\n" { // second argument; page title
- yyLineNr++;
- current->args = yytext;
- addOutput('\n');
- BEGIN( Comment );
- }
-
- /* --------- handle arguments of the file/dir/example command ------------ */
-
-<FileDocArg1>{DOCNL} { // no file name specfied
- if (*yytext=='\n') yyLineNr++;
- addOutput('\n');
- BEGIN( Comment );
- }
-<FileDocArg1>{FILE} { // first argument; name
- current->name = stripQuotes(yytext);
- BEGIN( Comment );
- }
-<FileDocArg1>{LC} { yyLineNr++;
- addOutput('\n');
- }
-<FileDocArg1>. { // ignore other stuff
- }
-
- /* --------- handle arguments of the xrefitem command ------------ */
-
-<XRefItemParam1>{LABELID} { // first argument
- newXRefItemKey=yytext;
- setOutput(OutputXRef);
- BEGIN(XRefItemParam2);
- }
-<XRefItemParam1>{LC} { // line continuation
- yyLineNr++;
- addOutput('\n');
- }
-<XRefItemParam1>{DOCNL} { // missing arguments
- warn(yyFileName,yyLineNr,
- "warning: Missing first argument of \\xrefitem"
- );
- if (*yytext=='\n') yyLineNr++;
- addOutput('\n');
- inContext = OutputDoc;
- BEGIN( Comment );
- }
-<XRefItemParam1>. { // ignore other stuff
- }
-
-<XRefItemParam2>"\""[^\n\"]*"\"" { // second argument
- xrefItemTitle = stripQuotes(yytext);
- BEGIN(XRefItemParam3);
- }
-<XRefItemParam2>{LC} { // line continuation
- yyLineNr++;
- addOutput('\n');
- }
-<XRefItemParam2>{DOCNL} { // missing argument
- warn(yyFileName,yyLineNr,
- "warning: Missing second argument of \\xrefitem"
- );
- if (*yytext=='\n') yyLineNr++;
- addOutput('\n');
- inContext = OutputDoc;
- BEGIN( Comment );
- }
-<XRefItemParam2>. { // ignore other stuff
- }
-
-<XRefItemParam3>"\""[^\n\"]*"\"" { // third argument
- xrefListTitle = stripQuotes(yytext);
- xrefKind = XRef_Item;
- BEGIN( Comment );
- }
-<XRefItemParam2,XRefItemParam3>{LC} { // line continuation
- yyLineNr++;
- addOutput('\n');
- }
-<XRefItemParam3>{DOCNL} { // missing argument
- warn(yyFileName,yyLineNr,
- "warning: Missing third argument of \\xrefitem"
- );
- if (*yytext=='\n') yyLineNr++;
- addOutput('\n');
- inContext = OutputDoc;
- BEGIN( Comment );
- }
-<XRefItemParam3>. { // ignore other stuff
- }
-
-
- /* ----- handle arguments of the relates(also)/memberof command ------- */
-
-<RelatesParam1>({ID}("::"|"."))*{ID} { // argument
- current->relates = yytext;
- //if (current->mGrpId!=DOX_NOGROUP)
- //{
- // memberGroupRelates = yytext;
- //}
- BEGIN( Comment );
- }
-<RelatesParam1>{LC} { // line continuation
- yyLineNr++;
- addOutput('\n');
- }
-<RelatesParam1>{DOCNL} { // missing argument
- warn(yyFileName,yyLineNr,
- "warning: Missing argument of \\relates or \\memberof command"
- );
- if (*yytext=='\n') yyLineNr++;
- addOutput('\n');
- BEGIN( Comment );
- }
-<RelatesParam1>. { // ignore other stuff
- }
-
-
- /* ----- handle arguments of the relates(also)/addindex commands ----- */
-
-<LineParam>{DOCNL} { // end of argument
- if (*yytext=='\n') yyLineNr++;
- addOutput('\n');
- BEGIN( Comment );
- }
-<LineParam>{LC} { // line continuation
- yyLineNr++;
- addOutput('\n');
- }
-<LineParam>. { // ignore other stuff
- addOutput(*yytext);
- }
-
- /* ----- handle arguments of the section/subsection/.. commands ------- */
-
-<SectionLabel>{LABELID} { // first argyment
- g_sectionLabel=yytext;
- addOutput(yytext);
- g_sectionTitle.resize(0);
- BEGIN(SectionTitle);
- }
-<SectionLabel>{DOCNL} { // missing argument
- warn(yyFileName,yyLineNr,
- "warning: \\section command has no label"
- );
- if (*yytext=='\n') yyLineNr++;
- addOutput('\n');
- BEGIN( Comment );
- }
-<SectionLabel>. { // invalid character for section label
- warn(yyFileName,yyLineNr,
- "warning: Invalid or missing section label"
- );
- BEGIN(Comment);
- }
-<SectionTitle>[^\n@\\*]*/"\n" { // end of section title
- addSection();
- addOutput(yytext);
- BEGIN( Comment );
- }
-<SectionTitle>[^\n@\\]*/"\\_linebr" { // end of section title
- addSection();
- addOutput(yytext);
- BEGIN( Comment );
- }
-<SectionTitle>{LC} { // line continuation
- yyLineNr++;
- addOutput('\n');
- }
-<SectionTitle>[^\n@\\]* { // any character without special meaning
- g_sectionTitle+=yytext;
- addOutput(yytext);
- }
-<SectionTitle>("\\\\"|"@@"){ID} { // unescape escaped command
- g_sectionTitle+=&yytext[1];
- addOutput(yytext);
- }
-<SectionTitle>{CMD}[$@\\&~<>#%] { // unescape escaped character
- g_sectionTitle+=yytext[1];
- addOutput(yytext);
- }
-<SectionTitle>. { // anything else
- g_sectionTitle+=yytext;
- addOutput(*yytext);
- }
-
- /* ----- handle arguments of the subpage command ------- */
-
-<SubpageLabel>{LABELID} { // first argument
- addOutput(yytext);
- // we add subpage labels as a kind of "inheritance" relation to prevent
- // needing to add another list to the Entry class.
- current->extends->append(new BaseInfo(yytext,Public,Normal));
- BEGIN(SubpageTitle);
- }
-<SubpageLabel>{DOCNL} { // missing argument
- warn(yyFileName,yyLineNr,
- "warning: \\subpage command has no label"
- );
- if (*yytext=='\n') yyLineNr++;
- addOutput('\n');
- BEGIN( Comment );
- }
-<SubpageTitle>{DOCNL} { // no title, end command
- addOutput(yytext);
- BEGIN( Comment );
- }
-<SubpageTitle>[ \t]*"\""[^\"\n]*"\"" { // add title, end of command
- addOutput(yytext);
- BEGIN( Comment );
- }
-<SubpageTitle>. { // no title, end of command
- unput(*yytext);
- BEGIN( Comment );
- }
-
- /* ----- handle arguments of the anchor command ------- */
-
-<AnchorLabel>{LABELID} { // found argument
- SectionInfo *si = new SectionInfo(yyFileName,yytext,0,SectionInfo::Anchor,0);
- Doxygen::sectionDict.append(yytext,si);
- current->anchors->append(si);
- addOutput(yytext);
- BEGIN( Comment );
- }
-<AnchorLabel>{DOCNL} { // missing argument
- warn(yyFileName,yyLineNr,
- "warning: \\anchor command has no label"
- );
- if (*yytext=='\n') yyLineNr++;
- addOutput('\n');
- BEGIN( Comment );
- }
-<AnchorLabel>. { // invalid character for anchor label
- warn(yyFileName,yyLineNr,
- "warning: Invalid or missing anchor label"
- );
- BEGIN(Comment);
- }
-
-
- /* ----- handle arguments of the preformatted block commands ------- */
-
-<FormatBlock>{CMD}("endverbatim"|"endlatexonly"|"endhtmlonly"|"endxmlonly"|"endrtfonly"|"endmanonly"|"enddot"|"endcode"|"endmsc")/{NW} { // possible ends
- addOutput(yytext);
- if (&yytext[4]==blockName) // found end of the block
- {
- BEGIN(Comment);
- }
- }
-<FormatBlock>[^ \@\*\/\\\n]* { // some word
- addOutput(yytext);
- }
-<FormatBlock>{DOCNL} { // new line
- if (*yytext=='\n') yyLineNr++;
- addOutput('\n');
- }
-<FormatBlock>"/*" { // start of a C-comment
- g_commentCount++;
- addOutput(yytext);
- }
-<FormatBlock>"*/" { // end of a C-comment
- addOutput(yytext);
- g_commentCount--;
- if (g_commentCount<0 && blockName!="verbatim")
- {
- warn(yyFileName,yyLineNr,
- "warning: found */ without matching /* while inside a \\%s block! Perhaps a missing \\end%s?\n",blockName.data(),blockName.data());
- }
- }
-<FormatBlock>. {
- addOutput(*yytext);
- }
-<FormatBlock><<EOF>> {
- warn(yyFileName,yyLineNr,
- "warning: reached end of comment while inside a @%s block; check for missing @end%s tag!",
- blockName.data(),blockName.data()
- );
- yyterminate();
- }
-
- /* ----- handle arguments of if/ifnot commands ------- */
-
-<GuardParam>{LABELID} { // parameter of if/ifnot guard
- bool sectionEnabled = Config_getList("ENABLED_SECTIONS").find(yytext)!=-1;
- bool parentEnabled = TRUE;
- if (!guards.isEmpty()) parentEnabled = guards.top()->isEnabled();
- if (parentEnabled)
- {
- if (
- (sectionEnabled && guardType==Guard_If) ||
- (!sectionEnabled && guardType==Guard_IfNot)
- ) // section is visible
- {
- guards.push(new GuardedSection(TRUE,TRUE));
- enabledSectionFound=TRUE;
- BEGIN( GuardParamEnd );
- }
- else // section is invisible
- {
- if (guardType!=Guard_Skip)
- {
- guards.push(new GuardedSection(FALSE,TRUE));
- }
- BEGIN( SkipGuardedSection );
- }
- }
- else // invisible because of parent
- {
- guards.push(new GuardedSection(FALSE,FALSE));
- BEGIN( SkipGuardedSection );
- }
- }
-<GuardParam>{DOCNL} { // end of argument
- if (*yytext=='\n') yyLineNr++;
- //next line is commented out due to bug620924
- //addOutput('\n');
- BEGIN( Comment );
- }
-<GuardParam>{LC} { // line continuation
- yyLineNr++;
- addOutput('\n');
- }
-<GuardParam>. { // ignore other stuff
- addOutput(*yytext);
- }
-<GuardParamEnd>{B}*{DOCNL} {
- g_spaceBeforeIf=FALSE;
- BEGIN(Comment);
- }
-<GuardParamEnd>{B}* {
- if (g_spaceBeforeIf) // needed for 665313 in combation with bug620924
- {
- addOutput(" ");
- }
- g_spaceBeforeIf=FALSE;
- BEGIN(Comment);
- }
-<GuardParamEnd>. {
- unput(*yytext);
- BEGIN(Comment);
- }
-
- /* ----- handle skipping of conditional sections ------- */
-
-<SkipGuardedSection>{CMD}"ifnot"/{NW} {
- guardType = Guard_IfNot;
- BEGIN( GuardParam );
- }
-<SkipGuardedSection>{CMD}"if"/{NW} {
- guardType = Guard_If;
- BEGIN( GuardParam );
- }
-<SkipGuardedSection>{CMD}"endif"/{NW} {
- if (guards.isEmpty())
- {
- warn(yyFileName,yyLineNr,
- "warning: found @endif without matching start command");
- }
- else
- {
- delete guards.pop();
- BEGIN( GuardParamEnd );
- }
- }
-<SkipGuardedSection>{CMD}"else"/{NW} {
- if (guards.isEmpty())
- {
- warn(yyFileName,yyLineNr,
- "warning: found @else without matching start command");
- }
- else
- {
- if (!enabledSectionFound && guards.top()->parentVisible())
- {
- delete guards.pop();
- guards.push(new GuardedSection(TRUE,TRUE));
- enabledSectionFound=TRUE;
- BEGIN( GuardParamEnd );
- }
- }
- }
-<SkipGuardedSection>{CMD}"elseif"/{NW} {
- if (guards.isEmpty())
- {
- warn(yyFileName,yyLineNr,
- "warning: found @elseif without matching start command");
- }
- else
- {
- if (!enabledSectionFound && guards.top()->parentVisible())
- {
- delete guards.pop();
- BEGIN( GuardParam );
- }
- }
- }
-<SkipGuardedSection>{DOCNL} { // skip line
- if (*yytext=='\n') yyLineNr++;
- //addOutput('\n');
- }
-<SkipGuardedSection>[^ \\@\n]+ { // skip non-special characters
- }
-<SkipGuardedSection>. { // any other character
- }
-
-
- /* ----- handle skipping of internal section ------- */
-
-<SkipInternal>{DOCNL} { // skip line
- if (*yytext=='\n') yyLineNr++;
- addOutput('\n');
- }
-<SkipInternal>[@\\]"if"/[ \t] {
- g_condCount++;
- }
-<SkipInternal>[@\\]"ifnot"/[ \t] {
- g_condCount++;
- }
-<SkipInternal>[@\\]/"endif" {
- g_condCount--;
- if (g_condCount<0) // handle conditional section around of \internal, see bug607743
- {
- unput('\\');
- BEGIN(Comment);
- }
- }
-<SkipInternal>[@\\]/"section"[ \t] {
- if (g_sectionLevel>0)
- {
- unput('\\');
- BEGIN(Comment);
- }
- }
-<SkipInternal>[@\\]/"subsection"[ \t] {
- if (g_sectionLevel>1)
- {
- unput('\\');
- BEGIN(Comment);
- }
- }
-<SkipInternal>[@\\]/"subsubsection"[ \t] {
- if (g_sectionLevel>2)
- {
- unput('\\');
- BEGIN(Comment);
- }
- }
-<SkipInternal>[@\\]/"paragraph"[ \t] {
- if (g_sectionLevel>3)
- {
- unput('\\');
- BEGIN(Comment);
- }
- }
-<SkipInternal>[@\\]"endinternal"[ \t]* {
- BEGIN(Comment);
- }
-<SkipInternal>[^ \\@\n]+ { // skip non-special characters
- }
-<SkipInternal>. { // any other character
- }
-
-
- /* ----- handle argument of name command ------- */
-
-<NameParam>{DOCNL} { // end of argument
- if (*yytext=='\n') yyLineNr++;
- addOutput('\n');
- BEGIN( Comment );
- }
-<NameParam>{LC} { // line continuation
- yyLineNr++;
- addOutput('\n');
- g_memberGroupHeader+=' ';
- }
-<NameParam>. { // ignore other stuff
- g_memberGroupHeader+=*yytext;
- current->name+=*yytext;
- }
-
- /* ----- handle argument of ingroup command ------- */
-
-<InGroupParam>{LABELID} { // group id
- current->groups->append(
- new Grouping(yytext, Grouping::GROUPING_INGROUP)
- );
- inGroupParamFound=TRUE;
- }
-<InGroupParam>{DOCNL} { // missing argument
- if (!inGroupParamFound)
- {
- warn(yyFileName,yyLineNr,
- "warning: Missing group name for \\ingroup command"
- );
- }
- if (*yytext=='\n') yyLineNr++;
- addOutput('\n');
- BEGIN( Comment );
- }
-<InGroupParam>{LC} { // line continuation
- yyLineNr++;
- addOutput('\n');
- }
-<InGroupParam>. { // ignore other stuff
- addOutput(*yytext);
- }
-
- /* ----- handle argument of fn command ------- */
-
-<FnParam>{DOCNL} { // end of argument
- if (braceCount==0)
- {
- if (*yytext=='\n') yyLineNr++;
- addOutput('\n');
- langParser->parsePrototype(functionProto);
- BEGIN( Comment );
- }
- }
-<FnParam>{LC} { // line continuation
- yyLineNr++;
- functionProto+=' ';
- }
-<FnParam>[^@\\\n()]+ { // non-special characters
- functionProto+=yytext;
- }
-<FnParam>"(" {
- functionProto+=yytext;
- braceCount++;
- }
-<FnParam>")" {
- functionProto+=yytext;
- braceCount--;
- }
-<FnParam>. { // add other stuff
- functionProto+=*yytext;
- }
-
-
- /* ----- handle argument of overload command ------- */
-
-
-<OverloadParam>{DOCNL} { // end of argument
- if (*yytext=='\n') yyLineNr++;
- addOutput('\n');
- if (functionProto.stripWhiteSpace().isEmpty())
- { // plain overload command
- addOutput(getOverloadDocs());
- }
- else // overload declaration
- {
- makeStructuralIndicator(Entry::OVERLOADDOC_SEC);
- langParser->parsePrototype(functionProto);
- }
- BEGIN( Comment );
- }
-<OverloadParam>{LC} { // line continuation
- yyLineNr++;
- functionProto+=' ';
- }
-<OverloadParam>. { // add other stuff
- functionProto+=*yytext;
- }
-
- /* ----- handle argument of inherit command ------- */
-
-<InheritParam>({ID}("::"|"."))*{ID} { // found argument
- current->extends->append(
- new BaseInfo(removeRedundantWhiteSpace(yytext),Public,Normal)
- );
- BEGIN( Comment );
- }
-<InheritParam>{DOCNL} { // missing argument
- warn(yyFileName,yyLineNr,
- "warning: \\inherit command has no argument"
- );
- if (*yytext=='\n') yyLineNr++;
- addOutput('\n');
- BEGIN( Comment );
- }
-<InheritParam>. { // invalid character for anchor label
- warn(yyFileName,yyLineNr,
- "warning: Invalid or missing name for \\inherit command"
- );
- BEGIN(Comment);
- }
-
- /* ----- handle argument of extends and implements commands ------- */
-
-<ExtendsParam>({ID}("::"|"."))*{ID} { // found argument
- current->extends->append(
- new BaseInfo(removeRedundantWhiteSpace(yytext),Public,Normal)
- );
- BEGIN( Comment );
- }
-<ExtendsParam>{DOCNL} { // missing argument
- warn(yyFileName,yyLineNr,
- "warning: \\extends or \\implements command has no argument"
- );
- if (*yytext=='\n') yyLineNr++;
- addOutput('\n');
- BEGIN( Comment );
- }
-<ExtendsParam>. { // ignore other stuff
- }
-
- /* ----- handle language specific sections ------- */
-
-<SkipLang>[\\@]"~"[a-zA-Z]* { /* language switch */
- QCString langId = &yytext[2];
- if (langId.isEmpty() ||
- stricmp(Config_getEnum("OUTPUT_LANGUAGE"),langId)==0)
- { // enable language specific section
- BEGIN(Comment);
- }
- }
-<SkipLang>[^*@\\\n]* { /* any character not a *, @, backslash or new line */
- }
-<SkipLang>{DOCNL} { /* new line in verbatim block */
- if (*yytext=='\n') yyLineNr++;
- }
-<SkipLang>. { /* any other character */
- }
-
- /* ----- handle arguments of the cite command ------- */
-
-<CiteLabel>{CITEID} { // found argyment
- addCite();
- addOutput(yytext);
- BEGIN(Comment);
- }
-<CiteLabel>{DOCNL} { // missing argument
- warn(yyFileName,yyLineNr,
- "warning: \\cite command has no label"
- );
- if (*yytext=='\n') yyLineNr++;
- addOutput('\n');
- BEGIN( Comment );
- }
-<CiteLabel>. { // invalid character for cite label
- warn(yyFileName,yyLineNr,
- "warning: Invalid or missing cite label"
- );
- BEGIN(Comment);
- }
-
- /* ----- handle argument of the copydoc command ------- */
-
-<CopyDoc><<EOF>> |
-<CopyDoc>{DOCNL} {
- if (*yytext=='\n') yyLineNr++;
- addOutput('\n');
- setOutput(OutputDoc);
- addOutput("\\copydetails ");
- addOutput(g_copyDocArg);
- addOutput("\n");
- BEGIN(Comment);
- }
-<CopyDoc>[^\n\\]+ {
- g_copyDocArg+=yytext;
- addOutput(yytext);
- }
-<CopyDoc>. {
- g_copyDocArg+=yytext;
- addOutput(yytext);
- }
-
-
-%%
-
-//----------------------------------------------------------------------------
-
-static bool handleBrief(const QCString &)
-{
- //printf("handleBrief\n");
- setOutput(OutputBrief);
- return FALSE;
-}
-
-static bool handleFn(const QCString &)
-{
- bool stop=makeStructuralIndicator(Entry::MEMBERDOC_SEC);
- functionProto.resize(0);
- braceCount=0;
- BEGIN(FnParam);
- return stop;
-}
-
-static bool handleDef(const QCString &)
-{
- bool stop=makeStructuralIndicator(Entry::DEFINEDOC_SEC);
- functionProto.resize(0);
- BEGIN(FnParam);
- return stop;
-}
-
-static bool handleOverload(const QCString &)
-{
- functionProto.resize(0);
- BEGIN(OverloadParam);
- return FALSE;
-}
-
-static bool handleEnum(const QCString &)
-{
- bool stop=makeStructuralIndicator(Entry::ENUMDOC_SEC);
- BEGIN(EnumDocArg1);
- return stop;
-}
-
-static bool handleDefGroup(const QCString &)
-{
- bool stop=makeStructuralIndicator(Entry::GROUPDOC_SEC);
- current->groupDocType = Entry::GROUPDOC_NORMAL;
- BEGIN( GroupDocArg1 );
- return stop;
-}
-
-static bool handleAddToGroup(const QCString &)
-{
- bool stop=makeStructuralIndicator(Entry::GROUPDOC_SEC);
- current->groupDocType = Entry::GROUPDOC_ADD;
- BEGIN( GroupDocArg1 );
- return stop;
-}
-
-static bool handleWeakGroup(const QCString &)
-{
- bool stop=makeStructuralIndicator(Entry::GROUPDOC_SEC);
- current->groupDocType = Entry::GROUPDOC_WEAK;
- BEGIN( GroupDocArg1 );
- return stop;
-}
-
-static bool handleNamespace(const QCString &)
-{
- bool stop=makeStructuralIndicator(Entry::NAMESPACEDOC_SEC);
- BEGIN( NameSpaceDocArg1 );
- return stop;
-}
-
-static bool handlePackage(const QCString &)
-{
- bool stop=makeStructuralIndicator(Entry::PACKAGEDOC_SEC);
- BEGIN( PackageDocArg1 );
- return stop;
-}
-
-static bool handleClass(const QCString &)
-{
- bool stop=makeStructuralIndicator(Entry::CLASSDOC_SEC);
- BEGIN( ClassDocArg1 );
- return stop;
-}
-
-static bool handleHeaderFile(const QCString &)
-{
- BEGIN( ClassDocArg2 );
- return FALSE;
-}
-
-static bool handleProtocol(const QCString &)
-{ // Obj-C protocol
- bool stop=makeStructuralIndicator(Entry::PROTOCOLDOC_SEC);
- BEGIN( ClassDocArg1 );
- return stop;
-}
-
-static bool handleCategory(const QCString &)
-{ // Obj-C category
- bool stop=makeStructuralIndicator(Entry::CATEGORYDOC_SEC);
- BEGIN( CategoryDocArg1 );
- return stop;
-}
-
-static bool handleUnion(const QCString &)
-{
- bool stop=makeStructuralIndicator(Entry::UNIONDOC_SEC);
- BEGIN( ClassDocArg1 );
- return stop;
-}
-
-static bool handleStruct(const QCString &)
-{
- bool stop=makeStructuralIndicator(Entry::STRUCTDOC_SEC);
- BEGIN( ClassDocArg1 );
- return stop;
-}
-
-static bool handleInterface(const QCString &)
-{
- bool stop=makeStructuralIndicator(Entry::INTERFACEDOC_SEC);
- BEGIN( ClassDocArg1 );
- return stop;
-}
-
-static bool handleIdlException(const QCString &)
-{
- bool stop=makeStructuralIndicator(Entry::EXCEPTIONDOC_SEC);
- BEGIN( ClassDocArg1 );
- return stop;
-}
-
-static bool handlePage(const QCString &)
-{
- bool stop=makeStructuralIndicator(Entry::PAGEDOC_SEC);
- BEGIN( PageDocArg1 );
- return stop;
-}
-
-static bool handleMainpage(const QCString &)
-{
- bool stop=makeStructuralIndicator(Entry::MAINPAGEDOC_SEC);
- if (!stop)
- {
- current->name = "mainpage";
- }
- BEGIN( PageDocArg2 );
- return stop;
-}
-
-static bool handleFile(const QCString &)
-{
- bool stop=makeStructuralIndicator(Entry::FILEDOC_SEC);
- if (!stop)
- {
- current->name = yyFileName;
- }
- BEGIN( FileDocArg1 );
- return stop;
-}
-
-static bool handleDir(const QCString &)
-{
- bool stop=makeStructuralIndicator(Entry::DIRDOC_SEC);
- if (!stop) current->name = yyFileName;
- BEGIN( FileDocArg1 );
- return stop;
-}
-
-static bool handleExample(const QCString &)
-{
- bool stop=makeStructuralIndicator(Entry::EXAMPLE_SEC);
- if (!stop) current->name = yyFileName;
- BEGIN( FileDocArg1 );
- return stop;
-}
-
-static bool handleDetails(const QCString &)
-{
- if (inContext!=OutputBrief)
- {
- addOutput("\n\n"); // treat @details outside brief description
- // as a new paragraph
- }
- setOutput(OutputDoc);
- return FALSE;
-}
-
-static bool handleName(const QCString &)
-{
- bool stop=makeStructuralIndicator(Entry::MEMBERGRP_SEC);
- if (!stop)
- {
- g_memberGroupHeader.resize(0);
- BEGIN( NameParam );
- if (g_memberGroupId!=DOX_NOGROUP) // end of previous member group
- {
- closeGroup(current,yyFileName,yyLineNr,TRUE);
- }
- }
- return stop;
-}
-
-static bool handleTodo(const QCString &)
-{
- newXRefKind = XRef_Todo;
- setOutput(OutputXRef);
- xrefKind = XRef_Todo;
- return FALSE;
-}
-
-static bool handleTest(const QCString &)
-{
- newXRefKind = XRef_Test;
- setOutput(OutputXRef);
- xrefKind = XRef_Test;
- return FALSE;
-}
-
-static bool handleBug(const QCString &)
-{
- newXRefKind = XRef_Bug;
- setOutput(OutputXRef);
- xrefKind = XRef_Bug;
- return FALSE;
-}
-
-static bool handleDeprecated(const QCString &)
-{
- newXRefKind = XRef_Deprecated;
- setOutput(OutputXRef);
- xrefKind = XRef_Deprecated;
- return FALSE;
-}
-
-static bool handleXRefItem(const QCString &)
-{
- BEGIN(XRefItemParam1);
- return FALSE;
-}
-
-static bool handleRelated(const QCString &)
-{
- BEGIN(RelatesParam1);
- return FALSE;
-}
-
-static bool handleRelatedAlso(const QCString &)
-{
- current->relatesType = Duplicate;
- BEGIN(RelatesParam1);
- return FALSE;
-}
-
-static bool handleMemberOf(const QCString &)
-{
- current->relatesType = MemberOf;
- BEGIN(RelatesParam1);
- return FALSE;
-}
-
-static bool handleRefItem(const QCString &)
-{
- addOutput(" @refitem ");
- BEGIN(LineParam);
- return FALSE;
-}
-
-static bool handleSection(const QCString &s)
-{
- setOutput(OutputDoc);
- addOutput(" @"+s+" ");
- BEGIN(SectionLabel);
- if (s=="section") g_sectionLevel=1;
- else if (s=="subsection") g_sectionLevel=2;
- else if (s=="subsubsection") g_sectionLevel=3;
- else if (s=="paragraph") g_sectionLevel=4;
- return FALSE;
-}
-
-static bool handleSubpage(const QCString &s)
-{
- if (current->section!=Entry::EMPTY_SEC &&
- current->section!=Entry::PAGEDOC_SEC &&
- current->section!=Entry::MAINPAGEDOC_SEC
- )
- {
- warn(yyFileName,yyLineNr,
- "warning: found \\subpage command in a comment block that is not marked as a page!");
- }
- addOutput(" @"+s+" ");
- BEGIN(SubpageLabel);
- return FALSE;
-}
-
-static bool handleAnchor(const QCString &s)
-{
- addOutput(" @"+s+" ");
- BEGIN(AnchorLabel);
- return FALSE;
-}
-
-static bool handleCite(const QCString &s)
-{
- addOutput(" @"+s+" ");
- BEGIN(CiteLabel);
- return FALSE;
-}
-
-static bool handleFormatBlock(const QCString &s)
-{
- addOutput(" @"+s+" ");
- //printf("handleFormatBlock(%s)\n",s.data());
- blockName=s;
- g_commentCount=0;
- BEGIN(FormatBlock);
- return FALSE;
-}
-
-static bool handleAddIndex(const QCString &)
-{
- addOutput(" @addindex ");
- BEGIN(LineParam);
- return FALSE;
-}
-
-static bool handleIf(const QCString &)
-{
- enabledSectionFound=FALSE;
- guardType = Guard_If;
- g_spaceBeforeIf = g_spaceBeforeCmd;
- BEGIN(GuardParam);
- return FALSE;
-}
-
-static bool handleIfNot(const QCString &)
-{
- enabledSectionFound=FALSE;
- guardType = Guard_IfNot;
- g_spaceBeforeIf = g_spaceBeforeCmd;
- BEGIN(GuardParam);
- return FALSE;
-}
-
-static bool handleElseIf(const QCString &)
-{
- if (guards.isEmpty())
- {
- warn(yyFileName,yyLineNr,
- "warning: found \\else without matching start command");
- }
- else
- {
- guardType = enabledSectionFound ? Guard_Skip : Guard_If;
- BEGIN(GuardParam);
- }
- return FALSE;
-}
-
-static bool handleElse(const QCString &)
-{
- if (guards.isEmpty())
- {
- warn(yyFileName,yyLineNr,
- "warning: found \\else without matching start command");
- }
- else
- {
- BEGIN( SkipGuardedSection );
- }
- return FALSE;
-}
-
-static bool handleEndIf(const QCString &)
-{
- if (guards.isEmpty())
- {
- warn(yyFileName,yyLineNr,
- "warning: found \\endif without matching start command");
- }
- else
- {
- delete guards.pop();
- }
- enabledSectionFound=FALSE;
- BEGIN( GuardParamEnd );
- return FALSE;
-}
-
-static bool handleIngroup(const QCString &)
-{
- inGroupParamFound=FALSE;
- BEGIN( InGroupParam );
- return FALSE;
-}
-
-static bool handleNoSubGrouping(const QCString &)
-{
- current->subGrouping = FALSE;
- return FALSE;
-}
-
-static bool handleShowInitializer(const QCString &)
-{
- current->initLines = 100000; // ON
- return FALSE;
-}
-
-static bool handleHideInitializer(const QCString &)
-{
- current->initLines = 0; // OFF
- return FALSE;
-}
-
-static bool handleCallgraph(const QCString &)
-{
- current->callGraph = TRUE; // ON
- return FALSE;
-}
-
-static bool handleCallergraph(const QCString &)
-{
- current->callerGraph = TRUE; // ON
- return FALSE;
-}
-
-static bool handleInternal(const QCString &)
-{
- if (!Config_getBool("INTERNAL_DOCS"))
- {
- // make sure some whitespace before a \internal command
- // is not treated as "documentation"
- if (current->doc.stripWhiteSpace().isEmpty())
- {
- current->doc.resize(0);
- }
- g_condCount=0;
- BEGIN( SkipInternal );
- }
- else
- {
- // re-enabled for bug640828
- addOutput("\\internal ");
- }
- return FALSE;
-}
-
-static bool handleLineBr(const QCString &)
-{
- addOutput('\n');
- return FALSE;
-}
-
-static bool handleStatic(const QCString &)
-{
- endBrief();
- current->stat = TRUE;
- return FALSE;
-}
-
-static bool handlePure(const QCString &)
-{
- endBrief();
- current->virt = Pure;
- return FALSE;
-}
-
-static bool handlePrivate(const QCString &)
-{
- current->protection = Private;
- return FALSE;
-}
-
-static bool handlePrivateSection(const QCString &)
-{
- current->protection = protection = Private;
- return FALSE;
-}
-
-static bool handleProtected(const QCString &)
-{
- current->protection = Protected;
- return FALSE;
-}
-
-static bool handleProtectedSection(const QCString &)
-{
- current->protection = protection = Protected ;
- return FALSE;
-}
-
-static bool handlePublic(const QCString &)
-{
- current->protection = Public;
- return FALSE;
-}
-
-static bool handlePublicSection(const QCString &)
-{
- current->protection = protection = Public;
- return FALSE;
-}
-
-static bool handleToc(const QCString &)
-{
- if (current->section==Entry::PAGEDOC_SEC ||
- current->section==Entry::MAINPAGEDOC_SEC)
- {
- current->stat=TRUE; // we 'abuse' stat to pass whether or the TOC is enabled
- }
- return FALSE;
-}
-
-static bool handleInherit(const QCString &)
-{
- BEGIN(InheritParam);
- return FALSE;
-}
-
-static bool handleExtends(const QCString &)
-{
- BEGIN(ExtendsParam);
- return FALSE;
-}
-
-static bool handleCopyDoc(const QCString &)
-{
- setOutput(OutputBrief);
- addOutput("\\copybrief ");
- g_copyDocArg.resize(0);
- BEGIN(CopyDoc);
- return FALSE;
-}
-
-//----------------------------------------------------------------------------
-
-static void checkFormula()
-{
- if (YY_START==ReadFormulaShort || YY_START==ReadFormulaLong)
- {
- warn(yyFileName,yyLineNr,"warning: End of comment block while inside formula.");
- }
-}
-
-//----------------------------------------------------------------------------
-
-bool parseCommentBlock(/* in */ ParserInterface *parser,
- /* in */ Entry *curEntry,
- /* in */ const QCString &comment,
- /* in */ const QCString &fileName,
- /* in,out */ int &lineNr,
- /* in */ bool isBrief,
- /* in */ bool isAutoBriefOn,
- /* in */ bool isInbody,
- /* in,out */ Protection &prot,
- /* in,out */ int &position,
- /* out */ bool &newEntryNeeded
- )
-{
- //printf("parseCommentBlock() isBrief=%d isAutoBriefOn=%d lineNr=%d\n",
- // isBrief,isAutoBriefOn,lineNr);
-
- initParser();
- guards.setAutoDelete(TRUE);
- guards.clear();
- langParser = parser;
- current = curEntry;
- if (comment.isEmpty()) return FALSE; // avoid empty strings
- inputString = comment;
- inputString.append(" ");
- inputPosition = position;
- yyLineNr = lineNr;
- yyFileName = fileName;
- protection = prot;
- needNewEntry = FALSE;
- xrefKind = XRef_None;
- xrefAppendFlag = FALSE;
- insidePre = FALSE;
- parseMore = FALSE;
- inBody = isInbody;
- outputXRef.resize(0);
- setOutput( isBrief || isAutoBriefOn ? OutputBrief : OutputDoc );
- briefEndsAtDot = isAutoBriefOn;
- g_condCount = 0;
- g_sectionLevel = 0;
- g_spaceBeforeCmd = FALSE;
- g_spaceBeforeIf = FALSE;
-
- if (!current->inbodyDocs.isEmpty() && isInbody) // separate in body fragments
- {
- current->inbodyDocs+="\n\n";
- }
-
- Debug::print(Debug::CommentScan,0,"-----------\nCommentScanner: %s:%d\n"
- "input=[%s]\n",fileName.data(),lineNr,comment.data()
- );
-
- commentScanYYrestart( commentScanYYin );
- BEGIN( Comment );
- commentScanYYlex();
- setOutput( OutputDoc );
-
- if (YY_START==OverloadParam) // comment ended with \overload
- {
- addOutput(getOverloadDocs());
- }
-
- if (!guards.isEmpty())
- {
- warn(yyFileName,yyLineNr,"Documentation block ended in the middle of a conditional section!");
- }
-
- current->doc=stripLeadingAndTrailingEmptyLines(current->doc,current->docLine);
-
- if (current->section==Entry::FILEDOC_SEC && current->doc.isEmpty())
- {
- // to allow a comment block with just a @file command.
- current->doc="\n\n";
- }
-
- if (current->section==Entry::MEMBERGRP_SEC &&
- g_memberGroupId==DOX_NOGROUP) // @name section but no group started yet
- {
- openGroup(current,yyFileName,yyLineNr);
- }
-
- if (Doxygen::markdownSupport)
- {
- current->brief = processMarkdown(fileName,current,current->brief);
- current->doc = processMarkdown(fileName,current,current->doc);
- current->inbodyDocs = processMarkdown(fileName,current,current->inbodyDocs);
- }
-
- Debug::print(Debug::CommentScan,0,
- "brief=[line=%d\n%s]\ndocs=[line=%d\n%s]\ninbody=[line=%d\n%s]\n===========\n",
- current->briefLine,current->brief.data(),
- current->docLine,current->doc.data(),
- current->inbodyLine,current->inbodyDocs.data()
- );
-
- checkFormula();
- prot = protection;
-
- groupAddDocs(curEntry,fileName);
-
- newEntryNeeded = needNewEntry;
-
- // if we did not proceed during this call, it does not make
- // sense to continue, since we get stuck. See bug 567346 for situations
- // were this happens
- if (parseMore && position==inputPosition) parseMore=FALSE;
-
- if (parseMore) position=inputPosition; else position=0;
-
- lineNr = yyLineNr;
- //printf("position=%d parseMore=%d\n",position,parseMore);
-
- return parseMore;
-}
-
-//---------------------------------------------------------------------------
-
-void groupEnterFile(const char *fileName,int)
-{
- g_autoGroupStack.setAutoDelete(TRUE);
- g_autoGroupStack.clear();
- g_memberGroupId = DOX_NOGROUP;
- g_memberGroupDocs.resize(0);
- g_memberGroupRelates.resize(0);
- g_compoundName=fileName;
-}
-
-void groupLeaveFile(const char *fileName,int line)
-{
- //if (g_memberGroupId!=DOX_NOGROUP)
- //{
- // warn(fileName,line,"warning: end of file while inside a member group\n");
- //}
- g_memberGroupId=DOX_NOGROUP;
- g_memberGroupRelates.resize(0);
- g_memberGroupDocs.resize(0);
- if (!g_autoGroupStack.isEmpty())
- {
- warn(fileName,line,"warning: end of file while inside a group\n");
- }
-}
-
-void groupEnterCompound(const char *fileName,int line,const char *name)
-{
- if (g_memberGroupId!=DOX_NOGROUP)
- {
- warn(fileName,line,"warning: try to put compound %s inside a member group\n",name);
- }
- g_memberGroupId=DOX_NOGROUP;
- g_memberGroupRelates.resize(0);
- g_memberGroupDocs.resize(0);
- g_compoundName = name;
- int i = g_compoundName.find('(');
- if (i!=-1)
- {
- g_compoundName=g_compoundName.left(i); // strip category (Obj-C)
- }
- if (g_compoundName.isEmpty())
- {
- g_compoundName=fileName;
- }
- //printf("groupEnterCompound(%s)\n",name);
-}
-
-void groupLeaveCompound(const char *,int,const char * /*name*/)
-{
- //printf("groupLeaveCompound(%s)\n",name);
- //if (g_memberGroupId!=DOX_NOGROUP)
- //{
- // warn(fileName,line,"warning: end of compound %s while inside a member group\n",name);
- //}
- g_memberGroupId=DOX_NOGROUP;
- g_memberGroupRelates.resize(0);
- g_memberGroupDocs.resize(0);
- g_compoundName.resize(0);
-}
-
-static int findExistingGroup(int &groupId,const MemberGroupInfo *info)
-{
- //printf("findExistingGroup %s:%s\n",info->header.data(),info->compoundName.data());
- QIntDictIterator<MemberGroupInfo> di(Doxygen::memGrpInfoDict);
- MemberGroupInfo *mi;
- for (di.toFirst();(mi=di.current());++di)
- {
- if (g_compoundName==mi->compoundName && // same file or scope
- !mi->header.isEmpty() && // not a nameless group
- stricmp(mi->header,info->header)==0 // same header name
- )
- {
- //printf("Found it!\n");
- return di.currentKey(); // put the item in this group
- }
- }
- groupId++; // start new group
- return groupId;
-}
-
-void openGroup(Entry *e,const char *,int)
-{
- //printf("==> openGroup(name=%s,sec=%x) g_autoGroupStack=%d\n",
- // e->name.data(),e->section,g_autoGroupStack.count());
- if (e->section==Entry::GROUPDOC_SEC) // auto group
- {
- g_autoGroupStack.push(new Grouping(e->name,e->groupingPri()));
- }
- else // start of a member group
- {
- //printf(" membergroup id=%d %s\n",g_memberGroupId,g_memberGroupHeader.data());
- if (g_memberGroupId==DOX_NOGROUP) // no group started yet
- {
- static int curGroupId=0;
-
- MemberGroupInfo *info = new MemberGroupInfo;
- info->header = g_memberGroupHeader.stripWhiteSpace();
- info->compoundName = g_compoundName;
- g_memberGroupId = findExistingGroup(curGroupId,info);
- //printf(" use membergroup %d\n",g_memberGroupId);
- Doxygen::memGrpInfoDict.insert(g_memberGroupId,info);
-
- g_memberGroupRelates = e->relates;
- e->mGrpId = g_memberGroupId;
- }
- }
-}
-
-void closeGroup(Entry *e,const char *fileName,int,bool foundInline)
-{
- //printf("==> closeGroup(name=%s,sec=%x) g_autoGroupStack=%d\n",
- // e->name.data(),e->section,g_autoGroupStack.count());
- if (g_memberGroupId!=DOX_NOGROUP) // end of member group
- {
- MemberGroupInfo *info=Doxygen::memGrpInfoDict.find(g_memberGroupId);
- if (info) // known group
- {
- info->doc = g_memberGroupDocs;
- info->docFile = fileName;
- }
- g_memberGroupId=DOX_NOGROUP;
- g_memberGroupRelates.resize(0);
- g_memberGroupDocs.resize(0);
- e->mGrpId=DOX_NOGROUP;
- //printf("new group id=%d\n",g_memberGroupId);
- }
- else if (!g_autoGroupStack.isEmpty()) // end of auto group
- {
- Grouping *grp = g_autoGroupStack.pop();
- // see bug577005: we should not remove the last group for e
- if (!foundInline) e->groups->removeLast();
- //printf("Removing %s e=%p\n",grp->groupname.data(),e);
- delete grp;
- if (!foundInline) initGroupInfo(e);
- }
-}
-
-void initGroupInfo(Entry *e)
-{
- //printf("==> initGroup(id=%d,related=%s,e=%p)\n",g_memberGroupId,
- // g_memberGroupRelates.data(),e);
- e->mGrpId = g_memberGroupId;
- e->relates = g_memberGroupRelates;
- if (!g_autoGroupStack.isEmpty())
- {
- //printf("Appending group %s to %s: count=%d entry=%p\n",
- // g_autoGroupStack.top()->groupname.data(),
- // e->name.data(),e->groups->count(),e);
- e->groups->append(new Grouping(*g_autoGroupStack.top()));
- }
-}
-
-static void groupAddDocs(Entry *e,const char *fileName)
-{
- if (e->section==Entry::MEMBERGRP_SEC)
- {
- g_memberGroupDocs=e->brief.stripWhiteSpace();
- e->doc = stripLeadingAndTrailingEmptyLines(e->doc,e->docLine);
- if (!g_memberGroupDocs.isEmpty() && !e->doc.isEmpty())
- {
- g_memberGroupDocs+="\n\n";
- }
- g_memberGroupDocs+=e->doc;
- MemberGroupInfo *info=Doxygen::memGrpInfoDict.find(g_memberGroupId);
- if (info)
- {
- info->doc = g_memberGroupDocs;
- info->docFile = fileName;
- info->setRefItems(e->sli);
- }
- e->doc.resize(0);
- e->brief.resize(0);
- }
-}
-
-
-#if !defined(YY_FLEX_SUBMINOR_VERSION)
-//----------------------------------------------------------------------------
-extern "C" { // some bogus code to keep the compiler happy
- void commentScanYYdummy() { yy_flex_realloc(0,0); }
-}
-#endif
-
diff --git a/trunk/src/compound.xsd b/trunk/src/compound.xsd
deleted file mode 100644
index 1149266..0000000
--- a/trunk/src/compound.xsd
+++ /dev/null
@@ -1,829 +0,0 @@
-<?xml version='1.0' encoding='utf-8' ?>
-<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
- <xsd:element name="doxygen" type="DoxygenType"/>
-
- <!-- Complex types -->
-
- <xsd:complexType name="DoxygenType">
- <xsd:sequence maxOccurs="unbounded">
- <xsd:element name="compounddef" type="compounddefType" minOccurs="0" />
- </xsd:sequence>
- <xsd:attribute name="version" type="DoxVersionNumber" use="required" />
- </xsd:complexType>
-
- <xsd:complexType name="compounddefType">
- <xsd:sequence>
- <xsd:element name="compoundname" type="xsd:string"/>
- <xsd:element name="title" type="xsd:string" minOccurs="0" />
- <xsd:element name="basecompoundref" type="compoundRefType" minOccurs="0" maxOccurs="unbounded" />
- <xsd:element name="derivedcompoundref" type="compoundRefType" minOccurs="0" maxOccurs="unbounded" />
- <xsd:element name="includes" type="incType" minOccurs="0" maxOccurs="unbounded" />
- <xsd:element name="includedby" type="incType" minOccurs="0" maxOccurs="unbounded" />
- <xsd:element name="incdepgraph" type="graphType" minOccurs="0" />
- <xsd:element name="invincdepgraph" type="graphType" minOccurs="0" />
- <xsd:element name="innerdir" type="refType" minOccurs="0" maxOccurs="unbounded" />
- <xsd:element name="innerfile" type="refType" minOccurs="0" maxOccurs="unbounded" />
- <xsd:element name="innerclass" type="refType" minOccurs="0" maxOccurs="unbounded" />
- <xsd:element name="innernamespace" type="refType" minOccurs="0" maxOccurs="unbounded" />
- <xsd:element name="innerpage" type="refType" minOccurs="0" maxOccurs="unbounded" />
- <xsd:element name="innergroup" type="refType" minOccurs="0" maxOccurs="unbounded" />
- <xsd:element name="templateparamlist" type="templateparamlistType" minOccurs="0" />
- <xsd:element name="sectiondef" type="sectiondefType" minOccurs="0" maxOccurs="unbounded" />
- <xsd:element name="briefdescription" type="descriptionType" minOccurs="0" />
- <xsd:element name="detaileddescription" type="descriptionType" minOccurs="0" />
- <xsd:element name="inheritancegraph" type="graphType" minOccurs="0" />
- <xsd:element name="collaborationgraph" type="graphType" minOccurs="0" />
- <xsd:element name="programlisting" type="listingType" minOccurs="0" />
- <xsd:element name="location" type="locationType" minOccurs="0" />
- <xsd:element name="listofallmembers" type="listofallmembersType" minOccurs="0" />
- </xsd:sequence>
- <xsd:attribute name="id" type="xsd:string" />
- <xsd:attribute name="kind" type="DoxCompoundKind" />
- <xsd:attribute name="prot" type="DoxProtectionKind" />
- </xsd:complexType>
-
- <xsd:complexType name="listofallmembersType">
- <xsd:sequence>
- <xsd:element name="member" type="memberRefType" minOccurs="0" maxOccurs="unbounded" />
- </xsd:sequence>
- </xsd:complexType>
-
- <xsd:complexType name="memberRefType">
- <xsd:sequence>
- <xsd:element name="scope" />
- <xsd:element name="name" />
- </xsd:sequence>
- <xsd:attribute name="refid" type="xsd:string" />
- <xsd:attribute name="prot" type="DoxProtectionKind" />
- <xsd:attribute name="virt" type="DoxVirtualKind" />
- <xsd:attribute name="ambiguityscope" type="xsd:string" />
- </xsd:complexType>
-
- <xsd:complexType name="compoundRefType">
- <xsd:simpleContent>
- <xsd:extension base="xsd:string">
- <xsd:attribute name="refid" type="xsd:string" use="optional" />
- <xsd:attribute name="prot" type="DoxProtectionKind" />
- <xsd:attribute name="virt" type="DoxVirtualKind" />
- </xsd:extension>
- </xsd:simpleContent>
- </xsd:complexType>
-
- <xsd:complexType name="reimplementType">
- <xsd:simpleContent>
- <xsd:extension base="xsd:string">
- <xsd:attribute name="refid" type="xsd:string" />
- </xsd:extension>
- </xsd:simpleContent>
- </xsd:complexType>
-
- <xsd:complexType name="incType">
- <xsd:simpleContent>
- <xsd:extension base="xsd:string">
- <xsd:attribute name="refid" type="xsd:string" />
- <xsd:attribute name="local" type="DoxBool" />
- </xsd:extension>
- </xsd:simpleContent>
- </xsd:complexType>
-
- <xsd:complexType name="refType">
- <xsd:simpleContent>
- <xsd:extension base="xsd:string">
- <xsd:attribute name="refid" type="xsd:string" />
- <xsd:attribute name="prot" type="DoxProtectionKind" use="optional"/>
- </xsd:extension>
- </xsd:simpleContent>
- </xsd:complexType>
-
- <xsd:complexType name="refTextType">
- <xsd:simpleContent>
- <xsd:extension base="xsd:string">
- <xsd:attribute name="refid" type="xsd:string" />
- <xsd:attribute name="kindref" type="DoxRefKind" />
- <xsd:attribute name="external" type="xsd:string" use="optional"/>
- <xsd:attribute name="tooltip" type="xsd:string" use="optional"/>
- </xsd:extension>
- </xsd:simpleContent>
- </xsd:complexType>
-
- <xsd:complexType name="sectiondefType">
- <xsd:sequence>
- <xsd:element name="header" type="xsd:string" minOccurs="0" />
- <xsd:element name="description" type="descriptionType" minOccurs="0" />
- <xsd:element name="memberdef" type="memberdefType" maxOccurs="unbounded" />
- </xsd:sequence>
- <xsd:attribute name="kind" type="DoxSectionKind" />
- </xsd:complexType>
-
- <xsd:complexType name="memberdefType">
- <xsd:sequence>
- <xsd:element name="templateparamlist" type="templateparamlistType" minOccurs="0" />
- <xsd:element name="type" type="linkedTextType" minOccurs="0" />
- <xsd:element name="definition" minOccurs="0" />
- <xsd:element name="argsstring" minOccurs="0" />
- <xsd:element name="name" />
- <xsd:element name="read" minOccurs="0" />
- <xsd:element name="write" minOccurs="0" />
- <xsd:element name="bitfield" minOccurs="0" />
- <xsd:element name="reimplements" type="reimplementType" minOccurs="0" maxOccurs="unbounded" />
- <xsd:element name="reimplementedby" type="reimplementType" minOccurs="0" maxOccurs="unbounded" />
- <xsd:element name="param" type="paramType" minOccurs="0" maxOccurs="unbounded" />
- <xsd:element name="enumvalue" type="enumvalueType" minOccurs="0" maxOccurs="unbounded" />
- <xsd:element name="initializer" type="linkedTextType" minOccurs="0" />
- <xsd:element name="exceptions" type="linkedTextType" minOccurs="0" />
- <xsd:element name="briefdescription" type="descriptionType" minOccurs="0" />
- <xsd:element name="detaileddescription" type="descriptionType" minOccurs="0" />
- <xsd:element name="inbodydescription" type="descriptionType" minOccurs="0" />
- <xsd:element name="location" type="locationType" />
- <xsd:element name="references" type="referenceType" minOccurs="0" maxOccurs="unbounded" />
- <xsd:element name="referencedby" type="referenceType" minOccurs="0" maxOccurs="unbounded" />
- </xsd:sequence>
- <xsd:attribute name="kind" type="DoxMemberKind" />
- <xsd:attribute name="id" type="xsd:string" />
- <xsd:attribute name="prot" type="DoxProtectionKind" />
- <xsd:attribute name="static" type="DoxBool" />
- <xsd:attribute name="const" type="DoxBool" />
- <xsd:attribute name="explicit" type="DoxBool" />
- <xsd:attribute name="inline" type="DoxBool" />
- <xsd:attribute name="virt" type="DoxVirtualKind" />
- <xsd:attribute name="volatile" type="DoxBool" />
- <xsd:attribute name="mutable" type="DoxBool" />
- <!-- Qt property -->
- <xsd:attribute name="readable" type="DoxBool" use="optional"/>
- <xsd:attribute name="writable" type="DoxBool" use="optional"/>
- <!-- C++/CLI variable -->
- <xsd:attribute name="initonly" type="DoxBool" use="optional"/>
- <!-- C++/CLI and C# property -->
- <xsd:attribute name="settable" type="DoxBool" use="optional"/>
- <xsd:attribute name="gettable" type="DoxBool" use="optional"/>
- <!-- C++/CLI function -->
- <xsd:attribute name="final" type="DoxBool" use="optional"/>
- <xsd:attribute name="sealed" type="DoxBool" use="optional"/>
- <xsd:attribute name="new" type="DoxBool" use="optional"/>
- <!-- C++/CLI event -->
- <xsd:attribute name="add" type="DoxBool" use="optional"/>
- <xsd:attribute name="remove" type="DoxBool" use="optional"/>
- <xsd:attribute name="raise" type="DoxBool" use="optional"/>
- <!-- Objective-C 2.0 protocol method -->
- <xsd:attribute name="optional" type="DoxBool" use="optional"/>
- <xsd:attribute name="required" type="DoxBool" use="optional"/>
- <!-- Objective-C 2.0 property accessor -->
- <xsd:attribute name="accessor" type="DoxAccessor" use="optional"/>
- </xsd:complexType>
-
- <xsd:complexType name="descriptionType" mixed="true">
- <xsd:sequence>
- <xsd:element name="title" type="xsd:string" minOccurs="0"/>
- <xsd:element name="para" type="docParaType" minOccurs="0" maxOccurs="unbounded" />
- <xsd:element name="sect1" type="docSect1Type" minOccurs="0" maxOccurs="unbounded" />
- <xsd:element name="internal" type="docInternalType" minOccurs="0" />
- </xsd:sequence>
- </xsd:complexType>
-
- <xsd:complexType name="enumvalueType" mixed="true">
- <xsd:sequence>
- <xsd:element name="name" />
- <xsd:element name="initializer" type="linkedTextType" minOccurs="0" />
- <xsd:element name="briefdescription" type="descriptionType" minOccurs="0" />
- <xsd:element name="detaileddescription" type="descriptionType" minOccurs="0" />
- </xsd:sequence>
- <xsd:attribute name="id" type="xsd:string" />
- <xsd:attribute name="prot" type="DoxProtectionKind" />
- </xsd:complexType>
-
- <xsd:complexType name="templateparamlistType">
- <xsd:sequence>
- <xsd:element name="param" type="paramType" minOccurs="0" maxOccurs="unbounded" />
- </xsd:sequence>
- </xsd:complexType>
-
- <xsd:complexType name="paramType">
- <xsd:sequence>
- <xsd:element name="type" type="linkedTextType" minOccurs="0" />
- <xsd:element name="declname" minOccurs="0" />
- <xsd:element name="defname" minOccurs="0" />
- <xsd:element name="array" minOccurs="0" />
- <xsd:element name="defval" type="linkedTextType" minOccurs="0" />
- <xsd:element name="briefdescription" type="descriptionType" minOccurs="0" />
- </xsd:sequence>
- </xsd:complexType>
-
- <xsd:complexType name="linkedTextType" mixed="true">
- <xsd:sequence>
- <xsd:element name="ref" type="refTextType" minOccurs="0" maxOccurs="unbounded" />
- </xsd:sequence>
- </xsd:complexType>
-
- <xsd:complexType name="graphType">
- <xsd:sequence>
- <xsd:element name="node" type="nodeType" maxOccurs="unbounded" />
- </xsd:sequence>
- </xsd:complexType>
-
- <xsd:complexType name="nodeType">
- <xsd:sequence>
- <xsd:element name="label" />
- <xsd:element name="link" type="linkType" minOccurs="0" />
- <xsd:element name="childnode" type="childnodeType" minOccurs="0" maxOccurs="unbounded" />
- </xsd:sequence>
- <xsd:attribute name="id" type="xsd:string" />
- </xsd:complexType>
-
- <xsd:complexType name="childnodeType">
- <xsd:sequence>
- <xsd:element name="edgelabel" minOccurs="0" maxOccurs="unbounded"/>
- </xsd:sequence>
- <xsd:attribute name="refid" type="xsd:string" />
- <xsd:attribute name="relation" type="DoxGraphRelation" />
- </xsd:complexType>
-
- <xsd:complexType name="linkType">
- <xsd:attribute name="refid" type="xsd:string" />
- <xsd:attribute name="external" type="xsd:string" use="optional"/>
- </xsd:complexType>
-
- <xsd:complexType name="listingType">
- <xsd:sequence>
- <xsd:element name="codeline" type="codelineType" minOccurs="0" maxOccurs="unbounded" />
- </xsd:sequence>
- </xsd:complexType>
-
- <xsd:complexType name="codelineType">
- <xsd:sequence>
- <xsd:element name="highlight" type="highlightType" minOccurs="0" maxOccurs="unbounded" />
- </xsd:sequence>
- <xsd:attribute name="lineno" type="xsd:integer" />
- <xsd:attribute name="refid" type="xsd:string" />
- <xsd:attribute name="refkind" type="DoxRefKind" />
- <xsd:attribute name="external" type="DoxBool" />
- </xsd:complexType>
-
- <xsd:complexType name="highlightType" mixed="true">
- <xsd:choice minOccurs="0" maxOccurs="unbounded">
- <xsd:element name="sp" />
- <xsd:element name="ref" type="refTextType" />
- </xsd:choice>
- <xsd:attribute name="class" type="DoxHighlightClass" />
- </xsd:complexType>
-
- <xsd:complexType name="referenceType" mixed="true">
- <xsd:attribute name="refid" type="xsd:string" />
- <xsd:attribute name="compoundref" type="xsd:string" use="optional" />
- <xsd:attribute name="startline" type="xsd:integer" />
- <xsd:attribute name="endline" type="xsd:integer" />
- </xsd:complexType>
-
- <xsd:complexType name="locationType">
- <xsd:attribute name="file" type="xsd:string" />
- <xsd:attribute name="line" type="xsd:integer" />
- <xsd:attribute name="bodyfile" type="xsd:string" />
- <xsd:attribute name="bodystart" type="xsd:integer" />
- <xsd:attribute name="bodyend" type="xsd:integer" />
- </xsd:complexType>
-
- <xsd:complexType name="docSect1Type" mixed="true">
- <xsd:sequence>
- <xsd:element name="title" type="xsd:string" />
- <xsd:element name="para" type="docParaType" minOccurs="0" maxOccurs="unbounded" />
- <xsd:element name="sect2" type="docSect2Type" minOccurs="0" maxOccurs="unbounded" />
- <xsd:element name="internal" type="docInternalS1Type" minOccurs="0" />
- </xsd:sequence>
- <xsd:attribute name="id" type="xsd:string" />
- </xsd:complexType>
-
- <xsd:complexType name="docSect2Type" mixed="true">
- <xsd:sequence>
- <xsd:element name="title" type="xsd:string" />
- <xsd:element name="para" type="docParaType" minOccurs="0" maxOccurs="unbounded" />
- <xsd:element name="sect3" type="docSect3Type" minOccurs="0" maxOccurs="unbounded" />
- <xsd:element name="internal" type="docInternalS2Type" minOccurs="0" />
- </xsd:sequence>
- <xsd:attribute name="id" type="xsd:string" />
- </xsd:complexType>
-
- <xsd:complexType name="docSect3Type" mixed="true">
- <xsd:sequence>
- <xsd:element name="title" type="xsd:string" />
- <xsd:element name="para" type="docParaType" minOccurs="0" maxOccurs="unbounded" />
- <xsd:element name="sect4" type="docSect4Type" minOccurs="0" maxOccurs="unbounded" />
- <xsd:element name="internal" type="docInternalS3Type" minOccurs="0" />
- </xsd:sequence>
- <xsd:attribute name="id" type="xsd:string" />
- </xsd:complexType>
-
- <xsd:complexType name="docSect4Type" mixed="true">
- <xsd:sequence>
- <xsd:element name="title" type="xsd:string" />
- <xsd:element name="para" type="docParaType" minOccurs="0" maxOccurs="unbounded" />
- <xsd:element name="internal" type="docInternalS4Type" minOccurs="0" />
- </xsd:sequence>
- <xsd:attribute name="id" type="xsd:string" />
- </xsd:complexType>
-
- <xsd:complexType name="docInternalType" mixed="true">
- <xsd:sequence>
- <xsd:element name="para" type="docParaType" minOccurs="0" maxOccurs="unbounded" />
- <xsd:element name="sect1" type="docSect1Type" minOccurs="0" maxOccurs="unbounded" />
- </xsd:sequence>
- </xsd:complexType>
-
- <xsd:complexType name="docInternalS1Type" mixed="true">
- <xsd:sequence>
- <xsd:element name="para" type="docParaType" minOccurs="0" maxOccurs="unbounded" />
- <xsd:element name="sect2" type="docSect2Type" minOccurs="0" maxOccurs="unbounded" />
- </xsd:sequence>
- </xsd:complexType>
-
- <xsd:complexType name="docInternalS2Type" mixed="true">
- <xsd:sequence>
- <xsd:element name="para" type="docParaType" minOccurs="0" maxOccurs="unbounded" />
- <xsd:element name="sect3" type="docSect3Type" minOccurs="0" maxOccurs="unbounded" />
- </xsd:sequence>
- </xsd:complexType>
-
- <xsd:complexType name="docInternalS3Type" mixed="true">
- <xsd:sequence>
- <xsd:element name="para" type="docParaType" minOccurs="0" maxOccurs="unbounded" />
- <xsd:element name="sect3" type="docSect4Type" minOccurs="0" maxOccurs="unbounded" />
- </xsd:sequence>
- </xsd:complexType>
-
- <xsd:complexType name="docInternalS4Type" mixed="true">
- <xsd:sequence>
- <xsd:element name="para" type="docParaType" minOccurs="0" maxOccurs="unbounded" />
- </xsd:sequence>
- </xsd:complexType>
-
- <xsd:group name="docTitleCmdGroup">
- <xsd:choice>
- <xsd:element name="ulink" type="docURLLink" />
- <xsd:element name="bold" type="docMarkupType" />
- <xsd:element name="emphasis" type="docMarkupType" />
- <xsd:element name="computeroutput" type="docMarkupType" />
- <xsd:element name="subscript" type="docMarkupType" />
- <xsd:element name="superscript" type="docMarkupType" />
- <xsd:element name="center" type="docMarkupType" />
- <xsd:element name="small" type="docMarkupType" />
- <xsd:element name="htmlonly" type="xsd:string" />
- <xsd:element name="latexonly" type="xsd:string" />
- <xsd:element name="dot" type="xsd:string" />
- <xsd:element name="anchor" type="docAnchorType" />
- <xsd:element name="formula" type="docFormulaType" />
- <xsd:element name="ref" type="docRefTextType" />
- <xsd:element name="copy" type="docEmptyType" />
- <xsd:element name="trademark" type="docEmptyType" />
- <xsd:element name="registered" type="docEmptyType" />
- <xsd:element name="lsquo" type="docEmptyType" />
- <xsd:element name="rsquo" type="docEmptyType" />
- <xsd:element name="ldquo" type="docEmptyType" />
- <xsd:element name="rdquo" type="docEmptyType" />
- <xsd:element name="ndash" type="docEmptyType" />
- <xsd:element name="mdash" type="docEmptyType" />
- <xsd:element name="umlaut" type="docCharType" />
- <xsd:element name="acute" type="docCharType" />
- <xsd:element name="grave" type="docCharType" />
- <xsd:element name="circ" type="docCharType" />
- <xsd:element name="slash" type="docCharType" />
- <xsd:element name="tilde" type="docCharType" />
- <xsd:element name="cedil" type="docCharType" />
- <xsd:element name="ring" type="docCharType" />
- <xsd:element name="szlig" type="docEmptyType" />
- <xsd:element name="nonbreakablespace" type="docEmptyType" />
- </xsd:choice>
- </xsd:group>
-
- <xsd:complexType name="docTitleType" mixed="true">
- <xsd:group ref="docTitleCmdGroup" minOccurs="0" maxOccurs="unbounded" />
- </xsd:complexType>
-
- <xsd:group name="docCmdGroup">
- <xsd:choice>
- <xsd:group ref="docTitleCmdGroup"/>
- <xsd:element name="linebreak" type="docEmptyType" />
- <xsd:element name="hruler" type="docEmptyType" />
- <xsd:element name="preformatted" type="docMarkupType" />
- <xsd:element name="programlisting" type="listingType" />
- <xsd:element name="verbatim" type="xsd:string" />
- <xsd:element name="indexentry" type="docIndexEntryType" />
- <xsd:element name="orderedlist" type="docListType" />
- <xsd:element name="itemizedlist" type="docListType" />
- <xsd:element name="simplesect" type="docSimpleSectType" />
- <xsd:element name="title" type="docTitleType" />
- <xsd:element name="variablelist" type="docVariableListType" />
- <xsd:element name="table" type="docTableType" />
- <xsd:element name="heading" type="docHeadingType" />
- <xsd:element name="image" type="docImageType" />
- <xsd:element name="dotfile" type="docDotFileType" />
- <xsd:element name="toclist" type="docTocListType" />
- <xsd:element name="language" type="docLanguageType" />
- <xsd:element name="parameterlist" type="docParamListType" />
- <xsd:element name="xrefsect" type="docXRefSectType" />
- <xsd:element name="copydoc" type="docCopyType" />
- <xsd:element name="blockquote" type="docBlockQuoteType" />
- </xsd:choice>
- </xsd:group>
-
- <xsd:complexType name="docParaType" mixed="true">
- <xsd:group ref="docCmdGroup" minOccurs="0" maxOccurs="unbounded" />
- </xsd:complexType>
-
- <xsd:complexType name="docMarkupType" mixed="true">
- <xsd:group ref="docCmdGroup" minOccurs="0" maxOccurs="unbounded" />
- </xsd:complexType>
-
- <xsd:complexType name="docURLLink" mixed="true">
- <xsd:group ref="docTitleCmdGroup" minOccurs="0" maxOccurs="unbounded" />
- <xsd:attribute name="url" type="xsd:string" />
- </xsd:complexType>
-
- <xsd:complexType name="docAnchorType" mixed="true">
- <xsd:attribute name="id" type="xsd:string" />
- </xsd:complexType>
-
- <xsd:complexType name="docFormulaType" mixed="true">
- <xsd:attribute name="id" type="xsd:string" />
- </xsd:complexType>
-
- <xsd:complexType name="docIndexEntryType">
- <xsd:sequence>
- <xsd:element name="primaryie" type="xsd:string" />
- <xsd:element name="secondaryie" type="xsd:string" />
- </xsd:sequence>
- </xsd:complexType>
-
- <xsd:complexType name="docListType">
- <xsd:sequence>
- <xsd:element name="listitem" type="docListItemType" maxOccurs="unbounded" />
- </xsd:sequence>
- </xsd:complexType>
-
- <xsd:complexType name="docListItemType">
- <xsd:sequence>
- <xsd:element name="para" type="docParaType" minOccurs="0" maxOccurs="unbounded" />
- </xsd:sequence>
- </xsd:complexType>
-
- <xsd:complexType name="docSimpleSectType">
- <xsd:sequence>
- <xsd:element name="title" type="docTitleType" minOccurs="0" />
- <xsd:sequence minOccurs="0" maxOccurs="unbounded">
- <xsd:element name="para" type="docParaType" minOccurs="1" maxOccurs="unbounded" />
- <xsd:element name="simplesectsep" type="docEmptyType" minOccurs="0"/>
- </xsd:sequence>
- </xsd:sequence>
- <xsd:attribute name="kind" type="DoxSimpleSectKind" />
- </xsd:complexType>
-
- <xsd:complexType name="docVarListEntryType">
- <xsd:sequence>
- <xsd:element name="term" type="docTitleType" />
- </xsd:sequence>
- </xsd:complexType>
-
- <xsd:group name="docVariableListGroup">
- <xsd:sequence>
- <xsd:element name="varlistentry" type="docVarListEntryType" />
- <xsd:element name="listitem" type="docListItemType" />
- </xsd:sequence>
- </xsd:group>
-
- <xsd:complexType name="docVariableListType">
- <xsd:sequence>
- <xsd:group ref="docVariableListGroup" maxOccurs="unbounded" />
- </xsd:sequence>
- </xsd:complexType>
-
- <xsd:complexType name="docRefTextType" mixed="true">
- <xsd:group ref="docTitleCmdGroup" minOccurs="0" maxOccurs="unbounded" />
- <xsd:attribute name="refid" type="xsd:string" />
- <xsd:attribute name="kindref" type="DoxRefKind" />
- <xsd:attribute name="external" type="xsd:string" />
- </xsd:complexType>
-
- <xsd:complexType name="docTableType">
- <xsd:sequence>
- <xsd:element name="row" type="docRowType" minOccurs="0" maxOccurs="unbounded" />
- <xsd:element name="caption" type="docCaptionType" minOccurs="0" />
- </xsd:sequence>
- <xsd:attribute name="rows" type="xsd:integer" />
- <xsd:attribute name="cols" type="xsd:integer" />
- </xsd:complexType>
-
- <xsd:complexType name="docRowType">
- <xsd:sequence>
- <xsd:element name="entry" type="docEntryType" minOccurs="0" maxOccurs="unbounded" />
- </xsd:sequence>
- </xsd:complexType>
-
- <xsd:complexType name="docEntryType">
- <xsd:sequence>
- <xsd:element name="para" type="docParaType" minOccurs="0" maxOccurs="unbounded" />
- </xsd:sequence>
- <xsd:attribute name="thead" type="DoxBool" />
- </xsd:complexType>
-
- <xsd:complexType name="docCaptionType" mixed="true">
- <xsd:group ref="docTitleCmdGroup" minOccurs="0" maxOccurs="unbounded" />
- </xsd:complexType>
-
- <xsd:complexType name="docHeadingType" mixed="true">
- <xsd:group ref="docTitleCmdGroup" minOccurs="0" maxOccurs="unbounded" />
- <xsd:attribute name="level" type="xsd:integer" /> <!-- todo: range 1-6 -->
- </xsd:complexType>
-
- <xsd:complexType name="docImageType" mixed="true">
- <xsd:group ref="docTitleCmdGroup" minOccurs="0" maxOccurs="unbounded" />
- <xsd:attribute name="type" type="DoxImageKind" />
- <xsd:attribute name="name" type="xsd:string" />
- <xsd:attribute name="width" type="xsd:string" />
- <xsd:attribute name="height" type="xsd:string" />
- </xsd:complexType>
-
- <xsd:complexType name="docDotFileType" mixed="true">
- <xsd:group ref="docTitleCmdGroup" minOccurs="0" maxOccurs="unbounded" />
- <xsd:attribute name="name" type="xsd:string" />
- </xsd:complexType>
-
- <xsd:complexType name="docTocItemType" mixed="true">
- <xsd:group ref="docTitleCmdGroup" minOccurs="0" maxOccurs="unbounded" />
- <xsd:attribute name="id" type="xsd:string" />
- </xsd:complexType>
-
- <xsd:complexType name="docTocListType">
- <xsd:sequence>
- <xsd:element name="tocitem" type="docTocItemType" minOccurs="0" maxOccurs="unbounded" />
- </xsd:sequence>
- </xsd:complexType>
-
- <xsd:complexType name="docLanguageType">
- <xsd:sequence>
- <xsd:element name="para" type="docParaType" minOccurs="0" maxOccurs="unbounded" />
- </xsd:sequence>
- <xsd:attribute name="langid" type="xsd:string" />
- </xsd:complexType>
-
- <xsd:complexType name="docParamListType">
- <xsd:sequence>
- <xsd:element name="parameteritem" type="docParamListItem" minOccurs="0" maxOccurs="unbounded" />
- </xsd:sequence>
- <xsd:attribute name="kind" type="DoxParamListKind" />
- </xsd:complexType>
-
- <xsd:complexType name="docParamListItem">
- <xsd:sequence>
- <xsd:element name="parameternamelist" type="docParamNameList" minOccurs="0" maxOccurs="unbounded" />
- <xsd:element name="parameterdescription" type="descriptionType" />
- </xsd:sequence>
- </xsd:complexType>
-
- <xsd:complexType name="docParamNameList">
- <xsd:sequence>
- <xsd:element name="parametertype" type="docParamType" minOccurs="0" maxOccurs="unbounded" />
- <xsd:element name="parametername" type="docParamName" minOccurs="0" maxOccurs="unbounded" />
- </xsd:sequence>
- </xsd:complexType>
-
- <xsd:complexType name="docParamType" mixed="true">
- <xsd:sequence>
- <xsd:element name="ref" type="refTextType" minOccurs="0" maxOccurs="1" />
- </xsd:sequence>
- </xsd:complexType>
-
- <xsd:complexType name="docParamName" mixed="true">
- <xsd:sequence>
- <xsd:element name="ref" type="refTextType" minOccurs="0" maxOccurs="1" />
- </xsd:sequence>
- <xsd:attribute name="direction" type="DoxParamDir" use="optional" />
- </xsd:complexType>
-
- <xsd:complexType name="docXRefSectType">
- <xsd:sequence>
- <xsd:element name="xreftitle" type="xsd:string" minOccurs="0" maxOccurs="unbounded" />
- <xsd:element name="xrefdescription" type="descriptionType" />
- </xsd:sequence>
- <xsd:attribute name="id" type="xsd:string" />
- </xsd:complexType>
-
- <xsd:complexType name="docCopyType">
- <xsd:sequence>
- <xsd:element name="para" type="docParaType" minOccurs="0" maxOccurs="unbounded" />
- <xsd:element name="sect1" type="docSect1Type" minOccurs="0" maxOccurs="unbounded" />
- <xsd:element name="internal" type="docInternalType" minOccurs="0" />
- </xsd:sequence>
- <xsd:attribute name="link" type="xsd:string" />
- </xsd:complexType>
-
- <xsd:complexType name="docBlockQuoteType">
- <xsd:sequence>
- <xsd:element name="para" type="docParaType" minOccurs="0" maxOccurs="unbounded" />
- </xsd:sequence>
- </xsd:complexType>
-
- <xsd:complexType name="docCharType">
- <xsd:attribute name="char" type="DoxCharRange"/>
- </xsd:complexType>
-
- <xsd:complexType name="docEmptyType"/>
-
- <!-- Simple types -->
-
- <xsd:simpleType name="DoxBool">
- <xsd:restriction base="xsd:string">
- <xsd:enumeration value="yes" />
- <xsd:enumeration value="no" />
- </xsd:restriction>
- </xsd:simpleType>
-
- <xsd:simpleType name="DoxGraphRelation">
- <xsd:restriction base="xsd:string">
- <xsd:enumeration value="include" />
- <xsd:enumeration value="usage" />
- <xsd:enumeration value="template-instance" />
- <xsd:enumeration value="public-inheritance" />
- <xsd:enumeration value="protected-inheritance" />
- <xsd:enumeration value="private-inheritance" />
- </xsd:restriction>
- </xsd:simpleType>
-
- <xsd:simpleType name="DoxRefKind">
- <xsd:restriction base="xsd:string">
- <xsd:enumeration value="compound" />
- <xsd:enumeration value="member" />
- </xsd:restriction>
- </xsd:simpleType>
-
- <xsd:simpleType name="DoxMemberKind">
- <xsd:restriction base="xsd:string">
- <xsd:enumeration value="define" />
- <xsd:enumeration value="property" />
- <xsd:enumeration value="event" />
- <xsd:enumeration value="variable" />
- <xsd:enumeration value="typedef" />
- <xsd:enumeration value="enum" />
- <xsd:enumeration value="function" />
- <xsd:enumeration value="signal" />
- <xsd:enumeration value="prototype" />
- <xsd:enumeration value="friend" />
- <xsd:enumeration value="dcop" />
- <xsd:enumeration value="slot" />
- </xsd:restriction>
- </xsd:simpleType>
-
- <xsd:simpleType name="DoxProtectionKind">
- <xsd:restriction base="xsd:string">
- <xsd:enumeration value="public" />
- <xsd:enumeration value="protected" />
- <xsd:enumeration value="private" />
- <xsd:enumeration value="package" />
- </xsd:restriction>
- </xsd:simpleType>
-
- <xsd:simpleType name="DoxVirtualKind">
- <xsd:restriction base="xsd:string">
- <xsd:enumeration value="non-virtual" />
- <xsd:enumeration value="virtual" />
- <xsd:enumeration value="pure-virtual" />
- </xsd:restriction>
- </xsd:simpleType>
-
- <xsd:simpleType name="DoxCompoundKind">
- <xsd:restriction base="xsd:string">
- <xsd:enumeration value="class" />
- <xsd:enumeration value="struct" />
- <xsd:enumeration value="union" />
- <xsd:enumeration value="interface" />
- <xsd:enumeration value="protocol" />
- <xsd:enumeration value="category" />
- <xsd:enumeration value="exception" />
- <xsd:enumeration value="file" />
- <xsd:enumeration value="namespace" />
- <xsd:enumeration value="group" />
- <xsd:enumeration value="page" />
- <xsd:enumeration value="example" />
- <xsd:enumeration value="dir" />
- </xsd:restriction>
- </xsd:simpleType>
-
- <xsd:simpleType name="DoxSectionKind">
- <xsd:restriction base="xsd:string">
- <xsd:enumeration value="user-defined" />
- <xsd:enumeration value="public-type" />
- <xsd:enumeration value="public-func" />
- <xsd:enumeration value="public-attrib" />
- <xsd:enumeration value="public-slot" />
- <xsd:enumeration value="signal" />
- <xsd:enumeration value="dcop-func" />
- <xsd:enumeration value="property" />
- <xsd:enumeration value="event" />
- <xsd:enumeration value="public-static-func" />
- <xsd:enumeration value="public-static-attrib" />
- <xsd:enumeration value="protected-type" />
- <xsd:enumeration value="protected-func" />
- <xsd:enumeration value="protected-attrib" />
- <xsd:enumeration value="protected-slot" />
- <xsd:enumeration value="protected-static-func" />
- <xsd:enumeration value="protected-static-attrib" />
- <xsd:enumeration value="package-type" />
- <xsd:enumeration value="package-func" />
- <xsd:enumeration value="package-attrib" />
- <xsd:enumeration value="package-static-func" />
- <xsd:enumeration value="package-static-attrib" />
- <xsd:enumeration value="private-type" />
- <xsd:enumeration value="private-func" />
- <xsd:enumeration value="private-attrib" />
- <xsd:enumeration value="private-slot" />
- <xsd:enumeration value="private-static-func" />
- <xsd:enumeration value="private-static-attrib" />
- <xsd:enumeration value="friend" />
- <xsd:enumeration value="related" />
- <xsd:enumeration value="define" />
- <xsd:enumeration value="prototype" />
- <xsd:enumeration value="typedef" />
- <xsd:enumeration value="enum" />
- <xsd:enumeration value="func" />
- <xsd:enumeration value="var" />
- </xsd:restriction>
- </xsd:simpleType>
-
- <xsd:simpleType name="DoxHighlightClass">
- <xsd:restriction base="xsd:string">
- <xsd:enumeration value="comment" />
- <xsd:enumeration value="normal" />
- <xsd:enumeration value="preprocessor" />
- <xsd:enumeration value="keyword" />
- <xsd:enumeration value="keywordtype" />
- <xsd:enumeration value="keywordflow" />
- <xsd:enumeration value="stringliteral" />
- <xsd:enumeration value="charliteral" />
- </xsd:restriction>
- </xsd:simpleType>
-
- <xsd:simpleType name="DoxSimpleSectKind">
- <xsd:restriction base="xsd:string">
- <xsd:enumeration value="see" />
- <xsd:enumeration value="return" />
- <xsd:enumeration value="author" />
- <xsd:enumeration value="authors" />
- <xsd:enumeration value="version" />
- <xsd:enumeration value="since" />
- <xsd:enumeration value="date" />
- <xsd:enumeration value="note" />
- <xsd:enumeration value="warning" />
- <xsd:enumeration value="pre" />
- <xsd:enumeration value="post" />
- <xsd:enumeration value="copyright" />
- <xsd:enumeration value="invariant" />
- <xsd:enumeration value="remark" />
- <xsd:enumeration value="attention" />
- <xsd:enumeration value="par" />
- <xsd:enumeration value="rcs" />
- </xsd:restriction>
- </xsd:simpleType>
-
- <xsd:simpleType name="DoxVersionNumber">
- <xsd:restriction base="xsd:string">
- <xsd:pattern value="\d+\.\d+.*" />
- </xsd:restriction>
- </xsd:simpleType>
-
- <xsd:simpleType name="DoxImageKind">
- <xsd:restriction base="xsd:string">
- <xsd:enumeration value="html" />
- <xsd:enumeration value="latex" />
- <xsd:enumeration value="rtf" />
- </xsd:restriction>
- </xsd:simpleType>
-
- <xsd:simpleType name="DoxParamListKind">
- <xsd:restriction base="xsd:string">
- <xsd:enumeration value="param" />
- <xsd:enumeration value="retval" />
- <xsd:enumeration value="exception" />
- <xsd:enumeration value="templateparam" />
- </xsd:restriction>
- </xsd:simpleType>
-
- <xsd:simpleType name="DoxCharRange">
- <xsd:restriction base="xsd:string">
- <xsd:pattern value="[aeiouncAEIOUNC]" />
- </xsd:restriction>
- </xsd:simpleType>
-
- <xsd:simpleType name="DoxParamDir">
- <xsd:restriction base="xsd:string">
- <xsd:enumeration value="in"/>
- <xsd:enumeration value="out"/>
- <xsd:enumeration value="inout"/>
- </xsd:restriction>
- </xsd:simpleType>
-
- <xsd:simpleType name="DoxAccessor">
- <xsd:restriction base="xsd:string">
- <xsd:enumeration value="retain"/>
- <xsd:enumeration value="copy"/>
- <xsd:enumeration value="assign"/>
- </xsd:restriction>
- </xsd:simpleType>
-
-</xsd:schema>
-
diff --git a/trunk/src/compound_xsd.h b/trunk/src/compound_xsd.h
deleted file mode 100644
index 6531857..0000000
--- a/trunk/src/compound_xsd.h
+++ /dev/null
@@ -1,829 +0,0 @@
-"<?xml version='1.0' encoding='utf-8' ?>\n"
-"<xsd:schema xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\">\n"
-" <xsd:element name=\"doxygen\" type=\"DoxygenType\"/>\n"
-"\n"
-" <!-- Complex types -->\n"
-"\n"
-" <xsd:complexType name=\"DoxygenType\">\n"
-" <xsd:sequence maxOccurs=\"unbounded\">\n"
-" <xsd:element name=\"compounddef\" type=\"compounddefType\" minOccurs=\"0\" />\n"
-" </xsd:sequence>\n"
-" <xsd:attribute name=\"version\" type=\"DoxVersionNumber\" use=\"required\" />\n"
-" </xsd:complexType>\n"
-"\n"
-" <xsd:complexType name=\"compounddefType\">\n"
-" <xsd:sequence>\n"
-" <xsd:element name=\"compoundname\" type=\"xsd:string\"/>\n"
-" <xsd:element name=\"title\" type=\"xsd:string\" minOccurs=\"0\" />\n"
-" <xsd:element name=\"basecompoundref\" type=\"compoundRefType\" minOccurs=\"0\" maxOccurs=\"unbounded\" />\n"
-" <xsd:element name=\"derivedcompoundref\" type=\"compoundRefType\" minOccurs=\"0\" maxOccurs=\"unbounded\" />\n"
-" <xsd:element name=\"includes\" type=\"incType\" minOccurs=\"0\" maxOccurs=\"unbounded\" />\n"
-" <xsd:element name=\"includedby\" type=\"incType\" minOccurs=\"0\" maxOccurs=\"unbounded\" />\n"
-" <xsd:element name=\"incdepgraph\" type=\"graphType\" minOccurs=\"0\" />\n"
-" <xsd:element name=\"invincdepgraph\" type=\"graphType\" minOccurs=\"0\" />\n"
-" <xsd:element name=\"innerdir\" type=\"refType\" minOccurs=\"0\" maxOccurs=\"unbounded\" />\n"
-" <xsd:element name=\"innerfile\" type=\"refType\" minOccurs=\"0\" maxOccurs=\"unbounded\" />\n"
-" <xsd:element name=\"innerclass\" type=\"refType\" minOccurs=\"0\" maxOccurs=\"unbounded\" />\n"
-" <xsd:element name=\"innernamespace\" type=\"refType\" minOccurs=\"0\" maxOccurs=\"unbounded\" />\n"
-" <xsd:element name=\"innerpage\" type=\"refType\" minOccurs=\"0\" maxOccurs=\"unbounded\" />\n"
-" <xsd:element name=\"innergroup\" type=\"refType\" minOccurs=\"0\" maxOccurs=\"unbounded\" />\n"
-" <xsd:element name=\"templateparamlist\" type=\"templateparamlistType\" minOccurs=\"0\" />\n"
-" <xsd:element name=\"sectiondef\" type=\"sectiondefType\" minOccurs=\"0\" maxOccurs=\"unbounded\" />\n"
-" <xsd:element name=\"briefdescription\" type=\"descriptionType\" minOccurs=\"0\" />\n"
-" <xsd:element name=\"detaileddescription\" type=\"descriptionType\" minOccurs=\"0\" />\n"
-" <xsd:element name=\"inheritancegraph\" type=\"graphType\" minOccurs=\"0\" />\n"
-" <xsd:element name=\"collaborationgraph\" type=\"graphType\" minOccurs=\"0\" />\n"
-" <xsd:element name=\"programlisting\" type=\"listingType\" minOccurs=\"0\" />\n"
-" <xsd:element name=\"location\" type=\"locationType\" minOccurs=\"0\" />\n"
-" <xsd:element name=\"listofallmembers\" type=\"listofallmembersType\" minOccurs=\"0\" />\n"
-" </xsd:sequence>\n"
-" <xsd:attribute name=\"id\" type=\"xsd:string\" />\n"
-" <xsd:attribute name=\"kind\" type=\"DoxCompoundKind\" />\n"
-" <xsd:attribute name=\"prot\" type=\"DoxProtectionKind\" />\n"
-" </xsd:complexType>\n"
-"\n"
-" <xsd:complexType name=\"listofallmembersType\">\n"
-" <xsd:sequence>\n"
-" <xsd:element name=\"member\" type=\"memberRefType\" minOccurs=\"0\" maxOccurs=\"unbounded\" />\n"
-" </xsd:sequence>\n"
-" </xsd:complexType>\n"
-"\n"
-" <xsd:complexType name=\"memberRefType\">\n"
-" <xsd:sequence>\n"
-" <xsd:element name=\"scope\" />\n"
-" <xsd:element name=\"name\" />\n"
-" </xsd:sequence>\n"
-" <xsd:attribute name=\"refid\" type=\"xsd:string\" />\n"
-" <xsd:attribute name=\"prot\" type=\"DoxProtectionKind\" />\n"
-" <xsd:attribute name=\"virt\" type=\"DoxVirtualKind\" />\n"
-" <xsd:attribute name=\"ambiguityscope\" type=\"xsd:string\" />\n"
-" </xsd:complexType>\n"
-"\n"
-" <xsd:complexType name=\"compoundRefType\">\n"
-" <xsd:simpleContent>\n"
-" <xsd:extension base=\"xsd:string\">\n"
-" <xsd:attribute name=\"refid\" type=\"xsd:string\" use=\"optional\" />\n"
-" <xsd:attribute name=\"prot\" type=\"DoxProtectionKind\" />\n"
-" <xsd:attribute name=\"virt\" type=\"DoxVirtualKind\" />\n"
-" </xsd:extension>\n"
-" </xsd:simpleContent>\n"
-" </xsd:complexType>\n"
-"\n"
-" <xsd:complexType name=\"reimplementType\">\n"
-" <xsd:simpleContent>\n"
-" <xsd:extension base=\"xsd:string\">\n"
-" <xsd:attribute name=\"refid\" type=\"xsd:string\" />\n"
-" </xsd:extension>\n"
-" </xsd:simpleContent>\n"
-" </xsd:complexType>\n"
-"\n"
-" <xsd:complexType name=\"incType\">\n"
-" <xsd:simpleContent>\n"
-" <xsd:extension base=\"xsd:string\">\n"
-" <xsd:attribute name=\"refid\" type=\"xsd:string\" />\n"
-" <xsd:attribute name=\"local\" type=\"DoxBool\" />\n"
-" </xsd:extension>\n"
-" </xsd:simpleContent>\n"
-" </xsd:complexType>\n"
-"\n"
-" <xsd:complexType name=\"refType\">\n"
-" <xsd:simpleContent>\n"
-" <xsd:extension base=\"xsd:string\">\n"
-" <xsd:attribute name=\"refid\" type=\"xsd:string\" />\n"
-" <xsd:attribute name=\"prot\" type=\"DoxProtectionKind\" use=\"optional\"/>\n"
-" </xsd:extension>\n"
-" </xsd:simpleContent>\n"
-" </xsd:complexType>\n"
-"\n"
-" <xsd:complexType name=\"refTextType\">\n"
-" <xsd:simpleContent>\n"
-" <xsd:extension base=\"xsd:string\">\n"
-" <xsd:attribute name=\"refid\" type=\"xsd:string\" />\n"
-" <xsd:attribute name=\"kindref\" type=\"DoxRefKind\" />\n"
-" <xsd:attribute name=\"external\" type=\"xsd:string\" use=\"optional\"/>\n"
-" <xsd:attribute name=\"tooltip\" type=\"xsd:string\" use=\"optional\"/>\n"
-" </xsd:extension>\n"
-" </xsd:simpleContent>\n"
-" </xsd:complexType>\n"
-"\n"
-" <xsd:complexType name=\"sectiondefType\">\n"
-" <xsd:sequence>\n"
-" <xsd:element name=\"header\" type=\"xsd:string\" minOccurs=\"0\" />\n"
-" <xsd:element name=\"description\" type=\"descriptionType\" minOccurs=\"0\" />\n"
-" <xsd:element name=\"memberdef\" type=\"memberdefType\" maxOccurs=\"unbounded\" />\n"
-" </xsd:sequence>\n"
-" <xsd:attribute name=\"kind\" type=\"DoxSectionKind\" />\n"
-" </xsd:complexType>\n"
-"\n"
-" <xsd:complexType name=\"memberdefType\">\n"
-" <xsd:sequence>\n"
-" <xsd:element name=\"templateparamlist\" type=\"templateparamlistType\" minOccurs=\"0\" />\n"
-" <xsd:element name=\"type\" type=\"linkedTextType\" minOccurs=\"0\" />\n"
-" <xsd:element name=\"definition\" minOccurs=\"0\" />\n"
-" <xsd:element name=\"argsstring\" minOccurs=\"0\" />\n"
-" <xsd:element name=\"name\" />\n"
-" <xsd:element name=\"read\" minOccurs=\"0\" />\n"
-" <xsd:element name=\"write\" minOccurs=\"0\" />\n"
-" <xsd:element name=\"bitfield\" minOccurs=\"0\" />\n"
-" <xsd:element name=\"reimplements\" type=\"reimplementType\" minOccurs=\"0\" maxOccurs=\"unbounded\" />\n"
-" <xsd:element name=\"reimplementedby\" type=\"reimplementType\" minOccurs=\"0\" maxOccurs=\"unbounded\" />\n"
-" <xsd:element name=\"param\" type=\"paramType\" minOccurs=\"0\" maxOccurs=\"unbounded\" />\n"
-" <xsd:element name=\"enumvalue\" type=\"enumvalueType\" minOccurs=\"0\" maxOccurs=\"unbounded\" />\n"
-" <xsd:element name=\"initializer\" type=\"linkedTextType\" minOccurs=\"0\" />\n"
-" <xsd:element name=\"exceptions\" type=\"linkedTextType\" minOccurs=\"0\" />\n"
-" <xsd:element name=\"briefdescription\" type=\"descriptionType\" minOccurs=\"0\" />\n"
-" <xsd:element name=\"detaileddescription\" type=\"descriptionType\" minOccurs=\"0\" />\n"
-" <xsd:element name=\"inbodydescription\" type=\"descriptionType\" minOccurs=\"0\" />\n"
-" <xsd:element name=\"location\" type=\"locationType\" />\n"
-" <xsd:element name=\"references\" type=\"referenceType\" minOccurs=\"0\" maxOccurs=\"unbounded\" />\n"
-" <xsd:element name=\"referencedby\" type=\"referenceType\" minOccurs=\"0\" maxOccurs=\"unbounded\" />\n"
-" </xsd:sequence>\n"
-" <xsd:attribute name=\"kind\" type=\"DoxMemberKind\" />\n"
-" <xsd:attribute name=\"id\" type=\"xsd:string\" />\n"
-" <xsd:attribute name=\"prot\" type=\"DoxProtectionKind\" />\n"
-" <xsd:attribute name=\"static\" type=\"DoxBool\" />\n"
-" <xsd:attribute name=\"const\" type=\"DoxBool\" />\n"
-" <xsd:attribute name=\"explicit\" type=\"DoxBool\" />\n"
-" <xsd:attribute name=\"inline\" type=\"DoxBool\" />\n"
-" <xsd:attribute name=\"virt\" type=\"DoxVirtualKind\" />\n"
-" <xsd:attribute name=\"volatile\" type=\"DoxBool\" />\n"
-" <xsd:attribute name=\"mutable\" type=\"DoxBool\" />\n"
-" <!-- Qt property -->\n"
-" <xsd:attribute name=\"readable\" type=\"DoxBool\" use=\"optional\"/>\n"
-" <xsd:attribute name=\"writable\" type=\"DoxBool\" use=\"optional\"/>\n"
-" <!-- C++/CLI variable -->\n"
-" <xsd:attribute name=\"initonly\" type=\"DoxBool\" use=\"optional\"/>\n"
-" <!-- C++/CLI and C# property -->\n"
-" <xsd:attribute name=\"settable\" type=\"DoxBool\" use=\"optional\"/>\n"
-" <xsd:attribute name=\"gettable\" type=\"DoxBool\" use=\"optional\"/>\n"
-" <!-- C++/CLI function -->\n"
-" <xsd:attribute name=\"final\" type=\"DoxBool\" use=\"optional\"/>\n"
-" <xsd:attribute name=\"sealed\" type=\"DoxBool\" use=\"optional\"/>\n"
-" <xsd:attribute name=\"new\" type=\"DoxBool\" use=\"optional\"/>\n"
-" <!-- C++/CLI event -->\n"
-" <xsd:attribute name=\"add\" type=\"DoxBool\" use=\"optional\"/>\n"
-" <xsd:attribute name=\"remove\" type=\"DoxBool\" use=\"optional\"/>\n"
-" <xsd:attribute name=\"raise\" type=\"DoxBool\" use=\"optional\"/>\n"
-" <!-- Objective-C 2.0 protocol method -->\n"
-" <xsd:attribute name=\"optional\" type=\"DoxBool\" use=\"optional\"/>\n"
-" <xsd:attribute name=\"required\" type=\"DoxBool\" use=\"optional\"/>\n"
-" <!-- Objective-C 2.0 property accessor -->\n"
-" <xsd:attribute name=\"accessor\" type=\"DoxAccessor\" use=\"optional\"/>\n"
-" </xsd:complexType>\n"
-"\n"
-" <xsd:complexType name=\"descriptionType\" mixed=\"true\">\n"
-" <xsd:sequence>\n"
-" <xsd:element name=\"title\" type=\"xsd:string\" minOccurs=\"0\"/> \n"
-" <xsd:element name=\"para\" type=\"docParaType\" minOccurs=\"0\" maxOccurs=\"unbounded\" />\n"
-" <xsd:element name=\"sect1\" type=\"docSect1Type\" minOccurs=\"0\" maxOccurs=\"unbounded\" />\n"
-" <xsd:element name=\"internal\" type=\"docInternalType\" minOccurs=\"0\" />\n"
-" </xsd:sequence>\n"
-" </xsd:complexType>\n"
-"\n"
-" <xsd:complexType name=\"enumvalueType\" mixed=\"true\">\n"
-" <xsd:sequence>\n"
-" <xsd:element name=\"name\" />\n"
-" <xsd:element name=\"initializer\" type=\"linkedTextType\" minOccurs=\"0\" />\n"
-" <xsd:element name=\"briefdescription\" type=\"descriptionType\" minOccurs=\"0\" />\n"
-" <xsd:element name=\"detaileddescription\" type=\"descriptionType\" minOccurs=\"0\" />\n"
-" </xsd:sequence>\n"
-" <xsd:attribute name=\"id\" type=\"xsd:string\" />\n"
-" <xsd:attribute name=\"prot\" type=\"DoxProtectionKind\" />\n"
-" </xsd:complexType>\n"
-"\n"
-" <xsd:complexType name=\"templateparamlistType\">\n"
-" <xsd:sequence>\n"
-" <xsd:element name=\"param\" type=\"paramType\" minOccurs=\"0\" maxOccurs=\"unbounded\" />\n"
-" </xsd:sequence>\n"
-" </xsd:complexType>\n"
-"\n"
-" <xsd:complexType name=\"paramType\">\n"
-" <xsd:sequence>\n"
-" <xsd:element name=\"type\" type=\"linkedTextType\" minOccurs=\"0\" />\n"
-" <xsd:element name=\"declname\" minOccurs=\"0\" />\n"
-" <xsd:element name=\"defname\" minOccurs=\"0\" />\n"
-" <xsd:element name=\"array\" minOccurs=\"0\" />\n"
-" <xsd:element name=\"defval\" type=\"linkedTextType\" minOccurs=\"0\" />\n"
-" <xsd:element name=\"briefdescription\" type=\"descriptionType\" minOccurs=\"0\" />\n"
-" </xsd:sequence>\n"
-" </xsd:complexType>\n"
-"\n"
-" <xsd:complexType name=\"linkedTextType\" mixed=\"true\">\n"
-" <xsd:sequence>\n"
-" <xsd:element name=\"ref\" type=\"refTextType\" minOccurs=\"0\" maxOccurs=\"unbounded\" />\n"
-" </xsd:sequence>\n"
-" </xsd:complexType>\n"
-"\n"
-" <xsd:complexType name=\"graphType\">\n"
-" <xsd:sequence>\n"
-" <xsd:element name=\"node\" type=\"nodeType\" maxOccurs=\"unbounded\" />\n"
-" </xsd:sequence>\n"
-" </xsd:complexType>\n"
-"\n"
-" <xsd:complexType name=\"nodeType\">\n"
-" <xsd:sequence>\n"
-" <xsd:element name=\"label\" />\n"
-" <xsd:element name=\"link\" type=\"linkType\" minOccurs=\"0\" />\n"
-" <xsd:element name=\"childnode\" type=\"childnodeType\" minOccurs=\"0\" maxOccurs=\"unbounded\" />\n"
-" </xsd:sequence>\n"
-" <xsd:attribute name=\"id\" type=\"xsd:string\" />\n"
-" </xsd:complexType>\n"
-"\n"
-" <xsd:complexType name=\"childnodeType\">\n"
-" <xsd:sequence>\n"
-" <xsd:element name=\"edgelabel\" minOccurs=\"0\" maxOccurs=\"unbounded\"/>\n"
-" </xsd:sequence>\n"
-" <xsd:attribute name=\"refid\" type=\"xsd:string\" />\n"
-" <xsd:attribute name=\"relation\" type=\"DoxGraphRelation\" />\n"
-" </xsd:complexType>\n"
-"\n"
-" <xsd:complexType name=\"linkType\">\n"
-" <xsd:attribute name=\"refid\" type=\"xsd:string\" />\n"
-" <xsd:attribute name=\"external\" type=\"xsd:string\" use=\"optional\"/>\n"
-" </xsd:complexType>\n"
-"\n"
-" <xsd:complexType name=\"listingType\">\n"
-" <xsd:sequence>\n"
-" <xsd:element name=\"codeline\" type=\"codelineType\" minOccurs=\"0\" maxOccurs=\"unbounded\" />\n"
-" </xsd:sequence>\n"
-" </xsd:complexType>\n"
-"\n"
-" <xsd:complexType name=\"codelineType\">\n"
-" <xsd:sequence>\n"
-" <xsd:element name=\"highlight\" type=\"highlightType\" minOccurs=\"0\" maxOccurs=\"unbounded\" />\n"
-" </xsd:sequence>\n"
-" <xsd:attribute name=\"lineno\" type=\"xsd:integer\" />\n"
-" <xsd:attribute name=\"refid\" type=\"xsd:string\" />\n"
-" <xsd:attribute name=\"refkind\" type=\"DoxRefKind\" />\n"
-" <xsd:attribute name=\"external\" type=\"DoxBool\" />\n"
-" </xsd:complexType>\n"
-"\n"
-" <xsd:complexType name=\"highlightType\" mixed=\"true\">\n"
-" <xsd:choice minOccurs=\"0\" maxOccurs=\"unbounded\">\n"
-" <xsd:element name=\"sp\" />\n"
-" <xsd:element name=\"ref\" type=\"refTextType\" />\n"
-" </xsd:choice>\n"
-" <xsd:attribute name=\"class\" type=\"DoxHighlightClass\" />\n"
-" </xsd:complexType>\n"
-"\n"
-" <xsd:complexType name=\"referenceType\" mixed=\"true\">\n"
-" <xsd:attribute name=\"refid\" type=\"xsd:string\" />\n"
-" <xsd:attribute name=\"compoundref\" type=\"xsd:string\" use=\"optional\" />\n"
-" <xsd:attribute name=\"startline\" type=\"xsd:integer\" />\n"
-" <xsd:attribute name=\"endline\" type=\"xsd:integer\" />\n"
-" </xsd:complexType>\n"
-"\n"
-" <xsd:complexType name=\"locationType\">\n"
-" <xsd:attribute name=\"file\" type=\"xsd:string\" />\n"
-" <xsd:attribute name=\"line\" type=\"xsd:integer\" />\n"
-" <xsd:attribute name=\"bodyfile\" type=\"xsd:string\" />\n"
-" <xsd:attribute name=\"bodystart\" type=\"xsd:integer\" />\n"
-" <xsd:attribute name=\"bodyend\" type=\"xsd:integer\" />\n"
-" </xsd:complexType>\n"
-"\n"
-" <xsd:complexType name=\"docSect1Type\" mixed=\"true\">\n"
-" <xsd:sequence>\n"
-" <xsd:element name=\"title\" type=\"xsd:string\" /> \n"
-" <xsd:element name=\"para\" type=\"docParaType\" minOccurs=\"0\" maxOccurs=\"unbounded\" />\n"
-" <xsd:element name=\"sect2\" type=\"docSect2Type\" minOccurs=\"0\" maxOccurs=\"unbounded\" />\n"
-" <xsd:element name=\"internal\" type=\"docInternalS1Type\" minOccurs=\"0\" />\n"
-" </xsd:sequence>\n"
-" <xsd:attribute name=\"id\" type=\"xsd:string\" />\n"
-" </xsd:complexType>\n"
-"\n"
-" <xsd:complexType name=\"docSect2Type\" mixed=\"true\">\n"
-" <xsd:sequence>\n"
-" <xsd:element name=\"title\" type=\"xsd:string\" /> \n"
-" <xsd:element name=\"para\" type=\"docParaType\" minOccurs=\"0\" maxOccurs=\"unbounded\" />\n"
-" <xsd:element name=\"sect3\" type=\"docSect3Type\" minOccurs=\"0\" maxOccurs=\"unbounded\" />\n"
-" <xsd:element name=\"internal\" type=\"docInternalS2Type\" minOccurs=\"0\" />\n"
-" </xsd:sequence>\n"
-" <xsd:attribute name=\"id\" type=\"xsd:string\" />\n"
-" </xsd:complexType>\n"
-"\n"
-" <xsd:complexType name=\"docSect3Type\" mixed=\"true\">\n"
-" <xsd:sequence>\n"
-" <xsd:element name=\"title\" type=\"xsd:string\" /> \n"
-" <xsd:element name=\"para\" type=\"docParaType\" minOccurs=\"0\" maxOccurs=\"unbounded\" />\n"
-" <xsd:element name=\"sect4\" type=\"docSect4Type\" minOccurs=\"0\" maxOccurs=\"unbounded\" />\n"
-" <xsd:element name=\"internal\" type=\"docInternalS3Type\" minOccurs=\"0\" />\n"
-" </xsd:sequence>\n"
-" <xsd:attribute name=\"id\" type=\"xsd:string\" />\n"
-" </xsd:complexType>\n"
-"\n"
-" <xsd:complexType name=\"docSect4Type\" mixed=\"true\">\n"
-" <xsd:sequence>\n"
-" <xsd:element name=\"title\" type=\"xsd:string\" /> \n"
-" <xsd:element name=\"para\" type=\"docParaType\" minOccurs=\"0\" maxOccurs=\"unbounded\" />\n"
-" <xsd:element name=\"internal\" type=\"docInternalS4Type\" minOccurs=\"0\" />\n"
-" </xsd:sequence>\n"
-" <xsd:attribute name=\"id\" type=\"xsd:string\" />\n"
-" </xsd:complexType>\n"
-"\n"
-" <xsd:complexType name=\"docInternalType\" mixed=\"true\">\n"
-" <xsd:sequence>\n"
-" <xsd:element name=\"para\" type=\"docParaType\" minOccurs=\"0\" maxOccurs=\"unbounded\" />\n"
-" <xsd:element name=\"sect1\" type=\"docSect1Type\" minOccurs=\"0\" maxOccurs=\"unbounded\" />\n"
-" </xsd:sequence>\n"
-" </xsd:complexType>\n"
-"\n"
-" <xsd:complexType name=\"docInternalS1Type\" mixed=\"true\">\n"
-" <xsd:sequence>\n"
-" <xsd:element name=\"para\" type=\"docParaType\" minOccurs=\"0\" maxOccurs=\"unbounded\" />\n"
-" <xsd:element name=\"sect2\" type=\"docSect2Type\" minOccurs=\"0\" maxOccurs=\"unbounded\" />\n"
-" </xsd:sequence>\n"
-" </xsd:complexType>\n"
-"\n"
-" <xsd:complexType name=\"docInternalS2Type\" mixed=\"true\">\n"
-" <xsd:sequence>\n"
-" <xsd:element name=\"para\" type=\"docParaType\" minOccurs=\"0\" maxOccurs=\"unbounded\" />\n"
-" <xsd:element name=\"sect3\" type=\"docSect3Type\" minOccurs=\"0\" maxOccurs=\"unbounded\" />\n"
-" </xsd:sequence>\n"
-" </xsd:complexType>\n"
-"\n"
-" <xsd:complexType name=\"docInternalS3Type\" mixed=\"true\">\n"
-" <xsd:sequence>\n"
-" <xsd:element name=\"para\" type=\"docParaType\" minOccurs=\"0\" maxOccurs=\"unbounded\" />\n"
-" <xsd:element name=\"sect3\" type=\"docSect4Type\" minOccurs=\"0\" maxOccurs=\"unbounded\" />\n"
-" </xsd:sequence>\n"
-" </xsd:complexType>\n"
-"\n"
-" <xsd:complexType name=\"docInternalS4Type\" mixed=\"true\">\n"
-" <xsd:sequence>\n"
-" <xsd:element name=\"para\" type=\"docParaType\" minOccurs=\"0\" maxOccurs=\"unbounded\" />\n"
-" </xsd:sequence>\n"
-" </xsd:complexType>\n"
-" \n"
-" <xsd:group name=\"docTitleCmdGroup\">\n"
-" <xsd:choice>\n"
-" <xsd:element name=\"ulink\" type=\"docURLLink\" />\n"
-" <xsd:element name=\"bold\" type=\"docMarkupType\" />\n"
-" <xsd:element name=\"emphasis\" type=\"docMarkupType\" />\n"
-" <xsd:element name=\"computeroutput\" type=\"docMarkupType\" />\n"
-" <xsd:element name=\"subscript\" type=\"docMarkupType\" />\n"
-" <xsd:element name=\"superscript\" type=\"docMarkupType\" />\n"
-" <xsd:element name=\"center\" type=\"docMarkupType\" />\n"
-" <xsd:element name=\"small\" type=\"docMarkupType\" />\n"
-" <xsd:element name=\"htmlonly\" type=\"xsd:string\" />\n"
-" <xsd:element name=\"latexonly\" type=\"xsd:string\" />\n"
-" <xsd:element name=\"dot\" type=\"xsd:string\" />\n"
-" <xsd:element name=\"anchor\" type=\"docAnchorType\" />\n"
-" <xsd:element name=\"formula\" type=\"docFormulaType\" />\n"
-" <xsd:element name=\"ref\" type=\"docRefTextType\" />\n"
-" <xsd:element name=\"copy\" type=\"docEmptyType\" />\n"
-" <xsd:element name=\"trademark\" type=\"docEmptyType\" />\n"
-" <xsd:element name=\"registered\" type=\"docEmptyType\" />\n"
-" <xsd:element name=\"lsquo\" type=\"docEmptyType\" />\n"
-" <xsd:element name=\"rsquo\" type=\"docEmptyType\" />\n"
-" <xsd:element name=\"ldquo\" type=\"docEmptyType\" />\n"
-" <xsd:element name=\"rdquo\" type=\"docEmptyType\" />\n"
-" <xsd:element name=\"ndash\" type=\"docEmptyType\" />\n"
-" <xsd:element name=\"mdash\" type=\"docEmptyType\" />\n"
-" <xsd:element name=\"umlaut\" type=\"docCharType\" />\n"
-" <xsd:element name=\"acute\" type=\"docCharType\" />\n"
-" <xsd:element name=\"grave\" type=\"docCharType\" />\n"
-" <xsd:element name=\"circ\" type=\"docCharType\" />\n"
-" <xsd:element name=\"slash\" type=\"docCharType\" />\n"
-" <xsd:element name=\"tilde\" type=\"docCharType\" />\n"
-" <xsd:element name=\"cedil\" type=\"docCharType\" />\n"
-" <xsd:element name=\"ring\" type=\"docCharType\" />\n"
-" <xsd:element name=\"szlig\" type=\"docEmptyType\" />\n"
-" <xsd:element name=\"nonbreakablespace\" type=\"docEmptyType\" />\n"
-" </xsd:choice>\n"
-" </xsd:group>\n"
-"\n"
-" <xsd:complexType name=\"docTitleType\" mixed=\"true\">\n"
-" <xsd:group ref=\"docTitleCmdGroup\" minOccurs=\"0\" maxOccurs=\"unbounded\" />\n"
-" </xsd:complexType>\n"
-"\n"
-" <xsd:group name=\"docCmdGroup\">\n"
-" <xsd:choice>\n"
-" <xsd:group ref=\"docTitleCmdGroup\"/>\n"
-" <xsd:element name=\"linebreak\" type=\"docEmptyType\" />\n"
-" <xsd:element name=\"hruler\" type=\"docEmptyType\" />\n"
-" <xsd:element name=\"preformatted\" type=\"docMarkupType\" />\n"
-" <xsd:element name=\"programlisting\" type=\"listingType\" />\n"
-" <xsd:element name=\"verbatim\" type=\"xsd:string\" />\n"
-" <xsd:element name=\"indexentry\" type=\"docIndexEntryType\" />\n"
-" <xsd:element name=\"orderedlist\" type=\"docListType\" />\n"
-" <xsd:element name=\"itemizedlist\" type=\"docListType\" />\n"
-" <xsd:element name=\"simplesect\" type=\"docSimpleSectType\" />\n"
-" <xsd:element name=\"title\" type=\"docTitleType\" />\n"
-" <xsd:element name=\"variablelist\" type=\"docVariableListType\" />\n"
-" <xsd:element name=\"table\" type=\"docTableType\" />\n"
-" <xsd:element name=\"heading\" type=\"docHeadingType\" />\n"
-" <xsd:element name=\"image\" type=\"docImageType\" />\n"
-" <xsd:element name=\"dotfile\" type=\"docDotFileType\" />\n"
-" <xsd:element name=\"toclist\" type=\"docTocListType\" />\n"
-" <xsd:element name=\"language\" type=\"docLanguageType\" />\n"
-" <xsd:element name=\"parameterlist\" type=\"docParamListType\" />\n"
-" <xsd:element name=\"xrefsect\" type=\"docXRefSectType\" />\n"
-" <xsd:element name=\"copydoc\" type=\"docCopyType\" />\n"
-" <xsd:element name=\"blockquote\" type=\"docBlockQuoteType\" />\n"
-" </xsd:choice>\n"
-" </xsd:group>\n"
-"\n"
-" <xsd:complexType name=\"docParaType\" mixed=\"true\">\n"
-" <xsd:group ref=\"docCmdGroup\" minOccurs=\"0\" maxOccurs=\"unbounded\" />\n"
-" </xsd:complexType>\n"
-"\n"
-" <xsd:complexType name=\"docMarkupType\" mixed=\"true\">\n"
-" <xsd:group ref=\"docCmdGroup\" minOccurs=\"0\" maxOccurs=\"unbounded\" />\n"
-" </xsd:complexType>\n"
-"\n"
-" <xsd:complexType name=\"docURLLink\" mixed=\"true\">\n"
-" <xsd:group ref=\"docTitleCmdGroup\" minOccurs=\"0\" maxOccurs=\"unbounded\" />\n"
-" <xsd:attribute name=\"url\" type=\"xsd:string\" />\n"
-" </xsd:complexType>\n"
-"\n"
-" <xsd:complexType name=\"docAnchorType\" mixed=\"true\">\n"
-" <xsd:attribute name=\"id\" type=\"xsd:string\" />\n"
-" </xsd:complexType>\n"
-"\n"
-" <xsd:complexType name=\"docFormulaType\" mixed=\"true\">\n"
-" <xsd:attribute name=\"id\" type=\"xsd:string\" />\n"
-" </xsd:complexType>\n"
-"\n"
-" <xsd:complexType name=\"docIndexEntryType\">\n"
-" <xsd:sequence>\n"
-" <xsd:element name=\"primaryie\" type=\"xsd:string\" />\n"
-" <xsd:element name=\"secondaryie\" type=\"xsd:string\" />\n"
-" </xsd:sequence>\n"
-" </xsd:complexType>\n"
-"\n"
-" <xsd:complexType name=\"docListType\">\n"
-" <xsd:sequence>\n"
-" <xsd:element name=\"listitem\" type=\"docListItemType\" maxOccurs=\"unbounded\" />\n"
-" </xsd:sequence>\n"
-" </xsd:complexType>\n"
-"\n"
-" <xsd:complexType name=\"docListItemType\">\n"
-" <xsd:sequence>\n"
-" <xsd:element name=\"para\" type=\"docParaType\" minOccurs=\"0\" maxOccurs=\"unbounded\" />\n"
-" </xsd:sequence>\n"
-" </xsd:complexType>\n"
-"\n"
-" <xsd:complexType name=\"docSimpleSectType\">\n"
-" <xsd:sequence>\n"
-" <xsd:element name=\"title\" type=\"docTitleType\" minOccurs=\"0\" />\n"
-" <xsd:sequence minOccurs=\"0\" maxOccurs=\"unbounded\">\n"
-" <xsd:element name=\"para\" type=\"docParaType\" minOccurs=\"1\" maxOccurs=\"unbounded\" />\n"
-" <xsd:element name=\"simplesectsep\" type=\"docEmptyType\" minOccurs=\"0\"/>\n"
-" </xsd:sequence>\n"
-" </xsd:sequence>\n"
-" <xsd:attribute name=\"kind\" type=\"DoxSimpleSectKind\" />\n"
-" </xsd:complexType>\n"
-"\n"
-" <xsd:complexType name=\"docVarListEntryType\">\n"
-" <xsd:sequence>\n"
-" <xsd:element name=\"term\" type=\"docTitleType\" />\n"
-" </xsd:sequence>\n"
-" </xsd:complexType>\n"
-"\n"
-" <xsd:group name=\"docVariableListGroup\">\n"
-" <xsd:sequence>\n"
-" <xsd:element name=\"varlistentry\" type=\"docVarListEntryType\" />\n"
-" <xsd:element name=\"listitem\" type=\"docListItemType\" />\n"
-" </xsd:sequence>\n"
-" </xsd:group>\n"
-"\n"
-" <xsd:complexType name=\"docVariableListType\">\n"
-" <xsd:sequence>\n"
-" <xsd:group ref=\"docVariableListGroup\" maxOccurs=\"unbounded\" />\n"
-" </xsd:sequence>\n"
-" </xsd:complexType>\n"
-"\n"
-" <xsd:complexType name=\"docRefTextType\" mixed=\"true\">\n"
-" <xsd:group ref=\"docTitleCmdGroup\" minOccurs=\"0\" maxOccurs=\"unbounded\" />\n"
-" <xsd:attribute name=\"refid\" type=\"xsd:string\" />\n"
-" <xsd:attribute name=\"kindref\" type=\"DoxRefKind\" />\n"
-" <xsd:attribute name=\"external\" type=\"xsd:string\" />\n"
-" </xsd:complexType>\n"
-"\n"
-" <xsd:complexType name=\"docTableType\">\n"
-" <xsd:sequence>\n"
-" <xsd:element name=\"row\" type=\"docRowType\" minOccurs=\"0\" maxOccurs=\"unbounded\" />\n"
-" <xsd:element name=\"caption\" type=\"docCaptionType\" minOccurs=\"0\" />\n"
-" </xsd:sequence>\n"
-" <xsd:attribute name=\"rows\" type=\"xsd:integer\" />\n"
-" <xsd:attribute name=\"cols\" type=\"xsd:integer\" />\n"
-" </xsd:complexType>\n"
-"\n"
-" <xsd:complexType name=\"docRowType\">\n"
-" <xsd:sequence>\n"
-" <xsd:element name=\"entry\" type=\"docEntryType\" minOccurs=\"0\" maxOccurs=\"unbounded\" />\n"
-" </xsd:sequence>\n"
-" </xsd:complexType>\n"
-"\n"
-" <xsd:complexType name=\"docEntryType\">\n"
-" <xsd:sequence>\n"
-" <xsd:element name=\"para\" type=\"docParaType\" minOccurs=\"0\" maxOccurs=\"unbounded\" />\n"
-" </xsd:sequence>\n"
-" <xsd:attribute name=\"thead\" type=\"DoxBool\" />\n"
-" </xsd:complexType>\n"
-"\n"
-" <xsd:complexType name=\"docCaptionType\" mixed=\"true\">\n"
-" <xsd:group ref=\"docTitleCmdGroup\" minOccurs=\"0\" maxOccurs=\"unbounded\" />\n"
-" </xsd:complexType>\n"
-"\n"
-" <xsd:complexType name=\"docHeadingType\" mixed=\"true\">\n"
-" <xsd:group ref=\"docTitleCmdGroup\" minOccurs=\"0\" maxOccurs=\"unbounded\" />\n"
-" <xsd:attribute name=\"level\" type=\"xsd:integer\" /> <!-- todo: range 1-6 -->\n"
-" </xsd:complexType>\n"
-"\n"
-" <xsd:complexType name=\"docImageType\" mixed=\"true\">\n"
-" <xsd:group ref=\"docTitleCmdGroup\" minOccurs=\"0\" maxOccurs=\"unbounded\" />\n"
-" <xsd:attribute name=\"type\" type=\"DoxImageKind\" /> \n"
-" <xsd:attribute name=\"name\" type=\"xsd:string\" /> \n"
-" <xsd:attribute name=\"width\" type=\"xsd:string\" /> \n"
-" <xsd:attribute name=\"height\" type=\"xsd:string\" /> \n"
-" </xsd:complexType>\n"
-"\n"
-" <xsd:complexType name=\"docDotFileType\" mixed=\"true\">\n"
-" <xsd:group ref=\"docTitleCmdGroup\" minOccurs=\"0\" maxOccurs=\"unbounded\" />\n"
-" <xsd:attribute name=\"name\" type=\"xsd:string\" /> \n"
-" </xsd:complexType>\n"
-"\n"
-" <xsd:complexType name=\"docTocItemType\" mixed=\"true\">\n"
-" <xsd:group ref=\"docTitleCmdGroup\" minOccurs=\"0\" maxOccurs=\"unbounded\" />\n"
-" <xsd:attribute name=\"id\" type=\"xsd:string\" /> \n"
-" </xsd:complexType>\n"
-"\n"
-" <xsd:complexType name=\"docTocListType\">\n"
-" <xsd:sequence>\n"
-" <xsd:element name=\"tocitem\" type=\"docTocItemType\" minOccurs=\"0\" maxOccurs=\"unbounded\" />\n"
-" </xsd:sequence>\n"
-" </xsd:complexType>\n"
-"\n"
-" <xsd:complexType name=\"docLanguageType\">\n"
-" <xsd:sequence>\n"
-" <xsd:element name=\"para\" type=\"docParaType\" minOccurs=\"0\" maxOccurs=\"unbounded\" />\n"
-" </xsd:sequence>\n"
-" <xsd:attribute name=\"langid\" type=\"xsd:string\" /> \n"
-" </xsd:complexType>\n"
-"\n"
-" <xsd:complexType name=\"docParamListType\">\n"
-" <xsd:sequence>\n"
-" <xsd:element name=\"parameteritem\" type=\"docParamListItem\" minOccurs=\"0\" maxOccurs=\"unbounded\" />\n"
-" </xsd:sequence>\n"
-" <xsd:attribute name=\"kind\" type=\"DoxParamListKind\" /> \n"
-" </xsd:complexType>\n"
-"\n"
-" <xsd:complexType name=\"docParamListItem\">\n"
-" <xsd:sequence>\n"
-" <xsd:element name=\"parameternamelist\" type=\"docParamNameList\" minOccurs=\"0\" maxOccurs=\"unbounded\" />\n"
-" <xsd:element name=\"parameterdescription\" type=\"descriptionType\" />\n"
-" </xsd:sequence>\n"
-" </xsd:complexType>\n"
-"\n"
-" <xsd:complexType name=\"docParamNameList\">\n"
-" <xsd:sequence>\n"
-" <xsd:element name=\"parametertype\" type=\"docParamType\" minOccurs=\"0\" maxOccurs=\"unbounded\" />\n"
-" <xsd:element name=\"parametername\" type=\"docParamName\" minOccurs=\"0\" maxOccurs=\"unbounded\" />\n"
-" </xsd:sequence>\n"
-" </xsd:complexType>\n"
-"\n"
-" <xsd:complexType name=\"docParamType\" mixed=\"true\">\n"
-" <xsd:sequence>\n"
-" <xsd:element name=\"ref\" type=\"refTextType\" minOccurs=\"0\" maxOccurs=\"1\" />\n"
-" </xsd:sequence>\n"
-" </xsd:complexType>\n"
-"\n"
-" <xsd:complexType name=\"docParamName\" mixed=\"true\">\n"
-" <xsd:sequence>\n"
-" <xsd:element name=\"ref\" type=\"refTextType\" minOccurs=\"0\" maxOccurs=\"1\" />\n"
-" </xsd:sequence>\n"
-" <xsd:attribute name=\"direction\" type=\"DoxParamDir\" use=\"optional\" />\n"
-" </xsd:complexType>\n"
-"\n"
-" <xsd:complexType name=\"docXRefSectType\">\n"
-" <xsd:sequence>\n"
-" <xsd:element name=\"xreftitle\" type=\"xsd:string\" minOccurs=\"0\" maxOccurs=\"unbounded\" />\n"
-" <xsd:element name=\"xrefdescription\" type=\"descriptionType\" />\n"
-" </xsd:sequence>\n"
-" <xsd:attribute name=\"id\" type=\"xsd:string\" /> \n"
-" </xsd:complexType>\n"
-"\n"
-" <xsd:complexType name=\"docCopyType\">\n"
-" <xsd:sequence>\n"
-" <xsd:element name=\"para\" type=\"docParaType\" minOccurs=\"0\" maxOccurs=\"unbounded\" />\n"
-" <xsd:element name=\"sect1\" type=\"docSect1Type\" minOccurs=\"0\" maxOccurs=\"unbounded\" />\n"
-" <xsd:element name=\"internal\" type=\"docInternalType\" minOccurs=\"0\" />\n"
-" </xsd:sequence>\n"
-" <xsd:attribute name=\"link\" type=\"xsd:string\" /> \n"
-" </xsd:complexType>\n"
-"\n"
-" <xsd:complexType name=\"docBlockQuoteType\">\n"
-" <xsd:sequence>\n"
-" <xsd:element name=\"para\" type=\"docParaType\" minOccurs=\"0\" maxOccurs=\"unbounded\" />\n"
-" </xsd:sequence>\n"
-" </xsd:complexType>\n"
-"\n"
-" <xsd:complexType name=\"docCharType\">\n"
-" <xsd:attribute name=\"char\" type=\"DoxCharRange\"/> \n"
-" </xsd:complexType>\n"
-"\n"
-" <xsd:complexType name=\"docEmptyType\"/>\n"
-"\n"
-" <!-- Simple types -->\n"
-"\n"
-" <xsd:simpleType name=\"DoxBool\">\n"
-" <xsd:restriction base=\"xsd:string\">\n"
-" <xsd:enumeration value=\"yes\" />\n"
-" <xsd:enumeration value=\"no\" />\n"
-" </xsd:restriction>\n"
-" </xsd:simpleType>\n"
-"\n"
-" <xsd:simpleType name=\"DoxGraphRelation\">\n"
-" <xsd:restriction base=\"xsd:string\">\n"
-" <xsd:enumeration value=\"include\" />\n"
-" <xsd:enumeration value=\"usage\" />\n"
-" <xsd:enumeration value=\"template-instance\" />\n"
-" <xsd:enumeration value=\"public-inheritance\" />\n"
-" <xsd:enumeration value=\"protected-inheritance\" />\n"
-" <xsd:enumeration value=\"private-inheritance\" />\n"
-" </xsd:restriction>\n"
-" </xsd:simpleType>\n"
-"\n"
-" <xsd:simpleType name=\"DoxRefKind\">\n"
-" <xsd:restriction base=\"xsd:string\">\n"
-" <xsd:enumeration value=\"compound\" />\n"
-" <xsd:enumeration value=\"member\" />\n"
-" </xsd:restriction>\n"
-" </xsd:simpleType>\n"
-"\n"
-" <xsd:simpleType name=\"DoxMemberKind\">\n"
-" <xsd:restriction base=\"xsd:string\">\n"
-" <xsd:enumeration value=\"define\" />\n"
-" <xsd:enumeration value=\"property\" />\n"
-" <xsd:enumeration value=\"event\" />\n"
-" <xsd:enumeration value=\"variable\" />\n"
-" <xsd:enumeration value=\"typedef\" />\n"
-" <xsd:enumeration value=\"enum\" />\n"
-" <xsd:enumeration value=\"function\" />\n"
-" <xsd:enumeration value=\"signal\" />\n"
-" <xsd:enumeration value=\"prototype\" />\n"
-" <xsd:enumeration value=\"friend\" />\n"
-" <xsd:enumeration value=\"dcop\" />\n"
-" <xsd:enumeration value=\"slot\" />\n"
-" </xsd:restriction>\n"
-" </xsd:simpleType>\n"
-"\n"
-" <xsd:simpleType name=\"DoxProtectionKind\">\n"
-" <xsd:restriction base=\"xsd:string\">\n"
-" <xsd:enumeration value=\"public\" />\n"
-" <xsd:enumeration value=\"protected\" />\n"
-" <xsd:enumeration value=\"private\" />\n"
-" <xsd:enumeration value=\"package\" />\n"
-" </xsd:restriction>\n"
-" </xsd:simpleType>\n"
-"\n"
-" <xsd:simpleType name=\"DoxVirtualKind\">\n"
-" <xsd:restriction base=\"xsd:string\">\n"
-" <xsd:enumeration value=\"non-virtual\" />\n"
-" <xsd:enumeration value=\"virtual\" />\n"
-" <xsd:enumeration value=\"pure-virtual\" />\n"
-" </xsd:restriction>\n"
-" </xsd:simpleType>\n"
-"\n"
-" <xsd:simpleType name=\"DoxCompoundKind\">\n"
-" <xsd:restriction base=\"xsd:string\">\n"
-" <xsd:enumeration value=\"class\" />\n"
-" <xsd:enumeration value=\"struct\" />\n"
-" <xsd:enumeration value=\"union\" />\n"
-" <xsd:enumeration value=\"interface\" />\n"
-" <xsd:enumeration value=\"protocol\" />\n"
-" <xsd:enumeration value=\"category\" />\n"
-" <xsd:enumeration value=\"exception\" />\n"
-" <xsd:enumeration value=\"file\" />\n"
-" <xsd:enumeration value=\"namespace\" />\n"
-" <xsd:enumeration value=\"group\" />\n"
-" <xsd:enumeration value=\"page\" />\n"
-" <xsd:enumeration value=\"example\" />\n"
-" <xsd:enumeration value=\"dir\" />\n"
-" </xsd:restriction>\n"
-" </xsd:simpleType>\n"
-"\n"
-" <xsd:simpleType name=\"DoxSectionKind\">\n"
-" <xsd:restriction base=\"xsd:string\">\n"
-" <xsd:enumeration value=\"user-defined\" />\n"
-" <xsd:enumeration value=\"public-type\" />\n"
-" <xsd:enumeration value=\"public-func\" />\n"
-" <xsd:enumeration value=\"public-attrib\" />\n"
-" <xsd:enumeration value=\"public-slot\" />\n"
-" <xsd:enumeration value=\"signal\" />\n"
-" <xsd:enumeration value=\"dcop-func\" />\n"
-" <xsd:enumeration value=\"property\" />\n"
-" <xsd:enumeration value=\"event\" />\n"
-" <xsd:enumeration value=\"public-static-func\" />\n"
-" <xsd:enumeration value=\"public-static-attrib\" />\n"
-" <xsd:enumeration value=\"protected-type\" />\n"
-" <xsd:enumeration value=\"protected-func\" />\n"
-" <xsd:enumeration value=\"protected-attrib\" />\n"
-" <xsd:enumeration value=\"protected-slot\" />\n"
-" <xsd:enumeration value=\"protected-static-func\" />\n"
-" <xsd:enumeration value=\"protected-static-attrib\" />\n"
-" <xsd:enumeration value=\"package-type\" />\n"
-" <xsd:enumeration value=\"package-func\" />\n"
-" <xsd:enumeration value=\"package-attrib\" />\n"
-" <xsd:enumeration value=\"package-static-func\" />\n"
-" <xsd:enumeration value=\"package-static-attrib\" />\n"
-" <xsd:enumeration value=\"private-type\" />\n"
-" <xsd:enumeration value=\"private-func\" />\n"
-" <xsd:enumeration value=\"private-attrib\" />\n"
-" <xsd:enumeration value=\"private-slot\" />\n"
-" <xsd:enumeration value=\"private-static-func\" />\n"
-" <xsd:enumeration value=\"private-static-attrib\" />\n"
-" <xsd:enumeration value=\"friend\" />\n"
-" <xsd:enumeration value=\"related\" />\n"
-" <xsd:enumeration value=\"define\" />\n"
-" <xsd:enumeration value=\"prototype\" />\n"
-" <xsd:enumeration value=\"typedef\" />\n"
-" <xsd:enumeration value=\"enum\" />\n"
-" <xsd:enumeration value=\"func\" />\n"
-" <xsd:enumeration value=\"var\" />\n"
-" </xsd:restriction>\n"
-" </xsd:simpleType>\n"
-"\n"
-" <xsd:simpleType name=\"DoxHighlightClass\">\n"
-" <xsd:restriction base=\"xsd:string\">\n"
-" <xsd:enumeration value=\"comment\" />\n"
-" <xsd:enumeration value=\"normal\" />\n"
-" <xsd:enumeration value=\"preprocessor\" />\n"
-" <xsd:enumeration value=\"keyword\" />\n"
-" <xsd:enumeration value=\"keywordtype\" />\n"
-" <xsd:enumeration value=\"keywordflow\" />\n"
-" <xsd:enumeration value=\"stringliteral\" />\n"
-" <xsd:enumeration value=\"charliteral\" />\n"
-" </xsd:restriction>\n"
-" </xsd:simpleType>\n"
-"\n"
-" <xsd:simpleType name=\"DoxSimpleSectKind\">\n"
-" <xsd:restriction base=\"xsd:string\">\n"
-" <xsd:enumeration value=\"see\" />\n"
-" <xsd:enumeration value=\"return\" />\n"
-" <xsd:enumeration value=\"author\" />\n"
-" <xsd:enumeration value=\"authors\" />\n"
-" <xsd:enumeration value=\"version\" />\n"
-" <xsd:enumeration value=\"since\" />\n"
-" <xsd:enumeration value=\"date\" />\n"
-" <xsd:enumeration value=\"note\" />\n"
-" <xsd:enumeration value=\"warning\" />\n"
-" <xsd:enumeration value=\"pre\" />\n"
-" <xsd:enumeration value=\"post\" />\n"
-" <xsd:enumeration value=\"copyright\" />\n"
-" <xsd:enumeration value=\"invariant\" />\n"
-" <xsd:enumeration value=\"remark\" />\n"
-" <xsd:enumeration value=\"attention\" />\n"
-" <xsd:enumeration value=\"par\" />\n"
-" <xsd:enumeration value=\"rcs\" />\n"
-" </xsd:restriction>\n"
-" </xsd:simpleType>\n"
-"\n"
-" <xsd:simpleType name=\"DoxVersionNumber\">\n"
-" <xsd:restriction base=\"xsd:string\">\n"
-" <xsd:pattern value=\"\\d+\\.\\d+.*\" />\n"
-" </xsd:restriction>\n"
-" </xsd:simpleType>\n"
-"\n"
-" <xsd:simpleType name=\"DoxImageKind\">\n"
-" <xsd:restriction base=\"xsd:string\">\n"
-" <xsd:enumeration value=\"html\" />\n"
-" <xsd:enumeration value=\"latex\" />\n"
-" <xsd:enumeration value=\"rtf\" />\n"
-" </xsd:restriction>\n"
-" </xsd:simpleType>\n"
-"\n"
-" <xsd:simpleType name=\"DoxParamListKind\">\n"
-" <xsd:restriction base=\"xsd:string\">\n"
-" <xsd:enumeration value=\"param\" />\n"
-" <xsd:enumeration value=\"retval\" />\n"
-" <xsd:enumeration value=\"exception\" />\n"
-" <xsd:enumeration value=\"templateparam\" />\n"
-" </xsd:restriction>\n"
-" </xsd:simpleType>\n"
-"\n"
-" <xsd:simpleType name=\"DoxCharRange\">\n"
-" <xsd:restriction base=\"xsd:string\">\n"
-" <xsd:pattern value=\"[aeiouncAEIOUNC]\" />\n"
-" </xsd:restriction>\n"
-" </xsd:simpleType>\n"
-"\n"
-" <xsd:simpleType name=\"DoxParamDir\">\n"
-" <xsd:restriction base=\"xsd:string\">\n"
-" <xsd:enumeration value=\"in\"/>\n"
-" <xsd:enumeration value=\"out\"/>\n"
-" <xsd:enumeration value=\"inout\"/>\n"
-" </xsd:restriction>\n"
-" </xsd:simpleType>\n"
-"\n"
-" <xsd:simpleType name=\"DoxAccessor\">\n"
-" <xsd:restriction base=\"xsd:string\">\n"
-" <xsd:enumeration value=\"retain\"/>\n"
-" <xsd:enumeration value=\"copy\"/>\n"
-" <xsd:enumeration value=\"assign\"/>\n"
-" </xsd:restriction>\n"
-" </xsd:simpleType>\n"
-"\n"
-"</xsd:schema>\n"
-"\n"
diff --git a/trunk/src/config.h b/trunk/src/config.h
deleted file mode 100644
index ccbf713..0000000
--- a/trunk/src/config.h
+++ /dev/null
@@ -1,610 +0,0 @@
-/******************************************************************************
- *
- *
- *
- *
- * Copyright (C) 1997-2012 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.
- *
- */
-
-#ifndef CONFIG_H
-#define CONFIG_H
-
-#include "qtbc.h"
-#include <qstrlist.h>
-#include <qfile.h>
-#include <qdict.h>
-#include <qlist.h>
-#include "ftextstream.h"
-
-
-/*! \brief Abstract base class for any configuration option.
- *
- */
-class ConfigOption
-{
- friend class Config;
-
- public:
-
- /*! The type of option */
- enum OptionType
- {
- O_Info, //<! A section header
- O_List, //<! A list of items
- O_Enum, //<! A fixed set of items
- O_String, //<! A single item
- O_Int, //<! An integer value
- O_Bool, //<! A boolean value
- O_Obsolete //<! An obsolete option
- };
- enum
- {
- /*! Maximum length of an option in the config file. Used for
- * alignment purposes.
- */
- MAX_OPTION_LENGTH = 23
- };
- ConfigOption(OptionType t) : m_kind(t)
- {
- m_spaces.fill(' ',40);
- }
- virtual ~ConfigOption()
- {
- }
-
- /*! returns the kind of option this is. */
- OptionType kind() const { return m_kind; }
- QCString name() const { return m_name; }
- QCString docs() const { return m_doc; }
-
- QCString dependsOn() const { return m_dependency; }
- void addDependency(const char *dep) { m_dependency = dep; }
- void setEncoding(const QCString &e) { m_encoding = e; }
-
- protected:
- virtual void writeTemplate(FTextStream &t,bool sl,bool upd) = 0;
- virtual void convertStrToVal() {}
- virtual void substEnvVars() = 0;
- virtual void writeXML(FTextStream&) {}
- virtual void init() {}
-
- QCString convertToComment(const QCString &s);
- void writeBoolValue(FTextStream &t,bool v);
- void writeIntValue(FTextStream &t,int i);
- void writeStringValue(FTextStream &t,QCString &s);
- void writeStringList(FTextStream &t,QStrList &l);
-
- QCString m_spaces;
- QCString m_name;
- QCString m_doc;
- QCString m_dependency;
- QCString m_encoding;
- OptionType m_kind;
-};
-
-/*! \brief Section marker for grouping the configuration options
- *
- */
-class ConfigInfo : public ConfigOption
-{
- public:
- ConfigInfo(const char *name,const char *doc)
- : ConfigOption(O_Info)
- {
- m_name = name;
- m_doc = doc;
- }
- void writeTemplate(FTextStream &t, bool sl,bool)
- {
- if (!sl)
- {
- t << "\n";
- }
- t << "#---------------------------------------------------------------------------\n";
- t << "# " << m_doc << endl;
- t << "#---------------------------------------------------------------------------\n";
- }
- void substEnvVars() {}
-};
-
-/*! \brief Option of the list type.
- *
- */
-class ConfigList : public ConfigOption
-{
- public:
- enum WidgetType { String, File, Dir, FileAndDir };
- ConfigList(const char *name,const char *doc)
- : ConfigOption(O_List)
- {
- m_name = name;
- m_doc = doc;
- m_widgetType = String;
- }
- void addValue(const char *v) { m_value.append(v); }
- void setWidgetType(WidgetType w) { m_widgetType = w; }
- WidgetType widgetType() const { return m_widgetType; }
- QStrList *valueRef() { return &m_value; }
- void writeTemplate(FTextStream &t,bool sl,bool)
- {
- if (!sl)
- {
- t << endl;
- t << convertToComment(m_doc);
- t << endl;
- }
- t << m_name << m_spaces.left(MAX_OPTION_LENGTH-m_name.length()) << "=";
- writeStringList(t,m_value);
- t << "\n";
- }
- void substEnvVars();
- void writeXML(FTextStream&);
- void init() { m_value.clear(); }
- private:
- QStrList m_value;
- WidgetType m_widgetType;
-};
-
-/*! \brief Option of the enum type.
- *
- */
-class ConfigEnum : public ConfigOption
-{
- public:
- ConfigEnum(const char *name,const char *doc,const char *defVal)
- : ConfigOption(O_Enum)
- {
- m_name = name;
- m_doc = doc;
- m_value = defVal;
- m_defValue = defVal;
- }
- void addValue(const char *v) { m_valueRange.append(v); }
- QStrListIterator iterator()
- {
- return QStrListIterator(m_valueRange);
- }
- QCString *valueRef() { return &m_value; }
- void substEnvVars();
- void writeTemplate(FTextStream &t,bool sl,bool)
- {
- if (!sl)
- {
- t << endl;
- t << convertToComment(m_doc);
- t << endl;
- }
- t << m_name << m_spaces.left(MAX_OPTION_LENGTH-m_name.length()) << "=";
- writeStringValue(t,m_value);
- t << "\n";
- }
- void writeXML(FTextStream&);
- void init() { m_value = m_defValue.copy(); }
-
- private:
- QStrList m_valueRange;
- QCString m_value;
- QCString m_defValue;
-};
-
-/*! \brief Option of the string type.
- *
- */
-class ConfigString : public ConfigOption
-{
- public:
- enum WidgetType { String, File, Dir };
- ConfigString(const char *name,const char *doc)
- : ConfigOption(O_String)
- {
- m_name = name;
- m_doc = doc;
- m_widgetType = String;
- }
- ~ConfigString()
- {
- }
- void setWidgetType(WidgetType w) { m_widgetType = w; }
- WidgetType widgetType() const { return m_widgetType; }
- void setDefaultValue(const char *v) { m_defValue = v; }
- QCString *valueRef() { return &m_value; }
- void writeTemplate(FTextStream &t,bool sl,bool)
- {
- if (!sl)
- {
- t << endl;
- t << convertToComment(m_doc);
- t << endl;
- }
- t << m_name << m_spaces.left(MAX_OPTION_LENGTH-m_name.length()) << "=";
- writeStringValue(t,m_value);
- t << "\n";
- }
- void substEnvVars();
- void writeXML(FTextStream&);
- void init() { m_value = m_defValue.copy(); }
-
- private:
- QCString m_value;
- QCString m_defValue;
- WidgetType m_widgetType;
-};
-
-/*! \brief Option of the integer type.
- *
- */
-class ConfigInt : public ConfigOption
-{
- public:
- ConfigInt(const char *name,const char *doc,int minVal,int maxVal,int defVal)
- : ConfigOption(O_Int)
- {
- m_name = name;
- m_doc = doc;
- m_value = defVal;
- m_defValue = defVal;
- m_minVal = minVal;
- m_maxVal = maxVal;
- }
- QCString *valueStringRef() { return &m_valueString; }
- int *valueRef() { return &m_value; }
- int minVal() const { return m_minVal; }
- int maxVal() const { return m_maxVal; }
- void convertStrToVal();
- void substEnvVars();
- void writeTemplate(FTextStream &t,bool sl,bool upd)
- {
- if (!sl)
- {
- t << endl;
- t << convertToComment(m_doc);
- t << endl;
- }
- t << m_name << m_spaces.left(MAX_OPTION_LENGTH-m_name.length()) << "=";
- if (upd && !m_valueString.isEmpty())
- {
- writeStringValue(t,m_valueString);
- }
- else
- {
- writeIntValue(t,m_value);
- }
- t << "\n";
- }
- void writeXML(FTextStream&);
- void init() { m_value = m_defValue; }
- private:
- int m_value;
- int m_defValue;
- int m_minVal;
- int m_maxVal;
- QCString m_valueString;
-};
-
-/*! \brief Option of the boolean type.
- *
- */
-class ConfigBool : public ConfigOption
-{
- public:
- ConfigBool(const char *name,const char *doc,bool defVal)
- : ConfigOption(O_Bool)
- {
- m_name = name;
- m_doc = doc;
- m_value = defVal;
- m_defValue = defVal;
- }
- QCString *valueStringRef() { return &m_valueString; }
- bool *valueRef() { return &m_value; }
- void convertStrToVal();
- void substEnvVars();
- void setValueString(const QCString &v) { m_valueString = v; }
- void writeTemplate(FTextStream &t,bool sl,bool upd)
- {
- if (!sl)
- {
- t << endl;
- t << convertToComment(m_doc);
- t << endl;
- }
- t << m_name << m_spaces.left(MAX_OPTION_LENGTH-m_name.length()) << "=";
- if (upd && !m_valueString.isEmpty())
- {
- writeStringValue(t,m_valueString);
- }
- else
- {
- writeBoolValue(t,m_value);
- }
- t << "\n";
- }
- void writeXML(FTextStream&);
- void init() { m_value = m_defValue; }
- private:
- bool m_value;
- bool m_defValue;
- QCString m_valueString;
-};
-
-/*! \brief Section marker for obsolete options
- *
- */
-class ConfigObsolete : public ConfigOption
-{
- public:
- ConfigObsolete(const char *name,OptionType t) : ConfigOption(t)
- { m_name = name; }
- void writeTemplate(FTextStream &,bool,bool) {}
- void substEnvVars() {}
- void writeXML(FTextStream&);
-};
-
-
-// some convenience macros
-#define Config_getString(val) Config::instance()->getString(__FILE__,__LINE__,val)
-#define Config_getInt(val) Config::instance()->getInt(__FILE__,__LINE__,val)
-#define Config_getList(val) Config::instance()->getList(__FILE__,__LINE__,val)
-#define Config_getEnum(val) Config::instance()->getEnum(__FILE__,__LINE__,val)
-#define Config_getBool(val) Config::instance()->getBool(__FILE__,__LINE__,val)
-
-/*! \brief Singleton for configuration variables.
- *
- * This object holds the global static variables
- * read from a user-supplied configuration file.
- * The static member instance() can be used to get
- * a pointer to the one and only instance.
- *
- * Set all variables to their default values by
- * calling Config::instance()->init()
- *
- */
-class Config
-{
- public:
- /////////////////////////////
- // public API
- /////////////////////////////
-
- /*! Returns the one and only instance of this class */
- static Config *instance()
- {
- if (m_instance==0) m_instance = new Config;
- return m_instance;
- }
- /*! Delete the instance */
- static void deleteInstance()
- {
- delete m_instance;
- m_instance=0;
- }
-
- /*! Returns an iterator that can by used to iterate over the
- * configuration options.
- */
- QListIterator<ConfigOption> iterator()
- {
- return QListIterator<ConfigOption>(*m_options);
- }
-
- /*!
- * @name Getting configuration values.
- * @{
- */
-
- /*! Returns the value of the string option with name \a fileName.
- * The arguments \a num and \a name are for debugging purposes only.
- * There is a convenience function Config_getString() for this.
- */
- QCString &getString(const char *fileName,int num,const char *name) const;
-
- /*! Returns the value of the list option with name \a fileName.
- * The arguments \a num and \a name are for debugging purposes only.
- * There is a convenience function Config_getList() for this.
- */
- QStrList &getList(const char *fileName,int num,const char *name) const;
-
- /*! Returns the value of the enum option with name \a fileName.
- * The arguments \a num and \a name are for debugging purposes only.
- * There is a convenience function Config_getEnum() for this.
- */
- QCString &getEnum(const char *fileName,int num,const char *name) const;
-
- /*! Returns the value of the integer option with name \a fileName.
- * The arguments \a num and \a name are for debugging purposes only.
- * There is a convenience function Config_getInt() for this.
- */
- int &getInt(const char *fileName,int num,const char *name) const;
-
- /*! Returns the value of the boolean option with name \a fileName.
- * The arguments \a num and \a name are for debugging purposes only.
- * There is a convenience function Config_getBool() for this.
- */
- bool &getBool(const char *fileName,int num,const char *name) const;
-
- /*! Returns the ConfigOption corresponding with \a name or 0 if
- * the option is not supported.
- */
- ConfigOption *get(const char *name) const
- {
- return m_dict->find(name);
- }
- /* @} */
-
- /*!
- * @name Adding configuration options.
- * @{
- */
-
- /*! Starts a new configuration section with \a name and description \a doc.
- * \returns An object representing the option.
- */
- ConfigInfo *addInfo(const char *name,const char *doc)
- {
- ConfigInfo *result = new ConfigInfo(name,doc);
- m_options->append(result);
- return result;
- }
-
- /*! Adds a new string option with \a name and documentation \a doc.
- * \returns An object representing the option.
- */
- ConfigString *addString(const char *name,
- const char *doc)
- {
- ConfigString *result = new ConfigString(name,doc);
- m_options->append(result);
- m_dict->insert(name,result);
- return result;
- }
-
- /*! Adds a new enumeration option with \a name and documentation \a doc
- * and initial value \a defVal.
- * \returns An object representing the option.
- */
- ConfigEnum *addEnum(const char *name,
- const char *doc,
- const char *defVal)
- {
- ConfigEnum *result = new ConfigEnum(name,doc,defVal);
- m_options->append(result);
- m_dict->insert(name,result);
- return result;
- }
-
- /*! Adds a new string option with \a name and documentation \a doc.
- * \returns An object representing the option.
- */
- ConfigList *addList(const char *name,
- const char *doc)
- {
- ConfigList *result = new ConfigList(name,doc);
- m_options->append(result);
- m_dict->insert(name,result);
- return result;
- }
-
- /*! Adds a new integer option with \a name and documentation \a doc.
- * The integer has a range between \a minVal and \a maxVal and a
- * default value of \a defVal.
- * \returns An object representing the option.
- */
- ConfigInt *addInt(const char *name,
- const char *doc,
- int minVal,int maxVal,int defVal)
- {
- ConfigInt *result = new ConfigInt(name,doc,minVal,maxVal,defVal);
- m_options->append(result);
- m_dict->insert(name,result);
- return result;
- }
-
- /*! Adds a new boolean option with \a name and documentation \a doc.
- * The boolean has a default value of \a defVal.
- * \returns An object representing the option.
- */
- ConfigBool *addBool(const char *name,
- const char *doc,
- bool defVal)
- {
- ConfigBool *result = new ConfigBool(name,doc,defVal);
- m_options->append(result);
- m_dict->insert(name,result);
- return result;
- }
- /*! Adds an option that has become obsolete. */
- ConfigOption *addObsolete(const char *name)
- {
- ConfigObsolete *option = new ConfigObsolete(name,ConfigOption::O_Obsolete);
- m_dict->insert(name,option);
- m_obsolete->append(option);
- return option;
- }
- /*! @} */
-
- /*! Writes a template configuration to stream \a t. If \a shortIndex
- * is \c TRUE the description of each configuration option will
- * be omitted.
- */
- void writeTemplate(FTextStream &t,bool shortIndex,bool updateOnly);
-
- /** Write XML representation of the config file */
- void writeXML(FTextStream &t);
-
- /////////////////////////////
- // internal API
- /////////////////////////////
-
- /*! Converts the string values read from the configuration file
- * to real values for non-string type options (like int, and bools)
- */
- void convertStrToVal();
-
- /*! Replaces references to environment variable by the actual value
- * of the environment variable.
- */
- void substituteEnvironmentVars();
-
- /*! Checks if the values of the variable are correct, adjusts them
- * if needed, and report any errors.
- */
- void check();
-
- /*! Initialize config variables to their default value */
- void init();
-
- /*! Parse a configuration data in string \a str.
- * \returns TRUE if successful, or FALSE if the string could not be
- * parsed.
- */
- bool parseString(const char *fn,const char *str);
-
- /*! Parse a configuration file with name \a fn.
- * \returns TRUE if successful, FALSE if the file could not be
- * opened or read.
- */
- bool parse(const char *fn);
-
- /*! Called from the constructor, will add doxygen's default options
- * to the configuration object
- */
- void create();
-
- protected:
-
- Config()
- {
- m_options = new QList<ConfigOption>;
- m_obsolete = new QList<ConfigOption>;
- m_dict = new QDict<ConfigOption>(257);
- m_options->setAutoDelete(TRUE);
- m_obsolete->setAutoDelete(TRUE);
- m_initialized = FALSE;
- create();
- }
- ~Config()
- {
- delete m_options;
- delete m_obsolete;
- delete m_dict;
- }
-
- private:
- QList<ConfigOption> *m_options;
- QList<ConfigOption> *m_obsolete;
- QDict<ConfigOption> *m_dict;
- static Config *m_instance;
- bool m_initialized;
-};
-
-#endif
diff --git a/trunk/src/config.l b/trunk/src/config.l
deleted file mode 100644
index 5dfbae3..0000000
--- a/trunk/src/config.l
+++ /dev/null
@@ -1,1609 +0,0 @@
-/******************************************************************************
- *
- * Copyright (C) 1997-2012 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.
- *
- */
-
-%{
-
-/*
- * includes
- */
-#include <stdio.h>
-#include <stdlib.h>
-#include <assert.h>
-#include <ctype.h>
-#include <stdarg.h>
-#include <errno.h>
-
-#include <qfileinfo.h>
-#include <qdir.h>
-#include <qtextstream.h>
-#include <qregexp.h>
-#include <qstack.h>
-#include <qglobal.h>
-
-#include "config.h"
-#include "version.h"
-#include "portable.h"
-#include "util.h"
-
-#include "lang_cfg.h"
-#include "configoptions.h"
-
-#undef Config_getString
-#undef Config_getInt
-#undef Config_getList
-#undef Config_getEnum
-#undef Config_getBool
-
-// use in-class definitions
-#define Config_getString(val) getString(__FILE__,__LINE__,val)
-#define Config_getInt(val) getInt(__FILE__,__LINE__,val)
-#define Config_getList(val) getList(__FILE__,__LINE__,val)
-#define Config_getEnum(val) getEnum(__FILE__,__LINE__,val)
-#define Config_getBool(val) getBool(__FILE__,__LINE__,val)
-
-void config_err(const char *fmt, ...)
-{
- va_list args;
- va_start(args, fmt);
- vfprintf(stderr, fmt, args);
- va_end(args);
-}
-void config_warn(const char *fmt, ...)
-{
- va_list args;
- va_start(args, fmt);
- vfprintf(stderr, fmt, args);
- va_end(args);
-}
-
-static QCString configStringRecode(
- const QCString &str,
- const char *fromEncoding,
- const char *toEncoding);
-
-#define MAX_INCLUDE_DEPTH 10
-#define YY_NEVER_INTERACTIVE 1
-
-/* -----------------------------------------------------------------
- */
-QCString ConfigOption::convertToComment(const QCString &s)
-{
- QCString result;
- if (s.isEmpty()) return result;
- else
- {
- QCString tmp=s.stripWhiteSpace();
- char *p=tmp.data();
- char c;
- result+="#";
- if (*p && *p!='\n')
- result+=" ";
- while ((c=*p++))
- {
- if (c=='\n')
- {
- result+="\n#";
- if (*p && *p!='\n')
- result+=" ";
- }
- else result+=c;
- }
- result+='\n';
- }
- return result;
-}
-
-void ConfigOption::writeBoolValue(FTextStream &t,bool v)
-{
- t << " ";
- if (v) t << "YES"; else t << "NO";
-}
-
-void ConfigOption::writeIntValue(FTextStream &t,int i)
-{
- t << " " << i;
-}
-
-void ConfigOption::writeStringValue(FTextStream &t,QCString &s)
-{
- char c;
- bool needsEscaping=FALSE;
- // convert the string back to it original encoding
- QCString se = configStringRecode(s,"UTF-8",m_encoding);
- const char *p=se.data();
- if (p)
- {
- t << " ";
- while ((c=*p++)!=0 && !needsEscaping)
- needsEscaping = (c==' ' || c=='\n' || c=='\t' || c=='"' || c=='#');
- if (needsEscaping)
- {
- t << "\"";
- p=se.data();
- while (*p)
- {
- if (*p==' ' && *(p+1)=='\0') break; // skip inserted space at the end
- if (*p=='"') t << "\\"; // escape quotes
- t << *p++;
- }
- t << "\"";
- }
- else
- {
- t << se;
- }
- }
-}
-
-void ConfigOption::writeStringList(FTextStream &t,QStrList &l)
-{
- const char *p = l.first();
- bool first=TRUE;
- while (p)
- {
- QCString s=p;
- if (!first)
- t << " ";
- first=FALSE;
- writeStringValue(t,s);
- p = l.next();
- if (p) t << " \\" << endl;
- }
-}
-
-/* -----------------------------------------------------------------
- */
-
-Config *Config::m_instance = 0;
-
-void ConfigInt::convertStrToVal()
-{
- if (!m_valueString.isEmpty())
- {
- bool ok;
- int val = m_valueString.toInt(&ok);
- if (!ok || val<m_minVal || val>m_maxVal)
- {
- config_warn("warning: argument `%s' for option %s is not a valid number in the range [%d..%d]!\n"
- "Using the default: %d!\n",m_valueString.data(),m_name.data(),m_minVal,m_maxVal,m_value);
- }
- m_value=val;
- }
-}
-
-void ConfigBool::convertStrToVal()
-{
- QCString val = m_valueString.stripWhiteSpace().lower();
- if (!val.isEmpty())
- {
- if (val=="yes" || val=="true" || val=="1" || val=="all")
- {
- m_value=TRUE;
- }
- else if (val=="no" || val=="false" || val=="0" || val=="none")
- {
- m_value=FALSE;
- }
- else
- {
- config_warn("warning: argument `%s' for option %s is not a valid boolean value\n"
- "Using the default: %s!\n",m_valueString.data(),m_name.data(),m_value?"YES":"NO");
- }
- }
-}
-
-QCString &Config::getString(const char *fileName,int num,const char *name) const
-{
- ConfigOption *opt = m_dict->find(name);
- if (opt==0)
- {
- config_err("%s<%d>: Internal error: Requested unknown option %s!\n",fileName,num,name);
- exit(1);
- }
- else if (opt->kind()!=ConfigOption::O_String)
- {
- config_err("%s<%d>: Internal error: Requested option %s not of string type!\n",fileName,num,name);
- exit(1);
- }
- return *((ConfigString *)opt)->valueRef();
-}
-
-QStrList &Config::getList(const char *fileName,int num,const char *name) const
-{
- ConfigOption *opt = m_dict->find(name);
- if (opt==0)
- {
- config_err("%s<%d>: Internal error: Requested unknown option %s!\n",fileName,num,name);
- exit(1);
- }
- else if (opt->kind()!=ConfigOption::O_List)
- {
- config_err("%d<%d>: Internal error: Requested option %s not of list type!\n",fileName,num,name);
- exit(1);
- }
- return *((ConfigList *)opt)->valueRef();
-}
-
-QCString &Config::getEnum(const char *fileName,int num,const char *name) const
-{
- ConfigOption *opt = m_dict->find(name);
- if (opt==0)
- {
- config_err("%s<%d>: Internal error: Requested unknown option %s!\n",fileName,num,name);
- exit(1);
- }
- else if (opt->kind()!=ConfigOption::O_Enum)
- {
- config_err("%s<%d>: Internal error: Requested option %s not of enum type!\n",fileName,num,name);
- exit(1);
- }
- return *((ConfigEnum *)opt)->valueRef();
-}
-
-int &Config::getInt(const char *fileName,int num,const char *name) const
-{
- ConfigOption *opt = m_dict->find(name);
- if (opt==0)
- {
- config_err("%s<%d>: Internal error: Requested unknown option %s!\n",fileName,num,name);
- exit(1);
- }
- else if (opt->kind()!=ConfigOption::O_Int)
- {
- config_err("%s<%d>: Internal error: Requested option %s not of integer type!\n",fileName,num,name);
- exit(1);
- }
- return *((ConfigInt *)opt)->valueRef();
-}
-
-bool &Config::getBool(const char *fileName,int num,const char *name) const
-{
- ConfigOption *opt = m_dict->find(name);
- if (opt==0)
- {
- config_err("%s<%d>: Internal error: Requested unknown option %s!\n",fileName,num,name);
- exit(1);
- }
- else if (opt->kind()!=ConfigOption::O_Bool)
- {
- config_err("%s<%d>: Internal error: Requested option %s not of integer type!\n",fileName,num,name);
- exit(1);
- }
- return *((ConfigBool *)opt)->valueRef();
-}
-
-/* -----------------------------------------------------------------
- */
-
-void ConfigInt::writeXML(FTextStream& t)
-{
- t << " <option type='int' "
- "id='" << convertToXML(name()) << "' "
- "docs='\n" << convertToXML(docs()) << "' "
- "minval='" << m_minVal << "' "
- "maxval='" << m_maxVal << "' "
- "defval='" << m_defValue << "'";
- if (!m_dependency.isEmpty()) t << " depends='" << m_dependency << "'";
- t << "/>" << endl;
-}
-
-void ConfigBool::writeXML(FTextStream& t)
-{
- t << " <option type='bool' "
- "id='" << convertToXML(name()) << "' "
- "docs='\n" << convertToXML(docs()) << "' "
- "defval='" << m_defValue << "'";
- if (!m_dependency.isEmpty()) t << " depends='" << m_dependency << "'";
- t << "/>" << endl;
-}
-
-void ConfigString::writeXML(FTextStream& t)
-{
- QString format;
- switch (m_widgetType)
- {
- case String: format="string"; break;
- case File: format="file"; break;
- case Dir: format="dir"; break;
- }
- t << " <option type='string' "
- "id='" << convertToXML(name()) << "' "
- "format='" << format << "' "
- "docs='\n" << convertToXML(docs()) << "' "
- "defval='" << convertToXML(m_defValue) << "'";
- if (!m_dependency.isEmpty()) t << " depends='" << m_dependency << "'";
- t << "/>" << endl;
-}
-
-void ConfigEnum::writeXML(FTextStream &t)
-{
- t << " <option type='enum' "
- "id='" << convertToXML(name()) << "' "
- "defval='" << convertToXML(m_defValue) << "' "
- "docs='\n" << convertToXML(docs()) << "'";
- if (!m_dependency.isEmpty()) t << " depends='" << m_dependency << "'";
- t << ">" << endl;
-
- char *enumVal = m_valueRange.first();
- while (enumVal)
- {
- t << " <value name='" << convertToXML(enumVal) << "'/>" << endl;
- enumVal = m_valueRange.next();
- }
-
- t << " </option>" << endl;
-}
-
-void ConfigList::writeXML(FTextStream &t)
-{
- QString format;
- switch (m_widgetType)
- {
- case String: format="string"; break;
- case File: format="file"; break;
- case Dir: format="dir"; break;
- case FileAndDir: format="filedir"; break;
- }
- t << " <option type='list' "
- "id='" << convertToXML(name()) << "' "
- "format='" << format << "' "
- "docs='\n" << convertToXML(docs()) << "'";
- if (!m_dependency.isEmpty()) t << " depends='" << m_dependency << "'";
- t << ">" << endl;
- char *enumVal = m_value.first();
- while (enumVal)
- {
- t << " <value name='" << convertToXML(enumVal) << "'/>" << endl;
- enumVal = m_value.next();
- }
-
- t << " </option>" << endl;
-}
-
-void ConfigObsolete::writeXML(FTextStream &t)
-{
- t << " <option type='obsolete' "
- "id='" << convertToXML(name()) << "'/>" << endl;
-}
-
-
-/* -----------------------------------------------------------------
- *
- * static variables
- */
-
-struct ConfigFileState
-{
- int lineNr;
- FILE *filePtr;
- YY_BUFFER_STATE oldState;
- YY_BUFFER_STATE newState;
- QCString fileName;
-};
-
-static const char *inputString;
-static int inputPosition;
-static int yyLineNr;
-static QCString yyFileName;
-static QCString tmpString;
-static QCString *s=0;
-static bool *b=0;
-static QStrList *l=0;
-static int lastState;
-static QCString elemStr;
-static QCString includeName;
-static QStrList includePathList;
-static QStack<ConfigFileState> includeStack;
-static int includeDepth;
-
-static QCString tabSizeString;
-static QCString maxInitLinesString;
-static QCString colsInAlphaIndexString;
-static QCString enumValuesPerLineString;
-static QCString treeViewWidthString;
-static QCString maxDotGraphWidthString;
-static QCString maxDotGraphHeightString;
-static QCString encoding;
-
-static Config *config;
-
-/* -----------------------------------------------------------------
- */
-#undef YY_INPUT
-#define YY_INPUT(buf,result,max_size) result=yyread(buf,max_size);
-
-static int yyread(char *buf,int max_size)
-{
- // no file included
- if (includeStack.isEmpty())
- {
- int c=0;
- if (inputString==0) return c;
- while( c < max_size && inputString[inputPosition] )
- {
- *buf = inputString[inputPosition++] ;
- c++; buf++;
- }
- return c;
- }
- else
- {
- //assert(includeStack.current()->newState==YY_CURRENT_BUFFER);
- return (int)fread(buf,1,max_size,includeStack.current()->filePtr);
- }
-}
-
-
-static QCString configStringRecode(
- const QCString &str,
- const char *fromEncoding,
- const char *toEncoding)
-{
- QCString inputEncoding = fromEncoding;
- QCString outputEncoding = toEncoding;
- if (inputEncoding.isEmpty() || outputEncoding.isEmpty() || inputEncoding==outputEncoding) return str;
- int inputSize=str.length();
- int outputSize=inputSize*4+1;
- QCString output(outputSize);
- void *cd = portable_iconv_open(outputEncoding,inputEncoding);
- if (cd==(void *)(-1))
- {
- fprintf(stderr,"error: unsupported character conversion: '%s'->'%s'\n",
- inputEncoding.data(),outputEncoding.data());
- exit(1);
- }
- size_t iLeft=(size_t)inputSize;
- size_t oLeft=(size_t)outputSize;
- const char *inputPtr = str.data();
- char *outputPtr = output.data();
- if (!portable_iconv(cd, &inputPtr, &iLeft, &outputPtr, &oLeft))
- {
- outputSize-=(int)oLeft;
- output.resize(outputSize+1);
- output.at(outputSize)='\0';
- //printf("iconv: input size=%d output size=%d\n[%s]\n",size,newSize,srcBuf.data());
- }
- else
- {
- fprintf(stderr,"error: failed to translate characters from %s to %s: %s\n",
- inputEncoding.data(),outputEncoding.data(),strerror(errno));
- exit(1);
- }
- portable_iconv_close(cd);
- return output;
-}
-
-static void checkEncoding()
-{
- ConfigString *option = (ConfigString*)config->get("DOXYFILE_ENCODING");
- encoding = *option->valueRef();
-}
-
-static FILE *tryPath(const char *path,const char *fileName)
-{
- QCString absName=(path ? (QCString)path+"/"+fileName : (QCString)fileName);
- QFileInfo fi(absName);
- if (fi.exists() && fi.isFile())
- {
- FILE *f=portable_fopen(absName,"r");
- if (!f) config_err("error: could not open file %s for reading\n",absName.data());
- return f;
- }
- return 0;
-}
-
-static void substEnvVarsInStrList(QStrList &sl);
-static void substEnvVarsInString(QCString &s);
-
-static bool isAbsolute(const char * fileName)
-{
-# ifdef _WIN32
- if (isalpha (fileName [0]) && fileName[1] == ':')
- fileName += 2;
-# endif
- char const fst = fileName [0];
- if (fst == '/') {
- return true;
- }
-# ifdef _WIN32
- if (fst == '\\')
- return true;
-# endif
- return false;
-}
-
-static FILE *findFile(const char *fileName)
-{
- if(isAbsolute(fileName))
- return tryPath(NULL, fileName);
- substEnvVarsInStrList(includePathList);
- char *s=includePathList.first();
- while (s) // try each of the include paths
- {
- FILE *f = tryPath(s,fileName);
- if (f) return f;
- s=includePathList.next();
- }
- // try cwd if includePathList fails
- return tryPath(".",fileName);
-}
-
-static void readIncludeFile(const char *incName)
-{
- if (includeDepth==MAX_INCLUDE_DEPTH) {
- config_err("error: maximum include depth (%d) reached, %s is not included. Aborting...\n",
- MAX_INCLUDE_DEPTH,incName);
- exit(1);
- }
-
- QCString inc = incName;
- substEnvVarsInString(inc);
- inc = inc.stripWhiteSpace();
- uint incLen = inc.length();
- if (inc.at(0)=='"' && inc.at(incLen-1)=='"') // strip quotes
- {
- inc=inc.mid(1,incLen-2);
- }
-
- FILE *f;
-
- if ((f=findFile(inc))) // see if the include file can be found
- {
- // For debugging
-#if SHOW_INCLUDES
- for (i=0;i<includeStack.count();i++) msg(" ");
- msg("@INCLUDE = %s: parsing...\n",inc.data());
-#endif
-
- // store the state of the old file
- ConfigFileState *fs=new ConfigFileState;
- fs->oldState=YY_CURRENT_BUFFER;
- fs->lineNr=yyLineNr;
- fs->fileName=yyFileName;
- fs->filePtr=f;
- // push the state on the stack
- includeStack.push(fs);
- // set the scanner to the include file
- yy_switch_to_buffer(yy_create_buffer(f, YY_BUF_SIZE));
- fs->newState=YY_CURRENT_BUFFER;
- yyFileName=inc;
- includeDepth++;
- }
- else
- {
- config_err("error: @INCLUDE = %s: not found!\n",inc.data());
- exit(1);
- }
-}
-
-
-%}
-
-%option nounput
-%option noyywrap
-
-%x Start
-%x SkipComment
-%x SkipInvalid
-%x GetString
-%x GetBool
-%x GetStrList
-%x GetQuotedString
-%x GetEnvVar
-%x Include
-
-%%
-
-<*>\0x0d
-<Start,GetString,GetStrList,GetBool,SkipInvalid>"#" { BEGIN(SkipComment); }
-<Start>[a-z_A-Z][a-z_A-Z0-9]*[ \t]*"=" { QCString cmd=yytext;
- cmd=cmd.left(cmd.length()-1).stripWhiteSpace();
- ConfigOption *option = config->get(cmd);
- if (option==0) // oops not known
- {
- config_err("warning: ignoring unsupported tag `%s' at line %d, file %s\n",
- yytext,yyLineNr,yyFileName.data());
- BEGIN(SkipInvalid);
- }
- else // known tag
- {
- option->setEncoding(encoding);
- switch(option->kind())
- {
- case ConfigOption::O_Info:
- // shouldn't get here!
- BEGIN(SkipInvalid);
- break;
- case ConfigOption::O_List:
- l = ((ConfigList *)option)->valueRef();
- l->clear();
- elemStr="";
- BEGIN(GetStrList);
- break;
- case ConfigOption::O_Enum:
- s = ((ConfigEnum *)option)->valueRef();
- s->resize(0);
- BEGIN(GetString);
- break;
- case ConfigOption::O_String:
- s = ((ConfigString *)option)->valueRef();
- s->resize(0);
- BEGIN(GetString);
- break;
- case ConfigOption::O_Int:
- s = ((ConfigInt *)option)->valueStringRef();
- s->resize(0);
- BEGIN(GetString);
- break;
- case ConfigOption::O_Bool:
- s = ((ConfigBool *)option)->valueStringRef();
- s->resize(0);
- BEGIN(GetString);
- break;
- case ConfigOption::O_Obsolete:
- config_err("warning: Tag `%s' at line %d of file %s has become obsolete.\n"
- "To avoid this warning please update your configuration "
- "file using \"doxygen -u\"\n", cmd.data(),yyLineNr,yyFileName.data());
- BEGIN(SkipInvalid);
- break;
- }
- }
- }
-<Start>[a-z_A-Z][a-z_A-Z0-9]*[ \t]*"+=" { QCString cmd=yytext;
- cmd=cmd.left(cmd.length()-2).stripWhiteSpace();
- ConfigOption *option = config->get(cmd);
- if (option==0) // oops not known
- {
- config_err("warning: ignoring unsupported tag `%s' at line %d, file %s\n",
- yytext,yyLineNr,yyFileName.data());
- BEGIN(SkipInvalid);
- }
- else // known tag
- {
- switch(option->kind())
- {
- case ConfigOption::O_Info:
- // shouldn't get here!
- BEGIN(SkipInvalid);
- break;
- case ConfigOption::O_List:
- l = ((ConfigList *)option)->valueRef();
- elemStr="";
- BEGIN(GetStrList);
- break;
- case ConfigOption::O_Enum:
- case ConfigOption::O_String:
- case ConfigOption::O_Int:
- case ConfigOption::O_Bool:
- config_err("warning: operator += not supported for `%s'. Ignoring line at line %d, file %s\n",
- yytext,yyLineNr,yyFileName.data());
- BEGIN(SkipInvalid);
- break;
- case ConfigOption::O_Obsolete:
- config_err("warning: Tag `%s' at line %d of file %s has become obsolete.\n"
- "To avoid this warning please update your configuration "
- "file using \"doxygen -u\"\n", cmd.data(),yyLineNr,yyFileName.data());
- BEGIN(SkipInvalid);
- break;
- }
- }
- }
-<Start>"@INCLUDE_PATH"[ \t]*"=" { BEGIN(GetStrList); l=&includePathList; l->clear(); elemStr=""; }
- /* include a config file */
-<Start>"@INCLUDE"[ \t]*"=" { BEGIN(Include);}
-<Include>([^ \"\t\r\n]+)|("\""[^\n\"]+"\"") {
- readIncludeFile(configStringRecode(yytext,encoding,"UTF-8"));
- BEGIN(Start);
- }
-<<EOF>> {
- //printf("End of include file\n");
- //printf("Include stack depth=%d\n",g_includeStack.count());
- if (includeStack.isEmpty())
- {
- //printf("Terminating scanner!\n");
- yyterminate();
- }
- else
- {
- ConfigFileState *fs=includeStack.pop();
- fclose(fs->filePtr);
- YY_BUFFER_STATE oldBuf = YY_CURRENT_BUFFER;
- yy_switch_to_buffer( fs->oldState );
- yy_delete_buffer( oldBuf );
- yyLineNr=fs->lineNr;
- yyFileName=fs->fileName;
- delete fs; fs=0;
- includeDepth--;
- }
- }
-
-<Start>[a-z_A-Z0-9]+ { config_err("warning: ignoring unknown tag `%s' at line %d, file %s\n",yytext,yyLineNr,yyFileName.data()); }
-<GetString,GetBool,SkipInvalid>\n { yyLineNr++; BEGIN(Start); }
-<GetStrList>\n {
- yyLineNr++;
- if (!elemStr.isEmpty())
- {
- //printf("elemStr1=`%s'\n",elemStr.data());
- l->append(elemStr);
- }
- BEGIN(Start);
- }
-<GetStrList>[ \t]+ {
- if (!elemStr.isEmpty())
- {
- //printf("elemStr2=`%s'\n",elemStr.data());
- l->append(elemStr);
- }
- elemStr.resize(0);
- }
-<GetString>[^ \"\t\r\n]+ { (*s)+=configStringRecode(yytext,encoding,"UTF-8");
- checkEncoding();
- }
-<GetString,GetStrList,SkipInvalid>"\"" { lastState=YY_START;
- BEGIN(GetQuotedString);
- tmpString.resize(0);
- }
-<GetQuotedString>"\""|"\n" {
- // we add a bogus space to signal that the string was quoted. This space will be stripped later on.
- tmpString+=" ";
- //printf("Quoted String = `%s'\n",tmpString.data());
- if (lastState==GetString)
- {
- (*s)+=configStringRecode(tmpString,encoding,"UTF-8");
- checkEncoding();
- }
- else
- {
- elemStr+=configStringRecode(tmpString,encoding,"UTF-8");
- }
- if (*yytext=='\n')
- {
- config_err("warning: Missing end quote (\") on line %d, file %s\n",yyLineNr,yyFileName.data());
- yyLineNr++;
- }
- BEGIN(lastState);
- }
-<GetQuotedString>"\\\"" {
- tmpString+='"';
- }
-<GetQuotedString>. { tmpString+=*yytext; }
-<GetBool>[a-zA-Z]+ {
- QCString bs=yytext;
- bs=bs.upper();
- if (bs=="YES" || bs=="1")
- *b=TRUE;
- else if (bs=="NO" || bs=="0")
- *b=FALSE;
- else
- {
- *b=FALSE;
- config_warn("warning: Invalid value `%s' for "
- "boolean tag in line %d, file %s; use YES or NO\n",
- bs.data(),yyLineNr,yyFileName.data());
- }
- }
-<GetStrList>[^ \#\"\t\r\n]+ {
- elemStr+=configStringRecode(yytext,encoding,"UTF-8");
- }
-<SkipComment>\n { yyLineNr++; BEGIN(Start); }
-<SkipComment>\\[ \r\t]*\n { yyLineNr++; BEGIN(Start); }
-<*>\\[ \r\t]*\n { yyLineNr++; }
-<*>.
-<*>\n { yyLineNr++ ; }
-
-%%
-
-/*@ ----------------------------------------------------------------------------
- */
-
-void Config::writeTemplate(FTextStream &t,bool sl,bool upd)
-{
- t << "# Doxyfile " << versionString << endl << endl;
- if (!sl)
- {
- t << "# This file describes the settings to be used by the documentation system\n";
- t << "# doxygen (www.doxygen.org) for a project.\n";
- t << "#\n";
- t << "# All text after a hash (#) is considered a comment and will be ignored.\n";
- t << "# The format is:\n";
- t << "# TAG = value [value, ...]\n";
- t << "# For lists items can also be appended using:\n";
- t << "# TAG += value [value, ...]\n";
- t << "# Values that contain spaces should be placed between quotes (\" \").\n";
- }
- ConfigOption *option = m_options->first();
- while (option)
- {
- option->writeTemplate(t,sl,upd);
- option = m_options->next();
- }
-}
-
-void Config::writeXML(FTextStream &t)
-{
- t << "<doxygenconfig>" << endl;
- bool first=TRUE;
- ConfigOption *option = m_options->first();
- while (option)
- {
- if (option->kind()==ConfigOption::O_Info)
- {
- if (!first) t << " </group>" << endl;
- t << " <group name='" << option->name() << "' "
- "docs='" << option->docs() << "'>" << endl;
- first=FALSE;
- }
- else
- {
- option->writeXML(t);
- }
- option = m_options->next();
- }
- option = m_obsolete->first();
- while (option)
- {
- option->writeXML(t);
- option = m_obsolete->next();
- }
- if (!first) t << " </group>" << endl;
- t << "</doxygenconfig>" << endl;
-}
-
-void Config::convertStrToVal()
-{
- ConfigOption *option = m_options->first();
- while (option)
- {
- option->convertStrToVal();
- option = m_options->next();
- }
-}
-
-static void substEnvVarsInString(QCString &s)
-{
- static QRegExp re("\\$\\([a-z_A-Z0-9.-]+\\)");
- static QRegExp re2("\\$\\([a-z_A-Z0-9.-]+\\([a-z_A-Z0-9.-]+\\)\\)"); // For e.g. PROGRAMFILES(X86)
- if (s.isEmpty()) return;
- int p=0;
- int i,l;
- //printf("substEnvVarInString(%s) start\n",s.data());
- while ((i=re.match(s,p,&l))!=-1 || (i=re2.match(s,p,&l))!=-1)
- {
- //printf("Found environment var s.mid(%d,%d)=`%s'\n",i+2,l-3,s.mid(i+2,l-3).data());
- QCString env=portable_getenv(s.mid(i+2,l-3));
- substEnvVarsInString(env); // recursively expand variables if needed.
- s = s.left(i)+env+s.right(s.length()-i-l);
- p=i+env.length(); // next time start at the end of the expanded string
- }
- s=s.stripWhiteSpace(); // to strip the bogus space that was added when an argument
- // has quotes
- //printf("substEnvVarInString(%s) end\n",s.data());
-}
-
-static void substEnvVarsInStrList(QStrList &sl)
-{
- char *s = sl.first();
- while (s)
- {
- QCString result(s);
- // an argument with quotes will have an extra space at the end, so wasQuoted will be TRUE.
- bool wasQuoted = (result.find(' ')!=-1) || (result.find('\t')!=-1);
- // here we strip the quote again
- substEnvVarsInString(result);
-
- //printf("Result %s was quoted=%d\n",result.data(),wasQuoted);
-
- if (!wasQuoted) /* as a result of the expansion, a single string
- may have expanded into a list, which we'll
- add to sl. If the orginal string already
- contained multiple elements no further
- splitting is done to allow quoted items with spaces! */
- {
- int l=result.length();
- int i,p=0;
- // skip spaces
- // search for a "word"
- for (i=0;i<l;i++)
- {
- char c=0;
- // skip until start of new word
- while (i<l && ((c=result.at(i))==' ' || c=='\t')) i++;
- p=i; // p marks the start index of the word
- // skip until end of a word
- while (i<l && ((c=result.at(i))!=' ' && c!='\t' && c!='"')) i++;
- if (i<l) // not at the end of the string
- {
- if (c=='"') // word within quotes
- {
- p=i+1;
- for (i++;i<l;i++)
- {
- c=result.at(i);
- if (c=='"') // end quote
- {
- // replace the string in the list and go to the next item.
- sl.insert(sl.at(),result.mid(p,i-p)); // insert new item before current item.
- sl.next(); // current item is now the old item
- p=i+1;
- break;
- }
- else if (c=='\\') // skip escaped stuff
- {
- i++;
- }
- }
- }
- else if (c==' ' || c=='\t') // separator
- {
- // replace the string in the list and go to the next item.
- sl.insert(sl.at(),result.mid(p,i-p)); // insert new item before current item.
- sl.next(); // current item is now the old item
- p=i+1;
- }
- }
- }
- if (p!=l) // add the leftover as a string
- {
- // replace the string in the list and go to the next item.
- sl.insert(sl.at(),result.right(l-p)); // insert new item before current item.
- sl.next(); // current item is now the old item
- }
- }
- else // just goto the next element in the list
- {
- sl.insert(sl.at(),result);
- sl.next();
- }
- // remove the old unexpanded string from the list
- int i=sl.at();
- sl.remove(); // current item index changes if the last element is removed.
- if (sl.at()==i) // not last item
- s = sl.current();
- else // just removed last item
- s = 0;
- }
-}
-
-void ConfigString::substEnvVars()
-{
- substEnvVarsInString(m_value);
-}
-
-void ConfigList::substEnvVars()
-{
- substEnvVarsInStrList(m_value);
-}
-
-void ConfigBool::substEnvVars()
-{
- substEnvVarsInString(m_valueString);
-}
-
-void ConfigInt::substEnvVars()
-{
- substEnvVarsInString(m_valueString);
-}
-
-void ConfigEnum::substEnvVars()
-{
- substEnvVarsInString(m_value);
-}
-
-void Config::substituteEnvironmentVars()
-{
- ConfigOption *option = m_options->first();
- while (option)
- {
- option->substEnvVars();
- option = m_options->next();
- }
-}
-
-static void cleanUpPaths(QStrList &str)
-{
- char *sfp = str.first();
- while (sfp)
- {
- register char *p = sfp;
- if (p)
- {
- char c;
- while ((c=*p))
- {
- if (c=='\\') *p='/';
- p++;
- }
- }
- QCString path = sfp;
- if ((path.at(0)!='/' && (path.length()<=2 || path.at(1)!=':')) ||
- path.at(path.length()-1)!='/'
- )
- {
- QFileInfo fi(path);
- if (fi.exists() && fi.isDir())
- {
- int i = str.at();
- str.remove();
- if (str.at()==i) // did not remove last item
- str.insert(i,fi.absFilePath()+"/");
- else
- str.append(fi.absFilePath()+"/");
- }
- }
- sfp = str.next();
- }
-}
-
-void Config::check()
-{
- //if (!projectName.isEmpty())
- //{
- // projectName[0]=toupper(projectName[0]);
- //}
-
- QCString &warnFormat = Config_getString("WARN_FORMAT");
- if (warnFormat.stripWhiteSpace().isEmpty())
- {
- warnFormat="$file:$line $text";
- }
- else
- {
- if (warnFormat.find("$file")==-1)
- {
- config_err("warning: warning format does not contain a $file tag!\n");
- }
- if (warnFormat.find("$line")==-1)
- {
- config_err("warning: warning format does not contain a $line tag!\n");
- }
- if (warnFormat.find("$text")==-1)
- {
- config_err("warning: warning format foes not contain a $text tag!\n");
- }
- }
-
- QCString &manExtension = Config_getString("MAN_EXTENSION");
-
- // set default man page extension if non is given by the user
- if (manExtension.isEmpty())
- {
- manExtension=".3";
- }
-
- QCString &paperType = Config_getEnum("PAPER_TYPE");
- paperType=paperType.lower().stripWhiteSpace();
- if (paperType.isEmpty())
- {
- paperType = "a4";
- }
- if (paperType!="a4" && paperType!="a4wide" && paperType!="letter" &&
- paperType!="legal" && paperType!="executive")
- {
- config_err("error: Unknown page type specified");
- }
-
- QCString &outputLanguage=Config_getEnum("OUTPUT_LANGUAGE");
- outputLanguage=outputLanguage.stripWhiteSpace();
- if (outputLanguage.isEmpty())
- {
- outputLanguage = "English";
- }
-
- QCString &htmlFileExtension=Config_getString("HTML_FILE_EXTENSION");
- htmlFileExtension=htmlFileExtension.stripWhiteSpace();
- if (htmlFileExtension.isEmpty())
- {
- htmlFileExtension = ".html";
- }
-
- // expand the relative stripFromPath values
- QStrList &stripFromPath = Config_getList("STRIP_FROM_PATH");
- char *sfp = stripFromPath.first();
- if (sfp==0) // by default use the current path
- {
- stripFromPath.append(QDir::currentDirPath()+"/");
- }
- else
- {
- cleanUpPaths(stripFromPath);
- }
-
- // expand the relative stripFromPath values
- QStrList &stripFromIncPath = Config_getList("STRIP_FROM_INC_PATH");
- cleanUpPaths(stripFromIncPath);
-
- // Test to see if HTML header is valid
- QCString &headerFile = Config_getString("HTML_HEADER");
- if (!headerFile.isEmpty())
- {
- QFileInfo fi(headerFile);
- if (!fi.exists())
- {
- config_err("error: tag HTML_HEADER: header file `%s' "
- "does not exist\n",headerFile.data());
- exit(1);
- }
- }
- // Test to see if HTML footer is valid
- QCString &footerFile = Config_getString("HTML_FOOTER");
- if (!footerFile.isEmpty())
- {
- QFileInfo fi(footerFile);
- if (!fi.exists())
- {
- config_err("error: tag HTML_FOOTER: footer file `%s' "
- "does not exist\n",footerFile.data());
- exit(1);
- }
- }
- // Test to see if LaTeX header is valid
- QCString &latexHeaderFile = Config_getString("LATEX_HEADER");
- if (!latexHeaderFile.isEmpty())
- {
- QFileInfo fi(latexHeaderFile);
- if (!fi.exists())
- {
- config_err("error: tag LATEX_HEADER: header file `%s' "
- "does not exist\n",latexHeaderFile.data());
- exit(1);
- }
- }
- // check include path
- QStrList &includePath = Config_getList("INCLUDE_PATH");
- char *s=includePath.first();
- while (s)
- {
- QFileInfo fi(s);
- if (!fi.exists()) config_err("warning: tag INCLUDE_PATH: include path `%s' "
- "does not exist\n",s);
- s=includePath.next();
- }
-
- // check aliases
- QStrList &aliasList = Config_getList("ALIASES");
- s=aliasList.first();
- while (s)
- {
- QRegExp re1("[a-z_A-Z][a-z_A-Z0-9]*[ \t]*="); // alias without argument
- QRegExp re2("[a-z_A-Z][a-z_A-Z0-9]*{[0-9]*}[ \t]*="); // alias with argument
- QCString alias=s;
- alias=alias.stripWhiteSpace();
- if (alias.find(re1)!=0 && alias.find(re2)!=0)
- {
- config_err("Illegal alias format `%s'. Use \"name=value\" or \"name(n)=value\", where n is the number of arguments\n",
- alias.data());
- }
- s=aliasList.next();
- }
-
- // check if GENERATE_TREEVIEW and GENERATE_HTMLHELP are both enabled
- if (Config_getBool("GENERATE_TREEVIEW") && Config_getBool("GENERATE_HTMLHELP"))
- {
- config_err("When enabling GENERATE_HTMLHELP the tree view (GENERATE_TREEVIEW) should be disabled. I'll do it for you.\n");
- Config_getBool("GENERATE_TREEVIEW")=FALSE;
- }
- if (Config_getBool("SEARCHENGINE") && Config_getBool("GENERATE_HTMLHELP"))
- {
- config_err("When enabling GENERATE_HTMLHELP the search engine (SEARCHENGINE) should be disabled. I'll do it for you.\n");
- Config_getBool("SEARCHENGINE")=FALSE;
- }
-
- // check if SEPARATE_MEMBER_PAGES and INLINE_GROUPED_CLASSES are both enabled
- if (Config_getBool("SEPARATE_MEMBER_PAGES") && Config_getBool("INLINE_GROUPED_CLASSES"))
- {
- config_err("When enabling INLINE_GROUPED_CLASSES the SEPARATE_MEMBER_PAGES option should be disabled. I'll do it for you.\n");
- Config_getBool("SEPARATE_MEMBER_PAGES")=FALSE;
- }
-
- // check dot image format
- QCString &dotImageFormat=Config_getEnum("DOT_IMAGE_FORMAT");
- dotImageFormat=dotImageFormat.stripWhiteSpace();
- if (dotImageFormat.isEmpty())
- {
- dotImageFormat = "png";
- }
- //else if (dotImageFormat!="gif" && dotImageFormat!="png" && dotImageFormat!="jpg")
- //{
- // config_err("Invalid value for DOT_IMAGE_FORMAT: `%s'. Using the default.\n",dotImageFormat.data());
- // dotImageFormat = "png";
- //}
-
-
- // check dot path
- QCString &dotPath = Config_getString("DOT_PATH");
- if (!dotPath.isEmpty())
- {
- QFileInfo fi(dotPath);
- if (fi.exists() && fi.isFile()) // user specified path + exec
- {
- dotPath=fi.dirPath(TRUE);
- }
- else
- {
- QFileInfo dp(dotPath+"/dot"+portable_commandExtension());
- if (!dp.exists() || !dp.isFile())
- {
- config_err("warning: the dot tool could not be found at %s\n",dotPath.data());
- dotPath="";
- }
- else
- {
- dotPath=dp.dirPath(TRUE)+"/";
- }
- }
-#if defined(_WIN32) // convert slashes
- uint i=0,l=dotPath.length();
- for (i=0;i<l;i++) if (dotPath.at(i)=='/') dotPath.at(i)='\\';
-#endif
- }
- else // make sure the string is empty but not null!
- {
- dotPath="";
- }
-
- // check mscgen path
- QCString &mscgenPath = Config_getString("MSCGEN_PATH");
- if (!mscgenPath.isEmpty())
- {
- QFileInfo dp(mscgenPath+"/mscgen"+portable_commandExtension());
- if (!dp.exists() || !dp.isFile())
- {
- config_err("warning: the mscgen tool could not be found at %s\n",mscgenPath.data());
- mscgenPath="";
- }
- else
- {
- mscgenPath=dp.dirPath(TRUE)+"/";
-#if defined(_WIN32) // convert slashes
- uint i=0,l=mscgenPath.length();
- for (i=0;i<l;i++) if (mscgenPath.at(i)=='/') mscgenPath.at(i)='\\';
-#endif
- }
- }
- else // make sure the string is empty but not null!
- {
- mscgenPath="";
- }
-
-
- // check input
- QStrList &inputSources=Config_getList("INPUT");
- if (inputSources.count()==0)
- {
- // use current dir as the default
- inputSources.append(QDir::currentDirPath());
- }
- else
- {
- s=inputSources.first();
- while (s)
- {
- QFileInfo fi(s);
- if (!fi.exists())
- {
- config_err("warning: tag INPUT: input source `%s' does not exist\n",s);
- }
- s=inputSources.next();
- }
- }
-
- // add default pattern if needed
- QStrList &filePatternList = Config_getList("FILE_PATTERNS");
- if (filePatternList.isEmpty())
- {
- filePatternList.append("*.c");
- filePatternList.append("*.cc");
- filePatternList.append("*.cxx");
- filePatternList.append("*.cpp");
- filePatternList.append("*.c++");
- filePatternList.append("*.d");
- filePatternList.append("*.java");
- filePatternList.append("*.ii");
- filePatternList.append("*.ixx");
- filePatternList.append("*.ipp");
- filePatternList.append("*.i++");
- filePatternList.append("*.inl");
- filePatternList.append("*.h");
- filePatternList.append("*.hh");
- filePatternList.append("*.hxx");
- filePatternList.append("*.hpp");
- filePatternList.append("*.h++");
- filePatternList.append("*.idl");
- filePatternList.append("*.odl");
- filePatternList.append("*.cs");
- filePatternList.append("*.php");
- filePatternList.append("*.php3");
- filePatternList.append("*.inc");
- filePatternList.append("*.m");
- filePatternList.append("*.mm");
- filePatternList.append("*.dox");
- filePatternList.append("*.py");
- filePatternList.append("*.f90");
- filePatternList.append("*.f");
- filePatternList.append("*.for");
- filePatternList.append("*.vhd");
- filePatternList.append("*.vhdl");
- filePatternList.append("*.tcl");
- filePatternList.append("*.md");
- filePatternList.append("*.markdown");
- if (portable_fileSystemIsCaseSensitive())
- {
- // unix => case sensitive match => also include useful uppercase versions
- filePatternList.append("*.C");
- filePatternList.append("*.CC");
- filePatternList.append("*.C++");
- filePatternList.append("*.II");
- filePatternList.append("*.I++");
- filePatternList.append("*.H");
- filePatternList.append("*.HH");
- filePatternList.append("*.H++");
- filePatternList.append("*.CS");
- filePatternList.append("*.PHP");
- filePatternList.append("*.PHP3");
- filePatternList.append("*.M");
- filePatternList.append("*.MM");
- filePatternList.append("*.PY");
- filePatternList.append("*.F90");
- filePatternList.append("*.F");
- filePatternList.append("*.VHD");
- filePatternList.append("*.VHDL");
- filePatternList.append("*.TCL");
- filePatternList.append("*.MD");
- filePatternList.append("*.MARKDOWN");
- }
- }
-
- // add default pattern if needed
- QStrList &examplePatternList = Config_getList("EXAMPLE_PATTERNS");
- if (examplePatternList.isEmpty())
- {
- examplePatternList.append("*");
- }
-
- // if no output format is enabled, warn the user
- if (!Config_getBool("GENERATE_HTML") &&
- !Config_getBool("GENERATE_LATEX") &&
- !Config_getBool("GENERATE_MAN") &&
- !Config_getBool("GENERATE_RTF") &&
- !Config_getBool("GENERATE_XML") &&
- !Config_getBool("GENERATE_PERLMOD") &&
- !Config_getBool("GENERATE_RTF") &&
- !Config_getBool("GENERATE_AUTOGEN_DEF") &&
- Config_getString("GENERATE_TAGFILE").isEmpty()
- )
- {
- config_err("warning: No output formats selected! Set at least one of the main GENERATE_* options to YES.\n");
- }
-
- // check HTMLHELP creation requirements
- if (!Config_getBool("GENERATE_HTML") &&
- Config_getBool("GENERATE_HTMLHELP"))
- {
- config_err("warning: GENERATE_HTMLHELP=YES requires GENERATE_HTML=YES.\n");
- }
-
- // check QHP creation requirements
- if (Config_getBool("GENERATE_QHP"))
- {
- if (Config_getString("QHP_NAMESPACE").isEmpty())
- {
- config_err("error: GENERATE_QHP=YES requires QHP_NAMESPACE to be set. Using 'org.doxygen.doc' as default!.\n");
- Config_getString("QHP_NAMESPACE")="org.doxygen.doc";
- }
-
- if (Config_getString("QHP_VIRTUAL_FOLDER").isEmpty())
- {
- config_err("error: GENERATE_QHP=YES requires QHP_VIRTUAL_FOLDER to be set. Using 'doc' as default!\n");
- Config_getString("QHP_VIRTUAL_FOLDER")="doc";
- }
- }
-
- if (Config_getBool("OPTIMIZE_OUTPUT_JAVA") && Config_getBool("INLINE_INFO"))
- {
- // don't show inline info for Java output, since Java has no inline
- // concept.
- Config_getBool("INLINE_INFO")=FALSE;
- }
-
- int &depth = Config_getInt("MAX_DOT_GRAPH_DEPTH");
- if (depth==0)
- {
- depth=1000;
- }
-
- int &hue = Config_getInt("HTML_COLORSTYLE_HUE");
- if (hue<0)
- {
- hue=0;
- }
- else if (hue>=360)
- {
- hue=hue%360;
- }
-
- int &sat = Config_getInt("HTML_COLORSTYLE_SAT");
- if (sat<0)
- {
- sat=0;
- }
- else if (sat>255)
- {
- sat=255;
- }
- int &gamma = Config_getInt("HTML_COLORSTYLE_GAMMA");
- if (gamma<40)
- {
- gamma=40;
- }
- else if (gamma>240)
- {
- gamma=240;
- }
-
-
- // add default words if needed
- QStrList &annotationFromBrief = Config_getList("ABBREVIATE_BRIEF");
- if (annotationFromBrief.isEmpty())
- {
- annotationFromBrief.append("The $name class");
- annotationFromBrief.append("The $name widget");
- annotationFromBrief.append("The $name file");
- annotationFromBrief.append("is");
- annotationFromBrief.append("provides");
- annotationFromBrief.append("specifies");
- annotationFromBrief.append("contains");
- annotationFromBrief.append("represents");
- annotationFromBrief.append("a");
- annotationFromBrief.append("an");
- annotationFromBrief.append("the");
- }
-
- // some default settings for vhdl
- if (Config_getBool("OPTIMIZE_OUTPUT_VHDL") &&
- (Config_getBool("INLINE_INHERITED_MEMB") ||
- Config_getBool("INHERIT_DOCS") ||
- !Config_getBool("HIDE_SCOPE_NAMES") ||
- !Config_getBool("EXTRACT_PRIVATE") ||
- !Config_getBool("EXTRACT_PACKAGE")
- )
- )
- {
- bool b1 = Config_getBool("INLINE_INHERITED_MEMB");
- bool b2 = Config_getBool("INHERIT_DOCS");
- bool b3 = Config_getBool("HIDE_SCOPE_NAMES");
- bool b4 = Config_getBool("EXTRACT_PRIVATE");
- bool b5 = Config_getBool("SKIP_FUNCTION_MACROS");
- bool b6 = Config_getBool("EXTRACT_PACKAGE");
- const char *s1,*s2,*s3,*s4,*s5,*s6;
- if (b1) s1=" INLINDE_INHERITED_MEMB = NO (was YES)\n"; else s1="";
- if (b2) s2=" INHERIT_DOCS = NO (was YES)\n"; else s2="";
- if (!b3) s3=" HIDE_SCOPE_NAMES = YES (was NO)\n"; else s3="";
- if (!b4) s4=" EXTRACT_PRIVATE = YES (was NO)\n"; else s4="";
- if (b5) s5=" ENABLE_PREPROCESSING = NO (was YES)\n"; else s5="";
- if (!b6) s6=" EXTRACT_PACKAGE = YES (was NO)\n"; else s6="";
-
-
- config_err("warning: enabling OPTIMIZE_OUTPUT_VHDL assumes the following settings:\n"
- "%s%s%s%s%s%s",s1,s2,s3,s4,s5,s6
- );
-
- Config_getBool("INLINE_INHERITED_MEMB") = FALSE;
- Config_getBool("INHERIT_DOCS") = FALSE;
- Config_getBool("HIDE_SCOPE_NAMES") = TRUE;
- Config_getBool("EXTRACT_PRIVATE") = TRUE;
- Config_getBool("ENABLE_PREPROCESSING") = FALSE;
- Config_getBool("EXTRACT_PACKAGE") = TRUE;
- }
-
-}
-
-void Config::init()
-{
- ConfigOption *option = m_options->first();
- while (option)
- {
- option->init();
- option = m_options->next();
- }
-}
-
-void Config::create()
-{
- if (m_initialized) return;
- m_initialized = TRUE;
- addConfigOptions(this);
-}
-
-static QCString configFileToString(const char *name)
-{
- if (name==0 || name[0]==0) return 0;
- QFile f;
-
- bool fileOpened=FALSE;
- if (name[0]=='-' && name[1]==0) // read from stdin
- {
- fileOpened=f.open(IO_ReadOnly,stdin);
- if (fileOpened)
- {
- const int bSize=4096;
- QCString contents(bSize);
- int totalSize=0;
- int size;
- while ((size=f.readBlock(contents.data()+totalSize,bSize))==bSize)
- {
- totalSize+=bSize;
- contents.resize(totalSize+bSize);
- }
- totalSize+=size+2;
- contents.resize(totalSize);
- contents.at(totalSize-2)='\n'; // to help the scanner
- contents.at(totalSize-1)='\0';
- return contents;
- }
- }
- else // read from file
- {
- QFileInfo fi(name);
- if (!fi.exists() || !fi.isFile())
- {
- config_err("error: file `%s' not found\n",name);
- return "";
- }
- f.setName(name);
- fileOpened=f.open(IO_ReadOnly);
- if (fileOpened)
- {
- int fsize=f.size();
- QCString contents(fsize+2);
- f.readBlock(contents.data(),fsize);
- f.close();
- if (fsize==0 || contents[fsize-1]=='\n')
- contents[fsize]='\0';
- else
- contents[fsize]='\n'; // to help the scanner
- contents[fsize+1]='\0';
- return contents;
- }
- }
- if (!fileOpened)
- {
- config_err("error: cannot open file `%s' for reading\n",name);
- }
- return "";
-}
-
-bool Config::parseString(const char *fn,const char *str)
-{
- config = Config::instance();
- inputString = str;
- inputPosition = 0;
- yyFileName = fn;
- yyLineNr = 1;
- includeStack.setAutoDelete(TRUE);
- includeStack.clear();
- includeDepth = 0;
- configYYrestart( configYYin );
- BEGIN( Start );
- configYYlex();
- inputString = 0;
- return TRUE;
-}
-
-bool Config::parse(const char *fn)
-{
- encoding = "UTF-8";
- return parseString(fn,configFileToString(fn));
-}
-
-extern "C" { // some bogus code to keep the compiler happy
- //int configYYwrap() { return 1 ; }
-}
diff --git a/trunk/src/config.xml b/trunk/src/config.xml
deleted file mode 100644
index 8e12fe0..0000000
--- a/trunk/src/config.xml
+++ /dev/null
@@ -1,1641 +0,0 @@
-<doxygenconfig>
- <group name='Project' docs='Project related configuration options'>
- <option type='string' id='DOXYFILE_ENCODING' format='string' docs='
-This tag specifies the encoding used for all characters in the config file
-that follow. The default is UTF-8 which is also the encoding used for all
-text before the first occurrence of this tag. Doxygen uses libiconv (or the
-iconv built into libc) for the transcoding. See
-http://www.gnu.org/software/libiconv for the list of possible encodings.
-' defval='UTF-8'/>
- <option type='string' id='PROJECT_NAME' format='string' docs='
-The PROJECT_NAME tag is a single word (or sequence of words) that should
-identify the project. Note that if you do not use Doxywizard you need
-to put quotes around the project name if it contains spaces.' defval='My Project'/>
- <option type='string' id='PROJECT_NUMBER' format='string' docs='
-The PROJECT_NUMBER tag can be used to enter a project or revision number.
-This could be handy for archiving the generated documentation or
-if some version control system is used.
-' defval=''/>
- <option type='string' id='PROJECT_BRIEF' format='string' docs='
-Using the PROJECT_BRIEF tag one can provide an optional one line description
-for a project that appears at the top of each page and should give viewer
-a quick idea about the purpose of the project. Keep the description short.
-' defval=''/>
- <option type='string' id='PROJECT_LOGO' format='file' docs='
-With the PROJECT_LOGO tag one can specify an logo or icon that is
-included in the documentation. The maximum height of the logo should not
-exceed 55 pixels and the maximum width should not exceed 200 pixels.
-Doxygen will copy the logo to the output directory.
-' defval=''/>
- <option type='string' id='OUTPUT_DIRECTORY' format='dir' docs='
-The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute)
-base path where the generated documentation will be put.
-If a relative path is entered, it will be relative to the location
-where doxygen was started. If left blank the current directory will be used.
-' defval=''/>
- <option type='bool' id='CREATE_SUBDIRS' docs='
-If the CREATE_SUBDIRS tag is set to YES, then doxygen will create
-4096 sub-directories (in 2 levels) under the output directory of each output
-format and will distribute the generated files over these directories.
-Enabling this option can be useful when feeding doxygen a huge amount of
-source files, where putting all generated files in the same directory would
-otherwise cause performance problems for the file system.
-' defval='0'/>
- <option type='enum' id='OUTPUT_LANGUAGE' defval='English' docs='
-The OUTPUT_LANGUAGE tag is used to specify the language in which all
-documentation generated by doxygen is written. Doxygen will use this
-information to generate all constant output in the proper language.
-The default language is English, other supported languages are:
-Afrikaans, Arabic, Brazilian, Catalan, Chinese, Chinese-Traditional,
-Croatian, Czech, Danish, Dutch, Esperanto, Farsi, Finnish, French, German,
-Greek, Hungarian, Italian, Japanese, Japanese-en (Japanese with English
-messages), Korean, Korean-en, Lithuanian, Norwegian, Macedonian, Persian,
-Polish, Portuguese, Romanian, Russian, Serbian, Serbian-Cyrillic, Slovak,
-Slovene, Spanish, Swedish, Ukrainian, and Vietnamese.
-'>
- <value name='Afrikaans'/>
- <value name='Arabic'/>
- <value name='Brazilian'/>
- <value name='Catalan'/>
- <value name='Chinese'/>
- <value name='Chinese-Traditional'/>
- <value name='Croatian'/>
- <value name='Czech'/>
- <value name='Danish'/>
- <value name='Dutch'/>
- <value name='English'/>
- <value name='Esperanto'/>
- <value name='Farsi'/>
- <value name='Finnish'/>
- <value name='French'/>
- <value name='German'/>
- <value name='Greek'/>
- <value name='Hungarian'/>
- <value name='Italian'/>
- <value name='Japanese'/>
- <value name='Japanese-en'/>
- <value name='Korean'/>
- <value name='Korean-en'/>
- <value name='Norwegian'/>
- <value name='Macedonian'/>
- <value name='Persian'/>
- <value name='Polish'/>
- <value name='Portuguese'/>
- <value name='Romanian'/>
- <value name='Russian'/>
- <value name='Serbian'/>
- <value name='Slovak'/>
- <value name='Slovene'/>
- <value name='Spanish'/>
- <value name='Swedish'/>
- <value name='Turkish'/>
- <value name='Ukrainian'/>
- <value name='Vietnamese'/>
- </option>
- <option type='bool' id='BRIEF_MEMBER_DESC' docs='
-If the BRIEF_MEMBER_DESC tag is set to YES (the default) Doxygen will
-include brief member descriptions after the members that are listed in
-the file and class documentation (similar to JavaDoc).
-Set to NO to disable this.
-' defval='1'/>
- <option type='bool' id='REPEAT_BRIEF' docs='
-If the REPEAT_BRIEF tag is set to YES (the default) Doxygen will prepend
-the brief description of a member or function before the detailed description.
-Note: if both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the
-brief descriptions will be completely suppressed.
-' defval='1'/>
- <option type='list' id='ABBREVIATE_BRIEF' format='string' docs='
-This tag implements a quasi-intelligent brief description abbreviator
-that is used to form the text in various listings. Each string
-in this list, if found as the leading text of the brief description, will be
-stripped from the text and the result after processing the whole list, is
-used as the annotated text. Otherwise, the brief description is used as-is.
-If left blank, the following values are used (&quot;$name&quot; is automatically
-replaced with the name of the entity): &quot;The $name class&quot; &quot;The $name widget&quot;
-&quot;The $name file&quot; &quot;is&quot; &quot;provides&quot; &quot;specifies&quot; &quot;contains&quot;
-&quot;represents&quot; &quot;a&quot; &quot;an&quot; &quot;the&quot;
-'>
- <value name='The $name class'/>
- <value name='The $name widget'/>
- <value name='The $name file'/>
- <value name='is'/>
- <value name='provides'/>
- <value name='specifies'/>
- <value name='contains'/>
- <value name='represents'/>
- <value name='a'/>
- <value name='an'/>
- <value name='the'/>
- </option>
- <option type='bool' id='ALWAYS_DETAILED_SEC' docs='
-If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then
-Doxygen will generate a detailed section even if there is only a brief
-description.
-' defval='0'/>
- <option type='bool' id='INLINE_INHERITED_MEMB' docs='
-If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all
-inherited members of a class in the documentation of that class as if those
-members were ordinary class members. Constructors, destructors and assignment
-operators of the base classes will not be shown.
-' defval='0'/>
- <option type='bool' id='FULL_PATH_NAMES' docs='
-If the FULL_PATH_NAMES tag is set to YES then Doxygen will prepend the full
-path before files name in the file list and in the header files. If set
-to NO the shortest path that makes the file name unique will be used.
-' defval='1'/>
- <option type='list' id='STRIP_FROM_PATH' format='string' docs='
-If the FULL_PATH_NAMES tag is set to YES then the STRIP_FROM_PATH tag
-can be used to strip a user-defined part of the path. Stripping is
-only done if one of the specified strings matches the left-hand part of
-the path. The tag can be used to show relative paths in the file list.
-If left blank the directory from which doxygen is run is used as the
-path to strip.
-' depends='FULL_PATH_NAMES'>
- <value name=''/>
- </option>
- <option type='list' id='STRIP_FROM_INC_PATH' format='string' docs='
-The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of
-the path mentioned in the documentation of a class, which tells
-the reader which header file to include in order to use a class.
-If left blank only the name of the header file containing the class
-definition is used. Otherwise one should specify the include paths that
-are normally passed to the compiler using the -I flag.
-'>
- </option>
- <option type='bool' id='SHORT_NAMES' docs='
-If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter
-(but less readable) file names. This can be useful if your file system
-doesn&apos;t support long names like on DOS, Mac, or CD-ROM.
-' defval='0'/>
- <option type='bool' id='JAVADOC_AUTOBRIEF' docs='
-If the JAVADOC_AUTOBRIEF tag is set to YES then Doxygen
-will interpret the first line (until the first dot) of a JavaDoc-style
-comment as the brief description. If set to NO, the JavaDoc
-comments will behave just like regular Qt-style comments
-(thus requiring an explicit @brief command for a brief description.)
-' defval='0'/>
- <option type='bool' id='QT_AUTOBRIEF' docs='
-If the QT_AUTOBRIEF tag is set to YES then Doxygen will
-interpret the first line (until the first dot) of a Qt-style
-comment as the brief description. If set to NO, the comments
-will behave just like regular Qt-style comments (thus requiring
-an explicit \brief command for a brief description.)
-' defval='0'/>
- <option type='bool' id='MULTILINE_CPP_IS_BRIEF' docs='
-The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make Doxygen
-treat a multi-line C++ special comment block (i.e. a block of //! or ///
-comments) as a brief description. This used to be the default behaviour.
-The new default is to treat a multi-line C++ comment block as a detailed
-description. Set this tag to YES if you prefer the old behaviour instead.
-' defval='0'/>
- <option type='bool' id='INHERIT_DOCS' docs='
-If the INHERIT_DOCS tag is set to YES (the default) then an undocumented
-member inherits the documentation from any documented member that it
-re-implements.
-' defval='1'/>
- <option type='bool' id='SEPARATE_MEMBER_PAGES' docs='
-If the SEPARATE_MEMBER_PAGES tag is set to YES, then doxygen will produce
-a new page for each member. If set to NO, the documentation of a member will
-be part of the file/class/namespace that contains it.
-' defval='0'/>
- <option type='int' id='TAB_SIZE' docs='
-The TAB_SIZE tag can be used to set the number of spaces in a tab.
-Doxygen uses this value to replace tabs by spaces in code fragments.
-' minval='1' maxval='16' defval='8'/>
- <option type='list' id='ALIASES' format='string' docs='
-This tag can be used to specify a number of aliases that acts
-as commands in the documentation. An alias has the form &quot;name=value&quot;.
-For example adding &quot;sideeffect=\par Side Effects:\n&quot; will allow you to
-put the command \sideeffect (or @sideeffect) in the documentation, which
-will result in a user-defined paragraph with heading &quot;Side Effects:&quot;.
-You can put \n&apos;s in the value part of an alias to insert newlines.
-'/>
- <option type='list' id='TCL_SUBST' format='string' docs='
-This tag can be used to specify a number of word-keyword mappings (TCL only).
-A mapping has the form &quot;name=value&quot;. For example adding
-&quot;class=itcl::class&quot; will allow you to use the command class in the
-itcl::class meaning.
-'/>
- <option type='bool' id='OPTIMIZE_OUTPUT_FOR_C' docs='
-Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C
-sources only. Doxygen will then generate output that is more tailored for C.
-For instance, some of the names that are used will be different. The list
-of all members will be omitted, etc.
-' defval='0'/>
- <option type='bool' id='OPTIMIZE_OUTPUT_JAVA' docs='
-Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java
-sources only. Doxygen will then generate output that is more tailored for
-Java. For instance, namespaces will be presented as packages, qualified
-scopes will look different, etc.
-' defval='0'/>
- <option type='bool' id='OPTIMIZE_FOR_FORTRAN' docs='
-Set the OPTIMIZE_FOR_FORTRAN tag to YES if your project consists of Fortran
-sources only. Doxygen will then generate output that is more tailored for
-Fortran.
-' defval='0'/>
- <option type='bool' id='OPTIMIZE_OUTPUT_VHDL' docs='
-Set the OPTIMIZE_OUTPUT_VHDL tag to YES if your project consists of VHDL
-sources. Doxygen will then generate output that is tailored for
-VHDL.
-' defval='0'/>
- <option type='list' id='EXTENSION_MAPPING' format='string' docs='
-Doxygen selects the parser to use depending on the extension of the files it
-parses. With this tag you can assign which parser to use for a given extension.
-Doxygen has a built-in mapping, but you can override or extend it using this
-tag. The format is ext=language, where ext is a file extension, and language
-is one of the parsers supported by doxygen: IDL, Java, Javascript, CSharp, C,
-C++, D, PHP, Objective-C, Python, Fortran, VHDL, C, C++. For instance to make
-doxygen treat .inc files as Fortran files (default is PHP), and .f files as C
-(default is Fortran), use: inc=Fortran f=C. Note that for custom extensions
-you also need to set FILE_PATTERNS otherwise the files are not read by doxygen.
-'>
- </option>
- <option type='bool' id='MARKDOWN_SUPPORT' docs='
-If MARKDOWN_SUPPORT is enabled (the default) then doxygen pre-processes all
-comments according to the Markdown format, which allows for more readable
-documentation. See http://daringfireball.net/projects/markdown/ for details.
-The output of markdown processing is further processed by doxygen, so you
-can mix doxygen, HTML, and XML commands with Markdown formatting.
-Disable only in case of backward compatibilities issues.
-' defval='1'/>
- <option type='bool' id='BUILTIN_STL_SUPPORT' docs='
-If you use STL classes (i.e. std::string, std::vector, etc.) but do not want
-to include (a tag file for) the STL sources as input, then you should
-set this tag to YES in order to let doxygen match functions declarations and
-definitions whose arguments contain STL classes (e.g. func(std::string); v.s.
-func(std::string) {}). This also makes the inheritance and collaboration
-diagrams that involve STL classes more complete and accurate.
-' defval='0'/>
- <option type='bool' id='CPP_CLI_SUPPORT' docs='
-If you use Microsoft&apos;s C++/CLI language, you should set this option to YES to
-enable parsing support.
-' defval='0'/>
- <option type='bool' id='SIP_SUPPORT' docs='
-Set the SIP_SUPPORT tag to YES if your project consists of sip sources only.
-Doxygen will parse them like normal C++ but will assume all classes use public
-instead of private inheritance when no explicit protection keyword is present.
-' defval='0'/>
- <option type='bool' id='IDL_PROPERTY_SUPPORT' docs='
-For Microsoft&apos;s IDL there are propget and propput attributes to indicate getter
-and setter methods for a property. Setting this option to YES (the default)
-will make doxygen replace the get and set methods by a property in the
-documentation. This will only work if the methods are indeed getting or
-setting a simple type. If this is not the case, or you want to show the
-methods anyway, you should set this option to NO.
-' defval='1'/>
- <option type='bool' id='DISTRIBUTE_GROUP_DOC' docs='
-If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC
-tag is set to YES, then doxygen will reuse the documentation of the first
-member in the group (if any) for the other members of the group. By default
-all members of a group must be documented explicitly.
-' defval='0'/>
- <option type='bool' id='SUBGROUPING' docs='
-Set the SUBGROUPING tag to YES (the default) to allow class member groups of
-the same type (for instance a group of public functions) to be put as a
-subgroup of that type (e.g. under the Public Functions section). Set it to
-NO to prevent subgrouping. Alternatively, this can be done per class using
-the \nosubgrouping command.
-' defval='1'/>
- <option type='bool' id='INLINE_GROUPED_CLASSES' docs='
-When the INLINE_GROUPED_CLASSES tag is set to YES, classes, structs and
-unions are shown inside the group in which they are included (e.g. using
-@ingroup) instead of on a separate page (for HTML and Man pages) or
-section (for LaTeX and RTF).
-' defval='0'/>
- <option type='bool' id='INLINE_SIMPLE_STRUCTS' docs='
-When the INLINE_SIMPLE_STRUCTS tag is set to YES, structs, classes, and
-unions with only public data fields will be shown inline in the documentation
-of the scope in which they are defined (i.e. file, namespace, or group
-documentation), provided this scope is documented. If set to NO (the default),
-structs, classes, and unions are shown on a separate page (for HTML and Man
-pages) or section (for LaTeX and RTF).' defval='0'/>
- <option type='bool' id='TYPEDEF_HIDES_STRUCT' docs='
-When TYPEDEF_HIDES_STRUCT is enabled, a typedef of a struct, union, or enum
-is documented as struct, union, or enum with the name of the typedef. So
-typedef struct TypeS {} TypeT, will appear in the documentation as a struct
-with name TypeT. When disabled the typedef will appear as a member of a file,
-namespace, or class. And the struct will be named TypeS. This can typically
-be useful for C code in case the coding convention dictates that all compound
-types are typedef&apos;ed and only the typedef is referenced, never the tag name.
-' defval='0'/>
- <option type='int' id='SYMBOL_CACHE_SIZE' docs='
-The SYMBOL_CACHE_SIZE determines the size of the internal cache use to
-determine which symbols to keep in memory and which to flush to disk.
-When the cache is full, less often used symbols will be written to disk.
-For small to medium size projects (&lt;1000 input files) the default value is
-probably good enough. For larger projects a too small cache size can cause
-doxygen to be busy swapping symbols to and from disk most of the time
-causing a significant performance penalty.
-If the system has enough physical memory increasing the cache will improve the
-performance by keeping more symbols in memory. Note that the value works on
-a logarithmic scale so increasing the size by one will roughly double the
-memory usage. The cache size is given by this formula:
-2^(16+SYMBOL_CACHE_SIZE). The valid range is 0..9, the default is 0,
-corresponding to a cache size of 2^16 = 65536 symbols.
-' minval='0' maxval='9' defval='0'/>
- <option type='int' id='LOOKUP_CACHE_SIZE' docs='
-Similar to the SYMBOL_CACHE_SIZE the size of the symbol lookup cache can be
-set using LOOKUP_CACHE_SIZE. This cache is used to resolve symbols given
-their name and scope. Since this can be an expensive process and often the
-same symbol appear multiple times in the code, doxygen keeps a cache of
-pre-resolved symbols. If the cache is too small doxygen will become slower.
-If the cache is too large, memory is wasted. The cache size is given by this
-formula: 2^(16+LOOKUP_CACHE_SIZE). The valid range is 0..9, the default is 0,
-corresponding to a cache size of 2^16 = 65536 symbols.
-' minval='0' maxval='9' defval='0'/>
- </group>
- <group name='Build' docs='Build related configuration options'>
- <option type='bool' id='EXTRACT_ALL' docs='
-If the EXTRACT_ALL tag is set to YES doxygen will assume all entities in
-documentation are documented, even if no documentation was available.
-Private class members and static file members will be hidden unless
-the EXTRACT_PRIVATE and EXTRACT_STATIC tags are set to YES
-' defval='0'/>
- <option type='bool' id='EXTRACT_PRIVATE' docs='
-If the EXTRACT_PRIVATE tag is set to YES all private members of a class
-will be included in the documentation.
-' defval='0'/>
- <option type='bool' id='EXTRACT_PACKAGE' docs='
-If the EXTRACT_PACKAGE tag is set to YES all members with package or internal
-scope will be included in the documentation.
-' defval='0'/>
- <option type='bool' id='EXTRACT_STATIC' docs='
-If the EXTRACT_STATIC tag is set to YES all static members of a file
-will be included in the documentation.
-' defval='0'/>
- <option type='bool' id='EXTRACT_LOCAL_CLASSES' docs='
-If the EXTRACT_LOCAL_CLASSES tag is set to YES classes (and structs)
-defined locally in source files will be included in the documentation.
-If set to NO only classes defined in header files are included.
-' defval='1'/>
- <option type='bool' id='EXTRACT_LOCAL_METHODS' docs='
-This flag is only useful for Objective-C code. When set to YES local
-methods, which are defined in the implementation section but not in
-the interface are included in the documentation.
-If set to NO (the default) only methods in the interface are included.
-' defval='0'/>
- <option type='bool' id='EXTRACT_ANON_NSPACES' docs='
-If this flag is set to YES, the members of anonymous namespaces will be
-extracted and appear in the documentation as a namespace called
-&apos;anonymous_namespace{file}&apos;, where file will be replaced with the base
-name of the file that contains the anonymous namespace. By default
-anonymous namespaces are hidden.
-' defval='0'/>
- <option type='bool' id='HIDE_UNDOC_MEMBERS' docs='
-If the HIDE_UNDOC_MEMBERS tag is set to YES, Doxygen will hide all
-undocumented members of documented classes, files or namespaces.
-If set to NO (the default) these members will be included in the
-various overviews, but no documentation section is generated.
-This option has no effect if EXTRACT_ALL is enabled.
-' defval='0'/>
- <option type='bool' id='HIDE_UNDOC_CLASSES' docs='
-If the HIDE_UNDOC_CLASSES tag is set to YES, Doxygen will hide all
-undocumented classes that are normally visible in the class hierarchy.
-If set to NO (the default) these classes will be included in the various
-overviews. This option has no effect if EXTRACT_ALL is enabled.
-' defval='0'/>
- <option type='bool' id='HIDE_FRIEND_COMPOUNDS' docs='
-If the HIDE_FRIEND_COMPOUNDS tag is set to YES, Doxygen will hide all
-friend (class|struct|union) declarations.
-If set to NO (the default) these declarations will be included in the
-documentation.
-' defval='0'/>
- <option type='bool' id='HIDE_IN_BODY_DOCS' docs='
-If the HIDE_IN_BODY_DOCS tag is set to YES, Doxygen will hide any
-documentation blocks found inside the body of a function.
-If set to NO (the default) these blocks will be appended to the
-function&apos;s detailed documentation block.
-' defval='0'/>
- <option type='bool' id='INTERNAL_DOCS' docs='
-The INTERNAL_DOCS tag determines if documentation
-that is typed after a \internal command is included. If the tag is set
-to NO (the default) then the documentation will be excluded.
-Set it to YES to include the internal documentation.
-' defval='0'/>
- <option type='bool' id='CASE_SENSE_NAMES' docs='
-If the CASE_SENSE_NAMES tag is set to NO then Doxygen will only generate
-file names in lower-case letters. If set to YES upper-case letters are also
-allowed. This is useful if you have classes or files whose names only differ
-in case and if your file system supports case sensitive file names. Windows
-and Mac users are advised to set this option to NO.
-' defval='0' altdefval='portable_fileSystemIsCaseSensitive()'/>
- <option type='bool' id='HIDE_SCOPE_NAMES' docs='
-If the HIDE_SCOPE_NAMES tag is set to NO (the default) then Doxygen
-will show members with their full class and namespace scopes in the
-documentation. If set to YES the scope will be hidden.
-' defval='0'/>
- <option type='bool' id='SHOW_INCLUDE_FILES' docs='
-If the SHOW_INCLUDE_FILES tag is set to YES (the default) then Doxygen
-will put a list of the files that are included by a file in the documentation
-of that file.
-' defval='1'/>
- <option type='bool' id='FORCE_LOCAL_INCLUDES' docs='
-If the FORCE_LOCAL_INCLUDES tag is set to YES then Doxygen
-will list include files with double quotes in the documentation
-rather than with sharp brackets.
-' defval='0'/>
- <option type='bool' id='INLINE_INFO' docs='
-If the INLINE_INFO tag is set to YES (the default) then a tag [inline]
-is inserted in the documentation for inline members.
-' defval='1'/>
- <option type='bool' id='SORT_MEMBER_DOCS' docs='
-If the SORT_MEMBER_DOCS tag is set to YES (the default) then doxygen
-will sort the (detailed) documentation of file and class members
-alphabetically by member name. If set to NO the members will appear in
-declaration order.
-' defval='1'/>
- <option type='bool' id='SORT_BRIEF_DOCS' docs='
-If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the
-brief documentation of file, namespace and class members alphabetically
-by member name. If set to NO (the default) the members will appear in
-declaration order.
-' defval='0'/>
- <option type='bool' id='SORT_MEMBERS_CTORS_1ST' docs='
-If the SORT_MEMBERS_CTORS_1ST tag is set to YES then doxygen
-will sort the (brief and detailed) documentation of class members so that
-constructors and destructors are listed first. If set to NO (the default)
-the constructors will appear in the respective orders defined by
-SORT_MEMBER_DOCS and SORT_BRIEF_DOCS.
-This tag will be ignored for brief docs if SORT_BRIEF_DOCS is set to NO
-and ignored for detailed docs if SORT_MEMBER_DOCS is set to NO.' defval='0'/>
- <option type='bool' id='SORT_GROUP_NAMES' docs='
-If the SORT_GROUP_NAMES tag is set to YES then doxygen will sort the
-hierarchy of group names into alphabetical order. If set to NO (the default)
-the group names will appear in their defined order.
-' defval='0'/>
- <option type='bool' id='SORT_BY_SCOPE_NAME' docs='
-If the SORT_BY_SCOPE_NAME tag is set to YES, the class list will be
-sorted by fully-qualified names, including namespaces. If set to
-NO (the default), the class list will be sorted only by class name,
-not including the namespace part.
-Note: This option is not very useful if HIDE_SCOPE_NAMES is set to YES.
-Note: This option applies only to the class list, not to the
-alphabetical list.
-' defval='0'/>
- <option type='bool' id='STRICT_PROTO_MATCHING' docs='
-If the STRICT_PROTO_MATCHING option is enabled and doxygen fails to
-do proper type resolution of all parameters of a function it will reject a
-match between the prototype and the implementation of a member function even
-if there is only one candidate or it is obvious which candidate to choose
-by doing a simple string match. By disabling STRICT_PROTO_MATCHING doxygen
-will still accept a match between prototype and implementation in such cases.
-' defval='0'/>
- <option type='bool' id='GENERATE_TODOLIST' docs='
-The GENERATE_TODOLIST tag can be used to enable (YES) or
-disable (NO) the todo list. This list is created by putting \todo
-commands in the documentation.
-' defval='1'/>
- <option type='bool' id='GENERATE_TESTLIST' docs='
-The GENERATE_TESTLIST tag can be used to enable (YES) or
-disable (NO) the test list. This list is created by putting \test
-commands in the documentation.
-' defval='1'/>
- <option type='bool' id='GENERATE_BUGLIST' docs='
-The GENERATE_BUGLIST tag can be used to enable (YES) or
-disable (NO) the bug list. This list is created by putting \bug
-commands in the documentation.
-' defval='1'/>
- <option type='bool' id='GENERATE_DEPRECATEDLIST' docs='
-The GENERATE_DEPRECATEDLIST tag can be used to enable (YES) or
-disable (NO) the deprecated list. This list is created by putting
-\deprecated commands in the documentation.
-' defval='1'/>
- <option type='list' id='ENABLED_SECTIONS' format='string' docs='
-The ENABLED_SECTIONS tag can be used to enable conditional
-documentation sections, marked by \if sectionname ... \endif.
-'>
- </option>
- <option type='int' id='MAX_INITIALIZER_LINES' docs='
-The MAX_INITIALIZER_LINES tag determines the maximum number of lines
-the initial value of a variable or macro consists of for it to appear in
-the documentation. If the initializer consists of more lines than specified
-here it will be hidden. Use a value of 0 to hide initializers completely.
-The appearance of the initializer of individual variables and macros in the
-documentation can be controlled using \showinitializer or \hideinitializer
-command in the documentation regardless of this setting.
-' minval='0' maxval='10000' defval='30'/>
- <option type='bool' id='SHOW_USED_FILES' docs='
-Set the SHOW_USED_FILES tag to NO to disable the list of files generated
-at the bottom of the documentation of classes and structs. If set to YES the
-list will mention the files that were used to generate the documentation.
-' defval='1'/>
- <option type='bool' id='SHOW_DIRECTORIES' docs='
-If the sources in your project are distributed over multiple directories
-then setting the SHOW_DIRECTORIES tag to YES will show the directory hierarchy
-in the documentation. The default is NO.
-' defval='0'/>
- <option type='bool' id='SHOW_FILES' docs='
-Set the SHOW_FILES tag to NO to disable the generation of the Files page.
-This will remove the Files entry from the Quick Index and from the
-Folder Tree View (if specified). The default is YES.
-' defval='1'/>
- <option type='bool' id='SHOW_NAMESPACES' docs='
-Set the SHOW_NAMESPACES tag to NO to disable the generation of the
-Namespaces page. This will remove the Namespaces entry from the Quick Index
-and from the Folder Tree View (if specified). The default is YES.
-' defval='1'/>
- <option type='string' id='FILE_VERSION_FILTER' format='file' docs='
-The FILE_VERSION_FILTER tag can be used to specify a program or script that
-doxygen should invoke to get the current version for each file (typically from
-the version control system). Doxygen will invoke the program by executing (via
-popen()) the command &lt;command&gt; &lt;input-file&gt;, where &lt;command&gt; is the value of
-the FILE_VERSION_FILTER tag, and &lt;input-file&gt; is the name of an input file
-provided by doxygen. Whatever the program writes to standard output
-is used as the file version. See the manual for examples.
-' defval=''/>
- <option type='string' id='LAYOUT_FILE' format='file' docs='
-The LAYOUT_FILE tag can be used to specify a layout file which will be parsed
-by doxygen. The layout file controls the global structure of the generated
-output files in an output format independent way. The create the layout file
-that represents doxygen&apos;s defaults, run doxygen with the -l option.
-You can optionally specify a file name after the option, if omitted
-DoxygenLayout.xml will be used as the name of the layout file.
-' defval=''/>
- <option type='list' id='CITE_BIB_FILES' format='file' docs='
-The CITE_BIB_FILES tag can be used to specify one or more bib files
-containing the references data. This must be a list of .bib files. The
-.bib extension is automatically appended if omitted. Using this command
-requires the bibtex tool to be installed. See also
-http://en.wikipedia.org/wiki/BibTeX for more info. For LaTeX the style
-of the bibliography can be controlled using LATEX_BIB_STYLE. To use this
-feature you need bibtex and perl available in the search path.
-' defval=''/>
- </group>
- <group name='Messages' docs='configuration options related to warning and progress messages'>
- <option type='bool' id='QUIET' docs='
-The QUIET tag can be used to turn on/off the messages that are generated
-by doxygen. Possible values are YES and NO. If left blank NO is used.
-' defval='0'/>
- <option type='bool' id='WARNINGS' docs='
-The WARNINGS tag can be used to turn on/off the warning messages that are
-generated by doxygen. Possible values are YES and NO. If left blank
-NO is used.
-' defval='1'/>
- <option type='bool' id='WARN_IF_UNDOCUMENTED' docs='
-If WARN_IF_UNDOCUMENTED is set to YES, then doxygen will generate warnings
-for undocumented members. If EXTRACT_ALL is set to YES then this flag will
-automatically be disabled.
-' defval='1'/>
- <option type='bool' id='WARN_IF_DOC_ERROR' docs='
-If WARN_IF_DOC_ERROR is set to YES, doxygen will generate warnings for
-potential errors in the documentation, such as not documenting some
-parameters in a documented function, or documenting parameters that
-don&apos;t exist or using markup commands wrongly.
-' defval='1'/>
- <option type='bool' id='WARN_NO_PARAMDOC' docs='
-The WARN_NO_PARAMDOC option can be enabled to get warnings for
-functions that are documented, but have no documentation for their parameters
-or return value. If set to NO (the default) doxygen will only warn about
-wrong or incomplete parameter documentation, but not about the absence of
-documentation.
-' defval='0'/>
- <option type='string' id='WARN_FORMAT' format='string' docs='
-The WARN_FORMAT tag determines the format of the warning messages that
-doxygen can produce. The string should contain the $file, $line, and $text
-tags, which will be replaced by the file and line number from which the
-warning originated and the warning text. Optionally the format may contain
-$version, which will be replaced by the version of the file (if it could
-be obtained via FILE_VERSION_FILTER)
-' defval='$file:$line: $text'/>
- <option type='string' id='WARN_LOGFILE' format='file' docs='
-The WARN_LOGFILE tag can be used to specify a file to which warning
-and error messages should be written. If left blank the output is written
-to stderr.
-' defval=''/>
- </group>
- <group name='Input' docs='configuration options related to the input files'>
- <option type='list' id='INPUT' format='filedir' docs='
-The INPUT tag can be used to specify the files and/or directories that contain
-documented source files. You may enter file names like &quot;myfile.cpp&quot; or
-directories like &quot;/usr/src/myproject&quot;. Separate the files or directories
-with spaces.
-'>
- <value name=''/>
- </option>
- <option type='string' id='INPUT_ENCODING' format='string' docs='
-This tag can be used to specify the character encoding of the source files
-that doxygen parses. Internally doxygen uses the UTF-8 encoding, which is
-also the default input encoding. Doxygen uses libiconv (or the iconv built
-into libc) for the transcoding. See http://www.gnu.org/software/libiconv for
-the list of possible encodings.
-' defval='UTF-8'/>
- <option type='list' id='FILE_PATTERNS' format='string' docs='
-If the value of the INPUT tag contains directories, you can use the
-FILE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp
-and *.h) to filter out the source-files in the directories. If left
-blank the following patterns are tested:
-*.c *.cc *.cxx *.cpp *.c++ *.d *.java *.ii *.ixx *.ipp *.i++ *.inl *.h *.hh
-*.hxx *.hpp *.h++ *.idl *.odl *.cs *.php *.php3 *.inc *.m *.mm *.dox *.py
-*.f90 *.f *.for *.vhd *.vhdl
-'>
- <value name='*.c'/>
- <value name='*.cc'/>
- <value name='*.cxx'/>
- <value name='*.cpp'/>
- <value name='*.c++'/>
- <value name='*.d'/>
- <value name='*.java'/>
- <value name='*.ii'/>
- <value name='*.ixx'/>
- <value name='*.ipp'/>
- <value name='*.i++'/>
- <value name='*.inl'/>
- <value name='*.h'/>
- <value name='*.hh'/>
- <value name='*.hxx'/>
- <value name='*.hpp'/>
- <value name='*.h++'/>
- <value name='*.idl'/>
- <value name='*.odl'/>
- <value name='*.cs'/>
- <value name='*.php'/>
- <value name='*.php3'/>
- <value name='*.inc'/>
- <value name='*.m'/>
- <value name='*.markdown'/>
- <value name='*.md'/>
- <value name='*.mm'/>
- <value name='*.dox'/>
- <value name='*.py'/>
- <value name='*.f90'/>
- <value name='*.f'/>
- <value name='*.for'/>
- <value name='*.vhd'/>
- <value name='*.vhdl'/>
- </option>
- <option type='bool' id='RECURSIVE' docs='
-The RECURSIVE tag can be used to turn specify whether or not subdirectories
-should be searched for input files as well. Possible values are YES and NO.
-If left blank NO is used.
-' defval='0'/>
- <option type='list' id='EXCLUDE' format='filedir' docs='
-The EXCLUDE tag can be used to specify files and/or directories that should be
-excluded from the INPUT source files. This way you can easily exclude a
-subdirectory from a directory tree whose root is specified with the INPUT tag.
-Note that relative paths are relative to the directory from which doxygen is
-run.
-'>
- </option>
- <option type='bool' id='EXCLUDE_SYMLINKS' docs='
-The EXCLUDE_SYMLINKS tag can be used to select whether or not files or
-directories that are symbolic links (a Unix file system feature) are excluded
-from the input.
-' defval='0'/>
- <option type='list' id='EXCLUDE_PATTERNS' format='string' docs='
-If the value of the INPUT tag contains directories, you can use the
-EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude
-certain files from those directories. Note that the wildcards are matched
-against the file with absolute path, so to exclude all test directories
-for example use the pattern */test/*
-'>
- </option>
- <option type='list' id='EXCLUDE_SYMBOLS' format='string' docs='
-The EXCLUDE_SYMBOLS tag can be used to specify one or more symbol names
-(namespaces, classes, functions, etc.) that should be excluded from the
-output. The symbol name can be a fully qualified name, a word, or if the
-wildcard * is used, a substring. Examples: ANamespace, AClass,
-AClass::ANamespace, ANamespace::*Test
-'>
- </option>
- <option type='list' id='EXAMPLE_PATH' format='dir' docs='
-The EXAMPLE_PATH tag can be used to specify one or more files or
-directories that contain example code fragments that are included (see
-the \include command).
-'>
- </option>
- <option type='list' id='EXAMPLE_PATTERNS' format='string' docs='
-If the value of the EXAMPLE_PATH tag contains directories, you can use the
-EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp
-and *.h) to filter out the source-files in the directories. If left
-blank all files are included.
-'>
- <value name='*'/>
- </option>
- <option type='bool' id='EXAMPLE_RECURSIVE' docs='
-If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be
-searched for input files to be used with the \include or \dontinclude
-commands irrespective of the value of the RECURSIVE tag.
-Possible values are YES and NO. If left blank NO is used.
-' defval='0'/>
- <option type='list' id='IMAGE_PATH' format='dir' docs='
-The IMAGE_PATH tag can be used to specify one or more files or
-directories that contain image that are included in the documentation (see
-the \image command).
-'>
- </option>
- <option type='string' id='INPUT_FILTER' format='file' docs='
-The INPUT_FILTER tag can be used to specify a program that doxygen should
-invoke to filter for each input file. Doxygen will invoke the filter program
-by executing (via popen()) the command &lt;filter&gt; &lt;input-file&gt;, where &lt;filter&gt;
-is the value of the INPUT_FILTER tag, and &lt;input-file&gt; is the name of an
-input file. Doxygen will then use the output that the filter program writes
-to standard output. If FILTER_PATTERNS is specified, this tag will be
-ignored.
-' defval=''/>
- <option type='list' id='FILTER_PATTERNS' format='string' docs='
-The FILTER_PATTERNS tag can be used to specify filters on a per file pattern
-basis. Doxygen will compare the file name with each pattern and apply the
-filter if there is a match. The filters are a list of the form:
-pattern=filter (like *.cpp=my_cpp_filter). See INPUT_FILTER for further
-info on how filters are used. If FILTER_PATTERNS is empty or if
-non of the patterns match the file name, INPUT_FILTER is applied.
-'>
- </option>
- <option type='bool' id='FILTER_SOURCE_FILES' docs='
-If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using
-INPUT_FILTER) will be used to filter the input files when producing source
-files to browse (i.e. when SOURCE_BROWSER is set to YES).
-' defval='0'/>
- <option type='list' id='FILTER_SOURCE_PATTERNS' format='string' docs='
-The FILTER_SOURCE_PATTERNS tag can be used to specify source filters per file
-pattern. A pattern will override the setting for FILTER_PATTERN (if any)
-and it is also possible to disable source filtering for a specific pattern
-using *.ext= (so without naming a filter). This option only has effect when
-FILTER_SOURCE_FILES is enabled.
-' depends='FILTER_SOURCE_FILES'/>
- </group>
- <group name='Source Browser' docs='configuration options related to source browsing'>
- <option type='bool' id='SOURCE_BROWSER' docs='
-If the SOURCE_BROWSER tag is set to YES then a list of source files will
-be generated. Documented entities will be cross-referenced with these sources.
-Note: To get rid of all source code in the generated output, make sure also
-VERBATIM_HEADERS is set to NO.
-' defval='0'/>
- <option type='bool' id='INLINE_SOURCES' docs='
-Setting the INLINE_SOURCES tag to YES will include the body
-of functions and classes directly in the documentation.
-' defval='0'/>
- <option type='bool' id='STRIP_CODE_COMMENTS' docs='
-Setting the STRIP_CODE_COMMENTS tag to 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.
-' defval='1'/>
- <option type='bool' id='REFERENCED_BY_RELATION' docs='
-If the REFERENCED_BY_RELATION tag is set to YES
-then for each documented function all documented
-functions referencing it will be listed.
-' defval='0'/>
- <option type='bool' id='REFERENCES_RELATION' docs='
-If the REFERENCES_RELATION tag is set to YES
-then for each documented function all documented entities
-called/used by that function will be listed.
-' defval='0'/>
- <option type='bool' id='REFERENCES_LINK_SOURCE' docs='
-If the REFERENCES_LINK_SOURCE tag is set to YES (the default)
-and SOURCE_BROWSER tag is set to YES, then the hyperlinks from
-functions in REFERENCES_RELATION and REFERENCED_BY_RELATION lists will
-link to the source code. Otherwise they will link to the documentation.
-' defval='1'/>
- <option type='bool' id='USE_HTAGS' docs='
-If the USE_HTAGS tag is set to YES then the references to source code
-will point to the HTML generated by the htags(1) tool instead of doxygen
-built-in source browser. The htags tool is part of GNU&apos;s global source
-tagging system (see http://www.gnu.org/software/global/global.html). You
-will need version 4.8.6 or higher.
-' defval='0' depends='SOURCE_BROWSER'/>
- <option type='bool' id='VERBATIM_HEADERS' docs='
-If the VERBATIM_HEADERS tag is set to YES (the default) then Doxygen
-will generate a verbatim copy of the header file for each class for
-which an include is specified. Set to NO to disable this.
-' defval='1'/>
- </group>
- <group name='Index' docs='configuration options related to the alphabetical class index'>
- <option type='bool' id='ALPHABETICAL_INDEX' docs='
-If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index
-of all compounds will be generated. Enable this if the project
-contains a lot of classes, structs, unions or interfaces.
-' defval='1'/>
- <option type='int' id='COLS_IN_ALPHA_INDEX' docs='
-If the alphabetical index is enabled (see ALPHABETICAL_INDEX) then
-the COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns
-in which this list will be split (can be a number in the range [1..20])
-' minval='1' maxval='20' defval='5'/>
- <option type='list' id='IGNORE_PREFIX' format='string' docs='
-In case all classes in a project start with a common prefix, all
-classes will be put under the same header in the alphabetical index.
-The IGNORE_PREFIX tag can be used to specify one or more prefixes that
-should be ignored while generating the index headers.
-'>
- </option>
- </group>
- <group name='HTML' docs='configuration options related to the HTML output'>
- <option type='bool' id='GENERATE_HTML' docs='
-If the GENERATE_HTML tag is set to YES (the default) Doxygen will
-generate HTML output.
-' defval='1'/>
- <option type='string' id='HTML_OUTPUT' format='dir' docs='
-The HTML_OUTPUT tag is used to specify where the HTML docs will be put.
-If a relative path is entered the value of OUTPUT_DIRECTORY will be
-put in front of it. If left blank `html&apos; will be used as the default path.
-' defval='html' depends='GENERATE_HTML'/>
- <option type='string' id='HTML_FILE_EXTENSION' format='string' docs='
-The HTML_FILE_EXTENSION tag can be used to specify the file extension for
-each generated HTML page (for example: .htm,.php,.asp). If it is left blank
-doxygen will generate files with .html extension.
-' defval='.html' depends='GENERATE_HTML'/>
- <option type='string' id='HTML_HEADER' format='file' docs='
-The HTML_HEADER tag can be used to specify a personal HTML header for
-each generated HTML page. If it is left blank doxygen will generate a
-standard header. Note that when using a custom header you are responsible
-for the proper inclusion of any scripts and style sheets that doxygen
-needs, which is dependent on the configuration options used.
-It is advised to generate a default header using "doxygen -w html
-header.html footer.html stylesheet.css YourConfigFile" and then modify
-that header. Note that the header is subject to change so you typically
-have to redo this when upgrading to a newer version of doxygen or when
-changing the value of configuration settings such as GENERATE_TREEVIEW!
-' defval='' depends='GENERATE_HTML'/>
- <option type='string' id='HTML_FOOTER' format='file' docs='
-The HTML_FOOTER tag can be used to specify a personal HTML footer for
-each generated HTML page. If it is left blank doxygen will generate a
-standard footer.
-' defval='' depends='GENERATE_HTML'/>
- <option type='string' id='HTML_STYLESHEET' format='file' docs='
-The HTML_STYLESHEET tag can be used to specify a user-defined cascading
-style sheet that is used by each HTML page. It can be used to
-fine-tune the look of the HTML output. If the tag is left blank doxygen
-will generate a default style sheet. Note that doxygen will try to copy
-the style sheet file to the HTML output directory, so don&apos;t put your own
-style sheet in the HTML output directory as well, or it will be erased!
-' defval='' depends='GENERATE_HTML'/>
- <option type='list' id='HTML_EXTRA_FILES' format='file' docs='
-The HTML_EXTRA_FILES tag can be used to specify one or more extra images or
-other source files which should be copied to the HTML output directory. Note
-that these files will be copied to the base HTML output directory. Use the
-$relpath$ marker in the HTML_HEADER and/or HTML_FOOTER files to load these
-files. In the HTML_STYLESHEET file, use the file name only. Also note that
-the files will be copied as-is; there are no commands or markers available.
-' depends='GENERATE_HTML'/>
- <option type='int' id='HTML_COLORSTYLE_HUE' docs='
-The HTML_COLORSTYLE_HUE tag controls the color of the HTML output.
-Doxygen will adjust the colors in the style sheet and background images
-according to this color. Hue is specified as an angle on a colorwheel,
-see http://en.wikipedia.org/wiki/Hue for more information.
-For instance the value 0 represents red, 60 is yellow, 120 is green,
-180 is cyan, 240 is blue, 300 purple, and 360 is red again.
-The allowed range is 0 to 359.
-' minval='0' maxval='359' defval='220' depends='GENERATE_HTML'/>
- <option type='int' id='HTML_COLORSTYLE_SAT' docs='
-The HTML_COLORSTYLE_SAT tag controls the purity (or saturation) of
-the colors in the HTML output. For a value of 0 the output will use
-grayscales only. A value of 255 will produce the most vivid colors.
-' minval='0' maxval='255' defval='100' depends='GENERATE_HTML'/>
- <option type='int' id='HTML_COLORSTYLE_GAMMA' docs='
-The HTML_COLORSTYLE_GAMMA tag controls the gamma correction applied to
-the luminance component of the colors in the HTML output. Values below
-100 gradually make the output lighter, whereas values above 100 make
-the output darker. The value divided by 100 is the actual gamma applied,
-so 80 represents a gamma of 0.8, The value 220 represents a gamma of 2.2,
-and 100 does not change the gamma.
-' minval='40' maxval='240' defval='80'/>
- <option type='bool' id='HTML_TIMESTAMP' docs='
-If the HTML_TIMESTAMP tag is set to YES then the footer of each generated HTML
-page will contain the date and time when the page was generated. Setting
-this to NO can help when comparing the output of multiple runs.
-' defval='1' depends='GENERATE_HTML'/>
- <option type='bool' id='HTML_ALIGN_MEMBERS' docs='
-If the HTML_ALIGN_MEMBERS tag is set to YES, the members of classes,
-files or namespaces will be aligned in HTML using tables. If set to
-NO a bullet list will be used.
-' defval='1' depends='GENERATE_HTML'/>
- <option type='bool' id='HTML_DYNAMIC_SECTIONS' docs='
-If the HTML_DYNAMIC_SECTIONS tag is set to YES then the generated HTML
-documentation will contain sections that can be hidden and shown after the
-page has loaded. For this to work a browser that supports
-JavaScript and DHTML is required (for instance Mozilla 1.0+, Firefox
-Netscape 6.0+, Internet explorer 5.0+, Konqueror, or Safari).
-' defval='0' depends='GENERATE_HTML'/>
- <option type='bool' id='GENERATE_DOCSET' docs='
-If the GENERATE_DOCSET tag is set to YES, additional index files
-will be generated that can be used as input for Apple&apos;s Xcode 3
-integrated development environment, introduced with OSX 10.5 (Leopard).
-To create a documentation set, doxygen will generate a Makefile in the
-HTML output directory. Running make will produce the docset in that
-directory and running &quot;make install&quot; will install the docset in
-~/Library/Developer/Shared/Documentation/DocSets so that Xcode will find
-it at startup.
-See http://developer.apple.com/tools/creatingdocsetswithdoxygen.html
-for more information.
-' defval='0' depends='GENERATE_HTML'/>
- <option type='string' id='DOCSET_FEEDNAME' format='string' docs='
-When GENERATE_DOCSET tag is set to YES, this tag determines the name of the
-feed. A documentation feed provides an umbrella under which multiple
-documentation sets from a single provider (such as a company or product suite)
-can be grouped.
-' defval='Doxygen generated docs' depends='GENERATE_DOCSET'/>
- <option type='string' id='DOCSET_BUNDLE_ID' format='string' docs='
-When GENERATE_DOCSET tag is set to YES, this tag specifies a string that
-should uniquely identify the documentation set bundle. This should be a
-reverse domain-name style string, e.g. com.mycompany.MyDocSet. Doxygen
-will append .docset to the name.
-' defval='org.doxygen.Project' depends='GENERATE_DOCSET'/>
- <option type='string' id='DOCSET_PUBLISHER_ID' format='string' docs='
-When GENERATE_PUBLISHER_ID tag specifies a string that should uniquely identify
-the documentation publisher. This should be a reverse domain-name style
-string, e.g. com.mycompany.MyDocSet.documentation.
-' defval='org.doxygen.Publisher' depends='GENERATE_DOCSET'/>
- <option type='string' id='DOCSET_PUBLISHER_NAME' format='string' docs='
-The GENERATE_PUBLISHER_NAME tag identifies the documentation publisher.
-' defval='Publisher' depends='GENERATE_DOCSET'/>
- <option type='bool' id='GENERATE_HTMLHELP' docs='
-If the GENERATE_HTMLHELP tag is set to YES, additional index files
-will be generated that can be used as input for tools like the
-Microsoft HTML help workshop to generate a compiled HTML help file (.chm)
-of the generated HTML documentation.
-' defval='0' depends='GENERATE_HTML'/>
- <option type='string' id='CHM_FILE' format='file' docs='
-If the GENERATE_HTMLHELP tag is set to YES, the CHM_FILE tag can
-be used to specify the file name of the resulting .chm file. You
-can add a path in front of the file if the result should not be
-written to the html output directory.
-' defval='' depends='GENERATE_HTMLHELP'/>
- <option type='string' id='HHC_LOCATION' format='file' docs='
-If the GENERATE_HTMLHELP tag is set to YES, the HHC_LOCATION tag can
-be used to specify the location (absolute path including file name) of
-the HTML help compiler (hhc.exe). If non-empty doxygen will try to run
-the HTML help compiler on the generated index.hhp.
-' defval='' depends='GENERATE_HTMLHELP' abspath='1'/>
- <option type='bool' id='GENERATE_CHI' docs='
-If the GENERATE_HTMLHELP tag is set to YES, the GENERATE_CHI flag
-controls if a separate .chi index file is generated (YES) or that
-it should be included in the master .chm file (NO).
-' defval='0' depends='GENERATE_HTMLHELP'/>
- <option type='string' id='CHM_INDEX_ENCODING' format='string' docs='
-If the GENERATE_HTMLHELP tag is set to YES, the CHM_INDEX_ENCODING
-is used to encode HtmlHelp index (hhk), content (hhc) and project file
-content.
-' defval='' depends='GENERATE_HTMLHELP'/>
- <option type='bool' id='BINARY_TOC' docs='
-If the GENERATE_HTMLHELP tag is set to YES, the BINARY_TOC flag
-controls whether a binary table of contents is generated (YES) or a
-normal table of contents (NO) in the .chm file.
-' defval='0' depends='GENERATE_HTMLHELP'/>
- <option type='bool' id='TOC_EXPAND' docs='
-The TOC_EXPAND flag can be set to YES to add extra items for group members
-to the contents of the HTML help documentation and to the tree view.
-' defval='0' depends='GENERATE_HTMLHELP'/>
- <option type='bool' id='GENERATE_QHP' docs='
-If the GENERATE_QHP tag is set to YES and both QHP_NAMESPACE and
-QHP_VIRTUAL_FOLDER are set, an additional index file will be generated
-that can be used as input for Qt&apos;s qhelpgenerator to generate a
-Qt Compressed Help (.qch) of the generated HTML documentation.
-' defval='0' depends='GENERATE_HTML'/>
- <option type='string' id='QCH_FILE' format='file' docs='
-If the QHG_LOCATION tag is specified, the QCH_FILE tag can
-be used to specify the file name of the resulting .qch file.
-The path specified is relative to the HTML output folder.
-' defval='' depends='GENERATE_QHP'/>
- <option type='string' id='QHP_NAMESPACE' format='string' docs='
-The QHP_NAMESPACE tag specifies the namespace to use when generating
-Qt Help Project output. For more information please see
-http://doc.trolltech.com/qthelpproject.html#namespace
-' defval='org.doxygen.Project' depends='GENERATE_QHP'/>
- <option type='string' id='QHP_VIRTUAL_FOLDER' format='string' docs='
-The QHP_VIRTUAL_FOLDER tag specifies the namespace to use when generating
-Qt Help Project output. For more information please see
-http://doc.trolltech.com/qthelpproject.html#virtual-folders
-' defval='doc' depends='GENERATE_QHP'/>
- <option type='string' id='QHP_CUST_FILTER_NAME' format='string' docs='
-If QHP_CUST_FILTER_NAME is set, it specifies the name of a custom filter to
-add. For more information please see
-http://doc.trolltech.com/qthelpproject.html#custom-filters
-' defval='' depends='GENERATE_QHP'/>
- <option type='string' id='QHP_CUST_FILTER_ATTRS' format='string' docs='
-The QHP_CUST_FILT_ATTRS tag specifies the list of the attributes of the
-custom filter to add. For more information please see
-&lt;a href=&quot;http://doc.trolltech.com/qthelpproject.html#custom-filters&quot;&gt;
-Qt Help Project / Custom Filters&lt;/a&gt;.
-' defval='' depends='GENERATE_QHP'/>
- <option type='string' id='QHP_SECT_FILTER_ATTRS' format='string' docs='
-The QHP_SECT_FILTER_ATTRS tag specifies the list of the attributes this
-project&apos;s
-filter section matches.
-&lt;a href=&quot;http://doc.trolltech.com/qthelpproject.html#filter-attributes&quot;&gt;
-Qt Help Project / Filter Attributes&lt;/a&gt;.
-' defval='' depends='GENERATE_QHP'/>
- <option type='string' id='QHG_LOCATION' format='file' docs='
-If the GENERATE_QHP tag is set to YES, the QHG_LOCATION tag can
-be used to specify the location of Qt&apos;s qhelpgenerator.
-If non-empty doxygen will try to run qhelpgenerator on the generated
-.qhp file.
-' defval='' depends='GENERATE_QHP'/>
- <option type='bool' id='GENERATE_ECLIPSEHELP' docs='
-If the GENERATE_ECLIPSEHELP tag is set to YES, additional index files
-will be generated, which together with the HTML files, form an Eclipse help
-plugin. To install this plugin and make it available under the help contents
-menu in Eclipse, the contents of the directory containing the HTML and XML
-files needs to be copied into the plugins directory of eclipse. The name of
-the directory within the plugins directory should be the same as
-the ECLIPSE_DOC_ID value. After copying Eclipse needs to be restarted before
-the help appears.
-' defval='0' depends='GENERATE_HTML'/>
- <option type='string' id='ECLIPSE_DOC_ID' docs='
-A unique identifier for the eclipse help plugin. When installing the plugin
-the directory name containing the HTML and XML files should also have
-this name.
-' defval='org.doxygen.Project' depends='GENERATE_ECLIPSEHELP'/>
- <option type='bool' id='DISABLE_INDEX' docs='
-The DISABLE_INDEX tag can be used to turn on/off the condensed index (tabs)
-at top of each HTML page. The value NO (the default) enables the index and
-the value YES disables it. Since the tabs have the same information as the
-navigation tree you can set this option to NO if you already set
-GENERATE_TREEVIEW to YES.
-' defval='0' depends='GENERATE_HTML'/>
- <option type='bool' id='GENERATE_TREEVIEW' defval='0' docs='
-The GENERATE_TREEVIEW tag is used to specify whether a tree-like index
-structure should be generated to display hierarchical information.
-If the tag value is set to YES, a side panel will be generated
-containing a tree-like index structure (just like the one that
-is generated for HTML Help). For this to work a browser that supports
-JavaScript, DHTML, CSS and frames is required (i.e. any modern browser).
-Windows users are probably better off using the HTML help feature.
-Since the tree basically has the same information as the tab index you
-could consider to set DISABLE_INDEX to NO when enabling this option.
-' depends='GENERATE_HTML'/>
- <option type='int' id='ENUM_VALUES_PER_LINE' docs='
-The ENUM_VALUES_PER_LINE tag can be used to set the number of enum values
-(range [0,1..20]) that doxygen will group on one line in the generated HTML
-documentation. Note that a value of 0 will completely suppress the enum
-values from appearing in the overview section.
-' minval='0' maxval='20' defval='4' depends='GENERATE_HTML'/>
- <option type='bool' id='USE_INLINE_TREES' defval='0' docs='
-By enabling USE_INLINE_TREES, doxygen will generate the Groups, Directories,
-and Class Hierarchy pages using a tree view instead of an ordered list.
-' depends='GENERATE_HTML'/>
- <option type='int' id='TREEVIEW_WIDTH' docs='
-If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be
-used to set the initial width (in pixels) of the frame in which the tree
-is shown.
-' minval='0' maxval='1500' defval='250' depends='GENERATE_HTML'/>
- <option type='bool' id='EXT_LINKS_IN_WINDOW' defval='0' docs='
-When the EXT_LINKS_IN_WINDOW option is set to YES doxygen will open
-links to external symbols imported via tag files in a separate window.
-' depends='GENERATE_HTML'/>
- <option type='int' id='FORMULA_FONTSIZE' docs='
-Use this tag to change the font size of Latex formulas included
-as images in the HTML documentation. The default is 10. Note that
-when you change the font size after a successful doxygen run you need
-to manually remove any form_*.png images from the HTML output directory
-to force them to be regenerated.
-' minval='8' maxval='50' defval='10' depends='GENERATE_HTML'/>
- <option type='bool' id='FORMULA_TRANSPARENT' docs='
-Use the FORMULA_TRANPARENT tag to determine whether or not the images
-generated for formulas are transparent PNGs. Transparent PNGs are
-not supported properly for IE 6.0, but are supported on all modern browsers.
-Note that when changing this option you need to delete any form_*.png files
-in the HTML output before the changes have effect.
-' defval='1' depends='GENERATE_HTML'/>
- <option type='bool' id='USE_MATHJAX' docs='
-Enable the USE_MATHJAX option to render LaTeX formulas using MathJax
-(see http://www.mathjax.org) which uses client side Javascript for the
-rendering instead of using prerendered bitmaps. Use this if you do not
-have LaTeX installed or if you want to formulas look prettier in the HTML
-output. When enabled you may also need to install MathJax separately and
-configure the path to it using the MATHJAX_RELPATH option.
-' defval='0'/>
- <option type='string' id='MATHJAX_RELPATH' docs='
-When MathJax is enabled you need to specify the location relative to the
-HTML output directory using the MATHJAX_RELPATH option. The destination
-directory should contain the MathJax.js script. For instance, if the mathjax
-directory is located at the same level as the HTML output directory, then
-MATHJAX_RELPATH should be ../mathjax. The default value points to
-the MathJax Content Delivery Network so you can quickly see the result without
-installing MathJax. However, it is strongly recommended to install a local
-copy of MathJax from http://www.mathjax.org before deployment.
-' defval='http://cdn.mathjax.org/mathjax/latest'/>
- <option type='list' id='MATHJAX_EXTENSIONS' format='string' docs='
-The MATHJAX_EXTENSIONS tag can be used to specify one or MathJax extension
-names that should be enabled during MathJax rendering.
-' depends='USE_MATHJAX'>
- </option>
- <option type='bool' id='SEARCHENGINE' docs='
-When the SEARCHENGINE tag is enabled doxygen will generate a search box
-for the HTML output. The underlying search engine uses javascript
-and DHTML and should work on any modern browser. Note that when using
-HTML help (GENERATE_HTMLHELP), Qt help (GENERATE_QHP), or docsets
-(GENERATE_DOCSET) there is already a search function so this one should
-typically be disabled. For large projects the javascript based search engine
-can be slow, then enabling SERVER_BASED_SEARCH may provide a better solution.
-' defval='1' depends='GENERATE_HTML'/>
- <option type='bool' id='SERVER_BASED_SEARCH' docs='
-When the SERVER_BASED_SEARCH tag is enabled the search engine will be
-implemented using a PHP enabled web server instead of at the web client
-using Javascript. Doxygen will generate the search PHP script and index
-file to put on the web server. The advantage of the server
-based approach is that it scales better to large projects and allows
-full text search. The disadvantages are that it is more difficult to setup
-and does not have live searching capabilities.
-' defval='0' depends='SEARCHENGINE'/>
- </group>
- <group name='LaTeX' docs='configuration options related to the LaTeX output'>
- <option type='bool' id='GENERATE_LATEX' docs='
-If the GENERATE_LATEX tag is set to YES (the default) Doxygen will
-generate Latex output.
-' defval='1'/>
- <option type='string' id='LATEX_OUTPUT' format='dir' docs='
-The LATEX_OUTPUT tag is used to specify where the LaTeX docs will be put.
-If a relative path is entered the value of OUTPUT_DIRECTORY will be
-put in front of it. If left blank `latex&apos; will be used as the default path.
-' defval='latex' depends='GENERATE_LATEX'/>
- <option type='string' id='LATEX_CMD_NAME' format='file' docs='
-The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be
-invoked. If left blank `latex&apos; will be used as the default command name.
-Note that when enabling USE_PDFLATEX this option is only used for
-generating bitmaps for formulas in the HTML output, but not in the
-Makefile that is written to the output directory.
-' defval='latex' depends='GENERATE_LATEX'/>
- <option type='string' id='MAKEINDEX_CMD_NAME' format='file' docs='
-The MAKEINDEX_CMD_NAME tag can be used to specify the command name to
-generate index for LaTeX. If left blank `makeindex&apos; will be used as the
-default command name.
-' defval='makeindex' depends='GENERATE_LATEX'/>
- <option type='bool' id='COMPACT_LATEX' docs='
-If the COMPACT_LATEX tag is set to YES Doxygen generates more compact
-LaTeX documents. This may be useful for small projects and may help to
-save some trees in general.
-' defval='0' depends='GENERATE_LATEX'/>
- <option type='enum' id='PAPER_TYPE' defval='a4' docs='
-The PAPER_TYPE tag can be used to set the paper type that is used
-by the printer. Possible values are: a4, letter, legal and
-executive. If left blank a4wide will be used.
-' depends='GENERATE_LATEX'>
- <value name='a4'/>
- <value name='a4wide'/>
- <value name='letter'/>
- <value name='legal'/>
- <value name='executive'/>
- </option>
- <option type='list' id='EXTRA_PACKAGES' format='string' docs='
-The EXTRA_PACKAGES tag can be to specify one or more names of LaTeX
-packages that should be included in the LaTeX output.
-' depends='GENERATE_LATEX'>
- </option>
- <option type='string' id='LATEX_HEADER' format='file' docs='
-The LATEX_HEADER tag can be used to specify a personal LaTeX header for
-the generated latex document. The header should contain everything until
-the first chapter. If it is left blank doxygen will generate a
-standard header. Notice: only use this tag if you know what you are doing!
-' defval='' depends='GENERATE_LATEX'/>
- <option type='string' id='LATEX_FOOTER' format='file' docs='
-The LATEX_FOOTER tag can be used to specify a personal LaTeX footer for
-the generated latex document. The footer should contain everything after
-the last chapter. If it is left blank doxygen will generate a
-standard footer. Notice: only use this tag if you know what you are doing!
-' defval='' depends='GENERATE_LATEX'/>
- <option type='bool' id='PDF_HYPERLINKS' docs='
-If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated
-is prepared for conversion to pdf (using ps2pdf). The pdf file will
-contain links (just like the HTML output) instead of page references
-This makes the output suitable for online browsing using a pdf viewer.
-' defval='1' depends='GENERATE_LATEX'/>
- <option type='bool' id='USE_PDFLATEX' docs='
-If the USE_PDFLATEX tag is set to YES, pdflatex will be used instead of
-plain latex in the generated Makefile. Set this option to YES to get a
-higher quality PDF documentation.
-' defval='1' depends='GENERATE_LATEX'/>
- <option type='bool' id='LATEX_BATCHMODE' docs='
-If the LATEX_BATCHMODE tag is set to YES, doxygen will add the \\batchmode.
-command to the generated LaTeX files. This will instruct LaTeX to keep
-running if errors occur, instead of asking the user for help.
-This option is also used when generating formulas in HTML.
-' defval='0' depends='GENERATE_LATEX'/>
- <option type='bool' id='LATEX_HIDE_INDICES' docs='
-If LATEX_HIDE_INDICES is set to YES then doxygen will not
-include the index chapters (such as File Index, Compound Index, etc.)
-in the output.
-' defval='0' depends='GENERATE_LATEX'/>
- <option type='bool' id='LATEX_SOURCE_CODE' docs='
-If LATEX_SOURCE_CODE is set to YES then doxygen will include
-source code with syntax highlighting in the LaTeX output.
-Note that which sources are shown also depends on other settings
-such as SOURCE_BROWSER.
-' defval='0' depends='GENERATE_LATEX'/>
- <option type='string' id='LATEX_BIB_STYLE' format='string' docs='
-The LATEX_BIB_STYLE tag can be used to specify the style to use for the
-bibliography, e.g. plainnat, or ieeetr. The default style is &quot;plain&quot;. See
-http://en.wikipedia.org/wiki/BibTeX for more info.
-' defval='plain'/>
- </group>
- <group name='RTF' docs='configuration options related to the RTF output'>
- <option type='bool' id='GENERATE_RTF' docs='
-If the GENERATE_RTF tag is set to YES Doxygen will generate RTF output
-The RTF output is optimized for Word 97 and may not look very pretty with
-other RTF readers or editors.
-' defval='0'/>
- <option type='string' id='RTF_OUTPUT' format='dir' docs='
-The RTF_OUTPUT tag is used to specify where the RTF docs will be put.
-If a relative path is entered the value of OUTPUT_DIRECTORY will be
-put in front of it. If left blank `rtf&apos; will be used as the default path.
-' defval='rtf' depends='GENERATE_RTF'/>
- <option type='bool' id='COMPACT_RTF' docs='
-If the COMPACT_RTF tag is set to YES Doxygen generates more compact
-RTF documents. This may be useful for small projects and may help to
-save some trees in general.
-' defval='0' depends='GENERATE_RTF'/>
- <option type='bool' id='RTF_HYPERLINKS' docs='
-If the RTF_HYPERLINKS tag is set to YES, the RTF that is generated
-will contain hyperlink fields. The RTF file will
-contain links (just like the HTML output) instead of page references.
-This makes the output suitable for online browsing using WORD or other
-programs which support those fields.
-Note: wordpad (write) and others do not support links.
-' defval='0' depends='GENERATE_RTF'/>
- <option type='string' id='RTF_STYLESHEET_FILE' format='file' docs='
-Load style sheet definitions from file. Syntax is similar to doxygen&apos;s
-config file, i.e. a series of assignments. You only have to provide
-replacements, missing definitions are set to their default value.
-' defval='' depends='GENERATE_RTF'/>
- <option type='string' id='RTF_EXTENSIONS_FILE' format='file' docs='
-Set optional variables used in the generation of an rtf document.
-Syntax is similar to doxygen&apos;s config file.
-' defval='' depends='GENERATE_RTF'/>
- </group>
- <group name='Man' docs='configuration options related to the man page output'>
- <option type='bool' id='GENERATE_MAN' docs='
-If the GENERATE_MAN tag is set to YES (the default) Doxygen will
-generate man pages
-' defval='0'/>
- <option type='string' id='MAN_OUTPUT' format='dir' docs='
-The MAN_OUTPUT tag is used to specify where the man pages will be put.
-If a relative path is entered the value of OUTPUT_DIRECTORY will be
-put in front of it. If left blank `man&apos; will be used as the default path.
-' defval='man' depends='GENERATE_MAN'/>
- <option type='string' id='MAN_EXTENSION' format='string' docs='
-The MAN_EXTENSION tag determines the extension that is added to
-the generated man pages (default is the subroutine&apos;s section .3)
-' defval='.3' depends='GENERATE_MAN'/>
- <option type='bool' id='MAN_LINKS' docs='
-If the MAN_LINKS tag is set to YES and Doxygen generates man output,
-then it will generate one additional man file for each entity
-documented in the real man page(s). These additional files
-only source the real man page, but without them the man command
-would be unable to find the correct page. The default is NO.
-' defval='0' depends='GENERATE_MAN'/>
- </group>
- <group name='XML' docs='configuration options related to the XML output'>
- <option type='bool' id='GENERATE_XML' docs='
-If the GENERATE_XML tag is set to YES Doxygen will
-generate an XML file that captures the structure of
-the code including all documentation.
-' defval='0'/>
- <option type='string' id='XML_OUTPUT' format='dir' docs='
-The XML_OUTPUT tag is used to specify where the XML pages will be put.
-If a relative path is entered the value of OUTPUT_DIRECTORY will be
-put in front of it. If left blank `xml&apos; will be used as the default path.
-' defval='xml' depends='GENERATE_XML'/>
- <option type='string' id='XML_SCHEMA' format='string' docs='
-The XML_SCHEMA tag can be used to specify an XML schema,
-which can be used by a validating XML parser to check the
-syntax of the XML files.
-' defval='' depends='GENERATE_XML'/>
- <option type='string' id='XML_DTD' format='string' docs='
-The XML_DTD tag can be used to specify an XML DTD,
-which can be used by a validating XML parser to check the
-syntax of the XML files.
-' defval='' depends='GENERATE_XML'/>
- <option type='bool' id='XML_PROGRAMLISTING' docs='
-If the XML_PROGRAMLISTING tag is set to YES Doxygen will
-dump the program listings (including syntax highlighting
-and cross-referencing information) to the XML output. Note that
-enabling this will significantly increase the size of the XML output.
-' defval='1' depends='GENERATE_XML'/>
- </group>
- <group name='DEF' docs='configuration options for the AutoGen Definitions output'>
- <option type='bool' id='GENERATE_AUTOGEN_DEF' docs='
-If the GENERATE_AUTOGEN_DEF tag is set to YES Doxygen will
-generate an AutoGen Definitions (see autogen.sf.net) file
-that captures the structure of the code including all
-documentation. Note that this feature is still experimental
-and incomplete at the moment.
-' defval='0'/>
- </group>
- <group name='PerlMod' docs='configuration options related to the Perl module output'>
- <option type='bool' id='GENERATE_PERLMOD' docs='
-If the GENERATE_PERLMOD tag is set to YES Doxygen will
-generate a Perl module file that captures the structure of
-the code including all documentation. Note that this
-feature is still experimental and incomplete at the
-moment.
-' defval='0'/>
- <option type='bool' id='PERLMOD_LATEX' docs='
-If the PERLMOD_LATEX tag is set to YES Doxygen will generate
-the necessary Makefile rules, Perl scripts and LaTeX code to be able
-to generate PDF and DVI output from the Perl module output.
-' defval='0' depends='GENERATE_PERLMOD'/>
- <option type='bool' id='PERLMOD_PRETTY' docs='
-If the PERLMOD_PRETTY tag is set to YES the Perl module output will be
-nicely formatted so it can be parsed by a human reader. This is useful
-if you want to understand what is going on. On the other hand, if this
-tag is set to NO the size of the Perl module output will be much smaller
-and Perl will parse it just the same.
-' defval='1' depends='GENERATE_PERLMOD'/>
- <option type='string' id='PERLMOD_MAKEVAR_PREFIX' format='string' docs='
-The names of the make variables in the generated doxyrules.make file
-are prefixed with the string contained in PERLMOD_MAKEVAR_PREFIX.
-This is useful so different doxyrules.make files included by the same
-Makefile don&apos;t overwrite each other&apos;s variables.' defval='' depends='GENERATE_PERLMOD'/>
- </group>
- <group name='Preprocessor' docs='Configuration options related to the preprocessor'>
- <option type='bool' id='ENABLE_PREPROCESSING' docs='
-If the ENABLE_PREPROCESSING tag is set to YES (the default) Doxygen will
-evaluate all C-preprocessor directives found in the sources and include
-files.
-' defval='1'/>
- <option type='bool' id='MACRO_EXPANSION' docs='
-If the MACRO_EXPANSION tag is set to YES Doxygen will expand all macro
-names in the source code. If set to NO (the default) only conditional
-compilation will be performed. Macro expansion can be done in a controlled
-way by setting EXPAND_ONLY_PREDEF to YES.
-' defval='0' depends='ENABLE_PREPROCESSING'/>
- <option type='bool' id='EXPAND_ONLY_PREDEF' docs='
-If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES
-then the macro expansion is limited to the macros specified with the
-PREDEFINED and EXPAND_AS_DEFINED tags.
-' defval='0' depends='ENABLE_PREPROCESSING'/>
- <option type='bool' id='SEARCH_INCLUDES' docs='
-If the SEARCH_INCLUDES tag is set to YES (the default) the includes files
-pointed to by INCLUDE_PATH will be searched when a #include is found.
-' defval='1' depends='ENABLE_PREPROCESSING'/>
- <option type='list' id='INCLUDE_PATH' format='dir' docs='
-The INCLUDE_PATH tag can be used to specify one or more directories that
-contain include files that are not input files but should be processed by
-the preprocessor.
-' depends='ENABLE_PREPROCESSING'>
- </option>
- <option type='list' id='INCLUDE_FILE_PATTERNS' format='string' docs='
-You can use the INCLUDE_FILE_PATTERNS tag to specify one or more wildcard
-patterns (like *.h and *.hpp) to filter out the header-files in the
-directories. If left blank, the patterns specified with FILE_PATTERNS will
-be used.
-' depends='ENABLE_PREPROCESSING'>
- </option>
- <option type='list' id='PREDEFINED' format='string' docs='
-The PREDEFINED tag can be used to specify one or more macro names that
-are defined before the preprocessor is started (similar to the -D option of
-gcc). The argument of the tag is a list of macros of the form: name
-or name=definition (no spaces). If the definition and the = are
-omitted =1 is assumed. To prevent a macro definition from being
-undefined via #undef or recursively expanded use the := operator
-instead of the = operator.
-' depends='ENABLE_PREPROCESSING'>
- </option>
- <option type='list' id='EXPAND_AS_DEFINED' format='string' docs='
-If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then
-this tag can be used to specify a list of macro names that should be expanded.
-The macro definition that is found in the sources will be used.
-Use the PREDEFINED tag if you want to use a different macro definition that
-overrules the definition found in the source code.
-' depends='ENABLE_PREPROCESSING'>
- </option>
- <option type='bool' id='SKIP_FUNCTION_MACROS' docs='
-If the SKIP_FUNCTION_MACROS tag is set to YES (the default) then
-doxygen&apos;s preprocessor will remove all references to function-like macros
-that are alone on a line, have an all uppercase name, and do not end with a
-semicolon, because these will confuse the parser if not removed.
-' defval='1' depends='ENABLE_PREPROCESSING'/>
- </group>
- <group name='External' docs='Configuration::additions related to external references'>
- <option type='list' id='TAGFILES' format='file' docs='
-The TAGFILES option can be used to specify one or more tagfiles. For each
-tag file the location of the external documentation should be added. The
-format of a tag file without this location is as follows:
- TAGFILES = file1 file2 ...
-Adding location for the tag files is done as follows:
- TAGFILES = file1=loc1 &quot;file2 = loc2&quot; ...
-where &quot;loc1&quot; and &quot;loc2&quot; can be relative or absolute paths
-or URLs. Note that each tag file must have a unique name (where the name does
-NOT include the path). If a tag file is not located in the directory in which
-doxygen is run, you must also specify the path to the tagfile here.
-'>
- </option>
- <option type='string' id='GENERATE_TAGFILE' format='file' docs='
-When a file name is specified after GENERATE_TAGFILE, doxygen will create
-a tag file that is based on the input files it reads.
-' defval=''/>
- <option type='bool' id='ALLEXTERNALS' docs='
-If the ALLEXTERNALS tag is set to YES all external classes will be listed
-in the class index. If set to NO only the inherited external classes
-will be listed.
-' defval='0'/>
- <option type='bool' id='EXTERNAL_GROUPS' docs='
-If the EXTERNAL_GROUPS tag is set to YES all external groups will be listed
-in the modules index. If set to NO, only the current project&apos;s groups will
-be listed.
-' defval='1'/>
- <option type='string' id='PERL_PATH' format='dir' docs='
-The PERL_PATH should be the absolute path and name of the perl script
-interpreter (i.e. the result of `which perl&apos;).
-' defval='/usr/bin/perl'/>
- </group>
- <group name='Dot' docs='Configuration options related to the dot tool'>
- <option type='bool' id='CLASS_DIAGRAMS' docs='
-If the CLASS_DIAGRAMS tag is set to YES (the default) Doxygen will
-generate a inheritance diagram (in HTML, RTF and LaTeX) for classes with base
-or super classes. Setting the tag to NO turns the diagrams off. Note that
-this option also works with HAVE_DOT disabled, but it is recommended to
-install and use dot, since it yields more powerful graphs.
-' defval='1'/>
- <option type='string' id='MSCGEN_PATH' format='string' docs='
-You can define message sequence charts within doxygen comments using the \msc
-command. Doxygen will then run the mscgen tool (see
-http://www.mcternan.me.uk/mscgen/) to produce the chart and insert it in the
-documentation. The MSCGEN_PATH tag allows you to specify the directory where
-the mscgen tool resides. If left empty the tool is assumed to be found in the
-default search path.
-' defval=''/>
- <option type='bool' id='HIDE_UNDOC_RELATIONS' docs='
-If set to YES, the inheritance and collaboration graphs will hide
-inheritance and usage relations if the target is undocumented
-or is not a class.
-' defval='1'/>
- <option type='bool' id='HAVE_DOT' docs='
-If you set the HAVE_DOT tag to YES then doxygen will assume the dot tool is
-available from the path. This tool is part of Graphviz, a graph visualization
-toolkit from AT&amp;T and Lucent Bell Labs. The other options in this section
-have no effect if this option is set to NO (the default)
-' defval='0'/>
- <option type='int' id='DOT_NUM_THREADS' docs='
-The DOT_NUM_THREADS specifies the number of dot invocations doxygen is
-allowed to run in parallel. When set to 0 (the default) doxygen will
-base this on the number of processors available in the system. You can set it
-explicitly to a value larger than 0 to get control over the balance
-between CPU load and processing speed.
-' defval='0' minval='0' maxval='32'/>
- <option type='string' id='DOT_FONTNAME' format='string' docs='
-By default doxygen will use the Helvetica font for all dot files that
-doxygen generates. When you want a differently looking font you can specify
-the font name using DOT_FONTNAME. You need to make sure dot is able to find
-the font, which can be done by putting it in a standard location or by setting
-the DOTFONTPATH environment variable or by setting DOT_FONTPATH to the
-directory containing the font.
-' defval='Helvetica' depends='HAVE_DOT'/>
- <option type='int' id='DOT_FONTSIZE' docs='
-The DOT_FONTSIZE tag can be used to set the size of the font of dot graphs.
-The default size is 10pt.
-' minval='4' maxval='24' defval='10' depends='HAVE_DOT'/>
- <option type='string' id='DOT_FONTPATH' format='string' docs='
-By default doxygen will tell dot to use the Helvetica font.
-If you specify a different font using DOT_FONTNAME you can use DOT_FONTPATH to
-set the path where dot can find it.
-' defval='' depends='HAVE_DOT'/>
- <option type='bool' id='CLASS_GRAPH' docs='
-If the CLASS_GRAPH and HAVE_DOT tags are set to YES then doxygen
-will generate a graph for each documented class showing the direct and
-indirect inheritance relations. Setting this tag to YES will force the
-CLASS_DIAGRAMS tag to NO.
-' defval='1' depends='HAVE_DOT'/>
- <option type='bool' id='COLLABORATION_GRAPH' docs='
-If the COLLABORATION_GRAPH and HAVE_DOT tags are set to YES then doxygen
-will generate a graph for each documented class showing the direct and
-indirect implementation dependencies (inheritance, containment, and
-class references variables) of the class with other documented classes.
-' defval='1' depends='HAVE_DOT'/>
- <option type='bool' id='GROUP_GRAPHS' docs='
-If the GROUP_GRAPHS and HAVE_DOT tags are set to YES then doxygen
-will generate a graph for groups, showing the direct groups dependencies
-' defval='1' depends='HAVE_DOT'/>
- <option type='bool' id='UML_LOOK' docs='
-If the UML_LOOK tag is set to YES doxygen will generate inheritance and
-collaboration diagrams in a style similar to the OMG&apos;s Unified Modeling
-Language.
-' defval='0' depends='HAVE_DOT'/>
- <option type='int' id='UML_LIMIT_NUM_FIELDS' docs='
-If the UML_LOOK tag is enabled, the fields and methods are shown inside
-the class node. If there are many fields or methods and many nodes the
-graph may become too big to be useful. The UML_LIMIT_NUM_FIELDS
-threshold limits the number of items for each type to make the size more
-managable. Set this to 0 for no limit. Note that the threshold may be
-exceeded by 50% before the limit is enforced.
-' defval='10' minval='0' maxval='100' depends='HAVE_DOT'/>
- <option type='bool' id='TEMPLATE_RELATIONS' docs='
-If set to YES, the inheritance and collaboration graphs will show the
-relations between templates and their instances.
-' defval='0' depends='HAVE_DOT'/>
- <option type='bool' id='INCLUDE_GRAPH' docs='
-If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDE_GRAPH, and HAVE_DOT
-tags are set to YES then doxygen will generate a graph for each documented
-file showing the direct and indirect include dependencies of the file with
-other documented files.
-' defval='1' depends='HAVE_DOT'/>
- <option type='bool' id='INCLUDED_BY_GRAPH' docs='
-If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDED_BY_GRAPH, and
-HAVE_DOT tags are set to YES then doxygen will generate a graph for each
-documented header file showing the documented files that directly or
-indirectly include this file.
-' defval='1' depends='HAVE_DOT'/>
- <option type='bool' id='CALL_GRAPH' docs='
-If the CALL_GRAPH and HAVE_DOT options are set to YES then
-doxygen will generate a call dependency graph for every global function
-or class method. Note that enabling this option will significantly increase
-the time of a run. So in most cases it will be better to enable call graphs
-for selected functions only using the \callgraph command.
-' defval='0' depends='HAVE_DOT'/>
- <option type='bool' id='CALLER_GRAPH' docs='
-If the CALLER_GRAPH and HAVE_DOT tags are set to YES then
-doxygen will generate a caller dependency graph for every global function
-or class method. Note that enabling this option will significantly increase
-the time of a run. So in most cases it will be better to enable caller
-graphs for selected functions only using the \callergraph command.
-' defval='0' depends='HAVE_DOT'/>
- <option type='bool' id='GRAPHICAL_HIERARCHY' docs='
-If the GRAPHICAL_HIERARCHY and HAVE_DOT tags are set to YES then doxygen
-will generate a graphical hierarchy of all classes instead of a textual one.
-' defval='1' depends='HAVE_DOT'/>
- <option type='bool' id='DIRECTORY_GRAPH' docs='
-If the DIRECTORY_GRAPH, SHOW_DIRECTORIES and HAVE_DOT tags are set to YES
-then doxygen will show the dependencies a directory has on other directories
-in a graphical way. The dependency relations are determined by the #include
-relations between the files in the directories.
-' defval='1' depends='HAVE_DOT'/>
- <option type='enum' id='DOT_IMAGE_FORMAT' defval='png' docs='
-The DOT_IMAGE_FORMAT tag can be used to set the image format of the images
-generated by dot. Possible values are svg, png, jpg, or gif.
-If left blank png will be used. If you choose svg you need to set
-HTML_FILE_EXTENSION to xhtml in order to make the SVG files
-visible in IE 9+ (other browsers do not have this requirement).
-' depends='HAVE_DOT'>
- <value name='png'/>
- <value name='jpg'/>
- <value name='gif'/>
- <value name='svg'/>
- </option>
- <option type='bool' id='INTERACTIVE_SVG' docs='
-If DOT_IMAGE_FORMAT is set to svg, then this option can be set to YES to
-enable generation of interactive SVG images that allow zooming and panning.
-Note that this requires a modern browser other than Internet Explorer.
-Tested and working are Firefox, Chrome, Safari, and Opera. For IE 9+ you
-need to set HTML_FILE_EXTENSION to xhtml in order to make the SVG files
-visible. Older versions of IE do not have SVG support.
-' defval='0' depends='HAVE_DOT'/>
- <option type='string' id='DOT_PATH' format='dir' docs='
-The tag DOT_PATH can be used to specify the path where the dot tool can be
-found. If left blank, it is assumed the dot tool can be found in the path.
-' defval='' depends='HAVE_DOT'/>
- <option type='list' id='DOTFILE_DIRS' format='dir' docs='
-The DOTFILE_DIRS tag can be used to specify one or more directories that
-contain dot files that are included in the documentation (see the
-\dotfile command).
-' depends='HAVE_DOT'>
- </option>
- <option type='list' id='MSCFILE_DIRS' format='dir' docs='
-The MSCFILE_DIRS tag can be used to specify one or more directories that
-contain msc files that are included in the documentation (see the
-\mscfile command).
-' >
- </option>
- <option type='int' id='DOT_GRAPH_MAX_NODES' docs='
-The DOT_GRAPH_MAX_NODES tag can be used to set the maximum number of
-nodes that will be shown in the graph. If the number of nodes in a graph
-becomes larger than this value, doxygen will truncate the graph, which is
-visualized by representing a node as a red box. Note that doxygen if the
-number of direct children of the root node in a graph is already larger than
-DOT_GRAPH_MAX_NODES then the graph will not be shown at all. Also note
-that the size of a graph can be further restricted by MAX_DOT_GRAPH_DEPTH.
-' minval='0' maxval='10000' defval='50' depends='HAVE_DOT'/>
- <option type='int' id='MAX_DOT_GRAPH_DEPTH' docs='
-The MAX_DOT_GRAPH_DEPTH tag can be used to set the maximum depth of the
-graphs generated by dot. A depth value of 3 means that only nodes reachable
-from the root by following a path via at most 3 edges will be shown. Nodes
-that lay further from the root node will be omitted. Note that setting this
-option to 1 or 2 may greatly reduce the computation time needed for large
-code bases. Also note that the size of a graph can be further restricted by
-DOT_GRAPH_MAX_NODES. Using a depth of 0 means no depth restriction.
-' minval='0' maxval='1000' defval='0' depends='HAVE_DOT'/>
- <option type='bool' id='DOT_TRANSPARENT' docs='
-Set the DOT_TRANSPARENT tag to YES to generate images with a transparent
-background. This is disabled by default, because dot on Windows does not
-seem to support this out of the box. Warning: Depending on the platform used,
-enabling this option may lead to badly anti-aliased labels on the edges of
-a graph (i.e. they become hard to read).
-' defval='0' depends='HAVE_DOT'/>
- <option type='bool' id='DOT_MULTI_TARGETS' docs='
-Set the DOT_MULTI_TARGETS tag to YES allow dot to generate multiple output
-files in one run (i.e. multiple -o and -T options on the command line). This
-makes dot run faster, but since only newer versions of dot (&gt;1.8.10)
-support this, this feature is disabled by default.
-' defval='0' depends='HAVE_DOT'/>
- <option type='bool' id='GENERATE_LEGEND' docs='
-If the GENERATE_LEGEND tag is set to YES (the default) Doxygen will
-generate a legend page explaining the meaning of the various boxes and
-arrows in the dot generated graphs.
-' defval='1' depends='HAVE_DOT'/>
- <option type='bool' id='DOT_CLEANUP' docs='
-If the DOT_CLEANUP tag is set to YES (the default) Doxygen will
-remove the intermediate dot files that are used to generate
-the various graphs.
-' defval='1' depends='HAVE_DOT'/>
- <option type='obsolete' id='USE_WINDOWS_ENCODING'/>
- <option type='obsolete' id='DETAILS_AT_TOP'/>
- <option type='obsolete' id='QTHELP_FILE'/>
- <option type='obsolete' id='QTHELP_CONFIG'/>
- <option type='obsolete' id='DOXYGEN2QTHELP_LOC'/>
- <option type='obsolete' id='MAX_DOT_GRAPH_WIDTH'/>
- <option type='obsolete' id='MAX_DOT_GRAPH_HEIGHT'/>
- <option type='obsolete' id='CGI_NAME'/>
- <option type='obsolete' id='CGI_URL'/>
- <option type='obsolete' id='DOC_URL'/>
- <option type='obsolete' id='DOC_ABSPATH'/>
- <option type='obsolete' id='BIN_ABSPATH'/>
- <option type='obsolete' id='EXT_DOC_PATHS'/>
- </group>
-</doxygenconfig>
diff --git a/trunk/src/configgen.py b/trunk/src/configgen.py
deleted file mode 100755
index 2b06d9e..0000000
--- a/trunk/src/configgen.py
+++ /dev/null
@@ -1,137 +0,0 @@
-# python script to generate configoptions.cpp from config.xml
-#
-# Copyright (C) 1997-2012 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.
-#
-import xml.dom.minidom
-from xml.dom import minidom, Node
-
-def addValues(var,node):
- for n in node.childNodes:
- if n.nodeType == Node.ELEMENT_NODE:
- name = n.getAttribute('name');
- print " %s->addValue(\"%s\");" % (var,name)
-
-def parseOption(node):
- name = node.getAttribute('id')
- type = node.getAttribute('type')
- format = node.getAttribute('format')
- doc = node.getAttribute('docs')
- defval = node.getAttribute('defval')
- adefval = node.getAttribute('altdefval')
- depends = node.getAttribute('depends')
- # replace \ by \\, replace " by \", and ' ' by a newline with end string and start string at next line
- docC = doc.strip().replace('\\','\\\\').replace('"','\\"').replace(' ','\\n"\n "')
- print " //----"
- if type=='bool':
- if len(adefval)>0:
- enabled = adefval
- else:
- enabled = "TRUE" if defval=='1' else "FALSE"
- print " cb = cfg->addBool("
- print " \"%s\"," % (name)
- print " \"%s\"," % (docC)
- print " %s" % (enabled)
- print " );"
- if depends!='':
- print " cb->addDependency(\"%s\");" % (depends)
- elif type=='string':
- print " cs = cfg->addString("
- print " \"%s\"," % (name)
- print " \"%s\"" % (docC)
- print " );"
- if defval!='':
- print " cs->setDefaultValue(\"%s\");" % (defval)
- if format=='file':
- print " cs->setWidgetType(ConfigString::File);"
- elif format=='dir':
- print " cs->setWidgetType(ConfigString::Dir);"
- if depends!='':
- print " cs->addDependency(\"%s\");" % (depends)
- elif type=='enum':
- print " ce = cfg->addEnum("
- print " \"%s\"," % (name)
- print " \"%s\"," % (docC)
- print " \"%s\"" % (defval)
- print " );"
- addValues("ce",node)
- if depends!='':
- print " ce->addDependency(\"%s\");" % (depends)
- elif type=='int':
- minval = node.getAttribute('minval')
- maxval = node.getAttribute('maxval')
- print " ci = cfg->addInt("
- print " \"%s\"," % (name)
- print " \"%s\"," % (docC)
- print " %s,%s,%s" % (minval,maxval,defval)
- print " );"
- if depends!='':
- print " ci->addDependency(\"%s\");" % (depends)
- elif type=='list':
- print " cl = cfg->addList("
- print " \"%s\"," % (name)
- print " \"%s\"" % (docC)
- print " );"
- addValues("cl",node)
- if depends!='':
- print " cl->addDependency(\"%s\");" % (depends)
- if format=='file':
- print " cl->setWidgetType(ConfigList::File);"
- elif format=='dir':
- print " cl->setWidgetType(ConfigList::Dir);"
- elif format=='filedir':
- print " cl->setWidgetType(ConfigList::FileAndDir);"
- elif type=='obsolete':
- print " cfg->addObsolete(\"%s\");" % (name)
-
-
-
-
-def parseGroups(node):
- name = node.getAttribute('name')
- doc = node.getAttribute('docs')
- print " //---------------------------------------------------------------------------";
- print " cfg->addInfo(\"%s\",\"%s\");" % (name,doc)
- print " //---------------------------------------------------------------------------";
- print
- for n in node.childNodes:
- if n.nodeType == Node.ELEMENT_NODE:
- parseOption(n)
-
-
-def main():
- doc = xml.dom.minidom.parse("config.xml")
- elem = doc.documentElement
- print "/* WARNING: This file is generated!"
- print " * Do not edit this file, but edit config.xml instead and run"
- print " * python configgen.py to regenerate this file!"
- print " */"
- print ""
- print "#include \"configoptions.h\""
- print "#include \"config.h\""
- print "#include \"portable.h\""
- print ""
- print "void addConfigOptions(Config *cfg)"
- print "{"
- print " ConfigString *cs;"
- print " ConfigEnum *ce;"
- print " ConfigList *cl;"
- print " ConfigInt *ci;"
- print " ConfigBool *cb;"
- print ""
- for n in elem.childNodes:
- if n.nodeType == Node.ELEMENT_NODE:
- parseGroups(n)
- print "}"
-
-if __name__ == '__main__':
- main()
-
diff --git a/trunk/src/configoptions.cpp b/trunk/src/configoptions.cpp
deleted file mode 100644
index 3573248..0000000
--- a/trunk/src/configoptions.cpp
+++ /dev/null
@@ -1,2494 +0,0 @@
-/* WARNING: This file is generated!
- * Do not edit this file, but edit config.xml instead and run
- * python configgen.py to regenerate this file!
- */
-
-#include "configoptions.h"
-#include "config.h"
-#include "portable.h"
-
-void addConfigOptions(Config *cfg)
-{
- ConfigString *cs;
- ConfigEnum *ce;
- ConfigList *cl;
- ConfigInt *ci;
- ConfigBool *cb;
-
- //---------------------------------------------------------------------------
- cfg->addInfo("Project","Project related configuration options");
- //---------------------------------------------------------------------------
-
- //----
- cs = cfg->addString(
- "DOXYFILE_ENCODING",
- "This tag specifies the encoding used for all characters in the config file\n"
- "that follow. The default is UTF-8 which is also the encoding used for all\n"
- "text before the first occurrence of this tag. Doxygen uses libiconv (or the\n"
- "iconv built into libc) for the transcoding. See\n"
- "http://www.gnu.org/software/libiconv for the list of possible encodings."
- );
- cs->setDefaultValue("UTF-8");
- //----
- cs = cfg->addString(
- "PROJECT_NAME",
- "The PROJECT_NAME tag is a single word (or sequence of words) that should\n"
- "identify the project. Note that if you do not use Doxywizard you need\n"
- "to put quotes around the project name if it contains spaces."
- );
- cs->setDefaultValue("My Project");
- //----
- cs = cfg->addString(
- "PROJECT_NUMBER",
- "The PROJECT_NUMBER tag can be used to enter a project or revision number.\n"
- "This could be handy for archiving the generated documentation or\n"
- "if some version control system is used."
- );
- //----
- cs = cfg->addString(
- "PROJECT_BRIEF",
- "Using the PROJECT_BRIEF tag one can provide an optional one line description\n"
- "for a project that appears at the top of each page and should give viewer\n"
- "a quick idea about the purpose of the project. Keep the description short."
- );
- //----
- cs = cfg->addString(
- "PROJECT_LOGO",
- "With the PROJECT_LOGO tag one can specify an logo or icon that is\n"
- "included in the documentation. The maximum height of the logo should not\n"
- "exceed 55 pixels and the maximum width should not exceed 200 pixels.\n"
- "Doxygen will copy the logo to the output directory."
- );
- cs->setWidgetType(ConfigString::File);
- //----
- cs = cfg->addString(
- "OUTPUT_DIRECTORY",
- "The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute)\n"
- "base path where the generated documentation will be put.\n"
- "If a relative path is entered, it will be relative to the location\n"
- "where doxygen was started. If left blank the current directory will be used."
- );
- cs->setWidgetType(ConfigString::Dir);
- //----
- cb = cfg->addBool(
- "CREATE_SUBDIRS",
- "If the CREATE_SUBDIRS tag is set to YES, then doxygen will create\n"
- "4096 sub-directories (in 2 levels) under the output directory of each output\n"
- "format and will distribute the generated files over these directories.\n"
- "Enabling this option can be useful when feeding doxygen a huge amount of\n"
- "source files, where putting all generated files in the same directory would\n"
- "otherwise cause performance problems for the file system.",
- FALSE
- );
- //----
- ce = cfg->addEnum(
- "OUTPUT_LANGUAGE",
- "The OUTPUT_LANGUAGE tag is used to specify the language in which all\n"
- "documentation generated by doxygen is written. Doxygen will use this\n"
- "information to generate all constant output in the proper language.\n"
- "The default language is English, other supported languages are:\n"
- "Afrikaans, Arabic, Brazilian, Catalan, Chinese, Chinese-Traditional,\n"
- "Croatian, Czech, Danish, Dutch, Esperanto, Farsi, Finnish, French, German,\n"
- "Greek, Hungarian, Italian, Japanese, Japanese-en (Japanese with English\n"
- "messages), Korean, Korean-en, Lithuanian, Norwegian, Macedonian, Persian,\n"
- "Polish, Portuguese, Romanian, Russian, Serbian, Serbian-Cyrillic, Slovak,\n"
- "Slovene, Spanish, Swedish, Ukrainian, and Vietnamese.",
- "English"
- );
- ce->addValue("Afrikaans");
- ce->addValue("Arabic");
- ce->addValue("Brazilian");
- ce->addValue("Catalan");
- ce->addValue("Chinese");
- ce->addValue("Chinese-Traditional");
- ce->addValue("Croatian");
- ce->addValue("Czech");
- ce->addValue("Danish");
- ce->addValue("Dutch");
- ce->addValue("English");
- ce->addValue("Esperanto");
- ce->addValue("Farsi");
- ce->addValue("Finnish");
- ce->addValue("French");
- ce->addValue("German");
- ce->addValue("Greek");
- ce->addValue("Hungarian");
- ce->addValue("Italian");
- ce->addValue("Japanese");
- ce->addValue("Japanese-en");
- ce->addValue("Korean");
- ce->addValue("Korean-en");
- ce->addValue("Norwegian");
- ce->addValue("Macedonian");
- ce->addValue("Persian");
- ce->addValue("Polish");
- ce->addValue("Portuguese");
- ce->addValue("Romanian");
- ce->addValue("Russian");
- ce->addValue("Serbian");
- ce->addValue("Slovak");
- ce->addValue("Slovene");
- ce->addValue("Spanish");
- ce->addValue("Swedish");
- ce->addValue("Turkish");
- ce->addValue("Ukrainian");
- ce->addValue("Vietnamese");
- //----
- cb = cfg->addBool(
- "BRIEF_MEMBER_DESC",
- "If the BRIEF_MEMBER_DESC tag is set to YES (the default) Doxygen will\n"
- "include brief member descriptions after the members that are listed in\n"
- "the file and class documentation (similar to JavaDoc).\n"
- "Set to NO to disable this.",
- TRUE
- );
- //----
- cb = cfg->addBool(
- "REPEAT_BRIEF",
- "If the REPEAT_BRIEF tag is set to YES (the default) Doxygen will prepend\n"
- "the brief description of a member or function before the detailed description.\n"
- "Note: if both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the\n"
- "brief descriptions will be completely suppressed.",
- TRUE
- );
- //----
- cl = cfg->addList(
- "ABBREVIATE_BRIEF",
- "This tag implements a quasi-intelligent brief description abbreviator\n"
- "that is used to form the text in various listings. Each string\n"
- "in this list, if found as the leading text of the brief description, will be\n"
- "stripped from the text and the result after processing the whole list, is\n"
- "used as the annotated text. Otherwise, the brief description is used as-is.\n"
- "If left blank, the following values are used (\"$name\" is automatically\n"
- "replaced with the name of the entity): \"The $name class\" \"The $name widget\"\n"
- "\"The $name file\" \"is\" \"provides\" \"specifies\" \"contains\"\n"
- "\"represents\" \"a\" \"an\" \"the\""
- );
- cl->addValue("The $name class");
- cl->addValue("The $name widget");
- cl->addValue("The $name file");
- cl->addValue("is");
- cl->addValue("provides");
- cl->addValue("specifies");
- cl->addValue("contains");
- cl->addValue("represents");
- cl->addValue("a");
- cl->addValue("an");
- cl->addValue("the");
- //----
- cb = cfg->addBool(
- "ALWAYS_DETAILED_SEC",
- "If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then\n"
- "Doxygen will generate a detailed section even if there is only a brief\n"
- "description.",
- FALSE
- );
- //----
- cb = cfg->addBool(
- "INLINE_INHERITED_MEMB",
- "If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all\n"
- "inherited members of a class in the documentation of that class as if those\n"
- "members were ordinary class members. Constructors, destructors and assignment\n"
- "operators of the base classes will not be shown.",
- FALSE
- );
- //----
- cb = cfg->addBool(
- "FULL_PATH_NAMES",
- "If the FULL_PATH_NAMES tag is set to YES then Doxygen will prepend the full\n"
- "path before files name in the file list and in the header files. If set\n"
- "to NO the shortest path that makes the file name unique will be used.",
- TRUE
- );
- //----
- cl = cfg->addList(
- "STRIP_FROM_PATH",
- "If the FULL_PATH_NAMES tag is set to YES then the STRIP_FROM_PATH tag\n"
- "can be used to strip a user-defined part of the path. Stripping is\n"
- "only done if one of the specified strings matches the left-hand part of\n"
- "the path. The tag can be used to show relative paths in the file list.\n"
- "If left blank the directory from which doxygen is run is used as the\n"
- "path to strip."
- );
- cl->addValue("");
- cl->addDependency("FULL_PATH_NAMES");
- //----
- cl = cfg->addList(
- "STRIP_FROM_INC_PATH",
- "The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of\n"
- "the path mentioned in the documentation of a class, which tells\n"
- "the reader which header file to include in order to use a class.\n"
- "If left blank only the name of the header file containing the class\n"
- "definition is used. Otherwise one should specify the include paths that\n"
- "are normally passed to the compiler using the -I flag."
- );
- //----
- cb = cfg->addBool(
- "SHORT_NAMES",
- "If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter\n"
- "(but less readable) file names. This can be useful if your file system\n"
- "doesn't support long names like on DOS, Mac, or CD-ROM.",
- FALSE
- );
- //----
- cb = cfg->addBool(
- "JAVADOC_AUTOBRIEF",
- "If the JAVADOC_AUTOBRIEF tag is set to YES then Doxygen\n"
- "will interpret the first line (until the first dot) of a JavaDoc-style\n"
- "comment as the brief description. If set to NO, the JavaDoc\n"
- "comments will behave just like regular Qt-style comments\n"
- "(thus requiring an explicit @brief command for a brief description.)",
- FALSE
- );
- //----
- cb = cfg->addBool(
- "QT_AUTOBRIEF",
- "If the QT_AUTOBRIEF tag is set to YES then Doxygen will\n"
- "interpret the first line (until the first dot) of a Qt-style\n"
- "comment as the brief description. If set to NO, the comments\n"
- "will behave just like regular Qt-style comments (thus requiring\n"
- "an explicit \\brief command for a brief description.)",
- FALSE
- );
- //----
- cb = cfg->addBool(
- "MULTILINE_CPP_IS_BRIEF",
- "The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make Doxygen\n"
- "treat a multi-line C++ special comment block (i.e. a block of //! or ///\n"
- "comments) as a brief description. This used to be the default behaviour.\n"
- "The new default is to treat a multi-line C++ comment block as a detailed\n"
- "description. Set this tag to YES if you prefer the old behaviour instead.",
- FALSE
- );
- //----
- cb = cfg->addBool(
- "INHERIT_DOCS",
- "If the INHERIT_DOCS tag is set to YES (the default) then an undocumented\n"
- "member inherits the documentation from any documented member that it\n"
- "re-implements.",
- TRUE
- );
- //----
- cb = cfg->addBool(
- "SEPARATE_MEMBER_PAGES",
- "If the SEPARATE_MEMBER_PAGES tag is set to YES, then doxygen will produce\n"
- "a new page for each member. If set to NO, the documentation of a member will\n"
- "be part of the file/class/namespace that contains it.",
- FALSE
- );
- //----
- ci = cfg->addInt(
- "TAB_SIZE",
- "The TAB_SIZE tag can be used to set the number of spaces in a tab.\n"
- "Doxygen uses this value to replace tabs by spaces in code fragments.",
- 1,16,8
- );
- //----
- cl = cfg->addList(
- "ALIASES",
- "This tag can be used to specify a number of aliases that acts\n"
- "as commands in the documentation. An alias has the form \"name=value\".\n"
- "For example adding \"sideeffect=\\par Side Effects:\\n\" will allow you to\n"
- "put the command \\sideeffect (or @sideeffect) in the documentation, which\n"
- "will result in a user-defined paragraph with heading \"Side Effects:\".\n"
- "You can put \\n's in the value part of an alias to insert newlines."
- );
- //----
- cl = cfg->addList(
- "TCL_SUBST",
- "This tag can be used to specify a number of word-keyword mappings (TCL only).\n"
- "A mapping has the form \"name=value\". For example adding\n"
- "\"class=itcl::class\" will allow you to use the command class in the\n"
- "itcl::class meaning."
- );
- //----
- cb = cfg->addBool(
- "OPTIMIZE_OUTPUT_FOR_C",
- "Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C\n"
- "sources only. Doxygen will then generate output that is more tailored for C.\n"
- "For instance, some of the names that are used will be different. The list\n"
- "of all members will be omitted, etc.",
- FALSE
- );
- //----
- cb = cfg->addBool(
- "OPTIMIZE_OUTPUT_JAVA",
- "Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java\n"
- "sources only. Doxygen will then generate output that is more tailored for\n"
- "Java. For instance, namespaces will be presented as packages, qualified\n"
- "scopes will look different, etc.",
- FALSE
- );
- //----
- cb = cfg->addBool(
- "OPTIMIZE_FOR_FORTRAN",
- "Set the OPTIMIZE_FOR_FORTRAN tag to YES if your project consists of Fortran\n"
- "sources only. Doxygen will then generate output that is more tailored for\n"
- "Fortran.",
- FALSE
- );
- //----
- cb = cfg->addBool(
- "OPTIMIZE_OUTPUT_VHDL",
- "Set the OPTIMIZE_OUTPUT_VHDL tag to YES if your project consists of VHDL\n"
- "sources. Doxygen will then generate output that is tailored for\n"
- "VHDL.",
- FALSE
- );
- //----
- cl = cfg->addList(
- "EXTENSION_MAPPING",
- "Doxygen selects the parser to use depending on the extension of the files it\n"
- "parses. With this tag you can assign which parser to use for a given extension.\n"
- "Doxygen has a built-in mapping, but you can override or extend it using this\n"
- "tag. The format is ext=language, where ext is a file extension, and language\n"
- "is one of the parsers supported by doxygen: IDL, Java, Javascript, CSharp, C,\n"
- "C++, D, PHP, Objective-C, Python, Fortran, VHDL, C, C++. For instance to make\n"
- "doxygen treat .inc files as Fortran files (default is PHP), and .f files as C\n"
- "(default is Fortran), use: inc=Fortran f=C. Note that for custom extensions\n"
- "you also need to set FILE_PATTERNS otherwise the files are not read by doxygen."
- );
- //----
- cb = cfg->addBool(
- "MARKDOWN_SUPPORT",
- "If MARKDOWN_SUPPORT is enabled (the default) then doxygen pre-processes all\n"
- "comments according to the Markdown format, which allows for more readable\n"
- "documentation. See http://daringfireball.net/projects/markdown/ for details.\n"
- "The output of markdown processing is further processed by doxygen, so you\n"
- "can mix doxygen, HTML, and XML commands with Markdown formatting.\n"
- "Disable only in case of backward compatibilities issues.",
- TRUE
- );
- //----
- cb = cfg->addBool(
- "BUILTIN_STL_SUPPORT",
- "If you use STL classes (i.e. std::string, std::vector, etc.) but do not want\n"
- "to include (a tag file for) the STL sources as input, then you should\n"
- "set this tag to YES in order to let doxygen match functions declarations and\n"
- "definitions whose arguments contain STL classes (e.g. func(std::string); v.s.\n"
- "func(std::string) {}). This also makes the inheritance and collaboration\n"
- "diagrams that involve STL classes more complete and accurate.",
- FALSE
- );
- //----
- cb = cfg->addBool(
- "CPP_CLI_SUPPORT",
- "If you use Microsoft's C++/CLI language, you should set this option to YES to\n"
- "enable parsing support.",
- FALSE
- );
- //----
- cb = cfg->addBool(
- "SIP_SUPPORT",
- "Set the SIP_SUPPORT tag to YES if your project consists of sip sources only.\n"
- "Doxygen will parse them like normal C++ but will assume all classes use public\n"
- "instead of private inheritance when no explicit protection keyword is present.",
- FALSE
- );
- //----
- cb = cfg->addBool(
- "IDL_PROPERTY_SUPPORT",
- "For Microsoft's IDL there are propget and propput attributes to indicate getter\n"
- "and setter methods for a property. Setting this option to YES (the default)\n"
- "will make doxygen replace the get and set methods by a property in the\n"
- "documentation. This will only work if the methods are indeed getting or\n"
- "setting a simple type. If this is not the case, or you want to show the\n"
- "methods anyway, you should set this option to NO.",
- TRUE
- );
- //----
- cb = cfg->addBool(
- "DISTRIBUTE_GROUP_DOC",
- "If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC\n"
- "tag is set to YES, then doxygen will reuse the documentation of the first\n"
- "member in the group (if any) for the other members of the group. By default\n"
- "all members of a group must be documented explicitly.",
- FALSE
- );
- //----
- cb = cfg->addBool(
- "SUBGROUPING",
- "Set the SUBGROUPING tag to YES (the default) to allow class member groups of\n"
- "the same type (for instance a group of public functions) to be put as a\n"
- "subgroup of that type (e.g. under the Public Functions section). Set it to\n"
- "NO to prevent subgrouping. Alternatively, this can be done per class using\n"
- "the \\nosubgrouping command.",
- TRUE
- );
- //----
- cb = cfg->addBool(
- "INLINE_GROUPED_CLASSES",
- "When the INLINE_GROUPED_CLASSES tag is set to YES, classes, structs and\n"
- "unions are shown inside the group in which they are included (e.g. using\n"
- "@ingroup) instead of on a separate page (for HTML and Man pages) or\n"
- "section (for LaTeX and RTF).",
- FALSE
- );
- //----
- cb = cfg->addBool(
- "INLINE_SIMPLE_STRUCTS",
- "When the INLINE_SIMPLE_STRUCTS tag is set to YES, structs, classes, and\n"
- "unions with only public data fields will be shown inline in the documentation\n"
- "of the scope in which they are defined (i.e. file, namespace, or group\n"
- "documentation), provided this scope is documented. If set to NO (the default),\n"
- "structs, classes, and unions are shown on a separate page (for HTML and Man\n"
- "pages) or section (for LaTeX and RTF).",
- FALSE
- );
- //----
- cb = cfg->addBool(
- "TYPEDEF_HIDES_STRUCT",
- "When TYPEDEF_HIDES_STRUCT is enabled, a typedef of a struct, union, or enum\n"
- "is documented as struct, union, or enum with the name of the typedef. So\n"
- "typedef struct TypeS {} TypeT, will appear in the documentation as a struct\n"
- "with name TypeT. When disabled the typedef will appear as a member of a file,\n"
- "namespace, or class. And the struct will be named TypeS. This can typically\n"
- "be useful for C code in case the coding convention dictates that all compound\n"
- "types are typedef'ed and only the typedef is referenced, never the tag name.",
- FALSE
- );
- //----
- ci = cfg->addInt(
- "SYMBOL_CACHE_SIZE",
- "The SYMBOL_CACHE_SIZE determines the size of the internal cache use to\n"
- "determine which symbols to keep in memory and which to flush to disk.\n"
- "When the cache is full, less often used symbols will be written to disk.\n"
- "For small to medium size projects (<1000 input files) the default value is\n"
- "probably good enough. For larger projects a too small cache size can cause\n"
- "doxygen to be busy swapping symbols to and from disk most of the time\n"
- "causing a significant performance penalty.\n"
- "If the system has enough physical memory increasing the cache will improve the\n"
- "performance by keeping more symbols in memory. Note that the value works on\n"
- "a logarithmic scale so increasing the size by one will roughly double the\n"
- "memory usage. The cache size is given by this formula:\n"
- "2^(16+SYMBOL_CACHE_SIZE). The valid range is 0..9, the default is 0,\n"
- "corresponding to a cache size of 2^16 = 65536 symbols.",
- 0,9,0
- );
- //----
- ci = cfg->addInt(
- "LOOKUP_CACHE_SIZE",
- "Similar to the SYMBOL_CACHE_SIZE the size of the symbol lookup cache can be\n"
- "set using LOOKUP_CACHE_SIZE. This cache is used to resolve symbols given\n"
- "their name and scope. Since this can be an expensive process and often the\n"
- "same symbol appear multiple times in the code, doxygen keeps a cache of\n"
- "pre-resolved symbols. If the cache is too small doxygen will become slower.\n"
- "If the cache is too large, memory is wasted. The cache size is given by this\n"
- "formula: 2^(16+LOOKUP_CACHE_SIZE). The valid range is 0..9, the default is 0,\n"
- "corresponding to a cache size of 2^16 = 65536 symbols.",
- 0,9,0
- );
- //---------------------------------------------------------------------------
- cfg->addInfo("Build","Build related configuration options");
- //---------------------------------------------------------------------------
-
- //----
- cb = cfg->addBool(
- "EXTRACT_ALL",
- "If the EXTRACT_ALL tag is set to YES doxygen will assume all entities in\n"
- "documentation are documented, even if no documentation was available.\n"
- "Private class members and static file members will be hidden unless\n"
- "the EXTRACT_PRIVATE and EXTRACT_STATIC tags are set to YES",
- FALSE
- );
- //----
- cb = cfg->addBool(
- "EXTRACT_PRIVATE",
- "If the EXTRACT_PRIVATE tag is set to YES all private members of a class\n"
- "will be included in the documentation.",
- FALSE
- );
- //----
- cb = cfg->addBool(
- "EXTRACT_PACKAGE",
- "If the EXTRACT_PACKAGE tag is set to YES all members with package or internal scope will be included in the documentation.",
- FALSE
- );
- //----
- cb = cfg->addBool(
- "EXTRACT_STATIC",
- "If the EXTRACT_STATIC tag is set to YES all static members of a file\n"
- "will be included in the documentation.",
- FALSE
- );
- //----
- cb = cfg->addBool(
- "EXTRACT_LOCAL_CLASSES",
- "If the EXTRACT_LOCAL_CLASSES tag is set to YES classes (and structs)\n"
- "defined locally in source files will be included in the documentation.\n"
- "If set to NO only classes defined in header files are included.",
- TRUE
- );
- //----
- cb = cfg->addBool(
- "EXTRACT_LOCAL_METHODS",
- "This flag is only useful for Objective-C code. When set to YES local\n"
- "methods, which are defined in the implementation section but not in\n"
- "the interface are included in the documentation.\n"
- "If set to NO (the default) only methods in the interface are included.",
- FALSE
- );
- //----
- cb = cfg->addBool(
- "EXTRACT_ANON_NSPACES",
- "If this flag is set to YES, the members of anonymous namespaces will be\n"
- "extracted and appear in the documentation as a namespace called\n"
- "'anonymous_namespace{file}', where file will be replaced with the base\n"
- "name of the file that contains the anonymous namespace. By default\n"
- "anonymous namespaces are hidden.",
- FALSE
- );
- //----
- cb = cfg->addBool(
- "HIDE_UNDOC_MEMBERS",
- "If the HIDE_UNDOC_MEMBERS tag is set to YES, Doxygen will hide all\n"
- "undocumented members of documented classes, files or namespaces.\n"
- "If set to NO (the default) these members will be included in the\n"
- "various overviews, but no documentation section is generated.\n"
- "This option has no effect if EXTRACT_ALL is enabled.",
- FALSE
- );
- //----
- cb = cfg->addBool(
- "HIDE_UNDOC_CLASSES",
- "If the HIDE_UNDOC_CLASSES tag is set to YES, Doxygen will hide all\n"
- "undocumented classes that are normally visible in the class hierarchy.\n"
- "If set to NO (the default) these classes will be included in the various\n"
- "overviews. This option has no effect if EXTRACT_ALL is enabled.",
- FALSE
- );
- //----
- cb = cfg->addBool(
- "HIDE_FRIEND_COMPOUNDS",
- "If the HIDE_FRIEND_COMPOUNDS tag is set to YES, Doxygen will hide all\n"
- "friend (class|struct|union) declarations.\n"
- "If set to NO (the default) these declarations will be included in the\n"
- "documentation.",
- FALSE
- );
- //----
- cb = cfg->addBool(
- "HIDE_IN_BODY_DOCS",
- "If the HIDE_IN_BODY_DOCS tag is set to YES, Doxygen will hide any\n"
- "documentation blocks found inside the body of a function.\n"
- "If set to NO (the default) these blocks will be appended to the\n"
- "function's detailed documentation block.",
- FALSE
- );
- //----
- cb = cfg->addBool(
- "INTERNAL_DOCS",
- "The INTERNAL_DOCS tag determines if documentation\n"
- "that is typed after a \\internal command is included. If the tag is set\n"
- "to NO (the default) then the documentation will be excluded.\n"
- "Set it to YES to include the internal documentation.",
- FALSE
- );
- //----
- cb = cfg->addBool(
- "CASE_SENSE_NAMES",
- "If the CASE_SENSE_NAMES tag is set to NO then Doxygen will only generate\n"
- "file names in lower-case letters. If set to YES upper-case letters are also\n"
- "allowed. This is useful if you have classes or files whose names only differ\n"
- "in case and if your file system supports case sensitive file names. Windows\n"
- "and Mac users are advised to set this option to NO.",
- portable_fileSystemIsCaseSensitive()
- );
- //----
- cb = cfg->addBool(
- "HIDE_SCOPE_NAMES",
- "If the HIDE_SCOPE_NAMES tag is set to NO (the default) then Doxygen\n"
- "will show members with their full class and namespace scopes in the\n"
- "documentation. If set to YES the scope will be hidden.",
- FALSE
- );
- //----
- cb = cfg->addBool(
- "SHOW_INCLUDE_FILES",
- "If the SHOW_INCLUDE_FILES tag is set to YES (the default) then Doxygen\n"
- "will put a list of the files that are included by a file in the documentation\n"
- "of that file.",
- TRUE
- );
- //----
- cb = cfg->addBool(
- "FORCE_LOCAL_INCLUDES",
- "If the FORCE_LOCAL_INCLUDES tag is set to YES then Doxygen\n"
- "will list include files with double quotes in the documentation\n"
- "rather than with sharp brackets.",
- FALSE
- );
- //----
- cb = cfg->addBool(
- "INLINE_INFO",
- "If the INLINE_INFO tag is set to YES (the default) then a tag [inline]\n"
- "is inserted in the documentation for inline members.",
- TRUE
- );
- //----
- cb = cfg->addBool(
- "SORT_MEMBER_DOCS",
- "If the SORT_MEMBER_DOCS tag is set to YES (the default) then doxygen\n"
- "will sort the (detailed) documentation of file and class members\n"
- "alphabetically by member name. If set to NO the members will appear in\n"
- "declaration order.",
- TRUE
- );
- //----
- cb = cfg->addBool(
- "SORT_BRIEF_DOCS",
- "If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the\n"
- "brief documentation of file, namespace and class members alphabetically\n"
- "by member name. If set to NO (the default) the members will appear in\n"
- "declaration order.",
- FALSE
- );
- //----
- cb = cfg->addBool(
- "SORT_MEMBERS_CTORS_1ST",
- "If the SORT_MEMBERS_CTORS_1ST tag is set to YES then doxygen\n"
- "will sort the (brief and detailed) documentation of class members so that\n"
- "constructors and destructors are listed first. If set to NO (the default)\n"
- "the constructors will appear in the respective orders defined by\n"
- "SORT_MEMBER_DOCS and SORT_BRIEF_DOCS.\n"
- "This tag will be ignored for brief docs if SORT_BRIEF_DOCS is set to NO\n"
- "and ignored for detailed docs if SORT_MEMBER_DOCS is set to NO.",
- FALSE
- );
- //----
- cb = cfg->addBool(
- "SORT_GROUP_NAMES",
- "If the SORT_GROUP_NAMES tag is set to YES then doxygen will sort the\n"
- "hierarchy of group names into alphabetical order. If set to NO (the default)\n"
- "the group names will appear in their defined order.",
- FALSE
- );
- //----
- cb = cfg->addBool(
- "SORT_BY_SCOPE_NAME",
- "If the SORT_BY_SCOPE_NAME tag is set to YES, the class list will be\n"
- "sorted by fully-qualified names, including namespaces. If set to\n"
- "NO (the default), the class list will be sorted only by class name,\n"
- "not including the namespace part.\n"
- "Note: This option is not very useful if HIDE_SCOPE_NAMES is set to YES.\n"
- "Note: This option applies only to the class list, not to the\n"
- "alphabetical list.",
- FALSE
- );
- //----
- cb = cfg->addBool(
- "STRICT_PROTO_MATCHING",
- "If the STRICT_PROTO_MATCHING option is enabled and doxygen fails to\n"
- "do proper type resolution of all parameters of a function it will reject a\n"
- "match between the prototype and the implementation of a member function even\n"
- "if there is only one candidate or it is obvious which candidate to choose\n"
- "by doing a simple string match. By disabling STRICT_PROTO_MATCHING doxygen\n"
- "will still accept a match between prototype and implementation in such cases.",
- FALSE
- );
- //----
- cb = cfg->addBool(
- "GENERATE_TODOLIST",
- "The GENERATE_TODOLIST tag can be used to enable (YES) or\n"
- "disable (NO) the todo list. This list is created by putting \\todo\n"
- "commands in the documentation.",
- TRUE
- );
- //----
- cb = cfg->addBool(
- "GENERATE_TESTLIST",
- "The GENERATE_TESTLIST tag can be used to enable (YES) or\n"
- "disable (NO) the test list. This list is created by putting \\test\n"
- "commands in the documentation.",
- TRUE
- );
- //----
- cb = cfg->addBool(
- "GENERATE_BUGLIST",
- "The GENERATE_BUGLIST tag can be used to enable (YES) or\n"
- "disable (NO) the bug list. This list is created by putting \\bug\n"
- "commands in the documentation.",
- TRUE
- );
- //----
- cb = cfg->addBool(
- "GENERATE_DEPRECATEDLIST",
- "The GENERATE_DEPRECATEDLIST tag can be used to enable (YES) or\n"
- "disable (NO) the deprecated list. This list is created by putting\n"
- "\\deprecated commands in the documentation.",
- TRUE
- );
- //----
- cl = cfg->addList(
- "ENABLED_SECTIONS",
- "The ENABLED_SECTIONS tag can be used to enable conditional\n"
- "documentation sections, marked by \\if sectionname ... \\endif."
- );
- //----
- ci = cfg->addInt(
- "MAX_INITIALIZER_LINES",
- "The MAX_INITIALIZER_LINES tag determines the maximum number of lines\n"
- "the initial value of a variable or macro consists of for it to appear in\n"
- "the documentation. If the initializer consists of more lines than specified\n"
- "here it will be hidden. Use a value of 0 to hide initializers completely.\n"
- "The appearance of the initializer of individual variables and macros in the\n"
- "documentation can be controlled using \\showinitializer or \\hideinitializer\n"
- "command in the documentation regardless of this setting.",
- 0,10000,30
- );
- //----
- cb = cfg->addBool(
- "SHOW_USED_FILES",
- "Set the SHOW_USED_FILES tag to NO to disable the list of files generated\n"
- "at the bottom of the documentation of classes and structs. If set to YES the\n"
- "list will mention the files that were used to generate the documentation.",
- TRUE
- );
- //----
- cb = cfg->addBool(
- "SHOW_DIRECTORIES",
- "If the sources in your project are distributed over multiple directories\n"
- "then setting the SHOW_DIRECTORIES tag to YES will show the directory hierarchy\n"
- "in the documentation. The default is NO.",
- FALSE
- );
- //----
- cb = cfg->addBool(
- "SHOW_FILES",
- "Set the SHOW_FILES tag to NO to disable the generation of the Files page.\n"
- "This will remove the Files entry from the Quick Index and from the\n"
- "Folder Tree View (if specified). The default is YES.",
- TRUE
- );
- //----
- cb = cfg->addBool(
- "SHOW_NAMESPACES",
- "Set the SHOW_NAMESPACES tag to NO to disable the generation of the\n"
- "Namespaces page.\n"
- "This will remove the Namespaces entry from the Quick Index\n"
- "and from the Folder Tree View (if specified). The default is YES.",
- TRUE
- );
- //----
- cs = cfg->addString(
- "FILE_VERSION_FILTER",
- "The FILE_VERSION_FILTER tag can be used to specify a program or script that\n"
- "doxygen should invoke to get the current version for each file (typically from\n"
- "the version control system). Doxygen will invoke the program by executing (via\n"
- "popen()) the command <command> <input-file>, where <command> is the value of\n"
- "the FILE_VERSION_FILTER tag, and <input-file> is the name of an input file\n"
- "provided by doxygen. Whatever the program writes to standard output\n"
- "is used as the file version. See the manual for examples."
- );
- cs->setWidgetType(ConfigString::File);
- //----
- cs = cfg->addString(
- "LAYOUT_FILE",
- "The LAYOUT_FILE tag can be used to specify a layout file which will be parsed\n"
- "by doxygen. The layout file controls the global structure of the generated\n"
- "output files in an output format independent way. The create the layout file\n"
- "that represents doxygen's defaults, run doxygen with the -l option.\n"
- "You can optionally specify a file name after the option, if omitted\n"
- "DoxygenLayout.xml will be used as the name of the layout file."
- );
- cs->setWidgetType(ConfigString::File);
- //----
- cl = cfg->addList(
- "CITE_BIB_FILES",
- "The CITE_BIB_FILES tag can be used to specify one or more bib files\n"
- "containing the references data. This must be a list of .bib files. The\n"
- ".bib extension is automatically appended if omitted. Using this command\n"
- "requires the bibtex tool to be installed. See also\n"
- "http://en.wikipedia.org/wiki/BibTeX for more info. For LaTeX the style\n"
- "of the bibliography can be controlled using LATEX_BIB_STYLE. To use this\n"
- "feature you need bibtex and perl available in the search path."
- );
- cl->setWidgetType(ConfigList::File);
- //---------------------------------------------------------------------------
- cfg->addInfo("Messages","configuration options related to warning and progress messages");
- //---------------------------------------------------------------------------
-
- //----
- cb = cfg->addBool(
- "QUIET",
- "The QUIET tag can be used to turn on/off the messages that are generated\n"
- "by doxygen. Possible values are YES and NO. If left blank NO is used.",
- FALSE
- );
- //----
- cb = cfg->addBool(
- "WARNINGS",
- "The WARNINGS tag can be used to turn on/off the warning messages that are\n"
- "generated by doxygen. Possible values are YES and NO. If left blank\n"
- "NO is used.",
- TRUE
- );
- //----
- cb = cfg->addBool(
- "WARN_IF_UNDOCUMENTED",
- "If WARN_IF_UNDOCUMENTED is set to YES, then doxygen will generate warnings\n"
- "for undocumented members. If EXTRACT_ALL is set to YES then this flag will\n"
- "automatically be disabled.",
- TRUE
- );
- //----
- cb = cfg->addBool(
- "WARN_IF_DOC_ERROR",
- "If WARN_IF_DOC_ERROR is set to YES, doxygen will generate warnings for\n"
- "potential errors in the documentation, such as not documenting some\n"
- "parameters in a documented function, or documenting parameters that\n"
- "don't exist or using markup commands wrongly.",
- TRUE
- );
- //----
- cb = cfg->addBool(
- "WARN_NO_PARAMDOC",
- "The WARN_NO_PARAMDOC option can be enabled to get warnings for\n"
- "functions that are documented, but have no documentation for their parameters\n"
- "or return value. If set to NO (the default) doxygen will only warn about\n"
- "wrong or incomplete parameter documentation, but not about the absence of\n"
- "documentation.",
- FALSE
- );
- //----
- cs = cfg->addString(
- "WARN_FORMAT",
- "The WARN_FORMAT tag determines the format of the warning messages that\n"
- "doxygen can produce. The string should contain the $file, $line, and $text\n"
- "tags, which will be replaced by the file and line number from which the\n"
- "warning originated and the warning text. Optionally the format may contain\n"
- "$version, which will be replaced by the version of the file (if it could\n"
- "be obtained via FILE_VERSION_FILTER)"
- );
- cs->setDefaultValue("$file:$line: $text");
- //----
- cs = cfg->addString(
- "WARN_LOGFILE",
- "The WARN_LOGFILE tag can be used to specify a file to which warning\n"
- "and error messages should be written. If left blank the output is written\n"
- "to stderr."
- );
- cs->setWidgetType(ConfigString::File);
- //---------------------------------------------------------------------------
- cfg->addInfo("Input","configuration options related to the input files");
- //---------------------------------------------------------------------------
-
- //----
- cl = cfg->addList(
- "INPUT",
- "The INPUT tag can be used to specify the files and/or directories that contain\n"
- "documented source files. You may enter file names like \"myfile.cpp\" or\n"
- "directories like \"/usr/src/myproject\". Separate the files or directories\n"
- "with spaces."
- );
- cl->addValue("");
- cl->setWidgetType(ConfigList::FileAndDir);
- //----
- cs = cfg->addString(
- "INPUT_ENCODING",
- "This tag can be used to specify the character encoding of the source files\n"
- "that doxygen parses. Internally doxygen uses the UTF-8 encoding, which is\n"
- "also the default input encoding. Doxygen uses libiconv (or the iconv built\n"
- "into libc) for the transcoding. See http://www.gnu.org/software/libiconv for\n"
- "the list of possible encodings."
- );
- cs->setDefaultValue("UTF-8");
- //----
- cl = cfg->addList(
- "FILE_PATTERNS",
- "If the value of the INPUT tag contains directories, you can use the\n"
- "FILE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp\n"
- "and *.h) to filter out the source-files in the directories. If left\n"
- "blank the following patterns are tested:\n"
- "*.c *.cc *.cxx *.cpp *.c++ *.d *.java *.ii *.ixx *.ipp *.i++ *.inl *.h *.hh\n"
- "*.hxx *.hpp *.h++ *.idl *.odl *.cs *.php *.php3 *.inc *.m *.mm *.dox *.py\n"
- "*.f90 *.f *.for *.vhd *.vhdl"
- );
- cl->addValue("*.c");
- cl->addValue("*.cc");
- cl->addValue("*.cxx");
- cl->addValue("*.cpp");
- cl->addValue("*.c++");
- cl->addValue("*.d");
- cl->addValue("*.java");
- cl->addValue("*.ii");
- cl->addValue("*.ixx");
- cl->addValue("*.ipp");
- cl->addValue("*.i++");
- cl->addValue("*.inl");
- cl->addValue("*.h");
- cl->addValue("*.hh");
- cl->addValue("*.hxx");
- cl->addValue("*.hpp");
- cl->addValue("*.h++");
- cl->addValue("*.idl");
- cl->addValue("*.odl");
- cl->addValue("*.cs");
- cl->addValue("*.php");
- cl->addValue("*.php3");
- cl->addValue("*.inc");
- cl->addValue("*.m");
- cl->addValue("*.markdown");
- cl->addValue("*.md");
- cl->addValue("*.mm");
- cl->addValue("*.dox");
- cl->addValue("*.py");
- cl->addValue("*.f90");
- cl->addValue("*.f");
- cl->addValue("*.for");
- cl->addValue("*.vhd");
- cl->addValue("*.vhdl");
- //----
- cb = cfg->addBool(
- "RECURSIVE",
- "The RECURSIVE tag can be used to turn specify whether or not subdirectories\n"
- "should be searched for input files as well. Possible values are YES and NO.\n"
- "If left blank NO is used.",
- FALSE
- );
- //----
- cl = cfg->addList(
- "EXCLUDE",
- "The EXCLUDE tag can be used to specify files and/or directories that should be\n"
- "excluded from the INPUT source files. This way you can easily exclude a\n"
- "subdirectory from a directory tree whose root is specified with the INPUT tag.\n"
- "Note that relative paths are relative to the directory from which doxygen is\n"
- "run."
- );
- cl->setWidgetType(ConfigList::FileAndDir);
- //----
- cb = cfg->addBool(
- "EXCLUDE_SYMLINKS",
- "The EXCLUDE_SYMLINKS tag can be used to select whether or not files or\n"
- "directories that are symbolic links (a Unix file system feature) are excluded\n"
- "from the input.",
- FALSE
- );
- //----
- cl = cfg->addList(
- "EXCLUDE_PATTERNS",
- "If the value of the INPUT tag contains directories, you can use the\n"
- "EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude\n"
- "certain files from those directories. Note that the wildcards are matched\n"
- "against the file with absolute path, so to exclude all test directories\n"
- "for example use the pattern */test/*"
- );
- //----
- cl = cfg->addList(
- "EXCLUDE_SYMBOLS",
- "The EXCLUDE_SYMBOLS tag can be used to specify one or more symbol names\n"
- "(namespaces, classes, functions, etc.) that should be excluded from the\n"
- "output. The symbol name can be a fully qualified name, a word, or if the\n"
- "wildcard * is used, a substring. Examples: ANamespace, AClass,\n"
- "AClass::ANamespace, ANamespace::*Test"
- );
- //----
- cl = cfg->addList(
- "EXAMPLE_PATH",
- "The EXAMPLE_PATH tag can be used to specify one or more files or\n"
- "directories that contain example code fragments that are included (see\n"
- "the \\include command)."
- );
- cl->setWidgetType(ConfigList::Dir);
- //----
- cl = cfg->addList(
- "EXAMPLE_PATTERNS",
- "If the value of the EXAMPLE_PATH tag contains directories, you can use the\n"
- "EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp\n"
- "and *.h) to filter out the source-files in the directories. If left\n"
- "blank all files are included."
- );
- cl->addValue("*");
- //----
- cb = cfg->addBool(
- "EXAMPLE_RECURSIVE",
- "If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be\n"
- "searched for input files to be used with the \\include or \\dontinclude\n"
- "commands irrespective of the value of the RECURSIVE tag.\n"
- "Possible values are YES and NO. If left blank NO is used.",
- FALSE
- );
- //----
- cl = cfg->addList(
- "IMAGE_PATH",
- "The IMAGE_PATH tag can be used to specify one or more files or\n"
- "directories that contain image that are included in the documentation (see\n"
- "the \\image command)."
- );
- cl->setWidgetType(ConfigList::Dir);
- //----
- cs = cfg->addString(
- "INPUT_FILTER",
- "The INPUT_FILTER tag can be used to specify a program that doxygen should\n"
- "invoke to filter for each input file. Doxygen will invoke the filter program\n"
- "by executing (via popen()) the command <filter> <input-file>, where <filter>\n"
- "is the value of the INPUT_FILTER tag, and <input-file> is the name of an\n"
- "input file. Doxygen will then use the output that the filter program writes\n"
- "to standard output.\n"
- "If FILTER_PATTERNS is specified, this tag will be\n"
- "ignored."
- );
- cs->setWidgetType(ConfigString::File);
- //----
- cl = cfg->addList(
- "FILTER_PATTERNS",
- "The FILTER_PATTERNS tag can be used to specify filters on a per file pattern\n"
- "basis.\n"
- "Doxygen will compare the file name with each pattern and apply the\n"
- "filter if there is a match.\n"
- "The filters are a list of the form:\n"
- "pattern=filter (like *.cpp=my_cpp_filter). See INPUT_FILTER for further\n"
- "info on how filters are used. If FILTER_PATTERNS is empty or if\n"
- "non of the patterns match the file name, INPUT_FILTER is applied."
- );
- //----
- cb = cfg->addBool(
- "FILTER_SOURCE_FILES",
- "If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using\n"
- "INPUT_FILTER) will be used to filter the input files when producing source\n"
- "files to browse (i.e. when SOURCE_BROWSER is set to YES).",
- FALSE
- );
- //----
- cl = cfg->addList(
- "FILTER_SOURCE_PATTERNS",
- "The FILTER_SOURCE_PATTERNS tag can be used to specify source filters per file\n"
- "pattern. A pattern will override the setting for FILTER_PATTERN (if any)\n"
- "and it is also possible to disable source filtering for a specific pattern\n"
- "using *.ext= (so without naming a filter). This option only has effect when\n"
- "FILTER_SOURCE_FILES is enabled."
- );
- cl->addDependency("FILTER_SOURCE_FILES");
- //---------------------------------------------------------------------------
- cfg->addInfo("Source Browser","configuration options related to source browsing");
- //---------------------------------------------------------------------------
-
- //----
- cb = cfg->addBool(
- "SOURCE_BROWSER",
- "If the SOURCE_BROWSER tag is set to YES then a list of source files will\n"
- "be generated. Documented entities will be cross-referenced with these sources.\n"
- "Note: To get rid of all source code in the generated output, make sure also\n"
- "VERBATIM_HEADERS is set to NO.",
- FALSE
- );
- //----
- cb = cfg->addBool(
- "INLINE_SOURCES",
- "Setting the INLINE_SOURCES tag to YES will include the body\n"
- "of functions and classes directly in the documentation.",
- FALSE
- );
- //----
- cb = cfg->addBool(
- "STRIP_CODE_COMMENTS",
- "Setting the STRIP_CODE_COMMENTS tag to YES (the default) will instruct\n"
- "doxygen to hide any special comment blocks from generated source code\n"
- "fragments. Normal C and C++ comments will always remain visible.",
- TRUE
- );
- //----
- cb = cfg->addBool(
- "REFERENCED_BY_RELATION",
- "If the REFERENCED_BY_RELATION tag is set to YES\n"
- "then for each documented function all documented\n"
- "functions referencing it will be listed.",
- FALSE
- );
- //----
- cb = cfg->addBool(
- "REFERENCES_RELATION",
- "If the REFERENCES_RELATION tag is set to YES\n"
- "then for each documented function all documented entities\n"
- "called/used by that function will be listed.",
- FALSE
- );
- //----
- cb = cfg->addBool(
- "REFERENCES_LINK_SOURCE",
- "If the REFERENCES_LINK_SOURCE tag is set to YES (the default)\n"
- "and SOURCE_BROWSER tag is set to YES, then the hyperlinks from\n"
- "functions in REFERENCES_RELATION and REFERENCED_BY_RELATION lists will\n"
- "link to the source code.\n"
- "Otherwise they will link to the documentation.",
- TRUE
- );
- //----
- cb = cfg->addBool(
- "USE_HTAGS",
- "If the USE_HTAGS tag is set to YES then the references to source code\n"
- "will point to the HTML generated by the htags(1) tool instead of doxygen\n"
- "built-in source browser. The htags tool is part of GNU's global source\n"
- "tagging system (see http://www.gnu.org/software/global/global.html). You\n"
- "will need version 4.8.6 or higher.",
- FALSE
- );
- cb->addDependency("SOURCE_BROWSER");
- //----
- cb = cfg->addBool(
- "VERBATIM_HEADERS",
- "If the VERBATIM_HEADERS tag is set to YES (the default) then Doxygen\n"
- "will generate a verbatim copy of the header file for each class for\n"
- "which an include is specified. Set to NO to disable this.",
- TRUE
- );
- //---------------------------------------------------------------------------
- cfg->addInfo("Index","configuration options related to the alphabetical class index");
- //---------------------------------------------------------------------------
-
- //----
- cb = cfg->addBool(
- "ALPHABETICAL_INDEX",
- "If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index\n"
- "of all compounds will be generated. Enable this if the project\n"
- "contains a lot of classes, structs, unions or interfaces.",
- TRUE
- );
- //----
- ci = cfg->addInt(
- "COLS_IN_ALPHA_INDEX",
- "If the alphabetical index is enabled (see ALPHABETICAL_INDEX) then\n"
- "the COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns\n"
- "in which this list will be split (can be a number in the range [1..20])",
- 1,20,5
- );
- //----
- cl = cfg->addList(
- "IGNORE_PREFIX",
- "In case all classes in a project start with a common prefix, all\n"
- "classes will be put under the same header in the alphabetical index.\n"
- "The IGNORE_PREFIX tag can be used to specify one or more prefixes that\n"
- "should be ignored while generating the index headers."
- );
- //---------------------------------------------------------------------------
- cfg->addInfo("HTML","configuration options related to the HTML output");
- //---------------------------------------------------------------------------
-
- //----
- cb = cfg->addBool(
- "GENERATE_HTML",
- "If the GENERATE_HTML tag is set to YES (the default) Doxygen will\n"
- "generate HTML output.",
- TRUE
- );
- //----
- cs = cfg->addString(
- "HTML_OUTPUT",
- "The HTML_OUTPUT tag is used to specify where the HTML docs will be put.\n"
- "If a relative path is entered the value of OUTPUT_DIRECTORY will be\n"
- "put in front of it. If left blank `html' will be used as the default path."
- );
- cs->setDefaultValue("html");
- cs->setWidgetType(ConfigString::Dir);
- cs->addDependency("GENERATE_HTML");
- //----
- cs = cfg->addString(
- "HTML_FILE_EXTENSION",
- "The HTML_FILE_EXTENSION tag can be used to specify the file extension for\n"
- "each generated HTML page (for example: .htm,.php,.asp). If it is left blank\n"
- "doxygen will generate files with .html extension."
- );
- cs->setDefaultValue(".html");
- cs->addDependency("GENERATE_HTML");
- //----
- cs = cfg->addString(
- "HTML_HEADER",
- "The HTML_HEADER tag can be used to specify a personal HTML header for\n"
- "each generated HTML page. If it is left blank doxygen will generate a\n"
- "standard header. Note that when using a custom header you are responsible\n"
- " for the proper inclusion of any scripts and style sheets that doxygen\n"
- "needs, which is dependent on the configuration options used.\n"
- "It is advised to generate a default header using \"doxygen -w html\n"
- "header.html footer.html stylesheet.css YourConfigFile\" and then modify\n"
- "that header. Note that the header is subject to change so you typically\n"
- "have to redo this when upgrading to a newer version of doxygen or when\n"
- "changing the value of configuration settings such as GENERATE_TREEVIEW!"
- );
- cs->setWidgetType(ConfigString::File);
- cs->addDependency("GENERATE_HTML");
- //----
- cs = cfg->addString(
- "HTML_FOOTER",
- "The HTML_FOOTER tag can be used to specify a personal HTML footer for\n"
- "each generated HTML page. If it is left blank doxygen will generate a\n"
- "standard footer."
- );
- cs->setWidgetType(ConfigString::File);
- cs->addDependency("GENERATE_HTML");
- //----
- cs = cfg->addString(
- "HTML_STYLESHEET",
- "The HTML_STYLESHEET tag can be used to specify a user-defined cascading\n"
- "style sheet that is used by each HTML page. It can be used to\n"
- "fine-tune the look of the HTML output. If the tag is left blank doxygen\n"
- "will generate a default style sheet. Note that doxygen will try to copy\n"
- "the style sheet file to the HTML output directory, so don't put your own\n"
- "style sheet in the HTML output directory as well, or it will be erased!"
- );
- cs->setWidgetType(ConfigString::File);
- cs->addDependency("GENERATE_HTML");
- //----
- cl = cfg->addList(
- "HTML_EXTRA_FILES",
- "The HTML_EXTRA_FILES tag can be used to specify one or more extra images or\n"
- "other source files which should be copied to the HTML output directory. Note\n"
- "that these files will be copied to the base HTML output directory. Use the\n"
- "$relpath$ marker in the HTML_HEADER and/or HTML_FOOTER files to load these\n"
- "files. In the HTML_STYLESHEET file, use the file name only. Also note that\n"
- "the files will be copied as-is; there are no commands or markers available."
- );
- cl->addDependency("GENERATE_HTML");
- cl->setWidgetType(ConfigList::File);
- //----
- ci = cfg->addInt(
- "HTML_COLORSTYLE_HUE",
- "The HTML_COLORSTYLE_HUE tag controls the color of the HTML output.\n"
- "Doxygen will adjust the colors in the style sheet and background images\n"
- "according to this color. Hue is specified as an angle on a colorwheel,\n"
- "see http://en.wikipedia.org/wiki/Hue for more information.\n"
- "For instance the value 0 represents red, 60 is yellow, 120 is green,\n"
- "180 is cyan, 240 is blue, 300 purple, and 360 is red again.\n"
- "The allowed range is 0 to 359.",
- 0,359,220
- );
- ci->addDependency("GENERATE_HTML");
- //----
- ci = cfg->addInt(
- "HTML_COLORSTYLE_SAT",
- "The HTML_COLORSTYLE_SAT tag controls the purity (or saturation) of\n"
- "the colors in the HTML output. For a value of 0 the output will use\n"
- "grayscales only. A value of 255 will produce the most vivid colors.",
- 0,255,100
- );
- ci->addDependency("GENERATE_HTML");
- //----
- ci = cfg->addInt(
- "HTML_COLORSTYLE_GAMMA",
- "The HTML_COLORSTYLE_GAMMA tag controls the gamma correction applied to\n"
- "the luminance component of the colors in the HTML output. Values below\n"
- "100 gradually make the output lighter, whereas values above 100 make\n"
- "the output darker. The value divided by 100 is the actual gamma applied,\n"
- "so 80 represents a gamma of 0.8, The value 220 represents a gamma of 2.2,\n"
- "and 100 does not change the gamma.",
- 40,240,80
- );
- //----
- cb = cfg->addBool(
- "HTML_TIMESTAMP",
- "If the HTML_TIMESTAMP tag is set to YES then the footer of each generated HTML\n"
- "page will contain the date and time when the page was generated. Setting\n"
- "this to NO can help when comparing the output of multiple runs.",
- TRUE
- );
- cb->addDependency("GENERATE_HTML");
- //----
- cb = cfg->addBool(
- "HTML_ALIGN_MEMBERS",
- "If the HTML_ALIGN_MEMBERS tag is set to YES, the members of classes,\n"
- "files or namespaces will be aligned in HTML using tables. If set to\n"
- "NO a bullet list will be used.",
- TRUE
- );
- cb->addDependency("GENERATE_HTML");
- //----
- cb = cfg->addBool(
- "HTML_DYNAMIC_SECTIONS",
- "If the HTML_DYNAMIC_SECTIONS tag is set to YES then the generated HTML\n"
- "documentation will contain sections that can be hidden and shown after the\n"
- "page has loaded. For this to work a browser that supports\n"
- "JavaScript and DHTML is required (for instance Mozilla 1.0+, Firefox\n"
- "Netscape 6.0+, Internet explorer 5.0+, Konqueror, or Safari).",
- FALSE
- );
- cb->addDependency("GENERATE_HTML");
- //----
- cb = cfg->addBool(
- "GENERATE_DOCSET",
- "If the GENERATE_DOCSET tag is set to YES, additional index files\n"
- "will be generated that can be used as input for Apple's Xcode 3\n"
- "integrated development environment, introduced with OSX 10.5 (Leopard).\n"
- "To create a documentation set, doxygen will generate a Makefile in the\n"
- "HTML output directory. Running make will produce the docset in that\n"
- "directory and running \"make install\" will install the docset in\n"
- "~/Library/Developer/Shared/Documentation/DocSets so that Xcode will find\n"
- "it at startup.\n"
- "See http://developer.apple.com/tools/creatingdocsetswithdoxygen.html\n"
- "for more information.",
- FALSE
- );
- cb->addDependency("GENERATE_HTML");
- //----
- cs = cfg->addString(
- "DOCSET_FEEDNAME",
- "When GENERATE_DOCSET tag is set to YES, this tag determines the name of the\n"
- "feed. A documentation feed provides an umbrella under which multiple\n"
- "documentation sets from a single provider (such as a company or product suite)\n"
- "can be grouped."
- );
- cs->setDefaultValue("Doxygen generated docs");
- cs->addDependency("GENERATE_DOCSET");
- //----
- cs = cfg->addString(
- "DOCSET_BUNDLE_ID",
- "When GENERATE_DOCSET tag is set to YES, this tag specifies a string that\n"
- "should uniquely identify the documentation set bundle. This should be a\n"
- "reverse domain-name style string, e.g. com.mycompany.MyDocSet. Doxygen\n"
- "will append .docset to the name."
- );
- cs->setDefaultValue("org.doxygen.Project");
- cs->addDependency("GENERATE_DOCSET");
- //----
- cs = cfg->addString(
- "DOCSET_PUBLISHER_ID",
- "When GENERATE_PUBLISHER_ID tag specifies a string that should uniquely identify\n"
- "the documentation publisher. This should be a reverse domain-name style\n"
- "string, e.g. com.mycompany.MyDocSet.documentation."
- );
- cs->setDefaultValue("org.doxygen.Publisher");
- cs->addDependency("GENERATE_DOCSET");
- //----
- cs = cfg->addString(
- "DOCSET_PUBLISHER_NAME",
- "The GENERATE_PUBLISHER_NAME tag identifies the documentation publisher."
- );
- cs->setDefaultValue("Publisher");
- cs->addDependency("GENERATE_DOCSET");
- //----
- cb = cfg->addBool(
- "GENERATE_HTMLHELP",
- "If the GENERATE_HTMLHELP tag is set to YES, additional index files\n"
- "will be generated that can be used as input for tools like the\n"
- "Microsoft HTML help workshop to generate a compiled HTML help file (.chm)\n"
- "of the generated HTML documentation.",
- FALSE
- );
- cb->addDependency("GENERATE_HTML");
- //----
- cs = cfg->addString(
- "CHM_FILE",
- "If the GENERATE_HTMLHELP tag is set to YES, the CHM_FILE tag can\n"
- "be used to specify the file name of the resulting .chm file. You\n"
- "can add a path in front of the file if the result should not be\n"
- "written to the html output directory."
- );
- cs->setWidgetType(ConfigString::File);
- cs->addDependency("GENERATE_HTMLHELP");
- //----
- cs = cfg->addString(
- "HHC_LOCATION",
- "If the GENERATE_HTMLHELP tag is set to YES, the HHC_LOCATION tag can\n"
- "be used to specify the location (absolute path including file name) of\n"
- "the HTML help compiler (hhc.exe). If non-empty doxygen will try to run\n"
- "the HTML help compiler on the generated index.hhp."
- );
- cs->setWidgetType(ConfigString::File);
- cs->addDependency("GENERATE_HTMLHELP");
- //----
- cb = cfg->addBool(
- "GENERATE_CHI",
- "If the GENERATE_HTMLHELP tag is set to YES, the GENERATE_CHI flag\n"
- "controls if a separate .chi index file is generated (YES) or that\n"
- "it should be included in the master .chm file (NO).",
- FALSE
- );
- cb->addDependency("GENERATE_HTMLHELP");
- //----
- cs = cfg->addString(
- "CHM_INDEX_ENCODING",
- "If the GENERATE_HTMLHELP tag is set to YES, the CHM_INDEX_ENCODING\n"
- "is used to encode HtmlHelp index (hhk), content (hhc) and project file\n"
- "content."
- );
- cs->addDependency("GENERATE_HTMLHELP");
- //----
- cb = cfg->addBool(
- "BINARY_TOC",
- "If the GENERATE_HTMLHELP tag is set to YES, the BINARY_TOC flag\n"
- "controls whether a binary table of contents is generated (YES) or a\n"
- "normal table of contents (NO) in the .chm file.",
- FALSE
- );
- cb->addDependency("GENERATE_HTMLHELP");
- //----
- cb = cfg->addBool(
- "TOC_EXPAND",
- "The TOC_EXPAND flag can be set to YES to add extra items for group members\n"
- "to the contents of the HTML help documentation and to the tree view.",
- FALSE
- );
- cb->addDependency("GENERATE_HTMLHELP");
- //----
- cb = cfg->addBool(
- "GENERATE_QHP",
- "If the GENERATE_QHP tag is set to YES and both QHP_NAMESPACE and\n"
- "QHP_VIRTUAL_FOLDER are set, an additional index file will be generated\n"
- "that can be used as input for Qt's qhelpgenerator to generate a\n"
- "Qt Compressed Help (.qch) of the generated HTML documentation.",
- FALSE
- );
- cb->addDependency("GENERATE_HTML");
- //----
- cs = cfg->addString(
- "QCH_FILE",
- "If the QHG_LOCATION tag is specified, the QCH_FILE tag can\n"
- "be used to specify the file name of the resulting .qch file.\n"
- "The path specified is relative to the HTML output folder."
- );
- cs->setWidgetType(ConfigString::File);
- cs->addDependency("GENERATE_QHP");
- //----
- cs = cfg->addString(
- "QHP_NAMESPACE",
- "The QHP_NAMESPACE tag specifies the namespace to use when generating\n"
- "Qt Help Project output. For more information please see\n"
- "http://doc.trolltech.com/qthelpproject.html#namespace"
- );
- cs->setDefaultValue("org.doxygen.Project");
- cs->addDependency("GENERATE_QHP");
- //----
- cs = cfg->addString(
- "QHP_VIRTUAL_FOLDER",
- "The QHP_VIRTUAL_FOLDER tag specifies the namespace to use when generating\n"
- "Qt Help Project output. For more information please see\n"
- "http://doc.trolltech.com/qthelpproject.html#virtual-folders"
- );
- cs->setDefaultValue("doc");
- cs->addDependency("GENERATE_QHP");
- //----
- cs = cfg->addString(
- "QHP_CUST_FILTER_NAME",
- "If QHP_CUST_FILTER_NAME is set, it specifies the name of a custom filter to\n"
- "add. For more information please see\n"
- "http://doc.trolltech.com/qthelpproject.html#custom-filters"
- );
- cs->addDependency("GENERATE_QHP");
- //----
- cs = cfg->addString(
- "QHP_CUST_FILTER_ATTRS",
- "The QHP_CUST_FILT_ATTRS tag specifies the list of the attributes of the\n"
- "custom filter to add. For more information please see\n"
- "<a href=\"http://doc.trolltech.com/qthelpproject.html#custom-filters\">\n"
- "Qt Help Project / Custom Filters</a>."
- );
- cs->addDependency("GENERATE_QHP");
- //----
- cs = cfg->addString(
- "QHP_SECT_FILTER_ATTRS",
- "The QHP_SECT_FILTER_ATTRS tag specifies the list of the attributes this\n"
- "project's\n"
- "filter section matches.\n"
- "<a href=\"http://doc.trolltech.com/qthelpproject.html#filter-attributes\">\n"
- "Qt Help Project / Filter Attributes</a>."
- );
- cs->addDependency("GENERATE_QHP");
- //----
- cs = cfg->addString(
- "QHG_LOCATION",
- "If the GENERATE_QHP tag is set to YES, the QHG_LOCATION tag can\n"
- "be used to specify the location of Qt's qhelpgenerator.\n"
- "If non-empty doxygen will try to run qhelpgenerator on the generated\n"
- ".qhp file."
- );
- cs->setWidgetType(ConfigString::File);
- cs->addDependency("GENERATE_QHP");
- //----
- cb = cfg->addBool(
- "GENERATE_ECLIPSEHELP",
- "If the GENERATE_ECLIPSEHELP tag is set to YES, additional index files\n"
- " will be generated, which together with the HTML files, form an Eclipse help\n"
- "plugin. To install this plugin and make it available under the help contents\n"
- "menu in Eclipse, the contents of the directory containing the HTML and XML\n"
- "files needs to be copied into the plugins directory of eclipse. The name of\n"
- "the directory within the plugins directory should be the same as\n"
- "the ECLIPSE_DOC_ID value. After copying Eclipse needs to be restarted before\n"
- "the help appears.",
- FALSE
- );
- cb->addDependency("GENERATE_HTML");
- //----
- cs = cfg->addString(
- "ECLIPSE_DOC_ID",
- "A unique identifier for the eclipse help plugin. When installing the plugin\n"
- "the directory name containing the HTML and XML files should also have\n"
- "this name."
- );
- cs->setDefaultValue("org.doxygen.Project");
- cs->addDependency("GENERATE_ECLIPSEHELP");
- //----
- cb = cfg->addBool(
- "DISABLE_INDEX",
- "The DISABLE_INDEX tag can be used to turn on/off the condensed index (tabs)\n"
- "at top of each HTML page. The value NO (the default) enables the index and\n"
- "the value YES disables it. Since the tabs have the same information as the\n"
- "navigation tree you can set this option to NO if you already set\n"
- "GENERATE_TREEVIEW to YES.",
- FALSE
- );
- cb->addDependency("GENERATE_HTML");
- //----
- cb = cfg->addBool(
- "GENERATE_TREEVIEW",
- "The GENERATE_TREEVIEW tag is used to specify whether a tree-like index\n"
- "structure should be generated to display hierarchical information.\n"
- "If the tag value is set to YES, a side panel will be generated\n"
- "containing a tree-like index structure (just like the one that\n"
- "is generated for HTML Help). For this to work a browser that supports\n"
- "JavaScript, DHTML, CSS and frames is required (i.e. any modern browser).\n"
- "Windows users are probably better off using the HTML help feature.\n"
- "Since the tree basically has the same information as the tab index you\n"
- "could consider to set DISABLE_INDEX to NO when enabling this option.",
- FALSE
- );
- cb->addDependency("GENERATE_HTML");
- //----
- ci = cfg->addInt(
- "ENUM_VALUES_PER_LINE",
- "The ENUM_VALUES_PER_LINE tag can be used to set the number of enum values\n"
- "(range [0,1..20]) that doxygen will group on one line in the generated HTML\n"
- "documentation. Note that a value of 0 will completely suppress the enum\n"
- "values from appearing in the overview section.",
- 0,20,4
- );
- ci->addDependency("GENERATE_HTML");
- //----
- cb = cfg->addBool(
- "USE_INLINE_TREES",
- "By enabling USE_INLINE_TREES, doxygen will generate the Groups, Directories,\n"
- "and Class Hierarchy pages using a tree view instead of an ordered list.",
- FALSE
- );
- cb->addDependency("GENERATE_HTML");
- //----
- ci = cfg->addInt(
- "TREEVIEW_WIDTH",
- "If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be\n"
- "used to set the initial width (in pixels) of the frame in which the tree\n"
- "is shown.",
- 0,1500,250
- );
- ci->addDependency("GENERATE_HTML");
- //----
- cb = cfg->addBool(
- "EXT_LINKS_IN_WINDOW",
- "When the EXT_LINKS_IN_WINDOW option is set to YES doxygen will open\n"
- "links to external symbols imported via tag files in a separate window.",
- FALSE
- );
- cb->addDependency("GENERATE_HTML");
- //----
- ci = cfg->addInt(
- "FORMULA_FONTSIZE",
- "Use this tag to change the font size of Latex formulas included\n"
- "as images in the HTML documentation. The default is 10. Note that\n"
- "when you change the font size after a successful doxygen run you need\n"
- "to manually remove any form_*.png images from the HTML output directory\n"
- "to force them to be regenerated.",
- 8,50,10
- );
- ci->addDependency("GENERATE_HTML");
- //----
- cb = cfg->addBool(
- "FORMULA_TRANSPARENT",
- "Use the FORMULA_TRANPARENT tag to determine whether or not the images\n"
- "generated for formulas are transparent PNGs. Transparent PNGs are\n"
- "not supported properly for IE 6.0, but are supported on all modern browsers.\n"
- "Note that when changing this option you need to delete any form_*.png files\n"
- "in the HTML output before the changes have effect.",
- TRUE
- );
- cb->addDependency("GENERATE_HTML");
- //----
- cb = cfg->addBool(
- "USE_MATHJAX",
- "Enable the USE_MATHJAX option to render LaTeX formulas using MathJax\n"
- "(see http://www.mathjax.org) which uses client side Javascript for the\n"
- "rendering instead of using prerendered bitmaps. Use this if you do not\n"
- "have LaTeX installed or if you want to formulas look prettier in the HTML\n"
- "output. When enabled you may also need to install MathJax separately and\n"
- "configure the path to it using the MATHJAX_RELPATH option.",
- FALSE
- );
- //----
- cs = cfg->addString(
- "MATHJAX_RELPATH",
- "When MathJax is enabled you need to specify the location relative to the\n"
- "HTML output directory using the MATHJAX_RELPATH option. The destination\n"
- "directory should contain the MathJax.js script. For instance, if the mathjax\n"
- "directory is located at the same level as the HTML output directory, then\n"
- "MATHJAX_RELPATH should be ../mathjax. The default value points to\n"
- "the MathJax Content Delivery Network so you can quickly see the result without\n"
- "installing MathJax.\n"
- "However, it is strongly recommended to install a local\n"
- "copy of MathJax from http://www.mathjax.org before deployment."
- );
- cs->setDefaultValue("http://cdn.mathjax.org/mathjax/latest");
- //----
- cl = cfg->addList(
- "MATHJAX_EXTENSIONS",
- "The MATHJAX_EXTENSIONS tag can be used to specify one or MathJax extension\n"
- "names that should be enabled during MathJax rendering."
- );
- cl->addDependency("USE_MATHJAX");
- //----
- cb = cfg->addBool(
- "SEARCHENGINE",
- "When the SEARCHENGINE tag is enabled doxygen will generate a search box\n"
- "for the HTML output. The underlying search engine uses javascript\n"
- "and DHTML and should work on any modern browser. Note that when using\n"
- "HTML help (GENERATE_HTMLHELP), Qt help (GENERATE_QHP), or docsets\n"
- "(GENERATE_DOCSET) there is already a search function so this one should\n"
- "typically be disabled. For large projects the javascript based search engine\n"
- "can be slow, then enabling SERVER_BASED_SEARCH may provide a better solution.",
- TRUE
- );
- cb->addDependency("GENERATE_HTML");
- //----
- cb = cfg->addBool(
- "SERVER_BASED_SEARCH",
- "When the SERVER_BASED_SEARCH tag is enabled the search engine will be\n"
- "implemented using a PHP enabled web server instead of at the web client\n"
- "using Javascript. Doxygen will generate the search PHP script and index\n"
- "file to put on the web server. The advantage of the server\n"
- "based approach is that it scales better to large projects and allows\n"
- "full text search. The disadvantages are that it is more difficult to setup\n"
- "and does not have live searching capabilities.",
- FALSE
- );
- cb->addDependency("SEARCHENGINE");
- //---------------------------------------------------------------------------
- cfg->addInfo("LaTeX","configuration options related to the LaTeX output");
- //---------------------------------------------------------------------------
-
- //----
- cb = cfg->addBool(
- "GENERATE_LATEX",
- "If the GENERATE_LATEX tag is set to YES (the default) Doxygen will\n"
- "generate Latex output.",
- TRUE
- );
- //----
- cs = cfg->addString(
- "LATEX_OUTPUT",
- "The LATEX_OUTPUT tag is used to specify where the LaTeX docs will be put.\n"
- "If a relative path is entered the value of OUTPUT_DIRECTORY will be\n"
- "put in front of it. If left blank `latex' will be used as the default path."
- );
- cs->setDefaultValue("latex");
- cs->setWidgetType(ConfigString::Dir);
- cs->addDependency("GENERATE_LATEX");
- //----
- cs = cfg->addString(
- "LATEX_CMD_NAME",
- "The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be\n"
- "invoked. If left blank `latex' will be used as the default command name.\n"
- "Note that when enabling USE_PDFLATEX this option is only used for\n"
- "generating bitmaps for formulas in the HTML output, but not in the\n"
- "Makefile that is written to the output directory."
- );
- cs->setDefaultValue("latex");
- cs->setWidgetType(ConfigString::File);
- cs->addDependency("GENERATE_LATEX");
- //----
- cs = cfg->addString(
- "MAKEINDEX_CMD_NAME",
- "The MAKEINDEX_CMD_NAME tag can be used to specify the command name to\n"
- "generate index for LaTeX. If left blank `makeindex' will be used as the\n"
- "default command name."
- );
- cs->setDefaultValue("makeindex");
- cs->setWidgetType(ConfigString::File);
- cs->addDependency("GENERATE_LATEX");
- //----
- cb = cfg->addBool(
- "COMPACT_LATEX",
- "If the COMPACT_LATEX tag is set to YES Doxygen generates more compact\n"
- "LaTeX documents. This may be useful for small projects and may help to\n"
- "save some trees in general.",
- FALSE
- );
- cb->addDependency("GENERATE_LATEX");
- //----
- ce = cfg->addEnum(
- "PAPER_TYPE",
- "The PAPER_TYPE tag can be used to set the paper type that is used\n"
- "by the printer. Possible values are: a4, letter, legal and\n"
- "executive. If left blank a4wide will be used.",
- "a4"
- );
- ce->addValue("a4");
- ce->addValue("a4wide");
- ce->addValue("letter");
- ce->addValue("legal");
- ce->addValue("executive");
- ce->addDependency("GENERATE_LATEX");
- //----
- cl = cfg->addList(
- "EXTRA_PACKAGES",
- "The EXTRA_PACKAGES tag can be to specify one or more names of LaTeX\n"
- "packages that should be included in the LaTeX output."
- );
- cl->addDependency("GENERATE_LATEX");
- //----
- cs = cfg->addString(
- "LATEX_HEADER",
- "The LATEX_HEADER tag can be used to specify a personal LaTeX header for\n"
- "the generated latex document. The header should contain everything until\n"
- "the first chapter. If it is left blank doxygen will generate a\n"
- "standard header. Notice: only use this tag if you know what you are doing!"
- );
- cs->setWidgetType(ConfigString::File);
- cs->addDependency("GENERATE_LATEX");
- //----
- cs = cfg->addString(
- "LATEX_FOOTER",
- "The LATEX_FOOTER tag can be used to specify a personal LaTeX footer for\n"
- "the generated latex document. The footer should contain everything after\n"
- "the last chapter. If it is left blank doxygen will generate a\n"
- "standard footer. Notice: only use this tag if you know what you are doing!"
- );
- cs->setWidgetType(ConfigString::File);
- cs->addDependency("GENERATE_LATEX");
- //----
- cb = cfg->addBool(
- "PDF_HYPERLINKS",
- "If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated\n"
- "is prepared for conversion to pdf (using ps2pdf). The pdf file will\n"
- "contain links (just like the HTML output) instead of page references\n"
- "This makes the output suitable for online browsing using a pdf viewer.",
- TRUE
- );
- cb->addDependency("GENERATE_LATEX");
- //----
- cb = cfg->addBool(
- "USE_PDFLATEX",
- "If the USE_PDFLATEX tag is set to YES, pdflatex will be used instead of\n"
- "plain latex in the generated Makefile. Set this option to YES to get a\n"
- "higher quality PDF documentation.",
- TRUE
- );
- cb->addDependency("GENERATE_LATEX");
- //----
- cb = cfg->addBool(
- "LATEX_BATCHMODE",
- "If the LATEX_BATCHMODE tag is set to YES, doxygen will add the \\\\batchmode.\n"
- "command to the generated LaTeX files. This will instruct LaTeX to keep\n"
- "running if errors occur, instead of asking the user for help.\n"
- "This option is also used when generating formulas in HTML.",
- FALSE
- );
- cb->addDependency("GENERATE_LATEX");
- //----
- cb = cfg->addBool(
- "LATEX_HIDE_INDICES",
- "If LATEX_HIDE_INDICES is set to YES then doxygen will not\n"
- "include the index chapters (such as File Index, Compound Index, etc.)\n"
- "in the output.",
- FALSE
- );
- cb->addDependency("GENERATE_LATEX");
- //----
- cb = cfg->addBool(
- "LATEX_SOURCE_CODE",
- "If LATEX_SOURCE_CODE is set to YES then doxygen will include\n"
- "source code with syntax highlighting in the LaTeX output.\n"
- "Note that which sources are shown also depends on other settings\n"
- "such as SOURCE_BROWSER.",
- FALSE
- );
- cb->addDependency("GENERATE_LATEX");
- //----
- cs = cfg->addString(
- "LATEX_BIB_STYLE",
- "The LATEX_BIB_STYLE tag can be used to specify the style to use for the\n"
- "bibliography, e.g. plainnat, or ieeetr. The default style is \"plain\". See\n"
- "http://en.wikipedia.org/wiki/BibTeX for more info."
- );
- cs->setDefaultValue("plain");
- //---------------------------------------------------------------------------
- cfg->addInfo("RTF","configuration options related to the RTF output");
- //---------------------------------------------------------------------------
-
- //----
- cb = cfg->addBool(
- "GENERATE_RTF",
- "If the GENERATE_RTF tag is set to YES Doxygen will generate RTF output\n"
- "The RTF output is optimized for Word 97 and may not look very pretty with\n"
- "other RTF readers or editors.",
- FALSE
- );
- //----
- cs = cfg->addString(
- "RTF_OUTPUT",
- "The RTF_OUTPUT tag is used to specify where the RTF docs will be put.\n"
- "If a relative path is entered the value of OUTPUT_DIRECTORY will be\n"
- "put in front of it. If left blank `rtf' will be used as the default path."
- );
- cs->setDefaultValue("rtf");
- cs->setWidgetType(ConfigString::Dir);
- cs->addDependency("GENERATE_RTF");
- //----
- cb = cfg->addBool(
- "COMPACT_RTF",
- "If the COMPACT_RTF tag is set to YES Doxygen generates more compact\n"
- "RTF documents. This may be useful for small projects and may help to\n"
- "save some trees in general.",
- FALSE
- );
- cb->addDependency("GENERATE_RTF");
- //----
- cb = cfg->addBool(
- "RTF_HYPERLINKS",
- "If the RTF_HYPERLINKS tag is set to YES, the RTF that is generated\n"
- "will contain hyperlink fields. The RTF file will\n"
- "contain links (just like the HTML output) instead of page references.\n"
- "This makes the output suitable for online browsing using WORD or other\n"
- "programs which support those fields.\n"
- "Note: wordpad (write) and others do not support links.",
- FALSE
- );
- cb->addDependency("GENERATE_RTF");
- //----
- cs = cfg->addString(
- "RTF_STYLESHEET_FILE",
- "Load style sheet definitions from file. Syntax is similar to doxygen's\n"
- "config file, i.e. a series of assignments. You only have to provide\n"
- "replacements, missing definitions are set to their default value."
- );
- cs->setWidgetType(ConfigString::File);
- cs->addDependency("GENERATE_RTF");
- //----
- cs = cfg->addString(
- "RTF_EXTENSIONS_FILE",
- "Set optional variables used in the generation of an rtf document.\n"
- "Syntax is similar to doxygen's config file."
- );
- cs->setWidgetType(ConfigString::File);
- cs->addDependency("GENERATE_RTF");
- //---------------------------------------------------------------------------
- cfg->addInfo("Man","configuration options related to the man page output");
- //---------------------------------------------------------------------------
-
- //----
- cb = cfg->addBool(
- "GENERATE_MAN",
- "If the GENERATE_MAN tag is set to YES (the default) Doxygen will\n"
- "generate man pages",
- FALSE
- );
- //----
- cs = cfg->addString(
- "MAN_OUTPUT",
- "The MAN_OUTPUT tag is used to specify where the man pages will be put.\n"
- "If a relative path is entered the value of OUTPUT_DIRECTORY will be\n"
- "put in front of it. If left blank `man' will be used as the default path."
- );
- cs->setDefaultValue("man");
- cs->setWidgetType(ConfigString::Dir);
- cs->addDependency("GENERATE_MAN");
- //----
- cs = cfg->addString(
- "MAN_EXTENSION",
- "The MAN_EXTENSION tag determines the extension that is added to\n"
- "the generated man pages (default is the subroutine's section .3)"
- );
- cs->setDefaultValue(".3");
- cs->addDependency("GENERATE_MAN");
- //----
- cb = cfg->addBool(
- "MAN_LINKS",
- "If the MAN_LINKS tag is set to YES and Doxygen generates man output,\n"
- "then it will generate one additional man file for each entity\n"
- "documented in the real man page(s). These additional files\n"
- "only source the real man page, but without them the man command\n"
- "would be unable to find the correct page. The default is NO.",
- FALSE
- );
- cb->addDependency("GENERATE_MAN");
- //---------------------------------------------------------------------------
- cfg->addInfo("XML","configuration options related to the XML output");
- //---------------------------------------------------------------------------
-
- //----
- cb = cfg->addBool(
- "GENERATE_XML",
- "If the GENERATE_XML tag is set to YES Doxygen will\n"
- "generate an XML file that captures the structure of\n"
- "the code including all documentation.",
- FALSE
- );
- //----
- cs = cfg->addString(
- "XML_OUTPUT",
- "The XML_OUTPUT tag is used to specify where the XML pages will be put.\n"
- "If a relative path is entered the value of OUTPUT_DIRECTORY will be\n"
- "put in front of it. If left blank `xml' will be used as the default path."
- );
- cs->setDefaultValue("xml");
- cs->setWidgetType(ConfigString::Dir);
- cs->addDependency("GENERATE_XML");
- //----
- cs = cfg->addString(
- "XML_SCHEMA",
- "The XML_SCHEMA tag can be used to specify an XML schema,\n"
- "which can be used by a validating XML parser to check the\n"
- "syntax of the XML files."
- );
- cs->addDependency("GENERATE_XML");
- //----
- cs = cfg->addString(
- "XML_DTD",
- "The XML_DTD tag can be used to specify an XML DTD,\n"
- "which can be used by a validating XML parser to check the\n"
- "syntax of the XML files."
- );
- cs->addDependency("GENERATE_XML");
- //----
- cb = cfg->addBool(
- "XML_PROGRAMLISTING",
- "If the XML_PROGRAMLISTING tag is set to YES Doxygen will\n"
- "dump the program listings (including syntax highlighting\n"
- "and cross-referencing information) to the XML output. Note that\n"
- "enabling this will significantly increase the size of the XML output.",
- TRUE
- );
- cb->addDependency("GENERATE_XML");
- //---------------------------------------------------------------------------
- cfg->addInfo("DEF","configuration options for the AutoGen Definitions output");
- //---------------------------------------------------------------------------
-
- //----
- cb = cfg->addBool(
- "GENERATE_AUTOGEN_DEF",
- "If the GENERATE_AUTOGEN_DEF tag is set to YES Doxygen will\n"
- "generate an AutoGen Definitions (see autogen.sf.net) file\n"
- "that captures the structure of the code including all\n"
- "documentation. Note that this feature is still experimental\n"
- "and incomplete at the moment.",
- FALSE
- );
- //---------------------------------------------------------------------------
- cfg->addInfo("PerlMod","configuration options related to the Perl module output");
- //---------------------------------------------------------------------------
-
- //----
- cb = cfg->addBool(
- "GENERATE_PERLMOD",
- "If the GENERATE_PERLMOD tag is set to YES Doxygen will\n"
- "generate a Perl module file that captures the structure of\n"
- "the code including all documentation. Note that this\n"
- "feature is still experimental and incomplete at the\n"
- "moment.",
- FALSE
- );
- //----
- cb = cfg->addBool(
- "PERLMOD_LATEX",
- "If the PERLMOD_LATEX tag is set to YES Doxygen will generate\n"
- "the necessary Makefile rules, Perl scripts and LaTeX code to be able\n"
- "to generate PDF and DVI output from the Perl module output.",
- FALSE
- );
- cb->addDependency("GENERATE_PERLMOD");
- //----
- cb = cfg->addBool(
- "PERLMOD_PRETTY",
- "If the PERLMOD_PRETTY tag is set to YES the Perl module output will be\n"
- "nicely formatted so it can be parsed by a human reader.\n"
- "This is useful\n"
- "if you want to understand what is going on.\n"
- "On the other hand, if this\n"
- "tag is set to NO the size of the Perl module output will be much smaller\n"
- "and Perl will parse it just the same.",
- TRUE
- );
- cb->addDependency("GENERATE_PERLMOD");
- //----
- cs = cfg->addString(
- "PERLMOD_MAKEVAR_PREFIX",
- "The names of the make variables in the generated doxyrules.make file\n"
- "are prefixed with the string contained in PERLMOD_MAKEVAR_PREFIX.\n"
- "This is useful so different doxyrules.make files included by the same\n"
- "Makefile don't overwrite each other's variables."
- );
- cs->addDependency("GENERATE_PERLMOD");
- //---------------------------------------------------------------------------
- cfg->addInfo("Preprocessor","Configuration options related to the preprocessor");
- //---------------------------------------------------------------------------
-
- //----
- cb = cfg->addBool(
- "ENABLE_PREPROCESSING",
- "If the ENABLE_PREPROCESSING tag is set to YES (the default) Doxygen will\n"
- "evaluate all C-preprocessor directives found in the sources and include\n"
- "files.",
- TRUE
- );
- //----
- cb = cfg->addBool(
- "MACRO_EXPANSION",
- "If the MACRO_EXPANSION tag is set to YES Doxygen will expand all macro\n"
- "names in the source code. If set to NO (the default) only conditional\n"
- "compilation will be performed. Macro expansion can be done in a controlled\n"
- "way by setting EXPAND_ONLY_PREDEF to YES.",
- FALSE
- );
- cb->addDependency("ENABLE_PREPROCESSING");
- //----
- cb = cfg->addBool(
- "EXPAND_ONLY_PREDEF",
- "If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES\n"
- "then the macro expansion is limited to the macros specified with the\n"
- "PREDEFINED and EXPAND_AS_DEFINED tags.",
- FALSE
- );
- cb->addDependency("ENABLE_PREPROCESSING");
- //----
- cb = cfg->addBool(
- "SEARCH_INCLUDES",
- "If the SEARCH_INCLUDES tag is set to YES (the default) the includes files\n"
- "pointed to by INCLUDE_PATH will be searched when a #include is found.",
- TRUE
- );
- cb->addDependency("ENABLE_PREPROCESSING");
- //----
- cl = cfg->addList(
- "INCLUDE_PATH",
- "The INCLUDE_PATH tag can be used to specify one or more directories that\n"
- "contain include files that are not input files but should be processed by\n"
- "the preprocessor."
- );
- cl->addDependency("ENABLE_PREPROCESSING");
- cl->setWidgetType(ConfigList::Dir);
- //----
- cl = cfg->addList(
- "INCLUDE_FILE_PATTERNS",
- "You can use the INCLUDE_FILE_PATTERNS tag to specify one or more wildcard\n"
- "patterns (like *.h and *.hpp) to filter out the header-files in the\n"
- "directories. If left blank, the patterns specified with FILE_PATTERNS will\n"
- "be used."
- );
- cl->addDependency("ENABLE_PREPROCESSING");
- //----
- cl = cfg->addList(
- "PREDEFINED",
- "The PREDEFINED tag can be used to specify one or more macro names that\n"
- "are defined before the preprocessor is started (similar to the -D option of\n"
- "gcc). The argument of the tag is a list of macros of the form: name\n"
- "or name=definition (no spaces). If the definition and the = are\n"
- "omitted =1 is assumed. To prevent a macro definition from being\n"
- "undefined via #undef or recursively expanded use the := operator\n"
- "instead of the = operator."
- );
- cl->addDependency("ENABLE_PREPROCESSING");
- //----
- cl = cfg->addList(
- "EXPAND_AS_DEFINED",
- "If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then\n"
- "this tag can be used to specify a list of macro names that should be expanded.\n"
- "The macro definition that is found in the sources will be used.\n"
- "Use the PREDEFINED tag if you want to use a different macro definition that\n"
- "overrules the definition found in the source code."
- );
- cl->addDependency("ENABLE_PREPROCESSING");
- //----
- cb = cfg->addBool(
- "SKIP_FUNCTION_MACROS",
- "If the SKIP_FUNCTION_MACROS tag is set to YES (the default) then\n"
- "doxygen's preprocessor will remove all references to function-like macros\n"
- "that are alone on a line, have an all uppercase name, and do not end with a\n"
- "semicolon, because these will confuse the parser if not removed.",
- TRUE
- );
- cb->addDependency("ENABLE_PREPROCESSING");
- //---------------------------------------------------------------------------
- cfg->addInfo("External","Configuration::additions related to external references");
- //---------------------------------------------------------------------------
-
- //----
- cl = cfg->addList(
- "TAGFILES",
- "The TAGFILES option can be used to specify one or more tagfiles. For each\n"
- "tag file the location of the external documentation should be added. The\n"
- "format of a tag file without this location is as follows:\n"
- "\n"
- "TAGFILES = file1 file2 ...\n"
- "Adding location for the tag files is done as follows:\n"
- "\n"
- "TAGFILES = file1=loc1 \"file2 = loc2\" ...\n"
- "where \"loc1\" and \"loc2\" can be relative or absolute paths\n"
- "or URLs. Note that each tag file must have a unique name (where the name does\n"
- "NOT include the path). If a tag file is not located in the directory in which\n"
- "doxygen is run, you must also specify the path to the tagfile here."
- );
- cl->setWidgetType(ConfigList::File);
- //----
- cs = cfg->addString(
- "GENERATE_TAGFILE",
- "When a file name is specified after GENERATE_TAGFILE, doxygen will create\n"
- "a tag file that is based on the input files it reads."
- );
- cs->setWidgetType(ConfigString::File);
- //----
- cb = cfg->addBool(
- "ALLEXTERNALS",
- "If the ALLEXTERNALS tag is set to YES all external classes will be listed\n"
- "in the class index. If set to NO only the inherited external classes\n"
- "will be listed.",
- FALSE
- );
- //----
- cb = cfg->addBool(
- "EXTERNAL_GROUPS",
- "If the EXTERNAL_GROUPS tag is set to YES all external groups will be listed\n"
- "in the modules index. If set to NO, only the current project's groups will\n"
- "be listed.",
- TRUE
- );
- //----
- cs = cfg->addString(
- "PERL_PATH",
- "The PERL_PATH should be the absolute path and name of the perl script\n"
- "interpreter (i.e. the result of `which perl')."
- );
- cs->setDefaultValue("/usr/bin/perl");
- cs->setWidgetType(ConfigString::Dir);
- //---------------------------------------------------------------------------
- cfg->addInfo("Dot","Configuration options related to the dot tool");
- //---------------------------------------------------------------------------
-
- //----
- cb = cfg->addBool(
- "CLASS_DIAGRAMS",
- "If the CLASS_DIAGRAMS tag is set to YES (the default) Doxygen will\n"
- "generate a inheritance diagram (in HTML, RTF and LaTeX) for classes with base\n"
- "or super classes. Setting the tag to NO turns the diagrams off. Note that\n"
- "this option also works with HAVE_DOT disabled, but it is recommended to\n"
- "install and use dot, since it yields more powerful graphs.",
- TRUE
- );
- //----
- cs = cfg->addString(
- "MSCGEN_PATH",
- "You can define message sequence charts within doxygen comments using the \\msc\n"
- "command. Doxygen will then run the mscgen tool (see\n"
- "http://www.mcternan.me.uk/mscgen/) to produce the chart and insert it in the\n"
- "documentation. The MSCGEN_PATH tag allows you to specify the directory where\n"
- "the mscgen tool resides. If left empty the tool is assumed to be found in the\n"
- "default search path."
- );
- //----
- cb = cfg->addBool(
- "HIDE_UNDOC_RELATIONS",
- "If set to YES, the inheritance and collaboration graphs will hide\n"
- "inheritance and usage relations if the target is undocumented\n"
- "or is not a class.",
- TRUE
- );
- //----
- cb = cfg->addBool(
- "HAVE_DOT",
- "If you set the HAVE_DOT tag to YES then doxygen will assume the dot tool is\n"
- "available from the path. This tool is part of Graphviz, a graph visualization\n"
- "toolkit from AT&T and Lucent Bell Labs. The other options in this section\n"
- "have no effect if this option is set to NO (the default)",
- FALSE
- );
- //----
- ci = cfg->addInt(
- "DOT_NUM_THREADS",
- "The DOT_NUM_THREADS specifies the number of dot invocations doxygen is\n"
- "allowed to run in parallel. When set to 0 (the default) doxygen will\n"
- "base this on the number of processors available in the system. You can set it\n"
- "explicitly to a value larger than 0 to get control over the balance\n"
- "between CPU load and processing speed.",
- 0,32,0
- );
- //----
- cs = cfg->addString(
- "DOT_FONTNAME",
- "By default doxygen will use the Helvetica font for all dot files that\n"
- "doxygen generates. When you want a differently looking font you can specify\n"
- "the font name using DOT_FONTNAME. You need to make sure dot is able to find\n"
- "the font, which can be done by putting it in a standard location or by setting\n"
- "the DOTFONTPATH environment variable or by setting DOT_FONTPATH to the\n"
- "directory containing the font."
- );
- cs->setDefaultValue("Helvetica");
- cs->addDependency("HAVE_DOT");
- //----
- ci = cfg->addInt(
- "DOT_FONTSIZE",
- "The DOT_FONTSIZE tag can be used to set the size of the font of dot graphs.\n"
- "The default size is 10pt.",
- 4,24,10
- );
- ci->addDependency("HAVE_DOT");
- //----
- cs = cfg->addString(
- "DOT_FONTPATH",
- "By default doxygen will tell dot to use the Helvetica font.\n"
- "If you specify a different font using DOT_FONTNAME you can use DOT_FONTPATH to\n"
- "set the path where dot can find it."
- );
- cs->addDependency("HAVE_DOT");
- //----
- cb = cfg->addBool(
- "CLASS_GRAPH",
- "If the CLASS_GRAPH and HAVE_DOT tags are set to YES then doxygen\n"
- "will generate a graph for each documented class showing the direct and\n"
- "indirect inheritance relations. Setting this tag to YES will force the\n"
- "CLASS_DIAGRAMS tag to NO.",
- TRUE
- );
- cb->addDependency("HAVE_DOT");
- //----
- cb = cfg->addBool(
- "COLLABORATION_GRAPH",
- "If the COLLABORATION_GRAPH and HAVE_DOT tags are set to YES then doxygen\n"
- "will generate a graph for each documented class showing the direct and\n"
- "indirect implementation dependencies (inheritance, containment, and\n"
- "class references variables) of the class with other documented classes.",
- TRUE
- );
- cb->addDependency("HAVE_DOT");
- //----
- cb = cfg->addBool(
- "GROUP_GRAPHS",
- "If the GROUP_GRAPHS and HAVE_DOT tags are set to YES then doxygen\n"
- "will generate a graph for groups, showing the direct groups dependencies",
- TRUE
- );
- cb->addDependency("HAVE_DOT");
- //----
- cb = cfg->addBool(
- "UML_LOOK",
- "If the UML_LOOK tag is set to YES doxygen will generate inheritance and\n"
- "collaboration diagrams in a style similar to the OMG's Unified Modeling\n"
- "Language.",
- FALSE
- );
- cb->addDependency("HAVE_DOT");
- //----
- ci = cfg->addInt(
- "UML_LIMIT_NUM_FIELDS",
- "If the UML_LOOK tag is enabled, the fields and methods are shown inside\n"
- "the class node. If there are many fields or methods and many nodes the\n"
- "graph may become too big to be useful. The UML_LIMIT_NUM_FIELDS\n"
- "threshold limits the number of items for each type to make the size more\n"
- "managable. Set this to 0 for no limit. Note that the threshold may be\n"
- "exceeded by 50% before the limit is enforced.",
- 0,100,10
- );
- ci->addDependency("HAVE_DOT");
- //----
- cb = cfg->addBool(
- "TEMPLATE_RELATIONS",
- "If set to YES, the inheritance and collaboration graphs will show the\n"
- "relations between templates and their instances.",
- FALSE
- );
- cb->addDependency("HAVE_DOT");
- //----
- cb = cfg->addBool(
- "INCLUDE_GRAPH",
- "If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDE_GRAPH, and HAVE_DOT\n"
- "tags are set to YES then doxygen will generate a graph for each documented\n"
- "file showing the direct and indirect include dependencies of the file with\n"
- "other documented files.",
- TRUE
- );
- cb->addDependency("HAVE_DOT");
- //----
- cb = cfg->addBool(
- "INCLUDED_BY_GRAPH",
- "If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDED_BY_GRAPH, and\n"
- "HAVE_DOT tags are set to YES then doxygen will generate a graph for each\n"
- "documented header file showing the documented files that directly or\n"
- "indirectly include this file.",
- TRUE
- );
- cb->addDependency("HAVE_DOT");
- //----
- cb = cfg->addBool(
- "CALL_GRAPH",
- "If the CALL_GRAPH and HAVE_DOT options are set to YES then\n"
- "doxygen will generate a call dependency graph for every global function\n"
- "or class method. Note that enabling this option will significantly increase\n"
- "the time of a run. So in most cases it will be better to enable call graphs\n"
- "for selected functions only using the \\callgraph command.",
- FALSE
- );
- cb->addDependency("HAVE_DOT");
- //----
- cb = cfg->addBool(
- "CALLER_GRAPH",
- "If the CALLER_GRAPH and HAVE_DOT tags are set to YES then\n"
- "doxygen will generate a caller dependency graph for every global function\n"
- "or class method. Note that enabling this option will significantly increase\n"
- "the time of a run. So in most cases it will be better to enable caller\n"
- "graphs for selected functions only using the \\callergraph command.",
- FALSE
- );
- cb->addDependency("HAVE_DOT");
- //----
- cb = cfg->addBool(
- "GRAPHICAL_HIERARCHY",
- "If the GRAPHICAL_HIERARCHY and HAVE_DOT tags are set to YES then doxygen\n"
- "will generate a graphical hierarchy of all classes instead of a textual one.",
- TRUE
- );
- cb->addDependency("HAVE_DOT");
- //----
- cb = cfg->addBool(
- "DIRECTORY_GRAPH",
- "If the DIRECTORY_GRAPH, SHOW_DIRECTORIES and HAVE_DOT tags are set to YES\n"
- "then doxygen will show the dependencies a directory has on other directories\n"
- "in a graphical way. The dependency relations are determined by the #include\n"
- "relations between the files in the directories.",
- TRUE
- );
- cb->addDependency("HAVE_DOT");
- //----
- ce = cfg->addEnum(
- "DOT_IMAGE_FORMAT",
- "The DOT_IMAGE_FORMAT tag can be used to set the image format of the images\n"
- "generated by dot. Possible values are svg, png, jpg, or gif.\n"
- "If left blank png will be used. If you choose svg you need to set\n"
- "HTML_FILE_EXTENSION to xhtml in order to make the SVG files\n"
- "visible in IE 9+ (other browsers do not have this requirement).",
- "png"
- );
- ce->addValue("png");
- ce->addValue("jpg");
- ce->addValue("gif");
- ce->addValue("svg");
- ce->addDependency("HAVE_DOT");
- //----
- cb = cfg->addBool(
- "INTERACTIVE_SVG",
- "If DOT_IMAGE_FORMAT is set to svg, then this option can be set to YES to\n"
- "enable generation of interactive SVG images that allow zooming and panning.\n"
- "Note that this requires a modern browser other than Internet Explorer.\n"
- "Tested and working are Firefox, Chrome, Safari, and Opera. For IE 9+ you\n"
- "need to set HTML_FILE_EXTENSION to xhtml in order to make the SVG files\n"
- "visible. Older versions of IE do not have SVG support.",
- FALSE
- );
- cb->addDependency("HAVE_DOT");
- //----
- cs = cfg->addString(
- "DOT_PATH",
- "The tag DOT_PATH can be used to specify the path where the dot tool can be\n"
- "found. If left blank, it is assumed the dot tool can be found in the path."
- );
- cs->setWidgetType(ConfigString::Dir);
- cs->addDependency("HAVE_DOT");
- //----
- cl = cfg->addList(
- "DOTFILE_DIRS",
- "The DOTFILE_DIRS tag can be used to specify one or more directories that\n"
- "contain dot files that are included in the documentation (see the\n"
- "\\dotfile command)."
- );
- cl->addDependency("HAVE_DOT");
- cl->setWidgetType(ConfigList::Dir);
- //----
- cl = cfg->addList(
- "MSCFILE_DIRS",
- "The MSCFILE_DIRS tag can be used to specify one or more directories that\n"
- "contain msc files that are included in the documentation (see the\n"
- "\\mscfile command)."
- );
- cl->setWidgetType(ConfigList::Dir);
- //----
- ci = cfg->addInt(
- "DOT_GRAPH_MAX_NODES",
- "The DOT_GRAPH_MAX_NODES tag can be used to set the maximum number of\n"
- "nodes that will be shown in the graph. If the number of nodes in a graph\n"
- "becomes larger than this value, doxygen will truncate the graph, which is\n"
- "visualized by representing a node as a red box. Note that doxygen if the\n"
- "number of direct children of the root node in a graph is already larger than\n"
- "DOT_GRAPH_MAX_NODES then the graph will not be shown at all. Also note\n"
- "that the size of a graph can be further restricted by MAX_DOT_GRAPH_DEPTH.",
- 0,10000,50
- );
- ci->addDependency("HAVE_DOT");
- //----
- ci = cfg->addInt(
- "MAX_DOT_GRAPH_DEPTH",
- "The MAX_DOT_GRAPH_DEPTH tag can be used to set the maximum depth of the\n"
- "graphs generated by dot. A depth value of 3 means that only nodes reachable\n"
- "from the root by following a path via at most 3 edges will be shown. Nodes\n"
- "that lay further from the root node will be omitted. Note that setting this\n"
- "option to 1 or 2 may greatly reduce the computation time needed for large\n"
- "code bases. Also note that the size of a graph can be further restricted by\n"
- "DOT_GRAPH_MAX_NODES. Using a depth of 0 means no depth restriction.",
- 0,1000,0
- );
- ci->addDependency("HAVE_DOT");
- //----
- cb = cfg->addBool(
- "DOT_TRANSPARENT",
- "Set the DOT_TRANSPARENT tag to YES to generate images with a transparent\n"
- "background. This is disabled by default, because dot on Windows does not\n"
- "seem to support this out of the box. Warning: Depending on the platform used,\n"
- "enabling this option may lead to badly anti-aliased labels on the edges of\n"
- "a graph (i.e. they become hard to read).",
- FALSE
- );
- cb->addDependency("HAVE_DOT");
- //----
- cb = cfg->addBool(
- "DOT_MULTI_TARGETS",
- "Set the DOT_MULTI_TARGETS tag to YES allow dot to generate multiple output\n"
- "files in one run (i.e. multiple -o and -T options on the command line). This\n"
- "makes dot run faster, but since only newer versions of dot (>1.8.10)\n"
- "support this, this feature is disabled by default.",
- FALSE
- );
- cb->addDependency("HAVE_DOT");
- //----
- cb = cfg->addBool(
- "GENERATE_LEGEND",
- "If the GENERATE_LEGEND tag is set to YES (the default) Doxygen will\n"
- "generate a legend page explaining the meaning of the various boxes and\n"
- "arrows in the dot generated graphs.",
- TRUE
- );
- cb->addDependency("HAVE_DOT");
- //----
- cb = cfg->addBool(
- "DOT_CLEANUP",
- "If the DOT_CLEANUP tag is set to YES (the default) Doxygen will\n"
- "remove the intermediate dot files that are used to generate\n"
- "the various graphs.",
- TRUE
- );
- cb->addDependency("HAVE_DOT");
- //----
- cfg->addObsolete("USE_WINDOWS_ENCODING");
- //----
- cfg->addObsolete("DETAILS_AT_TOP");
- //----
- cfg->addObsolete("QTHELP_FILE");
- //----
- cfg->addObsolete("QTHELP_CONFIG");
- //----
- cfg->addObsolete("DOXYGEN2QTHELP_LOC");
- //----
- cfg->addObsolete("MAX_DOT_GRAPH_WIDTH");
- //----
- cfg->addObsolete("MAX_DOT_GRAPH_HEIGHT");
- //----
- cfg->addObsolete("CGI_NAME");
- //----
- cfg->addObsolete("CGI_URL");
- //----
- cfg->addObsolete("DOC_URL");
- //----
- cfg->addObsolete("DOC_ABSPATH");
- //----
- cfg->addObsolete("BIN_ABSPATH");
- //----
- cfg->addObsolete("EXT_DOC_PATHS");
-}
diff --git a/trunk/src/configoptions.h b/trunk/src/configoptions.h
deleted file mode 100644
index 8bf94d5..0000000
--- a/trunk/src/configoptions.h
+++ /dev/null
@@ -1,26 +0,0 @@
-/******************************************************************************
- *
- *
- *
- *
- * Copyright (C) 1997-2012 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.
- *
- */
-
-#ifndef CONFIGOPTIONS
-#define CONFIGOPTIONS
-
-class Config;
-
-void addConfigOptions(Config *cfg);
-
-#endif
diff --git a/trunk/src/constexp.h b/trunk/src/constexp.h
deleted file mode 100644
index 8fedc34..0000000
--- a/trunk/src/constexp.h
+++ /dev/null
@@ -1,33 +0,0 @@
-/******************************************************************************
- *
- *
- *
- *
- * Copyright (C) 1997-2012 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.
- *
- */
-
-#ifndef _CONSTEXP_H
-#define _CONSTEXP_H
-
-#include "qtbc.h"
-#include "cppvalue.h"
-
-extern bool parseCppExpression(const char *fileName,int line,const QCString &s);
-extern int cppExpYYparse();
-extern int cppExpYYdebug;
-extern QCString g_strToken;
-extern CPPValue g_resultValue;
-extern QCString g_constExpFileName;
-extern int g_constExpLineNr;
-
-#endif
diff --git a/trunk/src/constexp.l b/trunk/src/constexp.l
deleted file mode 100644
index fae99cf..0000000
--- a/trunk/src/constexp.l
+++ /dev/null
@@ -1,120 +0,0 @@
-/******************************************************************************
- *
- *
- *
- *
- * Copyright (C) 1997-2012 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.
- *
- */
-
-%{
-
-#include "constexp.h"
-#include "cppvalue.h"
-#include "ce_parse.h" // generated header file
-
-#define YY_NEVER_INTERACTIVE 1
-
-QCString g_strToken;
-CPPValue g_resultValue;
-int g_constExpLineNr;
-QCString g_constExpFileName;
-
-static const char *g_inputString;
-static int g_inputPosition;
-
-#undef YY_INPUT
-#define YY_INPUT(buf,result,max_size) result=yyread(buf,max_size);
-
-static int yyread(char *buf,int max_size)
-{
- int c=0;
- while( c < max_size && g_inputString[g_inputPosition] )
- {
- *buf = g_inputString[g_inputPosition++] ;
- c++; buf++;
- }
- return c;
-}
-
-%}
-
-CONSTSUFFIX ([uU][lL]?[lL]?)|([lL][lL]?[uU]?)
-
-%option nounput
-
-%%
-
-"?" { return TOK_QUESTIONMARK; }
-":" { return TOK_COLON; }
-"||" { return TOK_OR; }
-"&&" { return TOK_AND; }
-"|" { return TOK_BITWISEOR; }
-"^" { return TOK_BITWISEXOR; }
-"&" { return TOK_AMPERSAND; }
-"!=" { return TOK_NOTEQUAL; }
-"==" { return TOK_EQUAL; }
-"<" { return TOK_LESSTHAN; }
-">" { return TOK_GREATERTHAN; }
-"<=" { return TOK_LESSTHANOREQUALTO; }
-">=" { return TOK_GREATERTHANOREQUALTO; }
-"<<" { return TOK_SHIFTLEFT; }
-">>" { return TOK_SHIFTRIGHT; }
-"+" { return TOK_PLUS; }
-"-" { return TOK_MINUS; }
-"*" { return TOK_STAR; }
-"/" { return TOK_DIVIDE; }
-"%" { return TOK_MOD; }
-"~" { return TOK_TILDE; }
-"!" { return TOK_NOT; }
-"(" { return TOK_LPAREN; }
-")" { return TOK_RPAREN; }
-"'"(([^\'\n\r\\]+)|(\\(([ntvbrfa\\?'\"])|([0-9]+)|([xX][0-9a-fA-F]+))))"'" {
- g_strToken=yytext;
- return TOK_CHARACTER;
- }
-0[0-7]*{CONSTSUFFIX}? { g_strToken=yytext;
- return TOK_OCTALINT;
- }
-[1-9][0-9]*{CONSTSUFFIX}? { g_strToken=yytext;
- return TOK_DECIMALINT;
- }
-(0x|0X)[0-9a-fA-F]+{CONSTSUFFIX}? { g_strToken=yytext+2;
- return TOK_HEXADECIMALINT;
- }
-(([0-9]+\.[0-9]*)|([0-9]*\.[0-9]+))([eE]([\-\+])?[0-9]+)?([fFlL])? {
- g_strToken=yytext; return TOK_FLOAT;
- }
-([0-9]+[eE])([\-\+])?[0-9]+([fFlL])? {
- g_strToken=yytext; return TOK_FLOAT;
- }
-.
-\n
-
-%%
-
-bool parseCppExpression(const char *fileName,int lineNr,const QCString &s)
-{
- //printf("Expression: `%s'\n",s.data());
- g_constExpFileName = fileName;
- g_constExpLineNr = lineNr;
- g_inputString = s;
- g_inputPosition = 0;
- cppExpYYrestart( cppExpYYin );
- cppExpYYparse();
- //printf("Result: %ld\n",(long)g_resultValue);
- return (long)g_resultValue!=0;
-}
-
-extern "C" {
- int cppExpYYwrap() { return 1; }
-}
diff --git a/trunk/src/constexp.y b/trunk/src/constexp.y
deleted file mode 100644
index c8b35e5..0000000
--- a/trunk/src/constexp.y
+++ /dev/null
@@ -1,278 +0,0 @@
-/******************************************************************************
- *
- *
- *
- *
- * Copyright (C) 1997-2012 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.
- *
- */
-
-%{
-
-#include "cppvalue.h"
-#include "constexp.h"
-#include "message.h"
-
-#if defined(_MSC_VER)
-#define MSDOS
-#endif
-
-#define YYSTYPE CPPValue
-
-#include <stdio.h>
-#include <stdlib.h>
-
-int cppExpYYerror(const char *s)
-{
- warn(g_constExpFileName,g_constExpLineNr,
- "warning: preprocessing issue while doing constant expression evaluation: %s",s);
- return 0;
-}
-
-int cppExpYYlex();
-
-%}
-
-%token TOK_QUESTIONMARK
-%token TOK_COLON
-%token TOK_OR
-%token TOK_AND
-%token TOK_BITWISEOR
-%token TOK_BITWISEXOR
-%token TOK_AMPERSAND
-%token TOK_NOTEQUAL
-%token TOK_EQUAL
-%token TOK_LESSTHAN
-%token TOK_GREATERTHAN
-%token TOK_LESSTHANOREQUALTO
-%token TOK_GREATERTHANOREQUALTO
-%token TOK_SHIFTLEFT
-%token TOK_SHIFTRIGHT
-%token TOK_PLUS
-%token TOK_MINUS
-%token TOK_STAR
-%token TOK_DIVIDE
-%token TOK_MOD
-%token TOK_TILDE
-%token TOK_NOT
-%token TOK_LPAREN
-%token TOK_RPAREN
-%token TOK_OCTALINT
-%token TOK_DECIMALINT
-%token TOK_HEXADECIMALINT
-%token TOK_CHARACTER
-%token TOK_FLOAT
-
-%%
-
-start: constant_expression
- { g_resultValue = $1; return 0; }
-;
-
-constant_expression: logical_or_expression
- { $$ = $1; }
- | logical_or_expression
- TOK_QUESTIONMARK logical_or_expression
- TOK_COLON logical_or_expression
- {
- bool c = ($1.isInt() ? ((long)$1 != 0) : ((double)$1 != 0.0));
- $$ = c ? $3 : $5;
- }
-;
-
-logical_or_expression: logical_and_expression
- { $$ = $1; }
- | logical_or_expression TOK_OR logical_and_expression
- {
- $$ = CPPValue( (long)((long)$1 || (long)$3) );
- }
-;
-
-logical_and_expression: inclusive_or_expression
- { $$ = $1; }
- | logical_and_expression TOK_AND inclusive_or_expression
- {
- $$ = CPPValue( (long)((long)$1 && (long)$3) );
- }
-;
-
-inclusive_or_expression: exclusive_or_expression
- { $$ = $1; }
- | inclusive_or_expression TOK_BITWISEOR
- exclusive_or_expression
- {
- $$ = CPPValue( (long)$1 | (long)$3 );
- }
-;
-
-exclusive_or_expression: and_expression
- { $$ = $1; }
- | exclusive_or_expression TOK_BITWISEXOR and_expression
- {
- $$ = CPPValue( (long)$1 ^ (long)$3 );
- }
-;
-
-and_expression: equality_expression
- { $$ = $1; }
- | and_expression TOK_AMPERSAND equality_expression
- {
- $$ = CPPValue( (long)$1 & (long)$3 );
- }
-;
-
-equality_expression: relational_expression
- { $$ = $1; }
- | equality_expression TOK_EQUAL relational_expression
- {
- $$ = CPPValue( (long)((double)$1 == (double)$3) );
- }
- | equality_expression TOK_NOTEQUAL relational_expression
- {
- $$ = CPPValue( (long)((double)$1 != (double)$3) );
- }
-;
-
-relational_expression: shift_expression
- { $$ = $1; }
- | relational_expression TOK_LESSTHAN shift_expression
- {
- $$ = CPPValue( (long)((double)$1 < (double)$3) );
- }
- | relational_expression TOK_GREATERTHAN shift_expression
- {
- $$ = CPPValue( (long)((double)$1 > (double)$3) );
- }
- | relational_expression TOK_LESSTHANOREQUALTO
- shift_expression
- {
- $$ = CPPValue( (long)((double)$1 <= (double)$3) );
- }
- | relational_expression TOK_GREATERTHANOREQUALTO
- shift_expression
- {
- $$ = CPPValue( (long)((double)$1 >= (double)$3) );
- }
-;
-
-shift_expression: additive_expression
- { $$ = $1; }
- | shift_expression TOK_SHIFTLEFT additive_expression
- {
- $$ = CPPValue( (long)$1 << (long)$3 );
- }
- | shift_expression TOK_SHIFTRIGHT additive_expression
- {
- $$ = CPPValue( (long)$1 >> (long)$3 );
- }
-;
-
-additive_expression: multiplicative_expression
- { $$ = $1; }
- | additive_expression TOK_PLUS multiplicative_expression
- {
- if (!$1.isInt() || !$3.isInt())
- {
- $$ = CPPValue( (double)$1 + (double)$3 );
- }
- else
- {
- $$ = CPPValue( (long)$1 + (long)$3 );
- }
- }
- | additive_expression TOK_MINUS multiplicative_expression
- {
- if (!$1.isInt() || !$3.isInt())
- {
- $$ = CPPValue( (double)$1 - (double)$3 );
- }
- else
- {
- $$ = CPPValue( (long)$1 - (long)$3 );
- }
- }
-;
-
-multiplicative_expression: unary_expression
- { $$ = $1; }
- | multiplicative_expression TOK_STAR unary_expression
- {
- if (!$1.isInt() || !$3.isInt())
- {
- $$ = CPPValue( (double)$1 * (double)$3 );
- }
- else
- {
- $$ = CPPValue( (long)$1 * (long)$3 );
- }
- }
- | multiplicative_expression TOK_DIVIDE unary_expression
- {
- if (!$1.isInt() || !$3.isInt())
- {
- $$ = CPPValue( (double)$1 / (double)$3 );
- }
- else
- {
- long value = $3;
- if (value==0) value=1;
- $$ = CPPValue( (long)$1 / value );
- }
- }
- | multiplicative_expression TOK_MOD unary_expression
- {
- long value = $3;
- if (value==0) value=1;
- $$ = CPPValue( (long)$1 % value );
- }
-;
-
-unary_expression: primary_expression
- { $$ = $1; }
- | TOK_PLUS unary_expression
- { $$ = $1; }
- | TOK_MINUS unary_expression
- {
- if ($2.isInt())
- $$ = CPPValue(-(long)$2);
- else
- $$ = CPPValue(-(double)$2);
- }
- | TOK_TILDE unary_expression
- {
- $$ = CPPValue(~(long)$2);
- }
- | TOK_NOT unary_expression
- {
- $$ = CPPValue((long)!(long)$2);
- }
-;
-
-primary_expression: constant
- { $$ = $1; }
- | TOK_LPAREN constant_expression TOK_RPAREN
- { $$ = $2; }
-;
-
-constant: TOK_OCTALINT
- { $$ = parseOctal(); }
- | TOK_DECIMALINT
- { $$ = parseDecimal(); }
- | TOK_HEXADECIMALINT
- { $$ = parseHexadecimal(); }
- | TOK_CHARACTER
- { $$ = parseCharacter(); }
- | TOK_FLOAT
- { $$ = parseFloat(); }
-;
-
-%%
diff --git a/trunk/src/cppvalue.cpp b/trunk/src/cppvalue.cpp
deleted file mode 100644
index 69b8be4..0000000
--- a/trunk/src/cppvalue.cpp
+++ /dev/null
@@ -1,95 +0,0 @@
-/******************************************************************************
- *
- *
- *
- *
- * Copyright (C) 1997-2012 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.
- *
- */
-
-#include <stdlib.h>
-
-#include "cppvalue.h"
-#include "constexp.h"
-
-CPPValue parseOctal()
-{
- long val = 0;
- for (const char *p = g_strToken.data(); *p != 0; p++)
- {
- if (*p >= '0' && *p <= '7') val = val * 8 + *p - '0';
- }
- return CPPValue(val);
-}
-
-CPPValue parseDecimal()
-{
- long val = 0;
- for (const char *p = g_strToken.data(); *p != 0; p++)
- {
- if (*p >= '0' && *p <= '9') val = val * 10 + *p - '0';
- }
- return CPPValue(val);
-}
-
-CPPValue parseHexadecimal()
-{
- long val = 0;
- for (const char *p = g_strToken.data(); *p != 0; p++)
- {
- if (*p >= '0' && *p <= '9') val = val * 16 + *p - '0';
- else if (*p >= 'a' && *p <= 'f') val = val * 16 + *p - 'a' + 10;
- else if (*p >= 'A' && *p <= 'F') val = val * 16 + *p - 'A' + 10;
- }
- //printf("parseHexadecimal %s->%x\n",g_strToken.data(),val);
- return CPPValue(val);
-}
-
-CPPValue parseCharacter() // does not work for '\n' and the alike
-{
- if (g_strToken[1]=='\\')
- {
- switch(g_strToken[2])
- {
- case 'n': return CPPValue((long)'\n');
- case 't': return CPPValue((long)'\t');
- case 'v': return CPPValue((long)'\v');
- case 'b': return CPPValue((long)'\b');
- case 'r': return CPPValue((long)'\r');
- case 'f': return CPPValue((long)'\f');
- case 'a': return CPPValue((long)'\a');
- case '\\': return CPPValue((long)'\\');
- case '?': return CPPValue((long)'\?');
- case '\'': return CPPValue((long)'\'');
- case '"': return CPPValue((long)'"');
- case '0': // fall through
- case '1': // fall through
- case '2': // fall through
- case '3': // fall through
- case '4': // fall through
- case '5': // fall through
- case '6': // fall through
- case '7': // fall through
- return parseOctal();
- case 'x':
- case 'X': return parseHexadecimal();
- default: printf("Invalid escape sequence %s found!\n",g_strToken.data());
- return CPPValue(0L);
- }
- }
- return CPPValue((long)g_strToken[1]);
-}
-
-CPPValue parseFloat()
-{
- return CPPValue(atof(g_strToken));
-}
diff --git a/trunk/src/cppvalue.h b/trunk/src/cppvalue.h
deleted file mode 100644
index d3e2a1d..0000000
--- a/trunk/src/cppvalue.h
+++ /dev/null
@@ -1,62 +0,0 @@
-/******************************************************************************
- *
- *
- *
- *
- * Copyright (C) 1997-2012 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.
- *
- */
-
-#ifndef _CPPVALUE_H
-#define _CPPVALUE_H
-
-#include <stdio.h>
-#include <qglobal.h>
-
-class CPPValue
-{
- public:
-
-
- enum Type { Int, Float };
-
- CPPValue(long val=0) : type(Int) { v.l = val; }
- CPPValue(double val) : type(Float) { v.d = val; }
-
- operator double () const { return type==Int ? (double)v.l : v.d; }
- operator long () const { return type==Int ? v.l : (long)v.d; }
-
- bool isInt() const { return type == Int; }
-
- void print() const
- {
- if (type==Int)
- printf("(%ld)\n",v.l);
- else
- printf("(%f)\n",v.d);
- }
-
- private:
- Type type;
- union {
- double d;
- long l;
- } v;
-};
-
-extern CPPValue parseOctal();
-extern CPPValue parseDecimal();
-extern CPPValue parseHexadecimal();
-extern CPPValue parseCharacter();
-extern CPPValue parseFloat();
-
-#endif
diff --git a/trunk/src/dbusxmlscanner.cpp b/trunk/src/dbusxmlscanner.cpp
deleted file mode 100644
index 51b0a59..0000000
--- a/trunk/src/dbusxmlscanner.cpp
+++ /dev/null
@@ -1,875 +0,0 @@
-/******************************************************************************
- *
- *
- *
- * Copyright (C) 2009 by Tobias Hunger <tobias@aquazul.com>
- *
- * 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.
- *
- */
-
-#include "dbusxmlscanner.h"
-
-#include "commentscan.h"
-#include "entry.h"
-
-#include <qfile.h>
-#include <qxml.h>
-#include <qstring.h>
-
-#include "message.h"
-#include "util.h"
-#include "arguments.h"
-
-// -----------------------------------------------------------------------
-// Convenience defines:
-// -----------------------------------------------------------------------
-
-#define CONDITION(cond, msg) \
- do {\
- if (cond)\
- {\
- if (m_errorString.isEmpty()) { m_errorString = msg; }\
- return false;\
- }\
- }\
- while (0)
-
-#define DOC_ERROR(msg) \
- warn_doc_error(m_fileName.utf8().data(), lineNumber(), msg.utf8().data())
-
-#define COND_DOC_ERROR(cond, msg) \
- do {\
- if (cond)\
- {\
- DOC_ERROR(msg);\
- return true;\
- }\
- }\
- while (0)
-
-#define DBUS(name) isDBusElement(namespaceURI, localName, qName, name)
-#define EXTENSION(name) isExtensionElement(namespaceURI, localName, qName, name)
-
-// -----------------------------------------------------------------------
-// DBusXMLHandler class
-// -----------------------------------------------------------------------
-
-const QString EXTENSION_URI("http://psiamp.org/dtd/doxygen_dbusxml.dtd");
-
-class DBusXMLHandler : public QXmlDefaultHandler
-{
-public:
- DBusXMLHandler(ParserInterface * parser,
- QXmlSimpleReader * reader,
- const char * file_name,
- Entry * root) :
- m_parser(parser),
- m_locator(reader),
- m_currentEntry(0),
- m_currentInterface(0),
- m_currentMethod(0),
- m_currentArgument(0),
- m_currentProperty(0),
- m_currentEnum(0),
- m_fileName(file_name),
- m_currentComment(0)
- {
- setDocumentLocator(&m_locator);
-
- m_scopeCount = 0;
-
- // Set up stack cleanup:
- m_structStack.setAutoDelete(TRUE);
- m_elementStack.setAutoDelete(TRUE);
- m_scopeStack.setAutoDelete(TRUE);
-
- openScopes(root);
- }
-
- ~DBusXMLHandler()
- { closeScopes(); }
-
- QString errorString()
- { return m_errorString; }
-
- bool startElement(const QString &namespaceURI,
- const QString &localName,
- const QString &qName,
- const QXmlAttributes &attributes)
- {
- // add to elements stack:
- m_elementStack.append(new ElementData(qName));
-
- // First we need a node.
- if (DBUS("node"))
- {
- CONDITION(!m_currentNode.isEmpty(), "Node inside a node.");
-
- const int idx(indexOf(attributes, "name"));
- COND_DOC_ERROR(idx < 0, QString("Anonymous node found."));
-
- m_currentNode = attributes.value(idx);
- // A node is actually of little interest, so do nothing here.
- return true;
- }
-
- // Then we need an interface.
- if (DBUS("interface"))
- {
- // We need a nodeName for interfaces:
- CONDITION(m_currentNode.isEmpty(), "Interface without a node.");
- CONDITION(m_currentInterface, "Interface within another interface.");
-
- const int idx(indexOf(attributes, "name"));
- COND_DOC_ERROR(idx < 0, QString("Interface without a name found."));
-
- // A interface is roughly equivalent to a class:
- m_currentInterface = createEntry();
-
- m_currentInterface->section = Entry::CLASS_SEC;
- m_currentInterface->spec |= Entry::Interface;
- m_currentInterface->type = "Interface";
- m_currentInterface->name = substitute(attributes.value(idx), ".", "::");
-
- openScopes(m_currentInterface);
-
- return true;
- }
-
- if (DBUS("method") || DBUS("signal"))
- {
- // We need a interfaceName for methods and signals:
- CONDITION(!m_currentInterface, "Method or signal found outside a interface.");
- CONDITION(m_currentMethod, "Method or signal found inside another method or signal.");
- CONDITION(m_currentProperty, "Methor or signal found inside a property.");
- CONDITION(!m_structStack.isEmpty(), "Method or signal found inside a struct.");
- CONDITION(m_currentEnum, "Methor or signal found inside a enum.");
-
- const int idx(indexOf(attributes, "name"));
- COND_DOC_ERROR(idx < 0, QString("Method or signal without a name found."));
-
- m_currentMethod = createEntry();
-
- m_currentMethod->section = Entry::FUNCTION_SEC;
- m_currentMethod->name = attributes.value(idx);
- m_currentMethod->mtype = Method;
- m_currentMethod->type = "void";
-
- if (DBUS("signal"))
- { m_currentMethod->mtype = Signal; }
- }
-
- if (DBUS("arg"))
- {
- // We need a method for arguments:
- CONDITION(!m_currentMethod, "Argument found outside a method or signal.");
- CONDITION(m_currentArgument, "Argument found inside another argument.");
-
- const int name_idx(indexOf(attributes, "name"));
- COND_DOC_ERROR(name_idx < 0, QString("Argument without a name found."));
- COND_DOC_ERROR(!hasType(attributes), QString("Argument without a type found."));
-
- const int direction_idx(indexOf(attributes, "direction"));
-
- if ((m_currentMethod->mtype == Signal &&
- direction_idx >= 0 &&
- attributes.value(direction_idx) != "in") ||
- (m_currentMethod->mtype == Method &&
- direction_idx >= 0 &&
- attributes.value(direction_idx) != "in" &&
- attributes.value(direction_idx) != "out"))
- {
- m_errorString = "Invalid direction found.";
- return false;
- }
-
- m_currentArgument = new Argument;
- m_currentArgument->type = getType(attributes);
- m_currentArgument->name = attributes.value(name_idx);
- if (direction_idx >= 0)
- { m_currentArgument->attrib = attributes.value(direction_idx); }
- else
- {
- if (m_currentMethod->mtype == Signal)
- { m_currentArgument->attrib = "in"; }
- else
- { m_currentArgument->attrib = "out"; }
- }
- }
-
- if (DBUS("property"))
- {
- CONDITION(m_currentMethod, "Property found inside a method or signal.");
- CONDITION(!m_currentInterface, "Property found outside an interface.");
- CONDITION(m_currentProperty, "Property found inside another property.");
- CONDITION(!m_structStack.isEmpty(), "Property found inside a struct.");
- CONDITION(m_currentEnum, "Property found inside a enum.");
-
- const int name_idx(indexOf(attributes, "name"));
- COND_DOC_ERROR(name_idx < 0, QString("Anonymous property found."));
- COND_DOC_ERROR(!hasType(attributes), QString("Property without a type found."));
-
- const int access_idx(indexOf(attributes, "access"));
- COND_DOC_ERROR(access_idx < 0, QString("Property without a access attribute found."));
- COND_DOC_ERROR(attributes.value(access_idx) != "read" &&
- attributes.value(access_idx) != "write" &&
- attributes.value(access_idx) != "readwrite",
- QString("Property with invalid access attribute \"%1\" found.").
- arg(attributes.value(access_idx)));
-
- m_currentProperty = createEntry();
-
- m_currentProperty->section = Entry::FUNCTION_SEC;
-
- if (attributes.value(access_idx) == "read" ||
- attributes.value(access_idx) == "readwrite")
- { m_currentProperty->spec |= Entry::Readable; }
-
- if (attributes.value(access_idx) == "write" ||
- attributes.value(access_idx) == "readwrite")
- { m_currentProperty->spec |= Entry::Writable; }
-
- m_currentProperty->name = attributes.value(name_idx);
- m_currentProperty->mtype = Property;
- m_currentProperty->type = getType(attributes);
- }
-
- if (EXTENSION("namespace"))
- {
- CONDITION(m_currentNode.isEmpty(), "Namespace found outside a node.");
- CONDITION(m_currentInterface, "Namespace found inside an interface.");
-
- const int idx(indexOf(attributes, "name"));
- COND_DOC_ERROR(idx < 0, QString("Anonymous namespace found."));
-
- m_namespaceStack.append(openNamespace(attributes.value(idx)));
- openScopes(m_namespaceStack.last());
- }
-
- if (EXTENSION("struct"))
- {
- CONDITION(m_currentMethod, "Struct found inside a method or signal.");
- CONDITION(m_currentProperty, "Struct found inside a property.");
- CONDITION(m_currentEnum, "Struct found inside an enum.");
-
- const int idx(indexOf(attributes, "name"));
- COND_DOC_ERROR(idx < 0, QString("Anonymous struct found."));
-
- Entry * current_struct = createEntry();
- current_struct->section = Entry::CLASS_SEC;
- current_struct->spec = Entry::Struct;
- current_struct->name = attributes.value(idx);
-
- openScopes(current_struct);
-
- current_struct->type = current_struct->name + " struct";
-
- m_structStack.append(new StructData(current_struct));
- }
-
- if (EXTENSION("member"))
- {
- CONDITION(m_structStack.isEmpty(), "Member found outside of struct.");
-
- const int name_idx(indexOf(attributes, "name"));
- COND_DOC_ERROR(name_idx < 0, QString("Anonymous member found."));
- COND_DOC_ERROR(!hasType(attributes), QString("Member without a type found."));
-
- createEntry();
-
- m_currentEntry->section = Entry::VARIABLE_SEC;
- m_currentEntry->name = attributes.value(name_idx);
- m_currentEntry->type = getType(attributes);
-
- QString type(getDBusType(m_currentEntry->type));
- m_structStack.last()->type.append(type);
- }
-
- if (EXTENSION("enum") || EXTENSION("flagset"))
- {
- CONDITION(m_currentMethod, "Enum found inside a method or signal.");
- CONDITION(m_currentProperty, "Enum found inside a property.");
-
- const int name_idx(indexOf(attributes, "name"));
- COND_DOC_ERROR(name_idx < 0, QString("Anonymous enum found."));
-
- const int type_idx(indexOf(attributes, "type"));
- QString type = "u";
- if (type_idx >= 0)
- { type = attributes.value(type_idx); }
- if (type != "y" && type != "q" && type != "u" && type != "t")
- { DOC_ERROR(QString("Invalid enum type \"%1\" found.").arg(type)); }
-
- m_currentEnum = createEntry();
- m_currentEnum->section = Entry::ENUM_SEC;
- m_currentEnum->name = attributes.value(name_idx);
-
- openScopes(m_currentEnum);
-
- m_currentEnum->type = m_currentEntry->name + " enum";
-
- addNamedType(type);
- }
-
- if (EXTENSION("value"))
- {
- CONDITION(!m_currentEnum, "Value found outside an enum.");
-
- const int name_idx(indexOf(attributes, "name"));
- COND_DOC_ERROR(name_idx < 0, QString("Anonymous value found."));
-
- const int value_idx(indexOf(attributes, "value"));
-
- createEntry();
-
- m_currentEntry->section = Entry::VARIABLE_SEC;
- m_currentEntry->name = attributes.value(name_idx);
- m_currentEntry->type = m_currentEnum->name; // "@"; // enum marker!
- if (value_idx >= 0)
- { m_currentEntry->initializer = attributes.value(value_idx); }
- }
-
- return true;
- }
-
- bool endElement(const QString &namespaceURI,
- const QString &localName,
- const QString &qName)
- {
- // Clean up elements stack:
- // Since we made sure to get the elements in the proper order when
- // adding we do not need to do so again here.
- COND_DOC_ERROR(m_elementStack.last()->element != qName,
- QString("Malformed XML: Unexpected closing element found.").
- arg(m_elementStack.last()->element));
- m_elementStack.removeLast();
-
- // Interface:
- if (DBUS("interface"))
- {
- CONDITION(!m_currentInterface, "end of interface found without start.");
- m_currentInterface->endBodyLine = lineNumber();
- closeScopes();
- m_currentInterface = 0;
- }
-
- if (DBUS("method") || DBUS("signal"))
- {
- CONDITION(!m_currentMethod, "end of method found without start.");
- CONDITION(!m_currentInterface, "end of method found outside interface.");
- m_currentMethod->endBodyLine = lineNumber();
- m_currentInterface->addSubEntry(m_currentMethod);
- m_currentMethod = 0;
- }
-
- if (DBUS("property"))
- {
- CONDITION(!m_currentProperty, "end of property found without start.");
- CONDITION(!m_currentInterface, "end of property found outside interface.");
- m_currentProperty->endBodyLine = lineNumber();
- m_currentInterface->addSubEntry(m_currentProperty);
- m_currentProperty = 0;
- }
-
- if (DBUS("arg"))
- {
- CONDITION(!m_currentMethod, "end of arg found outside method.");
- m_currentMethod->argList->append(m_currentArgument);
- m_currentArgument = 0;
- }
-
- if (EXTENSION("namespace"))
- {
- Entry * current = m_namespaceStack.last();
- CONDITION(!current, "end of namespace without start.");
- m_namespaceStack.removeLast();
-
- current->endBodyLine = lineNumber();
- closeScopes();
- }
-
- if (EXTENSION("struct"))
- {
- StructData * data = m_structStack.last();
- CONDITION(!data, "end of struct without start.");
-
- data->entry->endBodyLine = lineNumber();
-
- QString current_type;
- current_type.append(QString("("));
- current_type.append(data->type);
- current_type.append(QString(")"));
-
- addNamedType(current_type);
-
- closeScopes();
-
- m_structStack.removeLast();
- }
-
- if (EXTENSION("member"))
- {
- StructData * data = m_structStack.last();
- CONDITION(!data, "end of member outside struct.");
- data->entry->addSubEntry(m_currentEntry);
- }
-
- if (EXTENSION("enum") || EXTENSION("flagset"))
- {
- CONDITION(!m_currentEnum, "end of enum without start.");
- m_currentEnum->endBodyLine = lineNumber();
- closeScopes();
-
- m_currentEnum = 0;
- }
-
- if (EXTENSION("value"))
- {
- CONDITION(!m_currentEntry, "end of value without start");
- m_currentEntry->endBodyLine = lineNumber();
-
- m_currentEnum->addSubEntry(m_currentEntry);
- }
-
- return true;
- }
-
- bool characters(const QString & /*chars*/)
- { return true; }
-
- bool comment(const QString & comment_)
- {
- if (m_currentComment)
- { handleComment(); }
-
- m_currentComment = new CommentData(m_fileName, lineNumber(), comment_);
-
- if (m_currentComment->shouldIgnore)
- {
- delete m_currentComment;
- m_currentComment = 0;
- return true;
- }
-
- if (m_currentComment->associateWithPrevious)
- { handleComment(); }
-
- return true;
- }
-
- void handleComment()
- {
- if (m_currentComment == 0 || m_currentEntry == 0)
- { return; }
-
- QCString text(m_currentComment->text);
-
- m_currentEntry->docFile = m_currentComment->fileName;
- m_currentEntry->docLine = m_currentComment->line;
-
- int position(0);
- bool needs_entry(false);
- bool brief(false);
- Protection prot(Public);
- int lineNr = lineNumber();
-
- while (parseCommentBlock(m_parser,
- m_currentEntry,
- text, m_fileName.utf8().data(),
- lineNr,
- brief, m_currentComment->isJavaStyle,
- false,
- prot,
- position,
- needs_entry))
- {
- if (needs_entry) { createEntry(); }
- }
- if (needs_entry) { createEntry(); }
-
- delete m_currentComment;
- m_currentComment = 0;
- }
-
- QXmlLocator * locator()
- { return &m_locator; }
-
- int lineNumber()
- { return m_locator.lineNumber(); }
-
- void setSection()
- {
- Entry * current = createEntry();
- current->reset();
-
- current->name = m_fileName.utf8();
- current->section = Entry::SOURCE_SEC;
-
- // Open/Close the scope to do the bookkeeping:
- openScopes(current);
- closeScopes();
- }
-
-private:
- bool isDBusElement(const QString & namespaceURI,
- const QString & localName,
- const QString & qName,
- const QString & element)
- {
- return (namespaceURI.isEmpty() && localName == element && qName == element) ||
- (namespaceURI.isEmpty() && localName.isEmpty() && qName == element);
- }
-
- bool isExtensionElement(const QString & namespaceURI,
- const QString & localName,
- const QString & qName,
- const QString & element)
- {
- (void)qName;
-
- return namespaceURI == EXTENSION_URI && localName == element;
- }
-
- bool hasType(const QXmlAttributes & attributes)
- {
- const int type_idx(indexOf(attributes, "type"));
- const int named_type_idx(indexOf(attributes, "named-type"));
-
- return named_type_idx >= 0 || type_idx >= 0;
- }
-
- QString getType(const QXmlAttributes & attributes)
- {
- const int type_idx(indexOf(attributes, "type"));
- const int named_type_idx(indexOf(attributes, "named-type"));
-
- QString type;
-
- if (named_type_idx >= 0)
- {
- type = attributes.value(named_type_idx);
- if (!type.startsWith("::"))
- { type = getCurrentScope(attributes.value(named_type_idx)); }
- else
- { type = type.mid(2); }
- if (m_namedTypeMap.contains(type))
- {
- if (type_idx >= 0)
- {
- const QString dbus_type(attributes.value(type_idx));
- if (dbus_type != m_namedTypeMap[type])
- {
- DOC_ERROR(QString("Type \"%1\" does not match up with "
- "previous definition of named type \"%2\" (which was \"%3\".").
- arg(dbus_type).
- arg(type).
- arg(m_namedTypeMap[type]));
- }
- }
- return type;
- }
-
- DOC_ERROR(QString("Undefined named type \"%1\" used.").arg(type));
- }
-
- if (type_idx >= 0)
- {
- type = attributes.value(type_idx);
-
- QRegExp reg_exp(QCString("(a?[ybnqiuxdtsogv]|a[{]sv[}])"));
- if (reg_exp.match(type.data()))
- { return type; }
-
- DOC_ERROR(QString("Unnamed complex D-Bus type \"%1\" found.").arg(type));
- }
-
- return QString();
- }
-
- QString getDBusType(const QString & type)
- {
- QString scoped_type = type;
- if (!scoped_type.contains("::"))
- { scoped_type = getCurrentScope(type); }
-
- if (m_namedTypeMap.contains(scoped_type))
- { return m_namedTypeMap[scoped_type]; }
- else
- { return type; }
- }
-
- void addNamedType(const QString type)
- {
- QString scoped_name(getCurrentScope());
-
- if (m_namedTypeMap.contains(scoped_name))
- {
- DOC_ERROR(QString("Named type \"%1\" is already defined.").arg(scoped_name));
- return;
- }
-
- m_namedTypeMap.insert(scoped_name, type);
- }
-
- QString getCurrentScope(const QString & type = QString())
- {
- QString scoped_name;
- if (!m_scopeStack.isEmpty())
- {
- scoped_name = m_scopeStack.last()->scope->name;
- scoped_name.append("::");
- }
- if (!type.isEmpty())
- { scoped_name.append(type); }
- else
- { scoped_name = scoped_name.left(scoped_name.length() - 2); }
-
- return scoped_name;
- }
-
- int indexOf(const QXmlAttributes & attributes, const QString & name,
- const QString & type = "CDATA", const bool mandatory = true)
- {
- const int idx(attributes.index(name));
- if (idx < 0 || idx > attributes.length()) { return -1; }
- if (attributes.type(idx) != type) { return -1; }
- if (mandatory && attributes.value(idx).isEmpty()) { return -1; }
-
- return idx;
- }
-
- Entry * createEntry()
- {
- Entry * entry = new Entry();
-
- entry->protection = Public ;
- entry->virt = Normal;
- entry->stat = false;
- entry->lang = SrcLangExt_XML;
- entry->spec = 0;
-
- entry->fileName = m_fileName;
- entry->startLine = lineNumber();
- entry->bodyLine = lineNumber();
-
- entry->callGraph = false;
- entry->callerGraph = false;
-
- initGroupInfo(entry);
-
- m_currentEntry = entry;
-
- handleComment();
-
- return entry;
- }
-
- void openScopes(Entry * object)
- {
- int cur_scope_separator_pos = 0;
- int last_scope_separator_pos = 0;
- while (0 <= (cur_scope_separator_pos = object->name.find("::", last_scope_separator_pos)))
- {
- QString scope = object->name.mid(last_scope_separator_pos,
- cur_scope_separator_pos - last_scope_separator_pos);
- last_scope_separator_pos = cur_scope_separator_pos + 2;
-
- Entry * current_namespace = openNamespace(scope);
-
- if (!m_scopeStack.isEmpty())
- { m_scopeStack.last()->scope->addSubEntry(current_namespace); }
-
- m_scopeStack.append(new ScopeData(current_namespace, m_scopeCount));
- }
-
- QString scoped_name(getCurrentScope());
- if (!scoped_name.isEmpty())
- { scoped_name.append("::"); }
- scoped_name.append(object->name.mid(last_scope_separator_pos));
-
- object->name = scoped_name;
-
- if (!m_scopeStack.isEmpty())
- { m_scopeStack.last()->scope->addSubEntry(object); }
- m_scopeStack.append(new ScopeData(object, m_scopeCount));
-
- ++m_scopeCount;
- }
-
- Entry * openNamespace(const QString & name)
- {
- Entry * current_namespace = createEntry();
- QString scoped_name(getCurrentScope());
- if (!scoped_name.isEmpty())
- { scoped_name.append("::"); }
- scoped_name.append(name);
- current_namespace->name = scoped_name;
- current_namespace->section = Entry::NAMESPACE_SEC;
- current_namespace->type = "namespace" ;
-
- return current_namespace;
- }
-
- void closeScopes()
- {
- const int current_scope_count(m_scopeStack.last()->count);
-
- // Do not close the root scope.
- if (current_scope_count == 0)
- { return; }
-
- while (current_scope_count == m_scopeStack.last()->count)
- { m_scopeStack.removeLast(); }
- }
-
- ParserInterface * m_parser;
-
- QXmlLocator m_locator;
- QString m_currentNode; // Nodes can not be nested, no entry necessary.
-
- struct ElementData
- {
- ElementData(const QString & e) :
- element(e)
- { }
- ~ElementData() { }
-
- QString element; //*< The element name
- QString text; //*< The actual xml code.
- };
- QList<ElementData> m_elementStack;
-
- Entry * m_currentEntry; // The currently open entry.
-
- Entry * m_currentInterface; // Interfaces can not be nested.
- Entry * m_currentMethod; // Methods can not be nested.
- Argument * m_currentArgument; // Arguments can not be nested.
- Entry * m_currentProperty; // Properties can not be nested.
- Entry * m_currentEnum; // Enums can not be nested.
- QList<Entry> m_namespaceStack;
-
- struct StructData
- {
- StructData(Entry * e) : entry(e) { }
- ~StructData() { }
-
- QString type;
- Entry * entry;
- };
- QList<StructData> m_structStack; // Structs can be nested.
-
- struct ScopeData
- {
- ScopeData(Entry * s, int c) :
- scope(s),
- count(c)
- { }
- ~ScopeData() { }
-
- Entry * scope;
- int count;
- };
- QList<ScopeData> m_scopeStack; // Scopes are nested.
-
- QString m_fileName;
-
- struct CommentData
- {
- CommentData(const QString & f, const int l, const QString & t) :
- isJavaStyle(false),
- isQtStyle(false),
- line(l),
- fileName(f)
- {
- isJavaStyle = t.startsWith(QChar('*'));
- isQtStyle = t.startsWith(QChar('!'));
- shouldIgnore = (!isJavaStyle && !isQtStyle);
- associateWithPrevious = (t.at(1) == QChar('<'));
- if (associateWithPrevious)
- { text = t.mid(2); }
- else
- { text = t.mid(1); }
- }
- ~CommentData() { }
-
- QString text;
- bool isJavaStyle;
- bool isQtStyle;
- bool shouldIgnore;
- bool associateWithPrevious;
- int line;
- QString fileName;
- };
- CommentData * m_currentComment;
-
- int m_scopeCount; //*< unique scope id.
-
- QString m_errorString;
-
- QMap<QString, QString> m_namedTypeMap;
-};
-
-// -----------------------------------------------------------------------
-// DBusXMLScanner
-// -----------------------------------------------------------------------
-
-DBusXMLScanner::DBusXMLScanner()
-{ }
-
-DBusXMLScanner::~DBusXMLScanner()
-{ }
-
-void DBusXMLScanner::parseInput(const char * fileName,
- const char * /* fileBuf */,
- Entry * root)
-{
- QFile inputFile(fileName);
-
- QXmlInputSource inputSource(inputFile);
- QXmlSimpleReader reader;
-
- DBusXMLHandler handler(this, &reader, fileName, root);
- reader.setContentHandler(&handler);
- reader.setErrorHandler(&handler);
- reader.setLexicalHandler(&handler);
-
- groupEnterFile(fileName, 1);
- handler.setSection();
- reader.parse(inputSource);
-
- if (!handler.errorString().isEmpty())
- { err("DBus XML Parser: Error at line %d: %s\n",
- handler.locator()->lineNumber(),handler.errorString().utf8().data()); }
-
- groupLeaveFile(fileName, 1);
-}
-
-bool DBusXMLScanner::needsPreprocessing(const QCString & /* extension */)
-{ return (false); }
-
-void DBusXMLScanner::parseCode(CodeOutputInterface & /* codeOutIntf */,
- const char * /* scopeName */,
- const QCString & /* input */,
- bool /* isExampleBlock */,
- const char * /* exampleName */,
- FileDef * /* fileDef */,
- int /* startLine */,
- int /* endLine */,
- bool /* inlineFragment */,
- MemberDef * /* memberDef */,
- bool /*showLineNumbers*/)
-{ }
-
-void DBusXMLScanner::resetCodeParserState()
-{ }
-
-void DBusXMLScanner::parsePrototype(const char * /* text */)
-{ }
diff --git a/trunk/src/dbusxmlscanner.h b/trunk/src/dbusxmlscanner.h
deleted file mode 100644
index fd48cbc..0000000
--- a/trunk/src/dbusxmlscanner.h
+++ /dev/null
@@ -1,58 +0,0 @@
-/******************************************************************************
- *
- *
- *
- * Copyright (C) 2009 by Tobias Hunger <tobias@aquazul.com>
- *
- * 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.
- *
- */
-
-#ifndef SCANNER_DBUSXML_H
-#define SCANNER_DBUSXML_H
-
-#include "parserintf.h"
-
-/** \brief D-Bus XML parser.
- *
- * This is the D-Bus XML parser for doxygen.
- */
-class DBusXMLScanner : public ParserInterface
-{
-public:
- DBusXMLScanner();
- virtual ~DBusXMLScanner();
- void parseInput(const char *fileName,
- const char *fileBuf,
- Entry *root);
-
- bool needsPreprocessing(const QCString &extension);
-
- void parseCode(CodeOutputInterface &codeOutIntf,
- const char *scopeName,
- const QCString &input,
- bool isExampleBlock,
- const char *exampleName=0,
- FileDef *fileDef=0,
- int startLine=-1,
- int endLine=-1,
- bool inlineFragment=FALSE,
- MemberDef *memberDef=0,
- bool showLineNumbers=TRUE
- );
-
- void resetCodeParserState();
-
- void parsePrototype(const char *text);
-
-private:
-};
-
-#endif
diff --git a/trunk/src/debug.cpp b/trunk/src/debug.cpp
deleted file mode 100644
index 1c3c1c1..0000000
--- a/trunk/src/debug.cpp
+++ /dev/null
@@ -1,118 +0,0 @@
-/******************************************************************************
- *
- *
- *
- * Copyright (C) 1997-2012 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.
- *
- */
-
-#include <stdarg.h>
-#include <stdio.h>
-
-#include <qdict.h>
-
-#include "qtbc.h"
-#include "debug.h"
-
-//------------------------------------------------------------------------
-
-struct LabelMap
-{
- const char *name;
- Debug::DebugMask event;
-};
-
-static LabelMap s_labels[] =
-{
- { "findmembers", Debug::FindMembers },
- { "functions", Debug::Functions },
- { "variables", Debug::Variables },
- { "preprocessor", Debug::Preprocessor },
- { "classes", Debug::Classes },
- { "commentcnv", Debug::CommentCnv },
- { "commentscan", Debug::CommentScan },
- { "validate", Debug::Validate },
- { "printtree", Debug::PrintTree },
- { "time", Debug::Time },
- { "extcmd", Debug::ExtCmd },
- { "markdown", Debug::Markdown },
- { "filteroutput", Debug::FilterOutput },
- { 0, (Debug::DebugMask)0 }
-};
-
-class LabelMapper
-{
- public:
- LabelMapper() : m_map(17)
- {
- m_map.setAutoDelete(TRUE);
- LabelMap *p = s_labels;
- while (p->name)
- {
- m_map.insert(p->name,new Debug::DebugMask(p->event));
- p++;
- }
- }
- Debug::DebugMask *find(const char *s) const
- {
- if (s==0) return 0;
- return m_map.find(s);
- }
- private:
- QDict<Debug::DebugMask> m_map;
-};
-
-static LabelMapper g_labelMapper;
-
-//------------------------------------------------------------------------
-
-Debug::DebugMask Debug::curMask = Debug::Quiet;
-int Debug::curPrio = 0;
-
-void Debug::print(DebugMask mask,int prio,const char *fmt,...)
-{
- if ((curMask&mask) && prio<=curPrio)
- {
- va_list args;
- va_start(args,fmt);
- vfprintf(stdout, fmt, args);
- va_end(args);
- }
-}
-
-static int labelToEnumValue(const char *l)
-{
- QCString label=l;
- Debug::DebugMask *event = g_labelMapper.find(label.lower());
- if (event) return *event; else return 0;
-}
-
-void Debug::setFlag(const char *lab)
-{
- curMask = (DebugMask)(curMask | labelToEnumValue(lab));
-}
-
-void Debug::clearFlag(const char *lab)
-{
- curMask = (DebugMask)(curMask & ~labelToEnumValue(lab));
-}
-
-void Debug::setPriority(int p)
-{
- curPrio = p;
-}
-
-bool Debug::isFlagSet(DebugMask mask)
-{
- return (curMask & mask)!=0;
-}
-
diff --git a/trunk/src/debug.h b/trunk/src/debug.h
deleted file mode 100644
index f624628..0000000
--- a/trunk/src/debug.h
+++ /dev/null
@@ -1,51 +0,0 @@
-/******************************************************************************
- *
- *
- *
- *
- * Copyright (C) 1997-2012 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.
- *
- */
-
-#ifndef _DEBUG_H
-#define _DEBUG_H
-
-class Debug
-{
- public:
- enum DebugMask { Quiet = 0x00000000,
- FindMembers = 0x00000001,
- Functions = 0x00000002,
- Variables = 0x00000004,
- Preprocessor = 0x00000008,
- Classes = 0x00000010,
- CommentCnv = 0x00000020,
- CommentScan = 0x00000040,
- Validate = 0x00000080,
- PrintTree = 0x00000100,
- Time = 0x00000200,
- ExtCmd = 0x00000400,
- Markdown = 0x00000800,
- FilterOutput = 0x00001000
- };
- static void print(DebugMask mask,int prio,const char *fmt,...);
- static void setFlag(const char *label);
- static void clearFlag(const char *label);
- static bool isFlagSet(DebugMask mask);
- static void setPriority(int p);
-
- private:
- static DebugMask curMask;
- static int curPrio;
-};
-
-#endif
diff --git a/trunk/src/declinfo.h b/trunk/src/declinfo.h
deleted file mode 100644
index a91f5bb..0000000
--- a/trunk/src/declinfo.h
+++ /dev/null
@@ -1,33 +0,0 @@
-/******************************************************************************
- *
- *
- *
- * Copyright (C) 1997-2012 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.
- *
- */
-
-#ifndef DECLINFO_H
-#define DECLINFO_H
-
-#include "qtbc.h"
-#include <stdio.h>
-
-extern void parseFuncDecl(const QCString &decl,
- bool objC,
- QCString &clName,
- QCString &type,
- QCString &name,
- QCString &args,
- QCString &funcTempList,
- QCString &exceptions
- );
-#endif
diff --git a/trunk/src/declinfo.l b/trunk/src/declinfo.l
deleted file mode 100644
index 746aaae..0000000
--- a/trunk/src/declinfo.l
+++ /dev/null
@@ -1,357 +0,0 @@
-/******************************************************************************
- *
- *
- *
- * Copyright (C) 1997-2012 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.
- *
- */
-
-%{
-
-/*
- * includes
- */
-#include <stdio.h>
-//#include <iostream.h>
-#include <assert.h>
-#include <ctype.h>
-
-#include "declinfo.h"
-#include "util.h"
-#include "message.h"
-
-/* -----------------------------------------------------------------
- *
- * statics
- */
-
-static const char * inputString;
-static int inputPosition;
-static QCString scope;
-static QCString className;
-static QCString classTempList;
-static QCString funcTempList;
-static QCString type;
-static QCString name;
-static QCString args;
-static QCString tmpType;
-static int sharpCount;
-static bool classTempListFound;
-static bool funcTempListFound;
-static QCString exceptionString;
-static bool insideObjC;
-
-static void addType()
-{
- //printf("addType() type=`%s' scope=`%s' name=`%s'\n",
- // type.data(),scope.data(),name.data());
- if (name.isEmpty() && scope.isEmpty()) return;
- if (!type.isEmpty()) type+=" ";
- if (!scope.isEmpty()) type+=scope+"::";
- type+=name;
- scope.resize(0);
- name.resize(0);
-}
-
-static void addTypeName()
-{
- //printf("addTypeName() type=`%s' scope=`%s' name=`%s'\n",
- // type.data(),scope.data(),name.data());
- if (name.isEmpty() ||
- name.at(name.length()-1)==':') // end of Objective-C keyword => append to name not type
- {
- return;
- }
- if (!type.isEmpty()) type+=' ';
- type+=name;
- name.resize(0);
-}
-
-#define YY_NEVER_INTERACTIVE 1
-
-/* -----------------------------------------------------------------
- */
-#undef YY_INPUT
-#define YY_INPUT(buf,result,max_size) result=yyread(buf,max_size);
-
-static int yyread(char *buf,int max_size)
-{
- int c=0;
- while( c < max_size && inputString[inputPosition] )
- {
- *buf = inputString[inputPosition++] ;
- c++; buf++;
- }
- return c;
-}
-
-%}
-
-B [ \t]
-ID "$"?([a-z_A-Z\x80-\xFF][a-z_A-Z0-9\x80-\xFF]*)|(@[0-9]+)
-
-%option nounput
-%option noyywrap
-
-%x Start
-%x Template
-%x ReadArgs
-%x Operator
-%x FuncPtr
-%x EndTemplate
-%x StripTempArgs
-%x SkipSharp
-%x ReadExceptions
-
-%%
-
-<Start>"operator"/({B}*"["{B}*"]")* { // operator rule must be before {ID} rule
- name += yytext;
- BEGIN(Operator);
- }
-<Start>{ID}{B}*"("{B}*{ID}{B}*")" { // Objective-C class categories
- if (!insideObjC)
- {
- REJECT;
- }
- else
- {
- name += yytext;
- }
- }
-<Start>([~!]{B}*)?{ID}/({B}*"["{B}*"]")* { // the []'s are for Java,
- // the / was add to deal with multi-
- // dimensional C++ arrays like A[][15]
- // the leading ~ is for a destructor
- // the leading ! is for a C++/CLI finalizer (see bug 456475 and 635198)
- addTypeName();
- name += yytext;
- }
-<Start>{B}*"::"{B}* { // found a scope specifier
- if (!scope.isEmpty())
- {
- scope+="::"+name; // add name to scope
- }
- else
- {
- scope = name.copy(); // scope becomes name
- }
- name.resize(0);
- }
-<Start>{B}*":" { // Objective-C argument separator
- name+=yytext;
- }
-<Start>[*&]+ {
- addType();
- type+=yytext;
- }
-<Start>{B}+ {
- addType();
- }
-<Start>{B}*"("({ID}"::")*{B}*[&*]({B}*("const"|"volatile"){B}+)? {
- addType();
- QCString text=yytext;
- type+=text.stripWhiteSpace();
- }
-<Start>{B}*")" {
- type+=")";
- }
-<Start>{B}*"(" { // TODO: function pointers
- args+="(";
- BEGIN(ReadArgs);
- }
-<Start>{B}*"[" {
- args+="[";
- BEGIN(ReadArgs);
- }
-<Start>{B}*"<" {
- name+="<";
- sharpCount=0;
- BEGIN(Template);
- }
-<Template>"<<" { name+="<<"; }
-<Template>">>" { name+=">>"; }
-<Template>"<" {
- name+="<";
- sharpCount++;
- }
-<Template>">" {
- name+=">";
- if (sharpCount)
- --sharpCount;
- else
- {
- BEGIN(Start);
- }
- }
-<Template>. {
- name+=*yytext;
- }
-<Operator>{B}*"("{B}*")"{B}*"<>"{B}*/"(" {
- name+="() <>";
- BEGIN(ReadArgs);
- }
-<Operator>{B}*"("{B}*")"{B}*/"(" {
- name+="()";
- BEGIN(ReadArgs);
- }
-<Operator>[^(]*{B}*("<>"{B}*)?/"(" {
- name+=yytext;
- BEGIN(ReadArgs);
- }
-<ReadArgs>"throw"{B}*"(" {
- exceptionString="throw(";
- BEGIN(ReadExceptions);
- }
-<ReadArgs>. {
- args+=*yytext;
- }
-<ReadExceptions>. {
- exceptionString+=*yytext;
- }
-<*>.
-<*>\n
-
-%%
-
-/*@ ----------------------------------------------------------------------------
- */
-
-void parseFuncDecl(const QCString &decl,bool objC,QCString &cl,QCString &t,
- QCString &n,QCString &a,QCString &ftl,QCString &exc)
-{
- inputString = decl;
- //printf("Input=`%s'\n",inputString);
- if (inputString==0) return;
- inputPosition = 0;
- classTempListFound = FALSE;
- funcTempListFound = FALSE;
- insideObjC = objC;
- scope.resize(0);
- className.resize(0);
- classTempList.resize(0);
- funcTempList.resize(0);
- name.resize(0);
- type.resize(0);
- args.resize(0);
- exceptionString.resize(0);
- // first we try to find the type, scope, name and arguments
- declinfoYYrestart( declinfoYYin );
- BEGIN( Start );
- declinfoYYlex();
-
- //printf("type=`%s' class=`%s' name=`%s' args=`%s'\n",
- // type.data(),scope.data(),name.data(),args.data());
-
- int nb = name.findRev('[');
- if (nb!=-1 && args.isEmpty()) // correct for [] in name ambigity (due to Java return type allowing [])
- {
- args.prepend(name.right(name.length()-nb));
- name=name.left(nb);
- }
-
-#if 0
- {
- int l=scope.length();
- int i=0;
- int skipCount=0;
- cl.resize(0);
- ctl.resize(0);
- for (i=0;i<l;i++)
- {
- char c=scope.at(i);
- if (c=='<')
- skipCount++;
- else if (c=='>')
- skipCount--;
- else if (skipCount==0)
- cl+=c;
- }
- }
- cl=stripTemplateSpecifiersFromScope(removeRedundantWhiteSpace(scope),FALSE);
- ctl.resize(0);
-#endif
-
- cl=scope;
- n=removeRedundantWhiteSpace(name);
- int il,ir;
- if ((il=n.find('<'))!=-1 && (ir=n.findRev('>'))!=-1)
- // TODO: handle cases like where n="operator<< <T>"
- {
- ftl=removeRedundantWhiteSpace(n.right(n.length()-il));
- n=n.left(il);
- }
-
- //ctl=classTempList.copy();
- //ftl=funcTempList.copy();
- t=removeRedundantWhiteSpace(type);
- a=removeRedundantWhiteSpace(args);
- exc=removeRedundantWhiteSpace(exceptionString);
-
- if (!t.isEmpty() && t.at(t.length()-1)==')') // for function pointers
- {
- a.prepend(")");
- t=t.left(t.length()-1);
- }
- //printf("type=`%s' class=`%s' name=`%s' args=`%s'\n",
- // t.data(),cl.data(),n.data(),a.data());
-
- return;
-
-
-}
-
-//extern "C" { // some bogus code to keep the compiler happy
-// int declinfoYYwrap() { return 1 ; }
-// void declinfoYYdummy() { yy_flex_realloc(0,0); }
-//}
-
-#if 0
-void dumpDecl(const char *s)
-{
- QCString className;
- QCString classTNames;
- QCString type;
- QCString name;
- QCString args;
- QCString funcTNames;
- msg("-----------------------------------------\n");
- parseFuncDecl(s,className,classTNames,type,name,args,funcTNames);
- msg("type=`%s' class=`%s' classTempl=`%s' name=`%s' "
- "funcTemplateNames=`%s' args=`%s'\n",
- type.data(),className.data(),classTNames.data(),
- name.data(),funcTNames.data(),args.data()
- );
-}
-
-// some test code
-int main()
-{
- dumpDecl("A < T > :: Value * A < T > :: getValue < S > ( const A < T > & a )");
- dumpDecl("const A<T>::Value* A<T>::getValue<S>(const A<T>&a)");
- dumpDecl("func()");
- dumpDecl("friend void bla<>()");
- dumpDecl("name< T > :: operator () (int bla)");
- dumpDecl("name< T > :: operator << (int bla)");
- dumpDecl("name< T > :: operator << <> (int bla)");
- dumpDecl("className::func()");
- dumpDecl("void ( * Name < T > :: bla ) ( int, char * )");
-}
-#endif
-
-#if !defined(YY_FLEX_SUBMINOR_VERSION)
-//----------------------------------------------------------------------------
-extern "C" { // some bogus code to keep the compiler happy
- void declinfoYYdummy() { yy_flex_realloc(0,0); }
-}
-#endif
-
diff --git a/trunk/src/defargs.h b/trunk/src/defargs.h
deleted file mode 100644
index b2bc198..0000000
--- a/trunk/src/defargs.h
+++ /dev/null
@@ -1,29 +0,0 @@
-/******************************************************************************
- *
- *
- *
- * Copyright (C) 1997-2012 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.
- *
- */
-
-#ifndef DEFARGS_H
-#define DEFARGS_H
-
-#include "qtbc.h"
-#include <stdio.h>
-
-class ArgumentList;
-
-extern void stringToArgumentList(const char *argsString,ArgumentList* argList,
- QCString *extraTypeChars=0);
-
-#endif
diff --git a/trunk/src/defargs.l b/trunk/src/defargs.l
deleted file mode 100644
index acada87..0000000
--- a/trunk/src/defargs.l
+++ /dev/null
@@ -1,482 +0,0 @@
-/******************************************************************************
- *
- *
- *
- * Copyright (C) 1997-2012 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.
- *
- */
-
-/*! \file
- * This scanner is used to convert a string into a list of function or
- * template arguments. Each parsed argument results in a Argument struct,
- * that is put into an ArgumentList in declaration order.
- * Comment blocks for arguments can also be included in the string.
- * The argument string does not contain new-lines (except inside any
- * comment blocks).
- * An Argument consists of the string fields:
- * type,name,default value, and documentation
- * The Argument list as a whole can be pure, constant or volatile.
- *
- * Examples of input strings are:
- * \code
- * "(int a,int b) const"
- * "(const char *s="hello world",int=5) = 0"
- * "<class T,class N>"
- * "(char c,const char)"
- * \endcode
- *
- * Note: It is not always possible to distinguish between the name and
- * type of an argument. In case of doubt the name is added to the
- * type, and the matchArgumentList in util.cpp is be used to
- * further determine the correct separation.
- */
-
-%{
-
-/*
- * includes
- */
-#include "qtbc.h"
-#include <stdio.h>
-//#include <iostream.h>
-#include <assert.h>
-#include <ctype.h>
-#include <qregexp.h>
-
-#include "defargs.h"
-#include "entry.h"
-#include "util.h"
-#include "arguments.h"
-
-#define YY_NEVER_INTERACTIVE 1
-
-/* -----------------------------------------------------------------
- * state variables
- */
-static const char *g_inputString;
-static int g_inputPosition;
-static ArgumentList *g_argList;
-static QCString *g_copyArgValue;
-static QCString g_curArgTypeName;
-static QCString g_curArgDefValue;
-static QCString g_curArgName;
-static QCString g_curArgDocs;
-static QCString g_curArgAttrib;
-static QCString g_curArgArray;
-static QCString g_extraTypeChars;
-static int g_argRoundCount;
-static int g_argSharpCount;
-static int g_argCurlyCount;
-static int g_readArgContext;
-static int g_lastDocContext;
-static int g_lastDocChar;
-
-/* -----------------------------------------------------------------
- */
-#undef YY_INPUT
-#define YY_INPUT(buf,result,max_size) result=yyread(buf,max_size);
-
-static int yyread(char *buf,int max_size)
-{
- int c=0;
- while( c < max_size && g_inputString[g_inputPosition] )
- {
- *buf = g_inputString[g_inputPosition++] ;
- c++; buf++;
- }
- return c;
-}
-
-%}
-
-B [ \t]
-ID [a-z_A-Z\x80-\xFF][a-z_A-Z0-9\x80-\xFF]*
-
-%option noyywrap
-
-%x Start
-%x CopyArgString
-%x CopyArgRound
-%x CopyArgRound2
-%x CopyArgSharp
-%x CopyArgCurly
-%x ReadFuncArgType
-%x ReadFuncArgDef
-%x ReadFuncArgPtr
-%x FuncQual
-%x ReadDocBlock
-%x ReadDocLine
-
-
-%%
-
-<Start>[<(] { BEGIN(ReadFuncArgType); }
-
-<ReadFuncArgType>{B}* {
- g_curArgTypeName+=" ";
- }
-<ReadFuncArgType>"["[^\]]*"]" {
- if (g_curArgTypeName.stripWhiteSpace().isEmpty())
- {
- g_curArgAttrib=yytext; // for M$-IDL
- }
- else // array type
- {
- g_curArgArray+=yytext;
- }
- }
-<ReadFuncArgDef>"'"\\[0-7]{1,3}"'" { g_curArgDefValue+=yytext; }
-<ReadFuncArgDef>"'"\\."'" { g_curArgDefValue+=yytext; }
-<ReadFuncArgDef>"'"."'" { g_curArgDefValue+=yytext; }
-<ReadFuncArgDef>\" {
- g_curArgDefValue+=*yytext;
- BEGIN( CopyArgString );
- }
-<ReadFuncArgType>"("([^:)]+{B}*"::")*{B}*[&*\^]+{B}*/{ID} {
- // function pointer as argument
- g_curArgTypeName+=yytext;
- //g_curArgTypeName=g_curArgTypeName.simplifyWhiteSpace();
- BEGIN( ReadFuncArgPtr );
- }
-<ReadFuncArgPtr>{ID} {
- g_curArgName=yytext;
- }
-<ReadFuncArgPtr>")"{B}*"(" { // function pointer
- g_curArgTypeName+=yytext;
- //g_curArgTypeName=g_curArgTypeName.simplifyWhiteSpace();
- g_readArgContext = ReadFuncArgType;
- g_copyArgValue=&g_curArgTypeName;
- g_argRoundCount=0;
- BEGIN( CopyArgRound2 );
- }
-<ReadFuncArgPtr>")"/{B}*"[" { // pointer to fixed size array
- g_curArgTypeName+=yytext;
- g_curArgTypeName+=g_curArgName;
- //g_curArgTypeName=g_curArgTypeName.simplifyWhiteSpace();
- BEGIN( ReadFuncArgType );
- }
-<ReadFuncArgPtr>")" { // redundant braces detected / remove them
- int i=g_curArgTypeName.findRev('('),l=g_curArgTypeName.length();
- if (i!=-1)
- g_curArgTypeName=g_curArgTypeName.left(i)+
- g_curArgTypeName.right(l-i-1);
- g_curArgTypeName+=g_curArgName;
- BEGIN( ReadFuncArgType );
- }
-<ReadFuncArgType>"<="|">="|"->"|">>"|"<<" { // handle operators in defargs
- g_curArgTypeName+=yytext;
- }
-<ReadFuncArgType,ReadFuncArgDef>[({<] {
- if (YY_START==ReadFuncArgType)
- {
- g_curArgTypeName+=*yytext;
- g_copyArgValue=&g_curArgTypeName;
- }
- else // YY_START==ReadFuncArgDef
- {
- g_curArgDefValue+=*yytext;
- g_copyArgValue=&g_curArgDefValue;
- }
- g_readArgContext = YY_START;
- if (*yytext=='(')
- {
- g_argRoundCount=0;
- BEGIN( CopyArgRound );
- }
- else if (*yytext=='{')
- {
- g_argCurlyCount=0;
- BEGIN( CopyArgCurly );
- }
- else // yytext=='<'
- {
- g_argSharpCount=0;
- BEGIN( CopyArgSharp );
- }
- }
-<CopyArgRound,CopyArgRound2>"(" {
- g_argRoundCount++;
- *g_copyArgValue += *yytext;
- }
-<CopyArgRound,CopyArgRound2>")"({B}*{ID})* {
- *g_copyArgValue += yytext;
- if (g_argRoundCount>0)
- {
- g_argRoundCount--;
- }
- else
- {
- if (YY_START==CopyArgRound2)
- {
- *g_copyArgValue+=" "+g_curArgName;
- }
- BEGIN( g_readArgContext );
- }
- }
-<CopyArgSharp>"<" {
- g_argSharpCount++;
- *g_copyArgValue += *yytext;
- }
-<CopyArgSharp>">" {
- *g_copyArgValue += *yytext;
- if (g_argSharpCount>0) g_argSharpCount--;
- else BEGIN( g_readArgContext );
- }
-<CopyArgCurly>"{" {
- g_argCurlyCount++;
- *g_copyArgValue += *yytext;
- }
-<CopyArgSharp>"}" {
- *g_copyArgValue += *yytext;
- if (g_argCurlyCount>0) g_argCurlyCount--;
- else BEGIN( g_readArgContext );
- }
-<CopyArgString>\\. {
- g_curArgDefValue+=yytext;
- }
-<CopyArgString>\" {
- g_curArgDefValue+=*yytext;
- BEGIN( ReadFuncArgDef );
- }
-<ReadFuncArgType>"=" {
- BEGIN( ReadFuncArgDef );
- }
-<ReadFuncArgType,ReadFuncArgDef>[,)>]{B}*("/*"[*!]|"//"[/!])"<" {
- g_lastDocContext=YY_START;
- g_lastDocChar=*yytext;
- QCString text=yytext;
- if (text.find("//")!=-1)
- BEGIN( ReadDocLine );
- else
- BEGIN( ReadDocBlock );
- }
-<ReadFuncArgType,ReadFuncArgDef>[,)>] {
- if (*yytext==')' && g_curArgTypeName.stripWhiteSpace().isEmpty())
- {
- g_curArgTypeName+=*yytext;
- BEGIN(FuncQual);
- }
- else
- {
- g_curArgTypeName=removeRedundantWhiteSpace(g_curArgTypeName);
- g_curArgDefValue=g_curArgDefValue.stripWhiteSpace();
- //printf("curArgType=`%s' curArgDefVal=`%s'\n",g_curArgTypeName.data(),g_curArgDefValue.data());
- int l=g_curArgTypeName.length();
- if (l>0)
- {
- int i=l-1;
- while (i>=0 && (isspace((uchar)g_curArgTypeName.at(i)) || g_curArgTypeName.at(i)=='.')) i--;
- while (i>=0 && isId(g_curArgTypeName.at(i))) i--;
- Argument *a = new Argument;
- a->attrib = g_curArgAttrib.copy();
- //printf("a->type=%s a->name=%s i=%d l=%d\n",
- // a->type.data(),a->name.data(),i,l);
- a->array.resize(0);
- if (i==l-1 && g_curArgTypeName.at(i)==')') // function argument
- {
- int bi=g_curArgTypeName.find('(');
- int fi=bi-1;
- //printf("func arg fi=%d\n",fi);
- while (fi>=0 && isId(g_curArgTypeName.at(fi))) fi--;
- if (fi>=0)
- {
- a->type = g_curArgTypeName.left(fi+1);
- a->name = g_curArgTypeName.mid(fi+1,bi-fi-1).stripWhiteSpace();
- a->array = g_curArgTypeName.right(l-bi);
- }
- else
- {
- a->type = g_curArgTypeName;
- }
- }
- else if (i>=0 && g_curArgTypeName.at(i)!=':')
- { // type contains a name
- a->type = removeRedundantWhiteSpace(g_curArgTypeName.left(i+1)).stripWhiteSpace();
- a->name = g_curArgTypeName.right(l-i-1).stripWhiteSpace();
-
- // if the type becomes a type specifier only then we make a mistake
- // and need to correct it to avoid seeing a nameless parameter
- // "struct A" as a parameter with type "struct" and name "A".
- int sv=0;
- if (a->type.left(6)=="const ") sv=6;
- else if (a->type.left(9)=="volatile ") sv=9;
-
- if (a->type.mid(sv)=="struct" ||
- a->type.mid(sv)=="union" ||
- a->type.mid(sv)=="class" ||
- a->type.mid(sv)=="typename" ||
- a->type=="const" ||
- a->type=="volatile"
- )
- {
- a->type = a->type + " " + a->name;
- a->name.resize(0);
- }
- //printf(" --> a->type='%s'\n",a->type.data());
- }
- else // assume only the type was specified, try to determine name later
- {
- a->type = removeRedundantWhiteSpace(g_curArgTypeName);
- }
- a->array += removeRedundantWhiteSpace(g_curArgArray);
- //printf("array=%s\n",a->array.data());
- int alen = a->array.length();
- if (alen>2 && a->array.at(0)=='(' &&
- a->array.at(alen-1)==')') // fix-up for int *(a[10])
- {
- int i=a->array.find('[')-1;
- a->array = a->array.mid(1,alen-2);
- if (i>0 && a->name.isEmpty())
- {
- a->name = a->array.left(i).stripWhiteSpace();
- a->array = a->array.mid(i);
- }
- }
- a->defval = g_curArgDefValue.copy();
- //printf("a->type=%s a->name=%s a->defval=\"%s\"\n",a->type.data(),a->name.data(),a->defval.data());
- a->docs = g_curArgDocs.stripWhiteSpace();
- //printf("Argument `%s' `%s' adding docs=`%s'\n",a->type.data(),a->name.data(),a->docs.data());
- g_argList->append(a);
- }
- g_curArgAttrib.resize(0);
- g_curArgTypeName.resize(0);
- g_curArgDefValue.resize(0);
- g_curArgArray.resize(0);
- g_curArgDocs.resize(0);
- if (*yytext==')')
- {
- BEGIN(FuncQual);
- //printf(">>> end of argument list\n");
- }
- else
- {
- BEGIN( ReadFuncArgType );
- }
- }
- }
-<ReadFuncArgType,ReadFuncArgPtr>{ID} {
- QCString name=yytext; //resolveDefines(yytext);
- if (YY_START==ReadFuncArgType && g_curArgArray=="[]") // Java style array
- {
- g_curArgTypeName+=" []";
- g_curArgArray.resize(0);
- }
- //printf("resolveName `%s'->`%s'\n",yytext,name.data());
- g_curArgTypeName+=name;
- }
-<ReadFuncArgType,ReadFuncArgPtr>. {
- g_curArgTypeName+=*yytext;
- }
-
-<ReadFuncArgDef,CopyArgString>"->"|">="|">>" {
- g_curArgDefValue+=yytext;
- }
-<ReadFuncArgDef,CopyArgString>. {
- g_curArgDefValue+=*yytext;
- }
-<CopyArgRound,CopyArgRound2,CopyArgSharp,CopyArgCurly>{ID} {
- QCString name=yytext; //resolveDefines(yytext);
- *g_copyArgValue+=name;
- }
-<CopyArgRound,CopyArgRound2,CopyArgSharp,CopyArgCurly>. {
- *g_copyArgValue += *yytext;
- }
-<FuncQual>"const" {
- g_argList->constSpecifier=TRUE;
- }
-<FuncQual>"volatile" {
- g_argList->volatileSpecifier=TRUE;
- }
-<FuncQual>"="{B}*"0" {
- g_argList->pureSpecifier=TRUE;
- }
-<FuncQual>")"{B}*"["[^]]*"]" { // for functions returning a pointer to an array,
- // i.e. ")[]" in "int (*f(int))[4]" with argsString="(int))[4]"
- g_extraTypeChars=yytext;
- }
-<ReadDocBlock>[^\*\n]+ {
- g_curArgDocs+=yytext;
- }
-<ReadDocLine>[^\n]+ {
- g_curArgDocs+=yytext;
- }
-<ReadDocBlock>"*/" {
- if (g_lastDocChar!=0)
- unput(g_lastDocChar);
- BEGIN(g_lastDocContext);
- }
-<ReadDocLine>\n {
- if (g_lastDocChar!=0)
- unput(g_lastDocChar);
- BEGIN(g_lastDocContext);
- }
-<ReadDocBlock>\n {
- g_curArgDocs+=*yytext;
- }
-<ReadDocBlock>. {
- g_curArgDocs+=*yytext;
- }
-<*>("/*"[*!]|"//"[/!])("<"?) {
- g_lastDocContext=YY_START;
- g_lastDocChar=0;
- if (yytext[1]=='/')
- BEGIN( ReadDocLine );
- else
- BEGIN( ReadDocBlock );
- }
-<*>\n
-<*>.
-
-%%
-
-/* ----------------------------------------------------------------------------
- */
-
-/*! Converts an argument string into an ArgumentList.
- * \param argsString the list of Arguments.
- * \param al a reference to resulting argument list pointer.
- */
-
-void stringToArgumentList(const char *argsString,ArgumentList* al,QCString *extraTypeChars)
-{
- if (al==0) return;
- if (argsString==0) return;
-
- g_copyArgValue=0;
- g_curArgDocs.resize(0);
- g_curArgAttrib.resize(0);
- g_curArgArray.resize(0);
- g_extraTypeChars.resize(0);
- g_argRoundCount = 0;
- g_argSharpCount = 0;
- g_argCurlyCount = 0;
- g_lastDocChar = 0;
-
- g_inputString = argsString;
- g_inputPosition = 0;
- g_curArgTypeName.resize(0);
- g_curArgDefValue.resize(0);
- g_curArgName.resize(0);
- g_argList = al;
- defargsYYrestart( defargsYYin );
- BEGIN( Start );
- defargsYYlex();
- if (extraTypeChars) *extraTypeChars=g_extraTypeChars;
- //printf("stringToArgumentList(%s) result=%s\n",argsString,argListToString(al).data());
-}
-
-#if !defined(YY_FLEX_SUBMINOR_VERSION)
-extern "C" { // some bogus code to keep the compiler happy
- void defargsYYdummy() { yy_flex_realloc(0,0); }
-}
-#endif
-
diff --git a/trunk/src/defgen.cpp b/trunk/src/defgen.cpp
deleted file mode 100644
index c3b17ba..0000000
--- a/trunk/src/defgen.cpp
+++ /dev/null
@@ -1,631 +0,0 @@
-/******************************************************************************
- *
- *
- *
- *
- * Copyright (C) 1997-2012 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.
- *
- */
-
-#include <stdlib.h>
-
-#include "qtbc.h"
-#include "defgen.h"
-#include "doxygen.h"
-#include "message.h"
-#include "config.h"
-#include "classlist.h"
-#include "util.h"
-#include "defargs.h"
-#include "outputgen.h"
-#include "dot.h"
-#include "arguments.h"
-
-#include <qdir.h>
-#include <qfile.h>
-#include <qtextstream.h>
-
-#define DEF_DB(x)
-
-inline void writeDEFString(FTextStream &t,const char *s)
-{
- const char* p=s;
- char c;
-
- t << '\'';
- while ((c = *(p++)))
- {
- if (c == '\'')
- t << '\\';
- t << c;
- }
- t << '\'';
-}
-
-void generateDEFForMember(MemberDef *md,
- FTextStream &t,
- Definition *def,
- const char* Prefix)
-{
- QCString memPrefix;
-
- // + declaration
- // - reimplements
- // - reimplementedBy
- // - exceptions
- // - const/volatile specifiers
- // - examples
- // + source definition
- // - source references
- // - source referenced by
- // - include code
-
- if (md->memberType()==MemberDef::EnumValue) return;
-
- QCString scopeName;
- if (md->getClassDef())
- scopeName=md->getClassDef()->name();
- else if (md->getNamespaceDef())
- scopeName=md->getNamespaceDef()->name();
-
- t << " " << Prefix << "-member = {" << endl;
- memPrefix = " ";
- memPrefix.append( Prefix );
- memPrefix.append( "-mem-" );
-
- QCString memType;
- bool isFunc=FALSE;
- switch (md->memberType())
- {
- case MemberDef::Define: memType="define"; break;
- case MemberDef::EnumValue: ASSERT(0); break;
- case MemberDef::Property: memType="property"; break;
- case MemberDef::Event: memType="event"; break;
- case MemberDef::Variable: memType="variable"; break;
- case MemberDef::Typedef: memType="typedef"; break;
- case MemberDef::Enumeration: memType="enum"; break;
- case MemberDef::Function: memType="function"; isFunc=TRUE; break;
- case MemberDef::Signal: memType="signal"; isFunc=TRUE; break;
- case MemberDef::Friend: memType="friend"; isFunc=TRUE; break;
- case MemberDef::DCOP: memType="dcop"; isFunc=TRUE; break;
- case MemberDef::Slot: memType="slot"; isFunc=TRUE; break;
- }
-
- t << memPrefix << "kind = '" << memType << "';" << endl;
- t << memPrefix << "id = '"
- << md->getOutputFileBase() << "_1" << md->anchor()
- << "';" << endl;
-
- t << memPrefix << "virt = ";
- switch (md->virtualness())
- {
- case Normal: t << "normal;" << endl; break;
- case Virtual: t << "virtual;" << endl; break;
- case Pure: t << "pure-virtual;" << endl; break;
- default: ASSERT(0);
- }
-
- t << memPrefix << "prot = ";
- switch(md->protection())
- {
- case Public: t << "public;" << endl; break;
- case Protected: t << "protected;" << endl; break;
- case Private: t << "private;" << endl; break;
- case Package: t << "package;" << endl; break;
- }
-
- if (md->memberType()!=MemberDef::Define &&
- md->memberType()!=MemberDef::Enumeration
- )
- {
- QCString typeStr = replaceAnonymousScopes(md->typeString());
- t << memPrefix << "type = <<_EnD_oF_dEf_TeXt_" << endl << typeStr << endl
- << "_EnD_oF_dEf_TeXt_;" << endl;
- }
-
- t << memPrefix << "name = '" << md->name() << "';" << endl;
-
- if (isFunc) //function
- {
- ArgumentList *declAl = new ArgumentList;
- LockingPtr<ArgumentList> defAl = md->argumentList();
- stringToArgumentList(md->argsString(),declAl);
- QCString fcnPrefix = " " + memPrefix + "param-";
-
- if (declAl->count()>0)
- {
- ArgumentListIterator declAli(*declAl);
- ArgumentListIterator defAli(*defAl);
- Argument *a;
- for (declAli.toFirst();(a=declAli.current());++declAli)
- {
- Argument *defArg = defAli.current();
- t << memPrefix << "param = {" << endl;
- if (!a->attrib.isEmpty())
- {
- t << fcnPrefix << "attributes = ";
- writeDEFString(t,a->attrib);
- t << ';' << endl;
- }
- if (!a->type.isEmpty())
- {
- t << fcnPrefix << "type = <<_EnD_oF_dEf_TeXt_" << endl
- << a->type << endl << "_EnD_oF_dEf_TeXt_;" << endl;
- }
- if (!a->name.isEmpty())
- {
- t << fcnPrefix << "declname = ";
- writeDEFString(t,a->name);
- t << ';' << endl;
- }
- if (defArg && !defArg->name.isEmpty() && defArg->name!=a->name)
- {
- t << fcnPrefix << "defname = ";
- writeDEFString(t,defArg->name);
- t << ';' << endl;
- }
- if (!a->array.isEmpty())
- {
- t << fcnPrefix << "array = ";
- writeDEFString(t,a->array);
- t << ';' << endl;
- }
- if (!a->defval.isEmpty())
- {
- t << fcnPrefix << "defval = <<_EnD_oF_dEf_TeXt_" << endl
- << a->defval << endl << "_EnD_oF_dEf_TeXt_;" << endl;
- }
- if (defArg) ++defAli;
- t << " }; /*" << fcnPrefix << "-param */" << endl;
- }
- }
- delete declAl;
- }
- else if ( md->memberType()==MemberDef::Define
- && md->argsString()!=0)
- {
- ArgumentListIterator ali(*md->argumentList());
- Argument *a;
- QCString defPrefix = " " + memPrefix + "def-";
-
- for (ali.toFirst();(a=ali.current());++ali)
- {
- t << memPrefix << "param = {" << endl;
- t << defPrefix << "name = '" << a->type << "';" << endl;
- t << " }; /*" << defPrefix << "-param */" << endl;
- }
- }
-
- if (!md->initializer().isEmpty())
- {
- t << memPrefix << "initializer = <<_EnD_oF_dEf_TeXt_" << endl
- << md->initializer() << endl << "_EnD_oF_dEf_TeXt_;" << endl;
- }
- // TODO: exceptions, const volatile
- if (md->memberType()==MemberDef::Enumeration) // enum
- {
- LockingPtr<MemberList> enumList = md->enumFieldList();
- if (enumList!=0)
- {
- MemberListIterator emli(*enumList);
- MemberDef *emd;
- for (emli.toFirst();(emd=emli.current());++emli)
- {
- t << memPrefix << "enum = { enum-name = " << emd->name() << ';';
- if (!emd->initializer().isEmpty())
- {
- t << " enum-value = ";
- writeDEFString(t,emd->initializer());
- t << ';';
- }
- t << " };" << endl;
- }
- }
- }
-
- t << memPrefix << "desc-file = '" << md->getDefFileName() << "';" << endl;
- t << memPrefix << "desc-line = '" << md->getDefLine() << "';" << endl;
- t << memPrefix << "briefdesc = <<_EnD_oF_dEf_TeXt_" << endl
- << md->briefDescription() << endl << "_EnD_oF_dEf_TeXt_;" << endl;
- t << memPrefix << "documentation = <<_EnD_oF_dEf_TeXt_" << endl
- << md->documentation() << endl << "_EnD_oF_dEf_TeXt_;" << endl;
-
- //printf("md->getReferencesMembers()=%p\n",md->getReferencesMembers());
-
- LockingPtr<MemberSDict> mdict = md->getReferencesMembers();
- if (!mdict.isNull())
- {
- MemberSDict::Iterator mdi(*mdict);
- MemberDef *rmd;
- QCString refPrefix = " " + memPrefix + "ref-";
-
- for (mdi.toFirst();(rmd=mdi.current());++mdi)
- {
- if (rmd->getStartBodyLine()!=-1 && rmd->getBodyDef())
- {
- t << memPrefix << "referenceto = {" << endl;
- t << refPrefix << "id = '"
- << rmd->getBodyDef()->getOutputFileBase()
- << "_1" // encoded `:' character (see util.cpp:convertNameToFile)
- << rmd->anchor() << "';" << endl;
-
- t << refPrefix << "line = '"
- << rmd->getStartBodyLine() << "';" << endl;
-
- QCString scope = rmd->getScopeString();
- QCString name = rmd->name();
- if (!scope.isEmpty() && scope!=def->name())
- {
- name.prepend(scope+"::");
- }
-
- t << refPrefix << "name = ";
- writeDEFString(t,name);
- t << ';' << endl << " };" << endl;
- }
- } /* for (mdi.toFirst...) */
- }
- mdict = md->getReferencedByMembers();
- if (!mdict.isNull())
- {
- MemberSDict::Iterator mdi(*mdict);
- MemberDef *rmd;
- QCString refPrefix = " " + memPrefix + "ref-";
-
- for (mdi.toFirst();(rmd=mdi.current());++mdi)
- {
- if (rmd->getStartBodyLine()!=-1 && rmd->getBodyDef())
- {
- t << memPrefix << "referenceby = {" << endl;
- t << refPrefix << "id = '"
- << rmd->getBodyDef()->getOutputFileBase()
- << "_1" // encoded `:' character (see util.cpp:convertNameToFile)
- << rmd->anchor() << "';" << endl;
-
- t << refPrefix << "line = '"
- << rmd->getStartBodyLine() << "';" << endl;
-
- QCString scope = rmd->getScopeString();
- QCString name = rmd->name();
- if (!scope.isEmpty() && scope!=def->name())
- {
- name.prepend(scope+"::");
- }
-
- t << refPrefix << "name = ";
- writeDEFString(t,name);
- t << ';' << endl << " };" << endl;
- }
- } /* for (mdi.toFirst...) */
- }
-
- t << " }; /* " << Prefix << "-member */" << endl;
-}
-
-
-void generateDEFClassSection(ClassDef *cd,
- FTextStream &t,
- MemberList *ml,
- const char *kind)
-{
- if (cd && ml && ml->count()>0)
- {
- t << " cp-section = {" << endl;
- t << " sec-kind = '" << kind << "';" << endl;
-
- MemberListIterator mli(*ml);
- MemberDef *md;
- for (mli.toFirst();(md=mli.current());++mli)
- {
- generateDEFForMember(md,t,cd,"sec");
- }
- t << " }; /* cp-section */" << endl;
- }
-}
-
-void generateDEFForClass(ClassDef *cd,FTextStream &t)
-{
- // + brief description
- // + detailed description
- // - template arguments
- // - include files
- // + inheritance diagram
- // + list of direct super classes
- // + list of direct sub classes
- // + collaboration diagram
- // - list of all members
- // + user defined member sections
- // + standard member sections
- // + detailed member documentation
- // - examples
-
- if (cd->isReference()) return; // skip external references.
- if (cd->name().find('@')!=-1) return; // skip anonymous compounds.
- if (cd->templateMaster()!=0) return; // skip generated template instances.
-
- t << cd->compoundTypeString() << " = {" << endl;
- t << " cp-id = '" << cd->getOutputFileBase() << "';" << endl;
- t << " cp-name = '" << cd->name() << "';" << endl;
-
- if (cd->baseClasses())
- {
- BaseClassListIterator bcli(*cd->baseClasses());
- BaseClassDef *bcd;
- for (bcli.toFirst();(bcd=bcli.current());++bcli)
- {
- t << " cp-ref = {" << endl << " ref-type = base;" << endl;
- t << " ref-id = '"
- << bcd->classDef->getOutputFileBase() << "';" << endl;
- t << " ref-prot = ";
- switch (bcd->prot)
- {
- case Public: t << "public;" << endl; break;
- case Package: // package scope is not possible
- case Protected: t << "protected;" << endl; break;
- case Private: t << "private;" << endl; break;
- }
- t << " ref-virt = ";
- switch(bcd->virt)
- {
- case Normal: t << "non-virtual;"; break;
- case Virtual: t << "virtual;"; break;
- case Pure: t << "pure-virtual;"; break;
- }
- t << endl << " };" << endl;
- }
- }
-
- if (cd->subClasses())
- {
- BaseClassListIterator bcli(*cd->subClasses());
- BaseClassDef *bcd;
- for (bcli.toFirst();(bcd=bcli.current());++bcli)
- {
- t << " cp-ref = {" << endl << " ref-type = derived;" << endl;
- t << " ref-id = '"
- << bcd->classDef->getOutputFileBase() << "';" << endl;
- t << " ref-prot = ";
- switch (bcd->prot)
- {
- case Public: t << "public;" << endl; break;
- case Package: // packet scope is not possible!
- case Protected: t << "protected;" << endl; break;
- case Private: t << "private;" << endl; break;
- }
- t << " ref-virt = ";
- switch(bcd->virt)
- {
- case Normal: t << "non-virtual;"; break;
- case Virtual: t << "virtual;"; break;
- case Pure: t << "pure-virtual;"; break;
- }
- t << endl << " };" << endl;
- }
- }
-
- int numMembers = 0;
- QListIterator<MemberList> mli(cd->getMemberLists());
- MemberList *ml;
- for (mli.toFirst();(ml=mli.current());++mli)
- {
- if ((ml->listType()&MemberList::detailedLists)==0)
- {
- numMembers+=ml->count();
- }
- }
- if (numMembers>0)
- {
- generateDEFClassSection(cd,t,cd->getMemberList(MemberList::pubTypes),"public-type");
- generateDEFClassSection(cd,t,cd->getMemberList(MemberList::pubMethods),"public-func");
- generateDEFClassSection(cd,t,cd->getMemberList(MemberList::pubAttribs),"public-attrib");
- generateDEFClassSection(cd,t,cd->getMemberList(MemberList::pubSlots),"public-slot");
- generateDEFClassSection(cd,t,cd->getMemberList(MemberList::signals),"signal");
- generateDEFClassSection(cd,t,cd->getMemberList(MemberList::dcopMethods),"dcop-func");
- generateDEFClassSection(cd,t,cd->getMemberList(MemberList::properties),"property");
- generateDEFClassSection(cd,t,cd->getMemberList(MemberList::pubStaticMethods),"public-static-func");
- generateDEFClassSection(cd,t,cd->getMemberList(MemberList::pubStaticAttribs),"public-static-attrib");
- generateDEFClassSection(cd,t,cd->getMemberList(MemberList::proTypes),"protected-type");
- generateDEFClassSection(cd,t,cd->getMemberList(MemberList::proMethods),"protected-func");
- generateDEFClassSection(cd,t,cd->getMemberList(MemberList::proAttribs),"protected-attrib");
- generateDEFClassSection(cd,t,cd->getMemberList(MemberList::proSlots),"protected-slot");
- generateDEFClassSection(cd,t,cd->getMemberList(MemberList::proStaticMethods),"protected-static-func");
- generateDEFClassSection(cd,t,cd->getMemberList(MemberList::proStaticAttribs),"protected-static-attrib");
- generateDEFClassSection(cd,t,cd->getMemberList(MemberList::priTypes),"private-type");
- generateDEFClassSection(cd,t,cd->getMemberList(MemberList::priMethods),"private-func");
- generateDEFClassSection(cd,t,cd->getMemberList(MemberList::priAttribs),"private-attrib");
- generateDEFClassSection(cd,t,cd->getMemberList(MemberList::priSlots),"private-slot");
- generateDEFClassSection(cd,t,cd->getMemberList(MemberList::priStaticMethods),"private-static-func");
- generateDEFClassSection(cd,t,cd->getMemberList(MemberList::priStaticAttribs),"private-static-attrib");
- generateDEFClassSection(cd,t,cd->getMemberList(MemberList::friends),"signal");
- generateDEFClassSection(cd,t,cd->getMemberList(MemberList::related),"related");
- }
-
- t << " cp-filename = '" << cd->getDefFileName() << "';" << endl;
- t << " cp-fileline = '" << cd->getDefLine() << "';" << endl;
- t << " cp-briefdesc = <<_EnD_oF_dEf_TeXt_" << endl
- << cd->briefDescription() << endl << "_EnD_oF_dEf_TeXt_;" << endl;
-
- t << " cp-documentation = <<_EnD_oF_dEf_TeXt_" << endl
- << cd->documentation() << endl << "_EnD_oF_dEf_TeXt_;" << endl;
-
- DotClassGraph inheritanceGraph(cd,DotNode::Inheritance);
- if (!inheritanceGraph.isTrivial())
- {
- t << " cp-inheritancegraph = <<_EnD_oF_dEf_TeXt_" << endl;
- inheritanceGraph.writeDEF(t);
- t << endl << "_EnD_oF_dEf_TeXt_;" << endl;
- }
- DotClassGraph collaborationGraph(cd,DotNode::Collaboration);
- if (!collaborationGraph.isTrivial())
- {
- t << " cp-collaborationgraph = <<_EnD_oF_dEf_TeXt_" << endl;
- collaborationGraph.writeDEF(t);
- t << endl << "_EnD_oF_dEf_TeXt_;" << endl;
- }
- t << "}; /* " << cd->compoundTypeString() << " */" << endl;
-}
-
-void generateDEFSection(Definition *d,
- FTextStream &t,
- MemberList *ml,
- const char *kind)
-{
- if (ml && ml->count()>0)
- {
- t << " " << kind << " = {" << endl;
- MemberListIterator mli(*ml);
- MemberDef *md;
- for (mli.toFirst();(md=mli.current());++mli)
- {
- generateDEFForMember(md,t,d,kind);
- }
- t << " };" << endl;
- }
-}
-
-void generateDEFForNamespace(NamespaceDef *nd,FTextStream &t)
-{
- if (nd->isReference()) return; // skip external references
- t << " namespace = {" << endl;
- t << " ns-id = '" << nd->getOutputFileBase() << "';" << endl;
- t << " ns-name = ";
- writeDEFString(t,nd->name());
- t << ';' << endl;
-
- generateDEFSection(nd,t,nd->getMemberList(MemberList::decDefineMembers),"define");
- generateDEFSection(nd,t,nd->getMemberList(MemberList::decProtoMembers),"prototype");
- generateDEFSection(nd,t,nd->getMemberList(MemberList::decTypedefMembers),"typedef");
- generateDEFSection(nd,t,nd->getMemberList(MemberList::decEnumMembers),"enum");
- generateDEFSection(nd,t,nd->getMemberList(MemberList::decFuncMembers),"func");
- generateDEFSection(nd,t,nd->getMemberList(MemberList::decVarMembers),"var");
-
- t << " ns-filename = '" << nd->getDefFileName() << "';" << endl;
- t << " ns-fileline = '" << nd->getDefLine() << "';" << endl;
- t << " ns-briefdesc = <<_EnD_oF_dEf_TeXt_" << endl
- << nd->briefDescription() << endl << "_EnD_oF_dEf_TeXt_;" << endl;
-
- t << " ns-documentation = <<_EnD_oF_dEf_TeXt_" << endl
- << nd->documentation() << endl << "_EnD_oF_dEf_TeXt_;" << endl;
- t << " };" << endl;
-}
-
-void generateDEFForFile(FileDef *fd,FTextStream &t)
-{
- if (fd->isReference()) return; // skip external references
-
- t << "file = {" << endl;
- t << " file-id = '" << fd->getOutputFileBase() << "';" << endl;
- t << " file-name = ";
- writeDEFString(t,fd->name());
- t << ';' << endl;
-
- generateDEFSection(fd,t,fd->getMemberList(MemberList::decDefineMembers),"define");
- generateDEFSection(fd,t,fd->getMemberList(MemberList::decProtoMembers),"prototype");
- generateDEFSection(fd,t,fd->getMemberList(MemberList::decTypedefMembers),"typedef");
- generateDEFSection(fd,t,fd->getMemberList(MemberList::decEnumMembers),"enum");
- generateDEFSection(fd,t,fd->getMemberList(MemberList::decFuncMembers),"func");
- generateDEFSection(fd,t,fd->getMemberList(MemberList::decVarMembers),"var");
-
- t << " file-full-name = '" << fd->getDefFileName() << "';" << endl;
- t << " file-first-line = '" << fd->getDefLine() << "';" << endl;
-
- t << " file-briefdesc = <<_EnD_oF_dEf_TeXt_" << endl
- << fd->briefDescription() << endl << "_EnD_oF_dEf_TeXt_;" << endl;
-
- t << " file-documentation = <<_EnD_oF_dEf_TeXt_" << endl
- << fd->documentation() << endl << "_EnD_oF_dEf_TeXt_;" << endl;
-
- t << "}; /* file */" << endl;
-}
-
-
-void generateDEF()
-{
- QCString outputDirectory = Config_getString("OUTPUT_DIRECTORY");
- if (outputDirectory.isEmpty())
- {
- outputDirectory=QDir::currentDirPath();
- }
- else
- {
- QDir dir(outputDirectory);
- if (!dir.exists())
- {
- dir.setPath(QDir::currentDirPath());
- if (!dir.mkdir(outputDirectory))
- {
- err("error: tag OUTPUT_DIRECTORY: Output directory `%s' does not "
- "exist and cannot be created\n",outputDirectory.data());
- exit(1);
- }
- else if (!Config_getBool("QUIET"))
- {
- err("notice: Output directory `%s' does not exist. "
- "I have created it for you.\n", outputDirectory.data());
- }
- dir.cd(outputDirectory);
- }
- outputDirectory=dir.absPath();
- }
-
- QDir dir(outputDirectory);
- if (!dir.exists())
- {
- dir.setPath(QDir::currentDirPath());
- if (!dir.mkdir(outputDirectory))
- {
- err("Cannot create directory %s\n",outputDirectory.data());
- return;
- }
- }
- QDir defDir(outputDirectory+"/def");
- if (!defDir.exists() && !defDir.mkdir(outputDirectory+"/def"))
- {
- err("Could not create def directory in %s\n",outputDirectory.data());
- return;
- }
-
- QCString fileName=outputDirectory+"/def/doxygen.def";
- QFile f(fileName);
- if (!f.open(IO_WriteOnly))
- {
- err("Cannot open file %s for writing!\n",fileName.data());
- return;
- }
- FTextStream t(&f);
- t << "AutoGen Definitions dummy;" << endl;
-
- if (Doxygen::classSDict->count()+Doxygen::inputNameList->count()>0)
- {
- ClassSDict::Iterator cli(*Doxygen::classSDict);
- ClassDef *cd;
- for (cli.toFirst();(cd=cli.current());++cli)
- {
- generateDEFForClass(cd,t);
- }
- FileNameListIterator fnli(*Doxygen::inputNameList);
- FileName *fn;
- for (;(fn=fnli.current());++fnli)
- {
- FileNameIterator fni(*fn);
- FileDef *fd;
- for (;(fd=fni.current());++fni)
- {
- generateDEFForFile(fd,t);
- }
- }
- }
- else
- {
- t << "dummy_value = true;" << endl;
- }
-}
diff --git a/trunk/src/defgen.h b/trunk/src/defgen.h
deleted file mode 100644
index 5b26cd0..0000000
--- a/trunk/src/defgen.h
+++ /dev/null
@@ -1,20 +0,0 @@
-/******************************************************************************
- *
- *
- *
- * Copyright (C) 1997-2012 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.
- *
- */
-
-#ifndef DEFGEN_H
-#define DEFGEN_H
-
-void generateDEF();
-
-#endif
diff --git a/trunk/src/define.cpp b/trunk/src/define.cpp
deleted file mode 100644
index e5dd154..0000000
--- a/trunk/src/define.cpp
+++ /dev/null
@@ -1,52 +0,0 @@
-/******************************************************************************
- *
- *
- *
- * Copyright (C) 1997-2012 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.
- *
- */
-
-#include "define.h"
-#include "config.h"
-
-Define::Define()
-{
- fileDef=0;
- lineNr=1;
- nargs=-1;
- undef=FALSE;
- varArgs=FALSE;
- isPredefined=FALSE;
- nonRecursive=FALSE;
-}
-
-Define::Define(const Define &d)
- : name(d.name),definition(d.definition),fileName(d.fileName)
-{
- //name=d.name; definition=d.definition; fileName=d.fileName;
- lineNr=d.lineNr;
- nargs=d.nargs;
- undef=d.undef;
- varArgs=d.varArgs;
- isPredefined=d.isPredefined;
- nonRecursive=d.nonRecursive;
- fileDef=0;
-}
-
-Define::~Define()
-{
-}
-
-bool Define::hasDocumentation()
-{
- return definition && (doc || Config_getBool("EXTRACT_ALL"));
-}
diff --git a/trunk/src/define.h b/trunk/src/define.h
deleted file mode 100644
index b5e4f6e..0000000
--- a/trunk/src/define.h
+++ /dev/null
@@ -1,91 +0,0 @@
-/******************************************************************************
- *
- *
- *
- * Copyright (C) 1997-2012 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.
- *
- */
-
-#ifndef DEFINE_H
-#define DEFINE_H
-
-#include "qtbc.h"
-#include <qdict.h>
-#include <qlist.h>
-
-class FileDef;
-
-class Define
-{
- public:
- Define();
- Define(const Define &d);
- ~Define();
- bool hasDocumentation();
- QCString name;
- QCString definition;
- QCString fileName;
- QCString doc;
- QCString brief;
- QCString args;
- QCString anchor;
- FileDef *fileDef;
- int lineNr;
- int nargs;
- bool undef;
- bool varArgs;
- bool isPredefined;
- bool nonRecursive;
-};
-
-class DefineList : public QList<Define>
-{
- public:
- DefineList() : QList<Define>() {}
- ~DefineList() {}
- int compareItems(GCI i1,GCI i2)
- {
- return stricmp(((Define *)i1)->name,((Define *)i2)->name);
- }
-};
-
-class DefineName : public QList<Define>
-{
- public:
- DefineName(const char *n) : QList<Define>() { name=n; }
- ~DefineName() {}
- const char *nameString() const { return name; }
- int compareItems(GCI i1,GCI i2)
- {
- return stricmp(((Define *)i1)->name,((Define *)i2)->name);
- }
-
- private:
- QCString name;
-};
-
-class DefineNameList : public QList<DefineName>
-{
- public:
- DefineNameList() : QList<DefineName>() {}
- ~DefineNameList() {}
- int compareItems(GCI i1,GCI i2)
- {
- return stricmp(((DefineName *)i1)->nameString(),
- ((DefineName *)i2)->nameString());
- }
-};
-
-typedef QDict<Define> DefineDict;
-typedef QDict<DefineName> DefineNameDict;
-
-#endif
diff --git a/trunk/src/definition.cpp b/trunk/src/definition.cpp
deleted file mode 100644
index 18e6253..0000000
--- a/trunk/src/definition.cpp
+++ /dev/null
@@ -1,1791 +0,0 @@
-/******************************************************************************
- *
- *
- *
- * Copyright (C) 1997-2012 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.
- *
- */
-
-#include "qtbc.h"
-#include <ctype.h>
-#include <qregexp.h>
-#include "md5.h"
-#include <stdio.h>
-#include <stdlib.h>
-#include <assert.h>
-#include "config.h"
-#include "definition.h"
-#include "doxygen.h"
-#include "language.h"
-#include "message.h"
-#include "outputlist.h"
-#include "code.h"
-#include "util.h"
-#include "groupdef.h"
-#include "pagedef.h"
-#include "section.h"
-#include "htags.h"
-#include "parserintf.h"
-#include "marshal.h"
-#include "debug.h"
-#include "vhdldocgen.h"
-
-#define START_MARKER 0x4445465B // DEF[
-#define END_MARKER 0x4445465D // DEF]
-
-//-----------------------------------------------------------------------------------------
-
-class DefinitionImpl
-{
- public:
- DefinitionImpl();
- ~DefinitionImpl();
- void init(const char *df, const char *n);
-
- SectionDict *sectionDict; // dictionary of all sections, not accessible
-
- MemberSDict *sourceRefByDict;
- MemberSDict *sourceRefsDict;
- QList<ListItemInfo> *xrefListItems;
- GroupList *partOfGroups;
-
- DocInfo *details; // not exported
- DocInfo *inbodyDocs; // not exported
- BriefInfo *brief; // not exported
- BodyInfo *body; // not exported
- QCString docSignatures;
-
- QCString localName; // local (unqualified) name of the definition
- // in the future m_name should become m_localName
- QCString qualifiedName;
- QCString ref; // reference to external documentation
-
- bool hidden;
- bool isArtificial;
-
- Definition *outerScope; // not owner
-
- // where the item was found
- QCString defFileName;
- QCString defFileExt;
-
- SrcLangExt lang;
-};
-
-DefinitionImpl::DefinitionImpl()
- : sectionDict(0), sourceRefByDict(0), sourceRefsDict(0),
- xrefListItems(0), partOfGroups(0),
- details(0), inbodyDocs(0), brief(0), body(0),
- outerScope(0)
-{
-}
-
-DefinitionImpl::~DefinitionImpl()
-{
- delete sectionDict;
- delete sourceRefByDict;
- delete sourceRefsDict;
- delete partOfGroups;
- delete xrefListItems;
- delete brief;
- delete details;
- delete body;
- delete inbodyDocs;
-}
-
-void DefinitionImpl::init(const char *df, const char *n)
-{
- defFileName = df;
- int lastDot = defFileName.findRev('.');
- if (lastDot!=-1)
- {
- defFileExt = defFileName.mid(lastDot);
- }
- QCString name = n;
- if (name!="<globalScope>")
- {
- //extractNamespaceName(m_name,m_localName,ns);
- localName=stripScope(n);
- }
- else
- {
- localName=n;
- }
- //printf("m_localName=%s\n",m_localName.data());
-
- brief = 0;
- details = 0;
- body = 0;
- inbodyDocs = 0;
- sourceRefByDict = 0;
- sourceRefsDict = 0;
- sectionDict = 0,
- outerScope = Doxygen::globalScope;
- partOfGroups = 0;
- xrefListItems = 0;
- hidden = FALSE;
- isArtificial = FALSE;
- lang = SrcLangExt_Unknown;
-}
-
-//-----------------------------------------------------------------------------------------
-
-static bool matchExcludedSymbols(const char *name)
-{
- static QStrList &exclSyms = Config_getList("EXCLUDE_SYMBOLS");
- if (exclSyms.count()==0) return FALSE; // nothing specified
- const char *pat = exclSyms.first();
- QCString symName = name;
- while (pat)
- {
- QCString pattern = pat;
- bool forceStart=FALSE;
- bool forceEnd=FALSE;
- if (pattern.at(0)=='^')
- pattern=pattern.mid(1),forceStart=TRUE;
- if (pattern.at(pattern.length()-1)=='$')
- pattern=pattern.left(pattern.length()-1),forceEnd=TRUE;
- if (pattern.find('*')!=-1) // wildcard mode
- {
- QRegExp re(substitute(pattern,"*",".*"),TRUE);
- int i,pl;
- i = re.match(symName,0,&pl);
- //printf(" %d = re.match(%s) pattern=%s\n",i,symName.data(),pattern.data());
- if (i!=-1) // wildcard match
- {
- int sl=symName.length();
- // check if it is a whole word match
- if ((i==0 || pattern.at(0)=='*' || (!isId(symName.at(i-1)) && !forceStart)) &&
- (i+pl==sl || pattern.at(i+pl)=='*' || (!isId(symName.at(i+pl)) && !forceEnd))
- )
- {
- //printf("--> name=%s pattern=%s match at %d\n",symName.data(),pattern.data(),i);
- return TRUE;
- }
- }
- }
- else if (!pattern.isEmpty()) // match words
- {
- int i = symName.find(pattern);
- if (i!=-1) // we have a match!
- {
- int pl=pattern.length();
- int sl=symName.length();
- // check if it is a whole word match
- if ((i==0 || (!isId(symName.at(i-1)) && !forceStart)) &&
- (i+pl==sl || (!isId(symName.at(i+pl)) && !forceEnd))
- )
- {
- //printf("--> name=%s pattern=%s match at %d\n",symName.data(),pattern.data(),i);
- return TRUE;
- }
- }
- }
- pat = exclSyms.next();
- }
- //printf("--> name=%s: no match\n",name);
- return FALSE;
-}
-
-void Definition::addToMap(const char *name,Definition *d)
-{
- bool vhdlOpt = Config_getBool("OPTIMIZE_OUTPUT_VHDL");
- QCString symbolName = name;
- int index=computeQualifiedIndex(symbolName);
- if (!vhdlOpt && index!=-1) symbolName=symbolName.mid(index+2);
- if (!symbolName.isEmpty())
- {
- //printf("******* adding symbol `%s' (%p)\n",symbolName.data(),d);
- DefinitionIntf *di=Doxygen::symbolMap->find(symbolName);
- //printf(" addToMap(%p): looking for symbol %s: %p\n",d,symbolName.data(),di);
- if (di==0) // new Symbol
- {
- //printf(" new symbol!\n");
- Doxygen::symbolMap->insert(symbolName,d);
- }
- else // existing symbol
- {
- //printf(" existing symbol: ");
- if (di->definitionType()==DefinitionIntf::TypeSymbolList) // already multiple symbols
- {
- //printf("adding to exiting list\n");
- DefinitionList *dl = (DefinitionList*)di;
- dl->append(d);
- }
- else // going from one to two symbols
- {
- Doxygen::symbolMap->take(symbolName);
- DefinitionList *dl = new DefinitionList;
- //printf("replacing symbol by list %p with elements %p and %p\n",dl,di,d);
- dl->append((Definition*)di);
- dl->append(d);
- Doxygen::symbolMap->insert(symbolName,dl);
- }
- }
-
- // auto resize if needed
- static int sizeIndex=9;
- if (Doxygen::symbolMap->size()>SDict_primes[sizeIndex])
- {
- Doxygen::symbolMap->resize(SDict_primes[++sizeIndex]);
- }
-
- d->_setSymbolName(symbolName);
- }
-}
-
-void Definition::removeFromMap(Definition *d)
-{
- QString symbolName = d->m_symbolName;
- if (!symbolName.isEmpty())
- {
- //printf("******* removing symbol `%s' (%p)\n",symbolName.data(),d);
- DefinitionIntf *di=Doxygen::symbolMap->find(symbolName);
- if (di)
- {
- if (di!=d) // symbolName not unique
- {
- //printf(" removing from list: %p!\n",di);
- DefinitionList *dl = (DefinitionList*)di;
- bool b = dl->removeRef(d);
- ASSERT(b==TRUE);
- if (dl->isEmpty())
- {
- Doxygen::symbolMap->take(symbolName);
- }
- }
- else // symbolName unique
- {
- //printf(" removing symbol %p\n",di);
- Doxygen::symbolMap->take(symbolName);
- }
- }
- }
-}
-
-Definition::Definition(const char *df,int dl,
- const char *name,const char *b,
- const char *d,bool isSymbol)
-{
- m_name = name;
- m_defLine = dl;
- m_impl = new DefinitionImpl;
- m_impl->init(df,name);
- m_isSymbol = isSymbol;
- if (isSymbol) addToMap(name,this);
- _setBriefDescription(b,df,dl);
- _setDocumentation(d,df,dl,TRUE,FALSE);
- if (matchExcludedSymbols(name))
- {
- m_impl->hidden = TRUE;
- }
-}
-
-Definition::~Definition()
-{
- if (m_isSymbol)
- {
- removeFromMap(this);
- }
- if (m_impl)
- {
- delete m_impl;
- m_impl=0;
- }
-}
-
-void Definition::setName(const char *name)
-{
- if (name==0) return;
- m_name = name;
-}
-
-void Definition::addSectionsToDefinition(QList<SectionInfo> *anchorList)
-{
- if (!anchorList) return;
- makeResident();
- //printf("%s: addSectionsToDefinition(%d)\n",name().data(),anchorList->count());
- SectionInfo *si=anchorList->first();
- while (si)
- {
- //printf("Add section `%s' to definition `%s'\n",
- // si->label.data(),name().data());
- SectionInfo *gsi=Doxygen::sectionDict.find(si->label);
- //printf("===== label=%s gsi=%p\n",si->label.data(),gsi);
- if (gsi==0)
- {
- gsi = new SectionInfo(*si);
- Doxygen::sectionDict.append(si->label,gsi);
- }
- if (m_impl->sectionDict==0)
- {
- m_impl->sectionDict = new SectionDict(17);
- }
- if (m_impl->sectionDict->find(gsi->label)==0)
- {
- m_impl->sectionDict->append(gsi->label,gsi);
- gsi->definition = this;
- }
- si=anchorList->next();
- }
-}
-
-bool Definition::hasSections() const
-{
- makeResident();
- //printf("Definition::hasSections(%s) #sections=%d\n",name().data(),
- // m_impl->sectionDict ? m_impl->sectionDict->count() : 0);
- if (m_impl->sectionDict==0) return FALSE;
- SDict<SectionInfo>::Iterator li(*m_impl->sectionDict);
- SectionInfo *si;
- for (li.toFirst();(si=li.current());++li)
- {
- if (si->type==SectionInfo::Section ||
- si->type==SectionInfo::Subsection ||
- si->type==SectionInfo::Subsubsection ||
- si->type==SectionInfo::Paragraph)
- {
- return TRUE;
- }
- }
- return FALSE;
-}
-
-void Definition::addSectionsToIndex()
-{
- makeResident();
- if (m_impl->sectionDict==0) return;
- //printf("Definition::addSectionsToIndex()\n");
- SDict<SectionInfo>::Iterator li(*m_impl->sectionDict);
- SectionInfo *si;
- int level=1;
- for (li.toFirst();(si=li.current());++li)
- {
- if (si->type==SectionInfo::Section ||
- si->type==SectionInfo::Subsection ||
- si->type==SectionInfo::Subsubsection ||
- si->type==SectionInfo::Paragraph)
- {
- //printf(" level=%d title=%s\n",level,si->title.data());
- int nextLevel = (int)si->type;
- int i;
- if (nextLevel>level)
- {
- for (i=level;i<nextLevel;i++)
- {
- Doxygen::indexList.incContentsDepth();
- }
- }
- else if (nextLevel<level)
- {
- for (i=nextLevel;i<level;i++)
- {
- Doxygen::indexList.decContentsDepth();
- }
- }
- Doxygen::indexList.addContentsItem(TRUE,si->title,
- getReference(),
- getOutputFileBase(),
- si->label,
- FALSE,
- TRUE);
- level = nextLevel;
- }
- }
- while (level>1)
- {
- Doxygen::indexList.decContentsDepth();
- level--;
- }
-}
-
-void Definition::writeToc(OutputList &ol)
-{
- makeResident();
- if (m_impl->sectionDict==0) return;
- ol.pushGeneratorState();
- ol.disableAllBut(OutputGenerator::Html);
- ol.writeString("<div class=\"toc\">");
- ol.writeString("<h3>");
- ol.writeString(theTranslator->trRTFTableOfContents());
- ol.writeString("</h3>\n");
- ol.writeString("<ul>");
- SDict<SectionInfo>::Iterator li(*m_impl->sectionDict);
- SectionInfo *si;
- int level=1;
- char cs[2];
- cs[1]='\0';
- bool inLi[5]={ FALSE, FALSE, FALSE, FALSE };
- for (li.toFirst();(si=li.current());++li)
- {
- if (si->type==SectionInfo::Section ||
- si->type==SectionInfo::Subsection ||
- si->type==SectionInfo::Subsubsection ||
- si->type==SectionInfo::Paragraph)
- {
- //printf(" level=%d title=%s\n",level,si->title.data());
- int nextLevel = (int)si->type;
- if (nextLevel>level)
- {
- ol.writeString("<ul>");
- }
- else if (nextLevel<level)
- {
- if (inLi[level]) ol.writeString("</li>\n");
- inLi[level]=FALSE;
- ol.writeString("</ul>\n");
- }
- cs[0]='0'+nextLevel;
- if (inLi[nextLevel]) ol.writeString("</li>\n");
- ol.writeString("<li class=\"level"+QCString(cs)+"\"><a href=\"#"+si->label+"\">"+si->title+"</a>");
- inLi[nextLevel]=TRUE;
- level = nextLevel;
- }
- }
- while (level>1)
- {
- if (inLi[level]) ol.writeString("</li>\n");
- inLi[level]=FALSE;
- ol.writeString("</ul>\n");
- level--;
- }
- if (inLi[level]) ol.writeString("</li>\n");
- inLi[level]=FALSE;
- ol.writeString("</ul>\n");
- ol.writeString("</div>\n");
- ol.popGeneratorState();
-}
-
-void Definition::writeDocAnchorsToTagFile()
-{
- makeResident();
- if (!Config_getString("GENERATE_TAGFILE").isEmpty() && m_impl->sectionDict)
- {
- //printf("%s: writeDocAnchorsToTagFile(%d)\n",name().data(),m_sectionDict->count());
- SDict<SectionInfo>::Iterator sdi(*m_impl->sectionDict);
- SectionInfo *si;
- for (;(si=sdi.current());++sdi)
- {
- if (!si->generated)
- {
- //printf("write an entry!\n");
- if (definitionType()==TypeMember) Doxygen::tagFile << " ";
- Doxygen::tagFile << " <docanchor file=\""
- << si->fileName << "\">" << si->label
- << "</docanchor>" << endl;
- }
- }
- }
-}
-
-bool Definition::_docsAlreadyAdded(const QCString &doc)
-{
- uchar md5_sig[16];
- QCString sigStr(33);
- // to avoid mismatches due to differences in indenting, we first remove
- // double whitespaces...
- QCString docStr = doc.simplifyWhiteSpace();
- MD5Buffer((const unsigned char *)docStr.data(),docStr.length(),md5_sig);
- MD5SigToString(md5_sig,sigStr.data(),33);
- if (m_impl->docSignatures.find(sigStr)==-1) // new docs, add signature to prevent re-adding it
- {
- m_impl->docSignatures+=":"+sigStr;
- return FALSE;
- }
- else
- {
- return TRUE;
- }
-}
-
-void Definition::_setDocumentation(const char *d,const char *docFile,int docLine,
- bool stripWhiteSpace,bool atTop)
-{
- if (d==0) return;
- //printf("Definition::setDocumentation(%s,%s,%d,%d)\n",d,docFile,docLine,stripWhiteSpace);
- QCString doc = d;
- if (stripWhiteSpace)
- {
- doc = stripLeadingAndTrailingEmptyLines(doc,docLine);
- }
- else // don't strip whitespace
- {
- doc=d;
- }
- if (!_docsAlreadyAdded(doc))
- {
- //printf("setting docs for %s: `%s'\n",name().data(),m_doc.data());
- if (m_impl->details==0)
- {
- m_impl->details = new DocInfo;
- }
- if (m_impl->details->doc.isEmpty()) // fresh detailed description
- {
- m_impl->details->doc = doc;
- }
- else if (atTop) // another detailed description, append it to the start
- {
- m_impl->details->doc = doc+"\n\n"+m_impl->details->doc;
- }
- else // another detailed description, append it to the end
- {
- m_impl->details->doc += "\n\n"+doc;
- }
- if (docLine!=-1) // store location if valid
- {
- m_impl->details->file = docFile;
- m_impl->details->line = docLine;
- }
- else
- {
- m_impl->details->file = docFile;
- m_impl->details->line = 1;
- }
- }
-}
-
-void Definition::setDocumentation(const char *d,const char *docFile,int docLine,bool stripWhiteSpace)
-{
- if (d==0) return;
- makeResident();
- _setDocumentation(d,docFile,docLine,stripWhiteSpace,FALSE);
-}
-
-#define uni_isupper(c) (QChar(c).category()==QChar::Letter_Uppercase)
-
-// do a UTF-8 aware search for the last real character and return TRUE
-// if that is a multibyte one.
-static bool lastCharIsMultibyte(const QCString &s)
-{
- int l = s.length();
- int p = 0;
- int pp = -1;
- while ((p=nextUtf8CharPosition(s,l,p))<l) pp=p;
- if (pp==-1 || ((uchar)s[pp])<0x80) return FALSE;
- return TRUE;
-}
-
-void Definition::_setBriefDescription(const char *b,const char *briefFile,int briefLine)
-{
- static QCString outputLanguage = Config_getEnum("OUTPUT_LANGUAGE");
- static bool needsDot = outputLanguage!="Japanese" &&
- outputLanguage!="Chinese" &&
- outputLanguage!="Korean";
- QCString brief = b;
- brief = brief.stripWhiteSpace();
- if (brief.isEmpty()) return;
- int bl = brief.length();
- if (bl>0 && needsDot) // add punctuation if needed
- {
- int c = brief.at(bl-1);
- switch(c)
- {
- case '.': case '!': case '?': case '>': case ':': case ')': break;
- default:
- if (uni_isupper(brief.at(0)) && !lastCharIsMultibyte(brief)) brief+='.';
- break;
- }
- }
-
- if (m_impl->brief && !m_impl->brief->doc.isEmpty())
- {
- //printf("adding to details\n");
- _setDocumentation(brief,briefFile,briefLine,FALSE,TRUE);
- }
- else if (!_docsAlreadyAdded(brief))
- {
- //fprintf(stderr,"Definition::setBriefDescription(%s,%s,%d)\n",b,briefFile,briefLine);
- if (m_impl->brief==0)
- {
- m_impl->brief = new BriefInfo;
- }
- m_impl->brief->doc=brief;
- if (briefLine!=-1)
- {
- m_impl->brief->file = briefFile;
- m_impl->brief->line = briefLine;
- }
- else
- {
- m_impl->brief->file = briefFile;
- m_impl->brief->line = 1;
- }
- }
-}
-
-void Definition::setBriefDescription(const char *b,const char *briefFile,int briefLine)
-{
- if (b==0) return;
- makeResident();
- _setBriefDescription(b,briefFile,briefLine);
-}
-
-void Definition::_setInbodyDocumentation(const char *doc,const char *inbodyFile,int inbodyLine)
-{
- if (m_impl->inbodyDocs==0)
- {
- m_impl->inbodyDocs = new DocInfo;
- }
- if (m_impl->inbodyDocs->doc.isEmpty()) // fresh inbody docs
- {
- m_impl->inbodyDocs->doc = doc;
- m_impl->inbodyDocs->file = inbodyFile;
- m_impl->inbodyDocs->line = inbodyLine;
- }
- else // another inbody documentation fragment, append this to the end
- {
- m_impl->inbodyDocs->doc += QCString("\n\n")+doc;
- }
-}
-
-void Definition::setInbodyDocumentation(const char *d,const char *inbodyFile,int inbodyLine)
-{
- if (d==0) return;
- makeResident();
- _setInbodyDocumentation(d,inbodyFile,inbodyLine);
-}
-
-/*! Reads a fragment of code from file \a fileName starting at
- * line \a startLine and ending at line \a endLine (inclusive). The fragment is
- * stored in \a result. If FALSE is returned the code fragment could not be
- * found.
- *
- * The file is scanned for a opening bracket ('{') from \a startLine onward
- * The line actually containing the bracket is returned via startLine.
- * The file is scanned for a closing bracket ('}') from \a endLine backward.
- * The line actually containing the bracket is returned via endLine.
- * Note that for VHDL code the bracket search is not done.
- */
-static bool readCodeFragment(const char *fileName,
- int &startLine,int &endLine,QCString &result)
-{
- static bool filterSourceFiles = Config_getBool("FILTER_SOURCE_FILES");
- //printf("readCodeFragment(%s,%d,%d)\n",fileName,startLine,endLine);
- if (fileName==0 || fileName[0]==0) return FALSE; // not a valid file name
- QCString filter = getFileFilter(fileName,TRUE);
- FILE *f=0;
- bool usePipe = !filter.isEmpty() && filterSourceFiles;
- SrcLangExt lang = getLanguageFromFileName(fileName);
- if (!usePipe) // no filter given or wanted
- {
- f = portable_fopen(fileName,"r");
- }
- else // use filter
- {
- QCString cmd=filter+" \""+fileName+"\"";
- Debug::print(Debug::ExtCmd,0,"Executing popen(`%s`)\n",cmd.data());
- f = portable_popen(cmd,"r");
- }
- bool found = lang==SrcLangExt_VHDL ||
- lang==SrcLangExt_Tcl ||
- lang==SrcLangExt_Python ||
- lang==SrcLangExt_Fortran;
- // for VHDL, TCL, Python, and Fortran no bracket search is possible
- if (f)
- {
- int c=0;
- int col=0;
- int lineNr=1;
- // skip until the startLine has reached
- while (lineNr<startLine && !feof(f))
- {
- while ((c=fgetc(f))!='\n' && c!=EOF) /* skip */;
- lineNr++;
- }
- if (!feof(f))
- {
- // skip until the opening bracket or lonely : is found
- char cn=0;
- while (lineNr<=endLine && !feof(f) && !found)
- {
- int pc=0;
- while ((c=fgetc(f))!='{' && c!=':' && c!=EOF)
- {
- //printf("parsing char `%c'\n",c);
- if (c=='\n')
- {
- lineNr++,col=0;
- }
- else if (c=='\t')
- {
- col+=Config_getInt("TAB_SIZE") - (col%Config_getInt("TAB_SIZE"));
- }
- else if (pc=='/' && c=='/') // skip single line comment
- {
- while ((c=fgetc(f))!='\n' && c!=EOF) pc=c;
- if (c=='\n') lineNr++,col=0;
- }
- else if (pc=='/' && c=='*') // skip C style comment
- {
- while (((c=fgetc(f))!='/' || pc!='*') && c!=EOF)
- {
- if (c=='\n') lineNr++,col=0;
- pc=c;
- }
- }
- else
- {
- col++;
- }
- pc = c;
- }
- if (c==':')
- {
- cn=fgetc(f);
- if (cn!=':') found=TRUE;
- }
- else if (c=='{') // } so vi matching brackets has no problem
- {
- found=TRUE;
- }
- }
- //printf(" -> readCodeFragment(%s,%d,%d) lineNr=%d\n",fileName,startLine,endLine,lineNr);
- if (found)
- {
- // For code with more than one line,
- // fill the line with spaces until we are at the right column
- // so that the opening brace lines up with the closing brace
- if (endLine!=startLine)
- {
- QCString spaces;
- spaces.fill(' ',col);
- result+=spaces;
- }
- // copy until end of line
- result+=c;
- if (c==':')
- {
- result+=cn;
- if (cn=='\n') lineNr++;
- }
- startLine=lineNr;
- const int maxLineLength=4096;
- char lineStr[maxLineLength];
- do
- {
- //printf("reading line %d in range %d-%d\n",lineNr,startLine,endLine);
- int size_read;
- do
- {
- // read up to maxLineLength-1 bytes, the last byte being zero
- char *p = fgets(lineStr, maxLineLength,f);
- //printf(" read %s",p);
- if (p)
- {
- size_read=qstrlen(p);
- }
- else // nothing read
- {
- size_read=-1;
- lineStr[0]='\0';
- }
- result+=lineStr;
- } while (size_read == (maxLineLength-1));
-
- lineNr++;
- } while (lineNr<=endLine && !feof(f));
-
- // strip stuff after closing bracket
- int newLineIndex = result.findRev('\n');
- int braceIndex = result.findRev('}');
- if (braceIndex > newLineIndex)
- {
- result.truncate(braceIndex+1);
- }
- endLine=lineNr-1;
- }
- }
- if (usePipe)
- {
- portable_pclose(f);
- Debug::print(Debug::FilterOutput, 0, "Filter output\n");
- Debug::print(Debug::FilterOutput,0,"-------------\n%s\n-------------\n",result.data());
- }
- else
- {
- fclose(f);
- }
- }
- result = transcodeCharacterStringToUTF8(result);
- return found;
-}
-
-/*! Write a reference to the source code defining this definition */
-void Definition::writeSourceDef(OutputList &ol,const char *)
-{
- static bool sourceBrowser = Config_getBool("SOURCE_BROWSER");
- static bool latexSourceCode = Config_getBool("LATEX_SOURCE_CODE");
- makeResident();
- ol.pushGeneratorState();
- //printf("Definition::writeSourceRef %d %p\n",bodyLine,bodyDef);
- if (sourceBrowser &&
- m_impl->body && m_impl->body->startLine!=-1 && m_impl->body->fileDef)
- {
- QCString refText = theTranslator->trDefinedAtLineInSourceFile();
- int lineMarkerPos = refText.find("@0");
- int fileMarkerPos = refText.find("@1");
- if (lineMarkerPos!=-1 && fileMarkerPos!=-1) // should always pass this.
- {
- QCString lineStr,anchorStr;
- lineStr.sprintf("%d",m_impl->body->startLine);
- anchorStr.sprintf(Htags::useHtags ? "L%d" : "l%05d",m_impl->body->startLine);
- ol.startParagraph();
- if (lineMarkerPos<fileMarkerPos) // line marker before file marker
- {
- // write text left from linePos marker
- ol.parseText(refText.left(lineMarkerPos));
- ol.pushGeneratorState();
- ol.disable(OutputGenerator::RTF);
- ol.disable(OutputGenerator::Man);
- if (!latexSourceCode)
- {
- ol.disable(OutputGenerator::Latex);
- }
- // write line link (HTML, LaTeX optionally)
- ol.writeObjectLink(0,m_impl->body->fileDef->getSourceFileBase(),
- anchorStr,lineStr);
- ol.enableAll();
- ol.disable(OutputGenerator::Html);
- if (latexSourceCode)
- {
- ol.disable(OutputGenerator::Latex);
- }
- // write normal text (Man/RTF, Latex optionally)
- ol.docify(lineStr);
- ol.popGeneratorState();
-
- // write text between markers
- ol.parseText(refText.mid(lineMarkerPos+2,
- fileMarkerPos-lineMarkerPos-2));
-
- ol.pushGeneratorState();
- ol.disable(OutputGenerator::RTF);
- ol.disable(OutputGenerator::Man);
- if (!latexSourceCode)
- {
- ol.disable(OutputGenerator::Latex);
- }
- // write line link (HTML, LaTeX optionally)
- ol.writeObjectLink(0,m_impl->body->fileDef->getSourceFileBase(),
- 0,m_impl->body->fileDef->name());
- ol.enableAll();
- ol.disable(OutputGenerator::Html);
- if (latexSourceCode)
- {
- ol.disable(OutputGenerator::Latex);
- }
- // write normal text (Man/RTF, Latex optionally)
- ol.docify(m_impl->body->fileDef->name());
- ol.popGeneratorState();
-
- // write text right from file marker
- ol.parseText(refText.right(
- refText.length()-fileMarkerPos-2));
- }
- else // file marker before line marker
- {
- // write text left from file marker
- ol.parseText(refText.left(fileMarkerPos));
- ol.pushGeneratorState();
- ol.disable(OutputGenerator::RTF);
- ol.disable(OutputGenerator::Man);
- if (!latexSourceCode)
- {
- ol.disable(OutputGenerator::Latex);
- }
- // write file link (HTML only)
- ol.writeObjectLink(0,m_impl->body->fileDef->getSourceFileBase(),
- 0,m_impl->body->fileDef->name());
- ol.enableAll();
- ol.disable(OutputGenerator::Html);
- if (latexSourceCode)
- {
- ol.disable(OutputGenerator::Latex);
- }
- // write normal text (Latex/Man only)
- ol.docify(m_impl->body->fileDef->name());
- ol.popGeneratorState();
-
- // write text between markers
- ol.parseText(refText.mid(fileMarkerPos+2,
- lineMarkerPos-fileMarkerPos-2));
-
- ol.pushGeneratorState();
- ol.disable(OutputGenerator::RTF);
- ol.disable(OutputGenerator::Man);
- if (!latexSourceCode)
- {
- ol.disable(OutputGenerator::Latex);
- }
- ol.disableAllBut(OutputGenerator::Html);
- // write line link (HTML only)
- ol.writeObjectLink(0,m_impl->body->fileDef->getSourceFileBase(),
- anchorStr,lineStr);
- ol.enableAll();
- ol.disable(OutputGenerator::Html);
- if (latexSourceCode)
- {
- ol.disable(OutputGenerator::Latex);
- }
- // write normal text (Latex/Man only)
- ol.docify(lineStr);
- ol.popGeneratorState();
-
- // write text right from linePos marker
- ol.parseText(refText.right(
- refText.length()-lineMarkerPos-2));
- }
- ol.endParagraph();
- }
- else
- {
- err("error: translation error: invalid markers in trDefinedInSourceFile()\n");
- }
- }
- ol.popGeneratorState();
-}
-
-void Definition::setBodySegment(int bls,int ble)
-{
- //printf("setBodySegment(%d,%d) for %s\n",bls,ble,name().data());
- makeResident();
- if (m_impl->body==0) m_impl->body = new BodyInfo;
- m_impl->body->startLine=bls;
- m_impl->body->endLine=ble;
-}
-
-void Definition::setBodyDef(FileDef *fd)
-{
- makeResident();
- if (m_impl->body==0) m_impl->body = new BodyInfo;
- m_impl->body->fileDef=fd;
-}
-
-/*! Write code of this definition into the documentation */
-void Definition::writeInlineCode(OutputList &ol,const char *scopeName)
-{
- makeResident();
- ol.pushGeneratorState();
- //printf("Source Fragment %s: %d-%d bodyDef=%p\n",name().data(),
- // m_startBodyLine,m_endBodyLine,m_bodyDef);
- if (Config_getBool("INLINE_SOURCES") &&
- m_impl->body && m_impl->body->startLine!=-1 &&
- m_impl->body->endLine>=m_impl->body->startLine && m_impl->body->fileDef)
- {
- QCString codeFragment;
- int actualStart=m_impl->body->startLine,actualEnd=m_impl->body->endLine;
- if (readCodeFragment(m_impl->body->fileDef->absFilePath(),
- actualStart,actualEnd,codeFragment)
- )
- {
- //printf("Adding code fragement '%s' ext='%s'\n",
- // codeFragment.data(),m_impl->defFileExt.data());
- ParserInterface *pIntf = Doxygen::parserManager->getParser(m_impl->defFileExt);
- pIntf->resetCodeParserState();
- //printf("Read:\n`%s'\n\n",codeFragment.data());
- MemberDef *thisMd = 0;
- if (definitionType()==TypeMember) thisMd = (MemberDef *)this;
-
- // vhdl parser can' t start at an arbitrary point in the source code
- if(this->getLanguage()==SrcLangExt_VHDL)
- {
- if (thisMd) VhdlDocGen::writeCodeFragment(ol,actualStart,codeFragment,thisMd);
- return;
- }
-
- ol.startCodeFragment();
- pIntf->parseCode(ol, // codeOutIntf
- scopeName, // scope
- codeFragment, // input
- FALSE, // isExample
- 0, // exampleName
- m_impl->body->fileDef, // fileDef
- actualStart, // startLine
- actualEnd, // endLine
- TRUE, // inlineFragment
- thisMd, // memberDef
- FALSE // show line numbers
- );
- ol.endCodeFragment();
- }
- }
- ol.popGeneratorState();
-}
-
-/*! Write a reference to the source code fragments in which this
- * definition is used.
- */
-void Definition::_writeSourceRefList(OutputList &ol,const char *scopeName,
- const QCString &text,MemberSDict *members,bool /*funcOnly*/)
-{
- LockingPtr<Definition> lock(this,this); // since this can be a memberDef
- // accessing other memberDefs prevent
- // it from being flushed to disk
- static bool latexSourceCode = Config_getBool("LATEX_SOURCE_CODE");
- static bool sourceBrowser = Config_getBool("SOURCE_BROWSER");
- static bool refLinkSource = Config_getBool("REFERENCES_LINK_SOURCE");
- ol.pushGeneratorState();
- if (members)
- {
- members->sort();
-
- ol.startParagraph();
- ol.parseText(text);
- ol.docify(" ");
-
- QCString ldefLine=theTranslator->trWriteList(members->count());
-
- QRegExp marker("@[0-9]+");
- int index=0,newIndex,matchLen;
- // now replace all markers in inheritLine with links to the classes
- while ((newIndex=marker.match(ldefLine,index,&matchLen))!=-1)
- {
- bool ok;
- ol.parseText(ldefLine.mid(index,newIndex-index));
- uint entryIndex = ldefLine.mid(newIndex+1,matchLen-1).toUInt(&ok);
- MemberDef *md=members->at(entryIndex);
- if (ok && md)
- {
- QCString scope=md->getScopeString();
- QCString name=md->name();
- //printf("class=%p scope=%s scopeName=%s\n",md->getClassDef(),scope.data(),scopeName);
- if (!scope.isEmpty() && scope!=scopeName)
- {
- name.prepend(scope+getLanguageSpecificSeparator(m_impl->lang));
- }
- if (!md->isObjCMethod() &&
- (md->isFunction() || md->isSlot() ||
- md->isPrototype() || md->isSignal()
- )
- )
- {
- name+="()";
- }
- //Definition *d = md->getOutputFileBase();
- //if (d==Doxygen::globalScope) d=md->getBodyDef();
- if (sourceBrowser &&
- !(md->isLinkable() && !refLinkSource) &&
- md->getStartBodyLine()!=-1 &&
- md->getBodyDef()
- )
- {
- //printf("md->getBodyDef()=%p global=%p\n",md->getBodyDef(),Doxygen::globalScope);
- // for HTML write a real link
- ol.pushGeneratorState();
- //ol.disableAllBut(OutputGenerator::Html);
-
- ol.disable(OutputGenerator::RTF);
- ol.disable(OutputGenerator::Man);
- if (!latexSourceCode)
- {
- ol.disable(OutputGenerator::Latex);
- }
- QCString lineStr,anchorStr;
- anchorStr.sprintf("l%05d",md->getStartBodyLine());
- //printf("Write object link to %s\n",md->getBodyDef()->getSourceFileBase().data());
- ol.writeObjectLink(0,md->getBodyDef()->getSourceFileBase(),anchorStr,name);
- ol.popGeneratorState();
-
- // for the other output formats just mention the name
- ol.pushGeneratorState();
- ol.disable(OutputGenerator::Html);
- if (latexSourceCode)
- {
- ol.disable(OutputGenerator::Latex);
- }
- ol.docify(name);
- ol.popGeneratorState();
- }
- else if (md->isLinkable() /*&& d && d->isLinkable()*/)
- {
- // for HTML write a real link
- ol.pushGeneratorState();
- //ol.disableAllBut(OutputGenerator::Html);
- ol.disable(OutputGenerator::RTF);
- ol.disable(OutputGenerator::Man);
- if (!latexSourceCode)
- {
- ol.disable(OutputGenerator::Latex);
- }
-
- ol.writeObjectLink(md->getReference(),
- md->getOutputFileBase(),
- md->anchor(),name);
- ol.popGeneratorState();
-
- // for the other output formats just mention the name
- ol.pushGeneratorState();
- ol.disable(OutputGenerator::Html);
- if (latexSourceCode)
- {
- ol.disable(OutputGenerator::Latex);
- }
- ol.docify(name);
- ol.popGeneratorState();
- }
- else
- {
- ol.docify(name);
- }
- }
- index=newIndex+matchLen;
- }
- ol.parseText(ldefLine.right(ldefLine.length()-index));
- ol.writeString(".");
- ol.endParagraph();
- }
- ol.popGeneratorState();
-}
-
-void Definition::writeSourceReffedBy(OutputList &ol,const char *scopeName)
-{
- makeResident();
- if (Config_getBool("REFERENCED_BY_RELATION"))
- {
- _writeSourceRefList(ol,scopeName,theTranslator->trReferencedBy(),m_impl->sourceRefByDict,FALSE);
- }
-}
-
-void Definition::writeSourceRefs(OutputList &ol,const char *scopeName)
-{
- makeResident();
- if (Config_getBool("REFERENCES_RELATION"))
- {
- _writeSourceRefList(ol,scopeName,theTranslator->trReferences(),m_impl->sourceRefsDict,TRUE);
- }
-}
-
-bool Definition::hasDocumentation() const
-{
- static bool extractAll = Config_getBool("EXTRACT_ALL");
- //static bool sourceBrowser = Config_getBool("SOURCE_BROWSER");
- makeResident();
- bool hasDocs =
- (m_impl->details && !m_impl->details->doc.isEmpty()) || // has detailed docs
- (m_impl->brief && !m_impl->brief->doc.isEmpty()) || // has brief description
- (m_impl->inbodyDocs && !m_impl->inbodyDocs->doc.isEmpty()) || // has inbody docs
- extractAll //|| // extract everything
- // (sourceBrowser && m_impl->body &&
- // m_impl->body->startLine!=-1 && m_impl->body->fileDef)
- ; // link to definition
- return hasDocs;
-}
-
-bool Definition::hasUserDocumentation() const
-{
- makeResident();
- bool hasDocs =
- (m_impl->details && !m_impl->details->doc.isEmpty()) ||
- (m_impl->brief && !m_impl->brief->doc.isEmpty()) ||
- (m_impl->inbodyDocs && !m_impl->inbodyDocs->doc.isEmpty());
- return hasDocs;
-}
-
-void Definition::addSourceReferencedBy(MemberDef *md)
-{
- if (md)
- {
- makeResident();
- QCString name = md->name();
- QCString scope = md->getScopeString();
-
- if (!scope.isEmpty())
- {
- name.prepend(scope+"::");
- }
-
- if (m_impl->sourceRefByDict==0)
- {
- m_impl->sourceRefByDict = new MemberSDict;
- }
- if (m_impl->sourceRefByDict->find(name)==0)
- {
- m_impl->sourceRefByDict->append(name,md);
- }
- }
-}
-
-void Definition::addSourceReferences(MemberDef *md)
-{
- if (md)
- {
- QCString name = md->name();
- QCString scope = md->getScopeString();
- makeResident();
-
- if (!scope.isEmpty())
- {
- name.prepend(scope+"::");
- }
-
- if (m_impl->sourceRefsDict==0)
- {
- m_impl->sourceRefsDict = new MemberSDict;
- }
- if (m_impl->sourceRefsDict->find(name)==0)
- {
- m_impl->sourceRefsDict->append(name,md);
- }
- }
-}
-
-Definition *Definition::findInnerCompound(const char *)
-{
- return 0;
-}
-
-void Definition::addInnerCompound(Definition *)
-{
- err("error: Definition::addInnerCompound() called\n");
-}
-
-QCString Definition::qualifiedName() const
-{
- //static int count=0;
- //count++;
- makeResident();
- if (!m_impl->qualifiedName.isEmpty())
- {
- //count--;
- return m_impl->qualifiedName;
- }
-
- //printf("start %s::qualifiedName() localName=%s\n",name().data(),m_impl->localName.data());
- if (m_impl->outerScope==0)
- {
- if (m_impl->localName=="<globalScope>")
- {
- //count--;
- return "";
- }
- else
- {
- //count--;
- return m_impl->localName;
- }
- }
-
- if (m_impl->outerScope->name()=="<globalScope>")
- {
- m_impl->qualifiedName = m_impl->localName;
- }
- else
- {
- m_impl->qualifiedName = m_impl->outerScope->qualifiedName()+
- getLanguageSpecificSeparator(getLanguage())+
- m_impl->localName;
- }
- //printf("end %s::qualifiedName()=%s\n",name().data(),m_impl->qualifiedName.data());
- //count--;
- return m_impl->qualifiedName;
-};
-
-void Definition::setOuterScope(Definition *d)
-{
- makeResident();
- if (m_impl->outerScope!=d)
- {
- m_impl->qualifiedName.resize(0); // flush cached scope name
- m_impl->outerScope = d;
- }
- m_impl->hidden = m_impl->hidden || d->isHidden();
-}
-
-QCString Definition::localName() const
-{
- makeResident();
- return m_impl->localName;
-}
-
-void Definition::makePartOfGroup(GroupDef *gd)
-{
- makeResident();
- if (m_impl->partOfGroups==0) m_impl->partOfGroups = new GroupList;
- m_impl->partOfGroups->append(gd);
-}
-
-void Definition::setRefItems(const QList<ListItemInfo> *sli)
-{
- //printf("%s::setRefItems()\n",name().data());
- if (sli)
- {
- makeResident();
- // deep copy the list
- if (m_impl->xrefListItems==0)
- {
- m_impl->xrefListItems=new QList<ListItemInfo>;
- m_impl->xrefListItems->setAutoDelete(TRUE);
- }
- QListIterator<ListItemInfo> slii(*sli);
- ListItemInfo *lii;
- for (slii.toFirst();(lii=slii.current());++slii)
- {
- m_impl->xrefListItems->append(new ListItemInfo(*lii));
- }
- }
-}
-
-void Definition::mergeRefItems(Definition *d)
-{
- //printf("%s::mergeRefItems()\n",name().data());
- LockingPtr< QList<ListItemInfo> > xrefList = d->xrefListItems();
- if (xrefList!=0)
- {
- makeResident();
- // deep copy the list
- if (m_impl->xrefListItems==0)
- {
- m_impl->xrefListItems=new QList<ListItemInfo>;
- m_impl->xrefListItems->setAutoDelete(TRUE);
- }
- QListIterator<ListItemInfo> slii(*xrefList);
- ListItemInfo *lii;
- for (slii.toFirst();(lii=slii.current());++slii)
- {
- if (_getXRefListId(lii->type)==-1)
- {
- m_impl->xrefListItems->append(new ListItemInfo(*lii));
- }
- }
- }
-}
-
-int Definition::_getXRefListId(const char *listName) const
-{
- makeResident();
- if (m_impl->xrefListItems)
- {
- QListIterator<ListItemInfo> slii(*m_impl->xrefListItems);
- ListItemInfo *lii;
- for (slii.toFirst();(lii=slii.current());++slii)
- {
- if (strcmp(lii->type,listName)==0)
- {
- return lii->itemId;
- }
- }
- }
- return -1;
-}
-
-LockingPtr< QList<ListItemInfo> > Definition::xrefListItems() const
-{
- makeResident();
- return LockingPtr< QList<ListItemInfo> >(this,m_impl->xrefListItems);
-}
-
-
-QCString Definition::convertNameToFile(const char *name,bool allowDots) const
-{
- makeResident();
- if (!m_impl->ref.isEmpty())
- {
- return name;
- }
- else
- {
- return ::convertNameToFile(name,allowDots);
- }
-}
-
-QCString Definition::pathFragment() const
-{
- makeResident();
- QCString result;
- if (m_impl->outerScope && m_impl->outerScope!=Doxygen::globalScope)
- {
- result = m_impl->outerScope->pathFragment();
- }
- if (isLinkable())
- {
- if (!result.isEmpty()) result+="/";
- if (definitionType()==Definition::TypeGroup && ((const GroupDef*)this)->groupTitle())
- {
- result+=((const GroupDef*)this)->groupTitle();
- }
- else if (definitionType()==Definition::TypePage && !((const PageDef*)this)->title().isEmpty())
- {
- result+=((const PageDef*)this)->title();
- }
- else
- {
- result+=m_impl->localName;
- }
- }
- else
- {
- result+=m_impl->localName;
- }
- return result;
-}
-
-void Definition::writePathFragment(OutputList &ol) const
-{
- makeResident();
- if (m_impl->outerScope && m_impl->outerScope!=Doxygen::globalScope)
- {
- m_impl->outerScope->writePathFragment(ol);
- }
- ol.writeString(" <li class=\"navelem\">");
- if (isLinkable())
- {
- if (definitionType()==Definition::TypeGroup && ((const GroupDef*)this)->groupTitle())
- {
- ol.writeObjectLink(getReference(),getOutputFileBase(),0,((const GroupDef*)this)->groupTitle());
- }
- else if (definitionType()==Definition::TypePage && !((const PageDef*)this)->title().isEmpty())
- {
- ol.writeObjectLink(getReference(),getOutputFileBase(),0,((const PageDef*)this)->title());
- }
- else if (definitionType()==Definition::TypeClass)
- {
- QCString name = m_impl->localName;
- if (name.right(2)=="-p" || name.right(2)=="-g")
- {
- name = name.left(name.length()-2);
- }
- ol.writeObjectLink(getReference(),getOutputFileBase(),0,name);
- }
- else
- {
- ol.writeObjectLink(getReference(),getOutputFileBase(),0,m_impl->localName);
- }
- }
- else
- {
- ol.startBold();
- ol.docify(m_impl->localName);
- ol.endBold();
- }
- ol.writeString(" </li>\n");
-}
-
-void Definition::writeNavigationPath(OutputList &ol) const
-{
- static bool generateTreeView = Config_getBool("GENERATE_TREEVIEW");
-
- ol.pushGeneratorState();
- ol.disableAllBut(OutputGenerator::Html);
-
- if (generateTreeView)
- {
- ol.writeString("</div>\n");
- }
- //if (showSearchInfo)
- //{
- // ol.writeSearchInfo();
- //}
-
- ol.writeString(" <div id=\"nav-path\" class=\"navpath\">\n");
- ol.writeString(" <ul>\n");
- writePathFragment(ol);
- if (!generateTreeView)
- {
- ol.writeString(" </ul>\n");
- ol.writeString(" </div>\n");
- }
-
- ol.popGeneratorState();
-}
-
-QCString Definition::symbolName() const
-{
- return m_symbolName;
-}
-
-//----------------------
-
-QCString Definition::documentation() const
-{
- makeResident();
- return m_impl->details ? m_impl->details->doc : QCString("");
-}
-
-int Definition::docLine() const
-{
- makeResident();
- return m_impl->details ? m_impl->details->line : 1;
-}
-
-QCString Definition::docFile() const
-{
- makeResident();
- return m_impl->details ? m_impl->details->file : QCString("<"+m_name+">");
-}
-
-//----------------------
-
-QCString Definition::briefDescription() const
-{
- makeResident();
- return m_impl->brief ? m_impl->brief->doc : QCString("");
-}
-
-QCString Definition::briefDescriptionAsTooltip() const
-{
- makeResident();
- LockingPtr<Definition> lock(this,this); // since this can be a memberDef
- // accessing other memberDefs prevent
- // it from being flushed to disk
- if (m_impl->brief)
- {
- if (m_impl->brief->tooltip.isEmpty() && !m_impl->brief->doc.isEmpty())
- {
- static bool reentering=FALSE;
- if (!reentering)
- {
- MemberDef *md = definitionType()==TypeMember ? (MemberDef*)this : 0;
- const Definition *scope = definitionType()==TypeMember ? getOuterScope() : this;
- reentering=TRUE; // prevent requests for tooltips while parsing a tooltip
- m_impl->brief->tooltip = parseCommentAsText(
- scope,md,
- m_impl->brief->doc,
- m_impl->brief->file,
- m_impl->brief->line);
- reentering=FALSE;
- }
- }
- return m_impl->brief->tooltip;
- }
- return QCString("");
-}
-
-int Definition::briefLine() const
-{
- makeResident();
- return m_impl->brief ? m_impl->brief->line : 1;
-}
-
-QCString Definition::briefFile() const
-{
- makeResident();
- return m_impl->brief ? m_impl->brief->file : QCString("<"+m_name+">");
-}
-
-//----------------------
-
-QCString Definition::inbodyDocumentation() const
-{
- makeResident();
- return m_impl->inbodyDocs ? m_impl->inbodyDocs->doc : QCString("");
-}
-
-int Definition::inbodyLine() const
-{
- makeResident();
- return m_impl->inbodyDocs ? m_impl->inbodyDocs->line : 1;
-}
-
-QCString Definition::inbodyFile() const
-{
- makeResident();
- return m_impl->inbodyDocs ? m_impl->inbodyDocs->file : QCString("<"+m_name+">");
-}
-
-
-//----------------------
-
-QCString Definition::getDefFileName() const
-{
- makeResident();
- return m_impl->defFileName;
-}
-
-QCString Definition::getDefFileExtension() const
-{
- makeResident();
- return m_impl->defFileExt;
-}
-
-bool Definition::isHidden() const
-{
- makeResident();
- return m_impl->hidden;
-}
-
-bool Definition::isVisibleInProject() const
-{
- return isLinkableInProject() && !m_impl->hidden;
-}
-
-bool Definition::isVisible() const
-{
- return isLinkable() && !m_impl->hidden;
-}
-
-bool Definition::isArtificial() const
-{
- return m_impl->isArtificial;
-}
-
-QCString Definition::getReference() const
-{
- makeResident();
- return m_impl->ref;
-}
-
-bool Definition::isReference() const
-{
- makeResident();
- return !m_impl->ref.isEmpty();
-}
-
-int Definition::getStartBodyLine() const
-{
- makeResident();
- return m_impl->body ? m_impl->body->startLine : -1;
-}
-
-int Definition::getEndBodyLine() const
-{
- makeResident();
- return m_impl->body ? m_impl->body->endLine : -1;
-}
-
-FileDef *Definition::getBodyDef()
-{
- makeResident();
- return m_impl->body ? m_impl->body->fileDef : 0;
-}
-
-LockingPtr<GroupList> Definition::partOfGroups() const
-{
- makeResident();
- return LockingPtr<GroupList>(this,m_impl->partOfGroups);
-}
-
-Definition *Definition::getOuterScope() const
-{
- makeResident();
- return m_impl->outerScope;
-}
-
-LockingPtr<MemberSDict> Definition::getReferencesMembers() const
-{
- makeResident();
- return LockingPtr<MemberSDict>(this,m_impl->sourceRefsDict);
-}
-
-LockingPtr<MemberSDict> Definition::getReferencedByMembers() const
-{
- makeResident();
- return LockingPtr<MemberSDict>(this,m_impl->sourceRefByDict);
-}
-
-void Definition::setReference(const char *r)
-{
- makeResident();
- m_impl->ref=r;
-}
-
-SrcLangExt Definition::getLanguage() const
-{
- makeResident();
- return m_impl->lang;
-}
-
-void Definition::setHidden(bool b)
-{
- makeResident();
- m_impl->hidden = m_impl->hidden || b;
-}
-
-void Definition::setArtificial(bool b)
-{
- makeResident();
- m_impl->isArtificial = b;
-}
-
-void Definition::setLocalName(const QCString name)
-{
- makeResident();
- m_impl->localName=name;
-}
-
-void Definition::setLanguage(SrcLangExt lang)
-{
- makeResident();
- m_impl->lang=lang;
-}
-
-void Definition::makeResident() const
-{
-}
-
-//---------------
-
-void Definition::_setSymbolName(const QCString &name)
-{
- m_symbolName=name;
-}
-
-void Definition::flushToDisk() const
-{
- //printf("%p: Definition::flushToDisk()\n",this);
- Definition *that = (Definition *)this;
- //printf("Definition::flushToDisk(): pos=%d\n",(int)m_storagePos);
- marshalUInt(Doxygen::symbolStorage,START_MARKER);
- marshalSectionDict (Doxygen::symbolStorage,m_impl->sectionDict);
- marshalMemberSDict (Doxygen::symbolStorage,m_impl->sourceRefByDict);
- marshalMemberSDict (Doxygen::symbolStorage,m_impl->sourceRefsDict);
- marshalItemInfoList (Doxygen::symbolStorage,m_impl->xrefListItems);
- marshalGroupList (Doxygen::symbolStorage,m_impl->partOfGroups);
- marshalDocInfo (Doxygen::symbolStorage,m_impl->details);
- marshalDocInfo (Doxygen::symbolStorage,m_impl->inbodyDocs);
- marshalBriefInfo (Doxygen::symbolStorage,m_impl->brief);
- marshalBodyInfo (Doxygen::symbolStorage,m_impl->body);
- marshalQCString (Doxygen::symbolStorage,m_impl->docSignatures);
- marshalQCString (Doxygen::symbolStorage,m_impl->localName);
- marshalQCString (Doxygen::symbolStorage,m_impl->qualifiedName);
- marshalQCString (Doxygen::symbolStorage,m_impl->ref);
- marshalBool (Doxygen::symbolStorage,m_impl->hidden);
- marshalBool (Doxygen::symbolStorage,m_impl->isArtificial);
- marshalObjPointer (Doxygen::symbolStorage,m_impl->outerScope);
- marshalQCString (Doxygen::symbolStorage,m_impl->defFileName);
- marshalQCString (Doxygen::symbolStorage,m_impl->defFileExt);
- marshalInt (Doxygen::symbolStorage,(int)m_impl->lang);
- marshalUInt(Doxygen::symbolStorage,END_MARKER);
- delete that->m_impl;
- that->m_impl = 0;
-}
-
-void Definition::loadFromDisk() const
-{
- //printf("%p: Definition::loadFromDisk()\n",this);
- Definition *that = (Definition *)this;
- assert(m_impl==0);
- that->m_impl = new DefinitionImpl;
- uint marker = unmarshalUInt(Doxygen::symbolStorage);
- assert(marker==START_MARKER);
- m_impl->sectionDict = unmarshalSectionDict (Doxygen::symbolStorage);
- m_impl->sourceRefByDict = unmarshalMemberSDict (Doxygen::symbolStorage);
- m_impl->sourceRefsDict = unmarshalMemberSDict (Doxygen::symbolStorage);
- m_impl->xrefListItems = unmarshalItemInfoList (Doxygen::symbolStorage);
- m_impl->partOfGroups = unmarshalGroupList (Doxygen::symbolStorage);
- m_impl->details = unmarshalDocInfo (Doxygen::symbolStorage);
- m_impl->inbodyDocs = unmarshalDocInfo (Doxygen::symbolStorage);
- m_impl->brief = unmarshalBriefInfo (Doxygen::symbolStorage);
- m_impl->body = unmarshalBodyInfo (Doxygen::symbolStorage);
- m_impl->docSignatures = unmarshalQCString (Doxygen::symbolStorage);
- m_impl->localName = unmarshalQCString (Doxygen::symbolStorage);
- m_impl->qualifiedName = unmarshalQCString (Doxygen::symbolStorage);
- m_impl->ref = unmarshalQCString (Doxygen::symbolStorage);
- m_impl->hidden = unmarshalBool (Doxygen::symbolStorage);
- m_impl->isArtificial = unmarshalBool (Doxygen::symbolStorage);
- m_impl->outerScope = (Definition *)unmarshalObjPointer (Doxygen::symbolStorage);
- m_impl->defFileName = unmarshalQCString (Doxygen::symbolStorage);
- m_impl->defFileExt = unmarshalQCString (Doxygen::symbolStorage);
- m_impl->lang = (SrcLangExt)unmarshalInt(Doxygen::symbolStorage);
- marker = unmarshalUInt(Doxygen::symbolStorage);
- assert(marker==END_MARKER);
-}
-
diff --git a/trunk/src/definition.h b/trunk/src/definition.h
deleted file mode 100644
index e09a478..0000000
--- a/trunk/src/definition.h
+++ /dev/null
@@ -1,386 +0,0 @@
-/******************************************************************************
- *
- *
- *
- * Copyright (C) 1997-2012 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.
- *
- */
-
-#ifndef DEFINITION_H
-#define DEFINITION_H
-
-#include "qtbc.h"
-#include <qlist.h>
-#include <qdict.h>
-#include <sys/types.h>
-
-#include "lockingptr.h"
-#include "util.h"
-
-class FileDef;
-class OutputList;
-class SectionDict;
-class MemberSDict;
-class MemberDef;
-class GroupDef;
-class GroupList;
-struct ListItemInfo;
-struct SectionInfo;
-class Definition;
-class DefinitionImpl;
-
-#if 0
-struct ReachableDefinition
-{
- ReachableDefinition(Definition *d,int dist) : def(d), distance(dist) {}
- Definition *def;
- int distance;
-};
-#endif
-
-struct DocInfo
-{
- QCString doc;
- int line;
- QCString file;
-};
-
-struct BriefInfo
-{
- QCString doc;
- QCString tooltip;
- int line;
- QCString file;
-};
-
-struct BodyInfo
-{
- int startLine; // line number of the start of the definition
- int endLine; // line number of the end of the definition
- FileDef *fileDef; // file definition containing the function body
-};
-
-/*! Abstract interface for a Definition or DefinitionList */
-class DefinitionIntf
-{
- public:
- DefinitionIntf() {}
- virtual ~DefinitionIntf() {}
- /*! Types of derived classes */
- enum DefType
- {
- TypeClass = 0,
- TypeFile = 1,
- TypeNamespace = 2,
- TypeMember = 3,
- TypeGroup = 4,
- TypePackage = 5,
- TypePage = 6,
- TypeDir = 7,
- TypeSymbolList = 8
- };
- /*! Use this for dynamic inspection of the type of the derived class */
- virtual DefType definitionType() const = 0;
-};
-
-/*! The common base class of all entity definitions found in the sources.
- * This can be a class or a member function, or a file, or a namespace, etc.
- * Use definitionType() to find which type of definition this is.
- */
-class Definition : public DefinitionIntf, public LockableObj
-{
- public:
-
- /*! Create a new definition */
- Definition(
- const char *defFileName,int defLine,
- const char *name,const char *b=0,const char *d=0,
- bool isSymbol=TRUE);
-
- /*! Destroys the definition */
- virtual ~Definition();
-
- //-----------------------------------------------------------------------------------
- // ---- getters -----
- //-----------------------------------------------------------------------------------
-
- /*! Returns the name of the definition */
- const QCString& name() const { return m_name; }
-
- /*! Returns the name of the definition as it appears in the output */
- virtual QCString displayName() const = 0;
-
- /*! Returns the local name without any scope qualifiers. */
- QCString localName() const;
-
- /*! Returns the fully qualified name of this definition
- */
- virtual QCString qualifiedName() const;
-
- /*! Returns the name of this definition as it appears in the symbol map.
- */
- QCString symbolName() const;
-
- /*! Returns the base file name (without extension) of this definition.
- * as it is referenced to/written to disk.
- */
- virtual QCString getOutputFileBase() const = 0;
-
- /*! Returns the anchor within a page where this item can be found */
- virtual QCString anchor() const = 0;
-
- /*! Returns the name of the source listing of this file. */
- virtual QCString getSourceFileBase() const { ASSERT(0); return "NULL"; }
-
- /*! Returns the detailed description of this definition */
- QCString documentation() const;
-
- /*! Returns the line number at which the detailed documentation was found. */
- int docLine() const;
-
- /*! Returns the file in which the detailed documentation block was found.
- * This can differ from getDefFileName().
- */
- QCString docFile() const;
-
- /*! Returns the brief description of this definition. This can include commands. */
- QCString briefDescription() const;
-
- /*! Returns a plain text version of the brief description suitable for use
- * as a tool tip.
- */
- QCString briefDescriptionAsTooltip() const;
-
- /*! Returns the line number at which the brief description was found. */
- int briefLine() const;
-
- /*! Returns the documentation found inside the body of a member */
- QCString inbodyDocumentation() const;
-
- /*! Returns the file in which the in body documentation was found */
- QCString inbodyFile() const;
-
- /*! Returns the line at which the first in body documentation
- part was found */
- int inbodyLine() const;
-
- /*! Returns the file in which the brief description was found.
- * This can differ from getDefFileName().
- */
- QCString briefFile() const;
-
- /*! returns the file in which this definition was found */
- QCString getDefFileName() const;
-
- /*! returns the extension of the file in which this definition was found */
- QCString getDefFileExtension() const;
-
- /*! returns the line number at which the definition was found */
- int getDefLine() const { return m_defLine; }
-
- /*! Returns TRUE iff the definition is documented
- * (which could be generated documentation)
- * @see hasUserDocumentation()
- */
- virtual bool hasDocumentation() const;
-
- /*! Returns TRUE iff the definition is documented by the user. */
- virtual bool hasUserDocumentation() const;
-
- /*! Returns TRUE iff it is possible to link to this item within this
- * project.
- */
- virtual bool isLinkableInProject() const = 0;
-
- /*! Returns TRUE iff it is possible to link to this item. This can
- * be a link to another project imported via a tag file.
- */
- virtual bool isLinkable() const = 0;
-
- /*! Returns TRUE iff the name is part of this project and
- * may appear in the output
- */
- virtual bool isVisibleInProject() const;
-
- /*! Returns TRUE iff the name may appear in the output */
- virtual bool isVisible() const;
-
- /*! Returns TRUE iff this item is supposed to be hidden from the output. */
- bool isHidden() const;
-
- /*! returns TRUE if this entity was artificially introduced, for
- * instance because it is used to show a template instantiation relation.
- */
- bool isArtificial() const;
-
- /*! If this definition was imported via a tag file, this function
- * returns the tagfile for the external project. This can be
- * translated into an external link target via
- * Doxygen::tagDestinationDict
- */
- virtual QCString getReference() const;
-
- /*! Returns TRUE if this definition is imported via a tag file. */
- virtual bool isReference() const;
-
- /*! Returns the first line of the body of this item (applicable to classes and
- * functions).
- */
- int getStartBodyLine() const;
-
- /*! Returns the last line of the body of this item (applicable to classes and
- * functions).
- */
- int getEndBodyLine() const;
-
- /*! Returns the file in which the body of this item is located or 0 if no
- * body is available.
- */
- FileDef *getBodyDef();
-
- /** Returns the programming language this definition was written in. */
- SrcLangExt getLanguage() const;
-
- LockingPtr<GroupList> partOfGroups() const;
-
- LockingPtr< QList<ListItemInfo> > xrefListItems() const;
-
- virtual Definition *findInnerCompound(const char *name);
- virtual Definition *getOuterScope() const;
-
- LockingPtr<MemberSDict> getReferencesMembers() const;
- LockingPtr<MemberSDict> getReferencedByMembers() const;
-
- bool hasSections() const;
-
- //-----------------------------------------------------------------------------------
- // ---- setters -----
- //-----------------------------------------------------------------------------------
-
- /*! Sets a new \a name for the definition */
- void setName(const char *name);
-
- /*! Sets the documentation of this definition to \a d. */
- virtual void setDocumentation(const char *d,const char *docFile,int docLine,bool stripWhiteSpace=TRUE);
-
- /*! Sets the brief description of this definition to \a b.
- * A dot is added to the sentence if not available.
- */
- virtual void setBriefDescription(const char *b,const char *briefFile,int briefLine);
-
- /*! Set the documentation that was found inside the body of an item.
- * If there was already some documentation set, the new documentation
- * will be appended.
- */
- virtual void setInbodyDocumentation(const char *d,const char *docFile,int docLine);
-
- /*! Sets the tag file id via which this definition was imported. */
- void setReference(const char *r);
-
- /*! Add the list of anchors that mark the sections that are found in the
- * documentation.
- */
- void addSectionsToDefinition(QList<SectionInfo> *anchorList);
-
- // source references
- void setBodySegment(int bls,int ble);
- void setBodyDef(FileDef *fd);
- void addSourceReferencedBy(MemberDef *d);
- void addSourceReferences(MemberDef *d);
-
- void setRefItems(const QList<ListItemInfo> *sli);
- void mergeRefItems(Definition *d);
- virtual void addInnerCompound(Definition *d);
- virtual void setOuterScope(Definition *d);
-
- virtual void setHidden(bool b);
-
- void setArtificial(bool b);
- void setLanguage(SrcLangExt lang);
-
- //-----------------------------------------------------------------------------------
- // --- actions ----
- //-----------------------------------------------------------------------------------
-
- QCString convertNameToFile(const char *name,bool allowDots=FALSE) const;
- void writeSourceDef(OutputList &ol,const char *scopeName);
- void writeInlineCode(OutputList &ol,const char *scopeName);
- void writeSourceRefs(OutputList &ol,const char *scopeName);
- void writeSourceReffedBy(OutputList &ol,const char *scopeName);
- void makePartOfGroup(GroupDef *gd);
- void writePathFragment(OutputList &ol) const;
- void writeNavigationPath(OutputList &ol) const;
- virtual void writeQuickMemberLinks(OutputList &,MemberDef *) const {}
- virtual void writeSummaryLinks(OutputList &) {}
- QCString pathFragment() const;
-
- /*! Writes the documentation anchors of the definition to
- * the Doxygen::tagFile stream.
- */
- void writeDocAnchorsToTagFile();
- void setLocalName(const QCString name);
-
- void addSectionsToIndex();
- void writeToc(OutputList &ol);
-
- protected:
-
- virtual void flushToDisk() const;
- virtual void loadFromDisk() const;
- virtual void makeResident() const;
- void lock() const {}
- void unlock() const {}
-
- private:
-
- static void addToMap(const char *name,Definition *d);
- static void removeFromMap(Definition *d);
-
- void _setSymbolName(const QCString &name);
-
- int _getXRefListId(const char *listName) const;
- void _writeSourceRefList(OutputList &ol,const char *scopeName,
- const QCString &text,MemberSDict *members,bool);
- void _setBriefDescription(const char *b,const char *briefFile,int briefLine);
- void _setDocumentation(const char *d,const char *docFile,int docLine,bool stripWhiteSpace,bool atTop);
- void _setInbodyDocumentation(const char *d,const char *docFile,int docLine);
- bool _docsAlreadyAdded(const QCString &doc);
- DefinitionImpl *m_impl; // internal structure holding all private data
- QCString m_name;
- bool m_isSymbol;
- QCString m_symbolName;
- int m_defLine;
-};
-
-class DefinitionList : public QList<Definition>, public DefinitionIntf
-{
- public:
- ~DefinitionList() {}
- DefType definitionType() const { return TypeSymbolList; }
- int compareItems(GCI item1,GCI item2)
- {
- return stricmp(((Definition *)item1)->name(),
- ((Definition *)item2)->name()
- );
- }
-
-};
-
-class DefinitionListIterator : public QListIterator<Definition>
-{
- public:
- DefinitionListIterator(const DefinitionList &l) :
- QListIterator<Definition>(l) {}
- ~DefinitionListIterator() {}
-};
-
-#endif
diff --git a/trunk/src/diagram.cpp b/trunk/src/diagram.cpp
deleted file mode 100644
index 07fb4aa..0000000
--- a/trunk/src/diagram.cpp
+++ /dev/null
@@ -1,1306 +0,0 @@
-/******************************************************************************
- *
- *
- *
- *
- * Copyright (C) 1997-2012 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.
- *
- */
-
-#include "qtbc.h"
-#include <stdio.h>
-#include <stdlib.h>
-#include <qlist.h>
-#include <qarray.h>
-#include "ftextstream.h"
-#include <qfile.h>
-
-#include "diagram.h"
-#include "image.h"
-#include "classdef.h"
-#include "config.h"
-#include "message.h"
-#include "util.h"
-#include "doxygen.h"
-#include "portable.h"
-#include "index.h"
-
-//-----------------------------------------------------------------------------
-
-const uint maxTreeWidth = 8;
-const int gridWidth = 100;
-const int gridHeight = 100;
-
-const uint labelHorSpacing = 10; // horizontal distance between labels
-const uint labelVertSpacing = 32; // vertical distance between labels
-const uint labelHorMargin = 6; // horiz. spacing between label and box
-const uint fontHeight = 12; // height of a character
-
-//static QCString escapeLatex(const char *s)
-//{
-// QCString result;
-// char c;
-// while ((c=*s++))
-// {
-// if (c=='_') result+="\\_";
-// else result+=c;
-// }
-// return result;
-//}
-
-static uint protToMask(Protection p)
-{
- switch(p)
- {
- case Public: return 0xffffffff;
- case Package: // package is not possible!
- case Protected: return 0xcccccccc;
- case Private: return 0xaaaaaaaa;
- }
- return 0;
-}
-
-static uint protToColor(Protection p)
-{
- switch(p)
- {
- case Public: return 6;
- case Package: // package is not possible!
- case Protected: return 5;
- case Private: return 4;
- }
- return 0;
-}
-
-static QCString protToString(Protection p)
-{
- switch(p)
- {
- case Public: return "solid";
- case Package: // package is not possible!
- case Protected: return "dashed";
- case Private: return "dotted";
- }
- return 0;
-}
-
-static uint virtToMask(Specifier p)
-{
- switch(p)
- {
- case Normal: return 0xffffffff;
- case Virtual: return 0xf0f0f0f0;
- default: return 0;
- }
- return 0;
-}
-
-// pre: dil is not empty
-static Protection getMinProtectionLevel(DiagramItemList *dil)
-{
- DiagramItem *di=dil->first();
- Protection result=di->protection();
- di=dil->next();
- while (di)
- {
- Protection p=di->protection();
- if (p!=result)
- {
- if (result==Protected && p==Public) result=p;
- else if (result==Private) result=p;
- }
- di=dil->next();
- }
- return result;
-}
-
-static void writeBitmapBox(DiagramItem *di,Image *image,
- int x,int y,int w,int h,bool firstRow,
- bool hasDocs,bool children=FALSE)
-{
- int colFill = hasDocs ? (firstRow ? 0 : 2) : 7;
- int colBorder = (firstRow || !hasDocs) ? 1 : 3;
- int l = Image::stringLength(di->label());
- uint mask=virtToMask(di->virtualness());
- image->fillRect(x+1,y+1,w-2,h-2,colFill,mask);
- image->drawRect(x,y,w,h,colBorder,mask);
- image->writeString(x+(w-l)/2, y+(h-fontHeight)/2, di->label(),1);
- if (children)
- {
- int i;
- for (i=0;i<5;i++)
- image->drawHorzLine(y+h+i-6,x+w-2-i,x+w-2,firstRow?1:3,0xffffffff);
- }
-}
-
-static void writeVectorBox(FTextStream &t,DiagramItem *di,
- float x,float y,bool children=FALSE)
-{
- if (di->virtualness()==Virtual) t << "dashed\n";
- t << " (" << di->label() << ") " << x << " " << y << " box\n";
- if (children) t << x << " " << y << " mark\n";
- if (di->virtualness()==Virtual) t << "solid\n";
-}
-
-static void writeMapArea(FTextStream &t,ClassDef *cd,QCString relPath,
- int x,int y,int w,int h)
-{
- if (cd->isLinkable())
- {
- QCString ref=cd->getReference();
- t << "<area ";
- if (!ref.isEmpty())
- {
- t << externalLinkTarget() << externalRef(relPath,ref,FALSE);
- }
- t << "href=\"";
- t << externalRef(relPath,ref,TRUE);
- t << cd->getOutputFileBase() << Doxygen::htmlFileExtension;
- if (!cd->anchor().isEmpty())
- {
- t << "#" << cd->anchor();
- }
- t << "\" ";
- QCString tooltip = cd->briefDescriptionAsTooltip();
- if (!tooltip.isEmpty())
- {
- t << "title=\"" << tooltip << "\" ";
- }
- t << "alt=\"" << convertToXML(cd->displayName());
- t << "\" shape=\"rect\" coords=\"" << x << "," << y << ",";
- t << (x+w) << "," << (y+h) << "\"/>" << endl;
- }
-}
-//-----------------------------------------------------------------------------
-
-DiagramItem::DiagramItem(DiagramItem *p,int number,ClassDef *cd,
- Protection pr,Specifier vi,const char *ts)
-{
- parent=p;
- x=y=0;
- //name=n;
- num=number;
- children = new DiagramItemList;
- prot=pr;
- virt=vi;
- inList=FALSE;
- classDef=cd;
- templSpec=ts;
-}
-
-DiagramItem::~DiagramItem()
-{
- delete children;
-}
-
-QCString DiagramItem::label() const
-{
- QCString result;
- if (!templSpec.isEmpty())
- {
- // we use classDef->name() here and not diplayName() in order
- // to get the name used in the inheritance relation.
- QCString n = classDef->name();
- if (n.right(2)=="-g" || n.right(2)=="-p")
- {
- n = n.left(n.length()-2);
- }
- result=insertTemplateSpecifierInScope(n,templSpec);
- }
- else
- {
- result=classDef->displayName();
- }
- if (Config_getBool("HIDE_SCOPE_NAMES")) result=stripScope(result);
- return result;
-}
-
-QCString DiagramItem::fileName() const
-{
- return classDef->getOutputFileBase();
-}
-
-int DiagramItem::avgChildPos() const
-{
- DiagramItem *di;
- int c=children->count();
- if (c==0) // no children -> don't move
- return xPos();
- if ((di=children->getFirst())->isInList()) // children should be in a list
- return di->xPos();
- if (c&1) // odd number of children -> get pos of middle child
- return children->at(c/2)->xPos();
- else // even number of children -> get middle of most middle children
- return (children->at(c/2-1)->xPos()+children->at(c/2)->xPos())/2;
-}
-
-int DiagramItem::numChildren() const
-{
- return children->count();
-}
-
-void DiagramItem::addChild(DiagramItem *di)
-{
- children->append(di);
-}
-
-void DiagramRow::insertClass(DiagramItem *parent,ClassDef *cd,bool doBases,
- Protection prot,Specifier virt,const char *ts)
-{
- //if (cd->visited) return; // the visit check does not work in case of
- // multiple inheritance of the same class!
- DiagramItem *di=new DiagramItem(parent, diagram->at(level)->count(),
- cd,prot,virt,ts);
- //cd->visited=TRUE;
- if (parent) parent->addChild(di);
- di->move(count()*gridWidth,level*gridHeight);
- append(di);
- BaseClassList *bcl=doBases ? cd->baseClasses() : cd->subClasses();
- int count=0;
- if (bcl)
- {
- /* there are base/sub classes */
- BaseClassDef *bcd=bcl->first();
- while (bcd)
- {
- ClassDef *ccd=bcd->classDef;
- if (ccd && ccd->isVisibleInHierarchy() /*&& !ccd->visited*/) count++;
- bcd=bcl->next();
- }
- }
- if (count>0 && (prot!=Private || !doBases))
- {
- DiagramRow *row=0;
- if (diagram->count()<=level+1) /* add new row */
- {
- row = new DiagramRow(diagram,level+1);
- diagram->append(row);
- }
- else /* get next row */
- {
- row=diagram->at(level+1);
- }
- /* insert base classes in the next row */
- BaseClassDef *bcd=bcl->first();
- while (bcd)
- {
- ClassDef *ccd=bcd->classDef;
- if (ccd && ccd->isVisibleInHierarchy() /*&& !ccd->visited*/)
- {
- row->insertClass(di,ccd,doBases,bcd->prot,
- doBases?bcd->virt:Normal,
- doBases?bcd->templSpecifiers.data():"");
- }
- bcd=bcl->next();
- }
- }
-}
-
-TreeDiagram::TreeDiagram(ClassDef *root,bool doBases)
-{
- setAutoDelete(TRUE);
- DiagramRow *row=new DiagramRow(this,0);
- append(row);
- row->insertClass(0,root,doBases,Public,Normal,0);
-}
-
-TreeDiagram::~TreeDiagram()
-{
-}
-
-
-void TreeDiagram::moveChildren(DiagramItem *root,int dx)
-{
- DiagramItemList *dil=root->getChildren();
- DiagramItem *di=dil->first();
- while (di)
- {
- di->move(dx,0);
- moveChildren(di,dx);
- di=dil->next();
- }
-}
-
-bool TreeDiagram::layoutTree(DiagramItem *root,int r)
-{
- bool moved=FALSE;
- //printf("layoutTree(%s,%d)\n",root->label().data(),r);
-
- DiagramItemList *dil=root->getChildren();
- if (dil->count()>0)
- {
- uint k;
- int pPos=root->xPos();
- int cPos=root->avgChildPos();
- if (pPos>cPos) // move children
- {
- DiagramRow *row=at(r+1);
- //printf("Moving children %d-%d in row %d\n",
- // dil->getFirst()->number(),row->count()-1,r+1);
- for (k=dil->getFirst()->number();k<row->count();k++)
- row->at(k)->move(pPos-cPos,0);
- moved=TRUE;
- }
- else if (pPos<cPos) // move parent
- {
- DiagramRow *row=at(r);
- //printf("Moving parents %d-%d in row %d\n",
- // root->number(),row->count()-1,r);
- for (k=root->number();k<row->count();k++)
- row->at(k)->move(cPos-pPos,0);
- moved=TRUE;
- }
-
- // recurse to children
- DiagramItem *di=dil->first();
- while (di && !moved && !di->isInList())
- {
- moved = layoutTree(di,r+1);
- di=dil->next();
- }
- }
- return moved;
-}
-
-void TreeDiagram::computeLayout()
-{
- DiagramRow *row=first();
- while (row && row->count()<maxTreeWidth) row=next();
- if (row)
- {
- //printf("computeLayout() list row at %d\n",row->number());
- DiagramItem *di=row->first();
- DiagramItem *opi=0;
- int delta=0;
- bool first=TRUE;
- while (di)
- {
- DiagramItem *pi=di->parentItem();
- if (pi==opi && !first) { delta-=gridWidth; }
- first = pi!=opi;
- opi=pi;
- di->move(delta,0); // collapse all items in the same
- // list (except the first)
- di->putInList();
- di=row->next();
- }
- }
-
- // re-organize the diagram items
- DiagramItem *root=getFirst()->getFirst();
- while (layoutTree(root,0)) { }
-
- // move first items of the lists
- if (row)
- {
- DiagramItem *di=row->first();
- while (di)
- {
- DiagramItem *pi=di->parentItem();
- if (pi->getChildren()->count()>1)
- {
- di->move(gridWidth,0);
- while (di && di->parentItem()==pi) di=row->next();
- }
- else
- {
- di=row->next();
- }
- }
- }
-}
-
-uint TreeDiagram::computeRows()
-{
- //printf("TreeDiagram::computeRows()=%d\n",count());
- int count=0;
- DiagramRow *row=first();
- while (row && !row->getFirst()->isInList())
- {
- count++;
- row=next();
- }
- //printf("count=%d row=%p\n",count,row);
- if (row)
- {
- int maxListLen=0;
- int curListLen=0;
- DiagramItem *di=row->first(),*opi=0;
- while (di)
- {
- if (di->parentItem()!=opi) curListLen=1; else curListLen++;
- if (curListLen>maxListLen) maxListLen=curListLen;
- opi=di->parentItem();
- di=row->next();
- }
- //printf("maxListLen=%d\n",maxListLen);
- count+=maxListLen;
- }
- return count;
-}
-
-#if 0
-uint TreeDiagram::computeCols()
-{
- uint count=0;
- DiagramRow *row=first();
- while (row && !row->getFirst()->isInList())
- {
- if (row->count()>count) count=row->count();
- row=next();
- }
- if (row)
- {
- row=prev();
- uint cols=row->count();
- if (row->getLast()->getChildren()->count()>1) cols++;
- if (cols>count) count=cols;
- }
- return count;
-};
-#endif
-
-void TreeDiagram::computeExtremes(uint *maxLabelLen,uint *maxXPos)
-{
- uint ml=0,mx=0;
- DiagramRow *dr=first();
- bool done=FALSE;
- while (dr && !done)
- {
- DiagramItem *di=dr->first();
- while (di)
- {
- if (di->isInList()) done=TRUE;
- if (maxXPos) mx=QMAX(mx,(uint)di->xPos());
- if (maxLabelLen) ml=QMAX(ml,Image::stringLength(di->label()));
- di=dr->next();
- }
- dr=next();
- }
- if (maxLabelLen) *maxLabelLen=ml;
- if (maxXPos) *maxXPos=mx;
-}
-
-void TreeDiagram::drawBoxes(FTextStream &t,Image *image,
- bool doBase,bool bitmap,
- uint baseRows,uint superRows,
- uint cellWidth,uint cellHeight,
- QCString relPath,
- bool generateMap)
-{
- DiagramRow *dr=first();
- if (!doBase) dr=next();
- bool done=FALSE;
- bool firstRow = doBase;
- while (dr && !done)
- {
- int x=0,y=0;
- float xf=0.0,yf=0.0;
- DiagramItem *di=dr->first();
- if (di->isInList()) // put boxes in a list
- {
- DiagramItem *opi=0;
- if (doBase) di=dr->last();
- while (di)
- {
- if (di->parentItem()==opi)
- {
- if (bitmap)
- {
- if (doBase) y -= cellHeight+labelVertSpacing;
- else y += cellHeight+labelVertSpacing;
- }
- else
- {
- if (doBase) yf += 1.0;
- else yf -= 1.0;
- }
- }
- else
- {
- if (bitmap)
- {
- x = di->xPos()*(cellWidth+labelHorSpacing)/gridWidth;
- if (doBase)
- {
- y = image->getHeight()-
- superRows*cellHeight-
- (superRows-1)*labelVertSpacing-
- di->yPos()*(cellHeight+labelVertSpacing)/gridHeight;
- }
- else
- {
- y = (baseRows-1)*(cellHeight+labelVertSpacing)+
- di->yPos()*(cellHeight+labelVertSpacing)/gridHeight;
- }
- }
- else
- {
- xf = di->xPos()/(float)gridWidth;
- if (doBase)
- {
- yf = di->yPos()/(float)gridHeight+superRows-1;
- }
- else
- {
- yf = superRows-1-di->yPos()/(float)gridHeight;
- }
- }
- }
- opi=di->parentItem();
-
- if (bitmap)
- {
- bool hasDocs=di->getClassDef()->isLinkable();
- writeBitmapBox(di,image,x,y,cellWidth,cellHeight,firstRow,
- hasDocs,di->getChildren()->count()>0);
- if (!firstRow && generateMap)
- writeMapArea(t,di->getClassDef(),relPath,x,y,cellWidth,cellHeight);
- }
- else
- {
- writeVectorBox(t,di,xf,yf,di->getChildren()->count()>0);
- }
-
- if (doBase) di=dr->prev(); else di=dr->next();
- }
- done=TRUE;
- }
- else // draw a tree of boxes
- {
- while (di)
- {
- if (bitmap)
- {
- x = di->xPos()*(cellWidth+labelHorSpacing)/gridWidth;
- if (doBase)
- {
- y = image->getHeight()-
- superRows*cellHeight-
- (superRows-1)*labelVertSpacing-
- di->yPos()*(cellHeight+labelVertSpacing)/gridHeight;
- }
- else
- {
- y = (baseRows-1)*(cellHeight+labelVertSpacing)+
- di->yPos()*(cellHeight+labelVertSpacing)/gridHeight;
- }
- bool hasDocs=di->getClassDef()->isLinkable();
- writeBitmapBox(di,image,x,y,cellWidth,cellHeight,firstRow,hasDocs);
- if (!firstRow && generateMap)
- writeMapArea(t,di->getClassDef(),relPath,x,y,cellWidth,cellHeight);
- }
- else
- {
- xf=di->xPos()/(float)gridWidth;
- if (doBase)
- {
- yf = di->yPos()/(float)gridHeight+superRows-1;
- }
- else
- {
- yf = superRows-1-di->yPos()/(float)gridHeight;
- }
- writeVectorBox(t,di,xf,yf);
- }
-
- di=dr->next();
- }
- }
- dr=next();
- firstRow=FALSE;
- }
-}
-
-void TreeDiagram::drawConnectors(FTextStream &t,Image *image,
- bool doBase,bool bitmap,
- uint baseRows,uint superRows,
- uint cellWidth,uint cellHeight)
-{
- DiagramRow *dr=first();
- bool done=FALSE;
- while (dr && !done) // for each row
- {
- DiagramItem *di=dr->first();
- if (di->isInList()) // row consists of list connectors
- {
- int x=0,y=0,ys=0;
- float xf=0.0,yf=0.0,ysf=0.0;
- while (di)
- {
- DiagramItem *pi=di->parentItem();
- DiagramItemList *dil=pi->getChildren();
- DiagramItem *last=dil->getLast();
- if (di==last) // single child
- {
- if (bitmap) // draw pixels
- {
- x = di->xPos()*(cellWidth+labelHorSpacing)/gridWidth + cellWidth/2;
- if (doBase) // base classes
- {
- y = image->getHeight()-
- (superRows-1)*(cellHeight+labelVertSpacing)-
- di->yPos()*(cellHeight+labelVertSpacing)/gridHeight;
- image->drawVertArrow(x,y,y+labelVertSpacing/2,
- protToColor(di->protection()),
- protToMask(di->protection()));
- }
- else // super classes
- {
- y = (baseRows-1)*(cellHeight+labelVertSpacing)-
- labelVertSpacing/2+
- di->yPos()*(cellHeight+labelVertSpacing)/gridHeight;
- image->drawVertLine(x,y,y+labelVertSpacing/2,
- protToColor(di->protection()),
- protToMask(di->protection()));
- }
- }
- else // draw vectors
- {
- t << protToString(di->protection()) << endl;
- if (doBase)
- {
- t << "1 " << (di->xPos()/(float)gridWidth) << " "
- << (di->yPos()/(float)gridHeight+superRows-1) << " in\n";
- }
- else
- {
- t << "0 " << (di->xPos()/(float)gridWidth) << " "
- << ((float)superRows-0.25-di->yPos()/(float)gridHeight)
- << " in\n";
- }
- }
- }
- else // multiple children, put them in a vertical list
- {
- if (bitmap)
- {
- x = di->parentItem()->xPos()*
- (cellWidth+labelHorSpacing)/gridWidth+cellWidth/2;
- if (doBase) // base classes
- {
- ys = image->getHeight()-
- (superRows-1)*(cellHeight+labelVertSpacing)-
- di->yPos()*(cellHeight+labelVertSpacing)/gridHeight;
- y = ys - cellHeight/2;
- }
- else // super classes
- {
- ys = (baseRows-1)*(cellHeight+labelVertSpacing)+
- di->yPos()*(cellHeight+labelVertSpacing)/gridHeight;
- y = ys + cellHeight/2;
- }
- }
- else
- {
- xf = di->parentItem()->xPos()/(float)gridWidth;
- if (doBase)
- {
- ysf = di->yPos()/(float)gridHeight+superRows-1;
- yf = ysf + 0.5;
- }
- else
- {
- ysf = (float)superRows-0.25-di->yPos()/(float)gridHeight;
- yf = ysf - 0.25;
- }
- }
- while (di!=last) // more children to add
- {
- if (bitmap)
- {
- if (doBase) // base classes
- {
- image->drawHorzArrow(y,x,x+cellWidth/2+labelHorSpacing,
- protToColor(di->protection()),
- protToMask(di->protection()));
- y -= cellHeight+labelVertSpacing;
- }
- else // super classes
- {
- image->drawHorzLine(y,x,x+cellWidth/2+labelHorSpacing,
- protToColor(di->protection()),
- protToMask(di->protection()));
- y += cellHeight+labelVertSpacing;
- }
- }
- else
- {
- t << protToString(di->protection()) << endl;
- if (doBase)
- {
- t << "1 " << xf << " " << yf << " hedge\n";
- yf += 1.0;
- }
- else
- {
- t << "0 " << xf << " " << yf << " hedge\n";
- yf -= 1.0;
- }
- }
- di=dr->next();
- }
- // add last horizonal line and a vertical connection line
- if (bitmap)
- {
- if (doBase) // base classes
- {
- image->drawHorzArrow(y,x,x+cellWidth/2+labelHorSpacing,
- protToColor(di->protection()),
- protToMask(di->protection()));
- image->drawVertLine(x,y,ys+labelVertSpacing/2,
- protToColor(getMinProtectionLevel(dil)),
- protToMask(getMinProtectionLevel(dil)));
- }
- else // super classes
- {
- image->drawHorzLine(y,x,x+cellWidth/2+labelHorSpacing,
- protToColor(di->protection()),
- protToMask(di->protection()));
- image->drawVertLine(x,ys-labelVertSpacing/2,y,
- protToColor(getMinProtectionLevel(dil)),
- protToMask(getMinProtectionLevel(dil)));
- }
- }
- else
- {
- t << protToString(di->protection()) << endl;
- if (doBase)
- {
- t << "1 " << xf << " " << yf << " hedge\n";
- }
- else
- {
- t << "0 " << xf << " " << yf << " hedge\n";
- }
- t << protToString(getMinProtectionLevel(dil)) << endl;
- if (doBase)
- {
- t << xf << " " << ysf << " " << yf << " vedge\n";
- }
- else
- {
- t << xf << " " << (ysf + 0.25) << " " << yf << " vedge\n";
- }
- }
- }
- di=dr->next();
- }
- done=TRUE; // the tree is drawn now
- }
- else // normal tree connector
- {
- while (di)
- {
- int x=0,y=0;
- DiagramItemList *dil = di->getChildren();
- DiagramItem *parent = di->parentItem();
- if (parent) // item has a parent -> connect to it
- {
- if (bitmap) // draw pixels
- {
- x = di->xPos()*(cellWidth+labelHorSpacing)/gridWidth + cellWidth/2;
- if (doBase) // base classes
- {
- y = image->getHeight()-
- (superRows-1)*(cellHeight+labelVertSpacing)-
- di->yPos()*(cellHeight+labelVertSpacing)/gridHeight;
- /* write input line */
- image->drawVertArrow(x,y,y+labelVertSpacing/2,
- protToColor(di->protection()),
- protToMask(di->protection()));
- }
- else // super classes
- {
- y = (baseRows-1)*(cellHeight+labelVertSpacing)-
- labelVertSpacing/2+
- di->yPos()*(cellHeight+labelVertSpacing)/gridHeight;
- /* write output line */
- image->drawVertLine(x,y,y+labelVertSpacing/2,
- protToColor(di->protection()),
- protToMask(di->protection()));
- }
- }
- else // draw pixels
- {
- t << protToString(di->protection()) << endl;
- if (doBase)
- {
- t << "1 " << di->xPos()/(float)gridWidth << " "
- << (di->yPos()/(float)gridHeight+superRows-1) << " in\n";
- }
- else
- {
- t << "0 " << di->xPos()/(float)gridWidth << " "
- << ((float)superRows-0.25-di->yPos()/(float)gridHeight)
- << " in\n";
- }
- }
- }
- if (dil->count()>0)
- {
- Protection p=getMinProtectionLevel(dil);
- uint mask=protToMask(p);
- uint col=protToColor(p);
- if (bitmap)
- {
- x = di->xPos()*(cellWidth+labelHorSpacing)/gridWidth + cellWidth/2;
- if (doBase) // base classes
- {
- y = image->getHeight()-
- (superRows-1)*(cellHeight+labelVertSpacing)-
- cellHeight-labelVertSpacing/2-
- di->yPos()*(cellHeight+labelVertSpacing)/gridHeight;
- image->drawVertLine(x,y,y+labelVertSpacing/2-1,col,mask);
- }
- else // super classes
- {
- y = (baseRows-1)*(cellHeight+labelVertSpacing)+
- cellHeight+
- di->yPos()*(cellHeight+labelVertSpacing)/gridHeight;
- image->drawVertArrow(x,y,y+labelVertSpacing/2-1,col,mask);
- }
- }
- else
- {
- t << protToString(p) << endl;
- if (doBase)
- {
- t << "0 " << di->xPos()/(float)gridWidth << " "
- << (di->yPos()/(float)gridHeight+superRows-1) << " out\n";
- }
- else
- {
- t << "1 " << di->xPos()/(float)gridWidth << " "
- << ((float)superRows-1.75-di->yPos()/(float)gridHeight)
- << " out\n";
- }
- }
- /* write input line */
- DiagramItem *first = dil->first();
- DiagramItem *last = dil->last();
- if (first!=last && !first->isInList()) /* connect with all base classes */
- {
- if (bitmap)
- {
- int xs = first->xPos()*(cellWidth+labelHorSpacing)/gridWidth
- + cellWidth/2;
- int xe = last->xPos()*(cellWidth+labelHorSpacing)/gridWidth
- + cellWidth/2;
- if (doBase) // base classes
- {
- image->drawHorzLine(y,xs,xe,col,mask);
- }
- else // super classes
- {
- image->drawHorzLine(y+labelVertSpacing/2,xs,xe,col,mask);
- }
- }
- else
- {
- t << protToString(p) << endl;
- if (doBase)
- {
- t << first->xPos()/(float)gridWidth << " "
- << last->xPos()/(float)gridWidth << " "
- << (first->yPos()/(float)gridHeight+superRows-1)
- << " conn\n";
- }
- else
- {
- t << first->xPos()/(float)gridWidth << " "
- << last->xPos()/(float)gridWidth << " "
- << ((float)superRows-first->yPos()/(float)gridHeight)
- << " conn\n";
- }
- }
- }
- }
- di=dr->next();
- }
- dr=next();
- }
- }
-}
-
-
-void clearVisitFlags()
-{
- ClassSDict::Iterator cli(*Doxygen::classSDict);
- ClassDef *cd;
- for (;(cd=cli.current());++cli)
- {
- cd->visited=FALSE;
- }
-}
-
-ClassDiagram::ClassDiagram(ClassDef *root)
-{
- clearVisitFlags();
- base = new TreeDiagram(root,TRUE);
- base->computeLayout();
- clearVisitFlags();
- super = new TreeDiagram(root,FALSE);
- super->computeLayout();
- DiagramItem *baseItem = base->first()->first();
- DiagramItem *superItem = super->first()->first();
- int xbase = baseItem->xPos();
- int xsuper = superItem->xPos();
- if (xbase>xsuper)
- {
- superItem->move(xbase-xsuper,0);
- super->moveChildren(superItem,xbase-xsuper);
- }
- else if (xbase<xsuper)
- {
- baseItem->move(xsuper-xbase,0);
- base->moveChildren(baseItem,xsuper-xbase);
- }
-}
-
-ClassDiagram::~ClassDiagram()
-{
- delete base;
- delete super;
-}
-
-void ClassDiagram::writeFigure(FTextStream &output,const char *path,
- const char *fileName) const
-{
- uint baseRows=base->computeRows();
- uint superRows=super->computeRows();
- uint baseMaxX, baseMaxLabelWidth, superMaxX, superMaxLabelWidth;
- base->computeExtremes(&baseMaxLabelWidth,&baseMaxX);
- super->computeExtremes(&superMaxLabelWidth,&superMaxX);
-
- uint rows=baseRows+superRows-1;
- uint cols=(QMAX(baseMaxX,superMaxX)+gridWidth*2-1)/gridWidth;
-
- // Estimate the image aspect width and height in pixels.
- uint estHeight = rows*40;
- uint estWidth = cols*(20+QMAX(baseMaxLabelWidth,superMaxLabelWidth));
- //printf("Estimated size %d x %d\n",estWidth,estHeight);
-
- const float pageWidth = 14.0; // estimated page width in cm.
- // Somewhat lower to deal with estimation
- // errors.
-
- // compute the image height in centimeters based on the estimates
- float realHeight = QMIN(rows,12); // real height in cm
- float realWidth = realHeight * estWidth/(float)estHeight;
- if (realWidth>pageWidth) // assume that the page width is about 15 cm
- {
- realHeight*=pageWidth/realWidth;
- realWidth=pageWidth;
- }
-
- //output << "}\n";
- output << "\\begin{figure}[H]\n"
- "\\begin{center}\n"
- "\\leavevmode\n";
- output << "\\includegraphics[height=" << realHeight << "cm]{"
- << fileName << "}" << endl;
- output << "\\end{center}\n"
- "\\end{figure}\n";
-
- //printf("writeFigure rows=%d cols=%d\n",rows,cols);
-
- QCString epsBaseName=(QCString)path+"/"+fileName;
- QCString epsName=epsBaseName+".eps";
- QFile f1;
- f1.setName(epsName.data());
- if (!f1.open(IO_WriteOnly))
- {
- err("Could not open file %s for writing\n",convertToQCString(f1.name()).data());
- exit(1);
- }
- FTextStream t(&f1);
-
- //printf("writeEPS() rows=%d cols=%d\n",rows,cols);
-
- // generate EPS header and postscript variables and procedures
-
- t << "%!PS-Adobe-2.0 EPSF-2.0\n";
- t << "%%Title: ClassName\n";
- t << "%%Creator: Doxygen\n";
- t << "%%CreationDate: Time\n";
- t << "%%For: \n";
- t << "%Magnification: 1.00\n";
- t << "%%Orientation: Portrait\n";
- t << "%%BoundingBox: 0 0 500 " << estHeight*500.0/(float)estWidth << "\n";
- t << "%%Pages: 0\n";
- t << "%%BeginSetup\n";
- t << "%%EndSetup\n";
- t << "%%EndComments\n";
- t << "\n";
- t << "% ----- variables -----\n";
- t << "\n";
- t << "/boxwidth 0 def\n";
- t << "/boxheight 40 def\n";
- t << "/fontheight 24 def\n";
- t << "/marginwidth 10 def\n";
- t << "/distx 20 def\n";
- t << "/disty 40 def\n";
- t << "/boundaspect " << estWidth/(float)estHeight << " def % aspect ratio of the BoundingBox (width/height)\n";
- t << "/boundx 500 def\n";
- t << "/boundy boundx boundaspect div def\n";
- t << "/xspacing 0 def\n";
- t << "/yspacing 0 def\n";
- t << "/rows " << rows << " def\n";
- t << "/cols " << cols << " def\n";
- t << "/scalefactor 0 def\n";
- t << "/boxfont /Times-Roman findfont fontheight scalefont def\n";
- t << "\n";
- t << "% ----- procedures -----\n";
- t << "\n";
- t << "/dotted { [1 4] 0 setdash } def\n";
- t << "/dashed { [5] 0 setdash } def\n";
- t << "/solid { [] 0 setdash } def\n";
- t << "\n";
- t << "/max % result = MAX(arg1,arg2)\n";
- t << "{\n";
- t << " /a exch def\n";
- t << " /b exch def\n";
- t << " a b gt {a} {b} ifelse\n";
- t << "} def\n";
- t << "\n";
- t << "/xoffset % result = MAX(0,(scalefactor-(boxwidth*cols+distx*(cols-1)))/2)\n";
- t << "{\n";
- t << " 0 scalefactor boxwidth cols mul distx cols 1 sub mul add sub 2 div max\n";
- t << "} def\n";
- t << "\n";
- t << "/cw % boxwidth = MAX(boxwidth, stringwidth(arg1))\n";
- t << "{\n";
- t << " /str exch def\n";
- t << " /boxwidth boxwidth str stringwidth pop max def\n";
- t << "} def\n";
- t << "\n";
- t << "/box % draws a box with text `arg1' at grid pos (arg2,arg3)\n";
- t << "{ gsave\n";
- t << " 2 setlinewidth\n";
- t << " newpath\n";
- t << " exch xspacing mul xoffset add\n";
- t << " exch yspacing mul\n";
- t << " moveto\n";
- t << " boxwidth 0 rlineto \n";
- t << " 0 boxheight rlineto \n";
- t << " boxwidth neg 0 rlineto \n";
- t << " 0 boxheight neg rlineto \n";
- t << " closepath\n";
- t << " dup stringwidth pop neg boxwidth add 2 div\n";
- t << " boxheight fontheight 2 div sub 2 div\n";
- t << " rmoveto show stroke\n";
- t << " grestore\n";
- t << "} def \n";
- t << "\n";
- t << "/mark\n";
- t << "{ newpath\n";
- t << " exch xspacing mul xoffset add boxwidth add\n";
- t << " exch yspacing mul\n";
- t << " moveto\n";
- t << " 0 boxheight 4 div rlineto\n";
- t << " boxheight neg 4 div boxheight neg 4 div rlineto\n";
- t << " closepath\n";
- t << " eofill\n";
- t << " stroke\n";
- t << "} def\n";
- t << "\n";
- t << "/arrow\n";
- t << "{ newpath\n";
- t << " moveto\n";
- t << " 3 -8 rlineto\n";
- t << " -6 0 rlineto\n";
- t << " 3 8 rlineto\n";
- t << " closepath\n";
- t << " eofill\n";
- t << " stroke\n";
- t << "} def\n";
- t << "\n";
- t << "/out % draws an output connector for the block at (arg1,arg2)\n";
- t << "{\n";
- t << " newpath\n";
- t << " exch xspacing mul xoffset add boxwidth 2 div add\n";
- t << " exch yspacing mul boxheight add\n";
- t << " /y exch def\n";
- t << " /x exch def\n";
- t << " x y moveto\n";
- t << " 0 disty 2 div rlineto \n";
- t << " stroke\n";
- t << " 1 eq { x y disty 2 div add arrow } if\n";
- t << "} def\n";
- t << "\n";
- t << "/in % draws an input connector for the block at (arg1,arg2)\n";
- t << "{\n";
- t << " newpath\n";
- t << " exch xspacing mul xoffset add boxwidth 2 div add\n";
- t << " exch yspacing mul disty 2 div sub\n";
- t << " /y exch def\n";
- t << " /x exch def\n";
- t << " x y moveto\n";
- t << " 0 disty 2 div rlineto\n";
- t << " stroke\n";
- t << " 1 eq { x y disty 2 div add arrow } if\n";
- t << "} def\n";
- t << "\n";
- t << "/hedge\n";
- t << "{\n";
- t << " exch xspacing mul xoffset add boxwidth 2 div add\n";
- t << " exch yspacing mul boxheight 2 div sub\n";
- t << " /y exch def\n";
- t << " /x exch def\n";
- t << " newpath\n";
- t << " x y moveto\n";
- t << " boxwidth 2 div distx add 0 rlineto\n";
- t << " stroke\n";
- t << " 1 eq\n";
- t << " { newpath x boxwidth 2 div distx add add y moveto\n";
- t << " -8 3 rlineto\n";
- t << " 0 -6 rlineto\n";
- t << " 8 3 rlineto\n";
- t << " closepath\n";
- t << " eofill\n";
- t << " stroke\n";
- t << " } if\n";
- t << "} def\n";
- t << "\n";
- t << "/vedge\n";
- t << "{\n";
- t << " /ye exch def\n";
- t << " /ys exch def\n";
- t << " /xs exch def\n";
- t << " newpath\n";
- t << " xs xspacing mul xoffset add boxwidth 2 div add dup\n";
- t << " ys yspacing mul boxheight 2 div sub\n";
- t << " moveto\n";
- t << " ye yspacing mul boxheight 2 div sub\n";
- t << " lineto\n";
- t << " stroke\n";
- t << "} def\n";
- t << "\n";
- t << "/conn % connections the blocks from col `arg1' to `arg2' of row `arg3'\n";
- t << "{\n";
- t << " /ys exch def\n";
- t << " /xe exch def\n";
- t << " /xs exch def\n";
- t << " newpath\n";
- t << " xs xspacing mul xoffset add boxwidth 2 div add\n";
- t << " ys yspacing mul disty 2 div sub\n";
- t << " moveto\n";
- t << " xspacing xe xs sub mul 0\n";
- t << " rlineto\n";
- t << " stroke\n";
- t << "} def\n";
- t << "\n";
- t << "% ----- main ------\n";
- t << "\n";
- t << "boxfont setfont\n";
- t << "1 boundaspect scale\n";
-
-
- bool done=FALSE;
- DiagramRow *dr=base->first();
- while (dr && !done)
- {
- DiagramItem *di=dr->first();
- while (di)
- {
- done=di->isInList();
- t << "(" << di->label() << ") cw\n";
- di=dr->next();
- }
- dr=base->next();
- }
- dr=super->first();
- dr=super->next();
- done=FALSE;
- while (dr && !done)
- {
- DiagramItem *di=dr->first();
- while (di)
- {
- done=di->isInList();
- t << "(" << di->label() << ") cw\n";
- di=dr->next();
- }
- dr=super->next();
- }
-
- t << "/boxwidth boxwidth marginwidth 2 mul add def\n"
- << "/xspacing boxwidth distx add def\n"
- << "/yspacing boxheight disty add def\n"
- << "/scalefactor \n"
- << " boxwidth cols mul distx cols 1 sub mul add\n"
- << " boxheight rows mul disty rows 1 sub mul add boundaspect mul \n"
- << " max def\n"
- << "boundx scalefactor div boundy scalefactor div scale\n";
-
- t << "\n% ----- classes -----\n\n";
- base->drawBoxes(t,0,TRUE,FALSE,baseRows,superRows,0,0);
- super->drawBoxes(t,0,FALSE,FALSE,baseRows,superRows,0,0);
-
- t << "\n% ----- relations -----\n\n";
- base->drawConnectors(t,0,TRUE,FALSE,baseRows,superRows,0,0);
- super->drawConnectors(t,0,FALSE,FALSE,baseRows,superRows,0,0);
-
- f1.close();
- if (Config_getBool("USE_PDFLATEX"))
- {
- QCString epstopdfArgs(4096);
- epstopdfArgs.sprintf("\"%s.eps\" --outfile=\"%s.pdf\"",
- epsBaseName.data(),epsBaseName.data());
- //printf("Converting eps using `%s'\n",epstopdfCmd.data());
- portable_sysTimerStart();
- if (portable_system("epstopdf",epstopdfArgs)!=0)
- {
- err("error: Problems running epstopdf. Check your TeX installation!\n");
- portable_sysTimerStop();
- return;
- }
- portable_sysTimerStop();
- }
-}
-
-
-void ClassDiagram::writeImage(FTextStream &t,const char *path,
- const char *relPath,const char *fileName,
- bool generateMap) const
-{
- uint baseRows=base->computeRows();
- uint superRows=super->computeRows();
- uint rows=baseRows+superRows-1;
-
- uint lb,ls,xb,xs;
- base->computeExtremes(&lb,&xb);
- super->computeExtremes(&ls,&xs);
-
- uint cellWidth = QMAX(lb,ls)+labelHorMargin*2;
- uint maxXPos = QMAX(xb,xs);
- uint labelVertMargin = 6; //QMAX(6,(cellWidth-fontHeight)/6); // aspect at least 1:3
- uint cellHeight = labelVertMargin*2+fontHeight;
- uint imageWidth = (maxXPos+gridWidth)*cellWidth/gridWidth+
- (maxXPos*labelHorSpacing)/gridWidth;
- uint imageHeight = rows*cellHeight+(rows-1)*labelVertSpacing;
-
- Image image(imageWidth,imageHeight);
-
- base->drawBoxes(t,&image,TRUE,TRUE,baseRows,superRows,cellWidth,cellHeight,relPath,generateMap);
- super->drawBoxes(t,&image,FALSE,TRUE,baseRows,superRows,cellWidth,cellHeight,relPath,generateMap);
- base->drawConnectors(t,&image,TRUE,TRUE,baseRows,superRows,cellWidth,cellHeight);
- super->drawConnectors(t,&image,FALSE,TRUE,baseRows,superRows,cellWidth,cellHeight);
-
-#define IMAGE_EXT ".png"
- image.save((QCString)path+"/"+fileName+IMAGE_EXT);
- Doxygen::indexList.addImageFile(QCString(fileName)+IMAGE_EXT);
-
- if (generateMap) t << "</map>" << endl;
-}
-
diff --git a/trunk/src/diagram.h b/trunk/src/diagram.h
deleted file mode 100644
index 3e2cac2..0000000
--- a/trunk/src/diagram.h
+++ /dev/null
@@ -1,133 +0,0 @@
-/******************************************************************************
- *
- *
- *
- *
- * Copyright (C) 1997-2012 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.
- *
- */
-
-#include "qtbc.h"
-#include "types.h"
-
-class ClassDef;
-class DiagramRow;
-class TreeDiagram;
-class ClassDiagram;
-class DiagramItemList;
-class Image;
-class FTextStream;
-
-class DiagramItem
-{
- public:
- DiagramItem(DiagramItem *p,int number,ClassDef *cd,
- Protection prot,Specifier virt,const char *ts);
- ~DiagramItem();
- QCString label() const;
- QCString fileName() const;
- DiagramItem *parentItem() { return parent; }
- DiagramItemList *getChildren() { return children; }
- void move(int dx,int dy) { x+=dx; y+=dy; }
- int xPos() const { return x; }
- int yPos() const { return y; }
- int avgChildPos() const;
- int numChildren() const;
- void addChild(DiagramItem *di);
- int number() const { return num; }
- Protection protection() const { return prot; }
- Specifier virtualness() const { return virt; }
- void putInList() { inList=TRUE; }
- bool isInList() const { return inList; }
- ClassDef *getClassDef() const { return classDef; }
- private:
- DiagramItemList *children;
- DiagramItem *parent;
- int x,y;
- int num;
- Protection prot;
- Specifier virt;
- QCString templSpec;
- bool inList;
- ClassDef *classDef;
-};
-
-class DiagramItemList : public QList<DiagramItem>
-{
- public:
- DiagramItemList() : QList<DiagramItem>() {}
- ~DiagramItemList() {}
-};
-
-class DiagramRow : public QList<DiagramItem>
-{
- public:
- DiagramRow(TreeDiagram *d,int l) : QList<DiagramItem>()
- {
- diagram=d;
- level=l;
- setAutoDelete(TRUE);
- }
- void insertClass(DiagramItem *parent,ClassDef *cd,bool doBases,
- Protection prot,Specifier virt,const char *ts);
- uint number() { return level; }
- private:
- TreeDiagram *diagram;
- uint level;
-};
-
-class DiagramRowIterator : public QListIterator<DiagramRow>
-{
- public:
- DiagramRowIterator(const QList<DiagramRow> &d)
- : QListIterator<DiagramRow>(d) {}
-};
-
-class TreeDiagram : public QList<DiagramRow>
-{
- public:
- TreeDiagram(ClassDef *root,bool doBases);
- ~TreeDiagram();
- void computeLayout();
- uint computeRows();
- //uint computeCols();
- void moveChildren(DiagramItem *root,int dx);
- void computeExtremes(uint *labelWidth,uint *xpos);
- void drawBoxes(FTextStream &t,Image *image,
- bool doBase,bool bitmap,
- uint baseRows,uint superRows,
- uint cellWidth,uint cellHeight,
- QCString relPath="",
- bool generateMap=TRUE);
- void drawConnectors(FTextStream &t,Image *image,
- bool doBase,bool bitmap,
- uint baseRows,uint superRows,
- uint cellWidth,uint cellheight);
- private:
- bool layoutTree(DiagramItem *root,int row);
- TreeDiagram &operator=(const TreeDiagram &);
- TreeDiagram(const TreeDiagram &);
-};
-
-class ClassDiagram
-{
- public:
- ClassDiagram(ClassDef *root);
- ~ClassDiagram();
- void writeFigure(FTextStream &t,const char *path,
- const char *file) const;
- void writeImage(FTextStream &t,const char *path,const char *relPath,
- const char *file,bool generateMap=TRUE) const;
- private:
- TreeDiagram *base;
- TreeDiagram *super;
-};
diff --git a/trunk/src/dirdef.cpp b/trunk/src/dirdef.cpp
deleted file mode 100644
index c2739f2..0000000
--- a/trunk/src/dirdef.cpp
+++ /dev/null
@@ -1,982 +0,0 @@
-#include "md5.h"
-
-#include "dirdef.h"
-#include "filename.h"
-#include "doxygen.h"
-#include "util.h"
-#include "outputlist.h"
-#include "language.h"
-#include "message.h"
-#include "dot.h"
-#include "layout.h"
-#include "ftextstream.h"
-
-//----------------------------------------------------------------------
-// method implementation
-
-static int g_dirCount=0;
-
-DirDef::DirDef(const char *path) : Definition(path,1,path)
-{
- // get display name (stipping the paths mentioned in STRIP_FROM_PATH)
- m_dispName = stripFromPath(path);
- // get short name (last part of path)
- m_shortName = path;
- m_diskName = path;
- if (m_shortName.at(m_shortName.length()-1)=='/')
- { // strip trailing /
- m_shortName = m_shortName.left(m_shortName.length()-1);
- }
- int pi=m_shortName.findRev('/');
- if (pi!=-1)
- { // remove everything till the last /
- m_shortName = m_shortName.mid(pi+1);
- }
- setLocalName(m_shortName);
-
- m_fileList = new FileList;
- m_usedDirs = new QDict<UsedDir>(257);
- m_usedDirs->setAutoDelete(TRUE);
- m_dirCount = g_dirCount++;
- m_level=-1;
- m_parent=0;
-}
-
-DirDef::~DirDef()
-{
- delete m_fileList;
- delete m_usedDirs;
-}
-
-bool DirDef::isLinkableInProject() const
-{
- return !isReference() && Config_getBool("SHOW_DIRECTORIES");
-}
-
-bool DirDef::isLinkable() const
-{
- return isReference() || isLinkableInProject();
-}
-
-void DirDef::addSubDir(DirDef *subdir)
-{
- m_subdirs.inSort(subdir);
- subdir->setOuterScope(this);
- subdir->m_parent=this;
-}
-
-void DirDef::addFile(FileDef *fd)
-{
- m_fileList->inSort(fd);
- fd->setDirDef(this);
-}
-
-static QCString encodeDirName(const QCString &anchor)
-{
- QCString result;
-
- // convert to md5 hash
- uchar md5_sig[16];
- QCString sigStr(33);
- MD5Buffer((const unsigned char *)anchor.data(),anchor.length(),md5_sig);
- MD5SigToString(md5_sig,sigStr.data(),33);
- return sigStr;
-
- // old algorithm
-
-// int l = anchor.length(),i;
-// for (i=0;i<l;i++)
-// {
-// char c = anchor.at(i);
-// if ((c>='a' && c<='z') || (c>='A' && c<='Z') || (c>='0' && c<='9'))
-// {
-// result+=c;
-// }
-// else
-// {
-// static char hexStr[]="0123456789ABCDEF";
-// char escChar[]={ '_', 0, 0, 0 };
-// escChar[1]=hexStr[c>>4];
-// escChar[2]=hexStr[c&0xf];
-// result+=escChar;
-// }
-// }
-// return result;
-}
-
-QCString DirDef::getOutputFileBase() const
-{
- //printf("DirDef::getOutputFileBase() %s->dir_%s\n",
- // m_diskName.data(),encodeDirName(m_diskName).data());
- return "dir_"+encodeDirName(m_diskName);
-}
-
-void DirDef::writeDetailedDescription(OutputList &ol,const QCString &title)
-{
- if ((!briefDescription().isEmpty() && Config_getBool("REPEAT_BRIEF")) ||
- !documentation().isEmpty())
- {
- ol.writeRuler();
- ol.pushGeneratorState();
- ol.disableAllBut(OutputGenerator::Html);
- ol.writeAnchor(0,"details");
- ol.popGeneratorState();
- ol.startGroupHeader();
- ol.parseText(title);
- ol.endGroupHeader();
-
- // repeat brief description
- if (!briefDescription().isEmpty() && Config_getBool("REPEAT_BRIEF"))
- {
- ol.parseDoc(briefFile(),briefLine(),this,0,briefDescription(),FALSE,FALSE);
- }
- // separator between brief and details
- if (!briefDescription().isEmpty() && Config_getBool("REPEAT_BRIEF") &&
- !documentation().isEmpty())
- {
- ol.pushGeneratorState();
- ol.disable(OutputGenerator::Man);
- ol.disable(OutputGenerator::RTF);
- // ol.newParagraph(); // FIXME:PARA
- ol.enableAll();
- ol.disableAllBut(OutputGenerator::Man);
- ol.writeString("\n\n");
- ol.popGeneratorState();
- }
-
- // write documentation
- if (!documentation().isEmpty())
- {
- ol.parseDoc(docFile(),docLine(),this,0,documentation()+"\n",TRUE,FALSE);
- }
- }
-}
-
-void DirDef::writeBriefDescription(OutputList &ol)
-{
- if (!briefDescription().isEmpty() && Config_getBool("BRIEF_MEMBER_DESC"))
- {
- ol.startParagraph();
- ol.parseDoc(briefFile(),briefLine(),this,0,briefDescription(),TRUE,FALSE);
- ol.pushGeneratorState();
- ol.disable(OutputGenerator::RTF);
- ol.writeString(" \n");
- ol.enable(OutputGenerator::RTF);
-
- if (Config_getBool("REPEAT_BRIEF") ||
- !documentation().isEmpty()
- )
- {
- ol.disableAllBut(OutputGenerator::Html);
- ol.startTextLink(0,"details");
- ol.parseText(theTranslator->trMore());
- ol.endTextLink();
- }
- ol.popGeneratorState();
-
- //ol.pushGeneratorState();
- //ol.disable(OutputGenerator::RTF);
- //ol.newParagraph();
- //ol.popGeneratorState();
- ol.endParagraph();
- }
- ol.writeSynopsis();
-}
-
-void DirDef::writeDirectoryGraph(OutputList &ol)
-{
- // write graph dependency graph
- if (Config_getBool("DIRECTORY_GRAPH") && Config_getBool("HAVE_DOT"))
- {
- DotDirDeps dirDep(this);
- if (!dirDep.isTrivial())
- {
- msg("Generating dependency graph for directory %s\n",displayName().data());
- ol.disable(OutputGenerator::Man);
- //ol.startParagraph();
- ol.startDirDepGraph();
- ol.parseText(theTranslator->trDirDepGraph(displayName()));
- ol.endDirDepGraph(dirDep);
- //ol.endParagraph();
- ol.enableAll();
- }
- }
-}
-
-void DirDef::writeSubDirList(OutputList &ol)
-{
- // write subdir list
- if (m_subdirs.count()>0)
- {
- ol.startMemberHeader("subdirs");
- ol.parseText(theTranslator->trDir(TRUE,FALSE));
- ol.endMemberHeader();
- ol.startMemberList();
- DirDef *dd=m_subdirs.first();
- while (dd)
- {
- ol.startMemberItem(dd->getOutputFileBase(),0);
- ol.parseText(theTranslator->trDir(FALSE,TRUE)+" ");
- ol.insertMemberAlign();
- ol.writeObjectLink(dd->getReference(),dd->getOutputFileBase(),0,dd->shortName());
- ol.endMemberItem();
- if (!Config_getString("GENERATE_TAGFILE").isEmpty())
- {
- Doxygen::tagFile << " <dir>" << convertToXML(dd->displayName()) << "</dir>" << endl;
- }
- if (!dd->briefDescription().isEmpty() && Config_getBool("BRIEF_MEMBER_DESC"))
- {
- ol.startMemberDescription(dd->getOutputFileBase());
- ol.parseDoc(briefFile(),briefLine(),dd,0,dd->briefDescription(),
- FALSE, // indexWords
- FALSE, // isExample
- 0, // exampleName
- FALSE, // single line
- TRUE // link from index
- );
- ol.endMemberDescription();
- }
- dd=m_subdirs.next();
- }
-
- ol.endMemberList();
- }
-}
-
-void DirDef::writeFileList(OutputList &ol)
-{
- // write file list
- if (m_fileList->count()>0)
- {
- ol.startMemberHeader("files");
- ol.parseText(theTranslator->trFile(TRUE,FALSE));
- ol.endMemberHeader();
- ol.startMemberList();
- FileDef *fd=m_fileList->first();
- while (fd)
- {
- ol.startMemberItem(fd->getOutputFileBase(),0);
- ol.docify(theTranslator->trFile(FALSE,TRUE)+" ");
- ol.insertMemberAlign();
- if (fd->isLinkable())
- {
- ol.writeObjectLink(fd->getReference(),fd->getOutputFileBase(),0,fd->name());
- }
- else
- {
- ol.startBold();
- ol.docify(fd->name());
- ol.endBold();
- }
- if (fd->generateSourceFile())
- {
- ol.pushGeneratorState();
- ol.disableAllBut(OutputGenerator::Html);
- ol.docify(" ");
- ol.startTextLink(fd->includeName(),0);
- ol.docify("[");
- ol.parseText(theTranslator->trCode());
- ol.docify("]");
- ol.endTextLink();
- ol.popGeneratorState();
- }
- if (!Config_getString("GENERATE_TAGFILE").isEmpty())
- {
- Doxygen::tagFile << " <file>" << convertToXML(fd->name()) << "</file>" << endl;
- }
- ol.endMemberItem();
- if (!fd->briefDescription().isEmpty() && Config_getBool("BRIEF_MEMBER_DESC"))
- {
- ol.startMemberDescription(fd->getOutputFileBase());
- ol.parseDoc(briefFile(),briefLine(),fd,0,fd->briefDescription(),
- FALSE, // indexWords
- FALSE, // isExample
- 0, // exampleName
- FALSE, // single line
- TRUE // link from index
- );
- ol.endMemberDescription();
- }
- fd=m_fileList->next();
- }
- ol.endMemberList();
- }
-}
-
-void DirDef::startMemberDeclarations(OutputList &ol)
-{
- ol.startMemberSections();
-}
-
-void DirDef::endMemberDeclarations(OutputList &ol)
-{
- ol.endMemberSections();
-}
-
-void DirDef::writeDocumentation(OutputList &ol)
-{
- static bool generateTreeView = Config_getBool("GENERATE_TREEVIEW");
- ol.pushGeneratorState();
-
- QCString shortTitle=theTranslator->trDirReference(m_shortName);
- QCString title=theTranslator->trDirReference(m_dispName);
- startFile(ol,getOutputFileBase(),name(),title,HLI_None,!generateTreeView);
-
- if (!generateTreeView)
- {
- // write navigation path
- writeNavigationPath(ol);
- ol.endQuickIndices();
- }
-
- startTitle(ol,getOutputFileBase());
- ol.pushGeneratorState();
- ol.disableAllBut(OutputGenerator::Html);
- ol.parseText(shortTitle);
- ol.enableAll();
- ol.disable(OutputGenerator::Html);
- ol.parseText(title);
- ol.popGeneratorState();
- endTitle(ol,getOutputFileBase(),title);
- ol.startContents();
-
- if (!Config_getString("GENERATE_TAGFILE").isEmpty())
- {
- Doxygen::tagFile << " <compound kind=\"dir\">" << endl;
- Doxygen::tagFile << " <name>" << convertToXML(displayName()) << "</name>" << endl;
- Doxygen::tagFile << " <path>" << convertToXML(name()) << "</path>" << endl;
- Doxygen::tagFile << " <filename>" << convertToXML(getOutputFileBase()) << Doxygen::htmlFileExtension << "</filename>" << endl;
- }
-
- //---------------------------------------- start flexible part -------------------------------
-
- QListIterator<LayoutDocEntry> eli(
- LayoutDocManager::instance().docEntries(LayoutDocManager::Directory));
- LayoutDocEntry *lde;
- for (eli.toFirst();(lde=eli.current());++eli)
- {
- switch (lde->kind())
- {
- case LayoutDocEntry::BriefDesc:
- writeBriefDescription(ol);
- break;
- case LayoutDocEntry::DirGraph:
- writeDirectoryGraph(ol);
- break;
- case LayoutDocEntry::MemberDeclStart:
- startMemberDeclarations(ol);
- break;
- case LayoutDocEntry::DirSubDirs:
- writeSubDirList(ol);
- break;
- case LayoutDocEntry::DirFiles:
- writeFileList(ol);
- break;
- case LayoutDocEntry::MemberDeclEnd:
- endMemberDeclarations(ol);
- break;
- case LayoutDocEntry::DetailedDesc:
- {
- LayoutDocEntrySection *ls = (LayoutDocEntrySection*)lde;
- writeDetailedDescription(ol,ls->title);
- }
- break;
- case LayoutDocEntry::ClassIncludes:
- case LayoutDocEntry::ClassInlineClasses:
- case LayoutDocEntry::ClassInheritanceGraph:
- case LayoutDocEntry::ClassNestedClasses:
- case LayoutDocEntry::ClassCollaborationGraph:
- case LayoutDocEntry::ClassAllMembersLink:
- case LayoutDocEntry::ClassUsedFiles:
- case LayoutDocEntry::NamespaceNestedNamespaces:
- case LayoutDocEntry::NamespaceClasses:
- case LayoutDocEntry::NamespaceInlineClasses:
- case LayoutDocEntry::FileClasses:
- case LayoutDocEntry::FileNamespaces:
- case LayoutDocEntry::FileIncludes:
- case LayoutDocEntry::FileIncludeGraph:
- case LayoutDocEntry::FileIncludedByGraph:
- case LayoutDocEntry::FileSourceLink:
- case LayoutDocEntry::FileInlineClasses:
- case LayoutDocEntry::GroupClasses:
- case LayoutDocEntry::GroupInlineClasses:
- case LayoutDocEntry::GroupNamespaces:
- case LayoutDocEntry::GroupDirs:
- case LayoutDocEntry::GroupNestedGroups:
- case LayoutDocEntry::GroupFiles:
- case LayoutDocEntry::GroupGraph:
- case LayoutDocEntry::GroupPageDocs:
- case LayoutDocEntry::AuthorSection:
- case LayoutDocEntry::MemberGroups:
- case LayoutDocEntry::MemberDecl:
- case LayoutDocEntry::MemberDef:
- case LayoutDocEntry::MemberDefStart:
- case LayoutDocEntry::MemberDefEnd:
- err("Internal inconsistency: member %d should not be part of "
- "LayoutDocManager::Directory entry list\n",lde->kind());
- break;
- }
- }
-
- //---------------------------------------- end flexible part -------------------------------
-
- if (!Config_getString("GENERATE_TAGFILE").isEmpty())
- {
- writeDocAnchorsToTagFile();
- Doxygen::tagFile << " </compound>" << endl;
- }
-
- ol.endContents();
-
- endFileWithNavPath(this,ol);
-
- ol.popGeneratorState();
-}
-
-void DirDef::setLevel()
-{
- if (m_level==-1) // level not set before
- {
- DirDef *p = parent();
- if (p)
- {
- p->setLevel();
- m_level = p->level()+1;
- }
- else
- {
- m_level = 0;
- }
- }
-}
-
-/** Add as "uses" dependency between \a this dir and \a dir,
- * that was caused by a dependency on file \a fd.
- */
-void DirDef::addUsesDependency(DirDef *dir,FileDef *srcFd,
- FileDef *dstFd,bool inherited)
-{
- if (this==dir) return; // do not add self-dependencies
- //static int count=0;
- //printf(" %d add dependency %s->%s due to %s->%s\n",
- // count++,shortName().data(),
- // dir->shortName().data(),
- // srcFd->name().data(),
- // dstFd->name().data());
-
- // levels match => add direct dependency
- bool added=FALSE;
- UsedDir *usedDir = m_usedDirs->find(dir->getOutputFileBase());
- if (usedDir) // dir dependency already present
- {
- FilePair *usedPair = usedDir->findFilePair(
- srcFd->getOutputFileBase()+dstFd->getOutputFileBase());
- if (usedPair==0) // new file dependency
- {
- //printf(" => new file\n");
- usedDir->addFileDep(srcFd,dstFd);
- added=TRUE;
- }
- else
- {
- // dir & file dependency already added
- }
- }
- else // new directory dependency
- {
- //printf(" => new file\n");
- usedDir = new UsedDir(dir,inherited);
- usedDir->addFileDep(srcFd,dstFd);
- m_usedDirs->insert(dir->getOutputFileBase(),usedDir);
- added=TRUE;
- }
- if (added)
- {
- if (dir->parent())
- {
- // add relation to parent of used dir
- addUsesDependency(dir->parent(),srcFd,dstFd,inherited);
- }
- if (parent())
- {
- // add relation for the parent of this dir as well
- parent()->addUsesDependency(dir,srcFd,dstFd,TRUE);
- }
- }
-}
-
-/** Computes the dependencies between directories
- */
-void DirDef::computeDependencies()
-{
- FileList *fl = m_fileList;
- if (fl)
- {
- QListIterator<FileDef> fli(*fl);
- FileDef *fd;
- for (fli.toFirst();(fd=fli.current());++fli) // foreach file in dir dd
- {
- //printf(" File %s\n",fd->name().data());
- //printf("** dir=%s file=%s\n",shortName().data(),fd->name().data());
- QList<IncludeInfo> *ifl = fd->includeFileList();
- if (ifl)
- {
- QListIterator<IncludeInfo> ifli(*ifl);
- IncludeInfo *ii;
- for (ifli.toFirst();(ii=ifli.current());++ifli) // foreach include file
- {
- //printf(" > %s\n",ii->includeName.data());
- //printf(" #include %s\n",ii->includeName.data());
- if (ii->fileDef && ii->fileDef->isLinkable()) // linkable file
- {
- DirDef *usedDir = ii->fileDef->getDirDef();
- if (usedDir)
- {
- // add dependency: thisDir->usedDir
- //static int count=0;
- //printf(" %d: add dependency %s->%s\n",count++,name().data(),usedDir->name().data());
- addUsesDependency(usedDir,fd,ii->fileDef,FALSE);
- }
- }
- }
- }
- }
- }
-}
-
-bool DirDef::isParentOf(DirDef *dir) const
-{
- if (dir->parent()==this) // this is a parent of dir
- return TRUE;
- else if (dir->parent()) // repeat for the parent of dir
- return isParentOf(dir->parent());
- else
- return FALSE;
-}
-
-bool DirDef::depGraphIsTrivial() const
-{
- return FALSE;
-}
-
-//----------------------------------------------------------------------
-
-int FilePairDict::compareItems(GCI item1,GCI item2)
-{
- FilePair *left = (FilePair*)item1;
- FilePair *right = (FilePair*)item2;
- int orderHi = stricmp(left->source()->name(),right->source()->name());
- int orderLo = stricmp(left->destination()->name(),right->destination()->name());
- return orderHi==0 ? orderLo : orderHi;
-}
-
-//----------------------------------------------------------------------
-
-UsedDir::UsedDir(DirDef *dir,bool inherited) :
- m_dir(dir), m_filePairs(7), m_inherited(inherited)
-{
- m_filePairs.setAutoDelete(TRUE);
-}
-
-UsedDir::~UsedDir()
-{
-}
-
-
-void UsedDir::addFileDep(FileDef *srcFd,FileDef *dstFd)
-{
- m_filePairs.inSort(srcFd->getOutputFileBase()+dstFd->getOutputFileBase(),
- new FilePair(srcFd,dstFd));
-}
-
-FilePair *UsedDir::findFilePair(const char *name)
-{
- QCString n=name;
- return n.isEmpty() ? 0 : m_filePairs.find(n);
-}
-
-DirDef *DirDef::createNewDir(const char *path)
-{
- ASSERT(path!=0);
- DirDef *dir = Doxygen::directories->find(path);
- if (dir==0) // new dir
- {
- //printf("Adding new dir %s\n",path);
- dir = new DirDef(path);
- //printf("createNewDir %s short=%s\n",path,dir->shortName().data());
- Doxygen::directories->inSort(path,dir);
- }
- return dir;
-}
-
-bool DirDef::matchPath(const QCString &path,QStrList &l)
-{
- const char *s=l.first();
- while (s)
- {
- QCString prefix = s;
- if (stricmp(prefix.left(path.length()),path)==0) // case insensitive compare
- {
- return TRUE;
- }
- s = l.next();
- }
- return FALSE;
-}
-
-/*! strip part of \a path if it matches
- * one of the paths in the Config_getList("STRIP_FROM_PATH") list
- */
-DirDef *DirDef::mergeDirectoryInTree(const QCString &path)
-{
- //printf("DirDef::mergeDirectoryInTree(%s)\n",path.data());
- int p=0,i=0;
- DirDef *dir=0;
- while ((i=path.find('/',p))!=-1)
- {
- QCString part=path.left(i+1);
- if (!matchPath(part,Config_getList("STRIP_FROM_PATH")) && part!="/")
- {
- dir=createNewDir(part);
- }
- p=i+1;
- }
- return dir;
-}
-
-void DirDef::writeDepGraph(FTextStream &t)
-{
- writeDotDirDepGraph(t,this);
-}
-
-//----------------------------------------------------------------------
-
-static void writePartialDirPath(OutputList &ol,const DirDef *root,const DirDef *target)
-{
- if (target->parent()!=root)
- {
- writePartialDirPath(ol,root,target->parent());
- ol.writeString("&#160;/&#160;");
- }
- ol.writeObjectLink(target->getReference(),target->getOutputFileBase(),0,target->shortName());
-}
-
-static void writePartialFilePath(OutputList &ol,const DirDef *root,const FileDef *fd)
-{
- if (fd->getDirDef() && fd->getDirDef()!=root)
- {
- writePartialDirPath(ol,root,fd->getDirDef());
- ol.writeString("&#160;/&#160;");
- }
- if (fd->isLinkable())
- {
- ol.writeObjectLink(fd->getReference(),fd->getOutputFileBase(),0,fd->name());
- }
- else
- {
- ol.startBold();
- ol.docify(fd->name());
- ol.endBold();
- }
-}
-
-void DirRelation::writeDocumentation(OutputList &ol)
-{
- static bool generateTreeView = Config_getBool("GENERATE_TREEVIEW");
- ol.pushGeneratorState();
- ol.disableAllBut(OutputGenerator::Html);
-
- QCString shortTitle=theTranslator->trDirRelation(
- m_src->shortName()+" &rarr; "+
- m_dst->dir()->shortName());
- QCString title=theTranslator->trDirRelation(
- m_src->displayName()+" -> "+
- m_dst->dir()->shortName());
- startFile(ol,getOutputFileBase(),getOutputFileBase(),
- title,HLI_None,!generateTreeView,m_src->getOutputFileBase());
-
- if (!generateTreeView)
- {
- // write navigation path
- m_src->writeNavigationPath(ol);
- ol.endQuickIndices();
- }
- ol.startContents();
-
- ol.writeString("<h3>"+shortTitle+"</h3>");
- ol.writeString("<table class=\"dirtab\">");
- ol.writeString("<tr class=\"dirtab\">");
- ol.writeString("<th class=\"dirtab\">");
- ol.parseText(theTranslator->trFileIn(m_src->pathFragment()));
- ol.writeString("</th>");
- ol.writeString("<th class=\"dirtab\">");
- ol.parseText(theTranslator->trIncludesFileIn(m_dst->dir()->pathFragment()));
- ol.writeString("</th>");
- ol.writeString("</tr>");
-
- SDict<FilePair>::Iterator fpi(m_dst->filePairs());
- FilePair *fp;
- for (fpi.toFirst();(fp=fpi.current());++fpi)
- {
- ol.writeString("<tr class=\"dirtab\">");
- ol.writeString("<td class=\"dirtab\">");
- writePartialFilePath(ol,m_src,fp->source());
- ol.writeString("</td>");
- ol.writeString("<td class=\"dirtab\">");
- writePartialFilePath(ol,m_dst->dir(),fp->destination());
- ol.writeString("</td>");
- ol.writeString("</tr>");
- }
- ol.writeString("</table>");
-
- ol.endContents();
-
- endFileWithNavPath(m_src,ol);
-
- ol.popGeneratorState();
-}
-
-//----------------------------------------------------------------------
-// external functions
-
-/** In order to create stable, but unique directory names,
- * we compute the common part of the path shared by all directories.
- */
-static void computeCommonDirPrefix()
-{
- QCString path;
- DirDef *dir;
- DirSDict::Iterator sdi(*Doxygen::directories);
- if (Doxygen::directories->count()>0) // we have at least one dir
- {
- // start will full path of first dir
- sdi.toFirst();
- dir=sdi.current();
- path=dir->name();
- int i=path.findRev('/',path.length()-2);
- path=path.left(i+1);
- bool done=FALSE;
- if (i==-1)
- {
- path="";
- }
- else
- {
- while (!done)
- {
- int l = path.length();
- int count=0;
- for (sdi.toFirst();(dir=sdi.current());++sdi)
- {
- QCString dirName = dir->name();
- if (dirName.length()>path.length())
- {
- if (strncmp(dirName,path,l)!=0) // dirName does not start with path
- {
- int i=path.findRev('/',l-2);
- if (i==-1) // no unique prefix -> stop
- {
- path="";
- done=TRUE;
- }
- else // restart with shorter path
- {
- path=path.left(i+1);
- break;
- }
- }
- }
- else // dir is shorter than path -> take path of dir as new start
- {
- path=dir->name();
- int i=path.findRev('/',l-2);
- if (i==-1) // no unique prefix -> stop
- {
- path="";
- done=TRUE;
- }
- else // restart with shorter path
- {
- path=path.left(i+1);
- }
- break;
- }
- count++;
- }
- if (count==Doxygen::directories->count())
- // path matches for all directories -> found the common prefix
- {
- done=TRUE;
- }
- }
- }
- }
- for (sdi.toFirst();(dir=sdi.current());++sdi)
- {
- QCString diskName = dir->name().right(dir->name().length()-path.length());
- dir->setDiskName(diskName);
- //printf("set disk name: %s -> %s\n",dir->name().data(),diskName.data());
- }
-}
-
-void buildDirectories()
-{
- // for each input file
- FileNameListIterator fnli(*Doxygen::inputNameList);
- FileName *fn;
- for (fnli.toFirst();(fn=fnli.current());++fnli)
- {
- FileNameIterator fni(*fn);
- FileDef *fd;
- for (;(fd=fni.current());++fni)
- {
- //printf("buildDirectories %s\n",fd->name().data());
- if (fd->getReference().isEmpty() && !fd->isDocumentationFile())
- {
- DirDef *dir;
- if ((dir=Doxygen::directories->find(fd->getPath()))==0) // new directory
- {
- dir = DirDef::mergeDirectoryInTree(fd->getPath());
- }
- if (dir) dir->addFile(fd);
- }
- else
- {
- // do something for file imported via tag files.
- }
- }
- }
-
- //DirDef *root = new DirDef("root:");
- // compute relations between directories => introduce container dirs.
- DirDef *dir;
- DirSDict::Iterator sdi(*Doxygen::directories);
- for (sdi.toFirst();(dir=sdi.current());++sdi)
- {
- //printf("New dir %s\n",dir->displayName().data());
- QCString name = dir->name();
- int i=name.findRev('/',name.length()-2);
- if (i>0)
- {
- DirDef *parent = Doxygen::directories->find(name.left(i+1));
- //if (parent==0) parent=root;
- if (parent)
- {
- parent->addSubDir(dir);
- //printf("DirDef::addSubdir(): Adding subdir\n%s to\n%s\n",
- // dir->displayName().data(), parent->displayName().data());
- }
- }
- }
- computeCommonDirPrefix();
-}
-
-void computeDirDependencies()
-{
- DirDef *dir;
- DirSDict::Iterator sdi(*Doxygen::directories);
- // compute nesting level for each directory
- for (sdi.toFirst();(dir=sdi.current());++sdi)
- {
- dir->setLevel();
- }
- // compute uses dependencies between directories
- for (sdi.toFirst();(dir=sdi.current());++sdi)
- {
- //printf("computeDependencies for %s: #dirs=%d\n",dir->name().data(),Doxygen::directories.count());
- dir->computeDependencies();
- }
-
-#if 0
- printf("-------------------------------------------------------------\n");
- // print dependencies (for debugging)
- for (sdi.toFirst();(dir=sdi.current());++sdi)
- {
- if (dir->usedDirs())
- {
- QDictIterator<UsedDir> udi(*dir->usedDirs());
- UsedDir *usedDir;
- for (udi.toFirst();(usedDir=udi.current());++udi)
- {
- printf("%s depends on %s due to ",
- dir->shortName().data(),usedDir->dir()->shortName().data());
- QDictIterator<FileDef> fdi(usedDir->files());
- FileDef *fd;
- for (fdi.toFirst();(fd=fdi.current());++fdi)
- {
- printf("%s ",fd->name().data());
- }
- printf("\n");
- }
- }
- }
- printf("^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-^\n");
-#endif
-}
-
-#if 0
-void writeDirDependencyGraph(const char *dirName)
-{
- QString path;
- DirDef *dir;
- DirSDict::Iterator sdi(*Doxygen::directories);
- QFile htmlPage(QCString(dirName)+"/dirdeps.html");
- if (htmlPage.open(IO_WriteOnly))
- {
- QTextStream out(&htmlPage);
- out << "<html><body>";
- for (sdi.toFirst();(dir=sdi.current());++sdi)
- {
- path=dirName;
- path+="/";
- path+=dir->getOutputFileBase();
- path+="_dep.dot";
- out << "<h4>" << dir->displayName() << "</h4>" << endl;
- out << "<img src=\"" << dir->getOutputFileBase() << "_dep.gif\">" << endl;
- QFile f(path);
- if (f.open(IO_WriteOnly))
- {
- QTextStream t(&f);
- dir->writeDepGraph(t);
- }
- f.close();
-
- QCString imgExt = Config_getEnum("DOT_IMAGE_FORMAT");
- QCString outFile = QCString(dirName)+"/"+
- dir->getOutputFileBase()+"_dep."+imgExt;
- DotRunner dotRun(path);
- dotRun.addJob(imgExt,outFile);
- dotRun.run();
-
- //QCString dotArgs(4096);
- //dotArgs.sprintf("%s -Tgif -o %s",path.data(),outFile.data());
- //if (portable_system(Config_getString("DOT_PATH")+"dot",dotArgs,FALSE)!=0)
- //{
- // err("Problems running dot. Check your installation!\n");
- //}
- }
- out << "</body></html>";
- }
- htmlPage.close();
-}
-#endif
-
-void generateDirDocs(OutputList &ol)
-{
- DirDef *dir;
- DirSDict::Iterator sdi(*Doxygen::directories);
- for (sdi.toFirst();(dir=sdi.current());++sdi)
- {
- dir->writeDocumentation(ol);
- }
- if (Config_getBool("DIRECTORY_GRAPH"))
- {
- SDict<DirRelation>::Iterator rdi(Doxygen::dirRelations);
- DirRelation *dr;
- for (rdi.toFirst();(dr=rdi.current());++rdi)
- {
- dr->writeDocumentation(ol);
- }
- }
-}
-
diff --git a/trunk/src/dirdef.h b/trunk/src/dirdef.h
deleted file mode 100644
index e7a6b0e..0000000
--- a/trunk/src/dirdef.h
+++ /dev/null
@@ -1,182 +0,0 @@
-/******************************************************************************
- *
- *
- *
- * Copyright (C) 1997-2012 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.
- *
- */
-
-#ifndef DIRDEF_H
-#define DIRDEF_H
-
-#include "qtbc.h"
-#include "sortdict.h"
-#include "definition.h"
-
-#include <qlist.h>
-
-class FileList;
-class ClassSDict;
-class QStrList;
-class FileDef;
-class OutputList;
-class UsedDir;
-class FTextStream;
-
-class DirDef;
-
-/** A list of directories */
-class DirList : public QList<DirDef>
-{
- public:
- int compareItems(GCI item1,GCI item2);
-};
-
-/** A directory */
-class DirDef : public Definition
-{
- public:
- DirDef(const char *path);
- virtual ~DirDef();
-
- // accessors
- DefType definitionType() const { return TypeDir; }
- QCString getOutputFileBase() const;
- QCString anchor() const { return QCString(); }
- bool isLinkableInProject() const;
- bool isLinkable() const;
- QCString displayName() const { return m_dispName; }
- QCString shortName() const { return m_shortName; }
- void addSubDir(DirDef *subdir);
- FileList * getFiles() const { return m_fileList; }
- void addFile(FileDef *fd);
- const DirList &subDirs() const { return m_subdirs; }
- bool isCluster() const { return m_subdirs.count()>0; }
- int level() const { return m_level; }
- DirDef *parent() const { return m_parent; }
- int dirCount() const { return m_dirCount; }
- const QDict<UsedDir> *usedDirs() const { return m_usedDirs; }
- bool isParentOf(DirDef *dir) const;
- bool depGraphIsTrivial() const;
-
- // generate output
- void writeDocumentation(OutputList &ol);
- void writeDepGraph(FTextStream &t);
-
- static DirDef *mergeDirectoryInTree(const QCString &path);
- bool visited;
- void setDiskName(const QCString &name) { m_diskName = name; }
-
- private:
- friend void computeDirDependencies();
-
- void writeDetailedDescription(OutputList &ol,const QCString &title);
- void writeBriefDescription(OutputList &ol);
- void writeDirectoryGraph(OutputList &ol);
- void writeSubDirList(OutputList &ol);
- void writeFileList(OutputList &ol);
- void startMemberDeclarations(OutputList &ol);
- void endMemberDeclarations(OutputList &ol);
-
- void setLevel();
- static DirDef *createNewDir(const char *path);
- static bool matchPath(const QCString &path,QStrList &l);
- void addUsesDependency(DirDef *usedDir,FileDef *srcFd,
- FileDef *dstFd,bool inherited);
- void computeDependencies();
-
- DirList m_subdirs;
- QCString m_dispName;
- QCString m_shortName;
- QCString m_diskName;
- FileList *m_fileList; // list of files in the group
- int m_dirCount;
- int m_level;
- DirDef *m_parent;
- QDict<UsedDir> *m_usedDirs;
-};
-
-class FilePair
-{
- public:
- FilePair(FileDef *src,FileDef *dst) : m_src(src), m_dst(dst) {}
- const FileDef *source() const { return m_src; }
- const FileDef *destination() const { return m_dst; }
- private:
- FileDef *m_src;
- FileDef *m_dst;
-};
-
-class FilePairDict : public SDict<FilePair>
-{
- public:
- FilePairDict(int size) : SDict<FilePair>(size) {}
- int compareItems(GCI item1,GCI item2);
-};
-
-/** Usage information of a directory . */
-class UsedDir
-{
- public:
- UsedDir(DirDef *dir,bool inherited);
- virtual ~UsedDir();
- void addFileDep(FileDef *srcFd,FileDef *dstFd);
- FilePair *findFilePair(const char *name);
- const FilePairDict &filePairs() const { return m_filePairs; }
- const DirDef *dir() const { return m_dir; }
- bool inherited() const { return m_inherited; }
-
- private:
- DirDef *m_dir;
- FilePairDict m_filePairs;
- bool m_inherited;
-};
-
-/** A usage relation between two direction. */
-class DirRelation
-{
- public:
- DirRelation(const QCString &name,DirDef *src,UsedDir *dst)
- : m_name(name), m_src(src), m_dst(dst) {}
- DirDef *source() const { return m_src; }
- UsedDir *destination() const { return m_dst; }
- void writeDocumentation(OutputList &ol);
- QCString getOutputFileBase() const { return m_name; }
-
- private:
- QCString m_name;
- DirDef *m_src;
- UsedDir *m_dst;
-};
-
-inline int DirList::compareItems(GCI item1,GCI item2)
-{
- return stricmp(((DirDef *)item1)->shortName(),((DirDef *)item2)->shortName());
-}
-
-class DirSDict : public SDict<DirDef>
-{
- public:
- DirSDict(int size) : SDict<DirDef>(size) {}
- int compareItems(GCI item1,GCI item2)
- {
- return stricmp(((DirDef *)item1)->shortName(),((DirDef *)item2)->shortName());
- }
-};
-
-
-void buildDirectories();
-void generateDirDocs(OutputList &ol);
-void computeDirDependencies();
-void writeDirDependencyGraph(const char *file);
-
-#endif
diff --git a/trunk/src/docparser.cpp b/trunk/src/docparser.cpp
deleted file mode 100644
index 17d9685..0000000
--- a/trunk/src/docparser.cpp
+++ /dev/null
@@ -1,6970 +0,0 @@
-/******************************************************************************
- *
- *
- *
- *
- * Copyright (C) 1997-2012 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.
- *
- */
-
-#include <stdio.h>
-#include <stdlib.h>
-
-#include <qfile.h>
-#include <qfileinfo.h>
-#include <qcstring.h>
-#include <qstack.h>
-#include <qdict.h>
-#include <qregexp.h>
-#include <ctype.h>
-
-#include "doxygen.h"
-#include "debug.h"
-#include "util.h"
-#include "pagedef.h"
-
-#include "docparser.h"
-#include "doctokenizer.h"
-#include "cmdmapper.h"
-#include "printdocvisitor.h"
-#include "message.h"
-#include "section.h"
-#include "searchindex.h"
-#include "language.h"
-#include "portable.h"
-#include "cite.h"
-#include "arguments.h"
-
-// debug off
-#define DBG(x) do {} while(0)
-
-// debug to stdout
-//#define DBG(x) printf x
-
-// debug to stderr
-//#define myprintf(x...) fprintf(stderr,x)
-//#define DBG(x) myprintf x
-
-#define INTERNAL_ASSERT(x) do {} while(0)
-//#define INTERNAL_ASSERT(x) if (!(x)) DBG(("INTERNAL_ASSERT(%s) failed retval=0x%x: file=%s line=%d\n",#x,retval,__FILE__,__LINE__));
-
-//---------------------------------------------------------------------------
-
-static const char *sectionLevelToName[] =
-{
- "page",
- "section",
- "subsection",
- "subsubsection",
- "paragraph"
-};
-
-//---------------------------------------------------------------------------
-
-// Parser state: global variables during a call to validatingParseDoc
-static Definition * g_scope;
-static QCString g_context;
-static bool g_inSeeBlock;
-static bool g_insideHtmlLink;
-static QStack<DocNode> g_nodeStack;
-static QStack<DocStyleChange> g_styleStack;
-static QStack<DocStyleChange> g_initialStyleStack;
-static QList<Definition> g_copyStack;
-static QCString g_fileName;
-static QCString g_relPath;
-
-static bool g_hasParamCommand;
-static bool g_hasReturnCommand;
-static QDict<void> g_paramsFound;
-static MemberDef * g_memberDef;
-static bool g_isExample;
-static QCString g_exampleName;
-static SectionDict * g_sectionDict;
-static QCString g_searchUrl;
-
-static QCString g_includeFileText;
-static uint g_includeFileOffset;
-static uint g_includeFileLength;
-
-// parser's context to store all global variables
-struct DocParserContext
-{
- Definition *scope;
- QCString context;
- bool inSeeBlock;
- bool insideHtmlLink;
- QStack<DocNode> nodeStack;
- QStack<DocStyleChange> styleStack;
- QStack<DocStyleChange> initialStyleStack;
- QList<Definition> copyStack;
- QCString fileName;
- QCString relPath;
-
- bool hasParamCommand;
- bool hasReturnCommand;
- MemberDef * memberDef;
- QDict<void> paramsFound;
- bool isExample;
- QCString exampleName;
- SectionDict *sectionDict;
- QCString searchUrl;
-
- QCString includeFileText;
- uint includeFileOffset;
- uint includeFileLength;
-
- TokenInfo *token;
-};
-
-static QStack<DocParserContext> g_parserStack;
-
-//---------------------------------------------------------------------------
-
-static void docParserPushContext(bool saveParamInfo=TRUE)
-{
- //QCString indent;
- //indent.fill(' ',g_parserStack.count()*2+2);
- //printf("%sdocParserPushContext() count=%d\n",indent.data(),g_nodeStack.count());
-
- doctokenizerYYpushContext();
- DocParserContext *ctx = new DocParserContext;
- ctx->scope = g_scope;
- ctx->context = g_context;
- ctx->inSeeBlock = g_inSeeBlock;
- ctx->insideHtmlLink = g_insideHtmlLink;
- ctx->nodeStack = g_nodeStack;
- ctx->styleStack = g_styleStack;
- ctx->initialStyleStack = g_initialStyleStack;
- ctx->copyStack = g_copyStack;
- ctx->fileName = g_fileName;
- ctx->relPath = g_relPath;
-
- if (saveParamInfo)
- {
- ctx->hasParamCommand = g_hasParamCommand;
- ctx->hasReturnCommand = g_hasReturnCommand;
- ctx->paramsFound = g_paramsFound;
- }
-
- ctx->memberDef = g_memberDef;
- ctx->isExample = g_isExample;
- ctx->exampleName = g_exampleName;
- ctx->sectionDict = g_sectionDict;
- ctx->searchUrl = g_searchUrl;
-
- ctx->includeFileText = g_includeFileText;
- ctx->includeFileOffset = g_includeFileOffset;
- ctx->includeFileLength = g_includeFileLength;
-
- ctx->token = g_token;
- g_token = new TokenInfo;
-
- g_parserStack.push(ctx);
-}
-
-static void docParserPopContext(bool keepParamInfo=FALSE)
-{
- DocParserContext *ctx = g_parserStack.pop();
- g_scope = ctx->scope;
- g_context = ctx->context;
- g_inSeeBlock = ctx->inSeeBlock;
- g_insideHtmlLink = ctx->insideHtmlLink;
- g_nodeStack = ctx->nodeStack;
- g_styleStack = ctx->styleStack;
- g_initialStyleStack = ctx->initialStyleStack;
- g_copyStack = ctx->copyStack;
- g_fileName = ctx->fileName;
- g_relPath = ctx->relPath;
-
- if (!keepParamInfo)
- {
- g_hasParamCommand = ctx->hasParamCommand;
- g_hasReturnCommand = ctx->hasReturnCommand;
- g_paramsFound = ctx->paramsFound;
- }
- g_memberDef = ctx->memberDef;
- g_isExample = ctx->isExample;
- g_exampleName = ctx->exampleName;
- g_sectionDict = ctx->sectionDict;
- g_searchUrl = ctx->searchUrl;
-
- g_includeFileText = ctx->includeFileText;
- g_includeFileOffset = ctx->includeFileOffset;
- g_includeFileLength = ctx->includeFileLength;
-
- delete g_token;
- g_token = ctx->token;
-
- delete ctx;
- doctokenizerYYpopContext();
-
- //QCString indent;
- //indent.fill(' ',g_parserStack.count()*2+2);
- //printf("%sdocParserPopContext() count=%d\n",indent.data(),g_nodeStack.count());
-}
-
-//---------------------------------------------------------------------------
-
-/*! search for an image in the imageNameDict and if found
- * copies the image to the output directory (which depends on the \a type
- * parameter).
- */
-static QCString findAndCopyImage(const char *fileName,DocImage::Type type)
-{
- QCString result;
- bool ambig;
- FileDef *fd;
- //printf("Search for %s\n",fileName);
- if ((fd=findFileDef(Doxygen::imageNameDict,fileName,ambig)))
- {
- QCString inputFile = fd->absFilePath();
- QFile inImage(inputFile);
- if (inImage.open(IO_ReadOnly))
- {
- result = fileName;
- int i;
- if ((i=result.findRev('/'))!=-1 || (i=result.findRev('\\'))!=-1)
- {
- result = result.right(result.length()-i-1);
- }
- //printf("fileName=%s result=%s\n",fileName,result.data());
- QCString outputDir;
- switch(type)
- {
- case DocImage::Html:
- if (!Config_getBool("GENERATE_HTML")) return result;
- outputDir = Config_getString("HTML_OUTPUT");
- break;
- case DocImage::Latex:
- if (!Config_getBool("GENERATE_LATEX")) return result;
- outputDir = Config_getString("LATEX_OUTPUT");
- break;
- case DocImage::Rtf:
- if (!Config_getBool("GENERATE_RTF")) return result;
- outputDir = Config_getString("RTF_OUTPUT");
- break;
- }
- QCString outputFile = outputDir+"/"+result;
- if (outputFile!=inputFile) // prevent copying to ourself
- {
- QFile outImage(outputFile.data());
- if (outImage.open(IO_WriteOnly)) // copy the image
- {
- char *buffer = new char[inImage.size()];
- inImage.readBlock(buffer,inImage.size());
- outImage.writeBlock(buffer,inImage.size());
- outImage.flush();
- delete[] buffer;
- if (type==DocImage::Html) Doxygen::indexList.addImageFile(result);
- }
- else
- {
- warn_doc_error(g_fileName,doctokenizerYYlineno,
- "warning: could not write output image %s",qPrint(outputFile));
- }
- }
- }
- else
- {
- warn_doc_error(g_fileName,doctokenizerYYlineno,
- "warning: could not open image %s",qPrint(fileName));
- }
-
- if (type==DocImage::Latex && Config_getBool("USE_PDFLATEX") &&
- fd->name().right(4)==".eps"
- )
- { // we have an .eps image in pdflatex mode => convert it to a pdf.
- QCString outputDir = Config_getString("LATEX_OUTPUT");
- QCString baseName = fd->name().left(fd->name().length()-4);
- QCString epstopdfArgs(4096);
- epstopdfArgs.sprintf("\"%s/%s.eps\" --outfile=\"%s/%s.pdf\"",
- outputDir.data(), baseName.data(),
- outputDir.data(), baseName.data());
- portable_sysTimerStart();
- if (portable_system("epstopdf",epstopdfArgs)!=0)
- {
- err("error: Problems running epstopdf. Check your TeX installation!\n");
- }
- portable_sysTimerStop();
- return baseName;
- }
- }
- else if (ambig)
- {
- QCString text;
- text.sprintf("warning: image file name %s is ambiguous.\n",qPrint(fileName));
- text+="Possible candidates:\n";
- text+=showFileDefMatches(Doxygen::imageNameDict,fileName);
- warn_doc_error(g_fileName,doctokenizerYYlineno,text);
- }
- else
- {
- result=fileName;
- if (result.left(5)!="http:" && result.left(6)!="https:")
- {
- warn_doc_error(g_fileName,doctokenizerYYlineno,
- "warning: image file %s is not found in IMAGE_PATH: "
- "assuming external image.",qPrint(fileName)
- );
- }
- }
- 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, then a warning is raised (unless warnings
- * are disabled altogether).
- */
-static void checkArgumentName(const QCString &name,bool isParam)
-{
- if (!Config_getBool("WARN_IF_DOC_ERROR")) return;
- if (g_memberDef==0) return; // not a member
- LockingPtr<ArgumentList> al=g_memberDef->isDocsForDefinition() ?
- g_memberDef->argumentList() :
- g_memberDef->declArgumentList();
- SrcLangExt lang = g_memberDef->getLanguage();
- //printf("isDocsForDefinition()=%d\n",g_memberDef->isDocsForDefinition());
- if (al==0) return; // no argument list
-
- static QRegExp re("[a-zA-Z0-9_\\x80-\\xFF]+\\.*");
- int p=0,i=0,l;
- while ((i=re.match(name,p,&l))!=-1) // to handle @param x,y
- {
- QCString aName=name.mid(i,l);
- if (lang==SrcLangExt_Fortran) aName=aName.lower();
- //printf("aName=`%s'\n",aName.data());
- ArgumentListIterator ali(*al);
- Argument *a;
- bool found=FALSE;
- for (ali.toFirst();(a=ali.current());++ali)
- {
- QCString argName = g_memberDef->isDefine() ? a->type : a->name;
- if (lang==SrcLangExt_Fortran) argName=argName.lower();
- argName=argName.stripWhiteSpace();
- //printf("argName=`%s'\n",argName.data());
- if (argName.right(3)=="...") argName=argName.left(argName.length()-3);
- if (aName==argName)
- {
- //printf("adding `%s'\n",aName.data());
- g_paramsFound.insert(aName,(void *)(0x8));
- found=TRUE;
- break;
- }
- }
- if (!found && isParam)
- {
- //printf("member type=%d\n",memberDef->memberType());
- QCString scope=g_memberDef->getScopeString();
- if (!scope.isEmpty()) scope+="::"; else scope="";
- QCString inheritedFrom = "";
- QCString docFile = g_memberDef->docFile();
- int docLine = g_memberDef->docLine();
- MemberDef *inheritedMd = g_memberDef->inheritsDocsFrom();
- if (inheritedMd) // documentation was inherited
- {
- inheritedFrom.sprintf(" inherited from member %s at line "
- "%d in file %s",qPrint(inheritedMd->name()),
- inheritedMd->docLine(),qPrint(inheritedMd->docFile()));
- docFile = g_memberDef->getDefFileName();
- docLine = g_memberDef->getDefLine();
-
- }
- QCString alStr = argListToString(al.pointer());
- warn_doc_error(docFile,docLine,
- "warning: argument '%s' of command @param "
- "is not found in the argument list of %s%s%s%s",
- qPrint(aName), qPrint(scope), qPrint(g_memberDef->name()),
- qPrint(alStr), qPrint(inheritedFrom));
- }
- p=i+l;
- }
-}
-
-/*! 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"))
- {
- LockingPtr<ArgumentList> al=g_memberDef->isDocsForDefinition() ?
- g_memberDef->argumentList() :
- g_memberDef->declArgumentList();
- SrcLangExt lang = g_memberDef->getLanguage();
- if (al!=0)
- {
- ArgumentListIterator ali(*al);
- Argument *a;
- bool found=FALSE;
- for (ali.toFirst();(a=ali.current());++ali)
- {
- QCString argName = g_memberDef->isDefine() ? a->type : a->name;
- if (lang==SrcLangExt_Fortran) argName = argName.lower();
- argName=argName.stripWhiteSpace();
- if (argName.right(3)=="...") argName=argName.left(argName.length()-3);
- if (g_memberDef->getLanguage()==SrcLangExt_Python && argName=="self")
- {
- // allow undocumented self parameter for Python
- }
- else if (!argName.isEmpty() && g_paramsFound.find(argName)==0 && a->docs.isEmpty())
- {
- found = TRUE;
- break;
- }
- }
- if (found)
- {
- bool first=TRUE;
- QCString errMsg=
- "warning: The following parameters of "+
- QCString(g_memberDef->qualifiedName()) +
- QCString(argListToString(al.pointer())) +
- " are not documented:\n";
- for (ali.toFirst();(a=ali.current());++ali)
- {
- QCString argName = g_memberDef->isDefine() ? a->type : a->name;
- if (lang==SrcLangExt_Fortran) argName = argName.lower();
- argName=argName.stripWhiteSpace();
- if (g_memberDef->getLanguage()==SrcLangExt_Python && argName=="self")
- {
- // allow undocumented self parameter for Python
- }
- else if (!argName.isEmpty() && g_paramsFound.find(argName)==0)
- {
- if (!first)
- {
- errMsg+="\n";
- }
- else
- {
- first=FALSE;
- }
- errMsg+=" parameter '"+argName+"'";
- }
- }
- if (g_memberDef->inheritsDocsFrom())
- {
- warn_doc_error(g_memberDef->getDefFileName(),
- g_memberDef->getDefLine(),
- substitute(errMsg,"%","%%"));
- }
- else
- {
- warn_doc_error(g_memberDef->docFile(),
- g_memberDef->docLine(),
- substitute(errMsg,"%","%%"));
- }
- }
- }
- }
-}
-
-/*! Check if a member has documentation for its parameter and or return
- * type, if applicable. If found this will be stored in the member, this
- * is needed as a member can have brief and detailed documentation, while
- * only one of these needs to document the parameters.
- */
-static void detectNoDocumentedParams()
-{
- if (g_memberDef && Config_getBool("WARN_NO_PARAMDOC"))
- {
- LockingPtr<ArgumentList> al = g_memberDef->argumentList();
- LockingPtr<ArgumentList> declAl = g_memberDef->declArgumentList();
- QCString returnType = g_memberDef->typeString();
- bool isPython = g_memberDef->getLanguage()==SrcLangExt_Python;
-
- if (!g_memberDef->hasDocumentedParams() &&
- g_hasParamCommand)
- {
- //printf("%s->setHasDocumentedParams(TRUE);\n",g_memberDef->name().data());
- g_memberDef->setHasDocumentedParams(TRUE);
- }
- else if (!g_memberDef->hasDocumentedParams())
- {
- bool allDoc=TRUE; // no paramater => all parameters are documented
- if ( // member has parameters
- al!=0 && // but the member has a parameter list
- al->count()>0 // with at least one parameter (that is not void)
- )
- {
- ArgumentListIterator ali(*al);
- Argument *a;
-
- // see if all parameters have documentation
- for (ali.toFirst();(a=ali.current()) && allDoc;++ali)
- {
- if (!a->name.isEmpty() && a->type!="void" &&
- !(isPython && a->name=="self")
- )
- {
- allDoc = !a->docs.isEmpty();
- }
- //printf("a->type=%s a->name=%s doc=%s\n",
- // a->type.data(),a->name.data(),a->docs.data());
- }
- if (!allDoc && declAl!=0) // try declaration arguments as well
- {
- allDoc=TRUE;
- ArgumentListIterator ali(*declAl);
- Argument *a;
- for (ali.toFirst();(a=ali.current()) && allDoc;++ali)
- {
- if (!a->name.isEmpty() && a->type!="void" &&
- !(isPython && a->name=="self")
- )
- {
- allDoc = !a->docs.isEmpty();
- }
- //printf("a->name=%s doc=%s\n",a->name.data(),a->docs.data());
- }
- }
- }
- if (allDoc)
- {
- //printf("%s->setHasDocumentedParams(TRUE);\n",g_memberDef->name().data());
- g_memberDef->setHasDocumentedParams(TRUE);
- }
- }
- //printf("Member %s hasReturnCommand=%d\n",g_memberDef->name().data(),g_hasReturnCommand);
- if (!g_memberDef->hasDocumentedReturnType() && // docs not yet found
- g_hasReturnCommand)
- {
- g_memberDef->setHasDocumentedReturnType(TRUE);
- }
- else if ( // see if return needs to documented
- g_memberDef->hasDocumentedReturnType() ||
- returnType.isEmpty() || // empty return type
- returnType.find("void")!=-1 || // void return type
- returnType.find("subroutine")!=-1 || // fortran subroutine
- g_memberDef->isConstructor() || // a constructor
- g_memberDef->isDestructor() // or destructor
- )
- {
- g_memberDef->setHasDocumentedReturnType(TRUE);
- }
-
- }
-}
-
-
-//---------------------------------------------------------------------------
-
-/*! Strips known html and tex extensions from \a text. */
-static QCString stripKnownExtensions(const char *text)
-{
- QCString result=text;
- if (result.right(4)==".tex")
- {
- result=result.left(result.length()-4);
- }
- else if (result.right(Doxygen::htmlFileExtension.length())==
- QCString(Doxygen::htmlFileExtension))
- {
- result=result.left(result.length()-Doxygen::htmlFileExtension.length());
- }
- return result;
-}
-
-
-//---------------------------------------------------------------------------
-
-/*! Returns TRUE iff node n is a child of a preformatted node */
-static bool insidePRE(DocNode *n)
-{
- while (n)
- {
- if (n->isPreformatted()) return TRUE;
- n=n->parent();
- }
- return FALSE;
-}
-
-//---------------------------------------------------------------------------
-
-/*! Returns TRUE iff node n is a child of a html list item node */
-static bool insideLI(DocNode *n)
-{
- while (n)
- {
- if (n->kind()==DocNode::Kind_HtmlListItem) return TRUE;
- n=n->parent();
- }
- return FALSE;
-}
-
-//---------------------------------------------------------------------------
-
-/*! Returns TRUE iff node n is a child of a unordered html list node */
-static bool insideUL(DocNode *n)
-{
- while (n)
- {
- if (n->kind()==DocNode::Kind_HtmlList &&
- ((DocHtmlList *)n)->type()==DocHtmlList::Unordered) return TRUE;
- n=n->parent();
- }
- return FALSE;
-}
-
-//---------------------------------------------------------------------------
-
-/*! Returns TRUE iff node n is a child of a ordered html list node */
-static bool insideOL(DocNode *n)
-{
- while (n)
- {
- if (n->kind()==DocNode::Kind_HtmlList &&
- ((DocHtmlList *)n)->type()==DocHtmlList::Ordered) return TRUE;
- n=n->parent();
- }
- return FALSE;
-}
-
-//---------------------------------------------------------------------------
-
-static bool insideTable(DocNode *n)
-{
- while (n)
- {
- if (n->kind()==DocNode::Kind_HtmlTable) return TRUE;
- n=n->parent();
- }
- return FALSE;
-}
-
-//---------------------------------------------------------------------------
-
-///*! Returns TRUE iff node n is a child of a language node */
-//static bool insideLang(DocNode *n)
-//{
-// while (n)
-// {
-// if (n->kind()==DocNode::Kind_Language) return TRUE;
-// n=n->parent();
-// }
-// return FALSE;
-//}
-
-
-//---------------------------------------------------------------------------
-
-/*! Looks for a documentation block with name commandName in the current
- * context (g_context). The resulting documentation string is
- * put in pDoc, the definition in which the documentation was found is
- * put in pDef.
- * @retval TRUE if name was found.
- * @retval FALSE if name was not found.
- */
-static bool findDocsForMemberOrCompound(const char *commandName,
- QCString *pDoc,
- QCString *pBrief,
- Definition **pDef)
-{
- //printf("findDocsForMemberOrCompound(%s)\n",commandName);
- *pDoc="";
- *pBrief="";
- *pDef=0;
- QCString cmdArg=substitute(commandName,"#","::");
- int l=cmdArg.length();
- if (l==0) return FALSE;
-
- int funcStart=cmdArg.find('(');
- if (funcStart==-1)
- {
- funcStart=l;
- }
- else
- {
- // Check for the case of operator() and the like.
- // beware of scenarios like operator()((foo)bar)
- int secondParen = cmdArg.find('(', funcStart+1);
- int leftParen = cmdArg.find(')', funcStart+1);
- if (leftParen!=-1 && secondParen!=-1)
- {
- if (leftParen<secondParen)
- {
- funcStart=secondParen;
- }
- }
- }
-
- QCString name=removeRedundantWhiteSpace(cmdArg.left(funcStart));
- QCString args=cmdArg.right(l-funcStart);
-
- // try if the link is to a member
- MemberDef *md=0;
- ClassDef *cd=0;
- FileDef *fd=0;
- NamespaceDef *nd=0;
- GroupDef *gd=0;
- PageDef *pd=0;
- bool found = getDefs(
- g_context.find('.')==-1?g_context.data():"", // `find('.') is a hack to detect files
- name,
- args.isEmpty()?0:args.data(),
- 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();
- *pBrief=md->briefDescription();
- *pDef=md;
- return TRUE;
- }
-
-
- int scopeOffset=g_context.length();
- do // for each scope
- {
- QCString fullName=cmdArg;
- if (scopeOffset>0)
- {
- fullName.prepend(g_context.left(scopeOffset)+"::");
- }
- //printf("Trying fullName=`%s'\n",fullName.data());
-
- // try class, namespace, group, page, file reference
- cd = Doxygen::classSDict->find(fullName);
- if (cd) // class
- {
- *pDoc=cd->documentation();
- *pBrief=cd->briefDescription();
- *pDef=cd;
- return TRUE;
- }
- nd = Doxygen::namespaceSDict->find(fullName);
- if (nd) // namespace
- {
- *pDoc=nd->documentation();
- *pBrief=nd->briefDescription();
- *pDef=nd;
- return TRUE;
- }
- gd = Doxygen::groupSDict->find(cmdArg);
- if (gd) // group
- {
- *pDoc=gd->documentation();
- *pBrief=gd->briefDescription();
- *pDef=gd;
- return TRUE;
- }
- pd = Doxygen::pageSDict->find(cmdArg);
- if (pd) // page
- {
- *pDoc=pd->documentation();
- *pBrief=pd->briefDescription();
- *pDef=pd;
- return TRUE;
- }
- bool ambig;
- fd = findFileDef(Doxygen::inputNameDict,cmdArg,ambig);
- if (fd && !ambig) // file
- {
- *pDoc=fd->documentation();
- *pBrief=fd->briefDescription();
- *pDef=fd;
- return TRUE;
- }
-
- if (scopeOffset==0)
- {
- scopeOffset=-1;
- }
- else
- {
- scopeOffset = g_context.findRev("::",scopeOffset-1);
- if (scopeOffset==-1) scopeOffset=0;
- }
- } while (scopeOffset>=0);
-
-
- return FALSE;
-}
-//---------------------------------------------------------------------------
-
-// forward declaration
-static bool defaultHandleToken(DocNode *parent,int tok,
- QList<DocNode> &children,bool
- handleWord=TRUE);
-
-
-static int handleStyleArgument(DocNode *parent,QList<DocNode> &children,
- const QCString &cmdName)
-{
- DBG(("handleStyleArgument(%s)\n",qPrint(cmdName)));
- QCString tokenName = g_token->name;
- int tok=doctokenizerYYlex();
- if (tok!=TK_WHITESPACE)
- {
- warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: expected whitespace after %s command",
- qPrint(cmdName));
- return tok;
- }
- while ((tok=doctokenizerYYlex()) &&
- tok!=TK_WHITESPACE &&
- tok!=TK_NEWPARA &&
- tok!=TK_LISTITEM &&
- tok!=TK_ENDLIST
- )
- {
- static QRegExp specialChar("[.,|()\\[\\]:;\\?]");
- if (tok==TK_WORD && g_token->name.length()==1 &&
- g_token->name.find(specialChar)!=-1)
- {
- // special character that ends the markup command
- return tok;
- }
- if (!defaultHandleToken(parent,tok,children))
- {
- switch (tok)
- {
- case TK_COMMAND:
- warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: Illegal command \\%s as the argument of a \\%s command",
- qPrint(g_token->name),qPrint(cmdName));
- break;
- case TK_SYMBOL:
- warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: Unsupported symbol %s found while handling command %s",
- qPrint(g_token->name),qPrint(cmdName));
- break;
- case TK_HTMLTAG:
- if (insideLI(parent) && Mappers::htmlTagMapper->map(g_token->name) && g_token->endTag)
- { // ignore </li> as the end of a style command
- continue;
- }
- return tok;
- break;
- default:
- warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: Unexpected token %s while handling command %s",
- tokToString(tok),qPrint(cmdName));
- break;
- }
- break;
- }
- }
- DBG(("handleStyleArgument(%s) end tok=%x\n",qPrint(cmdName),tok));
- return (tok==TK_NEWPARA || tok==TK_LISTITEM || tok==TK_ENDLIST
- ) ? tok : RetVal_OK;
-}
-
-/*! Called when a style change starts. For instance a \<b\> command is
- * encountered.
- */
-static void handleStyleEnter(DocNode *parent,QList<DocNode> &children,
- DocStyleChange::Style s,const HtmlAttribList *attribs)
-{
- DBG(("HandleStyleEnter\n"));
- DocStyleChange *sc= new DocStyleChange(parent,g_nodeStack.count(),s,TRUE,attribs);
- children.append(sc);
- g_styleStack.push(sc);
-}
-
-/*! Called when a style change ends. For instance a \</b\> command is
- * encountered.
- */
-static void handleStyleLeave(DocNode *parent,QList<DocNode> &children,
- DocStyleChange::Style s,const char *tagName)
-{
- DBG(("HandleStyleLeave\n"));
- if (g_styleStack.isEmpty() || // no style change
- g_styleStack.top()->style()!=s || // wrong style change
- g_styleStack.top()->position()!=g_nodeStack.count() // wrong position
- )
- {
- if (g_styleStack.isEmpty())
- {
- warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: found </%s> tag without matching <%s>",
- qPrint(tagName),qPrint(tagName));
- }
- else if (g_styleStack.top()->style()!=s)
- {
- warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: found </%s> tag while expecting </%s>",
- qPrint(tagName),qPrint(g_styleStack.top()->styleString()));
- }
- else
- {
- warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: found </%s> at different nesting level (%d) than expected (%d)",
- qPrint(tagName),g_nodeStack.count(),g_styleStack.top()->position());
- }
- }
- else // end the section
- {
- DocStyleChange *sc= new DocStyleChange(parent,g_nodeStack.count(),s,FALSE);
- children.append(sc);
- g_styleStack.pop();
- }
-}
-
-/*! Called at the end of a paragraph to close all open style changes
- * (e.g. a <b> without a </b>). The closed styles are pushed onto a stack
- * and entered again at the start of a new paragraph.
- */
-static void handlePendingStyleCommands(DocNode *parent,QList<DocNode> &children)
-{
- if (!g_styleStack.isEmpty())
- {
- DocStyleChange *sc = g_styleStack.top();
- while (sc && sc->position()>=g_nodeStack.count())
- { // there are unclosed style modifiers in the paragraph
- children.append(new DocStyleChange(parent,g_nodeStack.count(),sc->style(),FALSE));
- g_initialStyleStack.push(sc);
- g_styleStack.pop();
- sc = g_styleStack.top();
- }
- }
-}
-
-static void handleInitialStyleCommands(DocPara *parent,QList<DocNode> &children)
-{
- DocStyleChange *sc;
- while ((sc=g_initialStyleStack.pop()))
- {
- handleStyleEnter(parent,children,sc->style(),&sc->attribs());
- }
-}
-
-static int handleAHref(DocNode *parent,QList<DocNode> &children,const HtmlAttribList &tagHtmlAttribs)
-{
- HtmlAttribListIterator li(tagHtmlAttribs);
- HtmlAttrib *opt;
- int index=0;
- int retval = RetVal_OK;
- for (li.toFirst();(opt=li.current());++li,++index)
- {
- if (opt->name=="name") // <a name=label> tag
- {
- if (!opt->value.isEmpty())
- {
- DocAnchor *anc = new DocAnchor(parent,opt->value,TRUE);
- children.append(anc);
- break; // stop looking for other tag attribs
- }
- else
- {
- warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: found <a> tag with name option but without value!");
- }
- }
- else if (opt->name=="href") // <a href=url>..</a> tag
- {
- // copy attributes
- HtmlAttribList attrList = tagHtmlAttribs;
- // and remove the href attribute
- bool result = attrList.remove(index);
- ASSERT(result);
- DocHRef *href = new DocHRef(parent,attrList,opt->value,g_relPath);
- children.append(href);
- g_insideHtmlLink=TRUE;
- retval = href->parse();
- g_insideHtmlLink=FALSE;
- break;
- }
- else // unsupported option for tag a
- {
- }
- }
- return retval;
-}
-
-const char *DocStyleChange::styleString() const
-{
- switch (m_style)
- {
- case DocStyleChange::Bold: return "b";
- case DocStyleChange::Italic: return "em";
- case DocStyleChange::Code: return "code";
- case DocStyleChange::Center: return "center";
- case DocStyleChange::Small: return "small";
- case DocStyleChange::Subscript: return "subscript";
- case DocStyleChange::Superscript: return "superscript";
- case DocStyleChange::Preformatted: return "pre";
- case DocStyleChange::Div: return "div";
- case DocStyleChange::Span: return "span";
- }
- return "<invalid>";
-}
-
-static void handleUnclosedStyleCommands()
-{
- if (!g_initialStyleStack.isEmpty())
- {
- DocStyleChange *sc = g_initialStyleStack.top();
- g_initialStyleStack.pop();
- handleUnclosedStyleCommands();
- warn_doc_error(g_fileName,doctokenizerYYlineno,
- "warning: end of comment block while expecting "
- "command </%s>",qPrint(sc->styleString()));
- }
-}
-
-static void handleLinkedWord(DocNode *parent,QList<DocNode> &children)
-{
- Definition *compound=0;
- MemberDef *member=0;
- QCString name = linkToText(SrcLangExt_Unknown,g_token->name,TRUE);
- int len = g_token->name.length();
- ClassDef *cd=0;
- bool ambig;
- FileDef *fd = findFileDef(Doxygen::inputNameDict,g_fileName,ambig);
- //printf("handleLinkedWord(%s) g_context=%s\n",g_token->name.data(),g_context.data());
- if (!g_insideHtmlLink &&
- (resolveRef(g_context,g_token->name,g_inSeeBlock,&compound,&member,TRUE,fd,TRUE)
- || (!g_context.isEmpty() && // also try with global scope
- resolveRef("",g_token->name,g_inSeeBlock,&compound,&member,FALSE,0,TRUE))
- )
- )
- {
- //printf("resolveRef %s = %p (linkable?=%d)\n",qPrint(g_token->name),member,member ? member->isLinkable() : FALSE);
- if (member && member->isLinkable()) // member link
- {
- if (member->isObjCMethod())
- {
- bool localLink = g_memberDef ? member->getClassDef()==g_memberDef->getClassDef() : FALSE;
- name = member->objCMethodName(localLink,g_inSeeBlock);
- }
- children.append(new
- DocLinkedWord(parent,name,
- member->getReference(),
- member->getOutputFileBase(),
- member->anchor(),
- member->briefDescriptionAsTooltip()
- )
- );
- }
- else if (compound->isLinkable()) // compound link
- {
- QCString anchor = compound->anchor();
- if (compound->definitionType()==Definition::TypeFile)
- {
- name=g_token->name;
- }
- else if (compound->definitionType()==Definition::TypeGroup)
- {
- name=((GroupDef*)compound)->groupTitle();
- }
- children.append(new
- DocLinkedWord(parent,name,
- compound->getReference(),
- compound->getOutputFileBase(),
- anchor,
- compound->briefDescriptionAsTooltip()
- )
- );
- }
- else if (compound->definitionType()==Definition::TypeFile &&
- ((FileDef*)compound)->generateSourceFile()
- ) // undocumented file that has source code we can link to
- {
- children.append(new
- DocLinkedWord(parent,g_token->name,
- compound->getReference(),
- compound->getSourceFileBase(),
- "",
- compound->briefDescriptionAsTooltip()
- )
- );
- }
- else // not linkable
- {
- children.append(new DocWord(parent,name));
- }
- }
- else if (!g_insideHtmlLink && len>1 && g_token->name.at(len-1)==':')
- {
- // special case, where matching Foo: fails to be an Obj-C reference,
- // but Foo itself might be linkable.
- g_token->name=g_token->name.left(len-1);
- handleLinkedWord(parent,children);
- children.append(new DocWord(parent,":"));
- }
- else if (!g_insideHtmlLink && (cd=getClass(g_token->name+"-p")))
- {
- // special case 2, where the token name is not a class, but could
- // be a Obj-C protocol
- children.append(new
- DocLinkedWord(parent,name,
- cd->getReference(),
- cd->getOutputFileBase(),
- cd->anchor(),
- cd->briefDescriptionAsTooltip()
- ));
- }
- else if (!g_insideHtmlLink && (cd=getClass(g_token->name+"-g")))
- {
- // special case 3, where the token name is not a class, but could
- // be a C# generic
- children.append(new
- DocLinkedWord(parent,name,
- cd->getReference(),
- cd->getOutputFileBase(),
- cd->anchor(),
- cd->briefDescriptionAsTooltip()
- ));
- }
- else // normal non-linkable word
- {
- if (g_token->name.left(1)=="#" || g_token->name.left(2)=="::")
- {
- warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: explicit link request to '%s' could not be resolved",qPrint(name));
- children.append(new DocWord(parent,g_token->name));
- }
- else
- {
- children.append(new DocWord(parent,name));
- }
- }
-}
-
-static void handleParameterType(DocNode *parent,QList<DocNode> &children,const QCString &paramTypes)
-{
- QCString name = g_token->name;
- int p=0,i;
- QCString type;
- while ((i=paramTypes.find('|',p))!=-1)
- {
- g_token->name = paramTypes.mid(p,i-p);
- handleLinkedWord(parent,children);
- p=i+1;
- }
- g_token->name = paramTypes.mid(p);
- handleLinkedWord(parent,children);
- g_token->name = name;
-}
-
-static DocInternalRef *handleInternalRef(DocNode *parent)
-{
- //printf("CMD_INTERNALREF\n");
- int tok=doctokenizerYYlex();
- QCString tokenName = g_token->name;
- if (tok!=TK_WHITESPACE)
- {
- warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: expected whitespace after %s command",
- qPrint(tokenName));
- return 0;
- }
- doctokenizerYYsetStateInternalRef();
- tok=doctokenizerYYlex(); // get the reference id
- if (tok!=TK_WORD && tok!=TK_LNKWORD)
- {
- warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: unexpected token %s as the argument of %s",
- tokToString(tok),qPrint(tokenName));
- return 0;
- }
- return new DocInternalRef(parent,g_token->name);
-}
-
-static DocAnchor *handleAnchor(DocNode *parent)
-{
- int tok=doctokenizerYYlex();
- if (tok!=TK_WHITESPACE)
- {
- warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: expected whitespace after %s command",
- qPrint(g_token->name));
- return 0;
- }
- doctokenizerYYsetStateAnchor();
- tok=doctokenizerYYlex();
- if (tok==0)
- {
- warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: unexpected end of comment block while parsing the "
- "argument of command %s",qPrint(g_token->name));
- return 0;
- }
- else if (tok!=TK_WORD && tok!=TK_LNKWORD)
- {
- warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: unexpected token %s as the argument of %s",
- tokToString(tok),qPrint(g_token->name));
- return 0;
- }
- doctokenizerYYsetStatePara();
- return new DocAnchor(parent,g_token->name,FALSE);
-}
-
-
-/* Helper function that deals with the most common tokens allowed in
- * title like sections.
- * @param parent Parent node, owner of the children list passed as
- * the third argument.
- * @param tok The token to process.
- * @param children The list of child nodes to which the node representing
- * the token can be added.
- * @param handleWord Indicates if word token should be processed
- * @retval TRUE The token was handled.
- * @retval FALSE The token was not handled.
- */
-static bool defaultHandleToken(DocNode *parent,int tok, QList<DocNode> &children,bool
- handleWord)
-{
- DBG(("token %s at %d",tokToString(tok),doctokenizerYYlineno));
- if (tok==TK_WORD || tok==TK_LNKWORD || tok==TK_SYMBOL || tok==TK_URL ||
- tok==TK_COMMAND || tok==TK_HTMLTAG
- )
- {
- DBG((" name=%s",qPrint(g_token->name)));
- }
- DBG(("\n"));
-reparsetoken:
- QCString tokenName = g_token->name;
- switch (tok)
- {
- case TK_COMMAND:
- switch (Mappers::cmdMapper->map(tokenName))
- {
- case CMD_BSLASH:
- children.append(new DocSymbol(parent,DocSymbol::BSlash));
- break;
- case CMD_AT:
- children.append(new DocSymbol(parent,DocSymbol::At));
- break;
- case CMD_LESS:
- children.append(new DocSymbol(parent,DocSymbol::Less));
- break;
- case CMD_GREATER:
- children.append(new DocSymbol(parent,DocSymbol::Greater));
- break;
- case CMD_AMP:
- children.append(new DocSymbol(parent,DocSymbol::Amp));
- break;
- case CMD_DOLLAR:
- children.append(new DocSymbol(parent,DocSymbol::Dollar));
- break;
- case CMD_HASH:
- children.append(new DocSymbol(parent,DocSymbol::Hash));
- break;
- case CMD_DCOLON:
- children.append(new DocSymbol(parent,DocSymbol::DoubleColon));
- break;
- case CMD_PERCENT:
- children.append(new DocSymbol(parent,DocSymbol::Percent));
- break;
- case CMD_QUOTE:
- children.append(new DocSymbol(parent,DocSymbol::Quot));
- break;
- case CMD_EMPHASIS:
- {
- children.append(new DocStyleChange(parent,g_nodeStack.count(),DocStyleChange::Italic,TRUE));
- tok=handleStyleArgument(parent,children,tokenName);
- children.append(new DocStyleChange(parent,g_nodeStack.count(),DocStyleChange::Italic,FALSE));
- if (tok!=TK_WORD) children.append(new DocWhiteSpace(parent," "));
- if (tok==TK_NEWPARA) goto handlepara;
- else if (tok==TK_WORD || tok==TK_HTMLTAG)
- {
- DBG(("CMD_EMPHASIS: reparsing command %s\n",qPrint(g_token->name)));
- goto reparsetoken;
- }
- }
- break;
- case CMD_BOLD:
- {
- children.append(new DocStyleChange(parent,g_nodeStack.count(),DocStyleChange::Bold,TRUE));
- tok=handleStyleArgument(parent,children,tokenName);
- children.append(new DocStyleChange(parent,g_nodeStack.count(),DocStyleChange::Bold,FALSE));
- if (tok!=TK_WORD) children.append(new DocWhiteSpace(parent," "));
- if (tok==TK_NEWPARA) goto handlepara;
- else if (tok==TK_WORD || tok==TK_HTMLTAG)
- {
- DBG(("CMD_BOLD: reparsing command %s\n",qPrint(g_token->name)));
- goto reparsetoken;
- }
- }
- break;
- case CMD_CODE:
- {
- children.append(new DocStyleChange(parent,g_nodeStack.count(),DocStyleChange::Code,TRUE));
- tok=handleStyleArgument(parent,children,tokenName);
- children.append(new DocStyleChange(parent,g_nodeStack.count(),DocStyleChange::Code,FALSE));
- if (tok!=TK_WORD) children.append(new DocWhiteSpace(parent," "));
- if (tok==TK_NEWPARA) goto handlepara;
- else if (tok==TK_WORD || tok==TK_HTMLTAG)
- {
- DBG(("CMD_CODE: reparsing command %s\n",qPrint(g_token->name)));
- goto reparsetoken;
- }
- }
- break;
- case CMD_HTMLONLY:
- {
- doctokenizerYYsetStateHtmlOnly();
- tok = doctokenizerYYlex();
- children.append(new DocVerbatim(parent,g_context,g_token->verb,DocVerbatim::HtmlOnly,g_isExample,g_exampleName));
- if (tok==0) warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: htmlonly section ended without end marker");
- doctokenizerYYsetStatePara();
- }
- break;
- case CMD_MANONLY:
- {
- doctokenizerYYsetStateManOnly();
- tok = doctokenizerYYlex();
- children.append(new DocVerbatim(parent,g_context,g_token->verb,DocVerbatim::ManOnly,g_isExample,g_exampleName));
- if (tok==0) warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: manonly section ended without end marker");
- doctokenizerYYsetStatePara();
- }
- break;
- case CMD_LATEXONLY:
- {
- doctokenizerYYsetStateLatexOnly();
- tok = doctokenizerYYlex();
- children.append(new DocVerbatim(parent,g_context,g_token->verb,DocVerbatim::LatexOnly,g_isExample,g_exampleName));
- if (tok==0) warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: latexonly section ended without end marker",doctokenizerYYlineno);
- doctokenizerYYsetStatePara();
- }
- break;
- case CMD_XMLONLY:
- {
- doctokenizerYYsetStateXmlOnly();
- tok = doctokenizerYYlex();
- children.append(new DocVerbatim(parent,g_context,g_token->verb,DocVerbatim::XmlOnly,g_isExample,g_exampleName));
- if (tok==0) warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: xmlonly section ended without end marker",doctokenizerYYlineno);
- doctokenizerYYsetStatePara();
- }
- break;
- case CMD_FORMULA:
- {
- DocFormula *form=new DocFormula(parent,g_token->id);
- children.append(form);
- }
- break;
- case CMD_ANCHOR:
- {
- DocAnchor *anchor = handleAnchor(parent);
- if (anchor)
- {
- children.append(anchor);
- }
- }
- break;
- case CMD_INTERNALREF:
- {
- DocInternalRef *ref = handleInternalRef(parent);
- if (ref)
- {
- children.append(ref);
- ref->parse();
- }
- doctokenizerYYsetStatePara();
- }
- break;
- default:
- return FALSE;
- }
- break;
- case TK_HTMLTAG:
- {
- switch (Mappers::htmlTagMapper->map(tokenName))
- {
- case HTML_DIV:
- warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: found <div> tag in heading\n");
- break;
- case HTML_PRE:
- warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: found <pre> tag in heading\n");
- break;
- case HTML_BOLD:
- if (!g_token->endTag)
- {
- handleStyleEnter(parent,children,DocStyleChange::Bold,&g_token->attribs);
- }
- else
- {
- handleStyleLeave(parent,children,DocStyleChange::Bold,tokenName);
- }
- break;
- case HTML_CODE:
- case XML_C:
- if (!g_token->endTag)
- {
- handleStyleEnter(parent,children,DocStyleChange::Code,&g_token->attribs);
- }
- else
- {
- handleStyleLeave(parent,children,DocStyleChange::Code,tokenName);
- }
- break;
- case HTML_EMPHASIS:
- if (!g_token->endTag)
- {
- handleStyleEnter(parent,children,DocStyleChange::Italic,&g_token->attribs);
- }
- else
- {
- handleStyleLeave(parent,children,DocStyleChange::Italic,tokenName);
- }
- break;
- case HTML_SUB:
- if (!g_token->endTag)
- {
- handleStyleEnter(parent,children,DocStyleChange::Subscript,&g_token->attribs);
- }
- else
- {
- handleStyleLeave(parent,children,DocStyleChange::Subscript,tokenName);
- }
- break;
- case HTML_SUP:
- if (!g_token->endTag)
- {
- handleStyleEnter(parent,children,DocStyleChange::Superscript,&g_token->attribs);
- }
- else
- {
- handleStyleLeave(parent,children,DocStyleChange::Superscript,tokenName);
- }
- break;
- case HTML_CENTER:
- if (!g_token->endTag)
- {
- handleStyleEnter(parent,children,DocStyleChange::Center,&g_token->attribs);
- }
- else
- {
- handleStyleLeave(parent,children,DocStyleChange::Center,tokenName);
- }
- break;
- case HTML_SMALL:
- if (!g_token->endTag)
- {
- handleStyleEnter(parent,children,DocStyleChange::Small,&g_token->attribs);
- }
- else
- {
- handleStyleLeave(parent,children,DocStyleChange::Small,tokenName);
- }
- break;
- default:
- return FALSE;
- break;
- }
- }
- break;
- case TK_SYMBOL:
- {
- char letter='\0';
- DocSymbol::SymType s = DocSymbol::decodeSymbol(tokenName,&letter);
- if (s!=DocSymbol::Unknown)
- {
- children.append(new DocSymbol(parent,s,letter));
- }
- else
- {
- return FALSE;
- }
- }
- break;
- case TK_WHITESPACE:
- case TK_NEWPARA:
-handlepara:
- if (insidePRE(parent) || !children.isEmpty())
- {
- children.append(new DocWhiteSpace(parent,g_token->chars));
- }
- break;
- case TK_LNKWORD:
- if (handleWord)
- {
- handleLinkedWord(parent,children);
- }
- else
- return FALSE;
- break;
- case TK_WORD:
- if (handleWord)
- {
- children.append(new DocWord(parent,g_token->name));
- }
- else
- return FALSE;
- break;
- case TK_URL:
- if (g_insideHtmlLink)
- {
- children.append(new DocWord(parent,g_token->name));
- }
- else
- {
- children.append(new DocURL(parent,g_token->name,g_token->isEMailAddr));
- }
- break;
- default:
- return FALSE;
- }
- return TRUE;
-}
-
-
-//---------------------------------------------------------------------------
-
-DocSymbol::SymType DocSymbol::decodeSymbol(const QCString &symName,char *letter)
-{
- int l=symName.length();
- DBG(("decodeSymbol(%s) l=%d\n",qPrint(symName),l));
- if (symName=="&copy;") return DocSymbol::Copy;
- else if (symName=="&trade;") return DocSymbol::Tm;
- else if (symName=="&tm;") return DocSymbol::Tm; // alias for &trade;
- else if (symName=="&reg;") return DocSymbol::Reg;
- else if (symName=="&lt;") return DocSymbol::Less;
- else if (symName=="&gt;") return DocSymbol::Greater;
- else if (symName=="&amp;") return DocSymbol::Amp;
- else if (symName=="&apos;") return DocSymbol::Apos;
- else if (symName=="&quot;") return DocSymbol::Quot;
- else if (symName=="&lsquo;") return DocSymbol::Lsquo;
- else if (symName=="&rsquo;") return DocSymbol::Rsquo;
- else if (symName=="&ldquo;") return DocSymbol::Ldquo;
- else if (symName=="&rdquo;") return DocSymbol::Rdquo;
- else if (symName=="&ndash;") return DocSymbol::Ndash;
- else if (symName=="&mdash;") return DocSymbol::Mdash;
- else if (symName=="&szlig;") return DocSymbol::Szlig;
- else if (symName=="&nbsp;") return DocSymbol::Nbsp;
- else if (symName=="&AElig;") return DocSymbol::AElig;
- else if (symName=="&aelig;") return DocSymbol::Aelig;
- else if (l==6 && symName.right(4)=="uml;")
- {
- *letter=symName.at(1);
- return DocSymbol::Uml;
- }
- else if (l==8 && symName.right(6)=="acute;")
- {
- *letter=symName.at(1);
- return DocSymbol::Acute;
- }
- else if (l==8 && symName.right(6)=="grave;")
- {
- *letter=symName.at(1);
- return DocSymbol::Grave;
- }
- else if (l==7 && symName.right(5)=="circ;")
- {
- *letter=symName.at(1);
- return DocSymbol::Circ;
- }
- else if (l==8 && symName.right(6)=="tilde;")
- {
- *letter=symName.at(1);
- return DocSymbol::Tilde;
- }
- else if (l==8 && symName.right(6)=="cedil;")
- {
- *letter=symName.at(1);
- return DocSymbol::Cedil;
- }
- else if (l==7 && symName.right(5)=="ring;")
- {
- *letter=symName.at(1);
- return DocSymbol::Ring;
- }
- else if (l==8 && symName.right(6)=="slash;")
- {
- *letter=symName.at(1);
- return DocSymbol::Slash;
- }
- return DocSymbol::Unknown;
-}
-
-//---------------------------------------------------------------------------
-
-static int internalValidatingParseDoc(DocNode *parent,QList<DocNode> &children,
- const QCString &doc)
-{
- int retval = RetVal_OK;
-
- if (doc.isEmpty()) return retval;
-
- doctokenizerYYinit(doc,g_fileName);
-
- // first parse any number of paragraphs
- bool isFirst=TRUE;
- DocPara *lastPar=0;
- if (!children.isEmpty() && children.last()->kind()==DocNode::Kind_Para)
- { // last child item was a paragraph
- lastPar = (DocPara*)children.last();
- isFirst=FALSE;
- }
- do
- {
- DocPara *par = new DocPara(parent);
- if (isFirst) { par->markFirst(); isFirst=FALSE; }
- retval=par->parse();
- if (!par->isEmpty())
- {
- children.append(par);
- if (lastPar) lastPar->markLast(FALSE);
- lastPar=par;
- }
- else
- {
- delete par;
- }
- } while (retval==TK_NEWPARA);
- if (lastPar) lastPar->markLast();
-
- //printf("internalValidateParsingDoc: %p: isFirst=%d isLast=%d\n",
- // lastPar,lastPar?lastPar->isFirst():-1,lastPar?lastPar->isLast():-1);
-
- return retval;
-}
-
-//---------------------------------------------------------------------------
-
-static void readTextFileByName(const QCString &file,QCString &text)
-{
- QStrList &examplePathList = Config_getList("EXAMPLE_PATH");
- char *s=examplePathList.first();
- while (s)
- {
- QCString absFileName = QCString(s)+portable_pathSeparator()+file;
- QFileInfo fi(absFileName);
- if (fi.exists())
- {
- text = fileToString(absFileName,Config_getBool("FILTER_SOURCE_FILES"));
- return;
- }
- s=examplePathList.next();
- }
-
- // as a fallback we also look in the exampleNameDict
- bool ambig;
- FileDef *fd;
- if ((fd=findFileDef(Doxygen::exampleNameDict,file,ambig)))
- {
- text = fileToString(fd->absFilePath(),Config_getBool("FILTER_SOURCE_FILES"));
- }
- else if (ambig)
- {
- warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: included file name %s is ambiguous"
- "Possible candidates:\n%s",qPrint(file),
- qPrint(showFileDefMatches(Doxygen::exampleNameDict,file))
- );
- }
- else
- {
- warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: included file %s is not found. "
- "Check your EXAMPLE_PATH",qPrint(file));
- }
-}
-
-//---------------------------------------------------------------------------
-
-DocWord::DocWord(DocNode *parent,const QCString &word) :
- m_word(word)
-{
- m_parent = parent;
- //printf("new word %s url=%s\n",word.data(),g_searchUrl.data());
- if (Doxygen::searchIndex && !g_searchUrl.isEmpty())
- {
- Doxygen::searchIndex->addWord(word,FALSE);
- }
-}
-
-//---------------------------------------------------------------------------
-
-DocLinkedWord::DocLinkedWord(DocNode *parent,const QCString &word,
- const QCString &ref,const QCString &file,
- const QCString &anchor,const QCString &tooltip) :
- m_word(word), m_ref(ref),
- m_file(file), m_relPath(g_relPath), m_anchor(anchor),
- m_tooltip(tooltip)
-{
- m_parent = parent;
- //printf("DocLinkedWord: new word %s url=%s tooltip='%s'\n",
- // word.data(),g_searchUrl.data(),tooltip.data());
- if (Doxygen::searchIndex && !g_searchUrl.isEmpty())
- {
- Doxygen::searchIndex->addWord(word,FALSE);
- }
-}
-
-//---------------------------------------------------------------------------
-
-DocAnchor::DocAnchor(DocNode *parent,const QCString &id,bool newAnchor)
-{
- m_parent = parent;
- if (id.isEmpty())
- {
- warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: Empty anchor label");
- }
- if (newAnchor) // found <a name="label">
- {
- m_anchor = id;
- }
- else if (id.left(CiteConsts::anchorPrefix.length()) == CiteConsts::anchorPrefix)
- {
- CiteInfo *cite = Doxygen::citeDict->find(id.mid(CiteConsts::anchorPrefix.length()));
- if (cite)
- {
- m_file = convertNameToFile(CiteConsts::fileName,FALSE,TRUE);
- m_anchor = id;
- }
- else
- {
- warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: Invalid cite anchor id `%s'",qPrint(id));
- m_anchor = "invalid";
- m_file = "invalid";
- }
- }
- else // found \anchor label
- {
- SectionInfo *sec = Doxygen::sectionDict[id];
- if (sec)
- {
- //printf("Found anchor %s\n",id.data());
- m_file = sec->fileName;
- m_anchor = sec->label;
- if (g_sectionDict && g_sectionDict->find(id)==0)
- {
- //printf("Inserting in dictionary!\n");
- g_sectionDict->append(id,sec);
- }
- }
- else
- {
- warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: Invalid anchor id `%s'",qPrint(id));
- m_anchor = "invalid";
- m_file = "invalid";
- }
- }
-}
-
-//---------------------------------------------------------------------------
-
-DocVerbatim::DocVerbatim(DocNode *parent,const QCString &context,
- const QCString &text, Type t,bool isExample,
- const QCString &exampleFile,const QCString &lang)
- : m_context(context), m_text(text), m_type(t),
- m_isExample(isExample), m_exampleFile(exampleFile),
- m_relPath(g_relPath), m_lang(lang)
-{
- m_parent = parent;
-}
-
-
-//---------------------------------------------------------------------------
-
-void DocInclude::parse()
-{
- DBG(("DocInclude::parse(file=%s,text=%s)\n",qPrint(m_file),qPrint(m_text)));
- switch(m_type)
- {
- case IncWithLines:
- // fall through
- case Include:
- // fall through
- case DontInclude:
- readTextFileByName(m_file,m_text);
- g_includeFileText = m_text;
- g_includeFileOffset = 0;
- g_includeFileLength = m_text.length();
- //printf("g_includeFile=<<%s>>\n",g_includeFileText.data());
- break;
- case VerbInclude:
- // fall through
- case HtmlInclude:
- readTextFileByName(m_file,m_text);
- break;
- case Snippet:
- readTextFileByName(m_file,m_text);
- // check here for the existance of the blockId inside the file, so we
- // only generate the warning once.
- int count;
- if (!m_blockId.isEmpty() && (count=m_text.contains(m_blockId.data()))!=2)
- {
- warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: block marked with %s for \\snippet should appear twice in file %s, found it %d times\n",
- m_blockId.data(),m_file.data(),count);
- }
- break;
- }
-}
-
-//---------------------------------------------------------------------------
-
-void DocIncOperator::parse()
-{
- const char *p = g_includeFileText;
- uint l = g_includeFileLength;
- uint o = g_includeFileOffset;
- DBG(("DocIncOperator::parse() text=%s off=%d len=%d\n",qPrint(p),o,l));
- uint so = o,bo;
- bool nonEmpty = FALSE;
- switch(type())
- {
- case Line:
- while (o<l)
- {
- char c = p[o];
- if (c=='\n')
- {
- if (nonEmpty) break; // we have a pattern to match
- so=o+1; // no pattern, skip empty line
- }
- else if (!isspace((uchar)c)) // no white space char
- {
- nonEmpty=TRUE;
- }
- o++;
- }
- if (g_includeFileText.mid(so,o-so).find(m_pattern)!=-1)
- {
- m_text = g_includeFileText.mid(so,o-so);
- DBG(("DocIncOperator::parse() Line: %s\n",qPrint(m_text)));
- }
- g_includeFileOffset = QMIN(l,o+1); // set pointer to start of new line
- break;
- case SkipLine:
- while (o<l)
- {
- so=o;
- while (o<l)
- {
- char c = p[o];
- if (c=='\n')
- {
- if (nonEmpty) break; // we have a pattern to match
- so=o+1; // no pattern, skip empty line
- }
- else if (!isspace((uchar)c)) // no white space char
- {
- nonEmpty=TRUE;
- }
- o++;
- }
- if (g_includeFileText.mid(so,o-so).find(m_pattern)!=-1)
- {
- m_text = g_includeFileText.mid(so,o-so);
- DBG(("DocIncOperator::parse() SkipLine: %s\n",qPrint(m_text)));
- break;
- }
- o++; // skip new line
- }
- g_includeFileOffset = QMIN(l,o+1); // set pointer to start of new line
- break;
- case Skip:
- while (o<l)
- {
- so=o;
- while (o<l)
- {
- char c = p[o];
- if (c=='\n')
- {
- if (nonEmpty) break; // we have a pattern to match
- so=o+1; // no pattern, skip empty line
- }
- else if (!isspace((uchar)c)) // no white space char
- {
- nonEmpty=TRUE;
- }
- o++;
- }
- if (g_includeFileText.mid(so,o-so).find(m_pattern)!=-1)
- {
- break;
- }
- o++; // skip new line
- }
- g_includeFileOffset = so; // set pointer to start of new line
- break;
- case Until:
- bo=o;
- while (o<l)
- {
- so=o;
- while (o<l)
- {
- char c = p[o];
- if (c=='\n')
- {
- if (nonEmpty) break; // we have a pattern to match
- so=o+1; // no pattern, skip empty line
- }
- else if (!isspace((uchar)c)) // no white space char
- {
- nonEmpty=TRUE;
- }
- o++;
- }
- if (g_includeFileText.mid(so,o-so).find(m_pattern)!=-1)
- {
- m_text = g_includeFileText.mid(bo,o-bo);
- DBG(("DocIncOperator::parse() Until: %s\n",qPrint(m_text)));
- break;
- }
- o++; // skip new line
- }
- g_includeFileOffset = QMIN(l,o+1); // set pointer to start of new line
- break;
- }
-}
-
-//---------------------------------------------------------------------------
-
-void DocCopy::parse(QList<DocNode> &children)
-{
- QCString doc,brief;
- Definition *def;
- if (findDocsForMemberOrCompound(m_link,&doc,&brief,&def))
- {
- if (g_copyStack.findRef(def)==-1) // definition not parsed earlier
- {
- bool hasParamCommand = g_hasParamCommand;
- bool hasReturnCommand = g_hasReturnCommand;
- QDict<void> paramsFound = g_paramsFound;
- //printf("..1 hasParamCommand=%d hasReturnCommand=%d paramsFound=%d\n",
- // g_hasParamCommand,g_hasReturnCommand,g_paramsFound.count());
-
- docParserPushContext(FALSE);
- g_scope = def;
- if (def->definitionType()==Definition::TypeMember && def->getOuterScope())
- {
- if (def->getOuterScope()!=Doxygen::globalScope)
- {
- g_context=def->getOuterScope()->name();
- }
- }
- else if (def!=Doxygen::globalScope)
- {
- g_context=def->name();
- }
- g_styleStack.clear();
- g_nodeStack.clear();
- g_paramsFound.clear();
- g_copyStack.append(def);
- // make sure the descriptions end with a newline, so the parser will correctly
- // handle them in all cases.
- //printf("doc='%s'\n",doc.data());
- //printf("brief='%s'\n",brief.data());
- if (m_copyBrief)
- {
- brief+='\n';
- internalValidatingParseDoc(m_parent,children,brief);
-
- //printf("..2 hasParamCommand=%d hasReturnCommand=%d paramsFound=%d\n",
- // g_hasParamCommand,g_hasReturnCommand,g_paramsFound.count());
- hasParamCommand = hasParamCommand || g_hasParamCommand;
- hasReturnCommand = hasReturnCommand || g_hasReturnCommand;
- QDictIterator<void> it(g_paramsFound);
- void *item;
- for (;(item=it.current());++it)
- {
- paramsFound.insert(it.currentKey(),it.current());
- }
- }
- if (m_copyDetails)
- {
- doc+='\n';
- internalValidatingParseDoc(m_parent,children,doc);
-
- //printf("..3 hasParamCommand=%d hasReturnCommand=%d paramsFound=%d\n",
- // g_hasParamCommand,g_hasReturnCommand,g_paramsFound.count());
- hasParamCommand = hasParamCommand || g_hasParamCommand;
- hasReturnCommand = hasReturnCommand || g_hasReturnCommand;
- QDictIterator<void> it(g_paramsFound);
- void *item;
- for (;(item=it.current());++it)
- {
- paramsFound.insert(it.currentKey(),it.current());
- }
- }
- g_copyStack.remove(def);
- ASSERT(g_styleStack.isEmpty());
- ASSERT(g_nodeStack.isEmpty());
- docParserPopContext(TRUE);
-
- g_hasParamCommand = hasParamCommand;
- g_hasReturnCommand = hasReturnCommand;
- g_paramsFound = paramsFound;
-
- //printf("..4 hasParamCommand=%d hasReturnCommand=%d paramsFound=%d\n",
- // g_hasParamCommand,g_hasReturnCommand,g_paramsFound.count());
- }
- else // oops, recursion
- {
- warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: recursive call chain of \\copydoc commands detected at %d\n",
- doctokenizerYYlineno);
- }
- }
- else
- {
- warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: target %s of \\copydoc command not found",
- qPrint(m_link));
- }
-}
-
-//---------------------------------------------------------------------------
-
-DocXRefItem::DocXRefItem(DocNode *parent,int id,const char *key) :
- m_id(id), m_key(key), m_relPath(g_relPath)
-{
- m_parent = parent;
-}
-
-bool DocXRefItem::parse()
-{
- QCString listName;
- RefList *refList = Doxygen::xrefLists->find(m_key);
- if (refList &&
- (
- // either not a built-in list or the list is enabled
- (m_key!="todo" || Config_getBool("GENERATE_TODOLIST")) &&
- (m_key!="test" || Config_getBool("GENERATE_TESTLIST")) &&
- (m_key!="bug" || Config_getBool("GENERATE_BUGLIST")) &&
- (m_key!="deprecated" || Config_getBool("GENERATE_DEPRECATEDLIST"))
- )
- )
- {
- RefItem *item = refList->getRefItem(m_id);
- ASSERT(item!=0);
- if (item)
- {
- if (g_memberDef && g_memberDef->name().at(0)=='@')
- {
- m_file = "@"; // can't cross reference anonymous enum
- m_anchor = "@";
- }
- else
- {
- m_file = convertNameToFile(refList->listName(),FALSE,TRUE);
- m_anchor = item->listAnchor;
- }
- m_title = refList->sectionTitle();
- //printf("DocXRefItem: file=%s anchor=%s title=%s\n",
- // m_file.data(),m_anchor.data(),m_title.data());
-
- if (!item->text.isEmpty())
- {
- docParserPushContext();
- internalValidatingParseDoc(this,m_children,item->text);
- docParserPopContext();
- }
- }
- return TRUE;
- }
- return FALSE;
-}
-
-//---------------------------------------------------------------------------
-
-DocFormula::DocFormula(DocNode *parent,int id) :
- m_relPath(g_relPath)
-{
- m_parent = parent;
- QCString formCmd;
- formCmd.sprintf("\\form#%d",id);
- Formula *formula=Doxygen::formulaNameDict[formCmd];
- if (formula)
- {
- m_id = formula->getId();
- m_name.sprintf("form_%d",m_id);
- m_text = formula->getFormulaText();
- }
-}
-
-//---------------------------------------------------------------------------
-
-//int DocLanguage::parse()
-//{
-// int retval;
-// DBG(("DocLanguage::parse() start\n"));
-// g_nodeStack.push(this);
-//
-// // parse one or more paragraphs
-// bool isFirst=TRUE;
-// DocPara *par=0;
-// do
-// {
-// par = new DocPara(this);
-// if (isFirst) { par->markFirst(); isFirst=FALSE; }
-// m_children.append(par);
-// retval=par->parse();
-// }
-// while (retval==TK_NEWPARA);
-// if (par) par->markLast();
-//
-// DBG(("DocLanguage::parse() end\n"));
-// DocNode *n = g_nodeStack.pop();
-// ASSERT(n==this);
-// return retval;
-//}
-
-//---------------------------------------------------------------------------
-
-void DocSecRefItem::parse()
-{
- DBG(("DocSecRefItem::parse() start\n"));
- g_nodeStack.push(this);
-
- doctokenizerYYsetStateTitle();
- int tok;
- while ((tok=doctokenizerYYlex()))
- {
- if (!defaultHandleToken(this,tok,m_children))
- {
- switch (tok)
- {
- case TK_COMMAND:
- warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: Illegal command %s as part of a \\refitem",
- qPrint(g_token->name));
- break;
- case TK_SYMBOL:
- warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: Unsupported symbol %s found",
- qPrint(g_token->name));
- break;
- default:
- warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: Unexpected token %s",
- tokToString(tok));
- break;
- }
- }
- }
- doctokenizerYYsetStatePara();
- handlePendingStyleCommands(this,m_children);
-
- SectionInfo *sec=0;
- if (!m_target.isEmpty())
- {
- sec=Doxygen::sectionDict[m_target];
- if (sec)
- {
- m_file = sec->fileName;
- m_anchor = sec->label;
- if (g_sectionDict && g_sectionDict->find(m_target)==0)
- {
- g_sectionDict->append(m_target,sec);
- }
- }
- else
- {
- warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: reference to unknown section %s",
- qPrint(m_target));
- }
- }
- else
- {
- warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: reference to empty target");
- }
-
- DBG(("DocSecRefItem::parse() end\n"));
- DocNode *n = g_nodeStack.pop();
- ASSERT(n==this);
-}
-
-//---------------------------------------------------------------------------
-
-void DocSecRefList::parse()
-{
- DBG(("DocSecRefList::parse() start\n"));
- g_nodeStack.push(this);
-
- int tok=doctokenizerYYlex();
- // skip white space
- while (tok==TK_WHITESPACE || tok==TK_NEWPARA) tok=doctokenizerYYlex();
- // handle items
- while (tok)
- {
- if (tok==TK_COMMAND)
- {
- switch (Mappers::cmdMapper->map(g_token->name))
- {
- case CMD_SECREFITEM:
- {
- int tok=doctokenizerYYlex();
- if (tok!=TK_WHITESPACE)
- {
- warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: expected whitespace after \\refitem command");
- break;
- }
- tok=doctokenizerYYlex();
- if (tok!=TK_WORD && tok!=TK_LNKWORD)
- {
- warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: unexpected token %s as the argument of \\refitem",
- tokToString(tok));
- break;
- }
-
- DocSecRefItem *item = new DocSecRefItem(this,g_token->name);
- m_children.append(item);
- item->parse();
- }
- break;
- case CMD_ENDSECREFLIST:
- goto endsecreflist;
- default:
- warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: Illegal command %s as part of a \\secreflist",
- qPrint(g_token->name));
- goto endsecreflist;
- }
- }
- else if (tok==TK_WHITESPACE)
- {
- // ignore whitespace
- }
- else
- {
- warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: Unexpected token %s inside section reference list",
- tokToString(tok));
- goto endsecreflist;
- }
- tok=doctokenizerYYlex();
- }
-
-endsecreflist:
- DBG(("DocSecRefList::parse() end\n"));
- DocNode *n = g_nodeStack.pop();
- ASSERT(n==this);
-}
-
-//---------------------------------------------------------------------------
-
-DocInternalRef::DocInternalRef(DocNode *parent,const QCString &ref)
- : m_relPath(g_relPath)
-{
- m_parent = parent;
- int i=ref.find('#');
- if (i!=-1)
- {
- m_anchor = ref.right(ref.length()-i-1);
- m_file = ref.left(i);
- }
- else
- {
- m_file = ref;
- }
-}
-
-void DocInternalRef::parse()
-{
- g_nodeStack.push(this);
- DBG(("DocInternalRef::parse() start\n"));
-
- int tok;
- while ((tok=doctokenizerYYlex()))
- {
- if (!defaultHandleToken(this,tok,m_children))
- {
- switch (tok)
- {
- case TK_COMMAND:
- warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: Illegal command %s as part of a \\ref",
- qPrint(g_token->name));
- break;
- case TK_SYMBOL:
- warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: Unsupported symbol %s found",
- qPrint(g_token->name));
- break;
- default:
- warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: Unexpected token %s",
- tokToString(tok));
- break;
- }
- }
- }
-
- handlePendingStyleCommands(this,m_children);
- DBG(("DocInternalRef::parse() end\n"));
- DocNode *n=g_nodeStack.pop();
- ASSERT(n==this);
-}
-
-//---------------------------------------------------------------------------
-
-DocRef::DocRef(DocNode *parent,const QCString &target,const QCString &context) :
- m_refToSection(FALSE), m_refToAnchor(FALSE), m_isSubPage(FALSE)
-{
- m_parent = parent;
- Definition *compound = 0;
- QCString anchor;
- //printf("DocRef::DocRef(target=%s,context=%s)\n",target.data(),context.data());
- ASSERT(!target.isEmpty());
- m_relPath = g_relPath;
- SectionInfo *sec = Doxygen::sectionDict[target];
- if (sec) // ref to section or anchor
- {
- PageDef *pd = 0;
- if (sec->type==SectionInfo::Page)
- {
- pd = Doxygen::pageSDict->find(target);
- }
- m_text = sec->title;
- if (m_text.isEmpty()) m_text = sec->label;
-
- m_ref = sec->ref;
- m_file = stripKnownExtensions(sec->fileName);
- m_refToAnchor = sec->type==SectionInfo::Anchor;
- m_refToSection = sec->type!=SectionInfo::Anchor;
- m_isSubPage = pd && pd->hasParentPage();
- if (sec->type!=SectionInfo::Page || m_isSubPage) m_anchor = sec->label;
- //printf("m_text=%s,m_ref=%s,m_file=%s,m_refToAnchor=%d type=%d\n",
- // m_text.data(),m_ref.data(),m_file.data(),m_refToAnchor,sec->type);
- return;
- }
- else if (resolveLink(context,target,TRUE,&compound,anchor))
- {
- bool isFile = compound ?
- (compound->definitionType()==Definition::TypeFile ||
- compound->definitionType()==Definition::TypePage ? TRUE : FALSE) :
- FALSE;
- m_text = linkToText(compound?compound->getLanguage():SrcLangExt_Unknown,target,isFile);
- m_anchor = anchor;
- if (compound && compound->isLinkable()) // ref to compound
- {
- if (anchor.isEmpty() && /* compound link */
- compound->definitionType()==Definition::TypeGroup && /* is group */
- ((GroupDef *)compound)->groupTitle() /* with title */
- )
- {
- m_text=((GroupDef *)compound)->groupTitle(); // use group's title as link
- }
- else if (compound->definitionType()==Definition::TypeMember &&
- ((MemberDef*)compound)->isObjCMethod())
- {
- // Objective C Method
- MemberDef *member = (MemberDef*)compound;
- bool localLink = g_memberDef ? member->getClassDef()==g_memberDef->getClassDef() : FALSE;
- m_text = member->objCMethodName(localLink,g_inSeeBlock);
- }
-
- m_file = compound->getOutputFileBase();
- m_ref = compound->getReference();
- //printf("isFile=%d compound=%s (%d)\n",isFile,compound->name().data(),
- // compound->definitionType());
- return;
- }
- else if (compound->definitionType()==Definition::TypeFile &&
- ((FileDef*)compound)->generateSourceFile()
- ) // undocumented file that has source code we can link to
- {
- m_file = compound->getSourceFileBase();
- m_ref = compound->getReference();
- return;
- }
- }
- m_text = target;
- warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: unable to resolve reference to `%s' for \\ref command",
- qPrint(target));
-}
-
-static void flattenParagraphs(DocNode *root,QList<DocNode> &children)
-{
- QListIterator<DocNode> li(children);
- QList<DocNode> newChildren;
- DocNode *dn;
- for (li.toFirst();(dn=li.current());++li)
- {
- if (dn->kind()==DocNode::Kind_Para)
- {
- DocPara *para = (DocPara*)dn;
- QList<DocNode> &paraChildren = para->children();
- paraChildren.setAutoDelete(FALSE); // unlink children from paragraph node
- QListIterator<DocNode> li2(paraChildren);
- DocNode *dn2;
- for (li2.toFirst();(dn2=li2.current());++li2)
- {
- newChildren.append(dn2); // add them to new node
- }
- }
- }
- children.clear();
- QListIterator<DocNode> li3(newChildren);
- for (li3.toFirst();(dn=li3.current());++li3)
- {
- children.append(dn);
- dn->setParent(root);
- }
-}
-
-void DocRef::parse()
-{
- g_nodeStack.push(this);
- DBG(("DocRef::parse() start\n"));
-
- int tok;
- while ((tok=doctokenizerYYlex()))
- {
- if (!defaultHandleToken(this,tok,m_children))
- {
- switch (tok)
- {
- case TK_COMMAND:
- warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: Illegal command %s as part of a \\ref",
- qPrint(g_token->name));
- break;
- case TK_SYMBOL:
- warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: Unsupported symbol %s found",
- qPrint(g_token->name));
- break;
- case TK_HTMLTAG:
- break;
- default:
- warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: Unexpected token %s",
- tokToString(tok));
- break;
- }
- }
- }
-
- if (m_children.isEmpty() && !m_text.isEmpty())
- {
- g_insideHtmlLink=TRUE;
- docParserPushContext();
- internalValidatingParseDoc(this,m_children,m_text);
- docParserPopContext();
- g_insideHtmlLink=FALSE;
- flattenParagraphs(this,m_children);
- }
-
- handlePendingStyleCommands(this,m_children);
-
- DocNode *n=g_nodeStack.pop();
- ASSERT(n==this);
-}
-
-//---------------------------------------------------------------------------
-
-DocCite::DocCite(DocNode *parent,const QCString &target,const QCString &) //context)
-{
- static uint numBibFiles = Config_getList("CITE_BIB_FILES").count();
- m_parent = parent;
- QCString anchor;
- //printf("DocCite::DocCite(target=%s)\n",target.data());
- ASSERT(!target.isEmpty());
- m_relPath = g_relPath;
- CiteInfo *cite = Doxygen::citeDict->find(target);
- if (numBibFiles>0 && cite) // ref to citation
- {
- m_text = cite->text;
- if (m_text.isEmpty()) m_text = cite->label;
- m_ref = cite->ref;
- m_anchor = CiteConsts::anchorPrefix+cite->label;
- m_file = convertNameToFile(CiteConsts::fileName,FALSE,TRUE);
- //printf("CITE ==> m_text=%s,m_ref=%s,m_file=%s,m_anchor=%s\n",
- // m_text.data(),m_ref.data(),m_file.data(),m_anchor.data());
- return;
- }
- m_text = linkToText(SrcLangExt_Unknown,target,FALSE);
- warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: unable to resolve reference to `%s' for \\cite command",
- qPrint(target));
-}
-
-//---------------------------------------------------------------------------
-
-DocLink::DocLink(DocNode *parent,const QCString &target)
-{
- m_parent = parent;
- Definition *compound;
- //PageInfo *page;
- QCString anchor;
- m_refText = target;
- m_relPath = g_relPath;
- if (!m_refText.isEmpty() && m_refText.at(0)=='#')
- {
- m_refText = m_refText.right(m_refText.length()-1);
- }
- if (resolveLink(g_context,stripKnownExtensions(target),g_inSeeBlock,
- &compound,anchor))
- {
- m_anchor = anchor;
- if (compound && compound->isLinkable())
- {
- m_file = compound->getOutputFileBase();
- m_ref = compound->getReference();
- }
- else if (compound->definitionType()==Definition::TypeFile &&
- ((FileDef*)compound)->generateSourceFile()
- ) // undocumented file that has source code we can link to
- {
- m_file = compound->getSourceFileBase();
- m_ref = compound->getReference();
- }
- return;
- }
-
- // bogus link target
- warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: unable to resolve link to `%s' for \\link command",
- qPrint(target));
-}
-
-
-QCString DocLink::parse(bool isJavaLink,bool isXmlLink)
-{
- QCString result;
- g_nodeStack.push(this);
- DBG(("DocLink::parse() start\n"));
-
- int tok;
- while ((tok=doctokenizerYYlex()))
- {
- if (!defaultHandleToken(this,tok,m_children,FALSE))
- {
- switch (tok)
- {
- case TK_COMMAND:
- switch (Mappers::cmdMapper->map(g_token->name))
- {
- case CMD_ENDLINK:
- if (isJavaLink)
- {
- warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: {@link.. ended with @endlink command");
- }
- goto endlink;
- default:
- warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: Illegal command %s as part of a \\link",
- qPrint(g_token->name));
- break;
- }
- break;
- case TK_SYMBOL:
- warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: Unsupported symbol %s found",
- qPrint(g_token->name));
- break;
- case TK_HTMLTAG:
- if (g_token->name!="see" || !isXmlLink)
- {
- warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: Unexpected xml/html command %s found",
- qPrint(g_token->name));
- }
- goto endlink;
- case TK_LNKWORD:
- case TK_WORD:
- if (isJavaLink) // special case to detect closing }
- {
- QCString w = g_token->name;
- int p;
- if (w=="}")
- {
- goto endlink;
- }
- else if ((p=w.find('}'))!=-1)
- {
- uint l=w.length();
- m_children.append(new DocWord(this,w.left(p)));
- if ((uint)p<l-1) // something left after the } (for instance a .)
- {
- result=w.right(l-p-1);
- }
- goto endlink;
- }
- }
- m_children.append(new DocWord(this,g_token->name));
- break;
- default:
- warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: Unexpected token %s",
- tokToString(tok));
- break;
- }
- }
- }
- if (tok==0)
- {
- warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: Unexpected end of comment while inside"
- " link command\n");
- }
-endlink:
-
- if (m_children.isEmpty()) // no link text
- {
- m_children.append(new DocWord(this,m_refText));
- }
-
- handlePendingStyleCommands(this,m_children);
- DBG(("DocLink::parse() end\n"));
- DocNode *n=g_nodeStack.pop();
- ASSERT(n==this);
- return result;
-}
-
-
-//---------------------------------------------------------------------------
-
-DocDotFile::DocDotFile(DocNode *parent,const QCString &name,const QCString &context) :
- m_name(name), m_relPath(g_relPath), m_context(context)
-{
- m_parent = parent;
-}
-
-void DocDotFile::parse()
-{
- g_nodeStack.push(this);
- DBG(("DocDotFile::parse() start\n"));
-
- doctokenizerYYsetStateTitle();
- int tok;
- while ((tok=doctokenizerYYlex()))
- {
- if (!defaultHandleToken(this,tok,m_children))
- {
- switch (tok)
- {
- case TK_COMMAND:
- warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: Illegal command %s as part of a \\dotfile",
- qPrint(g_token->name));
- break;
- case TK_SYMBOL:
- warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: Unsupported symbol %s found",
- qPrint(g_token->name));
- break;
- default:
- warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: Unexpected token %s",
- tokToString(tok));
- break;
- }
- }
- }
- tok=doctokenizerYYlex();
- while (tok==TK_WORD) // there are values following the title
- {
- if (g_token->name=="width")
- {
- m_width=g_token->chars;
- }
- else if (g_token->name=="height")
- {
- m_height=g_token->chars;
- }
- else
- {
- warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: Unknown option %s after image title",
- qPrint(g_token->name));
- }
- tok=doctokenizerYYlex();
- }
- ASSERT(tok==0);
- doctokenizerYYsetStatePara();
- handlePendingStyleCommands(this,m_children);
-
- bool ambig;
- FileDef *fd = findFileDef(Doxygen::dotFileNameDict,m_name,ambig);
- if (fd==0 && m_name.right(4)!=".dot") // try with .dot extension as well
- {
- fd = findFileDef(Doxygen::dotFileNameDict,m_name+".dot",ambig);
- }
- if (fd)
- {
- m_file = fd->absFilePath();
- }
- else if (ambig)
- {
- warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: included dot file name %s is ambiguous.\n"
- "Possible candidates:\n%s",qPrint(m_name),
- qPrint(showFileDefMatches(Doxygen::exampleNameDict,m_name))
- );
- }
- else
- {
- warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: included dot file %s is not found "
- "in any of the paths specified via DOTFILE_DIRS!",qPrint(m_name));
- }
-
- DBG(("DocDotFile::parse() end\n"));
- DocNode *n=g_nodeStack.pop();
- ASSERT(n==this);
-}
-
-DocMscFile::DocMscFile(DocNode *parent,const QCString &name,const QCString &context) :
- m_name(name), m_relPath(g_relPath), m_context(context)
-{
- m_parent = parent;
-}
-
-void DocMscFile::parse()
-{
- g_nodeStack.push(this);
- DBG(("DocMscFile::parse() start\n"));
-
- doctokenizerYYsetStateTitle();
- int tok;
- while ((tok=doctokenizerYYlex()))
- {
- if (!defaultHandleToken(this,tok,m_children))
- {
- switch (tok)
- {
- case TK_COMMAND:
- warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: Illegal command %s as part of a \\mscfile",
- qPrint(g_token->name));
- break;
- case TK_SYMBOL:
- warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: Unsupported symbol %s found",
- qPrint(g_token->name));
- break;
- default:
- warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: Unexpected token %s",
- tokToString(tok));
- break;
- }
- }
- }
- tok=doctokenizerYYlex();
- while (tok==TK_WORD) // there are values following the title
- {
- if (g_token->name=="width")
- {
- m_width=g_token->chars;
- }
- else if (g_token->name=="height")
- {
- m_height=g_token->chars;
- }
- else
- {
- warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: Unknown option %s after image title",
- qPrint(g_token->name));
- }
- tok=doctokenizerYYlex();
- }
- ASSERT(tok==0);
- doctokenizerYYsetStatePara();
- handlePendingStyleCommands(this,m_children);
-
- bool ambig;
- FileDef *fd = findFileDef(Doxygen::mscFileNameDict,m_name,ambig);
- if (fd==0 && m_name.right(4)!=".msc") // try with .msc extension as well
- {
- fd = findFileDef(Doxygen::mscFileNameDict,m_name+".msc",ambig);
- }
- if (fd)
- {
- m_file = fd->absFilePath();
- }
- else if (ambig)
- {
- warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: included msc file name %s is ambiguous.\n"
- "Possible candidates:\n%s",qPrint(m_name),
- qPrint(showFileDefMatches(Doxygen::exampleNameDict,m_name))
- );
- }
- else
- {
- warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: included msc file %s is not found "
- "in any of the paths specified via MSCFILE_DIRS!",qPrint(m_name));
- }
-
- DBG(("DocMscFile::parse() end\n"));
- DocNode *n=g_nodeStack.pop();
- ASSERT(n==this);
-}
-
-
-
-//---------------------------------------------------------------------------
-
-DocImage::DocImage(DocNode *parent,const HtmlAttribList &attribs,const QCString &name,
- Type t,const QCString &url) :
- m_attribs(attribs), m_name(name),
- m_type(t), m_relPath(g_relPath),
- m_url(url)
-{
- m_parent = parent;
-}
-
-void DocImage::parse()
-{
- g_nodeStack.push(this);
- DBG(("DocImage::parse() start\n"));
-
- // parse title
- doctokenizerYYsetStateTitle();
- int tok;
- while ((tok=doctokenizerYYlex()))
- {
- if (tok==TK_WORD && (g_token->name=="width=" || g_token->name=="height="))
- {
- // special case: no title, but we do have a size indicator
- doctokenizerYYsetStateTitleAttrValue();
- // strip =
- g_token->name=g_token->name.left(g_token->name.length()-1);
- break;
- }
- if (!defaultHandleToken(this,tok,m_children))
- {
- switch (tok)
- {
- case TK_COMMAND:
- warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: Illegal command %s as part of a \\image",
- qPrint(g_token->name));
- break;
- case TK_SYMBOL:
- warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: Unsupported symbol %s found",
- qPrint(g_token->name));
- break;
- default:
- warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: Unexpected token %s",
- tokToString(tok));
- break;
- }
- }
- }
- // parse size attributes
- tok=doctokenizerYYlex();
- while (tok==TK_WORD) // there are values following the title
- {
- if (g_token->name=="width")
- {
- m_width=g_token->chars;
- }
- else if (g_token->name=="height")
- {
- m_height=g_token->chars;
- }
- else
- {
- warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: Unknown option %s after image title",
- qPrint(g_token->name));
- }
- tok=doctokenizerYYlex();
- }
- doctokenizerYYsetStatePara();
-
- handlePendingStyleCommands(this,m_children);
- DBG(("DocImage::parse() end\n"));
- DocNode *n=g_nodeStack.pop();
- ASSERT(n==this);
-}
-
-
-//---------------------------------------------------------------------------
-
-int DocHtmlHeader::parse()
-{
- int retval=RetVal_OK;
- g_nodeStack.push(this);
- DBG(("DocHtmlHeader::parse() start\n"));
-
- int tok;
- while ((tok=doctokenizerYYlex()))
- {
- if (!defaultHandleToken(this,tok,m_children))
- {
- switch (tok)
- {
- case TK_COMMAND:
- warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: Illegal command %s as part of a <h%d> tag",
- qPrint(g_token->name),m_level);
- break;
- case TK_HTMLTAG:
- {
- int tagId=Mappers::htmlTagMapper->map(g_token->name);
- if (tagId==HTML_H1 && g_token->endTag) // found </h1> tag
- {
- if (m_level!=1)
- {
- warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: <h%d> ended with </h1>",
- m_level);
- }
- goto endheader;
- }
- else if (tagId==HTML_H2 && g_token->endTag) // found </h2> tag
- {
- if (m_level!=2)
- {
- warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: <h%d> ended with </h2>",
- m_level);
- }
- goto endheader;
- }
- else if (tagId==HTML_H3 && g_token->endTag) // found </h3> tag
- {
- if (m_level!=3)
- {
- warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: <h%d> ended with </h3>",
- m_level);
- }
- goto endheader;
- }
- else if (tagId==HTML_H4 && g_token->endTag) // found </h4> tag
- {
- if (m_level!=4)
- {
- warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: <h%d> ended with </h4>",
- m_level);
- }
- goto endheader;
- }
- else if (tagId==HTML_H5 && g_token->endTag) // found </h5> tag
- {
- if (m_level!=5)
- {
- warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: <h%d> ended with </h5>",
- m_level);
- }
- goto endheader;
- }
- else if (tagId==HTML_H6 && g_token->endTag) // found </h6> tag
- {
- if (m_level!=6)
- {
- warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: <h%d> ended with </h6>",
- m_level);
- }
- goto endheader;
- }
- else if (tagId==HTML_A)
- {
- if (!g_token->endTag)
- {
- handleAHref(this,m_children,g_token->attribs);
- }
- }
- else if (tagId==HTML_BR)
- {
- DocLineBreak *lb = new DocLineBreak(this);
- m_children.append(lb);
- }
- else
- {
- warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: Unexpected html tag <%s%s> found within <h%d> context",
- g_token->endTag?"/":"",qPrint(g_token->name),m_level);
- }
-
- }
- break;
- case TK_SYMBOL:
- warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: Unsupported symbol %s found",
- qPrint(g_token->name));
- break;
- default:
- warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: Unexpected token %s",
- tokToString(tok));
- break;
- }
- }
- }
- if (tok==0)
- {
- warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: Unexpected end of comment while inside"
- " <h%d> tag\n",m_level);
- }
-endheader:
- handlePendingStyleCommands(this,m_children);
- DBG(("DocHtmlHeader::parse() end\n"));
- DocNode *n=g_nodeStack.pop();
- ASSERT(n==this);
- return retval;
-}
-
-//---------------------------------------------------------------------------
-
-int DocHRef::parse()
-{
- int retval=RetVal_OK;
- g_nodeStack.push(this);
- DBG(("DocHRef::parse() start\n"));
-
- int tok;
- while ((tok=doctokenizerYYlex()))
- {
- if (!defaultHandleToken(this,tok,m_children))
- {
- switch (tok)
- {
- case TK_COMMAND:
- warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: Illegal command %s as part of a <a>..</a> block",
- qPrint(g_token->name));
- break;
- case TK_SYMBOL:
- warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: Unsupported symbol %s found",
- qPrint(g_token->name));
- break;
- case TK_HTMLTAG:
- {
- int tagId=Mappers::htmlTagMapper->map(g_token->name);
- if (tagId==HTML_A && g_token->endTag) // found </a> tag
- {
- goto endhref;
- }
- else
- {
- warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: Unexpected html tag <%s%s> found within <a href=...> context",
- g_token->endTag?"/":"",qPrint(g_token->name),doctokenizerYYlineno);
- }
- }
- break;
- default:
- warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: Unexpected token %s",
- tokToString(tok),doctokenizerYYlineno);
- break;
- }
- }
- }
- if (tok==0)
- {
- warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: Unexpected end of comment while inside"
- " <a href=...> tag",doctokenizerYYlineno);
- }
-endhref:
- handlePendingStyleCommands(this,m_children);
- DBG(("DocHRef::parse() end\n"));
- DocNode *n=g_nodeStack.pop();
- ASSERT(n==this);
- return retval;
-}
-
-//---------------------------------------------------------------------------
-
-int DocInternal::parse(int level)
-{
- int retval=RetVal_OK;
- g_nodeStack.push(this);
- DBG(("DocInternal::parse() start\n"));
-
- // first parse any number of paragraphs
- bool isFirst=TRUE;
- DocPara *lastPar=0;
- do
- {
- DocPara *par = new DocPara(this);
- if (isFirst) { par->markFirst(); isFirst=FALSE; }
- retval=par->parse();
- if (!par->isEmpty())
- {
- m_children.append(par);
- lastPar=par;
- }
- else
- {
- delete par;
- }
- if (retval==TK_LISTITEM)
- {
- warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: Invalid list item found",doctokenizerYYlineno);
- }
- } while (retval!=0 &&
- retval!=RetVal_Section &&
- retval!=RetVal_Subsection &&
- retval!=RetVal_Subsubsection &&
- retval!=RetVal_Paragraph
- );
- if (lastPar) lastPar->markLast();
-
- // then parse any number of level-n sections
- while ((level==1 && retval==RetVal_Section) ||
- (level==2 && retval==RetVal_Subsection) ||
- (level==3 && retval==RetVal_Subsubsection) ||
- (level==4 && retval==RetVal_Paragraph)
- )
- {
- DocSection *s=new DocSection(this,
- QMIN(level+Doxygen::subpageNestingLevel,5),g_token->sectionId);
- m_children.append(s);
- retval = s->parse();
- }
-
- if (retval==RetVal_Internal)
- {
- warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: \\internal command found inside internal section");
- }
-
- DBG(("DocInternal::parse() end\n"));
- DocNode *n=g_nodeStack.pop();
- ASSERT(n==this);
- return retval;
-}
-
-//---------------------------------------------------------------------------
-
-int DocIndexEntry::parse()
-{
- int retval=RetVal_OK;
- g_nodeStack.push(this);
- DBG(("DocIndexEntry::parse() start\n"));
- int tok=doctokenizerYYlex();
- if (tok!=TK_WHITESPACE)
- {
- warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: expected whitespace after \\addindex command");
- goto endindexentry;
- }
- doctokenizerYYsetStateTitle();
- m_entry="";
- while ((tok=doctokenizerYYlex()))
- {
- switch (tok)
- {
- case TK_WHITESPACE:
- m_entry+=" ";
- break;
- case TK_WORD:
- case TK_LNKWORD:
- m_entry+=g_token->name;
- break;
- case TK_SYMBOL:
- {
- char letter='\0';
- DocSymbol::SymType s = DocSymbol::decodeSymbol(g_token->name,&letter);
- switch (s)
- {
- case DocSymbol::BSlash: m_entry+='\\'; break;
- case DocSymbol::At: m_entry+='@'; break;
- case DocSymbol::Less: m_entry+='<'; break;
- case DocSymbol::Greater: m_entry+='>'; break;
- case DocSymbol::Amp: m_entry+='&'; break;
- case DocSymbol::Dollar: m_entry+='$'; break;
- case DocSymbol::Hash: m_entry+='#'; break;
- case DocSymbol::Percent: m_entry+='%'; break;
- case DocSymbol::Apos: m_entry+='\''; break;
- case DocSymbol::Quot: m_entry+='"'; break;
- case DocSymbol::Lsquo: m_entry+='`'; break;
- case DocSymbol::Rsquo: m_entry+='\''; break;
- case DocSymbol::Ldquo: m_entry+="``"; break;
- case DocSymbol::Rdquo: m_entry+="''"; break;
- case DocSymbol::Ndash: m_entry+="--"; break;
- case DocSymbol::Mdash: m_entry+="---"; break;
- default:
- warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: Unexpected symbol found as argument of \\addindex");
- break;
- }
- }
- break;
- case TK_COMMAND:
- switch (Mappers::cmdMapper->map(g_token->name))
- {
- case CMD_BSLASH: m_entry+='\\'; break;
- case CMD_AT: m_entry+='@'; break;
- case CMD_LESS: m_entry+='<'; break;
- case CMD_GREATER: m_entry+='>'; break;
- case CMD_AMP: m_entry+='&'; break;
- case CMD_DOLLAR: m_entry+='$'; break;
- case CMD_HASH: m_entry+='#'; break;
- case CMD_DCOLON: m_entry+="::"; break;
- case CMD_PERCENT: m_entry+='%'; break;
- case CMD_QUOTE: m_entry+='"'; break;
- default:
- warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: Unexpected command %s found as argument of \\addindex",
- qPrint(g_token->name));
- break;
- }
- break;
- default:
- warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: Unexpected token %s",
- tokToString(tok));
- break;
- }
- }
- if (tok!=0) retval=tok;
- doctokenizerYYsetStatePara();
- m_entry = m_entry.stripWhiteSpace();
-endindexentry:
- DBG(("DocIndexEntry::parse() end retval=%x\n",retval));
- DocNode *n=g_nodeStack.pop();
- ASSERT(n==this);
- return retval;
-}
-
-//---------------------------------------------------------------------------
-
-int DocHtmlCaption::parse()
-{
- int retval=0;
- g_nodeStack.push(this);
- DBG(("DocHtmlCaption::parse() start\n"));
- int tok;
- while ((tok=doctokenizerYYlex()))
- {
- if (!defaultHandleToken(this,tok,m_children))
- {
- switch (tok)
- {
- case TK_COMMAND:
- warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: Illegal command %s as part of a <caption> tag",
- qPrint(g_token->name));
- break;
- case TK_SYMBOL:
- warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: Unsupported symbol %s found",
- qPrint(g_token->name));
- break;
- case TK_HTMLTAG:
- {
- int tagId=Mappers::htmlTagMapper->map(g_token->name);
- if (tagId==HTML_CAPTION && g_token->endTag) // found </caption> tag
- {
- retval = RetVal_OK;
- goto endcaption;
- }
- else
- {
- warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: Unexpected html tag <%s%s> found within <caption> context",
- g_token->endTag?"/":"",qPrint(g_token->name));
- }
- }
- break;
- default:
- warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: Unexpected token %s",
- tokToString(tok));
- break;
- }
- }
- }
- if (tok==0)
- {
- warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: Unexpected end of comment while inside"
- " <caption> tag",doctokenizerYYlineno);
- }
-endcaption:
- handlePendingStyleCommands(this,m_children);
- DBG(("DocHtmlCaption::parse() end\n"));
- DocNode *n=g_nodeStack.pop();
- ASSERT(n==this);
- return retval;
-}
-
-//---------------------------------------------------------------------------
-
-int DocHtmlCell::parse()
-{
- int retval=RetVal_OK;
- g_nodeStack.push(this);
- DBG(("DocHtmlCell::parse() start\n"));
-
- // parse one or more paragraphs
- bool isFirst=TRUE;
- DocPara *par=0;
- do
- {
- par = new DocPara(this);
- if (isFirst) { par->markFirst(); isFirst=FALSE; }
- m_children.append(par);
- retval=par->parse();
- if (retval==TK_HTMLTAG)
- {
- int tagId=Mappers::htmlTagMapper->map(g_token->name);
- if (tagId==HTML_TD && g_token->endTag) // found </dt> tag
- {
- retval=TK_NEWPARA; // ignore the tag
- }
- else if (tagId==HTML_TH && g_token->endTag) // found </th> tag
- {
- retval=TK_NEWPARA; // ignore the tag
- }
- }
- }
- while (retval==TK_NEWPARA);
- if (par) par->markLast();
-
- DBG(("DocHtmlCell::parse() end\n"));
- DocNode *n=g_nodeStack.pop();
- ASSERT(n==this);
- return retval;
-}
-
-int DocHtmlCell::parseXml()
-{
- int retval=RetVal_OK;
- g_nodeStack.push(this);
- DBG(("DocHtmlCell::parseXml() start\n"));
-
- // parse one or more paragraphs
- bool isFirst=TRUE;
- DocPara *par=0;
- do
- {
- par = new DocPara(this);
- if (isFirst) { par->markFirst(); isFirst=FALSE; }
- m_children.append(par);
- retval=par->parse();
- if (retval==TK_HTMLTAG)
- {
- int tagId=Mappers::htmlTagMapper->map(g_token->name);
- if (tagId==XML_ITEM && g_token->endTag) // found </item> tag
- {
- retval=TK_NEWPARA; // ignore the tag
- }
- else if (tagId==XML_DESCRIPTION && g_token->endTag) // found </description> tag
- {
- retval=TK_NEWPARA; // ignore the tag
- }
- }
- }
- while (retval==TK_NEWPARA);
- if (par) par->markLast();
-
- DBG(("DocHtmlCell::parseXml() end\n"));
- DocNode *n=g_nodeStack.pop();
- ASSERT(n==this);
- return retval;
-}
-
-int DocHtmlCell::rowSpan() const
-{
- int retval = 0;
- HtmlAttribList attrs = attribs();
- uint i;
- for (i=0; i<attrs.count(); ++i)
- {
- if (attrs.at(i)->name.lower()=="rowspan")
- {
- retval = attrs.at(i)->value.toInt();
- break;
- }
- }
- return retval;
-}
-
-int DocHtmlCell::colSpan() const
-{
- int retval = 1;
- HtmlAttribList attrs = attribs();
- uint i;
- for (i=0; i<attrs.count(); ++i)
- {
- if (attrs.at(i)->name.lower()=="colspan")
- {
- retval = QMAX(1,attrs.at(i)->value.toInt());
- break;
- }
- }
- return retval;
-}
-
-DocHtmlCell::Alignment DocHtmlCell::alignment() const
-{
- HtmlAttribList attrs = attribs();
- uint i;
- for (i=0; i<attrs.count(); ++i)
- {
- if (attrs.at(i)->name.lower()=="align")
- {
- if (attrs.at(i)->value.lower()=="center")
- return Center;
- else if (attrs.at(i)->value.lower()=="right")
- return Right;
- else return Left;
- }
- }
- return Left;
-}
-
-
-//---------------------------------------------------------------------------
-
-int DocHtmlRow::parse()
-{
- int retval=RetVal_OK;
- g_nodeStack.push(this);
- DBG(("DocHtmlRow::parse() start\n"));
-
- bool isHeading=FALSE;
- bool isFirst=TRUE;
- DocHtmlCell *cell=0;
-
- // get next token
- int tok=doctokenizerYYlex();
- // skip whitespace
- while (tok==TK_WHITESPACE || tok==TK_NEWPARA) tok=doctokenizerYYlex();
- // should find a html tag now
- if (tok==TK_HTMLTAG)
- {
- int tagId=Mappers::htmlTagMapper->map(g_token->name);
- if (tagId==HTML_TD && !g_token->endTag) // found <td> tag
- {
- }
- else if (tagId==HTML_TH && !g_token->endTag) // found <th> tag
- {
- isHeading=TRUE;
- }
- else // found some other tag
- {
- warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: expected <td> or <th> tag but "
- "found <%s> instead!",qPrint(g_token->name));
- doctokenizerYYpushBackHtmlTag(g_token->name);
- goto endrow;
- }
- }
- else if (tok==0) // premature end of comment
- {
- warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: unexpected end of comment while looking"
- " for a html description title");
- goto endrow;
- }
- else // token other than html token
- {
- warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: expected <td> or <th> tag but found %s token instead!",
- tokToString(tok));
- goto endrow;
- }
-
- // parse one or more cells
- do
- {
- cell=new DocHtmlCell(this,g_token->attribs,isHeading);
- cell->markFirst(isFirst);
- isFirst=FALSE;
- m_children.append(cell);
- retval=cell->parse();
- isHeading = retval==RetVal_TableHCell;
- }
- while (retval==RetVal_TableCell || retval==RetVal_TableHCell);
- if (cell) cell->markLast(TRUE);
-
-endrow:
- DBG(("DocHtmlRow::parse() end\n"));
- DocNode *n=g_nodeStack.pop();
- ASSERT(n==this);
- return retval;
-}
-
-int DocHtmlRow::parseXml(bool isHeading)
-{
- int retval=RetVal_OK;
- g_nodeStack.push(this);
- DBG(("DocHtmlRow::parseXml() start\n"));
-
- bool isFirst=TRUE;
- DocHtmlCell *cell=0;
-
- // get next token
- int tok=doctokenizerYYlex();
- // skip whitespace
- while (tok==TK_WHITESPACE || tok==TK_NEWPARA) tok=doctokenizerYYlex();
- // should find a html tag now
- if (tok==TK_HTMLTAG)
- {
- int tagId=Mappers::htmlTagMapper->map(g_token->name);
- if (tagId==XML_TERM && !g_token->endTag) // found <term> tag
- {
- }
- else if (tagId==XML_DESCRIPTION && !g_token->endTag) // found <description> tag
- {
- }
- else // found some other tag
- {
- warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: expected <term> or <description> tag but "
- "found <%s> instead!",qPrint(g_token->name));
- doctokenizerYYpushBackHtmlTag(g_token->name);
- goto endrow;
- }
- }
- else if (tok==0) // premature end of comment
- {
- warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: unexpected end of comment while looking"
- " for a html description title");
- goto endrow;
- }
- else // token other than html token
- {
- warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: expected <td> or <th> tag but found %s token instead!",
- tokToString(tok));
- goto endrow;
- }
-
- do
- {
- cell=new DocHtmlCell(this,g_token->attribs,isHeading);
- cell->markFirst(isFirst);
- isFirst=FALSE;
- m_children.append(cell);
- retval=cell->parseXml();
- }
- while (retval==RetVal_TableCell || retval==RetVal_TableHCell);
- if (cell) cell->markLast(TRUE);
-
-endrow:
- DBG(("DocHtmlRow::parseXml() end\n"));
- DocNode *n=g_nodeStack.pop();
- ASSERT(n==this);
- return retval;
-}
-
-//---------------------------------------------------------------------------
-
-int DocHtmlTable::parse()
-{
- int retval=RetVal_OK;
- g_nodeStack.push(this);
- DBG(("DocHtmlTable::parse() start\n"));
-
-getrow:
- // get next token
- int tok=doctokenizerYYlex();
- // skip whitespace
- while (tok==TK_WHITESPACE || tok==TK_NEWPARA) tok=doctokenizerYYlex();
- // should find a html tag now
- if (tok==TK_HTMLTAG)
- {
- int tagId=Mappers::htmlTagMapper->map(g_token->name);
- if (tagId==HTML_TR && !g_token->endTag) // found <tr> tag
- {
- // no caption, just rows
- retval=RetVal_TableRow;
- }
- else if (tagId==HTML_CAPTION && !g_token->endTag) // found <caption> tag
- {
- if (m_caption)
- {
- warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: table already has a caption, found another one");
- }
- else
- {
- m_caption = new DocHtmlCaption(this,g_token->attribs);
- retval=m_caption->parse();
-
- if (retval==RetVal_OK) // caption was parsed ok
- {
- goto getrow;
- }
- }
- }
- else // found wrong token
- {
- warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: expected <tr> or <caption> tag but "
- "found <%s%s> instead!", g_token->endTag ? "/" : "", qPrint(g_token->name));
- }
- }
- else if (tok==0) // premature end of comment
- {
- warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: unexpected end of comment while looking"
- " for a <tr> or <caption> tag");
- }
- else // token other than html token
- {
- warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: expected <tr> tag but found %s token instead!",
- tokToString(tok));
- }
-
- // parse one or more rows
- while (retval==RetVal_TableRow)
- {
- DocHtmlRow *tr=new DocHtmlRow(this,g_token->attribs);
- m_children.append(tr);
- retval=tr->parse();
- }
-
- computeTableGrid();
-
- DBG(("DocHtmlTable::parse() end\n"));
- DocNode *n=g_nodeStack.pop();
- ASSERT(n==this);
- return retval==RetVal_EndTable ? RetVal_OK : retval;
-}
-
-int DocHtmlTable::parseXml()
-{
- int retval=RetVal_OK;
- g_nodeStack.push(this);
- DBG(("DocHtmlTable::parseXml() start\n"));
-
- // get next token
- int tok=doctokenizerYYlex();
- // skip whitespace
- while (tok==TK_WHITESPACE || tok==TK_NEWPARA) tok=doctokenizerYYlex();
- // should find a html tag now
- int tagId=0;
- bool isHeader=FALSE;
- if (tok==TK_HTMLTAG)
- {
- tagId=Mappers::htmlTagMapper->map(g_token->name);
- if (tagId==XML_ITEM && !g_token->endTag) // found <item> tag
- {
- retval=RetVal_TableRow;
- }
- if (tagId==XML_LISTHEADER && !g_token->endTag) // found <listheader> tag
- {
- retval=RetVal_TableRow;
- isHeader=TRUE;
- }
- }
-
- // parse one or more rows
- while (retval==RetVal_TableRow)
- {
- DocHtmlRow *tr=new DocHtmlRow(this,g_token->attribs);
- m_children.append(tr);
- retval=tr->parseXml(isHeader);
- isHeader=FALSE;
- }
-
- computeTableGrid();
-
- DBG(("DocHtmlTable::parseXml() end\n"));
- DocNode *n=g_nodeStack.pop();
- ASSERT(n==this);
- return retval==RetVal_EndTable ? RetVal_OK : retval;
-}
-
-struct ActiveRowSpan
-{
- ActiveRowSpan(int rows,int col) : rowsLeft(rows), column(col) {}
- int rowsLeft;
- int column;
-};
-
-typedef QList<ActiveRowSpan> RowSpanList;
-
-/** determines the location of all cells in a grid, resolving row and
- column spans. For each the total number of visible cells is computed,
- and the total number of visible columns over all rows is stored.
- */
-void DocHtmlTable::computeTableGrid()
-{
- //printf("computeTableGrid()\n");
- RowSpanList rowSpans;
- rowSpans.setAutoDelete(TRUE);
- int maxCols=0;
- int rowIdx=1;
- QListIterator<DocNode> li(children());
- DocNode *rowNode;
- for (li.toFirst();(rowNode=li.current());++li)
- {
- int colIdx=1;
- int cells=0;
- if (rowNode->kind()==DocNode::Kind_HtmlRow)
- {
- uint i;
- DocHtmlRow *row = (DocHtmlRow*)rowNode;
- QListIterator<DocNode> rli(row->children());
- DocNode *cellNode;
- for (rli.toFirst();(cellNode=rli.current());++rli)
- {
- if (cellNode->kind()==DocNode::Kind_HtmlCell)
- {
- DocHtmlCell *cell = (DocHtmlCell*)cellNode;
- int rs = cell->rowSpan();
- int cs = cell->colSpan();
-
- for (i=0;i<rowSpans.count();i++)
- {
- if (rowSpans.at(i)->rowsLeft>0 &&
- rowSpans.at(i)->column==colIdx)
- {
- colIdx=rowSpans.at(i)->column+1;
- cells++;
- }
- }
- if (rs>0) rowSpans.append(new ActiveRowSpan(rs,colIdx));
- //printf("found cell at (%d,%d)\n",rowIdx,colIdx);
- cell->setRowIndex(rowIdx);
- cell->setColumnIndex(colIdx);
- colIdx+=cs;
- cells++;
- }
- }
- for (i=0;i<rowSpans.count();i++)
- {
- if (rowSpans.at(i)->rowsLeft>0) rowSpans.at(i)->rowsLeft--;
- }
- row->setVisibleCells(cells);
- row->setRowIndex(rowIdx);
- rowIdx++;
- }
- if (colIdx-1>maxCols) maxCols=colIdx-1;
- }
- m_numCols = maxCols;
-}
-
-void DocHtmlTable::accept(DocVisitor *v)
-{
- v->visitPre(this);
- // for HTML output we put the caption first
- if (m_caption && v->id()==DocVisitor_Html) m_caption->accept(v);
- QListIterator<DocNode> cli(m_children);
- DocNode *n;
- for (cli.toFirst();(n=cli.current());++cli) n->accept(v);
- // for other output formats we put the caption last
- if (m_caption && v->id()!=DocVisitor_Html) m_caption->accept(v);
- v->visitPost(this);
-}
-
-//---------------------------------------------------------------------------
-
-int DocHtmlDescTitle::parse()
-{
- int retval=0;
- g_nodeStack.push(this);
- DBG(("DocHtmlDescTitle::parse() start\n"));
-
- int tok;
- while ((tok=doctokenizerYYlex()))
- {
- if (!defaultHandleToken(this,tok,m_children))
- {
- switch (tok)
- {
- case TK_COMMAND:
- {
- QCString cmdName=g_token->name;
- bool isJavaLink=FALSE;
- switch (Mappers::cmdMapper->map(cmdName))
- {
- case CMD_REF:
- {
- int tok=doctokenizerYYlex();
- if (tok!=TK_WHITESPACE)
- {
- warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: expected whitespace after %s command",
- qPrint(g_token->name));
- }
- else
- {
- doctokenizerYYsetStateRef();
- tok=doctokenizerYYlex(); // get the reference id
- if (tok!=TK_WORD)
- {
- warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: unexpected token %s as the argument of %s",
- tokToString(tok),qPrint(cmdName));
- }
- else
- {
- DocRef *ref = new DocRef(this,g_token->name,g_context);
- m_children.append(ref);
- ref->parse();
- }
- doctokenizerYYsetStatePara();
- }
- }
- break;
- case CMD_JAVALINK:
- isJavaLink=TRUE;
- // fall through
- case CMD_LINK:
- {
- int tok=doctokenizerYYlex();
- if (tok!=TK_WHITESPACE)
- {
- warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: expected whitespace after %s command",
- qPrint(cmdName));
- }
- else
- {
- doctokenizerYYsetStateLink();
- tok=doctokenizerYYlex();
- if (tok!=TK_WORD)
- {
- warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: unexpected token %s as the argument of %s",
- tokToString(tok),qPrint(cmdName));
- }
- else
- {
- doctokenizerYYsetStatePara();
- DocLink *lnk = new DocLink(this,g_token->name);
- m_children.append(lnk);
- QCString leftOver = lnk->parse(isJavaLink);
- if (!leftOver.isEmpty())
- {
- m_children.append(new DocWord(this,leftOver));
- }
- }
- }
- }
-
- break;
- default:
- warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: Illegal command %s as part of a <dt> tag",
- qPrint(g_token->name));
- }
- }
- break;
- case TK_SYMBOL:
- warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: Unsupported symbol %s found",
- qPrint(g_token->name));
- break;
- case TK_HTMLTAG:
- {
- int tagId=Mappers::htmlTagMapper->map(g_token->name);
- if (tagId==HTML_DD && !g_token->endTag) // found <dd> tag
- {
- retval = RetVal_DescData;
- goto endtitle;
- }
- else if (tagId==HTML_DT && g_token->endTag)
- {
- // ignore </dt> tag.
- }
- else if (tagId==HTML_DT)
- {
- // missing <dt> tag.
- retval = RetVal_DescTitle;
- goto endtitle;
- }
- else if (tagId==HTML_DL && g_token->endTag)
- {
- retval=RetVal_EndDesc;
- goto endtitle;
- }
- else if (tagId==HTML_A)
- {
- if (!g_token->endTag)
- {
- handleAHref(this,m_children,g_token->attribs);
- }
- }
- else
- {
- warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: Unexpected html tag <%s%s> found within <dt> context",
- g_token->endTag?"/":"",qPrint(g_token->name));
- }
- }
- break;
- default:
- warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: Unexpected token %s",
- tokToString(tok));
- break;
- }
- }
- }
- if (tok==0)
- {
- warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: Unexpected end of comment while inside"
- " <dt> tag");
- }
-endtitle:
- handlePendingStyleCommands(this,m_children);
- DBG(("DocHtmlDescTitle::parse() end\n"));
- DocNode *n=g_nodeStack.pop();
- ASSERT(n==this);
- return retval;
-}
-
-//---------------------------------------------------------------------------
-
-int DocHtmlDescData::parse()
-{
- m_attribs = g_token->attribs;
- int retval=0;
- g_nodeStack.push(this);
- DBG(("DocHtmlDescData::parse() start\n"));
-
- bool isFirst=TRUE;
- DocPara *par=0;
- do
- {
- par = new DocPara(this);
- if (isFirst) { par->markFirst(); isFirst=FALSE; }
- m_children.append(par);
- retval=par->parse();
- }
- while (retval==TK_NEWPARA);
- if (par) par->markLast();
-
- DBG(("DocHtmlDescData::parse() end\n"));
- DocNode *n=g_nodeStack.pop();
- ASSERT(n==this);
- return retval;
-}
-
-//---------------------------------------------------------------------------
-
-int DocHtmlDescList::parse()
-{
- int retval=RetVal_OK;
- g_nodeStack.push(this);
- DBG(("DocHtmlDescList::parse() start\n"));
-
- // get next token
- int tok=doctokenizerYYlex();
- // skip whitespace
- while (tok==TK_WHITESPACE || tok==TK_NEWPARA) tok=doctokenizerYYlex();
- // should find a html tag now
- if (tok==TK_HTMLTAG)
- {
- int tagId=Mappers::htmlTagMapper->map(g_token->name);
- if (tagId==HTML_DT && !g_token->endTag) // found <dt> tag
- {
- // continue
- }
- else // found some other tag
- {
- warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: expected <dt> tag but "
- "found <%s> instead!",qPrint(g_token->name));
- doctokenizerYYpushBackHtmlTag(g_token->name);
- goto enddesclist;
- }
- }
- else if (tok==0) // premature end of comment
- {
- warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: unexpected end of comment while looking"
- " for a html description title");
- goto enddesclist;
- }
- else // token other than html token
- {
- warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: expected <dt> tag but found %s token instead!",
- tokToString(tok));
- goto enddesclist;
- }
-
- do
- {
- DocHtmlDescTitle *dt=new DocHtmlDescTitle(this,g_token->attribs);
- m_children.append(dt);
- DocHtmlDescData *dd=new DocHtmlDescData(this);
- m_children.append(dd);
- retval=dt->parse();
- if (retval==RetVal_DescData)
- {
- retval=dd->parse();
- }
- else if (retval!=RetVal_DescTitle)
- {
- // error
- break;
- }
- } while (retval==RetVal_DescTitle);
-
- if (retval==0)
- {
- warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: unexpected end of comment while inside <dl> block");
- }
-
-enddesclist:
-
- DocNode *n=g_nodeStack.pop();
- ASSERT(n==this);
- DBG(("DocHtmlDescList::parse() end\n"));
- return retval==RetVal_EndDesc ? RetVal_OK : retval;
-}
-
-//---------------------------------------------------------------------------
-
-int DocHtmlListItem::parse()
-{
- DBG(("DocHtmlListItem::parse() start\n"));
- int retval=0;
- g_nodeStack.push(this);
-
- // parse one or more paragraphs
- bool isFirst=TRUE;
- DocPara *par=0;
- do
- {
- par = new DocPara(this);
- if (isFirst) { par->markFirst(); isFirst=FALSE; }
- m_children.append(par);
- retval=par->parse();
- }
- while (retval==TK_NEWPARA);
- if (par) par->markLast();
-
- DocNode *n=g_nodeStack.pop();
- ASSERT(n==this);
- DBG(("DocHtmlListItem::parse() end retval=%x\n",retval));
- return retval;
-}
-
-int DocHtmlListItem::parseXml()
-{
- DBG(("DocHtmlListItem::parseXml() start\n"));
- int retval=0;
- g_nodeStack.push(this);
-
- // parse one or more paragraphs
- bool isFirst=TRUE;
- DocPara *par=0;
- do
- {
- par = new DocPara(this);
- if (isFirst) { par->markFirst(); isFirst=FALSE; }
- m_children.append(par);
- retval=par->parse();
- if (retval==0) break;
-
- //printf("new item: retval=%x g_token->name=%s g_token->endTag=%d\n",
- // retval,qPrint(g_token->name),g_token->endTag);
- if (retval==RetVal_ListItem)
- {
- break;
- }
- }
- while (retval!=RetVal_CloseXml);
-
- if (par) par->markLast();
-
- DocNode *n=g_nodeStack.pop();
- ASSERT(n==this);
- DBG(("DocHtmlListItem::parseXml() end retval=%x\n",retval));
- return retval;
-}
-
-//---------------------------------------------------------------------------
-
-int DocHtmlList::parse()
-{
- DBG(("DocHtmlList::parse() start\n"));
- int retval=RetVal_OK;
- int num=1;
- g_nodeStack.push(this);
-
- // get next token
- int tok=doctokenizerYYlex();
- // skip whitespace and paragraph breaks
- while (tok==TK_WHITESPACE || tok==TK_NEWPARA) tok=doctokenizerYYlex();
- // should find a html tag now
- if (tok==TK_HTMLTAG)
- {
- int tagId=Mappers::htmlTagMapper->map(g_token->name);
- if (tagId==HTML_LI && !g_token->endTag) // found <li> tag
- {
- // ok, we can go on.
- }
- else if (((m_type==Unordered && tagId==HTML_UL) ||
- (m_type==Ordered && tagId==HTML_OL)
- ) && g_token->endTag
- ) // found empty list
- {
- // add dummy item to obtain valid HTML
- m_children.append(new DocHtmlListItem(this,HtmlAttribList(),1));
- warn_doc_error(g_fileName,doctokenizerYYlineno,"Warning: empty list!");
- retval = RetVal_EndList;
- goto endlist;
- }
- else // found some other tag
- {
- // add dummy item to obtain valid HTML
- m_children.append(new DocHtmlListItem(this,HtmlAttribList(),1));
- warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: expected <li> tag but "
- "found <%s%s> instead!",g_token->endTag?"/":"",qPrint(g_token->name));
- doctokenizerYYpushBackHtmlTag(g_token->name);
- goto endlist;
- }
- }
- else if (tok==0) // premature end of comment
- {
- // add dummy item to obtain valid HTML
- m_children.append(new DocHtmlListItem(this,HtmlAttribList(),1));
- warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: unexpected end of comment while looking"
- " for a html list item");
- goto endlist;
- }
- else // token other than html token
- {
- // add dummy item to obtain valid HTML
- m_children.append(new DocHtmlListItem(this,HtmlAttribList(),1));
- warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: expected <li> tag but found %s token instead!",
- tokToString(tok));
- goto endlist;
- }
-
- do
- {
- DocHtmlListItem *li=new DocHtmlListItem(this,g_token->attribs,num++);
- m_children.append(li);
- retval=li->parse();
- } while (retval==RetVal_ListItem);
-
- if (retval==0)
- {
- warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: unexpected end of comment while inside <%cl> block",
- m_type==Unordered ? 'u' : 'o');
- }
-
-endlist:
- DBG(("DocHtmlList::parse() end retval=%x\n",retval));
- DocNode *n=g_nodeStack.pop();
- ASSERT(n==this);
- return retval==RetVal_EndList ? RetVal_OK : retval;
-}
-
-int DocHtmlList::parseXml()
-{
- DBG(("DocHtmlList::parseXml() start\n"));
- int retval=RetVal_OK;
- int num=1;
- g_nodeStack.push(this);
-
- // get next token
- int tok=doctokenizerYYlex();
- // skip whitespace and paragraph breaks
- while (tok==TK_WHITESPACE || tok==TK_NEWPARA) tok=doctokenizerYYlex();
- // should find a html tag now
- if (tok==TK_HTMLTAG)
- {
- int tagId=Mappers::htmlTagMapper->map(g_token->name);
- //printf("g_token->name=%s g_token->endTag=%d\n",qPrint(g_token->name),g_token->endTag);
- if (tagId==XML_ITEM && !g_token->endTag) // found <item> tag
- {
- // ok, we can go on.
- }
- else // found some other tag
- {
- warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: expected <item> tag but "
- "found <%s> instead!",qPrint(g_token->name));
- doctokenizerYYpushBackHtmlTag(g_token->name);
- goto endlist;
- }
- }
- else if (tok==0) // premature end of comment
- {
- warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: unexpected end of comment while looking"
- " for a html list item");
- goto endlist;
- }
- else // token other than html token
- {
- warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: expected <item> tag but found %s token instead!",
- tokToString(tok));
- goto endlist;
- }
-
- do
- {
- DocHtmlListItem *li=new DocHtmlListItem(this,g_token->attribs,num++);
- m_children.append(li);
- retval=li->parseXml();
- if (retval==0) break;
- //printf("retval=%x g_token->name=%s\n",retval,qPrint(g_token->name));
- } while (retval==RetVal_ListItem);
-
- if (retval==0)
- {
- warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: unexpected end of comment while inside <list type=\"%s\"> block",
- m_type==Unordered ? "bullet" : "number");
- }
-
-endlist:
- DBG(("DocHtmlList::parseXml() end retval=%x\n",retval));
- DocNode *n=g_nodeStack.pop();
- ASSERT(n==this);
- return retval==RetVal_EndList ||
- (retval==RetVal_CloseXml || g_token->name=="list") ?
- RetVal_OK : retval;
-}
-
-//--------------------------------------------------------------------------
-
-int DocHtmlBlockQuote::parse()
-{
- DBG(("DocHtmlBlockQuote::parse() start\n"));
- int retval=0;
- g_nodeStack.push(this);
-
- // parse one or more paragraphs
- bool isFirst=TRUE;
- DocPara *par=0;
- do
- {
- par = new DocPara(this);
- if (isFirst) { par->markFirst(); isFirst=FALSE; }
- m_children.append(par);
- retval=par->parse();
- }
- while (retval==TK_NEWPARA);
- if (par) par->markLast();
-
- DocNode *n=g_nodeStack.pop();
- ASSERT(n==this);
- DBG(("DocHtmlBlockQuote::parse() end retval=%x\n",retval));
- return (retval==RetVal_EndBlockQuote) ? RetVal_OK : retval;
-}
-
-//---------------------------------------------------------------------------
-
-int DocSimpleListItem::parse()
-{
- g_nodeStack.push(this);
- int rv=m_paragraph->parse();
- m_paragraph->markFirst();
- m_paragraph->markLast();
- DocNode *n=g_nodeStack.pop();
- ASSERT(n==this);
- return rv;
-}
-
-//--------------------------------------------------------------------------
-
-int DocSimpleList::parse()
-{
- g_nodeStack.push(this);
- int rv;
- do
- {
- DocSimpleListItem *li=new DocSimpleListItem(this);
- m_children.append(li);
- rv=li->parse();
- } while (rv==RetVal_ListItem);
- DocNode *n=g_nodeStack.pop();
- ASSERT(n==this);
- return (rv!=TK_NEWPARA) ? rv : RetVal_OK;
-}
-
-//--------------------------------------------------------------------------
-
-DocAutoListItem::DocAutoListItem(DocNode *parent,int indent,int num)
- : m_indent(indent), m_itemNum(num)
-{
- m_parent = parent;
-}
-
-int DocAutoListItem::parse()
-{
- int retval = RetVal_OK;
- g_nodeStack.push(this);
-
- //retval=m_paragraph->parse();
- //m_paragraph->markFirst();
- //m_paragraph->markLast();
-
- // first parse any number of paragraphs
- bool isFirst=TRUE;
- DocPara *lastPar=0;
- do
- {
- DocPara *par = new DocPara(this);
- if (isFirst) { par->markFirst(); isFirst=FALSE; }
- retval=par->parse();
- if (!par->isEmpty())
- {
- m_children.append(par);
- if (lastPar) lastPar->markLast(FALSE);
- lastPar=par;
- }
- else
- {
- delete par;
- }
- // next paragraph should be more indented than the - marker to belong
- // to this item
- } while (retval==TK_NEWPARA && g_token->indent>m_indent);
- if (lastPar) lastPar->markLast();
-
- DocNode *n=g_nodeStack.pop();
- ASSERT(n==this);
- //printf("DocAutoListItem: retval=%d indent=%d\n",retval,g_token->indent);
- return retval;
-}
-
-//--------------------------------------------------------------------------
-
-DocAutoList::DocAutoList(DocNode *parent,int indent,bool isEnumList,
- int depth) :
- m_indent(indent), m_isEnumList(isEnumList),
- m_depth(depth)
-{
- m_parent = parent;
-}
-
-int DocAutoList::parse()
-{
- int retval = RetVal_OK;
- int num=1;
- g_nodeStack.push(this);
- // first item or sub list => create new list
- do
- {
- if (g_token->id!=-1) // explicitly numbered list
- {
- num=g_token->id; // override num with real number given
- }
- DocAutoListItem *li = new DocAutoListItem(this,m_indent,num++);
- m_children.append(li);
- retval=li->parse();
- //printf("DocAutoList::parse(): retval=0x%x g_token->indent=%d m_indent=%d "
- // "m_isEnumList=%d g_token->isEnumList=%d g_token->name=%s\n",
- // retval,g_token->indent,m_indent,m_isEnumList,g_token->isEnumList,
- // g_token->name.data());
- //printf("num=%d g_token->id=%d\n",num,g_token->id);
- }
- while (retval==TK_LISTITEM && // new list item
- m_indent==g_token->indent && // at same indent level
- m_isEnumList==g_token->isEnumList && // of the same kind
- (g_token->id==-1 || g_token->id>=num) // increasing number (or no number)
- );
-
- DocNode *n=g_nodeStack.pop();
- ASSERT(n==this);
- return retval;
-}
-
-//--------------------------------------------------------------------------
-
-void DocTitle::parse()
-{
- DBG(("DocTitle::parse() start\n"));
- g_nodeStack.push(this);
- doctokenizerYYsetStateTitle();
- int tok;
- while ((tok=doctokenizerYYlex()))
- {
- if (!defaultHandleToken(this,tok,m_children))
- {
- switch (tok)
- {
- case TK_COMMAND:
- warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: Illegal command %s as part of a title section",
- qPrint(g_token->name));
- break;
- case TK_SYMBOL:
- warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: Unsupported symbol %s found",
- qPrint(g_token->name));
- break;
- default:
- warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: Unexpected token %s",
- tokToString(tok));
- break;
- }
- }
- }
- doctokenizerYYsetStatePara();
- handlePendingStyleCommands(this,m_children);
- DBG(("DocTitle::parse() end\n"));
- DocNode *n = g_nodeStack.pop();
- ASSERT(n==this);
-}
-
-void DocTitle::parseFromString(const QCString &text)
-{
- m_children.append(new DocWord(this,text));
-}
-
-//--------------------------------------------------------------------------
-
-DocSimpleSect::DocSimpleSect(DocNode *parent,Type t) :
- m_type(t)
-{
- m_parent = parent;
- m_title=0;
-}
-
-DocSimpleSect::~DocSimpleSect()
-{
- delete m_title;
-}
-
-void DocSimpleSect::accept(DocVisitor *v)
-{
- v->visitPre(this);
- if (m_title) m_title->accept(v);
- QListIterator<DocNode> cli(m_children);
- DocNode *n;
- for (cli.toFirst();(n=cli.current());++cli) n->accept(v);
- v->visitPost(this);
-}
-
-int DocSimpleSect::parse(bool userTitle,bool needsSeparator)
-{
- DBG(("DocSimpleSect::parse() start\n"));
- g_nodeStack.push(this);
-
- // handle case for user defined title
- if (userTitle)
- {
- m_title = new DocTitle(this);
- m_title->parse();
- }
-
- // add new paragraph as child
- DocPara *par = new DocPara(this);
- if (m_children.isEmpty())
- {
- par->markFirst();
- }
- else
- {
- ASSERT(m_children.last()->kind()==DocNode::Kind_Para);
- ((DocPara *)m_children.last())->markLast(FALSE);
- }
- par->markLast();
- if (needsSeparator) m_children.append(new DocSimpleSectSep(this));
- m_children.append(par);
-
- // parse the contents of the paragraph
- int retval = par->parse();
-
- DBG(("DocSimpleSect::parse() end retval=%d\n",retval));
- DocNode *n=g_nodeStack.pop();
- ASSERT(n==this);
- return retval; // 0==EOF, TK_NEWPARA, TK_LISTITEM, TK_ENDLIST, RetVal_SimpleSec
-}
-
-int DocSimpleSect::parseRcs()
-{
- DBG(("DocSimpleSect::parseRcs() start\n"));
- g_nodeStack.push(this);
-
- m_title = new DocTitle(this);
- m_title->parseFromString(g_token->name);
-
- QCString text = g_token->text;
- docParserPushContext(); // this will create a new g_token
- internalValidatingParseDoc(this,m_children,text);
- docParserPopContext(); // this will restore the old g_token
-
- DBG(("DocSimpleSect::parseRcs()\n"));
- DocNode *n=g_nodeStack.pop();
- ASSERT(n==this);
- return RetVal_OK;
-}
-
-int DocSimpleSect::parseXml()
-{
- DBG(("DocSimpleSect::parse() start\n"));
- g_nodeStack.push(this);
-
- int retval = RetVal_OK;
- for (;;)
- {
- // add new paragraph as child
- DocPara *par = new DocPara(this);
- if (m_children.isEmpty())
- {
- par->markFirst();
- }
- else
- {
- ASSERT(m_children.last()->kind()==DocNode::Kind_Para);
- ((DocPara *)m_children.last())->markLast(FALSE);
- }
- par->markLast();
- m_children.append(par);
-
- // parse the contents of the paragraph
- retval = par->parse();
- if (retval == 0) break;
- if (retval == RetVal_CloseXml)
- {
- retval = RetVal_OK;
- break;
- }
- }
-
- DBG(("DocSimpleSect::parseXml() end retval=%d\n",retval));
- DocNode *n=g_nodeStack.pop();
- ASSERT(n==this);
- return retval;
-}
-
-void DocSimpleSect::appendLinkWord(const QCString &word)
-{
- DocPara *p;
- if (m_children.isEmpty() || m_children.last()->kind()!=DocNode::Kind_Para)
- {
- p = new DocPara(this);
- m_children.append(p);
- }
- else
- {
- p = (DocPara *)m_children.last();
-
- // Comma-seperate <seealso> links.
- p->injectToken(TK_WORD,",");
- p->injectToken(TK_WHITESPACE," ");
- }
-
- g_inSeeBlock=TRUE;
- p->injectToken(TK_LNKWORD,word);
- g_inSeeBlock=FALSE;
-}
-
-QCString DocSimpleSect::typeString() const
-{
- switch (m_type)
- {
- case Unknown: break;
- case See: return "see";
- case Return: return "return";
- case Author: // fall through
- case Authors: return "author";
- case Version: return "version";
- case Since: return "since";
- case Date: return "date";
- case Note: return "note";
- case Warning: return "warning";
- case Pre: return "pre";
- case Post: return "post";
- case Copyright: return "copyright";
- case Invar: return "invariant";
- case Remark: return "remark";
- case Attention: return "attention";
- case User: return "user";
- case Rcs: return "rcs";
- }
- return "unknown";
-}
-
-//--------------------------------------------------------------------------
-
-int DocParamList::parse(const QCString &cmdName)
-{
- int retval=RetVal_OK;
- DBG(("DocParamList::parse() start\n"));
- g_nodeStack.push(this);
- DocPara *par=0;
-
- int tok=doctokenizerYYlex();
- if (tok!=TK_WHITESPACE)
- {
- warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: expected whitespace after %s command",
- qPrint(cmdName));
- }
- doctokenizerYYsetStateParam();
- tok=doctokenizerYYlex();
- while (tok==TK_WORD) /* there is a parameter name */
- {
- if (m_type==DocParamSect::Param)
- {
- int typeSeparator = g_token->name.find('#'); // explicit type position
- if (typeSeparator!=-1)
- {
- handleParameterType(this,m_paramTypes,g_token->name.left(typeSeparator));
- g_token->name = g_token->name.mid(typeSeparator+1);
- g_hasParamCommand=TRUE;
- checkArgumentName(g_token->name,TRUE);
- ((DocParamSect*)parent())->m_hasTypeSpecifier=TRUE;
- }
- else
- {
- g_hasParamCommand=TRUE;
- checkArgumentName(g_token->name,TRUE);
- }
- }
- else if (m_type==DocParamSect::RetVal)
- {
- g_hasReturnCommand=TRUE;
- checkArgumentName(g_token->name,FALSE);
- }
- //m_params.append(g_token->name);
- handleLinkedWord(this,m_params);
- tok=doctokenizerYYlex();
- }
- doctokenizerYYsetStatePara();
- if (tok==0) /* premature end of comment block */
- {
- warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: unexpected end of comment block while parsing the "
- "argument of command %s",qPrint(cmdName));
- retval=0;
- goto endparamlist;
- }
- ASSERT(tok==TK_WHITESPACE);
-
- par = new DocPara(this);
- m_paragraphs.append(par);
- retval = par->parse();
- par->markFirst();
- par->markLast();
-
-endparamlist:
- DBG(("DocParamList::parse() end retval=%d\n",retval));
- DocNode *n=g_nodeStack.pop();
- ASSERT(n==this);
- return retval;
-}
-
-int DocParamList::parseXml(const QCString &paramName)
-{
- int retval=RetVal_OK;
- DBG(("DocParamList::parseXml() start\n"));
- g_nodeStack.push(this);
-
- g_token->name = paramName;
- if (m_type==DocParamSect::Param)
- {
- g_hasParamCommand=TRUE;
- checkArgumentName(g_token->name,TRUE);
- }
- else if (m_type==DocParamSect::RetVal)
- {
- g_hasReturnCommand=TRUE;
- checkArgumentName(g_token->name,FALSE);
- }
-
- handleLinkedWord(this,m_params);
-
- do
- {
- DocPara *par = new DocPara(this);
- retval = par->parse();
- if (par->isEmpty()) // avoid adding an empty paragraph for the whitespace
- // after </para> and before </param>
- {
- delete par;
- break;
- }
- else // append the paragraph to the list
- {
- if (m_paragraphs.isEmpty())
- {
- par->markFirst();
- }
- else
- {
- m_paragraphs.last()->markLast(FALSE);
- }
- par->markLast();
- m_paragraphs.append(par);
- }
-
- if (retval == 0) break;
-
- } while (retval==RetVal_CloseXml &&
- Mappers::htmlTagMapper->map(g_token->name)!=XML_PARAM &&
- Mappers::htmlTagMapper->map(g_token->name)!=XML_TYPEPARAM &&
- Mappers::htmlTagMapper->map(g_token->name)!=XML_EXCEPTION);
-
-
- if (retval==0) /* premature end of comment block */
- {
- warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: unterminated param or exception tag");
- }
- else
- {
- retval=RetVal_OK;
- }
-
-
- DBG(("DocParamList::parse() end retval=%d\n",retval));
- DocNode *n=g_nodeStack.pop();
- ASSERT(n==this);
- return retval;
-}
-
-//--------------------------------------------------------------------------
-
-int DocParamSect::parse(const QCString &cmdName,bool xmlContext, Direction d)
-{
- int retval=RetVal_OK;
- DBG(("DocParamSect::parse() start\n"));
- g_nodeStack.push(this);
-
- if (d!=Unspecified)
- {
- m_hasInOutSpecifier=TRUE;
- }
-
- DocParamList *pl = new DocParamList(this,m_type,d);
- if (m_children.isEmpty())
- {
- pl->markFirst();
- pl->markLast();
- }
- else
- {
- ASSERT(m_children.last()->kind()==DocNode::Kind_ParamList);
- ((DocParamList *)m_children.last())->markLast(FALSE);
- pl->markLast();
- }
- m_children.append(pl);
- if (xmlContext)
- {
- retval = pl->parseXml(cmdName);
- }
- else
- {
- retval = pl->parse(cmdName);
- }
-
- DBG(("DocParamSect::parse() end retval=%d\n",retval));
- DocNode *n=g_nodeStack.pop();
- ASSERT(n==this);
- return retval;
-}
-
-//--------------------------------------------------------------------------
-
-int DocPara::handleSimpleSection(DocSimpleSect::Type t, bool xmlContext)
-{
- DocSimpleSect *ss=0;
- bool needsSeparator = FALSE;
- if (!m_children.isEmpty() && // previous element
- m_children.last()->kind()==Kind_SimpleSect && // was a simple sect
- ((DocSimpleSect *)m_children.last())->type()==t && // of same type
- t!=DocSimpleSect::User) // but not user defined
- {
- // append to previous section
- ss=(DocSimpleSect *)m_children.last();
- needsSeparator = TRUE;
- }
- else // start new section
- {
- ss=new DocSimpleSect(this,t);
- m_children.append(ss);
- }
- int rv = RetVal_OK;
- if (xmlContext)
- {
- return ss->parseXml();
- }
- else
- {
- rv = ss->parse(t==DocSimpleSect::User,needsSeparator);
- }
- return (rv!=TK_NEWPARA) ? rv : RetVal_OK;
-}
-
-int DocPara::handleParamSection(const QCString &cmdName,
- DocParamSect::Type t,
- bool xmlContext=FALSE,
- int direction=DocParamSect::Unspecified)
-{
- DocParamSect *ps=0;
- if (!m_children.isEmpty() && // previous element
- m_children.last()->kind()==Kind_ParamSect && // was a param sect
- ((DocParamSect *)m_children.last())->type()==t) // of same type
- {
- // append to previous section
- ps=(DocParamSect *)m_children.last();
- }
- else // start new section
- {
- ps=new DocParamSect(this,t);
- m_children.append(ps);
- }
- int rv=ps->parse(cmdName,xmlContext,(DocParamSect::Direction)direction);
- return (rv!=TK_NEWPARA) ? rv : RetVal_OK;
-}
-
-void DocPara::handleCite()
-{
- // get the argument of the cite command.
- int tok=doctokenizerYYlex();
- if (tok!=TK_WHITESPACE)
- {
- warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: expected whitespace after %s command",
- qPrint("cite"));
- return;
- }
- doctokenizerYYsetStateCite();
- tok=doctokenizerYYlex();
- if (tok==0)
- {
- warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: unexpected end of comment block while parsing the "
- "argument of command %s\n", qPrint("cite"));
- return;
- }
- else if (tok!=TK_WORD && tok!=TK_LNKWORD)
- {
- warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: unexpected token %s as the argument of %s",
- tokToString(tok),qPrint("cite"));
- return;
- }
- g_token->sectionId = g_token->name;
- DocCite *cite = new DocCite(this,g_token->name,g_context);
- m_children.append(cite);
- //cite->parse();
-
- doctokenizerYYsetStatePara();
-}
-
-int DocPara::handleXRefItem()
-{
- int retval=doctokenizerYYlex();
- ASSERT(retval==TK_WHITESPACE);
- doctokenizerYYsetStateXRefItem();
- retval=doctokenizerYYlex();
- if (retval==RetVal_OK)
- {
- DocXRefItem *ref = new DocXRefItem(this,g_token->id,g_token->name);
- if (ref->parse())
- {
- m_children.append(ref);
- }
- else
- {
- delete ref;
- }
- }
- doctokenizerYYsetStatePara();
- return retval;
-}
-
-void DocPara::handleIncludeOperator(const QCString &cmdName,DocIncOperator::Type t)
-{
- DBG(("handleIncludeOperator(%s)\n",qPrint(cmdName)));
- int tok=doctokenizerYYlex();
- if (tok!=TK_WHITESPACE)
- {
- warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: expected whitespace after %s command",
- qPrint(cmdName));
- return;
- }
- doctokenizerYYsetStatePattern();
- tok=doctokenizerYYlex();
- doctokenizerYYsetStatePara();
- if (tok==0)
- {
- warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: unexpected end of comment block while parsing the "
- "argument of command %s", qPrint(cmdName));
- return;
- }
- else if (tok!=TK_WORD)
- {
- warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: unexpected token %s as the argument of %s",
- tokToString(tok),qPrint(cmdName));
- return;
- }
- DocIncOperator *op = new DocIncOperator(this,t,g_token->name,g_context,g_isExample,g_exampleName);
- DocNode *n1 = m_children.last();
- DocNode *n2 = n1!=0 ? m_children.prev() : 0;
- bool isFirst = n1==0 || // no last node
- (n1->kind()!=DocNode::Kind_IncOperator &&
- n1->kind()!=DocNode::Kind_WhiteSpace
- ) || // last node is not operator or whitespace
- (n1->kind()==DocNode::Kind_WhiteSpace &&
- n2!=0 && n2->kind()!=DocNode::Kind_IncOperator
- ); // previous not is not operator
- op->markFirst(isFirst);
- op->markLast(TRUE);
- if (n1!=0 && n1->kind()==DocNode::Kind_IncOperator)
- {
- ((DocIncOperator *)n1)->markLast(FALSE);
- }
- else if (n1!=0 && n1->kind()==DocNode::Kind_WhiteSpace &&
- n2!=0 && n2->kind()==DocNode::Kind_IncOperator
- )
- {
- ((DocIncOperator *)n2)->markLast(FALSE);
- }
- m_children.append(op);
- op->parse();
-}
-
-void DocPara::handleImage(const QCString &cmdName)
-{
- int tok=doctokenizerYYlex();
- if (tok!=TK_WHITESPACE)
- {
- warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: expected whitespace after %s command",
- qPrint(cmdName));
- return;
- }
- tok=doctokenizerYYlex();
- if (tok!=TK_WORD && tok!=TK_LNKWORD)
- {
- warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: unexpected token %s as the argument of %s",
- tokToString(tok),qPrint(cmdName));
- return;
- }
- tok=doctokenizerYYlex();
- if (tok!=TK_WHITESPACE)
- {
- warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: expected whitespace after %s command",
- qPrint(cmdName));
- return;
- }
- DocImage::Type t;
- QCString imgType = g_token->name.lower();
- if (imgType=="html") t=DocImage::Html;
- else if (imgType=="latex") t=DocImage::Latex;
- else if (imgType=="rtf") t=DocImage::Rtf;
- else
- {
- warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: image type %s specified as the first argument of "
- "%s is not valid",
- qPrint(imgType),qPrint(cmdName));
- return;
- }
- doctokenizerYYsetStateFile();
- tok=doctokenizerYYlex();
- doctokenizerYYsetStatePara();
- if (tok!=TK_WORD)
- {
- warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: unexpected token %s as the argument of %s",
- tokToString(tok),qPrint(cmdName));
- return;
- }
- HtmlAttribList attrList;
- DocImage *img = new DocImage(this,attrList,findAndCopyImage(g_token->name,t),t);
- m_children.append(img);
- img->parse();
-}
-
-void DocPara::handleDotFile(const QCString &cmdName)
-{
- int tok=doctokenizerYYlex();
- if (tok!=TK_WHITESPACE)
- {
- warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: expected whitespace after %s command",
- qPrint(cmdName));
- return;
- }
- doctokenizerYYsetStateFile();
- tok=doctokenizerYYlex();
- doctokenizerYYsetStatePara();
- if (tok!=TK_WORD)
- {
- warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: unexpected token %s as the argument of %s",
- tokToString(tok),qPrint(cmdName));
- return;
- }
- QCString name = g_token->name;
- DocDotFile *df = new DocDotFile(this,name,g_context);
- m_children.append(df);
- df->parse();
-}
-
-void DocPara::handleMscFile(const QCString &cmdName)
-{
- int tok=doctokenizerYYlex();
- if (tok!=TK_WHITESPACE)
- {
- warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: expected whitespace after %s command",
- qPrint(cmdName));
- return;
- }
- doctokenizerYYsetStateFile();
- tok=doctokenizerYYlex();
- doctokenizerYYsetStatePara();
- if (tok!=TK_WORD)
- {
- warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: unexpected token %s as the argument of %s",
- tokToString(tok),qPrint(cmdName));
- return;
- }
- QCString name = g_token->name;
- DocMscFile *df = new DocMscFile(this,name,g_context);
- m_children.append(df);
- df->parse();
-}
-
-void DocPara::handleLink(const QCString &cmdName,bool isJavaLink)
-{
- int tok=doctokenizerYYlex();
- if (tok!=TK_WHITESPACE)
- {
- warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: expected whitespace after %s command",
- qPrint(cmdName));
- return;
- }
- doctokenizerYYsetStateLink();
- tok=doctokenizerYYlex();
- if (tok!=TK_WORD)
- {
- warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: unexpected token %s as the argument of %s",
- tokToString(tok),qPrint(cmdName));
- return;
- }
- doctokenizerYYsetStatePara();
- DocLink *lnk = new DocLink(this,g_token->name);
- m_children.append(lnk);
- QCString leftOver = lnk->parse(isJavaLink);
- if (!leftOver.isEmpty())
- {
- m_children.append(new DocWord(this,leftOver));
- }
-}
-
-void DocPara::handleRef(const QCString &cmdName)
-{
- DBG(("handleRef(%s)\n",qPrint(cmdName)));
- int tok=doctokenizerYYlex();
- if (tok!=TK_WHITESPACE)
- {
- warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: expected whitespace after %s command",
- qPrint(cmdName));
- return;
- }
- doctokenizerYYsetStateRef();
- tok=doctokenizerYYlex(); // get the reference id
- DocRef *ref=0;
- if (tok!=TK_WORD)
- {
- warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: unexpected token %s as the argument of %s",
- tokToString(tok),qPrint(cmdName));
- goto endref;
- }
- ref = new DocRef(this,g_token->name,g_context);
- m_children.append(ref);
- ref->parse();
-endref:
- doctokenizerYYsetStatePara();
-}
-
-
-void DocPara::handleInclude(const QCString &cmdName,DocInclude::Type t)
-{
- DBG(("handleInclude(%s)\n",qPrint(cmdName)));
- int tok=doctokenizerYYlex();
- if (tok!=TK_WHITESPACE)
- {
- warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: expected whitespace after %s command",
- qPrint(cmdName));
- return;
- }
- doctokenizerYYsetStateFile();
- tok=doctokenizerYYlex();
- doctokenizerYYsetStatePara();
- if (tok==0)
- {
- warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: unexpected end of comment block while parsing the "
- "argument of command %s",qPrint(cmdName));
- return;
- }
- else if (tok!=TK_WORD)
- {
- warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: unexpected token %s as the argument of %s",
- tokToString(tok),qPrint(cmdName));
- return;
- }
- QCString fileName = g_token->name;
- QCString blockId;
- if (t==DocInclude::Snippet)
- {
- doctokenizerYYsetStateSnippet();
- tok=doctokenizerYYlex();
- doctokenizerYYsetStatePara();
- if (tok!=TK_WORD)
- {
- warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: expected block identifier, but found token %s instead while parsing the %s command",
- tokToString(tok),qPrint(cmdName));
- return;
- }
- blockId = "["+g_token->name+"]";
- }
- DocInclude *inc = new DocInclude(this,fileName,g_context,t,g_isExample,g_exampleName,blockId);
- m_children.append(inc);
- inc->parse();
-}
-
-void DocPara::handleSection(const QCString &cmdName)
-{
- // get the argument of the section command.
- int tok=doctokenizerYYlex();
- if (tok!=TK_WHITESPACE)
- {
- warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: expected whitespace after %s command",
- qPrint(cmdName));
- return;
- }
- tok=doctokenizerYYlex();
- if (tok==0)
- {
- warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: unexpected end of comment block while parsing the "
- "argument of command %s\n", qPrint(cmdName));
- return;
- }
- else if (tok!=TK_WORD && tok!=TK_LNKWORD)
- {
- warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: unexpected token %s as the argument of %s",
- tokToString(tok),qPrint(cmdName));
- return;
- }
- g_token->sectionId = g_token->name;
- doctokenizerYYsetStateSkipTitle();
- doctokenizerYYlex();
- doctokenizerYYsetStatePara();
-}
-
-int DocPara::handleHtmlHeader(const HtmlAttribList &tagHtmlAttribs,int level)
-{
- DocHtmlHeader *header = new DocHtmlHeader(this,tagHtmlAttribs,level);
- m_children.append(header);
- int retval = header->parse();
- return (retval==RetVal_OK) ? TK_NEWPARA : retval;
-}
-
-// For XML tags whose content is stored in attributes rather than
-// contained within the element, we need a way to inject the attribute
-// text into the current paragraph.
-bool DocPara::injectToken(int tok,const QCString &tokText)
-{
- g_token->name = tokText;
- return defaultHandleToken(this,tok,m_children);
-}
-
-int DocPara::handleStartCode()
-{
- int retval = doctokenizerYYlex();
- QCString lang = g_token->name;
- if (!lang.isEmpty() && lang.at(0)!='.')
- {
- lang="."+lang;
- }
- // search for the first non-whitespace line, index is stored in li
- int i=0,li=0,l=g_token->verb.length();
- while (i<l && (g_token->verb.at(i)==' ' || g_token->verb.at(i)=='\n'))
- {
- if (g_token->verb.at(i)=='\n') li=i+1;
- i++;
- }
- m_children.append(new DocVerbatim(this,g_context,g_token->verb.mid(li),DocVerbatim::Code,g_isExample,g_exampleName,lang));
- if (retval==0) warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: code section ended without end marker");
- doctokenizerYYsetStatePara();
- return retval;
-}
-
-void DocPara::handleInheritDoc()
-{
- if (g_memberDef) // inheriting docs from a member
- {
- MemberDef *reMd = g_memberDef->reimplements();
- if (reMd) // member from which was inherited.
- {
- MemberDef *thisMd = g_memberDef;
- //printf("{InheritDocs:%s=>%s}\n",g_memberDef->qualifiedName().data(),reMd->qualifiedName().data());
- docParserPushContext();
- g_scope=reMd->getOuterScope();
- if (g_scope!=Doxygen::globalScope)
- {
- g_context=g_scope->name();
- }
- g_memberDef=reMd;
- g_styleStack.clear();
- g_nodeStack.clear();
- g_copyStack.append(reMd);
- internalValidatingParseDoc(this,m_children,reMd->briefDescription());
- internalValidatingParseDoc(this,m_children,reMd->documentation());
- g_copyStack.remove(reMd);
- docParserPopContext(TRUE);
- g_memberDef = thisMd;
- }
- }
-}
-
-
-int DocPara::handleCommand(const QCString &cmdName)
-{
- DBG(("handleCommand(%s)\n",qPrint(cmdName)));
- int retval = RetVal_OK;
- int cmdId = Mappers::cmdMapper->map(cmdName);
- switch (cmdId)
- {
- case CMD_UNKNOWN:
- warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: Found unknown command `\\%s'",qPrint(cmdName));
- break;
- case CMD_EMPHASIS:
- m_children.append(new DocStyleChange(this,g_nodeStack.count(),DocStyleChange::Italic,TRUE));
- retval=handleStyleArgument(this,m_children,cmdName);
- m_children.append(new DocStyleChange(this,g_nodeStack.count(),DocStyleChange::Italic,FALSE));
- if (retval!=TK_WORD) m_children.append(new DocWhiteSpace(this," "));
- break;
- case CMD_BOLD:
- m_children.append(new DocStyleChange(this,g_nodeStack.count(),DocStyleChange::Bold,TRUE));
- retval=handleStyleArgument(this,m_children,cmdName);
- m_children.append(new DocStyleChange(this,g_nodeStack.count(),DocStyleChange::Bold,FALSE));
- if (retval!=TK_WORD) m_children.append(new DocWhiteSpace(this," "));
- break;
- case CMD_CODE:
- m_children.append(new DocStyleChange(this,g_nodeStack.count(),DocStyleChange::Code,TRUE));
- retval=handleStyleArgument(this,m_children,cmdName);
- m_children.append(new DocStyleChange(this,g_nodeStack.count(),DocStyleChange::Code,FALSE));
- if (retval!=TK_WORD) m_children.append(new DocWhiteSpace(this," "));
- break;
- case CMD_BSLASH:
- m_children.append(new DocSymbol(this,DocSymbol::BSlash));
- break;
- case CMD_AT:
- m_children.append(new DocSymbol(this,DocSymbol::At));
- break;
- case CMD_LESS:
- m_children.append(new DocSymbol(this,DocSymbol::Less));
- break;
- case CMD_GREATER:
- m_children.append(new DocSymbol(this,DocSymbol::Greater));
- break;
- case CMD_AMP:
- m_children.append(new DocSymbol(this,DocSymbol::Amp));
- break;
- case CMD_DOLLAR:
- m_children.append(new DocSymbol(this,DocSymbol::Dollar));
- break;
- case CMD_HASH:
- m_children.append(new DocSymbol(this,DocSymbol::Hash));
- break;
- case CMD_DCOLON:
- m_children.append(new DocSymbol(this,DocSymbol::DoubleColon));
- break;
- case CMD_PERCENT:
- m_children.append(new DocSymbol(this,DocSymbol::Percent));
- break;
- case CMD_QUOTE:
- m_children.append(new DocSymbol(this,DocSymbol::Quot));
- break;
- case CMD_SA:
- g_inSeeBlock=TRUE;
- retval = handleSimpleSection(DocSimpleSect::See);
- g_inSeeBlock=FALSE;
- break;
- case CMD_RETURN:
- retval = handleSimpleSection(DocSimpleSect::Return);
- g_hasReturnCommand=TRUE;
- break;
- case CMD_AUTHOR:
- retval = handleSimpleSection(DocSimpleSect::Author);
- break;
- case CMD_AUTHORS:
- retval = handleSimpleSection(DocSimpleSect::Authors);
- break;
- case CMD_VERSION:
- retval = handleSimpleSection(DocSimpleSect::Version);
- break;
- case CMD_SINCE:
- retval = handleSimpleSection(DocSimpleSect::Since);
- break;
- case CMD_DATE:
- retval = handleSimpleSection(DocSimpleSect::Date);
- break;
- case CMD_NOTE:
- retval = handleSimpleSection(DocSimpleSect::Note);
- break;
- case CMD_WARNING:
- retval = handleSimpleSection(DocSimpleSect::Warning);
- break;
- case CMD_PRE:
- retval = handleSimpleSection(DocSimpleSect::Pre);
- break;
- case CMD_POST:
- retval = handleSimpleSection(DocSimpleSect::Post);
- break;
- case CMD_COPYRIGHT:
- retval = handleSimpleSection(DocSimpleSect::Copyright);
- break;
- case CMD_INVARIANT:
- retval = handleSimpleSection(DocSimpleSect::Invar);
- break;
- case CMD_REMARK:
- retval = handleSimpleSection(DocSimpleSect::Remark);
- break;
- case CMD_ATTENTION:
- retval = handleSimpleSection(DocSimpleSect::Attention);
- break;
- case CMD_PAR:
- retval = handleSimpleSection(DocSimpleSect::User);
- break;
- case CMD_LI:
- {
- DocSimpleList *sl=new DocSimpleList(this);
- m_children.append(sl);
- retval = sl->parse();
- }
- break;
- case CMD_SECTION:
- {
- handleSection(cmdName);
- retval = RetVal_Section;
- }
- break;
- case CMD_SUBSECTION:
- {
- handleSection(cmdName);
- retval = RetVal_Subsection;
- }
- break;
- case CMD_SUBSUBSECTION:
- {
- handleSection(cmdName);
- retval = RetVal_Subsubsection;
- }
- break;
- case CMD_PARAGRAPH:
- {
- handleSection(cmdName);
- retval = RetVal_Paragraph;
- }
- break;
- case CMD_STARTCODE:
- {
- doctokenizerYYsetStateCode();
- retval = handleStartCode();
- }
- break;
- case CMD_HTMLONLY:
- {
- doctokenizerYYsetStateHtmlOnly();
- retval = doctokenizerYYlex();
- m_children.append(new DocVerbatim(this,g_context,g_token->verb,DocVerbatim::HtmlOnly,g_isExample,g_exampleName));
- if (retval==0) warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: htmlonly section ended without end marker");
- doctokenizerYYsetStatePara();
- }
- break;
- case CMD_MANONLY:
- {
- doctokenizerYYsetStateManOnly();
- retval = doctokenizerYYlex();
- m_children.append(new DocVerbatim(this,g_context,g_token->verb,DocVerbatim::ManOnly,g_isExample,g_exampleName));
- if (retval==0) warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: manonly section ended without end marker");
- doctokenizerYYsetStatePara();
- }
- break;
- case CMD_LATEXONLY:
- {
- doctokenizerYYsetStateLatexOnly();
- retval = doctokenizerYYlex();
- m_children.append(new DocVerbatim(this,g_context,g_token->verb,DocVerbatim::LatexOnly,g_isExample,g_exampleName));
- if (retval==0) warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: latexonly section ended without end marker");
- doctokenizerYYsetStatePara();
- }
- break;
- case CMD_XMLONLY:
- {
- doctokenizerYYsetStateXmlOnly();
- retval = doctokenizerYYlex();
- m_children.append(new DocVerbatim(this,g_context,g_token->verb,DocVerbatim::XmlOnly,g_isExample,g_exampleName));
- if (retval==0) warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: xmlonly section ended without end marker");
- doctokenizerYYsetStatePara();
- }
- break;
- case CMD_VERBATIM:
- {
- doctokenizerYYsetStateVerbatim();
- retval = doctokenizerYYlex();
- m_children.append(new DocVerbatim(this,g_context,g_token->verb,DocVerbatim::Verbatim,g_isExample,g_exampleName));
- if (retval==0) warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: verbatim section ended without end marker");
- doctokenizerYYsetStatePara();
- }
- break;
- case CMD_DOT:
- {
- doctokenizerYYsetStateDot();
- retval = doctokenizerYYlex();
- m_children.append(new DocVerbatim(this,g_context,g_token->verb,DocVerbatim::Dot,g_isExample,g_exampleName));
- if (retval==0) warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: dot section ended without end marker");
- doctokenizerYYsetStatePara();
- }
- break;
- case CMD_MSC:
- {
- doctokenizerYYsetStateMsc();
- retval = doctokenizerYYlex();
- m_children.append(new DocVerbatim(this,g_context,g_token->verb,DocVerbatim::Msc,g_isExample,g_exampleName));
- if (retval==0) warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: msc section ended without end marker");
- doctokenizerYYsetStatePara();
- }
- break;
- case CMD_ENDCODE:
- case CMD_ENDHTMLONLY:
- case CMD_ENDMANONLY:
- case CMD_ENDLATEXONLY:
- case CMD_ENDXMLONLY:
- case CMD_ENDLINK:
- case CMD_ENDVERBATIM:
- case CMD_ENDDOT:
- warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: unexpected command %s",qPrint(g_token->name));
- break;
- case CMD_ENDMSC:
- warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: unexpected command %s",qPrint(g_token->name));
- break;
- case CMD_PARAM:
- retval = handleParamSection(cmdName,DocParamSect::Param,FALSE,g_token->paramDir);
- break;
- case CMD_TPARAM:
- retval = handleParamSection(cmdName,DocParamSect::TemplateParam,FALSE,g_token->paramDir);
- break;
- case CMD_RETVAL:
- retval = handleParamSection(cmdName,DocParamSect::RetVal);
- break;
- case CMD_EXCEPTION:
- retval = handleParamSection(cmdName,DocParamSect::Exception);
- break;
- case CMD_XREFITEM:
- retval = handleXRefItem();
- break;
- case CMD_LINEBREAK:
- {
- DocLineBreak *lb = new DocLineBreak(this);
- m_children.append(lb);
- }
- break;
- case CMD_ANCHOR:
- {
- DocAnchor *anchor = handleAnchor(this);
- if (anchor)
- {
- m_children.append(anchor);
- }
- }
- break;
- case CMD_ADDINDEX:
- {
- DocIndexEntry *ie = new DocIndexEntry(this,
- g_scope!=Doxygen::globalScope?g_scope:0,
- g_memberDef);
- m_children.append(ie);
- retval = ie->parse();
- }
- break;
- case CMD_INTERNAL:
- retval = RetVal_Internal;
- break;
- case CMD_COPYDOC: // fall through
- case CMD_COPYBRIEF: // fall through
- case CMD_COPYDETAILS:
- {
- int tok=doctokenizerYYlex();
- if (tok!=TK_WHITESPACE)
- {
- warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: expected whitespace after %s command",
- qPrint(cmdName));
- break;
- }
- tok=doctokenizerYYlex();
- if (tok==0)
- {
- warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: unexpected end of comment block while parsing the "
- "argument of command %s\n", qPrint(cmdName));
- break;
- }
- else if (tok!=TK_WORD && tok!=TK_LNKWORD)
- {
- warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: unexpected token %s as the argument of %s",
- tokToString(tok),qPrint(cmdName));
- break;
- }
- DocCopy *cpy = new DocCopy(this,g_token->name,
- cmdId==CMD_COPYDOC || cmdId==CMD_COPYBRIEF,
- cmdId==CMD_COPYDOC || cmdId==CMD_COPYDETAILS);
- //m_children.append(cpy);
- cpy->parse(m_children);
- delete cpy;
- }
- break;
- case CMD_INCLUDE:
- handleInclude(cmdName,DocInclude::Include);
- break;
- case CMD_INCWITHLINES:
- handleInclude(cmdName,DocInclude::IncWithLines);
- break;
- case CMD_DONTINCLUDE:
- handleInclude(cmdName,DocInclude::DontInclude);
- break;
- case CMD_HTMLINCLUDE:
- handleInclude(cmdName,DocInclude::HtmlInclude);
- break;
- case CMD_VERBINCLUDE:
- handleInclude(cmdName,DocInclude::VerbInclude);
- break;
- case CMD_SNIPPET:
- handleInclude(cmdName,DocInclude::Snippet);
- break;
- case CMD_SKIP:
- handleIncludeOperator(cmdName,DocIncOperator::Skip);
- break;
- case CMD_UNTIL:
- handleIncludeOperator(cmdName,DocIncOperator::Until);
- break;
- case CMD_SKIPLINE:
- handleIncludeOperator(cmdName,DocIncOperator::SkipLine);
- break;
- case CMD_LINE:
- handleIncludeOperator(cmdName,DocIncOperator::Line);
- break;
- case CMD_IMAGE:
- handleImage(cmdName);
- break;
- case CMD_DOTFILE:
- handleDotFile(cmdName);
- break;
- case CMD_MSCFILE:
- handleMscFile(cmdName);
- break;
- case CMD_LINK:
- handleLink(cmdName,FALSE);
- break;
- case CMD_JAVALINK:
- handleLink(cmdName,TRUE);
- break;
- case CMD_CITE:
- handleCite();
- break;
- case CMD_REF: // fall through
- case CMD_SUBPAGE:
- handleRef(cmdName);
- break;
- case CMD_SECREFLIST:
- {
- DocSecRefList *list = new DocSecRefList(this);
- m_children.append(list);
- list->parse();
- }
- break;
- case CMD_SECREFITEM:
- warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: unexpected command %s",qPrint(g_token->name));
- break;
- case CMD_ENDSECREFLIST:
- warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: unexpected command %s",qPrint(g_token->name));
- break;
- case CMD_FORMULA:
- {
- DocFormula *form=new DocFormula(this,g_token->id);
- m_children.append(form);
- }
- break;
- //case CMD_LANGSWITCH:
- // retval = handleLanguageSwitch();
- // break;
- case CMD_INTERNALREF:
- //warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: unexpected command %s",qPrint(g_token->name));
- {
- DocInternalRef *ref = handleInternalRef(this);
- if (ref)
- {
- m_children.append(ref);
- ref->parse();
- }
- doctokenizerYYsetStatePara();
- }
- break;
- case CMD_INHERITDOC:
- handleInheritDoc();
- break;
- default:
- // we should not get here!
- ASSERT(0);
- break;
- }
- INTERNAL_ASSERT(retval==0 || retval==RetVal_OK || retval==RetVal_SimpleSec ||
- retval==TK_LISTITEM || retval==TK_ENDLIST || retval==TK_NEWPARA ||
- retval==RetVal_Section || retval==RetVal_EndList ||
- retval==RetVal_Internal || retval==RetVal_SwitchLang
- );
- DBG(("handleCommand(%s) end retval=%x\n",qPrint(cmdName),retval));
- return retval;
-}
-
-static bool findAttribute(const HtmlAttribList &tagHtmlAttribs,
- const char *attrName,
- QCString *result)
-{
-
- HtmlAttribListIterator li(tagHtmlAttribs);
- HtmlAttrib *opt;
- for (li.toFirst();(opt=li.current());++li)
- {
- if (opt->name==attrName)
- {
- *result = opt->value;
- return TRUE;
- }
- }
- return FALSE;
-}
-
-int DocPara::handleHtmlStartTag(const QCString &tagName,const HtmlAttribList &tagHtmlAttribs)
-{
- DBG(("handleHtmlStartTag(%s,%d)\n",qPrint(tagName),tagHtmlAttribs.count()));
- int retval=RetVal_OK;
- int tagId = Mappers::htmlTagMapper->map(tagName);
- if (g_token->emptyTag && !(tagId&XML_CmdMask) &&
- tagId!=HTML_UNKNOWN && tagId!=HTML_IMG && tagId!=HTML_BR)
- {
- warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: HTML tags may not use the 'empty tag' XHTML syntax.");
- }
- switch (tagId)
- {
- case HTML_UL:
- {
- DocHtmlList *list = new DocHtmlList(this,tagHtmlAttribs,DocHtmlList::Unordered);
- m_children.append(list);
- retval=list->parse();
- }
- break;
- case HTML_OL:
- {
- DocHtmlList *list = new DocHtmlList(this,tagHtmlAttribs,DocHtmlList::Ordered);
- m_children.append(list);
- retval=list->parse();
- }
- break;
- case HTML_LI:
- if (!insideUL(this) && !insideOL(this))
- {
- warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: lonely <li> tag found");
- }
- else
- {
- retval=RetVal_ListItem;
- }
- break;
- case HTML_BOLD:
- handleStyleEnter(this,m_children,DocStyleChange::Bold,&g_token->attribs);
- break;
- case HTML_CODE:
- if (getLanguageFromFileName(g_fileName)==SrcLangExt_CSharp)
- // for C# code we treat <code> as an XML tag
- {
- doctokenizerYYsetStateXmlCode();
- retval = handleStartCode();
- }
- else // normal HTML markup
- {
- handleStyleEnter(this,m_children,DocStyleChange::Code,&g_token->attribs);
- }
- break;
- case HTML_EMPHASIS:
- handleStyleEnter(this,m_children,DocStyleChange::Italic,&g_token->attribs);
- break;
- case HTML_DIV:
- handleStyleEnter(this,m_children,DocStyleChange::Div,&g_token->attribs);
- break;
- case HTML_SPAN:
- handleStyleEnter(this,m_children,DocStyleChange::Span,&g_token->attribs);
- break;
- case HTML_SUB:
- handleStyleEnter(this,m_children,DocStyleChange::Subscript,&g_token->attribs);
- break;
- case HTML_SUP:
- handleStyleEnter(this,m_children,DocStyleChange::Superscript,&g_token->attribs);
- break;
- case HTML_CENTER:
- handleStyleEnter(this,m_children,DocStyleChange::Center,&g_token->attribs);
- break;
- case HTML_SMALL:
- handleStyleEnter(this,m_children,DocStyleChange::Small,&g_token->attribs);
- break;
- case HTML_PRE:
- handleStyleEnter(this,m_children,DocStyleChange::Preformatted,&g_token->attribs);
- setInsidePreformatted(TRUE);
- //doctokenizerYYsetInsidePre(TRUE);
- break;
- case HTML_P:
- retval=TK_NEWPARA;
- break;
- case HTML_DL:
- {
- DocHtmlDescList *list = new DocHtmlDescList(this,tagHtmlAttribs);
- m_children.append(list);
- retval=list->parse();
- }
- break;
- case HTML_DT:
- retval = RetVal_DescTitle;
- break;
- case HTML_DD:
- warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: Unexpected tag <dd> found");
- break;
- case HTML_TABLE:
- {
- DocHtmlTable *table = new DocHtmlTable(this,tagHtmlAttribs);
- m_children.append(table);
- retval=table->parse();
- }
- break;
- case HTML_TR:
- retval = RetVal_TableRow;
- break;
- case HTML_TD:
- retval = RetVal_TableCell;
- break;
- case HTML_TH:
- retval = RetVal_TableHCell;
- break;
- case HTML_CAPTION:
- warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: Unexpected tag <caption> found");
- break;
- case HTML_BR:
- {
- DocLineBreak *lb = new DocLineBreak(this);
- m_children.append(lb);
- }
- break;
- case HTML_HR:
- {
- DocHorRuler *hr = new DocHorRuler(this);
- m_children.append(hr);
- }
- break;
- case HTML_A:
- retval=handleAHref(this,m_children,tagHtmlAttribs);
- break;
- case HTML_H1:
- retval=handleHtmlHeader(tagHtmlAttribs,1);
- break;
- case HTML_H2:
- retval=handleHtmlHeader(tagHtmlAttribs,2);
- break;
- case HTML_H3:
- retval=handleHtmlHeader(tagHtmlAttribs,3);
- break;
- case HTML_H4:
- retval=handleHtmlHeader(tagHtmlAttribs,4);
- break;
- case HTML_H5:
- retval=handleHtmlHeader(tagHtmlAttribs,5);
- break;
- case HTML_H6:
- retval=handleHtmlHeader(tagHtmlAttribs,6);
- break;
- case HTML_IMG:
- {
- HtmlAttribListIterator li(tagHtmlAttribs);
- HtmlAttrib *opt;
- bool found=FALSE;
- int index=0;
- for (li.toFirst();(opt=li.current());++li,++index)
- {
- //printf("option name=%s value=%s\n",opt->name.data(),opt->value.data());
- if (opt->name=="src" && !opt->value.isEmpty())
- {
- // copy attributes
- HtmlAttribList attrList = tagHtmlAttribs;
- // and remove the src attribute
- bool result = attrList.remove(index);
- ASSERT(result);
- DocImage *img = new DocImage(this,attrList,opt->value,DocImage::Html,opt->value);
- m_children.append(img);
- found = TRUE;
- }
- }
- if (!found)
- {
- warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: IMG tag does not have a SRC attribute!\n");
- }
- }
- break;
- case HTML_BLOCKQUOTE:
- {
- DocHtmlBlockQuote *block = new DocHtmlBlockQuote(this,tagHtmlAttribs);
- m_children.append(block);
- retval = block->parse();
- }
- break;
-
- case XML_SUMMARY:
- case XML_REMARKS:
- case XML_VALUE:
- case XML_PARA:
- if (!m_children.isEmpty())
- {
- retval = TK_NEWPARA;
- }
- break;
- case XML_EXAMPLE:
- case XML_DESCRIPTION:
- if (insideTable(this))
- {
- retval=RetVal_TableCell;
- }
- break;
- case XML_C:
- handleStyleEnter(this,m_children,DocStyleChange::Code,&g_token->attribs);
- break;
- case XML_PARAM:
- case XML_TYPEPARAM:
- {
- QCString paramName;
- if (findAttribute(tagHtmlAttribs,"name",&paramName))
- {
- if (paramName.isEmpty())
- {
- if (Config_getBool("WARN_NO_PARAMDOC"))
- {
- warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: empty 'name' attribute for <param> tag.");
- }
- }
- else
- {
- retval = handleParamSection(paramName,
- tagId==XML_PARAM ? DocParamSect::Param : DocParamSect::TemplateParam,
- TRUE);
- }
- }
- else
- {
- warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: Missing 'name' attribute from <param> tag.");
- }
- }
- break;
- case XML_PARAMREF:
- case XML_TYPEPARAMREF:
- {
- QCString paramName;
- if (findAttribute(tagHtmlAttribs,"name",&paramName))
- {
- //printf("paramName=%s\n",paramName.data());
- m_children.append(new DocStyleChange(this,g_nodeStack.count(),DocStyleChange::Italic,TRUE));
- m_children.append(new DocWord(this,paramName));
- m_children.append(new DocStyleChange(this,g_nodeStack.count(),DocStyleChange::Italic,FALSE));
- if (retval!=TK_WORD) m_children.append(new DocWhiteSpace(this," "));
- }
- else
- {
- warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: Missing 'name' attribute from <param%sref> tag.",tagId==XML_PARAMREF?"":"type");
- }
- }
- break;
- case XML_EXCEPTION:
- {
- QCString exceptName;
- if (findAttribute(tagHtmlAttribs,"cref",&exceptName))
- {
- retval = handleParamSection(exceptName,DocParamSect::Exception,TRUE);
- }
- else
- {
- warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: Missing 'name' attribute from <exception> tag.");
- }
- }
- break;
- case XML_ITEM:
- case XML_LISTHEADER:
- if (insideTable(this))
- {
- retval=RetVal_TableRow;
- }
- else if (insideUL(this) || insideOL(this))
- {
- retval=RetVal_ListItem;
- }
- else
- {
- warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: lonely <item> tag found");
- }
- break;
- case XML_RETURNS:
- retval = handleSimpleSection(DocSimpleSect::Return,TRUE);
- g_hasReturnCommand=TRUE;
- break;
- case XML_TERM:
- //m_children.append(new DocStyleChange(this,g_nodeStack.count(),DocStyleChange::Bold,TRUE));
- if (insideTable(this))
- {
- retval=RetVal_TableCell;
- }
- break;
- case XML_SEE:
- // I'm not sure if <see> is the same as <seealso> or if it
- // should you link a member without producing a section. The
- // C# specification is extremely vague about this (but what else
- // can we expect from Microsoft...)
- {
- QCString cref;
- //printf("XML_SEE: empty tag=%d\n",g_token->emptyTag);
- if (findAttribute(tagHtmlAttribs,"cref",&cref))
- {
- if (g_token->emptyTag) // <see cref="..."/> style
- {
- bool inSeeBlock = g_inSeeBlock;
- g_token->name = cref;
- g_inSeeBlock = TRUE;
- handleLinkedWord(this,m_children);
- g_inSeeBlock = inSeeBlock;
- }
- else // <see cref="...">...</see> style
- {
- //DocRef *ref = new DocRef(this,cref);
- //m_children.append(ref);
- //ref->parse();
- doctokenizerYYsetStatePara();
- DocLink *lnk = new DocLink(this,cref);
- m_children.append(lnk);
- QCString leftOver = lnk->parse(FALSE,TRUE);
- if (!leftOver.isEmpty())
- {
- m_children.append(new DocWord(this,leftOver));
- }
- }
- }
- else
- {
- warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: Missing 'cref' attribute from <see> tag.");
- }
- }
- break;
- case XML_SEEALSO:
- {
- QCString cref;
- if (findAttribute(tagHtmlAttribs,"cref",&cref))
- {
- // Look for an existing "see" section
- DocSimpleSect *ss=0;
- QListIterator<DocNode> cli(m_children);
- DocNode *n;
- for (cli.toFirst();(n=cli.current());++cli)
- {
- if (n->kind()==Kind_SimpleSect && ((DocSimpleSect *)n)->type()==DocSimpleSect::See)
- {
- ss = (DocSimpleSect *)n;
- }
- }
-
- if (!ss) // start new section
- {
- ss=new DocSimpleSect(this,DocSimpleSect::See);
- m_children.append(ss);
- }
-
- ss->appendLinkWord(cref);
- retval = RetVal_OK;
- }
- else
- {
- warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: Missing 'cref' attribute from <seealso> tag.");
- }
- }
- break;
- case XML_LIST:
- {
- QCString type;
- findAttribute(tagHtmlAttribs,"type",&type);
- DocHtmlList::Type listType = DocHtmlList::Unordered;
- HtmlAttribList emptyList;
- if (type=="number")
- {
- listType=DocHtmlList::Ordered;
- }
- if (type=="table")
- {
- DocHtmlTable *table = new DocHtmlTable(this,emptyList);
- m_children.append(table);
- retval=table->parseXml();
- }
- else
- {
- DocHtmlList *list = new DocHtmlList(this,emptyList,listType);
- m_children.append(list);
- retval=list->parseXml();
- }
- }
- break;
- case XML_INCLUDE:
- case XML_PERMISSION:
- // These tags are defined in .Net but are currently unsupported
- break;
- case HTML_UNKNOWN:
- warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: Unsupported xml/html tag <%s> found", qPrint(tagName));
- m_children.append(new DocWord(this, "<"+tagName+tagHtmlAttribs.toString()+">"));
- break;
- case XML_INHERITDOC:
- handleInheritDoc();
- break;
-
- default:
- // we should not get here!
- ASSERT(0);
- break;
- }
- return retval;
-}
-
-int DocPara::handleHtmlEndTag(const QCString &tagName)
-{
- DBG(("handleHtmlEndTag(%s)\n",qPrint(tagName)));
- int tagId = Mappers::htmlTagMapper->map(tagName);
- int retval=RetVal_OK;
- switch (tagId)
- {
- case HTML_UL:
- if (!insideUL(this))
- {
- warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: found </ul> tag without matching <ul>");
- }
- else
- {
- retval=RetVal_EndList;
- }
- break;
- case HTML_OL:
- if (!insideOL(this))
- {
- warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: found </ol> tag without matching <ol>");
- }
- else
- {
- retval=RetVal_EndList;
- }
- break;
- case HTML_LI:
- if (!insideLI(this))
- {
- warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: found </li> tag without matching <li>");
- }
- else
- {
- // ignore </li> tags
- }
- break;
- case HTML_BLOCKQUOTE:
- retval=RetVal_EndBlockQuote;
- break;
- //case HTML_PRE:
- // if (!insidePRE(this))
- // {
- // warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: found </pre> tag without matching <pre>");
- // }
- // else
- // {
- // retval=RetVal_EndPre;
- // }
- // break;
- case HTML_BOLD:
- handleStyleLeave(this,m_children,DocStyleChange::Bold,"b");
- break;
- case HTML_CODE:
- handleStyleLeave(this,m_children,DocStyleChange::Code,"code");
- break;
- case HTML_EMPHASIS:
- handleStyleLeave(this,m_children,DocStyleChange::Italic,"em");
- break;
- case HTML_DIV:
- handleStyleLeave(this,m_children,DocStyleChange::Div,"div");
- break;
- case HTML_SPAN:
- handleStyleLeave(this,m_children,DocStyleChange::Span,"span");
- break;
- case HTML_SUB:
- handleStyleLeave(this,m_children,DocStyleChange::Subscript,"sub");
- break;
- case HTML_SUP:
- handleStyleLeave(this,m_children,DocStyleChange::Superscript,"sup");
- break;
- case HTML_CENTER:
- handleStyleLeave(this,m_children,DocStyleChange::Center,"center");
- break;
- case HTML_SMALL:
- handleStyleLeave(this,m_children,DocStyleChange::Small,"small");
- break;
- case HTML_PRE:
- handleStyleLeave(this,m_children,DocStyleChange::Preformatted,"pre");
- setInsidePreformatted(FALSE);
- //doctokenizerYYsetInsidePre(FALSE);
- break;
- case HTML_P:
- retval=TK_NEWPARA;
- break;
- case HTML_DL:
- retval=RetVal_EndDesc;
- break;
- case HTML_DT:
- // ignore </dt> tag
- break;
- case HTML_DD:
- // ignore </dd> tag
- break;
- case HTML_TABLE:
- retval=RetVal_EndTable;
- break;
- case HTML_TR:
- // ignore </tr> tag
- break;
- case HTML_TD:
- // ignore </td> tag
- break;
- case HTML_TH:
- // ignore </th> tag
- break;
- case HTML_CAPTION:
- warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: Unexpected tag </caption> found");
- break;
- case HTML_BR:
- warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: Illegal </br> tag found\n");
- break;
- case HTML_H1:
- warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: Unexpected tag </h1> found");
- break;
- case HTML_H2:
- warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: Unexpected tag </h2> found");
- break;
- case HTML_H3:
- warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: Unexpected tag </h3> found");
- break;
- case HTML_IMG:
- warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: Unexpected tag </img> found");
- break;
- case HTML_HR:
- warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: Unexpected tag </hr> found");
- break;
- case HTML_A:
- //warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: Unexpected tag </a> found");
- // ignore </a> tag (can be part of <a name=...></a>
- break;
-
- case XML_TERM:
- //m_children.append(new DocStyleChange(this,g_nodeStack.count(),DocStyleChange::Bold,FALSE));
- break;
- case XML_SUMMARY:
- case XML_REMARKS:
- case XML_PARA:
- case XML_VALUE:
- case XML_LIST:
- case XML_EXAMPLE:
- case XML_PARAM:
- case XML_TYPEPARAM:
- case XML_RETURNS:
- case XML_SEE:
- case XML_SEEALSO:
- case XML_EXCEPTION:
- case XML_INHERITDOC:
- retval = RetVal_CloseXml;
- break;
- case XML_C:
- handleStyleLeave(this,m_children,DocStyleChange::Code,"c");
- break;
- case XML_ITEM:
- case XML_LISTHEADER:
- case XML_INCLUDE:
- case XML_PERMISSION:
- case XML_DESCRIPTION:
- case XML_PARAMREF:
- case XML_TYPEPARAMREF:
- // These tags are defined in .Net but are currently unsupported
- break;
- case HTML_UNKNOWN:
- warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: Unsupported xml/html tag </%s> found", qPrint(tagName));
- m_children.append(new DocWord(this,"</"+tagName+">"));
- break;
- default:
- // we should not get here!
- warn_doc_error(g_fileName,doctokenizerYYlineno,"Unexpected end tag %s\n",qPrint(tagName));
- ASSERT(0);
- break;
- }
- return retval;
-}
-
-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;
- while ((tok=doctokenizerYYlex())) // get the next token
- {
-reparsetoken:
- DBG(("token %s at %d",tokToString(tok),doctokenizerYYlineno));
- if (tok==TK_WORD || tok==TK_LNKWORD || tok==TK_SYMBOL || tok==TK_URL ||
- tok==TK_COMMAND || tok==TK_HTMLTAG
- )
- {
- DBG((" name=%s",qPrint(g_token->name)));
- }
- DBG(("\n"));
- switch(tok)
- {
- case TK_WORD:
- m_children.append(new DocWord(this,g_token->name));
- break;
- case TK_LNKWORD:
- handleLinkedWord(this,m_children);
- break;
- case TK_URL:
- m_children.append(new DocURL(this,g_token->name,g_token->isEMailAddr));
- break;
- case TK_WHITESPACE:
- {
- // prevent leading whitespace and collapse multiple whitespace areas
- DocNode::Kind k;
- if (insidePRE(this) || // all whitespace is relevant
- (
- // remove leading whitespace
- !m_children.isEmpty() &&
- // and whitespace after certain constructs
- (k=m_children.last()->kind())!=DocNode::Kind_HtmlDescList &&
- k!=DocNode::Kind_HtmlTable &&
- k!=DocNode::Kind_HtmlList &&
- k!=DocNode::Kind_SimpleSect &&
- k!=DocNode::Kind_AutoList &&
- k!=DocNode::Kind_SimpleList &&
- /*k!=DocNode::Kind_Verbatim &&*/
- k!=DocNode::Kind_HtmlHeader &&
- k!=DocNode::Kind_HtmlBlockQuote &&
- k!=DocNode::Kind_ParamSect &&
- k!=DocNode::Kind_XRefItem
- )
- )
- {
- m_children.append(new DocWhiteSpace(this,g_token->chars));
- }
- }
- break;
- case TK_LISTITEM:
- {
- DBG(("found list item at %d parent=%d\n",g_token->indent,parent()->kind()));
- DocNode *n=parent();
- while (n && n->kind()!=DocNode::Kind_AutoList) n=n->parent();
- if (n) // we found an auto list up in the hierarchy
- {
- DocAutoList *al = (DocAutoList *)n;
- DBG(("previous list item at %d\n",al->indent()));
- if (al->indent()>=g_token->indent)
- // new item at the same or lower indent level
- {
- retval=TK_LISTITEM;
- goto endparagraph;
- }
- }
-
- // determine list depth
- int depth = 0;
- n=parent();
- while(n)
- {
- if (n->kind() == DocNode::Kind_AutoList &&
- ((DocAutoList*)n)->isEnumList()) depth++;
- n=n->parent();
- }
-
- // first item or sub list => create new list
- DocAutoList *al=0;
- do
- {
- al = new DocAutoList(this,g_token->indent,
- g_token->isEnumList,depth);
- m_children.append(al);
- retval = al->parse();
- } while (retval==TK_LISTITEM && // new list
- al->indent()==g_token->indent // at same indent level
- );
-
- // check the return value
- if (retval==RetVal_SimpleSec) // auto list ended due to simple section command
- {
- // Reparse the token that ended the section at this level,
- // so a new simple section will be started at this level.
- // This is the same as unputting the last read token and continuing.
- g_token->name = g_token->simpleSectName;
- if (g_token->name.left(4)=="rcs:") // RCS section
- {
- g_token->name = g_token->name.mid(4);
- g_token->text = g_token->simpleSectText;
- tok = TK_RCSTAG;
- }
- else // other section
- {
- tok = TK_COMMAND;
- }
- DBG(("reparsing command %s\n",qPrint(g_token->name)));
- goto reparsetoken;
- }
- else if (retval==TK_ENDLIST)
- {
- if (al->indent()>g_token->indent) // end list
- {
- goto endparagraph;
- }
- else // continue with current paragraph
- {
- }
- }
- else // paragraph ended due to TK_NEWPARA, TK_LISTITEM, or EOF
- {
- goto endparagraph;
- }
- }
- break;
- case TK_ENDLIST:
- DBG(("Found end of list inside of paragraph at line %d\n",doctokenizerYYlineno));
- if (parent()->kind()==DocNode::Kind_AutoListItem)
- {
- ASSERT(parent()->parent()->kind()==DocNode::Kind_AutoList);
- DocAutoList *al = (DocAutoList *)parent()->parent();
- if (al->indent()>=g_token->indent)
- {
- // end of list marker ends this paragraph
- retval=TK_ENDLIST;
- goto endparagraph;
- }
- else
- {
- warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: End of list marker found "
- "has invalid indent level");
- }
- }
- else
- {
- warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: End of list marker found without any preceding "
- "list items");
- }
- break;
- case TK_COMMAND:
- {
- // see if we have to start a simple section
- int cmd = Mappers::cmdMapper->map(g_token->name);
- DocNode *n=parent();
- while (n &&
- n->kind()!=DocNode::Kind_SimpleSect &&
- n->kind()!=DocNode::Kind_ParamSect
- )
- {
- n=n->parent();
- }
- if (cmd&SIMPLESECT_BIT)
- {
- if (n) // already in a simple section
- {
- // simple section cannot start in this paragraph, need
- // to unwind the stack and remember the command.
- g_token->simpleSectName = g_token->name.copy();
- retval=RetVal_SimpleSec;
- goto endparagraph;
- }
- }
- // see if we are in a simple list
- n=parent();
- while (n && n->kind()!=DocNode::Kind_SimpleListItem) n=n->parent();
- if (n)
- {
- if (cmd==CMD_LI)
- {
- retval=RetVal_ListItem;
- goto endparagraph;
- }
- }
-
- // handle the command
- retval=handleCommand(g_token->name.copy());
- DBG(("handleCommand returns %x\n",retval));
-
- // check the return value
- if (retval==RetVal_SimpleSec)
- {
- // Reparse the token that ended the section at this level,
- // so a new simple section will be started at this level.
- // This is the same as unputting the last read token and continuing.
- g_token->name = g_token->simpleSectName;
- if (g_token->name.left(4)=="rcs:") // RCS section
- {
- g_token->name = g_token->name.mid(4);
- g_token->text = g_token->simpleSectText;
- tok = TK_RCSTAG;
- }
- else // other section
- {
- tok = TK_COMMAND;
- }
- DBG(("reparsing command %s\n",qPrint(g_token->name)));
- goto reparsetoken;
- }
- else if (retval==RetVal_OK)
- {
- // the command ended normally, keep scanning for new tokens.
- retval = 0;
- }
- else if (retval>0 && retval<RetVal_OK)
- {
- // the command ended with a new command, reparse this token
- tok = retval;
- goto reparsetoken;
- }
- else // end of file, end of paragraph, start or end of section
- // or some auto list marker
- {
- goto endparagraph;
- }
- }
- break;
- case TK_HTMLTAG:
- {
- if (!g_token->endTag) // found a start tag
- {
- retval = handleHtmlStartTag(g_token->name,g_token->attribs);
- }
- else // found an end tag
- {
- retval = handleHtmlEndTag(g_token->name);
- }
- if (retval==RetVal_OK)
- {
- // the command ended normally, keep scanner for new tokens.
- retval = 0;
- }
- else
- {
- goto endparagraph;
- }
- }
- break;
- case TK_SYMBOL:
- {
- char letter='\0';
- DocSymbol::SymType s = DocSymbol::decodeSymbol(g_token->name,&letter);
- if (s!=DocSymbol::Unknown)
- {
- m_children.append(new DocSymbol(this,s,letter));
- }
- else
- {
- warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: Unsupported symbol %s found",
- qPrint(g_token->name));
- }
- break;
- }
- case TK_NEWPARA:
- retval=TK_NEWPARA;
- goto endparagraph;
- case TK_RCSTAG:
- {
- DocNode *n=parent();
- while (n &&
- n->kind()!=DocNode::Kind_SimpleSect &&
- n->kind()!=DocNode::Kind_ParamSect
- )
- {
- n=n->parent();
- }
- if (n) // already in a simple section
- {
- // simple section cannot start in this paragraph, need
- // to unwind the stack and remember the command.
- g_token->simpleSectName = "rcs:"+g_token->name;
- g_token->simpleSectText = g_token->text;
- retval=RetVal_SimpleSec;
- goto endparagraph;
- }
-
- // see if we are in a simple list
- DocSimpleSect *ss=new DocSimpleSect(this,DocSimpleSect::Rcs);
- m_children.append(ss);
- ss->parseRcs();
- }
- break;
- default:
- warn_doc_error(g_fileName,doctokenizerYYlineno,
- "warning: Found unexpected token (id=%x)\n",tok);
- break;
- }
- }
- retval=0;
-endparagraph:
- handlePendingStyleCommands(this,m_children);
- DocNode *n = g_nodeStack.pop();
- ASSERT(n==this);
- DBG(("DocPara::parse() end retval=%x\n",retval));
- INTERNAL_ASSERT(retval==0 || retval==TK_NEWPARA || retval==TK_LISTITEM ||
- retval==TK_ENDLIST || retval>RetVal_OK
- );
-
- return retval;
-}
-
-//--------------------------------------------------------------------------
-
-int DocSection::parse()
-{
- DBG(("DocSection::parse() start %s level=%d\n",qPrint(g_token->sectionId),m_level));
- int retval=RetVal_OK;
- g_nodeStack.push(this);
-
- SectionInfo *sec;
- if (!m_id.isEmpty())
- {
- sec=Doxygen::sectionDict[m_id];
- if (sec)
- {
- m_file = sec->fileName;
- m_anchor = sec->label;
- m_title = sec->title;
- if (m_title.isEmpty()) m_title = sec->label;
- if (g_sectionDict && g_sectionDict->find(m_id)==0)
- {
- g_sectionDict->append(m_id,sec);
- }
- }
- }
-
- // first parse any number of paragraphs
- bool isFirst=TRUE;
- DocPara *lastPar=0;
- do
- {
- DocPara *par = new DocPara(this);
- if (isFirst) { par->markFirst(); isFirst=FALSE; }
- retval=par->parse();
- if (!par->isEmpty())
- {
- m_children.append(par);
- lastPar=par;
- }
- else
- {
- delete par;
- }
- if (retval==TK_LISTITEM)
- {
- warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: Invalid list item found");
- }
- } while (retval!=0 &&
- retval!=RetVal_Internal &&
- retval!=RetVal_Section &&
- retval!=RetVal_Subsection &&
- retval!=RetVal_Subsubsection &&
- retval!=RetVal_Paragraph
- );
-
- if (lastPar) lastPar->markLast();
-
- //printf("m_level=%d <-> %d\n",m_level,Doxygen::subpageNestingLevel);
-
- if (retval==RetVal_Subsection && m_level==Doxygen::subpageNestingLevel+1)
- {
- // then parse any number of nested sections
- while (retval==RetVal_Subsection) // more sections follow
- {
- //SectionInfo *sec=Doxygen::sectionDict[g_token->sectionId];
- DocSection *s=new DocSection(this,
- QMIN(2+Doxygen::subpageNestingLevel,5),g_token->sectionId);
- m_children.append(s);
- retval = s->parse();
- }
- }
- else if (retval==RetVal_Subsubsection && m_level==Doxygen::subpageNestingLevel+2)
- {
- // then parse any number of nested sections
- while (retval==RetVal_Subsubsection) // more sections follow
- {
- //SectionInfo *sec=Doxygen::sectionDict[g_token->sectionId];
- DocSection *s=new DocSection(this,
- QMIN(3+Doxygen::subpageNestingLevel,5),g_token->sectionId);
- m_children.append(s);
- retval = s->parse();
- }
- }
- else if (retval==RetVal_Paragraph && m_level==QMIN(5,Doxygen::subpageNestingLevel+3))
- {
- // then parse any number of nested sections
- while (retval==RetVal_Paragraph) // more sections follow
- {
- //SectionInfo *sec=Doxygen::sectionDict[g_token->sectionId];
- DocSection *s=new DocSection(this,
- QMIN(4+Doxygen::subpageNestingLevel,5),g_token->sectionId);
- m_children.append(s);
- retval = s->parse();
- }
- }
- else if ((m_level<=1+Doxygen::subpageNestingLevel && retval==RetVal_Subsubsection) ||
- (m_level<=2+Doxygen::subpageNestingLevel && retval==RetVal_Paragraph)
- )
- {
- int level;
- if (retval==RetVal_Subsection) level=2;
- else if (retval==RetVal_Subsubsection) level=3;
- else level=4;
- warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: Unexpected %s "
- "command found inside %s!",
- sectionLevelToName[level],sectionLevelToName[m_level]);
- retval=0; // stop parsing
-
- }
- else if (retval==RetVal_Internal)
- {
- DocInternal *in = new DocInternal(this);
- m_children.append(in);
- retval = in->parse(m_level+1);
- }
- else
- {
- }
-
- INTERNAL_ASSERT(retval==0 ||
- retval==RetVal_Section ||
- retval==RetVal_Subsection ||
- retval==RetVal_Subsubsection ||
- retval==RetVal_Paragraph ||
- retval==RetVal_Internal
- );
-
- DBG(("DocSection::parse() end\n"));
- DocNode *n = g_nodeStack.pop();
- ASSERT(n==this);
- return retval;
-}
-
-//--------------------------------------------------------------------------
-
-void DocText::parse()
-{
- DBG(("DocText::parse() start\n"));
- g_nodeStack.push(this);
- doctokenizerYYsetStateText();
-
- int tok;
- while ((tok=doctokenizerYYlex())) // get the next token
- {
- switch(tok)
- {
- case TK_WORD:
- m_children.append(new DocWord(this,g_token->name));
- break;
- case TK_WHITESPACE:
- m_children.append(new DocWhiteSpace(this,g_token->chars));
- break;
- case TK_SYMBOL:
- {
- char letter='\0';
- DocSymbol::SymType s = DocSymbol::decodeSymbol(g_token->name,&letter);
- if (s!=DocSymbol::Unknown)
- {
- m_children.append(new DocSymbol(this,s,letter));
- }
- else
- {
- warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: Unsupported symbol %s found",
- qPrint(g_token->name));
- }
- }
- break;
- case TK_COMMAND:
- switch (Mappers::cmdMapper->map(g_token->name))
- {
- case CMD_BSLASH:
- m_children.append(new DocSymbol(this,DocSymbol::BSlash));
- break;
- case CMD_AT:
- m_children.append(new DocSymbol(this,DocSymbol::At));
- break;
- case CMD_LESS:
- m_children.append(new DocSymbol(this,DocSymbol::Less));
- break;
- case CMD_GREATER:
- m_children.append(new DocSymbol(this,DocSymbol::Greater));
- break;
- case CMD_AMP:
- m_children.append(new DocSymbol(this,DocSymbol::Amp));
- break;
- case CMD_DOLLAR:
- m_children.append(new DocSymbol(this,DocSymbol::Dollar));
- break;
- case CMD_HASH:
- m_children.append(new DocSymbol(this,DocSymbol::Hash));
- break;
- case CMD_DCOLON:
- m_children.append(new DocSymbol(this,DocSymbol::DoubleColon));
- break;
- case CMD_PERCENT:
- m_children.append(new DocSymbol(this,DocSymbol::Percent));
- break;
- case CMD_QUOTE:
- m_children.append(new DocSymbol(this,DocSymbol::Quot));
- break;
- default:
- warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: Unexpected command `%s' found",
- qPrint(g_token->name));
- break;
- }
- break;
- default:
- warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: Unexpected token %s",
- tokToString(tok));
- break;
- }
- }
-
- handleUnclosedStyleCommands();
-
- DocNode *n = g_nodeStack.pop();
- ASSERT(n==this);
- DBG(("DocText::parse() end\n"));
-}
-
-
-//--------------------------------------------------------------------------
-
-void DocRoot::parse()
-{
- DBG(("DocRoot::parse() start\n"));
- g_nodeStack.push(this);
- doctokenizerYYsetStatePara();
- int retval=0;
-
- // first parse any number of paragraphs
- bool isFirst=TRUE;
- DocPara *lastPar=0;
- do
- {
- DocPara *par = new DocPara(this);
- if (isFirst) { par->markFirst(); isFirst=FALSE; }
- retval=par->parse();
- if (!par->isEmpty())
- {
- m_children.append(par);
- lastPar=par;
- }
- else
- {
- delete par;
- }
- if (retval==TK_LISTITEM)
- {
- warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: Invalid list item found");
- }
- else if (retval==RetVal_Subsection)
- {
- warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: found subsection command outside of section context!");
- }
- else if (retval==RetVal_Subsubsection)
- {
- warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: found subsubsection command outside of subsection context!");
- }
- else if (retval==RetVal_Paragraph)
- {
- warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: found paragraph command outside of subsubsection context!");
- }
- } while (retval!=0 && retval!=RetVal_Section && retval!=RetVal_Internal);
- if (lastPar) lastPar->markLast();
-
- //printf("DocRoot::parse() retval=%d %d\n",retval,RetVal_Section);
- // then parse any number of level1 sections
- while (retval==RetVal_Section)
- {
- SectionInfo *sec=Doxygen::sectionDict[g_token->sectionId];
- if (sec)
- {
- DocSection *s=new DocSection(this,
- QMIN(1+Doxygen::subpageNestingLevel,5),g_token->sectionId);
- m_children.append(s);
- retval = s->parse();
- }
- else
- {
- warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: Invalid section id `%s'; ignoring section",qPrint(g_token->sectionId));
- retval = 0;
- }
- }
-
- if (retval==RetVal_Internal)
- {
- DocInternal *in = new DocInternal(this);
- m_children.append(in);
- retval = in->parse(1);
- }
-
-
- handleUnclosedStyleCommands();
-
- DocNode *n = g_nodeStack.pop();
- ASSERT(n==this);
- DBG(("DocRoot::parse() end\n"));
-}
-
-//--------------------------------------------------------------------------
-
-DocNode *validatingParseDoc(const char *fileName,int startLine,
- Definition *ctx,MemberDef *md,
- const char *input,bool indexWords,
- bool isExample, const char *exampleName,
- bool singleLine, bool linkFromIndex)
-{
- //printf("validatingParseDoc(%s,%s)=[%s]\n",ctx?ctx->name().data():"<none>",
- // md?md->name().data():"<none>",
- // input);
- //printf("========== validating %s at line %d\n",fileName,startLine);
- //printf("---------------- input --------------------\n%s\n----------- end input -------------------\n",input);
- //g_token = new TokenInfo;
-
- // store parser state so we can re-enter this function if needed
- //bool fortranOpt = Config_getBool("OPTIMIZE_FOR_FORTRAN");
- docParserPushContext();
-
- if (ctx && ctx!=Doxygen::globalScope &&
- (ctx->definitionType()==Definition::TypeClass ||
- ctx->definitionType()==Definition::TypeNamespace
- )
- )
- {
- g_context = ctx->name();
- }
- else if (ctx && ctx->definitionType()==Definition::TypePage)
- {
- Definition *scope = ((PageDef*)ctx)->getPageScope();
- if (scope && scope!=Doxygen::globalScope) g_context = scope->name();
- }
- else if (ctx && ctx->definitionType()==Definition::TypeGroup)
- {
- Definition *scope = ((GroupDef*)ctx)->getGroupScope();
- if (scope && scope!=Doxygen::globalScope) g_context = scope->name();
- }
- else
- {
- g_context = "";
- }
- g_scope = ctx;
-
- if (indexWords && md && Doxygen::searchIndex)
- {
- g_searchUrl=md->getOutputFileBase();
- Doxygen::searchIndex->setCurrentDoc(
- (md->getLanguage()==SrcLangExt_Fortran ?
- theTranslator->trSubprogram(TRUE,TRUE):
- theTranslator->trMember(TRUE,TRUE))+" "+md->qualifiedName(),
- g_searchUrl,
- md->anchor());
- }
- else if (indexWords && ctx && Doxygen::searchIndex)
- {
- g_searchUrl=ctx->getOutputFileBase();
- QCString name = ctx->qualifiedName();
-
- SrcLangExt lang = ctx->getLanguage();
- QCString sep = getLanguageSpecificSeparator(lang);
- if (sep!="::")
- {
- name = substitute(name,"::",sep);
- }
-
- switch (ctx->definitionType())
- {
- case Definition::TypePage:
- {
- PageDef *pd = (PageDef *)ctx;
- if (!pd->title().isEmpty())
- {
- name = theTranslator->trPage(TRUE,TRUE)+" "+pd->title();
- }
- else
- {
- name = theTranslator->trPage(TRUE,TRUE)+" "+pd->name();
- }
- }
- break;
- case Definition::TypeClass:
- {
- ClassDef *cd = (ClassDef *)ctx;
- name.prepend(cd->compoundTypeString()+" ");
- }
- break;
- case Definition::TypeNamespace:
- {
- if (lang==SrcLangExt_Java || lang==SrcLangExt_CSharp)
- {
- name = theTranslator->trPackage(name);
- }
- else if (lang==SrcLangExt_Fortran)
- {
- name.prepend(theTranslator->trModule(TRUE,TRUE)+" ");
- }
- else
- {
- name.prepend(theTranslator->trNamespace(TRUE,TRUE)+" ");
- }
- }
- break;
- case Definition::TypeGroup:
- {
- GroupDef *gd = (GroupDef *)ctx;
- if (gd->groupTitle())
- {
- name = theTranslator->trGroup(TRUE,TRUE)+" "+gd->groupTitle();
- }
- else
- {
- name.prepend(theTranslator->trGroup(TRUE,TRUE)+" ");
- }
- }
- break;
- default:
- break;
- }
- Doxygen::searchIndex->setCurrentDoc(name,g_searchUrl);
- }
- else
- {
- g_searchUrl="";
- }
-
- g_fileName = fileName;
- g_relPath = (!linkFromIndex && ctx) ?
- QCString(relativePathToRoot(ctx->getOutputFileBase())) :
- QCString("");
- //printf("ctx->name=%s relPath=%s\n",ctx->name().data(),g_relPath.data());
- g_memberDef = md;
- g_nodeStack.clear();
- g_styleStack.clear();
- g_initialStyleStack.clear();
- g_inSeeBlock = FALSE;
- g_insideHtmlLink = FALSE;
- g_includeFileText = "";
- g_includeFileOffset = 0;
- g_includeFileLength = 0;
- g_isExample = isExample;
- g_exampleName = exampleName;
- g_hasParamCommand = FALSE;
- g_hasReturnCommand = FALSE;
- g_paramsFound.setAutoDelete(FALSE);
- g_paramsFound.clear();
- g_sectionDict = 0; //sections;
-
- //printf("Starting comment block at %s:%d\n",g_fileName.data(),startLine);
- doctokenizerYYlineno=startLine;
- doctokenizerYYinit(input,g_fileName);
-
-
- // build abstract syntax tree
- DocRoot *root = new DocRoot(md!=0,singleLine);
- root->parse();
-
-
- if (Debug::isFlagSet(Debug::PrintTree))
- {
- // pretty print the result
- PrintDocVisitor *v = new PrintDocVisitor;
- root->accept(v);
- delete v;
- }
-
- checkUndocumentedParams();
- detectNoDocumentedParams();
-
- // TODO: These should be called at the end of the program.
- //doctokenizerYYcleanup();
- //Mappers::cmdMapper->freeInstance();
- //Mappers::htmlTagMapper->freeInstance();
-
- // restore original parser state
- docParserPopContext();
-
- //printf(">>>>>> end validatingParseDoc(%s,%s)\n",ctx?ctx->name().data():"<none>",
- // md?md->name().data():"<none>");
-
- return root;
-}
-
-DocNode *validatingParseText(const char *input)
-{
- // store parser state so we can re-enter this function if needed
- docParserPushContext();
-
- //printf("------------ input ---------\n%s\n"
- // "------------ end input -----\n",input);
- //g_token = new TokenInfo;
- g_context = "";
- g_fileName = "<parseText>";
- g_relPath = "";
- g_memberDef = 0;
- g_nodeStack.clear();
- g_styleStack.clear();
- g_initialStyleStack.clear();
- g_inSeeBlock = FALSE;
- g_insideHtmlLink = FALSE;
- g_includeFileText = "";
- g_includeFileOffset = 0;
- g_includeFileLength = 0;
- g_isExample = FALSE;
- g_exampleName = "";
- g_hasParamCommand = FALSE;
- g_hasReturnCommand = FALSE;
- g_paramsFound.setAutoDelete(FALSE);
- g_paramsFound.clear();
- g_searchUrl="";
-
- DocText *txt = new DocText;
-
- if (input)
- {
- doctokenizerYYlineno=1;
- doctokenizerYYinit(input,g_fileName);
-
- // build abstract syntax tree
- txt->parse();
-
- if (Debug::isFlagSet(Debug::PrintTree))
- {
- // pretty print the result
- PrintDocVisitor *v = new PrintDocVisitor;
- txt->accept(v);
- delete v;
- }
- }
-
- // restore original parser state
- docParserPopContext();
- return txt;
-}
-
-void docFindSections(const char *input,
- Definition *d,
- MemberGroup *mg,
- const char *fileName)
-{
- doctokenizerYYFindSections(input,d,mg,fileName);
-}
-
-void initDocParser()
-{
- static bool searchEngine = Config_getBool("SEARCHENGINE");
- static bool serverBasedSearch = Config_getBool("SERVER_BASED_SEARCH");
- if (searchEngine && serverBasedSearch)
- {
- Doxygen::searchIndex = new SearchIndex;
- }
- else // no search engine or pure javascript based search function
- {
- Doxygen::searchIndex = 0;
- }
-}
-
-void finializeDocParser()
-{
- delete Doxygen::searchIndex;
-}
-
diff --git a/trunk/src/docparser.h b/trunk/src/docparser.h
deleted file mode 100644
index 8e2fae2..0000000
--- a/trunk/src/docparser.h
+++ /dev/null
@@ -1,1284 +0,0 @@
-/******************************************************************************
- *
- *
- *
- *
- * Copyright (C) 1997-2012 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.
- *
- */
-
-#ifndef _DOCPARSER_H
-#define _DOCPARSER_H
-
-#include <stdio.h>
-
-#include <qlist.h>
-#include <qcstring.h>
-
-#include "docvisitor.h"
-#include "htmlattrib.h"
-
-class DocNode;
-class MemberDef;
-class Definition;
-class MemberGroup;
-class SectionDict;
-
-//---------------------------------------------------------------------------
-
-/*! Initialize the documentation parser */
-void initDocParser();
-/*! Cleanup the documentation parser */
-void finializeDocParser();
-
-/*! Main entry point for the documentation parser.
- * @param fileName File in which the documentation block is found (or the
- * name of the example file in case isExample is TRUE).
- * @param startLine Line at which the documentation block is found.
- * @param context Class or namespace to which this block belongs.
- * @param md Member definition to which the documentation belongs.
- * Can be 0.
- * @param input String representation of the documentation block.
- * @param indexWords Indicates whether or not words should be put in the
- * search index.
- * @param isExample TRUE if the documentation belongs to an example.
- * @param exampleName Base name of the example file (0 if isExample is FALSE).
- * @param singleLine Output should be presented on a single line, so without
- * starting a new paragraph at the end.
- * @param linkFromIndex TRUE if the documentation is generated from an
- * index page. In this case context is not used to determine
- * the relative path when making a link.
- * @returns Root node of the abstract syntax tree. Ownership of the
- * pointer is handed over to the caller.
- */
-DocNode *validatingParseDoc(const char *fileName,int startLine,
- Definition *context, MemberDef *md,
- const char *input,bool indexWords,
- bool isExample,const char *exampleName=0,
- bool singleLine=FALSE,bool linkFromIndex=FALSE);
-
-/*! Main entry point for parsing simple text fragments. These
- * fragments are limited to words, whitespace and symbols.
- */
-DocNode *validatingParseText(const char *input);
-
-/*! Searches for section and anchor commands in the input */
-void docFindSections(const char *input,
- Definition *d,
- MemberGroup *m,
- const char *fileName);
-
-//---------------------------------------------------------------------------
-
-/*! @brief Abstract node interface with type information. */
-class DocNode
-{
- public:
- /*! Available node types. */
- enum Kind { Kind_Root = 0,
- Kind_Word = 1,
- Kind_WhiteSpace = 2,
- Kind_Para = 3,
- Kind_AutoList = 4,
- Kind_AutoListItem = 5,
- Kind_Symbol = 6,
- Kind_URL = 7,
- Kind_StyleChange = 8,
- Kind_SimpleSect = 9,
- Kind_Title = 10,
- Kind_SimpleList = 11,
- Kind_SimpleListItem = 12,
- Kind_Section = 13,
- Kind_Verbatim = 14,
- Kind_XRefItem = 15,
- Kind_HtmlList = 16,
- Kind_HtmlListItem = 17,
- Kind_HtmlDescList = 18,
- Kind_HtmlDescData = 19,
- Kind_HtmlDescTitle = 20,
- Kind_HtmlTable = 21,
- Kind_HtmlRow = 22,
- Kind_HtmlCell = 23,
- Kind_HtmlCaption = 24,
- Kind_LineBreak = 25,
- Kind_HorRuler = 26,
- Kind_Anchor = 27,
- Kind_IndexEntry = 28,
- Kind_Internal = 29,
- Kind_HRef = 30,
- Kind_Include = 31,
- Kind_IncOperator = 32,
- Kind_HtmlHeader = 33,
- Kind_Image = 34,
- Kind_DotFile = 35,
- Kind_Link = 36,
- Kind_Ref = 37,
- Kind_Formula = 38,
- Kind_SecRefItem = 39,
- Kind_SecRefList = 40,
- Kind_SimpleSectSep = 41,
- Kind_LinkedWord = 42,
- Kind_ParamSect = 43,
- Kind_ParamList = 44,
- Kind_InternalRef = 45,
- Kind_Copy = 46,
- Kind_Text = 47,
- Kind_MscFile = 48,
- Kind_HtmlBlockQuote = 49
- };
- /*! Creates a new node */
- DocNode() : m_parent(0), m_insidePre(FALSE) {}
-
- /*! Destroys a node. */
- virtual ~DocNode() {}
-
- /*! Returns the kind of node. Provides runtime type information */
- virtual Kind kind() const = 0;
-
- /*! Returns the parent of this node or 0 for the root node. */
- DocNode *parent() const { return m_parent; }
-
- /*! Sets a new parent for this node. */
- void setParent(DocNode *parent) { m_parent = parent; }
-
- /*! Acceptor function for node visitors. Part of the visitor pattern.
- * @param v Abstract visitor.
- */
- virtual void accept(DocVisitor *v) = 0;
-
- /*! Returns TRUE iff this node is inside a preformatted section */
- bool isPreformatted() const { return m_insidePre; }
-
- protected:
- /*! Sets whether or not this item is inside a preformatted section */
- void setInsidePreformatted(bool p) { m_insidePre = p; }
- DocNode *m_parent;
- private:
-
- bool m_insidePre;
-};
-
-/*! @brief Default accept implementation for compound nodes in the abstract
- * syntax tree.
- */
-template<class T> class CompAccept
-{
- public:
- CompAccept() { m_children.setAutoDelete(TRUE); }
- virtual ~CompAccept() {}
- void accept(T *obj, DocVisitor *v)
- {
- v->visitPre(obj);
- QListIterator<DocNode> cli(m_children);
- DocNode *n;
- for (cli.toFirst();(n=cli.current());++cli) n->accept(v);
- v->visitPost(obj);
- }
- const QList<DocNode> &children() const { return m_children; }
- QList<DocNode> &children() { return m_children; }
-
- protected:
- QList<DocNode> m_children;
-};
-
-
-/*! @brief Node representing a word
- */
-class DocWord : public DocNode
-{
- public:
- DocWord(DocNode *parent,const QCString &word);
- QCString word() const { return m_word; }
- Kind kind() const { return Kind_Word; }
- void accept(DocVisitor *v) { v->visit(this); }
-
- private:
- QCString m_word;
-};
-
-/*! @brief Node representing a word that can be linked to something
- */
-class DocLinkedWord : public DocNode
-{
- public:
- DocLinkedWord(DocNode *parent,const QCString &word,
- const QCString &ref,const QCString &file,
- const QCString &anchor,const QCString &tooltip);
- QCString word() const { return m_word; }
- Kind kind() const { return Kind_LinkedWord; }
- QCString file() const { return m_file; }
- QCString relPath() const { return m_relPath; }
- QCString ref() const { return m_ref; }
- QCString anchor() const { return m_anchor; }
- QCString tooltip() const { return m_tooltip; }
- void accept(DocVisitor *v) { v->visit(this); }
-
- private:
- QCString m_word;
- QCString m_ref;
- QCString m_file;
- QCString m_relPath;
- QCString m_anchor;
- QCString m_tooltip;
-};
-
-/*! @brief Node representing an URL (or email address) */
-class DocURL : public DocNode
-{
- public:
- DocURL(DocNode *parent,const QCString &url,bool isEmail) :
- m_url(url), m_isEmail(isEmail) { m_parent=parent; }
- QCString url() const { return m_url; }
- Kind kind() const { return Kind_URL; }
- void accept(DocVisitor *v) { v->visit(this); }
- bool isEmail() const { return m_isEmail; }
-
- private:
- QCString m_url;
- bool m_isEmail;
-};
-
-/*! @brief Node representing a line break */
-class DocLineBreak : public DocNode
-{
- public:
- DocLineBreak(DocNode *parent) { m_parent=parent; }
- Kind kind() const { return Kind_LineBreak; }
- void accept(DocVisitor *v) { v->visit(this); }
-
- private:
-};
-
-/*! @brief Node representing a horizonal ruler */
-class DocHorRuler : public DocNode
-{
- public:
- DocHorRuler(DocNode *parent) { m_parent = parent; }
- Kind kind() const { return Kind_HorRuler; }
- void accept(DocVisitor *v) { v->visit(this); }
-
- private:
-};
-
-/*! @brief Node representing an anchor */
-class DocAnchor : public DocNode
-{
- public:
- DocAnchor(DocNode *parent,const QCString &id,bool newAnchor);
- Kind kind() const { return Kind_Anchor; }
- QCString anchor() const { return m_anchor; }
- QCString file() const { return m_file; }
- void accept(DocVisitor *v) { v->visit(this); }
-
- private:
- QCString m_anchor;
- QCString m_file;
-};
-
-/*! @brief Node representing a citation of some bibliographic reference */
-class DocCite : public DocNode
-{
- public:
- DocCite(DocNode *parent,const QCString &target,const QCString &context);
- Kind kind() const { return Kind_Ref; }
- QCString file() const { return m_file; }
- QCString relPath() const { return m_relPath; }
- QCString ref() const { return m_ref; }
- QCString anchor() const { return m_anchor; }
- QCString text() const { return m_text; }
- void accept(DocVisitor *v) { v->visit(this); }
-
- private:
- QCString m_file;
- QCString m_relPath;
- QCString m_ref;
- QCString m_anchor;
- QCString m_text;
-};
-
-
-/*! @brief Node representing a style change */
-class DocStyleChange : public DocNode
-{
- public:
- enum Style { Bold, Italic, Code, Center, Small,
- Subscript, Superscript, Preformatted,
- Span, Div
- };
- DocStyleChange(DocNode *parent,uint position,Style s,bool enable,
- const HtmlAttribList *attribs=0) :
- m_position(position), m_style(s), m_enable(enable)
- { m_parent = parent; if (attribs) m_attribs=*attribs; }
- Kind kind() const { return Kind_StyleChange; }
- Style style() const { return m_style; }
- const char *styleString() const;
- bool enable() const { return m_enable; }
- uint position() const { return m_position; }
- void accept(DocVisitor *v) { v->visit(this); }
- const HtmlAttribList &attribs() const { return m_attribs; }
-
- private:
- uint m_position;
- Style m_style;
- bool m_enable;
- HtmlAttribList m_attribs;
-};
-
-/*! @brief Node representing a special symbol */
-class DocSymbol : public DocNode
-{
- public:
- enum SymType { Unknown=0, BSlash, At, Less, Greater, Amp, Dollar, Hash,
- DoubleColon, Percent, Copy, Tm, Reg, Apos, Quot, Uml, Acute,
- Grave, Circ, Tilde, Szlig, Cedil, Ring, Nbsp, Slash,
- Lsquo, Rsquo, Ldquo, Rdquo, Ndash, Mdash, Aelig, AElig
- };
- DocSymbol(DocNode *parent,SymType s,char letter='\0') :
- m_symbol(s), m_letter(letter) { m_parent = parent; }
- SymType symbol() const { return m_symbol; }
- char letter() const { return m_letter; }
- Kind kind() const { return Kind_Symbol; }
- void accept(DocVisitor *v) { v->visit(this); }
- static SymType decodeSymbol(const QCString &symName,char *letter);
-
- private:
- SymType m_symbol;
- char m_letter;
-};
-
-/*! @brief Node representing some amount of white space */
-class DocWhiteSpace : public DocNode
-{
- public:
- DocWhiteSpace(DocNode *parent,const QCString &chars) :
- m_chars(chars) { m_parent = parent; }
- Kind kind() const { return Kind_WhiteSpace; }
- QCString chars() const { return m_chars; }
- void accept(DocVisitor *v) { v->visit(this); }
- private:
- QCString m_chars;
-};
-
-/*! @brief Node representing a verbatim, unparsed text fragment */
-class DocVerbatim : public DocNode
-{
- public:
- enum Type { Code, HtmlOnly, ManOnly, LatexOnly, XmlOnly, Verbatim, Dot, Msc };
- DocVerbatim(DocNode *parent,const QCString &context,
- const QCString &text, Type t,bool isExample,
- const QCString &exampleFile,const QCString &lang=QCString());
- Kind kind() const { return Kind_Verbatim; }
- Type type() const { return m_type; }
- QCString text() const { return m_text; }
- QCString context() const { return m_context; }
- void accept(DocVisitor *v) { v->visit(this); }
- bool isExample() const { return m_isExample; }
- QCString exampleFile() const { return m_exampleFile; }
- QCString relPath() const { return m_relPath; }
- QCString language() const { return m_lang; }
-
- private:
- QCString m_context;
- QCString m_text;
- Type m_type;
- bool m_isExample;
- QCString m_exampleFile;
- QCString m_relPath;
- QCString m_lang;
-};
-
-
-/*! @brief Node representing an included text block from file */
-class DocInclude : public DocNode
-{
- public:
- enum Type { Include, DontInclude, VerbInclude, HtmlInclude, IncWithLines, Snippet };
- DocInclude(DocNode *parent,const QCString &file,
- const QCString context, Type t,
- bool isExample,const QCString exampleFile,
- const QCString blockId) :
- m_file(file), m_context(context), m_type(t),
- m_isExample(isExample), m_exampleFile(exampleFile),
- m_blockId(blockId) { m_parent = parent; }
- Kind kind() const { return Kind_Include; }
- QCString file() const { return m_file; }
- QCString extension() const { int i=m_file.findRev('.');
- if (i!=-1)
- return m_file.right(m_file.length()-i);
- else
- return "";
- }
- Type type() const { return m_type; }
- QCString text() const { return m_text; }
- QCString context() const { return m_context; }
- QCString blockId() const { return m_blockId; }
- bool isExample() const { return m_isExample; }
- QCString exampleFile() const { return m_exampleFile; }
- void accept(DocVisitor *v) { v->visit(this); }
- void parse();
-
- private:
- QCString m_file;
- QCString m_context;
- QCString m_text;
- Type m_type;
- bool m_isExample;
- QCString m_exampleFile;
- QCString m_blockId;
-};
-
-/*! @brief Node representing a include/dontinclude operator block */
-class DocIncOperator : public DocNode
-{
- public:
- enum Type { Line, SkipLine, Skip, Until };
- DocIncOperator(DocNode *parent,Type t,const QCString &pat,
- const QCString &context,bool isExample,const QCString &exampleFile) :
- m_type(t), m_pattern(pat), m_context(context),
- m_isFirst(FALSE), m_isLast(FALSE),
- m_isExample(isExample), m_exampleFile(exampleFile) { m_parent = parent; }
- Kind kind() const { return Kind_IncOperator; }
- Type type() const { return m_type; }
- QCString text() const { return m_text; }
- QCString pattern() const { return m_pattern; }
- QCString context() const { return m_context; }
- void accept(DocVisitor *v) { v->visit(this); }
- bool isFirst() const { return m_isFirst; }
- bool isLast() const { return m_isLast; }
- void markFirst(bool v=TRUE) { m_isFirst = v; }
- void markLast(bool v=TRUE) { m_isLast = v; }
- bool isExample() const { return m_isExample; }
- QCString exampleFile() const { return m_exampleFile; }
- void parse();
-
- private:
- Type m_type;
- QCString m_text;
- QCString m_pattern;
- QCString m_context;
- bool m_isFirst;
- bool m_isLast;
- bool m_isExample;
- QCString m_exampleFile;
-};
-
-/*! @brief Node representing an item of a cross-referenced list */
-class DocFormula : public DocNode
-{
- public:
- DocFormula(DocNode *parent,int id);
- Kind kind() const { return Kind_Formula; }
- QCString name() const { return m_name; }
- QCString text() const { return m_text; }
- QCString relPath() const { return m_relPath; }
- int id() const { return m_id; }
- void accept(DocVisitor *v) { v->visit(this); }
- bool isInline() { return m_text.length()>0 ? m_text.at(0)!='\\' : TRUE; }
-
- private:
- QCString m_name;
- QCString m_text;
- QCString m_relPath;
- int m_id;
-};
-
-/*! @brief Node representing an entry in the index. */
-class DocIndexEntry : public DocNode
-{
- public:
- DocIndexEntry(DocNode *parent,Definition *scope,MemberDef *md)
- : m_scope(scope), m_member(md) { m_parent = parent; }
- Kind kind() const { return Kind_IndexEntry; }
- int parse();
- Definition *scope() const { return m_scope; }
- MemberDef *member() const { return m_member; }
- QCString entry() const { return m_entry; }
- void accept(DocVisitor *v) { v->visit(this); }
-
- private:
- QCString m_entry;
- Definition *m_scope;
- MemberDef *m_member;
-};
-
-//-----------------------------------------------------------------------
-
-/*! @brief Node representing a copy of documentation block. */
-class DocCopy : /*public CompAccept<DocCopy>,*/ public DocNode
-{
- public:
- DocCopy(DocNode *parent,const QCString &link,bool copyBrief,bool copyDetails)
- : m_link(link),
- m_copyBrief(copyBrief), m_copyDetails(copyDetails) { m_parent = parent; }
- Kind kind() const { return Kind_Copy; }
- QCString link() const { return m_link; }
- void accept(DocVisitor * /*v*/) { /*CompAccept<DocCopy>::accept(this,v);*/ }
- void parse(QList<DocNode> &children);
-
- private:
- QCString m_link;
- bool m_copyBrief;
- bool m_copyDetails;
-};
-
-/*! @brief Node representing an auto List */
-class DocAutoList : public CompAccept<DocAutoList>, public DocNode
-{
- public:
- DocAutoList(DocNode *parent,int indent,bool isEnumList,int depth);
- Kind kind() const { return Kind_AutoList; }
- bool isEnumList() const { return m_isEnumList; }
- int indent() const { return m_indent; }
- int depth() const { return m_depth; }
- void accept(DocVisitor *v) { CompAccept<DocAutoList>::accept(this,v); }
- int parse();
-
- private:
- int m_indent;
- bool m_isEnumList;
- int m_depth;
-};
-
-/*! @brief Node representing an item of a auto list */
-class DocAutoListItem : public CompAccept<DocAutoListItem>, public DocNode
-{
- public:
- DocAutoListItem(DocNode *parent,int indent,int num);
- Kind kind() const { return Kind_AutoListItem; }
- int itemNumber() const { return m_itemNum; }
- void accept(DocVisitor *v) { CompAccept<DocAutoListItem>::accept(this,v); }
- int parse();
-
- private:
- int m_indent;
- int m_itemNum;
-};
-
-
-
-/*! @brief Node representing a simple section title */
-class DocTitle : public CompAccept<DocTitle>, public DocNode
-{
- public:
- DocTitle(DocNode *parent) { m_parent = parent; }
- void parse();
- void parseFromString(const QCString &title);
- Kind kind() const { return Kind_Title; }
- void accept(DocVisitor *v) { CompAccept<DocTitle>::accept(this,v); }
-
- private:
-};
-
-/*! @brief Node representing an item of a cross-referenced list */
-class DocXRefItem : public CompAccept<DocXRefItem>, public DocNode
-{
- public:
- //enum Type { Bug, Test, Todo, Deprecated };
- DocXRefItem(DocNode *parent,int id,const char *key);
- Kind kind() const { return Kind_XRefItem; }
- QCString file() const { return m_file; }
- QCString anchor() const { return m_anchor; }
- QCString title() const { return m_title; }
- QCString relPath() const { return m_relPath; }
- QCString key() const { return m_key; }
- void accept(DocVisitor *v) { CompAccept<DocXRefItem>::accept(this,v); }
- bool parse();
-
- private:
- int m_id;
- QCString m_key;
- QCString m_file;
- QCString m_anchor;
- QCString m_title;
- QCString m_relPath;
-};
-
-/*! @brief Node representing an image */
-class DocImage : public CompAccept<DocImage>, public DocNode
-{
- public:
- enum Type { Html, Latex, Rtf };
- DocImage(DocNode *parent,const HtmlAttribList &attribs,
- const QCString &name,Type t,const QCString &url=QCString());
- Kind kind() const { return Kind_Image; }
- Type type() const { return m_type; }
- QCString name() const { return m_name; }
- bool hasCaption() const { return !m_children.isEmpty(); }
- QCString width() const { return m_width; }
- QCString height() const { return m_height; }
- QCString relPath() const { return m_relPath; }
- QCString url() const { return m_url; }
- const HtmlAttribList &attribs() const { return m_attribs; }
- void accept(DocVisitor *v) { CompAccept<DocImage>::accept(this,v); }
- void parse();
-
- private:
- HtmlAttribList m_attribs;
- QCString m_name;
- Type m_type;
- QCString m_width;
- QCString m_height;
- QCString m_relPath;
- QCString m_url;
-};
-
-/*! @brief Node representing a dot file */
-class DocDotFile : public CompAccept<DocDotFile>, public DocNode
-{
- public:
- DocDotFile(DocNode *parent,const QCString &name,const QCString &context);
- void parse();
- Kind kind() const { return Kind_DotFile; }
- QCString name() const { return m_name; }
- QCString file() const { return m_file; }
- QCString relPath() const { return m_relPath; }
- bool hasCaption() const { return !m_children.isEmpty(); }
- QCString width() const { return m_width; }
- QCString height() const { return m_height; }
- QCString context() const { return m_context; }
- void accept(DocVisitor *v) { CompAccept<DocDotFile>::accept(this,v); }
- private:
- QCString m_name;
- QCString m_file;
- QCString m_relPath;
- QCString m_width;
- QCString m_height;
- QCString m_context;
-};
-
-/*! @brief Node representing a msc file */
-class DocMscFile : public CompAccept<DocMscFile>, public DocNode
-{
- public:
- DocMscFile(DocNode *parent,const QCString &name,const QCString &context);
- void parse();
- Kind kind() const { return Kind_MscFile; }
- QCString name() const { return m_name; }
- QCString file() const { return m_file; }
- QCString relPath() const { return m_relPath; }
- bool hasCaption() const { return !m_children.isEmpty(); }
- QCString width() const { return m_width; }
- QCString height() const { return m_height; }
- QCString context() const { return m_context; }
- void accept(DocVisitor *v) { CompAccept<DocMscFile>::accept(this,v); }
- private:
- QCString m_name;
- QCString m_file;
- QCString m_relPath;
- QCString m_width;
- QCString m_height;
- QCString m_context;
-};
-
-
-/*! @brief Node representing a link to some item */
-class DocLink : public CompAccept<DocLink>, public DocNode
-{
- public:
- DocLink(DocNode *parent,const QCString &target);
- QCString parse(bool,bool isXmlLink=FALSE);
- Kind kind() const { return Kind_Link; }
- QCString file() const { return m_file; }
- QCString relPath() const { return m_relPath; }
- QCString ref() const { return m_ref; }
- QCString anchor() const { return m_anchor; }
- void accept(DocVisitor *v) { CompAccept<DocLink>::accept(this,v); }
-
- private:
- QCString m_file;
- QCString m_relPath;
- QCString m_ref;
- QCString m_anchor;
- QCString m_refText;
-};
-
-/*! @brief Node representing a reference to some item */
-class DocRef : public CompAccept<DocRef>, public DocNode
-{
- public:
- DocRef(DocNode *parent,const QCString &target,const QCString &context);
- void parse();
- Kind kind() const { return Kind_Ref; }
- QCString file() const { return m_file; }
- QCString relPath() const { return m_relPath; }
- QCString ref() const { return m_ref; }
- QCString anchor() const { return m_anchor; }
- QCString targetTitle() const { return m_text; }
- bool hasLinkText() const { return !m_children.isEmpty(); }
- bool refToAnchor() const { return m_refToAnchor; }
- bool refToSection() const { return m_refToSection; }
- bool isSubPage() const { return m_isSubPage; }
- void accept(DocVisitor *v) { CompAccept<DocRef>::accept(this,v); }
-
- private:
- bool m_refToSection;
- bool m_refToAnchor;
- bool m_isSubPage;
- QCString m_file;
- QCString m_relPath;
- QCString m_ref;
- QCString m_anchor;
- QCString m_text;
-};
-
-/*! @brief Node representing an internal reference to some item */
-class DocInternalRef : public CompAccept<DocInternalRef>, public DocNode
-{
- public:
- DocInternalRef(DocNode *parent,const QCString &target);
- void parse();
- Kind kind() const { return Kind_Ref; }
- QCString file() const { return m_file; }
- QCString relPath() const { return m_relPath; }
- QCString anchor() const { return m_anchor; }
- void accept(DocVisitor *v) { CompAccept<DocInternalRef>::accept(this,v); }
-
- private:
- QCString m_file;
- QCString m_relPath;
- QCString m_anchor;
-};
-
-/*! @brief Node representing a Language specific section */
-//class DocLanguage : public CompAccept<DocLanguage>, public DocNode
-//{
-// public:
-// DocLanguage(DocNode *parent,const QCString &id) :
-// m_parent(parent), m_id(id) {}
-// QCString id() const { return m_id; }
-// Kind kind() const { return Kind_Language; }
-// DocNode *parent() const { return m_parent; }
-// void accept(DocVisitor *v) { CompAccept<DocLanguage>::accept(this,v); }
-// int parse();
-//
-// private:
-// DocNode * m_parent;
-// QCString m_id;
-//};
-
-/*! @brief Node representing a Hypertext reference */
-class DocHRef : public CompAccept<DocHRef>, public DocNode
-{
- public:
- DocHRef(DocNode *parent,const HtmlAttribList &attribs,const QCString &url,
- const QCString &relPath) :
- m_attribs(attribs), m_url(url), m_relPath(relPath) { m_parent = parent; }
- int parse();
- QCString url() const { return m_url; }
- QCString relPath() const { return m_relPath; }
- Kind kind() const { return Kind_HRef; }
- void accept(DocVisitor *v) { CompAccept<DocHRef>::accept(this,v); }
- const HtmlAttribList &attribs() const { return m_attribs; }
-
- private:
- HtmlAttribList m_attribs;
- QCString m_url;
- QCString m_relPath;
-};
-
-/*! @brief Node Html heading */
-class DocHtmlHeader : public CompAccept<DocHtmlHeader>, public DocNode
-{
- public:
- DocHtmlHeader(DocNode *parent,const HtmlAttribList &attribs,int level) :
- m_level(level), m_attribs(attribs) { m_parent = parent; }
- int level() const { return m_level; }
- Kind kind() const { return Kind_HtmlHeader; }
- const HtmlAttribList &attribs() const { return m_attribs; }
- void accept(DocVisitor *v) { CompAccept<DocHtmlHeader>::accept(this,v); }
- int parse();
-
- private:
- int m_level;
- HtmlAttribList m_attribs;
-};
-
-/*! @brief Node representing a Html description item */
-class DocHtmlDescTitle : public CompAccept<DocHtmlDescTitle>, public DocNode
-{
- public:
- DocHtmlDescTitle(DocNode *parent,const HtmlAttribList &attribs) :
- m_attribs(attribs) { m_parent = parent; }
- Kind kind() const { return Kind_HtmlDescTitle; }
- const HtmlAttribList &attribs() const { return m_attribs; }
- void accept(DocVisitor *v) { CompAccept<DocHtmlDescTitle>::accept(this,v); }
- int parse();
-
- private:
- HtmlAttribList m_attribs;
-};
-
-/*! @brief Node representing a Html description list */
-class DocHtmlDescList : public CompAccept<DocHtmlDescList>, public DocNode
-{
- public:
- DocHtmlDescList(DocNode *parent,const HtmlAttribList &attribs) :
- m_attribs(attribs) { m_parent = parent; }
- Kind kind() const { return Kind_HtmlDescList; }
- const HtmlAttribList &attribs() const { return m_attribs; }
- void accept(DocVisitor *v) { CompAccept<DocHtmlDescList>::accept(this,v); }
- int parse();
-
- private:
- HtmlAttribList m_attribs;
-};
-
-/*! @brief Node representing a normal section */
-class DocSection : public CompAccept<DocSection>, public DocNode
-{
- public:
- DocSection(DocNode *parent,int level,const QCString &id) :
- m_level(level), m_id(id) { m_parent = parent; }
- Kind kind() const { return Kind_Section; }
- int level() const { return m_level; }
- QCString title() const { return m_title; }
- QCString anchor() const { return m_anchor; }
- QCString id() const { return m_id; }
- QCString file() const { return m_file; }
- void accept(DocVisitor *v) { CompAccept<DocSection>::accept(this,v); }
- int parse();
-
- private:
- int m_level;
- QCString m_id;
- QCString m_title;
- QCString m_anchor;
- QCString m_file;
-};
-
-/*! @brief Node representing a reference to a section */
-class DocSecRefItem : public CompAccept<DocSecRefItem>, public DocNode
-{
- public:
- DocSecRefItem(DocNode *parent,const QCString &target) :
- m_target(target) { m_parent = parent; }
- Kind kind() const { return Kind_SecRefItem; }
- QCString target() const { return m_target; }
- QCString file() const { return m_file; }
- QCString anchor() const { return m_anchor; }
- void accept(DocVisitor *v) { CompAccept<DocSecRefItem>::accept(this,v); }
- void parse();
-
- private:
- QCString m_target;
- QCString m_file;
- QCString m_anchor;
-};
-
-/*! @brief Node representing a list of section references */
-class DocSecRefList : public CompAccept<DocSecRefList>, public DocNode
-{
- public:
- DocSecRefList(DocNode *parent) { m_parent = parent; }
- void parse();
- Kind kind() const { return Kind_SecRefList; }
- void accept(DocVisitor *v) { CompAccept<DocSecRefList>::accept(this,v); }
-
- private:
-};
-
-/*! @brief Node representing an internal section of documentation */
-class DocInternal : public CompAccept<DocInternal>, public DocNode
-{
- public:
- DocInternal(DocNode *parent) { m_parent = parent; }
- int parse(int);
- Kind kind() const { return Kind_Internal; }
- void accept(DocVisitor *v) { CompAccept<DocInternal>::accept(this,v); }
-
- private:
-};
-
-/*! @brief Node representing a simple list */
-class DocSimpleList : public CompAccept<DocSimpleList>, public DocNode
-{
- public:
- DocSimpleList(DocNode *parent) { m_parent = parent; }
- Kind kind() const { return Kind_SimpleList; }
- void accept(DocVisitor *v) { CompAccept<DocSimpleList>::accept(this,v); }
- int parse();
-
- private:
-};
-
-/*! @brief Node representing a Html list */
-class DocHtmlList : public CompAccept<DocHtmlList>, public DocNode
-{
- public:
- enum Type { Unordered, Ordered };
- DocHtmlList(DocNode *parent,const HtmlAttribList &attribs,Type t) :
- m_type(t), m_attribs(attribs) { m_parent = parent; }
- Kind kind() const { return Kind_HtmlList; }
- Type type() const { return m_type; }
- void accept(DocVisitor *v) { CompAccept<DocHtmlList>::accept(this,v); }
- const HtmlAttribList &attribs() const { return m_attribs; }
- int parse();
- int parseXml();
-
- private:
- Type m_type;
- HtmlAttribList m_attribs;
-};
-
-/*! Node representing a simple section */
-class DocSimpleSect : public CompAccept<DocSimpleSect>, public DocNode
-{
- public:
- enum Type
- {
- Unknown, See, Return, Author, Authors, Version, Since, Date,
- Note, Warning, Copyright, Pre, Post, Invar, Remark, Attention, User, Rcs
- };
- DocSimpleSect(DocNode *parent,Type t);
- virtual ~DocSimpleSect();
- Kind kind() const { return Kind_SimpleSect; }
- Type type() const { return m_type; }
- QCString typeString() const;
- void accept(DocVisitor *v);
- int parse(bool userTitle,bool needsSeparator);
- int parseRcs();
- int parseXml();
- void appendLinkWord(const QCString &word);
-
- private:
- Type m_type;
- DocTitle * m_title;
-};
-
-/*! Node representing a separator between two simple sections of the
- * same type.
- */
-class DocSimpleSectSep : public DocNode
-{
- public:
- DocSimpleSectSep(DocNode *parent) { m_parent = parent; }
- Kind kind() const { return Kind_SimpleSectSep; }
- void accept(DocVisitor *v) { v->visit(this); }
-
- private:
-};
-
-/*! Node representing a parameter section */
-class DocParamSect : public CompAccept<DocParamSect>, public DocNode
-{
- friend class DocParamList;
- public:
- enum Type
- {
- Unknown, Param, RetVal, Exception, TemplateParam
- };
- enum Direction
- {
- In=1, Out=2, InOut=3, Unspecified=0
- };
- DocParamSect(DocNode *parent,Type t)
- : m_type(t), m_dir(Unspecified),
- m_hasInOutSpecifier(FALSE), m_hasTypeSpecifier(FALSE)
- { m_parent = parent; }
- int parse(const QCString &cmdName,bool xmlContext,Direction d);
- Kind kind() const { return Kind_ParamSect; }
- Type type() const { return m_type; }
- void accept(DocVisitor *v) { CompAccept<DocParamSect>::accept(this,v); }
- bool hasInOutSpecifier() const { return m_hasInOutSpecifier; }
- bool hasTypeSpecifier() const { return m_hasTypeSpecifier; }
-
- private:
- Type m_type;
- Direction m_dir;
- bool m_hasInOutSpecifier;
- bool m_hasTypeSpecifier;
-};
-
-/*! Node representing a paragraph in the documentation tree */
-class DocPara : public CompAccept<DocPara>, public DocNode
-{
- public:
- DocPara(DocNode *parent) :
- m_isFirst(FALSE), m_isLast(FALSE) { m_parent = parent; }
- int parse();
- Kind kind() const { return Kind_Para; }
- bool isEmpty() const { return m_children.isEmpty(); }
- void accept(DocVisitor *v) { CompAccept<DocPara>::accept(this,v); }
- void markFirst(bool v=TRUE) { m_isFirst=v; }
- void markLast(bool v=TRUE) { m_isLast=v; }
- bool isFirst() const { return m_isFirst; }
- bool isLast() const { return m_isLast; }
-
- int handleCommand(const QCString &cmdName);
- int handleHtmlStartTag(const QCString &tagName,const HtmlAttribList &tagHtmlAttribs);
- int handleHtmlEndTag(const QCString &tagName);
- int handleSimpleSection(DocSimpleSect::Type t,bool xmlContext=FALSE);
- int handleXRefItem();
- int handleParamSection(const QCString &cmdName,DocParamSect::Type t,
- bool xmlContext,
- int direction);
- void handleIncludeOperator(const QCString &cmdName,DocIncOperator::Type t);
- void handleImage(const QCString &cmdName);
- void handleDotFile(const QCString &cmdName);
- void handleMscFile(const QCString &cmdName);
- void handleInclude(const QCString &cmdName,DocInclude::Type t);
- void handleLink(const QCString &cmdName,bool isJavaLink);
- void handleCite();
- void handleRef(const QCString &cmdName);
- void handleSection(const QCString &cmdName);
- void handleInheritDoc();
- int handleStartCode();
- int handleHtmlHeader(const HtmlAttribList &tagHtmlAttribs,int level);
-
- bool injectToken(int tok,const QCString &tokText);
-
- private:
- QCString m_sectionId;
- bool m_isFirst;
- bool m_isLast;
-};
-
-/*! @brief Node representing a parameter list. */
-class DocParamList : public DocNode
-{
- public:
- DocParamList(DocNode *parent,DocParamSect::Type t,DocParamSect::Direction d)
- : m_type(t), m_dir(d), m_isFirst(TRUE), m_isLast(TRUE)
- { m_paragraphs.setAutoDelete(TRUE);
- m_params.setAutoDelete(TRUE);
- m_paramTypes.setAutoDelete(TRUE);
- m_parent = parent;
- }
- virtual ~DocParamList() { }
- Kind kind() const { return Kind_ParamList; }
- const QList<DocNode> &parameters() { return m_params; }
- const QList<DocNode> &paramTypes() { return m_paramTypes; }
- DocParamSect::Type type() const { return m_type; }
- DocParamSect::Direction direction() const { return m_dir; }
- void markFirst(bool b=TRUE) { m_isFirst=b; }
- void markLast(bool b=TRUE) { m_isLast=b; }
- bool isFirst() const { return m_isFirst; }
- bool isLast() const { return m_isLast; }
- void accept(DocVisitor *v)
- {
- v->visitPre(this);
- QListIterator<DocPara> cli(m_paragraphs);
- DocNode *n;
- for (cli.toFirst();(n=cli.current());++cli) n->accept(v);
- v->visitPost(this);
- }
- int parse(const QCString &cmdName);
- int parseXml(const QCString &paramName);
-
- private:
- QList<DocPara> m_paragraphs;
- QList<DocNode> m_params;
- QList<DocNode> m_paramTypes;
- DocParamSect::Type m_type;
- DocParamSect::Direction m_dir;
- bool m_isFirst;
- bool m_isLast;
-};
-
-/*! @brief Node representing a simple list item */
-class DocSimpleListItem : public DocNode
-{
- public:
- DocSimpleListItem(DocNode *parent)
- { m_paragraph=new DocPara(this); m_parent = parent; }
- int parse();
- virtual ~DocSimpleListItem() { delete m_paragraph; }
- Kind kind() const { return Kind_SimpleListItem; }
- void accept(DocVisitor *v)
- {
- v->visitPre(this);
- m_paragraph->accept(v);
- v->visitPost(this);
- }
-
- private:
- DocPara *m_paragraph;
-};
-
-/*! @brief Node representing a HTML list item */
-class DocHtmlListItem : public CompAccept<DocHtmlListItem>, public DocNode
-{
- public:
- DocHtmlListItem(DocNode *parent,const HtmlAttribList &attribs,int num) :
- m_attribs(attribs), m_itemNum(num) { m_parent = parent; }
- Kind kind() const { return Kind_HtmlListItem; }
- int itemNumber() const { return m_itemNum; }
- const HtmlAttribList &attribs() const { return m_attribs; }
- void accept(DocVisitor *v) { CompAccept<DocHtmlListItem>::accept(this,v); }
- int parse();
- int parseXml();
-
- private:
- HtmlAttribList m_attribs;
- int m_itemNum;
-};
-
-/*! @brief Node representing a HTML description data */
-class DocHtmlDescData : public CompAccept<DocHtmlDescData>, public DocNode
-{
- public:
- DocHtmlDescData(DocNode *parent) { m_parent = parent; }
- Kind kind() const { return Kind_HtmlDescData; }
- const HtmlAttribList &attribs() const { return m_attribs; }
- void accept(DocVisitor *v) { CompAccept<DocHtmlDescData>::accept(this,v); }
- int parse();
-
- private:
- HtmlAttribList m_attribs;
-};
-
-/*! @brief Node representing a HTML table cell */
-class DocHtmlCell : public CompAccept<DocHtmlCell>, public DocNode
-{
- friend class DocHtmlTable;
- public:
- enum Alignment { Left, Right, Center };
- DocHtmlCell(DocNode *parent,const HtmlAttribList &attribs,bool isHeading) :
- m_isHeading(isHeading),
- m_isFirst(FALSE), m_isLast(FALSE), m_attribs(attribs),
- m_rowIdx(-1), m_colIdx(-1) { m_parent = parent; }
- bool isHeading() const { return m_isHeading; }
- bool isFirst() const { return m_isFirst; }
- bool isLast() const { return m_isLast; }
- Kind kind() const { return Kind_HtmlCell; }
- void accept(DocVisitor *v) { CompAccept<DocHtmlCell>::accept(this,v); }
- void markFirst(bool v=TRUE) { m_isFirst=v; }
- void markLast(bool v=TRUE) { m_isLast=v; }
- const HtmlAttribList &attribs() const { return m_attribs; }
- int parse();
- int parseXml();
- int rowIndex() const { return m_rowIdx; }
- int columnIndex() const { return m_colIdx; }
- int rowSpan() const;
- int colSpan() const;
- Alignment alignment() const;
-
- private:
- void setRowIndex(int idx) { m_rowIdx = idx; }
- void setColumnIndex(int idx) { m_colIdx = idx; }
- bool m_isHeading;
- bool m_isFirst;
- bool m_isLast;
- HtmlAttribList m_attribs;
- int m_rowIdx;
- int m_colIdx;
-};
-
-/*! @brief Node representing a HTML table caption */
-class DocHtmlCaption : public CompAccept<DocHtmlCaption>, public DocNode
-{
- public:
- DocHtmlCaption(DocNode *parent,const HtmlAttribList &attribs) :
- m_attribs(attribs) { m_parent = parent; }
- Kind kind() const { return Kind_HtmlCaption; }
- void accept(DocVisitor *v) { CompAccept<DocHtmlCaption>::accept(this,v); }
- const HtmlAttribList &attribs() const { return m_attribs; }
- int parse();
-
- private:
- HtmlAttribList m_attribs;
- bool m_atTop;
-};
-
-/*! @brief Node representing a HTML table row */
-class DocHtmlRow : public CompAccept<DocHtmlRow>, public DocNode
-{
- friend class DocHtmlTable;
- public:
- DocHtmlRow(DocNode *parent,const HtmlAttribList &attribs) :
- m_attribs(attribs), m_visibleCells(-1), m_rowIdx(-1) { m_parent = parent; }
- Kind kind() const { return Kind_HtmlRow; }
- uint numCells() const { return m_children.count(); }
- void accept(DocVisitor *v) { CompAccept<DocHtmlRow>::accept(this,v); }
- const HtmlAttribList &attribs() const { return m_attribs; }
- int parse();
- int parseXml(bool header);
- bool isHeading() const { return m_children.count()>0 &&
- ((DocHtmlCell*)m_children.getFirst())->isHeading();
- }
- void setVisibleCells(int n) { m_visibleCells = n; }
- int visibleCells() const { return m_visibleCells; }
- int rowIndex() const { return m_rowIdx; }
-
- private:
- void setRowIndex(int idx) { m_rowIdx = idx; }
- HtmlAttribList m_attribs;
- int m_visibleCells;
- int m_rowIdx;
-};
-
-/*! @brief Node representing a HTML table */
-class DocHtmlTable : public CompAccept<DocHtmlTable>, public DocNode
-{
- public:
- DocHtmlTable(DocNode *parent,const HtmlAttribList &attribs)
- : m_attribs(attribs) { m_caption=0; m_parent = parent; }
- ~DocHtmlTable() { delete m_caption; }
- Kind kind() const { return Kind_HtmlTable; }
- uint numRows() const { return m_children.count(); }
- bool hasCaption() { return m_caption!=0; }
- const HtmlAttribList &attribs() const { return m_attribs; }
- int parse();
- int parseXml();
- uint numColumns() const { return m_numCols; }
- void accept(DocVisitor *v);
-
- private:
- void computeTableGrid();
- DocHtmlCaption *m_caption;
- HtmlAttribList m_attribs;
- int m_numCols;
-};
-
-/*! @brief Node representing an HTML blockquote */
-class DocHtmlBlockQuote : public CompAccept<DocHtmlBlockQuote>, public DocNode
-{
- public:
- DocHtmlBlockQuote(DocNode *parent,const HtmlAttribList &attribs)
- : m_attribs(attribs) { m_parent = parent; }
- Kind kind() const { return Kind_HtmlBlockQuote; }
- int parse();
- void accept(DocVisitor *v) { CompAccept<DocHtmlBlockQuote>::accept(this,v); }
- const HtmlAttribList &attribs() const { return m_attribs; }
-
- private:
- HtmlAttribList m_attribs;
-};
-
-/*! @brief Root node of a text fragment */
-class DocText : public CompAccept<DocText>, public DocNode
-{
- public:
- DocText() {}
- Kind kind() const { return Kind_Text; }
- void accept(DocVisitor *v) { CompAccept<DocText>::accept(this,v); }
- void parse();
-};
-
-/*! @brief Root node of documentation tree */
-class DocRoot : public CompAccept<DocRoot>, public DocNode
-{
- public:
- DocRoot(bool indent,bool sl) : m_indent(indent), m_singleLine(sl) {}
- Kind kind() const { return Kind_Root; }
- void accept(DocVisitor *v) { CompAccept<DocRoot>::accept(this,v); }
- void parse();
- bool indent() const { return m_indent; }
- bool singleLine() const { return m_singleLine; }
-
- private:
- bool m_indent;
- bool m_singleLine;
-};
-
-
-#endif
diff --git a/trunk/src/docsets.cpp b/trunk/src/docsets.cpp
deleted file mode 100644
index 6852c41..0000000
--- a/trunk/src/docsets.cpp
+++ /dev/null
@@ -1,488 +0,0 @@
-/******************************************************************************
- *
- * Copyright (C) 1997-2012 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.
- *
- */
-
-#include "docsets.h"
-#include "config.h"
-#include "message.h"
-#include "doxygen.h"
-#include <qfile.h>
-
-
-DocSets::DocSets() : m_nodes(17), m_scopes(17)
-{
- m_nf = 0;
- m_tf = 0;
- m_dc = 0;
- m_id = 0;
- m_nodes.setAutoDelete(TRUE);
-}
-
-DocSets::~DocSets()
-{
- delete m_nf;
- delete m_tf;
-}
-
-void DocSets::initialize()
-{
- // -- get config options
- QCString projectName = Config_getString("PROJECT_NAME");
- if (projectName.isEmpty()) projectName="root";
- QCString bundleId = Config_getString("DOCSET_BUNDLE_ID");
- if (bundleId.isEmpty()) bundleId="org.doxygen.Project";
- QCString feedName = Config_getString("DOCSET_FEEDNAME");
- if (feedName.isEmpty()) feedName="FeedName";
- QCString publisherId = Config_getString("DOCSET_PUBLISHER_ID");
- if (publisherId.isEmpty()) publisherId="PublisherId";
- QCString publisherName = Config_getString("DOCSET_PUBLISHER_NAME");
- if (publisherName.isEmpty()) publisherName="PublisherName";
-
- // -- write Makefile
- {
- QCString mfName = Config_getString("HTML_OUTPUT") + "/Makefile";
- QFile makefile(mfName);
- if (!makefile.open(IO_WriteOnly))
- {
- err("Could not open file %s for writing\n",mfName.data());
- exit(1);
- }
- FTextStream ts(&makefile);
-
- ts << "DOCSET_NAME=" << bundleId << ".docset\n"
- "DOCSET_CONTENTS=$(DOCSET_NAME)/Contents\n"
- "DOCSET_RESOURCES=$(DOCSET_CONTENTS)/Resources\n"
- "DOCSET_DOCUMENTS=$(DOCSET_RESOURCES)/Documents\n"
- "DESTDIR=~/Library/Developer/Shared/Documentation/DocSets\n"
- "XCODE_INSTALL=$(shell xcode-select -print-path)\n"
- "\n"
- "all: docset\n"
- "\n"
- "docset:\n"
- "\tmkdir -p $(DOCSET_DOCUMENTS)\n"
- "\tcp Nodes.xml $(DOCSET_RESOURCES)\n"
- "\tcp Tokens.xml $(DOCSET_RESOURCES)\n"
- "\tcp Info.plist $(DOCSET_CONTENTS)\n"
- "\ttar --exclude $(DOCSET_NAME) \\\n"
- "\t --exclude Nodes.xml \\\n"
- "\t --exclude Tokens.xml \\\n"
- "\t --exclude Info.plist \\\n"
- "\t --exclude Makefile -c -f - . \\\n"
- "\t | (cd $(DOCSET_DOCUMENTS); tar xvf -)\n"
- "\t$(XCODE_INSTALL)/usr/bin/docsetutil index $(DOCSET_NAME)\n"
- "\trm -f $(DOCSET_DOCUMENTS)/Nodes.xml\n"
- "\trm -f $(DOCSET_DOCUMENTS)/Info.plist\n"
- "\trm -f $(DOCSET_DOCUMENTS)/Makefile\n"
- "\trm -f $(DOCSET_RESOURCES)/Nodes.xml\n"
- "\trm -f $(DOCSET_RESOURCES)/Tokens.xml\n"
- "\n"
- "install: docset\n"
- "\tmkdir -p $(DESTDIR)\n"
- "\tcp -R $(DOCSET_NAME) $(DESTDIR)\n"
- "\n"
- "uninstall:\n"
- "\trm -rf $(DESTDIR)/$(DOCSET_NAME)\n"
- "\n"
- "always:\n";
- }
-
- // -- write Info.plist
- {
- QCString plName = Config_getString("HTML_OUTPUT") + "/Info.plist";
- QFile plist(plName);
- if (!plist.open(IO_WriteOnly))
- {
- err("Could not open file %s for writing\n",plName.data());
- exit(1);
- }
- FTextStream ts(&plist);
-
- ts << "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n"
- "<!DOCTYPE plist PUBLIC \"-//Apple Computer//DTD PLIST 1.0//EN\"\n"
- "\"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">\n"
- "<plist version=\"1.0\">\n"
- "<dict>\n"
- " <key>CFBundleName</key>\n"
- " <string>" << projectName << "</string>\n"
- " <key>CFBundleIdentifier</key>\n"
- " <string>" << bundleId << ".docset</string>\n"
- " <key>DocSetFeedName</key>\n"
- " <string>" << feedName << "</string>\n"
- " <key>DocSetPublisherIdentifier</key>\n"
- " <string>" << publisherId << "</string>\n"
- " <key>DocSetPublisherName</key>\n"
- " <string>" << publisherName << "</string>\n"
- "</dict>\n"
- "</plist>\n";
- }
-
- // -- start Nodes.xml
- QCString notes = Config_getString("HTML_OUTPUT") + "/Nodes.xml";
- m_nf = new QFile(notes);
- if (!m_nf->open(IO_WriteOnly))
- {
- err("Could not open file %s for writing\n",notes.data());
- exit(1);
- }
- //QCString indexName=Config_getBool("GENERATE_TREEVIEW")?"main":"index";
- QCString indexName="index";
- m_nts.setDevice(m_nf);
- m_nts << "<?xml version=\"1.0\" encoding=\"UTF-8\"?>" << endl;
- m_nts << "<DocSetNodes version=\"1.0\">" << endl;
- m_nts << " <TOC>" << endl;
- m_nts << " <Node>" << endl;
- m_nts << " <Name>Root</Name>" << endl;
- m_nts << " <Path>" << indexName << Doxygen::htmlFileExtension << "</Path>" << endl;
- m_nts << " <Subnodes>" << endl;
- m_dc = 1;
- m_firstNode.resize(m_dc);
- m_firstNode.at(0)=TRUE;
-
- QCString tokens = Config_getString("HTML_OUTPUT") + "/Tokens.xml";
- m_tf = new QFile(tokens);
- if (!m_tf->open(IO_WriteOnly))
- {
- err("Could not open file %s for writing\n",tokens.data());
- exit(1);
- }
- m_tts.setDevice(m_tf);
- m_tts << "<?xml version=\"1.0\" encoding=\"UTF-8\"?>" << endl;
- m_tts << "<Tokens version=\"1.0\">" << endl;
-}
-
-void DocSets::finalize()
-{
- if (!m_firstNode.at(m_dc-1))
- {
- m_nts << indent() << " </Node>" << endl;
- }
- m_dc--;
- m_nts << " </Subnodes>" << endl;
- m_nts << " </Node>" << endl;
- m_nts << " </TOC>" << endl;
- m_nts << "</DocSetNodes>" << endl;
- m_nf->close();
- delete m_nf;
- m_nf=0;
-
- m_tts << "</Tokens>" << endl;
- m_tf->close();
- delete m_tf;
- m_tf=0;
-}
-
-QCString DocSets::indent()
-{
- QCString result;
- result.fill(' ',(m_dc+2)*2);
- return result;
-}
-
-void DocSets::incContentsDepth()
-{
- ++m_dc;
- m_nts << indent() << "<Subnodes>" << endl;
- m_firstNode.resize(m_dc);
- if (m_dc>0)
- {
- m_firstNode.at(m_dc-1)=TRUE;
- }
-}
-
-void DocSets::decContentsDepth()
-{
- if (!m_firstNode.at(m_dc-1))
- {
- m_nts << indent() << " </Node>" << endl;
- }
- m_nts << indent() << "</Subnodes>" << endl;
- --m_dc;
-}
-
-void DocSets::addContentsItem(bool isDir,
- const char *name,
- const char *ref,
- const char *file,
- const char *anchor,
- bool /* separateIndex */,
- bool /* addToNavIndex */)
-{
- (void)isDir;
- if (file && ref==0)
- {
- if (!m_firstNode.at(m_dc-1))
- {
- m_nts << indent() << " </Node>" << endl;
- }
- m_firstNode.at(m_dc-1)=FALSE;
- m_nts << indent() << " <Node>" << endl;
- m_nts << indent() << " <Name>" << convertToXML(name) << "</Name>" << endl;
- m_nts << indent() << " <Path>";
- m_nts << file << Doxygen::htmlFileExtension;
- m_nts << "</Path>" << endl;
- if (anchor)
- {
- m_nts << indent() << " <Anchor>" << anchor << "</Anchor>" << endl;
- }
- }
-}
-
-void DocSets::addIndexItem(Definition *context,MemberDef *md,const char *)
-{
- if (md==0 && context==0) return;
-
- FileDef *fd = 0;
- ClassDef *cd = 0;
- NamespaceDef *nd = 0;
-
- if (md)
- {
- fd = md->getFileDef();
- cd = md->getClassDef();
- nd = md->getNamespaceDef();
- if (!md->isLinkable()) return; // internal symbol
- }
-
- QCString scope;
- QCString type;
- QCString decl;
-
- // determine language
- QCString lang;
- SrcLangExt langExt = SrcLangExt_Cpp;
- if (md)
- {
- langExt = md->getLanguage();
- }
- else if (context)
- {
- langExt = context->getLanguage();
- }
- switch (langExt)
- {
- case SrcLangExt_Cpp:
- case SrcLangExt_ObjC:
- {
- if (md && (md->isObjCMethod() || md->isObjCProperty()))
- lang="occ"; // Objective C/C++
- else if (fd && fd->name().right(2).lower()==".c")
- lang="c"; // Plain C
- else if (cd==0 && nd==0)
- lang="c"; // Plain C symbol outside any class or namespace
- else
- lang="cpp"; // C++
- }
- break;
- case SrcLangExt_IDL: lang="idl"; break; // IDL
- case SrcLangExt_CSharp: lang="csharp"; break; // C#
- case SrcLangExt_PHP: lang="php"; break; // PHP4/5
- case SrcLangExt_D: lang="d"; break; // D
- case SrcLangExt_Java: lang="java"; break; // Java
- case SrcLangExt_JS: lang="javascript"; break; // Javascript
- case SrcLangExt_Python: lang="python"; break; // Python
- case SrcLangExt_Fortran: lang="fortran"; break; // Fortran
- case SrcLangExt_VHDL: lang="vhdl"; break; // VHDL
- case SrcLangExt_XML: lang="xml"; break; // DBUS XML
- case SrcLangExt_Tcl: lang="tcl"; break; // Tcl
- case SrcLangExt_Markdown:lang="markdown"; break; // Markdown
- case SrcLangExt_Unknown: lang="unknown"; break; // should not happen!
- }
-
- if (md)
- {
- if (context==0)
- {
- if (md->getGroupDef())
- context = md->getGroupDef();
- else if (md->getFileDef())
- context = md->getFileDef();
- }
- if (context==0) return; // should not happen
-
- switch (md->memberType())
- {
- case MemberDef::Define:
- type="macro"; break;
- case MemberDef::Function:
- if (cd && (cd->compoundType()==ClassDef::Interface ||
- cd->compoundType()==ClassDef::Class))
- {
- if (md->isStatic())
- type="clm"; // class member
- else
- type="instm"; // instance member
- }
- else if (cd && cd->compoundType()==ClassDef::Protocol)
- {
- if (md->isStatic())
- type="intfcm"; // interface class member
- else
- type="intfm"; // interface member
- }
- else
- type="func";
- break;
- case MemberDef::Variable:
- type="data"; break;
- case MemberDef::Typedef:
- type="tdef"; break;
- case MemberDef::Enumeration:
- type="enum"; break;
- case MemberDef::EnumValue:
- type="econst"; break;
- //case MemberDef::Prototype:
- // type="prototype"; break;
- case MemberDef::Signal:
- type="signal"; break;
- case MemberDef::Slot:
- type="slot"; break;
- case MemberDef::Friend:
- type="ffunc"; break;
- case MemberDef::DCOP:
- type="dcop"; break;
- case MemberDef::Property:
- if (cd && cd->compoundType()==ClassDef::Protocol)
- type="intfp"; // interface property
- else
- type="instp"; // instance property
- break;
- case MemberDef::Event:
- type="event"; break;
- }
- cd = md->getClassDef();
- nd = md->getNamespaceDef();
- if (cd)
- {
- scope = cd->qualifiedName();
- }
- else if (nd)
- {
- scope = nd->name();
- }
- writeToken(m_tts,md,type,lang,scope,md->anchor());
- }
- else if (context && context->isLinkable())
- {
- if (fd==0 && context->definitionType()==Definition::TypeFile)
- {
- fd = (FileDef*)context;
- }
- if (cd==0 && context->definitionType()==Definition::TypeClass)
- {
- cd = (ClassDef*)context;
- }
- if (nd==0 && context->definitionType()==Definition::TypeNamespace)
- {
- nd = (NamespaceDef*)context;
- }
- if (fd)
- {
- type="file";
- }
- else if (cd)
- {
- scope = cd->qualifiedName();
- if (cd->isTemplate())
- {
- type="tmplt";
- }
- else if (cd->compoundType()==ClassDef::Protocol)
- {
- type="intf";
- if (scope.right(2)=="-p") scope=scope.left(scope.length()-2);
- }
- else if (cd->compoundType()==ClassDef::Interface)
- {
- type="cl";
- }
- else if (cd->compoundType()==ClassDef::Category)
- {
- type="cat";
- }
- else
- {
- type = "cl";
- }
- IncludeInfo *ii = cd->includeInfo();
- if (ii)
- {
- decl=ii->includeName;
- if (decl.isEmpty())
- {
- decl=ii->local;
- }
- }
- }
- else if (nd)
- {
- scope = nd->name();
- type = "ns";
- }
- if (m_scopes.find(context->getOutputFileBase())==0)
- {
- writeToken(m_tts,context,type,lang,scope,0,decl);
- m_scopes.append(context->getOutputFileBase(),(void*)0x8);
- }
- }
-}
-
-void DocSets::writeToken(FTextStream &t,
- const Definition *d,
- const QCString &type,
- const QCString &lang,
- const char *scope,
- const char *anchor,
- const char *decl)
-{
- t << " <Token>" << endl;
- t << " <TokenIdentifier>" << endl;
- QString name = d->name();
- if (name.right(2)=="-p") name=name.left(name.length()-2);
- t << " <Name>" << convertToXML(name) << "</Name>" << endl;
- if (!lang.isEmpty())
- {
- t << " <APILanguage>" << lang << "</APILanguage>" << endl;
- }
- if (!type.isEmpty())
- {
- t << " <Type>" << type << "</Type>" << endl;
- }
- if (scope)
- {
- t << " <Scope>" << convertToXML(scope) << "</Scope>" << endl;
- }
- t << " </TokenIdentifier>" << endl;
- t << " <Path>" << d->getOutputFileBase()
- << Doxygen::htmlFileExtension << "</Path>" << endl;
- if (anchor)
- {
- t << " <Anchor>" << anchor << "</Anchor>" << endl;
- }
- QCString tooltip = d->briefDescriptionAsTooltip();
- if (!tooltip.isEmpty())
- {
- t << " <Abstract>" << convertToXML(tooltip) << "</Abstract>" << endl;
- }
- if (decl)
- {
- t << " <DeclaredIn>" << convertToXML(decl) << "</DeclaredIn>" << endl;
- }
- t << " </Token>" << endl;
-}
-
-void DocSets::addIndexFile(const char *name)
-{
- (void)name;
-}
-
diff --git a/trunk/src/docsets.h b/trunk/src/docsets.h
deleted file mode 100644
index 97457f6..0000000
--- a/trunk/src/docsets.h
+++ /dev/null
@@ -1,85 +0,0 @@
-/******************************************************************************
- *
- * Copyright (C) 1997-2012 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.
- *
- */
-
-#ifndef DOCSETS_H
-#define DOCSETS_H
-
-#include "qtbc.h"
-#include <qstrlist.h>
-#include "sortdict.h"
-#include "ftextstream.h"
-#include "index.h"
-
-class QFile;
-class Definition;
-
-/*! A class that generates docset files.
- * These files can be used to create context help
- * for use within Apple's Xcode 3.0 development environment
- */
-class DocSets : public IndexIntf
-{
-
- public:
- DocSets();
- ~DocSets();
- void initialize();
- void finalize();
- void incContentsDepth();
- void decContentsDepth();
- void addContentsItem(bool isDir,
- const char *name,
- const char *ref,
- const char *file,
- const char *anchor,
- bool separateIndex,
- bool addToNavIndex
- );
- void addIndexItem(Definition *context,MemberDef *md,const char *title);
- void addIndexFile(const char *name);
- void addImageFile(const char *) {}
- void addStyleSheetFile(const char *) {}
-
- private:
- void writeToken(FTextStream &t, const Definition *d,
- const QCString &type, const QCString &lang,
- const char *scope=0, const char *anchor=0,
- const char *decl=0);
- struct NodeDef
- {
- NodeDef(bool d,const QCString &n,const QCString &r,
- const QCString &f,const QCString &a,int i) :
- isDir(d), name(n), ref(r), file(f), anchor(a),id(i) {}
- bool isDir;
- QCString name;
- QCString ref;
- QCString file;
- QCString anchor;
- int id;
- };
- QCString indent();
- QFile *m_nf;
- QFile *m_tf;
- FTextStream m_nts;
- FTextStream m_tts;
- int m_dc;
- int m_id;
- QArray<bool> m_firstNode;
- SDict<NodeDef> m_nodes;
- SDict<void> m_scopes;
-};
-
-#endif /* DOCSETS_H */
-
diff --git a/trunk/src/doctokenizer.h b/trunk/src/doctokenizer.h
deleted file mode 100644
index e5ae26a..0000000
--- a/trunk/src/doctokenizer.h
+++ /dev/null
@@ -1,155 +0,0 @@
-/******************************************************************************
- *
- *
- *
- *
- * Copyright (C) 1997-2012 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.
- *
- */
-
-#ifndef _DOCTOKENIZER_H
-#define _DOCTOKENIZER_H
-
-#include <qcstring.h>
-#include <qlist.h>
-#include "htmlattrib.h"
-
-class Definition;
-class MemberGroup;
-
-enum Tokens
-{
- TK_WORD = 1,
- TK_LNKWORD = 2,
- TK_WHITESPACE = 3,
- TK_LISTITEM = 4,
- TK_ENDLIST = 5,
- TK_COMMAND = 6,
- TK_HTMLTAG = 7,
- TK_SYMBOL = 8,
- TK_NEWPARA = 9,
- TK_RCSTAG = 10,
- TK_URL = 11,
-
- RetVal_OK = 0x10000,
- RetVal_SimpleSec = 0x10001,
- RetVal_ListItem = 0x10002,
- RetVal_Section = 0x10003,
- RetVal_Subsection = 0x10004,
- RetVal_Subsubsection = 0x10005,
- RetVal_Paragraph = 0x10006,
- RetVal_SubParagraph = 0x10007,
- RetVal_EndList = 0x10008,
- RetVal_EndPre = 0x10009,
- RetVal_DescData = 0x1000A,
- RetVal_DescTitle = 0x1000B,
- RetVal_EndDesc = 0x1000C,
- RetVal_TableRow = 0x1000D,
- RetVal_TableCell = 0x1000E,
- RetVal_TableHCell = 0x1000F,
- RetVal_EndTable = 0x10010,
- RetVal_Internal = 0x10011,
- RetVal_SwitchLang = 0x10012,
- RetVal_CloseXml = 0x10013,
- RetVal_EndBlockQuote = 0x10014
-};
-
-struct TokenInfo
-{
- // unknown token
- char unknownChar;
-
- // command token
- QCString name;
-
- // command text (RCS tag)
- QCString text;
-
- // comment blocks
-
- // list token info
- bool isEnumList;
- int indent;
-
- // sections
- QCString sectionId;
-
- // simple section
- QCString simpleSectName;
- QCString simpleSectText;
-
- // verbatim fragment
- QCString verb;
-
- // xrefitem
- int id;
-
- // html tag
- HtmlAttribList attribs;
- bool endTag;
- bool emptyTag;
-
- // whitespace
- QCString chars;
-
- // url
- bool isEMailAddr;
-
- // param attributes
- enum ParamDir { In=1, Out=2, InOut=3, Unspecified=0 };
- ParamDir paramDir;
-};
-
-// globals
-extern TokenInfo *g_token;
-extern int doctokenizerYYlineno;
-extern FILE *doctokenizerYYin;
-
-// helper functions
-const char *tokToString(int token);
-
-// operations on the scanner
-void doctokenizerYYFindSections(const char *input,Definition *d,
- MemberGroup *mg,const char *fileName);
-void doctokenizerYYinit(const char *input,const char *fileName);
-void doctokenizerYYcleanup();
-void doctokenizerYYpushContext();
-bool doctokenizerYYpopContext();
-int doctokenizerYYlex();
-void doctokenizerYYsetStatePara();
-void doctokenizerYYsetStateTitle();
-void doctokenizerYYsetStateTitleAttrValue();
-void doctokenizerYYsetStateCode();
-void doctokenizerYYsetStateXmlCode();
-void doctokenizerYYsetStateHtmlOnly();
-void doctokenizerYYsetStateManOnly();
-void doctokenizerYYsetStateLatexOnly();
-void doctokenizerYYsetStateXmlOnly();
-void doctokenizerYYsetStateVerbatim();
-void doctokenizerYYsetStateDot();
-void doctokenizerYYsetStateMsc();
-void doctokenizerYYsetStateParam();
-void doctokenizerYYsetStateXRefItem();
-void doctokenizerYYsetStateFile();
-void doctokenizerYYsetStatePattern();
-void doctokenizerYYsetStateLink();
-void doctokenizerYYsetStateCite();
-void doctokenizerYYsetStateRef();
-void doctokenizerYYsetStateInternalRef();
-void doctokenizerYYsetStateText();
-void doctokenizerYYsetStateSkipTitle();
-void doctokenizerYYsetStateAnchor();
-void doctokenizerYYsetInsidePre(bool b);
-void doctokenizerYYpushBackHtmlTag(const char *tag);
-void doctokenizerYYsetStateSnippet();
-
-#endif
diff --git a/trunk/src/doctokenizer.l b/trunk/src/doctokenizer.l
deleted file mode 100644
index 7f11aca..0000000
--- a/trunk/src/doctokenizer.l
+++ /dev/null
@@ -1,1319 +0,0 @@
-/******************************************************************************
- *
- *
- *
- *
- * Copyright (C) 1997-2012 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.
- *
- */
-
-
-%{
-
-#include <qfile.h>
-#include <qstring.h>
-#include <qstack.h>
-#include <qdict.h>
-#include <qregexp.h>
-
-#include "doctokenizer.h"
-#include "cmdmapper.h"
-#include "config.h"
-#include "message.h"
-#include "section.h"
-#include "membergroup.h"
-#include "definition.h"
-#include "doxygen.h"
-#include "portable.h"
-
-#define YY_NEVER_INTERACTIVE 1
-
-//--------------------------------------------------------------------------
-
-// context for tokenizer phase
-static int g_commentState;
-TokenInfo *g_token = 0;
-static int g_inputPos = 0;
-static const char *g_inputString;
-static QCString g_fileName;
-static bool g_insidePre;
-
-// context for section finding phase
-static Definition *g_definition;
-static MemberGroup *g_memberGroup;
-static QCString g_secLabel;
-static QCString g_secTitle;
-static SectionInfo::SectionType g_secType;
-static QCString g_endMarker;
-
-struct DocLexerContext
-{
- TokenInfo *token;
- int rule;
- int inputPos;
- const char *inputString;
- YY_BUFFER_STATE state;
-};
-
-static QStack<DocLexerContext> g_lexerStack;
-
-//--------------------------------------------------------------------------
-
-void doctokenizerYYpushContext()
-{
- DocLexerContext *ctx = new DocLexerContext;
- ctx->rule = YY_START;
- ctx->token = g_token;
- ctx->inputPos = g_inputPos;
- ctx->inputString = g_inputString;
- ctx->state = YY_CURRENT_BUFFER;
- g_lexerStack.push(ctx);
- yy_switch_to_buffer(yy_create_buffer(doctokenizerYYin, YY_BUF_SIZE));
-}
-
-bool doctokenizerYYpopContext()
-{
- if (g_lexerStack.isEmpty()) return FALSE;
- DocLexerContext *ctx = g_lexerStack.pop();
- g_inputPos = ctx->inputPos;
- g_inputString = ctx->inputString;
- yy_delete_buffer(YY_CURRENT_BUFFER);
- yy_switch_to_buffer(ctx->state);
- BEGIN(ctx->rule);
- delete ctx;
- return TRUE;
-}
-
-
-//--------------------------------------------------------------------------
-
-const char *tokToString(int token)
-{
- switch (token)
- {
- case 0: return "TK_EOF";
- case TK_WORD: return "TK_WORD";
- case TK_LNKWORD: return "TK_LNKWORD";
- case TK_WHITESPACE: return "TK_WHITESPACE";
- case TK_LISTITEM: return "TK_LISTITEM";
- case TK_ENDLIST: return "TK_ENDLIST";
- case TK_COMMAND: return "TK_COMMAND";
- case TK_HTMLTAG: return "TK_HTMLTAG";
- case TK_SYMBOL: return "TK_SYMBOL";
- case TK_NEWPARA: return "TK_NEWPARA";
- case TK_RCSTAG: return "TK_RCSTAG";
- case TK_URL: return "TK_URL";
- }
- return "ERROR";
-}
-
-static int computeIndent(const char *str,int length)
-{
- int i;
- int indent=0;
- int tabSize=Config_getInt("TAB_SIZE");
- for (i=0;i<length;i++)
- {
- if (str[i]=='\t')
- {
- indent+=tabSize - (indent%tabSize);
- }
- else if (str[i]=='\n')
- {
- indent=0;
- }
- else
- {
- indent++;
- }
- }
- return indent;
-}
-
-//--------------------------------------------------------------------------
-
-static void processSection()
-{
- //printf("%s: found section/anchor with name `%s'\n",g_fileName.data(),g_secLabel.data());
- QCString file;
- if (g_memberGroup)
- {
- file = g_memberGroup->parent()->getOutputFileBase();
- }
- else if (g_definition)
- {
- file = g_definition->getOutputFileBase();
- }
- else
- {
- warn(g_fileName,yylineno,"Found section/anchor %s without context\n",g_secLabel.data());
- }
- SectionInfo *si=0;
- if ((si=Doxygen::sectionDict.find(g_secLabel)))
- {
- si->fileName = file;
- //si = new SectionInfo(file,g_secLabel,g_secTitle,g_secType);
- //Doxygen::sectionDict.insert(g_secLabel,si);
- }
-}
-
-static void handleHtmlTag()
-{
- QCString tagText=yytext;
- g_token->attribs.clear();
- g_token->endTag = FALSE;
- g_token->emptyTag = FALSE;
-
- // Check for end tag
- int startNamePos=1;
- if (tagText.at(1)=='/')
- {
- g_token->endTag = TRUE;
- startNamePos++;
- }
-
- // Parse the name portion
- int i = startNamePos;
- for (i=startNamePos; i < (int)yyleng; i++)
- {
- // Check for valid HTML/XML name chars (including namespaces)
- char c = tagText.at(i);
- if (!(isalnum(c) || c=='-' || c=='_' || c==':')) break;
- }
- g_token->name = tagText.mid(startNamePos,i-startNamePos);
-
- // Parse the attributes. Each attribute is a name, value pair
- // The result is stored in g_token->attribs.
- int startName,endName,startAttrib,endAttrib;
- while (i<(int)yyleng)
- {
- char c=tagText.at(i);
- // skip spaces
- while (i<(int)yyleng && isspace(c)) { c=tagText.at(++i); }
- // check for end of the tag
- if (c == '>') break;
- // Check for XML style "empty" tag.
- if (c == '/')
- {
- g_token->emptyTag = TRUE;
- break;
- }
- startName=i;
- // search for end of name
- while (i<(int)yyleng && !isspace(c) && c!='=') { c=tagText.at(++i); }
- endName=i;
- HtmlAttrib opt;
- opt.name = tagText.mid(startName,endName-startName).lower();
- // skip spaces
- while (i<(int)yyleng && isspace(c)) { c=tagText.at(++i); }
- if (tagText.at(i)=='=') // option has value
- {
- c=tagText.at(++i);
- // skip spaces
- while (i<(int)yyleng && isspace(c)) { c=tagText.at(++i); }
- if (tagText.at(i)=='\'') // option '...'
- {
- c=tagText.at(++i);
- startAttrib=i;
-
- // search for matching quote
- while (i<(int)yyleng && c!='\'') { c=tagText.at(++i); }
- endAttrib=i;
- if (i<(int)yyleng) c=tagText.at(++i);
- }
- else if (tagText.at(i)=='"') // option "..."
- {
- c=tagText.at(++i);
- startAttrib=i;
- // search for matching quote
- while (i<(int)yyleng && c!='"') { c=tagText.at(++i); }
- endAttrib=i;
- if (i<(int)yyleng) c=tagText.at(++i);
- }
- else // value without any quotes
- {
- startAttrib=i;
- // search for separator or end symbol
- while (i<(int)yyleng && !isspace(c) && c!='>') { c=tagText.at(++i); }
- endAttrib=i;
- if (i<(int)yyleng) c=tagText.at(++i);
- }
- opt.value = tagText.mid(startAttrib,endAttrib-startAttrib);
- }
- else // start next option
- {
- }
- //printf("=====> Adding option name=<%s> value=<%s>\n",
- // opt.name.data(),opt.value.data());
- g_token->attribs.append(&opt);
- }
-}
-
-static QCString stripEmptyLines(const QCString &s)
-{
- if (s.isEmpty()) return QCString();
- int end=s.length();
- int start=0,p=0;
- // skip leading empty lines
- for (;;)
- {
- int c;
- while ((c=s[p]) && (c==' ' || c=='\t')) p++;
- if (s[p]=='\n')
- {
- start=++p;
- }
- else
- {
- break;
- }
- }
- // skip trailing empty lines
- p=end-1;
- if (p>=start && s.at(p)=='\n') p--;
- while (p>=start)
- {
- int c;
- while ((c=s[p]) && (c==' ' || c=='\t')) p--;
- if (s[p]=='\n')
- {
- end=p;
- }
- else
- {
- break;
- }
- p--;
- }
- //printf("stripEmptyLines(%d-%d)\n",start,end);
- return s.mid(start,end-start);
-}
-
-//--------------------------------------------------------------------------
-
-#undef YY_INPUT
-#define YY_INPUT(buf,result,max_size) result=yyread(buf,max_size);
-
-static int yyread(char *buf,int max_size)
-{
- int c=0;
- const char *src=g_inputString+g_inputPos;
- while ( c < max_size && *src ) *buf++ = *src++, c++;
- g_inputPos+=c;
- return c;
-}
-
-//--------------------------------------------------------------------------
-
-%}
-
-CMD ("\\"|"@")
-WS [ \t\r\n]
-NONWS [^ \t\r\n]
-BLANK [ \t\r]
-ID "$"?[a-z_A-Z\x80-\xFF][a-z_A-Z0-9\x80-\xFF]*
-LABELID [a-z_A-Z\x80-\xFF][a-z_A-Z0-9\x80-\xFF\-]*
-PHPTYPE [\\:a-z_A-Z0-9\x80-\xFF\-]+
-CITEID [a-z_A-Z\x80-\xFF][a-z_A-Z0-9\x80-\xFF\-:/]*
-MAILADR ("mailto:")?[a-z_A-Z0-9.+-]+"@"[a-z_A-Z0-9-]+("."[a-z_A-Z0-9\-]+)+[a-z_A-Z0-9\-]+
-OPTSTARS ("//"{BLANK}*)?"*"*{BLANK}*
-LISTITEM {BLANK}*[-]("#")?{WS}
-MLISTITEM {BLANK}*[+*]{WS}
-OLISTITEM {BLANK}*[1-9][0-9]*"."{BLANK}
-ENDLIST {BLANK}*"."{BLANK}*\n
-ATTRIB {ID}{WS}*("="{WS}*(("\""[^\"]*"\"")|("'"[^\']*"'")|[^ \t\r\n'"><]+))?
-URLCHAR [a-z_A-Z0-9\!\~\,\:\;\'\$\?\@\&\%\#\.\-\+\/\=]
-URLMASK ({URLCHAR}+([({]{URLCHAR}*[)}])?)+
-FILESCHAR [a-z_A-Z0-9\\:\\\/\-\+]
-FILEECHAR [a-z_A-Z0-9\-\+]
-HFILEMASK ("."{FILESCHAR}*{FILEECHAR}+)*
-FILEMASK ({FILESCHAR}*{FILEECHAR}+("."{FILESCHAR}*{FILEECHAR}+)*)|{HFILEMASK}
-LINKMASK [^ \t\n\r\\@<&${}]+("("[^\n)]*")")?({BLANK}*("const"|"volatile"){BLANK}+)?
-VERBATIM "verbatim"{BLANK}*
-SPCMD1 {CMD}([a-z_A-Z][a-z_A-Z0-9]*|{VERBATIM})
-SPCMD2 {CMD}[\\@<>&$#%~".]
-SPCMD3 {CMD}form#[0-9]+
-SPCMD4 {CMD}"::"
-INOUT "in"|"out"|("in"{BLANK}*","{BLANK}*"out")|("out"{BLANK}*","{BLANK}*"in")
-PARAMIO {CMD}param{BLANK}*"["{BLANK}*{INOUT}{BLANK}*"]"
-TEMPCHAR [a-z_A-Z0-9,: \t\*\&]
-FUNCCHAR [a-z_A-Z0-9,:\<\> \t\*\&\[\]]
-SCOPESEP "::"|"#"|"."
-TEMPLPART "<"{TEMPCHAR}*">"
-SCOPEPRE {ID}{TEMPLPART}?{SCOPESEP}
-SCOPEKEYS ":"({ID}":")*
-SCOPECPP {SCOPEPRE}*(~)?{ID}("<"{TEMPCHAR}*">")?
-SCOPEOBJC {SCOPEPRE}?{ID}{SCOPEKEYS}?
-SCOPEMASK {SCOPECPP}|{SCOPEOBJC}
-FUNCARG "("{FUNCCHAR}*")"({BLANK}*("volatile"|"const"){BLANK})?
-OPNEW {BLANK}+"new"({BLANK}*"[]")?
-OPDEL {BLANK}+"delete"({BLANK}*"[]")?
-OPNORM {OPNEW}|{OPDEL}|"+"|"-"|"*"|"/"|"%"|"^"|"&"|"|"|"~"|"!"|"="|"<"|">"|"+="|"-="|"*="|"/="|"%="|"^="|"&="|"|="|"<<"|">>"|"<<="|">>="|"=="|"!="|"<="|">="|"&&"|"||"|"++"|"--"|","|"->*"|"->"|"[]"|"()"
-OPCAST {BLANK}+[^<(\r\n.,][^(\r\n.,]*
-OPMASK ({BLANK}*{OPNORM}{FUNCARG})
-OPMASKOPT ({BLANK}*{OPNORM}{FUNCARG}?)|({OPCAST}{FUNCARG})
-LNKWORD1 ("::"|"#")?{SCOPEMASK}
-CVSPEC {BLANK}*("const"|"volatile")
-LNKWORD2 (({SCOPEPRE}*"operator"{OPMASK})|({SCOPEPRE}"operator"{OPMASKOPT})|(("::"|"#"){SCOPEPRE}*"operator"{OPMASKOPT})){CVSPEC}?
-LNKWORD3 ([0-9a-z_A-Z\-]+("/"|"\\"))*[0-9a-z_A-Z\-]+("."[0-9a-z_A-Z]+)+
-CHARWORDQ [^ \t\n\r\\@<>()\[\]:;\?{}&%$#,."=']
-ESCWORD ("%"{ID}(("::"|"."){ID})*)|("%'")
-WORD1 {ESCWORD}|{CHARWORDQ}+|"{"|"}"|"'\"'"|("\""[^"\n]*\n?[^"\n]*"\"")
-WORD2 "."|","|"("|")"|"["|"]"|":"|";"|"\?"|"="|"'"
-WORD1NQ {ESCWORD}|{CHARWORDQ}+|"{"|"}"
-WORD2NQ "."|","|"("|")"|"["|"]"|":"|";"|"\?"|"="|"'"
-HTMLTAG "<"(("/")?){ID}({WS}+{ATTRIB})*{WS}*(("/")?)">"
-HTMLKEYL "strong"|"center"|"table"|"caption"|"small"|"code"|"dfn"|"var"|"img"|"pre"|"sub"|"sup"|"tr"|"td"|"th"|"ol"|"ul"|"li"|"tt"|"kbd"|"em"|"hr"|"dl"|"dt"|"dd"|"br"|"i"|"a"|"b"|"p"
-HTMLKEYU "STRONG"|"CENTER"|"TABLE"|"CAPTION"|"SMALL"|"CODE"|"DFN"|"VAR"|"IMG"|"PRE"|"SUB"|"SUP"|"TR"|"TD"|"TH"|"OL"|"UL"|"LI"|"TT"|"KBD"|"EM"|"HR"|"DL"|"DT"|"DD"|"BR"|"I"|"A"|"B"|"P"
-HTMLKEYW {HTMLKEYL}|{HTMLKEYU}
-REFWORD2 ("#"|"::")?({ID}{TEMPLPART}?("."|"#"|"::"|"-"|"/"))*({ID}(":")?){FUNCARG}?
-REFWORD3 ({ID}":")*{ID}":"?
-REFWORD {LABELID}|{REFWORD2}|{REFWORD3}
-
-%option noyywrap
-%option yylineno
-
-%x St_Para
-%x St_Comment
-%x St_Title
-%x St_TitleN
-%x St_TitleQ
-%x St_TitleA
-%x St_TitleV
-%x St_Code
-%x St_CodeOpt
-%x St_XmlCode
-%x St_HtmlOnly
-%x St_ManOnly
-%x St_LatexOnly
-%x St_XmlOnly
-%x St_Verbatim
-%x St_Dot
-%x St_Msc
-%x St_Param
-%x St_XRefItem
-%x St_XRefItem2
-%x St_File
-%x St_Pattern
-%x St_Link
-%x St_Cite
-%x St_Ref
-%x St_Ref2
-%x St_IntRef
-%x St_Text
-%x St_SkipTitle
-%x St_Anchor
-%x St_Snippet
-
-%x St_Sections
-%s St_SecLabel1
-%s St_SecLabel2
-%s St_SecTitle
-%x St_SecSkip
-
-%%
-<St_Para>\r /* skip carriage return */
-<St_Para>^{LISTITEM} { /* list item */
- QCString text=yytext;
- int dashPos = text.findRev('-');
- g_token->isEnumList = text.at(dashPos+1)=='#';
- g_token->id = -1;
- g_token->indent = computeIndent(yytext,dashPos);
- return TK_LISTITEM;
- }
-<St_Para>^{MLISTITEM} { /* list item */
- if (!Doxygen::markdownSupport)
- {
- REJECT;
- }
- else
- {
- QCString text=yytext;
- static QRegExp re("[*+]");
- int listPos = text.findRev(re);
- g_token->isEnumList = FALSE;
- g_token->id = -1;
- g_token->indent = computeIndent(yytext,listPos);
- return TK_LISTITEM;
- }
- }
-<St_Para>^{OLISTITEM} { /* numbered list item */
- if (!Doxygen::markdownSupport)
- {
- REJECT;
- }
- else
- {
- QCString text=yytext;
- static QRegExp re("[1-9]");
- int digitPos = text.find(re);
- int dotPos = text.find('.',digitPos);
- g_token->isEnumList = TRUE;
- g_token->id = atoi(QCString(yytext).mid(digitPos,dotPos-digitPos));
- g_token->indent = computeIndent(yytext,digitPos);
- return TK_LISTITEM;
- }
- }
-<St_Para>{BLANK}*\n{LISTITEM} { /* list item on next line */
- QCString text=yytext;
- text=text.right(text.length()-text.find('\n')-1);
- int dashPos = text.findRev('-');
- g_token->isEnumList = text.at(dashPos+1)=='#';
- g_token->id = -1;
- g_token->indent = computeIndent(text,dashPos);
- return TK_LISTITEM;
- }
-<St_Para>{BLANK}*\n{MLISTITEM} { /* list item on next line */
- if (!Doxygen::markdownSupport)
- {
- REJECT;
- }
- else
- {
- QCString text=yytext;
- static QRegExp re("[*+]");
- text=text.right(text.length()-text.find('\n')-1);
- int markPos = text.findRev(re);
- g_token->isEnumList = FALSE;
- g_token->id = -1;
- g_token->indent = computeIndent(text,markPos);
- return TK_LISTITEM;
- }
- }
-<St_Para>({BLANK}*\n)+{OLISTITEM} { /* list item on next line */
- if (!Doxygen::markdownSupport)
- {
- REJECT;
- }
- else
- {
- QCString text=yytext;
- int nl=text.findRev('\n');
- int len=text.length();
- text=text.right(len-nl-1);
- static QRegExp re("[1-9]");
- int digitPos = text.find(re);
- int dotPos = text.find('.',digitPos);
- g_token->isEnumList = TRUE;
- g_token->id = atoi(QCString(text).mid(digitPos,dotPos-digitPos));
- g_token->indent = computeIndent(text,digitPos);
- return TK_LISTITEM;
- }
- }
-<St_Para>^{ENDLIST} { /* end list */
- int dotPos = QCString(yytext).findRev('.');
- g_token->indent = computeIndent(yytext,dotPos);
- return TK_ENDLIST;
- }
-<St_Para>{BLANK}*\n{ENDLIST} { /* end list on next line */
- QCString text=yytext;
- text=text.right(text.length()-text.find('\n')-1);
- int dotPos = text.findRev('.');
- g_token->indent = computeIndent(text,dotPos);
- return TK_ENDLIST;
- }
-<St_Para>"{"{BLANK}*"@link" {
- g_token->name = "javalink";
- return TK_COMMAND;
- }
-<St_Para>"{"{BLANK}*"@inheritDoc"{BLANK}*"}" {
- g_token->name = "inheritdoc";
- return TK_COMMAND;
- }
-<St_Para>"@_fakenl" { // artificial new line
- yylineno++;
- }
-<St_Para>{SPCMD3} {
- g_token->name = "form";
- bool ok;
- g_token->id = QCString(yytext).right((int)yyleng-6).toInt(&ok);
- ASSERT(ok);
- return TK_COMMAND;
- }
-<St_Para>{SPCMD1} |
-<St_Para>{SPCMD2} |
-<St_Para>{SPCMD4} { /* special command */
- g_token->name = yytext+1;
- g_token->name = g_token->name.stripWhiteSpace();
- g_token->paramDir=TokenInfo::Unspecified;
- return TK_COMMAND;
- }
-<St_Para>{PARAMIO} { /* param [in,out] command */
- g_token->name = "param";
- QCString s(yytext);
- bool isIn = s.find("in")!=-1;
- bool isOut = s.find("out")!=-1;
- if (isIn)
- {
- if (isOut)
- {
- g_token->paramDir=TokenInfo::InOut;
- }
- else
- {
- g_token->paramDir=TokenInfo::In;
- }
- }
- else if (isOut)
- {
- g_token->paramDir=TokenInfo::Out;
- }
- else
- {
- g_token->paramDir=TokenInfo::Unspecified;
- }
- return TK_COMMAND;
- }
-<St_Para>("http:"|"https:"|"ftp:"|"file:"|"news:"){URLMASK}/\. { // URL.
- g_token->name=yytext;
- g_token->isEMailAddr=FALSE;
- return TK_URL;
- }
-<St_Para>("http:"|"https:"|"ftp:"|"file:"|"news:"){URLMASK} { // URL
- g_token->name=yytext;
- g_token->isEMailAddr=FALSE;
- return TK_URL;
- }
-<St_Para>"<"("http:"|"https:"|"ftp:"|"file:"|"news:"){URLMASK}">" { // URL
- g_token->name=yytext;
- g_token->name = g_token->name.mid(1,g_token->name.length()-2);
- g_token->isEMailAddr=FALSE;
- return TK_URL;
- }
-<St_Para>{MAILADR} { // Mail address
- g_token->name=yytext;
- g_token->name.stripPrefix("mailto:");
- g_token->isEMailAddr=TRUE;
- return TK_URL;
- }
-<St_Para>"<"{MAILADR}">" { // Mail address
- g_token->name=yytext;
- g_token->name = g_token->name.mid(1,g_token->name.length()-2);
- g_token->name.stripPrefix("mailto:");
- g_token->isEMailAddr=TRUE;
- return TK_URL;
- }
-<St_Para>"$"{ID}":"[^\n$]+"$" { /* RCS tag */
- QCString tagName(yytext+1);
- int index=tagName.find(':');
- g_token->name = tagName.left(index+1);
- g_token->text = tagName.mid(index+2,tagName.length()-index-3);
- return TK_RCSTAG;
- }
-<St_Para,St_HtmlOnly>"$("{ID}")" { /* environment variable */
- QCString name = &yytext[2];
- name = name.left(name.length()-1);
- QCString value = portable_getenv(name);
- for (int i=value.length()-1;i>=0;i--) unput(value.at(i));
- }
-<St_Para>{HTMLTAG} { /* html tag */
- handleHtmlTag();
- return TK_HTMLTAG;
- }
-<St_Para,St_Text>"&"{ID}";" { /* special symbol */
- g_token->name = yytext;
- return TK_SYMBOL;
- }
-
- /********* patterns for linkable words ******************/
-
-<St_Para>{ID}/"<"{HTMLKEYW}">" { /* this rule is to prevent opening html
- * tag to be recognized as a templated classes
- */
- g_token->name = yytext;
- return TK_LNKWORD;
- }
-<St_Para>{LNKWORD1}/"<br>" | // prevent <br> html tag to be parsed as template arguments
-<St_Para>{LNKWORD1} |
-<St_Para>{LNKWORD1}{FUNCARG} |
-<St_Para>{LNKWORD2} |
-<St_Para>{LNKWORD3} {
- g_token->name = yytext;
- return TK_LNKWORD;
- }
-<St_Para>{LNKWORD1}{FUNCARG}{CVSPEC}[^a-z_A-Z0-9] {
- g_token->name = yytext;
- g_token->name = g_token->name.left(g_token->name.length()-1);
- unput(yytext[(int)yyleng-1]);
- return TK_LNKWORD;
- }
- /********* patterns for normal words ******************/
-
-<St_Para,St_Text>{WORD1} |
-<St_Para,St_Text>{WORD2} { /* function call */
- if (yytext[0]=='%') // strip % if present
- g_token->name = &yytext[1];
- else
- g_token->name = yytext;
- return TK_WORD;
-
- /* the following is dummy code to please the
- * compiler, removing this results in a warning
- * on my machine
- */
- goto find_rule;
- }
-<St_Text>({ID}".")+{ID} {
- g_token->name = yytext;
- return TK_WORD;
- }
-<St_Para,St_Text>"operator"/{BLANK}*"<"[a-zA-Z_0-9]+">" { // Special case: word "operator" followed by a HTML command
- // avoid interpretation as "operator <"
- g_token->name = yytext;
- return TK_WORD;
- }
-
- /*******************************************************/
-
-<St_Para,St_Text>{BLANK}+ |
-<St_Para,St_Text>{BLANK}*\n{BLANK}* { /* white space */
- g_token->chars=yytext;
- return TK_WHITESPACE;
- }
-<St_Text>[\\@<>&$#%~] {
- g_token->name = yytext;
- return TK_COMMAND;
- }
-<St_Para>({BLANK}*\n)+{BLANK}*\n{BLANK}* {
- if (g_insidePre)
- {
- /* Inside a <pre>..</pre> blank lines are treated
- * as whitespace.
- */
- g_token->chars=yytext;
- return TK_WHITESPACE;
- }
- else // found end of a paragraph
- {
- g_token->indent=computeIndent(yytext,(int)yyleng);
- int i;
- // put back the indentation (needed for list items)
- for (i=0;i<g_token->indent;i++)
- {
- unput(' ');
- }
- // tell flex that after putting the last indent
- // back we are at the beginning of the line
- YY_CURRENT_BUFFER->yy_at_bol=1;
- // start of a new paragraph
- return TK_NEWPARA;
- }
- }
-<St_CodeOpt>"{"{LABELID}"}" {
- g_token->name = yytext;
- g_token->name = g_token->name.mid(1,g_token->name.length()-2);
- BEGIN(St_Code);
- }
-<St_CodeOpt>\n |
-<St_CodeOpt>. {
- unput(*yytext);
- BEGIN(St_Code);
- }
-<St_Code>{WS}*{CMD}"endcode" {
- return RetVal_OK;
- }
-<St_XmlCode>{WS}*"</code>" {
- return RetVal_OK;
- }
-<St_Code,St_XmlCode>[^\\@\n<]+ |
-<St_Code,St_XmlCode>\n |
-<St_Code,St_XmlCode>. {
- g_token->verb+=yytext;
- }
-<St_HtmlOnly>{CMD}"endhtmlonly" {
- return RetVal_OK;
- }
-<St_HtmlOnly>[^\\@\n$]+ |
-<St_HtmlOnly>\n |
-<St_HtmlOnly>. {
- g_token->verb+=yytext;
- }
-<St_ManOnly>{CMD}"endmanonly" {
- return RetVal_OK;
- }
-<St_ManOnly>[^\\@\n$]+ |
-<St_ManOnly>\n |
-<St_ManOnly>. {
- g_token->verb+=yytext;
- }
-<St_LatexOnly>{CMD}"endlatexonly" {
- return RetVal_OK;
- }
-<St_LatexOnly>[^\\@\n]+ |
-<St_LatexOnly>\n |
-<St_LatexOnly>. {
- g_token->verb+=yytext;
- }
-<St_XmlOnly>{CMD}"endxmlonly" {
- return RetVal_OK;
- }
-<St_XmlOnly>[^\\@\n]+ |
-<St_XmlOnly>\n |
-<St_XmlOnly>. {
- g_token->verb+=yytext;
- }
-<St_Verbatim>{CMD}"endverbatim" {
- g_token->verb=stripEmptyLines(g_token->verb);
- return RetVal_OK;
- }
-<St_Verbatim>[^\\@\n]+ |
-<St_Verbatim>\n |
-<St_Verbatim>. { /* Verbatim text */
- g_token->verb+=yytext;
- }
-<St_Dot>{CMD}"enddot" {
- return RetVal_OK;
- }
-<St_Dot>[^\\@\n]+ |
-<St_Dot>\n |
-<St_Dot>. { /* dot text */
- g_token->verb+=yytext;
- }
-<St_Msc>{CMD}"endmsc" {
- return RetVal_OK;
- }
-<St_Msc>[^\\@\n]+ |
-<St_Msc>\n |
-<St_Msc>. { /* msc text */
- g_token->verb+=yytext;
- }
-<St_Title>"\"" { // quoted title
- BEGIN(St_TitleQ);
- }
-<St_Title>[ \t]+ {
- g_token->chars=yytext;
- return TK_WHITESPACE;
- }
-<St_Title>. { // non-quoted title
- unput(*yytext);
- BEGIN(St_TitleN);
- }
-<St_Title>\n {
- unput(*yytext);
- return 0;
- }
-<St_TitleN>"&"{ID}";" { /* symbol */
- g_token->name = yytext;
- return TK_SYMBOL;
- }
-<St_TitleN>{HTMLTAG} {
- }
-<St_TitleN>{SPCMD1} |
-<St_TitleN>{SPCMD2} { /* special command */
- g_token->name = yytext+1;
- g_token->paramDir=TokenInfo::Unspecified;
- return TK_COMMAND;
- }
-<St_TitleN>{WORD1} |
-<St_TitleN>{WORD2} { /* word */
- if (yytext[0]=='%') // strip % if present
- g_token->name = &yytext[1];
- else
- g_token->name = yytext;
- return TK_WORD;
- }
-<St_TitleN>[ \t]+ {
- g_token->chars=yytext;
- return TK_WHITESPACE;
- }
-<St_TitleN>\n { /* new line => end of title */
- unput(*yytext);
- return 0;
- }
-<St_TitleQ>"&"{ID}";" { /* symbol */
- g_token->name = yytext;
- return TK_SYMBOL;
- }
-<St_TitleQ>{SPCMD1} |
-<St_TitleQ>{SPCMD2} { /* special command */
- g_token->name = yytext+1;
- g_token->paramDir=TokenInfo::Unspecified;
- return TK_COMMAND;
- }
-<St_TitleQ>{WORD1NQ} |
-<St_TitleQ>{WORD2NQ} { /* word */
- g_token->name = yytext;
- return TK_WORD;
- }
-<St_TitleQ>[ \t]+ {
- g_token->chars=yytext;
- return TK_WHITESPACE;
- }
-<St_TitleQ>"\"" { /* closing quote => end of title */
- BEGIN(St_TitleA);
- return 0;
- }
-<St_TitleQ>\n { /* new line => end of title */
- unput(*yytext);
- return 0;
- }
-<St_TitleA>{BLANK}*{ID}{BLANK}*"="{BLANK}* { // title attribute
- g_token->name = yytext;
- g_token->name = g_token->name.left(
- g_token->name.find('=')).stripWhiteSpace();
- BEGIN(St_TitleV);
- }
-<St_TitleV>[^ \t\r\n]+ { // attribute value
- g_token->chars = yytext;
- BEGIN(St_TitleN);
- return TK_WORD;
- }
-<St_TitleV,St_TitleA>. {
- unput(*yytext);
- return 0;
- }
-<St_TitleV,St_TitleA>\n {
- return 0;
- }
-
-<St_Anchor>{LABELID}{WS}? { // anchor
- g_token->name = QCString(yytext).stripWhiteSpace();
- return TK_WORD;
- }
-<St_Anchor>. {
- unput(*yytext);
- return 0;
- }
-<St_Cite>{CITEID} { // label to cite
- g_token->name=yytext;
- return TK_WORD;
- }
-<St_Cite>{BLANK} { // white space
- unput(' ');
- return 0;
- }
-<St_Cite>\n { // new line
- unput(*yytext);
- return 0;
- }
-<St_Cite>. { // any other character
- unput(*yytext);
- return 0;
- }
-<St_Ref>{REFWORD} { // label to refer to
- g_token->name=yytext;
- return TK_WORD;
- }
-<St_Ref>{BLANK} { // white space
- unput(' ');
- return 0;
- }
-<St_Ref>{WS}+"\""{WS}* { // white space following by quoted string
- BEGIN(St_Ref2);
- }
-<St_Ref>\n { // new line
- unput(*yytext);
- return 0;
- }
-<St_Ref>. { // any other character
- unput(*yytext);
- return 0;
- }
-<St_IntRef>[A-Z_a-z0-9.:/#\-\+\(\)]+ {
- g_token->name = yytext;
- return TK_WORD;
- }
-<St_IntRef>{BLANK}+"\"" {
- BEGIN(St_Ref2);
- }
-<St_Ref2>"&"{ID}";" { /* symbol */
- g_token->name = yytext;
- return TK_SYMBOL;
- }
-<St_Ref2>{SPCMD1} |
-<St_Ref2>{SPCMD2} { /* special command */
- g_token->name = yytext+1;
- g_token->paramDir=TokenInfo::Unspecified;
- return TK_COMMAND;
- }
-<St_Ref2>{WORD1NQ} |
-<St_Ref2>{WORD2NQ} {
- /* word */
- g_token->name = yytext;
- return TK_WORD;
- }
-<St_Ref2>[ \t]+ {
- g_token->chars=yytext;
- return TK_WHITESPACE;
- }
-<St_Ref2>"\""|\n { /* " or \n => end of title */
- return 0;
- }
-<St_XRefItem>{LABELID} {
- g_token->name=yytext;
- }
-<St_XRefItem>" " {
- BEGIN(St_XRefItem2);
- }
-<St_XRefItem2>[0-9]+"." {
- QCString numStr=yytext;
- numStr=numStr.left((int)yyleng-1);
- g_token->id=numStr.toInt();
- return RetVal_OK;
- }
-<St_Para,St_Title,St_Ref2>"<!--" { /* html style comment block */
- g_commentState = YY_START;
- BEGIN(St_Comment);
- }
-<St_Param>"\""[^\n\"]+"\"" {
- g_token->name = yytext+1;
- g_token->name = g_token->name.left((int)yyleng-2);
- return TK_WORD;
- }
-<St_Param>({PHPTYPE}{BLANK}*"|"{BLANK}*)*{PHPTYPE}{WS}+("&")?"$"{LABELID} {
- QCString params = yytext;
- int j = params.find('&');
- int i = params.find('$');
- if (j<i && j!=-1) i=j;
- QCString types = params.left(i).stripWhiteSpace();
- g_token->name = types+"#"+params.mid(i);
- return TK_WORD;
- }
-<St_Param>[^ \t\n,]+ {
- g_token->name = yytext;
- return TK_WORD;
- }
-<St_Param>{WS}*","{WS}* /* param separator */
-<St_Param>{WS} {
- g_token->chars=yytext;
- return TK_WHITESPACE;
- }
-<St_File>{FILEMASK} {
- g_token->name = yytext;
- return TK_WORD;
- }
-<St_File>"\""[^\n\"]+"\"" {
- QCString text=yytext;
- g_token->name = text.mid(1,text.length()-2);
- return TK_WORD;
- }
-<St_Pattern>[^\r\n]+ {
- g_token->name = yytext;
- g_token->name = g_token->name.stripWhiteSpace();
- return TK_WORD;
- }
-<St_Link>{LINKMASK}|{REFWORD} {
- g_token->name = yytext;
- return TK_WORD;
- }
-<St_Comment>"-->" { /* end of html comment */
- BEGIN(g_commentState);
- }
-<St_Comment>[^-\n]+ /* inside html comment */
-<St_Comment>. /* inside html comment */
-
- /* State for skipping title (all chars until the end of the line) */
-
-<St_SkipTitle>.
-<St_SkipTitle>\n { return 0; }
-
- /* State for the pass used to find the anchors and sections */
-
-<St_Sections>[^\n@\\]+
-<St_Sections>"@@"|"\\\\"
-<St_Sections>{CMD}"anchor"{BLANK}+ {
- g_secType = SectionInfo::Anchor;
- BEGIN(St_SecLabel1);
- }
-<St_Sections>{CMD}"section"{BLANK}+ {
- g_secType = SectionInfo::Section;
- BEGIN(St_SecLabel2);
- }
-<St_Sections>{CMD}"subsection"{BLANK}+ {
- g_secType = SectionInfo::Subsection;
- BEGIN(St_SecLabel2);
- }
-<St_Sections>{CMD}"subsubsection"{BLANK}+ {
- g_secType = SectionInfo::Subsubsection;
- BEGIN(St_SecLabel2);
- }
-<St_Sections>{CMD}"paragraph"{BLANK}+ {
- g_secType = SectionInfo::Paragraph;
- BEGIN(St_SecLabel2);
- }
-<St_Sections>{CMD}"verbatim"/[^a-z_A-Z0-9] {
- g_endMarker="endverbatim";
- BEGIN(St_SecSkip);
- }
-<St_Sections>{CMD}"dot"/[^a-z_A-Z0-9] {
- g_endMarker="enddot";
- BEGIN(St_SecSkip);
- }
-<St_Sections>{CMD}"msc"/[^a-z_A-Z0-9] {
- g_endMarker="endmsc";
- BEGIN(St_SecSkip);
- }
-<St_Sections>{CMD}"htmlonly"/[^a-z_A-Z0-9] {
- g_endMarker="endhtmlonly";
- BEGIN(St_SecSkip);
- }
-<St_Sections>{CMD}"latexonly"/[^a-z_A-Z0-9] {
- g_endMarker="endlatexonly";
- BEGIN(St_SecSkip);
- }
-<St_Sections>{CMD}"xmlonly"/[^a-z_A-Z0-9] {
- g_endMarker="endxmlonly";
- BEGIN(St_SecSkip);
- }
-<St_Sections>{CMD}"code"/[^a-z_A-Z0-9] {
- g_endMarker="endcode";
- BEGIN(St_SecSkip);
- }
-<St_Sections>"<!--" {
- g_endMarker="-->";
- BEGIN(St_SecSkip);
- }
-<St_SecSkip>{CMD}{ID} {
- if (strcmp(yytext+1,g_endMarker)==0)
- {
- BEGIN(St_Sections);
- }
- }
-<St_SecSkip>"-->" {
- if (strcmp(yytext,g_endMarker)==0)
- {
- BEGIN(St_Sections);
- }
- }
-<St_SecSkip>[^a-z_A-Z0-9\-\\\@]+
-<St_SecSkip>.
-<St_SecSkip>\n
-<St_Sections>.
-<St_Sections>\n
-<St_SecLabel1>{LABELID} {
- g_secLabel = yytext;
- processSection();
- BEGIN(St_Sections);
- }
-<St_SecLabel2>{LABELID}{BLANK}+ |
-<St_SecLabel2>{LABELID} {
- g_secLabel = yytext;
- g_secLabel = g_secLabel.stripWhiteSpace();
- BEGIN(St_SecTitle);
- }
-<St_SecTitle>[^\n]+ |
-<St_SecTitle>[^\n]*\n {
- g_secTitle = yytext;
- g_secTitle = g_secTitle.stripWhiteSpace();
- processSection();
- BEGIN(St_Sections);
- }
-<St_SecTitle,St_SecLabel1,St_SecLabel2>. {
- warn(g_fileName,yylineno,"warning: Unexpected character `%s' while looking for section label or title",yytext);
- }
-
-<St_Snippet>[^\n]+ |
-<St_Snippet>[^\n]*\n {
- g_token->name = yytext;
- g_token->name = g_token->name.stripWhiteSpace();
- return TK_WORD;
- }
-
- /* Generic rules that work for all states */
-<*>\n {
- warn(g_fileName,yylineno,"warning: Unexpected new line character");
- }
-<*>[\\@<>&$#%~"=] { /* unescaped special character */
- //warn(g_fileName,yylineno,"warning: Unexpected character `%s', assuming command \\%s was meant.",yytext,yytext);
- g_token->name = yytext;
- return TK_COMMAND;
- }
-<*>. {
- warn(g_fileName,yylineno,"warning: Unexpected character `%s'",yytext);
- }
-%%
-
-//--------------------------------------------------------------------------
-
-void doctokenizerYYFindSections(const char *input,Definition *d,
- MemberGroup *mg,const char *fileName)
-{
- if (input==0) return;
- g_inputString = input;
- //printf("parsing --->`%s'<---\n",input);
- g_inputPos = 0;
- g_definition = d;
- g_memberGroup = mg;
- g_fileName = fileName;
- BEGIN(St_Sections);
- doctokenizerYYlineno = 1;
- doctokenizerYYlex();
-}
-
-void doctokenizerYYinit(const char *input,const char *fileName)
-{
- g_inputString = input;
- g_inputPos = 0;
- g_fileName = fileName;
- g_insidePre = FALSE;
- BEGIN(St_Para);
-}
-
-void doctokenizerYYsetStatePara()
-{
- BEGIN(St_Para);
-}
-
-void doctokenizerYYsetStateTitle()
-{
- BEGIN(St_Title);
-}
-
-void doctokenizerYYsetStateTitleAttrValue()
-{
- BEGIN(St_TitleV);
-}
-
-void doctokenizerYYsetStateCode()
-{
- g_token->verb="";
- g_token->name="";
- BEGIN(St_CodeOpt);
-}
-
-void doctokenizerYYsetStateXmlCode()
-{
- g_token->verb="";
- g_token->name="";
- BEGIN(St_XmlCode);
-}
-
-void doctokenizerYYsetStateHtmlOnly()
-{
- g_token->verb="";
- BEGIN(St_HtmlOnly);
-}
-
-void doctokenizerYYsetStateManOnly()
-{
- g_token->verb="";
- BEGIN(St_ManOnly);
-}
-
-void doctokenizerYYsetStateXmlOnly()
-{
- g_token->verb="";
- BEGIN(St_XmlOnly);
-}
-
-void doctokenizerYYsetStateLatexOnly()
-{
- g_token->verb="";
- BEGIN(St_LatexOnly);
-}
-
-void doctokenizerYYsetStateVerbatim()
-{
- g_token->verb="";
- BEGIN(St_Verbatim);
-}
-
-void doctokenizerYYsetStateDot()
-{
- g_token->verb="";
- BEGIN(St_Dot);
-}
-
-void doctokenizerYYsetStateMsc()
-{
- g_token->verb="";
- BEGIN(St_Msc);
-}
-
-void doctokenizerYYsetStateParam()
-{
- BEGIN(St_Param);
-}
-
-void doctokenizerYYsetStateXRefItem()
-{
- BEGIN(St_XRefItem);
-}
-
-void doctokenizerYYsetStateFile()
-{
- BEGIN(St_File);
-}
-
-void doctokenizerYYsetStatePattern()
-{
- BEGIN(St_Pattern);
-}
-
-void doctokenizerYYsetStateLink()
-{
- BEGIN(St_Link);
-}
-
-void doctokenizerYYsetStateCite()
-{
- BEGIN(St_Cite);
-}
-
-void doctokenizerYYsetStateRef()
-{
- BEGIN(St_Ref);
-}
-
-void doctokenizerYYsetStateInternalRef()
-{
- BEGIN(St_IntRef);
-}
-
-void doctokenizerYYsetStateText()
-{
- BEGIN(St_Text);
-}
-
-void doctokenizerYYsetStateSkipTitle()
-{
- BEGIN(St_SkipTitle);
-}
-
-void doctokenizerYYsetStateAnchor()
-{
- BEGIN(St_Anchor);
-}
-
-void doctokenizerYYsetStateSnippet()
-{
- BEGIN(St_Snippet);
-}
-
-void doctokenizerYYcleanup()
-{
- yy_delete_buffer( YY_CURRENT_BUFFER );
-}
-
-void doctokenizerYYsetInsidePre(bool b)
-{
- g_insidePre = b;
-}
-
-void doctokenizerYYpushBackHtmlTag(const char *tag)
-{
- QCString tagName = tag;
- int i,l = tagName.length();
- unput('>');
- for (i=l-1;i>=0;i--)
- {
- unput(tag[i]);
- }
- unput('<');
-}
-
-#if !defined(YY_FLEX_SUBMINOR_VERSION)
-extern "C" { // some bogus code to keep the compiler happy
- void doctokenizerYYdummy() { yy_flex_realloc(0,0); }
-}
-#endif
-
diff --git a/trunk/src/docvisitor.h b/trunk/src/docvisitor.h
deleted file mode 100644
index c9acf64..0000000
--- a/trunk/src/docvisitor.h
+++ /dev/null
@@ -1,191 +0,0 @@
-/******************************************************************************
- *
- *
- *
- *
- * Copyright (C) 1997-2012 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.
- *
- */
-
-#ifndef _DOCVISITOR_H
-#define _DOCVISITOR_H
-
-// ids
-const int DocVisitor_Html = 0;
-const int DocVisitor_Latex = 1;
-const int DocVisitor_XML = 2;
-const int DocVisitor_RTF = 3;
-const int DocVisitor_Man = 4;
-const int DocVisitor_Text = 5;
-const int DocVisitor_Other = 6;
-
-// forward declarations
-class DocWord;
-class DocWhiteSpace;
-class DocAutoList;
-class DocAutoListItem;
-class DocPara;
-class DocRoot;
-class DocSymbol;
-class DocURL;
-class DocStyleChange;
-class DocSimpleSect;
-class DocTitle;
-class DocSimpleList;
-class DocSimpleListItem;
-class DocSection;
-class DocVerbatim;
-class DocXRefItem;
-class DocHtmlList;
-class DocHtmlListItem;
-class DocHtmlDescList;
-class DocHtmlDescTitle;
-class DocHtmlDescData;
-class DocHtmlTable;
-class DocHtmlRow;
-class DocHtmlCell;
-class DocHtmlCaption;
-class DocLineBreak;
-class DocHorRuler;
-class DocAnchor;
-class DocIndexEntry;
-class DocInternal;
-class DocHRef;
-class DocInclude;
-class DocIncOperator;
-class DocHtmlHeader;
-class DocImage;
-class DocDotFile;
-class DocMscFile;
-class DocLink;
-class DocCite;
-class DocRef;
-class DocFormula;
-class DocSecRefItem;
-class DocSecRefList;
-class DocLinkedWord;
-class DocParamSect;
-class DocParamList;
-class DocInternalRef;
-class DocCopy; // TODO: no longer generated => remove
-class DocText;
-class DocSimpleSectSep;
-class DocHtmlBlockQuote;
-
-/*! @brief Abstract visitor that participates in the visitor pattern.
- */
-class DocVisitor
-{
- int m_id;
- public:
- DocVisitor(int id) : m_id(id) {}
- virtual ~DocVisitor() {}
- int id() const { return m_id; }
-
- /*! @name Visitor functions for leaf nodes
- * @{
- */
- virtual void visit(DocWord *) = 0;
- virtual void visit(DocWhiteSpace *) = 0;
- virtual void visit(DocSymbol *) = 0;
- virtual void visit(DocURL *) = 0;
- virtual void visit(DocStyleChange *) = 0;
- virtual void visit(DocVerbatim *) = 0;
- virtual void visit(DocLineBreak *) = 0;
- virtual void visit(DocHorRuler *) = 0;
- virtual void visit(DocAnchor *) = 0;
- virtual void visit(DocInclude *) = 0;
- virtual void visit(DocIncOperator *) = 0;
- virtual void visit(DocFormula *) = 0;
- virtual void visit(DocLinkedWord *) = 0;
- virtual void visit(DocIndexEntry *) = 0;
- virtual void visit(DocSimpleSectSep *) = 0;
- virtual void visit(DocCite *) = 0;
- /*! @} */
-
- /*! @name Visitor functions for internal nodes
- * @{
- */
- virtual void visitPre(DocAutoList *) = 0;
- virtual void visitPost(DocAutoList *) = 0;
- virtual void visitPre(DocAutoListItem *) = 0;
- virtual void visitPost(DocAutoListItem *) = 0;
- virtual void visitPre(DocPara *) = 0;
- virtual void visitPost(DocPara *) = 0;
- virtual void visitPre(DocRoot *) = 0;
- virtual void visitPost(DocRoot *) = 0;
- virtual void visitPre(DocSimpleSect *) = 0;
- virtual void visitPost(DocSimpleSect *) = 0;
- virtual void visitPre(DocTitle *) = 0;
- virtual void visitPost(DocTitle *) = 0;
- virtual void visitPre(DocSimpleList *) = 0;
- virtual void visitPost(DocSimpleList *) = 0;
- virtual void visitPre(DocSimpleListItem *) = 0;
- virtual void visitPost(DocSimpleListItem *) = 0;
- virtual void visitPre(DocSection *) = 0;
- virtual void visitPost(DocSection *) = 0;
- virtual void visitPre(DocHtmlList *) = 0;
- virtual void visitPost(DocHtmlListItem *) = 0;
- virtual void visitPre(DocHtmlListItem *) = 0;
- virtual void visitPost(DocHtmlList *) = 0;
- virtual void visitPre(DocHtmlDescList *) = 0;
- virtual void visitPost(DocHtmlDescList *) = 0;
- virtual void visitPre(DocHtmlDescTitle *) = 0;
- virtual void visitPost(DocHtmlDescTitle *) = 0;
- virtual void visitPre(DocHtmlDescData *) = 0;
- virtual void visitPost(DocHtmlDescData *) = 0;
- virtual void visitPre(DocHtmlTable *) = 0;
- virtual void visitPost(DocHtmlRow *) = 0;
- virtual void visitPre(DocHtmlCell *) = 0;
- virtual void visitPost(DocHtmlCell *) = 0;
- virtual void visitPre(DocHtmlRow *) = 0;
- virtual void visitPost(DocHtmlTable *) = 0;
- virtual void visitPre(DocHtmlCaption *) = 0;
- virtual void visitPost(DocHtmlCaption *) = 0;
- virtual void visitPre(DocInternal *) = 0;
- virtual void visitPost(DocInternal *) = 0;
- virtual void visitPre(DocHRef *) = 0;
- virtual void visitPost(DocHRef *) = 0;
- virtual void visitPre(DocHtmlHeader *) = 0;
- virtual void visitPost(DocHtmlHeader *) = 0;
- virtual void visitPre(DocImage *) = 0;
- virtual void visitPost(DocImage *) = 0;
- virtual void visitPre(DocDotFile *) = 0;
- virtual void visitPost(DocDotFile *) = 0;
- virtual void visitPre(DocMscFile *) = 0;
- virtual void visitPost(DocMscFile *) = 0;
- virtual void visitPre(DocLink *) = 0;
- virtual void visitPost(DocLink *) = 0;
- virtual void visitPre(DocRef *) = 0;
- virtual void visitPost(DocRef *) = 0;
- virtual void visitPre(DocSecRefItem *) = 0;
- virtual void visitPost(DocSecRefItem *) = 0;
- virtual void visitPre(DocSecRefList *) = 0;
- virtual void visitPost(DocSecRefList *) = 0;
- virtual void visitPre(DocParamSect *) = 0;
- virtual void visitPost(DocParamSect *) = 0;
- virtual void visitPre(DocParamList *) = 0;
- virtual void visitPost(DocParamList *) = 0;
- virtual void visitPre(DocXRefItem *) = 0;
- virtual void visitPost(DocXRefItem *) = 0;
- virtual void visitPre(DocInternalRef *) = 0;
- virtual void visitPost(DocInternalRef *) = 0;
- virtual void visitPre(DocCopy *) = 0;
- virtual void visitPost(DocCopy *) = 0;
- virtual void visitPre(DocText *) = 0;
- virtual void visitPost(DocText *) = 0;
- virtual void visitPre(DocHtmlBlockQuote *) = 0;
- virtual void visitPost(DocHtmlBlockQuote *) = 0;
- /*! @} */
-};
-
-#endif
diff --git a/trunk/src/dot.cpp b/trunk/src/dot.cpp
deleted file mode 100644
index e178ef1..0000000
--- a/trunk/src/dot.cpp
+++ /dev/null
@@ -1,4576 +0,0 @@
-/*****************************************************************************
- *
- *
- *
- *
- * Copyright (C) 1997-2012 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.
- *
- */
-
-#ifdef _WIN32
-#include <windows.h>
-#define BITMAP W_BITMAP
-#endif
-
-#include <stdlib.h>
-
-#include "dot.h"
-#include "doxygen.h"
-#include "message.h"
-#include "util.h"
-#include "config.h"
-#include "language.h"
-#include "defargs.h"
-#include "docparser.h"
-#include "debug.h"
-#include "pagedef.h"
-#include "portable.h"
-#include "dirdef.h"
-#include "vhdldocgen.h"
-#include <qdir.h>
-#include <qfile.h>
-#include "ftextstream.h"
-#include "md5.h"
-#include <qqueue.h>
-
-#include <qthread.h>
-#include <qmutex.h>
-#include <qwaitcondition.h>
-
-#define MAP_CMD "cmapx"
-
-//#define FONTNAME "Helvetica"
-#define FONTNAME getDotFontName()
-#define FONTSIZE getDotFontSize()
-
-//--------------------------------------------------------------------
-
-static const char svgZoomHeader[] =
-"<svg id=\"main\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" xml:space=\"preserve\" onload=\"init(evt)\">\n"
-" <defs>\n"
-" <circle id=\"rim\" cx=\"0\" cy=\"0\" r=\"7\"/>\n"
-" <circle id=\"rim2\" cx=\"0\" cy=\"0\" r=\"3.5\"/>\n"
-" <g id=\"zoomPlus\">\n"
-" <use xlink:href=\"#rim\" fill=\"#404040\">\n"
-" <set attributeName=\"fill\" to=\"#808080\" begin=\"zoomplus.mouseover\" end=\"zoomplus.mouseout\"/>\n"
-" </use>\n"
-" <path d=\"M-4,0h8M0,-4v8\" fill=\"none\" stroke=\"white\" stroke-width=\"1.5\" pointer-events=\"none\"/>\n"
-" </g>\n"
-" <g id=\"zoomMin\">\n"
-" <use xlink:href=\"#rim\" fill=\"#404040\">\n"
-" <set attributeName=\"fill\" to=\"#808080\" begin=\"zoomminus.mouseover\" end=\"zoomminus.mouseout\"/>\n"
-" </use>\n"
-" <path d=\"M-4,0h8\" fill=\"none\" stroke=\"white\" stroke-width=\"1.5\" pointer-events=\"none\"/>\n"
-" </g>\n"
-" <g id=\"dirArrow\">\n"
-" <path fill=\"none\" stroke=\"white\" stroke-width=\"1.5\" d=\"M0,-3.0v7 M-2.5,-0.5L0,-3.0L2.5,-0.5\"/>\n"
-" </g>\n"
-" <g id=\"resetDef\">\n"
-" <use xlink:href=\"#rim2\" fill=\"#404040\">\n"
-" <set attributeName=\"fill\" to=\"#808080\" begin=\"reset.mouseover\" end=\"reset.mouseout\"/>\n"
-" </use>\n"
-" </g>\n"
-" </defs>\n"
-"\n"
-"<script type=\"text/javascript\">\n"
-;
-
-static const char svgZoomFooter[] =
-" <g id=\"navigator\" transform=\"translate(0 0)\" fill=\"#404254\">\n"
-" <rect fill=\"#f2f5e9\" fill-opacity=\"0.5\" stroke=\"#606060\" stroke-width=\".5\" x=\"0\" y=\"0\" width=\"60\" height=\"60\"/>\n"
-" <use id=\"zoomplus\" xlink:href=\"#zoomPlus\" x=\"17\" y=\"9\" onmousedown=\"handleZoom(evt,'in')\"/>\n"
-" <use id=\"zoomminus\" xlink:href=\"#zoomMin\" x=\"42\" y=\"9\" onmousedown=\"handleZoom(evt,'out')\"/>\n"
-" <use id=\"reset\" xlink:href=\"#resetDef\" x=\"30\" y=\"36\" onmousedown=\"handleReset()\"/>\n"
-" <g id=\"arrowUp\" xlink:href=\"#dirArrow\" transform=\"translate(30 24)\" onmousedown=\"handlePan(0,-1)\">\n"
-" <use xlink:href=\"#rim\" fill=\"#404040\">\n"
-" <set attributeName=\"fill\" to=\"#808080\" begin=\"arrowUp.mouseover\" end=\"arrowUp.mouseout\"/>\n"
-" </use>\n"
-" <path fill=\"none\" stroke=\"white\" stroke-width=\"1.5\" d=\"M0,-3.0v7 M-2.5,-0.5L0,-3.0L2.5,-0.5\"/>\n"
-" </g>\n"
-" <g id=\"arrowRight\" xlink:href=\"#dirArrow\" transform=\"rotate(90) translate(36 -43)\" onmousedown=\"handlePan(1,0)\">\n"
-" <use xlink:href=\"#rim\" fill=\"#404040\">\n"
-" <set attributeName=\"fill\" to=\"#808080\" begin=\"arrowRight.mouseover\" end=\"arrowRight.mouseout\"/>\n"
-" </use>\n"
-" <path fill=\"none\" stroke=\"white\" stroke-width=\"1.5\" d=\"M0,-3.0v7 M-2.5,-0.5L0,-3.0L2.5,-0.5\"/>\n"
-" </g>\n"
-" <g id=\"arrowDown\" xlink:href=\"#dirArrow\" transform=\"rotate(180) translate(-30 -48)\" onmousedown=\"handlePan(0,1)\">\n"
-" <use xlink:href=\"#rim\" fill=\"#404040\">\n"
-" <set attributeName=\"fill\" to=\"#808080\" begin=\"arrowDown.mouseover\" end=\"arrowDown.mouseout\"/>\n"
-" </use>\n"
-" <path fill=\"none\" stroke=\"white\" stroke-width=\"1.5\" d=\"M0,-3.0v7 M-2.5,-0.5L0,-3.0L2.5,-0.5\"/>\n"
-" </g>\n"
-" <g id=\"arrowLeft\" xlink:href=\"#dirArrow\" transform=\"rotate(270) translate(-36 17)\" onmousedown=\"handlePan(-1,0)\">\n"
-" <use xlink:href=\"#rim\" fill=\"#404040\">\n"
-" <set attributeName=\"fill\" to=\"#808080\" begin=\"arrowLeft.mouseover\" end=\"arrowLeft.mouseout\"/>\n"
-" </use>\n"
-" <path fill=\"none\" stroke=\"white\" stroke-width=\"1.5\" d=\"M0,-3.0v7 M-2.5,-0.5L0,-3.0L2.5,-0.5\"/>\n"
-" </g>\n"
-" </g>\n"
-" <svg viewBox=\"0 0 25 25\" width=\"100%\" height=\"30px\" preserveAspectRatio=\"xMaxYMin meet\"> \n"
-" <g id=\"printButton\" transform=\"scale(0.4 0.4)\" onmousedown=\"handlePrint(evt)\">\n"
-" <rect height=\"23.33753581\" id=\"paper\" rx=\"2\" style=\"fill:#f2f5e9;fill-rule:evenodd;stroke:#111111;stroke-width:3.224;stroke-linejoin:round;\" transform=\"matrix(1.000000,0.000000,-0.339266,0.940691,0.000000,0.000000)\" width=\"25.55231285\" x=\"26.69387353\" y=\"7.36162977\"/>\n"
-" <rect height=\"26.272097\" id=\"body\" rx=\"2\" style=\"fill:#404040;fill-rule:evenodd;stroke:#111111;stroke-width:3.125;stroke-linejoin:round;\" width=\"50\" x=\"4.5295201\" y=\"27.078951\"/>\n"
-" <rect height=\"8.27750969\" id=\"tray\" style=\"fill:#d2d5c9;fill-rule:evenodd;stroke:#111111;stroke-width:3.125;stroke-linecap:round;stroke-linejoin:round;\" width=\"40\" x=\"10.28778839\" y=\"44.96812282\"/>\n"
-" </g>\n"
-" </svg>\n"
-"</svg>\n"
-;
-
-//--------------------------------------------------------------------
-
-static const int maxCmdLine = 40960;
-
-/*! mapping from protection levels to color names */
-static const char *normalEdgeColorMap[] =
-{
- "midnightblue", // Public
- "darkgreen", // Protected
- "firebrick4", // Private
- "darkorchid3", // "use" relation
- "grey75", // Undocumented
- "orange" // template relation
-};
-
-static const char *normalArrowStyleMap[] =
-{
- "empty", // Public
- "empty", // Protected
- "empty", // Private
- "open", // "use" relation
- 0, // Undocumented
- 0 // template relation
-};
-
-static const char *normalEdgeStyleMap[] =
-{
- "solid", // inheritance
- "dashed" // usage
-};
-
-static const char *umlEdgeColorMap[] =
-{
- "midnightblue", // Public
- "darkgreen", // Protected
- "firebrick4", // Private
- "grey25", // "use" relation
- "grey75", // Undocumented
- "orange" // template relation
-};
-
-static const char *umlArrowStyleMap[] =
-{
- "onormal", // Public
- "onormal", // Protected
- "onormal", // Private
- "odiamond", // "use" relation
- 0, // Undocumented
- 0 // template relation
-};
-
-static const char *umlEdgeStyleMap[] =
-{
- "solid", // inheritance
- "solid" // usage
-};
-
-struct EdgeProperties
-{
- const char * const *edgeColorMap;
- const char * const *arrowStyleMap;
- const char * const *edgeStyleMap;
-};
-
-static EdgeProperties normalEdgeProps =
-{
- normalEdgeColorMap, normalArrowStyleMap, normalEdgeStyleMap
-};
-
-static EdgeProperties umlEdgeProps =
-{
- umlEdgeColorMap, umlArrowStyleMap, umlEdgeStyleMap
-};
-
-
-static QCString getDotFontName()
-{
- static QCString dotFontName = Config_getString("DOT_FONTNAME");
- if (dotFontName.isEmpty())
- {
- //dotFontName="FreeSans.ttf";
- dotFontName="Helvetica";
- }
- return dotFontName;
-}
-
-static int getDotFontSize()
-{
- static int dotFontSize = Config_getInt("DOT_FONTSIZE");
- if (dotFontSize<4) dotFontSize=4;
- return dotFontSize;
-}
-
-static void writeGraphHeader(FTextStream &t)
-{
- static bool interactiveSVG = Config_getBool("INTERACTIVE_SVG");
- t << "digraph G" << endl;
- t << "{" << endl;
- if (interactiveSVG) // insert a comment to force regeneration when this
- // option is toggled
- {
- t << " // INTERACTIVE_SVG=YES\n";
- }
- if (Config_getBool("DOT_TRANSPARENT"))
- {
- t << " bgcolor=\"transparent\";" << endl;
- }
- t << " edge [fontname=\"" << FONTNAME << "\","
- "fontsize=\"" << FONTSIZE << "\","
- "labelfontname=\"" << FONTNAME << "\","
- "labelfontsize=\"" << FONTSIZE << "\"];\n";
- t << " node [fontname=\"" << FONTNAME << "\","
- "fontsize=\"" << FONTSIZE << "\",shape=record];\n";
-}
-
-static void writeGraphFooter(FTextStream &t)
-{
- t << "}" << endl;
-}
-
-static QCString replaceRef(const QCString &buf,const QCString relPath,
- bool urlOnly,const QCString &context,const QCString &target=QCString())
-{
- // search for href="...", store ... part in link
- QCString href = "href";
- //bool isXLink=FALSE;
- int len = 6;
- int indexS = buf.find("href=\""), indexE;
- if (indexS>5 && buf.find("xlink:href=\"")!=-1) // XLink href (for SVG)
- {
- indexS-=6;
- len+=6;
- href.prepend("xlink:");
- //isXLink=TRUE;
- }
- if (indexS>=0 && (indexE=buf.find('"',indexS+len))!=-1)
- {
- QCString link = buf.mid(indexS+len,indexE-indexS-len);
- QCString result;
- if (urlOnly) // for user defined dot graphs
- {
- if (link.left(5)=="\\ref " || link.left(5)=="@ref ") // \ref url
- {
- result=href+"=\"";
- // fake ref node to resolve the url
- DocRef *df = new DocRef( (DocNode*) 0, link.mid(5), context );
- result+=externalRef(relPath,df->ref(),TRUE);
- if (!df->file().isEmpty())
- result += df->file().data() + Doxygen::htmlFileExtension;
- if (!df->anchor().isEmpty())
- result += "#" + df->anchor();
- delete df;
- result += "\"";
- }
- else
- {
- result = href+"=\"" + link + "\"";
- }
- }
- else // ref$url (external ref via tag file), or $url (local ref)
- {
- int marker = link.find('$');
- if (marker!=-1)
- {
- QCString ref = link.left(marker);
- QCString url = link.mid(marker+1);
- if (!ref.isEmpty())
- {
- result = externalLinkTarget() + externalRef(relPath,ref,FALSE);
- }
- result+= href+"=\"";
- result+=externalRef(relPath,ref,TRUE);
- result+= url + "\"";
- }
- else // should not happen, but handle properly anyway
- {
- result = href+"=\"" + link + "\"";
- }
- }
- if (!target.isEmpty())
- {
- result+=" target=\""+target+"\"";
- }
- QCString leftPart = buf.left(indexS);
- QCString rightPart = buf.mid(indexE+1);
- return leftPart + result + rightPart;
- }
- else
- {
- return buf;
- }
-}
-
-/*! converts the rectangles in a client site image map into a stream
- * \param t the stream to which the result is written.
- * \param mapName the name of the map file.
- * \param relPath the relative path to the root of the output directory
- * (used in case CREATE_SUBDIRS is enabled).
- * \param urlOnly if FALSE the url field in the map contains an external
- * references followed by a $ and then the URL.
- * \param context the context (file, class, or namespace) in which the
- * map file was found
- * \returns TRUE if succesful.
- */
-static bool convertMapFile(FTextStream &t,const char *mapName,
- const QCString relPath, bool urlOnly=FALSE,
- const QCString &context=QCString())
-{
- QFile f(mapName);
- if (!f.open(IO_ReadOnly))
- {
- err("error: problems opening map file %s for inclusion in the docs!\n"
- "If you installed Graphviz/dot after a previous failing run, \n"
- "try deleting the output directory and rerun doxygen.\n",mapName);
- return FALSE;
- }
- const int maxLineLen=10240;
- while (!f.atEnd()) // foreach line
- {
- QCString buf(maxLineLen);
- int numBytes = f.readLine(buf.data(),maxLineLen);
- buf[numBytes-1]='\0';
-
- if (buf.left(5)=="<area")
- {
- t << replaceRef(buf,relPath,urlOnly,context);
- }
- }
- return TRUE;
-}
-
-static QArray<int> s_newNumber;
-static int s_max_newNumber=0;
-
-inline int reNumberNode(int number, bool doReNumbering)
-{
- if (!doReNumbering)
- {
- return number;
- }
- else
- {
- int s = s_newNumber.size();
- if (number>=s)
- {
- int ns=0;
- ns = s * 3 / 2 + 5; // new size
- if (number>=ns) // number still doesn't fit
- {
- ns = number * 3 / 2 + 5;
- }
- s_newNumber.resize(ns);
- for (int i=s;i<ns;i++) // clear new part of the array
- {
- s_newNumber.at(i)=0;
- }
- }
- int i = s_newNumber.at(number);
- if (i == 0) // not yet mapped
- {
- i = ++s_max_newNumber; // start from 1
- s_newNumber.at(number) = i;
- }
- return i;
- }
-}
-
-static void resetReNumbering()
-{
- s_max_newNumber=0;
- s_newNumber.resize(s_max_newNumber);
-}
-
-static QCString g_dotFontPath;
-
-static void setDotFontPath(const char *path)
-{
- ASSERT(g_dotFontPath.isEmpty());
- g_dotFontPath = portable_getenv("DOTFONTPATH");
- QCString newFontPath = Config_getString("DOT_FONTPATH");
- QCString spath = path;
- if (!newFontPath.isEmpty() && !spath.isEmpty())
- {
- newFontPath.prepend(spath+portable_pathListSeparator());
- }
- else if (newFontPath.isEmpty() && !spath.isEmpty())
- {
- newFontPath=path;
- }
- else
- {
- portable_unsetenv("DOTFONTPATH");
- return;
- }
- portable_setenv("DOTFONTPATH",newFontPath);
-}
-
-static void unsetDotFontPath()
-{
- if (g_dotFontPath.isEmpty())
- {
- portable_unsetenv("DOTFONTPATH");
- }
- else
- {
- portable_setenv("DOTFONTPATH",g_dotFontPath);
- }
- g_dotFontPath="";
-}
-
-static bool readBoundingBox(const char *fileName,int *width,int *height,bool isEps)
-{
- QCString bb = isEps ? QCString("%%PageBoundingBox:") : QCString("/MediaBox [");
- QFile f(fileName);
- if (!f.open(IO_ReadOnly|IO_Raw))
- {
- //printf("readBoundingBox: could not open %s\n",fileName);
- return FALSE;
- }
- const int maxLineLen=1024;
- char buf[maxLineLen];
- while (!f.atEnd())
- {
- int numBytes = f.readLine(buf,maxLineLen-1); // read line
- if (numBytes>0)
- {
- buf[numBytes]='\0';
- const char *p = strstr(buf,bb);
- if (p) // found PageBoundingBox or /MediaBox string
- {
- int x,y;
- if (sscanf(p+bb.length(),"%d %d %d %d",&x,&y,width,height)!=4)
- {
- //printf("readBoundingBox sscanf fail\n");
- return FALSE;
- }
- return TRUE;
- }
- }
- else // read error!
- {
- //printf("Read error %d!\n",numBytes);
- return FALSE;
- }
- }
- err("Failed to extract bounding box from generated diagram file %s\n",fileName);
- return FALSE;
-}
-
-static bool writeVecGfxFigure(FTextStream &out,const QCString &baseName,
- const QCString &figureName)
-{
- int width=400,height=550;
- static bool usePdfLatex = Config_getBool("USE_PDFLATEX");
- if (usePdfLatex)
- {
- if (!readBoundingBox(figureName+".pdf",&width,&height,FALSE))
- {
- //printf("writeVecGfxFigure()=0\n");
- return FALSE;
- }
- }
- else
- {
- if (!readBoundingBox(figureName+".eps",&width,&height,TRUE))
- {
- //printf("writeVecGfxFigure()=0\n");
- return FALSE;
- }
- }
- //printf("Got PDF/EPS size %d,%d\n",width,height);
- int maxWidth = 350; /* approx. page width in points, excl. margins */
- int maxHeight = 550; /* approx. page height in points, excl. margins */
- out << "\\nopagebreak\n"
- "\\begin{figure}[H]\n"
- "\\begin{center}\n"
- "\\leavevmode\n";
- if (width>maxWidth || height>maxHeight) // figure too big for page
- {
- // c*width/maxWidth > c*height/maxHeight, where c=maxWidth*maxHeight>0
- if (width*maxHeight>height*maxWidth)
- {
- out << "\\includegraphics[width=" << maxWidth << "pt]";
- }
- else
- {
- out << "\\includegraphics[height=" << maxHeight << "pt]";
- }
- }
- else
- {
- out << "\\includegraphics[width=" << width << "pt]";
- }
-
- out << "{" << baseName << "}\n"
- "\\end{center}\n"
- "\\end{figure}\n";
-
- //printf("writeVecGfxFigure()=1\n");
- return TRUE;
-}
-
-// extract size from a dot generated SVG file
-static bool readSVGSize(const QCString &fileName,int *width,int *height)
-{
- bool found=FALSE;
- QFile f(fileName);
- if (!f.open(IO_ReadOnly))
- {
- return FALSE;
- }
- const int maxLineLen=4096;
- char buf[maxLineLen];
- while (!f.atEnd() && !found)
- {
- int numBytes = f.readLine(buf,maxLineLen-1); // read line
- if (numBytes>0)
- {
- buf[numBytes]='\0';
- if (strncmp(buf,"<!--zoomable ",13)==0)
- {
- *width=-1;
- *height=-1;
- sscanf(buf,"<!--zoomable %d",height);
- //printf("Found zoomable for %s!\n",fileName.data());
- found=TRUE;
- }
- else if (sscanf(buf,"<svg width=\"%dpt\" height=\"%dpt\"",width,height)==2)
- {
- //printf("Found fixed size %dx%d for %s!\n",*width,*height,fileName.data());
- found=TRUE;
- }
- }
- else // read error!
- {
- //printf("Read error %d!\n",numBytes);
- return FALSE;
- }
- }
- return TRUE;
-}
-
-static void writeSVGNotSupported(FTextStream &out)
-{
- out << "<p><b>This browser is not able to show SVG: try Firefox, Chrome, Safari, or Opera instead.</b></p>";
-}
-
-// check if a reference to a SVG figure can be written and does so if possible.
-// return FALSE if not possible (for instance because the SVG file is not yet generated).
-static bool writeSVGFigureLink(FTextStream &out,const QCString &relPath,
- const QCString &baseName,const QCString &absImgName)
-{
- int width=600,height=600;
- if (!readSVGSize(absImgName,&width,&height))
- {
- return FALSE;
- }
- if (width==-1)
- {
- if (height<=60)
- height=60;
- else
- height+=40; // add some extra space for zooming
- if (height>600) height=600; // clip to maximum height of 600 pixels
- out << "<div class=\"zoom\">";
- //out << "<object type=\"image/svg+xml\" data=\""
- //out << "<embed type=\"image/svg+xml\" src=\""
- out << "<iframe scrolling=\"no\" frameborder=\"0\" src=\""
- << relPath << baseName << ".svg\" width=\"100%\" height=\"" << height << "\">";
- }
- else
- {
- //out << "<object type=\"image/svg+xml\" data=\""
- //out << "<embed type=\"image/svg+xml\" src=\""
- out << "<iframe scrolling=\"no\" frameborder=\"0\" src=\""
- << relPath << baseName << ".svg\" width=\""
- << ((width*96+48)/72) << "\" height=\""
- << ((height*96+48)/72) << "\">";
- }
- writeSVGNotSupported(out);
- //out << "</object>";
- //out << "</embed>";
- out << "</iframe>";
- if (width==-1)
- {
- out << "</div>";
- }
-
- return TRUE;
-}
-
-// since dot silently reproduces the input file when it does not
-// support the PNG format, we need to check the result.
-static void checkDotResult(const QCString &imgName)
-{
- if (Config_getEnum("DOT_IMAGE_FORMAT")=="png")
- {
- FILE *f = fopen(imgName,"rb");
- if (f)
- {
- char data[4];
- if (fread(data,1,4,f)==4)
- {
- if (!(data[1]=='P' && data[2]=='N' && data[3]=='G'))
- {
- err("error: Image `%s' produced by dot is not a valid PNG!\n"
- "You should either select a different format "
- "(DOT_IMAGE_FORMAT in the config file) or install a more "
- "recent version of graphviz (1.7+)\n",imgName.data()
- );
- }
- }
- else
- {
- err("error: Could not read image `%s' generated by dot!\n",imgName.data());
- }
- fclose(f);
- }
- else
- {
- err("error: Could not open image `%s' generated by dot!\n",imgName.data());
- }
- }
-}
-
-static bool insertMapFile(FTextStream &out,const QCString &mapFile,
- const QCString &relPath,const QCString &mapLabel)
-{
- QFileInfo fi(mapFile);
- if (fi.exists() && fi.size()>0) // reuse existing map file
- {
- QGString tmpstr;
- FTextStream tmpout(&tmpstr);
- convertMapFile(tmpout,mapFile,relPath);
- if (!tmpstr.isEmpty())
- {
- out << "<map name=\"" << mapLabel << "\" id=\"" << mapLabel << "\">" << endl;
- out << tmpstr;
- out << "</map>" << endl;
- }
- return TRUE;
- }
- return FALSE; // no map file yet, need to generate it
-}
-
-static void removeDotGraph(const QCString &dotName)
-{
- static bool dotCleanUp = Config_getBool("DOT_CLEANUP");
- if (dotCleanUp)
- {
- QDir d;
- d.remove(dotName);
- }
-}
-
-
-
-/*! Checks if a file "baseName".md5 exists. If so the contents
- * are compared with \a md5. If equal FALSE is returned. If the .md5
- * file does not exist or its contents are not equal to \a md5,
- * a new .md5 is generated with the \a md5 string as contents.
- */
-static bool checkAndUpdateMd5Signature(const QCString &baseName,const QCString &md5)
-{
- QFile f(baseName+".md5");
- if (f.open(IO_ReadOnly))
- {
- // read checksum
- QCString md5stored(33);
- int bytesRead=f.readBlock(md5stored.data(),32);
- md5stored[32]='\0';
- // compare checksum
- if (bytesRead==32 && md5==md5stored)
- {
- // bail out if equal
- return FALSE;
- }
- }
- f.close();
- // create checksum file
- if (f.open(IO_WriteOnly))
- {
- f.writeBlock(md5.data(),32);
- f.close();
- }
- return TRUE;
-}
-
-static bool checkDeliverables(const QCString &file1,
- const QCString &file2=QCString())
-{
- bool file1Ok = TRUE;
- bool file2Ok = TRUE;
- if (!file1.isEmpty())
- {
- QFileInfo fi(file1);
- file1Ok = (fi.exists() && fi.size()>0);
- }
- if (!file2.isEmpty())
- {
- QFileInfo fi(file2);
- file2Ok = (fi.exists() && fi.size()>0);
- }
- return file1Ok && file2Ok;
-}
-
-//--------------------------------------------------------------------
-
-class DotNodeList : public QList<DotNode>
-{
- public:
- DotNodeList() : QList<DotNode>() {}
- ~DotNodeList() {}
- int compareItems(GCI item1,GCI item2)
- {
- return stricmp(((DotNode *)item1)->m_label,((DotNode *)item2)->m_label);
- }
-};
-
-//--------------------------------------------------------------------
-
-DotRunner::DotRunner(const QCString &file,const QCString &path,
- bool checkResult,const QCString &imageName)
- : m_file(file), m_path(path),
- m_checkResult(checkResult), m_imageName(imageName)
-{
- static bool dotCleanUp = Config_getBool("DOT_CLEANUP");
- m_cleanUp = dotCleanUp;
- m_jobs.setAutoDelete(TRUE);
-}
-
-void DotRunner::addJob(const char *format,const char *output)
-{
- QCString args = QCString("-T")+format+" -o \""+output+"\"";
- m_jobs.append(new QCString(args));
-}
-
-void DotRunner::addPostProcessing(const char *cmd,const char *args)
-{
- m_postCmd = cmd;
- m_postArgs = args;
-}
-
-bool DotRunner::run()
-{
- int exitCode=0;
- QCString dotExe = Config_getString("DOT_PATH")+"dot";
- bool multiTargets = Config_getBool("DOT_MULTI_TARGETS");
- QCString dotArgs;
- QListIterator<QCString> li(m_jobs);
- QCString *s;
- QCString file = m_file;
- QCString path = m_path;
- QCString imageName = m_imageName;
- QCString postCmd = m_postCmd;
- QCString postArgs = m_postArgs;
- bool checkResult = m_checkResult;
- bool cleanUp = m_cleanUp;
- if (multiTargets)
- {
- dotArgs="\""+file+"\"";
- for (li.toFirst();(s=li.current());++li)
- {
- dotArgs+=' ';
- dotArgs+=*s;
- }
- if ((exitCode=portable_system(dotExe,dotArgs,FALSE))!=0)
- {
- goto error;
- }
- }
- else
- {
- for (li.toFirst();(s=li.current());++li)
- {
- dotArgs="\""+file+"\" "+*s;
- if ((exitCode=portable_system(dotExe,dotArgs,FALSE))!=0)
- {
- goto error;
- }
- }
- }
- if (!postCmd.isEmpty() && portable_system(postCmd,postArgs)!=0)
- {
- err("error: Problems running '%s' as a post-processing step for dot output\n",m_postCmd.data());
- return FALSE;
- }
- if (checkResult) checkDotResult(imageName);
- if (cleanUp)
- {
- //printf("removing dot file %s\n",m_file.data());
- //QDir(path).remove(file);
- m_cleanupItem.file = file;
- m_cleanupItem.path = path;
- }
- return TRUE;
-error:
- err("Problems running dot: exit code=%d, command='%s', arguments='%s'\n",
- exitCode,dotExe.data(),dotArgs.data());
- return FALSE;
-}
-
-//--------------------------------------------------------------------
-
-DotFilePatcher::DotFilePatcher(const char *patchFile)
- : m_patchFile(patchFile)
-{
- m_maps.setAutoDelete(TRUE);
-}
-
-QCString DotFilePatcher::file() const
-{
- return m_patchFile;
-}
-
-int DotFilePatcher::addMap(const QCString &mapFile,const QCString &relPath,
- bool urlOnly,const QCString &context,const QCString &label)
-{
- int id = m_maps.count();
- Map *map = new Map;
- map->mapFile = mapFile;
- map->relPath = relPath;
- map->urlOnly = urlOnly;
- map->context = context;
- map->label = label;
- map->zoomable = FALSE;
- map->graphId = -1;
- m_maps.append(map);
- return id;
-}
-
-int DotFilePatcher::addFigure(const QCString &baseName,
- const QCString &figureName,bool heightCheck)
-{
- int id = m_maps.count();
- Map *map = new Map;
- map->mapFile = figureName;
- map->urlOnly = heightCheck;
- map->label = baseName;
- map->zoomable = FALSE;
- map->graphId = -1;
- m_maps.append(map);
- return id;
-}
-
-int DotFilePatcher::addSVGConversion(const QCString &relPath,bool urlOnly,
- const QCString &context,bool zoomable,
- int graphId)
-{
- int id = m_maps.count();
- Map *map = new Map;
- map->relPath = relPath;
- map->urlOnly = urlOnly;
- map->context = context;
- map->zoomable = zoomable;
- map->graphId = graphId;
- m_maps.append(map);
- return id;
-}
-
-int DotFilePatcher::addSVGObject(const QCString &baseName,
- const QCString &absImgName,
- const QCString &relPath)
-{
- int id = m_maps.count();
- Map *map = new Map;
- map->mapFile = absImgName;
- map->relPath = relPath;
- map->label = baseName;
- map->zoomable = FALSE;
- map->graphId = -1;
- m_maps.append(map);
- return id;
-}
-
-bool DotFilePatcher::run()
-{
- //printf("DotFilePatcher::run(): %s\n",m_patchFile.data());
- static bool interactiveSVG = Config_getBool("INTERACTIVE_SVG");
- bool isSVGFile = m_patchFile.right(4)==".svg";
- int graphId = -1;
- QCString relPath;
- if (isSVGFile)
- {
- Map *map = m_maps.at(0); // there is only one 'map' for a SVG file
- interactiveSVG = interactiveSVG && map->zoomable;
- graphId = map->graphId;
- relPath = map->relPath;
- //printf("DotFilePatcher::addSVGConversion: file=%s zoomable=%d\n",
- // m_patchFile.data(),map->zoomable);
- }
- QCString tmpName = m_patchFile+".tmp";
- if (!QDir::current().rename(m_patchFile,tmpName))
- {
- err("Failed to rename file %s to %s!\n",m_patchFile.data(),tmpName.data());
- return FALSE;
- }
- QFile fi(tmpName);
- QFile fo(m_patchFile);
- if (!fi.open(IO_ReadOnly))
- {
- err("error: problem opening file %s for patching!\n",tmpName.data());
- QDir::current().rename(tmpName,m_patchFile);
- return FALSE;
- }
- if (!fo.open(IO_WriteOnly))
- {
- err("error: problem opening file %s for patching!\n",m_patchFile.data());
- QDir::current().rename(tmpName,m_patchFile);
- return FALSE;
- }
- FTextStream t(&fo);
- const int maxLineLen=100*1024;
- int lineNr=1;
- int width,height;
- bool insideHeader=FALSE;
- bool replacedHeader=FALSE;
- bool foundSize=FALSE;
- while (!fi.atEnd()) // foreach line
- {
- QCString line(maxLineLen);
- int numBytes = fi.readLine(line.data(),maxLineLen);
- if (numBytes<=0)
- {
- break;
- }
-
- //printf("line=[%s]\n",line.stripWhiteSpace().data());
- int i;
- ASSERT(numBytes<maxLineLen);
- if (isSVGFile)
- {
- if (interactiveSVG)
- {
- if (line.find("<svg")!=-1 && !replacedHeader)
- {
- int count;
- count = sscanf(line.data(),"<svg width=\"%dpt\" height=\"%dpt\"",&width,&height);
- //printf("width=%d height=%d\n",width,height);
- foundSize = count==2 && (width>500 || height>450);
- if (foundSize) insideHeader=TRUE;
- }
- else if (insideHeader && !replacedHeader && line.find("<title>")!=-1)
- {
- if (foundSize)
- {
- // insert special replacement header for interactive SVGs
- t << "<!--zoomable " << height << " -->\n";
- t << svgZoomHeader;
- t << "var viewWidth = " << width << ";\n";
- t << "var viewHeight = " << height << ";\n";
- if (graphId>=0)
- {
- t << "var sectionId = 'dynsection-" << graphId << "';\n";
- }
- t << "</script>\n";
- t << "<script xlink:href=\"" << relPath << "svgpan.js\"/>\n";
- t << "<svg id=\"graph\" class=\"graph\">\n";
- t << "<g id=\"viewport\">\n";
- }
- insideHeader=FALSE;
- replacedHeader=TRUE;
- }
- }
- if (!insideHeader || !foundSize) // copy SVG and replace refs,
- // unless we are inside the header of the SVG.
- // Then we replace it with another header.
- {
- Map *map = m_maps.at(0); // there is only one 'map' for a SVG file
- t << replaceRef(line,map->relPath,map->urlOnly,map->context,"_top");
- }
- }
- else if ((i=line.find("<!-- SVG"))!=-1 || (i=line.find("[!-- SVG"))!=-1)
- {
- //printf("Found marker at %d\n",i);
- int mapId=-1;
- t << line.left(i);
- int n = sscanf(line.data()+i+1,"!-- SVG %d",&mapId);
- if (n==1 && mapId>=0 && mapId<(int)m_maps.count())
- {
- int e = QMAX(line.find("--]"),line.find("-->"));
- Map *map = m_maps.at(mapId);
- //printf("DotFilePatcher::writeSVGFigure: file=%s zoomable=%d\n",
- // m_patchFile.data(),map->zoomable);
- if (!writeSVGFigureLink(t,map->relPath,map->label,map->mapFile))
- {
- err("Problem extracting size from SVG file %s\n",map->mapFile.data());
- }
- if (e!=-1) t << line.mid(e+3);
- }
- else // error invalid map id!
- {
- err("Found invalid SVG id in file %s!\n",m_patchFile.data());
- t << line.mid(i);
- }
- }
- else if ((i=line.find("<!-- MAP"))!=-1)
- {
- int mapId=-1;
- t << line.left(i);
- int n = sscanf(line.data()+i,"<!-- MAP %d",&mapId);
- if (n==1 && mapId>=0 && mapId<(int)m_maps.count())
- {
- Map *map = m_maps.at(mapId);
- //printf("patching MAP %d in file %s with contents of %s\n",
- // mapId,m_patchFile.data(),map->mapFile.data());
- t << "<map name=\"" << map->label << "\" id=\"" << map->label << "\">" << endl;
- convertMapFile(t,map->mapFile,map->relPath,map->urlOnly,map->context);
- t << "</map>" << endl;
- }
- else // error invalid map id!
- {
- err("Found invalid MAP id in file %s!\n",m_patchFile.data());
- t << line.mid(i);
- }
- }
- else if ((i=line.find("% FIG"))!=-1)
- {
- int mapId=-1;
- int n = sscanf(line.data()+i+2,"FIG %d",&mapId);
- //printf("line='%s' n=%d\n",line.data()+i,n);
- if (n==1 && mapId>=0 && mapId<(int)m_maps.count())
- {
- Map *map = m_maps.at(mapId);
- //printf("patching FIG %d in file %s with contents of %s\n",
- // mapId,m_patchFile.data(),map->mapFile.data());
- writeVecGfxFigure(t,map->label,map->mapFile);
- }
- else // error invalid map id!
- {
- err("Found invalid bounding FIG id in file %s!\n",mapId,m_patchFile.data());
- t << line;
- }
- }
- else
- {
- t << line;
- }
- lineNr++;
- }
- if (isSVGFile && interactiveSVG && replacedHeader)
- {
- t << svgZoomFooter;
- }
- fi.close();
- QDir::current().remove(tmpName);
- return TRUE;
-}
-
-//--------------------------------------------------------------------
-
-void DotRunnerQueue::enqueue(DotRunner *runner)
-{
- QMutexLocker locker(&m_mutex);
- m_queue.enqueue(runner);
- m_bufferNotEmpty.wakeAll();
-}
-
-DotRunner *DotRunnerQueue::dequeue()
-{
- QMutexLocker locker(&m_mutex);
- while (m_queue.isEmpty())
- {
- // wait until something is added to the queue
- m_bufferNotEmpty.wait(&m_mutex);
- }
- DotRunner *result = m_queue.dequeue();
- return result;
-}
-
-uint DotRunnerQueue::count() const
-{
- QMutexLocker locker(&m_mutex);
- return m_queue.count();
-}
-
-//--------------------------------------------------------------------
-
-DotWorkerThread::DotWorkerThread(int id,DotRunnerQueue *queue)
- : m_id(id), m_queue(queue)
-{
- m_cleanupItems.setAutoDelete(TRUE);
-}
-
-void DotWorkerThread::run()
-{
- DotRunner *runner;
- while ((runner=m_queue->dequeue()))
- {
- runner->run();
- DotRunner::CleanupItem cleanup = runner->cleanup();
- if (!cleanup.file.isEmpty())
- {
- m_cleanupItems.append(new DotRunner::CleanupItem(cleanup));
- }
- }
-}
-
-void DotWorkerThread::cleanup()
-{
- QListIterator<DotRunner::CleanupItem> it(m_cleanupItems);
- DotRunner::CleanupItem *ci;
- for (;(ci=it.current());++it)
- {
- QDir(ci->path).remove(ci->file);
- }
-}
-
-//--------------------------------------------------------------------
-
-DotManager *DotManager::m_theInstance = 0;
-
-DotManager *DotManager::instance()
-{
- if (!m_theInstance)
- {
- m_theInstance = new DotManager;
- }
- return m_theInstance;
-}
-
-DotManager::DotManager() : m_dotMaps(1007)
-{
- m_dotRuns.setAutoDelete(TRUE);
- m_dotMaps.setAutoDelete(TRUE);
- m_queue = new DotRunnerQueue;
- int i;
- int numThreads = QMIN(32,Config_getInt("DOT_NUM_THREADS"));
- if (numThreads!=1)
- {
- if (numThreads==0) numThreads = QMAX(2,QThread::idealThreadCount()+1);
- for (i=0;i<numThreads;i++)
- {
- DotWorkerThread *thread = new DotWorkerThread(i,m_queue);
- thread->start();
- if (thread->isRunning())
- {
- m_workers.append(thread);
- }
- else // no more threads available!
- {
- delete thread;
- }
- }
- ASSERT(m_workers.count()>0);
- }
-}
-
-DotManager::~DotManager()
-{
- delete m_queue;
-}
-
-void DotManager::addRun(DotRunner *run)
-{
- m_dotRuns.append(run);
-}
-
-int DotManager::addMap(const QCString &file,const QCString &mapFile,
- const QCString &relPath,bool urlOnly,const QCString &context,
- const QCString &label)
-{
- DotFilePatcher *map = m_dotMaps.find(file);
- if (map==0)
- {
- map = new DotFilePatcher(file);
- m_dotMaps.append(file,map);
- }
- return map->addMap(mapFile,relPath,urlOnly,context,label);
-}
-
-int DotManager::addFigure(const QCString &file,const QCString &baseName,
- const QCString &figureName,bool heightCheck)
-{
- DotFilePatcher *map = m_dotMaps.find(file);
- if (map==0)
- {
- map = new DotFilePatcher(file);
- m_dotMaps.append(file,map);
- }
- return map->addFigure(baseName,figureName,heightCheck);
-}
-
-int DotManager::addSVGConversion(const QCString &file,const QCString &relPath,
- bool urlOnly,const QCString &context,bool zoomable,
- int graphId)
-{
- DotFilePatcher *map = m_dotMaps.find(file);
- if (map==0)
- {
- map = new DotFilePatcher(file);
- m_dotMaps.append(file,map);
- }
- return map->addSVGConversion(relPath,urlOnly,context,zoomable,graphId);
-}
-
-int DotManager::addSVGObject(const QCString &file,const QCString &baseName,
- const QCString &absImgName,const QCString &relPath)
-{
- DotFilePatcher *map = m_dotMaps.find(file);
- if (map==0)
- {
- map = new DotFilePatcher(file);
- m_dotMaps.append(file,map);
- }
- return map->addSVGObject(baseName,absImgName,relPath);
-}
-
-bool DotManager::run()
-{
- uint numDotRuns = m_dotRuns.count();
- uint numDotMaps = m_dotMaps.count();
- if (numDotRuns+numDotMaps>1)
- {
- if (m_workers.count()==0)
- {
- msg("Generating dot graphs in single threaded mode...\n");
- }
- else
- {
- msg("Generating dot graphs using %d parallel threads...\n",QMIN(numDotRuns+numDotMaps,m_workers.count()));
- }
- }
- int i=1;
- QListIterator<DotRunner> li(m_dotRuns);
-
- bool setPath=FALSE;
- if (Config_getBool("GENERATE_HTML"))
- {
- setDotFontPath(Config_getString("HTML_OUTPUT"));
- setPath=TRUE;
- }
- else if (Config_getBool("GENERATE_LATEX"))
- {
- setDotFontPath(Config_getString("LATEX_OUTPUT"));
- setPath=TRUE;
- }
- else if (Config_getBool("GENERATE_RTF"))
- {
- setDotFontPath(Config_getString("RTF_OUTPUT"));
- setPath=TRUE;
- }
- portable_sysTimerStart();
- // fill work queue with dot operations
- DotRunner *dr;
- int prev=1;
- if (m_workers.count()==0) // no threads to work with
- {
- for (li.toFirst();(dr=li.current());++li)
- {
- msg("Running dot for graph %d/%d\n",prev,numDotRuns);
- dr->run();
- prev++;
- }
- }
- else // use multiple threads to run instances of dot in parallel
- {
- for (li.toFirst();(dr=li.current());++li)
- {
- m_queue->enqueue(dr);
- }
- // wait for the queue to become empty
- while ((i=m_queue->count())>0)
- {
- i = numDotRuns - i;
- while (i>=prev)
- {
- msg("Running dot for graph %d/%d\n",prev,numDotRuns);
- prev++;
- }
- portable_sleep(100);
- }
- while ((int)numDotRuns>=prev)
- {
- msg("Running dot for graph %d/%d\n",prev,numDotRuns);
- prev++;
- }
- // signal the workers we are done
- for (i=0;i<(int)m_workers.count();i++)
- {
- m_queue->enqueue(0); // add terminator for each worker
- }
- // wait for the workers to finish
- for (i=0;i<(int)m_workers.count();i++)
- {
- m_workers.at(i)->wait();
- }
- // clean up dot files from main thread
- for (i=0;i<(int)m_workers.count();i++)
- {
- m_workers.at(i)->cleanup();
- }
- }
- portable_sysTimerStop();
- if (setPath)
- {
- unsetDotFontPath();
- }
-
- // patch the output file and insert the maps and figures
- i=1;
- SDict<DotFilePatcher>::Iterator di(m_dotMaps);
- DotFilePatcher *map;
- // since patching the svg files may involve patching the header of the SVG
- // (for zoomable SVGs), and patching the .html files requires reading that
- // header after the SVG is patched, we first process the .svg files and
- // then the other files.
- for (di.toFirst();(map=di.current());++di)
- {
- if (map->file().right(4)==".svg")
- {
- msg("Patching output file %d/%d\n",i,numDotMaps);
- if (!map->run()) return FALSE;
- i++;
- }
- }
- for (di.toFirst();(map=di.current());++di)
- {
- if (map->file().right(4)!=".svg")
- {
- msg("Patching output file %d/%d\n",i,numDotMaps);
- if (!map->run()) return FALSE;
- i++;
- }
- }
- return TRUE;
-}
-
-
-//--------------------------------------------------------------------
-
-
-/*! helper function that deletes all nodes in a connected graph, given
- * one of the graph's nodes
- */
-static void deleteNodes(DotNode *node,SDict<DotNode> *skipNodes=0)
-{
- //printf("deleteNodes skipNodes=%p\n",skipNodes);
- static DotNodeList deletedNodes;
- deletedNodes.setAutoDelete(TRUE);
- node->deleteNode(deletedNodes,skipNodes); // collect nodes to be deleted.
- deletedNodes.clear(); // actually remove the nodes.
-}
-
-DotNode::DotNode(int n,const char *lab,const char *tip, const char *url,
- bool isRoot,ClassDef *cd)
- : m_subgraphId(-1)
- , m_number(n)
- , m_label(lab)
- , m_tooltip(tip)
- , m_url(url)
- , m_parents(0)
- , m_children(0)
- , m_edgeInfo(0)
- , m_deleted(FALSE)
- , m_written(FALSE)
- , m_hasDoc(FALSE)
- , m_isRoot(isRoot)
- , m_classDef(cd)
- , m_visible(FALSE)
- , m_truncated(Unknown)
- , m_distance(1000)
-{
-}
-
-DotNode::~DotNode()
-{
- delete m_children;
- delete m_parents;
- delete m_edgeInfo;
-}
-
-void DotNode::addChild(DotNode *n,
- int edgeColor,
- int edgeStyle,
- const char *edgeLab,
- const char *edgeURL,
- int edgeLabCol
- )
-{
- if (m_children==0)
- {
- m_children = new QList<DotNode>;
- m_edgeInfo = new QList<EdgeInfo>;
- m_edgeInfo->setAutoDelete(TRUE);
- }
- m_children->append(n);
- EdgeInfo *ei = new EdgeInfo;
- ei->m_color = edgeColor;
- ei->m_style = edgeStyle;
- ei->m_label = edgeLab;
- ei->m_url = edgeURL;
- if (edgeLabCol==-1)
- ei->m_labColor=edgeColor;
- else
- ei->m_labColor=edgeLabCol;
- m_edgeInfo->append(ei);
-}
-
-void DotNode::addParent(DotNode *n)
-{
- if (m_parents==0)
- {
- m_parents = new QList<DotNode>;
- }
- m_parents->append(n);
-}
-
-void DotNode::removeChild(DotNode *n)
-{
- if (m_children) m_children->remove(n);
-}
-
-void DotNode::removeParent(DotNode *n)
-{
- if (m_parents) m_parents->remove(n);
-}
-
-void DotNode::deleteNode(DotNodeList &deletedList,SDict<DotNode> *skipNodes)
-{
- if (m_deleted) return; // avoid recursive loops in case the graph has cycles
- m_deleted=TRUE;
- if (m_parents!=0) // delete all parent nodes of this node
- {
- QListIterator<DotNode> dnlip(*m_parents);
- DotNode *pn;
- for (dnlip.toFirst();(pn=dnlip.current());++dnlip)
- {
- //pn->removeChild(this);
- pn->deleteNode(deletedList,skipNodes);
- }
- }
- if (m_children!=0) // delete all child nodes of this node
- {
- QListIterator<DotNode> dnlic(*m_children);
- DotNode *cn;
- for (dnlic.toFirst();(cn=dnlic.current());++dnlic)
- {
- //cn->removeParent(this);
- cn->deleteNode(deletedList,skipNodes);
- }
- }
- // add this node to the list of deleted nodes.
- //printf("skipNodes=%p find(%p)=%p\n",skipNodes,this,skipNodes ? skipNodes->find((int)this) : 0);
- if (skipNodes==0 || skipNodes->find((char*)this)==0)
- {
- //printf("deleting\n");
- deletedList.append(this);
- }
-}
-
-void DotNode::setDistance(int distance)
-{
- if (distance<m_distance) m_distance = distance;
-}
-
-static QCString convertLabel(const QCString &l)
-{
- QCString result;
- QCString bBefore("\\_/<({[: =-+@%#~?$");
- QCString bAfter(">]),;|");
- const char *p=l.data();
- if (p==0) return result;
- char c;
- char cs[2];
- cs[1]=0;
- int len=l.length();
- int charsLeft=len;
- int sinceLast=0;
- int foldLen=17; // ideal text length
- while ((c=*p++))
- {
- QCString replacement;
- switch(c)
- {
- case '\\': replacement="\\\\"; break;
- case '\n': replacement="\\n"; break;
- case '<': replacement="\\<"; break;
- case '>': replacement="\\>"; break;
- case '|': replacement="\\|"; break;
- case '{': replacement="\\{"; break;
- case '}': replacement="\\}"; break;
- case '"': replacement="\\\""; break;
- default: cs[0]=c; replacement=cs; break;
- }
- // Some heuristics to insert newlines to prevent too long
- // boxes and at the same time prevent ugly breaks
- if (c=='\n')
- {
- result+=replacement;
- foldLen = (3*foldLen+sinceLast+2)/4;
- sinceLast=1;
- }
- else if (charsLeft>foldLen/3 && sinceLast>foldLen && bBefore.contains(c))
- {
- result+="\\n";
- result+=replacement;
- foldLen = (foldLen+sinceLast+1)/2;
- sinceLast=1;
- }
- else if (charsLeft>1+foldLen/4 && sinceLast>foldLen+foldLen/3 &&
- !isupper(c) && isupper(*p))
- {
- result+=replacement;
- result+="\\n";
- foldLen = (foldLen+sinceLast+1)/2;
- sinceLast=0;
- }
- else if (charsLeft>foldLen/3 && sinceLast>foldLen && bAfter.contains(c))
- {
- result+=replacement;
- result+="\\n";
- foldLen = (foldLen+sinceLast+1)/2;
- sinceLast=0;
- }
- else
- {
- result+=replacement;
- sinceLast++;
- }
- charsLeft--;
- }
- return result;
-}
-
-static QCString escapeTooltip(const QCString &tooltip)
-{
- QCString result;
- const char *p=tooltip.data();
- if (p==0) return result;
- char c;
- while ((c=*p++))
- {
- switch(c)
- {
- case '"': result+="\\\""; break;
- default: result+=c; break;
- }
- }
- return result;
-}
-
-static void writeBoxMemberList(FTextStream &t,
- char prot,MemberList *ml,ClassDef *scope,
- bool isStatic=FALSE,const QDict<void> *skipNames=0)
-{
- (void)isStatic;
- if (ml)
- {
- MemberListIterator mlia(*ml);
- MemberDef *mma;
- int totalCount=0;
- for (mlia.toFirst();(mma = mlia.current());++mlia)
- {
- if (mma->getClassDef()==scope &&
- (skipNames==0 || skipNames->find(mma->name())==0))
- {
- totalCount++;
- }
- }
-
- int count=0;
- for (mlia.toFirst();(mma = mlia.current());++mlia)
- {
- if (mma->getClassDef() == scope &&
- (skipNames==0 || skipNames->find(mma->name())==0))
- {
- static int limit = Config_getInt("UML_LIMIT_NUM_FIELDS");
- if (limit==0 || (totalCount>=limit*3/2 && count>=limit))
- {
- t << "and " << (totalCount-count-1) << " more...";
- // TODO: TRANSLATE ME
- break;
- }
- else
- {
- t << prot << " ";
- t << convertLabel(mma->name());
- if (!mma->isObjCMethod() &&
- (mma->isFunction() || mma->isSlot() || mma->isSignal())) t << "()";
- t << "\\l";
- count++;
- }
- }
- }
- // write member groups within the memberlist
- MemberGroupList *mgl = ml->getMemberGroupList();
- if (mgl)
- {
- MemberGroupListIterator mgli(*mgl);
- MemberGroup *mg;
- for (mgli.toFirst();(mg=mgli.current());++mgli)
- {
- if (mg->members())
- {
- writeBoxMemberList(t,prot,mg->members(),scope,isStatic,skipNames);
- }
- }
- }
- }
-}
-
-void DotNode::writeBox(FTextStream &t,
- GraphType gt,
- GraphOutputFormat /*format*/,
- bool hasNonReachableChildren,
- bool reNumber)
-{
- const char *labCol =
- m_url.isEmpty() ? "grey75" : // non link
- (
- (hasNonReachableChildren) ? "red" : "black"
- );
- t << " Node" << reNumberNode(m_number,reNumber) << " [label=\"";
- static bool umlLook = Config_getBool("UML_LOOK");
-
- if (m_classDef && umlLook && (gt==Inheritance || gt==Collaboration))
- {
- // add names shown as relation to a dictionary, so we don't show
- // them as attributes as well
- QDict<void> arrowNames(17);
- if (m_edgeInfo)
- {
- QListIterator<EdgeInfo> li(*m_edgeInfo);
- EdgeInfo *ei;
- for (li.toFirst();(ei=li.current());++li)
- {
- if (!ei->m_label.isEmpty())
- {
- arrowNames.insert(ei->m_label,(void*)0x8);
- }
- }
- }
-
- //printf("DotNode::writeBox for %s\n",m_classDef->name().data());
- static bool extractPrivate = Config_getBool("EXTRACT_PRIVATE");
- t << "{" << convertLabel(m_label);
- t << "\\n|";
- writeBoxMemberList(t,'+',m_classDef->getMemberList(MemberList::pubAttribs),m_classDef,FALSE,&arrowNames);
- writeBoxMemberList(t,'+',m_classDef->getMemberList(MemberList::pubStaticAttribs),m_classDef,TRUE,&arrowNames);
- writeBoxMemberList(t,'+',m_classDef->getMemberList(MemberList::properties),m_classDef,FALSE,&arrowNames);
- writeBoxMemberList(t,'~',m_classDef->getMemberList(MemberList::pacAttribs),m_classDef,FALSE,&arrowNames);
- writeBoxMemberList(t,'~',m_classDef->getMemberList(MemberList::pacStaticAttribs),m_classDef,TRUE,&arrowNames);
- writeBoxMemberList(t,'#',m_classDef->getMemberList(MemberList::proAttribs),m_classDef,FALSE,&arrowNames);
- writeBoxMemberList(t,'#',m_classDef->getMemberList(MemberList::proStaticAttribs),m_classDef,TRUE,&arrowNames);
- if (extractPrivate)
- {
- writeBoxMemberList(t,'-',m_classDef->getMemberList(MemberList::priAttribs),m_classDef,FALSE,&arrowNames);
- writeBoxMemberList(t,'-',m_classDef->getMemberList(MemberList::priStaticAttribs),m_classDef,TRUE,&arrowNames);
- }
- t << "|";
- writeBoxMemberList(t,'+',m_classDef->getMemberList(MemberList::pubMethods),m_classDef);
- writeBoxMemberList(t,'+',m_classDef->getMemberList(MemberList::pubStaticMethods),m_classDef,TRUE);
- writeBoxMemberList(t,'+',m_classDef->getMemberList(MemberList::pubSlots),m_classDef);
- writeBoxMemberList(t,'~',m_classDef->getMemberList(MemberList::pacMethods),m_classDef);
- writeBoxMemberList(t,'~',m_classDef->getMemberList(MemberList::pacStaticMethods),m_classDef,TRUE);
- writeBoxMemberList(t,'#',m_classDef->getMemberList(MemberList::proMethods),m_classDef);
- writeBoxMemberList(t,'#',m_classDef->getMemberList(MemberList::proStaticMethods),m_classDef,TRUE);
- writeBoxMemberList(t,'#',m_classDef->getMemberList(MemberList::proSlots),m_classDef);
- if (extractPrivate)
- {
- writeBoxMemberList(t,'-',m_classDef->getMemberList(MemberList::priMethods),m_classDef);
- writeBoxMemberList(t,'-',m_classDef->getMemberList(MemberList::priStaticMethods),m_classDef,TRUE);
- writeBoxMemberList(t,'-',m_classDef->getMemberList(MemberList::priSlots),m_classDef);
- }
- if (m_classDef->getLanguage()!=SrcLangExt_Fortran &&
- m_classDef->getMemberGroupSDict())
- {
- MemberGroupSDict::Iterator mgdi(*m_classDef->getMemberGroupSDict());
- MemberGroup *mg;
- for (mgdi.toFirst();(mg=mgdi.current());++mgdi)
- {
- if (mg->members())
- {
- writeBoxMemberList(t,'*',mg->members(),m_classDef,FALSE,&arrowNames);
- }
- }
- }
- t << "}";
- }
- else // standard look
- {
- t << convertLabel(m_label);
- }
- t << "\",height=0.2,width=0.4";
- if (m_isRoot)
- {
- t << ",color=\"black\", fillcolor=\"grey75\", style=\"filled\" fontcolor=\"black\"";
- }
- else
- {
- static bool dotTransparent = Config_getBool("DOT_TRANSPARENT");
- static bool vhdlOpt = Config_getBool("OPTIMIZE_OUTPUT_VHDL");
- if (!dotTransparent)
- {
- ClassDef* ccd=this->m_classDef;
-
- t << ",color=\"" << labCol << "\", fillcolor=\"";
- if (ccd && vhdlOpt && (VhdlDocGen::VhdlClasses)ccd->protection()==VhdlDocGen::ARCHITECTURECLASS)
- t << "khaki";
- else
- t << "white";
- t << "\", style=\"filled\"";
- }
- else
- {
- t << ",color=\"" << labCol << "\"";
- }
- if (!m_url.isEmpty())
- {
- int anchorPos = m_url.findRev('#');
- if (anchorPos==-1)
- {
- t << ",URL=\"" << m_url << Doxygen::htmlFileExtension << "\"";
- }
- else
- {
- t << ",URL=\"" << m_url.left(anchorPos) << Doxygen::htmlFileExtension
- << m_url.right(m_url.length()-anchorPos) << "\"";
- }
- }
- if (!m_tooltip.isEmpty())
- {
- t << ",tooltip=\"" << escapeTooltip(m_tooltip) << "\"";
- }
- }
- t << "];" << endl;
-}
-
-void DotNode::writeArrow(FTextStream &t,
- GraphType gt,
- GraphOutputFormat format,
- DotNode *cn,
- EdgeInfo *ei,
- bool topDown,
- bool pointBack,
- bool reNumber
- )
-{
- t << " Node";
- if (topDown)
- t << reNumberNode(cn->number(),reNumber);
- else
- t << reNumberNode(m_number,reNumber);
- t << " -> Node";
- if (topDown)
- t << reNumberNode(m_number,reNumber);
- else
- t << reNumberNode(cn->number(),reNumber);
- t << " [";
-
- static bool umlLook = Config_getBool("UML_LOOK");
- const EdgeProperties *eProps = umlLook ? &umlEdgeProps : &normalEdgeProps;
- QCString aStyle = eProps->arrowStyleMap[ei->m_color];
- bool umlUseArrow = aStyle=="odiamond";
-
- if (pointBack && !umlUseArrow) t << "dir=\"back\",";
- t << "color=\"" << eProps->edgeColorMap[ei->m_color]
- << "\",fontsize=\"" << FONTSIZE << "\",";
- t << "style=\"" << eProps->edgeStyleMap[ei->m_style] << "\"";
- if (!ei->m_label.isEmpty())
- {
- t << ",label=\" " << convertLabel(ei->m_label) << "\" ";
- }
- if (umlLook &&
- eProps->arrowStyleMap[ei->m_color] &&
- (gt==Inheritance || gt==Collaboration)
- )
- {
- bool rev = pointBack;
- if (umlUseArrow) rev=!rev; // UML use relates has arrow on the start side
- if (rev)
- t << ",arrowtail=\"" << eProps->arrowStyleMap[ei->m_color] << "\"";
- else
- t << ",arrowhead=\"" << eProps->arrowStyleMap[ei->m_color] << "\"";
- }
-
- if (format==BITMAP) t << ",fontname=\"" << FONTNAME << "\"";
- t << "];" << endl;
-}
-
-void DotNode::write(FTextStream &t,
- GraphType gt,
- GraphOutputFormat format,
- bool topDown,
- bool toChildren,
- bool backArrows,
- bool reNumber
- )
-{
- //printf("DotNode::write(%d) name=%s this=%p written=%d\n",distance,m_label.data(),this,m_written);
- if (m_written) return; // node already written to the output
- if (!m_visible) return; // node is not visible
- writeBox(t,gt,format,m_truncated==Truncated,reNumber);
- m_written=TRUE;
- QList<DotNode> *nl = toChildren ? m_children : m_parents;
- if (nl)
- {
- if (toChildren)
- {
- QListIterator<DotNode> dnli1(*nl);
- QListIterator<EdgeInfo> dnli2(*m_edgeInfo);
- DotNode *cn;
- for (dnli1.toFirst();(cn=dnli1.current());++dnli1,++dnli2)
- {
- if (cn->isVisible())
- {
- //printf("write arrow %s%s%s\n",label().data(),backArrows?"<-":"->",cn->label().data());
- writeArrow(t,gt,format,cn,dnli2.current(),topDown,backArrows,reNumber);
- }
- cn->write(t,gt,format,topDown,toChildren,backArrows,reNumber);
- }
- }
- else // render parents
- {
- QListIterator<DotNode> dnli(*nl);
- DotNode *pn;
- for (dnli.toFirst();(pn=dnli.current());++dnli)
- {
- if (pn->isVisible())
- {
- //printf("write arrow %s%s%s\n",label().data(),backArrows?"<-":"->",pn->label().data());
- writeArrow(t,
- gt,
- format,
- pn,
- pn->m_edgeInfo->at(pn->m_children->findRef(this)),
- FALSE,
- backArrows,
- reNumber
- );
- }
- pn->write(t,gt,format,TRUE,FALSE,backArrows,reNumber);
- }
- }
- }
- //printf("end DotNode::write(%d) name=%s\n",distance,m_label.data());
-}
-
-void DotNode::writeXML(FTextStream &t,bool isClassGraph)
-{
- t << " <node id=\"" << m_number << "\">" << endl;
- t << " <label>" << convertToXML(m_label) << "</label>" << endl;
- if (!m_url.isEmpty())
- {
- QCString url(m_url);
- char *refPtr = url.data();
- char *urlPtr = strchr(url.data(),'$');
- if (urlPtr)
- {
- *urlPtr++='\0';
- t << " <link refid=\"" << convertToXML(urlPtr) << "\"";
- if (*refPtr!='\0')
- {
- t << " external=\"" << convertToXML(refPtr) << "\"";
- }
- t << "/>" << endl;
- }
- }
- if (m_children)
- {
- QListIterator<DotNode> nli(*m_children);
- QListIterator<EdgeInfo> eli(*m_edgeInfo);
- DotNode *childNode;
- EdgeInfo *edgeInfo;
- for (;(childNode=nli.current());++nli,++eli)
- {
- edgeInfo=eli.current();
- t << " <childnode refid=\"" << childNode->m_number << "\" relation=\"";
- if (isClassGraph)
- {
- switch(edgeInfo->m_color)
- {
- case EdgeInfo::Blue: t << "public-inheritance"; break;
- case EdgeInfo::Green: t << "protected-inheritance"; break;
- case EdgeInfo::Red: t << "private-inheritance"; break;
- case EdgeInfo::Purple: t << "usage"; break;
- case EdgeInfo::Orange: t << "template-instance"; break;
- case EdgeInfo::Grey: ASSERT(0); break;
- }
- }
- else // include graph
- {
- t << "include";
- }
- t << "\">" << endl;
- if (!edgeInfo->m_label.isEmpty())
- {
- int p=0;
- int ni;
- while ((ni=edgeInfo->m_label.find('\n',p))!=-1)
- {
- t << " <edgelabel>"
- << convertToXML(edgeInfo->m_label.mid(p,ni-p))
- << "</edgelabel>" << endl;
- p=ni+1;
- }
- t << " <edgelabel>"
- << convertToXML(edgeInfo->m_label.right(edgeInfo->m_label.length()-p))
- << "</edgelabel>" << endl;
- }
- t << " </childnode>" << endl;
- }
- }
- t << " </node>" << endl;
-}
-
-
-void DotNode::writeDEF(FTextStream &t)
-{
- const char* nodePrefix = " node-";
-
- t << " node = {" << endl;
- t << nodePrefix << "id = " << m_number << ';' << endl;
- t << nodePrefix << "label = '" << m_label << "';" << endl;
-
- if (!m_url.isEmpty())
- {
- QCString url(m_url);
- char *refPtr = url.data();
- char *urlPtr = strchr(url.data(),'$');
- if (urlPtr)
- {
- *urlPtr++='\0';
- t << nodePrefix << "link = {" << endl << " "
- << nodePrefix << "link-id = '" << urlPtr << "';" << endl;
-
- if (*refPtr!='\0')
- {
- t << " " << nodePrefix << "link-external = '"
- << refPtr << "';" << endl;
- }
- t << " };" << endl;
- }
- }
- if (m_children)
- {
- QListIterator<DotNode> nli(*m_children);
- QListIterator<EdgeInfo> eli(*m_edgeInfo);
- DotNode *childNode;
- EdgeInfo *edgeInfo;
- for (;(childNode=nli.current());++nli,++eli)
- {
- edgeInfo=eli.current();
- t << " node-child = {" << endl;
- t << " child-id = '" << childNode->m_number << "';" << endl;
- t << " relation = ";
-
- switch(edgeInfo->m_color)
- {
- case EdgeInfo::Blue: t << "public-inheritance"; break;
- case EdgeInfo::Green: t << "protected-inheritance"; break;
- case EdgeInfo::Red: t << "private-inheritance"; break;
- case EdgeInfo::Purple: t << "usage"; break;
- case EdgeInfo::Orange: t << "template-instance"; break;
- case EdgeInfo::Grey: ASSERT(0); break;
- }
- t << ';' << endl;
-
- if (!edgeInfo->m_label.isEmpty())
- {
- t << " edgelabel = <<_EnD_oF_dEf_TeXt_" << endl
- << edgeInfo->m_label << endl
- << "_EnD_oF_dEf_TeXt_;" << endl;
- }
- t << " }; /* node-child */" << endl;
- } /* for (;childNode...) */
- }
- t << " }; /* node */" << endl;
-}
-
-
-void DotNode::clearWriteFlag()
-{
- m_written=FALSE;
- if (m_parents!=0)
- {
- QListIterator<DotNode> dnlip(*m_parents);
- DotNode *pn;
- for (dnlip.toFirst();(pn=dnlip.current());++dnlip)
- {
- if (pn->m_written)
- {
- pn->clearWriteFlag();
- }
- }
- }
- if (m_children!=0)
- {
- QListIterator<DotNode> dnlic(*m_children);
- DotNode *cn;
- for (dnlic.toFirst();(cn=dnlic.current());++dnlic)
- {
- if (cn->m_written)
- {
- cn->clearWriteFlag();
- }
- }
- }
-}
-
-void DotNode::colorConnectedNodes(int curColor)
-{
- if (m_children)
- {
- QListIterator<DotNode> dnlic(*m_children);
- DotNode *cn;
- for (dnlic.toFirst();(cn=dnlic.current());++dnlic)
- {
- if (cn->m_subgraphId==-1) // uncolored child node
- {
- cn->m_subgraphId=curColor;
- cn->markAsVisible();
- cn->colorConnectedNodes(curColor);
- //printf("coloring node %s (%p): %d\n",cn->m_label.data(),cn,cn->m_subgraphId);
- }
- }
- }
-
- if (m_parents)
- {
- QListIterator<DotNode> dnlip(*m_parents);
- DotNode *pn;
- for (dnlip.toFirst();(pn=dnlip.current());++dnlip)
- {
- if (pn->m_subgraphId==-1) // uncolored parent node
- {
- pn->m_subgraphId=curColor;
- pn->markAsVisible();
- pn->colorConnectedNodes(curColor);
- //printf("coloring node %s (%p): %d\n",pn->m_label.data(),pn,pn->m_subgraphId);
- }
- }
- }
-}
-
-const DotNode *DotNode::findDocNode() const
-{
- if (!m_url.isEmpty()) return this;
- //printf("findDocNode(): `%s'\n",m_label.data());
- if (m_parents)
- {
- QListIterator<DotNode> dnli(*m_parents);
- DotNode *pn;
- for (dnli.toFirst();(pn=dnli.current());++dnli)
- {
- if (!pn->m_hasDoc)
- {
- pn->m_hasDoc=TRUE;
- const DotNode *dn = pn->findDocNode();
- if (dn) return dn;
- }
- }
- }
- if (m_children)
- {
- QListIterator<DotNode> dnli(*m_children);
- DotNode *cn;
- for (dnli.toFirst();(cn=dnli.current());++dnli)
- {
- if (!cn->m_hasDoc)
- {
- cn->m_hasDoc=TRUE;
- const DotNode *dn = cn->findDocNode();
- if (dn) return dn;
- }
- }
- }
- return 0;
-}
-
-//--------------------------------------------------------------------
-
-int DotGfxHierarchyTable::m_curNodeNumber;
-
-void DotGfxHierarchyTable::writeGraph(FTextStream &out,
- const char *path,const char *fileName) const
-{
- //printf("DotGfxHierarchyTable::writeGraph(%s)\n",name);
- //printf("m_rootNodes=%p count=%d\n",m_rootNodes,m_rootNodes->count());
-
- static bool vhdl = Config_getBool("OPTIMIZE_OUTPUT_VHDL");
-
- if (m_rootSubgraphs->count()==0) return;
-
- QDir d(path);
- // store the original directory
- if (!d.exists())
- {
- err("error: Output dir %s does not exist!\n",path); exit(1);
- }
-
- // put each connected subgraph of the hierarchy in a row of the HTML output
- out << "<table border=\"0\" cellspacing=\"10\" cellpadding=\"0\">" << endl;
-
- QListIterator<DotNode> dnli(*m_rootSubgraphs);
- DotNode *n;
- int count=0;
- for (dnli.toFirst();(n=dnli.current());++dnli)
- {
- QCString baseName;
-
- if (vhdl)
- {
- QCString l=n->m_url;
- l=VhdlDocGen::convertFileNameToClassName(l);
- ClassDef *cd=Doxygen::classSDict->find(l);
- if (cd==0) continue;
- // only entities are shown
- if ((VhdlDocGen::VhdlClasses)cd->protection()!=VhdlDocGen::ENTITYCLASS)
- continue;
- }
-
- QCString imgExt = Config_getEnum("DOT_IMAGE_FORMAT");
- baseName.sprintf("inherit_graph_%d",count++);
- //baseName = convertNameToFile(baseName);
- QCString imgName = baseName+"."+ imgExt;
- QCString mapName = baseName+".map";
- QCString absImgName = QCString(d.absPath().data())+"/"+imgName;
- QCString absMapName = QCString(d.absPath().data())+"/"+mapName;
- QCString absBaseName = QCString(d.absPath().data())+"/"+baseName;
- QListIterator<DotNode> dnli2(*m_rootNodes);
- DotNode *node;
-
- // compute md5 checksum of the graph were are about to generate
- QGString theGraph;
- FTextStream md5stream(&theGraph);
- writeGraphHeader(md5stream);
- md5stream << " rankdir=\"LR\";" << endl;
- for (dnli2.toFirst();(node=dnli2.current());++dnli2)
- {
- if (node->m_subgraphId==n->m_subgraphId)
- {
- node->clearWriteFlag();
- }
- }
- for (dnli2.toFirst();(node=dnli2.current());++dnli2)
- {
- if (node->m_subgraphId==n->m_subgraphId)
- {
- node->write(md5stream,DotNode::Hierarchy,BITMAP,FALSE,TRUE,TRUE,TRUE);
- }
- }
- writeGraphFooter(md5stream);
- resetReNumbering();
- uchar md5_sig[16];
- QCString sigStr(33);
- MD5Buffer((const unsigned char *)theGraph.data(),theGraph.length(),md5_sig);
- MD5SigToString(md5_sig,sigStr.data(),33);
- bool regenerate=FALSE;
- if (checkAndUpdateMd5Signature(absBaseName,sigStr) ||
- !checkDeliverables(absImgName,absMapName))
- {
- regenerate=TRUE;
- // image was new or has changed
- QCString dotName=absBaseName+".dot";
- QFile f(dotName);
- if (!f.open(IO_WriteOnly)) return;
- FTextStream t(&f);
- t << theGraph;
- f.close();
- resetReNumbering();
-
- DotRunner *dotRun = new DotRunner(dotName,d.absPath().data(),TRUE,absImgName);
- dotRun->addJob(imgExt,absImgName);
- dotRun->addJob(MAP_CMD,absMapName);
- DotManager::instance()->addRun(dotRun);
- }
- else
- {
- removeDotGraph(absBaseName+".dot");
- }
- Doxygen::indexList.addImageFile(imgName);
- // write image and map in a table row
- QCString mapLabel = escapeCharsInString(n->m_label,FALSE);
- out << "<tr><td>";
- if (imgExt=="svg") // vector graphics
- {
- if (regenerate || !writeSVGFigureLink(out,QCString(),baseName,absImgName))
- {
- if (regenerate)
- {
- DotManager::instance()->addSVGConversion(absImgName,QCString(),
- FALSE,QCString(),FALSE,0);
- }
- int mapId = DotManager::instance()->addSVGObject(fileName,baseName,
- absImgName,QCString());
- out << "<!-- SVG " << mapId << " -->" << endl;
- }
- }
- else // normal bitmap
- {
- out << "<img src=\"" << imgName << "\" border=\"0\" alt=\"\" usemap=\"#"
- << mapLabel << "\"/>" << endl;
-
- if (regenerate || !insertMapFile(out,absMapName,QCString(),mapLabel))
- {
- int mapId = DotManager::instance()->addMap(fileName,absMapName,QCString(),
- FALSE,QCString(),mapLabel);
- out << "<!-- MAP " << mapId << " -->" << endl;
- }
- }
-
- out << "</td></tr>" << endl;
- }
- out << "</table>" << endl;
-}
-
-void DotGfxHierarchyTable::addHierarchy(DotNode *n,ClassDef *cd,bool hideSuper)
-{
- //printf("addHierarchy `%s' baseClasses=%d\n",cd->name().data(),cd->baseClasses()->count());
- if (cd->subClasses())
- {
- BaseClassListIterator bcli(*cd->subClasses());
- BaseClassDef *bcd;
- for ( ; (bcd=bcli.current()) ; ++bcli )
- {
- ClassDef *bClass=bcd->classDef;
- //printf(" Trying sub class=`%s' usedNodes=%d\n",bClass->name().data(),m_usedNodes->count());
- if (bClass->isVisibleInHierarchy() && hasVisibleRoot(bClass->baseClasses()))
- {
- DotNode *bn;
- //printf(" Node `%s' Found visible class=`%s'\n",n->m_label.data(),
- // bClass->name().data());
- if ((bn=m_usedNodes->find(bClass->name()))) // node already present
- {
- if (n->m_children==0 || n->m_children->findRef(bn)==-1) // no arrow yet
- {
- n->addChild(bn,bcd->prot);
- bn->addParent(n);
- //printf(" Adding node %s to existing base node %s (c=%d,p=%d)\n",
- // n->m_label.data(),
- // bn->m_label.data(),
- // bn->m_children ? bn->m_children->count() : 0,
- // bn->m_parents ? bn->m_parents->count() : 0
- // );
- }
- //else
- //{
- // printf(" Class already has an arrow!\n");
- //}
- }
- else
- {
- QCString tmp_url="";
- if (bClass->isLinkable() && !bClass->isHidden())
- {
- tmp_url=bClass->getReference()+"$"+bClass->getOutputFileBase();
- if (!bClass->anchor().isEmpty())
- {
- tmp_url+="#"+bClass->anchor();
- }
- }
- QCString tooltip = bClass->briefDescriptionAsTooltip();
- bn = new DotNode(m_curNodeNumber++,
- bClass->displayName(),
- tooltip,
- tmp_url.data()
- );
- n->addChild(bn,bcd->prot);
- bn->addParent(n);
- //printf(" Adding node %s to new base node %s (c=%d,p=%d)\n",
- // n->m_label.data(),
- // bn->m_label.data(),
- // bn->m_children ? bn->m_children->count() : 0,
- // bn->m_parents ? bn->m_parents->count() : 0
- // );
- //printf(" inserting %s (%p)\n",bClass->name().data(),bn);
- m_usedNodes->insert(bClass->name(),bn); // add node to the used list
- }
- if (!bClass->visited && !hideSuper && bClass->subClasses())
- {
- bool wasVisited=bClass->visited;
- bClass->visited=TRUE;
- addHierarchy(bn,bClass,wasVisited);
- }
- }
- }
- }
- //printf("end addHierarchy\n");
-}
-
-void DotGfxHierarchyTable::addClassList(ClassSDict *cl)
-{
- ClassSDict::Iterator cli(*cl);
- ClassDef *cd;
- for (cli.toLast();(cd=cli.current());--cli)
- {
- //printf("Trying %s subClasses=%d\n",cd->name().data(),cd->subClasses()->count());
- if (!hasVisibleRoot(cd->baseClasses()) &&
- cd->isVisibleInHierarchy()
- ) // root node in the forest
- {
- QCString tmp_url="";
- if (cd->isLinkable() && !cd->isHidden())
- {
- tmp_url=cd->getReference()+"$"+cd->getOutputFileBase();
- if (!cd->anchor().isEmpty())
- {
- tmp_url+="#"+cd->anchor();
- }
- }
- //printf("Inserting root class %s\n",cd->name().data());
- QCString tooltip = cd->briefDescriptionAsTooltip();
- DotNode *n = new DotNode(m_curNodeNumber++,
- cd->displayName(),
- tooltip,
- tmp_url.data());
-
- //m_usedNodes->clear();
- m_usedNodes->insert(cd->name(),n);
- m_rootNodes->insert(0,n);
- if (!cd->visited && cd->subClasses())
- {
- addHierarchy(n,cd,cd->visited);
- cd->visited=TRUE;
- }
- }
- }
-}
-
-DotGfxHierarchyTable::DotGfxHierarchyTable()
-{
- m_curNodeNumber=0;
- m_rootNodes = new QList<DotNode>;
- 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
- // as edges
- initClassHierarchy(Doxygen::classSDict);
- initClassHierarchy(Doxygen::hiddenClasses);
- addClassList(Doxygen::classSDict);
- addClassList(Doxygen::hiddenClasses);
- // m_usedNodes now contains all nodes in the graph
-
- // color the graph into a set of independent subgraphs
- bool done=FALSE;
- int curColor=0;
- QListIterator<DotNode> dnli(*m_rootNodes);
- while (!done) // there are still nodes to color
- {
- DotNode *n;
- done=TRUE; // we are done unless there are still uncolored nodes
- for (dnli.toLast();(n=dnli.current());--dnli)
- {
- if (n->m_subgraphId==-1) // not yet colored
- {
- //printf("Starting at node %s (%p): %d\n",n->m_label.data(),n,curColor);
- done=FALSE; // still uncolored nodes
- n->m_subgraphId=curColor;
- n->markAsVisible();
- n->colorConnectedNodes(curColor);
- curColor++;
- const DotNode *dn=n->findDocNode();
- if (dn!=0)
- m_rootSubgraphs->inSort(dn);
- else
- m_rootSubgraphs->inSort(n);
- }
- }
- }
-
- //printf("Number of independent subgraphs: %d\n",curColor);
- //QListIterator<DotNode> dnli2(*m_rootSubgraphs);
- //DotNode *n;
- //for (dnli2.toFirst();(n=dnli2.current());++dnli2)
- //{
- // printf("Node %s color=%d (c=%d,p=%d)\n",
- // n->m_label.data(),n->m_subgraphId,
- // n->m_children?n->m_children->count():0,
- // n->m_parents?n->m_parents->count():0);
- //}
-}
-
-DotGfxHierarchyTable::~DotGfxHierarchyTable()
-{
- //printf("DotGfxHierarchyTable::~DotGfxHierarchyTable\n");
-
- //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;
-}
-
-//--------------------------------------------------------------------
-
-int DotClassGraph::m_curNodeNumber = 0;
-
-void DotClassGraph::addClass(ClassDef *cd,DotNode *n,int prot,
- const char *label,const char *usedName,const char *templSpec,bool base,int distance)
-{
- if (Config_getBool("HIDE_UNDOC_CLASSES") && !cd->isLinkable()) return;
-
- int edgeStyle = (label || prot==EdgeInfo::Orange) ? EdgeInfo::Dashed : EdgeInfo::Solid;
- QCString className;
- if (usedName) // name is a typedef
- {
- className=usedName;
- }
- else if (templSpec) // name has a template part
- {
- className=insertTemplateSpecifierInScope(cd->name(),templSpec);
- }
- else // just a normal name
- {
- className=cd->displayName();
- }
- //printf("DotClassGraph::addClass(class=`%s',parent=%s,prot=%d,label=%s,dist=%d,usedName=%s,templSpec=%s,base=%d)\n",
- // className.data(),n->m_label.data(),prot,label,distance,usedName,templSpec,base);
- DotNode *bn = m_usedNodes->find(className);
- if (bn) // class already inserted
- {
- if (base)
- {
- n->addChild(bn,prot,edgeStyle,label);
- bn->addParent(n);
- }
- else
- {
- bn->addChild(n,prot,edgeStyle,label);
- n->addParent(bn);
- }
- bn->setDistance(distance);
- //printf(" add exiting node %s of %s\n",bn->m_label.data(),n->m_label.data());
- }
- else // new class
- {
- QCString displayName=className;
- if (Config_getBool("HIDE_SCOPE_NAMES")) displayName=stripScope(displayName);
- QCString tmp_url;
- if (cd->isLinkable() && !cd->isHidden())
- {
- tmp_url=cd->getReference()+"$"+cd->getOutputFileBase();
- if (!cd->anchor().isEmpty())
- {
- tmp_url+="#"+cd->anchor();
- }
- }
- QCString tooltip = cd->briefDescriptionAsTooltip();
- bn = new DotNode(m_curNodeNumber++,
- displayName,
- tooltip,
- tmp_url.data(),
- FALSE, // rootNode
- cd
- );
- if (base)
- {
- n->addChild(bn,prot,edgeStyle,label);
- bn->addParent(n);
- }
- else
- {
- bn->addChild(n,prot,edgeStyle,label);
- n->addParent(bn);
- }
- bn->setDistance(distance);
- m_usedNodes->insert(className,bn);
- //printf(" add new child node `%s' to %s hidden=%d url=%s\n",
- // className.data(),n->m_label.data(),cd->isHidden(),tmp_url.data());
-
- buildGraph(cd,bn,base,distance+1);
- }
-}
-
-void DotClassGraph::determineTruncatedNodes(QList<DotNode> &queue,bool includeParents)
-{
- while (queue.count()>0)
- {
- DotNode *n = queue.take(0);
- if (n->isVisible() && n->isTruncated()==DotNode::Unknown)
- {
- bool truncated = FALSE;
- if (n->m_children)
- {
- QListIterator<DotNode> li(*n->m_children);
- DotNode *dn;
- for (li.toFirst();(dn=li.current());++li)
- {
- if (!dn->isVisible())
- truncated = TRUE;
- else
- queue.append(dn);
- }
- }
- if (n->m_parents && includeParents)
- {
- QListIterator<DotNode> li(*n->m_parents);
- DotNode *dn;
- for (li.toFirst();(dn=li.current());++li)
- {
- if (!dn->isVisible())
- truncated = TRUE;
- else
- queue.append(dn);
- }
- }
- n->markAsTruncated(truncated);
- }
- }
-}
-
-bool DotClassGraph::determineVisibleNodes(DotNode *rootNode,
- int maxNodes,bool includeParents)
-{
- QList<DotNode> childQueue;
- QList<DotNode> parentQueue;
- QArray<int> childTreeWidth;
- QArray<int> parentTreeWidth;
- childQueue.append(rootNode);
- if (includeParents) parentQueue.append(rootNode);
- bool firstNode=TRUE; // flag to force reprocessing rootNode in the parent loop
- // despite being marked visible in the child loop
- while ((childQueue.count()>0 || parentQueue.count()>0) && maxNodes>0)
- {
- static int maxDistance = Config_getInt("MAX_DOT_GRAPH_DEPTH");
- if (childQueue.count()>0)
- {
- DotNode *n = childQueue.take(0);
- int distance = n->distance();
- if (!n->isVisible() && distance<maxDistance) // not yet processed
- {
- if (distance>0)
- {
- int oldSize=(int)childTreeWidth.size();
- if (distance>oldSize)
- {
- childTreeWidth.resize(QMAX(childTreeWidth.size(),(uint)distance));
- int i; for (i=oldSize;i<distance;i++) childTreeWidth[i]=0;
- }
- childTreeWidth[distance-1]+=n->label().length();
- }
- n->markAsVisible();
- maxNodes--;
- // add direct children
- if (n->m_children)
- {
- QListIterator<DotNode> li(*n->m_children);
- DotNode *dn;
- for (li.toFirst();(dn=li.current());++li)
- {
- childQueue.append(dn);
- }
- }
- }
- }
- if (includeParents && parentQueue.count()>0)
- {
- DotNode *n = parentQueue.take(0);
- if ((!n->isVisible() || firstNode) && n->distance()<maxDistance) // not yet processed
- {
- firstNode=FALSE;
- int distance = n->distance();
- if (distance>0)
- {
- int oldSize = (int)parentTreeWidth.size();
- if (distance>oldSize)
- {
- parentTreeWidth.resize(QMAX(parentTreeWidth.size(),(uint)distance));
- int i; for (i=oldSize;i<distance;i++) parentTreeWidth[i]=0;
- }
- parentTreeWidth[distance-1]+=n->label().length();
- }
- n->markAsVisible();
- maxNodes--;
- // add direct parents
- if (n->m_parents)
- {
- QListIterator<DotNode> li(*n->m_parents);
- DotNode *dn;
- for (li.toFirst();(dn=li.current());++li)
- {
- parentQueue.append(dn);
- }
- }
- }
- }
- }
- if (Config_getBool("UML_LOOK")) return FALSE; // UML graph are always top to bottom
- int maxWidth=0;
- int maxHeight=(int)QMAX(childTreeWidth.size(),parentTreeWidth.size());
- uint i;
- for (i=0;i<childTreeWidth.size();i++)
- {
- if (childTreeWidth.at(i)>maxWidth) maxWidth=childTreeWidth.at(i);
- }
- for (i=0;i<parentTreeWidth.size();i++)
- {
- if (parentTreeWidth.at(i)>maxWidth) maxWidth=parentTreeWidth.at(i);
- }
- //printf("max tree width=%d, max tree height=%d\n",maxWidth,maxHeight);
- return maxWidth>80 && maxHeight<12; // used metric to decide to render the tree
- // from left to right instead of top to bottom,
- // with the idea to render very wide trees in
- // left to right order.
-}
-
-void DotClassGraph::buildGraph(ClassDef *cd,DotNode *n,bool base,int distance)
-{
- //printf("DocClassGraph::buildGraph(%s,distance=%d,base=%d)\n",
- // cd->name().data(),distance,base);
- // ---- Add inheritance relations
-
- if (m_graphType == DotNode::Inheritance || m_graphType==DotNode::Collaboration)
- {
- BaseClassList *bcl = base ? cd->baseClasses() : cd->subClasses();
- if (bcl)
- {
- BaseClassListIterator bcli(*bcl);
- BaseClassDef *bcd;
- for ( ; (bcd=bcli.current()) ; ++bcli )
- {
- //printf("-------- inheritance relation %s->%s templ=`%s'\n",
- // cd->name().data(),bcd->classDef->name().data(),bcd->templSpecifiers.data());
- addClass(bcd->classDef,n,bcd->prot,0,bcd->usedName,
- bcd->templSpecifiers,base,distance);
- }
- }
- }
- if (m_graphType == DotNode::Collaboration)
- {
- // ---- Add usage relations
-
- UsesClassDict *dict =
- base ? cd->usedImplementationClasses() :
- cd->usedByImplementationClasses()
- ;
- if (dict)
- {
- UsesClassDictIterator ucdi(*dict);
- UsesClassDef *ucd;
- for (;(ucd=ucdi.current());++ucdi)
- {
- QCString label;
- QDictIterator<void> dvi(*ucd->accessors);
- const char *s;
- bool first=TRUE;
- int count=0;
- int maxLabels=10;
- for (;(s=dvi.currentKey()) && count<maxLabels;++dvi,++count)
- {
- if (first)
- {
- label=s;
- first=FALSE;
- }
- else
- {
- label+=QCString("\n")+s;
- }
- }
- if (count==maxLabels) label+="\n...";
- //printf("addClass: %s templSpec=%s\n",ucd->classDef->name().data(),ucd->templSpecifiers.data());
- addClass(ucd->classDef,n,EdgeInfo::Purple,label,0,
- ucd->templSpecifiers,base,distance);
- }
- }
- }
-
- // ---- Add template instantiation relations
-
- static bool templateRelations = Config_getBool("TEMPLATE_RELATIONS");
- if (templateRelations)
- {
- if (base) // template relations for base classes
- {
- ClassDef *templMaster=cd->templateMaster();
- if (templMaster)
- {
- QDictIterator<ClassDef> cli(*templMaster->getTemplateInstances());
- ClassDef *templInstance;
- for (;(templInstance=cli.current());++cli)
- {
- if (templInstance==cd)
- {
- addClass(templMaster,n,EdgeInfo::Orange,cli.currentKey(),0,
- 0,TRUE,distance);
- }
- }
- }
- }
- else // template relations for super classes
- {
- QDict<ClassDef> *templInstances = cd->getTemplateInstances();
- if (templInstances)
- {
- QDictIterator<ClassDef> cli(*templInstances);
- ClassDef *templInstance;
- for (;(templInstance=cli.current());++cli)
- {
- addClass(templInstance,n,EdgeInfo::Orange,cli.currentKey(),0,
- 0,FALSE,distance);
- }
- }
- }
- }
-}
-
-DotClassGraph::DotClassGraph(ClassDef *cd,DotNode::GraphType t)
-{
- //printf("--------------- DotClassGraph::DotClassGraph `%s'\n",cd->displayName().data());
- m_graphType = t;
- QCString tmp_url="";
- if (cd->isLinkable() && !cd->isHidden())
- {
- tmp_url=cd->getReference()+"$"+cd->getOutputFileBase();
- if (!cd->anchor().isEmpty())
- {
- tmp_url+="#"+cd->anchor();
- }
- }
- QCString className = cd->displayName();
- QCString tooltip = cd->briefDescriptionAsTooltip();
- m_startNode = new DotNode(m_curNodeNumber++,
- className,
- tooltip,
- tmp_url.data(),
- TRUE, // is a root node
- cd
- );
- m_startNode->setDistance(0);
- m_usedNodes = new QDict<DotNode>(1009);
- m_usedNodes->insert(className,m_startNode);
-
- //printf("Root node %s\n",cd->name().data());
- //if (m_recDepth>0)
- //{
- buildGraph(cd,m_startNode,TRUE,1);
- if (t==DotNode::Inheritance) buildGraph(cd,m_startNode,FALSE,1);
- //}
-
- static int maxNodes = Config_getInt("DOT_GRAPH_MAX_NODES");
- //int directChildNodes = 1;
- //if (m_startNode->m_children!=0)
- // directChildNodes+=m_startNode->m_children->count();
- //if (t==DotNode::Inheritance && m_startNode->m_parents!=0)
- // directChildNodes+=m_startNode->m_parents->count();
- //if (directChildNodes>maxNodes) maxNodes=directChildNodes;
- //openNodeQueue.append(m_startNode);
- m_lrRank = determineVisibleNodes(m_startNode,maxNodes,t==DotNode::Inheritance);
- QList<DotNode> openNodeQueue;
- openNodeQueue.append(m_startNode);
- determineTruncatedNodes(openNodeQueue,t==DotNode::Inheritance);
-
- m_diskName = cd->getFileBase().copy();
-}
-
-bool DotClassGraph::isTrivial() const
-{
- if (m_graphType==DotNode::Inheritance)
- return m_startNode->m_children==0 && m_startNode->m_parents==0;
- else
- return m_startNode->m_children==0;
-}
-
-bool DotClassGraph::isTooBig() const
-{
- static int maxNodes = Config_getInt("DOT_GRAPH_MAX_NODES");
- int numNodes = 0;
- numNodes+= m_startNode->m_children ? m_startNode->m_children->count() : 0;
- if (m_graphType==DotNode::Inheritance)
- {
- numNodes+= m_startNode->m_parents ? m_startNode->m_parents->count() : 0;
- }
- return numNodes>=maxNodes;
-}
-
-DotClassGraph::~DotClassGraph()
-{
- deleteNodes(m_startNode);
- delete m_usedNodes;
-}
-
-/*! Computes a 16 byte md5 checksum for a given dot graph.
- * The md5 checksum is returned as a 32 character ASCII string.
- */
-QCString computeMd5Signature(DotNode *root,
- DotNode::GraphType gt,
- GraphOutputFormat format,
- bool lrRank,
- bool renderParents,
- bool backArrows,
- QCString &graphStr
- )
-{
- bool reNumber=TRUE;
-
- //printf("computeMd5Signature\n");
- QGString buf;
- FTextStream md5stream(&buf);
- writeGraphHeader(md5stream);
- if (lrRank)
- {
- md5stream << " rankdir=\"LR\";" << endl;
- }
- root->clearWriteFlag();
- root->write(md5stream,
- gt,
- format,
- gt!=DotNode::CallGraph && gt!=DotNode::Dependency,
- TRUE,
- backArrows,
- reNumber);
- if (renderParents && root->m_parents)
- {
- QListIterator<DotNode> dnli(*root->m_parents);
- DotNode *pn;
- for (dnli.toFirst();(pn=dnli.current());++dnli)
- {
- if (pn->isVisible())
- {
- root->writeArrow(md5stream, // stream
- gt, // graph type
- format, // output format
- pn, // child node
- pn->m_edgeInfo->at(pn->m_children->findRef(root)), // edge info
- FALSE, // topDown?
- backArrows, // point back?
- reNumber // renumber nodes
- );
- }
- pn->write(md5stream, // stream
- gt, // graph type
- format, // output format
- TRUE, // topDown?
- FALSE, // toChildren?
- backArrows, // backward pointing arrows?
- reNumber // renumber nodes?
- );
- }
- }
- writeGraphFooter(md5stream);
- uchar md5_sig[16];
- QCString sigStr(33);
- MD5Buffer((const unsigned char *)buf.data(),buf.length(),md5_sig);
- MD5SigToString(md5_sig,sigStr.data(),33);
- if (reNumber)
- {
- resetReNumbering();
- }
- graphStr=buf.data();
- //printf("md5: %s | file: %s\n",sigStr,baseName.data());
- return sigStr;
-}
-
-static bool updateDotGraph(DotNode *root,
- DotNode::GraphType gt,
- const QCString &baseName,
- GraphOutputFormat format,
- bool lrRank,
- bool renderParents,
- bool backArrows
- )
-{
- QCString theGraph;
- // TODO: write graph to theGraph, then compute md5 checksum
- QCString md5 = computeMd5Signature(
- root,gt,format,lrRank,renderParents,backArrows,theGraph);
- QFile f(baseName+".dot");
- if (f.open(IO_WriteOnly))
- {
- FTextStream t(&f);
- t << theGraph;
- }
- return checkAndUpdateMd5Signature(baseName,md5); // graph needs to be regenerated
-}
-
-QCString DotClassGraph::diskName() const
-{
- QCString result=m_diskName.copy();
- switch (m_graphType)
- {
- case DotNode::Collaboration:
- result+="_coll_graph";
- break;
- //case Interface:
- // result+="_intf_graph";
- // break;
- case DotNode::Inheritance:
- result+="_inherit_graph";
- break;
- default:
- ASSERT(0);
- break;
- }
- return result;
-}
-
-QCString DotClassGraph::writeGraph(FTextStream &out,
- GraphOutputFormat format,
- const char *path,
- const char *fileName,
- const char *relPath,
- bool /*isTBRank*/,
- bool generateImageMap,
- int graphId) const
-{
- QDir d(path);
- // store the original directory
- if (!d.exists())
- {
- err("error: Output dir %s does not exist!\n",path); exit(1);
- }
- static bool usePDFLatex = Config_getBool("USE_PDFLATEX");
-
- QCString baseName;
- QCString mapName;
- switch (m_graphType)
- {
- case DotNode::Collaboration:
- mapName="coll_map";
- break;
- //case Interface:
- // mapName="intf_map";
- // break;
- case DotNode::Inheritance:
- mapName="inherit_map";
- break;
- default:
- ASSERT(0);
- break;
- }
- baseName = convertNameToFile(diskName());
-
- // derive target file names from baseName
- QCString imgExt = Config_getEnum("DOT_IMAGE_FORMAT");
- QCString absBaseName = QCString(d.absPath())+"/"+baseName;
- QCString absDotName = absBaseName+".dot";
- QCString absMapName = absBaseName+".map";
- QCString absPdfName = absBaseName+".pdf";
- QCString absEpsName = absBaseName+".eps";
- QCString absImgName = absBaseName+"."+imgExt;
-
- bool regenerate = FALSE;
- if (updateDotGraph(m_startNode,
- m_graphType,
- absBaseName,
- format,
- m_lrRank,
- m_graphType==DotNode::Inheritance,
- TRUE
- ) ||
- !checkDeliverables(format==BITMAP ? absImgName :
- usePDFLatex ? absPdfName : absEpsName,
- format==BITMAP && generateImageMap ? absMapName : QCString())
- )
- {
- regenerate=TRUE;
- if (format==BITMAP) // run dot to create a bitmap image
- {
- QCString dotArgs(maxCmdLine);
-
- DotRunner *dotRun = new DotRunner(absDotName,
- d.absPath().data(),TRUE,absImgName);
- dotRun->addJob(imgExt,absImgName);
- if (generateImageMap) dotRun->addJob(MAP_CMD,absMapName);
- DotManager::instance()->addRun(dotRun);
-
- }
- else if (format==EPS) // run dot to create a .eps image
- {
- DotRunner *dotRun = new DotRunner(absDotName,d.absPath().data(),FALSE);
- if (usePDFLatex)
- {
- dotRun->addJob("pdf",absPdfName);
- }
- else
- {
- dotRun->addJob("ps",absEpsName);
- }
- DotManager::instance()->addRun(dotRun);
- }
- }
- Doxygen::indexList.addImageFile(baseName+"."+imgExt);
-
- if (format==BITMAP && generateImageMap) // produce HTML to include the image
- {
- QCString mapLabel = escapeCharsInString(m_startNode->m_label,FALSE)+"_"+
- escapeCharsInString(mapName,FALSE);
- if (imgExt=="svg") // add link to SVG file without map file
- {
- out << "<div class=\"center\">";
- if (regenerate || !writeSVGFigureLink(out,relPath,baseName,absImgName)) // need to patch the links in the generated SVG file
- {
- if (regenerate)
- {
- DotManager::instance()->addSVGConversion(absImgName,relPath,FALSE,QCString(),TRUE,graphId);
- }
- int mapId = DotManager::instance()->addSVGObject(fileName,baseName,absImgName,relPath);
- out << "<!-- SVG " << mapId << " -->" << endl;
- }
- out << "</div>" << endl;
- }
- else // add link to bitmap file with image map
- {
- out << "<div class=\"center\">";
- out << "<img src=\"" << relPath << baseName << "."
- << imgExt << "\" border=\"0\" usemap=\"#"
- << mapLabel << "\" alt=\"";
- switch (m_graphType)
- {
- case DotNode::Collaboration:
- out << "Collaboration graph";
- break;
- case DotNode::Inheritance:
- out << "Inheritance graph";
- break;
- default:
- ASSERT(0);
- break;
- }
- out << "\"/>";
- out << "</div>" << endl;
-
- if (regenerate || !insertMapFile(out,absMapName,relPath,mapLabel))
- {
- int mapId = DotManager::instance()->addMap(fileName,absMapName,relPath,
- FALSE,QCString(),mapLabel);
- out << "<!-- MAP " << mapId << " -->" << endl;
- }
- }
- }
- else if (format==EPS) // produce tex to include the .eps image
- {
- if (regenerate || !writeVecGfxFigure(out,baseName,absBaseName))
- {
- int figId = DotManager::instance()->addFigure(fileName,baseName,absBaseName,FALSE /*TRUE*/);
- out << endl << "% FIG " << figId << endl;
- }
- }
- if (!regenerate) removeDotGraph(absDotName);
-
- return baseName;
-}
-
-//--------------------------------------------------------------------
-
-void DotClassGraph::writeXML(FTextStream &t)
-{
- QDictIterator<DotNode> dni(*m_usedNodes);
- DotNode *node;
- for (;(node=dni.current());++dni)
- {
- node->writeXML(t,TRUE);
- }
-}
-
-void DotClassGraph::writeDEF(FTextStream &t)
-{
- QDictIterator<DotNode> dni(*m_usedNodes);
- DotNode *node;
- for (;(node=dni.current());++dni)
- {
- node->writeDEF(t);
- }
-}
-
-//--------------------------------------------------------------------
-
-int DotInclDepGraph::m_curNodeNumber = 0;
-
-void DotInclDepGraph::buildGraph(DotNode *n,FileDef *fd,int distance)
-{
- QList<IncludeInfo> *includeFiles =
- m_inverse ? fd->includedByFileList() : fd->includeFileList();
- if (includeFiles)
- {
- QListIterator<IncludeInfo> ili(*includeFiles);
- IncludeInfo *ii;
- for (;(ii=ili.current());++ili)
- {
- FileDef *bfd = ii->fileDef;
- QCString in = ii->includeName;
- //printf(">>>> in=`%s' bfd=%p\n",ii->includeName.data(),bfd);
- bool doc=TRUE,src=FALSE;
- if (bfd)
- {
- in = bfd->absFilePath();
- doc = bfd->isLinkable() && !bfd->isHidden();
- src = bfd->generateSourceFile();
- }
- if (doc || src || !Config_getBool("HIDE_UNDOC_RELATIONS"))
- {
- QCString url="";
- if (bfd) url=bfd->getOutputFileBase().copy();
- if (!doc && src)
- {
- url=bfd->getSourceFileBase();
- }
- DotNode *bn = m_usedNodes->find(in);
- if (bn) // file is already a node in the graph
- {
- n->addChild(bn,0,0,0);
- bn->addParent(n);
- bn->setDistance(distance);
- }
- else
- {
- QCString tmp_url;
- QCString tooltip;
- if (bfd)
- {
- tmp_url=doc || src ? bfd->getReference()+"$"+url : QCString();
- tooltip = bfd->briefDescriptionAsTooltip();
- }
- bn = new DotNode(
- m_curNodeNumber++, // n
- ii->includeName, // label
- tooltip, // tip
- tmp_url, // url
- FALSE, // rootNode
- 0 // cd
- );
- n->addChild(bn,0,0,0);
- bn->addParent(n);
- m_usedNodes->insert(in,bn);
- bn->setDistance(distance);
-
- if (bfd) buildGraph(bn,bfd,distance+1);
- }
- }
- }
- }
-}
-
-void DotInclDepGraph::determineVisibleNodes(QList<DotNode> &queue, int &maxNodes)
-{
- while (queue.count()>0 && maxNodes>0)
- {
- static int maxDistance = Config_getInt("MAX_DOT_GRAPH_DEPTH");
- DotNode *n = queue.take(0);
- if (!n->isVisible() && n->distance()<maxDistance) // not yet processed
- {
- n->markAsVisible();
- maxNodes--;
- // add direct children
- if (n->m_children)
- {
- QListIterator<DotNode> li(*n->m_children);
- DotNode *dn;
- for (li.toFirst();(dn=li.current());++li)
- {
- queue.append(dn);
- }
- }
- }
- }
-}
-
-void DotInclDepGraph::determineTruncatedNodes(QList<DotNode> &queue)
-{
- while (queue.count()>0)
- {
- DotNode *n = queue.take(0);
- if (n->isVisible() && n->isTruncated()==DotNode::Unknown)
- {
- bool truncated = FALSE;
- if (n->m_children)
- {
- QListIterator<DotNode> li(*n->m_children);
- DotNode *dn;
- for (li.toFirst();(dn=li.current());++li)
- {
- if (!dn->isVisible())
- truncated = TRUE;
- else
- queue.append(dn);
- }
- }
- n->markAsTruncated(truncated);
- }
- }
-}
-
-
-DotInclDepGraph::DotInclDepGraph(FileDef *fd,bool inverse)
-{
- m_maxDistance = 0;
- m_inverse = inverse;
- ASSERT(fd!=0);
- m_diskName = fd->getFileBase().copy();
- QCString tmp_url=fd->getReference()+"$"+fd->getFileBase();
- m_startNode = new DotNode(m_curNodeNumber++,
- fd->docName(),
- "",
- tmp_url.data(),
- TRUE // root node
- );
- m_startNode->setDistance(0);
- m_usedNodes = new QDict<DotNode>(1009);
- m_usedNodes->insert(fd->absFilePath(),m_startNode);
- buildGraph(m_startNode,fd,1);
-
- static int nodes = Config_getInt("DOT_GRAPH_MAX_NODES");
- int maxNodes = nodes;
- //int directChildNodes = 1;
- //if (m_startNode->m_children!=0)
- // directChildNodes+=m_startNode->m_children->count();
- //if (directChildNodes>maxNodes) maxNodes=directChildNodes;
- QList<DotNode> openNodeQueue;
- openNodeQueue.append(m_startNode);
- determineVisibleNodes(openNodeQueue,maxNodes);
- openNodeQueue.clear();
- openNodeQueue.append(m_startNode);
- determineTruncatedNodes(openNodeQueue);
-}
-
-DotInclDepGraph::~DotInclDepGraph()
-{
- deleteNodes(m_startNode);
- delete m_usedNodes;
-}
-
-QCString DotInclDepGraph::diskName() const
-{
- QCString result=m_diskName.copy();
- if (m_inverse) result+="_dep";
- result+="_incl";
- return convertNameToFile(result);
-}
-
-QCString DotInclDepGraph::writeGraph(FTextStream &out,
- GraphOutputFormat format,
- const char *path,
- const char *fileName,
- const char *relPath,
- bool generateImageMap,
- int graphId
- ) const
-{
- QDir d(path);
- // store the original directory
- if (!d.exists())
- {
- err("error: Output dir %s does not exist!\n",path); exit(1);
- }
- static bool usePDFLatex = Config_getBool("USE_PDFLATEX");
-
- QCString baseName=m_diskName;
- if (m_inverse) baseName+="_dep";
- baseName+="_incl";
- baseName=convertNameToFile(baseName);
- QCString mapName=escapeCharsInString(m_startNode->m_label,FALSE);
- if (m_inverse) mapName+="dep";
-
- QCString imgExt = Config_getEnum("DOT_IMAGE_FORMAT");
- QCString absBaseName = QCString(d.absPath())+"/"+baseName;
- QCString absDotName = absBaseName+".dot";
- QCString absMapName = absBaseName+".map";
- QCString absPdfName = absBaseName+".pdf";
- QCString absEpsName = absBaseName+".eps";
- QCString absImgName = absBaseName+"."+imgExt;
-
- bool regenerate = FALSE;
- if (updateDotGraph(m_startNode,
- DotNode::Dependency,
- absBaseName,
- format,
- FALSE, // lrRank
- FALSE, // renderParents
- m_inverse // backArrows
- ) ||
- !checkDeliverables(format==BITMAP ? absImgName :
- usePDFLatex ? absPdfName : absEpsName,
- format==BITMAP && generateImageMap ? absMapName : QCString())
- )
- {
- regenerate=TRUE;
- if (format==BITMAP)
- {
- // run dot to create a bitmap image
- QCString dotArgs(maxCmdLine);
- DotRunner *dotRun = new DotRunner(absDotName,d.absPath().data(),TRUE,absImgName);
- dotRun->addJob(imgExt,absImgName);
- if (generateImageMap) dotRun->addJob(MAP_CMD,absMapName);
- DotManager::instance()->addRun(dotRun);
- }
- else if (format==EPS)
- {
- DotRunner *dotRun = new DotRunner(absDotName,d.absPath().data(),FALSE);
- if (usePDFLatex)
- {
- dotRun->addJob("pdf",absPdfName);
- }
- else
- {
- dotRun->addJob("ps",absEpsName);
- }
- DotManager::instance()->addRun(dotRun);
-
- }
- }
- Doxygen::indexList.addImageFile(baseName+"."+imgExt);
-
- if (format==BITMAP && generateImageMap)
- {
- if (imgExt=="svg") // Scalable vector graphics
- {
- out << "<div class=\"center\">";
- if (regenerate || !writeSVGFigureLink(out,relPath,baseName,absImgName)) // need to patch the links in the generated SVG file
- {
- if (regenerate)
- {
- DotManager::instance()->addSVGConversion(absImgName,relPath,FALSE,QCString(),TRUE,graphId);
- }
- int mapId = DotManager::instance()->addSVGObject(fileName,baseName,absImgName,relPath);
- out << "<!-- SVG " << mapId << " -->" << endl;
- }
- out << "</div>" << endl;
- }
- else // bitmap graphics
- {
- out << "<div class=\"center\"><img src=\"" << relPath << baseName << "."
- << imgExt << "\" border=\"0\" usemap=\"#"
- << mapName << "\" alt=\"\"/>";
- out << "</div>" << endl;
-
- QCString absMapName = absBaseName+".map";
- if (regenerate || !insertMapFile(out,absMapName,relPath,mapName))
- {
- int mapId = DotManager::instance()->addMap(fileName,absMapName,relPath,
- FALSE,QCString(),mapName);
- out << "<!-- MAP " << mapId << " -->" << endl;
- }
- }
- }
- else if (format==EPS) // encapsulated postscript
- {
- if (regenerate || !writeVecGfxFigure(out,baseName,absBaseName))
- {
- int figId = DotManager::instance()->addFigure(fileName,baseName,absBaseName,FALSE);
- out << endl << "% FIG " << figId << endl;
- }
- }
- if (!regenerate) removeDotGraph(absDotName);
-
- return baseName;
-}
-
-bool DotInclDepGraph::isTrivial() const
-{
- return m_startNode->m_children==0;
-}
-
-bool DotInclDepGraph::isTooBig() const
-{
- static int maxNodes = Config_getInt("DOT_GRAPH_MAX_NODES");
- int numNodes = m_startNode->m_children ? m_startNode->m_children->count() : 0;
- return numNodes>=maxNodes;
-}
-
-void DotInclDepGraph::writeXML(FTextStream &t)
-{
- QDictIterator<DotNode> dni(*m_usedNodes);
- DotNode *node;
- for (;(node=dni.current());++dni)
- {
- node->writeXML(t,FALSE);
- }
-}
-
-//-------------------------------------------------------------
-
-int DotCallGraph::m_curNodeNumber = 0;
-
-void DotCallGraph::buildGraph(DotNode *n,MemberDef *md,int distance)
-{
- LockingPtr<MemberSDict> refs = m_inverse ? md->getReferencedByMembers() : md->getReferencesMembers();
- if (!refs.isNull())
- {
- MemberSDict::Iterator mri(*refs);
- MemberDef *rmd;
- for (;(rmd=mri.current());++mri)
- {
- if (rmd->isFunction() || rmd->isSlot() || rmd->isSignal())
- {
- QCString uniqueId;
- uniqueId=rmd->getReference()+"$"+
- rmd->getOutputFileBase()+"#"+rmd->anchor();
- DotNode *bn = m_usedNodes->find(uniqueId);
- if (bn) // file is already a node in the graph
- {
- n->addChild(bn,0,0,0);
- bn->addParent(n);
- bn->setDistance(distance);
- }
- else
- {
- QCString name;
- if (Config_getBool("HIDE_SCOPE_NAMES"))
- {
- name = rmd->getOuterScope()==m_scope ?
- rmd->name() : rmd->qualifiedName();
- }
- else
- {
- name = rmd->qualifiedName();
- }
- QCString tooltip = rmd->briefDescriptionAsTooltip();
- bn = new DotNode(
- m_curNodeNumber++,
- linkToText(rmd->getLanguage(),name,FALSE),
- tooltip,
- uniqueId,
- 0 //distance
- );
- n->addChild(bn,0,0,0);
- bn->addParent(n);
- bn->setDistance(distance);
- m_usedNodes->insert(uniqueId,bn);
-
- buildGraph(bn,rmd,distance+1);
- }
- }
- }
- }
-}
-
-void DotCallGraph::determineVisibleNodes(QList<DotNode> &queue, int &maxNodes)
-{
- while (queue.count()>0 && maxNodes>0)
- {
- static int maxDistance = Config_getInt("MAX_DOT_GRAPH_DEPTH");
- DotNode *n = queue.take(0);
- if (!n->isVisible() && n->distance()<maxDistance) // not yet processed
- {
- n->markAsVisible();
- maxNodes--;
- // add direct children
- if (n->m_children)
- {
- QListIterator<DotNode> li(*n->m_children);
- DotNode *dn;
- for (li.toFirst();(dn=li.current());++li)
- {
- queue.append(dn);
- }
- }
- }
- }
-}
-
-void DotCallGraph::determineTruncatedNodes(QList<DotNode> &queue)
-{
- while (queue.count()>0)
- {
- DotNode *n = queue.take(0);
- if (n->isVisible() && n->isTruncated()==DotNode::Unknown)
- {
- bool truncated = FALSE;
- if (n->m_children)
- {
- QListIterator<DotNode> li(*n->m_children);
- DotNode *dn;
- for (li.toFirst();(dn=li.current());++li)
- {
- if (!dn->isVisible())
- truncated = TRUE;
- else
- queue.append(dn);
- }
- }
- n->markAsTruncated(truncated);
- }
- }
-}
-
-
-
-DotCallGraph::DotCallGraph(MemberDef *md,bool inverse)
-{
- m_maxDistance = 0;
- m_inverse = inverse;
- m_diskName = md->getOutputFileBase()+"_"+md->anchor();
- m_scope = md->getOuterScope();
- QCString uniqueId;
- uniqueId = md->getReference()+"$"+
- md->getOutputFileBase()+"#"+md->anchor();
- QCString name;
- if (Config_getBool("HIDE_SCOPE_NAMES"))
- {
- name = md->name();
- }
- else
- {
- name = md->qualifiedName();
- }
- m_startNode = new DotNode(m_curNodeNumber++,
- linkToText(md->getLanguage(),name,FALSE),
- "",
- uniqueId.data(),
- TRUE // root node
- );
- m_startNode->setDistance(0);
- m_usedNodes = new QDict<DotNode>(1009);
- m_usedNodes->insert(uniqueId,m_startNode);
- buildGraph(m_startNode,md,1);
-
- static int nodes = Config_getInt("DOT_GRAPH_MAX_NODES");
- int maxNodes = nodes;
- //int directChildNodes = 1;
- //if (m_startNode->m_children!=0)
- // directChildNodes+=m_startNode->m_children->count();
- //if (directChildNodes>maxNodes) maxNodes=directChildNodes;
- QList<DotNode> openNodeQueue;
- openNodeQueue.append(m_startNode);
- determineVisibleNodes(openNodeQueue,maxNodes);
- openNodeQueue.clear();
- openNodeQueue.append(m_startNode);
- determineTruncatedNodes(openNodeQueue);
-}
-
-DotCallGraph::~DotCallGraph()
-{
- deleteNodes(m_startNode);
- delete m_usedNodes;
-}
-
-QCString DotCallGraph::writeGraph(FTextStream &out, GraphOutputFormat format,
- const char *path,const char *fileName,
- const char *relPath,bool generateImageMap,int
- graphId) const
-{
- QDir d(path);
- // store the original directory
- if (!d.exists())
- {
- err("error: Output dir %s does not exist!\n",path); exit(1);
- }
- static bool usePDFLatex = Config_getBool("USE_PDFLATEX");
-
- QCString baseName = m_diskName + (m_inverse ? "_icgraph" : "_cgraph");
- QCString mapName = baseName;
-
- QCString imgExt = Config_getEnum("DOT_IMAGE_FORMAT");
- QCString absBaseName = QCString(d.absPath())+"/"+baseName;
- QCString absDotName = absBaseName+".dot";
- QCString absMapName = absBaseName+".map";
- QCString absPdfName = absBaseName+".pdf";
- QCString absEpsName = absBaseName+".eps";
- QCString absImgName = absBaseName+"."+imgExt;
-
- bool regenerate=FALSE;
- if (updateDotGraph(m_startNode,
- DotNode::CallGraph,
- absBaseName,
- format,
- TRUE, // lrRank
- FALSE, // renderParents
- m_inverse // backArrows
- ) ||
- !checkDeliverables(format==BITMAP ? absImgName :
- usePDFLatex ? absPdfName : absEpsName,
- format==BITMAP && generateImageMap ? absMapName : QCString())
- )
- {
- regenerate=TRUE;
- if (format==BITMAP)
- {
- // run dot to create a bitmap image
- QCString dotArgs(maxCmdLine);
- DotRunner *dotRun = new DotRunner(absDotName,d.absPath().data(),TRUE,absImgName);
- dotRun->addJob(imgExt,absImgName);
- if (generateImageMap) dotRun->addJob(MAP_CMD,absMapName);
- DotManager::instance()->addRun(dotRun);
-
- }
- else if (format==EPS)
- {
- // run dot to create a .eps image
- DotRunner *dotRun = new DotRunner(absDotName,d.absPath().data(),FALSE);
- if (usePDFLatex)
- {
- dotRun->addJob("pdf",absPdfName);
- }
- else
- {
- dotRun->addJob("ps",absEpsName);
- }
- DotManager::instance()->addRun(dotRun);
-
- }
- }
- Doxygen::indexList.addImageFile(baseName+"."+imgExt);
-
- if (format==BITMAP && generateImageMap)
- {
- if (imgExt=="svg") // Scalable vector graphics
- {
- out << "<div class=\"center\">";
- if (regenerate || !writeSVGFigureLink(out,relPath,baseName,absImgName)) // need to patch the links in the generated SVG file
- {
- if (regenerate)
- {
- DotManager::instance()->addSVGConversion(absImgName,relPath,FALSE,QCString(),TRUE,graphId);
- }
- int mapId = DotManager::instance()->addSVGObject(fileName,baseName,absImgName,relPath);
- out << "<!-- SVG " << mapId << " -->" << endl;
- }
- out << "</div>" << endl;
- }
- else // bitmap graphics
- {
- out << "<div class=\"center\"><img src=\"" << relPath << baseName << "."
- << imgExt << "\" border=\"0\" usemap=\"#"
- << mapName << "\" alt=\"";
- out << "\"/>";
- out << "</div>" << endl;
-
- if (regenerate || !insertMapFile(out,absMapName,relPath,mapName))
- {
- int mapId = DotManager::instance()->addMap(fileName,absMapName,relPath,
- FALSE,QCString(),mapName);
- out << "<!-- MAP " << mapId << " -->" << endl;
- }
- }
- }
- else if (format==EPS) // encapsulated postscript
- {
- if (regenerate || !writeVecGfxFigure(out,baseName,absBaseName))
- {
- int figId = DotManager::instance()->addFigure(fileName,baseName,absBaseName,FALSE);
- out << endl << "% FIG " << figId << endl;
- }
- }
- if (!regenerate) removeDotGraph(absDotName);
-
- return baseName;
-}
-
-bool DotCallGraph::isTrivial() const
-{
- return m_startNode->m_children==0;
-}
-
-bool DotCallGraph::isTooBig() const
-{
- static int maxNodes = Config_getInt("DOT_GRAPH_MAX_NODES");
- int numNodes = m_startNode->m_children ? m_startNode->m_children->count() : 0;
- return numNodes>=maxNodes;
-}
-
-//-------------------------------------------------------------
-
-DotDirDeps::DotDirDeps(DirDef *dir) : m_dir(dir)
-{
-}
-
-DotDirDeps::~DotDirDeps()
-{
-}
-
-QCString DotDirDeps::writeGraph(FTextStream &out,
- GraphOutputFormat format,
- const char *path,
- const char *fileName,
- const char *relPath,
- bool generateImageMap,
- int graphId) const
-{
- QDir d(path);
- // store the original directory
- if (!d.exists())
- {
- err("error: Output dir %s does not exist!\n",path); exit(1);
- }
- static bool usePDFLatex = Config_getBool("USE_PDFLATEX");
-
- QCString baseName=m_dir->getOutputFileBase()+"_dep";
- QCString mapName=escapeCharsInString(baseName,FALSE);
-
- QCString imgExt = Config_getEnum("DOT_IMAGE_FORMAT");
- QCString absBaseName = QCString(d.absPath())+"/"+baseName;
- QCString absDotName = absBaseName+".dot";
- QCString absMapName = absBaseName+".map";
- QCString absPdfName = absBaseName+".pdf";
- QCString absEpsName = absBaseName+".eps";
- QCString absImgName = absBaseName+"."+imgExt;
-
- // compute md5 checksum of the graph were are about to generate
- QGString theGraph;
- FTextStream md5stream(&theGraph);
- m_dir->writeDepGraph(md5stream);
- uchar md5_sig[16];
- QCString sigStr(33);
- MD5Buffer((const unsigned char *)theGraph.data(),theGraph.length(),md5_sig);
- MD5SigToString(md5_sig,sigStr.data(),33);
- bool regenerate=FALSE;
- if (checkAndUpdateMd5Signature(absBaseName,sigStr) ||
- !checkDeliverables(format==BITMAP ? absImgName :
- usePDFLatex ? absPdfName : absEpsName,
- format==BITMAP && generateImageMap ? absMapName : QCString())
- )
- {
- regenerate=TRUE;
-
- QFile f(absDotName);
- if (!f.open(IO_WriteOnly))
- {
- err("Cannot create file %s.dot for writing!\n",baseName.data());
- }
- FTextStream t(&f);
- t << theGraph.data();
- f.close();
-
- if (format==BITMAP)
- {
- // run dot to create a bitmap image
- QCString dotArgs(maxCmdLine);
- DotRunner *dotRun = new DotRunner(absDotName,d.absPath().data(),TRUE,absImgName);
- dotRun->addJob(imgExt,absImgName);
- if (generateImageMap) dotRun->addJob(MAP_CMD,absMapName);
- DotManager::instance()->addRun(dotRun);
- }
- else if (format==EPS)
- {
- DotRunner *dotRun = new DotRunner(absDotName,d.absPath().data(),FALSE);
- if (usePDFLatex)
- {
- dotRun->addJob("pdf",absPdfName);
- }
- else
- {
- dotRun->addJob("ps",absEpsName);
- }
- DotManager::instance()->addRun(dotRun);
- }
- }
- Doxygen::indexList.addImageFile(baseName+"."+imgExt);
-
- if (format==BITMAP && generateImageMap)
- {
- if (imgExt=="svg") // Scalable vector graphics
- {
- out << "<div class=\"center\">";
- if (regenerate || !writeSVGFigureLink(out,relPath,baseName,absImgName)) // need to patch the links in the generated SVG file
- {
- if (regenerate)
- {
- DotManager::instance()->addSVGConversion(absImgName,relPath,FALSE,QCString(),TRUE,graphId);
- }
- int mapId = DotManager::instance()->addSVGObject(fileName,baseName,absImgName,relPath);
- out << "<!-- SVG " << mapId << " -->" << endl;
- }
- out << "</div>" << endl;
- }
- else // bitmap graphics
- {
- out << "<div class=\"center\"><img src=\"" << relPath << baseName << "."
- << imgExt << "\" border=\"0\" usemap=\"#"
- << mapName << "\" alt=\"";
- out << convertToXML(m_dir->displayName());
- out << "\"/>";
- out << "</div>" << endl;
-
- if (regenerate || !insertMapFile(out,absMapName,relPath,mapName))
- {
- int mapId = DotManager::instance()->addMap(fileName,absMapName,relPath,
- TRUE,QCString(),mapName);
- out << "<!-- MAP " << mapId << " -->" << endl;
- }
- }
- }
- else if (format==EPS)
- {
- if (regenerate || !writeVecGfxFigure(out,baseName,absBaseName))
- {
- int figId = DotManager::instance()->addFigure(fileName,baseName,absBaseName,FALSE);
- out << endl << "% FIG " << figId << endl;
- }
- }
- if (!regenerate) removeDotGraph(absDotName);
-
- return baseName;
-}
-
-bool DotDirDeps::isTrivial() const
-{
- return m_dir->depGraphIsTrivial();
-}
-
-//-------------------------------------------------------------
-
-void generateGraphLegend(const char *path)
-{
- QDir d(path);
- // store the original directory
- if (!d.exists())
- {
- err("error: Output dir %s does not exist!\n",path); exit(1);
- }
-
- QGString theGraph;
- FTextStream md5stream(&theGraph);
- writeGraphHeader(md5stream);
- md5stream << " Node9 [shape=\"box\",label=\"Inherited\",fontsize=\"" << FONTSIZE << "\",height=0.2,width=0.4,fontname=\"" << FONTNAME << "\",fillcolor=\"grey75\",style=\"filled\" fontcolor=\"black\"];\n";
- md5stream << " Node10 -> Node9 [dir=\"back\",color=\"midnightblue\",fontsize=\"" << FONTSIZE << "\",style=\"solid\",fontname=\"" << FONTNAME << "\"];\n";
- md5stream << " Node10 [shape=\"box\",label=\"PublicBase\",fontsize=\"" << FONTSIZE << "\",height=0.2,width=0.4,fontname=\"" << FONTNAME << "\",color=\"black\",URL=\"$classPublicBase" << Doxygen::htmlFileExtension << "\"];\n";
- md5stream << " Node11 -> Node10 [dir=\"back\",color=\"midnightblue\",fontsize=\"" << FONTSIZE << "\",style=\"solid\",fontname=\"" << FONTNAME << "\"];\n";
- md5stream << " Node11 [shape=\"box\",label=\"Truncated\",fontsize=\"" << FONTSIZE << "\",height=0.2,width=0.4,fontname=\"" << FONTNAME << "\",color=\"red\",URL=\"$classTruncated" << Doxygen::htmlFileExtension << "\"];\n";
- md5stream << " Node13 -> Node9 [dir=\"back\",color=\"darkgreen\",fontsize=\"" << FONTSIZE << "\",style=\"solid\",fontname=\"" << FONTNAME << "\"];\n";
- md5stream << " Node13 [shape=\"box\",label=\"ProtectedBase\",fontsize=\"" << FONTSIZE << "\",height=0.2,width=0.4,fontname=\"" << FONTNAME << "\",color=\"black\",URL=\"$classProtectedBase" << Doxygen::htmlFileExtension << "\"];\n";
- md5stream << " Node14 -> Node9 [dir=\"back\",color=\"firebrick4\",fontsize=\"" << FONTSIZE << "\",style=\"solid\",fontname=\"" << FONTNAME << "\"];\n";
- md5stream << " Node14 [shape=\"box\",label=\"PrivateBase\",fontsize=\"" << FONTSIZE << "\",height=0.2,width=0.4,fontname=\"" << FONTNAME << "\",color=\"black\",URL=\"$classPrivateBase" << Doxygen::htmlFileExtension << "\"];\n";
- md5stream << " Node15 -> Node9 [dir=\"back\",color=\"midnightblue\",fontsize=\"" << FONTSIZE << "\",style=\"solid\",fontname=\"" << FONTNAME << "\"];\n";
- md5stream << " Node15 [shape=\"box\",label=\"Undocumented\",fontsize=\"" << FONTSIZE << "\",height=0.2,width=0.4,fontname=\"" << FONTNAME << "\",color=\"grey75\"];\n";
- md5stream << " Node16 -> Node9 [dir=\"back\",color=\"midnightblue\",fontsize=\"" << FONTSIZE << "\",style=\"solid\",fontname=\"" << FONTNAME << "\"];\n";
- md5stream << " Node16 [shape=\"box\",label=\"Templ< int >\",fontsize=\"" << FONTSIZE << "\",height=0.2,width=0.4,fontname=\"" << FONTNAME << "\",color=\"black\",URL=\"$classTempl" << Doxygen::htmlFileExtension << "\"];\n";
- md5stream << " Node17 -> Node16 [dir=\"back\",color=\"orange\",fontsize=\"" << FONTSIZE << "\",style=\"dashed\",label=\"< int >\",fontname=\"" << FONTNAME << "\"];\n";
- md5stream << " Node17 [shape=\"box\",label=\"Templ< T >\",fontsize=\"" << FONTSIZE << "\",height=0.2,width=0.4,fontname=\"" << FONTNAME << "\",color=\"black\",URL=\"$classTempl" << Doxygen::htmlFileExtension << "\"];\n";
- md5stream << " Node18 -> Node9 [dir=\"back\",color=\"darkorchid3\",fontsize=\"" << FONTSIZE << "\",style=\"dashed\",label=\"m_usedClass\",fontname=\"" << FONTNAME << "\"];\n";
- md5stream << " Node18 [shape=\"box\",label=\"Used\",fontsize=\"" << FONTSIZE << "\",height=0.2,width=0.4,fontname=\"" << FONTNAME << "\",color=\"black\",URL=\"$classUsed" << Doxygen::htmlFileExtension << "\"];\n";
- writeGraphFooter(md5stream);
- uchar md5_sig[16];
- QCString sigStr(33);
- MD5Buffer((const unsigned char *)theGraph.data(),theGraph.length(),md5_sig);
- MD5SigToString(md5_sig,sigStr.data(),33);
- QCString absBaseName = (QCString)path+"/graph_legend";
- QCString absDotName = absBaseName+".dot";
- QCString imgExt = Config_getEnum("DOT_IMAGE_FORMAT");
- QCString imgName = "graph_legend."+imgExt;
- QCString absImgName = absBaseName+"."+imgExt;
- if (checkAndUpdateMd5Signature(absBaseName,sigStr) ||
- !checkDeliverables(absImgName))
- {
- QFile dotFile(absDotName);
- if (!dotFile.open(IO_WriteOnly))
- {
- err("Could not open file %s for writing\n",
- convertToQCString(dotFile.name()).data());
- return;
- }
-
- FTextStream dotText(&dotFile);
- dotText << theGraph;
- dotFile.close();
-
- // run dot to generate the a bitmap image from the graph
-
- DotRunner *dotRun = new DotRunner(absDotName,d.absPath().data(),TRUE,absImgName);
- dotRun->addJob(imgExt,absImgName);
- DotManager::instance()->addRun(dotRun);
- }
- else
- {
- removeDotGraph(absDotName);
- }
- Doxygen::indexList.addImageFile(imgName);
-
- if (imgExt=="svg")
- {
- DotManager::instance()->addSVGObject(
- absBaseName+Config_getString("HTML_FILE_EXTENSION"),
- "graph_legend",
- absImgName,QCString());
- }
-
-}
-
-void writeDotGraphFromFile(const char *inFile,const char *outDir,
- const char *outFile,GraphOutputFormat format)
-{
- QDir d(outDir);
- if (!d.exists())
- {
- err("error: Output dir %s does not exist!\n",outDir); exit(1);
- }
-
- QCString imgExt = Config_getEnum("DOT_IMAGE_FORMAT");
- QCString imgName = (QCString)outFile+"."+imgExt;
- QCString absImgName = QCString(d.absPath())+"/"+imgName;
- QCString absOutFile = QCString(d.absPath())+"/"+outFile;
-
- DotRunner dotRun(inFile,d.absPath().data(),FALSE,absImgName);
- if (format==BITMAP)
- dotRun.addJob(imgExt,absImgName);
- else // format==EPS
- {
- if (Config_getBool("USE_PDFLATEX"))
- {
- dotRun.addJob("pdf",absOutFile+".pdf");
- }
- else
- {
- dotRun.addJob("ps",absOutFile+".eps");
- }
- }
-
- dotRun.preventCleanUp();
- if (!dotRun.run())
- {
- return;
- }
-
- if (format==BITMAP) checkDotResult(absImgName);
-
- Doxygen::indexList.addImageFile(imgName);
-
-}
-
-
-/*! Writes user defined image map to the output.
- * \param t text stream to write to
- * \param inFile just the basename part of the filename
- * \param outDir output directory
- * \param relPath relative path the to root of the output dir
- * \param baseName the base name of the output files
- * \param context the scope in which this graph is found (for resolving links)
- * \param graphId a unique id for this graph, use for dynamic sections
- */
-void writeDotImageMapFromFile(FTextStream &t,
- const QCString &inFile, const QCString &outDir,
- const QCString &relPath, const QCString &baseName,
- const QCString &context,int graphId)
-{
-
- QDir d(outDir);
- if (!d.exists())
- {
- err("error: Output dir %s does not exist!\n",outDir.data()); exit(1);
- }
-
- QCString mapName = baseName+".map";
- QCString imgExt = Config_getEnum("DOT_IMAGE_FORMAT");
- QCString imgName = baseName+"."+imgExt;
- QCString absOutFile = QCString(d.absPath())+"/"+mapName;
-
- DotRunner dotRun(inFile,d.absPath().data(),FALSE);
- dotRun.addJob(MAP_CMD,absOutFile);
- dotRun.preventCleanUp();
- if (!dotRun.run())
- {
- return;
- }
-
- if (imgExt=="svg") // vector graphics
- {
- //writeSVGFigureLink(t,relPath,inFile,inFile+".svg");
- //DotFilePatcher patcher(inFile+".svg");
- QCString svgName=outDir+"/"+baseName+".svg";
- writeSVGFigureLink(t,relPath,baseName,svgName);
- DotFilePatcher patcher(svgName);
- patcher.addSVGConversion(relPath,TRUE,context,TRUE,graphId);
- patcher.run();
- }
- else // bitmap graphics
- {
- t << "<img src=\"" << relPath << imgName << "\" alt=\""
- << imgName << "\" border=\"0\" usemap=\"#" << mapName << "\"/>" << endl
- << "<map name=\"" << mapName << "\" id=\"" << mapName << "\">";
-
- convertMapFile(t, absOutFile, relPath ,TRUE, context);
-
- t << "</map>" << endl;
- }
- d.remove(absOutFile);
-}
-
-//-------------------------------------------------------------
-
-DotGroupCollaboration::DotGroupCollaboration(GroupDef* gd)
-{
- m_curNodeId = 0;
- QCString tmp_url = gd->getReference()+"$"+gd->getOutputFileBase();
- m_usedNodes = new QDict<DotNode>(1009);
- m_rootNode = new DotNode(m_curNodeId++, gd->groupTitle(), "", tmp_url, TRUE );
- m_rootNode->markAsVisible();
- m_usedNodes->insert(gd->name(), m_rootNode );
- m_edges.setAutoDelete(TRUE);
-
- m_diskName = gd->getOutputFileBase();
-
- buildGraph( gd );
-}
-
-DotGroupCollaboration::~DotGroupCollaboration()
-{
- delete m_usedNodes;
-}
-
-void DotGroupCollaboration::buildGraph(GroupDef* gd)
-{
- QCString tmp_url;
- //===========================
- // hierarchy.
-
- // Write parents
- LockingPtr<GroupList> groups = gd->partOfGroups();
- if ( groups!=0 )
- {
- GroupListIterator gli(*groups);
- GroupDef *d;
- for (gli.toFirst();(d=gli.current());++gli)
- {
- DotNode* nnode = m_usedNodes->find(d->name());
- if ( !nnode )
- { // add node
- tmp_url = d->getReference()+"$"+d->getOutputFileBase();
- QCString tooltip = d->briefDescriptionAsTooltip();
- nnode = new DotNode(m_curNodeId++, d->groupTitle(), tooltip, tmp_url );
- nnode->markAsVisible();
- m_usedNodes->insert(d->name(), nnode );
- }
- tmp_url = "";
- addEdge( nnode, m_rootNode, DotGroupCollaboration::thierarchy, tmp_url, tmp_url );
- }
- }
-
- // Add subgroups
- if ( gd->getSubGroups() && gd->getSubGroups()->count() )
- {
- QListIterator<GroupDef> defli(*gd->getSubGroups());
- GroupDef *def;
- for (;(def=defli.current());++defli)
- {
- DotNode* nnode = m_usedNodes->find(def->name());
- if ( !nnode )
- { // add node
- tmp_url = def->getReference()+"$"+def->getOutputFileBase();
- QCString tooltip = def->briefDescriptionAsTooltip();
- nnode = new DotNode(m_curNodeId++, def->groupTitle(), tooltip, tmp_url );
- nnode->markAsVisible();
- m_usedNodes->insert(def->name(), nnode );
- }
- tmp_url = "";
- addEdge( m_rootNode, nnode, DotGroupCollaboration::thierarchy, tmp_url, tmp_url );
- }
- }
-
- //=======================
- // Write collaboration
-
- // Add members
- addMemberList( gd->getMemberList(MemberList::allMembersList) );
-
- // Add classes
- if ( gd->getClasses() && gd->getClasses()->count() )
- {
- ClassSDict::Iterator defli(*gd->getClasses());
- ClassDef *def;
- for (;(def=defli.current());++defli)
- {
- tmp_url = def->getReference()+"$"+def->getOutputFileBase()+Doxygen::htmlFileExtension;
- if (!def->anchor().isEmpty())
- {
- tmp_url+="#"+def->anchor();
- }
- addCollaborationMember( def, tmp_url, DotGroupCollaboration::tclass );
- }
- }
-
- // Add namespaces
- if ( gd->getNamespaces() && gd->getNamespaces()->count() )
- {
- NamespaceSDict::Iterator defli(*gd->getNamespaces());
- NamespaceDef *def;
- for (;(def=defli.current());++defli)
- {
- tmp_url = def->getReference()+"$"+def->getOutputFileBase()+Doxygen::htmlFileExtension;
- addCollaborationMember( def, tmp_url, DotGroupCollaboration::tnamespace );
- }
- }
-
- // Add files
- if ( gd->getFiles() && gd->getFiles()->count() )
- {
- QListIterator<FileDef> defli(*gd->getFiles());
- FileDef *def;
- for (;(def=defli.current());++defli)
- {
- tmp_url = def->getReference()+"$"+def->getOutputFileBase()+Doxygen::htmlFileExtension;
- addCollaborationMember( def, tmp_url, DotGroupCollaboration::tfile );
- }
- }
-
- // Add pages
- if ( gd->getPages() && gd->getPages()->count() )
- {
- PageSDict::Iterator defli(*gd->getPages());
- PageDef *def;
- for (;(def=defli.current());++defli)
- {
- tmp_url = def->getReference()+"$"+def->getOutputFileBase()+Doxygen::htmlFileExtension;
- addCollaborationMember( def, tmp_url, DotGroupCollaboration::tpages );
- }
- }
-
- // Add directories
- if ( gd->getDirs() && gd->getDirs()->count() )
- {
- QListIterator<DirDef> defli(*gd->getDirs());
- DirDef *def;
- for (;(def=defli.current());++defli)
- {
- tmp_url = def->getReference()+"$"+def->getOutputFileBase()+Doxygen::htmlFileExtension;
- addCollaborationMember( def, tmp_url, DotGroupCollaboration::tdir );
- }
- }
-}
-
-void DotGroupCollaboration::addMemberList( MemberList* ml )
-{
- if ( !( ml && ml->count()) ) return;
- MemberListIterator defli(*ml);
- MemberDef *def;
- for (;(def=defli.current());++defli)
- {
- QCString tmp_url = def->getReference()+"$"+def->getOutputFileBase()+Doxygen::htmlFileExtension
- +"#"+def->anchor();
- addCollaborationMember( def, tmp_url, DotGroupCollaboration::tmember );
- }
-}
-
-DotGroupCollaboration::Edge* DotGroupCollaboration::addEdge(
- DotNode* _pNStart, DotNode* _pNEnd, EdgeType _eType,
- const QCString& _label, const QCString& _url )
-{
- // search a existing link.
- QListIterator<Edge> lli(m_edges);
- Edge* newEdge = 0;
- for ( lli.toFirst(); (newEdge=lli.current()); ++lli)
- {
- if ( newEdge->pNStart==_pNStart &&
- newEdge->pNEnd==_pNEnd &&
- newEdge->eType==_eType
- )
- { // edge already found
- break;
- }
- }
- if ( newEdge==0 ) // new link
- {
- newEdge = new Edge(_pNStart,_pNEnd,_eType);
- m_edges.append( newEdge );
- }
-
- if (!_label.isEmpty())
- {
- newEdge->links.append(new Link(_label,_url));
- }
-
- return newEdge;
-}
-
-void DotGroupCollaboration::addCollaborationMember(
- Definition* def, QCString& url, EdgeType eType )
-{
- // Create group nodes
- if ( !def->partOfGroups() )
- return;
- GroupListIterator gli(*def->partOfGroups());
- GroupDef *d;
- QCString tmp_str;
- for (;(d=gli.current());++gli)
- {
- DotNode* nnode = m_usedNodes->find(d->name());
- if ( nnode != m_rootNode )
- {
- if ( nnode==0 )
- { // add node
- tmp_str = d->getReference()+"$"+d->getOutputFileBase();
- QCString tooltip = d->briefDescriptionAsTooltip();
- nnode = new DotNode(m_curNodeId++, d->groupTitle(), tooltip, tmp_str );
- nnode->markAsVisible();
- m_usedNodes->insert(d->name(), nnode );
- }
- tmp_str = def->qualifiedName();
- addEdge( m_rootNode, nnode, eType, tmp_str, url );
- }
- }
-}
-
-
-QCString DotGroupCollaboration::writeGraph( FTextStream &t, GraphOutputFormat format,
- const char *path, const char *fileName, const char *relPath,
- bool writeImageMap,int graphId) const
-{
- QDir d(path);
- // store the original directory
- if (!d.exists())
- {
- err("error: Output dir %s does not exist!\n",path); exit(1);
- }
- static bool usePDFLatex = Config_getBool("USE_PDFLATEX");
-
- QGString theGraph;
- FTextStream md5stream(&theGraph);
- writeGraphHeader(md5stream);
-
- // clean write flags
- QDictIterator<DotNode> dni(*m_usedNodes);
- DotNode *pn;
- for (dni.toFirst();(pn=dni.current());++dni)
- {
- pn->clearWriteFlag();
- }
-
- // write other nodes.
- for (dni.toFirst();(pn=dni.current());++dni)
- {
- pn->write(md5stream,DotNode::Inheritance,format,TRUE,FALSE,FALSE,FALSE);
- }
-
- // write edges
- QListIterator<Edge> eli(m_edges);
- Edge* edge;
- for (eli.toFirst();(edge=eli.current());++eli)
- {
- edge->write( md5stream );
- }
-
- writeGraphFooter(md5stream);
- resetReNumbering();
- uchar md5_sig[16];
- QCString sigStr(33);
- MD5Buffer((const unsigned char *)theGraph.data(),theGraph.length(),md5_sig);
- MD5SigToString(md5_sig,sigStr.data(),33);
- QCString imgExt = Config_getEnum("DOT_IMAGE_FORMAT");
- QCString baseName = m_diskName;
- QCString imgName = baseName+"."+imgExt;
- QCString mapName = baseName+".map";
- QCString absPath = d.absPath().data();
- QCString absBaseName = absPath+"/"+baseName;
- QCString absDotName = absBaseName+".dot";
- QCString absImgName = absBaseName+"."+imgExt;
- QCString absMapName = absBaseName+".map";
- QCString absPdfName = absBaseName+".pdf";
- QCString absEpsName = absBaseName+".eps";
- bool regenerate=FALSE;
- if (checkAndUpdateMd5Signature(absBaseName,sigStr) ||
- !checkDeliverables(format==BITMAP ? absImgName :
- usePDFLatex ? absPdfName : absEpsName,
- format==BITMAP /*&& generateImageMap*/ ? absMapName : QCString())
- )
- {
- regenerate=TRUE;
-
- QFile dotfile(absDotName);
- if (dotfile.open(IO_WriteOnly))
- {
- FTextStream tdot(&dotfile);
- tdot << theGraph;
- dotfile.close();
- }
-
- if (format==BITMAP) // run dot to create a bitmap image
- {
- QCString dotArgs(maxCmdLine);
-
- DotRunner *dotRun = new DotRunner(absDotName,d.absPath().data(),FALSE);
- dotRun->addJob(imgExt,absImgName);
- if (writeImageMap) dotRun->addJob(MAP_CMD,absMapName);
- DotManager::instance()->addRun(dotRun);
-
- }
- else if (format==EPS)
- {
- DotRunner *dotRun = new DotRunner(absDotName,d.absPath().data(),FALSE);
- if (usePDFLatex)
- {
- dotRun->addJob("pdf",absPdfName);
- }
- else
- {
- dotRun->addJob("ps",absEpsName);
- }
- DotManager::instance()->addRun(dotRun);
- }
-
- }
- if (format==BITMAP && writeImageMap)
- {
- QCString mapLabel = escapeCharsInString(baseName,FALSE);
- t << "<center><table><tr><td>";
-
- if (imgExt=="svg")
- {
- t << "<div class=\"center\">";
- if (regenerate || !writeSVGFigureLink(t,relPath,baseName,absImgName)) // need to patch the links in the generated SVG file
- {
- if (regenerate)
- {
- DotManager::instance()->addSVGConversion(absImgName,relPath,FALSE,QCString(),TRUE,graphId);
- }
- int mapId = DotManager::instance()->addSVGObject(fileName,baseName,absImgName,relPath);
- t << "<!-- SVG " << mapId << " -->" << endl;
- }
- t << "</div>" << endl;
- }
- else
- {
- t << "<img src=\"" << relPath << imgName
- << "\" border=\"0\" alt=\"\" usemap=\"#"
- << mapLabel << "\"/>" << endl;
- if (regenerate || !insertMapFile(t,absMapName,relPath,mapLabel))
- {
- int mapId = DotManager::instance()->addMap(fileName,absMapName,relPath,
- FALSE,QCString(),mapLabel);
- t << "<!-- MAP " << mapId << " -->" << endl;
- }
- }
-
- t << "</td></tr></table></center>" << endl;
- }
- else if (format==EPS)
- {
- if (regenerate || !writeVecGfxFigure(t,baseName,absBaseName))
- {
- int figId = DotManager::instance()->addFigure(fileName,baseName,absBaseName,FALSE);
- t << endl << "% FIG " << figId << endl;
- }
- }
- if (!regenerate) removeDotGraph(absDotName);
-
- return baseName;
-}
-
-void DotGroupCollaboration::Edge::write( FTextStream &t ) const
-{
- const char* linkTypeColor[] = {
- "darkorchid3"
- ,"orange"
- ,"blueviolet"
- ,"darkgreen"
- ,"firebrick4"
- ,"grey75"
- ,"midnightblue"
- };
- QCString arrowStyle = "dir=\"none\", style=\"dashed\"";
- t << " Node" << pNStart->number();
- t << "->";
- t << "Node" << pNEnd->number();
-
- t << " [shape=plaintext";
- if (links.count()>0) // there are links
- {
- t << ", ";
- // HTML-like edge labels crash on my Mac with Graphviz 2.0! and
- // are not supported by older version of dot.
- //
- //t << label=<<TABLE BORDER=\"0\" CELLBORDER=\"0\">";
- //QListIterator<Link> lli(links);
- //Link *link;
- //for( lli.toFirst(); (link=lli.current()); ++lli)
- //{
- // t << "<TR><TD";
- // if ( !link->url.isEmpty() )
- // t << " HREF=\"" << link->url << "\"";
- // t << ">" << link->label << "</TD></TR>";
- //}
- //t << "</TABLE>>";
-
- t << "label=\"";
- QListIterator<Link> lli(links);
- Link *link;
- bool first=TRUE;
- int count=0;
- const int maxLabels = 10;
- for( lli.toFirst(); (link=lli.current()) && count<maxLabels; ++lli,++count)
- {
- if (first) first=FALSE; else t << "\\n";
- t << convertLabel(link->label);
- }
- if (count==maxLabels) t << "\\n...";
- t << "\"";
-
- }
- switch( eType )
- {
- case thierarchy :
- arrowStyle = "dir=\"back\", style=\"solid\"";
- default :
- t << ", color=\"" << linkTypeColor[(int)eType] << "\"";
- break;
- }
- t << ", " << arrowStyle;
- t << "];" << endl;
-}
-
-bool DotGroupCollaboration::isTrivial() const
-{
- return m_usedNodes->count() <= 1;
-}
-
-void DotGroupCollaboration::writeGraphHeader(FTextStream &t) const
-{
- t << "digraph structs" << endl;
- t << "{" << endl;
- if (Config_getBool("DOT_TRANSPARENT"))
- {
- t << " bgcolor=\"transparent\";" << endl;
- }
- t << " edge [fontname=\"" << FONTNAME << "\",fontsize=\"" << FONTSIZE << "\","
- "labelfontname=\"" << FONTNAME << "\",labelfontsize=\"" << FONTSIZE << "\"];\n";
- t << " node [fontname=\"" << FONTNAME << "\",fontsize=\"" << FONTSIZE << "\",shape=record];\n";
- t << " rankdir=LR;\n";
-}
-
-void writeDotDirDepGraph(FTextStream &t,DirDef *dd)
-{
- t << "digraph G {\n";
- if (Config_getBool("DOT_TRANSPARENT"))
- {
- t << " bgcolor=transparent;\n";
- }
- t << " compound=true\n";
- t << " node [ fontsize=\"" << FONTSIZE << "\", fontname=\"" << FONTNAME << "\"];\n";
- t << " edge [ labelfontsize=\"" << FONTSIZE << "\", labelfontname=\"" << FONTNAME << "\"];\n";
-
- QDict<DirDef> dirsInGraph(257);
-
- dirsInGraph.insert(dd->getOutputFileBase(),dd);
- if (dd->parent())
- {
- t << " subgraph cluster" << dd->parent()->getOutputFileBase() << " {\n";
- t << " graph [ bgcolor=\"#ddddee\", pencolor=\"black\", label=\""
- << dd->parent()->shortName()
- << "\" fontname=\"" << FONTNAME << "\", fontsize=\"" << FONTSIZE << "\", URL=\"";
- t << dd->parent()->getOutputFileBase() << Doxygen::htmlFileExtension;
- t << "\"]\n";
- }
- if (dd->isCluster())
- {
- t << " subgraph cluster" << dd->getOutputFileBase() << " {\n";
- t << " graph [ bgcolor=\"#eeeeff\", pencolor=\"black\", label=\"\""
- << " URL=\"" << dd->getOutputFileBase() << Doxygen::htmlFileExtension
- << "\"];\n";
- t << " " << dd->getOutputFileBase() << " [shape=plaintext label=\""
- << dd->shortName() << "\"];\n";
-
- // add nodes for sub directories
- QListIterator<DirDef> sdi(dd->subDirs());
- DirDef *sdir;
- for (sdi.toFirst();(sdir=sdi.current());++sdi)
- {
- t << " " << sdir->getOutputFileBase() << " [shape=box label=\""
- << sdir->shortName() << "\"";
- if (sdir->isCluster())
- {
- t << " color=\"red\"";
- }
- else
- {
- t << " color=\"black\"";
- }
- t << " fillcolor=\"white\" style=\"filled\"";
- t << " URL=\"" << sdir->getOutputFileBase()
- << Doxygen::htmlFileExtension << "\"";
- t << "];\n";
- dirsInGraph.insert(sdir->getOutputFileBase(),sdir);
- }
- t << " }\n";
- }
- else
- {
- t << " " << dd->getOutputFileBase() << " [shape=box, label=\""
- << dd->shortName() << "\", style=\"filled\", fillcolor=\"#eeeeff\","
- << " pencolor=\"black\", URL=\"" << dd->getOutputFileBase()
- << Doxygen::htmlFileExtension << "\"];\n";
- }
- if (dd->parent())
- {
- t << " }\n";
- }
-
- // add nodes for other used directories
- QDictIterator<UsedDir> udi(*dd->usedDirs());
- UsedDir *udir;
- //printf("*** For dir %s\n",shortName().data());
- for (udi.toFirst();(udir=udi.current());++udi)
- // for each used dir (=directly used or a parent of a directly used dir)
- {
- const DirDef *usedDir=udir->dir();
- DirDef *dir=dd;
- while (dir)
- {
- //printf("*** check relation %s->%s same_parent=%d !%s->isParentOf(%s)=%d\n",
- // dir->shortName().data(),usedDir->shortName().data(),
- // dir->parent()==usedDir->parent(),
- // usedDir->shortName().data(),
- // shortName().data(),
- // !usedDir->isParentOf(this)
- // );
- if (dir!=usedDir && dir->parent()==usedDir->parent() &&
- !usedDir->isParentOf(dd))
- // include if both have the same parent (or no parent)
- {
- t << " " << usedDir->getOutputFileBase() << " [shape=box label=\""
- << usedDir->shortName() << "\"";
- if (usedDir->isCluster())
- {
- if (!Config_getBool("DOT_TRANSPARENT"))
- {
- t << " fillcolor=\"white\" style=\"filled\"";
- }
- t << " color=\"red\"";
- }
- t << " URL=\"" << usedDir->getOutputFileBase()
- << Doxygen::htmlFileExtension << "\"];\n";
- dirsInGraph.insert(usedDir->getOutputFileBase(),usedDir);
- break;
- }
- dir=dir->parent();
- }
- }
-
- // add relations between all selected directories
- DirDef *dir;
- QDictIterator<DirDef> di(dirsInGraph);
- for (di.toFirst();(dir=di.current());++di) // foreach dir in the graph
- {
- QDictIterator<UsedDir> udi(*dir->usedDirs());
- UsedDir *udir;
- for (udi.toFirst();(udir=udi.current());++udi) // foreach used dir
- {
- const DirDef *usedDir=udir->dir();
- if ((dir!=dd || !udir->inherited()) && // only show direct dependendies for this dir
- (usedDir!=dd || !udir->inherited()) && // only show direct dependendies for this dir
- !usedDir->isParentOf(dir) && // don't point to own parent
- dirsInGraph.find(usedDir->getOutputFileBase())) // only point to nodes that are in the graph
- {
- QCString relationName;
- relationName.sprintf("dir_%06d_%06d",dir->dirCount(),usedDir->dirCount());
- if (Doxygen::dirRelations.find(relationName)==0)
- {
- // new relation
- Doxygen::dirRelations.append(relationName,
- new DirRelation(relationName,dir,udir));
- }
- int nrefs = udir->filePairs().count();
- t << " " << dir->getOutputFileBase() << "->"
- << usedDir->getOutputFileBase();
- t << " [headlabel=\"" << nrefs << "\", labeldistance=1.5";
- t << " headhref=\"" << relationName << Doxygen::htmlFileExtension
- << "\"];\n";
- }
- }
- }
-
- t << "}\n";
-}
diff --git a/trunk/src/dot.h b/trunk/src/dot.h
deleted file mode 100644
index e4acd5a..0000000
--- a/trunk/src/dot.h
+++ /dev/null
@@ -1,456 +0,0 @@
-/******************************************************************************
- *
- *
- *
- *
- * Copyright (C) 1997-2012 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.
- *
- */
-
-#ifndef _DOT_H
-#define _DOT_H
-
-#include "qtbc.h"
-#include <qlist.h>
-#include <qdict.h>
-#include <qwaitcondition.h>
-#include <qmutex.h>
-#include <qqueue.h>
-#include <qthread.h>
-#include "sortdict.h"
-
-class ClassDef;
-class FileDef;
-class FTextStream;
-class DotNodeList;
-class ClassSDict;
-class MemberDef;
-class Definition;
-class DirDef;
-class GroupDef;
-class DotGroupCollaboration;
-class DotRunnerQueue;
-
-enum GraphOutputFormat { BITMAP , EPS };
-
-/** @brief Attributes of an edge of a dot graph */
-struct EdgeInfo
-{
- enum Colors { Blue=0, Green=1, Red=2, Purple=3, Grey=4, Orange=5 };
- enum Styles { Solid=0, Dashed=1 };
- EdgeInfo() : m_color(0), m_style(0), m_labColor(0) {}
- ~EdgeInfo() {}
- int m_color;
- int m_style;
- QCString m_label;
- QCString m_url;
- int m_labColor;
-};
-
-/** @brief A node in a dot graph */
-class DotNode
-{
- public:
- enum GraphType { Dependency, Inheritance, Collaboration, Hierarchy, CallGraph };
- enum TruncState { Unknown, Truncated, Untruncated };
- DotNode(int n,const char *lab,const char *tip,const char *url,
- bool rootNode=FALSE,ClassDef *cd=0);
- ~DotNode();
- void addChild(DotNode *n,
- int edgeColor=EdgeInfo::Purple,
- int edgeStyle=EdgeInfo::Solid,
- const char *edgeLab=0,
- const char *edgeURL=0,
- int edgeLabCol=-1
- );
- void addParent(DotNode *n);
- void deleteNode(DotNodeList &deletedList,SDict<DotNode> *skipNodes=0);
- void removeChild(DotNode *n);
- void removeParent(DotNode *n);
- int findParent( DotNode *n );
- void write(FTextStream &t,GraphType gt,GraphOutputFormat f,
- bool topDown,bool toChildren,bool backArrows,bool reNumber);
- int m_subgraphId;
- void clearWriteFlag();
- void writeXML(FTextStream &t,bool isClassGraph);
- void writeDEF(FTextStream &t);
- QCString label() const { return m_label; }
- int number() const { return m_number; }
- bool isVisible() const { return m_visible; }
- TruncState isTruncated() const { return m_truncated; }
- int distance() const { return m_distance; }
-
- private:
- void colorConnectedNodes(int curColor);
- void writeBox(FTextStream &t,GraphType gt,GraphOutputFormat f,
- bool hasNonReachableChildren, bool reNumber=FALSE);
- void writeArrow(FTextStream &t,GraphType gt,GraphOutputFormat f,DotNode *cn,
- EdgeInfo *ei,bool topDown, bool pointBack=TRUE, bool reNumber=FALSE);
- void setDistance(int distance);
- const DotNode *findDocNode() const; // only works for acyclic graphs!
- void markAsVisible(bool b=TRUE) { m_visible=b; }
- void markAsTruncated(bool b=TRUE) { m_truncated=b ? Truncated : Untruncated; }
- int m_number;
- QCString m_label; //!< label text
- QCString m_tooltip; //!< node's tooltip
- QCString m_url; //!< url of the node (format: remote$local)
- QList<DotNode> *m_parents; //!< list of parent nodes (incoming arrows)
- QList<DotNode> *m_children; //!< list of child nodes (outgoing arrows)
- QList<EdgeInfo> *m_edgeInfo; //!< edge info for each child
- bool m_deleted; //!< used to mark a node as deleted
- bool m_written; //!< used to mark a node as written
- bool m_hasDoc; //!< used to mark a node as documented
- bool m_isRoot; //!< indicates if this is a root node
- ClassDef * m_classDef; //!< class representing this node (can be 0)
- bool m_visible; //!< is the node visible in the output
- TruncState m_truncated; //!< does the node have non-visible children/parents
- int m_distance; //!< shortest path to the root node
-
- friend class DotGfxHierarchyTable;
- friend class DotClassGraph;
- friend class DotInclDepGraph;
- friend class DotNodeList;
- friend class DotCallGraph;
- friend class DotGroupCollaboration;
-
- friend QCString computeMd5Signature(
- DotNode *root, GraphType gt,
- GraphOutputFormat f,
- bool lrRank, bool renderParents,
- bool backArrows,
- QCString &graphStr
- );
-};
-
-inline int DotNode::findParent( DotNode *n )
-{
- if( !m_parents )
- return -1;
- return m_parents->find(n);
-}
-
-/** @brief Represents a graphical class hierarchy */
-class DotGfxHierarchyTable
-{
- public:
- DotGfxHierarchyTable();
- ~DotGfxHierarchyTable();
- void writeGraph(FTextStream &t,const char *path, const char *fileName) const;
-
- private:
- void addHierarchy(DotNode *n,ClassDef *cd,bool hide);
- void addClassList(ClassSDict *cl);
-
- QList<DotNode> *m_rootNodes;
- QDict<DotNode> *m_usedNodes;
- static int m_curNodeNumber;
- DotNodeList *m_rootSubgraphs;
-};
-
-/** @brief Representation of a class inheritance or dependency graph */
-class DotClassGraph
-{
- public:
- DotClassGraph(ClassDef *cd,DotNode::GraphType t);
- ~DotClassGraph();
- bool isTrivial() const;
- bool isTooBig() const;
- QCString writeGraph(FTextStream &t,GraphOutputFormat f,const char *path,
- const char *fileName, const char *relPath,
- bool TBRank=TRUE,bool imageMap=TRUE,int graphId=-1) const;
-
- void writeXML(FTextStream &t);
- void writeDEF(FTextStream &t);
- QCString diskName() const;
-
- private:
- void buildGraph(ClassDef *cd,DotNode *n,bool base,int distance);
- bool determineVisibleNodes(DotNode *rootNode,int maxNodes,bool includeParents);
- void determineTruncatedNodes(QList<DotNode> &queue,bool includeParents);
- void addClass(ClassDef *cd,DotNode *n,int prot,const char *label,
- const char *usedName,const char *templSpec,
- bool base,int distance);
-
- DotNode * m_startNode;
- QDict<DotNode> * m_usedNodes;
- static int m_curNodeNumber;
- DotNode::GraphType m_graphType;
- QCString m_diskName;
- bool m_lrRank;
-};
-
-/** @brief Representation of an include dependency graph */
-class DotInclDepGraph
-{
- public:
- DotInclDepGraph(FileDef *fd,bool inverse);
- ~DotInclDepGraph();
- QCString writeGraph(FTextStream &t, GraphOutputFormat f,
- const char *path,const char *fileName,const char *relPath,
- bool writeImageMap=TRUE,int graphId=-1) const;
- bool isTrivial() const;
- bool isTooBig() const;
- QCString diskName() const;
- void writeXML(FTextStream &t);
-
- private:
- void buildGraph(DotNode *n,FileDef *fd,int distance);
- void determineVisibleNodes(QList<DotNode> &queue,int &maxNodes);
- void determineTruncatedNodes(QList<DotNode> &queue);
-
- DotNode *m_startNode;
- QDict<DotNode> *m_usedNodes;
- static int m_curNodeNumber;
- QCString m_diskName;
- int m_maxDistance;
- bool m_inverse;
-};
-
-/** @brief Representation of an call graph */
-class DotCallGraph
-{
- public:
- DotCallGraph(MemberDef *md,bool inverse);
- ~DotCallGraph();
- QCString writeGraph(FTextStream &t, GraphOutputFormat f,
- const char *path,const char *fileName,
- const char *relPath,bool writeImageMap=TRUE,
- int graphId=-1) const;
- void buildGraph(DotNode *n,MemberDef *md,int distance);
- bool isTrivial() const;
- bool isTooBig() const;
- void determineVisibleNodes(QList<DotNode> &queue, int &maxNodes);
- void determineTruncatedNodes(QList<DotNode> &queue);
-
- private:
- DotNode *m_startNode;
- static int m_curNodeNumber;
- QDict<DotNode> *m_usedNodes;
- int m_maxDistance;
- int m_recDepth;
- bool m_inverse;
- QCString m_diskName;
- Definition * m_scope;
-};
-
-/** @brief Representation of an directory dependency graph */
-class DotDirDeps
-{
- public:
- DotDirDeps(DirDef *dir);
- ~DotDirDeps();
- bool isTrivial() const;
- QCString writeGraph(FTextStream &out,
- GraphOutputFormat format,
- const char *path,
- const char *fileName,
- const char *relPath,
- bool writeImageMap=TRUE,
- int graphId=-1) const;
- private:
- DirDef *m_dir;
-};
-
-/** @brief Representation of a group collaboration graph */
-class DotGroupCollaboration
-{
- public :
- enum EdgeType
- { tmember = 0,
- tclass,
- tnamespace,
- tfile,
- tpages,
- tdir,
- thierarchy
- };
-
- class Link
- {
- public:
- Link(const QCString lab,const QCString &u) : label(lab), url(u) {}
- QCString label;
- QCString url;
- };
-
- class Edge
- {
- public :
- Edge(DotNode *start,DotNode *end,EdgeType type)
- : pNStart(start), pNEnd(end), eType(type)
- { links.setAutoDelete(TRUE); }
-
- DotNode* pNStart;
- DotNode* pNEnd;
- EdgeType eType;
-
- QList<Link> links;
- void write( FTextStream &t ) const;
- };
-
- DotGroupCollaboration(GroupDef* gd);
- ~DotGroupCollaboration();
- QCString writeGraph(FTextStream &t, GraphOutputFormat format,
- const char *path,const char *fileName,const char *relPath,
- bool writeImageMap=TRUE,int graphId=-1) const;
- void buildGraph(GroupDef* gd);
- bool isTrivial() const;
- private :
- void addCollaborationMember( Definition* def, QCString& url, EdgeType eType );
- void addMemberList( class MemberList* ml );
- void writeGraphHeader(FTextStream &t) const;
- Edge* addEdge( DotNode* _pNStart, DotNode* _pNEnd, EdgeType _eType,
- const QCString& _label, const QCString& _url );
-
- DotNode *m_rootNode;
- int m_curNodeId;
- QDict<DotNode> *m_usedNodes;
- QCString m_diskName;
- QList<Edge> m_edges;
-};
-
-/** @brief Helper class to run dot from doxygen.
- */
-class DotRunner
-{
- public:
- struct CleanupItem
- {
- QCString path;
- QCString file;
- };
-
- /** Creates a runner for a dot \a file. */
- DotRunner(const QCString &file,const QCString &fontPath,bool checkResult,
- const QCString &imageName = QCString());
-
- /** Adds an additional job to the run.
- * Performing multiple jobs one file can be faster.
- */
- void addJob(const char *format,const char *output);
-
- void addPostProcessing(const char *cmd,const char *args);
-
- void preventCleanUp() { m_cleanUp = FALSE; }
-
- /** Runs dot for all jobs added. */
- bool run();
- CleanupItem cleanup() const { return m_cleanupItem; }
-
- private:
- QList<QCString> m_jobs;
- QCString m_postArgs;
- QCString m_postCmd;
- QCString m_file;
- QCString m_path;
- bool m_checkResult;
- QCString m_imageName;
- bool m_cleanUp;
- CleanupItem m_cleanupItem;
-};
-
-/** @brief Helper class to insert a set of map file into an output file */
-class DotFilePatcher
-{
- public:
- struct Map
- {
- QCString mapFile;
- QCString relPath;
- bool urlOnly;
- QCString context;
- QCString label;
- bool zoomable;
- int graphId;
- };
- DotFilePatcher(const char *patchFile);
- int addMap(const QCString &mapFile,const QCString &relPath,
- bool urlOnly,const QCString &context,const QCString &label);
- int addFigure(const QCString &baseName,
- const QCString &figureName,bool heightCheck);
- int addSVGConversion(const QCString &relPath,bool urlOnly,
- const QCString &context,bool zoomable,int graphId);
- int addSVGObject(const QCString &baseName, const QCString &figureName,
- const QCString &relPath);
- bool run();
- QCString file() const;
-
- private:
- QList<Map> m_maps;
- QCString m_patchFile;
-};
-
-class DotRunnerQueue
-{
- public:
- void enqueue(DotRunner *runner);
- DotRunner *dequeue();
- uint count() const;
- private:
- QWaitCondition m_bufferNotEmpty;
- QQueue<DotRunner> m_queue;
- mutable QMutex m_mutex;
-};
-
-class DotWorkerThread : public QThread
-{
- public:
- DotWorkerThread(int id,DotRunnerQueue *queue);
- void run();
- void cleanup();
- private:
- int m_id;
- DotRunnerQueue *m_queue;
- QList<DotRunner::CleanupItem> m_cleanupItems;
-};
-
-/** @brief singleton that manages dot relation actions */
-class DotManager
-{
- public:
- static DotManager *instance();
- void addRun(DotRunner *run);
- int addMap(const QCString &file,const QCString &mapFile,
- const QCString &relPath,bool urlOnly,
- const QCString &context,const QCString &label);
- int addFigure(const QCString &file,const QCString &baseName,
- const QCString &figureName,bool heightCheck);
- int addSVGConversion(const QCString &file,const QCString &relPath,
- bool urlOnly,const QCString &context,bool zoomable,int graphId);
- int addSVGObject(const QCString &file,const QCString &baseName,
- const QCString &figureNAme,const QCString &relPath);
- bool run();
-
- private:
- DotManager();
- virtual ~DotManager();
- QList<DotRunner> m_dotRuns;
- SDict<DotFilePatcher> m_dotMaps;
- static DotManager *m_theInstance;
- DotRunnerQueue *m_queue;
- QList<DotWorkerThread> m_workers;
-};
-
-
-/** Generated a graphs legend page */
-void generateGraphLegend(const char *path);
-
-void writeDotGraphFromFile(const char *inFile,const char *outDir,
- const char *outFile,GraphOutputFormat format);
-void writeDotImageMapFromFile(FTextStream &t,
- const QCString& inFile, const QCString& outDir,
- const QCString& relPath,const QCString& baseName,
- const QCString& context,int graphId=-1);
-
-void writeDotDirDepGraph(FTextStream &t,DirDef *dd);
-
-#endif
diff --git a/trunk/src/doxygen.bst b/trunk/src/doxygen.bst
deleted file mode 100644
index c6ae7a8..0000000
--- a/trunk/src/doxygen.bst
+++ /dev/null
@@ -1,1388 +0,0 @@
- % $Id: html-btxbst.doc 1.5 2010/12/08 19:02:34 dds Exp $
- %
- % This file is either "html-btxbst.doc" or was derived from
- % "html-btxbst.doc" using cpp. "html-btxbst.doc" itself was edited
- % from "btxbst.doc" and "named.bst".
- % The following copyright information is from btxbst.doc:
- % version 0.99b for BibTeX versions 0.99a or later, LaTeX version 2.09.
- % Copyright (C) 1985, all rights reserved.
- % Copying of this file is authorized only if either
- % (1) you make absolutely no changes to your copy, including name, or
- % (2) if you do make changes, you name it something other than
- % btxbst.doc, plain.bst, unsrt.bst, alpha.bst, and abbrv.bst.
- % This restriction helps ensure that all standard styles are identical.
- % The file btxbst.doc has the documentation for this style.
- % "named" style (sorted keys of the form [name, year])
- % Some code for this was taken from "named.bst".
-
-ENTRY
- { address
- author
- booktitle
- chapter
- edition
- editor
- howpublished
- institution
- journal
- key
- month
- note
- number
- organization
- pages
- publisher
- school
- series
- title
- type
- volume
- year
- dvi
- html
- keywords
- pdf
- postscript
- url
- doi
- mailto
- }
- {}
- { label extra.label sort.label }
-
-INTEGERS { output.state before.all mid.sentence after.sentence after.block }
-
-FUNCTION {init.state.consts}
-{ #0 'before.all :=
- #1 'mid.sentence :=
- #2 'after.sentence :=
- #3 'after.block :=
-}
-
-STRINGS { s t }
-
-FUNCTION {output.nonnull}
-{ 's :=
- output.state mid.sentence =
- { ", " * write$ }
- { output.state after.block =
- { add.period$ write$
- newline$
- }
- { output.state before.all =
- 'write$
- { add.period$ " " * write$ }
- if$
- }
- if$
- mid.sentence 'output.state :=
- }
- if$
- s
-}
-
-FUNCTION {output}
-{ duplicate$ empty$
- 'pop$
- 'output.nonnull
- if$
-}
-
-FUNCTION {output.check}
-{ 't :=
- duplicate$ empty$
- { pop$ "empty " t * " in " * cite$ * warning$ }
- 'output.nonnull
- if$
-}
-
-FUNCTION {output.bibitem}
-{ newline$
- author empty$
- { editor empty$
- { organization empty$
- 'skip$
- { "<!-- Authors: " organization purify$ * " -->" * write$ newline$ }
- if$
- }
- { "<!-- Authors: " editor purify$ * " -->" * write$ newline$ }
- if$
- }
- { "<!-- Authors: " author purify$ * " -->" * write$ newline$ }
- if$
- keywords empty$
- 'skip$
- { "<!-- Keywords: " keywords * " -->" * write$ newline$ }
- if$
- "<dt><a name=" quote$ * "CITEREF_" * cite$ * quote$ * ">[" * label * "]</a></dt><dd>" * write$
- ""
- before.all 'output.state :=
-}
-
-FUNCTION {fin.entry}
-{ add.period$
- write$
- postscript empty$
- 'skip$
- { newline$ "<!-- PostScript: " postscript * " -->" * write$ }
- if$
- pdf empty$
- 'skip$
- { newline$ "<!-- PDF: " pdf * " -->" * write$ }
- if$
- dvi empty$
- 'skip$
- { newline$ "<!-- DVI: " dvi * " -->" * write$ }
- if$
- doi empty$
- 'skip$
- { newline$ "<!-- DOI: " doi * " -->" * write$ }
- if$
- "</dd>" write$
- newline$
- newline$
-}
-
-FUNCTION {new.block}
-{ output.state before.all =
- 'skip$
- { after.block 'output.state := }
- if$
-}
-
-FUNCTION {new.sentence}
-{ output.state after.block =
- 'skip$
- { output.state before.all =
- 'skip$
- { after.sentence 'output.state := }
- if$
- }
- if$
-}
-
-FUNCTION {not}
-{ { #0 }
- { #1 }
- if$
-}
-
-FUNCTION {and}
-{ 'skip$
- { pop$ #0 }
- if$
-}
-
-FUNCTION {or}
-{ { pop$ #1 }
- 'skip$
- if$
-}
-
-FUNCTION {str.to.int}
-{
- 's :=
- #0
- { s empty$ not }
- { % Multiply the number on the top of the stack by 10 = 1010 binary
- duplicate$ + % x2
- duplicate$ % x2 x2
- duplicate$ + duplicate$ + % x2 x8
- +
- s #1 #1 substring$ chr.to.int$ #48 - + % #48 is ascii for '0'
- s #2 global.max$ substring$ 's :=
- }
- while$
-}
-
-FUNCTION {new.block.checka}
-{ empty$
- 'skip$
- 'new.block
- if$
-}
-
-FUNCTION {new.block.checkb}
-{ empty$
- swap$ empty$
- and
- 'skip$
- 'new.block
- if$
-}
-
-FUNCTION {new.sentence.checka}
-{ empty$
- 'skip$
- 'new.sentence
- if$
-}
-
-FUNCTION {new.sentence.checkb}
-{ empty$
- swap$ empty$
- and
- 'skip$
- 'new.sentence
- if$
-}
-
-FUNCTION {field.or.null}
-{ duplicate$ empty$
- { pop$ "" }
- 'skip$
- if$
-}
-
-FUNCTION {emphasize}
-{ duplicate$ empty$
- { pop$ "" }
- { "<em>" swap$ * "</em>" * }
- if$
-}
-
-FUNCTION {add.link} % title
-{
- 't :=
- t empty$
- { "" }
- { url empty$
- { html empty$
- { t }
- { "<a href=" quote$ * html * quote$ * ">" * t * "</a>" * }
- if$ }
- { "<a href=" quote$ * url * quote$ * ">" * t * "</a>" * }
- if$
- }
- if$
-}
-
-FUNCTION {add.mailto} % authors
-{
- 't :=
- t empty$
- { "" }
- { mailto empty$
- { t }
- { "<a href=" quote$ * "mailto:" * mailto * quote$ * ">" * t * "</a>" * }
- if$
- }
- if$
-}
-
-INTEGERS { nameptr namesleft numnames }
-
-FUNCTION {format.names}
-{ 's :=
- #1 'nameptr :=
- s num.names$ 'numnames :=
- numnames 'namesleft :=
- { namesleft #0 > }
- { s nameptr "{ff~}{vv~}{ll}{, jj}" format.name$ 't :=
- "\bibxhtmlname{" t * "}" * 't :=
- nameptr #1 >
- { namesleft #1 >
- { ", " * t * }
- { numnames #2 >
- { "," * }
- 'skip$
- if$
- t "others" =
- { " et~al." * }
- { " and " * t * }
- if$
- }
- if$
- }
- 't
- if$
- nameptr #1 + 'nameptr :=
- namesleft #1 - 'namesleft :=
- }
- while$
-}
-
-FUNCTION {format.authors}
-{ author empty$
- { "" }
- { author format.names }
- if$
- add.mailto
-}
-
-FUNCTION {format.editors}
-{ editor empty$
- { "" }
- { editor format.names
- editor num.names$ #1 >
- { ", editors" * }
- { ", editor" * }
- if$
- }
- if$
-}
-
-FUNCTION {format.title}
-{ title empty$
- { "" }
- { title "t" change.case$ }
- if$
- add.link
-}
-
-FUNCTION {n.dashify}
-{ 't :=
- ""
- { t empty$ not }
- { t #1 #1 substring$ "-" =
- { t #1 #2 substring$ "--" = not
- { "--" *
- t #2 global.max$ substring$ 't :=
- }
- { { t #1 #1 substring$ "-" = }
- { "-" *
- t #2 global.max$ substring$ 't :=
- }
- while$
- }
- if$
- }
- { t #1 #1 substring$ *
- t #2 global.max$ substring$ 't :=
- }
- if$
- }
- while$
-}
-
-FUNCTION {format.date}
-{ year empty$
- { month empty$
- { "" }
- { "there's a month but no year in " cite$ * warning$
- month
- }
- if$
- }
- { month empty$
- 'year
- { month " " * year * }
- if$
- }
- if$
-}
-
-FUNCTION {format.btitle}
-{ title emphasize
- add.link
-}
-
-FUNCTION {tie.or.space.connect}
-{ duplicate$ text.length$ #3 <
- { "~" }
- { " " }
- if$
- swap$ * *
-}
-
-FUNCTION {either.or.check}
-{ empty$
- 'pop$
- { "can't use both " swap$ * " fields in " * cite$ * warning$ }
- if$
-}
-
-FUNCTION {format.bvolume}
-{ volume empty$
- { "" }
- { "volume" volume tie.or.space.connect
- series empty$
- 'skip$
- { " of " * series emphasize * }
- if$
- "volume and number" number either.or.check
- }
- if$
-}
-
-FUNCTION {format.number.series}
-{ volume empty$
- { number empty$
- { series field.or.null }
- { output.state mid.sentence =
- { "number" }
- { "Number" }
- if$
- number tie.or.space.connect
- series empty$
- { "there's a number but no series in " cite$ * warning$ }
- { " in " * series * }
- if$
- }
- if$
- }
- { "" }
- if$
-}
-
-FUNCTION {format.edition}
-{ edition empty$
- { "" }
- { output.state mid.sentence =
- { edition "l" change.case$ " edition" * }
- { edition "t" change.case$ " edition" * }
- if$
- }
- if$
-}
-
-INTEGERS { multiresult }
-
-FUNCTION {multi.page.check}
-{ 't :=
- #0 'multiresult :=
- { multiresult not
- t empty$ not
- and
- }
- { t #1 #1 substring$
- duplicate$ "-" =
- swap$ duplicate$ "," =
- swap$ "+" =
- or or
- { #1 'multiresult := }
- { t #2 global.max$ substring$ 't := }
- if$
- }
- while$
- multiresult
-}
-
-FUNCTION {format.pages}
-{ pages empty$
- { "" }
- { pages multi.page.check
- { "pages" pages n.dashify tie.or.space.connect }
- { "page" pages tie.or.space.connect }
- if$
- }
- if$
-}
-
-FUNCTION {format.vol.num.pages}
-{ volume field.or.null
- number empty$
- 'skip$
- { "(" number * ")" * *
- volume empty$
- { "there's a number but no volume in " cite$ * warning$ }
- 'skip$
- if$
- }
- if$
- pages empty$
- 'skip$
- { duplicate$ empty$
- { pop$ format.pages }
- { ":" * pages n.dashify * }
- if$
- }
- if$
-}
-
-FUNCTION {format.chapter.pages}
-{ chapter empty$
- 'format.pages
- { type empty$
- { "chapter" }
- { type "l" change.case$ }
- if$
- chapter tie.or.space.connect
- pages empty$
- 'skip$
- { ", " * format.pages * }
- if$
- }
- if$
-}
-
-FUNCTION {format.in.ed.booktitle}
-{ booktitle empty$
- { "" }
- { editor empty$
- { "In " booktitle emphasize * }
- { "In " format.editors * ", " * booktitle emphasize * }
- if$
- }
- if$
-}
-
-FUNCTION {empty.misc.check}
-{ author empty$ title empty$ howpublished empty$
- month empty$ year empty$ note empty$
- and and and and and
- key empty$ not and
- { "all relevant fields are empty in " cite$ * warning$ }
- 'skip$
- if$
-}
-
-FUNCTION {format.thesis.type}
-{ type empty$
- 'skip$
- { pop$
- type "t" change.case$
- }
- if$
-}
-
-FUNCTION {format.tr.number}
-{ type empty$
- { "Technical Report" }
- 'type
- if$
- number empty$
- { "t" change.case$ }
- { number tie.or.space.connect }
- if$
-}
-
-FUNCTION {format.article.crossref}
-{
- "In <a href=" quote$ * "#" * crossref * quote$ * ">" *
- key empty$
- { journal empty$
- { "need key or journal for " cite$ * " to crossref " * crossref *
- warning$
- ""
- }
- { "<cite>" * journal * "</cite>" * }
- if$
- }
- { key * }
- if$
- "</a> \citelabel{" * crossref * "}" *
-}
-
-FUNCTION {format.crossref.editor}
-{ editor #1 "{vv~}{ll}" format.name$
- editor num.names$ duplicate$
- #2 >
- { pop$ " et~al." * }
- { #2 <
- 'skip$
- { editor #2 "{ff }{vv }{ll}{ jj}" format.name$ "others" =
- { " et~al." * }
- { " and " * editor #2 "{vv~}{ll}" format.name$ * }
- if$
- }
- if$
- }
- if$
-}
-
-FUNCTION {format.book.crossref}
-{ volume empty$
- { "empty volume in " cite$ * "'s crossref of " * crossref * warning$
- "In "
- }
- { "Volume" volume tie.or.space.connect
- " of " *
- }
- if$
- "<a href=" * quote$ * "#" * crossref * quote$ * ">" *
- editor empty$
- editor field.or.null author field.or.null =
- or
- { key empty$
- { series empty$
- { "need editor, key, or series for " cite$ * " to crossref " *
- crossref * warning$
- "" *
- }
- { "<cite>" * series * "</cite>" * }
- if$
- }
- { key * }
- if$
- }
- { format.crossref.editor * }
- if$
- "</a> \citelabel{" * crossref * "}" *
-}
-
-FUNCTION {format.incoll.inproc.crossref}
-{
- "In <a href=" quote$ * "#" * crossref * quote$ * ">" *
- editor empty$
- editor field.or.null author field.or.null =
- or
- { key empty$
- { booktitle empty$
- { "need editor, key, or booktitle for " cite$ * " to crossref " *
- crossref * warning$
- ""
- }
- { "<cite>" * booktitle * "</cite>" * }
- if$
- }
- { key * }
- if$
- }
- { format.crossref.editor * }
- if$
- "</a> \citelabel{" * crossref * "}" *
-}
-
-FUNCTION {article}
-{ output.bibitem
- format.authors "author" output.check
- new.block
- format.title "title" output.check
- new.block
- crossref missing$
- { journal emphasize "journal" output.check
- format.vol.num.pages output
- format.date "year" output.check
- }
- { format.article.crossref output.nonnull
- format.pages output
- }
- if$
- new.block
- note output
- fin.entry
-}
-
-FUNCTION {book}
-{ output.bibitem
- author empty$
- { format.editors "author and editor" output.check }
- { format.authors output.nonnull
- crossref missing$
- { "author and editor" editor either.or.check }
- 'skip$
- if$
- }
- if$
- new.block
- format.btitle "title" output.check
- crossref missing$
- { format.bvolume output
- new.block
- format.number.series output
- new.sentence
- publisher "publisher" output.check
- address output
- }
- { new.block
- format.book.crossref output.nonnull
- }
- if$
- format.edition output
- format.date "year" output.check
- new.block
- note output
- fin.entry
-}
-
-FUNCTION {booklet}
-{ output.bibitem
- format.authors output
- new.block
- format.title "title" output.check
- howpublished address new.block.checkb
- howpublished output
- address output
- format.date output
- new.block
- note output
- fin.entry
-}
-
-FUNCTION {inbook}
-{ output.bibitem
- author empty$
- { format.editors "author and editor" output.check }
- { format.authors output.nonnull
- crossref missing$
- { "author and editor" editor either.or.check }
- 'skip$
- if$
- }
- if$
- new.block
- format.btitle "title" output.check
- crossref missing$
- { format.bvolume output
- format.chapter.pages "chapter and pages" output.check
- new.block
- format.number.series output
- new.sentence
- publisher "publisher" output.check
- address output
- }
- { format.chapter.pages "chapter and pages" output.check
- new.block
- format.book.crossref output.nonnull
- }
- if$
- format.edition output
- format.date "year" output.check
- new.block
- note output
- fin.entry
-}
-
-FUNCTION {incollection}
-{ output.bibitem
- format.authors "author" output.check
- new.block
- format.title "title" output.check
- new.block
- crossref missing$
- { format.in.ed.booktitle "booktitle" output.check
- format.bvolume output
- format.number.series output
- format.chapter.pages output
- new.sentence
- publisher "publisher" output.check
- address output
- format.edition output
- format.date "year" output.check
- }
- { format.incoll.inproc.crossref output.nonnull
- format.chapter.pages output
- }
- if$
- new.block
- note output
- fin.entry
-}
-
-FUNCTION {inproceedings}
-{ output.bibitem
- format.authors "author" output.check
- new.block
- format.title "title" output.check
- new.block
- crossref missing$
- { format.in.ed.booktitle "booktitle" output.check
- format.bvolume output
- format.number.series output
- format.pages output
- address empty$
- { organization publisher new.sentence.checkb
- organization output
- publisher output
- format.date "year" output.check
- }
- { address output.nonnull
- format.date "year" output.check
- new.sentence
- organization output
- publisher output
- }
- if$
- }
- { format.incoll.inproc.crossref output.nonnull
- format.pages output
- }
- if$
- new.block
- note output
- fin.entry
-}
-
-FUNCTION {conference} { inproceedings }
-
-FUNCTION {manual}
-{ output.bibitem
- author empty$
- { organization empty$
- 'skip$
- { organization output.nonnull
- address output
- }
- if$
- }
- { format.authors output.nonnull }
- if$
- new.block
- format.btitle "title" output.check
- author empty$
- { organization empty$
- { address new.block.checka
- address output
- }
- 'skip$
- if$
- }
- { organization address new.block.checkb
- organization output
- address output
- }
- if$
- format.edition output
- format.date output
- new.block
- note output
- fin.entry
-}
-
-FUNCTION {mastersthesis}
-{ output.bibitem
- format.authors "author" output.check
- new.block
- format.title "title" output.check
- new.block
- "Master's thesis" format.thesis.type output.nonnull
- school "school" output.check
- address output
- format.date "year" output.check
- new.block
- note output
- fin.entry
-}
-
-FUNCTION {misc}
-{ output.bibitem
- format.authors output
- title howpublished new.block.checkb
- format.title output
- howpublished new.block.checka
- howpublished output
- format.date output
- new.block
- note output
- fin.entry
- empty.misc.check
-}
-
-FUNCTION {phdthesis}
-{ output.bibitem
- format.authors "author" output.check
- new.block
- format.btitle "title" output.check
- new.block
- "PhD thesis" format.thesis.type output.nonnull
- school "school" output.check
- address output
- format.date "year" output.check
- new.block
- note output
- fin.entry
-}
-
-FUNCTION {proceedings}
-{ output.bibitem
- editor empty$
- { organization output }
- { format.editors output.nonnull }
- if$
- new.block
- format.btitle "title" output.check
- format.bvolume output
- format.number.series output
- address empty$
- { editor empty$
- { publisher new.sentence.checka }
- { organization publisher new.sentence.checkb
- organization output
- }
- if$
- publisher output
- format.date "year" output.check
- }
- { address output.nonnull
- format.date "year" output.check
- new.sentence
- editor empty$
- 'skip$
- { organization output }
- if$
- publisher output
- }
- if$
- new.block
- note output
- fin.entry
-}
-
-FUNCTION {techreport}
-{ output.bibitem
- format.authors "author" output.check
- new.block
- format.title "title" output.check
- new.block
- format.tr.number output.nonnull
- institution "institution" output.check
- address output
- format.date "year" output.check
- new.block
- note output
- fin.entry
-}
-
-FUNCTION {unpublished}
-{ output.bibitem
- format.authors "author" output.check
- new.block
- format.title "title" output.check
- new.block
- note "note" output.check
- format.date output
- fin.entry
-}
-
-FUNCTION {default.type} { misc }
-
-MACRO {jan} {"January"}
-
-MACRO {feb} {"February"}
-
-MACRO {mar} {"March"}
-
-MACRO {apr} {"April"}
-
-MACRO {may} {"May"}
-
-MACRO {jun} {"June"}
-
-MACRO {jul} {"July"}
-
-MACRO {aug} {"August"}
-
-MACRO {sep} {"September"}
-
-MACRO {oct} {"October"}
-
-MACRO {nov} {"November"}
-
-MACRO {dec} {"December"}
-
-MACRO {acmcs} {"ACM Computing Surveys"}
-
-MACRO {acta} {"Acta Informatica"}
-
-MACRO {cacm} {"Communications of the ACM"}
-
-MACRO {ibmjrd} {"IBM Journal of Research and Development"}
-
-MACRO {ibmsj} {"IBM Systems Journal"}
-
-MACRO {ieeese} {"IEEE Transactions on Software Engineering"}
-
-MACRO {ieeetc} {"IEEE Transactions on Computers"}
-
-MACRO {ieeetcad}
- {"IEEE Transactions on Computer-Aided Design of Integrated Circuits"}
-
-MACRO {ipl} {"Information Processing Letters"}
-
-MACRO {jacm} {"Journal of the ACM"}
-
-MACRO {jcss} {"Journal of Computer and System Sciences"}
-
-MACRO {scp} {"Science of Computer Programming"}
-
-MACRO {sicomp} {"SIAM Journal on Computing"}
-
-MACRO {tocs} {"ACM Transactions on Computer Systems"}
-
-MACRO {tods} {"ACM Transactions on Database Systems"}
-
-MACRO {tog} {"ACM Transactions on Graphics"}
-
-MACRO {toms} {"ACM Transactions on Mathematical Software"}
-
-MACRO {toois} {"ACM Transactions on Office Information Systems"}
-
-MACRO {toplas} {"ACM Transactions on Programming Languages and Systems"}
-
-MACRO {tcs} {"Theoretical Computer Science"}
-
-READ
-
-FUNCTION {sortify}
-{ purify$
- "l" change.case$
-}
-
-INTEGERS { len }
-
-FUNCTION {chop.word}
-{ 's :=
- 'len :=
- s #1 len substring$ =
- { s len #1 + global.max$ substring$ }
- 's
- if$
-}
-
-
-FUNCTION {format.lab.names}
-{ 's :=
- s num.names$ 'numnames :=
- numnames #1 =
- { s #1 "{vv }{ll}" format.name$ }
- { numnames #2 =
- { s #1 "{vv }{ll }and " format.name$ s #2 "{vv }{ll}" format.name$ * }
- { s #1 "{vv }{ll }" format.name$ "et~al." * }
- if$
- }
- if$
-}
-
-FUNCTION {author.key.label}
-{ author empty$
- { key empty$
- { cite$ #1 #3 substring$ }
- { key }
- if$
- }
- { author format.lab.names }
- if$
-}
-
-FUNCTION {author.editor.key.label}
-{ author empty$
- { editor empty$
- { key empty$
- { cite$ #1 #3 substring$ }
- { key }
- if$
- }
- { editor format.lab.names }
- if$
- }
- { author format.lab.names }
- if$
-}
-
-FUNCTION {author.key.organization.label}
-{ author empty$
- { key empty$
- { organization empty$
- { cite$ #1 #3 substring$ }
- { "The " #4 organization chop.word #3 text.prefix$ }
- if$
- }
- { key }
- if$
- }
- { author format.lab.names }
- if$
-}
-
-FUNCTION {editor.key.organization.label}
-{ editor empty$
- { key empty$
- { organization empty$
- { cite$ #1 #3 substring$ }
- { "The " #4 organization chop.word #3 text.prefix$ }
- if$
- }
- { key }
- if$
- }
- { editor format.lab.names }
- if$
-}
-
-FUNCTION {month.to.int}
-{
- "l" change.case$ #3 text.prefix$
- 's :=
- s "jan" = { #1 } {
- s "feb" = { #2 } {
- s "mar" = { #3 } {
- s "apr" = { #4 } {
- s "may" = { #5 } {
- s "jun" = { #6 } {
- s "jul" = { #7 } {
- s "aug" = { #8 } {
- s "sep" = { #9 } {
- s "oct" = { #10 } {
- s "nov" = { #11 } {
- s "dec" = { #12 } { #13 } % 13 if nothing matches
- if$}if$}if$}if$}if$}if$}if$}if$}if$}if$}if$}if$
-}
-
-INTEGERS { done c }
-FUNCTION { get.day }
-{ month field.or.null 's :=
-
- % Strip out month name
- #0 'done :=
- { s "" = not done not and }
- { s #1 #1 substring$ " " = 'done :=
- s #2 global.max$ substring$ 's :=
- }
- while$
-
- % Build up first number in t
- "0" 't :=
- #0 'done :=
- { s "" = not done not and }
- { s #1 #1 substring$ chr.to.int$ 'c :=
- c #47 > c #58 < and
- { t c int.to.chr$ * 't := }
- { #1 'done := }
- if$
- s #2 global.max$ substring$ 's :=
- }
- while$
-
- t str.to.int
-}
-
-FUNCTION { sortify.fourdigit }
-{ 's :=
- s empty$
- { "0000" }
- { s
- }
- if$
-}
-
-FUNCTION { sortify.twodigit }
-{ 's :=
- s empty$
- { "00" }
- { s
- str.to.int #10 + int.to.str$
- }
- if$
-}
-
-FUNCTION {calc.label}
-{ type$ "book" =
- type$ "inbook" =
- or
- 'author.editor.key.label
- { type$ "proceedings" =
- 'editor.key.organization.label
- { type$ "manual" =
- 'author.key.organization.label
- 'author.key.label
- if$
- }
- if$
- }
- if$
- duplicate$
-
- year empty$
- 'skip$
- { ", " * }
- if$
- year field.or.null purify$ * % CHANGED - pfps - 15 Feb 1989
- 'label :=
-
- year field.or.null purify$
- #-1 #4 substring$
- sortify.fourdigit
- " " *
- month field.or.null month.to.int int.to.str$ sortify.twodigit *
- " " *
- get.day int.to.str$ sortify.twodigit *
- " " *
- * sortify 'sort.label :=
-}
-
-FUNCTION {sort.format.names}
-{ 's :=
- #1 'nameptr :=
- ""
- s num.names$ 'numnames :=
- numnames 'namesleft :=
- { namesleft #0 > }
- { nameptr #1 >
- { " " * }
- 'skip$
- if$
- s nameptr "{vv{ } }{ll{ }}{ ff{ }}{ jj{ }}" format.name$ 't :=
- nameptr numnames = t "others" = and
- { "et al." * }
- { t sortify * }
- if$
- nameptr #1 + 'nameptr :=
- namesleft #1 - 'namesleft :=
- }
- while$
-}
-
-FUNCTION {sort.format.title}
-{ 't :=
- "A " #2
- "An " #3
- "The " #4 t chop.word
- chop.word
- chop.word
- sortify
- #1 global.max$ substring$
-}
-
-FUNCTION {author.sort}
-{ author empty$
- { key empty$
- { "to sort, need author or key in " cite$ * warning$
- ""
- }
- { key sortify }
- if$
- }
- { author sort.format.names }
- if$
-}
-
-FUNCTION {author.editor.sort}
-{ author empty$
- { editor empty$
- { key empty$
- { "to sort, need author, editor, or key in " cite$ * warning$
- ""
- }
- { key sortify }
- if$
- }
- { editor sort.format.names }
- if$
- }
- { author sort.format.names }
- if$
-}
-
-FUNCTION {author.organization.sort}
-{ author empty$
- { organization empty$
- { key empty$
- { "to sort, need author, organization, or key in " cite$ * warning$
- ""
- }
- { key sortify }
- if$
- }
- { "The " #4 organization chop.word sortify }
- if$
- }
- { author sort.format.names }
- if$
-}
-
-FUNCTION {editor.organization.sort}
-{ editor empty$
- { organization empty$
- { key empty$
- { "to sort, need editor, organization, or key in " cite$ * warning$
- ""
- }
- { key sortify }
- if$
- }
- { "The " #4 organization chop.word sortify }
- if$
- }
- { editor sort.format.names }
- if$
-}
-
-FUNCTION {presort}
-{ calc.label
- sort.label
- " "
- *
- type$ "book" =
- type$ "inbook" =
- or
- 'author.editor.sort
- { type$ "proceedings" =
- 'editor.organization.sort
- { type$ "manual" =
- 'author.organization.sort
- 'author.sort
- if$
- }
- if$
- }
- if$
- *
- " "
- *
- year field.or.null sortify
- *
- " "
- *
- title field.or.null
- sort.format.title
- *
- #1 entry.max$ substring$
- 'sort.key$ :=
-}
-
-ITERATE {presort}
-
-SORT
-
-STRINGS { longest.label last.sort.label next.extra }
-
-INTEGERS { longest.label.width last.extra.num }
-
-FUNCTION {initialize.longest.label}
-{ "" 'longest.label :=
- #0 int.to.chr$ 'last.sort.label :=
- "" 'next.extra :=
- #0 'longest.label.width :=
- #0 'last.extra.num :=
-}
-
-FUNCTION {forward.pass}
-{ last.sort.label sort.label =
- { last.extra.num #1 + 'last.extra.num :=
- last.extra.num int.to.chr$ 'extra.label :=
- }
- { "a" chr.to.int$ 'last.extra.num :=
- "" 'extra.label :=
- sort.label 'last.sort.label :=
- }
- if$
-}
-
-FUNCTION {reverse.pass}
-{ next.extra "b" =
- { "a" 'extra.label := }
- 'skip$
- if$
- label extra.label * 'label :=
- label width$ longest.label.width >
- { label 'longest.label :=
- label width$ 'longest.label.width :=
- }
- 'skip$
- if$
- extra.label 'next.extra :=
-}
-
-EXECUTE {initialize.longest.label}
-
-ITERATE {forward.pass}
-
-REVERSE {reverse.pass}
-
-FUNCTION {begin.bib}
-{
- "# label-style: default" write$ newline$
-}
-
-EXECUTE {begin.bib}
-
-EXECUTE {init.state.consts}
-
-ITERATE {call.type$}
-
-FUNCTION {end.bib}
-{ newline$
-}
-
-EXECUTE {end.bib}
diff --git a/trunk/src/doxygen.cpp b/trunk/src/doxygen.cpp
deleted file mode 100644
index 0759bfe..0000000
--- a/trunk/src/doxygen.cpp
+++ /dev/null
@@ -1,10844 +0,0 @@
-/******************************************************************************
- *
- * Copyright (C) 1997-2012 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.
- *
- */
-
-#include "qtbc.h"
-#include <qfileinfo.h>
-#include <qfile.h>
-#include <qdir.h>
-#include <qdict.h>
-#include <qregexp.h>
-#include <qstrlist.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <sys/stat.h>
-#include <qtextcodec.h>
-#include <unistd.h>
-#include <errno.h>
-#include <qptrdict.h>
-
-#include "version.h"
-#include "doxygen.h"
-#include "scanner.h"
-#include "entry.h"
-#include "index.h"
-#include "logos.h"
-#include "message.h"
-#include "config.h"
-#include "util.h"
-#include "pre.h"
-#include "tagreader.h"
-#include "dot.h"
-#include "msc.h"
-#include "docparser.h"
-#include "dirdef.h"
-#include "outputlist.h"
-#include "declinfo.h"
-#include "htmlgen.h"
-#include "latexgen.h"
-#include "mangen.h"
-#include "language.h"
-#include "debug.h"
-#include "htmlhelp.h"
-#include "qhp.h"
-#include "indexlog.h"
-#include "ftvhelp.h"
-#include "defargs.h"
-#include "rtfgen.h"
-#include "xmlgen.h"
-#include "defgen.h"
-#include "perlmodgen.h"
-#include "reflist.h"
-#include "pagedef.h"
-#include "bufstr.h"
-#include "commentcnv.h"
-#include "cmdmapper.h"
-#include "searchindex.h"
-#include "parserintf.h"
-#include "htags.h"
-#include "pyscanner.h"
-#include "fortranscanner.h"
-#include "dbusxmlscanner.h"
-#include "tclscanner.h"
-#include "code.h"
-#include "objcache.h"
-#include "store.h"
-#include "marshal.h"
-#include "portable.h"
-#include "vhdlscanner.h"
-#include "vhdldocgen.h"
-#include "eclipsehelp.h"
-#include "cite.h"
-#include "filestorage.h"
-#include "markdown.h"
-#include "arguments.h"
-
-#include "layout.h"
-
-#define RECURSE_ENTRYTREE(func,var) \
- do { if (var->children()) { \
- EntryNavListIterator eli(*var->children()); \
- for (;eli.current();++eli) func(eli.current()); \
- } } while(0)
-
-
-#if !defined(_WIN32) || defined(__CYGWIN__)
-#include <signal.h>
-#define HAS_SIGNALS
-#endif
-
-// globally accessible variables
-ClassSDict *Doxygen::classSDict = 0;
-ClassSDict *Doxygen::hiddenClasses = 0;
-NamespaceSDict *Doxygen::namespaceSDict = 0;
-MemberNameSDict *Doxygen::memberNameSDict = 0;
-MemberNameSDict *Doxygen::functionNameSDict = 0;
-FileNameList *Doxygen::inputNameList = 0; // all input files
-FileNameDict *Doxygen::inputNameDict = 0;
-GroupSDict *Doxygen::groupSDict = 0;
-FormulaList Doxygen::formulaList; // all formulas
-FormulaDict Doxygen::formulaDict(1009); // all formulas
-FormulaDict Doxygen::formulaNameDict(1009); // the label name of all formulas
-PageSDict *Doxygen::pageSDict = 0;
-PageSDict *Doxygen::exampleSDict = 0;
-SectionDict Doxygen::sectionDict(257); // all page sections
-CiteDict *Doxygen::citeDict=0; // database of bibliographic references
-StringDict Doxygen::aliasDict(257); // aliases
-FileNameDict *Doxygen::includeNameDict = 0; // include names
-FileNameDict *Doxygen::exampleNameDict = 0; // examples
-FileNameDict *Doxygen::imageNameDict = 0; // images
-FileNameDict *Doxygen::dotFileNameDict = 0; // dot files
-FileNameDict *Doxygen::mscFileNameDict = 0; // dot files
-StringDict Doxygen::namespaceAliasDict(257); // all namespace aliases
-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
-PageDef *Doxygen::mainPage = 0;
-bool Doxygen::insideMainPage = FALSE; // are we generating docs for the main page?
-FTextStream Doxygen::tagFile;
-NamespaceDef *Doxygen::globalScope = 0;
-QDict<RefList> *Doxygen::xrefLists = new QDict<RefList>; // dictionary of cross-referenced item lists
-bool Doxygen::parseSourcesNeeded = FALSE;
-QTime Doxygen::runningTime;
-SearchIndex * Doxygen::searchIndex=0;
-QDict<DefinitionIntf> *Doxygen::symbolMap;
-bool Doxygen::outputToWizard=FALSE;
-QDict<int> * Doxygen::htmlDirMap = 0;
-QCache<LookupInfo> *Doxygen::lookupCache;
-DirSDict *Doxygen::directories;
-SDict<DirRelation> Doxygen::dirRelations(257);
-ParserManager *Doxygen::parserManager = 0;
-QCString Doxygen::htmlFileExtension;
-bool Doxygen::suppressDocWarnings = FALSE;
-ObjCache *Doxygen::symbolCache = 0;
-Store *Doxygen::symbolStorage;
-QCString Doxygen::objDBFileName;
-QCString Doxygen::entryDBFileName;
-bool Doxygen::gatherDefines = TRUE;
-IndexList Doxygen::indexList;
-int Doxygen::subpageNestingLevel = 0;
-bool Doxygen::userComments = FALSE;
-QCString Doxygen::spaces;
-bool Doxygen::generatingXmlOutput = FALSE;
-bool Doxygen::markdownSupport = TRUE;
-
-// locally accessible globals
-static QDict<EntryNav> g_classEntries(1009);
-static StringList g_inputFiles;
-static QDict<void> g_compoundKeywordDict(7); // keywords recognised as compounds
-static OutputList *g_outputList = 0; // list of output generating objects
-static QDict<FileDef> g_usingDeclarations(1009); // used classes
-static FileStorage *g_storage = 0;
-static bool g_successfulRun = FALSE;
-static bool g_dumpSymbolMap = FALSE;
-static bool g_dumpConfigAsXML = FALSE;
-
-void clearAll()
-{
- g_inputFiles.clear();
- //g_excludeNameDict.clear();
- //delete g_outputList; g_outputList=0;
-
- Doxygen::classSDict->clear();
- Doxygen::namespaceSDict->clear();
- Doxygen::pageSDict->clear();
- Doxygen::exampleSDict->clear();
- Doxygen::inputNameList->clear();
- Doxygen::formulaList.clear();
- Doxygen::sectionDict.clear();
- Doxygen::inputNameDict->clear();
- Doxygen::includeNameDict->clear();
- Doxygen::exampleNameDict->clear();
- Doxygen::imageNameDict->clear();
- Doxygen::dotFileNameDict->clear();
- Doxygen::mscFileNameDict->clear();
- Doxygen::formulaDict.clear();
- Doxygen::formulaNameDict.clear();
- Doxygen::tagDestinationDict.clear();
- delete Doxygen::citeDict;
- delete Doxygen::mainPage; Doxygen::mainPage=0;
-}
-
-void statistics()
-{
- fprintf(stderr,"--- inputNameDict stats ----\n");
- Doxygen::inputNameDict->statistics();
- fprintf(stderr,"--- includeNameDict stats ----\n");
- Doxygen::includeNameDict->statistics();
- fprintf(stderr,"--- exampleNameDict stats ----\n");
- Doxygen::exampleNameDict->statistics();
- fprintf(stderr,"--- imageNameDict stats ----\n");
- Doxygen::imageNameDict->statistics();
- fprintf(stderr,"--- dotFileNameDict stats ----\n");
- Doxygen::dotFileNameDict->statistics();
- fprintf(stderr,"--- mscFileNameDict stats ----\n");
- Doxygen::mscFileNameDict->statistics();
- //fprintf(stderr,"--- g_excludeNameDict stats ----\n");
- //g_excludeNameDict.statistics();
- fprintf(stderr,"--- aliasDict stats ----\n");
- Doxygen::aliasDict.statistics();
- fprintf(stderr,"--- typedefDict stats ----\n");
- fprintf(stderr,"--- namespaceAliasDict stats ----\n");
- Doxygen::namespaceAliasDict.statistics();
- fprintf(stderr,"--- formulaDict stats ----\n");
- Doxygen::formulaDict.statistics();
- fprintf(stderr,"--- formulaNameDict stats ----\n");
- Doxygen::formulaNameDict.statistics();
- fprintf(stderr,"--- tagDestinationDict stats ----\n");
- Doxygen::tagDestinationDict.statistics();
- fprintf(stderr,"--- g_compoundKeywordDict stats ----\n");
- g_compoundKeywordDict.statistics();
- fprintf(stderr,"--- expandAsDefinedDict stats ----\n");
- Doxygen::expandAsDefinedDict.statistics();
- fprintf(stderr,"--- memGrpInfoDict stats ----\n");
- Doxygen::memGrpInfoDict.statistics();
-}
-
-
-
-static void addMemberDocs(EntryNav *rootNav,MemberDef *md, const char *funcDecl,
- ArgumentList *al,bool over_load,NamespaceSDict *nl=0);
-static void findMember(EntryNav *rootNav,
- QCString funcDecl,
- bool overloaded,
- bool isFunc
- );
-
-
-struct STLInfo
-{
- const char *className;
- const char *baseClass1;
- const char *baseClass2;
- const char *templType1;
- const char *templName1;
- const char *templType2;
- const char *templName2;
- bool virtualInheritance;
- bool iterators;
-};
-
-static STLInfo g_stlinfo[] =
-{
- // className baseClass1 baseClass2 templType1 templName1 templType2 templName2 virtInheritance // iterators
- { "allocator", 0, 0, "T", "elements", 0, 0, FALSE, FALSE },
- { "auto_ptr", 0, 0, "T", "ptr", 0, 0, FALSE, FALSE }, // deprecated
- { "smart_ptr", 0, 0, "T", "ptr", 0, 0, FALSE, FALSE }, // C++11
- { "unique_ptr", 0, 0, "T", "ptr", 0, 0, FALSE, FALSE }, // C++11
- { "weak_ptr", 0, 0, "T", "ptr", 0, 0, FALSE, FALSE }, // C++11
- { "ios_base", 0, 0, 0, 0, 0, 0, FALSE, FALSE }, // C++11
- { "basic_ios", "ios_base", 0, "Char", 0, 0, 0, FALSE, FALSE },
- { "basic_istream", "basic_ios<Char>", 0, "Char", 0, 0, 0, TRUE, FALSE },
- { "basic_ostream", "basic_ios<Char>", 0, "Char", 0, 0, 0, TRUE, FALSE },
- { "basic_iostream", "basic_istream<Char>", "basic_ostream<Char>", "Char", 0, 0, 0, FALSE, FALSE },
- { "basic_ifstream", "basic_istream<Char>", 0, "Char", 0, 0, 0, FALSE, FALSE },
- { "basic_ofstream", "basic_ostream<Char>", 0, "Char", 0, 0, 0, FALSE, FALSE },
- { "basic_fstream", "basic_iostream<Char>", 0, "Char", 0, 0, 0, FALSE, FALSE },
- { "basic_istringstream", "basic_istream<Char>", 0, "Char", 0, 0, 0, FALSE, FALSE },
- { "basic_ostringstream", "basic_ostream<Char>", 0, "Char", 0, 0, 0, FALSE, FALSE },
- { "basic_stringstream", "basic_iostream<Char>", 0, "Char", 0, 0, 0, FALSE, FALSE },
- { "ios", "basic_ios<char>", 0, 0, 0, 0, 0, FALSE, FALSE },
- { "wios", "basic_ios<wchar_t>", 0, 0, 0, 0, 0, FALSE, FALSE },
- { "istream", "basic_istream<char>", 0, 0, 0, 0, 0, FALSE, FALSE },
- { "wistream", "basic_istream<wchar_t>", 0, 0, 0, 0, 0, FALSE, FALSE },
- { "ostream", "basic_ostream<char>", 0, 0, 0, 0, 0, FALSE, FALSE },
- { "wostream", "basic_ostream<wchar_t>", 0, 0, 0, 0, 0, FALSE, FALSE },
- { "ifstream", "basic_ifstream<char>", 0, 0, 0, 0, 0, FALSE, FALSE },
- { "wifstream", "basic_ifstream<wchar_t>", 0, 0, 0, 0, 0, FALSE, FALSE },
- { "ofstream", "basic_ofstream<char>", 0, 0, 0, 0, 0, FALSE, FALSE },
- { "wofstream", "basic_ofstream<wchar_t>", 0, 0, 0, 0, 0, FALSE, FALSE },
- { "fstream", "basic_fstream<char>", 0, 0, 0, 0, 0, FALSE, FALSE },
- { "wfstream", "basic_fstream<wchar_t>", 0, 0, 0, 0, 0, FALSE, FALSE },
- { "istringstream", "basic_istringstream<char>", 0, 0, 0, 0, 0, FALSE, FALSE },
- { "wistringstream", "basic_istringstream<wchar_t>", 0, 0, 0, 0, 0, FALSE, FALSE },
- { "ostringstream", "basic_ostringstream<char>", 0, 0, 0, 0, 0, FALSE, FALSE },
- { "wostringstream", "basic_ostringstream<wchar_t>", 0, 0, 0, 0, 0, FALSE, FALSE },
- { "stringstream", "basic_stringstream<char>", 0, 0, 0, 0, 0, FALSE, FALSE },
- { "wstringstream", "basic_stringstream<wchar_t>", 0, 0, 0, 0, 0, FALSE, FALSE },
- { "basic_string", 0, 0, "Char", 0, 0, 0, FALSE, TRUE },
- { "string", "basic_string<char>", 0, 0, 0, 0, 0, FALSE, TRUE },
- { "wstring", "basic_string<wchar_t>", 0, 0, 0, 0, 0, FALSE, TRUE },
- { "complex", 0, 0, 0, 0, 0, 0, FALSE, FALSE },
- { "bitset", 0, 0, "Bits", 0, 0, 0, FALSE, FALSE },
- { "deque", 0, 0, "T", "elements", 0, 0, FALSE, TRUE },
- { "list", 0, 0, "T", "elements", 0, 0, FALSE, TRUE },
- { "map", 0, 0, "K", "keys", "T", "elements", FALSE, TRUE },
- { "multimap", 0, 0, "K", "keys", "T", "elements", FALSE, TRUE },
- { "set", 0, 0, "K", "keys", 0, 0, FALSE, TRUE },
- { "multiset", 0, 0, "K", "keys", 0, 0, FALSE, TRUE },
- { "vector", 0, 0, "T", "elements", 0, 0, FALSE, TRUE },
- { "queue", 0, 0, "T", "elements", 0, 0, FALSE, FALSE },
- { "priority_queue", 0, 0, "T", "elements", 0, 0, FALSE, FALSE },
- { "stack", 0, 0, "T", "elements", 0, 0, FALSE, FALSE },
- { "valarray", 0, 0, "T", "elements", 0, 0, FALSE, FALSE },
- { "exception", 0, 0, 0, 0, 0, 0, FALSE, FALSE },
- { "bad_alloc", "exception", 0, 0, 0, 0, 0, FALSE, FALSE },
- { "bad_cast", "exception", 0, 0, 0, 0, 0, FALSE, FALSE },
- { "bad_typeid", "exception", 0, 0, 0, 0, 0, FALSE, FALSE },
- { "logic_error", "exception", 0, 0, 0, 0, 0, FALSE, FALSE },
- { "ios_base::failure", "exception", 0, 0, 0, 0, 0, FALSE, FALSE },
- { "runtime_error", "exception", 0, 0, 0, 0, 0, FALSE, FALSE },
- { "bad_exception", "exception", 0, 0, 0, 0, 0, FALSE, FALSE },
- { "domain_error", "logic_error", 0, 0, 0, 0, 0, FALSE, FALSE },
- { "invalid_argument", "logic_error", 0, 0, 0, 0, 0, FALSE, FALSE },
- { "length_error", "logic_error", 0, 0, 0, 0, 0, FALSE, FALSE },
- { "out_of_range", "logic_error", 0, 0, 0, 0, 0, FALSE, FALSE },
- { "range_error", "runtime_error", 0, 0, 0, 0, 0, FALSE, FALSE },
- { "overflow_error", "runtime_error", 0, 0, 0, 0, 0, FALSE, FALSE },
- { "underflow_error", "runtime_error", 0, 0, 0, 0, 0, FALSE, FALSE },
- { 0, 0, 0, 0, 0, 0, 0, FALSE, FALSE }
-};
-
-static void addSTLMember(EntryNav *rootNav,const char *type,const char *name)
-{
- Entry *memEntry = new Entry;
- memEntry->name = name;
- memEntry->type = type;
- memEntry->protection = Public;
- memEntry->section = Entry::VARIABLE_SEC;
- memEntry->brief = "STL member";
- memEntry->hidden = FALSE;
- memEntry->artificial = TRUE;
- //memEntry->parent = root;
- //root->addSubEntry(memEntry);
- EntryNav *memEntryNav = new EntryNav(rootNav,memEntry);
- memEntryNav->setEntry(memEntry);
- rootNav->addChild(memEntryNav);
-}
-
-static void addSTLIterator(EntryNav *classEntryNav,const char *name)
-{
- Entry *iteratorClassEntry = new Entry;
- iteratorClassEntry->fileName = "[STL]";
- iteratorClassEntry->startLine = 1;
- iteratorClassEntry->name = name;
- iteratorClassEntry->section = Entry::CLASS_SEC;
- iteratorClassEntry->brief = "STL iterator class";
- iteratorClassEntry->hidden = FALSE;
- iteratorClassEntry->artificial= TRUE;
- EntryNav *iteratorClassEntryNav = new EntryNav(classEntryNav,iteratorClassEntry);
- iteratorClassEntryNav->setEntry(iteratorClassEntry);
- classEntryNav->addChild(iteratorClassEntryNav);
-}
-
-
-static void addSTLClasses(EntryNav *rootNav)
-{
- Entry *namespaceEntry = new Entry;
- namespaceEntry->fileName = "[STL]";
- namespaceEntry->startLine = 1;
- //namespaceEntry->parent = rootNav->entry();
- namespaceEntry->name = "std";
- namespaceEntry->section = Entry::NAMESPACE_SEC;
- namespaceEntry->brief = "STL namespace";
- namespaceEntry->hidden = FALSE;
- namespaceEntry->artificial= TRUE;
- //root->addSubEntry(namespaceEntry);
- EntryNav *namespaceEntryNav = new EntryNav(rootNav,namespaceEntry);
- namespaceEntryNav->setEntry(namespaceEntry);
- rootNav->addChild(namespaceEntryNav);
-
- STLInfo *info = g_stlinfo;
- while (info->className)
- {
- //printf("Adding STL class %s\n",info->className);
- QCString fullName = info->className;
- fullName.prepend("std::");
-
- // add fake Entry for the class
- Entry *classEntry = new Entry;
- classEntry->fileName = "[STL]";
- classEntry->startLine = 1;
- classEntry->name = fullName;
- //classEntry->parent = namespaceEntry;
- classEntry->section = Entry::CLASS_SEC;
- classEntry->brief = "STL class";
- classEntry->hidden = FALSE;
- classEntry->artificial= TRUE;
- //namespaceEntry->addSubEntry(classEntry);
- EntryNav *classEntryNav = new EntryNav(namespaceEntryNav,classEntry);
- classEntryNav->setEntry(classEntry);
- namespaceEntryNav->addChild(classEntryNav);
-
- // add template arguments to class
- if (info->templType1)
- {
- ArgumentList *al = new ArgumentList;
- Argument *a=new Argument;
- a->type="typename";
- a->name=info->templType1;
- al->append(a);
- if (info->templType2) // another template argument
- {
- a=new Argument;
- a->type="typename";
- a->name=info->templType2;
- al->append(a);
- }
- classEntry->tArgLists = new QList<ArgumentList>;
- classEntry->tArgLists->setAutoDelete(TRUE);
- classEntry->tArgLists->append(al);
- }
- // add member variables
- if (info->templName1)
- {
- addSTLMember(classEntryNav,info->templType1,info->templName1);
- }
- if (info->templName2)
- {
- addSTLMember(classEntryNav,info->templType2,info->templName2);
- }
- if (fullName=="std::auto_ptr" || fullName=="std::smart_ptr" ||
- fullName=="std::unique_ptr" || fullName=="std::weak_ptr")
- {
- Entry *memEntry = new Entry;
- memEntry->name = "operator->";
- memEntry->args = "()";
- memEntry->type = "T*";
- memEntry->protection = Public;
- memEntry->section = Entry::FUNCTION_SEC;
- memEntry->brief = "STL member";
- memEntry->hidden = FALSE;
- memEntry->artificial = FALSE;
- EntryNav *memEntryNav = new EntryNav(classEntryNav,memEntry);
- memEntryNav->setEntry(memEntry);
- classEntryNav->addChild(memEntryNav);
- }
- if (info->baseClass1)
- {
- classEntry->extends->append(new BaseInfo(info->baseClass1,Public,info->virtualInheritance?Virtual:Normal));
- }
- if (info->baseClass2)
- {
- classEntry->extends->append(new BaseInfo(info->baseClass2,Public,info->virtualInheritance?Virtual:Normal));
- }
- if (info->iterators)
- {
- // add iterator class
- addSTLIterator(classEntryNav,fullName+"::iterator");
- addSTLIterator(classEntryNav,fullName+"::const_iterator");
- addSTLIterator(classEntryNav,fullName+"::reverse_iterator");
- addSTLIterator(classEntryNav,fullName+"::const_reverse_iterator");
- }
- info++;
- }
-}
-
-//----------------------------------------------------------------------------
-
-static Definition *findScopeFromQualifiedName(Definition *startScope,const QCString &n,
- FileDef *fileScope=0);
-
-static void addPageToContext(PageDef *pd,EntryNav *rootNav)
-{
- if (rootNav->parent()) // add the page to it's scope
- {
- QCString scope = rootNav->parent()->name();
- if (rootNav->parent()->section()==Entry::PACKAGEDOC_SEC)
- {
- scope=substitute(scope,".","::");
- }
- scope = stripAnonymousNamespaceScope(scope);
- scope+="::"+pd->name();
- Definition *d = findScopeFromQualifiedName(Doxygen::globalScope,scope);
- if (d)
- {
- pd->setPageScope(d);
- }
- }
-}
-
-static void addRelatedPage(EntryNav *rootNav)
-{
- Entry *root = rootNav->entry();
- GroupDef *gd=0;
- QListIterator<Grouping> gli(*root->groups);
- Grouping *g;
- for (;(g=gli.current());++gli)
- {
- if (!g->groupname.isEmpty() && (gd=Doxygen::groupSDict->find(g->groupname))) break;
- }
- //printf("---> addRelatedPage() %s gd=%p\n",root->name.data(),gd);
- QCString doc;
- if (root->brief.isEmpty())
- {
- doc=root->doc+root->inbodyDocs;
- }
- else
- {
- doc=root->brief+"\n\n"+root->doc+root->inbodyDocs;
- }
- PageDef *pd = addRelatedPage(root->name,root->args,doc,root->anchors,
- root->docFile,root->docLine,
- root->sli,
- gd,rootNav->tagInfo(),
- root->lang
- );
- if (pd)
- {
- pd->addSectionsToDefinition(root->anchors);
- pd->setShowToc(root->stat);
- addPageToContext(pd,rootNav);
- }
-}
-
-static void buildGroupListFiltered(EntryNav *rootNav,bool additional, bool includeExternal)
-{
- if (rootNav->section()==Entry::GROUPDOC_SEC && !rootNav->name().isEmpty() &&
- ((!includeExternal && rootNav->tagInfo()==0) ||
- ( includeExternal && rootNav->tagInfo()!=0))
- )
- {
- rootNav->loadEntry(g_storage);
- Entry *root = rootNav->entry();
-
- if ((root->groupDocType==Entry::GROUPDOC_NORMAL && !additional) ||
- (root->groupDocType!=Entry::GROUPDOC_NORMAL && additional))
- {
- GroupDef *gd = Doxygen::groupSDict->find(root->name);
- //printf("Processing group '%s': add=%d ext=%d gd=%p\n",
- // root->type.data(),additional,includeExternal,gd);
-
- if (gd)
- {
- if ( !gd->hasGroupTitle() )
- {
- gd->setGroupTitle( root->type );
- }
- else if ( root->type.length() > 0 && root->name != root->type && gd->groupTitle() != root->type )
- {
- warn( root->fileName,root->startLine,
- "group %s: ignoring title \"%s\" that does not match old title \"%s\"\n",
- qPrint(root->name), qPrint(root->type), qPrint(gd->groupTitle()) );
- }
- gd->setBriefDescription(root->brief,root->briefFile,root->briefLine);
- gd->setDocumentation( root->doc, root->docFile, root->docLine );
- gd->setInbodyDocumentation( root->inbodyDocs, root->inbodyFile, root->inbodyLine );
- gd->addSectionsToDefinition(root->anchors);
- gd->setRefItems(root->sli);
- gd->setLanguage(root->lang);
- }
- else
- {
- if (rootNav->tagInfo())
- {
- gd = new GroupDef(root->fileName,root->startLine,root->name,root->type,rootNav->tagInfo()->fileName);
- gd->setReference(rootNav->tagInfo()->tagName);
- }
- else
- {
- gd = new GroupDef(root->fileName,root->startLine,root->name,root->type);
- }
- gd->setBriefDescription(root->brief,root->briefFile,root->briefLine);
- gd->setDocumentation(root->doc,root->docFile,root->docLine);
- gd->setInbodyDocumentation( root->inbodyDocs, root->inbodyFile, root->inbodyLine );
- gd->addSectionsToDefinition(root->anchors);
- Doxygen::groupSDict->append(root->name,gd);
- gd->setRefItems(root->sli);
- gd->setLanguage(root->lang);
- }
- }
-
- rootNav->releaseEntry();
- }
- if (rootNav->children())
- {
- EntryNavListIterator eli(*rootNav->children());
- EntryNav *e;
- for (;(e=eli.current());++eli)
- {
- buildGroupListFiltered(e,additional,includeExternal);
- }
- }
-}
-
-static void buildGroupList(EntryNav *rootNav)
-{
- // --- first process only local groups
- // first process the @defgroups blocks
- buildGroupListFiltered(rootNav,FALSE,FALSE);
- // then process the @addtogroup, @weakgroup blocks
- buildGroupListFiltered(rootNav,TRUE,FALSE);
-
- // --- then also process external groups
- // first process the @defgroups blocks
- buildGroupListFiltered(rootNav,FALSE,TRUE);
- // then process the @addtogroup, @weakgroup blocks
- buildGroupListFiltered(rootNav,TRUE,TRUE);
-}
-
-static void findGroupScope(EntryNav *rootNav)
-{
- if (rootNav->section()==Entry::GROUPDOC_SEC && !rootNav->name().isEmpty() &&
- rootNav->parent() && !rootNav->parent()->name().isEmpty())
- {
- GroupDef *gd;
- if ((gd=Doxygen::groupSDict->find(rootNav->name())))
- {
- QCString scope = rootNav->parent()->name();
- if (rootNav->parent()->section()==Entry::PACKAGEDOC_SEC)
- {
- scope=substitute(scope,".","::");
- }
- scope = stripAnonymousNamespaceScope(scope);
- scope+="::"+gd->name();
- Definition *d = findScopeFromQualifiedName(Doxygen::globalScope,scope);
- if (d)
- {
- gd->setGroupScope(d);
- }
- }
- }
- RECURSE_ENTRYTREE(findGroupScope,rootNav);
-}
-
-static void organizeSubGroupsFiltered(EntryNav *rootNav,bool additional)
-{
- if (rootNav->section()==Entry::GROUPDOC_SEC && !rootNav->name().isEmpty())
- {
- rootNav->loadEntry(g_storage);
- Entry *root = rootNav->entry();
-
- if ((root->groupDocType==Entry::GROUPDOC_NORMAL && !additional) ||
- (root->groupDocType!=Entry::GROUPDOC_NORMAL && additional))
- {
- GroupDef *gd;
- if ((gd=Doxygen::groupSDict->find(root->name)))
- {
- //printf("adding %s to group %s\n",root->name.data(),gd->name().data());
- addGroupToGroups(root,gd);
- }
- }
-
- rootNav->releaseEntry();
- }
- if (rootNav->children())
- {
- EntryNavListIterator eli(*rootNav->children());
- EntryNav *e;
- for (;(e=eli.current());++eli)
- {
- organizeSubGroupsFiltered(e,additional);
- }
- }
-}
-
-static void organizeSubGroups(EntryNav *rootNav)
-{
- //printf("Defining groups\n");
- // first process the @defgroups blocks
- organizeSubGroupsFiltered(rootNav,FALSE);
- //printf("Additional groups\n");
- // then process the @addtogroup, @weakgroup blocks
- organizeSubGroupsFiltered(rootNav,TRUE);
-}
-
-//----------------------------------------------------------------------
-
-static void buildFileList(EntryNav *rootNav)
-{
- if (((rootNav->section()==Entry::FILEDOC_SEC) ||
- ((rootNav->section() & Entry::FILE_MASK) && Config_getBool("EXTRACT_ALL"))) &&
- !rootNav->name().isEmpty() && !rootNav->tagInfo() // skip any file coming from tag files
- )
- {
- rootNav->loadEntry(g_storage);
- Entry *root = rootNav->entry();
-
- bool ambig;
- FileDef *fd=findFileDef(Doxygen::inputNameDict,root->name,ambig);
- //printf("**************** root->name=%s fd=%p\n",root->name.data(),fd);
- if (fd && !ambig)
- {
-#if 0
- if ((!root->doc.isEmpty() && !fd->documentation().isEmpty()) ||
- (!root->brief.isEmpty() && !fd->briefDescription().isEmpty()))
- {
- warn(
- root->fileName,root->startLine,
- "warning: file %s already documented. "
- "Skipping documentation.",
- root->name.data()
- );
- }
- else
-#endif
- {
- //printf("Adding documentation!\n");
- // using FALSE in setDocumentation is small hack to make sure a file
- // is documented even if a \file command is used without further
- // documentation
- fd->setDocumentation(root->doc,root->docFile,root->docLine,FALSE);
- fd->setBriefDescription(root->brief,root->briefFile,root->briefLine);
- fd->addSectionsToDefinition(root->anchors);
- fd->setRefItems(root->sli);
- QListIterator<Grouping> gli(*root->groups);
- Grouping *g;
- for (;(g=gli.current());++gli)
- {
- GroupDef *gd=0;
- if (!g->groupname.isEmpty() && (gd=Doxygen::groupSDict->find(g->groupname)))
- {
- gd->addFile(fd);
- fd->makePartOfGroup(gd);
- //printf("File %s: in group %s\n",fd->name().data(),s->data());
- }
- }
- }
- }
- else
- {
- const char *fn = root->fileName.data();
- QCString text(4096);
- text.sprintf("warning: the name `%s' supplied as "
- "the second argument in the \\file statement ",
- qPrint(root->name));
- if (ambig) // name is ambiguous
- {
- text+="matches the following input files:\n";
- text+=showFileDefMatches(Doxygen::inputNameDict,root->name);
- text+="Please use a more specific name by "
- "including a (larger) part of the path!";
- }
- else // name is not an input file
- {
- text+="is not an input file";
- }
- warn(fn,root->startLine,text);
- }
-
- rootNav->releaseEntry();
- }
- RECURSE_ENTRYTREE(buildFileList,rootNav);
-}
-
-static void addIncludeFile(ClassDef *cd,FileDef *ifd,Entry *root)
-{
- if (
- (!root->doc.stripWhiteSpace().isEmpty() ||
- !root->brief.stripWhiteSpace().isEmpty() ||
- Config_getBool("EXTRACT_ALL")
- ) && root->protection!=Private
- )
- {
- //printf(">>>>>> includeFile=%s\n",root->includeFile.data());
-
- bool local=Config_getBool("FORCE_LOCAL_INCLUDES");
- QCString includeFile = root->includeFile;
- if (!includeFile.isEmpty() && includeFile.at(0)=='"')
- {
- local = TRUE;
- includeFile=includeFile.mid(1,includeFile.length()-2);
- }
- else if (!includeFile.isEmpty() && includeFile.at(0)=='<')
- {
- local = FALSE;
- includeFile=includeFile.mid(1,includeFile.length()-2);
- }
-
- bool ambig;
- FileDef *fd=0;
- // see if we need to include a verbatim copy of the header file
- //printf("root->includeFile=%s\n",root->includeFile.data());
- if (!includeFile.isEmpty() &&
- (fd=findFileDef(Doxygen::inputNameDict,includeFile,ambig))==0
- )
- { // explicit request
- QCString text;
- text.sprintf("warning: the name `%s' supplied as "
- "the argument of the \\class, \\struct, \\union, or \\include command ",
- qPrint(includeFile)
- );
- if (ambig) // name is ambiguous
- {
- text+="matches the following input files:\n";
- text+=showFileDefMatches(Doxygen::inputNameDict,root->includeFile);
- text+="Please use a more specific name by "
- "including a (larger) part of the path!";
- }
- else // name is not an input file
- {
- text+="is not an input file";
- }
- warn(root->fileName,root->startLine,text);
- }
- else if (includeFile.isEmpty() && ifd &&
- // see if the file extension makes sense
- guessSection(ifd->name())==Entry::HEADER_SEC)
- { // implicit assumption
- fd=ifd;
- }
-
- // if a file is found, we mark it as a source file.
- if (fd)
- {
- QCString iName = !root->includeName.isEmpty() ?
- root->includeName : includeFile;
- if (!iName.isEmpty()) // user specified include file
- {
- if (iName.at(0)=='<') local=FALSE; // explicit override
- if (iName.at(0)=='"' || iName.at(0)=='<')
- {
- iName=iName.mid(1,iName.length()-2); // strip quotes or brackets
- }
- if (iName.isEmpty())
- {
- iName=fd->name();
- }
- }
- else if (!Config_getList("STRIP_FROM_INC_PATH").isEmpty())
- {
- iName=stripFromIncludePath(fd->absFilePath());
- }
- else // use name of the file containing the class definition
- {
- iName=fd->name();
- }
- if (fd->generateSourceFile()) // generate code for header
- {
- cd->setIncludeFile(fd,iName,local,!root->includeName.isEmpty());
- }
- else // put #include in the class documentation without link
- {
- cd->setIncludeFile(0,iName,local,TRUE);
- }
- }
- }
-}
-
-#if 0
-static bool addNamespace(Entry *root,ClassDef *cd)
-{
- // see if this class is defined inside a namespace
- if (root->section & Entry::COMPOUND_MASK)
- {
- Entry *e = root->parent;
- while (e)
- {
- if (e->section==Entry::NAMESPACE_SEC)
- {
- NamespaceDef *nd=0;
- QCString nsName = stripAnonymousNamespaceScope(e->name);
- //printf("addNameSpace() trying: %s\n",nsName.data());
- if (!nsName.isEmpty() && nsName.at(0)!='@' &&
- (nd=getResolvedNamespace(nsName))
- )
- {
- cd->setNamespace(nd);
- cd->setOuterScope(nd);
- nd->insertClass(cd);
- return TRUE;
- }
- }
- e=e->parent;
- }
- }
- return FALSE;
-}
-#endif
-
-#if 0
-static Definition *findScope(Entry *root,int level=0)
-{
- if (root==0) return 0;
- //printf("start findScope name=%s\n",root->name.data());
- Definition *result=0;
- if (root->section&Entry::SCOPE_MASK)
- {
- result = findScope(root->parent,level+1); // traverse to the root of the tree
- if (result)
- {
- //printf("Found %s inside %s at level %d\n",root->name.data(),result->name().data(),level);
- // TODO: look at template arguments
- result = result->findInnerCompound(root->name);
- }
- else // reached the global scope
- {
- // TODO: look at template arguments
- result = Doxygen::globalScope->findInnerCompound(root->name);
- //printf("Found in globalScope %s at level %d\n",result->name().data(),level);
- }
- }
- //printf("end findScope(%s,%d)=%s\n",root->name.data(),
- // level,result==0 ? "<none>" : result->name().data());
- return result;
-}
-#endif
-
-/*! returns the Definition object belonging to the first \a level levels of
- * full qualified name \a name. Creates an artificial scope if the scope is
- * not found and set the parent/child scope relation if the scope is found.
- */
-static Definition *buildScopeFromQualifiedName(const QCString name,int level,SrcLangExt lang)
-{
- int i=0;
- int p=0,l;
- Definition *prevScope=Doxygen::globalScope;
- QCString fullScope;
- while (i<level)
- {
- int idx=getScopeFragment(name,p,&l);
- QCString nsName = name.mid(idx,l);
- if (nsName.isEmpty()) return prevScope;
- if (!fullScope.isEmpty()) fullScope+="::";
- fullScope+=nsName;
- NamespaceDef *nd=Doxygen::namespaceSDict->find(fullScope);
- Definition *innerScope = nd;
- ClassDef *cd=0;
- if (nd==0) cd = getClass(fullScope);
- if (nd==0 && cd) // scope is a class
- {
- innerScope = cd;
- }
- else if (nd==0 && cd==0) // scope is not known!
- {
- // introduce bogus namespace
- //printf("++ adding dummy namespace %s to %s\n",nsName.data(),prevScope->name().data());
- nd=new NamespaceDef(
- "[generated]",1,fullScope);
- nd->setLanguage(lang);
-
- // add namespace to the list
- Doxygen::namespaceSDict->inSort(fullScope,nd);
- innerScope = nd;
- }
- else // scope is a namespace
- {
- }
- // make the parent/child scope relation
- prevScope->addInnerCompound(innerScope);
- innerScope->setOuterScope(prevScope);
- // proceed to the next scope fragment
- p=idx+l+2;
- prevScope=innerScope;
- i++;
- }
- return prevScope;
-}
-
-static Definition *findScopeFromQualifiedName(Definition *startScope,const QCString &n,
- FileDef *fileScope)
-{
- //printf("<findScopeFromQualifiedName(%s,%s)\n",startScope ? startScope->name().data() : 0, n.data());
- Definition *resultScope=startScope;
- if (resultScope==0) resultScope=Doxygen::globalScope;
- QCString scope=stripTemplateSpecifiersFromScope(n,FALSE);
- int l1=0,i1;
- i1=getScopeFragment(scope,0,&l1);
- if (i1==-1)
- {
- //printf(">no fragments!\n");
- return resultScope;
- }
- int p=i1+l1,l2=0,i2;
- while ((i2=getScopeFragment(scope,p,&l2))!=-1)
- {
- QCString nestedNameSpecifier = scope.mid(i1,l1);
- Definition *orgScope = resultScope;
- //printf(" nestedNameSpecifier=%s\n",nestedNameSpecifier.data());
- resultScope = resultScope->findInnerCompound(nestedNameSpecifier);
- //printf(" resultScope=%p\n",resultScope);
- if (resultScope==0)
- {
- NamespaceSDict *usedNamespaces;
- if (orgScope==Doxygen::globalScope && fileScope &&
- (usedNamespaces = fileScope->getUsedNamespaces()))
- // also search for used namespaces
- {
- NamespaceSDict::Iterator ni(*usedNamespaces);
- NamespaceDef *nd;
- for (ni.toFirst();((nd=ni.current()) && resultScope==0);++ni)
- {
- // restart search within the used namespace
- resultScope = findScopeFromQualifiedName(nd,n,fileScope);
- }
- if (resultScope)
- {
- // for a nested class A::I in used namespace N, we get
- // N::A::I while looking for A, so we should compare
- // resultScope->name() against scope.left(i2+l2)
- //printf(" -> result=%s scope=%s\n",resultScope->name().data(),scope.data());
- if (rightScopeMatch(resultScope->name(),scope.left(i2+l2)))
- {
- break;
- }
- goto nextFragment;
- }
- }
-
- // also search for used classes. Complication: we haven't been able
- // to put them in the right scope yet, because we are still resolving
- // the scope relations!
- // Therefore loop through all used classes and see if there is a right
- // scope match between the used class and nestedNameSpecifier.
- QDictIterator<FileDef> ui(g_usingDeclarations);
- FileDef *usedFd;
- for (ui.toFirst();(usedFd=ui.current());++ui)
- {
- //printf("Checking using class %s\n",ui.currentKey());
- if (rightScopeMatch(ui.currentKey(),nestedNameSpecifier))
- {
- // ui.currentKey() is the fully qualified name of nestedNameSpecifier
- // so use this instead.
- QCString fqn = QCString(ui.currentKey())+
- scope.right(scope.length()-p);
- resultScope = buildScopeFromQualifiedName(fqn,fqn.contains("::"),startScope->getLanguage());
- //printf("Creating scope from fqn=%s result %p\n",fqn.data(),resultScope);
- if (resultScope)
- {
- //printf("> Match! resultScope=%s\n",resultScope->name().data());
- return resultScope;
- }
- }
- }
-
- //printf("> name %s not found in scope %s\n",nestedNameSpecifier.data(),orgScope->name().data());
- return 0;
- }
- nextFragment:
- i1=i2;
- l1=l2;
- p=i2+l2;
- }
- //printf(">findScopeFromQualifiedName scope %s\n",resultScope->name().data());
- return resultScope;
-}
-
-ArgumentList *getTemplateArgumentsFromName(
- const QCString &name,
- const QList<ArgumentList> *tArgLists)
-{
- if (tArgLists==0) return 0;
-
- QListIterator<ArgumentList> ali(*tArgLists);
- // for each scope fragment, check if it is a template and advance through
- // the list if so.
- int i,p=0;
- while ((i=name.find("::",p))!=-1)
- {
- NamespaceDef *nd = Doxygen::namespaceSDict->find(name.left(i));
- if (nd==0)
- {
- ClassDef *cd = getClass(name.left(i));
- if (cd)
- {
- if (cd->templateArguments())
- {
- ++ali;
- }
- }
- }
- p=i+2;
- }
- return ali.current();
-}
-
-static ClassDef::CompoundType convertToCompoundType(int section,int specifier)
-{
- ClassDef::CompoundType sec=ClassDef::Class;
- if (specifier&Entry::Struct)
- sec=ClassDef::Struct;
- else if (specifier&Entry::Union)
- sec=ClassDef::Union;
- else if (specifier&Entry::Interface)
- sec=ClassDef::Interface;
- else if (specifier&Entry::Protocol)
- sec=ClassDef::Protocol;
- else if (specifier&Entry::Category)
- sec=ClassDef::Category;
- else if (specifier&Entry::Exception)
- sec=ClassDef::Exception;
-
- switch(section)
- {
- //case Entry::UNION_SEC:
- case Entry::UNIONDOC_SEC:
- sec=ClassDef::Union;
- break;
- //case Entry::STRUCT_SEC:
- case Entry::STRUCTDOC_SEC:
- sec=ClassDef::Struct;
- break;
- //case Entry::INTERFACE_SEC:
- case Entry::INTERFACEDOC_SEC:
- sec=ClassDef::Interface;
- break;
- //case Entry::PROTOCOL_SEC:
- case Entry::PROTOCOLDOC_SEC:
- sec=ClassDef::Protocol;
- break;
- //case Entry::CATEGORY_SEC:
- case Entry::CATEGORYDOC_SEC:
- sec=ClassDef::Category;
- break;
- //case Entry::EXCEPTION_SEC:
- case Entry::EXCEPTIONDOC_SEC:
- sec=ClassDef::Exception;
- break;
- }
- return sec;
-}
-
-
-static void addClassToContext(EntryNav *rootNav)
-{
- //printf("Loading entry for rootNav=%p name=%s\n",rootNav,rootNav->name().data());
- rootNav->loadEntry(g_storage);
- Entry *root = rootNav->entry();
-
- //NamespaceDef *nd = 0;
- FileDef *fd = rootNav->fileDef();
-
- QCString scName;
- if (rootNav->parent()->section()&Entry::SCOPE_MASK)
- {
- scName=rootNav->parent()->name();
- }
- // name without parent's scope
- QCString fullName = root->name;
-
- // strip off any template parameters (but not those for specializations)
- fullName=stripTemplateSpecifiersFromScope(fullName);
-
- // name with scope (if not present already)
- QCString qualifiedName = fullName;
- if (!scName.isEmpty() && !leftScopeMatch(fullName,scName))
- {
- qualifiedName.prepend(scName+"::");
- }
-
- // see if we already found the class before
- ClassDef *cd = getClass(qualifiedName);
-
- Debug::print(Debug::Classes,0, " Found class with name %s (qualifiedName=%s -> cd=%p)\n",
- cd ? cd->name().data() : root->name.data(), qualifiedName.data(),cd);
-
- if (cd)
- {
- fullName=cd->name();
- Debug::print(Debug::Classes,0," Existing class %s!\n",cd->name().data());
- //if (cd->templateArguments()==0)
- //{
- // //printf("existing ClassDef tempArgList=%p specScope=%s\n",root->tArgList,root->scopeSpec.data());
- // cd->setTemplateArguments(tArgList);
- //}
-
- cd->setDocumentation(root->doc,root->docFile,root->docLine);
- cd->setBriefDescription(root->brief,root->briefFile,root->briefLine);
-
- if (root->bodyLine!=-1 && cd->getStartBodyLine()==-1)
- {
- cd->setBodySegment(root->bodyLine,root->endBodyLine);
- cd->setBodyDef(fd);
- }
- //cd->setName(fullName); // change name to match docs
-
- if (cd->templateArguments()==0)
- {
- // this happens if a template class declared with @class is found
- // before the actual definition.
- ArgumentList *tArgList =
- getTemplateArgumentsFromName(cd->name(),root->tArgLists);
- cd->setTemplateArguments(tArgList);
- }
-
- cd->setCompoundType(convertToCompoundType(root->section,root->spec));
- }
- else // new class
- {
- ClassDef::CompoundType sec = convertToCompoundType(root->section,root->spec);
-
- QCString className;
- QCString namespaceName;
- extractNamespaceName(fullName,className,namespaceName);
-
- //printf("New class: fullname %s namespace `%s' name=`%s' brief=`%s' docs=`%s'\n",
- // fullName.data(),namespaceName.data(),className.data(),root->brief.data(),root->doc.data());
-
- QCString tagName;
- QCString refFileName;
- if (rootNav->tagInfo())
- {
- tagName = rootNav->tagInfo()->tagName;
- refFileName = rootNav->tagInfo()->fileName;
- }
- cd=new ClassDef(root->fileName,root->startLine,fullName,sec,
- tagName,refFileName,TRUE,root->spec&Entry::Enum);
- Debug::print(Debug::Classes,0," New class `%s' (sec=0x%08x)! #tArgLists=%d\n",
- fullName.data(),root->section,root->tArgLists ? (int)root->tArgLists->count() : -1);
- cd->setDocumentation(root->doc,root->docFile,root->docLine); // copy docs to definition
- cd->setBriefDescription(root->brief,root->briefFile,root->briefLine);
- cd->setLanguage(root->lang);
- cd->setHidden(root->hidden);
- cd->setArtificial(root->artificial);
- cd->setTypeConstraints(root->typeConstr);
- //printf("new ClassDef %s tempArgList=%p specScope=%s\n",fullName.data(),root->tArgList,root->scopeSpec.data());
-
- ArgumentList *tArgList =
- getTemplateArgumentsFromName(fullName,root->tArgLists);
- //printf("class %s template args=%s\n",fullName.data(),
- // tArgList ? tempArgListToString(tArgList).data() : "<none>");
- cd->setTemplateArguments(tArgList);
- cd->setProtection(root->protection);
- cd->setIsStatic(root->stat);
-
- // file definition containing the class cd
- cd->setBodySegment(root->bodyLine,root->endBodyLine);
- cd->setBodyDef(fd);
-
- // see if the class is found inside a namespace
- //bool found=addNamespace(root,cd);
-
- // the empty string test is needed for extract all case
- cd->setBriefDescription(root->brief,root->briefFile,root->briefLine);
- cd->insertUsedFile(root->fileName);
-
- // add class to the list
- //printf("ClassDict.insert(%s)\n",resolveDefines(fullName).data());
- Doxygen::classSDict->append(fullName,cd);
-
- }
-
- cd->addSectionsToDefinition(root->anchors);
- if (!root->subGrouping) cd->setSubGrouping(FALSE);
- if (cd->hasDocumentation())
- {
- addIncludeFile(cd,fd,root);
- }
- if (fd && (root->section & Entry::COMPOUND_MASK))
- {
- //printf(">> Inserting class `%s' in file `%s' (root->fileName=`%s')\n",
- // cd->name().data(),
- // fd->name().data(),
- // root->fileName.data()
- // );
- cd->setFileDef(fd);
- fd->insertClass(cd);
- }
- addClassToGroups(root,cd);
- cd->setRefItems(root->sli);
-
- rootNav->releaseEntry();
-}
-
-//----------------------------------------------------------------------
-// build a list of all classes mentioned in the documentation
-// and all classes that have a documentation block before their definition.
-static void buildClassList(EntryNav *rootNav)
-{
- if (
- ((rootNav->section() & Entry::COMPOUND_MASK) ||
- rootNav->section()==Entry::OBJCIMPL_SEC) && !rootNav->name().isEmpty()
- )
- {
- addClassToContext(rootNav);
- }
- RECURSE_ENTRYTREE(buildClassList,rootNav);
-}
-
-static void buildClassDocList(EntryNav *rootNav)
-{
- if (
- (rootNav->section() & Entry::COMPOUNDDOC_MASK) && !rootNav->name().isEmpty()
- )
- {
- addClassToContext(rootNav);
- }
- RECURSE_ENTRYTREE(buildClassDocList,rootNav);
-}
-
-static void resolveClassNestingRelations()
-{
- ClassSDict::Iterator cli(*Doxygen::classSDict);
- for (cli.toFirst();cli.current();++cli) cli.current()->visited=FALSE;
-
- bool done=FALSE;
- int iteration=0;
- while (!done)
- {
- done=TRUE;
- ++iteration;
- ClassDef *cd=0;
- for (cli.toFirst();(cd=cli.current());++cli)
- {
- if (!cd->visited)
- {
- QCString name = stripAnonymousNamespaceScope(cd->name());
- //printf("processing=%s, iteration=%d\n",cd->name().data(),iteration);
- // also add class to the correct structural context
- Definition *d = findScopeFromQualifiedName(Doxygen::globalScope,
- name,cd->getFileDef());
- if (d)
- {
- //printf("****** adding %s to scope %s in iteration %d\n",cd->name().data(),d->name().data(),iteration);
- d->addInnerCompound(cd);
- cd->setOuterScope(d);
- cd->visited=TRUE;
- done=FALSE;
- }
- //else
- //{
- // printf("****** ignoring %s: scope not (yet) found in iteration %d\n",cd->name().data(),iteration);
- //}
- }
- }
- }
-
- //give warnings for unresolved compounds
- ClassDef *cd=0;
- for (cli.toFirst();(cd=cli.current());++cli)
- {
- if (!cd->visited)
- {
- QCString name = stripAnonymousNamespaceScope(cd->name());
- //printf("processing unresolved=%s, iteration=%d\n",cd->name().data(),iteration);
- /// create the scope artificially
- // anyway, so we can at least relate scopes properly.
- Definition *d = buildScopeFromQualifiedName(name,name.contains("::"),cd->getLanguage());
- if (d!=cd && !cd->getDefFileName().isEmpty())
- // avoid recursion in case of redundant scopes, i.e: namespace N { class N::C {}; }
- // for this case doxygen assumes the exitance of a namespace N::N in which C is to be found!
- // also avoid warning for stuff imported via a tagfile.
- {
- d->addInnerCompound(cd);
- cd->setOuterScope(d);
- warn(cd->getDefFileName(),cd->getDefLine(),
- "warning: Internal inconsistency: scope for class %s not "
- "found!",name.data()
- );
- }
- }
- }
-}
-
-void distributeClassGroupRelations()
-{
- static bool inlineGroupedClasses = Config_getBool("INLINE_GROUPED_CLASSES");
- if (!inlineGroupedClasses) return;
- //printf("** distributeClassGroupRelations()\n");
-
- ClassSDict::Iterator cli(*Doxygen::classSDict);
- for (cli.toFirst();cli.current();++cli) cli.current()->visited=FALSE;
-
- ClassDef *cd;
- for (cli.toFirst();(cd=cli.current());++cli)
- {
- //printf("Checking %s\n",cd->name().data());
- // distribute the group to nested classes as well
- if (!cd->visited && cd->partOfGroups()!=0 && cd->getClassSDict())
- {
- //printf(" Candidate for merging\n");
- ClassSDict::Iterator ncli(*cd->getClassSDict());
- ClassDef *ncd;
- GroupDef *gd = cd->partOfGroups()->at(0);
- for (ncli.toFirst();(ncd=ncli.current());++ncli)
- {
- if (ncd->partOfGroups()==0)
- {
- //printf(" Adding %s to group '%s'\n",ncd->name().data(),
- // gd->groupTitle());
- ncd->makePartOfGroup(gd);
- gd->addClass(ncd);
- }
- }
- cd->visited=TRUE; // only visit every class once
- }
- }
-}
-
-//----------------------------
-
-static ClassDef *createTagLessInstance(ClassDef *rootCd,ClassDef *templ,const QCString &fieldName)
-{
- QCString fullName = removeAnonymousScopes(templ->name());
- if (fullName.right(2)=="::") fullName=fullName.left(fullName.length()-2);
- fullName+="."+fieldName;
- ClassDef *cd = new ClassDef(templ->getDefFileName(),
- templ->getDefLine(),
- fullName,
- templ->compoundType());
- cd->setDocumentation(templ->documentation(),templ->docFile(),templ->docLine()); // copy docs to definition
- cd->setBriefDescription(templ->briefDescription(),templ->briefFile(),templ->briefLine());
- cd->setLanguage(templ->getLanguage());
- cd->setBodySegment(templ->getStartBodyLine(),templ->getEndBodyLine());
- cd->setBodyDef(templ->getBodyDef());
- cd->setOuterScope(rootCd->getOuterScope());
- if (rootCd->getOuterScope()!=Doxygen::globalScope)
- {
- rootCd->getOuterScope()->addInnerCompound(cd);
- }
- FileDef *fd = templ->getFileDef();
- if (fd)
- {
- cd->setFileDef(fd);
- fd->insertClass(cd);
- }
- LockingPtr<GroupList> groups = rootCd->partOfGroups();
- if ( groups!=0 )
- {
- GroupListIterator gli(*groups);
- GroupDef *gd;
- for (gli.toFirst();(gd=gli.current());++gli)
- {
- cd->makePartOfGroup(gd);
- gd->addClass(cd);
- }
- }
- //cd->insertUsedFile(root->fileName);
- //printf("** adding class %s based on %s\n",fullName.data(),templ->name().data());
- Doxygen::classSDict->append(fullName,cd);
-
- MemberList *ml = templ->getMemberList(MemberList::pubAttribs);
- if (ml)
- {
- MemberListIterator li(*ml);
- MemberDef *md;
- for (li.toFirst();(md=li.current());++li)
- {
- //printf(" Member %s type=%s\n",md->name().data(),md->typeString());
- MemberDef *imd = new MemberDef(md->getDefFileName(),md->getDefLine(),
- md->typeString(),md->name(),md->argsString(),md->excpString(),
- md->protection(),md->virtualness(),md->isStatic(),Member,
- md->memberType(),
- 0,0);
- imd->setMemberClass(cd);
- imd->setDocumentation(md->documentation(),md->docFile(),md->docLine());
- imd->setBriefDescription(md->briefDescription(),md->briefFile(),md->briefLine());
- imd->setInbodyDocumentation(md->inbodyDocumentation(),md->inbodyFile(),md->inbodyLine());
- imd->setMemberSpecifiers(md->getMemberSpecifiers());
- imd->setMemberGroupId(md->getMemberGroupId());
- imd->setInitializer(md->initializer());
- imd->setMaxInitLines(md->initializerLines());
- imd->setBitfields(md->bitfieldString());
- imd->setLanguage(md->getLanguage());
- cd->insertMember(imd);
- }
- }
- return cd;
-}
-
-/** Look through the members of class \a cd and its public members.
- * If there is a member m of a tag less struct/union,
- * then we create a duplicate of the struct/union with the name of the
- * member to identify it.
- * So if cd has name S, then the tag less struct/union will get name S.m
- * Since tag less structs can be nested we need to call this function
- * recursively. Later on we need to patch the member types so we keep
- * track of the hierarchy of classes we create.
- */
-static void processTagLessClasses(ClassDef *rootCd,
- ClassDef *cd,
- ClassDef *tagParentCd,
- const QCString &prefix,int count)
-{
- //printf("%d: processTagLessClasses %s\n",count,cd->name().data());
- //printf("checking members for %s\n",cd->name().data());
- if (cd->getClassSDict())
- {
- MemberList *ml = cd->getMemberList(MemberList::pubAttribs);
- if (ml)
- {
- MemberListIterator li(*ml);
- MemberDef *md;
- for (li.toFirst();(md=li.current());++li)
- {
- QCString type = md->typeString();
- if (type.find("::@")!=-1) // member of tag less struct/union
- {
- ClassSDict::Iterator it(*cd->getClassSDict());
- ClassDef *icd;
- for (it.toFirst();(icd=it.current());++it)
- {
- //printf(" member %s: type='%s'\n",md->name().data(),type.data());
- //printf(" comparing '%s'<->'%s'\n",type.data(),icd->name().data());
- if (type.find(icd->name())!=-1) // matching tag less struct/union
- {
- QCString name = md->name();
- if (name.at(0)=='@') name = "__unnamed__";
- if (!prefix.isEmpty()) name.prepend(prefix+".");
- //printf(" found %s for class %s\n",name.data(),cd->name().data());
- ClassDef *ncd = createTagLessInstance(rootCd,icd,name);
- processTagLessClasses(rootCd,icd,ncd,name,count+1);
- //printf(" addTagged %s to %s\n",ncd->name().data(),cd->name().data());
- tagParentCd->addTaggedInnerClass(ncd);
- ncd->setTagLessReference(icd);
-
- // replace tag-less type for generated/original member
- // by newly created class name.
- // note the difference between changing cd and tagParentCd.
- // for the initial call this is the same pointer, but for
- // recursive calls cd is the original tag-less struct (of which
- // there is only one instance) and tagParentCd is the newly
- // generated tagged struct of which there can be multiple instances!
- MemberList *pml = tagParentCd->getMemberList(MemberList::pubAttribs);
- if (pml)
- {
- MemberListIterator pli(*pml);
- MemberDef *pmd;
- for (pli.toFirst();(pmd=pli.current());++pli)
- {
- if (pmd->name()==md->name())
- {
- pmd->setType(substitute(pmd->typeString(),icd->name(),ncd->name()));
- }
- }
- }
- }
- }
- }
- }
- }
- }
-}
-
-static void findTagLessClasses(ClassDef *cd)
-{
- if (cd->getClassSDict())
- {
- ClassSDict::Iterator it(*cd->getClassSDict());
- ClassDef *icd;
- for (it.toFirst();(icd=it.current());++it)
- {
- if (icd->name().find("@")==-1) // process all non-anonymous inner classes
- {
- findTagLessClasses(icd);
- }
- }
- }
-
- processTagLessClasses(cd,cd,cd,"",0); // process tag less inner struct/classes (if any)
-}
-
-static void findTagLessClasses()
-{
- ClassSDict::Iterator cli(*Doxygen::classSDict);
- ClassDef *cd;
- for (cli.toFirst();(cd=cli.current());++cli) // for each class
- {
- Definition *scope = cd->getOuterScope();
- if (scope && scope->definitionType()!=Definition::TypeClass) // that is not nested
- {
- findTagLessClasses(cd);
- }
- }
-}
-
-
-//----------------------------------------------------------------------
-// build a list of all namespaces mentioned in the documentation
-// and all namespaces that have a documentation block before their definition.
-static void buildNamespaceList(EntryNav *rootNav)
-{
- if (
- (rootNav->section()==Entry::NAMESPACE_SEC ||
- rootNav->section()==Entry::NAMESPACEDOC_SEC ||
- rootNav->section()==Entry::PACKAGEDOC_SEC
- ) &&
- !rootNav->name().isEmpty()
- )
- {
- rootNav->loadEntry(g_storage);
- Entry *root = rootNav->entry();
-
- //printf("** buildNamespaceList(%s)\n",root->name.data());
-
- QCString fName = root->name;
- if (root->section==Entry::PACKAGEDOC_SEC)
- {
- fName=substitute(fName,".","::");
- }
-
- QCString fullName = stripAnonymousNamespaceScope(fName);
- if (!fullName.isEmpty())
- {
- //printf("Found namespace %s in %s at line %d\n",root->name.data(),
- // root->fileName.data(), root->startLine);
- NamespaceDef *nd;
- if ((nd=Doxygen::namespaceSDict->find(fullName))) // existing namespace
- {
- nd->setDocumentation(root->doc,root->docFile,root->docLine);
- nd->setName(fullName); // change name to match docs
- nd->addSectionsToDefinition(root->anchors);
- nd->setBriefDescription(root->brief,root->briefFile,root->briefLine);
- if (nd->getLanguage()==SrcLangExt_Unknown)
- {
- nd->setLanguage(root->lang);
- }
-
- // file definition containing the namespace nd
- FileDef *fd=rootNav->fileDef();
- // insert the namespace in the file definition
- if (fd) fd->insertNamespace(nd);
- addNamespaceToGroups(root,nd);
- nd->setRefItems(root->sli);
- }
- else // fresh namespace
- {
- QCString tagName;
- QCString tagFileName;
- if (rootNav->tagInfo())
- {
- tagName=rootNav->tagInfo()->tagName;
- tagFileName=rootNav->tagInfo()->fileName;
- }
- //printf("++ new namespace %s lang=%s\n",fullName.data(),langToString(root->lang).data());
- NamespaceDef *nd=new NamespaceDef(root->fileName,root->startLine,fullName,tagName,tagFileName);
- nd->setDocumentation(root->doc,root->docFile,root->docLine); // copy docs to definition
- nd->setBriefDescription(root->brief,root->briefFile,root->briefLine);
- nd->addSectionsToDefinition(root->anchors);
- nd->setHidden(root->hidden);
- nd->setArtificial(root->artificial);
- nd->setLanguage(root->lang);
-
- //printf("Adding namespace to group\n");
- addNamespaceToGroups(root,nd);
- nd->setRefItems(root->sli);
-
- // file definition containing the namespace nd
- FileDef *fd=rootNav->fileDef();
- // insert the namespace in the file definition
- if (fd) fd->insertNamespace(nd);
-
- // the empty string test is needed for extract all case
- nd->setBriefDescription(root->brief,root->briefFile,root->briefLine);
- nd->insertUsedFile(root->fileName);
- nd->setBodySegment(root->bodyLine,root->endBodyLine);
- nd->setBodyDef(fd);
- // add class to the list
- Doxygen::namespaceSDict->inSort(fullName,nd);
-
- // also add namespace to the correct structural context
- Definition *d = findScopeFromQualifiedName(Doxygen::globalScope,fullName);
- //printf("adding namespace %s to context %s\n",nd->name().data(),d?d->name().data():"<none>");
- if (d==0) // we didn't find anything, create the scope artificially
- // anyway, so we can at least relate scopes properly.
- {
- Definition *d = buildScopeFromQualifiedName(fullName,fullName.contains("::"),nd->getLanguage());
- d->addInnerCompound(nd);
- nd->setOuterScope(d);
- // TODO: Due to the order in which the tag file is written
- // a nested class can be found before its parent!
- }
- else
- {
- d->addInnerCompound(nd);
- nd->setOuterScope(d);
- }
- }
- }
-
- rootNav->releaseEntry();
- }
- RECURSE_ENTRYTREE(buildNamespaceList,rootNav);
-}
-
-//----------------------------------------------------------------------
-
-static NamespaceDef *findUsedNamespace(NamespaceSDict *unl,
- const QCString &name)
-{
- NamespaceDef *usingNd =0;
- if (unl)
- {
- //printf("Found namespace dict %d\n",unl->count());
- NamespaceSDict::Iterator unli(*unl);
- NamespaceDef *und;
- for (unli.toFirst();(und=unli.current());++unli)
- {
- QCString uScope=und->name()+"::";
- usingNd = getResolvedNamespace(uScope+name);
- //printf("Also trying with scope=`%s' usingNd=%p\n",(uScope+name).data(),usingNd);
- }
- }
- return usingNd;
-}
-
-static void findUsingDirectives(EntryNav *rootNav)
-{
- if (rootNav->section()==Entry::USINGDIR_SEC)
- {
- rootNav->loadEntry(g_storage);
- Entry *root = rootNav->entry();
-
- //printf("Found using directive %s at line %d of %s\n",
- // root->name.data(),root->startLine,root->fileName.data());
- QCString name=substitute(root->name,".","::");
- if (!name.isEmpty())
- {
- NamespaceDef *usingNd = 0;
- NamespaceDef *nd = 0;
- FileDef *fd = rootNav->fileDef();
- QCString nsName;
-
- // see if the using statement was found inside a namespace or inside
- // the global file scope.
- if (rootNav->parent() && rootNav->parent()->section()==Entry::NAMESPACE_SEC &&
- (fd==0 || fd->getLanguage()!=SrcLangExt_Java) // not a .java file
- )
- {
- nsName=stripAnonymousNamespaceScope(rootNav->parent()->name());
- if (!nsName.isEmpty())
- {
- nd = getResolvedNamespace(nsName);
- }
- }
-
- // find the scope in which the `using' namespace is defined by prepending
- // the possible scopes in which the using statement was found, starting
- // with the most inner scope and going to the most outer scope (i.e.
- // file scope).
- int scopeOffset = nsName.length();
- do
- {
- QCString scope=scopeOffset>0 ?
- nsName.left(scopeOffset)+"::" : QCString();
- usingNd = getResolvedNamespace(scope+name);
- //printf("Trying with scope=`%s' usingNd=%p\n",(scope+name).data(),usingNd);
- if (scopeOffset==0)
- {
- scopeOffset=-1;
- }
- else if ((scopeOffset=nsName.findRev("::",scopeOffset-1))==-1)
- {
- scopeOffset=0;
- }
- } while (scopeOffset>=0 && usingNd==0);
-
- if (usingNd==0 && nd) // not found, try used namespaces in this scope
- // or in one of the parent namespace scopes
- {
- NamespaceDef *pnd = nd;
- while (pnd && usingNd==0)
- {
- // also try with one of the used namespaces found earlier
- usingNd = findUsedNamespace(pnd->getUsedNamespaces(),name);
-
- // goto the parent
- Definition *s = pnd->getOuterScope();
- if (s && s->definitionType()==Definition::TypeNamespace)
- {
- pnd = (NamespaceDef*)s;
- }
- else
- {
- pnd = 0;
- }
- }
- }
- if (usingNd==0 && fd) // still nothing, also try used namespace in the
- // global scope
- {
- usingNd = findUsedNamespace(fd->getUsedNamespaces(),name);
- }
-
- //printf("%s -> %s\n",name.data(),usingNd?usingNd->name().data():"<none>");
-
- // add the namespace the correct scope
- if (usingNd)
- {
- //printf("using fd=%p nd=%p\n",fd,nd);
- if (nd)
- {
- //printf("Inside namespace %s\n",nd->name().data());
- nd->addUsingDirective(usingNd);
- }
- else if (fd)
- {
- //printf("Inside file %s\n",fd->name().data());
- fd->addUsingDirective(usingNd);
- }
- }
- else // unknown namespace, but add it anyway.
- {
- //printf("++ new unknown namespace %s lang=%s\n",name.data(),langToString(root->lang).data());
- NamespaceDef *nd=new NamespaceDef(root->fileName,root->startLine,name);
- nd->setDocumentation(root->doc,root->docFile,root->docLine); // copy docs to definition
- nd->setBriefDescription(root->brief,root->briefFile,root->briefLine);
- nd->addSectionsToDefinition(root->anchors);
- //printf("** Adding namespace %s hidden=%d\n",name.data(),root->hidden);
- nd->setHidden(root->hidden);
- nd->setArtificial(TRUE);
- nd->setLanguage(root->lang);
-
- QListIterator<Grouping> gli(*root->groups);
- Grouping *g;
- for (;(g=gli.current());++gli)
- {
- GroupDef *gd=0;
- if (!g->groupname.isEmpty() && (gd=Doxygen::groupSDict->find(g->groupname)))
- gd->addNamespace(nd);
- }
-
- // insert the namespace in the file definition
- if (fd)
- {
- fd->insertNamespace(nd);
- fd->addUsingDirective(nd);
- }
-
- // the empty string test is needed for extract all case
- nd->setBriefDescription(root->brief,root->briefFile,root->briefLine);
- nd->insertUsedFile(root->fileName);
- // add class to the list
- Doxygen::namespaceSDict->inSort(name,nd);
- nd->setRefItems(root->sli);
- }
- }
-
- rootNav->releaseEntry();
- }
- RECURSE_ENTRYTREE(findUsingDirectives,rootNav);
-}
-
-//----------------------------------------------------------------------
-
-static void buildListOfUsingDecls(EntryNav *rootNav)
-{
- if (rootNav->section()==Entry::USINGDECL_SEC &&
- !(rootNav->parent()->section()&Entry::COMPOUND_MASK) // not a class/struct member
- )
- {
- rootNav->loadEntry(g_storage);
- Entry *root = rootNav->entry();
-
- QCString name = substitute(root->name,".","::");
- if (g_usingDeclarations.find(name)==0)
- {
- FileDef *fd = rootNav->fileDef();
- if (fd)
- {
- g_usingDeclarations.insert(name,fd);
- }
- }
-
- rootNav->releaseEntry();
- }
- RECURSE_ENTRYTREE(buildListOfUsingDecls,rootNav);
-}
-
-
-static void findUsingDeclarations(EntryNav *rootNav)
-{
- if (rootNav->section()==Entry::USINGDECL_SEC &&
- !(rootNav->parent()->section()&Entry::COMPOUND_MASK) // not a class/struct member
- )
- {
- rootNav->loadEntry(g_storage);
- Entry *root = rootNav->entry();
-
- //printf("Found using declaration %s at line %d of %s inside section %x\n",
- // root->name.data(),root->startLine,root->fileName.data(),
- // rootNav->parent()->section());
- if (!root->name.isEmpty())
- {
- ClassDef *usingCd = 0;
- NamespaceDef *nd = 0;
- FileDef *fd = rootNav->fileDef();
- QCString scName;
-
- // see if the using statement was found inside a namespace or inside
- // the global file scope.
- if (rootNav->parent()->section() == Entry::NAMESPACE_SEC)
- {
- scName=rootNav->parent()->name();
- if (!scName.isEmpty())
- {
- nd = getResolvedNamespace(scName);
- }
- }
-
- // Assume the using statement was used to import a class.
- // Find the scope in which the `using' namespace is defined by prepending
- // the possible scopes in which the using statement was found, starting
- // with the most inner scope and going to the most outer scope (i.e.
- // file scope).
-
- QCString name = substitute(root->name,".","::"); //Java/C# scope->internal
- usingCd = getClass(name);
- if (usingCd==0)
- {
- usingCd = Doxygen::hiddenClasses->find(name);
- }
-
- //printf("%s -> %p\n",root->name.data(),usingCd);
- if (usingCd==0) // definition not in the input => add an artificial class
- {
- Debug::print(Debug::Classes,0," New using class `%s' (sec=0x%08x)! #tArgLists=%d\n",
- name.data(),root->section,root->tArgLists ? (int)root->tArgLists->count() : -1);
- usingCd = new ClassDef(
- "<using>",1,
- name,ClassDef::Class);
- Doxygen::hiddenClasses->append(root->name,usingCd);
- usingCd->setArtificial(TRUE);
- usingCd->setLanguage(root->lang);
- }
- else
- {
- Debug::print(Debug::Classes,0," Found used class %s in scope=%s\n",
- usingCd->name().data(),nd?nd->name().data():fd->name().data());
- }
-
- if (usingCd) // add the class to the correct scope
- {
- if (nd)
- {
- //printf("Inside namespace %s\n",nd->name().data());
- nd->addUsingDeclaration(usingCd);
- }
- else if (fd)
- {
- //printf("Inside file %s\n",fd->name().data());
- fd->addUsingDeclaration(usingCd);
- }
- }
- }
-
- rootNav->releaseEntry();
- }
- RECURSE_ENTRYTREE(findUsingDeclarations,rootNav);
-}
-
-//----------------------------------------------------------------------
-
-static void findUsingDeclImports(EntryNav *rootNav)
-{
- if (rootNav->section()==Entry::USINGDECL_SEC &&
- (rootNav->parent()->section()&Entry::COMPOUND_MASK) // in a class/struct member
- )
- {
- //printf("Found using declaration %s at line %d of %s inside section %x\n",
- // root->name.data(),root->startLine,root->fileName.data(),
- // root->parent->section);
- QCString fullName=removeRedundantWhiteSpace(rootNav->parent()->name());
- fullName=stripAnonymousNamespaceScope(fullName);
- fullName=stripTemplateSpecifiersFromScope(fullName);
- ClassDef *cd = getClass(fullName);
- if (cd)
- {
- //printf("found class %s\n",cd->name().data());
- int i=rootNav->name().find("::");
- if (i!=-1)
- {
- QCString scope=rootNav->name().left(i);
- QCString memName=rootNav->name().right(rootNav->name().length()-i-2);
- ClassDef *bcd = getResolvedClass(cd,0,scope); // todo: file in fileScope parameter
- if (bcd)
- {
- //printf("found class %s\n",bcd->name().data());
- MemberNameInfoSDict *mndict=bcd->memberNameInfoSDict();
- if (mndict)
- {
- MemberNameInfo *mni = mndict->find(memName);
- if (mni)
- {
- MemberNameInfoIterator mnii(*mni);
- MemberInfo *mi;
- for ( ; (mi=mnii.current()) ; ++mnii )
- {
- MemberDef *md = mi->memberDef;
- if (md && md->protection()!=Private)
- {
-
- rootNav->loadEntry(g_storage);
- Entry *root = rootNav->entry();
-
- //printf("found member %s\n",mni->memberName());
- MemberDef *newMd = 0;
- {
- LockingPtr<ArgumentList> templAl = md->templateArguments();
- LockingPtr<ArgumentList> al = md->templateArguments();
- newMd = new MemberDef(
- root->fileName,root->startLine,
- md->typeString(),memName,md->argsString(),
- md->excpString(),root->protection,root->virt,
- md->isStatic(),Member,md->memberType(),
- templAl.pointer(),al.pointer()
- );
- }
- newMd->setMemberClass(cd);
- cd->insertMember(newMd);
- if (!root->doc.isEmpty() || !root->brief.isEmpty())
- {
- newMd->setDocumentation(root->doc,root->docFile,root->docLine);
- newMd->setBriefDescription(root->brief,root->briefFile,root->briefLine);
- newMd->setInbodyDocumentation(root->inbodyDocs,root->inbodyFile,root->inbodyLine);
- }
- else
- {
- newMd->setDocumentation(md->documentation(),md->docFile(),md->docLine());
- newMd->setBriefDescription(md->briefDescription(),md->briefFile(),md->briefLine());
- newMd->setInbodyDocumentation(md->inbodyDocumentation(),md->inbodyFile(),md->inbodyLine());
- }
- newMd->setDefinition(md->definition());
- newMd->enableCallGraph(root->callGraph);
- newMd->enableCallerGraph(root->callerGraph);
- newMd->setBitfields(md->bitfieldString());
- newMd->addSectionsToDefinition(root->anchors);
- newMd->setBodySegment(md->getStartBodyLine(),md->getEndBodyLine());
- newMd->setBodyDef(md->getBodyDef());
- newMd->setInitializer(md->initializer());
- newMd->setMaxInitLines(md->initializerLines());
- newMd->setMemberGroupId(root->mGrpId);
- newMd->setMemberSpecifiers(md->getMemberSpecifiers());
- newMd->setLanguage(root->lang);
-
- rootNav->releaseEntry();
- }
- }
- }
- }
- }
- }
- }
-
- }
- RECURSE_ENTRYTREE(findUsingDeclImports,rootNav);
-}
-
-//----------------------------------------------------------------------
-
-static void findIncludedUsingDirectives()
-{
- // first mark all files as not visited
- FileNameListIterator fnli(*Doxygen::inputNameList);
- FileName *fn;
- for (fnli.toFirst();(fn=fnli.current());++fnli)
- {
- FileNameIterator fni(*fn);
- FileDef *fd;
- for (;(fd=fni.current());++fni)
- {
- fd->visited=FALSE;
- }
- }
- // then recursively add using directives found in #include files
- // to files that have not been visited.
- for (fnli.toFirst();(fn=fnli.current());++fnli)
- {
- FileNameIterator fni(*fn);
- FileDef *fd;
- for (fni.toFirst();(fd=fni.current());++fni)
- {
- if (!fd->visited)
- {
- //printf("----- adding using directives for file %s\n",fd->name().data());
- fd->addIncludedUsingDirectives();
- }
- }
- }
-}
-
-//----------------------------------------------------------------------
-
-static MemberDef *addVariableToClass(
- EntryNav *rootNav,
- ClassDef *cd,
- MemberDef::MemberType mtype,
- const QCString &name,
- bool fromAnnScope,
- MemberDef *fromAnnMemb,
- Protection prot,
- Relationship related)
-{
- Entry *root = rootNav->entry();
-
- QCString qualScope = cd->qualifiedNameWithTemplateParameters();
- QCString scopeSeparator="::";
- SrcLangExt lang = cd->getLanguage();
- if (lang==SrcLangExt_Java || lang==SrcLangExt_CSharp)
- {
- qualScope = substitute(qualScope,"::",".");
- scopeSeparator=".";
- }
- Debug::print(Debug::Variables,0,
- " class variable:\n"
- " `%s' `%s'::`%s' `%s' prot=`%d ann=%d init=`%s'\n",
- root->type.data(),
- qualScope.data(),
- name.data(),
- root->args.data(),
- root->protection,
- fromAnnScope,
- root->initializer.data()
- );
-
- QCString def;
- if (!root->type.isEmpty())
- {
- if (related || mtype==MemberDef::Friend || Config_getBool("HIDE_SCOPE_NAMES"))
- {
- def=root->type+" "+name+root->args;
- }
- else
- {
- def=root->type+" "+qualScope+scopeSeparator+name+root->args;
- }
- }
- else
- {
- if (Config_getBool("HIDE_SCOPE_NAMES"))
- {
- def=name+root->args;
- }
- else
- {
- def=qualScope+scopeSeparator+name+root->args;
- }
- }
- def.stripPrefix("static ");
-
- // see if the member is already found in the same scope
- // (this may be the case for a static member that is initialized
- // outside the class)
- MemberName *mn=Doxygen::memberNameSDict->find(name);
- if (mn)
- {
- MemberNameIterator mni(*mn);
- MemberDef *md;
- for (mni.toFirst();(md=mni.current());++mni)
- {
- //printf("md->getClassDef()=%p cd=%p type=[%s] md->typeString()=[%s]\n",
- // md->getClassDef(),cd,root->type.data(),md->typeString());
- if (md->getClassDef()==cd &&
- removeRedundantWhiteSpace(root->type)==md->typeString())
- // member already in the scope
- {
-
- if (root->lang==SrcLangExt_ObjC &&
- root->mtype==Property &&
- md->memberType()==MemberDef::Variable)
- { // Objective-C 2.0 property
- // turn variable into a property
- md->setProtection(root->protection);
- cd->reclassifyMember(md,MemberDef::Property);
- }
- addMemberDocs(rootNav,md,def,0,FALSE);
- //printf(" Member already found!\n");
- return md;
- }
- }
- }
-
- // new member variable, typedef or enum value
- MemberDef *md=new MemberDef(
- root->fileName,root->startLine,
- root->type,name,root->args,0,
- prot,Normal,root->stat,related,
- mtype,0,0);
- md->setTagInfo(rootNav->tagInfo());
- md->setMemberClass(cd); // also sets outer scope (i.e. getOuterScope())
- //md->setDefFile(root->fileName);
- //md->setDefLine(root->startLine);
- md->setDocumentation(root->doc,root->docFile,root->docLine);
- md->setBriefDescription(root->brief,root->briefFile,root->briefLine);
- md->setInbodyDocumentation(root->inbodyDocs,root->inbodyFile,root->inbodyLine);
- md->setDefinition(def);
- md->setBitfields(root->bitfields);
- md->addSectionsToDefinition(root->anchors);
- md->setFromAnonymousScope(fromAnnScope);
- md->setFromAnonymousMember(fromAnnMemb);
- //md->setIndentDepth(indentDepth);
- md->setBodySegment(root->bodyLine,root->endBodyLine);
- md->setInitializer(root->initializer);
- md->setMaxInitLines(root->initLines);
- md->setMemberGroupId(root->mGrpId);
- md->setMemberSpecifiers(root->spec);
- md->setReadAccessor(root->read);
- md->setWriteAccessor(root->write);
- md->enableCallGraph(root->callGraph);
- md->enableCallerGraph(root->callerGraph);
- md->setHidden(root->hidden);
- md->setArtificial(root->artificial);
- md->setLanguage(root->lang);
- addMemberToGroups(root,md);
- //if (root->mGrpId!=-1)
- //{
- // printf("memberdef %s in memberGroup %d\n",name.data(),root->mGrpId);
- // md->setMemberGroup(memberGroupDict[root->mGrpId]);
- //
- md->setBodyDef(rootNav->fileDef());
-
- //printf(" Adding member=%s\n",md->name().data());
- // add the member to the global list
- if (mn)
- {
- mn->append(md);
- }
- else // new variable name
- {
- mn = new MemberName(name);
- mn->append(md);
- //printf("Adding memberName=%s\n",mn->memberName());
- //Doxygen::memberNameDict.insert(name,mn);
- //Doxygen::memberNameList.append(mn);
- Doxygen::memberNameSDict->append(name,mn);
- // add the member to the class
- }
- //printf(" New member adding to %s (%p)!\n",cd->name().data(),cd);
- cd->insertMember(md);
- md->setRefItems(root->sli);
-
- //TODO: insert FileDef instead of filename strings.
- cd->insertUsedFile(root->fileName);
- rootNav->changeSection(Entry::EMPTY_SEC);
- return md;
-}
-
-//----------------------------------------------------------------------
-
-static MemberDef *addVariableToFile(
- EntryNav *rootNav,
- MemberDef::MemberType mtype,
- const QCString &scope,
- const QCString &name,
- bool fromAnnScope,
- /*int indentDepth,*/
- MemberDef *fromAnnMemb)
-{
- Entry *root = rootNav->entry();
- Debug::print(Debug::Variables,0,
- " global variable:\n"
- " type=`%s' scope=`%s' name=`%s' args=`%s' prot=`%d mtype=%d lang=%d\n",
- root->type.data(),
- scope.data(),
- name.data(),
- root->args.data(),
- root->protection,
- mtype,
- root->lang
- );
-
- FileDef *fd = rootNav->fileDef();
-
- // see if we have a typedef that should hide a struct or union
- if (mtype==MemberDef::Typedef && Config_getBool("TYPEDEF_HIDES_STRUCT"))
- {
- QCString type = root->type;
- type.stripPrefix("typedef ");
- if (type.left(7)=="struct " || type.left(6)=="union ")
- {
- type.stripPrefix("struct ");
- type.stripPrefix("union ");
- static QRegExp re("[a-z_A-Z][a-z_A-Z0-9]*");
- int l,s;
- s = re.match(type,0,&l);
- if (s>=0)
- {
- QCString typeValue = type.mid(s,l);
- ClassDef *cd = getClass(typeValue);
- if (cd)
- {
- // this typedef should hide compound name cd, so we
- // change the name that is displayed from cd.
- cd->setClassName(name);
- cd->setDocumentation(root->doc,root->docFile,root->docLine);
- cd->setBriefDescription(root->brief,root->briefFile,root->briefLine);
- return 0;
- }
- }
- }
- }
-
- // see if the function is inside a namespace
- NamespaceDef *nd = 0;
- QCString nscope;
- if (!scope.isEmpty())
- {
- if (scope.find('@')!=-1) return 0; // anonymous scope!
- //nscope=removeAnonymousScopes(scope);
- //if (!nscope.isEmpty())
- //{
- nd = getResolvedNamespace(scope);
- //}
- }
- QCString def;
-
- // determine the definition of the global variable
- if (nd && !nd->name().isEmpty() && nd->name().at(0)!='@' &&
- !Config_getBool("HIDE_SCOPE_NAMES")
- )
- // variable is inside a namespace, so put the scope before the name
- {
- SrcLangExt lang = nd->getLanguage();
- QCString sep=getLanguageSpecificSeparator(lang);
-
- if (!root->type.isEmpty())
- {
- def=root->type+" "+nd->name()+sep+name+root->args;
- }
- else
- {
- def=nd->name()+sep+name+root->args;
- }
- }
- else
- {
- if (!root->type.isEmpty() && !root->name.isEmpty())
- {
- if (name.at(0)=='@') // dummy variable representing anonymous union
- def=root->type;
- else
- def=root->type+" "+name+root->args;
- }
- else
- {
- def=name+root->args;
- }
- }
- def.stripPrefix("static ");
-
- MemberName *mn=Doxygen::functionNameSDict->find(name);
- if (mn)
- {
- //QCString nscope=removeAnonymousScopes(scope);
- //NamespaceDef *nd=0;
- //if (!nscope.isEmpty())
- if (!scope.isEmpty())
- {
- nd = getResolvedNamespace(scope);
- }
- MemberNameIterator mni(*mn);
- MemberDef *md;
- for (mni.toFirst();(md=mni.current());++mni)
- {
- if (
- ((nd==0 && md->getNamespaceDef()==0 && md->getFileDef() &&
- root->fileName==md->getFileDef()->absFilePath()
- ) // both variable names in the same file
- || (nd!=0 && md->getNamespaceDef()==nd) // both in same namespace
- )
- && !md->isDefine() // function style #define's can be "overloaded" by typedefs or variables
- && !md->isEnumerate() // in C# an enum value and enum can have the same name
- )
- // variable already in the scope
- {
- if (md->getFileDef() &&
- ! // not a php array
- (
- (md->getLanguage()==SrcLangExt_PHP) &&
- (md->argsString()!=root->args && root->args.find('[')!=-1)
- )
- )
- // not a php array variable
- {
-
- Debug::print(Debug::Variables,0,
- " variable already found: scope=%s\n",md->getOuterScope()->name().data());
- addMemberDocs(rootNav,md,def,0,FALSE);
- md->setRefItems(root->sli);
- return md;
- }
- }
- }
- }
- Debug::print(Debug::Variables,0,
- " new variable, nd=%s!\n",nd?nd->name().data():"<global>");
- // new global variable, enum value or typedef
- MemberDef *md=new MemberDef(
- root->fileName,root->startLine,
- root->type,name,root->args,0,
- Public, Normal,root->stat,Member,
- mtype,0,0);
- md->setTagInfo(rootNav->tagInfo());
- md->setDocumentation(root->doc,root->docFile,root->docLine);
- md->setBriefDescription(root->brief,root->briefFile,root->briefLine);
- md->setInbodyDocumentation(root->inbodyDocs,root->inbodyFile,root->inbodyLine);
- md->addSectionsToDefinition(root->anchors);
- md->setFromAnonymousScope(fromAnnScope);
- md->setFromAnonymousMember(fromAnnMemb);
- md->setInitializer(root->initializer);
- md->setMaxInitLines(root->initLines);
- md->setMemberGroupId(root->mGrpId);
- md->setDefinition(def);
- md->setLanguage(root->lang);
- md->enableCallGraph(root->callGraph);
- md->enableCallerGraph(root->callerGraph);
- md->setExplicitExternal(root->explicitExternal);
- //md->setOuterScope(fd);
- if (!root->explicitExternal)
- {
- md->setBodySegment(root->bodyLine,root->endBodyLine);
- md->setBodyDef(fd);
- }
- addMemberToGroups(root,md);
-
- md->setRefItems(root->sli);
- if (nd && !nd->name().isEmpty() && nd->name().at(0)!='@')
- {
- md->setNamespace(nd);
- nd->insertMember(md);
- }
-
- // add member to the file (we do this even if we have already inserted
- // it into the namespace.
- if (fd)
- {
- md->setFileDef(fd);
- fd->insertMember(md);
- }
-
- // add member definition to the list of globals
- if (mn)
- {
- mn->append(md);
- }
- else
- {
- mn = new MemberName(name);
- mn->append(md);
- Doxygen::functionNameSDict->append(name,mn);
- }
- rootNav->changeSection(Entry::EMPTY_SEC);
- return md;
-}
-
-/*! See if the return type string \a type is that of a function pointer
- * \returns -1 if this is not a function pointer variable or
- * the index at which the closing brace of (...*name) was found.
- */
-static int findFunctionPtr(const QCString &type,int lang, int *pLength=0)
-{
- if (lang == SrcLangExt_Fortran) return -1; // Fortran does not have function pointers
- static const QRegExp re("([^)]*[\\*\\^][^)]*)");
- int i=-1,l;
- int bb=type.find('<');
- int be=type.findRev('>');
- if (!type.isEmpty() && // return type is non-empty
- (i=re.match(type,0,&l))!=-1 && // contains (...*...)
- type.find("operator")==-1 && // not an operator
- (type.find(")(")==-1 || type.find("typedef ")!=-1) &&
- // not a function pointer return type
- !(bb<i && i<be) // bug665855: avoid treating "typedef A<void (T*)> type" as a function pointer
- )
- {
- if (pLength) *pLength=l;
- //printf("findFunctionPtr=%d\n",i);
- return i;
- }
- else
- {
- //printf("findFunctionPtr=%d\n",-1);
- return -1;
- }
-}
-
-
-/*! Returns TRUE iff \a type is a class within scope \a context.
- * Used to detect variable declarations that look like function prototypes.
- */
-static bool isVarWithConstructor(EntryNav *rootNav)
-{
- static QRegExp initChars("[0-9\"'&*!^]+");
- static QRegExp idChars("[a-z_A-Z][a-z_A-Z0-9]*");
- bool result=FALSE;
- bool typeIsClass;
- QCString type;
- Definition *ctx = 0;
- FileDef *fd = 0;
- int ti;
-
- //printf("isVarWithConstructor(%s)\n",rootNav->name().data());
- rootNav->loadEntry(g_storage);
- Entry *root = rootNav->entry();
-
- if (rootNav->parent()->section() & Entry::COMPOUND_MASK)
- { // inside a class
- result=FALSE;
- goto done;
- }
- else if ((fd = rootNav->fileDef()) &&
- (fd->name().right(2)==".c" || fd->name().right(2)==".h")
- )
- { // inside a .c file
- result=FALSE;
- goto done;
- }
- if (root->type.isEmpty())
- {
- result=FALSE;
- goto done;
- }
- if (!rootNav->parent()->name().isEmpty())
- {
- ctx=Doxygen::namespaceSDict->find(rootNav->parent()->name());
- }
- type = root->type;
- // remove qualifiers
- findAndRemoveWord(type,"const");
- findAndRemoveWord(type,"static");
- findAndRemoveWord(type,"volatile");
- //if (type.left(6)=="const ") type=type.right(type.length()-6);
- typeIsClass=getResolvedClass(ctx,fd,type)!=0;
- if (!typeIsClass && (ti=type.find('<'))!=-1)
- {
- typeIsClass=getResolvedClass(ctx,fd,type.left(ti))!=0;
- }
- if (typeIsClass) // now we still have to check if the arguments are
- // types or values. Since we do not have complete type info
- // we need to rely on heuristics :-(
- {
- //printf("typeIsClass\n");
- ArgumentList *al = root->argList;
- if (al==0 || al->isEmpty())
- {
- result=FALSE; // empty arg list -> function prototype.
- goto done;
- }
- ArgumentListIterator ali(*al);
- Argument *a;
- for (ali.toFirst();(a=ali.current());++ali)
- {
- if (!a->name.isEmpty() || !a->defval.isEmpty())
- {
- if (a->name.find(initChars)==0)
- {
- result=TRUE;
- }
- else
- {
- result=FALSE; // arg has (type,name) pair -> function prototype
- }
- goto done;
- }
- if (a->type.isEmpty() || getResolvedClass(ctx,fd,a->type)!=0)
- {
- result=FALSE; // arg type is a known type
- goto done;
- }
- if (checkIfTypedef(ctx,fd,a->type))
- {
- //printf("%s:%d: false (arg is typedef)\n",__FILE__,__LINE__);
- result=FALSE; // argument is a typedef
- goto done;
- }
- if (a->type.at(a->type.length()-1)=='*' ||
- a->type.at(a->type.length()-1)=='&')
- // type ends with * or & => pointer or reference
- {
- result=FALSE;
- goto done;
- }
- if (a->type.find(initChars)==0)
- {
- result=TRUE; // argument type starts with typical initializer char
- goto done;
- }
- QCString resType=resolveTypeDef(ctx,a->type);
- if (resType.isEmpty()) resType=a->type;
- int len;
- if (idChars.match(resType,0,&len)==0) // resType starts with identifier
- {
- resType=resType.left(len);
- //printf("resType=%s\n",resType.data());
- if (resType=="int" || resType=="long" || resType=="float" ||
- resType=="double" || resType=="char" || resType=="signed" ||
- resType=="const" || resType=="unsigned" || resType=="void")
- {
- result=FALSE; // type keyword -> function prototype
- goto done;
- }
- }
- }
- result=TRUE;
- }
-
-done:
- //printf("isVarWithConstructor(%s,%s)=%d\n",rootNav->parent()->name().data(),
- // root->type.data(),result);
- rootNav->releaseEntry();
- return result;
-}
-
-static void addVariable(EntryNav *rootNav,int isFuncPtr=-1)
-{
- rootNav->loadEntry(g_storage);
- Entry *root = rootNav->entry();
-
- Debug::print(Debug::Variables,0,
- "VARIABLE_SEC: \n"
- " type=`%s' name=`%s' args=`%s' bodyLine=`%d' mGrpId=%d relates=%s\n",
- root->type.data(),
- root->name.data(),
- root->args.data(),
- root->bodyLine,
- root->mGrpId,
- root->relates.data()
- );
- //printf("root->parent->name=%s\n",root->parent->name.data());
-
- if (root->type.isEmpty() && root->name.find("operator")==-1 &&
- (root->name.find('*')!=-1 || root->name.find('&')!=-1))
- {
- // recover from parse error caused by redundant braces
- // like in "int *(var[10]);", which is parsed as
- // type="" name="int *" args="(var[10])"
-
- root->type=root->name;
- static const QRegExp reName("[a-z_A-Z][a-z_A-Z0-9]*");
- int l;
- int i=root->args.isEmpty() ? -1 : reName.match(root->args,0,&l);
- root->name=root->args.mid(i,l);
- root->args=root->args.mid(i+l,root->args.find(')',i+l)-i-l);
- //printf("new: type=`%s' name=`%s' args=`%s'\n",
- // root->type.data(),root->name.data(),root->args.data());
- }
- else
- {
- int i=isFuncPtr;
- if (i==-1) i=findFunctionPtr(root->type,root->lang); // for typedefs isFuncPtr is not yet set
- Debug::print(Debug::Variables,0," functionPtr? %s\n",i!=-1?"yes":"no");
- if (i!=-1) // function pointer
- {
- int ai = root->type.find('[',i);
- if (ai>i) // function pointer array
- {
- root->args.prepend(root->type.right(root->type.length()-ai));
- root->type=root->type.left(ai);
- }
- else if (root->type.find(')',i)!=-1) // function ptr, not variable like "int (*bla)[10]"
- {
- root->type=root->type.left(root->type.length()-1);
- root->args.prepend(")");
- //printf("root->type=%s root->args=%s\n",root->type.data(),root->args.data());
- }
- }
- else if (root->type.find("typedef ")!=-1 && root->type.right(2)=="()") // typedef void (func)(int)
- {
- root->type=root->type.left(root->type.length()-1);
- root->args.prepend(")");
- }
- }
-
- QCString scope,name=removeRedundantWhiteSpace(root->name);
-
- // find the scope of this variable
- EntryNav *p = rootNav->parent();
- while ((p->section() & Entry::SCOPE_MASK))
- {
- QCString scopeName = p->name();
- if (!scopeName.isEmpty())
- {
- scope.prepend(scopeName);
- break;
- }
- p=p->parent();
- }
-
- MemberDef::MemberType mtype;
- QCString type=root->type.stripWhiteSpace();
- ClassDef *cd=0;
- bool isRelated=FALSE;
- bool isMemberOf=FALSE;
-
- QCString classScope=stripAnonymousNamespaceScope(scope);
- classScope=stripTemplateSpecifiersFromScope(classScope,FALSE);
- QCString annScopePrefix=scope.left(scope.length()-classScope.length());
-
- if (root->name.findRev("::")!=-1)
- {
- if (root->type=="friend class" || root->type=="friend struct" ||
- root->type=="friend union")
- {
- cd=getClass(scope);
- if (cd)
- {
- addVariableToClass(rootNav, // entry
- cd, // class to add member to
- MemberDef::Friend, // type of member
- name, // name of the member
- FALSE, // from Anonymous scope
- 0, // anonymous member
- Public, // protection
- Member // related to a class
- );
- }
- }
- goto nextMember;
- /* skip this member, because it is a
- * static variable definition (always?), which will be
- * found in a class scope as well, but then we know the
- * correct protection level, so only then it will be
- * inserted in the correct list!
- */
- }
-
- if (type=="@")
- mtype=MemberDef::EnumValue;
- else if (type.left(8)=="typedef ")
- mtype=MemberDef::Typedef;
- else if (type.left(7)=="friend ")
- mtype=MemberDef::Friend;
- else if (root->mtype==Property)
- mtype=MemberDef::Property;
- else if (root->mtype==Event)
- mtype=MemberDef::Event;
- else
- mtype=MemberDef::Variable;
-
- if (!root->relates.isEmpty()) // related variable
- {
- isRelated=TRUE;
- isMemberOf=(root->relatesType == MemberOf);
- if (getClass(root->relates)==0 && !scope.isEmpty())
- scope=mergeScopes(scope,root->relates);
- else
- scope=root->relates;
- }
-
- cd=getClass(scope);
- if (cd==0 && classScope!=scope) cd=getClass(classScope);
- if (cd)
- {
- MemberDef *md=0;
-
- // if cd is an anonymous (=tag less) scope we insert the member
- // into a non-anonymous parent scope as well. This is needed to
- // be able to refer to it using \var or \fn
-
- //int indentDepth=0;
- int si=scope.find('@');
- //int anonyScopes = 0;
- //bool added=FALSE;
-
- static bool inlineSimpleStructs = Config_getBool("INLINE_SIMPLE_STRUCTS");
- if (si!=-1 && !inlineSimpleStructs) // anonymous scope or type
- {
- QCString pScope;
- ClassDef *pcd=0;
- pScope = scope.left(QMAX(si-2,0)); // scope without tag less parts
- if (!pScope.isEmpty())
- pScope.prepend(annScopePrefix);
- else if (annScopePrefix.length()>2)
- pScope=annScopePrefix.left(annScopePrefix.length()-2);
- if (name.at(0)!='@')
- {
- if (!pScope.isEmpty() && (pcd=getClass(pScope)))
- {
- md=addVariableToClass(rootNav, // entry
- pcd, // class to add member to
- mtype, // member type
- name, // member name
- TRUE, // from anonymous scope
- 0, // from anonymous member
- root->protection,
- isMemberOf ? Foreign : isRelated ? Related : Member
- );
- //added=TRUE;
- }
- else // anonymous scope inside namespace or file => put variable in the global scope
- {
- if (mtype==MemberDef::Variable)
- {
- md=addVariableToFile(rootNav,mtype,pScope,name,TRUE,0);
- }
- //added=TRUE;
- }
- }
- }
-
- //printf("name=`%s' scope=%s scope.right=%s\n",
- // name.data(),scope.data(),
- // scope.right(scope.length()-si).data());
- addVariableToClass(rootNav, // entry
- cd, // class to add member to
- mtype, // member type
- name, // name of the member
- FALSE, // from anonymous scope
- md, // from anonymous member
- root->protection,
- isMemberOf ? Foreign : isRelated ? Related : Member);
- }
- else if (!name.isEmpty()) // global variable
- {
- //printf("Inserting member in global scope %s!\n",scope.data());
- addVariableToFile(rootNav,mtype,scope,name,FALSE,/*0,*/0);
- }
-
-nextMember:
- rootNav->releaseEntry();
-}
-
-//----------------------------------------------------------------------
-// Searches the Entry tree for typedef documentation sections.
-// If found they are stored in their class or in the global list.
-static void buildTypedefList(EntryNav *rootNav)
-{
- //printf("buildVarList(%s)\n",rootNav->name().data());
- if (!rootNav->name().isEmpty() &&
- rootNav->section()==Entry::VARIABLE_SEC &&
- rootNav->type().find("typedef ")!=-1 // its a typedef
- )
- {
- addVariable(rootNav);
- }
- if (rootNav->children())
- {
- EntryNavListIterator eli(*rootNav->children());
- EntryNav *e;
- for (;(e=eli.current());++eli)
- {
- if (e->section()!=Entry::ENUM_SEC)
- {
- buildTypedefList(e);
- }
- }
- }
-}
-
-//----------------------------------------------------------------------
-// Searches the Entry tree for Variable documentation sections.
-// If found they are stored in their class or in the global list.
-
-static void buildVarList(EntryNav *rootNav)
-{
- //printf("buildVarList(%s)\n",rootNav->name().data());
- int isFuncPtr=-1;
- if (!rootNav->name().isEmpty() &&
- (rootNav->type().isEmpty() || g_compoundKeywordDict.find(rootNav->type())==0) &&
- (
- (rootNav->section()==Entry::VARIABLE_SEC // it's a variable
- ) ||
- (rootNav->section()==Entry::FUNCTION_SEC && // or maybe a function pointer variable
- (isFuncPtr=findFunctionPtr(rootNav->type(),rootNav->lang()))!=-1
- ) ||
- (rootNav->section()==Entry::FUNCTION_SEC && // class variable initialized by constructor
- isVarWithConstructor(rootNav)
- )
- )
- ) // documented variable
- {
- addVariable(rootNav,isFuncPtr);
- }
- if (rootNav->children())
- {
- EntryNavListIterator eli(*rootNav->children());
- EntryNav *e;
- for (;(e=eli.current());++eli)
- {
- if (e->section()!=Entry::ENUM_SEC)
- {
- buildVarList(e);
- }
- }
- }
-}
-
-//----------------------------------------------------------------------
-// Searches the Entry tree for Function sections.
-// If found they are stored in their class or in the global list.
-
-static void addMethodToClass(EntryNav *rootNav,ClassDef *cd,
- const QCString &rname,bool isFriend)
-{
- Entry *root = rootNav->entry();
- FileDef *fd=rootNav->fileDef();
-
- int l,i=-1;
- static QRegExp re("([a-z_A-Z0-9: ]*[ &*]+[ ]*");
-
- if (cd->getLanguage()==SrcLangExt_Cpp && // only C has pointers
- !root->type.isEmpty() && (i=re.match(root->type,0,&l))!=-1) // function variable
- {
- root->args+=root->type.right(root->type.length()-i-l);
- root->type=root->type.left(i+l);
- }
-
- QCString name=removeRedundantWhiteSpace(rname);
- if (name.left(2)=="::") name=name.right(name.length()-2);
-
- MemberDef::MemberType mtype;
- if (isFriend) mtype=MemberDef::Friend;
- else if (root->mtype==Signal) mtype=MemberDef::Signal;
- else if (root->mtype==Slot) mtype=MemberDef::Slot;
- else if (root->mtype==DCOP) mtype=MemberDef::DCOP;
- else mtype=MemberDef::Function;
-
- // strip redundant template specifier for constructors
- if ((fd==0 || fd->getLanguage()==SrcLangExt_Cpp) &&
- name.left(9)!="operator " && (i=name.find('<'))!=-1 && name.find('>')!=-1)
- {
- name=name.left(i);
- }
-
- //printf("root->name=`%s; root->args=`%s' root->argList=`%s'\n",
- // root->name.data(),root->args.data(),argListToString(root->argList).data()
- // );
-
- // adding class member
- MemberDef *md=new MemberDef(
- root->fileName,root->startLine,
- root->type,name,root->args,root->exception,
- root->protection,root->virt,
- root->stat && root->relatesType != MemberOf,
- root->relates.isEmpty() ? Member :
- root->relatesType == MemberOf ? Foreign : Related,
- mtype,root->tArgLists ? root->tArgLists->last() : 0,root->argList);
- md->setTagInfo(rootNav->tagInfo());
- md->setMemberClass(cd);
- md->setDocumentation(root->doc,root->docFile,root->docLine);
- md->setDocsForDefinition(!root->proto);
- md->setBriefDescription(root->brief,root->briefFile,root->briefLine);
- md->setInbodyDocumentation(root->inbodyDocs,root->inbodyFile,root->inbodyLine);
- md->setBodySegment(root->bodyLine,root->endBodyLine);
- md->setMemberSpecifiers(root->spec);
- md->setMemberGroupId(root->mGrpId);
- md->setTypeConstraints(root->typeConstr);
- md->setLanguage(root->lang);
- md->setBodyDef(fd);
- md->setFileDef(fd);
- //md->setScopeTemplateArguments(root->tArgList);
- md->addSectionsToDefinition(root->anchors);
- QCString def;
- QCString qualScope = cd->qualifiedNameWithTemplateParameters();
- SrcLangExt lang = cd->getLanguage();
- QCString scopeSeparator=getLanguageSpecificSeparator(lang);
- if (scopeSeparator!="::")
- {
- qualScope = substitute(qualScope,"::",scopeSeparator);
- }
- if (lang==SrcLangExt_PHP)
- {
- // for PHP we use Class::method and Namespace\method
- scopeSeparator="::";
- }
- if (!root->relates.isEmpty() || isFriend || Config_getBool("HIDE_SCOPE_NAMES"))
- {
- if (!root->type.isEmpty())
- {
- if (root->argList)
- {
- def=root->type+" "+name;
- }
- else
- {
- def=root->type+" "+name+root->args;
- }
- }
- else
- {
- if (root->argList)
- {
- def=name;
- }
- else
- {
- def=name+root->args;
- }
- }
- }
- else
- {
- if (!root->type.isEmpty())
- {
- if (root->argList)
- {
- def=root->type+" "+qualScope+scopeSeparator+name;
- }
- else
- {
- def=root->type+" "+qualScope+scopeSeparator+name+root->args;
- }
- }
- else
- {
- if (root->argList)
- {
- def=qualScope+scopeSeparator+name;
- }
- else
- {
- def=qualScope+scopeSeparator+name+root->args;
- }
- }
- }
- if (def.left(7)=="friend ") def=def.right(def.length()-7);
- md->setDefinition(def);
- md->enableCallGraph(root->callGraph);
- md->enableCallerGraph(root->callerGraph);
-
- Debug::print(Debug::Functions,0,
- " Func Member:\n"
- " `%s' `%s'::`%s' `%s' proto=%d\n"
- " def=`%s'\n",
- root->type.data(),
- qualScope.data(),
- rname.data(),
- root->args.data(),
- root->proto,
- def.data()
- );
-
- // add member to the global list of all members
- //printf("Adding member=%s class=%s\n",md->name().data(),cd->name().data());
- MemberName *mn;
- if ((mn=Doxygen::memberNameSDict->find(name)))
- {
- mn->append(md);
- }
- else
- {
- mn = new MemberName(name);
- mn->append(md);
- Doxygen::memberNameSDict->append(name,mn);
- }
-
- // add member to the class cd
- cd->insertMember(md);
- // add file to list of used files
- cd->insertUsedFile(root->fileName);
-
- addMemberToGroups(root,md);
- rootNav->changeSection(Entry::EMPTY_SEC);
- md->setRefItems(root->sli);
-}
-
-
-static void buildFunctionList(EntryNav *rootNav)
-{
- if (rootNav->section()==Entry::FUNCTION_SEC)
- {
- rootNav->loadEntry(g_storage);
- Entry *root = rootNav->entry();
-
- Debug::print(Debug::Functions,0,
- "FUNCTION_SEC:\n"
- " `%s' `%s'::`%s' `%s' relates=`%s' relatesType=`%d' file=`%s' line=`%d' bodyLine=`%d' #tArgLists=%d mGrpId=%d spec=%d proto=%d docFile=%s\n",
- root->type.data(),
- rootNav->parent()->name().data(),
- root->name.data(),
- root->args.data(),
- root->relates.data(),
- root->relatesType,
- root->fileName.data(),
- root->startLine,
- root->bodyLine,
- root->tArgLists ? (int)root->tArgLists->count() : -1,
- root->mGrpId,
- root->spec,
- root->proto,
- root->docFile.data()
- );
-
- bool isFriend=root->type.find("friend ")!=-1;
- QCString rname = removeRedundantWhiteSpace(root->name);
- //printf("rname=%s\n",rname.data());
-
- QCString scope=rootNav->parent()->name(); //stripAnonymousNamespaceScope(root->parent->name);
- if (!rname.isEmpty() && scope.find('@')==-1)
- {
- ClassDef *cd=0;
- // check if this function's parent is a class
- scope=stripTemplateSpecifiersFromScope(scope,FALSE);
-
- FileDef *rfd=rootNav->fileDef();
-
- int memIndex=rname.findRev("::");
-
- cd=getClass(scope);
- if (cd && scope+"::"==rname.left(scope.length()+2)) // found A::f inside A
- {
- // strip scope from name
- rname=rname.right(rname.length()-rootNav->parent()->name().length()-2);
- }
-
- NamespaceDef *nd = 0;
- bool isMember=FALSE;
- if (memIndex!=-1)
- {
- int ts=rname.find('<');
- int te=rname.find('>');
- if (memIndex>0 && (ts==-1 || te==-1))
- {
- // note: the following code was replaced by inMember=TRUE to deal with a
- // function rname='X::foo' of class X inside a namespace also called X...
- // bug id 548175
- //nd = Doxygen::namespaceSDict->find(rname.left(memIndex));
- //isMember = nd==0;
- //if (nd)
- //{
- // // strip namespace scope from name
- // scope=rname.left(memIndex);
- // rname=rname.right(rname.length()-memIndex-2);
- //}
- isMember = TRUE;
- }
- else
- {
- isMember=memIndex<ts || memIndex>te;
- }
- }
-
- static QRegExp re("([a-z_A-Z0-9: ]*[ &*]+[ ]*");
- if (!rootNav->parent()->name().isEmpty() &&
- (rootNav->parent()->section() & Entry::COMPOUND_MASK) &&
- cd &&
- // do some fuzzy things to exclude function pointers
- (root->type.isEmpty() ||
- (root->type.find(re,0)==-1 || root->args.find(")[")!=-1) || // type contains ..(..* and args not )[.. -> function pointer
- root->type.find(")(")!=-1 || root->type.find("operator")!=-1 || // type contains ..)(.. and not "operator"
- cd->getLanguage()!=SrcLangExt_Cpp // language other than C
- )
- )
- {
- Debug::print(Debug::Functions,0," --> member %s of class %s!\n",
- rname.data(),cd->name().data());
- addMethodToClass(rootNav,cd,rname,isFriend);
- }
- else if (!((rootNav->parent()->section() & Entry::COMPOUND_MASK)
- || rootNav->parent()->section()==Entry::OBJCIMPL_SEC
- ) &&
- !isMember &&
- (root->relates.isEmpty() || root->relatesType == Duplicate) &&
- root->type.left(7)!="extern " && root->type.left(8)!="typedef "
- )
- // no member => unrelated function
- {
- /* check the uniqueness of the function name in the file.
- * A file could contain a function prototype and a function definition
- * or even multiple function prototypes.
- */
- bool found=FALSE;
- MemberName *mn;
- MemberDef *md=0;
- if ((mn=Doxygen::functionNameSDict->find(rname)))
- {
- Debug::print(Debug::Functions,0," --> function %s already found!\n",rname.data());
- MemberNameIterator mni(*mn);
- for (mni.toFirst();(!found && (md=mni.current()));++mni)
- {
- NamespaceDef *mnd = md->getNamespaceDef();
- NamespaceDef *rnd = 0;
- //printf("root namespace=%s\n",rootNav->parent()->name().data());
- QCString fullScope = scope;
- QCString parentScope = rootNav->parent()->name();
- if (!parentScope.isEmpty() && !leftScopeMatch(parentScope,scope))
- {
- if (!scope.isEmpty()) fullScope.prepend("::");
- fullScope.prepend(parentScope);
- }
- //printf("fullScope=%s\n",fullScope.data());
- rnd = getResolvedNamespace(fullScope);
- FileDef *mfd = md->getFileDef();
- QCString nsName,rnsName;
- if (mnd) nsName = mnd->name().copy();
- if (rnd) rnsName = rnd->name().copy();
- //printf("matching arguments for %s%s %s%s\n",
- // md->name().data(),md->argsString(),rname.data(),argListToString(root->argList).data());
- LockingPtr<ArgumentList> mdAl = md->argumentList();
- LockingPtr<ArgumentList> mdTempl = md->templateArguments();
-
- // in case of template functions, we need to check if the
- // functions have the same number of template parameters
- bool sameNumTemplateArgs = TRUE;
- if (mdTempl!=0 && root->tArgLists)
- {
- if (mdTempl->count()!=root->tArgLists->getLast()->count())
- {
- sameNumTemplateArgs = FALSE;
- }
- }
- if (
- matchArguments2(md->getOuterScope(),mfd,mdAl.pointer(),
- rnd ? rnd : Doxygen::globalScope,rfd,root->argList,
- FALSE) &&
- sameNumTemplateArgs
- )
- {
- GroupDef *gd=0;
- if (root->groups->first()!=0)
- {
- gd = Doxygen::groupSDict->find(root->groups->first()->groupname.data());
- }
- //printf("match!\n");
- //printf("mnd=%p rnd=%p nsName=%s rnsName=%s\n",mnd,rnd,nsName.data(),rnsName.data());
- // see if we need to create a new member
- found=(mnd && rnd && nsName==rnsName) || // members are in the same namespace
- ((mnd==0 && rnd==0 && mfd!=0 && // no external reference and
- mfd->absFilePath()==root->fileName // prototype in the same file
- )
- );
- // otherwise, allow a duplicate global member with the same argument list
- if (!found && gd && gd==md->getGroupDef() && nsName==rnsName)
- {
- // member is already in the group, so we don't want to add it again.
- found=TRUE;
- }
-
- //printf("combining function with prototype found=%d in namespace %s\n",
- // found,nsName.data());
-
- if (found)
- {
- // merge argument lists
- mergeArguments(mdAl.pointer(),root->argList,!root->doc.isEmpty());
- // merge documentation
- if (md->documentation().isEmpty() && !root->doc.isEmpty())
- {
- ArgumentList *argList = new ArgumentList;
- stringToArgumentList(root->args,argList);
- if (root->proto)
- {
- //printf("setDeclArgumentList to %p\n",argList);
- md->setDeclArgumentList(argList);
- }
- else
- {
- md->setArgumentList(argList);
- }
- }
-
- md->setDocumentation(root->doc,root->docFile,root->docLine);
- md->setInbodyDocumentation(root->inbodyDocs,root->inbodyFile,root->inbodyLine);
- md->setDocsForDefinition(!root->proto);
- if (md->getStartBodyLine()!=-1 && md->getStartBodyLine()==-1)
- {
- md->setBodySegment(root->bodyLine,root->endBodyLine);
- md->setBodyDef(rfd);
- }
-
- if (md->briefDescription().isEmpty() && !root->brief.isEmpty())
- {
- md->setArgsString(root->args);
- }
- md->setBriefDescription(root->brief,root->briefFile,root->briefLine);
-
- md->addSectionsToDefinition(root->anchors);
-
- md->enableCallGraph(md->hasCallGraph() || root->callGraph);
- md->enableCallerGraph(md->hasCallerGraph() || root->callerGraph);
-
- // merge ingroup specifiers
- if (md->getGroupDef()==0 && root->groups->first()!=0)
- {
- addMemberToGroups(root,md);
- }
- else if (md->getGroupDef()!=0 && root->groups->count()==0)
- {
- //printf("existing member is grouped, new member not\n");
- root->groups->append(new Grouping(md->getGroupDef()->name(), md->getGroupPri()));
- }
- else if (md->getGroupDef()!=0 && root->groups->first()!=0)
- {
- //printf("both members are grouped\n");
- }
-
- // if md is a declaration and root is the corresponding
- // definition, then turn md into a definition.
- if (md->isPrototype() && !root->proto)
- {
- md->setPrototype(FALSE);
- }
- }
- }
- }
- }
- if (!found) /* global function is unique with respect to the file */
- {
- Debug::print(Debug::Functions,0," --> new function %s found!\n",rname.data());
- //printf("New function type=`%s' name=`%s' args=`%s' bodyLine=%d\n",
- // root->type.data(),rname.data(),root->args.data(),root->bodyLine);
-
- // new global function
- ArgumentList *tArgList = root->tArgLists ? root->tArgLists->last() : 0;
- QCString name=removeRedundantWhiteSpace(rname);
- md=new MemberDef(
- root->fileName,root->startLine,
- root->type,name,root->args,root->exception,
- root->protection,root->virt,root->stat,Member,
- MemberDef::Function,tArgList,root->argList);
-
- md->setTagInfo(rootNav->tagInfo());
- md->setLanguage(root->lang);
- //md->setDefFile(root->fileName);
- //md->setDefLine(root->startLine);
- md->setDocumentation(root->doc,root->docFile,root->docLine);
- md->setBriefDescription(root->brief,root->briefFile,root->briefLine);
- md->setInbodyDocumentation(root->inbodyDocs,root->inbodyFile,root->inbodyLine);
- md->setPrototype(root->proto);
- md->setDocsForDefinition(!root->proto);
- md->setTypeConstraints(root->typeConstr);
- //md->setBody(root->body);
- md->setBodySegment(root->bodyLine,root->endBodyLine);
- FileDef *fd=rootNav->fileDef();
- md->setBodyDef(fd);
- md->addSectionsToDefinition(root->anchors);
- md->setMemberSpecifiers(root->spec);
- md->setMemberGroupId(root->mGrpId);
-
- // see if the function is inside a namespace that was not part of
- // the name already (in that case nd should be non-zero already)
- if (nd==0 && rootNav->parent()->section() == Entry::NAMESPACE_SEC )
- {
- //QCString nscope=removeAnonymousScopes(rootNav->parent()->name());
- QCString nscope=rootNav->parent()->name();
- if (!nscope.isEmpty())
- {
- nd = getResolvedNamespace(nscope);
- }
- }
-
- if (!scope.isEmpty())
- {
- QCString sep = getLanguageSpecificSeparator(root->lang);
- if (sep!="::")
- {
- scope = substitute(scope,"::",sep);
- }
- scope+=sep;
- }
-
- QCString def;
- if (!root->type.isEmpty())
- {
- if (root->argList)
- {
- def=root->type+" "+scope+name;
- }
- else
- {
- def=root->type+" "+scope+name+root->args;
- }
- }
- else
- {
- if (root->argList)
- {
- def=scope+name.copy();
- }
- else
- {
- def=scope+name+root->args;
- }
- }
- Debug::print(Debug::Functions,0,
- " Global Function:\n"
- " `%s' `%s'::`%s' `%s' proto=%d\n"
- " def=`%s'\n",
- root->type.data(),
- rootNav->parent()->name().data(),
- rname.data(),
- root->args.data(),
- root->proto,
- def.data()
- );
- md->setDefinition(def);
- md->enableCallGraph(root->callGraph);
- md->enableCallerGraph(root->callerGraph);
- //if (root->mGrpId!=-1)
- //{
- // md->setMemberGroup(memberGroupDict[root->mGrpId]);
- //}
-
- md->setRefItems(root->sli);
- if (nd && !nd->name().isEmpty() && nd->name().at(0)!='@')
- {
- // add member to namespace
- md->setNamespace(nd);
- nd->insertMember(md);
- }
- if (fd)
- {
- // add member to the file (we do this even if we have already
- // inserted it into the namespace)
- md->setFileDef(fd);
- fd->insertMember(md);
- }
-
- // add member to the list of file members
- //printf("Adding member=%s\n",md->name().data());
- MemberName *mn;
- if ((mn=Doxygen::functionNameSDict->find(name)))
- {
- mn->append(md);
- }
- else
- {
- mn = new MemberName(name);
- mn->append(md);
- Doxygen::functionNameSDict->append(name,mn);
- }
- addMemberToGroups(root,md);
- if (root->relatesType == Simple) // if this is a relatesalso command,
- // allow find Member to pick it up
- {
- rootNav->changeSection(Entry::EMPTY_SEC); // Otherwise we have finished
- // with this entry.
-
- }
- }
- else
- {
- FileDef *fd=rootNav->fileDef();
- if (fd)
- {
- // add member to the file (we do this even if we have already
- // inserted it into the namespace)
- fd->insertMember(md);
- }
- }
-
- //printf("unrelated function %d `%s' `%s' `%s'\n",
- // root->parent->section,root->type.data(),rname.data(),root->args.data());
- }
- else
- {
- Debug::print(Debug::Functions,0," --> %s not processed!\n",rname.data());
- }
- }
- else if (rname.isEmpty())
- {
- warn(root->fileName,root->startLine,
- "warning: Illegal member name found."
- );
- }
-
- rootNav->releaseEntry();
- }
- RECURSE_ENTRYTREE(buildFunctionList,rootNav);
-}
-
-//----------------------------------------------------------------------
-
-static void findFriends()
-{
- //printf("findFriends()\n");
- MemberNameSDict::Iterator fnli(*Doxygen::functionNameSDict);
- MemberName *fn;
- for (;(fn=fnli.current());++fnli) // for each global function name
- {
- //printf("Function name=`%s'\n",fn->memberName());
- MemberName *mn;
- if ((mn=Doxygen::memberNameSDict->find(fn->memberName())))
- { // there are members with the same name
- //printf("Function name is also a member name\n");
- MemberNameIterator fni(*fn);
- MemberDef *fmd;
- for (;(fmd=fni.current());++fni) // for each function with that name
- {
- MemberNameIterator mni(*mn);
- MemberDef *mmd;
- for (;(mmd=mni.current());++mni) // for each member with that name
- {
- //printf("Checking for matching arguments
- // mmd->isRelated()=%d mmd->isFriend()=%d mmd->isFunction()=%d\n",
- // mmd->isRelated(),mmd->isFriend(),mmd->isFunction());
- LockingPtr<ArgumentList> mmdAl = mmd->argumentList();
- LockingPtr<ArgumentList> fmdAl = fmd->argumentList();
- if ((mmd->isFriend() || (mmd->isRelated() && mmd->isFunction())) &&
- matchArguments2(mmd->getOuterScope(), mmd->getFileDef(), mmdAl.pointer(),
- fmd->getOuterScope(), fmd->getFileDef(), fmdAl.pointer(),
- TRUE
- )
-
- ) // if the member is related and the arguments match then the
- // function is actually a friend.
- {
- mergeArguments(mmdAl.pointer(),fmdAl.pointer());
- if (!fmd->documentation().isEmpty())
- {
- mmd->setDocumentation(fmd->documentation(),fmd->docFile(),fmd->docLine());
- }
- else if (!mmd->documentation().isEmpty())
- {
- fmd->setDocumentation(mmd->documentation(),mmd->docFile(),mmd->docLine());
- }
- if (mmd->briefDescription().isEmpty() && !fmd->briefDescription().isEmpty())
- {
- mmd->setBriefDescription(fmd->briefDescription(),fmd->briefFile(),fmd->briefLine());
- }
- else if (!mmd->briefDescription().isEmpty() && !fmd->briefDescription().isEmpty())
- {
- fmd->setBriefDescription(mmd->briefDescription(),mmd->briefFile(),mmd->briefLine());
- }
- if (!fmd->inbodyDocumentation().isEmpty())
- {
- mmd->setInbodyDocumentation(fmd->inbodyDocumentation(),fmd->inbodyFile(),fmd->inbodyLine());
- }
- else if (!mmd->inbodyDocumentation().isEmpty())
- {
- fmd->setInbodyDocumentation(mmd->inbodyDocumentation(),mmd->inbodyFile(),mmd->inbodyLine());
- }
- //printf("body mmd %d fmd %d\n",mmd->getStartBodyLine(),fmd->getStartBodyLine());
- if (mmd->getStartBodyLine()==-1 && fmd->getStartBodyLine()!=-1)
- {
- mmd->setBodySegment(fmd->getStartBodyLine(),fmd->getEndBodyLine());
- mmd->setBodyDef(fmd->getBodyDef());
- //mmd->setBodyMember(fmd);
- }
- else if (mmd->getStartBodyLine()!=-1 && fmd->getStartBodyLine()==-1)
- {
- fmd->setBodySegment(mmd->getStartBodyLine(),mmd->getEndBodyLine());
- fmd->setBodyDef(mmd->getBodyDef());
- //fmd->setBodyMember(mmd);
- }
- mmd->setDocsForDefinition(fmd->isDocsForDefinition());
-
- mmd->enableCallGraph(mmd->hasCallGraph() || fmd->hasCallGraph());
- mmd->enableCallerGraph(mmd->hasCallerGraph() || fmd->hasCallerGraph());
- fmd->enableCallGraph(mmd->hasCallGraph() || fmd->hasCallGraph());
- fmd->enableCallerGraph(mmd->hasCallerGraph() || fmd->hasCallerGraph());
- }
- }
- }
- }
- }
-}
-
-//----------------------------------------------------------------------
-
-static void transferArgumentDocumentation(ArgumentList *decAl,ArgumentList *defAl)
-{
- if (decAl && defAl)
- {
- ArgumentListIterator decAli(*decAl);
- ArgumentListIterator defAli(*defAl);
- Argument *decA,*defA;
- for (decAli.toFirst(),defAli.toFirst();
- (decA=decAli.current()) && (defA=defAli.current());
- ++decAli,++defAli)
- {
- //printf("Argument decA->name=%s (doc=%s) defA->name=%s (doc=%s)\n",
- // decA->name.data(),decA->docs.data(),
- // defA->name.data(),defA->docs.data()
- // );
- if (decA->docs.isEmpty() && !defA->docs.isEmpty())
- {
- decA->docs = defA->docs.copy();
- }
- else if (defA->docs.isEmpty() && !decA->docs.isEmpty())
- {
- defA->docs = decA->docs.copy();
- }
- }
- }
-}
-
-static void transferFunctionDocumentation()
-{
- //printf("---- transferFunctionDocumentation()\n");
-
- // find matching function declaration and definitions.
- MemberNameSDict::Iterator mnli(*Doxygen::functionNameSDict);
- MemberName *mn;
- for (;(mn=mnli.current());++mnli)
- {
- //printf("memberName=%s count=%d\n",mn->memberName(),mn->count());
- MemberDef *mdef=0,*mdec=0;
- MemberNameIterator mni1(*mn);
- /* find a matching function declaration and definition for this function */
- for (;(mdec=mni1.current());++mni1)
- {
- //printf("mdec=%s isPrototype()=%d\n",mdec->name().data(),mdec->isPrototype());
- if (mdec->isPrototype() ||
- (mdec->isVariable() && mdec->isExternal())
- )
- {
- MemberNameIterator mni2(*mn);
- for (;(mdef=mni2.current());++mni2)
- {
- if (
- (mdef->isFunction() && !mdef->isStatic() && !mdef->isPrototype()) ||
- (mdef->isVariable() && !mdef->isExternal() && !mdef->isStatic())
- )
- {
- //printf("mdef=(%p,%s) mdec=(%p,%s)\n",
- // mdef, mdef ? mdef->name().data() : "",
- // mdec, mdec ? mdec->name().data() : "");
-
- LockingPtr<ArgumentList> mdefAl = mdef->argumentList();
- LockingPtr<ArgumentList> mdecAl = mdec->argumentList();
- if (matchArguments2(mdef->getOuterScope(),mdef->getFileDef(),mdefAl.pointer(),
- mdec->getOuterScope(),mdec->getFileDef(),mdecAl.pointer(),
- TRUE
- )
- ) /* match found */
- {
- //printf("Found member %s: definition in %s (doc=`%s') and declaration in %s (doc=`%s')\n",
- // mn->memberName(),
- // mdef->getFileDef()->name().data(),mdef->documentation().data(),
- // mdec->getFileDef()->name().data(),mdec->documentation().data()
- // );
-
- // first merge argument documentation
- transferArgumentDocumentation(mdecAl.pointer(),mdefAl.pointer());
-
- /* copy documentation between function definition and declaration */
- if (!mdec->briefDescription().isEmpty())
- {
- mdef->setBriefDescription(mdec->briefDescription(),mdec->briefFile(),mdec->briefLine());
- }
- else if (!mdef->briefDescription().isEmpty())
- {
- mdec->setBriefDescription(mdef->briefDescription(),mdef->briefFile(),mdef->briefLine());
- }
- if (!mdef->documentation().isEmpty())
- {
- //printf("transfering docs mdef->mdec (%s->%s)\n",mdef->argsString(),mdec->argsString());
- mdec->setDocumentation(mdef->documentation(),mdef->docFile(),mdef->docLine());
- mdec->setDocsForDefinition(mdef->isDocsForDefinition());
- if (mdefAl!=0)
- {
- ArgumentList *mdefAlComb = new ArgumentList;
- stringToArgumentList(mdef->argsString(),mdefAlComb);
- transferArgumentDocumentation(mdefAl.pointer(),mdefAlComb);
- mdec->setArgumentList(mdefAlComb);
- }
- }
- else if (!mdec->documentation().isEmpty())
- {
- //printf("transfering docs mdec->mdef (%s->%s)\n",mdec->argsString(),mdef->argsString());
- mdef->setDocumentation(mdec->documentation(),mdec->docFile(),mdec->docLine());
- mdef->setDocsForDefinition(mdec->isDocsForDefinition());
- if (mdecAl!=0)
- {
- ArgumentList *mdecAlComb = new ArgumentList;
- stringToArgumentList(mdec->argsString(),mdecAlComb);
- transferArgumentDocumentation(mdecAl.pointer(),mdecAlComb);
- mdef->setDeclArgumentList(mdecAlComb);
- }
- }
- if (!mdef->inbodyDocumentation().isEmpty())
- {
- mdec->setInbodyDocumentation(mdef->inbodyDocumentation(),mdef->inbodyFile(),mdef->inbodyLine());
- }
- else if (!mdec->inbodyDocumentation().isEmpty())
- {
- mdef->setInbodyDocumentation(mdec->inbodyDocumentation(),mdec->inbodyFile(),mdec->inbodyLine());
- }
- if (mdec->getStartBodyLine()!=-1 && mdef->getStartBodyLine()==-1)
- {
- //printf("body mdec->mdef %d-%d\n",mdec->getStartBodyLine(),mdef->getEndBodyLine());
- mdef->setBodySegment(mdec->getStartBodyLine(),mdec->getEndBodyLine());
- mdef->setBodyDef(mdec->getBodyDef());
- //mdef->setBodyMember(mdec);
- }
- else if (mdef->getStartBodyLine()!=-1 && mdec->getStartBodyLine()==-1)
- {
- //printf("body mdef->mdec %d-%d\n",mdef->getStartBodyLine(),mdec->getEndBodyLine());
- mdec->setBodySegment(mdef->getStartBodyLine(),mdef->getEndBodyLine());
- mdec->setBodyDef(mdef->getBodyDef());
- //mdec->setBodyMember(mdef);
- }
- mdec->mergeMemberSpecifiers(mdef->getMemberSpecifiers());
- mdef->mergeMemberSpecifiers(mdec->getMemberSpecifiers());
-
-
- // copy group info.
- if (mdec->getGroupDef()==0 && mdef->getGroupDef()!=0)
- {
- mdec->setGroupDef(mdef->getGroupDef(),
- mdef->getGroupPri(),
- mdef->docFile(),
- mdef->docLine(),
- mdef->hasDocumentation(),
- mdef
- );
- }
- else if (mdef->getGroupDef()==0 && mdec->getGroupDef()!=0)
- {
- mdef->setGroupDef(mdec->getGroupDef(),
- mdec->getGroupPri(),
- mdec->docFile(),
- mdec->docLine(),
- mdec->hasDocumentation(),
- mdec
- );
- }
-
-
- mdec->mergeRefItems(mdef);
- mdef->mergeRefItems(mdec);
-
- mdef->setMemberDeclaration(mdec);
- mdec->setMemberDefinition(mdef);
-
- mdef->enableCallGraph(mdec->hasCallGraph() || mdef->hasCallGraph());
- mdef->enableCallerGraph(mdec->hasCallerGraph() || mdef->hasCallerGraph());
- mdec->enableCallGraph(mdec->hasCallGraph() || mdef->hasCallGraph());
- mdec->enableCallerGraph(mdec->hasCallerGraph() || mdef->hasCallerGraph());
- }
- }
- }
- }
- }
- }
-}
-
-//----------------------------------------------------------------------
-
-static void transferFunctionReferences()
-{
- MemberNameSDict::Iterator mnli(*Doxygen::functionNameSDict);
- MemberName *mn;
- for (;(mn=mnli.current());++mnli)
- {
- MemberDef *md,*mdef=0,*mdec=0;
- MemberNameIterator mni(*mn);
- /* find a matching function declaration and definition for this function */
- for (;(md=mni.current());++mni)
- {
- if (md->isPrototype())
- mdec=md;
- else if (md->isVariable() && md->isExternal())
- mdec=md;
-
- if (md->isFunction() && !md->isStatic() && !md->isPrototype())
- mdef=md;
- else if (md->isVariable() && !md->isExternal() && !md->isStatic())
- mdef=md;
- }
- if (mdef && mdec)
- {
- LockingPtr<ArgumentList> mdefAl = mdef->argumentList();
- LockingPtr<ArgumentList> mdecAl = mdec->argumentList();
- if (
- matchArguments2(mdef->getOuterScope(),mdef->getFileDef(),mdefAl.pointer(),
- mdec->getOuterScope(),mdec->getFileDef(),mdecAl.pointer(),
- TRUE
- )
- ) /* match found */
- {
- LockingPtr<MemberSDict> defDict = mdef->getReferencesMembers();
- LockingPtr<MemberSDict> decDict = mdec->getReferencesMembers();
- if (defDict!=0)
- {
- MemberSDict::Iterator msdi(*defDict);
- MemberDef *rmd;
- for (msdi.toFirst();(rmd=msdi.current());++msdi)
- {
- if (decDict==0 || decDict->find(rmd->name())==0)
- {
- mdec->addSourceReferences(rmd);
- }
- }
- }
- if (decDict!=0)
- {
- MemberSDict::Iterator msdi(*decDict);
- MemberDef *rmd;
- for (msdi.toFirst();(rmd=msdi.current());++msdi)
- {
- if (defDict==0 || defDict->find(rmd->name())==0)
- {
- mdef->addSourceReferences(rmd);
- }
- }
- }
-
- defDict = mdef->getReferencedByMembers();
- decDict = mdec->getReferencedByMembers();
- if (defDict!=0)
- {
- MemberSDict::Iterator msdi(*defDict);
- MemberDef *rmd;
- for (msdi.toFirst();(rmd=msdi.current());++msdi)
- {
- if (decDict==0 || decDict->find(rmd->name())==0)
- {
- mdec->addSourceReferencedBy(rmd);
- }
- }
- }
- if (decDict!=0)
- {
- MemberSDict::Iterator msdi(*decDict);
- MemberDef *rmd;
- for (msdi.toFirst();(rmd=msdi.current());++msdi)
- {
- if (defDict==0 || defDict->find(rmd->name())==0)
- {
- mdef->addSourceReferencedBy(rmd);
- }
- }
- }
- }
- }
- }
-}
-
-//----------------------------------------------------------------------
-
-static void transferRelatedFunctionDocumentation()
-{
- // find match between function declaration and definition for
- // related functions
- MemberNameSDict::Iterator mnli(*Doxygen::functionNameSDict);
- MemberName *mn;
- for (mnli.toFirst();(mn=mnli.current());++mnli)
- {
- MemberDef *md;
- MemberNameIterator mni(*mn);
- /* find a matching function declaration and definition for this function */
- for (mni.toFirst();(md=mni.current());++mni) // for each global function
- {
- //printf(" Function `%s'\n",md->name().data());
- MemberName *rmn;
- if ((rmn=Doxygen::memberNameSDict->find(md->name()))) // check if there is a member with the same name
- {
- //printf(" Member name found\n");
- MemberDef *rmd;
- MemberNameIterator rmni(*rmn);
- for (rmni.toFirst();(rmd=rmni.current());++rmni) // for each member with the same name
- {
- LockingPtr<ArgumentList> mdAl = md->argumentList();
- LockingPtr<ArgumentList> rmdAl = rmd->argumentList();
- //printf(" Member found: related=`%d'\n",rmd->isRelated());
- if ((rmd->isRelated() || rmd->isForeign()) && // related function
- matchArguments2( md->getOuterScope(), md->getFileDef(), mdAl.pointer(),
- rmd->getOuterScope(),rmd->getFileDef(),rmdAl.pointer(),
- TRUE
- )
- )
- {
- //printf(" Found related member `%s'\n",md->name().data());
- if (rmd->relatedAlso())
- md->setRelatedAlso(rmd->relatedAlso());
- else if (rmd->isForeign())
- md->makeForeign();
- else
- md->makeRelated();
- }
- }
- }
- }
- }
-}
-
-//----------------------------------------------------------------------
-
-/*! make a dictionary of all template arguments of class cd
- * that are part of the base class name.
- * Example: A template class A with template arguments <R,S,T>
- * that inherits from B<T,T,S> will have T and S in the dictionary.
- */
-static QDict<int> *getTemplateArgumentsInName(ArgumentList *templateArguments,const QCString &name)
-{
- QDict<int> *templateNames = new QDict<int>(17);
- templateNames->setAutoDelete(TRUE);
- static QRegExp re("[a-z_A-Z][a-z_A-Z0-9:]*");
- if (templateArguments)
- {
- ArgumentListIterator ali(*templateArguments);
- Argument *arg;
- int count=0;
- for (ali.toFirst();(arg=ali.current());++ali,count++)
- {
- int i,p=0,l;
- while ((i=re.match(name,p,&l))!=-1)
- {
- QCString n = name.mid(i,l);
- if (n==arg->name)
- {
- if (templateNames->find(n)==0)
- {
- templateNames->insert(n,new int(count));
- }
- }
- p=i+l;
- }
- }
- }
- return templateNames;
-}
-
-/*! Searches a class from within \a context and \a cd and returns its
- * definition if found (otherwise 0 is returned).
- */
-static ClassDef *findClassWithinClassContext(Definition *context,ClassDef *cd,const QCString &name)
-{
- FileDef *fd=cd->getFileDef();
- ClassDef *result=0;
- if (context && cd!=context)
- {
- result = getResolvedClass(context,0,name,0,0,TRUE,TRUE);
- }
- if (result==0)
- {
- result = getResolvedClass(cd,fd,name,0,0,TRUE,TRUE);
- }
- if (result==0) // try direct class, needed for namespaced classes imported via tag files (see bug624095)
- {
- result = getClass(name);
- }
- //printf("** Trying to find %s within context %s class %s result=%s lookup=%p\n",
- // name.data(),
- // context ? context->name().data() : "<none>",
- // cd ? cd->name().data() : "<none>",
- // result ? result->name().data() : "<none>",
- // Doxygen::classSDict.find(name)
- // );
- return result;
-}
-
-enum FindBaseClassRelation_Mode
-{
- TemplateInstances,
- DocumentedOnly,
- Undocumented
-};
-
-static bool findClassRelation(
- EntryNav *rootNav,
- Definition *context,
- ClassDef *cd,
- BaseInfo *bi,
- QDict<int> *templateNames,
- /*bool insertUndocumented*/
- FindBaseClassRelation_Mode mode,
- bool isArtificial
- );
-
-
-static void findUsedClassesForClass(EntryNav *rootNav,
- Definition *context,
- ClassDef *masterCd,
- ClassDef *instanceCd,
- bool isArtificial,
- ArgumentList *actualArgs=0,
- QDict<int> *templateNames=0
- )
-{
- masterCd->visited=TRUE;
- ArgumentList *formalArgs = masterCd->templateArguments();
- if (masterCd->memberNameInfoSDict())
- {
- MemberNameInfoSDict::Iterator mnili(*masterCd->memberNameInfoSDict());
- MemberNameInfo *mni;
- for (;(mni=mnili.current());++mnili)
- {
- MemberNameInfoIterator mnii(*mni);
- MemberInfo *mi;
- for (mnii.toFirst();(mi=mnii.current());++mnii)
- {
- MemberDef *md=mi->memberDef;
- if (md->isVariable() || md->isObjCProperty()) // for each member variable in this class
- {
- //printf(" Found variable %s in class %s\n",md->name().data(),masterCd->name().data());
- QCString type=removeRedundantWhiteSpace(md->typeString());
- QCString typedefValue = resolveTypeDef(masterCd,type);
- if (!typedefValue.isEmpty())
- {
- type = typedefValue;
- }
- int pos=0;
- QCString usedClassName;
- QCString templSpec;
- bool found=FALSE;
- // the type can contain template variables, replace them if present
- if (actualArgs)
- {
- type = substituteTemplateArgumentsInString(type,formalArgs,actualArgs);
- }
-
- //printf(" template substitution gives=%s\n",type.data());
- while (!found && extractClassNameFromType(type,pos,usedClassName,templSpec,rootNav->lang())!=-1)
- {
- // find the type (if any) that matches usedClassName
- ClassDef *typeCd = getResolvedClass(masterCd,
- masterCd->getFileDef(),
- usedClassName,
- 0,0,
- FALSE,TRUE
- );
- //printf("====> usedClassName=%s -> typeCd=%s\n",
- // usedClassName.data(),typeCd?typeCd->name().data():"<none>");
- if (typeCd)
- {
- usedClassName = typeCd->name();
- }
-
- int sp=usedClassName.find('<');
- if (sp==-1) sp=0;
- int si=usedClassName.findRev("::",sp);
- if (si!=-1)
- {
- // replace any namespace aliases
- replaceNamespaceAliases(usedClassName,si);
- }
- // add any template arguments to the class
- QCString usedName = removeRedundantWhiteSpace(usedClassName+templSpec);
- //printf(" usedName=%s\n",usedName.data());
-
- bool delTempNames=FALSE;
- if (templateNames==0)
- {
- templateNames = getTemplateArgumentsInName(formalArgs,usedName);
- delTempNames=TRUE;
- }
- BaseInfo bi(usedName,Public,Normal);
- findClassRelation(rootNav,context,instanceCd,&bi,templateNames,TemplateInstances,isArtificial);
-
- if (masterCd->templateArguments())
- {
- ArgumentListIterator ali(*masterCd->templateArguments());
- Argument *arg;
- int count=0;
- for (ali.toFirst();(arg=ali.current());++ali,++count)
- {
- if (arg->name==usedName) // type is a template argument
- {
- found=TRUE;
- Debug::print(Debug::Classes,0," New used class `%s'\n", usedName.data());
-
- ClassDef *usedCd = Doxygen::hiddenClasses->find(usedName);
- if (usedCd==0)
- {
- usedCd = new ClassDef(
- masterCd->getDefFileName(),masterCd->getDefLine(),
- usedName,ClassDef::Class);
- //printf("making %s a template argument!!!\n",usedCd->name().data());
- usedCd->makeTemplateArgument();
- usedCd->setUsedOnly(TRUE);
- usedCd->setLanguage(masterCd->getLanguage());
- Doxygen::hiddenClasses->append(usedName,usedCd);
- }
- if (usedCd)
- {
- if (isArtificial) usedCd->setArtificial(TRUE);
- Debug::print(Debug::Classes,0," Adding used class `%s' (1)\n", usedCd->name().data());
- instanceCd->addUsedClass(usedCd,md->name(),md->protection());
- usedCd->addUsedByClass(instanceCd,md->name(),md->protection());
- }
- }
- }
- }
-
- if (!found)
- {
- ClassDef *usedCd=findClassWithinClassContext(context,masterCd,usedName);
- //printf("Looking for used class %s: result=%s master=%s\n",
- // usedName.data(),usedCd?usedCd->name().data():"<none>",masterCd?masterCd->name().data():"<none>");
-
- if (usedCd)
- {
- found=TRUE;
- Debug::print(Debug::Classes,0," Adding used class `%s' (2)\n", usedCd->name().data());
- instanceCd->addUsedClass(usedCd,md->name(),md->protection()); // class exists
- usedCd->addUsedByClass(instanceCd,md->name(),md->protection());
- }
- }
- if (delTempNames)
- {
- delete templateNames;
- templateNames=0;
- }
- }
- if (!found && !type.isEmpty()) // used class is not documented in any scope
- {
- ClassDef *usedCd = Doxygen::hiddenClasses->find(type);
- if (usedCd==0 && !Config_getBool("HIDE_UNDOC_RELATIONS"))
- {
- if (type.right(2)=="(*" || type.right(2)=="(^") // type is a function pointer
- {
- type+=md->argsString();
- }
- Debug::print(Debug::Classes,0," New undocumented used class `%s'\n", type.data());
- usedCd = new ClassDef(
- masterCd->getDefFileName(),masterCd->getDefLine(),
- type,ClassDef::Class);
- usedCd->setUsedOnly(TRUE);
- usedCd->setLanguage(masterCd->getLanguage());
- Doxygen::hiddenClasses->append(type,usedCd);
- }
- if (usedCd)
- {
- if (isArtificial) usedCd->setArtificial(TRUE);
- Debug::print(Debug::Classes,0," Adding used class `%s' (3)\n", usedCd->name().data());
- instanceCd->addUsedClass(usedCd,md->name(),md->protection());
- usedCd->addUsedByClass(instanceCd,md->name(),md->protection());
- }
- }
- }
- }
- }
- }
- else
- {
- //printf("no members for class %s (%p)\n",masterCd->name().data(),masterCd);
- }
-}
-
-static void findBaseClassesForClass(
- EntryNav *rootNav,
- Definition *context,
- ClassDef *masterCd,
- ClassDef *instanceCd,
- FindBaseClassRelation_Mode mode,
- bool isArtificial,
- ArgumentList *actualArgs=0,
- QDict<int> *templateNames=0
- )
-{
- Entry *root = rootNav->entry();
- //if (masterCd->visited) return;
- masterCd->visited=TRUE;
- // The base class could ofcouse also be a non-nested class
- ArgumentList *formalArgs = masterCd->templateArguments();
- QListIterator<BaseInfo> bii(*root->extends);
- BaseInfo *bi=0;
- for (bii.toFirst();(bi=bii.current());++bii)
- {
- //printf("masterCd=%s bi->name='%s' #actualArgs=%d\n",
- // masterCd->localName().data(),bi->name.data(),actualArgs?(int)actualArgs->count():-1);
- bool delTempNames=FALSE;
- if (templateNames==0)
- {
- templateNames = getTemplateArgumentsInName(formalArgs,bi->name);
- delTempNames=TRUE;
- }
- BaseInfo tbi(bi->name,bi->prot,bi->virt);
- if (actualArgs) // substitute the formal template arguments of the base class
- {
- tbi.name = substituteTemplateArgumentsInString(bi->name,formalArgs,actualArgs);
- }
- //printf("bi->name=%s tbi.name=%s\n",bi->name.data(),tbi.name.data());
-
- if (mode==DocumentedOnly)
- {
- // find a documented base class in the correct scope
- if (!findClassRelation(rootNav,context,instanceCd,&tbi,templateNames,DocumentedOnly,isArtificial))
- {
- if (!Config_getBool("HIDE_UNDOC_RELATIONS"))
- {
- // no documented base class -> try to find an undocumented one
- findClassRelation(rootNav,context,instanceCd,&tbi,templateNames,Undocumented,isArtificial);
- }
- }
- }
- else if (mode==TemplateInstances)
- {
- findClassRelation(rootNav,context,instanceCd,&tbi,templateNames,TemplateInstances,isArtificial);
- }
- if (delTempNames)
- {
- delete templateNames;
- templateNames=0;
- }
- }
-}
-
-//----------------------------------------------------------------------
-
-static bool findTemplateInstanceRelation(Entry *root,
- Definition *context,
- ClassDef *templateClass,const QCString &templSpec,
- QDict<int> *templateNames,
- bool isArtificial)
-{
- Debug::print(Debug::Classes,0," derived from template %s with parameters %s\n",
- templateClass->name().data(),templSpec.data());
- //printf("findTemplateInstanceRelation(base=%s templSpec=%s templateNames=",
- // templateClass->name().data(),templSpec.data());
- //if (templateNames)
- //{
- // QDictIterator<int> qdi(*templateNames);
- // int *tempArgIndex;
- // for (;(tempArgIndex=qdi.current());++qdi)
- // {
- // printf("(%s->%d) ",qdi.currentKey(),*tempArgIndex);
- // }
- //}
- //printf("\n");
-
- bool existingClass = (templSpec ==
- tempArgListToString(templateClass->templateArguments())
- );
- if (existingClass) return TRUE;
-
- bool freshInstance=FALSE;
- ClassDef *instanceClass = templateClass->insertTemplateInstance(
- root->fileName,root->startLine,templSpec,freshInstance);
- if (isArtificial) instanceClass->setArtificial(TRUE);
- instanceClass->setLanguage(root->lang);
-
- if (freshInstance)
- {
- Debug::print(Debug::Classes,0," found fresh instance '%s'!\n",instanceClass->name().data());
- Doxygen::classSDict->append(instanceClass->name(),instanceClass);
- instanceClass->setTemplateBaseClassNames(templateNames);
-
- // search for new template instances caused by base classes of
- // instanceClass
- EntryNav *templateRootNav = g_classEntries.find(templateClass->name());
- if (templateRootNav)
- {
- bool unloadNeeded=FALSE;
- Entry *templateRoot = templateRootNav->entry();
- if (templateRoot==0) // not yet loaded
- {
- templateRootNav->loadEntry(g_storage);
- templateRoot = templateRootNav->entry();
- ASSERT(templateRoot!=0); // now it should really be loaded
- unloadNeeded=TRUE;
- }
-
- Debug::print(Debug::Classes,0," template root found %s templSpec=%s!\n",
- templateRoot->name.data(),templSpec.data());
- ArgumentList *templArgs = new ArgumentList;
- stringToArgumentList(templSpec,templArgs);
- findBaseClassesForClass(templateRootNav,context,templateClass,instanceClass,
- TemplateInstances,isArtificial,templArgs,templateNames);
-
- findUsedClassesForClass(templateRootNav,context,templateClass,instanceClass,
- isArtificial,templArgs,templateNames);
- delete templArgs;
-
- if (unloadNeeded) // still cleanup to do
- {
- templateRootNav->releaseEntry();
- }
- }
- else
- {
- Debug::print(Debug::Classes,0," no template root entry found!\n");
- // TODO: what happened if we get here?
- }
-
- //Debug::print(Debug::Classes,0," Template instance %s : \n",instanceClass->name().data());
- //ArgumentList *tl = templateClass->templateArguments();
- }
- else
- {
- Debug::print(Debug::Classes,0," instance already exists!\n");
- }
- return TRUE;
-}
-
-static bool isRecursiveBaseClass(const QCString &scope,const QCString &name)
-{
- QCString n=name;
- int index=n.find('<');
- if (index!=-1)
- {
- n=n.left(index);
- }
- bool result = rightScopeMatch(scope,n);
- return result;
-}
-
-/*! Searches for the end of a template in prototype \a s starting from
- * character position \a startPos. If the end was found the position
- * of the closing \> is returned, otherwise -1 is returned.
- *
- * Handles exotic cases such as
- * \code
- * Class<(id<0)>
- * Class<bits<<2>
- * Class<"<">
- * Class<'<'>
- * Class<(")<")>
- * \endcode
- */
-static int findEndOfTemplate(const QCString &s,int startPos)
-{
- // locate end of template
- int e=startPos;
- int brCount=1;
- int roundCount=0;
- int len = s.length();
- bool insideString=FALSE;
- bool insideChar=FALSE;
- char pc = 0;
- while (e<len && brCount!=0)
- {
- char c=s.at(e);
- switch(c)
- {
- case '<':
- if (!insideString && !insideChar)
- {
- if (e<len-1 && s.at(e+1)=='<')
- e++;
- else if (roundCount==0)
- brCount++;
- }
- break;
- case '>':
- if (!insideString && !insideChar)
- {
- if (e<len-1 && s.at(e+1)=='>')
- e++;
- else if (roundCount==0)
- brCount--;
- }
- break;
- case '(':
- if (!insideString && !insideChar)
- roundCount++;
- break;
- case ')':
- if (!insideString && !insideChar)
- roundCount--;
- break;
- case '"':
- if (!insideChar)
- {
- if (insideString && pc!='\\')
- insideString=FALSE;
- else
- insideString=TRUE;
- }
- break;
- case '\'':
- if (!insideString)
- {
- if (insideChar && pc!='\\')
- insideChar=FALSE;
- else
- insideChar=TRUE;
- }
- break;
- }
- pc = c;
- e++;
- }
- return brCount==0 ? e : -1;
-}
-
-static bool findClassRelation(
- EntryNav *rootNav,
- Definition *context,
- ClassDef *cd,
- BaseInfo *bi,
- QDict<int> *templateNames,
- FindBaseClassRelation_Mode mode,
- bool isArtificial
- )
-{
- //printf("findClassRelation(class=%s base=%s templateNames=",
- // cd->name().data(),bi->name.data());
- //if (templateNames)
- //{
- // QDictIterator<int> qdi(*templateNames);
- // int *tempArgIndex;
- // for (;(tempArgIndex=qdi.current());++qdi)
- // {
- // printf("(%s->%d) ",qdi.currentKey(),*tempArgIndex);
- // }
- //}
- //printf("\n");
-
- Entry *root = rootNav->entry();
-
- QCString biName=bi->name;
- bool explicitGlobalScope=FALSE;
- //printf("findClassRelation: biName=`%s'\n",biName.data());
- if (biName.left(2)=="::") // explicit global scope
- {
- biName=biName.right(biName.length()-2);
- explicitGlobalScope=TRUE;
- }
-
- EntryNav *parentNode=rootNav->parent();
- bool lastParent=FALSE;
- do // for each parent scope, starting with the largest scope
- // (in case of nested classes)
- {
- QCString scopeName= parentNode ? parentNode->name().data() : "";
- int scopeOffset=explicitGlobalScope ? 0 : scopeName.length();
- do // try all parent scope prefixes, starting with the largest scope
- {
- //printf("scopePrefix=`%s' biName=`%s'\n",
- // scopeName.left(scopeOffset).data(),biName.data());
-
- QCString baseClassName=biName;
- if (scopeOffset>0)
- {
- baseClassName.prepend(scopeName.left(scopeOffset)+"::");
- }
- //QCString stripped;
- //baseClassName=stripTemplateSpecifiersFromScope
- // (removeRedundantWhiteSpace(baseClassName),TRUE,
- // &stripped);
- MemberDef *baseClassTypeDef=0;
- QCString templSpec;
- ClassDef *baseClass=getResolvedClass(explicitGlobalScope ? Doxygen::globalScope : context,
- cd->getFileDef(),
- baseClassName,
- &baseClassTypeDef,
- &templSpec,
- mode==Undocumented,
- TRUE
- );
- //printf("baseClassName=%s baseClass=%p cd=%p explicitGlobalScope=%d\n",
- // baseClassName.data(),baseClass,cd,explicitGlobalScope);
- //printf(" scope=`%s' baseClassName=`%s' baseClass=%s templSpec=%s\n",
- // cd ? cd->name().data():"<none>",
- // baseClassName.data(),
- // baseClass?baseClass->name().data():"<none>",
- // templSpec.data()
- // );
- //if (baseClassName.left(root->name.length())!=root->name ||
- // baseClassName.at(root->name.length())!='<'
- // ) // Check for base class with the same name.
- // // If found then look in the outer scope for a match
- // // and prevent recursion.
- if (!isRecursiveBaseClass(rootNav->name(),baseClassName) || explicitGlobalScope)
- {
- Debug::print(
- Debug::Classes,0," class relation %s inherited/used by %s found (%s and %s) templSpec='%s'\n",
- baseClassName.data(),
- rootNav->name().data(),
- (bi->prot==Private)?"private":((bi->prot==Protected)?"protected":"public"),
- (bi->virt==Normal)?"normal":"virtual",
- templSpec.data()
- );
-
- int i=baseClassName.find('<');
- int si=baseClassName.findRev("::",i==-1 ? baseClassName.length() : i);
- if (si==-1) si=0;
- if (baseClass==0 && i!=-1)
- // base class has template specifiers
- {
- // TODO: here we should try to find the correct template specialization
- // but for now, we only look for the unspecializated base class.
- int e=findEndOfTemplate(baseClassName,i+1);
- //printf("baseClass==0 i=%d e=%d\n",i,e);
- if (e!=-1) // end of template was found at e
- {
- templSpec=removeRedundantWhiteSpace(baseClassName.mid(i,e-i));
- baseClassName=baseClassName.left(i)+baseClassName.right(baseClassName.length()-e);
- baseClass=getResolvedClass(explicitGlobalScope ? Doxygen::globalScope : context,
- cd->getFileDef(),
- baseClassName,
- &baseClassTypeDef,
- 0, //&templSpec,
- mode==Undocumented,
- TRUE
- );
- //printf("baseClass=%p -> baseClass=%s templSpec=%s\n",
- // baseClass,baseClassName.data(),templSpec.data());
- }
- }
- else if (baseClass && !templSpec.isEmpty()) // we have a known class, but also
- // know it is a template, so see if
- // we can also link to the explicit
- // instance (for instance if a class
- // derived from a template argument)
- {
- //printf("baseClass=%p templSpec=%s\n",baseClass,templSpec.data());
- ClassDef *templClass=getClass(baseClass->name()+templSpec);
- if (templClass)
- {
- // use the template instance instead of the template base.
- baseClass = templClass;
- templSpec.resize(0);
- }
- }
-
- //printf("cd=%p baseClass=%p\n",cd,baseClass);
- bool found=baseClass!=0 && (baseClass!=cd || mode==TemplateInstances);
- //printf("1. found=%d\n",found);
- if (!found && si!=-1)
- {
- QCString tmpTemplSpec;
- // replace any namespace aliases
- replaceNamespaceAliases(baseClassName,si);
- baseClass=getResolvedClass(explicitGlobalScope ? Doxygen::globalScope : context,
- cd->getFileDef(),
- baseClassName,
- &baseClassTypeDef,
- &tmpTemplSpec,
- mode==Undocumented,
- TRUE
- );
- found=baseClass!=0 && baseClass!=cd;
- if (found) templSpec = tmpTemplSpec;
- }
- //printf("2. found=%d\n",found);
-
- //printf("root->name=%s biName=%s baseClassName=%s\n",
- // root->name.data(),biName.data(),baseClassName.data());
- if (cd->isCSharp() && i!=-1) // C# generic -> add internal -g postfix
- {
- baseClassName+="-g";
- //templSpec.resize(0);
- }
-
- if (!found)
- {
- baseClass=findClassWithinClassContext(context,cd,baseClassName);
- //printf("findClassWithinClassContext(%s,%s)=%p\n",
- // cd->name().data(),baseClassName.data(),baseClass);
- found = baseClass!=0 && baseClass!=cd;
-
- }
- if (!found)
- {
- // for PHP the "use A\B as C" construct map class C to A::B, so we lookup
- // the class name also in the alias mapping.
- QCString *aliasName = Doxygen::namespaceAliasDict[baseClassName];
- if (aliasName) // see if it is indeed a class.
- {
- baseClass=getClass(*aliasName);
- found = baseClass!=0 && baseClass!=cd;
- }
- }
- bool isATemplateArgument = templateNames!=0 && templateNames->find(biName)!=0;
- // make templSpec canonical
- // warning: the following line doesn't work for Mixin classes (see bug 560623)
- // templSpec = getCanonicalTemplateSpec(cd, cd->getFileDef(), templSpec);
-
- //printf("3. found=%d\n",found);
- if (found)
- {
- Debug::print(Debug::Classes,0," Documented base class `%s' templSpec=%s\n",biName.data(),templSpec.isEmpty()?"":templSpec.data());
- // add base class to this class
-
- // if templSpec is not empty then we should "instantiate"
- // the template baseClass. A new ClassDef should be created
- // to represent the instance. To be able to add the (instantiated)
- // members and documentation of a template class
- // (inserted in that template class at a later stage),
- // the template should know about its instances.
- // the instantiation process, should be done in a recursive way,
- // since instantiating a template may introduce new inheritance
- // relations.
- if (!templSpec.isEmpty() && mode==TemplateInstances)
- {
- // if baseClass is actually a typedef then we should not
- // instantiate it, since typedefs are in a different namespace
- // see bug531637 for an example where this would otherwise hang
- // doxygen
- if (baseClassTypeDef==0)
- {
- //printf(" => findTemplateInstanceRelation: %p\n",baseClassTypeDef);
- findTemplateInstanceRelation(root,context,baseClass,templSpec,templateNames,isArtificial);
- }
- }
- else if (mode==DocumentedOnly || mode==Undocumented)
- {
- //printf(" => insert base class\n");
- QCString usedName;
- if (baseClassTypeDef || cd->isCSharp())
- {
- usedName=biName;
- //printf("***** usedName=%s templSpec=%s\n",usedName.data(),templSpec.data());
- }
- if (Config_getBool("SIP_SUPPORT")) bi->prot=Public;
- cd->insertBaseClass(baseClass,usedName,bi->prot,bi->virt,templSpec);
- // add this class as super class to the base class
- baseClass->insertSubClass(cd,bi->prot,bi->virt,templSpec);
- }
- return TRUE;
- }
- else if (mode==Undocumented && (scopeOffset==0 || isATemplateArgument))
- {
- Debug::print(Debug::Classes,0,
- " New undocumented base class `%s' baseClassName=%s templSpec=%s isArtificial=%d\n",
- biName.data(),baseClassName.data(),templSpec.data(),isArtificial
- );
- baseClass=0;
- if (isATemplateArgument)
- {
- baseClass=Doxygen::hiddenClasses->find(baseClassName);
- if (baseClass==0)
- {
- baseClass=new ClassDef(root->fileName,root->startLine,
- baseClassName,ClassDef::Class);
- Doxygen::hiddenClasses->append(baseClassName,baseClass);
- if (isArtificial) baseClass->setArtificial(TRUE);
- baseClass->setLanguage(root->lang);
- }
- }
- else
- {
- baseClass=Doxygen::classSDict->find(baseClassName);
- //printf("*** classDDict->find(%s)=%p biName=%s templSpec=%s\n",
- // baseClassName.data(),baseClass,biName.data(),templSpec.data());
- if (baseClass==0)
- {
- baseClass=new ClassDef(root->fileName,root->startLine,
- baseClassName,ClassDef::Class);
- Doxygen::classSDict->append(baseClassName,baseClass);
- if (isArtificial) baseClass->setArtificial(TRUE);
- baseClass->setLanguage(root->lang);
- }
- }
- // add base class to this class
- cd->insertBaseClass(baseClass,biName,bi->prot,bi->virt,templSpec);
- // add this class as super class to the base class
- baseClass->insertSubClass(cd,bi->prot,bi->virt,templSpec);
- // the undocumented base was found in this file
- baseClass->insertUsedFile(root->fileName);
- baseClass->setOuterScope(Doxygen::globalScope);
- return TRUE;
- }
- else
- {
- Debug::print(Debug::Classes,0," Base class `%s' not found\n",biName.data());
- }
- }
- else
- {
- if (mode!=TemplateInstances)
- {
- warn(root->fileName,root->startLine,
- "Detected potential recursive class relation "
- "between class %s and base class %s!\n",
- root->name.data(),baseClassName.data()
- );
- }
- // for mode==TemplateInstance this case is quite common and
- // indicates a relation between a template class and a template
- // instance with the same name.
- }
- if (scopeOffset==0)
- {
- scopeOffset=-1;
- }
- else if ((scopeOffset=scopeName.findRev("::",scopeOffset-1))==-1)
- {
- scopeOffset=0;
- }
- //printf("new scopeOffset=`%d'",scopeOffset);
- } while (scopeOffset>=0);
-
- if (parentNode==0)
- {
- lastParent=TRUE;
- }
- else
- {
- parentNode=parentNode->parent();
- }
- } while (lastParent);
-
- return FALSE;
-}
-
-//----------------------------------------------------------------------
-// Computes the base and super classes for each class in the tree
-
-static bool isClassSection(EntryNav *rootNav)
-{
- if ( !rootNav->name().isEmpty() )
- {
- if (rootNav->section() & Entry::COMPOUND_MASK)
- // is it a compound (class, struct, union, interface ...)
- {
- return TRUE;
- }
- else if (rootNav->section() & Entry::COMPOUNDDOC_MASK)
- // is it a documentation block with inheritance info.
- {
- rootNav->loadEntry(g_storage);
- Entry *root = rootNav->entry();
- bool extends = root->extends->count()>0;
- rootNav->releaseEntry();
- if (extends) return TRUE;
- }
- }
- return FALSE;
-}
-
-
-/*! Builds a dictionary of all entry nodes in the tree starting with \a root
- */
-static void findClassEntries(EntryNav *rootNav)
-{
- if (isClassSection(rootNav))
- {
- g_classEntries.insert(rootNav->name(),rootNav);
- }
- RECURSE_ENTRYTREE(findClassEntries,rootNav);
-}
-
-/*! Using the dictionary build by findClassEntries(), this
- * function will look for additional template specialization that
- * exists as inheritance relations only. These instances will be
- * added to the template they are derived from.
- */
-static void findInheritedTemplateInstances()
-{
- ClassSDict::Iterator cli(*Doxygen::classSDict);
- for (cli.toFirst();cli.current();++cli) cli.current()->visited=FALSE;
- QDictIterator<EntryNav> edi(g_classEntries);
- EntryNav *rootNav;
- for (;(rootNav=edi.current());++edi)
- {
- ClassDef *cd;
- // strip any anonymous scopes first
- QCString bName=stripAnonymousNamespaceScope(rootNav->name());
- bName=stripTemplateSpecifiersFromScope(bName);
- Debug::print(Debug::Classes,0," Inheritance: Class %s : \n",bName.data());
- if ((cd=getClass(bName)))
- {
- rootNav->loadEntry(g_storage);
- //printf("Class %s %d\n",cd->name().data(),root->extends->count());
- findBaseClassesForClass(rootNav,cd,cd,cd,TemplateInstances,FALSE);
- rootNav->releaseEntry();
- }
- }
-}
-
-static void findUsedTemplateInstances()
-{
- ClassSDict::Iterator cli(*Doxygen::classSDict);
- for (cli.toFirst();cli.current();++cli) cli.current()->visited=FALSE;
- QDictIterator<EntryNav> edi(g_classEntries);
- EntryNav *rootNav;
- for (;(rootNav=edi.current());++edi)
- {
- ClassDef *cd;
- // strip any anonymous scopes first
- QCString bName=stripAnonymousNamespaceScope(rootNav->name());
- bName=stripTemplateSpecifiersFromScope(bName);
- Debug::print(Debug::Classes,0," Usage: Class %s : \n",bName.data());
- if ((cd=getClass(bName)))
- {
- rootNav->loadEntry(g_storage);
- findUsedClassesForClass(rootNav,cd,cd,cd,TRUE);
- rootNav->releaseEntry();
- }
- }
-}
-
-static void computeClassRelations()
-{
- ClassSDict::Iterator cli(*Doxygen::classSDict);
- for (cli.toFirst();cli.current();++cli) cli.current()->visited=FALSE;
- QDictIterator<EntryNav> edi(g_classEntries);
- EntryNav *rootNav;
- for (;(rootNav=edi.current());++edi)
- {
- ClassDef *cd;
-
- rootNav->loadEntry(g_storage);
- Entry *root = rootNav->entry();
-
- // strip any anonymous scopes first
- QCString bName=stripAnonymousNamespaceScope(rootNav->name());
- bName=stripTemplateSpecifiersFromScope(bName);
- Debug::print(Debug::Classes,0," Relations: Class %s : \n",bName.data());
- if ((cd=getClass(bName)))
- {
- findBaseClassesForClass(rootNav,cd,cd,cd,DocumentedOnly,FALSE);
- }
- if ((cd==0 || (!cd->hasDocumentation() && !cd->isReference())) &&
- bName.right(2)!="::")
- {
- if (!root->name.isEmpty() && root->name.find('@')==-1 && // normal name
- (guessSection(root->fileName)==Entry::HEADER_SEC ||
- Config_getBool("EXTRACT_LOCAL_CLASSES")) && // not defined in source file
- protectionLevelVisible(root->protection) && // hidden by protection
- !Config_getBool("HIDE_UNDOC_CLASSES") // undocumented class are visible
- )
- warn_undoc(
- root->fileName,root->startLine,
- "warning: Compound %s is not documented.",
- root->name.data()
- );
- }
-
- rootNav->releaseEntry();
- }
-}
-
-static void computeTemplateClassRelations()
-{
- QDictIterator<EntryNav> edi(g_classEntries);
- EntryNav *rootNav;
- for (;(rootNav=edi.current());++edi)
- {
- rootNav->loadEntry(g_storage);
- Entry *root = rootNav->entry();
-
- QCString bName=stripAnonymousNamespaceScope(root->name);
- bName=stripTemplateSpecifiersFromScope(bName);
- ClassDef *cd=getClass(bName);
- // strip any anonymous scopes first
- QDict<ClassDef> *templInstances = 0;
- if (cd && (templInstances=cd->getTemplateInstances()))
- {
- Debug::print(Debug::Classes,0," Template class %s : \n",cd->name().data());
- QDictIterator<ClassDef> tdi(*templInstances);
- ClassDef *tcd;
- for (tdi.toFirst();(tcd=tdi.current());++tdi) // for each template instance
- {
- Debug::print(Debug::Classes,0," Template instance %s : \n",tcd->name().data());
- QCString templSpec = tdi.currentKey();
- ArgumentList *templArgs = new ArgumentList;
- stringToArgumentList(templSpec,templArgs);
- QList<BaseInfo> *baseList=root->extends;
- BaseInfo *bi=baseList->first();
- while (bi) // for each base class of the template
- {
- // check if the base class is a template argument
- BaseInfo tbi(bi->name,bi->prot,bi->virt);
- ArgumentList *tl = cd->templateArguments();
- if (tl)
- {
- QDict<int> *baseClassNames = tcd->getTemplateBaseClassNames();
- QDict<int> *templateNames = getTemplateArgumentsInName(tl,bi->name);
- // for each template name that we inherit from we need to
- // substitute the formal with the actual arguments
- QDict<int> *actualTemplateNames = new QDict<int>(17);
- actualTemplateNames->setAutoDelete(TRUE);
- QDictIterator<int> qdi(*templateNames);
- for (qdi.toFirst();qdi.current();++qdi)
- {
- int templIndex = *qdi.current();
- Argument *actArg = 0;
- if (templIndex<(int)templArgs->count())
- {
- actArg=templArgs->at(templIndex);
- }
- if (actArg!=0 &&
- baseClassNames!=0 &&
- baseClassNames->find(actArg->type)!=0 &&
- actualTemplateNames->find(actArg->type)==0
- )
- {
- actualTemplateNames->insert(actArg->type,new int(templIndex));
- }
- }
- delete templateNames;
-
- tbi.name = substituteTemplateArgumentsInString(bi->name,tl,templArgs);
- // find a documented base class in the correct scope
- if (!findClassRelation(rootNav,cd,tcd,&tbi,actualTemplateNames,DocumentedOnly,FALSE))
- {
- // no documented base class -> try to find an undocumented one
- findClassRelation(rootNav,cd,tcd,&tbi,actualTemplateNames,Undocumented,FALSE);
- }
- delete actualTemplateNames;
- }
- bi=baseList->next();
- }
- delete templArgs;
- } // class has no base classes
- }
-
- rootNav->releaseEntry();
- }
-}
-
-//-----------------------------------------------------------------------
-// compute the references (anchors in HTML) for each function in the file
-
-static void computeMemberReferences()
-{
- ClassSDict::Iterator cli(*Doxygen::classSDict);
- ClassDef *cd=0;
- for (cli.toFirst();(cd=cli.current());++cli)
- {
- cd->computeAnchors();
- }
- FileName *fn=Doxygen::inputNameList->first();
- while (fn)
- {
- FileDef *fd=fn->first();
- while (fd)
- {
- fd->computeAnchors();
- fd=fn->next();
- }
- fn=Doxygen::inputNameList->next();
- }
- NamespaceSDict::Iterator nli(*Doxygen::namespaceSDict);
- NamespaceDef *nd=0;
- for (nli.toFirst();(nd=nli.current());++nli)
- {
- nd->computeAnchors();
- }
- GroupSDict::Iterator gli(*Doxygen::groupSDict);
- GroupDef *gd;
- for (gli.toFirst();(gd=gli.current());++gli)
- {
- gd->computeAnchors();
- }
-}
-
-//----------------------------------------------------------------------
-
-static void addListReferences()
-{
- MemberNameSDict::Iterator mnli(*Doxygen::memberNameSDict);
- MemberName *mn=0;
- for (mnli.toFirst();(mn=mnli.current());++mnli)
- {
- MemberNameIterator mni(*mn);
- MemberDef *md=0;
- for (mni.toFirst();(md=mni.current());++mni)
- {
- md->visited=FALSE;
- }
- }
- MemberNameSDict::Iterator fnli(*Doxygen::functionNameSDict);
- for (fnli.toFirst();(mn=fnli.current());++fnli)
- {
- MemberNameIterator mni(*mn);
- MemberDef *md=0;
- for (mni.toFirst();(md=mni.current());++mni)
- {
- md->visited=FALSE;
- }
- }
-
- ClassSDict::Iterator cli(*Doxygen::classSDict);
- ClassDef *cd=0;
- for (cli.toFirst();(cd=cli.current());++cli)
- {
- cd->addListReferences();
- }
- FileName *fn=Doxygen::inputNameList->first();
- while (fn)
- {
- FileDef *fd=fn->first();
- while (fd)
- {
- fd->addListReferences();
- fd=fn->next();
- }
- fn=Doxygen::inputNameList->next();
- }
- NamespaceSDict::Iterator nli(*Doxygen::namespaceSDict);
- NamespaceDef *nd=0;
- for (nli.toFirst();(nd=nli.current());++nli)
- {
- nd->addListReferences();
- }
- GroupSDict::Iterator gli(*Doxygen::groupSDict);
- GroupDef *gd;
- for (gli.toFirst();(gd=gli.current());++gli)
- {
- gd->addListReferences();
- }
- PageSDict::Iterator pdi(*Doxygen::pageSDict);
- PageDef *pd=0;
- for (pdi.toFirst();(pd=pdi.current());++pdi)
- {
- QCString name = pd->getOutputFileBase();
- if (pd->getGroupDef())
- {
- name = pd->getGroupDef()->getOutputFileBase();
- }
- {
- LockingPtr< QList<ListItemInfo> > xrefItems = pd->xrefListItems();
- addRefItem(xrefItems.pointer(),
- name,
- theTranslator->trPage(TRUE,TRUE),
- name,pd->title(),0);
- }
- }
- DirSDict::Iterator ddi(*Doxygen::directories);
- DirDef *dd = 0;
- for (ddi.toFirst();(dd=ddi.current());++ddi)
- {
- QCString name = dd->getOutputFileBase();
- //if (dd->getGroupDef())
- //{
- // name = dd->getGroupDef()->getOutputFileBase();
- //}
- LockingPtr< QList<ListItemInfo> > xrefItems = dd->xrefListItems();
- addRefItem(xrefItems.pointer(),
- name,
- theTranslator->trDir(TRUE,TRUE),
- name,dd->displayName(),0);
- }
-}
-
-//----------------------------------------------------------------------
-
-static void generateXRefPages()
-{
- QDictIterator<RefList> di(*Doxygen::xrefLists);
- RefList *rl;
- for (di.toFirst();(rl=di.current());++di)
- {
- rl->generatePage();
- }
-}
-
-//----------------------------------------------------------------------
-// Copy the documentation in entry `root' to member definition `md' and
-// set the function declaration of the member to `funcDecl'. If the boolean
-// over_load is set the standard overload text is added.
-
-static void addMemberDocs(EntryNav *rootNav,
- MemberDef *md, const char *funcDecl,
- ArgumentList *al,
- bool over_load,
- NamespaceSDict *
- )
-{
- Entry *root = rootNav->entry();
- //printf("addMemberDocs: `%s'::`%s' `%s' funcDecl=`%s' mSpec=%d\n",
- // root->parent->name.data(),md->name().data(),md->argsString(),funcDecl,root->spec);
- QCString fDecl=funcDecl;
- // strip extern specifier
- fDecl.stripPrefix("extern ");
- md->setDefinition(fDecl);
- md->enableCallGraph(root->callGraph);
- md->enableCallerGraph(root->callerGraph);
- ClassDef *cd=md->getClassDef();
- NamespaceDef *nd=md->getNamespaceDef();
- QCString fullName;
- if (cd)
- fullName = cd->name();
- else if (nd)
- fullName = nd->name();
-
- if (!fullName.isEmpty()) fullName+="::";
- fullName+=md->name();
- FileDef *rfd=rootNav->fileDef();
-
- // TODO determine scope based on root not md
- Definition *rscope = md->getOuterScope();
-
- LockingPtr<ArgumentList> mdAl = md->argumentList();
- if (al)
- {
- //printf("merging arguments (1) docs=%d\n",root->doc.isEmpty());
- mergeArguments(mdAl.pointer(),al,!root->doc.isEmpty());
- }
- else
- {
- if (
- matchArguments2( md->getOuterScope(), md->getFileDef(), mdAl.pointer(),
- rscope,rfd,root->argList,
- TRUE
- )
- )
- {
- //printf("merging arguments (2)\n");
- mergeArguments(mdAl.pointer(),root->argList,!root->doc.isEmpty());
- }
- }
- if (over_load) // the \overload keyword was used
- {
- QCString doc=getOverloadDocs();
- if (!root->doc.isEmpty())
- {
- doc+="<p>";
- doc+=root->doc;
- }
- md->setDocumentation(doc,root->docFile,root->docLine);
- md->setInbodyDocumentation(root->inbodyDocs,root->inbodyFile,root->inbodyLine);
- md->setDocsForDefinition(!root->proto);
- }
- else
- {
- //printf("overwrite!\n");
- md->setDocumentation(root->doc,root->docFile,root->docLine);
- md->setDocsForDefinition(!root->proto);
-
- //printf("overwrite!\n");
- md->setBriefDescription(root->brief,root->briefFile,root->briefLine);
-
- if (
- (md->inbodyDocumentation().isEmpty() ||
- !rootNav->parent()->name().isEmpty()
- ) && !root->inbodyDocs.isEmpty()
- )
- {
- md->setInbodyDocumentation(root->inbodyDocs,root->inbodyFile,root->inbodyLine);
- }
- }
-
- //printf("initializer: '%s'(isEmpty=%d) '%s'(isEmpty=%d)\n",
- // md->initializer().data(),md->initializer().isEmpty(),
- // root->initializer.data(),root->initializer.isEmpty()
- // );
- if (md->initializer().isEmpty() && !root->initializer.isEmpty())
- {
- //printf("setInitializer\n");
- md->setInitializer(root->initializer);
- }
-
- md->setMaxInitLines(root->initLines);
-
- if (rfd)
- {
- if ((md->getStartBodyLine()==-1 && root->bodyLine!=-1)
- )
- {
- //printf("Setting new body segment [%d,%d]\n",root->bodyLine,root->endBodyLine);
- md->setBodySegment(root->bodyLine,root->endBodyLine);
- md->setBodyDef(rfd);
- }
-
- md->setRefItems(root->sli);
- }
-
- md->enableCallGraph(md->hasCallGraph() || root->callGraph);
- md->enableCallerGraph(md->hasCallerGraph() || root->callerGraph);
-
- md->mergeMemberSpecifiers(root->spec);
- md->addSectionsToDefinition(root->anchors);
- addMemberToGroups(root,md);
- if (cd) cd->insertUsedFile(root->fileName);
- //printf("root->mGrpId=%d\n",root->mGrpId);
- if (root->mGrpId!=-1)
- {
- if (md->getMemberGroupId()!=-1)
- {
- if (md->getMemberGroupId()!=root->mGrpId)
- {
- warn(
- root->fileName,root->startLine,
- "warning: member %s belongs to two different groups. The second "
- "one found here will be ignored.",
- md->name().data()
- );
- }
- }
- else // set group id
- {
- //printf("setMemberGroupId=%d md=%s\n",root->mGrpId,md->name().data());
- md->setMemberGroupId(root->mGrpId);
- }
- }
-}
-
-//----------------------------------------------------------------------
-// find a class definition given the scope name and (optionally) a
-// template list specifier
-
-static ClassDef *findClassDefinition(FileDef *fd,NamespaceDef *nd,
- const char *scopeName)
-{
- ClassDef *tcd = getResolvedClass(nd,fd,scopeName,0,0,TRUE,TRUE);
- return tcd;
-}
-
-
-//----------------------------------------------------------------------
-// Adds the documentation contained in `root' to a global function
-// with name `name' and argument list `args' (for overloading) and
-// function declaration `decl' to the corresponding member definition.
-
-static bool findGlobalMember(EntryNav *rootNav,
- const QCString &namespaceName,
- const char *name,
- const char *tempArg,
- const char *,
- const char *decl)
-{
- Entry *root = rootNav->entry();
- Debug::print(Debug::FindMembers,0,
- "2. findGlobalMember(namespace=%s,name=%s,tempArg=%s,decl=%s)\n",
- namespaceName.data(),name,tempArg,decl);
- QCString n=name;
- if (n.isEmpty()) return FALSE;
- if (n.find("::")!=-1) return FALSE; // skip undefined class members
- MemberName *mn=Doxygen::functionNameSDict->find(n+tempArg); // look in function dictionary
- if (mn==0)
- {
- mn=Doxygen::functionNameSDict->find(n); // try without template arguments
- }
- if (mn) // function name defined
- {
- Debug::print(Debug::FindMembers,0,"3. Found function scope\n");
- //int count=0;
- MemberNameIterator mni(*mn);
- MemberDef *md;
- bool found=FALSE;
- for (mni.toFirst();(md=mni.current()) && !found;++mni)
- {
- NamespaceDef *nd=md->getNamespaceDef();
-
- //printf("Namespace namespaceName=%s nd=%s\n",
- // namespaceName.data(),nd ? nd->name().data() : "<none>");
-
- FileDef *fd=rootNav->fileDef();
- //printf("File %s\n",fd ? fd->name().data() : "<none>");
- NamespaceSDict *nl = fd ? fd->getUsedNamespaces() : 0;
- //SDict<Definition> *cl = fd ? fd->getUsedClasses() : 0;
- //printf("NamespaceList %p\n",nl);
-
- // search in the list of namespaces that are imported via a
- // using declaration
- bool viaUsingDirective = nl && nd && nl->find(nd->qualifiedName())!=0;
-
- if ((namespaceName.isEmpty() && nd==0) || // not in a namespace
- (nd && nd->name()==namespaceName) || // or in the same namespace
- viaUsingDirective // member in `using' namespace
- )
- {
- Debug::print(Debug::FindMembers,0,"4. Try to add member `%s' to scope `%s'\n",
- md->name().data(),namespaceName.data());
- QCString nsName = nd ? nd->name().data() : "";
-
- NamespaceDef *rnd = 0;
- if (!namespaceName.isEmpty()) rnd = Doxygen::namespaceSDict->find(namespaceName);
-
- LockingPtr<ArgumentList> mdAl = md->argumentList();
- bool matching=
- (mdAl==0 && root->argList->count()==0) ||
- md->isVariable() || md->isTypedef() || /* in case of function pointers */
- matchArguments2(md->getOuterScope(),md->getFileDef(),mdAl.pointer(),
- rnd ? rnd : Doxygen::globalScope,fd,root->argList,
- FALSE);
-
- // for template members we need to check if the number of
- // template arguments is the same, otherwise we are dealing with
- // different functions.
- if (matching && root->tArgLists)
- {
- LockingPtr<ArgumentList> mdTempl = md->templateArguments();
- if (mdTempl!=0)
- {
- if (root->tArgLists->getLast()->count()!=mdTempl->count())
- {
- matching=FALSE;
- }
- }
- }
-
-
- //printf("%s<->%s\n",
- // argListToString(md->argumentList()).data(),
- // argListToString(root->argList).data());
-
- // for static members we also check if the comment block was found in
- // the same file. This is needed because static members with the same
- // name can be in different files. Thus it would be wrong to just
- // put the comment block at the first syntactically matching member.
- if (matching && md->isStatic() &&
- md->getDefFileName()!=root->fileName &&
- mn->count()>1)
- {
- matching = FALSE;
- }
-
- if (matching) // add docs to the member
- {
- Debug::print(Debug::FindMembers,0,"5. Match found\n");
- addMemberDocs(rootNav,md,decl,root->argList,FALSE);
- found=TRUE;
- }
- }
- }
- if (!found && root->relatesType != Duplicate) // no match
- {
- QCString fullFuncDecl=decl;
- if (root->argList) fullFuncDecl+=argListToString(root->argList,TRUE);
- QCString warnMsg =
- QCString("warning: no matching file member found for \n")+substitute(fullFuncDecl,"%","%%");
- if (mn->count()>0)
- {
- warnMsg+="Possible candidates:\n";
- for (mni.toFirst();(md=mni.current());++mni)
- {
- warnMsg+=" ";
- warnMsg+=substitute(md->declaration(),"%","%%");
- warnMsg+='\n';
- }
- }
- warn(root->fileName,root->startLine,warnMsg);
- }
- }
- else // got docs for an undefined member!
- {
- if (root->type!="friend class" &&
- root->type!="friend struct" &&
- root->type!="friend union" &&
- (!Config_getBool("TYPEDEF_HIDES_STRUCT") ||
- root->type.find("typedef ")==-1)
- )
- {
- warn(root->fileName,root->startLine,
- "warning: documented function `%s' was not declared or defined.",decl
- );
- }
- }
- return TRUE;
-}
-
-static bool isSpecialization(
- const QList<ArgumentList> &srcTempArgLists,
- const QList<ArgumentList> &dstTempArgLists
- )
-{
- QListIterator<ArgumentList> srclali(srcTempArgLists);
- QListIterator<ArgumentList> dstlali(dstTempArgLists);
- for (;srclali.current();++srclali,++dstlali)
- {
- ArgumentList *sal = srclali.current();
- ArgumentList *dal = dstlali.current();
- if (!(sal && dal && sal->count()==dal->count())) return TRUE;
- }
- return FALSE;
-}
-
-
-static QCString substituteTemplatesInString(
- const QList<ArgumentList> &srcTempArgLists,
- const QList<ArgumentList> &dstTempArgLists,
- ArgumentList *funcTempArgList, // can be used to match template specializations
- const QCString &src
- )
-{
- QCString dst;
- QRegExp re( "[A-Za-z_][A-Za-z_0-9]*");
- //printf("type=%s\n",sa->type.data());
- int i,p=0,l;
- while ((i=re.match(src,p,&l))!=-1) // for each word in srcType
- {
- bool found=FALSE;
- dst+=src.mid(p,i-p);
- QCString name=src.mid(i,l);
-
- QListIterator<ArgumentList> srclali(srcTempArgLists);
- QListIterator<ArgumentList> dstlali(dstTempArgLists);
- for (;srclali.current() && !found;++srclali,++dstlali)
- {
- ArgumentListIterator tsali(*srclali.current());
- ArgumentListIterator tdali(*dstlali.current());
- Argument *tsa =0,*tda=0, *fa=0;
- if (funcTempArgList)
- {
- fa=funcTempArgList->first();
- }
-
- for (tsali.toFirst();(tsa=tsali.current()) && !found;++tsali)
- {
- tda = tdali.current();
- //if (tda) printf("tsa=%s|%s tda=%s|%s\n",
- // tsa->type.data(),tsa->name.data(),
- // tda->type.data(),tda->name.data());
- if (name==tsa->name)
- {
- if (tda && tda->name.isEmpty())
- {
- int vc=0;
- if (tda->type.left(6)=="class ") vc=6;
- else if (tda->type.left(9)=="typename ") vc=9;
- if (vc>0) // convert type=="class T" to type=="class" name=="T"
- {
- tda->name = tda->type.mid(vc);
- tda->type = tda->type.left(vc-1);
- }
- }
- if (tda && !tda->name.isEmpty())
- {
- name=tda->name; // substitute
- found=TRUE;
- }
- else if (fa)
- {
- name=fa->type;
- found=TRUE;
- }
- }
- if (tda)
- ++tdali;
- else if (fa)
- fa=funcTempArgList->next();
- }
- //printf(" srcList='%s' dstList='%s faList='%s'\n",
- // argListToString(srclali.current()).data(),
- // argListToString(dstlali.current()).data(),
- // funcTempArgList ? argListToString(funcTempArgList).data() : "<none>");
- }
- dst+=name;
- p=i+l;
- }
- dst+=src.right(src.length()-p);
- //printf(" substituteTemplatesInString(%s)=%s\n",
- // src.data(),dst.data());
- return dst;
-}
-
-static void substituteTemplatesInArgList(
- const QList<ArgumentList> &srcTempArgLists,
- const QList<ArgumentList> &dstTempArgLists,
- ArgumentList *src,
- ArgumentList *dst,
- ArgumentList *funcTempArgs = 0
- )
-{
- ArgumentListIterator sali(*src);
- Argument *sa=0;
- Argument *da=dst->first();
-
- for (sali.toFirst();(sa=sali.current());++sali) // for each member argument
- {
- QCString dstType = substituteTemplatesInString(
- srcTempArgLists,dstTempArgLists,funcTempArgs,
- sa->type);
- QCString dstArray = substituteTemplatesInString(
- srcTempArgLists,dstTempArgLists,funcTempArgs,
- sa->array);
- if (da==0)
- {
- da=new Argument(*sa);
- dst->append(da);
- da->type=dstType;
- da->array=dstArray;
- da=0;
- }
- else
- {
- da->type=dstType;
- da->type=dstArray;
- da=dst->next();
- }
- }
- dst->constSpecifier = src->constSpecifier;
- dst->volatileSpecifier = src->volatileSpecifier;
- dst->pureSpecifier = src->pureSpecifier;
- //printf("substituteTemplatesInArgList: replacing %s with %s\n",
- // argListToString(src).data(),argListToString(dst).data()
- // );
-}
-
-
-
-/*! This function tries to find a member (in a documented class/file/namespace)
- * that corresponds to the function/variable declaration given in \a funcDecl.
- *
- * The boolean \a overloaded is used to specify whether or not a standard
- * overload documentation line should be generated.
- *
- * The boolean \a isFunc is a hint that indicates that this is a function
- * instead of a variable or typedef.
- */
-static void findMember(EntryNav *rootNav,
- QCString funcDecl,
- bool overloaded,
- bool isFunc
- )
-{
- Entry *root = rootNav->entry();
-
- Debug::print(Debug::FindMembers,0,
- "findMember(root=%p,funcDecl=`%s',related=`%s',overload=%d,"
- "isFunc=%d mGrpId=%d tArgList=%p (#=%d) "
- "spec=%d lang=%x\n",
- root,funcDecl.data(),root->relates.data(),overloaded,isFunc,root->mGrpId,
- root->tArgLists,root->tArgLists ? root->tArgLists->count() : 0,
- root->spec,root->lang
- );
-
- QCString scopeName;
- QCString className;
- QCString namespaceName;
- QCString funcType;
- QCString funcName;
- QCString funcArgs;
- QCString funcTempList;
- QCString exceptions;
- QCString funcSpec;
- bool isRelated=FALSE;
- bool isMemberOf=FALSE;
- bool isFriend=FALSE;
- bool done;
- do
- {
- done=TRUE;
- if (funcDecl.stripPrefix("friend ")) // treat friends as related members
- {
- isFriend=TRUE;
- done=FALSE;
- }
- if (funcDecl.stripPrefix("inline "))
- {
- root->spec|=Entry::Inline;
- done=FALSE;
- }
- if (funcDecl.stripPrefix("explicit "))
- {
- root->spec|=Entry::Explicit;
- done=FALSE;
- }
- if (funcDecl.stripPrefix("mutable "))
- {
- root->spec|=Entry::Mutable;
- done=FALSE;
- }
- if (funcDecl.stripPrefix("virtual "))
- {
- done=FALSE;
- }
- } while (!done);
-
- // delete any ; from the function declaration
- int sep;
- while ((sep=funcDecl.find(';'))!=-1)
- {
- funcDecl=(funcDecl.left(sep)+funcDecl.right(funcDecl.length()-sep-1)).stripWhiteSpace();
- }
-
- // make sure the first character is a space to simplify searching.
- if (!funcDecl.isEmpty() && funcDecl[0]!=' ') funcDecl.prepend(" ");
-
- // remove some superfluous spaces
- funcDecl= substitute(
- substitute(
- substitute(funcDecl,"~ ","~"),
- ":: ","::"
- ),
- " ::","::"
- ).stripWhiteSpace();
-
- //printf("funcDecl=`%s'\n",funcDecl.data());
- if (isFriend && funcDecl.left(6)=="class ")
- {
- //printf("friend class\n");
- funcDecl=funcDecl.right(funcDecl.length()-6);
- funcName = funcDecl.copy();
- }
- else if (isFriend && funcDecl.left(7)=="struct ")
- {
- funcDecl=funcDecl.right(funcDecl.length()-7);
- funcName = funcDecl.copy();
- }
- else
- {
- // extract information from the declarations
- parseFuncDecl(funcDecl,root->lang==SrcLangExt_ObjC,scopeName,funcType,funcName,
- funcArgs,funcTempList,exceptions
- );
- }
- //printf("scopeName=`%s' funcType=`%s' funcName=`%s' funcArgs=`%s'\n",
- // scopeName.data(),funcType.data(),funcName.data(),funcArgs.data());
-
- // the class name can also be a namespace name, we decide this later.
- // if a related class name is specified and the class name could
- // not be derived from the function declaration, then use the
- // related field.
- //printf("scopeName=`%s' className=`%s' namespaceName=`%s'\n",
- // scopeName.data(),className.data(),namespaceName.data());
- if (!root->relates.isEmpty())
- { // related member, prefix user specified scope
- isRelated=TRUE;
- isMemberOf=(root->relatesType == MemberOf);
- if (getClass(root->relates)==0 && !scopeName.isEmpty())
- {
- scopeName= mergeScopes(scopeName,root->relates);
- }
- else
- {
- scopeName = root->relates;
- }
- }
-
- if (root->relates.isEmpty() && rootNav->parent() &&
- ((rootNav->parent()->section()&Entry::SCOPE_MASK) ||
- (rootNav->parent()->section()==Entry::OBJCIMPL_SEC)
- ) &&
- !rootNav->parent()->name().isEmpty()) // see if we can combine scopeName
- // with the scope in which it was found
- {
- QCString joinedName = rootNav->parent()->name()+"::"+scopeName;
- if (!scopeName.isEmpty() &&
- (getClass(joinedName) || Doxygen::namespaceSDict->find(joinedName)))
- {
- scopeName = joinedName;
- }
- else
- {
- scopeName = mergeScopes(rootNav->parent()->name(),scopeName);
- }
- }
- else // see if we can prefix a namespace or class that is used from the file
- {
- FileDef *fd=rootNav->fileDef();
- if (fd)
- {
- NamespaceSDict *fnl = fd->getUsedNamespaces();
- if (fnl)
- {
- QCString joinedName;
- NamespaceDef *fnd;
- NamespaceSDict::Iterator nsdi(*fnl);
- for (nsdi.toFirst();(fnd=nsdi.current());++nsdi)
- {
- joinedName = fnd->name()+"::"+scopeName;
- if (Doxygen::namespaceSDict->find(joinedName))
- {
- scopeName=joinedName;
- break;
- }
- }
- }
- }
- }
- scopeName=stripTemplateSpecifiersFromScope(
- removeRedundantWhiteSpace(scopeName),FALSE,&funcSpec);
-
- // funcSpec contains the last template specifiers of the given scope.
- // If this method does not have any template arguments or they are
- // empty while funcSpec is not empty we assume this is a
- // specialization of a method. If not, we clear the funcSpec and treat
- // this as a normal method of a template class.
- if (!(root->tArgLists &&
- root->tArgLists->count()>0 &&
- root->tArgLists->first()->count()==0
- )
- )
- {
- funcSpec.resize(0);
- }
-
- // split scope into a namespace and a class part
- extractNamespaceName(scopeName,className,namespaceName,TRUE);
- //printf("scopeName=`%s' className=`%s' namespaceName=`%s'\n",
- // scopeName.data(),className.data(),namespaceName.data());
-
- //namespaceName=removeAnonymousScopes(namespaceName);
- if (namespaceName.find('@')!=-1) return; // skip stuff in anonymous namespace...
-
- //printf("namespaceName=`%s' className=`%s'\n",namespaceName.data(),className.data());
- // merge class and namespace scopes again
- scopeName.resize(0);
- if (!namespaceName.isEmpty())
- {
- if (className.isEmpty())
- {
- scopeName=namespaceName;
- }
- else if (!root->relates.isEmpty() || // relates command with explicit scope
- !getClass(className)) // class name only exists in a namespace
- {
- scopeName=namespaceName+"::"+className;
- }
- else
- {
- scopeName=className;
- }
- }
- else if (!className.isEmpty())
- {
- scopeName=className;
- }
- //printf("new scope=`%s'\n",scopeName.data());
-
- QCString tempScopeName=scopeName;
- ClassDef *cd=getClass(scopeName);
- if (cd)
- {
- if (root->tArgLists) root->tArgLists->first();
- if (funcSpec.isEmpty())
- {
- tempScopeName=cd->qualifiedNameWithTemplateParameters(root->tArgLists);
- }
- else
- {
- tempScopeName=scopeName+funcSpec;
- }
- }
- //printf("scopeName=%s cd=%p root->tArgLists=%p result=%s\n",
- // scopeName.data(),cd,root->tArgLists,tempScopeName.data());
-
- //printf("scopeName=`%s' className=`%s'\n",scopeName.data(),className.data());
- // rebuild the function declaration (needed to get the scope right).
- if (!scopeName.isEmpty() && !isRelated && !isFriend && !Config_getBool("HIDE_SCOPE_NAMES"))
- {
- if (!funcType.isEmpty())
- {
- if (isFunc) // a function -> we use argList for the arguments
- {
- funcDecl=funcType+" "+tempScopeName+"::"+funcName+funcTempList;
- }
- else
- {
- funcDecl=funcType+" "+tempScopeName+"::"+funcName+funcArgs;
- }
- }
- else
- {
- if (isFunc) // a function => we use argList for the arguments
- {
- funcDecl=tempScopeName+"::"+funcName+funcTempList;
- }
- else // variable => add `argument' list
- {
- funcDecl=tempScopeName+"::"+funcName+funcArgs;
- }
- }
- }
- else // build declaration without scope
- {
- if (!funcType.isEmpty()) // but with a type
- {
- if (isFunc) // function => omit argument list
- {
- funcDecl=funcType+" "+funcName+funcTempList;
- }
- else // variable => add `argument' list
- {
- funcDecl=funcType+" "+funcName+funcArgs;
- }
- }
- else // no type
- {
- if (isFunc)
- {
- funcDecl=funcName+funcTempList;
- }
- else
- {
- funcDecl=funcName+funcArgs;
- }
- }
- }
-
- if (funcType=="template class" && !funcTempList.isEmpty())
- return; // ignore explicit template instantiations
-
- Debug::print(Debug::FindMembers,0,
- "findMember() Parse results:\n"
- " namespaceName=`%s'\n"
- " className=`%s`\n"
- " funcType=`%s'\n"
- " funcSpec=`%s'\n"
- " funcName=`%s'\n"
- " funcArgs=`%s'\n"
- " funcTempList=`%s'\n"
- " funcDecl=`%s'\n"
- " related=`%s'\n"
- " exceptions=`%s'\n"
- " isRelated=%d\n"
- " isMemberOf=%d\n"
- " isFriend=%d\n"
- " isFunc=%d\n\n",
- namespaceName.data(),className.data(),
- funcType.data(),funcSpec.data(),funcName.data(),funcArgs.data(),funcTempList.data(),
- funcDecl.data(),root->relates.data(),exceptions.data(),isRelated,isMemberOf,isFriend,
- isFunc
- );
-
- MemberName *mn=0;
- if (!funcName.isEmpty()) // function name is valid
- {
- Debug::print(Debug::FindMembers,0,
- "1. funcName=`%s'\n",funcName.data());
- if (funcName.left(9)=="operator ") // strip class scope from cast operator
- {
- funcName = substitute(funcName,className+"::","");
- }
- if (!funcTempList.isEmpty()) // try with member specialization
- {
- mn=Doxygen::memberNameSDict->find(funcName+funcTempList);
- }
- if (mn==0) // try without specialization
- {
- mn=Doxygen::memberNameSDict->find(funcName);
- }
- if (!isRelated && mn) // function name already found
- {
- Debug::print(Debug::FindMembers,0,
- "2. member name exists (%d members with this name)\n",mn->count());
- if (!className.isEmpty()) // class name is valid
- {
- if (funcSpec.isEmpty()) // not a member specialization
- {
- int count=0;
- int noMatchCount=0;
- MemberNameIterator mni(*mn);
- MemberDef *md;
- bool memFound=FALSE;
- for (mni.toFirst();!memFound && (md=mni.current());++mni)
- {
- ClassDef *cd=md->getClassDef();
- Debug::print(Debug::FindMembers,0,
- "3. member definition found, "
- "scope needed=`%s' scope=`%s' args=`%s' fileName=%s\n",
- scopeName.data(),cd ? cd->name().data() : "<none>",
- md->argsString(),
- root->fileName.data());
- //printf("Member %s (member scopeName=%s) (this scopeName=%s) classTempList=%s\n",md->name().data(),cd->name().data(),scopeName.data(),classTempList.data());
- FileDef *fd=rootNav->fileDef();
- NamespaceDef *nd=0;
- if (!namespaceName.isEmpty()) nd=getResolvedNamespace(namespaceName);
-
- //printf("scopeName %s->%s\n",scopeName.data(),
- // stripTemplateSpecifiersFromScope(scopeName,FALSE).data());
-
- ClassDef *tcd=findClassDefinition(fd,nd,scopeName);
- if (tcd==0 && stripAnonymousNamespaceScope(cd->name())==scopeName)
- {
- // don't be fooled by anonymous scopes
- tcd=cd;
- }
- //printf("Looking for %s inside nd=%s result=%p (%s) cd=%p\n",
- // scopeName.data(),nd?nd->name().data():"<none>",tcd,tcd?tcd->name().data():"",cd);
-
- if (cd && tcd==cd) // member's classes match
- {
- Debug::print(Debug::FindMembers,0,
- "4. class definition %s found\n",cd->name().data());
-
- // get the template parameter lists found at the member declaration
- QList<ArgumentList> declTemplArgs;
- cd->getTemplateParameterLists(declTemplArgs);
- LockingPtr<ArgumentList> templAl = md->templateArguments();
- if (templAl!=0)
- {
- declTemplArgs.append(templAl.pointer());
- }
-
- // get the template parameter lists found at the member definition
- QList<ArgumentList> *defTemplArgs = root->tArgLists;
- //printf("defTemplArgs=%p\n",defTemplArgs);
-
- // do we replace the decl argument lists with the def argument lists?
- bool substDone=FALSE;
- ArgumentList *argList=0;
-
- /* substitute the occurrences of class template names in the
- * argument list before matching
- */
- LockingPtr<ArgumentList> mdAl = md->argumentList();
- if (declTemplArgs.count()>0 && defTemplArgs &&
- declTemplArgs.count()==defTemplArgs->count() &&
- mdAl.pointer()
- )
- {
- /* the function definition has template arguments
- * and the class definition also has template arguments, so
- * we must substitute the template names of the class by that
- * of the function definition before matching.
- */
- argList = new ArgumentList;
- substituteTemplatesInArgList(declTemplArgs,*defTemplArgs,
- mdAl.pointer(),argList);
-
- substDone=TRUE;
- }
- else /* no template arguments, compare argument lists directly */
- {
- argList = mdAl.pointer();
- }
-
- Debug::print(Debug::FindMembers,0,
- "5. matching `%s'<=>`%s' className=%s namespaceName=%s\n",
- argListToString(argList,TRUE).data(),argListToString(root->argList,TRUE).data(),
- className.data(),namespaceName.data()
- );
-
- bool matching=
- md->isVariable() || md->isTypedef() || // needed for function pointers
- (mdAl.pointer()==0 && root->argList->count()==0) ||
- matchArguments2(
- md->getClassDef(),md->getFileDef(),argList,
- cd,fd,root->argList,
- TRUE);
-
- Debug::print(Debug::FindMembers,0,
- "6. match results of matchArguments2 = %d\n",matching);
-
- if (substDone) // found a new argument list
- {
- if (matching) // replace member's argument list
- {
- md->setDefinitionTemplateParameterLists(root->tArgLists);
- md->setArgumentList(argList); // new owner of the list => no delete
- }
- else // no match
- {
- if (!funcTempList.isEmpty() &&
- isSpecialization(declTemplArgs,*defTemplArgs))
- {
- // check if we are dealing with a partial template
- // specialization. In this case we add it to the class
- // even though the member arguments do not match.
-
- // TODO: copy other aspects?
- root->protection=md->protection(); // copy protection level
- addMethodToClass(rootNav,cd,md->name(),isFriend);
- return;
- }
- delete argList;
- }
- }
- if (matching)
- {
- addMemberDocs(rootNav,md,funcDecl,0,overloaded,0/* TODO */);
- count++;
- memFound=TRUE;
- }
- }
- else if (cd && cd!=tcd) // we did find a class with the same name as cd
- // but in a different namespace
- {
- noMatchCount++;
- }
- }
- if (count==0 && rootNav->parent() &&
- rootNav->parent()->section()==Entry::OBJCIMPL_SEC)
- {
- goto localObjCMethod;
- }
- if (count==0 && !(isFriend && funcType=="class"))
- {
- int candidates=0;
- ClassDef *ecd = 0, *ucd = 0;
- MemberDef *emd = 0, *umd = 0;
- if (mn->count()>0)
- {
- //printf("Assume template class\n");
- for (mni.toFirst();(md=mni.current());++mni)
- {
- ClassDef *ccd=md->getClassDef();
- MemberDef *cmd=md;
- //printf("ccd->name()==%s className=%s\n",ccd->name().data(),className.data());
- if (ccd!=0 && rightScopeMatch(ccd->name(),className))
- {
- LockingPtr<ArgumentList> templAl = md->templateArguments();
- if (root->tArgLists && templAl!=0 &&
- root->tArgLists->getLast()->count()<=templAl->count())
- {
- addMethodToClass(rootNav,ccd,md->name(),isFriend);
- return;
- }
- if (md->argsString()==argListToString(root->argList,TRUE,FALSE))
- { // exact argument list match -> remember
- ucd = ecd = ccd;
- umd = emd = cmd;
- Debug::print(Debug::FindMembers,0,
- "7. new candidate className=%s scope=%s args=%s exact match\n",
- className.data(),ccd->name().data(),md->argsString());
- }
- else // arguments do not match, but member name and scope do -> remember
- {
- ucd = ccd;
- umd = cmd;
- Debug::print(Debug::FindMembers,0,
- "7. new candidate className=%s scope=%s args=%s no match\n",
- className.data(),ccd->name().data(),md->argsString());
- }
- candidates++;
- }
- }
- }
- static bool strictProtoMatching = Config_getBool("STRICT_PROTO_MATCHING");
- if (!strictProtoMatching)
- {
- if (candidates==1 && ucd && umd)
- {
- // we didn't find an actual match on argument lists, but there is only 1 member with this
- // name in the same scope, so that has to be the one.
- addMemberDocs(rootNav,umd,funcDecl,0,overloaded,0);
- return;
- }
- else if (candidates>1 && ecd && emd)
- {
- // we didn't find a unique match using type resolution,
- // but one of the matches has the exact same signature so
- // we take that one.
- addMemberDocs(rootNav,emd,funcDecl,0,overloaded,0);
- return;
- }
- }
-
- QCString warnMsg = "warning: no ";
- if (noMatchCount>1) warnMsg+="uniquely ";
- warnMsg+="matching class member found for \n";
-
- if (root->tArgLists)
- {
- QListIterator<ArgumentList> alli(*root->tArgLists);
- ArgumentList *al;
- for (;(al=alli.current());++alli)
- {
- warnMsg+=" template ";
- warnMsg+=tempArgListToString(al);
- warnMsg+='\n';
- }
- }
- QCString fullFuncDecl=funcDecl.copy();
- if (isFunc) fullFuncDecl+=argListToString(root->argList,TRUE);
-
- warnMsg+=" ";
- warnMsg+=fullFuncDecl;
- warnMsg+='\n';
-
- if (candidates>0)
- {
- warnMsg+="Possible candidates:\n";
- for (mni.toFirst();(md=mni.current());++mni)
- {
- ClassDef *cd=md->getClassDef();
- if (cd!=0 && rightScopeMatch(cd->name(),className))
- {
- LockingPtr<ArgumentList> templAl = md->templateArguments();
- if (templAl!=0)
- {
- warnMsg+=" template ";
- warnMsg+=tempArgListToString(templAl.pointer());
- warnMsg+='\n';
- }
- warnMsg+=" ";
- if (md->typeString())
- {
- warnMsg+=md->typeString();
- warnMsg+=' ';
- }
- QCString qScope = cd->qualifiedNameWithTemplateParameters();
- if (!qScope.isEmpty())
- warnMsg+=qScope+"::"+md->name();
- if (md->argsString())
- warnMsg+=md->argsString();
- if (noMatchCount>1)
- {
- QCString lineFile;
- lineFile.sprintf(" at line %d of file ",md->getDefLine());
- warnMsg+=lineFile+md->getDefFileName();
- }
-
- warnMsg+='\n';
- }
- }
- }
- warn_simple(root->fileName,root->startLine,warnMsg);
- }
- }
- else if (cd) // member specialization
- {
- MemberNameIterator mni(*mn);
- MemberDef *declMd=0;
- MemberDef *md=0;
- for (mni.toFirst();(md=mni.current());++mni)
- {
- if (md->getClassDef()==cd)
- {
- // TODO: we should probably also check for matching arguments
- declMd = md;
- break;
- }
- }
- MemberDef::MemberType mtype=MemberDef::Function;
- ArgumentList *tArgList = new ArgumentList;
- // getTemplateArgumentsFromName(cd->name()+"::"+funcName,root->tArgLists);
- md=new MemberDef(
- root->fileName,root->startLine,
- funcType,funcName,funcArgs,exceptions,
- declMd ? declMd->protection() : root->protection,
- root->virt,root->stat,Member,
- mtype,tArgList,root->argList);
- //printf("new specialized member %s args=`%s'\n",md->name().data(),funcArgs.data());
- md->setTagInfo(rootNav->tagInfo());
- md->setLanguage(root->lang);
- md->setMemberClass(cd);
- md->setTemplateSpecialization(TRUE);
- md->setTypeConstraints(root->typeConstr);
- md->setDefinition(funcDecl);
- md->enableCallGraph(root->callGraph);
- md->enableCallerGraph(root->callerGraph);
- md->setDocumentation(root->doc,root->docFile,root->docLine);
- md->setInbodyDocumentation(root->inbodyDocs,root->inbodyFile,root->inbodyLine);
- md->setDocsForDefinition(!root->proto);
- md->setPrototype(root->proto);
- md->addSectionsToDefinition(root->anchors);
- md->setBodySegment(root->bodyLine,root->endBodyLine);
- FileDef *fd=rootNav->fileDef();
- md->setBodyDef(fd);
- md->setMemberSpecifiers(root->spec);
- md->setMemberGroupId(root->mGrpId);
- mn->append(md);
- cd->insertMember(md);
- md->setRefItems(root->sli);
- delete tArgList;
- }
- else
- {
- //printf("*** Specialized member %s of unknown scope %s%s found!\n",
- // scopeName.data(),funcName.data(),funcArgs.data());
- }
- }
- else if (overloaded) // check if the function belongs to only one class
- {
- // for unique overloaded member we allow the class to be
- // omitted, this is to be Qt compatable. Using this should
- // however be avoided, because it is error prone
- MemberNameIterator mni(*mn);
- MemberDef *md=mni.toFirst();
- ASSERT(md);
- ClassDef *cd=md->getClassDef();
- ASSERT(cd);
- QCString className=cd->name().copy();
- ++mni;
- bool unique=TRUE;
- for (;(md=mni.current());++mni)
- {
- ClassDef *cd=md->getClassDef();
- if (className!=cd->name()) unique=FALSE;
- }
- if (unique)
- {
- MemberDef::MemberType mtype;
- if (root->mtype==Signal) mtype=MemberDef::Signal;
- else if (root->mtype==Slot) mtype=MemberDef::Slot;
- else if (root->mtype==DCOP) mtype=MemberDef::DCOP;
- else mtype=MemberDef::Function;
-
- // new overloaded member function
- ArgumentList *tArgList =
- getTemplateArgumentsFromName(cd->name()+"::"+funcName,root->tArgLists);
- //printf("new related member %s args=`%s'\n",md->name().data(),funcArgs.data());
- MemberDef *md=new MemberDef(
- root->fileName,root->startLine,
- funcType,funcName,funcArgs,exceptions,
- root->protection,root->virt,root->stat,Related,
- mtype,tArgList,root->argList);
- md->setTagInfo(rootNav->tagInfo());
- md->setLanguage(root->lang);
- md->setTypeConstraints(root->typeConstr);
- md->setMemberClass(cd);
- md->setDefinition(funcDecl);
- md->enableCallGraph(root->callGraph);
- md->enableCallerGraph(root->callerGraph);
- QCString doc=getOverloadDocs();
- doc+="<p>";
- doc+=root->doc;
- md->setDocumentation(doc,root->docFile,root->docLine);
- md->setInbodyDocumentation(root->inbodyDocs,root->inbodyFile,root->inbodyLine);
- md->setDocsForDefinition(!root->proto);
- md->setPrototype(root->proto);
- md->addSectionsToDefinition(root->anchors);
- md->setBodySegment(root->bodyLine,root->endBodyLine);
- FileDef *fd=rootNav->fileDef();
- md->setBodyDef(fd);
- md->setMemberSpecifiers(root->spec);
- md->setMemberGroupId(root->mGrpId);
- mn->append(md);
- cd->insertMember(md);
- cd->insertUsedFile(root->fileName);
- md->setRefItems(root->sli);
- }
- }
- else // unrelated function with the same name as a member
- {
- if (!findGlobalMember(rootNav,namespaceName,funcName,funcTempList,funcArgs,funcDecl))
- {
- QCString fullFuncDecl=funcDecl.copy();
- if (isFunc) fullFuncDecl+=argListToString(root->argList,TRUE);
- warn(root->fileName,root->startLine,
- "warning: Cannot determine class for function\n%s",
- fullFuncDecl.data()
- );
- }
- }
- }
- else if (isRelated && !root->relates.isEmpty())
- {
- Debug::print(Debug::FindMembers,0,"2. related function\n"
- " scopeName=%s className=%s\n",scopeName.data(),className.data());
- if (className.isEmpty()) className=root->relates;
- ClassDef *cd;
- //printf("scopeName=`%s' className=`%s'\n",scopeName.data(),className.data());
- if ((cd=getClass(scopeName)))
- {
- bool newMember=TRUE; // assume we have a new member
- bool newMemberName=FALSE;
- MemberDef *mdDefine=0;
- bool isDefine=FALSE;
- {
- MemberName *mn = Doxygen::functionNameSDict->find(funcName);
- if (mn)
- {
- mdDefine = mn->first();
- while (mdDefine && !isDefine)
- {
- isDefine = isDefine || mdDefine->isDefine();
- if (!isDefine) mdDefine = mn->next();
- }
- }
- }
-
- FileDef *fd=rootNav->fileDef();
-
- if ((mn=Doxygen::memberNameSDict->find(funcName))==0)
- {
- mn=new MemberName(funcName);
- newMemberName=TRUE; // we create a new member name
- }
- else
- {
- MemberDef *rmd=mn->first();
- while (rmd && newMember) // see if we got another member with matching arguments
- {
- LockingPtr<ArgumentList> rmdAl = rmd->argumentList();
-
- newMember=
- className!=rmd->getOuterScope()->name() ||
- !matchArguments2(rmd->getOuterScope(),rmd->getFileDef(),rmdAl.pointer(),
- cd,fd,root->argList,
- TRUE);
- if (newMember) rmd=mn->next();
- }
- if (!newMember && rmd) // member already exists as rmd -> add docs
- {
- //printf("addMemberDocs for related member %s\n",root->name.data());
- //rmd->setMemberDefTemplateArguments(root->mtArgList);
- addMemberDocs(rootNav,rmd,funcDecl,0,overloaded);
- }
- }
-
- if (newMember) // need to create a new member
- {
- MemberDef::MemberType mtype;
- if (isDefine)
- mtype=MemberDef::Define;
- else if (root->mtype==Signal)
- mtype=MemberDef::Signal;
- else if (root->mtype==Slot)
- mtype=MemberDef::Slot;
- else if (root->mtype==DCOP)
- mtype=MemberDef::DCOP;
- else
- mtype=MemberDef::Function;
-
- if (isDefine && mdDefine)
- {
- mdDefine->setHidden(TRUE);
- funcType="#define";
- funcArgs=mdDefine->argsString();
- funcDecl=funcType + " " + funcName;
- }
-
- //printf("New related name `%s' `%d'\n",funcName.data(),
- // root->argList ? (int)root->argList->count() : -1);
-
- // first note that we pass:
- // (root->tArgLists ? root->tArgLists->last() : 0)
- // for the template arguments fo the new "member."
- // this accurately reflects the template arguments of
- // the related function, which don't have to do with
- // those of the related class.
- MemberDef *md=new MemberDef(
- root->fileName,root->startLine,
- funcType,funcName,funcArgs,exceptions,
- root->protection,root->virt,
- root->stat && !isMemberOf,
- isMemberOf ? Foreign : isRelated ? Related : Member,
- mtype,
- (root->tArgLists ? root->tArgLists->last() : 0),
- funcArgs.isEmpty() ? 0 : root->argList);
-
- if (isDefine && mdDefine)
- {
- md->setInitializer(mdDefine->initializer());
- }
-
- //
- // we still have the problem that
- // MemberDef::writeDocumentation() in memberdef.cpp
- // writes the template argument list for the class,
- // as if this member is a member of the class.
- // fortunately, MemberDef::writeDocumentation() has
- // a special mechanism that allows us to totally
- // override the set of template argument lists that
- // are printed. We use that and set it to the
- // template argument lists of the related function.
- //
- md->setDefinitionTemplateParameterLists(root->tArgLists);
-
- md->setTagInfo(rootNav->tagInfo());
-
-
-
- //printf("Related member name=`%s' decl=`%s' bodyLine=`%d'\n",
- // funcName.data(),funcDecl.data(),root->bodyLine);
-
- // try to find the matching line number of the body from the
- // global function list
- bool found=FALSE;
- if (root->bodyLine==-1)
- {
- MemberName *rmn=Doxygen::functionNameSDict->find(funcName);
- if (rmn)
- {
- MemberDef *rmd=rmn->first();
- while (rmd && !found) // see if we got another member with matching arguments
- {
- LockingPtr<ArgumentList> rmdAl = rmd->argumentList();
- // check for matching argument lists
- if (
- matchArguments2(rmd->getOuterScope(),rmd->getFileDef(),rmdAl.pointer(),
- cd,fd,root->argList,
- TRUE)
- )
- {
- found=TRUE;
- }
- if (!found) rmd=rmn->next();
- }
- if (rmd) // member found -> copy line number info
- {
- md->setBodySegment(rmd->getStartBodyLine(),rmd->getEndBodyLine());
- md->setBodyDef(rmd->getBodyDef());
- //md->setBodyMember(rmd);
- }
- }
- }
- if (!found) // line number could not be found or is available in this
- // entry
- {
- md->setBodySegment(root->bodyLine,root->endBodyLine);
- md->setBodyDef(fd);
- }
-
- //if (root->mGrpId!=-1)
- //{
- // md->setMemberGroup(memberGroupDict[root->mGrpId]);
- //}
- md->setMemberClass(cd);
- md->setMemberSpecifiers(root->spec);
- md->setDefinition(funcDecl);
- md->enableCallGraph(root->callGraph);
- md->enableCallerGraph(root->callerGraph);
- md->setDocumentation(root->doc,root->docFile,root->docLine);
- md->setInbodyDocumentation(root->inbodyDocs,root->inbodyFile,root->inbodyLine);
- md->setDocsForDefinition(!root->proto);
- md->setPrototype(root->proto);
- md->setBriefDescription(root->brief,root->briefFile,root->briefLine);
- md->addSectionsToDefinition(root->anchors);
- md->setMemberGroupId(root->mGrpId);
- md->setLanguage(root->lang);
- //md->setMemberDefTemplateArguments(root->mtArgList);
- mn->append(md);
- cd->insertMember(md);
- cd->insertUsedFile(root->fileName);
- md->setRefItems(root->sli);
- if (root->relatesType == Duplicate) md->setRelatedAlso(cd);
- if (!isDefine)
- {
- addMemberToGroups(root,md);
- }
- //printf("Adding member=%s\n",md->name().data());
- if (newMemberName)
- {
- //Doxygen::memberNameList.append(mn);
- //Doxygen::memberNameDict.insert(funcName,mn);
- Doxygen::memberNameSDict->append(funcName,mn);
- }
- }
- if (root->relatesType == Duplicate)
- {
- if (!findGlobalMember(rootNav,namespaceName,funcName,funcTempList,funcArgs,funcDecl))
- {
- QCString fullFuncDecl=funcDecl.copy();
- if (isFunc) fullFuncDecl+=argListToString(root->argList,TRUE);
- warn(root->fileName,root->startLine,
- "warning: Cannot determine file/namespace for relatedalso function\n%s",
- fullFuncDecl.data()
- );
- }
- }
- }
- else
- {
- warn_undoc(root->fileName,root->startLine,
- "warning: class `%s' for related function `%s' is not "
- "documented.",
- className.data(),funcName.data()
- );
- }
- }
- else if (rootNav->parent() && rootNav->parent()->section()==Entry::OBJCIMPL_SEC)
- {
-localObjCMethod:
- ClassDef *cd;
- //printf("scopeName=`%s' className=`%s'\n",scopeName.data(),className.data());
- if (Config_getBool("EXTRACT_LOCAL_METHODS") && (cd=getClass(scopeName)))
- {
- Debug::print(Debug::FindMembers,0,"4. Local objective C method %s\n"
- " scopeName=%s className=%s\n",root->name.data(),scopeName.data(),className.data());
- //printf("Local objective C method `%s' of class `%s' found\n",root->name.data(),cd->name().data());
- MemberDef *md=new MemberDef(
- root->fileName,root->startLine,
- funcType,funcName,funcArgs,exceptions,
- root->protection,root->virt,root->stat,Member,
- MemberDef::Function,0,root->argList);
- md->setTagInfo(rootNav->tagInfo());
- md->setLanguage(root->lang);
- md->makeImplementationDetail();
- md->setMemberClass(cd);
- md->setDefinition(funcDecl);
- md->enableCallGraph(root->callGraph);
- md->enableCallerGraph(root->callerGraph);
- md->setDocumentation(root->doc,root->docFile,root->docLine);
- md->setBriefDescription(root->brief,root->briefFile,root->briefLine);
- md->setInbodyDocumentation(root->inbodyDocs,root->inbodyFile,root->inbodyLine);
- md->setDocsForDefinition(!root->proto);
- md->setPrototype(root->proto);
- md->addSectionsToDefinition(root->anchors);
- md->setBodySegment(root->bodyLine,root->endBodyLine);
- FileDef *fd=rootNav->fileDef();
- md->setBodyDef(fd);
- md->setMemberSpecifiers(root->spec);
- md->setMemberGroupId(root->mGrpId);
- cd->insertMember(md);
- cd->insertUsedFile(root->fileName);
- md->setRefItems(root->sli);
- if ((mn=Doxygen::memberNameSDict->find(root->name)))
- {
- mn->append(md);
- }
- else
- {
- mn = new MemberName(root->name);
- mn->append(md);
- Doxygen::memberNameSDict->append(root->name,mn);
- }
- }
- else
- {
- // local objective C method found for class without interface
- }
- }
- else // unrelated not overloaded member found
- {
- bool globMem = findGlobalMember(rootNav,namespaceName,funcName,funcTempList,funcArgs,funcDecl);
- if (className.isEmpty() && !globMem)
- {
- warn(root->fileName,root->startLine,
- "warning: class for member `%s' cannot "
- "be found.", funcName.data()
- );
- }
- else if (!className.isEmpty() && !globMem)
- {
- warn(root->fileName,root->startLine,
- "warning: member `%s' of class `%s' cannot be found",
- funcName.data(),className.data());
- }
- }
- }
- else
- {
- // this should not be called
- warn(root->fileName,root->startLine,
- "warning: member with no name found.");
- }
- return;
-}
-
-//----------------------------------------------------------------------
-// find the members corresponding to the different documentation blocks
-// that are extracted from the sources.
-
-static void filterMemberDocumentation(EntryNav *rootNav)
-{
- Entry *root = rootNav->entry();
- int i=-1,l;
- Debug::print(Debug::FindMembers,0,
- "findMemberDocumentation(): root->type=`%s' root->inside=`%s' root->name=`%s' root->args=`%s' section=%x root->spec=%d root->mGrpId=%d\n",
- root->type.data(),root->inside.data(),root->name.data(),root->args.data(),root->section,root->spec,root->mGrpId
- );
- //printf("rootNav->parent()->name()=%s\n",rootNav->parent()->name().data());
- bool isFunc=TRUE;
-
- if (root->relatesType == Duplicate && !root->relates.isEmpty())
- {
- QCString tmp = root->relates;
- root->relates.resize(0);
- filterMemberDocumentation(rootNav);
- root->relates = tmp;
- }
-
- if ( // detect func variable/typedef to func ptr
- (i=findFunctionPtr(root->type,root->lang,&l))!=-1
- )
- {
- //printf("Fixing function pointer!\n");
- // fix type and argument
- root->args.prepend(root->type.right(root->type.length()-i-l));
- root->type=root->type.left(i+l);
- //printf("Results type=%s,name=%s,args=%s\n",root->type.data(),root->name.data(),root->args.data());
- isFunc=FALSE;
- }
- else if ((root->type.left(8)=="typedef " && root->args.find('(')!=-1))
- // detect function types marked as functions
- {
- isFunc=FALSE;
- }
-
- //printf("Member %s isFunc=%d\n",root->name.data(),isFunc);
- if (root->section==Entry::MEMBERDOC_SEC)
- {
- //printf("Documentation for inline member `%s' found args=`%s'\n",
- // root->name.data(),root->args.data());
- //if (root->relates.length()) printf(" Relates %s\n",root->relates.data());
- if (root->type.isEmpty())
- {
- findMember(rootNav,root->name+root->args+root->exception,FALSE,isFunc);
- }
- else
- {
- findMember(rootNav,root->type+" "+root->name+root->args+root->exception,FALSE,isFunc);
- }
- }
- else if (root->section==Entry::OVERLOADDOC_SEC)
- {
- //printf("Overloaded member %s found\n",root->name.data());
- findMember(rootNav,root->name,TRUE,isFunc);
- }
- else if
- ((root->section==Entry::FUNCTION_SEC // function
- ||
- (root->section==Entry::VARIABLE_SEC && // variable
- !root->type.isEmpty() && // with a type
- g_compoundKeywordDict.find(root->type)==0 // that is not a keyword
- // (to skip forward declaration of class etc.)
- )
- )
- )
- {
- //printf("Documentation for member `%s' found args=`%s' excp=`%s'\n",
- // root->name.data(),root->args.data(),root->exception.data());
- //if (root->relates.length()) printf(" Relates %s\n",root->relates.data());
- //printf("Inside=%s\n Relates=%s\n",root->inside.data(),root->relates.data());
- if (root->type=="friend class" || root->type=="friend struct" ||
- root->type=="friend union")
- {
- findMember(rootNav,
- root->type+" "+
- root->name,
- FALSE,FALSE);
-
- }
- else if (!root->type.isEmpty())
- {
- findMember(rootNav,
- root->type+" "+
- root->inside+
- root->name+
- root->args+
- root->exception,
- FALSE,isFunc);
- }
- else
- {
- findMember(rootNav,
- root->inside+
- root->name+
- root->args+
- root->exception,
- FALSE,isFunc);
- }
- }
- else if (root->section==Entry::DEFINE_SEC && !root->relates.isEmpty())
- {
- findMember(rootNav,root->name+root->args,FALSE,!root->args.isEmpty());
- }
- else if (root->section==Entry::VARIABLEDOC_SEC)
- {
- //printf("Documentation for variable %s found\n",root->name.data());
- //if (!root->relates.isEmpty()) printf(" Relates %s\n",root->relates.data());
- findMember(rootNav,root->name,FALSE,FALSE);
- }
- else
- {
- // skip section
- //printf("skip section\n");
- }
-}
-
-static void findMemberDocumentation(EntryNav *rootNav)
-{
- if (rootNav->section()==Entry::MEMBERDOC_SEC ||
- rootNav->section()==Entry::OVERLOADDOC_SEC ||
- rootNav->section()==Entry::FUNCTION_SEC ||
- rootNav->section()==Entry::VARIABLE_SEC ||
- rootNav->section()==Entry::VARIABLEDOC_SEC ||
- rootNav->section()==Entry::DEFINE_SEC
- )
- {
- rootNav->loadEntry(g_storage);
-
- filterMemberDocumentation(rootNav);
-
- rootNav->releaseEntry();
- }
- if (rootNav->children())
- {
- EntryNavListIterator eli(*rootNav->children());
- EntryNav *e;
- for (;(e=eli.current());++eli)
- {
- if (e->section()!=Entry::ENUM_SEC) findMemberDocumentation(e);
- }
- }
-}
-
-//----------------------------------------------------------------------
-
-static void findObjCMethodDefinitions(EntryNav *rootNav)
-{
- if (rootNav->children())
- {
- EntryNavListIterator eli(*rootNav->children());
- EntryNav *objCImplNav;
- for (;(objCImplNav=eli.current());++eli)
- {
- if (objCImplNav->section()==Entry::OBJCIMPL_SEC && objCImplNav->children())
- {
- EntryNavListIterator seli(*objCImplNav->children());
- EntryNav *objCMethodNav;
- for (;(objCMethodNav=seli.current());++seli)
- {
- if (objCMethodNav->section()==Entry::FUNCTION_SEC)
- {
- objCMethodNav->loadEntry(g_storage);
- Entry *objCMethod = objCMethodNav->entry();
-
- //Printf(" Found ObjC method definition %s\n",objCMethod->name.data());
- findMember(objCMethodNav, objCMethod->type+" "+objCImplNav->name()+"::"+
- objCMethod->name+" "+objCMethod->args, FALSE,TRUE);
- objCMethod->section=Entry::EMPTY_SEC;
-
- objCMethodNav->releaseEntry();
- }
- }
- }
- }
- }
-}
-
-//----------------------------------------------------------------------
-// find and add the enumeration to their classes, namespaces or files
-
-static void findEnums(EntryNav *rootNav)
-{
- if (rootNav->section()==Entry::ENUM_SEC)
- // non anonymous enumeration
- {
- rootNav->loadEntry(g_storage);
- Entry *root = rootNav->entry();
-
- MemberDef *md=0;
- ClassDef *cd=0;
- FileDef *fd=0;
- NamespaceDef *nd=0;
- MemberNameSDict *mnsd=0;
- bool isGlobal;
- bool isRelated=FALSE;
- bool isMemberOf=FALSE;
- //printf("Found enum with name `%s' relates=%s\n",root->name.data(),root->relates.data());
- int i;
-
- QCString name;
- QCString scope;
-
- if ((i=root->name.findRev("::"))!=-1) // scope is specified
- {
- scope=root->name.left(i); // extract scope
- name=root->name.right(root->name.length()-i-2); // extract name
- if ((cd=getClass(scope))==0) nd=getResolvedNamespace(scope);
- }
- else // no scope, check the scope in which the docs where found
- {
- if (( rootNav->parent()->section() & Entry::SCOPE_MASK )
- && !rootNav->parent()->name().isEmpty()
- ) // found enum docs inside a compound
- {
- scope=rootNav->parent()->name();
- if ((cd=getClass(scope))==0) nd=getResolvedNamespace(scope);
- }
- name=root->name;
- }
-
- if (!root->relates.isEmpty())
- { // related member, prefix user specified scope
- isRelated=TRUE;
- isMemberOf=(root->relatesType == MemberOf);
- if (getClass(root->relates)==0 && !scope.isEmpty())
- scope=mergeScopes(scope,root->relates);
- else
- scope=root->relates.copy();
- if ((cd=getClass(scope))==0) nd=getResolvedNamespace(scope);
- }
-
- if (cd && !name.isEmpty()) // found a enum inside a compound
- {
- //printf("Enum `%s'::`%s'\n",cd->name(),name.data());
- fd=0;
- mnsd=Doxygen::memberNameSDict;
- isGlobal=FALSE;
- }
- else if (nd && !nd->name().isEmpty() && nd->name().at(0)!='@') // found enum inside namespace
- {
- mnsd=Doxygen::functionNameSDict;
- isGlobal=TRUE;
- }
- else // found a global enum
- {
- fd=rootNav->fileDef();
- mnsd=Doxygen::functionNameSDict;
- isGlobal=TRUE;
- }
-
- if (!name.isEmpty())
- {
- // new enum type
- md = new MemberDef(
- root->fileName,root->startLine,
- 0,name,0,0,
- root->protection,Normal,FALSE,
- isMemberOf ? Foreign : isRelated ? Related : Member,
- MemberDef::Enumeration,
- 0,0);
- md->setTagInfo(rootNav->tagInfo());
- md->setLanguage(root->lang);
- if (!isGlobal) md->setMemberClass(cd); else md->setFileDef(fd);
- md->setBodySegment(root->bodyLine,root->endBodyLine);
- md->setBodyDef(rootNav->fileDef());
- //printf("Enum %s definition at line %d of %s: protection=%d\n",
- // root->name.data(),root->bodyLine,root->fileName.data(),root->protection);
- md->addSectionsToDefinition(root->anchors);
- md->setMemberGroupId(root->mGrpId);
- md->enableCallGraph(root->callGraph);
- md->enableCallerGraph(root->callerGraph);
- //printf("%s::setRefItems(%d)\n",md->name().data(),root->sli?root->sli->count():-1);
- md->setRefItems(root->sli);
- //printf("found enum %s nd=%p\n",name.data(),nd);
- bool defSet=FALSE;
- if (nd && !nd->name().isEmpty() && nd->name().at(0)!='@')
- {
- if (isRelated || Config_getBool("HIDE_SCOPE_NAMES"))
- {
- md->setDefinition(name);
- }
- else
- {
- md->setDefinition(nd->name()+"::"+name);
- }
- //printf("definition=%s\n",md->definition());
- defSet=TRUE;
- md->setNamespace(nd);
- nd->insertMember(md);
- }
-
- // even if we have already added the enum to a namespace, we still
- // also want to add it to other appropriate places such as file
- // or class.
- if (isGlobal)
- {
- if (!defSet) md->setDefinition(name);
- if (fd==0 && rootNav->parent())
- {
- fd=rootNav->parent()->fileDef();
- }
- if (fd)
- {
- md->setFileDef(fd);
- fd->insertMember(md);
- }
- }
- else if (cd)
- {
- if (isRelated || Config_getBool("HIDE_SCOPE_NAMES"))
- {
- md->setDefinition(name);
- }
- else
- {
- md->setDefinition(cd->name()+"::"+name);
- }
- cd->insertMember(md);
- cd->insertUsedFile(root->fileName);
- }
- md->setDocumentation(root->doc,root->docFile,root->docLine);
- md->setDocsForDefinition(!root->proto);
- md->setBriefDescription(root->brief,root->briefFile,root->briefLine);
- md->setInbodyDocumentation(root->inbodyDocs,root->inbodyFile,root->inbodyLine);
-
- //printf("Adding member=%s\n",md->name().data());
- MemberName *mn;
- if ((mn=(*mnsd)[name]))
- {
- // this is used if the same enum is in multiple namespaces/classes
- mn->append(md);
- }
- else // new enum name
- {
- mn = new MemberName(name);
- mn->append(md);
- mnsd->append(name,mn);
- //printf("add %s to new memberName. Now %d members\n",
- // name.data(),mn->count());
- }
- addMemberToGroups(root,md);
-
-#if 0
- if (rootNav->children())
- {
- EntryNavListIterator eli(*rootNav->children());
- EntryNav *e;
- for (;(e=eli.current());++eli)
- {
- //printf("e->name=%s isRelated=%d\n",e->name.data(),isRelated);
- MemberName *fmn=0;
- MemberNameSDict *emnsd = isRelated ? Doxygen::functionNameSDict : mnsd;
- if (!e->name().isEmpty() && (fmn=(*emnsd)[e->name()]))
- // get list of members with the same name as the field
- {
- MemberNameIterator fmni(*fmn);
- MemberDef *fmd;
- for (fmni.toFirst(); (fmd=fmni.current()) ; ++fmni)
- {
- if (fmd->isEnumValue())
- {
- //printf("found enum value with same name\n");
- if (nd && !nd->name().isEmpty() && nd->name().at(0)!='@')
- {
- NamespaceDef *fnd=fmd->getNamespaceDef();
- if (fnd==nd) // enum value is inside a namespace
- {
- md->insertEnumField(fmd);
- fmd->setEnumScope(md);
- }
- }
- else if (isGlobal)
- {
- FileDef *ffd=fmd->getFileDef();
- if (ffd==fd) // enum value has file scope
- {
- md->insertEnumField(fmd);
- fmd->setEnumScope(md);
- }
- }
- else if (isRelated && cd) // reparent enum value to
- // match the enum's scope
- {
- md->insertEnumField(fmd); // add field def to list
- fmd->setEnumScope(md); // cross ref with enum name
- fmd->setEnumClassScope(cd); // cross ref with enum name
- fmd->setOuterScope(cd);
- fmd->makeRelated();
- cd->insertMember(fmd);
- }
- else
- {
- ClassDef *fcd=fmd->getClassDef();
- if (fcd==cd) // enum value is inside a class
- {
- //printf("Inserting enum field %s in enum scope %s\n",
- // fmd->name().data(),md->name().data());
- md->insertEnumField(fmd); // add field def to list
- fmd->setEnumScope(md); // cross ref with enum name
- }
- }
- }
- }
- }
- }
- }
-#endif
- }
-
- rootNav->releaseEntry();
- }
- else
- {
- RECURSE_ENTRYTREE(findEnums,rootNav);
- }
-}
-
-//----------------------------------------------------------------------
-
-static void addEnumValuesToEnums(EntryNav *rootNav)
-{
- if (rootNav->section()==Entry::ENUM_SEC)
- // non anonymous enumeration
- {
- rootNav->loadEntry(g_storage);
- Entry *root = rootNav->entry();
-
- ClassDef *cd=0;
- FileDef *fd=0;
- NamespaceDef *nd=0;
- MemberNameSDict *mnsd=0;
- bool isGlobal;
- bool isRelated=FALSE;
- //printf("Found enum with name `%s' relates=%s\n",root->name.data(),root->relates.data());
- int i;
-
- QCString name;
- QCString scope;
-
- if ((i=root->name.findRev("::"))!=-1) // scope is specified
- {
- scope=root->name.left(i); // extract scope
- name=root->name.right(root->name.length()-i-2); // extract name
- if ((cd=getClass(scope))==0) nd=getResolvedNamespace(scope);
- }
- else // no scope, check the scope in which the docs where found
- {
- if (( rootNav->parent()->section() & Entry::SCOPE_MASK )
- && !rootNav->parent()->name().isEmpty()
- ) // found enum docs inside a compound
- {
- scope=rootNav->parent()->name();
- if ((cd=getClass(scope))==0) nd=getResolvedNamespace(scope);
- }
- name=root->name;
- }
-
- if (!root->relates.isEmpty())
- { // related member, prefix user specified scope
- isRelated=TRUE;
- if (getClass(root->relates)==0 && !scope.isEmpty())
- scope=mergeScopes(scope,root->relates);
- else
- scope=root->relates.copy();
- if ((cd=getClass(scope))==0) nd=getResolvedNamespace(scope);
- }
-
- if (cd && !name.isEmpty()) // found a enum inside a compound
- {
- //printf("Enum in class `%s'::`%s'\n",cd->name().data(),name.data());
- fd=0;
- mnsd=Doxygen::memberNameSDict;
- isGlobal=FALSE;
- }
- else if (nd && !nd->name().isEmpty() && nd->name().at(0)!='@') // found enum inside namespace
- {
- //printf("Enum in namespace `%s'::`%s'\n",nd->name().data(),name.data());
- mnsd=Doxygen::functionNameSDict;
- isGlobal=TRUE;
- }
- else // found a global enum
- {
- fd=rootNav->fileDef();
- //printf("Enum in file `%s': `%s'\n",fd->name().data(),name.data());
- mnsd=Doxygen::functionNameSDict;
- isGlobal=TRUE;
- }
-
- if (!name.isEmpty())
- {
- //printf("** name=%s\n",name.data());
- MemberName *mn = mnsd->find(name); // for all members with this name
- if (mn)
- {
- MemberNameIterator mni(*mn);
- MemberDef *md;
- for (mni.toFirst(); (md=mni.current()) ; ++mni) // for each enum in this list
- {
- if (md->isEnumerate() && rootNav->children())
- {
- //printf(" enum with %d children\n",rootNav->children()->count());
- EntryNavListIterator eli(*rootNav->children()); // for each enum value
- EntryNav *e;
- for (;(e=eli.current());++eli)
- {
- SrcLangExt sle;
- if (
- (sle=rootNav->lang())==SrcLangExt_CSharp ||
- sle==SrcLangExt_Java ||
- sle==SrcLangExt_XML
- )
- {
- // Unlike C++, for C# & Java enum values are only inside the enum
- // scope, so we must create them here and only add them to the
- // enum
- e->loadEntry(g_storage);
- Entry *root = e->entry();
- //printf("md->qualifiedName()=%s rootNav->name()=%s\n",
- // md->qualifiedName().data(),rootNav->name().data());
- if (md->qualifiedName()==substitute(rootNav->name(),"::",".")) // enum value scope matches that of the enum
- {
- MemberDef *fmd=new MemberDef(
- root->fileName,root->startLine,
- root->type,root->name,root->args,0,
- Public, Normal,root->stat,Member,
- MemberDef::EnumValue,0,0);
- if (md->getClassDef()) fmd->setMemberClass(md->getClassDef());
- else if (md->getNamespaceDef()) fmd->setNamespace(md->getNamespaceDef());
- else if (md->getFileDef()) fmd->setFileDef(md->getFileDef());
- fmd->setOuterScope(md->getOuterScope());
- fmd->setTagInfo(e->tagInfo());
- fmd->setLanguage(root->lang);
- fmd->setDocumentation(root->doc,root->docFile,root->docLine);
- fmd->setBriefDescription(root->brief,root->briefFile,root->briefLine);
- fmd->addSectionsToDefinition(root->anchors);
- fmd->setInitializer(root->initializer);
- fmd->setMaxInitLines(root->initLines);
- fmd->setMemberGroupId(root->mGrpId);
- fmd->setExplicitExternal(root->explicitExternal);
- fmd->setRefItems(root->sli);
- if (fmd)
- {
- md->insertEnumField(fmd);
- fmd->setEnumScope(md);
- }
- }
- e->releaseEntry();
- }
- else
- {
- //printf("e->name=%s isRelated=%d\n",e->name().data(),isRelated);
- MemberName *fmn=0;
- MemberNameSDict *emnsd = isRelated ? Doxygen::functionNameSDict : mnsd;
- if (!e->name().isEmpty() && (fmn=(*emnsd)[e->name()]))
- // get list of members with the same name as the field
- {
- MemberNameIterator fmni(*fmn);
- MemberDef *fmd;
- for (fmni.toFirst(); (fmd=fmni.current()) ; ++fmni)
- {
- if (fmd->isEnumValue() && fmd->getOuterScope()==md->getOuterScope()) // in same scope
- {
- //printf("found enum value with same name %s in scope %s\n",
- // fmd->name().data(),fmd->getOuterScope()->name().data());
- if (nd && !nd->name().isEmpty() && nd->name().at(0)!='@')
- {
- NamespaceDef *fnd=fmd->getNamespaceDef();
- if (fnd==nd) // enum value is inside a namespace
- {
- md->insertEnumField(fmd);
- fmd->setEnumScope(md);
- }
- }
- else if (isGlobal)
- {
- FileDef *ffd=fmd->getFileDef();
- if (ffd==fd) // enum value has file scope
- {
- md->insertEnumField(fmd);
- fmd->setEnumScope(md);
- }
- }
- else if (isRelated && cd) // reparent enum value to
- // match the enum's scope
- {
- md->insertEnumField(fmd); // add field def to list
- fmd->setEnumScope(md); // cross ref with enum name
- fmd->setEnumClassScope(cd); // cross ref with enum name
- fmd->setOuterScope(cd);
- fmd->makeRelated();
- cd->insertMember(fmd);
- }
- else
- {
- ClassDef *fcd=fmd->getClassDef();
- if (fcd==cd) // enum value is inside a class
- {
- //printf("Inserting enum field %s in enum scope %s\n",
- // fmd->name().data(),md->name().data());
- md->insertEnumField(fmd); // add field def to list
- fmd->setEnumScope(md); // cross ref with enum name
- }
- }
- }
- }
- }
- }
- }
- }
- }
- }
- }
-
- rootNav->releaseEntry();
- }
- else
- {
- RECURSE_ENTRYTREE(addEnumValuesToEnums,rootNav);
- }
-}
-
-
-//----------------------------------------------------------------------
-// find the documentation blocks for the enumerations
-
-static void findEnumDocumentation(EntryNav *rootNav)
-{
- if (rootNav->section()==Entry::ENUMDOC_SEC
- && !rootNav->name().isEmpty()
- && rootNav->name().at(0)!='@' // skip anonymous enums
- )
- {
- rootNav->loadEntry(g_storage);
- Entry *root = rootNav->entry();
-
- //printf("Found docs for enum with name `%s' in context %s\n",
- // root->name.data(),root->parent->name.data());
- int i;
- QCString name;
- QCString scope;
- if ((i=root->name.findRev("::"))!=-1) // scope is specified as part of the name
- {
- name=root->name.right(root->name.length()-i-2); // extract name
- scope=root->name.left(i); // extract scope
- //printf("Scope=`%s' Name=`%s'\n",scope.data(),name.data());
- }
- else // just the name
- {
- name=root->name;
- }
- if (( rootNav->parent()->section() & Entry::SCOPE_MASK )
- && !rootNav->parent()->name().isEmpty()
- ) // found enum docs inside a compound
- {
- if (!scope.isEmpty()) scope.prepend("::");
- scope.prepend(rootNav->parent()->name());
- }
- ClassDef *cd=getClass(scope);
-
- if (!name.isEmpty())
- {
- bool found=FALSE;
- if (cd)
- {
- //printf("Enum: scope=`%s' name=`%s'\n",cd->name(),name.data());
- QCString className=cd->name().copy();
- MemberName *mn=Doxygen::memberNameSDict->find(name);
- if (mn)
- {
- MemberNameIterator mni(*mn);
- MemberDef *md;
- for (mni.toFirst();(md=mni.current()) && !found;++mni)
- {
- ClassDef *cd=md->getClassDef();
- if (cd && cd->name()==className && md->isEnumerate())
- {
- // documentation outside a compound overrides the documentation inside it
-#if 0
- if (!md->documentation() || rootNav->parent()->name().isEmpty())
-#endif
- {
- md->setDocumentation(root->doc,root->docFile,root->docLine);
- md->setDocsForDefinition(!root->proto);
- }
-
- // brief descriptions inside a compound override the documentation
- // outside it
-#if 0
- if (!md->briefDescription() || !rootNav->parent()->name().isEmpty())
-#endif
- {
- md->setBriefDescription(root->brief,root->briefFile,root->briefLine);
- }
-
- if (!md->inbodyDocumentation() || !rootNav->parent()->name().isEmpty())
- {
- md->setInbodyDocumentation(root->inbodyDocs,root->inbodyFile,root->inbodyLine);
- }
-
- if (root->mGrpId!=-1 && md->getMemberGroupId()==-1)
- {
- md->setMemberGroupId(root->mGrpId);
- }
-
- md->addSectionsToDefinition(root->anchors);
- md->setRefItems(root->sli);
-
- GroupDef *gd=md->getGroupDef();
- if (gd==0 &&root->groups->first()!=0) // member not grouped but out-of-line documentation is
- {
- addMemberToGroups(root,md);
- }
-
- found=TRUE;
- }
- }
- }
- else
- {
- //printf("MemberName %s not found!\n",name.data());
- }
- }
- else // enum outside class
- {
- //printf("Enum outside class: %s grpId=%d\n",name.data(),root->mGrpId);
- MemberName *mn=Doxygen::functionNameSDict->find(name);
- if (mn)
- {
- MemberNameIterator mni(*mn);
- MemberDef *md;
- for (mni.toFirst();(md=mni.current()) && !found;++mni)
- {
- if (md->isEnumerate())
- {
- md->setDocumentation(root->doc,root->docFile,root->docLine);
- md->setDocsForDefinition(!root->proto);
- md->setBriefDescription(root->brief,root->briefFile,root->briefLine);
- md->setInbodyDocumentation(root->inbodyDocs,root->inbodyFile,root->inbodyLine);
- md->addSectionsToDefinition(root->anchors);
- md->setMemberGroupId(root->mGrpId);
-
- GroupDef *gd=md->getGroupDef();
- if (gd==0 && root->groups->first()!=0) // member not grouped but out-of-line documentation is
- {
- addMemberToGroups(root,md);
- }
-
- found=TRUE;
- }
- }
- }
- }
- if (!found)
- {
- warn(root->fileName,root->startLine,
- "warning: Documentation for undefined enum `%s' found.",
- name.data()
- );
- }
- }
-
- rootNav->releaseEntry();
- }
- RECURSE_ENTRYTREE(findEnumDocumentation,rootNav);
-}
-
-// seach for each enum (member or function) in mnl if it has documented
-// enum values.
-static void findDEV(const MemberNameSDict &mnsd)
-{
- MemberName *mn;
- MemberNameSDict::Iterator mnli(mnsd);
- // for each member name
- for (mnli.toFirst();(mn=mnli.current());++mnli)
- {
- MemberDef *md;
- MemberNameIterator mni(*mn);
- // for each member definition
- for (mni.toFirst();(md=mni.current());++mni)
- {
- if (md->isEnumerate()) // member is an enum
- {
- LockingPtr<MemberList> fmdl = md->enumFieldList();
- int documentedEnumValues=0;
- if (fmdl!=0) // enum has values
- {
- MemberListIterator fmni(*fmdl);
- MemberDef *fmd;
- // for each enum value
- for (fmni.toFirst();(fmd=fmni.current());++fmni)
- {
- if (fmd->isLinkableInProject()) documentedEnumValues++;
- }
- }
- // at least one enum value is documented
- if (documentedEnumValues>0) md->setDocumentedEnumValues(TRUE);
- }
- }
- }
-}
-
-// seach for each enum (member or function) if it has documented enum
-// values.
-static void findDocumentedEnumValues()
-{
- findDEV(*Doxygen::memberNameSDict);
- findDEV(*Doxygen::functionNameSDict);
-}
-
-//----------------------------------------------------------------------
-
-static void addMembersToIndex()
-{
- MemberName *mn;
- MemberNameSDict::Iterator mnli(*Doxygen::memberNameSDict);
- // for each member name
- for (mnli.toFirst();(mn=mnli.current());++mnli)
- {
- MemberDef *md;
- MemberNameIterator mni(*mn);
- // for each member definition
- for (mni.toFirst();(md=mni.current());++mni)
- {
- addClassMemberNameToIndex(md);
- }
- }
- MemberNameSDict::Iterator fnli(*Doxygen::functionNameSDict);
- // for each member name
- for (fnli.toFirst();(mn=fnli.current());++fnli)
- {
- MemberDef *md;
- MemberNameIterator mni(*mn);
- // for each member definition
- for (mni.toFirst();(md=mni.current());++mni)
- {
- if (md->getNamespaceDef())
- {
- addNamespaceMemberNameToIndex(md);
- }
- else
- {
- addFileMemberNameToIndex(md);
- }
- }
- }
-}
-
-//----------------------------------------------------------------------
-// computes the relation between all members. For each member `m'
-// the members that override the implementation of `m' are searched and
-// the member that `m' overrides is searched.
-
-static void computeMemberRelations()
-{
- MemberNameSDict::Iterator mnli(*Doxygen::memberNameSDict);
- MemberName *mn;
- for ( ; (mn=mnli.current()) ; ++mnli ) // for each member name
- {
- MemberNameIterator mdi(*mn);
- MemberDef *md;
- for ( ; (md=mdi.current()) ; ++mdi ) // for each member with a specific name
- {
- MemberDef *bmd = mn->first(); // for each other member with the same name
- while (bmd)
- {
- ClassDef *mcd = md->getClassDef();
- if (mcd && mcd->baseClasses())
- {
- ClassDef *bmcd = bmd->getClassDef();
- //printf("Check relation between `%s'::`%s' (%p) and `%s'::`%s' (%p)\n",
- // mcd->name().data(),md->name().data(),md,
- // bmcd->name().data(),bmd->name().data(),bmd
- // );
- if (md!=bmd && bmcd && mcd && bmcd!=mcd && mcd->isBaseClass(bmcd,TRUE))
- {
- //printf(" derived scope\n");
- LockingPtr<ArgumentList> bmdAl = bmd->argumentList();
- LockingPtr<ArgumentList> mdAl = md->argumentList();
- //printf(" Base argList=`%s'\n Super argList=`%s'\n",
- // argListToString(bmdAl.pointer()).data(),
- // argListToString(mdAl.pointer()).data()
- // );
- if (
- matchArguments2(bmd->getOuterScope(),bmd->getFileDef(),bmdAl.pointer(),
- md->getOuterScope(), md->getFileDef(), mdAl.pointer(),
- TRUE
- )
- )
- {
- //printf(" match found!\n");
- if (mcd && bmcd &&
- mcd->isLinkable() && bmcd->isLinkable()
- )
- {
- MemberDef *rmd;
- if ((rmd=md->reimplements())==0 ||
- minClassDistance(mcd,bmcd)<minClassDistance(mcd,rmd->getClassDef())
- )
- {
- //printf("setting (new) reimplements member\n");
- md->setReimplements(bmd);
- }
- //printf("%s: add reimplements member %s\n",mcd->name().data(),bmcd->name().data());
- //md->setImplements(bmd);
- //printf("%s: add reimplementedBy member %s\n",bmcd->name().data(),mcd->name().data());
- bmd->insertReimplementedBy(md);
- }
- }
- }
- }
- bmd = mn->next();
- }
- }
- }
-}
-
-
-//----------------------------------------------------------------------------
-//static void computeClassImplUsageRelations()
-//{
-// ClassDef *cd;
-// ClassSDict::Iterator cli(*Doxygen::classSDict);
-// for (;(cd=cli.current());++cli)
-// {
-// cd->determineImplUsageRelation();
-// }
-//}
-
-//----------------------------------------------------------------------------
-
-static void createTemplateInstanceMembers()
-{
- ClassSDict::Iterator cli(*Doxygen::classSDict);
- ClassDef *cd;
- // for each class
- for (cli.toFirst();(cd=cli.current());++cli)
- {
- // that is a template
- QDict<ClassDef> *templInstances = cd->getTemplateInstances();
- if (templInstances)
- {
- QDictIterator<ClassDef> qdi(*templInstances);
- ClassDef *tcd=0;
- // for each instance of the template
- for (qdi.toFirst();(tcd=qdi.current());++qdi)
- {
- tcd->addMembersToTemplateInstance(cd,qdi.currentKey());
- }
- }
- }
-}
-
-//----------------------------------------------------------------------------
-
-static void mergeCategories()
-{
- ClassDef *cd;
- ClassSDict::Iterator cli(*Doxygen::classSDict);
- // merge members of categories into the class they extend
- for (cli.toFirst();(cd=cli.current());++cli)
- {
- int i=cd->name().find('(');
- if (i!=-1) // it is an Objective-C category
- {
- QCString baseName=cd->name().left(i);
- ClassDef *baseClass=Doxygen::classSDict->find(baseName);
- if (baseClass)
- {
- //printf("*** merging members of category %s into %s\n",
- // cd->name().data(),baseClass->name().data());
- baseClass->mergeCategory(cd);
- }
- }
- }
-}
-
-// builds the list of all members for each class
-
-static void buildCompleteMemberLists()
-{
- ClassDef *cd;
- ClassSDict::Iterator cli(*Doxygen::classSDict);
- // merge the member list of base classes into the inherited classes.
- for (cli.toFirst();(cd=cli.current());++cli)
- {
- if (// !cd->isReference() && // not an external class
- cd->subClasses()==0 && // is a root of the hierarchy
- cd->baseClasses()) // and has at least one base class
- {
- //printf("*** merging members for %s\n",cd->name().data());
- cd->mergeMembers();
- }
- }
- // now sort the member list of all classes.
- for (cli.toFirst();(cd=cli.current());++cli)
- {
- if (cd->memberNameInfoSDict()) cd->memberNameInfoSDict()->sort();
- }
-}
-
-//----------------------------------------------------------------------------
-
-static void generateFileSources()
-{
- if (documentedHtmlFiles==0) return;
- if (Doxygen::inputNameList->count()>0)
- {
- FileNameListIterator fnli(*Doxygen::inputNameList);
- FileName *fn;
- for (;(fn=fnli.current());++fnli)
- {
- FileNameIterator fni(*fn);
- FileDef *fd;
- for (;(fd=fni.current());++fni)
- {
- if (fd->generateSourceFile()) // sources need to be shown in the output
- {
- msg("Generating code for file %s...\n",fd->docName().data());
- fd->writeSource(*g_outputList);
- }
- else if (!fd->isReference() && Doxygen::parseSourcesNeeded)
- // we needed to parse the sources even if we do not show them
- {
- msg("Parsing code for file %s...\n",fd->docName().data());
- fd->parseSource();
- }
- }
- }
- }
-}
-
-//----------------------------------------------------------------------------
-
-static void generateFileDocs()
-{
- if (documentedHtmlFiles==0) return;
-
- if (Doxygen::inputNameList->count()>0)
- {
- FileNameListIterator fnli(*Doxygen::inputNameList);
- FileName *fn;
- for (fnli.toFirst();(fn=fnli.current());++fnli)
- {
- FileNameIterator fni(*fn);
- FileDef *fd;
- for (fni.toFirst();(fd=fni.current());++fni)
- {
- bool doc = fd->isLinkableInProject();
- if (doc)
- {
- msg("Generating docs for file %s...\n",fd->docName().data());
- fd->writeDocumentation(*g_outputList);
- }
- }
- }
- }
-}
-
-//----------------------------------------------------------------------------
-
-static void addSourceReferences()
-{
- // add source references for class definitions
- ClassSDict::Iterator cli(*Doxygen::classSDict);
- ClassDef *cd=0;
- for (cli.toFirst();(cd=cli.current());++cli)
- {
- FileDef *fd=cd->getBodyDef();
- if (fd && cd->isLinkableInProject() && cd->getStartBodyLine()!=-1)
- {
- fd->addSourceRef(cd->getStartBodyLine(),cd,0);
- }
- }
- // add source references for namespace definitions
- NamespaceSDict::Iterator nli(*Doxygen::namespaceSDict);
- NamespaceDef *nd=0;
- for (nli.toFirst();(nd=nli.current());++nli)
- {
- FileDef *fd=nd->getBodyDef();
- if (fd && nd->isLinkableInProject() && nd->getStartBodyLine()!=-1)
- {
- fd->addSourceRef(nd->getStartBodyLine(),nd,0);
- }
- }
-
- // add source references for member names
- MemberNameSDict::Iterator mnli(*Doxygen::memberNameSDict);
- MemberName *mn=0;
- for (mnli.toFirst();(mn=mnli.current());++mnli)
- {
- MemberNameIterator mni(*mn);
- MemberDef *md=0;
- for (mni.toFirst();(md=mni.current());++mni)
- {
- //printf("class member %s: def=%s body=%d link?=%d\n",
- // md->name().data(),
- // md->getBodyDef()?md->getBodyDef()->name().data():"<none>",
- // md->getStartBodyLine(),md->isLinkableInProject());
- FileDef *fd=md->getBodyDef();
- if (fd &&
- md->getStartBodyLine()!=-1 &&
- md->isLinkableInProject() &&
- (fd->generateSourceFile() || Doxygen::parseSourcesNeeded)
- )
- {
- //printf("Found member `%s' in file `%s' at line `%d' def=%s\n",
- // md->name().data(),fd->name().data(),md->getStartBodyLine(),md->getOuterScope()->name().data());
- fd->addSourceRef(md->getStartBodyLine(),md->getOuterScope(),md);
- }
- }
- }
- MemberNameSDict::Iterator fnli(*Doxygen::functionNameSDict);
- for (fnli.toFirst();(mn=fnli.current());++fnli)
- {
- MemberNameIterator mni(*mn);
- MemberDef *md=0;
- for (mni.toFirst();(md=mni.current());++mni)
- {
- FileDef *fd=md->getBodyDef();
- //printf("member %s body=[%d,%d] fd=%p link=%d parseSources=%d\n",
- // md->name().data(),
- // md->getStartBodyLine(),md->getEndBodyLine(),fd,
- // md->isLinkableInProject(),
- // Doxygen::parseSourcesNeeded);
- if (fd &&
- md->getStartBodyLine()!=-1 &&
- md->isLinkableInProject() &&
- (fd->generateSourceFile() || Doxygen::parseSourcesNeeded)
- )
- {
- //printf("Found member `%s' in file `%s' at line `%d' def=%s\n",
- // md->name().data(),fd->name().data(),md->getStartBodyLine(),md->getOuterScope()->name().data());
- fd->addSourceRef(md->getStartBodyLine(),md->getOuterScope(),md);
- }
- }
- }
-}
-
-//----------------------------------------------------------------------------
-
-static void sortMemberLists()
-{
- // sort class member lists
- ClassSDict::Iterator cli(*Doxygen::classSDict);
- ClassDef *cd=0;
- for (cli.toFirst();(cd=cli.current());++cli)
- {
- cd->sortMemberLists();
- }
-
- // sort namespace member lists
- NamespaceSDict::Iterator nli(*Doxygen::namespaceSDict);
- NamespaceDef *nd=0;
- for (nli.toFirst();(nd=nli.current());++nli)
- {
- nd->sortMemberLists();
- }
-
- // sort file member lists
- FileNameListIterator fnli(*Doxygen::inputNameList);
- FileName *fn;
- for (;(fn=fnli.current());++fnli)
- {
- FileNameIterator fni(*fn);
- FileDef *fd;
- for (;(fd=fni.current());++fni)
- {
- fd->sortMemberLists();
- }
- }
-
- // sort group member lists
- GroupSDict::Iterator gli(*Doxygen::groupSDict);
- GroupDef *gd;
- for (gli.toFirst();(gd=gli.current());++gli)
- {
- gd->sortMemberLists();
- }
-}
-
-//----------------------------------------------------------------------------
-// generate the documentation of all classes
-
-static void generateClassList(ClassSDict &classSDict)
-{
- ClassSDict::Iterator cli(classSDict);
- for ( ; cli.current() ; ++cli )
- {
- ClassDef *cd=cli.current();
-
- //printf("cd=%s getOuterScope=%p global=%p\n",cd->name().data(),cd->getOuterScope(),Doxygen::globalScope);
- if ((cd->getOuterScope()==0 || // <-- should not happen, but can if we read an old tag file
- cd->getOuterScope()==Doxygen::globalScope // only look at global classes
- ) && !cd->isHidden() && !cd->isEmbeddedInOuterScope()
- )
- {
- // skip external references, anonymous compounds and
- // template instances
- if ( cd->isLinkableInProject() && cd->templateMaster()==0)
- {
- msg("Generating docs for compound %s...\n",cd->name().data());
-
- cd->writeDocumentation(*g_outputList);
- cd->writeMemberList(*g_outputList);
- }
- // even for undocumented classes, the inner classes can be documented.
- cd->writeDocumentationForInnerClasses(*g_outputList);
- }
- }
-}
-
-static void generateClassDocs()
-{
- generateClassList(*Doxygen::classSDict);
- generateClassList(*Doxygen::hiddenClasses);
-}
-
-//----------------------------------------------------------------------------
-
-static void inheritDocumentation()
-{
- MemberNameSDict::Iterator mnli(*Doxygen::memberNameSDict);
- MemberName *mn;
- //int count=0;
- for (;(mn=mnli.current());++mnli)
- {
- MemberNameIterator mni(*mn);
- MemberDef *md;
- for (;(md=mni.current());++mni)
- {
- //printf("%04d Member `%s'\n",count++,md->name().data());
- if (md->documentation().isEmpty() && md->briefDescription().isEmpty())
- { // no documentation yet
- MemberDef *bmd = md->reimplements();
- while (bmd && bmd->documentation().isEmpty() &&
- bmd->briefDescription().isEmpty()
- )
- { // search up the inheritance tree for a documentation member
- //printf("bmd=%s class=%s\n",bmd->name().data(),bmd->getClassDef()->name().data());
- bmd = bmd->reimplements();
- }
- if (bmd) // copy the documentation from the reimplemented member
- {
- md->setInheritsDocsFrom(bmd);
- md->setDocumentation(bmd->documentation(),bmd->docFile(),bmd->docLine());
- md->setDocsForDefinition(bmd->isDocsForDefinition());
- md->setBriefDescription(bmd->briefDescription(),bmd->briefFile(),bmd->briefLine());
- md->copyArgumentNames(bmd);
- md->setInbodyDocumentation(bmd->inbodyDocumentation(),bmd->inbodyFile(),bmd->inbodyLine());
- }
- }
- }
- }
-}
-
-//----------------------------------------------------------------------------
-
-static void combineUsingRelations()
-{
- // for each file
- FileNameListIterator fnli(*Doxygen::inputNameList);
- FileName *fn;
- for (fnli.toFirst();(fn=fnli.current());++fnli)
- {
- FileNameIterator fni(*fn);
- FileDef *fd;
- for (fni.toFirst();(fd=fni.current());++fni)
- {
- fd->visited=FALSE;
- }
- }
- for (fnli.toFirst();(fn=fnli.current());++fnli)
- {
- FileNameIterator fni(*fn);
- FileDef *fd;
- for (fni.toFirst();(fd=fni.current());++fni)
- {
- fd->combineUsingRelations();
- }
- }
-
- // for each namespace
- NamespaceSDict::Iterator nli(*Doxygen::namespaceSDict);
- NamespaceDef *nd;
- for (nli.toFirst() ; (nd=nli.current()) ; ++nli )
- {
- nd->visited=FALSE;
- }
- for (nli.toFirst() ; (nd=nli.current()) ; ++nli )
- {
- nd->combineUsingRelations();
- }
-}
-
-//----------------------------------------------------------------------------
-
-static void addMembersToMemberGroup()
-{
- // for each class
- ClassSDict::Iterator cli(*Doxygen::classSDict);
- ClassDef *cd;
- for ( ; (cd=cli.current()) ; ++cli )
- {
- cd->addMembersToMemberGroup();
- }
- // for each file
- FileName *fn=Doxygen::inputNameList->first();
- while (fn)
- {
- FileDef *fd=fn->first();
- while (fd)
- {
- fd->addMembersToMemberGroup();
- fd=fn->next();
- }
- fn=Doxygen::inputNameList->next();
- }
- // for each namespace
- NamespaceSDict::Iterator nli(*Doxygen::namespaceSDict);
- NamespaceDef *nd;
- for ( ; (nd=nli.current()) ; ++nli )
- {
- nd->addMembersToMemberGroup();
- }
- // for each group
- GroupSDict::Iterator gli(*Doxygen::groupSDict);
- GroupDef *gd;
- for (gli.toFirst();(gd=gli.current());++gli)
- {
- gd->addMembersToMemberGroup();
- }
-}
-
-//----------------------------------------------------------------------------
-
-static void distributeMemberGroupDocumentation()
-{
- // for each class
- ClassSDict::Iterator cli(*Doxygen::classSDict);
- ClassDef *cd;
- for ( ; (cd=cli.current()) ; ++cli )
- {
- cd->distributeMemberGroupDocumentation();
- }
- // for each file
- FileName *fn=Doxygen::inputNameList->first();
- while (fn)
- {
- FileDef *fd=fn->first();
- while (fd)
- {
- fd->distributeMemberGroupDocumentation();
- fd=fn->next();
- }
- fn=Doxygen::inputNameList->next();
- }
- // for each namespace
- NamespaceSDict::Iterator nli(*Doxygen::namespaceSDict);
- NamespaceDef *nd;
- for ( ; (nd=nli.current()) ; ++nli )
- {
- nd->distributeMemberGroupDocumentation();
- }
- // for each group
- GroupSDict::Iterator gli(*Doxygen::groupSDict);
- GroupDef *gd;
- for (gli.toFirst();(gd=gli.current());++gli)
- {
- gd->distributeMemberGroupDocumentation();
- }
-}
-
-//----------------------------------------------------------------------------
-
-static void findSectionsInDocumentation()
-{
- // for each class
- ClassSDict::Iterator cli(*Doxygen::classSDict);
- ClassDef *cd;
- for ( ; (cd=cli.current()) ; ++cli )
- {
- cd->findSectionsInDocumentation();
- }
- // for each file
- FileName *fn=Doxygen::inputNameList->first();
- while (fn)
- {
- FileDef *fd=fn->first();
- while (fd)
- {
- fd->findSectionsInDocumentation();
- fd=fn->next();
- }
- fn=Doxygen::inputNameList->next();
- }
- // for each namespace
- NamespaceSDict::Iterator nli(*Doxygen::namespaceSDict);
- NamespaceDef *nd;
- for ( ; (nd=nli.current()) ; ++nli )
- {
- nd->findSectionsInDocumentation();
- }
- // for each group
- GroupSDict::Iterator gli(*Doxygen::groupSDict);
- GroupDef *gd;
- for (gli.toFirst();(gd=gli.current());++gli)
- {
- gd->findSectionsInDocumentation();
- }
- // for each page
- PageSDict::Iterator pdi(*Doxygen::pageSDict);
- PageDef *pd=0;
- for (pdi.toFirst();(pd=pdi.current());++pdi)
- {
- pd->findSectionsInDocumentation();
- }
- if (Doxygen::mainPage) Doxygen::mainPage->findSectionsInDocumentation();
-}
-
-static void flushCachedTemplateRelations()
-{
- // remove all references to classes from the cache
- // as there can be new template instances in the inheritance path
- // to this class. Optimization: only remove those classes that
- // have inheritance instances as direct or indirect sub classes.
- QCacheIterator<LookupInfo> ci(*Doxygen::lookupCache);
- LookupInfo *li=0;
- for (ci.toFirst();(li=ci.current());++ci)
- {
- if (li->classDef)
- {
- Doxygen::lookupCache->remove(ci.currentKey());
- }
- }
- // remove all cached typedef resolutions whose target is a
- // template class as this may now be a template instance
- MemberNameSDict::Iterator fnli(*Doxygen::functionNameSDict);
- MemberName *fn;
- for (;(fn=fnli.current());++fnli) // for each global function name
- {
- MemberNameIterator fni(*fn);
- MemberDef *fmd;
- for (;(fmd=fni.current());++fni) // for each function with that name
- {
- if (fmd->isTypedefValCached())
- {
- ClassDef *cd = fmd->getCachedTypedefVal();
- if (cd->isTemplate()) fmd->invalidateTypedefValCache();
- }
- }
- }
- MemberNameSDict::Iterator mnli(*Doxygen::memberNameSDict);
- for (;(fn=mnli.current());++mnli) // for each class method name
- {
- MemberNameIterator mni(*fn);
- MemberDef *fmd;
- for (;(fmd=mni.current());++mni) // for each function with that name
- {
- if (fmd->isTypedefValCached())
- {
- ClassDef *cd = fmd->getCachedTypedefVal();
- if (cd->isTemplate()) fmd->invalidateTypedefValCache();
- }
- }
- }
-}
-
-//----------------------------------------------------------------------------
-
-static void flushUnresolvedRelations()
-{
- // Remove all unresolved references to classes from the cache.
- // This is needed before resolving the inheritance relations, since
- // it would otherwise not find the inheritance relation
- // for C in the example below, as B::I was already found to be unresolvable
- // (which is correct if you igore the inheritance relation between A and B).
- //
- // class A { class I {} };
- // class B : public A {};
- // class C : public B::I {};
- //
- QCacheIterator<LookupInfo> ci(*Doxygen::lookupCache);
- LookupInfo *li=0;
- for (ci.toFirst();(li=ci.current());++ci)
- {
- if (li->classDef==0 && li->typeDef==0)
- {
- Doxygen::lookupCache->remove(ci.currentKey());
- }
- }
-
- MemberNameSDict::Iterator fnli(*Doxygen::functionNameSDict);
- MemberName *fn;
- for (;(fn=fnli.current());++fnli) // for each global function name
- {
- MemberNameIterator fni(*fn);
- MemberDef *fmd;
- for (;(fmd=fni.current());++fni) // for each function with that name
- {
- fmd->invalidateCachedArgumentTypes();
- }
- }
- MemberNameSDict::Iterator mnli(*Doxygen::memberNameSDict);
- for (;(fn=mnli.current());++mnli) // for each class method name
- {
- MemberNameIterator mni(*fn);
- MemberDef *fmd;
- for (;(fmd=mni.current());++mni) // for each function with that name
- {
- fmd->invalidateCachedArgumentTypes();
- }
- }
-
-}
-
-//----------------------------------------------------------------------------
-
-static void findDefineDocumentation(EntryNav *rootNav)
-{
- if ((rootNav->section()==Entry::DEFINEDOC_SEC ||
- rootNav->section()==Entry::DEFINE_SEC) && !rootNav->name().isEmpty()
- )
- {
- rootNav->loadEntry(g_storage);
- Entry *root = rootNav->entry();
-
- //printf("found define `%s' `%s' brief=`%s' doc=`%s'\n",
- // root->name.data(),root->args.data(),root->brief.data(),root->doc.data());
-
- if (rootNav->tagInfo() && !root->name.isEmpty()) // define read from a tag file
- {
- MemberDef *md=new MemberDef("<tagfile>",1,
- "#define",root->name,root->args,0,
- Public,Normal,FALSE,Member,MemberDef::Define,0,0);
- md->setTagInfo(rootNav->tagInfo());
- md->setLanguage(root->lang);
- //printf("Searching for `%s' fd=%p\n",filePathName.data(),fd);
- md->setFileDef(rootNav->parent()->fileDef());
- //printf("Adding member=%s\n",md->name().data());
- MemberName *mn;
- if ((mn=Doxygen::functionNameSDict->find(root->name)))
- {
- mn->append(md);
- }
- else
- {
- mn = new MemberName(root->name);
- mn->append(md);
- Doxygen::functionNameSDict->append(root->name,mn);
- }
- }
- MemberName *mn=Doxygen::functionNameSDict->find(root->name);
- if (mn)
- {
- int count=0;
- MemberDef *md=mn->first();
- while (md)
- {
- if (md->memberType()==MemberDef::Define) count++;
- md=mn->next();
- }
- if (count==1)
- {
- md=mn->first();
- while (md)
- {
- if (md->memberType()==MemberDef::Define)
- {
- md->setDocumentation(root->doc,root->docFile,root->docLine);
- md->setDocsForDefinition(!root->proto);
- md->setBriefDescription(root->brief,root->briefFile,root->briefLine);
- if (md->inbodyDocumentation().isEmpty())
- {
- md->setInbodyDocumentation(root->inbodyDocs,root->inbodyFile,root->inbodyLine);
- }
- md->setBodySegment(root->bodyLine,root->endBodyLine);
- md->setBodyDef(rootNav->fileDef());
- md->addSectionsToDefinition(root->anchors);
- md->setMaxInitLines(root->initLines);
- md->setRefItems(root->sli);
- if (root->mGrpId!=-1) md->setMemberGroupId(root->mGrpId);
- addMemberToGroups(root,md);
- }
- md=mn->next();
- }
- }
- else if (count>1 &&
- (!root->doc.isEmpty() ||
- !root->brief.isEmpty() ||
- root->bodyLine!=-1
- )
- )
- // multiple defines don't know where to add docs
- // but maybe they are in different files together with their documentation
- {
- md=mn->first();
- while (md)
- {
- if (md->memberType()==MemberDef::Define)
- {
- FileDef *fd=md->getFileDef();
- if (fd && fd->absFilePath()==root->fileName)
- // doc and define in the same file assume they belong together.
- {
-#if 0
- if (md->documentation().isEmpty())
-#endif
- {
- md->setDocumentation(root->doc,root->docFile,root->docLine);
- md->setDocsForDefinition(!root->proto);
- }
-#if 0
- if (md->briefDescription().isEmpty())
-#endif
- {
- md->setBriefDescription(root->brief,root->briefFile,root->briefLine);
- }
- if (md->inbodyDocumentation().isEmpty())
- {
- md->setInbodyDocumentation(root->inbodyDocs,root->inbodyFile,root->inbodyLine);
- }
- md->setBodySegment(root->bodyLine,root->endBodyLine);
- md->setBodyDef(rootNav->fileDef());
- md->addSectionsToDefinition(root->anchors);
- md->setRefItems(root->sli);
- md->setLanguage(root->lang);
- if (root->mGrpId!=-1) md->setMemberGroupId(root->mGrpId);
- addMemberToGroups(root,md);
- }
- }
- md=mn->next();
- }
- //warn("warning: define %s found in the following files:\n",root->name.data());
- //warn("Cannot determine where to add the documentation found "
- // "at line %d of file %s. \n",
- // root->startLine,root->fileName.data());
- }
- }
- else if (!root->doc.isEmpty() || !root->brief.isEmpty()) // define not found
- {
- static bool preEnabled = Config_getBool("ENABLE_PREPROCESSING");
- if (preEnabled)
- {
- warn(root->fileName,root->startLine,
- "warning: documentation for unknown define %s found.\n",
- root->name.data()
- );
- }
- else
- {
- warn(root->fileName,root->startLine,
- "warning: found documented #define but ignoring it because "
- "ENABLE_PREPROCESSING is NO.\n",
- root->name.data()
- );
- }
- }
-
- rootNav->releaseEntry();
- }
- RECURSE_ENTRYTREE(findDefineDocumentation,rootNav);
-}
-
-//----------------------------------------------------------------------------
-
-static void findDirDocumentation(EntryNav *rootNav)
-{
- if (rootNav->section() == Entry::DIRDOC_SEC)
- {
- rootNav->loadEntry(g_storage);
- Entry *root = rootNav->entry();
-
- QCString normalizedName = root->name;
- normalizedName = substitute(normalizedName,"\\","/");
- //printf("root->docFile=%s normalizedName=%s\n",
- // root->docFile.data(),normalizedName.data());
- if (root->docFile==normalizedName) // current dir?
- {
- int lastSlashPos=normalizedName.findRev('/');
- if (lastSlashPos!=-1) // strip file name
- {
- normalizedName=normalizedName.left(lastSlashPos);
- }
- }
- if (normalizedName.at(normalizedName.length()-1)!='/')
- {
- normalizedName+='/';
- }
- DirDef *dir,*matchingDir=0;
- SDict<DirDef>::Iterator sdi(*Doxygen::directories);
- for (sdi.toFirst();(dir=sdi.current());++sdi)
- {
- //printf("Dir: %s<->%s\n",dir->name().data(),normalizedName.data());
- if (dir->name().right(normalizedName.length())==normalizedName)
- {
- if (matchingDir)
- {
- warn(root->fileName,root->startLine,
- "warning: \\dir command matches multiple directories.\n"
- " Applying the command for directory %s\n"
- " Ignoring the command for directory %s\n",
- matchingDir->name().data(),dir->name().data()
- );
- }
- else
- {
- matchingDir=dir;
- }
- }
- }
- if (matchingDir)
- {
- //printf("Match for with dir %s\n",matchingDir->name().data());
- matchingDir->setBriefDescription(root->brief,root->briefFile,root->briefLine);
- matchingDir->setDocumentation(root->doc,root->docFile,root->docLine);
- matchingDir->setRefItems(root->sli);
- addDirToGroups(root,matchingDir);
- }
- else
- {
- warn(root->fileName,root->startLine,"warning: No matching "
- "directory found for command \\dir %s\n",normalizedName.data());
- }
- rootNav->releaseEntry();
- }
- RECURSE_ENTRYTREE(findDirDocumentation,rootNav);
-}
-
-
-//----------------------------------------------------------------------------
-// create a (sorted) list of separate documentation pages
-
-static void buildPageList(EntryNav *rootNav)
-{
- if (rootNav->section() == Entry::PAGEDOC_SEC)
- {
- rootNav->loadEntry(g_storage);
- Entry *root = rootNav->entry();
-
- if (!root->name.isEmpty())
- {
- addRelatedPage(rootNav);
- }
-
- rootNav->releaseEntry();
- }
- else if (rootNav->section() == Entry::MAINPAGEDOC_SEC)
- {
- rootNav->loadEntry(g_storage);
- Entry *root = rootNav->entry();
-
- QCString title=root->args.stripWhiteSpace();
- if (title.isEmpty()) title=theTranslator->trMainPage();
- //QCString name = Config_getBool("GENERATE_TREEVIEW")?"main":"index";
- QCString name = "index";
- addRefItem(root->sli,
- name,
- "page",
- name,
- title,
- 0
- );
-
- rootNav->releaseEntry();
- }
- RECURSE_ENTRYTREE(buildPageList,rootNav);
-}
-
-static void findMainPage(EntryNav *rootNav)
-{
- if (rootNav->section() == Entry::MAINPAGEDOC_SEC)
- {
- rootNav->loadEntry(g_storage);
- Entry *root = rootNav->entry();
-
- if (Doxygen::mainPage==0)
- {
- //printf("Found main page! \n======\n%s\n=======\n",root->doc.data());
- QCString title=root->args.stripWhiteSpace();
- //QCString indexName=Config_getBool("GENERATE_TREEVIEW")?"main":"index";
- QCString indexName="index";
- Doxygen::mainPage = new PageDef(root->docFile,root->docLine,
- indexName, root->brief+root->doc+root->inbodyDocs,title);
- //setFileNameForSections(root->anchors,"index",Doxygen::mainPage);
- Doxygen::mainPage->setFileName(indexName);
- Doxygen::mainPage->setShowToc(root->stat);
- addPageToContext(Doxygen::mainPage,rootNav);
-
- // a page name is a label as well!
- SectionInfo *si=new SectionInfo(
- indexName,
- Doxygen::mainPage->name(),
- Doxygen::mainPage->title(),
- SectionInfo::Page,
- 0); // level 0
- Doxygen::sectionDict.append(indexName,si);
- Doxygen::mainPage->addSectionsToDefinition(root->anchors);
- }
- else
- {
- warn(root->fileName,root->startLine,
- "warning: found more than one \\mainpage comment block! Skipping this "
- "block."
- );
- }
-
- rootNav->releaseEntry();
- }
- RECURSE_ENTRYTREE(findMainPage,rootNav);
-}
-
-static void computePageRelations(EntryNav *rootNav)
-{
- if ((rootNav->section()==Entry::PAGEDOC_SEC ||
- rootNav->section()==Entry::MAINPAGEDOC_SEC
- )
- && !rootNav->name().isEmpty()
- )
- {
- rootNav->loadEntry(g_storage);
- Entry *root = rootNav->entry();
-
- PageDef *pd = root->section==Entry::PAGEDOC_SEC ?
- Doxygen::pageSDict->find(root->name) :
- Doxygen::mainPage;
- if (pd)
- {
- QListIterator<BaseInfo> bii(*root->extends);
- BaseInfo *bi;
- for (bii.toFirst();(bi=bii.current());++bii)
- {
- PageDef *subPd = Doxygen::pageSDict->find(bi->name);
- if (subPd)
- {
- pd->addInnerCompound(subPd);
- //printf("*** Added subpage relation: %s->%s\n",
- // pd->name().data(),subPd->name().data());
- }
- }
- }
-
- rootNav->releaseEntry();
- }
- RECURSE_ENTRYTREE(computePageRelations,rootNav);
-}
-
-static void checkPageRelations()
-{
- PageSDict::Iterator pdi(*Doxygen::pageSDict);
- PageDef *pd=0;
- for (pdi.toFirst();(pd=pdi.current());++pdi)
- {
- Definition *ppd = pd->getOuterScope();
- while (ppd)
- {
- if (ppd==pd)
- {
- err("warning: page defined at line %d of file %s with label %s is a subpage "
- "of itself! Please remove this cyclic dependency.\n",
- pd->docLine(),pd->docFile().data(),pd->name().data());
- exit(1);
- }
- ppd=ppd->getOuterScope();
- }
- }
-}
-
-//----------------------------------------------------------------------------
-
-static void resolveUserReferences()
-{
- SDict<SectionInfo>::Iterator sdi(Doxygen::sectionDict);
- SectionInfo *si;
- for (;(si=sdi.current());++sdi)
- {
- //printf("si->label=`%s' si->definition=%s si->fileName=`%s'\n",
- // si->label.data(),si->definition?si->definition->name().data():"<none>",
- // si->fileName.data());
- PageDef *pd=0;
-
- // hack: the items of a todo/test/bug/deprecated list are all fragments from
- // different files, so the resulting section's all have the wrong file
- // name (not from the todo/test/bug/deprecated list, but from the file in
- // which they are defined). We correct this here by looking at the
- // generated section labels!
- QDictIterator<RefList> rli(*Doxygen::xrefLists);
- RefList *rl;
- for (rli.toFirst();(rl=rli.current());++rli)
- {
- QCString label="_"+rl->listName(); // "_todo", "_test", ...
- if (si->label.left(label.length())==label)
- {
- si->fileName=rl->listName();
- si->generated=TRUE;
- break;
- }
- }
-
- //printf("start: si->label=%s si->fileName=%s\n",si->label.data(),si->fileName.data());
- if (!si->generated)
- {
- // if this section is in a page and the page is in a group, then we
- // have to adjust the link file name to point to the group.
- if (!si->fileName.isEmpty() &&
- (pd=Doxygen::pageSDict->find(si->fileName)) &&
- pd->getGroupDef())
- {
- si->fileName=pd->getGroupDef()->getOutputFileBase().copy();
- }
-
- if (si->definition)
- {
- // TODO: there should be one function in Definition that returns
- // the file to link to, so we can avoid the following tests.
- GroupDef *gd=0;
- if (si->definition->definitionType()==Definition::TypeMember)
- {
- gd = ((MemberDef *)si->definition)->getGroupDef();
- }
-
- if (gd)
- {
- si->fileName=gd->getOutputFileBase().copy();
- }
- else
- {
- //si->fileName=si->definition->getOutputFileBase().copy();
- //printf("Setting si->fileName to %s\n",si->fileName.data());
- }
- }
- }
- //printf("end: si->label=%s si->fileName=%s\n",si->label.data(),si->fileName.data());
- }
-}
-
-
-
-//----------------------------------------------------------------------------
-// generate all separate documentation pages
-
-
-static void generatePageDocs()
-{
- //printf("documentedPages=%d real=%d\n",documentedPages,Doxygen::pageSDict->count());
- if (documentedPages==0) return;
- PageSDict::Iterator pdi(*Doxygen::pageSDict);
- PageDef *pd=0;
- for (pdi.toFirst();(pd=pdi.current());++pdi)
- {
- if (!pd->getGroupDef() && !pd->isReference())
- {
- msg("Generating docs for page %s...\n",pd->name().data());
- Doxygen::insideMainPage=TRUE;
- pd->writeDocumentation(*g_outputList);
- Doxygen::insideMainPage=FALSE;
- }
- }
-}
-
-//----------------------------------------------------------------------------
-// create a (sorted) list & dictionary of example pages
-
-static void buildExampleList(EntryNav *rootNav)
-{
- if (rootNav->section()==Entry::EXAMPLE_SEC && !rootNav->name().isEmpty())
- {
- rootNav->loadEntry(g_storage);
- Entry *root = rootNav->entry();
-
- if (Doxygen::exampleSDict->find(root->name))
- {
- warn(root->fileName,root->startLine,
- "warning: Example %s was already documented. Ignoring "
- "documentation found here.",
- root->name.data()
- );
- }
- else
- {
- PageDef *pd=new PageDef(root->fileName,root->startLine,
- root->name,root->brief+root->doc+root->inbodyDocs,root->args);
- pd->setFileName(convertNameToFile(pd->name()+"-example",FALSE,TRUE));
- pd->addSectionsToDefinition(root->anchors);
- pd->setLanguage(root->lang);
- //pi->addSections(root->anchors);
-
- Doxygen::exampleSDict->inSort(root->name,pd);
- //we don't add example to groups
- //addExampleToGroups(root,pd);
- }
-
- rootNav->releaseEntry();
- }
- RECURSE_ENTRYTREE(buildExampleList,rootNav);
-}
-
-//----------------------------------------------------------------------------
-// prints the Entry tree (for debugging)
-
-void printNavTree(EntryNav *rootNav,int indent)
-{
- QCString indentStr;
- indentStr.fill(' ',indent);
- msg("%s%s (sec=0x%x)\n",
- indentStr.isEmpty()?"":indentStr.data(),
- rootNav->name().isEmpty()?"<empty>":rootNav->name().data(),
- rootNav->section());
- if (rootNav->children())
- {
- EntryNavListIterator eli(*rootNav->children());
- for (;eli.current();++eli) printNavTree(eli.current(),indent+2);
- }
-}
-
-
-//----------------------------------------------------------------------------
-// generate the example documentation
-
-static void generateExampleDocs()
-{
- g_outputList->disable(OutputGenerator::Man);
- PageSDict::Iterator pdi(*Doxygen::exampleSDict);
- PageDef *pd=0;
- for (pdi.toFirst();(pd=pdi.current());++pdi)
- {
- msg("Generating docs for example %s...\n",pd->name().data());
- resetCCodeParserState();
- QCString n=pd->getOutputFileBase();
- startFile(*g_outputList,n,n,pd->name());
- startTitle(*g_outputList,n);
- g_outputList->docify(pd->name());
- endTitle(*g_outputList,n,0);
- g_outputList->startContents();
- g_outputList->parseDoc(pd->docFile(), // file
- pd->docLine(), // startLine
- pd, // context
- 0, // memberDef
- pd->documentation()+"\n\n\\include "+pd->name(), // docs
- TRUE, // index words
- TRUE, // is example
- pd->name()
- );
- endFile(*g_outputList); // contains g_outputList->endContents()
- }
- g_outputList->enable(OutputGenerator::Man);
-}
-
-//----------------------------------------------------------------------------
-// generate module pages
-
-static void generateGroupDocs()
-{
- GroupSDict::Iterator gli(*Doxygen::groupSDict);
- GroupDef *gd;
- for (gli.toFirst();(gd=gli.current());++gli)
- {
- if (!gd->isReference())
- {
- gd->writeDocumentation(*g_outputList);
- }
- }
-}
-
-//----------------------------------------------------------------------------
-
-//static void generatePackageDocs()
-//{
-// writePackageIndex(*g_outputList);
-//
-// if (Doxygen::packageDict.count()>0)
-// {
-// PackageSDict::Iterator pdi(Doxygen::packageDict);
-// PackageDef *pd;
-// for (pdi.toFirst();(pd=pdi.current());++pdi)
-// {
-// pd->writeDocumentation(*g_outputList);
-// }
-// }
-//}
-
-//----------------------------------------------------------------------------
-// generate module pages
-
-static void generateNamespaceDocs()
-{
- //writeNamespaceIndex(*g_outputList);
-
- NamespaceSDict::Iterator nli(*Doxygen::namespaceSDict);
- NamespaceDef *nd;
- // for each namespace...
- for (;(nd=nli.current());++nli)
- {
-
- if (nd->isLinkableInProject())
- {
- msg("Generating docs for namespace %s\n",nd->name().data());
- nd->writeDocumentation(*g_outputList);
- }
-
- // for each class in the namespace...
- ClassSDict::Iterator cli(*nd->getClassSDict());
- for ( ; cli.current() ; ++cli )
- {
- ClassDef *cd=cli.current();
- if ( ( cd->isLinkableInProject() &&
- cd->templateMaster()==0
- ) // skip external references, anonymous compounds and
- // template instances and nested classes
- && !cd->isHidden() && !cd->isEmbeddedInOuterScope()
- )
- {
- msg("Generating docs for compound %s...\n",cd->name().data());
-
- cd->writeDocumentation(*g_outputList);
- cd->writeMemberList(*g_outputList);
- }
- cd->writeDocumentationForInnerClasses(*g_outputList);
- }
- }
-}
-
-#if defined(_WIN32)
-static QCString fixSlashes(QCString &s)
-{
- QCString result;
- uint i;
- for (i=0;i<s.length();i++)
- {
- switch(s.at(i))
- {
- case '/':
- case '\\':
- result+="\\\\";
- break;
- default:
- result+=s.at(i);
- }
- }
- return result;
-}
-#endif
-
-
-//----------------------------------------------------------------------------
-
-static bool openOutputFile(const char *outFile,QFile &f)
-{
- bool fileOpened=FALSE;
- bool writeToStdout=(outFile[0]=='-' && outFile[1]=='\0');
- if (writeToStdout) // write to stdout
- {
- fileOpened = f.open(IO_WriteOnly,stdout);
- }
- else // write to file
- {
- QFileInfo fi(outFile);
- if (fi.exists()) // create a backup
- {
- QDir dir=fi.dir();
- QFileInfo backup(fi.fileName()+".bak");
- if (backup.exists()) // remove existing backup
- dir.remove(backup.fileName());
- dir.rename(fi.fileName(),fi.fileName()+".bak");
- }
- f.setName(outFile);
- fileOpened = f.open(IO_WriteOnly|IO_Translate);
- }
- return fileOpened;
-}
-
-/*! Generate a template version of the configuration file.
- * If the \a shortList parameter is TRUE a configuration file without
- * comments will be generated.
- */
-static void generateConfigFile(const char *configFile,bool shortList,
- bool updateOnly=FALSE)
-{
- QFile f;
- bool fileOpened=openOutputFile(configFile,f);
- bool writeToStdout=(configFile[0]=='-' && configFile[1]=='\0');
- if (fileOpened)
- {
- FTextStream t(&f);
- Config::instance()->writeTemplate(t,shortList,updateOnly);
- if (!writeToStdout)
- {
- if (!updateOnly)
- {
- msg("\n\nConfiguration file `%s' created.\n\n",configFile);
- msg("Now edit the configuration file and enter\n\n");
- if (strcmp(configFile,"Doxyfile") || strcmp(configFile,"doxyfile"))
- msg(" doxygen %s\n\n",configFile);
- else
- msg(" doxygen\n\n");
- msg("to generate the documentation for your project\n\n");
- }
- else
- {
- msg("\n\nConfiguration file `%s' updated.\n\n",configFile);
- }
- }
- }
- else
- {
- err("error: Cannot open file %s for writing\n",configFile);
- exit(1);
- }
-}
-
-//----------------------------------------------------------------------------
-// read and parse a tag file
-
-//static bool readLineFromFile(QFile &f,QCString &s)
-//{
-// char c=0;
-// s.resize(0);
-// while (!f.atEnd() && (c=f.getch())!='\n') s+=c;
-// return f.atEnd();
-//}
-
-//----------------------------------------------------------------------------
-
-static void readTagFile(Entry *root,const char *tl)
-{
- QCString tagLine = tl;
- QCString fileName;
- QCString destName;
- int eqPos = tagLine.find('=');
- if (eqPos!=-1) // tag command contains a destination
- {
- fileName = tagLine.left(eqPos).stripWhiteSpace();
- destName = tagLine.right(tagLine.length()-eqPos-1).stripWhiteSpace();
- QFileInfo fi(fileName);
- Doxygen::tagDestinationDict.insert(fi.fileName(),new QCString(destName));
- //printf("insert tagDestination %s->%s\n",fi.fileName().data(),destName.data());
- }
- else
- {
- fileName = tagLine;
- }
-
- QFileInfo fi(fileName);
- if (!fi.exists() || !fi.isFile())
- {
- err("error: Tag file `%s' does not exist or is not a file. Skipping it...\n",
- fileName.data());
- return;
- }
-
- if (!destName.isEmpty())
- msg("Reading tag file `%s', location `%s'...\n",fileName.data(),destName.data());
- else
- msg("Reading tag file `%s'...\n",fileName.data());
-
- parseTagFile(root,fi.absFilePath(),fi.fileName());
-}
-
-//----------------------------------------------------------------------------
-static void copyStyleSheet()
-{
- QCString &htmlStyleSheet = Config_getString("HTML_STYLESHEET");
- if (!htmlStyleSheet.isEmpty())
- {
- QFileInfo fi(htmlStyleSheet);
- if (!fi.exists())
- {
- err("Style sheet '%s' specified by HTML_STYLESHEET does not exist!\n",htmlStyleSheet.data());
- htmlStyleSheet.resize(0); // revert to the default
- }
- else
- {
- QCString destFileName = Config_getString("HTML_OUTPUT")+"/"+fi.fileName().data();
- copyFile(htmlStyleSheet,destFileName);
- }
- }
-}
-
-static void copyLogo()
-{
- QCString &projectLogo = Config_getString("PROJECT_LOGO");
- if (!projectLogo.isEmpty())
- {
- QFileInfo fi(projectLogo);
- if (!fi.exists())
- {
- err("Project logo '%s' specified by PROJECT_LOGO does not exist!\n",projectLogo.data());
- projectLogo.resize(0); // revert to the default
- }
- else
- {
- QCString destFileName = Config_getString("HTML_OUTPUT")+"/"+fi.fileName().data();
- copyFile(projectLogo,destFileName);
- }
- }
-}
-
-static void copyExtraFiles()
-{
- QStrList files = Config_getList("HTML_EXTRA_FILES");
- uint i;
- for (i=0; i<files.count(); ++i)
- {
- QCString fileName(files.at(i));
-
- if (!fileName.isEmpty())
- {
- QFileInfo fi(fileName);
- if (!fi.exists())
- {
- err("Extra HTML file '%s' specified in HTML_EXTRA_FILES does not exist!\n", fileName.data());
- }
- else
- {
- QCString destFileName = Config_getString("HTML_OUTPUT")+"/"+fi.fileName().data();
- Doxygen::indexList.addImageFile(fi.fileName().data());
- copyFile(fileName, destFileName);
- }
- }
- }
-}
-
-//! parse the list of input files
-static void parseFiles(Entry *root,EntryNav *rootNav)
-{
-#if 0
- void *cd = 0;
- QCString inpEncoding = Config_getString("INPUT_ENCODING");
- bool needsTranscoding = !inpEncoding.isEmpty();
- if (needsTranscoding)
- {
- if (!(cd = portable_iconv_open("UTF-8", inpEncoding)))
- {
- err("error: unsupported character enconding: '%s'",inpEncoding.data());
- exit(1);
- }
- }
-#endif
-
- QCString *s=g_inputFiles.first();
- while (s)
- {
- QCString fileName=*s;
- QCString extension;
- int ei = fileName.findRev('.');
- if (ei!=-1) extension=fileName.right(fileName.length()-ei);
- ParserInterface *parser = Doxygen::parserManager->getParser(extension);
-
- QFileInfo fi(fileName);
- BufStr preBuf(fi.size()+4096);
-
- if (Config_getBool("ENABLE_PREPROCESSING") &&
- parser->needsPreprocessing(extension))
- {
- BufStr inBuf(fi.size()+4096);
- msg("Preprocessing %s...\n",s->data());
- readInputFile(fileName,inBuf);
- preprocessFile(fileName,inBuf,preBuf);
- }
- else // no preprocessing
- {
- msg("Reading %s...\n",s->data());
- readInputFile(fileName,preBuf);
- }
-
- BufStr convBuf(preBuf.curPos()+1024);
-
- // convert multi-line C++ comments to C style comments
- convertCppComments(&preBuf,&convBuf,fileName);
-
- convBuf.addChar('\0');
-
- // use language parse to parse the file
- parser->parseInput(fileName,convBuf.data(),root);
-
- // store the Entry tree in a file and create an index to
- // navigate/load entries
- bool ambig;
- FileDef *fd=findFileDef(Doxygen::inputNameDict,fileName,ambig);
- ASSERT(fd!=0);
- //printf("root->createNavigationIndex for %s\n",fd->name().data());
- root->createNavigationIndex(rootNav,g_storage,fd);
-
- s=g_inputFiles.next();
- }
-}
-
-// resolves a path that may include symlinks, if a recursive symlink is
-// found an empty string is returned.
-static QCString resolveSymlink(QCString path)
-{
- int sepPos=0;
- int oldPos=0;
- QFileInfo fi;
- QDict<void> nonSymlinks;
- QDict<void> known;
- QCString result = path;
- QCString oldPrefix = "/";
- do
- {
-#ifdef WIN32
- // UNC path, skip server and share name
- if (sepPos==0 && (result.left(2)=="//" || result.left(2)=="\\\\"))
- sepPos = result.find('/',2);
- if (sepPos!=-1)
- sepPos = result.find('/',sepPos+1);
-#else
- sepPos = result.find('/',sepPos+1);
-#endif
- QCString prefix = sepPos==-1 ? result : result.left(sepPos);
- if (nonSymlinks.find(prefix)==0)
- {
- fi.setFile(prefix);
- if (fi.isSymLink())
- {
- QString target = fi.readLink();
- bool isRelative = QFileInfo(target).isRelative();
- if (isRelative)
- {
- target = QDir::cleanDirPath(oldPrefix+"/"+target.data());
- }
- if (sepPos!=-1)
- {
- if (fi.isDir() && target.length()>0 && target.at(target.length()-1)!='/')
- {
- target+='/';
- }
- target+=result.mid(sepPos);
- }
- result = QDir::cleanDirPath(target).data();
- sepPos = 0;
- if (known.find(result)) return QCString(); // recursive symlink!
- known.insert(result,(void*)0x8);
- if (isRelative)
- {
- sepPos = oldPos;
- }
- else // link to absolute path
- {
- sepPos = 0;
- oldPrefix = "/";
- }
- }
- else
- {
- nonSymlinks.insert(prefix,(void*)0x8);
- oldPrefix = prefix;
- }
- oldPos = sepPos;
- }
- }
- while (sepPos!=-1);
- return QDir::cleanDirPath(result).data();
-}
-
-static QDict<void> g_pathsVisited(1009);
-
-//----------------------------------------------------------------------------
-// Read all files matching at least one pattern in `patList' in the
-// directory represented by `fi'.
-// The directory is read iff the recusiveFlag is set.
-// The contents of all files is append to the input string
-
-int readDir(QFileInfo *fi,
- FileNameList *fnList,
- FileNameDict *fnDict,
- StringDict *exclDict,
- QStrList *patList,
- QStrList *exclPatList,
- StringList *resultList,
- StringDict *resultDict,
- bool errorIfNotExist,
- bool recursive,
- QDict<void> *killDict
- )
-{
- QString dirName = fi->absFilePath();
- if (fi->isSymLink())
- {
- dirName = resolveSymlink(dirName.data());
- if (dirName.isEmpty()) return 0; // recusive symlink
- if (g_pathsVisited.find(dirName)) return 0; // already visited path
- g_pathsVisited.insert(dirName,(void*)0x8);
- }
- QDir dir(dirName);
- dir.setFilter( QDir::Files | QDir::Dirs | QDir::Hidden );
- int totalSize=0;
- msg("Searching for files in directory %s\n", fi->absFilePath().data());
- //printf("killDict=%p count=%d\n",killDict,killDict->count());
-
- const QFileInfoList *list = dir.entryInfoList();
- if (list)
- {
- QFileInfoListIterator it( *list );
- QFileInfo *cfi;
-
- while ((cfi=it.current()))
- {
- if (exclDict==0 || exclDict->find(cfi->absFilePath())==0)
- { // file should not be excluded
- //printf("killDict->find(%s)\n",cfi->absFilePath().data());
- if (!cfi->exists() || !cfi->isReadable())
- {
- if (errorIfNotExist)
- {
- err("warning: source %s is not a readable file or directory... skipping.\n",cfi->absFilePath().data());
- }
- }
- else if (cfi->isFile() &&
- (!Config_getBool("EXCLUDE_SYMLINKS") || !cfi->isSymLink()) &&
- (patList==0 || patternMatch(*cfi,patList)) &&
- !patternMatch(*cfi,exclPatList) &&
- (killDict==0 || killDict->find(cfi->absFilePath())==0)
- )
- {
- totalSize+=cfi->size()+cfi->absFilePath().length()+4;
- QCString name=convertToQCString(cfi->fileName());
- //printf("New file %s\n",name.data());
- if (fnDict)
- {
- FileDef *fd=new FileDef(cfi->dirPath()+"/",name);
- FileName *fn=0;
- if (!name.isEmpty() && (fn=(*fnDict)[name]))
- {
- fn->append(fd);
- }
- else
- {
- fn = new FileName(cfi->absFilePath(),name);
- fn->append(fd);
- if (fnList) fnList->inSort(fn);
- fnDict->insert(name,fn);
- }
- }
- QCString *rs=0;
- if (resultList || resultDict)
- {
- rs=new QCString(cfi->absFilePath());
- }
- if (resultList) resultList->append(rs);
- if (resultDict) resultDict->insert(cfi->absFilePath(),rs);
- if (killDict) killDict->insert(cfi->absFilePath(),(void *)0x8);
- }
- else if (recursive &&
- (!Config_getBool("EXCLUDE_SYMLINKS") || !cfi->isSymLink()) &&
- cfi->isDir() && cfi->fileName()!="." &&
- !patternMatch(*cfi,exclPatList) &&
- cfi->fileName()!="..")
- {
- cfi->setFile(cfi->absFilePath());
- totalSize+=readDir(cfi,fnList,fnDict,exclDict,
- patList,exclPatList,resultList,resultDict,errorIfNotExist,
- recursive,killDict);
- }
- }
- ++it;
- }
- }
- return totalSize;
-}
-
-
-//----------------------------------------------------------------------------
-// read a file or all files in a directory and append their contents to the
-// input string. The names of the files are appended to the `fiList' list.
-
-int readFileOrDirectory(const char *s,
- FileNameList *fnList,
- FileNameDict *fnDict,
- StringDict *exclDict,
- QStrList *patList,
- QStrList *exclPatList,
- StringList *resultList,
- StringDict *resultDict,
- bool recursive,
- bool errorIfNotExist,
- QDict<void> *killDict
- )
-{
- //printf("killDict=%p count=%d\n",killDict,killDict->count());
- // strip trailing slashes
- if (s==0) return 0;
- QCString fs = s;
- char lc = fs.at(fs.length()-1);
- if (lc=='/' || lc=='\\') fs = fs.left(fs.length()-1);
-
- QFileInfo fi(fs);
- //printf("readFileOrDirectory(%s)\n",s);
- int totalSize=0;
- {
- if (exclDict==0 || exclDict->find(fi.absFilePath())==0)
- {
- if (!fi.exists() || !fi.isReadable())
- {
- if (errorIfNotExist)
- {
- err("warning: source %s is not a readable file or directory... skipping.\n",s);
- }
- }
- else if (!Config_getBool("EXCLUDE_SYMLINKS") || !fi.isSymLink())
- {
- if (fi.isFile())
- {
- //printf("killDict->find(%s)\n",fi.absFilePath().data());
- if (killDict==0 || killDict->find(fi.absFilePath())==0)
- {
- totalSize+=fi.size()+fi.absFilePath().length()+4; //readFile(&fi,fiList,input);
- //fiList->inSort(new FileInfo(fi));
- QCString name=convertToQCString(fi.fileName());
- //printf("New file %s\n",name.data());
- if (fnDict)
- {
- FileDef *fd=new FileDef(fi.dirPath(TRUE)+"/",name);
- FileName *fn=0;
- if (!name.isEmpty() && (fn=(*fnDict)[name]))
- {
- fn->append(fd);
- }
- else
- {
- fn = new FileName(fi.absFilePath(),name);
- fn->append(fd);
- if (fnList) fnList->inSort(fn);
- fnDict->insert(name,fn);
- }
- }
- QCString *rs=0;
- if (resultList || resultDict)
- {
- rs=new QCString(fi.absFilePath());
- if (resultList) resultList->append(rs);
- if (resultDict) resultDict->insert(fi.absFilePath(),rs);
- }
-
- if (killDict) killDict->insert(fi.absFilePath(),(void *)0x8);
- }
- }
- else if (fi.isDir()) // readable dir
- {
- totalSize+=readDir(&fi,fnList,fnDict,exclDict,patList,
- exclPatList,resultList,resultDict,errorIfNotExist,
- recursive,killDict);
- }
- }
- }
- }
- return totalSize;
-}
-
-//----------------------------------------------------------------------------
-
-void readFormulaRepository()
-{
- QFile f(Config_getString("HTML_OUTPUT")+"/formula.repository");
- if (f.open(IO_ReadOnly)) // open repository
- {
- msg("Reading formula repository...\n");
- QTextStream t(&f);
- QCString line;
- while (!t.eof())
- {
- line=t.readLine();
- int se=line.find(':'); // find name and text separator.
- if (se==-1)
- {
- err("warning: formula.repository is corrupted!\n");
- break;
- }
- else
- {
- QCString formName = line.left(se);
- QCString formText = line.right(line.length()-se-1);
- Formula *f=new Formula(formText);
- Doxygen::formulaList.append(f);
- Doxygen::formulaDict.insert(formText,f);
- Doxygen::formulaNameDict.insert(formName,f);
- }
- }
- }
-}
-
-//----------------------------------------------------------------------------
-
-static void expandAliases()
-{
- QDictIterator<QCString> adi(Doxygen::aliasDict);
- QCString *s;
- for (adi.toFirst();(s=adi.current());++adi)
- {
- *s = expandAlias(adi.currentKey(),*s);
- }
-}
-
-//----------------------------------------------------------------------------
-
-static void escapeAliases()
-{
- QDictIterator<QCString> adi(Doxygen::aliasDict);
- QCString *s;
- for (adi.toFirst();(s=adi.current());++adi)
- {
- QCString value=*s,newValue;
- int in,p=0;
- // for each \n in the alias command value
- while ((in=value.find("\\n",p))!=-1)
- {
- newValue+=value.mid(p,in-p);
- // expand \n's except if \n is part of a built-in command.
- if (value.mid(in,5)!="\\note" &&
- value.mid(in,5)!="\\name" &&
- value.mid(in,10)!="\\namespace" &&
- value.mid(in,14)!="\\nosubgrouping"
- )
- {
- newValue+="\\_linebr ";
- }
- else
- {
- newValue+="\\n";
- }
- p=in+2;
- }
- newValue+=value.mid(p,value.length()-p);
- *s=newValue;
- //printf("Alias %s has value %s\n",adi.currentKey().data(),s->data());
- }
-}
-
-//----------------------------------------------------------------------------
-
-void readAliases()
-{
- // add aliases to a dictionary
- Doxygen::aliasDict.setAutoDelete(TRUE);
- QStrList &aliasList = Config_getList("ALIASES");
- const char *s=aliasList.first();
- while (s)
- {
- if (Doxygen::aliasDict[s]==0)
- {
- QCString alias=s;
- int i=alias.find('=');
- if (i>0)
- {
- QCString name=alias.left(i).stripWhiteSpace();
- QCString value=alias.right(alias.length()-i-1);
- //printf("Alias: found name=`%s' value=`%s'\n",name.data(),value.data());
- if (!name.isEmpty())
- {
- QCString *dn=Doxygen::aliasDict[name];
- if (dn==0) // insert new alias
- {
- Doxygen::aliasDict.insert(name,new QCString(value));
- }
- else // overwrite previous alias
- {
- *dn=value;
- }
- }
- }
- }
- s=aliasList.next();
- }
- expandAliases();
- escapeAliases();
-}
-
-//----------------------------------------------------------------------------
-
-static void dumpSymbol(FTextStream &t,Definition *d)
-{
- QCString anchor;
- if (d->definitionType()==Definition::TypeMember)
- {
- MemberDef *md = (MemberDef *)d;
- anchor=":"+md->anchor();
- }
- QCString scope;
- if (d->getOuterScope() && d->getOuterScope()!=Doxygen::globalScope)
- {
- scope = d->getOuterScope()->getOutputFileBase()+Doxygen::htmlFileExtension;
- }
- t << "REPLACE INTO symbols (symbol_id,scope_id,name,file,line) VALUES('"
- << d->getOutputFileBase()+Doxygen::htmlFileExtension+anchor << "','"
- << scope << "','"
- << d->name() << "','"
- << d->getDefFileName() << "','"
- << d->getDefLine()
- << "');" << endl;
-}
-
-static void dumpSymbolMap()
-{
- QFile f("symbols.sql");
- if (f.open(IO_WriteOnly))
- {
- FTextStream t(&f);
- QDictIterator<DefinitionIntf> di(*Doxygen::symbolMap);
- DefinitionIntf *intf;
- for (;(intf=di.current());++di)
- {
- if (intf->definitionType()==DefinitionIntf::TypeSymbolList) // list of symbols
- {
- DefinitionListIterator dli(*(DefinitionList*)intf);
- Definition *d;
- // for each symbol
- for (dli.toFirst();(d=dli.current());++dli)
- {
- dumpSymbol(t,d);
- }
- }
- else // single symbol
- {
- Definition *d = (Definition *)intf;
- if (d!=Doxygen::globalScope) dumpSymbol(t,d);
- }
- }
- }
-}
-
-//----------------------------------------------------------------------------
-
-void dumpConfigAsXML()
-{
- QFile f("config.xml");
- if (f.open(IO_WriteOnly))
- {
- FTextStream t(&f);
- Config::instance()->writeXML(t);
- }
-}
-
-//----------------------------------------------------------------------------
-// print the usage of doxygen
-
-static void usage(const char *name)
-{
- msg("Doxygen version %s\nCopyright Dimitri van Heesch 1997-2012\n\n",versionString);
- msg("You can use doxygen in a number of ways:\n\n");
- msg("1) Use doxygen to generate a template configuration file:\n");
- msg(" %s [-s] -g [configName]\n\n",name);
- msg(" If - is used for configName doxygen will write to standard output.\n\n");
- msg("2) Use doxygen to update an old configuration file:\n");
- msg(" %s [-s] -u [configName]\n\n",name);
- msg("3) Use doxygen to generate documentation using an existing ");
- msg("configuration file:\n");
- msg(" %s [configName]\n\n",name);
- msg(" If - is used for configName doxygen will read from standard input.\n\n");
- msg("4) Use doxygen to generate a template file controlling the layout of the\n");
- msg(" generated documentation:\n");
- msg(" %s -l layoutFileName.xml\n\n",name);
- msg("5) Use doxygen to generate a template style sheet file for RTF, HTML or Latex.\n");
- msg(" RTF: %s -w rtf styleSheetFile\n",name);
- msg(" HTML: %s -w html headerFile footerFile styleSheetFile [configFile]\n",name);
- msg(" LaTeX: %s -w latex headerFile footerFile styleSheetFile [configFile]\n\n",name);
- msg("6) Use doxygen to generate an rtf extensions file\n");
- msg(" RTF: %s -e rtf extensionsFile\n\n",name);
- msg("If -s is specified the comments in the config file will be omitted.\n");
- msg("If configName is omitted `Doxyfile' will be used as a default.\n\n");
- exit(1);
-}
-
-//----------------------------------------------------------------------------
-// read the argument of option `c' from the comment argument list and
-// update the option index `optind'.
-
-static const char *getArg(int argc,char **argv,int &optind)
-{
- char *s=0;
- if (strlen(&argv[optind][2])>0)
- s=&argv[optind][2];
- else if (optind+1<argc && argv[optind+1][0]!='-')
- s=argv[++optind];
- return s;
-}
-
-//----------------------------------------------------------------------------
-
-void initDoxygen()
-{
- const char *lang = portable_getenv("LC_ALL");
- if (lang) portable_setenv("LANG",lang);
- setlocale(LC_ALL,"");
- setlocale(LC_CTYPE,"C"); // to get isspace(0xA0)==0, needed for UTF-8
- setlocale(LC_NUMERIC,"C");
-
- //Doxygen::symbolMap->setAutoDelete(TRUE);
-
- Doxygen::runningTime.start();
- initPreprocessor();
-
- Doxygen::parserManager = new ParserManager;
- Doxygen::parserManager->registerParser("c", new CLanguageScanner, TRUE);
- Doxygen::parserManager->registerParser("python", new PythonLanguageScanner);
- Doxygen::parserManager->registerParser("fortran", new FortranLanguageScanner);
- Doxygen::parserManager->registerParser("vhdl", new VHDLLanguageScanner);
- Doxygen::parserManager->registerParser("dbusxml", new DBusXMLScanner);
- Doxygen::parserManager->registerParser("tcl", new TclLanguageScanner);
- Doxygen::parserManager->registerParser("md", new MarkdownFileParser);
-
- // register any additional parsers here...
-
- initDefaultExtensionMapping();
- initClassMemberIndices();
- initNamespaceMemberIndices();
- initFileMemberIndices();
-
- Doxygen::symbolMap = new QDict<DefinitionIntf>(1000);
- Doxygen::inputNameList = new FileNameList;
- Doxygen::inputNameList->setAutoDelete(TRUE);
- Doxygen::memberNameSDict = new MemberNameSDict(10000);
- Doxygen::memberNameSDict->setAutoDelete(TRUE);
- Doxygen::functionNameSDict = new MemberNameSDict(10000);
- Doxygen::functionNameSDict->setAutoDelete(TRUE);
- Doxygen::groupSDict = new GroupSDict(17);
- Doxygen::groupSDict->setAutoDelete(TRUE);
- Doxygen::globalScope = new NamespaceDef("<globalScope>",1,"<globalScope>");
- Doxygen::namespaceSDict = new NamespaceSDict(20);
- Doxygen::namespaceSDict->setAutoDelete(TRUE);
- Doxygen::classSDict = new ClassSDict(1009);
- Doxygen::classSDict->setAutoDelete(TRUE);
- Doxygen::hiddenClasses = new ClassSDict(257);
- Doxygen::hiddenClasses->setAutoDelete(TRUE);
- Doxygen::directories = new DirSDict(17);
- Doxygen::directories->setAutoDelete(TRUE);
- Doxygen::pageSDict = new PageSDict(1009); // all doc pages
- Doxygen::pageSDict->setAutoDelete(TRUE);
- Doxygen::exampleSDict = new PageSDict(1009); // all examples
- Doxygen::exampleSDict->setAutoDelete(TRUE);
- Doxygen::inputNameDict = new FileNameDict(10007);
- Doxygen::includeNameDict = new FileNameDict(10007);
- Doxygen::exampleNameDict = new FileNameDict(1009);
- Doxygen::exampleNameDict->setAutoDelete(TRUE);
- Doxygen::imageNameDict = new FileNameDict(257);
- Doxygen::dotFileNameDict = new FileNameDict(257);
- Doxygen::mscFileNameDict = new FileNameDict(257);
- Doxygen::sectionDict.setAutoDelete(TRUE);
- Doxygen::memGrpInfoDict.setAutoDelete(TRUE);
- Doxygen::tagDestinationDict.setAutoDelete(TRUE);
- Doxygen::dirRelations.setAutoDelete(TRUE);
- Doxygen::citeDict = new CiteDict(257);
-}
-
-void cleanUpDoxygen()
-{
- delete Doxygen::inputNameDict;
- delete Doxygen::includeNameDict;
- delete Doxygen::exampleNameDict;
- delete Doxygen::imageNameDict;
- delete Doxygen::dotFileNameDict;
- delete Doxygen::mscFileNameDict;
- delete Doxygen::mainPage;
- delete Doxygen::pageSDict;
- delete Doxygen::exampleSDict;
- delete Doxygen::globalScope;
- delete Doxygen::xrefLists;
- delete Doxygen::parserManager;
- cleanUpPreprocessor();
- delete theTranslator;
- delete g_outputList;
- Mappers::freeMappers();
- codeFreeScanner();
-
- if (Doxygen::symbolMap)
- {
- // iterate through Doxygen::symbolMap and delete all
- // DefinitionList objects, since they have no owner
- QDictIterator<DefinitionIntf> dli(*Doxygen::symbolMap);
- DefinitionIntf *di;
- for (dli.toFirst();(di=dli.current());)
- {
- if (di->definitionType()==DefinitionIntf::TypeSymbolList)
- {
- DefinitionIntf *tmp = Doxygen::symbolMap->take(dli.currentKey());
- delete (DefinitionList *)tmp;
- }
- else
- {
- ++dli;
- }
- }
- }
-
- delete Doxygen::inputNameList;
- delete Doxygen::memberNameSDict;
- delete Doxygen::functionNameSDict;
- delete Doxygen::groupSDict;
- delete Doxygen::classSDict;
- delete Doxygen::hiddenClasses;
- delete Doxygen::namespaceSDict;
- delete Doxygen::directories;
-
- //delete Doxygen::symbolMap; <- we cannot do this unless all static lists
- // (such as Doxygen::namespaceSDict)
- // with objects based on Definition are made
- // dynamic first
-}
-
-static int computeIdealCacheParam(uint v)
-{
- //printf("computeIdealCacheParam(v=%u)\n",v);
-
- int r=0;
- while (v!=0) v>>=1,r++;
- // r = log2(v)
-
- // convert to a valid cache size value
- return QMAX(0,QMIN(r-16,9));
-}
-
-void readConfiguration(int argc, char **argv)
-{
- /**************************************************************************
- * Handle arguments *
- **************************************************************************/
-
- int optind=1;
- const char *configName=0;
- const char *layoutName=0;
- const char *debugLabel;
- const char *formatName;
- bool genConfig=FALSE;
- bool shortList=FALSE;
- bool updateConfig=FALSE;
- bool genLayout=FALSE;
- while (optind<argc && argv[optind][0]=='-' &&
- (isalpha(argv[optind][1]) || argv[optind][1]=='?' ||
- argv[optind][1]=='-')
- )
- {
- switch(argv[optind][1])
- {
- case 'g':
- genConfig=TRUE;
- configName=getArg(argc,argv,optind);
- if (strcmp(argv[optind+1],"-")==0)
- { configName="-"; optind++; }
- if (!configName)
- { configName="Doxyfile"; }
- break;
- case 'l':
- genLayout=TRUE;
- layoutName=getArg(argc,argv,optind);
- if (!layoutName)
- { layoutName="DoxygenLayout.xml"; }
- break;
- case 'd':
- debugLabel=getArg(argc,argv,optind);
- Debug::setFlag(debugLabel);
- break;
- case 's':
- shortList=TRUE;
- break;
- case 'u':
- updateConfig=TRUE;
- break;
- case 'e':
- formatName=getArg(argc,argv,optind);
- if (!formatName)
- {
- err("error: option -e is missing format specifier rtf.\n");
- cleanUpDoxygen();
- exit(1);
- }
- if (stricmp(formatName,"rtf")==0)
- {
- if (optind+1>=argc)
- {
- err("error: option \"-e rtf\" is missing an extensions file name\n");
- cleanUpDoxygen();
- exit(1);
- }
- QFile f;
- if (openOutputFile(argv[optind+1],f))
- {
- RTFGenerator::writeExtensionsFile(f);
- }
- cleanUpDoxygen();
- exit(1);
- }
- err("error: option \"-e\" has invalid format specifier.\n");
- cleanUpDoxygen();
- exit(1);
- break;
- case 'w':
- formatName=getArg(argc,argv,optind);
- if (!formatName)
- {
- err("error: option -w is missing format specifier rtf, html or latex\n");
- cleanUpDoxygen();
- exit(1);
- }
- if (stricmp(formatName,"rtf")==0)
- {
- if (optind+1>=argc)
- {
- err("error: option \"-w rtf\" is missing a style sheet file name\n");
- cleanUpDoxygen();
- exit(1);
- }
- QFile f;
- if (openOutputFile(argv[optind+1],f))
- {
- RTFGenerator::writeStyleSheetFile(f);
- }
- cleanUpDoxygen();
- exit(1);
- }
- else if (stricmp(formatName,"html")==0)
- {
- if (optind+4<argc || QFileInfo("Doxyfile").exists())
- {
- QCString df = optind+4<argc ? argv[optind+4] : QCString("Doxyfile");
- if (!Config::instance()->parse(df))
- {
- err("error opening or reading configuration file %s!\n",argv[optind+4]);
- cleanUpDoxygen();
- exit(1);
- }
- Config::instance()->substituteEnvironmentVars();
- Config::instance()->convertStrToVal();
- // avoid bootstrapping issues when the config file already
- // refers to the files that we are supposed to parse.
- Config_getString("HTML_HEADER")="";
- Config_getString("HTML_FOOTER")="";
- Config::instance()->check();
- }
- else
- {
- Config::instance()->init();
- }
- if (optind+3>=argc)
- {
- err("error: option \"-w html\" does not have enough arguments\n");
- cleanUpDoxygen();
- exit(1);
- }
-
- QCString outputLanguage=Config_getEnum("OUTPUT_LANGUAGE");
- if (!setTranslator(outputLanguage))
- {
- err("warning: Output language %s not supported! Using English instead.\n", outputLanguage.data());
- }
-
- QFile f;
- if (openOutputFile(argv[optind+1],f))
- {
- HtmlGenerator::writeHeaderFile(f, argv[optind+3]);
- }
- f.close();
- if (openOutputFile(argv[optind+2],f))
- {
- HtmlGenerator::writeFooterFile(f);
- }
- f.close();
- if (openOutputFile(argv[optind+3],f))
- {
- HtmlGenerator::writeStyleSheetFile(f);
- }
- cleanUpDoxygen();
- exit(0);
- }
- else if (stricmp(formatName,"latex")==0)
- {
- if (optind+4<argc) // use config file to get settings
- {
- if (!Config::instance()->parse(argv[optind+4]))
- {
- err("error opening or reading configuration file %s!\n",argv[optind+4]);
- exit(1);
- }
- Config::instance()->substituteEnvironmentVars();
- Config::instance()->convertStrToVal();
- Config_getString("LATEX_HEADER")="";
- Config::instance()->check();
- }
- else // use default config
- {
- Config::instance()->init();
- }
- if (optind+3>=argc)
- {
- err("error: option \"-w latex\" does not have enough arguments\n");
- cleanUpDoxygen();
- exit(1);
- }
-
- QCString outputLanguage=Config_getEnum("OUTPUT_LANGUAGE");
- if (!setTranslator(outputLanguage))
- {
- err("warning: Output language %s not supported! Using English instead.\n", outputLanguage.data());
- }
-
- QFile f;
- if (openOutputFile(argv[optind+1],f))
- {
- LatexGenerator::writeHeaderFile(f);
- }
- f.close();
- if (openOutputFile(argv[optind+2],f))
- {
- LatexGenerator::writeFooterFile(f);
- }
- f.close();
- if (openOutputFile(argv[optind+3],f))
- {
- LatexGenerator::writeStyleSheetFile(f);
- }
- cleanUpDoxygen();
- exit(0);
- }
- else
- {
- err("error: Illegal format specifier %s: should be one of rtf, html, latex, or bst\n",formatName);
- cleanUpDoxygen();
- exit(1);
- }
- break;
- case 'm':
- g_dumpSymbolMap = TRUE;
- break;
- case 'x':
- g_dumpConfigAsXML = TRUE;
- break;
- case '-':
- if (strcmp(&argv[optind][2],"help")==0)
- {
- usage(argv[0]);
- }
- else if (strcmp(&argv[optind][2],"version")==0)
- {
- msg("%s\n",versionString);
- cleanUpDoxygen();
- exit(0);
- }
- break;
- case 'b':
- setvbuf(stdout,NULL,_IONBF,0);
- Doxygen::outputToWizard=TRUE;
- break;
- case 'h':
- case '?':
- usage(argv[0]);
- break;
- default:
- err("Unknown option -%c\n",argv[optind][1]);
- usage(argv[0]);
- }
- optind++;
- }
-
- /**************************************************************************
- * Parse or generate the config file *
- **************************************************************************/
-
- Config::instance()->init();
-
- if (genConfig)
- {
- if (g_dumpConfigAsXML)
- {
- checkConfiguration();
- generateConfigFile(configName,shortList);
- dumpConfigAsXML();
- exit(0);
- }
- else
- {
- generateConfigFile(configName,shortList);
- }
- cleanUpDoxygen();
- exit(0);
- }
- if (genLayout)
- {
- writeDefaultLayoutFile(layoutName);
- cleanUpDoxygen();
- exit(0);
- }
-
- QFileInfo configFileInfo1("Doxyfile"),configFileInfo2("doxyfile");
- if (optind>=argc)
- {
- if (configFileInfo1.exists())
- {
- configName="Doxyfile";
- }
- else if (configFileInfo2.exists())
- {
- configName="doxyfile";
- }
- else
- {
- err("Doxyfile not found and no input file specified!\n");
- usage(argv[0]);
- }
- }
- else
- {
- QFileInfo fi(argv[optind]);
- if (fi.exists() || strcmp(argv[optind],"-")==0)
- {
- configName=argv[optind];
- }
- else
- {
- err("error: configuration file %s not found!\n",argv[optind]);
- usage(argv[0]);
- }
- }
-
-
- 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);
- }
-
- /* Perlmod wants to know the path to the config file.*/
- QFileInfo configFileInfo(configName);
- setPerlModDoxyfile(configFileInfo.absFilePath().data());
-
-}
-
-/** check and resolve config options */
-void checkConfiguration()
-{
-
- Config::instance()->substituteEnvironmentVars();
- Config::instance()->convertStrToVal();
- Config::instance()->check();
-
- initWarningFormat();
-}
-
-/** adjust globals that depend on configuration settings. */
-void adjustConfiguration()
-{
- QCString outputLanguage=Config_getEnum("OUTPUT_LANGUAGE");
- if (!setTranslator(outputLanguage))
- {
- err("warning: Output language %s not supported! Using English instead.\n",
- outputLanguage.data());
- }
- QStrList &includePath = Config_getList("INCLUDE_PATH");
- char *s=includePath.first();
- while (s)
- {
- QFileInfo fi(s);
- addSearchDir(fi.absFilePath());
- s=includePath.next();
- }
-
- /* Set the global html file extension. */
- Doxygen::htmlFileExtension = Config_getString("HTML_FILE_EXTENSION");
-
-
- Doxygen::xrefLists->setAutoDelete(TRUE);
-
- Doxygen::parseSourcesNeeded = Config_getBool("CALL_GRAPH") ||
- Config_getBool("CALLER_GRAPH") ||
- Config_getBool("REFERENCES_RELATION") ||
- Config_getBool("REFERENCED_BY_RELATION");
-
- Doxygen::markdownSupport = Config_getBool("MARKDOWN_SUPPORT");
-
- /**************************************************************************
- * Add custom extension mappings
- **************************************************************************/
-
- QStrList &extMaps = Config_getList("EXTENSION_MAPPING");
- char *mapping = extMaps.first();
- while (mapping)
- {
- QCString mapStr = mapping;
- int i;
- if ((i=mapStr.find('='))!=-1)
- {
- QCString ext=mapStr.left(i).stripWhiteSpace().lower();
- QCString language=mapStr.mid(i+1).stripWhiteSpace().lower();
- if (!updateLanguageMapping(ext,language))
- {
- err("Failed to map file extension '%s' to unsupported language '%s'.\n"
- "Check the EXTENSION_MAPPING setting in the config file.\n",
- ext.data(),language.data());
- }
- else
- {
- msg("Adding custom extension mapping: .%s will be treated as language %s\n",
- ext.data(),language.data());
- }
- }
- mapping = extMaps.next();
- }
-
-
- // add predefined macro name to a dictionary
- QStrList &expandAsDefinedList =Config_getList("EXPAND_AS_DEFINED");
- s=expandAsDefinedList.first();
- while (s)
- {
- if (Doxygen::expandAsDefinedDict[s]==0)
- {
- Doxygen::expandAsDefinedDict.insert(s,(void *)666);
- }
- s=expandAsDefinedList.next();
- }
-
- // read aliases and store them in a dictionary
- readAliases();
-
- // store number of spaces in a tab into Doxygen::spaces
- int &tabSize = Config_getInt("TAB_SIZE");
- Doxygen::spaces.resize(tabSize+1);
- int sp;for (sp=0;sp<tabSize;sp++) Doxygen::spaces.at(sp)=' ';
- Doxygen::spaces.at(tabSize)='\0';
-}
-
-#ifdef HAS_SIGNALS
-static void stopDoxygen(int)
-{
- QDir thisDir;
- msg("Cleaning up...\n");
- if (!Doxygen::entryDBFileName.isEmpty())
- {
- thisDir.remove(Doxygen::entryDBFileName);
- }
- if (!Doxygen::objDBFileName.isEmpty())
- {
- thisDir.remove(Doxygen::objDBFileName);
- }
- exit(1);
-}
-#endif
-
-static void exitDoxygen()
-{
- if (!g_successfulRun) // premature exit
- {
- QDir thisDir;
- msg("Exiting...\n");
- if (!Doxygen::entryDBFileName.isEmpty())
- {
- thisDir.remove(Doxygen::entryDBFileName);
- }
- if (!Doxygen::objDBFileName.isEmpty())
- {
- thisDir.remove(Doxygen::objDBFileName);
- }
- }
-}
-
-static QCString createOutputDirectory(const QCString &baseDirName,
- const char *formatDirOption,
- const char *defaultDirName)
-{
- // Note the & on the next line, we modify the formatDirOption!
- QCString &formatDirName = Config_getString(formatDirOption);
- if (formatDirName.isEmpty())
- {
- formatDirName = baseDirName + defaultDirName;
- }
- else if (formatDirName[0]!='/' && (formatDirName.length()==1 || formatDirName[1]!=':'))
- {
- formatDirName.prepend(baseDirName+'/');
- }
- QDir formatDir(formatDirName);
- if (!formatDir.exists() && !formatDir.mkdir(formatDirName))
- {
- err("Could not create output directory %s\n", formatDirName.data());
- cleanUpDoxygen();
- exit(1);
- }
- return formatDirName;
-}
-
-static QCString getQchFileName()
-{
- QCString const & qchFile = Config_getString("QCH_FILE");
- if (!qchFile.isEmpty())
- {
- return qchFile;
- }
-
- QCString const & projectName = Config_getString("PROJECT_NAME");
- QCString const & versionText = Config_getString("PROJECT_NUMBER");
-
- return QCString("../qch/")
- + (projectName.isEmpty() ? QCString("index") : projectName)
- + (versionText.isEmpty() ? QCString("") : QCString("-") + versionText)
- + QCString(".qch");
-}
-
-void searchInputFiles(StringList &inputFiles)
-{
- QStrList &exclPatterns = Config_getList("EXCLUDE_PATTERNS");
- bool alwaysRecursive = Config_getBool("RECURSIVE");
- StringDict excludeNameDict(1009);
- excludeNameDict.setAutoDelete(TRUE);
-
- // gather names of all files in the include path
- msg("Searching for include files...\n");
- QStrList &includePathList = Config_getList("INCLUDE_PATH");
- char *s=includePathList.first();
- while (s)
- {
- QStrList &pl = Config_getList("INCLUDE_FILE_PATTERNS");
- if (pl.count()==0)
- {
- pl = Config_getList("FILE_PATTERNS");
- }
- readFileOrDirectory(s,0,Doxygen::includeNameDict,0,&pl,
- &exclPatterns,0,0,
- alwaysRecursive);
- s=includePathList.next();
- }
-
- msg("Searching for example files...\n");
- QStrList &examplePathList = Config_getList("EXAMPLE_PATH");
- s=examplePathList.first();
- while (s)
- {
- readFileOrDirectory(s,0,Doxygen::exampleNameDict,0,
- &Config_getList("EXAMPLE_PATTERNS"),
- 0,0,0,
- (alwaysRecursive || Config_getBool("EXAMPLE_RECURSIVE")));
- s=examplePathList.next();
- }
-
- msg("Searching for images...\n");
- QStrList &imagePathList=Config_getList("IMAGE_PATH");
- s=imagePathList.first();
- while (s)
- {
- readFileOrDirectory(s,0,Doxygen::imageNameDict,0,0,
- 0,0,0,
- alwaysRecursive);
- s=imagePathList.next();
- }
-
- msg("Searching for dot files...\n");
- QStrList &dotFileList=Config_getList("DOTFILE_DIRS");
- s=dotFileList.first();
- while (s)
- {
- readFileOrDirectory(s,0,Doxygen::dotFileNameDict,0,0,
- 0,0,0,
- alwaysRecursive);
- s=dotFileList.next();
- }
-
- msg("Searching for msc files...\n");
- QStrList &mscFileList=Config_getList("MSCFILE_DIRS");
- s=mscFileList.first();
- while (s)
- {
- readFileOrDirectory(s,0,Doxygen::mscFileNameDict,0,0,
- 0,0,0,
- alwaysRecursive);
- s=mscFileList.next();
- }
-
-
- msg("Searching for files to exclude\n");
- QStrList &excludeList = Config_getList("EXCLUDE");
- s=excludeList.first();
- while (s)
- {
- readFileOrDirectory(s,0,0,0,&Config_getList("FILE_PATTERNS"),
- 0,0,&excludeNameDict,
- alwaysRecursive,
- FALSE);
- s=excludeList.next();
- }
-
- /**************************************************************************
- * Determine Input Files *
- **************************************************************************/
-
- msg("Searching for files to process...\n");
- QDict<void> *killDict = new QDict<void>(10007);
- int inputSize=0;
- QStrList &inputList=Config_getList("INPUT");
- inputFiles.setAutoDelete(TRUE);
- s=inputList.first();
- while (s)
- {
- QCString path=s;
- uint l = path.length();
- // strip trailing slashes
- if (path.at(l-1)=='\\' || path.at(l-1)=='/') path=path.left(l-1);
-
- inputSize+=readFileOrDirectory(
- path,
- Doxygen::inputNameList,
- Doxygen::inputNameDict,
- &excludeNameDict,
- &Config_getList("FILE_PATTERNS"),
- &exclPatterns,
- &inputFiles,0,
- alwaysRecursive,
- TRUE,
- killDict);
- s=inputList.next();
- }
- delete killDict;
-}
-
-
-void parseInput()
-{
- atexit(exitDoxygen);
-
-
- /**************************************************************************
- * Make sure the output directory exists
- **************************************************************************/
- QCString &outputDirectory = Config_getString("OUTPUT_DIRECTORY");
- if (outputDirectory.isEmpty())
- {
- outputDirectory=QDir::currentDirPath();
- }
- else
- {
- QDir dir(outputDirectory);
- if (!dir.exists())
- {
- dir.setPath(QDir::currentDirPath());
- if (!dir.mkdir(outputDirectory))
- {
- err("error: tag OUTPUT_DIRECTORY: Output directory `%s' does not "
- "exist and cannot be created\n",outputDirectory.data());
- cleanUpDoxygen();
- exit(1);
- }
- else if (!Config_getBool("QUIET"))
- {
- err("Notice: Output directory `%s' does not exist. "
- "I have created it for you.\n", outputDirectory.data());
- }
- dir.cd(outputDirectory);
- }
- outputDirectory=dir.absPath();
- }
-
- /**************************************************************************
- * Initialize global lists and dictionaries
- **************************************************************************/
-
- int cacheSize = Config_getInt("SYMBOL_CACHE_SIZE");
- if (cacheSize<0) cacheSize=0;
- if (cacheSize>9) cacheSize=9;
- Doxygen::symbolCache = new ObjCache(16+cacheSize); // 16 -> room for 65536 elements,
- // ~2.0 MByte "overhead"
- //Doxygen::symbolCache = new ObjCache(1); // only to stress test cache behaviour
- Doxygen::symbolStorage = new Store;
-
- // also scale lookup cache with SYMBOL_CACHE_SIZE
- cacheSize = Config_getInt("LOOKUP_CACHE_SIZE");
- if (cacheSize<0) cacheSize=0;
- if (cacheSize>9) cacheSize=9;
- uint lookupSize = 65536 << cacheSize;
- Doxygen::lookupCache = new QCache<LookupInfo>(lookupSize,lookupSize);
- Doxygen::lookupCache->setAutoDelete(TRUE);
-
-#ifdef HAS_SIGNALS
- signal(SIGINT, stopDoxygen);
-#endif
-
- uint pid = portable_pid();
- Doxygen::objDBFileName.sprintf("doxygen_objdb_%d.tmp",pid);
- Doxygen::objDBFileName.prepend(outputDirectory+"/");
- Doxygen::entryDBFileName.sprintf("doxygen_entrydb_%d.tmp",pid);
- Doxygen::entryDBFileName.prepend(outputDirectory+"/");
-
- if (Doxygen::symbolStorage->open(Doxygen::objDBFileName)==-1)
- {
- err("Failed to open temporary file %s\n",Doxygen::objDBFileName.data());
- exit(1);
- }
-
-
- /**************************************************************************
- * Initialize some global constants
- **************************************************************************/
-
- g_compoundKeywordDict.insert("template class",(void *)8);
- g_compoundKeywordDict.insert("template struct",(void *)8);
- g_compoundKeywordDict.insert("class",(void *)8);
- g_compoundKeywordDict.insert("struct",(void *)8);
- g_compoundKeywordDict.insert("union",(void *)8);
- g_compoundKeywordDict.insert("interface",(void *)8);
- g_compoundKeywordDict.insert("exception",(void *)8);
-
-
- /**************************************************************************
- * Check/create output directorties *
- **************************************************************************/
-
- QCString htmlOutput;
- bool &generateHtml = Config_getBool("GENERATE_HTML");
- if (generateHtml)
- htmlOutput = createOutputDirectory(outputDirectory,"HTML_OUTPUT","/html");
-
- QCString xmlOutput;
- bool &generateXml = Config_getBool("GENERATE_XML");
- if (generateXml)
- xmlOutput = createOutputDirectory(outputDirectory,"XML_OUTPUT","/xml");
-
- QCString latexOutput;
- bool &generateLatex = Config_getBool("GENERATE_LATEX");
- if (generateLatex)
- latexOutput = createOutputDirectory(outputDirectory,"LATEX_OUTPUT","/latex");
-
- QCString rtfOutput;
- bool &generateRtf = Config_getBool("GENERATE_RTF");
- if (generateRtf)
- rtfOutput = createOutputDirectory(outputDirectory,"RTF_OUTPUT","/rtf");
-
- QCString manOutput;
- bool &generateMan = Config_getBool("GENERATE_MAN");
- if (generateMan)
- manOutput = createOutputDirectory(outputDirectory,"MAN_OUTPUT","/man");
-
-
- if (Config_getBool("HAVE_DOT"))
- {
- QCString curFontPath = Config_getString("DOT_FONTPATH");
- if (curFontPath.isEmpty())
- {
- portable_getenv("DOTFONTPATH");
- QCString newFontPath = ".";
- if (!curFontPath.isEmpty())
- {
- newFontPath+=portable_pathListSeparator();
- newFontPath+=curFontPath;
- }
- portable_setenv("DOTFONTPATH",newFontPath);
- }
- else
- {
- portable_setenv("DOTFONTPATH",curFontPath);
- }
- }
-
-
-
- /**************************************************************************
- * Handle layout file *
- **************************************************************************/
-
- LayoutDocManager::instance().init();
- QCString &layoutFileName = Config_getString("LAYOUT_FILE");
- bool defaultLayoutUsed = FALSE;
- if (layoutFileName.isEmpty())
- {
- layoutFileName = "DoxygenLayout.xml";
- defaultLayoutUsed = TRUE;
- }
-
- QFile layoutFile(layoutFileName);
- if (layoutFile.open(IO_ReadOnly))
- {
- msg("Parsing layout file %s...\n",layoutFileName.data());
- QTextStream t(&layoutFile);
- t.setEncoding(QTextStream::Latin1);
- LayoutDocManager::instance().parse(t,layoutFileName);
- }
- else if (!defaultLayoutUsed)
- {
- err("warning: failed to open layout file '%s' for reading!\n",layoutFileName.data());
- }
-
- /**************************************************************************
- * Read and preprocess input *
- **************************************************************************/
-
- // prevent search in the output directories
- QStrList &exclPatterns = Config_getList("EXCLUDE_PATTERNS");
- if (generateHtml) exclPatterns.append(htmlOutput);
- if (generateXml) exclPatterns.append(xmlOutput);
- if (generateLatex) exclPatterns.append(latexOutput);
- if (generateRtf) exclPatterns.append(rtfOutput);
- if (generateMan) exclPatterns.append(manOutput);
-
-
- searchInputFiles(g_inputFiles);
-
- // Notice: the order of the function calls below is very important!
-
- if (Config_getBool("GENERATE_HTML"))
- {
- readFormulaRepository();
- }
-
- /**************************************************************************
- * Handle Tag Files *
- **************************************************************************/
-
- g_storage = new FileStorage;
- g_storage->setName(Doxygen::entryDBFileName);
- if (!g_storage->open(IO_WriteOnly))
- {
- err("Failed to create temporary storage file %s\n",
- Doxygen::entryDBFileName.data());
- exit(1);
- }
- Entry *root=new Entry;
- EntryNav *rootNav = new EntryNav(0,root);
- rootNav->setEntry(root);
- msg("Reading and parsing tag files\n");
-
- QStrList &tagFileList = Config_getList("TAGFILES");
- char *s=tagFileList.first();
- while (s)
- {
- readTagFile(root,s);
- root->createNavigationIndex(rootNav,g_storage,0);
- s=tagFileList.next();
- }
-
- /**************************************************************************
- * Parse source files *
- **************************************************************************/
-
- //printNavTree(rootNav,0);
-
- // we are done with input scanning now, so free up the buffers used by flex
- // (can be around 4MB)
- preFreeScanner();
- scanFreeScanner();
- pyscanFreeScanner();
-
- //delete rootNav;
- //g_storage.close();
- //exit(1);
-
- if (Config_getBool("BUILTIN_STL_SUPPORT"))
- {
- addSTLClasses(rootNav);
- }
-
- parseFiles(root,rootNav);
- g_storage->close();
- if (!g_storage->open(IO_ReadOnly))
- {
- err("Failed to open temporary storage file %s for reading",
- Doxygen::entryDBFileName.data());
- exit(1);
- }
-
- /**************************************************************************
- * Gather information *
- **************************************************************************/
-
- msg("Building group list...\n");
- buildGroupList(rootNav);
- organizeSubGroups(rootNav);
-
- msg("Building directory list...\n");
- buildDirectories();
- findDirDocumentation(rootNav);
-
- msg("Building namespace list...\n");
- buildNamespaceList(rootNav);
- findUsingDirectives(rootNav);
-
- msg("Building file list...\n");
- buildFileList(rootNav);
- //generateFileTree();
-
- msg("Building class list...\n");
- buildClassList(rootNav);
-
- msg("Associating documentation with classes...\n");
- buildClassDocList(rootNav);
-
- // build list of using declarations here (global list)
- buildListOfUsingDecls(rootNav);
-
- msg("Computing nesting relations for classes...\n");
- resolveClassNestingRelations();
- distributeClassGroupRelations();
-
- // calling buildClassList may result in cached relations that
- // become invalid after resolveClassNestingRelations(), that's why
- // we need to clear the cache here
- Doxygen::lookupCache->clear();
- // we don't need the list of using declaration anymore
- g_usingDeclarations.clear();
-
- msg("Building example list...\n");
- buildExampleList(rootNav);
-
- msg("Searching for enumerations...\n");
- findEnums(rootNav);
-
- // Since buildVarList calls isVarWithConstructor
- // and this calls getResolvedClass we need to process
- // typedefs first so the relations between classes via typedefs
- // are properly resolved. See bug 536385 for an example.
- msg("Searching for documented typedefs...\n");
- buildTypedefList(rootNav);
-
- msg("Searching for members imported via using declarations...\n");
- findUsingDeclImports(rootNav);
- // this should be after buildTypedefList in order to properly import
- // used typedefs
- findUsingDeclarations(rootNav);
-
- msg("Searching for included using directives...\n");
- findIncludedUsingDirectives();
-
- msg("Searching for documented variables...\n");
- buildVarList(rootNav);
-
- msg("Building member list...\n"); // using class info only !
- buildFunctionList(rootNav);
-
- msg("Searching for friends...\n");
- findFriends();
-
- msg("Searching for documented defines...\n");
- findDefineDocumentation(rootNav);
-
- findClassEntries(rootNav);
- msg("Computing class inheritance relations...\n");
- findInheritedTemplateInstances();
- msg("Computing class usage relations...\n");
- findUsedTemplateInstances();
- if (Config_getBool("INLINE_SIMPLE_STRUCTS"))
- {
- msg("Searching for tag less structs...\n");
- findTagLessClasses();
- }
-
- msg("Flushing cached template relations that have become invalid...\n");
- flushCachedTemplateRelations();
-
- msg("Creating members for template instances...\n");
- createTemplateInstanceMembers();
-
- msg("Computing class relations...\n");
- computeTemplateClassRelations();
- flushUnresolvedRelations();
- computeClassRelations();
- if (Config_getBool("OPTIMIZE_OUTPUT_VHDL"))
- {
- VhdlDocGen::computeVhdlComponentRelations();
- }
- g_classEntries.clear();
-
- msg("Add enum values to enums...\n");
- addEnumValuesToEnums(rootNav);
- findEnumDocumentation(rootNav);
-
- msg("Searching for member function documentation...\n");
- findObjCMethodDefinitions(rootNav);
- findMemberDocumentation(rootNav); // may introduce new members !
-
- transferRelatedFunctionDocumentation();
- transferFunctionDocumentation();
-
- msg("Building page list...\n");
- buildPageList(rootNav);
-
- msg("Search for main page...\n");
- findMainPage(rootNav);
-
- msg("Computing page relations...\n");
- computePageRelations(rootNav);
- checkPageRelations();
-
- msg("Determining the scope of groups...\n");
- findGroupScope(rootNav);
-
- msg("Sorting lists...\n");
- Doxygen::memberNameSDict->sort();
- Doxygen::functionNameSDict->sort();
- Doxygen::hiddenClasses->sort();
- Doxygen::classSDict->sort();
-
- msg("Freeing entry tree\n");
- delete rootNav;
- g_storage->close();
- delete g_storage;
- g_storage=0;
-
- QDir thisDir;
- thisDir.remove(Doxygen::entryDBFileName);
-
- msg("Determining which enums are documented\n");
- findDocumentedEnumValues();
-
- msg("Computing member relations...\n");
- computeMemberRelations();
-
- msg("Building full member lists recursively...\n");
- mergeCategories();
- buildCompleteMemberLists();
-
- msg("Adding members to member groups.\n");
- addMembersToMemberGroup();
-
- if (Config_getBool("DISTRIBUTE_GROUP_DOC"))
- {
- msg("Distributing member group documentation.\n");
- distributeMemberGroupDocumentation();
- }
-
- msg("Computing member references...\n");
- computeMemberReferences();
-
- if (Config_getBool("INHERIT_DOCS"))
- {
- msg("Inheriting documentation...\n");
- inheritDocumentation();
- }
-
- // compute the shortest possible names of all files
- // without loosing the uniqueness of the file names.
- msg("Generating disk names...\n");
- Doxygen::inputNameList->generateDiskNames();
-
- msg("Adding source references...\n");
- addSourceReferences();
-
- msg("Adding xrefitems...\n");
- addListReferences();
- generateXRefPages();
-
- msg("Sorting member lists...\n");
- sortMemberLists();
-
- if (Config_getBool("SHOW_DIRECTORIES") && Config_getBool("DIRECTORY_GRAPH"))
- {
- msg("Computing dependencies between directories...\n");
- computeDirDependencies();
- }
-
- //msg("Resolving citations...\n");
- //Doxygen::citeDict->resolve();
-
- msg("Generating citations page...\n");
- Doxygen::citeDict->generatePage();
-
- msg("Counting data structures...\n");
- countDataStructures();
-
- msg("Resolving user defined references...\n");
- resolveUserReferences();
-
- msg("Finding anchors and sections in the documentation...\n");
- findSectionsInDocumentation();
-
- transferFunctionReferences();
-
- msg("Combining using relations...\n");
- combineUsingRelations();
-
- msg("Adding members to index pages...\n");
- addMembersToIndex();
-}
-
-void generateOutput()
-{
- /**************************************************************************
- * Initialize output generators *
- **************************************************************************/
-
- //// dump all symbols
- if (g_dumpSymbolMap)
- {
- dumpSymbolMap();
- exit(0);
- }
-
- initDocParser();
-
- g_outputList = new OutputList(TRUE);
- if (Config_getBool("GENERATE_HTML"))
- {
- g_outputList->add(new HtmlGenerator);
- HtmlGenerator::init();
-
- // add HTML indexers that are enabled
- bool generateHtmlHelp = Config_getBool("GENERATE_HTMLHELP");
- bool generateEclipseHelp = Config_getBool("GENERATE_ECLIPSEHELP");
- bool generateQhp = Config_getBool("GENERATE_QHP");
- bool generateTreeView = Config_getBool("GENERATE_TREEVIEW");
- bool generateDocSet = Config_getBool("GENERATE_DOCSET");
- if (generateEclipseHelp) Doxygen::indexList.addIndex(new EclipseHelp);
- if (generateHtmlHelp) Doxygen::indexList.addIndex(new HtmlHelp);
- if (generateQhp) Doxygen::indexList.addIndex(new Qhp);
- if (generateTreeView) Doxygen::indexList.addIndex(new FTVHelp(TRUE));
- if (generateDocSet) Doxygen::indexList.addIndex(new DocSets);
- Doxygen::indexList.initialize();
- HtmlGenerator::writeTabData();
-
- // copy static stuff
- copyStyleSheet();
- copyLogo();
- copyExtraFiles();
- if (!generateTreeView && Config_getBool("USE_INLINE_TREES"))
- {
- FTVHelp::generateTreeViewImages();
- }
- }
- if (Config_getBool("GENERATE_LATEX"))
- {
- g_outputList->add(new LatexGenerator);
- LatexGenerator::init();
- }
- if (Config_getBool("GENERATE_MAN"))
- {
- g_outputList->add(new ManGenerator);
- ManGenerator::init();
- }
- if (Config_getBool("GENERATE_RTF"))
- {
- g_outputList->add(new RTFGenerator);
- RTFGenerator::init();
- }
-
- if (Config_getBool("USE_HTAGS"))
- {
- Htags::useHtags = TRUE;
- QCString htmldir = Config_getString("HTML_OUTPUT");
- if (!Htags::execute(htmldir))
- err("error: USE_HTAGS is YES but htags(1) failed. \n");
- if (!Htags::loadFilemap(htmldir))
- err("error: htags(1) ended normally but failed to load the filemap. \n");
- }
-
- /**************************************************************************
- * Generate documentation *
- **************************************************************************/
-
- QFile *tag=0;
- QCString &generateTagFile = Config_getString("GENERATE_TAGFILE");
- if (!generateTagFile.isEmpty())
- {
- tag=new QFile(generateTagFile);
- if (!tag->open(IO_WriteOnly))
- {
- err("error: cannot open tag file %s for writing\n",
- generateTagFile.data()
- );
- cleanUpDoxygen();
- exit(1);
- }
- Doxygen::tagFile.setDevice(tag);
- Doxygen::tagFile << "<?xml version='1.0' encoding='ISO-8859-1' standalone='yes' ?>" << endl;
- Doxygen::tagFile << "<tagfile>" << endl;
- }
-
- if (Config_getBool("GENERATE_HTML")) writeDoxFont(Config_getString("HTML_OUTPUT"));
- if (Config_getBool("GENERATE_LATEX")) writeDoxFont(Config_getString("LATEX_OUTPUT"));
- if (Config_getBool("GENERATE_RTF")) writeDoxFont(Config_getString("RTF_OUTPUT"));
-
- msg("Generating style sheet...\n");
- //printf("writing style info\n");
- QCString genString =
- theTranslator->trGeneratedAt(dateToString(TRUE),Config_getString("PROJECT_NAME"));
- g_outputList->writeStyleInfo(0); // write first part
- g_outputList->disableAllBut(OutputGenerator::Latex);
- g_outputList->parseText(genString);
- g_outputList->writeStyleInfo(1); // write second part
- //parseText(*g_outputList,theTranslator->trWrittenBy());
- g_outputList->writeStyleInfo(2); // write third part
- g_outputList->parseText(genString);
- g_outputList->writeStyleInfo(3); // write fourth part
- //parseText(*g_outputList,theTranslator->trWrittenBy());
- g_outputList->writeStyleInfo(4); // write last part
- g_outputList->enableAll();
-
- static bool searchEngine = Config_getBool("SEARCHENGINE");
- static bool serverBasedSearch = Config_getBool("SERVER_BASED_SEARCH");
-
- // generate search indices (need to do this before writing other HTML
- // pages as these contain a drop down menu with options depending on
- // what categories we find in this function.
- if (Config_getBool("GENERATE_HTML") && searchEngine)
- {
- msg("Generating search indices...\n");
- QCString searchDirName = Config_getString("HTML_OUTPUT")+"/search";
- QDir searchDir(searchDirName);
- if (!searchDir.exists() && !searchDir.mkdir(searchDirName))
- {
- err("error: Could not create search results directory '%s' $PWD='%s'\n",
- searchDirName.data(),QDir::currentDirPath().data());
- exit(1);
- }
- HtmlGenerator::writeSearchData(searchDirName);
- if (!serverBasedSearch) // client side search index
- {
- writeJavascriptSearchIndex();
- }
- }
-
- msg("Generating example documentation...\n");
- generateExampleDocs();
-
- msg("Generating file sources...\n");
- if (!Htags::useHtags)
- {
- generateFileSources();
- }
-
- msg("Generating file documentation...\n");
- generateFileDocs();
-
- msg("Generating page documentation...\n");
- generatePageDocs();
-
- msg("Generating group documentation...\n");
- generateGroupDocs();
-
- msg("Generating class documentation...\n");
- generateClassDocs();
-
- msg("Generating namespace index...\n");
- generateNamespaceDocs();
-
- if (Config_getBool("GENERATE_LEGEND"))
- {
- msg("Generating graph info page...\n");
- writeGraphInfo(*g_outputList);
- }
-
- if (Config_getBool("SHOW_DIRECTORIES"))
- {
- msg("Generating directory documentation...\n");
- generateDirDocs(*g_outputList);
- }
-
- if (Doxygen::formulaList.count()>0 && Config_getBool("GENERATE_HTML")
- && !Config_getBool("USE_MATHJAX"))
- {
- msg("Generating bitmaps for formulas in HTML...\n");
- Doxygen::formulaList.generateBitmaps(Config_getString("HTML_OUTPUT"));
- }
-
- writeIndexHierarchy(*g_outputList);
-
- msg("finalizing index lists...\n");
- Doxygen::indexList.finalize();
-
- if (!Config_getString("GENERATE_TAGFILE").isEmpty())
- {
- Doxygen::tagFile << "</tagfile>" << endl;
- delete tag;
- }
-
- if (Config_getBool("DOT_CLEANUP"))
- {
- if (Config_getBool("GENERATE_HTML"))
- removeDoxFont(Config_getString("HTML_OUTPUT"));
- if (Config_getBool("GENERATE_RTF"))
- removeDoxFont(Config_getString("RTF_OUTPUT"));
- if (Config_getBool("GENERATE_LATEX"))
- removeDoxFont(Config_getString("LATEX_OUTPUT"));
- }
-
- if (Config_getBool("GENERATE_XML"))
- {
- msg("Generating XML output...\n");
- Doxygen::generatingXmlOutput=TRUE;
- generateXML();
- Doxygen::generatingXmlOutput=FALSE;
- }
- if (Config_getBool("GENERATE_AUTOGEN_DEF"))
- {
- msg("Generating AutoGen DEF output...\n");
- generateDEF();
- }
- if (Config_getBool("GENERATE_PERLMOD"))
- {
- msg("Generating Perl module output...\n");
- generatePerlMod();
- }
- if (Config_getBool("GENERATE_HTML") && searchEngine && serverBasedSearch)
- {
- msg("Generating search index\n");
- HtmlGenerator::writeSearchPage();
- Doxygen::searchIndex->write(Config_getString("HTML_OUTPUT")+"/search/search.idx");
- }
-
- if (Config_getBool("GENERATE_RTF"))
- {
- msg("Combining RTF output...\n");
- if (!RTFGenerator::preProcessFileInplace(Config_getString("RTF_OUTPUT"),"refman.rtf"))
- {
- err("An error occurred during post-processing the RTF files!\n");
- }
- }
-
- if (Config_getBool("HAVE_DOT"))
- {
- DotManager::instance()->run();
- }
-
- if (Config_getBool("GENERATE_HTML") &&
- Config_getBool("GENERATE_HTMLHELP") &&
- !Config_getString("HHC_LOCATION").isEmpty())
- {
- msg("Running html help compiler...\n");
- QString oldDir = QDir::currentDirPath();
- QDir::setCurrent(Config_getString("HTML_OUTPUT"));
- portable_sysTimerStart();
- if (portable_system(Config_getString("HHC_LOCATION"), "index.hhp", FALSE))
- {
- err("error: failed to run html help compiler on index.hhp\n");
- }
- portable_sysTimerStop();
- QDir::setCurrent(oldDir);
- }
- if ( Config_getBool("GENERATE_HTML") &&
- Config_getBool("GENERATE_QHP") &&
- !Config_getString("QHG_LOCATION").isEmpty())
- {
- msg("Running qhelpgenerator...\n");
- QCString const qhpFileName = Qhp::getQhpFileName();
- QCString const qchFileName = getQchFileName();
-
- QCString const args = QCString().sprintf("%s -o \"%s\"", qhpFileName.data(), qchFileName.data());
- QString const oldDir = QDir::currentDirPath();
- QDir::setCurrent(Config_getString("HTML_OUTPUT"));
- portable_sysTimerStart();
- if (portable_system(Config_getString("QHG_LOCATION"), args.data(), FALSE))
- {
- err("error: failed to run qhelpgenerator on index.qhp\n");
- }
- portable_sysTimerStop();
- QDir::setCurrent(oldDir);
- }
-
- int cacheParam;
- msg("symbol cache used %d/%d hits=%d misses=%d\n",
- Doxygen::symbolCache->count(),
- Doxygen::symbolCache->size(),
- Doxygen::symbolCache->hits(),
- Doxygen::symbolCache->misses());
- cacheParam = computeIdealCacheParam(Doxygen::symbolCache->misses());
- if (cacheParam>Config_getInt("SYMBOL_CACHE_SIZE"))
- {
- msg("Note: based on cache misses the ideal setting for SYMBOL_CACHE_SIZE is %d at the cost of higher memory usage.\n",cacheParam);
- }
- msg("lookup cache used %d/%d hits=%d misses=%d\n",
- Doxygen::lookupCache->count(),
- Doxygen::lookupCache->size(),
- Doxygen::lookupCache->hits(),
- Doxygen::lookupCache->misses());
- cacheParam = computeIdealCacheParam(Doxygen::lookupCache->misses()*2/3); // part of the cache is flushed, hence the 2/3 correction factor
- if (cacheParam>Config_getInt("LOOKUP_CACHE_SIZE"))
- {
- msg("Note: based on cache misses the ideal setting for LOOKUP_CACHE_SIZE is %d at the cost of higher memory usage.\n",cacheParam);
- }
-
- if (Debug::isFlagSet(Debug::Time))
- {
- msg("Total elapsed time: %.3f seconds\n(of which %.3f seconds waiting for external tools to finish)\n",
- ((double)Doxygen::runningTime.elapsed())/1000.0,
- portable_getSysElapsedTime()
- );
- }
- else
- {
- msg("finished...\n");
- }
-
- /**************************************************************************
- * Start cleaning up *
- **************************************************************************/
-
- cleanUpDoxygen();
-
- finializeDocParser();
- Doxygen::symbolStorage->close();
- QDir thisDir;
- thisDir.remove(Doxygen::objDBFileName);
- Config::deleteInstance();
- QTextCodec::deleteAllCodecs();
- delete Doxygen::symbolCache;
- delete Doxygen::symbolMap;
- delete Doxygen::symbolStorage;
- g_successfulRun=TRUE;
-}
-
diff --git a/trunk/src/doxygen.css b/trunk/src/doxygen.css
deleted file mode 100644
index 831831a..0000000
--- a/trunk/src/doxygen.css
+++ /dev/null
@@ -1,1015 +0,0 @@
-/* The standard CSS for doxygen */
-
-body, table, div, p, dl {
- font-family: Lucida Grande, Verdana, Geneva, Arial, sans-serif;
- font-size: 13px;
- line-height: 1.3;
-}
-
-/* @group Heading Levels */
-
-h1 {
- font-size: 150%;
-}
-
-.title {
- font-size: 150%;
- font-weight: bold;
- margin: 10px 2px;
-}
-
-h2 {
- font-size: 120%;
-}
-
-h3 {
- font-size: 100%;
-}
-
-dt {
- font-weight: bold;
-}
-
-div.multicol {
- -moz-column-gap: 1em;
- -webkit-column-gap: 1em;
- -moz-column-count: 3;
- -webkit-column-count: 3;
-}
-
-p.startli, p.startdd, p.starttd {
- margin-top: 2px;
-}
-
-p.endli {
- margin-bottom: 0px;
-}
-
-p.enddd {
- margin-bottom: 4px;
-}
-
-p.endtd {
- margin-bottom: 2px;
-}
-
-/* @end */
-
-caption {
- font-weight: bold;
-}
-
-span.legend {
- font-size: 70%;
- text-align: center;
-}
-
-h3.version {
- font-size: 90%;
- text-align: center;
-}
-
-div.qindex, div.navtab{
- background-color: ##ee;
- border: 1px solid ##b0;
- text-align: center;
-}
-
-div.qindex, div.navpath {
- width: 100%;
- line-height: 140%;
-}
-
-div.navtab {
- margin-right: 15px;
-}
-
-/* @group Link Styling */
-
-a {
- color: ##50;
- font-weight: normal;
- text-decoration: none;
-}
-
-.contents a:visited {
- color: ##60;
-}
-
-a:hover {
- text-decoration: underline;
-}
-
-a.qindex {
- font-weight: bold;
-}
-
-a.qindexHL {
- font-weight: bold;
- background-color: ##AA;
- color: #ffffff;
- border: 1px double ##98;
-}
-
-.contents a.qindexHL:visited {
- color: #ffffff;
-}
-
-a.el {
- font-weight: bold;
-}
-
-a.elRef {
-}
-
-a.code, a.code:visited {
- color: #4665A2;
-}
-
-a.codeRef, a.codeRef:visited {
- color: #4665A2;
-}
-
-/* @end */
-
-dl.el {
- margin-left: -1cm;
-}
-
-.fragment {
- font-family: monospace, fixed;
- font-size: 105%;
-}
-
-pre.fragment {
- border: 1px solid ##CC;
- background-color: ##FC;
- padding: 4px 6px;
- margin: 4px 8px 4px 2px;
- overflow: auto;
- word-wrap: break-word;
- font-size: 9pt;
- line-height: 125%;
-}
-
-div.ah {
- background-color: black;
- font-weight: bold;
- color: #ffffff;
- margin-bottom: 3px;
- margin-top: 3px;
- padding: 0.2em;
- border: solid thin #333;
- border-radius: 0.5em;
- -webkit-border-radius: .5em;
- -moz-border-radius: .5em;
- box-shadow: 2px 2px 3px #999;
- -webkit-box-shadow: 2px 2px 3px #999;
- -moz-box-shadow: rgba(0, 0, 0, 0.15) 2px 2px 2px;
- background-image: -webkit-gradient(linear, left top, left bottom, from(#eee), to(#000),color-stop(0.3, #444));
- background-image: -moz-linear-gradient(center top, #eee 0%, #444 40%, #000);
-}
-
-div.groupHeader {
- margin-left: 16px;
- margin-top: 12px;
- font-weight: bold;
-}
-
-div.groupText {
- margin-left: 16px;
- font-style: italic;
-}
-
-body {
- background-color: white;
- color: black;
- margin: 0;
-}
-
-div.contents {
- margin-top: 10px;
- margin-left: 8px;
- margin-right: 8px;
-}
-
-td.indexkey {
- background-color: ##ee;
- font-weight: bold;
- border: 1px solid ##cc;
- margin: 2px 0px 2px 0;
- padding: 2px 10px;
- white-space: nowrap;
- vertical-align: top;
-}
-
-td.indexvalue {
- background-color: ##ee;
- border: 1px solid ##cc;
- padding: 2px 10px;
- margin: 2px 0px;
-}
-
-tr.memlist {
- background-color: ##f0;
-}
-
-p.formulaDsp {
- text-align: center;
-}
-
-img.formulaDsp {
-
-}
-
-img.formulaInl {
- vertical-align: middle;
-}
-
-div.center {
- text-align: center;
- margin-top: 0px;
- margin-bottom: 0px;
- padding: 0px;
-}
-
-div.center img {
- border: 0px;
-}
-
-address.footer {
- text-align: right;
- padding-right: 12px;
-}
-
-img.footer {
- border: 0px;
- vertical-align: middle;
-}
-
-/* @group Code Colorization */
-
-span.keyword {
- color: #008000
-}
-
-span.keywordtype {
- color: #604020
-}
-
-span.keywordflow {
- color: #e08000
-}
-
-span.comment {
- color: #800000
-}
-
-span.preprocessor {
- color: #806020
-}
-
-span.stringliteral {
- color: #002080
-}
-
-span.charliteral {
- color: #008080
-}
-
-span.vhdldigit {
- color: #ff00ff
-}
-
-span.vhdlchar {
- color: #000000
-}
-
-span.vhdlkeyword {
- color: #700070
-}
-
-span.vhdllogic {
- color: #ff0000
-}
-
-blockquote {
- background-color: ##F8;
- border-left: 2px solid ##AA;
- margin: 0 24px 0 4px;
- padding: 0 12px 0 16px;
-}
-
-/* @end */
-
-/*
-.search {
- color: #003399;
- font-weight: bold;
-}
-
-form.search {
- margin-bottom: 0px;
- margin-top: 0px;
-}
-
-input.search {
- font-size: 75%;
- color: #000080;
- font-weight: normal;
- background-color: #e8eef2;
-}
-*/
-
-td.tiny {
- font-size: 75%;
-}
-
-.dirtab {
- padding: 4px;
- border-collapse: collapse;
- border: 1px solid ##b0;
-}
-
-th.dirtab {
- background: ##ee;
- font-weight: bold;
-}
-
-hr {
- height: 0px;
- border: none;
- border-top: 1px solid ##66;
-}
-
-hr.footer {
- height: 1px;
-}
-
-/* @group Member Descriptions */
-
-table.memberdecls {
- border-spacing: 0px;
- padding: 0px;
-}
-
-.mdescLeft, .mdescRight,
-.memItemLeft, .memItemRight,
-.memTemplItemLeft, .memTemplItemRight, .memTemplParams {
- background-color: ##FA;
- border: none;
- margin: 4px;
- padding: 1px 0 0 8px;
-}
-
-.mdescLeft, .mdescRight {
- padding: 0px 8px 4px 8px;
- color: #555;
-}
-
-.memItemLeft, .memItemRight, .memTemplParams {
- border-top: 1px solid ##cc;
-}
-
-.memItemLeft, .memTemplItemLeft {
- white-space: nowrap;
-}
-
-.memItemRight {
- width: 100%;
-}
-
-.memTemplParams {
- color: ##60;
- white-space: nowrap;
-}
-
-/* @end */
-
-/* @group Member Details */
-
-/* Styles for detailed member documentation */
-
-.memtemplate {
- font-size: 80%;
- color: ##60;
- font-weight: normal;
- margin-left: 9px;
-}
-
-.memnav {
- background-color: ##ee;
- border: 1px solid ##b0;
- text-align: center;
- margin: 2px;
- margin-right: 15px;
- padding: 2px;
-}
-
-.mempage {
- width: 100%;
-}
-
-.memitem {
- padding: 0;
- margin-bottom: 10px;
- margin-right: 5px;
-}
-
-.memname {
- font-weight: bold;
- margin-left: 6px;
-}
-
-.memname td {
- vertical-align: bottom;
-}
-
-.memproto, dl.reflist dt {
- border-top: 1px solid ##B4;
- border-left: 1px solid ##B4;
- border-right: 1px solid ##B4;
- padding: 6px 0px 6px 0px;
- color: ##2b;
- font-weight: bold;
- text-shadow: 0px 1px 1px rgba(255, 255, 255, 0.9);
- /* opera specific markup */
- box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15);
- border-top-right-radius: 8px;
- border-top-left-radius: 8px;
- /* firefox specific markup */
- -moz-box-shadow: rgba(0, 0, 0, 0.15) 5px 5px 5px;
- -moz-border-radius-topright: 8px;
- -moz-border-radius-topleft: 8px;
- /* webkit specific markup */
- -webkit-box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15);
- -webkit-border-top-right-radius: 8px;
- -webkit-border-top-left-radius: 8px;
- background-image:url('nav_f.png');
- background-repeat:repeat-x;
- background-color: ##E6;
-
-}
-
-.memdoc, dl.reflist dd {
- border-bottom: 1px solid ##B4;
- border-left: 1px solid ##B4;
- border-right: 1px solid ##B4;
- padding: 2px 5px;
- background-color: ##FC;
- border-top-width: 0;
- /* opera specific markup */
- border-bottom-left-radius: 8px;
- border-bottom-right-radius: 8px;
- box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15);
- /* firefox specific markup */
- -moz-border-radius-bottomleft: 8px;
- -moz-border-radius-bottomright: 8px;
- -moz-box-shadow: rgba(0, 0, 0, 0.15) 5px 5px 5px;
- background-image: -moz-linear-gradient(center top, ##FF 0%, ##FF 60%, ##F8 95%, ##F0);
- /* webkit specific markup */
- -webkit-border-bottom-left-radius: 8px;
- -webkit-border-bottom-right-radius: 8px;
- -webkit-box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15);
- background-image: -webkit-gradient(linear,center top,center bottom,from(##FF), color-stop(0.6,##FF), color-stop(0.60,##FF), color-stop(0.95,##F8), to(##F0));
-}
-
-dl.reflist dt {
- padding: 5px;
-}
-
-dl.reflist dd {
- margin: 0px 0px 10px 0px;
- padding: 5px;
-}
-
-.paramkey {
- text-align: right;
-}
-
-.paramtype {
- white-space: nowrap;
-}
-
-.paramname {
- color: #602020;
- white-space: nowrap;
-}
-.paramname em {
- font-style: normal;
-}
-
-.params, .retval, .exception, .tparams {
- border-spacing: 6px 2px;
-}
-
-.params .paramname, .retval .paramname {
- font-weight: bold;
- vertical-align: top;
-}
-
-.params .paramtype {
- font-style: italic;
- vertical-align: top;
-}
-
-.params .paramdir {
- font-family: "courier new",courier,monospace;
- vertical-align: top;
-}
-
-
-
-
-/* @end */
-
-/* @group Directory (tree) */
-
-/* for the tree view */
-
-.ftvtree {
- font-family: sans-serif;
- margin: 0px;
-}
-
-/* these are for tree view when used as main index */
-
-.directory {
- font-size: 9pt;
- font-weight: bold;
- margin: 5px;
-}
-
-.directory h3 {
- margin: 0px;
- margin-top: 1em;
- font-size: 11pt;
-}
-
-/*
-The following two styles can be used to replace the root node title
-with an image of your choice. Simply uncomment the next two styles,
-specify the name of your image and be sure to set 'height' to the
-proper pixel height of your image.
-*/
-
-/*
-.directory h3.swap {
- height: 61px;
- background-repeat: no-repeat;
- background-image: url("yourimage.gif");
-}
-.directory h3.swap span {
- display: none;
-}
-*/
-
-.directory > h3 {
- margin-top: 0;
-}
-
-.directory p {
- margin: 0px;
- white-space: nowrap;
-}
-
-.directory div {
- display: none;
- margin: 0px;
-}
-
-.directory img {
- vertical-align: -30%;
-}
-
-/* these are for tree view when not used as main index */
-
-.directory-alt {
- font-size: 100%;
- font-weight: bold;
-}
-
-.directory-alt h3 {
- margin: 0px;
- margin-top: 1em;
- font-size: 11pt;
-}
-
-.directory-alt > h3 {
- margin-top: 0;
-}
-
-.directory-alt p {
- margin: 0px;
- white-space: nowrap;
-}
-
-.directory-alt div {
- display: none;
- margin: 0px;
-}
-
-.directory-alt img {
- vertical-align: -30%;
-}
-
-/* @end */
-
-div.dynheader {
- margin-top: 8px;
-}
-
-address {
- font-style: normal;
- color: ##33;
-}
-
-table.doxtable {
- border-collapse:collapse;
- margin-top: 4px;
- margin-bottom: 4px;
-}
-
-table.doxtable td, table.doxtable th {
- border: 1px solid ##37;
- padding: 3px 7px 2px;
-}
-
-table.doxtable th {
- background-color: ##47;
- color: #FFFFFF;
- font-size: 110%;
- padding-bottom: 4px;
- padding-top: 5px;
-}
-
-table.fieldtable {
- width: 100%;
- margin-bottom: 10px;
- border: 1px solid ##B4;
- border-spacing: 0px;
- -moz-border-radius: 4px;
- -webkit-border-radius: 4px;
- border-radius: 4px;
- -moz-box-shadow: rgba(0, 0, 0, 0.15) 2px 2px 2px;
- -webkit-box-shadow: 2px 2px 2px rgba(0, 0, 0, 0.15);
- box-shadow: 2px 2px 2px rgba(0, 0, 0, 0.15);
-}
-
-.fieldtable td, .fieldtable th {
- padding: 3px 7px 2px;
-}
-
-.fieldtable td.fieldtype, .fieldtable td.fieldname {
- white-space: nowrap;
- border-right: 1px solid ##B4;
- border-bottom: 1px solid ##B4;
- vertical-align: top;
-}
-
-.fieldtable td.fielddoc {
- border-bottom: 1px solid ##B4;
- width: 100%;
-}
-
-.fieldtable tr:last-child td {
- border-bottom: none;
-}
-
-.fieldtable th {
- background-image:url('nav_f.png');
- background-repeat:repeat-x;
- background-color: ##E6;
- font-size: 90%;
- color: ##2B;
- padding-bottom: 4px;
- padding-top: 5px;
- text-align:left;
- -moz-border-radius-topleft: 4px;
- -moz-border-radius-topright: 4px;
- -webkit-border-top-left-radius: 4px;
- -webkit-border-top-right-radius: 4px;
- border-top-left-radius: 4px;
- border-top-right-radius: 4px;
- border-bottom: 1px solid ##B4;
-}
-
-
-.tabsearch {
- top: 0px;
- left: 10px;
- height: 36px;
- background-image: url('tab_b.png');
- z-index: 101;
- overflow: hidden;
- font-size: 13px;
-}
-
-.navpath ul
-{
- font-size: 11px;
- background-image:url('tab_b.png');
- background-repeat:repeat-x;
- height:30px;
- line-height:30px;
- color:##9b;
- border:solid 1px ##ca;
- overflow:hidden;
- margin:0px;
- padding:0px;
-}
-
-.navpath li
-{
- list-style-type:none;
- float:left;
- padding-left:10px;
- padding-right:15px;
- background-image:url('bc_s.png');
- background-repeat:no-repeat;
- background-position:right;
- color:##45;
-}
-
-.navpath li.navelem a
-{
- height:32px;
- display:block;
- text-decoration: none;
- outline: none;
-}
-
-.navpath li.navelem a:hover
-{
- color:##80;
-}
-
-.navpath li.footer
-{
- list-style-type:none;
- float:right;
- padding-left:10px;
- padding-right:15px;
- background-image:none;
- background-repeat:no-repeat;
- background-position:right;
- color:##45;
- font-size: 8pt;
-}
-
-
-div.summary
-{
- float: right;
- font-size: 8pt;
- padding-right: 5px;
- width: 50%;
- text-align: right;
-}
-
-div.summary a
-{
- white-space: nowrap;
-}
-
-div.ingroups
-{
- margin-left: 5px;
- font-size: 8pt;
- padding-left: 5px;
- width: 50%;
- text-align: left;
-}
-
-div.ingroups a
-{
- white-space: nowrap;
-}
-
-div.header
-{
- background-image:url('nav_h.png');
- background-repeat:repeat-x;
- background-color: ##FA;
- margin: 0px;
- border-bottom: 1px solid ##CC;
-}
-
-div.headertitle
-{
- padding: 5px 5px 5px 7px;
-}
-
-dl
-{
- padding: 0 0 0 10px;
-}
-
-/* dl.note, dl.warning, dl.attention, dl.pre, dl.post, dl.invariant, dl.deprecated, dl.todo, dl.test, dl.bug */
-dl.section
-{
- border-left:4px solid;
- padding: 0 0 0 6px;
-}
-
-dl.note
-{
- border-color: #D0C000;
-}
-
-dl.warning, dl.attention
-{
- border-color: #FF0000;
-}
-
-dl.pre, dl.post, dl.invariant
-{
- border-color: #00D000;
-}
-
-dl.deprecated
-{
- border-color: #505050;
-}
-
-dl.todo
-{
- border-color: #00C0E0;
-}
-
-dl.test
-{
- border-color: #3030E0;
-}
-
-dl.bug
-{
- border-color: #C08050;
-}
-
-dl.section dd {
- margin-bottom: 6px;
-}
-
-
-#projectlogo
-{
- text-align: center;
- vertical-align: bottom;
- border-collapse: separate;
-}
-
-#projectlogo img
-{
- border: 0px none;
-}
-
-#projectname
-{
- font: 300% Tahoma, Arial,sans-serif;
- margin: 0px;
- padding: 2px 0px;
-}
-
-#projectbrief
-{
- font: 120% Tahoma, Arial,sans-serif;
- margin: 0px;
- padding: 0px;
-}
-
-#projectnumber
-{
- font: 50% Tahoma, Arial,sans-serif;
- margin: 0px;
- padding: 0px;
-}
-
-#titlearea
-{
- padding: 0px;
- margin: 0px;
- width: 100%;
- border-bottom: 1px solid ##70;
-}
-
-.image
-{
- text-align: center;
-}
-
-.dotgraph
-{
- text-align: center;
-}
-
-.mscgraph
-{
- text-align: center;
-}
-
-.caption
-{
- font-weight: bold;
-}
-
-div.zoom
-{
- border: 1px solid ##A0;
-}
-
-dl.citelist {
- margin-bottom:50px;
-}
-
-dl.citelist dt {
- color:##40;
- float:left;
- font-weight:bold;
- margin-right:10px;
- padding:5px;
-}
-
-dl.citelist dd {
- margin:2px 0;
- padding:5px 0;
-}
-
-div.toc {
- padding: 14px 25px;
- background-color: ##F6;
- border: 1px solid ##DD;
- border-radius: 7px 7px 7px 7px;
- float: right;
- height: auto;
- margin: 0 20px 10px 10px;
- width: 200px;
-}
-
-div.toc li {
- background: url("bdwn.png") no-repeat scroll 0 5px transparent;
- font: 10px/1.2 Verdana,DejaVu Sans,Geneva,sans-serif;
- margin-top: 5px;
- padding-left: 10px;
- padding-top: 2px;
-}
-
-div.toc h3 {
- font: bold 12px/1.2 Arial,FreeSans,sans-serif;
- color: ##60;
- border-bottom: 0 none;
- margin: 0;
-}
-
-div.toc ul {
- list-style: none outside none;
- border: medium none;
- padding: 0px;
-}
-
-div.toc li.level1 {
- margin-left: 0px;
-}
-
-div.toc li.level2 {
- margin-left: 15px;
-}
-
-div.toc li.level3 {
- margin-left: 30px;
-}
-
-div.toc li.level4 {
- margin-left: 45px;
-}
-
-
-@media print
-{
- #top { display: none; }
- #side-nav { display: none; }
- #nav-path { display: none; }
- body { overflow:visible; }
- h1, h2, h3, h4, h5, h6 { page-break-after: avoid; }
- .summary { display: none; }
- .memitem { page-break-inside: avoid; }
- #doc-content
- {
- margin-left:0 !important;
- height:auto !important;
- width:auto !important;
- overflow:inherit;
- display:inline;
- }
- pre.fragment
- {
- overflow: visible;
- text-wrap: unrestricted;
- white-space: -moz-pre-wrap; /* Moz */
- white-space: -pre-wrap; /* Opera 4-6 */
- white-space: -o-pre-wrap; /* Opera 7 */
- white-space: pre-wrap; /* CSS3 */
- word-wrap: break-word; /* IE 5.5+ */
- }
-}
-
diff --git a/trunk/src/doxygen.h b/trunk/src/doxygen.h
deleted file mode 100644
index 0e436ec..0000000
--- a/trunk/src/doxygen.h
+++ /dev/null
@@ -1,177 +0,0 @@
-/******************************************************************************
- *
- *
- *
- *
- * Copyright (C) 1997-2012 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.
- *
- */
-
-#ifndef DOXYGEN_H
-#define DOXYGEN_H
-
-#include "qtbc.h"
-#include <qdatetime.h>
-#include <qcache.h>
-#include "ftextstream.h"
-#include "groupdef.h"
-#include "filedef.h"
-#include "classdef.h"
-#include "memberdef.h"
-#include "classlist.h"
-#include "membername.h"
-#include "filename.h"
-#include "namespacedef.h"
-#include "formula.h"
-#include "section.h"
-#include "membergroup.h"
-#include "reflist.h"
-#include "dirdef.h"
-#include "index.h"
-#include "docsets.h"
-
-class PageSList;
-class PageSDict;
-class PageDef;
-class SearchIndex;
-class ParserManager;
-class ObjCache;
-class Store;
-class QFileInfo;
-class BufStr;
-class CiteDict;
-
-typedef QList<QCString> StringList;
-typedef QDict<FileDef> FileDict;
-typedef QDict<GroupDef> GroupDict;
-
-class StringDict : public QDict<QCString>
-{
- public:
- StringDict(uint size=17) : QDict<QCString>(size) {}
- virtual ~StringDict() {}
-};
-
-struct LookupInfo
-{
- LookupInfo() : classDef(0), typeDef(0) {}
- LookupInfo(ClassDef *cd,MemberDef *td,QCString ts,QCString rt)
- : classDef(cd), typeDef(td), templSpec(ts),resolvedType(rt) {}
- ClassDef *classDef;
- MemberDef *typeDef;
- QCString templSpec;
- QCString resolvedType;
-};
-
-extern QCString g_spaces;
-
-/*! \brief This class serves as a namespace for global variables used by doxygen.
- *
- * All fields in this class are public and static, so they can be used directly.
- */
-class Doxygen
-{
- public:
- static ClassSDict *classSDict;
- static ClassSDict *hiddenClasses;
- static PageSDict *exampleSDict;
- static PageSDict *pageSDict;
- static PageDef *mainPage;
- static bool insideMainPage;
- static FileNameDict *includeNameDict;
- static FileNameDict *exampleNameDict;
- static FileNameDict *inputNameDict;
- static FileNameList *inputNameList;
- static FileNameDict *imageNameDict;
- static FileNameDict *dotFileNameDict;
- static FileNameDict *mscFileNameDict;
- static QStrList tagfileList;
- static MemberNameSDict *memberNameSDict;
- static MemberNameSDict *functionNameSDict;
- static FTextStream 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 QDict<void> expandAsDefinedDict;
- static NamespaceDef *globalScope;
- static QDict<RefList> *xrefLists; // array of xref lists: todo, test, bug, deprecated ...
- static QCString htmlFileExtension;
- static bool parseSourcesNeeded;
- static QTime runningTime;
- static SearchIndex *searchIndex;
- static QDict<DefinitionIntf> *symbolMap;
- static bool outputToWizard;
- static QDict<int> *htmlDirMap;
- static QCache<LookupInfo> *lookupCache;
- static DirSDict *directories;
- static SDict<DirRelation> dirRelations;
- static ParserManager *parserManager;
- static bool suppressDocWarnings;
- static ObjCache *symbolCache;
- static Store *symbolStorage;
- static QCString objDBFileName;
- static QCString entryDBFileName;
- static CiteDict *citeDict;
- static bool gatherDefines;
- static bool userComments;
- static IndexList indexList;
- static int subpageNestingLevel;
- static QCString spaces;
- static bool generatingXmlOutput;
- static bool markdownSupport;
-};
-
-void initDoxygen();
-void readConfiguration(int argc, char **argv);
-void checkConfiguration();
-void adjustConfiguration();
-void searchInputFiles(StringList &inputFiles);
-void parseInput();
-void generateOutput();
-void readAliases();
-void readFormulaRepository();
-int readFileOrDirectory(const char *s,
- FileNameList *fnList,
- FileNameDict *fnDict,
- StringDict *exclDict,
- QStrList *patList,
- QStrList *exclPatList,
- StringList *resultList,
- StringDict *resultDict,
- bool recursive,
- bool errorIfNotExist=TRUE,
- QDict<void> *killDict = 0
- );
-int readDir(QFileInfo *fi,
- FileNameList *fnList,
- FileNameDict *fnDict,
- StringDict *exclDict,
- QStrList *patList,
- QStrList *exclPatList,
- StringList *resultList,
- StringDict *resultDict,
- bool errorIfNotExist,
- bool recursive,
- QDict<void> *killDict
- );
-void copyAndFilterFile(const char *fileName,BufStr &dest);
-
-#define NEWMATCH
-
-#endif
diff --git a/trunk/src/doxygen.pro.in b/trunk/src/doxygen.pro.in
deleted file mode 100644
index 42ffaa0..0000000
--- a/trunk/src/doxygen.pro.in
+++ /dev/null
@@ -1,39 +0,0 @@
-#
-#
-#
-# Copyright (C) 1997-2012 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.
-#
-# TMake project file for doxygen
-
-TEMPLATE = app.t
-CONFIG = console warn_on $extraopts
-HEADERS = doxygen.h
-SOURCES = main.cpp
-unix:LIBS += -L../lib -ldoxygen -ldoxycfg -lqtools -lmd5 -lpthread
-win32:INCLUDEPATH += .
-win32-mingw:LIBS += -L../lib -ldoxygen -ldoxycfg -lqtools -lmd5 -lpthread
-win32-msvc:LIBS += qtools.lib md5.lib doxygen.lib doxycfg.lib shell32.lib iconv.lib
-win32-msvc:TMAKE_LFLAGS += /LIBPATH:..\lib
-win32-borland:LIBS += qtools.lib md5.lib doxygen.lib doxycfg.lib shell32.lib iconv.lib
-win32-borland:TMAKE_LFLAGS += -L..\lib -L$(BCB)\lib\psdk
-win32:TMAKE_CXXFLAGS += -DQT_NODLL
-win32-g++:LIBS = -L../lib -ldoxygen -ldoxycfg -lqtools -lmd5 -liconv -lpthread
-win32-g++:TMAKE_CXXFLAGS += -fno-exceptions -fno-rtti
-INCLUDEPATH += ../qtools ../libmd5 .
-DESTDIR = ../bin
-TARGET = doxygen
-unix:TARGETDEPS = ../lib/libdoxygen.a ../lib/libdoxycfg.a
-win32:TARGETDEPS = ..\lib\doxygen.lib ..\lib\doxycfg.lib
-win32-g++:TARGETDEPS = ../lib/libdoxygen.a ../lib/libdoxycfg.a
-win32-mingw:TARGETDEPS = ../lib/libdoxygen.a ../lib/libdoxycfg.a
-OBJECTS_DIR = ../objects
-
diff --git a/trunk/src/doxygen_bst.h b/trunk/src/doxygen_bst.h
deleted file mode 100644
index c51f2df..0000000
--- a/trunk/src/doxygen_bst.h
+++ /dev/null
@@ -1,1388 +0,0 @@
-" % \n"
-" % \n"
-" % This file is either \"html-btxbst.doc\" or was derived from\n"
-" % \"html-btxbst.doc\" using cpp. \"html-btxbst.doc\" itself was edited\n"
-" % from \"btxbst.doc\" and \"named.bst\".\n"
-" % The following copyright information is from btxbst.doc:\n"
-" % version 0.99b for BibTeX versions 0.99a or later, LaTeX version 2.09.\n"
-" % Copyright (C) 1985, all rights reserved.\n"
-" % Copying of this file is authorized only if either\n"
-" % (1) you make absolutely no changes to your copy, including name, or\n"
-" % (2) if you do make changes, you name it something other than\n"
-" % btxbst.doc, plain.bst, unsrt.bst, alpha.bst, and abbrv.bst.\n"
-" % This restriction helps ensure that all standard styles are identical.\n"
-" % The file btxbst.doc has the documentation for this style.\n"
-" % \"named\" style (sorted keys of the form [name, year])\n"
-" % Some code for this was taken from \"named.bst\".\n"
-"\n"
-"ENTRY\n"
-" { address\n"
-" author\n"
-" booktitle\n"
-" chapter\n"
-" edition\n"
-" editor\n"
-" howpublished\n"
-" institution\n"
-" journal\n"
-" key\n"
-" month\n"
-" note\n"
-" number\n"
-" organization\n"
-" pages\n"
-" publisher\n"
-" school\n"
-" series\n"
-" title\n"
-" type\n"
-" volume\n"
-" year\n"
-" dvi\n"
-" html\n"
-" keywords\n"
-" pdf\n"
-" postscript\n"
-" url\n"
-" doi\n"
-" mailto\n"
-" }\n"
-" {}\n"
-" { label extra.label sort.label }\n"
-"\n"
-"INTEGERS { output.state before.all mid.sentence after.sentence after.block }\n"
-"\n"
-"FUNCTION {init.state.consts}\n"
-"{ #0 'before.all :=\n"
-" #1 'mid.sentence :=\n"
-" #2 'after.sentence :=\n"
-" #3 'after.block :=\n"
-"}\n"
-"\n"
-"STRINGS { s t }\n"
-"\n"
-"FUNCTION {output.nonnull}\n"
-"{ 's :=\n"
-" output.state mid.sentence =\n"
-" { \", \" * write$ }\n"
-" { output.state after.block =\n"
-" { add.period$ write$\n"
-" newline$\n"
-" }\n"
-" { output.state before.all =\n"
-" 'write$\n"
-" { add.period$ \" \" * write$ }\n"
-" if$\n"
-" }\n"
-" if$\n"
-" mid.sentence 'output.state :=\n"
-" }\n"
-" if$\n"
-" s\n"
-"}\n"
-"\n"
-"FUNCTION {output}\n"
-"{ duplicate$ empty$\n"
-" 'pop$\n"
-" 'output.nonnull\n"
-" if$\n"
-"}\n"
-"\n"
-"FUNCTION {output.check}\n"
-"{ 't :=\n"
-" duplicate$ empty$\n"
-" { pop$ \"empty \" t * \" in \" * cite$ * warning$ }\n"
-" 'output.nonnull\n"
-" if$\n"
-"}\n"
-"\n"
-"FUNCTION {output.bibitem}\n"
-"{ newline$\n"
-" author empty$\n"
-" { editor empty$\n"
-" { organization empty$\n"
-" 'skip$\n"
-" { \"<!-- Authors: \" organization purify$ * \" -->\" * write$ newline$ }\n"
-" if$\n"
-" } \n"
-" { \"<!-- Authors: \" editor purify$ * \" -->\" * write$ newline$ }\n"
-" if$\n"
-" }\n"
-" { \"<!-- Authors: \" author purify$ * \" -->\" * write$ newline$ }\n"
-" if$\n"
-" keywords empty$\n"
-" 'skip$\n"
-" { \"<!-- Keywords: \" keywords * \" -->\" * write$ newline$ }\n"
-" if$\n"
-" \"<dt><a name=\" quote$ * \"CITEREF_\" * cite$ * quote$ * \">[\" * label * \"]</a></dt><dd>\" * write$\n"
-" \"\"\n"
-" before.all 'output.state :=\n"
-"}\n"
-"\n"
-"FUNCTION {fin.entry}\n"
-"{ add.period$\n"
-" write$\n"
-" postscript empty$\n"
-" 'skip$\n"
-" { newline$ \"<!-- PostScript: \" postscript * \" -->\" * write$ }\n"
-" if$\n"
-" pdf empty$\n"
-" 'skip$\n"
-" { newline$ \"<!-- PDF: \" pdf * \" -->\" * write$ }\n"
-" if$\n"
-" dvi empty$\n"
-" 'skip$\n"
-" { newline$ \"<!-- DVI: \" dvi * \" -->\" * write$ }\n"
-" if$\n"
-" doi empty$\n"
-" 'skip$\n"
-" { newline$ \"<!-- DOI: \" doi * \" -->\" * write$ }\n"
-" if$\n"
-" \"</dd>\" write$\n"
-" newline$\n"
-" newline$\n"
-"}\n"
-"\n"
-"FUNCTION {new.block}\n"
-"{ output.state before.all =\n"
-" 'skip$\n"
-" { after.block 'output.state := }\n"
-" if$\n"
-"}\n"
-"\n"
-"FUNCTION {new.sentence}\n"
-"{ output.state after.block =\n"
-" 'skip$\n"
-" { output.state before.all =\n"
-" 'skip$\n"
-" { after.sentence 'output.state := }\n"
-" if$\n"
-" }\n"
-" if$\n"
-"}\n"
-"\n"
-"FUNCTION {not}\n"
-"{ { #0 }\n"
-" { #1 }\n"
-" if$\n"
-"}\n"
-"\n"
-"FUNCTION {and}\n"
-"{ 'skip$\n"
-" { pop$ #0 }\n"
-" if$\n"
-"}\n"
-"\n"
-"FUNCTION {or}\n"
-"{ { pop$ #1 }\n"
-" 'skip$\n"
-" if$\n"
-"}\n"
-"\n"
-"FUNCTION {str.to.int}\n"
-"{\n"
-" 's :=\n"
-" #0\n"
-" { s empty$ not }\n"
-" { % Multiply the number on the top of the stack by 10 = 1010 binary\n"
-" duplicate$ + % x2\n"
-" duplicate$ % x2 x2\n"
-" duplicate$ + duplicate$ + % x2 x8\n"
-" +\n"
-" s #1 #1 substring$ chr.to.int$ #48 - + % #48 is ascii for '0'\n"
-" s #2 global.max$ substring$ 's :=\n"
-" }\n"
-" while$\n"
-"}\n"
-"\n"
-"FUNCTION {new.block.checka}\n"
-"{ empty$\n"
-" 'skip$\n"
-" 'new.block\n"
-" if$\n"
-"}\n"
-"\n"
-"FUNCTION {new.block.checkb}\n"
-"{ empty$\n"
-" swap$ empty$\n"
-" and\n"
-" 'skip$\n"
-" 'new.block\n"
-" if$\n"
-"}\n"
-"\n"
-"FUNCTION {new.sentence.checka}\n"
-"{ empty$\n"
-" 'skip$\n"
-" 'new.sentence\n"
-" if$\n"
-"}\n"
-"\n"
-"FUNCTION {new.sentence.checkb}\n"
-"{ empty$\n"
-" swap$ empty$\n"
-" and\n"
-" 'skip$\n"
-" 'new.sentence\n"
-" if$\n"
-"}\n"
-"\n"
-"FUNCTION {field.or.null}\n"
-"{ duplicate$ empty$\n"
-" { pop$ \"\" }\n"
-" 'skip$\n"
-" if$\n"
-"}\n"
-"\n"
-"FUNCTION {emphasize}\n"
-"{ duplicate$ empty$\n"
-" { pop$ \"\" }\n"
-" { \"<em>\" swap$ * \"</em>\" * }\n"
-" if$\n"
-"}\n"
-"\n"
-"FUNCTION {add.link} % title\n"
-"{\n"
-" 't :=\n"
-" t empty$\n"
-" { \"\" }\n"
-" { url empty$\n"
-" { html empty$\n"
-" { t }\n"
-" { \"<a href=\" quote$ * html * quote$ * \">\" * t * \"</a>\" * }\n"
-" if$ }\n"
-" { \"<a href=\" quote$ * url * quote$ * \">\" * t * \"</a>\" * }\n"
-" if$\n"
-" }\n"
-" if$\n"
-"}\n"
-"\n"
-"FUNCTION {add.mailto} % authors\n"
-"{\n"
-" 't :=\n"
-" t empty$\n"
-" { \"\" }\n"
-" { mailto empty$\n"
-" { t }\n"
-" { \"<a href=\" quote$ * \"mailto:\" * mailto * quote$ * \">\" * t * \"</a>\" * }\n"
-" if$\n"
-" }\n"
-" if$\n"
-"}\n"
-"\n"
-"INTEGERS { nameptr namesleft numnames }\n"
-"\n"
-"FUNCTION {format.names}\n"
-"{ 's :=\n"
-" #1 'nameptr :=\n"
-" s num.names$ 'numnames :=\n"
-" numnames 'namesleft :=\n"
-" { namesleft #0 > }\n"
-" { s nameptr \"{ff~}{vv~}{ll}{, jj}\" format.name$ 't :=\n"
-" \"\\bibxhtmlname{\" t * \"}\" * 't :=\n"
-" nameptr #1 >\n"
-" { namesleft #1 >\n"
-" { \", \" * t * }\n"
-" { numnames #2 >\n"
-" { \",\" * }\n"
-" 'skip$\n"
-" if$\n"
-" t \"others\" =\n"
-" { \" et~al.\" * }\n"
-" { \" and \" * t * }\n"
-" if$\n"
-" }\n"
-" if$\n"
-" }\n"
-" 't\n"
-" if$\n"
-" nameptr #1 + 'nameptr :=\n"
-" namesleft #1 - 'namesleft :=\n"
-" }\n"
-" while$\n"
-"}\n"
-"\n"
-"FUNCTION {format.authors}\n"
-"{ author empty$\n"
-" { \"\" }\n"
-" { author format.names }\n"
-" if$\n"
-" add.mailto\n"
-"}\n"
-"\n"
-"FUNCTION {format.editors}\n"
-"{ editor empty$\n"
-" { \"\" }\n"
-" { editor format.names\n"
-" editor num.names$ #1 >\n"
-" { \", editors\" * }\n"
-" { \", editor\" * }\n"
-" if$\n"
-" }\n"
-" if$\n"
-"}\n"
-"\n"
-"FUNCTION {format.title}\n"
-"{ title empty$\n"
-" { \"\" }\n"
-" { title \"t\" change.case$ }\n"
-" if$\n"
-" add.link\n"
-"}\n"
-"\n"
-"FUNCTION {n.dashify}\n"
-"{ 't :=\n"
-" \"\"\n"
-" { t empty$ not }\n"
-" { t #1 #1 substring$ \"-\" =\n"
-" { t #1 #2 substring$ \"--\" = not\n"
-" { \"--\" *\n"
-" t #2 global.max$ substring$ 't :=\n"
-" }\n"
-" { { t #1 #1 substring$ \"-\" = }\n"
-" { \"-\" *\n"
-" t #2 global.max$ substring$ 't :=\n"
-" }\n"
-" while$\n"
-" }\n"
-" if$\n"
-" }\n"
-" { t #1 #1 substring$ *\n"
-" t #2 global.max$ substring$ 't :=\n"
-" }\n"
-" if$\n"
-" }\n"
-" while$\n"
-"}\n"
-"\n"
-"FUNCTION {format.date}\n"
-"{ year empty$\n"
-" { month empty$\n"
-" { \"\" }\n"
-" { \"there's a month but no year in \" cite$ * warning$\n"
-" month\n"
-" }\n"
-" if$\n"
-" }\n"
-" { month empty$\n"
-" 'year\n"
-" { month \" \" * year * }\n"
-" if$\n"
-" }\n"
-" if$\n"
-"}\n"
-"\n"
-"FUNCTION {format.btitle}\n"
-"{ title emphasize\n"
-" add.link\n"
-"}\n"
-"\n"
-"FUNCTION {tie.or.space.connect}\n"
-"{ duplicate$ text.length$ #3 <\n"
-" { \"~\" }\n"
-" { \" \" }\n"
-" if$\n"
-" swap$ * *\n"
-"}\n"
-"\n"
-"FUNCTION {either.or.check}\n"
-"{ empty$\n"
-" 'pop$\n"
-" { \"can't use both \" swap$ * \" fields in \" * cite$ * warning$ }\n"
-" if$\n"
-"}\n"
-"\n"
-"FUNCTION {format.bvolume}\n"
-"{ volume empty$\n"
-" { \"\" }\n"
-" { \"volume\" volume tie.or.space.connect\n"
-" series empty$\n"
-" 'skip$\n"
-" { \" of \" * series emphasize * }\n"
-" if$\n"
-" \"volume and number\" number either.or.check\n"
-" }\n"
-" if$\n"
-"}\n"
-"\n"
-"FUNCTION {format.number.series}\n"
-"{ volume empty$\n"
-" { number empty$\n"
-" { series field.or.null }\n"
-" { output.state mid.sentence =\n"
-" { \"number\" }\n"
-" { \"Number\" }\n"
-" if$\n"
-" number tie.or.space.connect\n"
-" series empty$\n"
-" { \"there's a number but no series in \" cite$ * warning$ }\n"
-" { \" in \" * series * }\n"
-" if$\n"
-" }\n"
-" if$\n"
-" }\n"
-" { \"\" }\n"
-" if$\n"
-"}\n"
-"\n"
-"FUNCTION {format.edition}\n"
-"{ edition empty$\n"
-" { \"\" }\n"
-" { output.state mid.sentence =\n"
-" { edition \"l\" change.case$ \" edition\" * }\n"
-" { edition \"t\" change.case$ \" edition\" * }\n"
-" if$\n"
-" }\n"
-" if$\n"
-"}\n"
-"\n"
-"INTEGERS { multiresult }\n"
-"\n"
-"FUNCTION {multi.page.check}\n"
-"{ 't :=\n"
-" #0 'multiresult :=\n"
-" { multiresult not\n"
-" t empty$ not\n"
-" and\n"
-" }\n"
-" { t #1 #1 substring$\n"
-" duplicate$ \"-\" =\n"
-" swap$ duplicate$ \",\" =\n"
-" swap$ \"+\" =\n"
-" or or\n"
-" { #1 'multiresult := }\n"
-" { t #2 global.max$ substring$ 't := }\n"
-" if$\n"
-" }\n"
-" while$\n"
-" multiresult\n"
-"}\n"
-"\n"
-"FUNCTION {format.pages}\n"
-"{ pages empty$\n"
-" { \"\" }\n"
-" { pages multi.page.check\n"
-" { \"pages\" pages n.dashify tie.or.space.connect }\n"
-" { \"page\" pages tie.or.space.connect }\n"
-" if$\n"
-" }\n"
-" if$\n"
-"}\n"
-"\n"
-"FUNCTION {format.vol.num.pages}\n"
-"{ volume field.or.null\n"
-" number empty$\n"
-" 'skip$\n"
-" { \"(\" number * \")\" * *\n"
-" volume empty$\n"
-" { \"there's a number but no volume in \" cite$ * warning$ }\n"
-" 'skip$\n"
-" if$\n"
-" }\n"
-" if$\n"
-" pages empty$\n"
-" 'skip$\n"
-" { duplicate$ empty$\n"
-" { pop$ format.pages }\n"
-" { \":\" * pages n.dashify * }\n"
-" if$\n"
-" }\n"
-" if$\n"
-"}\n"
-"\n"
-"FUNCTION {format.chapter.pages}\n"
-"{ chapter empty$\n"
-" 'format.pages\n"
-" { type empty$\n"
-" { \"chapter\" }\n"
-" { type \"l\" change.case$ }\n"
-" if$\n"
-" chapter tie.or.space.connect\n"
-" pages empty$\n"
-" 'skip$\n"
-" { \", \" * format.pages * }\n"
-" if$\n"
-" }\n"
-" if$\n"
-"}\n"
-"\n"
-"FUNCTION {format.in.ed.booktitle}\n"
-"{ booktitle empty$\n"
-" { \"\" }\n"
-" { editor empty$\n"
-" { \"In \" booktitle emphasize * }\n"
-" { \"In \" format.editors * \", \" * booktitle emphasize * }\n"
-" if$\n"
-" }\n"
-" if$\n"
-"}\n"
-"\n"
-"FUNCTION {empty.misc.check}\n"
-"{ author empty$ title empty$ howpublished empty$\n"
-" month empty$ year empty$ note empty$\n"
-" and and and and and\n"
-" key empty$ not and\n"
-" { \"all relevant fields are empty in \" cite$ * warning$ }\n"
-" 'skip$\n"
-" if$\n"
-"}\n"
-"\n"
-"FUNCTION {format.thesis.type}\n"
-"{ type empty$\n"
-" 'skip$\n"
-" { pop$\n"
-" type \"t\" change.case$\n"
-" }\n"
-" if$\n"
-"}\n"
-"\n"
-"FUNCTION {format.tr.number}\n"
-"{ type empty$\n"
-" { \"Technical Report\" }\n"
-" 'type\n"
-" if$\n"
-" number empty$\n"
-" { \"t\" change.case$ }\n"
-" { number tie.or.space.connect }\n"
-" if$\n"
-"}\n"
-"\n"
-"FUNCTION {format.article.crossref}\n"
-"{\n"
-" \"In <a href=\" quote$ * \"#\" * crossref * quote$ * \">\" *\n"
-" key empty$\n"
-" { journal empty$\n"
-" { \"need key or journal for \" cite$ * \" to crossref \" * crossref *\n"
-" warning$\n"
-" \"\"\n"
-" }\n"
-" { \"<cite>\" * journal * \"</cite>\" * }\n"
-" if$\n"
-" }\n"
-" { key * }\n"
-" if$\n"
-" \"</a> \\citelabel{\" * crossref * \"}\" *\n"
-"}\n"
-"\n"
-"FUNCTION {format.crossref.editor}\n"
-"{ editor #1 \"{vv~}{ll}\" format.name$\n"
-" editor num.names$ duplicate$\n"
-" #2 >\n"
-" { pop$ \" et~al.\" * }\n"
-" { #2 <\n"
-" 'skip$\n"
-" { editor #2 \"{ff }{vv }{ll}{ jj}\" format.name$ \"others\" =\n"
-" { \" et~al.\" * }\n"
-" { \" and \" * editor #2 \"{vv~}{ll}\" format.name$ * }\n"
-" if$\n"
-" }\n"
-" if$\n"
-" }\n"
-" if$\n"
-"}\n"
-"\n"
-"FUNCTION {format.book.crossref}\n"
-"{ volume empty$\n"
-" { \"empty volume in \" cite$ * \"'s crossref of \" * crossref * warning$\n"
-" \"In \"\n"
-" }\n"
-" { \"Volume\" volume tie.or.space.connect\n"
-" \" of \" *\n"
-" }\n"
-" if$\n"
-" \"<a href=\" * quote$ * \"#\" * crossref * quote$ * \">\" *\n"
-" editor empty$\n"
-" editor field.or.null author field.or.null =\n"
-" or\n"
-" { key empty$\n"
-" { series empty$\n"
-" { \"need editor, key, or series for \" cite$ * \" to crossref \" *\n"
-" crossref * warning$\n"
-" \"\" *\n"
-" }\n"
-" { \"<cite>\" * series * \"</cite>\" * }\n"
-" if$\n"
-" }\n"
-" { key * }\n"
-" if$\n"
-" }\n"
-" { format.crossref.editor * }\n"
-" if$\n"
-" \"</a> \\citelabel{\" * crossref * \"}\" *\n"
-"}\n"
-"\n"
-"FUNCTION {format.incoll.inproc.crossref}\n"
-"{\n"
-" \"In <a href=\" quote$ * \"#\" * crossref * quote$ * \">\" *\n"
-" editor empty$\n"
-" editor field.or.null author field.or.null =\n"
-" or\n"
-" { key empty$\n"
-" { booktitle empty$\n"
-" { \"need editor, key, or booktitle for \" cite$ * \" to crossref \" *\n"
-" crossref * warning$\n"
-" \"\"\n"
-" }\n"
-" { \"<cite>\" * booktitle * \"</cite>\" * }\n"
-" if$\n"
-" }\n"
-" { key * }\n"
-" if$\n"
-" }\n"
-" { format.crossref.editor * }\n"
-" if$\n"
-" \"</a> \\citelabel{\" * crossref * \"}\" *\n"
-"}\n"
-"\n"
-"FUNCTION {article}\n"
-"{ output.bibitem\n"
-" format.authors \"author\" output.check\n"
-" new.block\n"
-" format.title \"title\" output.check\n"
-" new.block\n"
-" crossref missing$\n"
-" { journal emphasize \"journal\" output.check\n"
-" format.vol.num.pages output\n"
-" format.date \"year\" output.check\n"
-" }\n"
-" { format.article.crossref output.nonnull\n"
-" format.pages output\n"
-" }\n"
-" if$\n"
-" new.block\n"
-" note output\n"
-" fin.entry\n"
-"}\n"
-"\n"
-"FUNCTION {book}\n"
-"{ output.bibitem\n"
-" author empty$\n"
-" { format.editors \"author and editor\" output.check }\n"
-" { format.authors output.nonnull\n"
-" crossref missing$\n"
-" { \"author and editor\" editor either.or.check }\n"
-" 'skip$\n"
-" if$\n"
-" }\n"
-" if$\n"
-" new.block\n"
-" format.btitle \"title\" output.check\n"
-" crossref missing$\n"
-" { format.bvolume output\n"
-" new.block\n"
-" format.number.series output\n"
-" new.sentence\n"
-" publisher \"publisher\" output.check\n"
-" address output\n"
-" }\n"
-" { new.block\n"
-" format.book.crossref output.nonnull\n"
-" }\n"
-" if$\n"
-" format.edition output\n"
-" format.date \"year\" output.check\n"
-" new.block\n"
-" note output\n"
-" fin.entry\n"
-"}\n"
-"\n"
-"FUNCTION {booklet}\n"
-"{ output.bibitem\n"
-" format.authors output\n"
-" new.block\n"
-" format.title \"title\" output.check\n"
-" howpublished address new.block.checkb\n"
-" howpublished output\n"
-" address output\n"
-" format.date output\n"
-" new.block\n"
-" note output\n"
-" fin.entry\n"
-"}\n"
-"\n"
-"FUNCTION {inbook}\n"
-"{ output.bibitem\n"
-" author empty$\n"
-" { format.editors \"author and editor\" output.check }\n"
-" { format.authors output.nonnull\n"
-" crossref missing$\n"
-" { \"author and editor\" editor either.or.check }\n"
-" 'skip$\n"
-" if$\n"
-" }\n"
-" if$\n"
-" new.block\n"
-" format.btitle \"title\" output.check\n"
-" crossref missing$\n"
-" { format.bvolume output\n"
-" format.chapter.pages \"chapter and pages\" output.check\n"
-" new.block\n"
-" format.number.series output\n"
-" new.sentence\n"
-" publisher \"publisher\" output.check\n"
-" address output\n"
-" }\n"
-" { format.chapter.pages \"chapter and pages\" output.check\n"
-" new.block\n"
-" format.book.crossref output.nonnull\n"
-" }\n"
-" if$\n"
-" format.edition output\n"
-" format.date \"year\" output.check\n"
-" new.block\n"
-" note output\n"
-" fin.entry\n"
-"}\n"
-"\n"
-"FUNCTION {incollection}\n"
-"{ output.bibitem\n"
-" format.authors \"author\" output.check\n"
-" new.block\n"
-" format.title \"title\" output.check\n"
-" new.block\n"
-" crossref missing$\n"
-" { format.in.ed.booktitle \"booktitle\" output.check\n"
-" format.bvolume output\n"
-" format.number.series output\n"
-" format.chapter.pages output\n"
-" new.sentence\n"
-" publisher \"publisher\" output.check\n"
-" address output\n"
-" format.edition output\n"
-" format.date \"year\" output.check\n"
-" }\n"
-" { format.incoll.inproc.crossref output.nonnull\n"
-" format.chapter.pages output\n"
-" }\n"
-" if$\n"
-" new.block\n"
-" note output\n"
-" fin.entry\n"
-"}\n"
-"\n"
-"FUNCTION {inproceedings}\n"
-"{ output.bibitem\n"
-" format.authors \"author\" output.check\n"
-" new.block\n"
-" format.title \"title\" output.check\n"
-" new.block\n"
-" crossref missing$\n"
-" { format.in.ed.booktitle \"booktitle\" output.check\n"
-" format.bvolume output\n"
-" format.number.series output\n"
-" format.pages output\n"
-" address empty$\n"
-" { organization publisher new.sentence.checkb\n"
-" organization output\n"
-" publisher output\n"
-" format.date \"year\" output.check\n"
-" }\n"
-" { address output.nonnull\n"
-" format.date \"year\" output.check\n"
-" new.sentence\n"
-" organization output\n"
-" publisher output\n"
-" }\n"
-" if$\n"
-" }\n"
-" { format.incoll.inproc.crossref output.nonnull\n"
-" format.pages output\n"
-" }\n"
-" if$\n"
-" new.block\n"
-" note output\n"
-" fin.entry\n"
-"}\n"
-"\n"
-"FUNCTION {conference} { inproceedings }\n"
-"\n"
-"FUNCTION {manual}\n"
-"{ output.bibitem\n"
-" author empty$\n"
-" { organization empty$\n"
-" 'skip$\n"
-" { organization output.nonnull\n"
-" address output\n"
-" }\n"
-" if$\n"
-" }\n"
-" { format.authors output.nonnull }\n"
-" if$\n"
-" new.block\n"
-" format.btitle \"title\" output.check\n"
-" author empty$\n"
-" { organization empty$\n"
-" { address new.block.checka\n"
-" address output\n"
-" }\n"
-" 'skip$\n"
-" if$\n"
-" }\n"
-" { organization address new.block.checkb\n"
-" organization output\n"
-" address output\n"
-" }\n"
-" if$\n"
-" format.edition output\n"
-" format.date output\n"
-" new.block\n"
-" note output\n"
-" fin.entry\n"
-"}\n"
-"\n"
-"FUNCTION {mastersthesis}\n"
-"{ output.bibitem\n"
-" format.authors \"author\" output.check\n"
-" new.block\n"
-" format.title \"title\" output.check\n"
-" new.block\n"
-" \"Master's thesis\" format.thesis.type output.nonnull\n"
-" school \"school\" output.check\n"
-" address output\n"
-" format.date \"year\" output.check\n"
-" new.block\n"
-" note output\n"
-" fin.entry\n"
-"}\n"
-"\n"
-"FUNCTION {misc}\n"
-"{ output.bibitem\n"
-" format.authors output\n"
-" title howpublished new.block.checkb\n"
-" format.title output\n"
-" howpublished new.block.checka\n"
-" howpublished output\n"
-" format.date output\n"
-" new.block\n"
-" note output\n"
-" fin.entry\n"
-" empty.misc.check\n"
-"}\n"
-"\n"
-"FUNCTION {phdthesis}\n"
-"{ output.bibitem\n"
-" format.authors \"author\" output.check\n"
-" new.block\n"
-" format.btitle \"title\" output.check\n"
-" new.block\n"
-" \"PhD thesis\" format.thesis.type output.nonnull\n"
-" school \"school\" output.check\n"
-" address output\n"
-" format.date \"year\" output.check\n"
-" new.block\n"
-" note output\n"
-" fin.entry\n"
-"}\n"
-"\n"
-"FUNCTION {proceedings}\n"
-"{ output.bibitem\n"
-" editor empty$\n"
-" { organization output }\n"
-" { format.editors output.nonnull }\n"
-" if$\n"
-" new.block\n"
-" format.btitle \"title\" output.check\n"
-" format.bvolume output\n"
-" format.number.series output\n"
-" address empty$\n"
-" { editor empty$\n"
-" { publisher new.sentence.checka }\n"
-" { organization publisher new.sentence.checkb\n"
-" organization output\n"
-" }\n"
-" if$\n"
-" publisher output\n"
-" format.date \"year\" output.check\n"
-" }\n"
-" { address output.nonnull\n"
-" format.date \"year\" output.check\n"
-" new.sentence\n"
-" editor empty$\n"
-" 'skip$\n"
-" { organization output }\n"
-" if$\n"
-" publisher output\n"
-" }\n"
-" if$\n"
-" new.block\n"
-" note output\n"
-" fin.entry\n"
-"}\n"
-"\n"
-"FUNCTION {techreport}\n"
-"{ output.bibitem\n"
-" format.authors \"author\" output.check\n"
-" new.block\n"
-" format.title \"title\" output.check\n"
-" new.block\n"
-" format.tr.number output.nonnull\n"
-" institution \"institution\" output.check\n"
-" address output\n"
-" format.date \"year\" output.check\n"
-" new.block\n"
-" note output\n"
-" fin.entry\n"
-"}\n"
-"\n"
-"FUNCTION {unpublished}\n"
-"{ output.bibitem\n"
-" format.authors \"author\" output.check\n"
-" new.block\n"
-" format.title \"title\" output.check\n"
-" new.block\n"
-" note \"note\" output.check\n"
-" format.date output\n"
-" fin.entry\n"
-"}\n"
-"\n"
-"FUNCTION {default.type} { misc }\n"
-"\n"
-"MACRO {jan} {\"January\"}\n"
-"\n"
-"MACRO {feb} {\"February\"}\n"
-"\n"
-"MACRO {mar} {\"March\"}\n"
-"\n"
-"MACRO {apr} {\"April\"}\n"
-"\n"
-"MACRO {may} {\"May\"}\n"
-"\n"
-"MACRO {jun} {\"June\"}\n"
-"\n"
-"MACRO {jul} {\"July\"}\n"
-"\n"
-"MACRO {aug} {\"August\"}\n"
-"\n"
-"MACRO {sep} {\"September\"}\n"
-"\n"
-"MACRO {oct} {\"October\"}\n"
-"\n"
-"MACRO {nov} {\"November\"}\n"
-"\n"
-"MACRO {dec} {\"December\"}\n"
-"\n"
-"MACRO {acmcs} {\"ACM Computing Surveys\"}\n"
-"\n"
-"MACRO {acta} {\"Acta Informatica\"}\n"
-"\n"
-"MACRO {cacm} {\"Communications of the ACM\"}\n"
-"\n"
-"MACRO {ibmjrd} {\"IBM Journal of Research and Development\"}\n"
-"\n"
-"MACRO {ibmsj} {\"IBM Systems Journal\"}\n"
-"\n"
-"MACRO {ieeese} {\"IEEE Transactions on Software Engineering\"}\n"
-"\n"
-"MACRO {ieeetc} {\"IEEE Transactions on Computers\"}\n"
-"\n"
-"MACRO {ieeetcad}\n"
-" {\"IEEE Transactions on Computer-Aided Design of Integrated Circuits\"}\n"
-"\n"
-"MACRO {ipl} {\"Information Processing Letters\"}\n"
-"\n"
-"MACRO {jacm} {\"Journal of the ACM\"}\n"
-"\n"
-"MACRO {jcss} {\"Journal of Computer and System Sciences\"}\n"
-"\n"
-"MACRO {scp} {\"Science of Computer Programming\"}\n"
-"\n"
-"MACRO {sicomp} {\"SIAM Journal on Computing\"}\n"
-"\n"
-"MACRO {tocs} {\"ACM Transactions on Computer Systems\"}\n"
-"\n"
-"MACRO {tods} {\"ACM Transactions on Database Systems\"}\n"
-"\n"
-"MACRO {tog} {\"ACM Transactions on Graphics\"}\n"
-"\n"
-"MACRO {toms} {\"ACM Transactions on Mathematical Software\"}\n"
-"\n"
-"MACRO {toois} {\"ACM Transactions on Office Information Systems\"}\n"
-"\n"
-"MACRO {toplas} {\"ACM Transactions on Programming Languages and Systems\"}\n"
-"\n"
-"MACRO {tcs} {\"Theoretical Computer Science\"}\n"
-"\n"
-"READ\n"
-"\n"
-"FUNCTION {sortify}\n"
-"{ purify$\n"
-" \"l\" change.case$\n"
-"}\n"
-"\n"
-"INTEGERS { len }\n"
-"\n"
-"FUNCTION {chop.word}\n"
-"{ 's :=\n"
-" 'len :=\n"
-" s #1 len substring$ =\n"
-" { s len #1 + global.max$ substring$ }\n"
-" 's\n"
-" if$\n"
-"}\n"
-"\n"
-"\n"
-"FUNCTION {format.lab.names}\n"
-"{ 's :=\n"
-" s num.names$ 'numnames :=\n"
-" numnames #1 =\n"
-" { s #1 \"{vv }{ll}\" format.name$ }\n"
-" { numnames #2 =\n"
-" { s #1 \"{vv }{ll }and \" format.name$ s #2 \"{vv }{ll}\" format.name$ * }\n"
-" { s #1 \"{vv }{ll }\" format.name$ \"et~al.\" * }\n"
-" if$\n"
-" }\n"
-" if$\n"
-"}\n"
-"\n"
-"FUNCTION {author.key.label}\n"
-"{ author empty$\n"
-" { key empty$\n"
-" { cite$ #1 #3 substring$ }\n"
-" { key }\n"
-" if$\n"
-" }\n"
-" { author format.lab.names }\n"
-" if$\n"
-"}\n"
-"\n"
-"FUNCTION {author.editor.key.label}\n"
-"{ author empty$\n"
-" { editor empty$\n"
-" { key empty$\n"
-" { cite$ #1 #3 substring$ }\n"
-" { key }\n"
-" if$\n"
-" }\n"
-" { editor format.lab.names }\n"
-" if$\n"
-" }\n"
-" { author format.lab.names }\n"
-" if$\n"
-"}\n"
-"\n"
-"FUNCTION {author.key.organization.label}\n"
-"{ author empty$\n"
-" { key empty$\n"
-" { organization empty$\n"
-" { cite$ #1 #3 substring$ }\n"
-" { \"The \" #4 organization chop.word #3 text.prefix$ }\n"
-" if$\n"
-" }\n"
-" { key }\n"
-" if$\n"
-" }\n"
-" { author format.lab.names }\n"
-" if$\n"
-"}\n"
-"\n"
-"FUNCTION {editor.key.organization.label}\n"
-"{ editor empty$\n"
-" { key empty$\n"
-" { organization empty$\n"
-" { cite$ #1 #3 substring$ }\n"
-" { \"The \" #4 organization chop.word #3 text.prefix$ }\n"
-" if$\n"
-" }\n"
-" { key }\n"
-" if$\n"
-" }\n"
-" { editor format.lab.names }\n"
-" if$\n"
-"}\n"
-"\n"
-"FUNCTION {month.to.int}\n"
-"{\n"
-" \"l\" change.case$ #3 text.prefix$\n"
-" 's :=\n"
-" s \"jan\" = { #1 } {\n"
-" s \"feb\" = { #2 } {\n"
-" s \"mar\" = { #3 } {\n"
-" s \"apr\" = { #4 } {\n"
-" s \"may\" = { #5 } {\n"
-" s \"jun\" = { #6 } {\n"
-" s \"jul\" = { #7 } {\n"
-" s \"aug\" = { #8 } {\n"
-" s \"sep\" = { #9 } {\n"
-" s \"oct\" = { #10 } {\n"
-" s \"nov\" = { #11 } {\n"
-" s \"dec\" = { #12 } { #13 } % 13 if nothing matches\n"
-" if$}if$}if$}if$}if$}if$}if$}if$}if$}if$}if$}if$\n"
-"}\n"
-"\n"
-"INTEGERS { done c } \n"
-"FUNCTION { get.day }\n"
-"{ month field.or.null 's :=\n"
-" \n"
-" % Strip out month name\n"
-" #0 'done := \n"
-" { s \"\" = not done not and }\n"
-" { s #1 #1 substring$ \" \" = 'done :=\n"
-" s #2 global.max$ substring$ 's :=\n"
-" }\n"
-" while$\n"
-"\n"
-" % Build up first number in t\n"
-" \"0\" 't :=\n"
-" #0 'done :=\n"
-" { s \"\" = not done not and }\n"
-" { s #1 #1 substring$ chr.to.int$ 'c :=\n"
-" c #47 > c #58 < and\n"
-" { t c int.to.chr$ * 't := }\n"
-" { #1 'done := }\n"
-" if$\n"
-" s #2 global.max$ substring$ 's :=\n"
-" }\n"
-" while$\n"
-"\n"
-" t str.to.int\n"
-"}\n"
-"\n"
-"FUNCTION { sortify.fourdigit }\n"
-"{ 's :=\n"
-" s empty$\n"
-" { \"0000\" }\n"
-" { s\n"
-" }\n"
-" if$\n"
-"}\n"
-"\n"
-"FUNCTION { sortify.twodigit }\n"
-"{ 's :=\n"
-" s empty$\n"
-" { \"00\" }\n"
-" { s\n"
-" str.to.int #10 + int.to.str$\n"
-" }\n"
-" if$\n"
-"}\n"
-"\n"
-"FUNCTION {calc.label}\n"
-"{ type$ \"book\" =\n"
-" type$ \"inbook\" =\n"
-" or\n"
-" 'author.editor.key.label\n"
-" { type$ \"proceedings\" =\n"
-" 'editor.key.organization.label\n"
-" { type$ \"manual\" =\n"
-" 'author.key.organization.label\n"
-" 'author.key.label\n"
-" if$\n"
-" }\n"
-" if$\n"
-" }\n"
-" if$\n"
-" duplicate$\n"
-"\n"
-" year empty$\n"
-" 'skip$\n"
-" { \", \" * }\n"
-" if$\n"
-" year field.or.null purify$ * % CHANGED - pfps - 15 Feb 1989\n"
-" 'label :=\n"
-"\n"
-" year field.or.null purify$\n"
-" #-1 #4 substring$ \n"
-" sortify.fourdigit \n"
-" \" \" *\n"
-" month field.or.null month.to.int int.to.str$ sortify.twodigit *\n"
-" \" \" * \n"
-" get.day int.to.str$ sortify.twodigit *\n"
-" \" \" *\n"
-" * sortify 'sort.label :=\n"
-"}\n"
-"\n"
-"FUNCTION {sort.format.names}\n"
-"{ 's :=\n"
-" #1 'nameptr :=\n"
-" \"\"\n"
-" s num.names$ 'numnames :=\n"
-" numnames 'namesleft :=\n"
-" { namesleft #0 > }\n"
-" { nameptr #1 >\n"
-" { \" \" * }\n"
-" 'skip$\n"
-" if$\n"
-" s nameptr \"{vv{ } }{ll{ }}{ ff{ }}{ jj{ }}\" format.name$ 't :=\n"
-" nameptr numnames = t \"others\" = and\n"
-" { \"et al.\" * }\n"
-" { t sortify * }\n"
-" if$\n"
-" nameptr #1 + 'nameptr :=\n"
-" namesleft #1 - 'namesleft :=\n"
-" }\n"
-" while$\n"
-"}\n"
-"\n"
-"FUNCTION {sort.format.title}\n"
-"{ 't :=\n"
-" \"A \" #2\n"
-" \"An \" #3\n"
-" \"The \" #4 t chop.word\n"
-" chop.word\n"
-" chop.word\n"
-" sortify\n"
-" #1 global.max$ substring$\n"
-"}\n"
-"\n"
-"FUNCTION {author.sort}\n"
-"{ author empty$\n"
-" { key empty$\n"
-" { \"to sort, need author or key in \" cite$ * warning$\n"
-" \"\"\n"
-" }\n"
-" { key sortify }\n"
-" if$\n"
-" }\n"
-" { author sort.format.names }\n"
-" if$\n"
-"}\n"
-"\n"
-"FUNCTION {author.editor.sort}\n"
-"{ author empty$\n"
-" { editor empty$\n"
-" { key empty$\n"
-" { \"to sort, need author, editor, or key in \" cite$ * warning$\n"
-" \"\"\n"
-" }\n"
-" { key sortify }\n"
-" if$\n"
-" }\n"
-" { editor sort.format.names }\n"
-" if$\n"
-" }\n"
-" { author sort.format.names }\n"
-" if$\n"
-"}\n"
-"\n"
-"FUNCTION {author.organization.sort}\n"
-"{ author empty$\n"
-" { organization empty$\n"
-" { key empty$\n"
-" { \"to sort, need author, organization, or key in \" cite$ * warning$\n"
-" \"\"\n"
-" }\n"
-" { key sortify }\n"
-" if$\n"
-" }\n"
-" { \"The \" #4 organization chop.word sortify }\n"
-" if$\n"
-" }\n"
-" { author sort.format.names }\n"
-" if$\n"
-"}\n"
-"\n"
-"FUNCTION {editor.organization.sort}\n"
-"{ editor empty$\n"
-" { organization empty$\n"
-" { key empty$\n"
-" { \"to sort, need editor, organization, or key in \" cite$ * warning$\n"
-" \"\"\n"
-" }\n"
-" { key sortify }\n"
-" if$\n"
-" }\n"
-" { \"The \" #4 organization chop.word sortify }\n"
-" if$\n"
-" }\n"
-" { editor sort.format.names }\n"
-" if$\n"
-"}\n"
-"\n"
-"FUNCTION {presort}\n"
-"{ calc.label\n"
-" sort.label\n"
-" \" \"\n"
-" *\n"
-" type$ \"book\" =\n"
-" type$ \"inbook\" =\n"
-" or\n"
-" 'author.editor.sort\n"
-" { type$ \"proceedings\" =\n"
-" 'editor.organization.sort\n"
-" { type$ \"manual\" =\n"
-" 'author.organization.sort\n"
-" 'author.sort\n"
-" if$\n"
-" }\n"
-" if$\n"
-" }\n"
-" if$\n"
-" *\n"
-" \" \"\n"
-" *\n"
-" year field.or.null sortify\n"
-" *\n"
-" \" \"\n"
-" *\n"
-" title field.or.null\n"
-" sort.format.title\n"
-" *\n"
-" #1 entry.max$ substring$\n"
-" 'sort.key$ :=\n"
-"}\n"
-"\n"
-"ITERATE {presort}\n"
-"\n"
-"SORT\n"
-"\n"
-"STRINGS { longest.label last.sort.label next.extra }\n"
-"\n"
-"INTEGERS { longest.label.width last.extra.num }\n"
-"\n"
-"FUNCTION {initialize.longest.label}\n"
-"{ \"\" 'longest.label :=\n"
-" #0 int.to.chr$ 'last.sort.label :=\n"
-" \"\" 'next.extra :=\n"
-" #0 'longest.label.width :=\n"
-" #0 'last.extra.num :=\n"
-"}\n"
-"\n"
-"FUNCTION {forward.pass}\n"
-"{ last.sort.label sort.label =\n"
-" { last.extra.num #1 + 'last.extra.num :=\n"
-" last.extra.num int.to.chr$ 'extra.label :=\n"
-" }\n"
-" { \"a\" chr.to.int$ 'last.extra.num :=\n"
-" \"\" 'extra.label :=\n"
-" sort.label 'last.sort.label :=\n"
-" }\n"
-" if$\n"
-"}\n"
-"\n"
-"FUNCTION {reverse.pass}\n"
-"{ next.extra \"b\" =\n"
-" { \"a\" 'extra.label := }\n"
-" 'skip$\n"
-" if$\n"
-" label extra.label * 'label :=\n"
-" label width$ longest.label.width >\n"
-" { label 'longest.label :=\n"
-" label width$ 'longest.label.width :=\n"
-" }\n"
-" 'skip$\n"
-" if$\n"
-" extra.label 'next.extra :=\n"
-"}\n"
-"\n"
-"EXECUTE {initialize.longest.label}\n"
-"\n"
-"ITERATE {forward.pass}\n"
-"\n"
-"REVERSE {reverse.pass}\n"
-"\n"
-"FUNCTION {begin.bib}\n"
-"{\n"
-" \"# label-style: default\" write$ newline$\n"
-"}\n"
-"\n"
-"EXECUTE {begin.bib}\n"
-"\n"
-"EXECUTE {init.state.consts}\n"
-"\n"
-"ITERATE {call.type$}\n"
-"\n"
-"FUNCTION {end.bib}\n"
-"{ newline$\n"
-"}\n"
-"\n"
-"EXECUTE {end.bib}\n"
diff --git a/trunk/src/doxygen_css.h b/trunk/src/doxygen_css.h
deleted file mode 100644
index 4b8f7d7..0000000
--- a/trunk/src/doxygen_css.h
+++ /dev/null
@@ -1,1015 +0,0 @@
-"/* The standard CSS for doxygen */\n"
-"\n"
-"body, table, div, p, dl {\n"
-" font-family: Lucida Grande, Verdana, Geneva, Arial, sans-serif;\n"
-" font-size: 13px;\n"
-" line-height: 1.3;\n"
-"}\n"
-"\n"
-"/* @group Heading Levels */\n"
-"\n"
-"h1 {\n"
-" font-size: 150%;\n"
-"}\n"
-"\n"
-".title {\n"
-" font-size: 150%;\n"
-" font-weight: bold;\n"
-" margin: 10px 2px;\n"
-"}\n"
-"\n"
-"h2 {\n"
-" font-size: 120%;\n"
-"}\n"
-"\n"
-"h3 {\n"
-" font-size: 100%;\n"
-"}\n"
-"\n"
-"dt {\n"
-" font-weight: bold;\n"
-"}\n"
-"\n"
-"div.multicol {\n"
-" -moz-column-gap: 1em;\n"
-" -webkit-column-gap: 1em;\n"
-" -moz-column-count: 3;\n"
-" -webkit-column-count: 3;\n"
-"}\n"
-"\n"
-"p.startli, p.startdd, p.starttd {\n"
-" margin-top: 2px;\n"
-"}\n"
-"\n"
-"p.endli {\n"
-" margin-bottom: 0px;\n"
-"}\n"
-"\n"
-"p.enddd {\n"
-" margin-bottom: 4px;\n"
-"}\n"
-"\n"
-"p.endtd {\n"
-" margin-bottom: 2px;\n"
-"}\n"
-"\n"
-"/* @end */\n"
-"\n"
-"caption {\n"
-" font-weight: bold;\n"
-"}\n"
-"\n"
-"span.legend {\n"
-" font-size: 70%;\n"
-" text-align: center;\n"
-"}\n"
-"\n"
-"h3.version {\n"
-" font-size: 90%;\n"
-" text-align: center;\n"
-"}\n"
-"\n"
-"div.qindex, div.navtab{\n"
-" background-color: ##ee;\n"
-" border: 1px solid ##b0;\n"
-" text-align: center;\n"
-"}\n"
-"\n"
-"div.qindex, div.navpath {\n"
-" width: 100%;\n"
-" line-height: 140%;\n"
-"}\n"
-"\n"
-"div.navtab {\n"
-" margin-right: 15px;\n"
-"}\n"
-"\n"
-"/* @group Link Styling */\n"
-"\n"
-"a {\n"
-" color: ##50;\n"
-" font-weight: normal;\n"
-" text-decoration: none;\n"
-"}\n"
-"\n"
-".contents a:visited {\n"
-" color: ##60;\n"
-"}\n"
-"\n"
-"a:hover {\n"
-" text-decoration: underline;\n"
-"}\n"
-"\n"
-"a.qindex {\n"
-" font-weight: bold;\n"
-"}\n"
-"\n"
-"a.qindexHL {\n"
-" font-weight: bold;\n"
-" background-color: ##AA;\n"
-" color: #ffffff;\n"
-" border: 1px double ##98;\n"
-"}\n"
-"\n"
-".contents a.qindexHL:visited {\n"
-" color: #ffffff;\n"
-"}\n"
-"\n"
-"a.el {\n"
-" font-weight: bold;\n"
-"}\n"
-"\n"
-"a.elRef {\n"
-"}\n"
-"\n"
-"a.code, a.code:visited {\n"
-" color: #4665A2; \n"
-"}\n"
-"\n"
-"a.codeRef, a.codeRef:visited {\n"
-" color: #4665A2; \n"
-"}\n"
-"\n"
-"/* @end */\n"
-"\n"
-"dl.el {\n"
-" margin-left: -1cm;\n"
-"}\n"
-"\n"
-".fragment {\n"
-" font-family: monospace, fixed;\n"
-" font-size: 105%;\n"
-"}\n"
-"\n"
-"pre.fragment {\n"
-" border: 1px solid ##CC;\n"
-" background-color: ##FC;\n"
-" padding: 4px 6px;\n"
-" margin: 4px 8px 4px 2px;\n"
-" overflow: auto;\n"
-" word-wrap: break-word;\n"
-" font-size: 9pt;\n"
-" line-height: 125%;\n"
-"}\n"
-"\n"
-"div.ah {\n"
-" background-color: black;\n"
-" font-weight: bold;\n"
-" color: #ffffff;\n"
-" margin-bottom: 3px;\n"
-" margin-top: 3px;\n"
-" padding: 0.2em;\n"
-" border: solid thin #333;\n"
-" border-radius: 0.5em;\n"
-" -webkit-border-radius: .5em;\n"
-" -moz-border-radius: .5em;\n"
-" box-shadow: 2px 2px 3px #999;\n"
-" -webkit-box-shadow: 2px 2px 3px #999;\n"
-" -moz-box-shadow: rgba(0, 0, 0, 0.15) 2px 2px 2px;\n"
-" background-image: -webkit-gradient(linear, left top, left bottom, from(#eee), to(#000),color-stop(0.3, #444));\n"
-" background-image: -moz-linear-gradient(center top, #eee 0%, #444 40%, #000);\n"
-"}\n"
-"\n"
-"div.groupHeader {\n"
-" margin-left: 16px;\n"
-" margin-top: 12px;\n"
-" font-weight: bold;\n"
-"}\n"
-"\n"
-"div.groupText {\n"
-" margin-left: 16px;\n"
-" font-style: italic;\n"
-"}\n"
-"\n"
-"body {\n"
-" background-color: white;\n"
-" color: black;\n"
-" margin: 0;\n"
-"}\n"
-"\n"
-"div.contents {\n"
-" margin-top: 10px;\n"
-" margin-left: 8px;\n"
-" margin-right: 8px;\n"
-"}\n"
-"\n"
-"td.indexkey {\n"
-" background-color: ##ee;\n"
-" font-weight: bold;\n"
-" border: 1px solid ##cc;\n"
-" margin: 2px 0px 2px 0;\n"
-" padding: 2px 10px;\n"
-" white-space: nowrap;\n"
-" vertical-align: top;\n"
-"}\n"
-"\n"
-"td.indexvalue {\n"
-" background-color: ##ee;\n"
-" border: 1px solid ##cc;\n"
-" padding: 2px 10px;\n"
-" margin: 2px 0px;\n"
-"}\n"
-"\n"
-"tr.memlist {\n"
-" background-color: ##f0;\n"
-"}\n"
-"\n"
-"p.formulaDsp {\n"
-" text-align: center;\n"
-"}\n"
-"\n"
-"img.formulaDsp {\n"
-" \n"
-"}\n"
-"\n"
-"img.formulaInl {\n"
-" vertical-align: middle;\n"
-"}\n"
-"\n"
-"div.center {\n"
-" text-align: center;\n"
-" margin-top: 0px;\n"
-" margin-bottom: 0px;\n"
-" padding: 0px;\n"
-"}\n"
-"\n"
-"div.center img {\n"
-" border: 0px;\n"
-"}\n"
-"\n"
-"address.footer {\n"
-" text-align: right;\n"
-" padding-right: 12px;\n"
-"}\n"
-"\n"
-"img.footer {\n"
-" border: 0px;\n"
-" vertical-align: middle;\n"
-"}\n"
-"\n"
-"/* @group Code Colorization */\n"
-"\n"
-"span.keyword {\n"
-" color: #008000\n"
-"}\n"
-"\n"
-"span.keywordtype {\n"
-" color: #604020\n"
-"}\n"
-"\n"
-"span.keywordflow {\n"
-" color: #e08000\n"
-"}\n"
-"\n"
-"span.comment {\n"
-" color: #800000\n"
-"}\n"
-"\n"
-"span.preprocessor {\n"
-" color: #806020\n"
-"}\n"
-"\n"
-"span.stringliteral {\n"
-" color: #002080\n"
-"}\n"
-"\n"
-"span.charliteral {\n"
-" color: #008080\n"
-"}\n"
-"\n"
-"span.vhdldigit { \n"
-" color: #ff00ff \n"
-"}\n"
-"\n"
-"span.vhdlchar { \n"
-" color: #000000 \n"
-"}\n"
-"\n"
-"span.vhdlkeyword { \n"
-" color: #700070 \n"
-"}\n"
-"\n"
-"span.vhdllogic { \n"
-" color: #ff0000 \n"
-"}\n"
-"\n"
-"blockquote {\n"
-" background-color: ##F8;\n"
-" border-left: 2px solid ##AA;\n"
-" margin: 0 24px 0 4px;\n"
-" padding: 0 12px 0 16px;\n"
-"}\n"
-"\n"
-"/* @end */\n"
-"\n"
-"/*\n"
-".search {\n"
-" color: #003399;\n"
-" font-weight: bold;\n"
-"}\n"
-"\n"
-"form.search {\n"
-" margin-bottom: 0px;\n"
-" margin-top: 0px;\n"
-"}\n"
-"\n"
-"input.search {\n"
-" font-size: 75%;\n"
-" color: #000080;\n"
-" font-weight: normal;\n"
-" background-color: #e8eef2;\n"
-"}\n"
-"*/\n"
-"\n"
-"td.tiny {\n"
-" font-size: 75%;\n"
-"}\n"
-"\n"
-".dirtab {\n"
-" padding: 4px;\n"
-" border-collapse: collapse;\n"
-" border: 1px solid ##b0;\n"
-"}\n"
-"\n"
-"th.dirtab {\n"
-" background: ##ee;\n"
-" font-weight: bold;\n"
-"}\n"
-"\n"
-"hr {\n"
-" height: 0px;\n"
-" border: none;\n"
-" border-top: 1px solid ##66;\n"
-"}\n"
-"\n"
-"hr.footer {\n"
-" height: 1px;\n"
-"}\n"
-"\n"
-"/* @group Member Descriptions */\n"
-"\n"
-"table.memberdecls {\n"
-" border-spacing: 0px;\n"
-" padding: 0px;\n"
-"}\n"
-"\n"
-".mdescLeft, .mdescRight,\n"
-".memItemLeft, .memItemRight,\n"
-".memTemplItemLeft, .memTemplItemRight, .memTemplParams {\n"
-" background-color: ##FA;\n"
-" border: none;\n"
-" margin: 4px;\n"
-" padding: 1px 0 0 8px;\n"
-"}\n"
-"\n"
-".mdescLeft, .mdescRight {\n"
-" padding: 0px 8px 4px 8px;\n"
-" color: #555;\n"
-"}\n"
-"\n"
-".memItemLeft, .memItemRight, .memTemplParams {\n"
-" border-top: 1px solid ##cc;\n"
-"}\n"
-"\n"
-".memItemLeft, .memTemplItemLeft {\n"
-" white-space: nowrap;\n"
-"}\n"
-"\n"
-".memItemRight {\n"
-" width: 100%;\n"
-"}\n"
-"\n"
-".memTemplParams {\n"
-" color: ##60;\n"
-" white-space: nowrap;\n"
-"}\n"
-"\n"
-"/* @end */\n"
-"\n"
-"/* @group Member Details */\n"
-"\n"
-"/* Styles for detailed member documentation */\n"
-"\n"
-".memtemplate {\n"
-" font-size: 80%;\n"
-" color: ##60;\n"
-" font-weight: normal;\n"
-" margin-left: 9px;\n"
-"}\n"
-"\n"
-".memnav {\n"
-" background-color: ##ee;\n"
-" border: 1px solid ##b0;\n"
-" text-align: center;\n"
-" margin: 2px;\n"
-" margin-right: 15px;\n"
-" padding: 2px;\n"
-"}\n"
-"\n"
-".mempage {\n"
-" width: 100%;\n"
-"}\n"
-"\n"
-".memitem {\n"
-" padding: 0;\n"
-" margin-bottom: 10px;\n"
-" margin-right: 5px;\n"
-"}\n"
-"\n"
-".memname {\n"
-" font-weight: bold;\n"
-" margin-left: 6px;\n"
-"}\n"
-"\n"
-".memname td {\n"
-" vertical-align: bottom;\n"
-"}\n"
-"\n"
-".memproto, dl.reflist dt {\n"
-" border-top: 1px solid ##B4;\n"
-" border-left: 1px solid ##B4;\n"
-" border-right: 1px solid ##B4;\n"
-" padding: 6px 0px 6px 0px;\n"
-" color: ##2b;\n"
-" font-weight: bold;\n"
-" text-shadow: 0px 1px 1px rgba(255, 255, 255, 0.9);\n"
-" /* opera specific markup */\n"
-" box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15);\n"
-" border-top-right-radius: 8px;\n"
-" border-top-left-radius: 8px;\n"
-" /* firefox specific markup */\n"
-" -moz-box-shadow: rgba(0, 0, 0, 0.15) 5px 5px 5px;\n"
-" -moz-border-radius-topright: 8px;\n"
-" -moz-border-radius-topleft: 8px;\n"
-" /* webkit specific markup */\n"
-" -webkit-box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15);\n"
-" -webkit-border-top-right-radius: 8px;\n"
-" -webkit-border-top-left-radius: 8px;\n"
-" background-image:url('nav_f.png');\n"
-" background-repeat:repeat-x;\n"
-" background-color: ##E6;\n"
-"\n"
-"}\n"
-"\n"
-".memdoc, dl.reflist dd {\n"
-" border-bottom: 1px solid ##B4; \n"
-" border-left: 1px solid ##B4; \n"
-" border-right: 1px solid ##B4; \n"
-" padding: 2px 5px;\n"
-" background-color: ##FC;\n"
-" border-top-width: 0;\n"
-" /* opera specific markup */\n"
-" border-bottom-left-radius: 8px;\n"
-" border-bottom-right-radius: 8px;\n"
-" box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15);\n"
-" /* firefox specific markup */\n"
-" -moz-border-radius-bottomleft: 8px;\n"
-" -moz-border-radius-bottomright: 8px;\n"
-" -moz-box-shadow: rgba(0, 0, 0, 0.15) 5px 5px 5px;\n"
-" background-image: -moz-linear-gradient(center top, ##FF 0%, ##FF 60%, ##F8 95%, ##F0);\n"
-" /* webkit specific markup */\n"
-" -webkit-border-bottom-left-radius: 8px;\n"
-" -webkit-border-bottom-right-radius: 8px;\n"
-" -webkit-box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15);\n"
-" background-image: -webkit-gradient(linear,center top,center bottom,from(##FF), color-stop(0.6,##FF), color-stop(0.60,##FF), color-stop(0.95,##F8), to(##F0));\n"
-"}\n"
-"\n"
-"dl.reflist dt {\n"
-" padding: 5px;\n"
-"}\n"
-"\n"
-"dl.reflist dd {\n"
-" margin: 0px 0px 10px 0px;\n"
-" padding: 5px;\n"
-"}\n"
-"\n"
-".paramkey {\n"
-" text-align: right;\n"
-"}\n"
-"\n"
-".paramtype {\n"
-" white-space: nowrap;\n"
-"}\n"
-"\n"
-".paramname {\n"
-" color: #602020;\n"
-" white-space: nowrap;\n"
-"}\n"
-".paramname em {\n"
-" font-style: normal;\n"
-"}\n"
-"\n"
-".params, .retval, .exception, .tparams {\n"
-" border-spacing: 6px 2px;\n"
-"} \n"
-"\n"
-".params .paramname, .retval .paramname {\n"
-" font-weight: bold;\n"
-" vertical-align: top;\n"
-"}\n"
-" \n"
-".params .paramtype {\n"
-" font-style: italic;\n"
-" vertical-align: top;\n"
-"} \n"
-" \n"
-".params .paramdir {\n"
-" font-family: \"courier new\",courier,monospace;\n"
-" vertical-align: top;\n"
-"}\n"
-"\n"
-"\n"
-"\n"
-"\n"
-"/* @end */\n"
-"\n"
-"/* @group Directory (tree) */\n"
-"\n"
-"/* for the tree view */\n"
-"\n"
-".ftvtree {\n"
-" font-family: sans-serif;\n"
-" margin: 0px;\n"
-"}\n"
-"\n"
-"/* these are for tree view when used as main index */\n"
-"\n"
-".directory {\n"
-" font-size: 9pt;\n"
-" font-weight: bold;\n"
-" margin: 5px;\n"
-"}\n"
-"\n"
-".directory h3 {\n"
-" margin: 0px;\n"
-" margin-top: 1em;\n"
-" font-size: 11pt;\n"
-"}\n"
-"\n"
-"/*\n"
-"The following two styles can be used to replace the root node title\n"
-"with an image of your choice. Simply uncomment the next two styles,\n"
-"specify the name of your image and be sure to set 'height' to the\n"
-"proper pixel height of your image.\n"
-"*/\n"
-"\n"
-"/*\n"
-".directory h3.swap {\n"
-" height: 61px;\n"
-" background-repeat: no-repeat;\n"
-" background-image: url(\"yourimage.gif\");\n"
-"}\n"
-".directory h3.swap span {\n"
-" display: none;\n"
-"}\n"
-"*/\n"
-"\n"
-".directory > h3 {\n"
-" margin-top: 0;\n"
-"}\n"
-"\n"
-".directory p {\n"
-" margin: 0px;\n"
-" white-space: nowrap;\n"
-"}\n"
-"\n"
-".directory div {\n"
-" display: none;\n"
-" margin: 0px;\n"
-"}\n"
-"\n"
-".directory img {\n"
-" vertical-align: -30%;\n"
-"}\n"
-"\n"
-"/* these are for tree view when not used as main index */\n"
-"\n"
-".directory-alt {\n"
-" font-size: 100%;\n"
-" font-weight: bold;\n"
-"}\n"
-"\n"
-".directory-alt h3 {\n"
-" margin: 0px;\n"
-" margin-top: 1em;\n"
-" font-size: 11pt;\n"
-"}\n"
-"\n"
-".directory-alt > h3 {\n"
-" margin-top: 0;\n"
-"}\n"
-"\n"
-".directory-alt p {\n"
-" margin: 0px;\n"
-" white-space: nowrap;\n"
-"}\n"
-"\n"
-".directory-alt div {\n"
-" display: none;\n"
-" margin: 0px;\n"
-"}\n"
-"\n"
-".directory-alt img {\n"
-" vertical-align: -30%;\n"
-"}\n"
-"\n"
-"/* @end */\n"
-"\n"
-"div.dynheader {\n"
-" margin-top: 8px;\n"
-"}\n"
-"\n"
-"address {\n"
-" font-style: normal;\n"
-" color: ##33;\n"
-"}\n"
-"\n"
-"table.doxtable {\n"
-" border-collapse:collapse;\n"
-" margin-top: 4px;\n"
-" margin-bottom: 4px;\n"
-"}\n"
-"\n"
-"table.doxtable td, table.doxtable th {\n"
-" border: 1px solid ##37;\n"
-" padding: 3px 7px 2px;\n"
-"}\n"
-"\n"
-"table.doxtable th {\n"
-" background-color: ##47;\n"
-" color: #FFFFFF;\n"
-" font-size: 110%;\n"
-" padding-bottom: 4px;\n"
-" padding-top: 5px;\n"
-"}\n"
-"\n"
-"table.fieldtable {\n"
-" width: 100%;\n"
-" margin-bottom: 10px;\n"
-" border: 1px solid ##B4;\n"
-" border-spacing: 0px;\n"
-" -moz-border-radius: 4px;\n"
-" -webkit-border-radius: 4px;\n"
-" border-radius: 4px;\n"
-" -moz-box-shadow: rgba(0, 0, 0, 0.15) 2px 2px 2px;\n"
-" -webkit-box-shadow: 2px 2px 2px rgba(0, 0, 0, 0.15);\n"
-" box-shadow: 2px 2px 2px rgba(0, 0, 0, 0.15);\n"
-"}\n"
-"\n"
-".fieldtable td, .fieldtable th {\n"
-" padding: 3px 7px 2px;\n"
-"}\n"
-"\n"
-".fieldtable td.fieldtype, .fieldtable td.fieldname {\n"
-" white-space: nowrap;\n"
-" border-right: 1px solid ##B4;\n"
-" border-bottom: 1px solid ##B4;\n"
-" vertical-align: top;\n"
-"}\n"
-"\n"
-".fieldtable td.fielddoc {\n"
-" border-bottom: 1px solid ##B4;\n"
-" width: 100%;\n"
-"}\n"
-"\n"
-".fieldtable tr:last-child td {\n"
-" border-bottom: none;\n"
-"}\n"
-"\n"
-".fieldtable th {\n"
-" background-image:url('nav_f.png');\n"
-" background-repeat:repeat-x;\n"
-" background-color: ##E6;\n"
-" font-size: 90%;\n"
-" color: ##2B;\n"
-" padding-bottom: 4px;\n"
-" padding-top: 5px;\n"
-" text-align:left;\n"
-" -moz-border-radius-topleft: 4px;\n"
-" -moz-border-radius-topright: 4px;\n"
-" -webkit-border-top-left-radius: 4px;\n"
-" -webkit-border-top-right-radius: 4px;\n"
-" border-top-left-radius: 4px;\n"
-" border-top-right-radius: 4px;\n"
-" border-bottom: 1px solid ##B4;\n"
-"}\n"
-"\n"
-"\n"
-".tabsearch {\n"
-" top: 0px;\n"
-" left: 10px;\n"
-" height: 36px;\n"
-" background-image: url('tab_b.png');\n"
-" z-index: 101;\n"
-" overflow: hidden;\n"
-" font-size: 13px;\n"
-"}\n"
-"\n"
-".navpath ul\n"
-"{\n"
-" font-size: 11px;\n"
-" background-image:url('tab_b.png');\n"
-" background-repeat:repeat-x;\n"
-" height:30px;\n"
-" line-height:30px;\n"
-" color:##9b;\n"
-" border:solid 1px ##ca;\n"
-" overflow:hidden;\n"
-" margin:0px;\n"
-" padding:0px;\n"
-"}\n"
-"\n"
-".navpath li\n"
-"{\n"
-" list-style-type:none;\n"
-" float:left;\n"
-" padding-left:10px;\n"
-" padding-right:15px;\n"
-" background-image:url('bc_s.png');\n"
-" background-repeat:no-repeat;\n"
-" background-position:right;\n"
-" color:##45;\n"
-"}\n"
-"\n"
-".navpath li.navelem a\n"
-"{\n"
-" height:32px;\n"
-" display:block;\n"
-" text-decoration: none;\n"
-" outline: none;\n"
-"}\n"
-"\n"
-".navpath li.navelem a:hover\n"
-"{\n"
-" color:##80;\n"
-"}\n"
-"\n"
-".navpath li.footer\n"
-"{\n"
-" list-style-type:none;\n"
-" float:right;\n"
-" padding-left:10px;\n"
-" padding-right:15px;\n"
-" background-image:none;\n"
-" background-repeat:no-repeat;\n"
-" background-position:right;\n"
-" color:##45;\n"
-" font-size: 8pt;\n"
-"}\n"
-"\n"
-"\n"
-"div.summary\n"
-"{\n"
-" float: right;\n"
-" font-size: 8pt;\n"
-" padding-right: 5px;\n"
-" width: 50%;\n"
-" text-align: right;\n"
-"} \n"
-"\n"
-"div.summary a\n"
-"{\n"
-" white-space: nowrap;\n"
-"}\n"
-"\n"
-"div.ingroups\n"
-"{\n"
-" margin-left: 5px;\n"
-" font-size: 8pt;\n"
-" padding-left: 5px;\n"
-" width: 50%;\n"
-" text-align: left;\n"
-"}\n"
-"\n"
-"div.ingroups a\n"
-"{\n"
-" white-space: nowrap;\n"
-"}\n"
-"\n"
-"div.header\n"
-"{\n"
-" background-image:url('nav_h.png');\n"
-" background-repeat:repeat-x;\n"
-" background-color: ##FA;\n"
-" margin: 0px;\n"
-" border-bottom: 1px solid ##CC;\n"
-"}\n"
-"\n"
-"div.headertitle\n"
-"{\n"
-" padding: 5px 5px 5px 7px;\n"
-"}\n"
-"\n"
-"dl\n"
-"{\n"
-" padding: 0 0 0 10px;\n"
-"}\n"
-"\n"
-"/* dl.note, dl.warning, dl.attention, dl.pre, dl.post, dl.invariant, dl.deprecated, dl.todo, dl.test, dl.bug */\n"
-"dl.section\n"
-"{\n"
-" border-left:4px solid;\n"
-" padding: 0 0 0 6px;\n"
-"}\n"
-"\n"
-"dl.note\n"
-"{\n"
-" border-color: #D0C000;\n"
-"}\n"
-"\n"
-"dl.warning, dl.attention\n"
-"{\n"
-" border-color: #FF0000;\n"
-"}\n"
-"\n"
-"dl.pre, dl.post, dl.invariant\n"
-"{\n"
-" border-color: #00D000;\n"
-"}\n"
-"\n"
-"dl.deprecated\n"
-"{\n"
-" border-color: #505050;\n"
-"}\n"
-"\n"
-"dl.todo\n"
-"{\n"
-" border-color: #00C0E0;\n"
-"}\n"
-"\n"
-"dl.test\n"
-"{\n"
-" border-color: #3030E0;\n"
-"}\n"
-"\n"
-"dl.bug\n"
-"{\n"
-" border-color: #C08050;\n"
-"}\n"
-"\n"
-"dl.section dd {\n"
-" margin-bottom: 6px;\n"
-"}\n"
-"\n"
-"\n"
-"#projectlogo\n"
-"{\n"
-" text-align: center;\n"
-" vertical-align: bottom;\n"
-" border-collapse: separate;\n"
-"}\n"
-" \n"
-"#projectlogo img\n"
-"{ \n"
-" border: 0px none;\n"
-"}\n"
-" \n"
-"#projectname\n"
-"{\n"
-" font: 300% Tahoma, Arial,sans-serif;\n"
-" margin: 0px;\n"
-" padding: 2px 0px;\n"
-"}\n"
-" \n"
-"#projectbrief\n"
-"{\n"
-" font: 120% Tahoma, Arial,sans-serif;\n"
-" margin: 0px;\n"
-" padding: 0px;\n"
-"}\n"
-"\n"
-"#projectnumber\n"
-"{\n"
-" font: 50% Tahoma, Arial,sans-serif;\n"
-" margin: 0px;\n"
-" padding: 0px;\n"
-"}\n"
-"\n"
-"#titlearea\n"
-"{\n"
-" padding: 0px;\n"
-" margin: 0px;\n"
-" width: 100%;\n"
-" border-bottom: 1px solid ##70;\n"
-"}\n"
-"\n"
-".image\n"
-"{\n"
-" text-align: center;\n"
-"}\n"
-"\n"
-".dotgraph\n"
-"{\n"
-" text-align: center;\n"
-"}\n"
-"\n"
-".mscgraph\n"
-"{\n"
-" text-align: center;\n"
-"}\n"
-"\n"
-".caption\n"
-"{\n"
-" font-weight: bold;\n"
-"}\n"
-"\n"
-"div.zoom\n"
-"{\n"
-" border: 1px solid ##A0;\n"
-"}\n"
-"\n"
-"dl.citelist {\n"
-" margin-bottom:50px;\n"
-"}\n"
-"\n"
-"dl.citelist dt {\n"
-" color:##40;\n"
-" float:left;\n"
-" font-weight:bold;\n"
-" margin-right:10px;\n"
-" padding:5px;\n"
-"}\n"
-"\n"
-"dl.citelist dd {\n"
-" margin:2px 0;\n"
-" padding:5px 0;\n"
-"}\n"
-"\n"
-"div.toc {\n"
-" padding: 14px 25px;\n"
-" background-color: ##F6;\n"
-" border: 1px solid ##DD;\n"
-" border-radius: 7px 7px 7px 7px;\n"
-" float: right;\n"
-" height: auto;\n"
-" margin: 0 20px 10px 10px;\n"
-" width: 200px;\n"
-"}\n"
-"\n"
-"div.toc li {\n"
-" background: url(\"bdwn.png\") no-repeat scroll 0 5px transparent;\n"
-" font: 10px/1.2 Verdana,DejaVu Sans,Geneva,sans-serif;\n"
-" margin-top: 5px;\n"
-" padding-left: 10px;\n"
-" padding-top: 2px;\n"
-"}\n"
-"\n"
-"div.toc h3 {\n"
-" font: bold 12px/1.2 Arial,FreeSans,sans-serif;\n"
-" color: ##60;\n"
-" border-bottom: 0 none;\n"
-" margin: 0;\n"
-"}\n"
-"\n"
-"div.toc ul {\n"
-" list-style: none outside none;\n"
-" border: medium none;\n"
-" padding: 0px;\n"
-"} \n"
-"\n"
-"div.toc li.level1 {\n"
-" margin-left: 0px;\n"
-"}\n"
-"\n"
-"div.toc li.level2 {\n"
-" margin-left: 15px;\n"
-"}\n"
-"\n"
-"div.toc li.level3 {\n"
-" margin-left: 30px;\n"
-"}\n"
-"\n"
-"div.toc li.level4 {\n"
-" margin-left: 45px;\n"
-"}\n"
-"\n"
-"\n"
-"@media print\n"
-"{\n"
-" #top { display: none; }\n"
-" #side-nav { display: none; }\n"
-" #nav-path { display: none; }\n"
-" body { overflow:visible; }\n"
-" h1, h2, h3, h4, h5, h6 { page-break-after: avoid; }\n"
-" .summary { display: none; }\n"
-" .memitem { page-break-inside: avoid; }\n"
-" #doc-content\n"
-" {\n"
-" margin-left:0 !important;\n"
-" height:auto !important;\n"
-" width:auto !important;\n"
-" overflow:inherit;\n"
-" display:inline;\n"
-" }\n"
-" pre.fragment\n"
-" {\n"
-" overflow: visible;\n"
-" text-wrap: unrestricted;\n"
-" white-space: -moz-pre-wrap; /* Moz */\n"
-" white-space: -pre-wrap; /* Opera 4-6 */\n"
-" white-space: -o-pre-wrap; /* Opera 7 */\n"
-" white-space: pre-wrap; /* CSS3 */\n"
-" word-wrap: break-word; /* IE 5.5+ */\n"
-" }\n"
-"}\n"
-"\n"
diff --git a/trunk/src/eclipsehelp.cpp b/trunk/src/eclipsehelp.cpp
deleted file mode 100644
index ea05885..0000000
--- a/trunk/src/eclipsehelp.cpp
+++ /dev/null
@@ -1,205 +0,0 @@
-/******************************************************************************
- *
- * Copyright (C) 1997-2012 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.
- *
- */
-#include "eclipsehelp.h"
-#include "util.h"
-#include "config.h"
-#include "message.h"
-#include "doxygen.h"
-
-EclipseHelp::EclipseHelp() : m_depth(0), m_endtag(FALSE), m_tocfile(0)
-{
-}
-
-EclipseHelp::~EclipseHelp()
-{
-}
-
-void EclipseHelp::indent()
-{
- int i;
- for (i=0; i<m_depth; i++)
- {
- m_tocstream << " ";
- }
-}
-
-void EclipseHelp::closedTag()
-{
- if (m_endtag)
- {
- m_tocstream << "/>" << endl;
- m_endtag = FALSE;
- }
-}
-
-void EclipseHelp::openedTag()
-{
- if (m_endtag)
- {
- m_tocstream << ">" << endl;
- m_endtag = FALSE;
- }
-}
-
-/*!
- * \brief Initialize the Eclipse generator
- *
- * This method opens the XML TOC file and writes headers of the files.
- * \sa finalize()
- */
-void EclipseHelp::initialize()
-{
- // -- read path prefix from the configuration
- //m_pathprefix = Config_getString("ECLIPSE_PATHPREFIX");
- //if (m_pathprefix.isEmpty()) m_pathprefix = "html/";
-
- // -- open the contents file
- QCString name = Config_getString("HTML_OUTPUT") + "/toc.xml";
- m_tocfile = new QFile(name);
- if (!m_tocfile->open(IO_WriteOnly))
- {
- err("Could not open file %s for writing\n", name.data());
- exit(1);
- }
-
- // -- initialize its text stream
- m_tocstream.setDevice(m_tocfile);
- //m_tocstream.setEncoding(FTextStream::UnicodeUTF8);
-
- // -- write the opening tag
- QCString title = Config_getString("PROJECT_NAME");
- if (title.isEmpty())
- {
- title = "Doxygen generated documentation";
- }
- m_tocstream << "<toc label=\"" << convertToXML(title)
- << "\" topic=\"" << convertToXML(m_pathprefix)
- << "index" << Doxygen::htmlFileExtension << "\">" << endl;
- ++ m_depth;
-}
-
-/*!
- * \brief Finish generation of the Eclipse specific help files
- *
- * This method writes footers of the files and closes them.
- * \sa initialize()
- */
-void EclipseHelp::finalize()
-{
- closedTag(); // -- close previous tag
-
- // -- write ending tag
- --m_depth;
- m_tocstream << "</toc>" << endl;
-
- // -- close the content file
- m_tocstream.unsetDevice();
- m_tocfile->close();
- delete m_tocfile; m_tocfile = 0;
-
- QCString name = Config_getString("HTML_OUTPUT") + "/plugin.xml";
- QFile pluginFile(name);
- if (pluginFile.open(IO_WriteOnly))
- {
- QString docId = Config_getString("ECLIPSE_DOC_ID");
- FTextStream t(&pluginFile);
- t << "<plugin name=\"" << docId << "\" id=\"" << docId << "\"" << endl;
- t << " version=\"1.0.0\" provider-name=\"Doxygen\">" << endl;
- t << " <extension point=\"org.eclipse.help.toc\">" << endl;
- t << " <toc file=\"toc.xml\" primary=\"true\" />" << endl;
- t << " </extension>" << endl;
- t << "</plugin>" << endl;
- }
-}
-
-/*!
- * \brief Increase the level of content hierarchy
- */
-void EclipseHelp::incContentsDepth()
-{
- openedTag();
- ++m_depth;
-}
-
-/*!
- * \brief Decrease the level of content hierarchy
- *
- * It closes currently opened topic tag.
- */
-void EclipseHelp::decContentsDepth()
-{
- // -- end of the opened topic
- closedTag();
- --m_depth;
- indent();
- m_tocstream << "</topic>" << endl;
-}
-
-/*!
- * \brief Add an item to the content
- *
- * @param isDir Flag whether the argument \a file is a directory or a file entry
- * @param name Name of the item
- * @param ref URL of the item
- * @param file Name of a file which the item is defined in (without extension)
- * @param anchor Name of an anchor of the item.
- * @param separateIndex not used.
- * @param addToNavIndex not used.
- */
-void EclipseHelp::addContentsItem(
- bool /* isDir */,
- const char *name,
- const char * /* ref */,
- const char *file,
- const char *anchor,
- bool /* separateIndex */,
- bool /* addToNavIndex */)
-{
- // -- write the topic tag
- closedTag();
- indent();
- m_tocstream << "<topic label=\"" << convertToXML(name) << "\"";
- if (file)
- {
- m_tocstream << " href=\"" << convertToXML(m_pathprefix)
- << file << Doxygen::htmlFileExtension;
- if (anchor)
- {
- m_tocstream << "#" << anchor;
- }
- m_tocstream << "\"";
- }
- m_endtag = TRUE;
-}
-
-void EclipseHelp::addIndexItem(
- Definition * /* context */,
- MemberDef * /* md */,
- const char * /* title */)
-{
-}
-
-void EclipseHelp::addIndexFile(const char * /* name */)
-{
-}
-
-void EclipseHelp::addImageFile(const char * /* name */)
-{
-}
-
-void EclipseHelp::addStyleSheetFile(const char * /* name */)
-{
-}
-
diff --git a/trunk/src/eclipsehelp.h b/trunk/src/eclipsehelp.h
deleted file mode 100644
index 0629810..0000000
--- a/trunk/src/eclipsehelp.h
+++ /dev/null
@@ -1,77 +0,0 @@
-/******************************************************************************
- *
- *
- *
- * Copyright (C) 1997-2012 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.
- *
- */
-/*
- * eclipsehelp.h
- *
- * Created on: 7.11.2009
- * Author: ondrej
- */
-
-#ifndef ECLIPSEHELP_H
-#define ECLIPSEHELP_H
-
-#include "qtbc.h"
-#include "index.h"
-#include "ftextstream.h"
-
-/* -- forward declarations */
-class QFile;
-
-/*!
- * \brief Generator of Eclipse help files
- *
- * This class generates the Eclipse specific help files.
- * These files can be used to generate a help plugin readable
- * by the Eclipse IDE.
- */
-class EclipseHelp : public IndexIntf
-{
- public:
- EclipseHelp();
- virtual ~EclipseHelp();
-
- /* -- index interface */
- virtual void initialize();
- virtual void finalize();
- virtual void incContentsDepth();
- virtual void decContentsDepth();
- virtual void addContentsItem(bool isDir, const char *name, const char *ref,
- const char *file, const char *anchor,bool separateIndex,bool addToNavIndex);
- virtual void addIndexItem(Definition *context,MemberDef *md,const char *title);
- virtual void addIndexFile(const char *name);
- virtual void addImageFile(const char *name);
- virtual void addStyleSheetFile(const char *name);
-
- private:
- int m_depth;
- bool m_endtag;
-
- QFile * m_tocfile;
- FTextStream m_tocstream;
- QCString m_pathprefix;
-
- /* -- avoid copying */
- EclipseHelp(const EclipseHelp &);
- EclipseHelp & operator = (const EclipseHelp &);
-
- /* -- formatting helpers */
- void indent();
- void closedTag();
- void openedTag();
-};
-
-#endif /* ECLIPSEHELP_H */
diff --git a/trunk/src/entry.cpp b/trunk/src/entry.cpp
deleted file mode 100644
index 01c9742..0000000
--- a/trunk/src/entry.cpp
+++ /dev/null
@@ -1,458 +0,0 @@
-/******************************************************************************
- *
- *
- *
- * Copyright (C) 1997-2012 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.
- *
- */
-
-#include <stdlib.h>
-#include <qfile.h>
-#include "entry.h"
-#include "marshal.h"
-#include "util.h"
-#include "section.h"
-#include "doxygen.h"
-#include "filestorage.h"
-#include "arguments.h"
-
-//------------------------------------------------------------------
-
-#define HEADER ('D'<<24)+('O'<<16)+('X'<<8)+'!'
-
-//------------------------------------------------------------------
-
-int Entry::num=0;
-
-Entry::Entry()
-{
- //printf("Entry::Entry(%p)\n",this);
- num++;
- m_parent=0;
- section = EMPTY_SEC;
- m_sublist = new QList<Entry>;
- m_sublist->setAutoDelete(TRUE);
- extends = new QList<BaseInfo>;
- extends->setAutoDelete(TRUE);
- groups = new QList<Grouping>;
- groups->setAutoDelete(TRUE);
- anchors = new QList<SectionInfo>; // Doxygen::sectionDict takes ownership of the items!
- argList = new ArgumentList;
- argList->setAutoDelete(TRUE);
- //printf("Entry::Entry() tArgList=0\n");
- tArgLists = 0;
- typeConstr = 0;
- mGrpId = -1;
- tagInfo = 0;
- sli = 0;
- relatesType = Simple;
- hidden = FALSE;
- groupDocType = GROUPDOC_NORMAL;
- reset();
-}
-
-Entry::Entry(const Entry &e)
-{
- //printf("Entry::Entry(%p):copy\n",this);
- num++;
- section = e.section;
- type = e.type;
- name = e.name;
- tagInfo = e.tagInfo;
- protection = e.protection;
- mtype = e.mtype;
- spec = e.spec;
- initLines = e.initLines;
- stat = e.stat;
- explicitExternal = e.explicitExternal;
- proto = e.proto;
- subGrouping = e.subGrouping;
- callGraph = e.callGraph;
- callerGraph = e.callerGraph;
- virt = e.virt;
- args = e.args;
- bitfields = e.bitfields;
- argList = new ArgumentList;
- argList->setAutoDelete(TRUE);
- tArgLists = 0;
- program = e.program;
- initializer = e.initializer;
- includeFile = e.includeFile;
- includeName = e.includeName;
- doc = e.doc;
- docLine = e.docLine;
- docFile = e.docFile;
- brief = e.brief;
- briefLine = e.briefLine;
- briefFile = e.briefFile;
- inbodyDocs = e.inbodyDocs;
- inbodyLine = e.inbodyLine;
- inbodyFile = e.inbodyFile;
- relates = e.relates;
- relatesType = e.relatesType;
- read = e.read;
- write = e.write;
- inside = e.inside;
- exception = e.exception;
- typeConstr = 0;
- bodyLine = e.bodyLine;
- endBodyLine = e.endBodyLine;
- mGrpId = e.mGrpId;
- extends = new QList<BaseInfo>;
- extends->setAutoDelete(TRUE);
- groups = new QList<Grouping>;
- groups->setAutoDelete(TRUE);
- anchors = new QList<SectionInfo>;
- fileName = e.fileName;
- startLine = e.startLine;
- if (e.sli)
- {
- sli = new QList<ListItemInfo>;
- sli->setAutoDelete(TRUE);
- QListIterator<ListItemInfo> slii(*e.sli);
- ListItemInfo *ili;
- for (slii.toFirst();(ili=slii.current());++slii)
- {
- sli->append(new ListItemInfo(*ili));
- }
- }
- else
- {
- sli=0;
- }
- lang = e.lang;
- hidden = e.hidden;
- artificial = e.artificial;
- groupDocType = e.groupDocType;
-
- m_parent = e.m_parent;
- m_sublist = new QList<Entry>;
- m_sublist->setAutoDelete(TRUE);
-
- // deep copy of the child entry list
- QListIterator<Entry> eli(*e.m_sublist);
- Entry *cur;
- for (;(cur=eli.current());++eli)
- {
- m_sublist->append(new Entry(*cur));
- }
-
- // deep copy base class list
- QListIterator<BaseInfo> bli(*e.extends);
- BaseInfo *bi;
- for (;(bi=bli.current());++bli)
- {
- extends->append(new BaseInfo(*bi));
- }
-
- // deep copy group list
- QListIterator<Grouping> gli(*e.groups);
- Grouping *g;
- for (;(g=gli.current());++gli)
- {
- groups->append(new Grouping(*g));
- }
-
- QListIterator<SectionInfo> sli2(*e.anchors);
- SectionInfo *s;
- for (;(s=sli2.current());++sli2)
- {
- anchors->append(new SectionInfo(*s));
- }
-
- // deep copy argument list
- QListIterator<Argument> ali(*e.argList);
- Argument *a;
- for (;(a=ali.current());++ali)
- {
- argList->append(new Argument(*a));
- }
- argList->constSpecifier = e.argList->constSpecifier;
- argList->volatileSpecifier = e.argList->volatileSpecifier;
- argList->pureSpecifier = e.argList->pureSpecifier;
-
- // deep copy type contraint list
- if (e.typeConstr)
- {
- typeConstr = new ArgumentList;
- typeConstr->setAutoDelete(TRUE);
- QListIterator<Argument> tcli(*e.typeConstr);
- for (;(a=tcli.current());++tcli)
- {
- typeConstr->append(new Argument(*a));
- }
- }
-
- // deep copy template argument lists
- if (e.tArgLists)
- {
- tArgLists = copyArgumentLists(e.tArgLists);
- }
-
-}
-
-Entry::~Entry()
-{
- //printf("Entry::~Entry(%p) num=%d\n",this,num);
- //printf("Deleting entry %d name %s type %x children %d\n",
- // num,name.data(),section,sublist->count());
-
- delete m_sublist; // each element is now own by a EntryNav so we do no longer own
- // our children.
- delete extends;
- delete groups;
- delete anchors;
- delete argList;
- delete tArgLists;
- delete tagInfo;
- delete typeConstr;
- delete sli;
- num--;
-}
-
-void Entry::addSubEntry(Entry *current)
-{
- //printf("Entry %d with name %s type 0x%x added to %s type 0x%x\n",
- // current->num,current->name.data(),current->section,
- // name.data(),section);
- //printf("Entry::addSubEntry(%s:%p) to %s\n",current->name.data(),
- // current,name.data());
- current->m_parent=this;
- m_sublist->append(current);
-}
-
-void Entry::reset()
-{
- //printf("Entry::reset()\n");
- name.resize(0);
- type.resize(0);
- args.resize(0);
- bitfields.resize(0);
- exception.resize(0);
- program.resize(0);
- includeFile.resize(0);
- includeName.resize(0);
- doc.resize(0);
- docFile.resize(0);
- docLine=-1;
- relates.resize(0);
- relatesType=Simple;
- brief.resize(0);
- briefFile.resize(0);
- briefLine=-1;
- inbodyDocs.resize(0);
- inbodyFile.resize(0);
- inbodyLine=-1;
- inside.resize(0);
- fileName.resize(0);
- initializer.resize(0);
- initLines = -1;
- startLine = 1;
- bodyLine = -1;
- endBodyLine = -1;
- mGrpId = -1;
- callGraph = FALSE;
- callerGraph = FALSE;
- section = EMPTY_SEC;
- mtype = Method;
- virt = Normal;
- stat = FALSE;
- proto = FALSE;
- explicitExternal = FALSE;
- spec = 0;
- lang = SrcLangExt_Unknown;
- hidden = FALSE;
- artificial = FALSE;
- subGrouping = TRUE;
- protection = Public;
- groupDocType = GROUPDOC_NORMAL;
- m_sublist->clear();
- extends->clear();
- groups->clear();
- anchors->clear();
- argList->clear();
- if (tagInfo) { delete tagInfo; tagInfo=0; }
- if (tArgLists) { delete tArgLists; tArgLists=0; }
- if (sli) { delete sli; sli=0; }
- if (typeConstr) { delete typeConstr; typeConstr=0; }
- //if (mtArgList) { delete mtArgList; mtArgList=0; }
-}
-
-
-int Entry::getSize()
-{
- return sizeof(Entry);
-}
-
-void Entry::createSubtreeIndex(EntryNav *nav,FileStorage *storage,FileDef *fd)
-{
- EntryNav *childNav = new EntryNav(nav,this);
- nav->addChild(childNav);
- childNav->setFileDef(fd);
- childNav->saveEntry(this,storage);
- if (m_sublist)
- {
- //printf("saveEntry: %d children\n",node->sublist->count());
- QListIterator<Entry> eli(*m_sublist);
- Entry *childNode;
- for (eli.toFirst();(childNode=eli.current());++eli)
- {
- childNode->createSubtreeIndex(childNav,storage,fd);
- }
- //m_sublist->setAutoDelete(FALSE);
- m_sublist->clear();
- }
-}
-
-void Entry::createNavigationIndex(EntryNav *rootNav,FileStorage *storage,FileDef *fd)
-{
- //printf("createNavigationIndex(%p) sublist=%p\n",this,m_sublist);
- if (m_sublist)
- {
- //printf("saveEntries: %d children\n",root->sublist->count());
- // store all child entries of root, but keep the navigation info (=index)
- QListIterator<Entry> eli(*m_sublist);
- Entry *e;
- for (eli.toFirst();(e=eli.current());++eli)
- {
- createSubtreeIndex(rootNav,storage,fd);
- }
- // remove all entries from root
- //m_sublist->setAutoDelete(FALSE);
- m_sublist->clear();
- }
-}
-
-void Entry::addSpecialListItem(const char *listName,int itemId)
-{
- if (sli==0)
- {
- sli = new QList<ListItemInfo>;
- sli->setAutoDelete(TRUE);
- }
- ListItemInfo *ili=new ListItemInfo;
- ili->type = listName;
- ili->itemId = itemId;
- sli->append(ili);
-}
-
-Entry *Entry::removeSubEntry(Entry *e)
-{
- int i = m_sublist->find(e);
- return i!=-1 ? m_sublist->take(i) : 0;
-}
-
-//------------------------------------------------------------------
-
-
-EntryNav::EntryNav(EntryNav *parent, Entry *e)
- : m_parent(parent), m_subList(0), m_section(e->section), m_type(e->type),
- m_name(e->name), m_fileDef(0), m_lang(e->lang),
- m_info(0), m_offset(-1), m_noLoad(FALSE)
-{
- if (e->tagInfo)
- {
- m_tagInfo = new TagInfo;
- m_tagInfo->tagName = e->tagInfo->tagName;
- m_tagInfo->fileName = e->tagInfo->fileName;
- m_tagInfo->anchor = e->tagInfo->anchor;
- if (e->tagInfo)
- {
- //printf("tagInfo %p: tagName=%s fileName=%s anchor=%s\n",
- // e->tagInfo,
- // e->tagInfo->tagName.data(),
- // e->tagInfo->fileName.data(),
- // e->tagInfo->anchor.data());
- }
- }
- else
- {
- m_tagInfo = 0;
- }
-}
-
-EntryNav::~EntryNav()
-{
- delete m_subList;
- delete m_info;
- delete m_tagInfo;
-}
-
-void EntryNav::addChild(EntryNav *e)
-{
- if (m_subList==0)
- {
- m_subList = new QList<EntryNav>;
- m_subList->setAutoDelete(TRUE);
- }
- m_subList->append(e);
-}
-
-bool EntryNav::loadEntry(FileStorage *storage)
-{
- if (m_noLoad)
- {
- return TRUE;
- }
- if (m_offset==-1)
- {
- //printf("offset not set!\n");
- return FALSE;
- }
- //delete m_info;
- //printf("EntryNav::loadEntry: new entry %p: %s\n",m_info,m_name.data());
- //m_info->tagInfo = m_tagInfo;
- //if (m_parent)
- //{
- // m_info->parent = m_parent->m_info;
- //}
- //m_info->parent = 0;
- //printf("load entry: seek to %llx\n",m_offset);
- if (!storage->seek(m_offset))
- {
- //printf("seek failed!\n");
- return FALSE;
- }
- if (m_info) delete m_info;
- m_info = unmarshalEntry(storage);
- m_info->name = m_name;
- m_info->type = m_type;
- m_info->section = m_section;
- return TRUE;
-}
-
-bool EntryNav::saveEntry(Entry *e,FileStorage *storage)
-{
- m_offset = storage->pos();
- //printf("EntryNav::saveEntry offset=%llx\n",m_offset);
- marshalEntry(storage,e);
- return TRUE;
-}
-
-void EntryNav::releaseEntry()
-{
- if (!m_noLoad)
- {
- //printf("EntryNav::releaseEntry %p\n",m_info);
- delete m_info;
- m_info=0;
- }
-}
-
-void EntryNav::setEntry(Entry *e)
-{
- delete m_info;
- m_info = e;
- //printf("EntryNav::setEntry %p\n",e);
- m_noLoad=TRUE;
-}
-
diff --git a/trunk/src/entry.h b/trunk/src/entry.h
deleted file mode 100644
index d312cec..0000000
--- a/trunk/src/entry.h
+++ /dev/null
@@ -1,351 +0,0 @@
-/******************************************************************************
- *
- *
- *
- * Copyright (C) 1997-2012 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.
- *
- */
-
-#ifndef ENTRY_H
-#define ENTRY_H
-
-#include "qtbc.h"
-#include <qlist.h>
-#include "types.h"
-
-#include <qgstring.h>
-
-struct SectionInfo;
-class QFile;
-class EntryNav;
-class FileDef;
-class FileStorage;
-class StorageIntf;
-class ArgumentList;
-struct ListItemInfo;
-
-/*! \brief This class stores information about an inheritance relation
- */
-struct BaseInfo
-{
- /*! Creates an object representing an inheritance relation */
- BaseInfo(const char *n,Protection p,Specifier v) :
- name(n),prot(p),virt(v) {}
- QCString name; //!< the name of the base class
- Protection prot; //!< inheritance type
- Specifier virt; //!< virtualness
-};
-
-/*! \brief This struct is used to capture the tag file information
- * for an Entry.
- */
-struct TagInfo
-{
- QCString tagName;
- QCString fileName;
- QCString anchor;
-};
-
-/*! \brief Represents an unstructured piece of information, about an
- * entity found in the sources.
- *
- * parseMain() in scanner.l will generate a tree of these
- * entries.
- */
-class Entry
-{
- public:
-
- /*! Kind of entries that are supported */
- enum Sections {
- CLASS_SEC = 0x00000001,
- NAMESPACE_SEC = 0x00000010,
- COMPOUND_MASK = CLASS_SEC,
- SCOPE_MASK = COMPOUND_MASK | NAMESPACE_SEC,
-
- CLASSDOC_SEC = 0x00000800,
- STRUCTDOC_SEC = 0x00001000,
- UNIONDOC_SEC = 0x00002000,
- EXCEPTIONDOC_SEC = 0x00004000,
- NAMESPACEDOC_SEC = 0x00008000,
- INTERFACEDOC_SEC = 0x00010000,
- PROTOCOLDOC_SEC = 0x00020000,
- CATEGORYDOC_SEC = 0x00040000,
- COMPOUNDDOC_MASK = CLASSDOC_SEC | STRUCTDOC_SEC | UNIONDOC_SEC |
- INTERFACEDOC_SEC | EXCEPTIONDOC_SEC | PROTOCOLDOC_SEC |
- CATEGORYDOC_SEC,
-
- SOURCE_SEC = 0x00400000,
- HEADER_SEC = 0x00800000,
- FILE_MASK = SOURCE_SEC | HEADER_SEC,
-
- ENUMDOC_SEC = 0x01000000,
- ENUM_SEC = 0x02000000,
- EMPTY_SEC = 0x03000000,
- PAGEDOC_SEC = 0x04000000,
- VARIABLE_SEC = 0x05000000,
- FUNCTION_SEC = 0x06000000,
- TYPEDEF_SEC = 0x07000000,
- MEMBERDOC_SEC = 0x08000000,
- OVERLOADDOC_SEC = 0x09000000,
- EXAMPLE_SEC = 0x0a000000,
- VARIABLEDOC_SEC = 0x0b000000,
- FILEDOC_SEC = 0x0c000000,
- DEFINEDOC_SEC = 0x0d000000,
- INCLUDE_SEC = 0x0e000000,
- DEFINE_SEC = 0x0f000000,
- GROUPDOC_SEC = 0x10000000,
- USINGDIR_SEC = 0x11000000,
- MAINPAGEDOC_SEC = 0x12000000,
- MEMBERGRP_SEC = 0x13000000,
- USINGDECL_SEC = 0x14000000,
- PACKAGE_SEC = 0x15000000,
- PACKAGEDOC_SEC = 0x16000000,
- OBJCIMPL_SEC = 0x17000000,
- DIRDOC_SEC = 0x18000000
- };
- enum MemberSpecifier
- {
- Inline = 0x00000001,
- Explicit = 0x00000002,
- Mutable = 0x00000004,
- Settable = 0x00000008,
- Gettable = 0x00000010,
- Readable = 0x00000020,
- Writable = 0x00000040,
- Final = 0x00000080,
- Abstract = 0x00000100,
- Addable = 0x00000200,
- Removable = 0x00000400,
- Raisable = 0x00000800,
- Override = 0x00001000,
- New = 0x00002000,
- Sealed = 0x00004000,
- Initonly = 0x00008000,
- Optional = 0x00010000,
- Required = 0x00020000,
- NonAtomic = 0x00040000,
- Copy = 0x00080000,
- Retain = 0x00100000,
- Assign = 0x00200000,
- Composition = 0x00400000,
- Aggregation = 0x00800000,
- Association = 0x01000000
- };
- enum ClassSpecifier
- {
- Template = 0x0001,
- Generic = 0x0002,
- Ref = 0x0004,
- Value = 0x0008,
- Interface = 0x0010,
- Struct = 0x0020,
- Union = 0x0040,
- Exception = 0x0080,
- Protocol = 0x0100,
- Category = 0x0200,
- SealedClass = 0x0400,
- AbstractClass = 0x0800,
- Enum = 0x1000 // for Java-style enums
- };
- enum GroupDocType
- {
- GROUPDOC_NORMAL, //!< defgroup
- GROUPDOC_ADD, //!< addgroup
- GROUPDOC_WEAK //!< weakgroup
- }; //!< kind of group
-
- Entry();
- Entry(const Entry &);
- ~Entry();
-
- /*! Returns the static size of the Entry (so excluding any dynamic memory) */
- int getSize();
-
- void addSpecialListItem(const char *listName,int index);
- void createNavigationIndex(EntryNav *rootNav,FileStorage *storage,FileDef *fd);
-
- // while parsing a file these function can be used to navigate/build the tree
- void setParent(Entry *parent) { m_parent = parent; }
-
- /*! Returns the parent for this Entry or 0 if this entry has no parent. */
- Entry *parent() const { return m_parent; }
-
- /*! Returns the list of children for this Entry
- * @see addSubEntry() and removeSubEntry()
- */
- const QList<Entry> *children() const { return m_sublist; }
-
- /*! Adds entry \a e as a child to this entry */
- void addSubEntry (Entry* e) ;
-
- /*! Removes entry \a e from the list of children.
- * Returns a pointer to the entry or 0 if the entry was not a child.
- * Note the entry will not be deleted.
- */
- Entry *removeSubEntry(Entry *e);
-
- /*! Restore the state of this Entry to the default value it has
- * at construction time.
- */
- void reset();
-
- /*! Serialize this entry to a persistent storage stream. */
- void marshall(StorageIntf *);
-
- /*! Reinitialize this entry from a persistent storage stream. */
- void unmarshall(StorageIntf *);
-
- public:
-
- // identification
- int section; //!< entry type (see Sections);
- QCString type; //!< member type
- QCString name; //!< member name
- TagInfo *tagInfo; //!< tag file info
-
- // content
- Protection protection; //!< class protection
- MethodTypes mtype; //!< signal, slot, (dcop) method, or property?
- int spec; //!< class/member specifiers
- int initLines; //!< define/variable initializer lines to show
- bool stat; //!< static ?
- bool explicitExternal; //!< explicitly defined as external?
- bool proto; //!< prototype ?
- bool subGrouping; //!< automatically group class members?
- bool callGraph; //!< do we need to draw the call graph?
- bool callerGraph; //!< do we need to draw the caller graph?
- Specifier virt; //!< virtualness of the entry
- QCString args; //!< member argument string
- QCString bitfields; //!< member's bit fields
- ArgumentList *argList; //!< member arguments as a list
- QList<ArgumentList> *tArgLists; //!< template argument declarations
- QGString program; //!< the program text
- QGString initializer; //!< initial value (for variables)
- QCString includeFile; //!< include file (2 arg of \\class, must be unique)
- QCString includeName; //!< include name (3 arg of \\class)
- QCString doc; //!< documentation block (partly parsed)
- int docLine; //!< line number at which the documentation was found
- QCString docFile; //!< file in which the documentation was found
- QCString brief; //!< brief description (doc block)
- int briefLine; //!< line number at which the brief desc. was found
- QCString briefFile; //!< file in which the brief desc. was found
- QCString inbodyDocs; //!< documentation inside the body of a function
- int inbodyLine; //!< line number at which the body doc was found
- QCString inbodyFile; //!< file in which the body doc was found
- QCString relates; //!< related class (doc block)
- RelatesType relatesType; //!< how relates is handled
- QCString read; //!< property read accessor
- QCString write; //!< property write accessor
- QCString inside; //!< name of the class in which documents are found
- QCString exception; //!< throw specification
- ArgumentList *typeConstr; //!< where clause (C#) for type constraints
- int bodyLine; //!< line number of the definition in the source
- int endBodyLine; //!< line number where the definition ends
- int mGrpId; //!< member group id
- QList<BaseInfo> *extends; //!< list of base classes
- QList<Grouping> *groups; //!< list of groups this entry belongs to
- QList<SectionInfo> *anchors; //!< list of anchors defined in this entry
- QCString fileName; //!< file this entry was extracted from
- int startLine; //!< start line of entry in the source
- QList<ListItemInfo> *sli; //!< special lists (test/todo/bug/deprecated/..) this entry is in
- SrcLangExt lang; //!< programming language in which this entry was found
- bool hidden; //!< does this represent an entity that is hidden from the output
- bool artificial; //!< Artificially introduced item
- GroupDocType groupDocType;
-
-
- static int num; //!< counts the total number of entries
-
- /// return the command name used to define GROUPDOC_SEC
- const char *groupDocCmd() const
- {
- switch( groupDocType )
- {
- case GROUPDOC_NORMAL: return "\\defgroup";
- case GROUPDOC_ADD: return "\\addgroup";
- case GROUPDOC_WEAK: return "\\weakgroup";
- default: return "unknown group command";
- }
- }
- Grouping::GroupPri_t groupingPri() const
- {
- if( section != GROUPDOC_SEC )
- {
- return Grouping::GROUPING_LOWEST;
- }
- switch( groupDocType )
- {
- case GROUPDOC_NORMAL: return Grouping::GROUPING_AUTO_DEF;
- case GROUPDOC_ADD: return Grouping::GROUPING_AUTO_ADD;
- case GROUPDOC_WEAK: return Grouping::GROUPING_AUTO_WEAK;
- default: return Grouping::GROUPING_LOWEST;
- }
- }
-
- private:
- void createSubtreeIndex(EntryNav *nav,FileStorage *storage,FileDef *fd);
- Entry *m_parent; //!< parent node in the tree
- QList<Entry> *m_sublist; //!< entries that are children of this one
- Entry &operator=(const Entry &);
-};
-
-class EntryNav
-{
- public:
- EntryNav(EntryNav *parent,Entry *e);
- ~EntryNav();
- void addChild(EntryNav *);
- bool loadEntry(FileStorage *storage);
- bool saveEntry(Entry *e,FileStorage *storage);
- void setEntry(Entry *e);
- void releaseEntry();
- void changeSection(int section) { m_section = section; }
- void setFileDef(FileDef *fd) { m_fileDef = fd; }
-
- Entry *entry() const { return m_info; }
- int section() const { return m_section; }
- SrcLangExt lang() const { return m_lang; }
- const QCString &type() const { return m_type; }
- const QCString &name() const { return m_name; }
- TagInfo *tagInfo() const { return m_tagInfo; }
- const QList<EntryNav> *children() const { return m_subList; }
- EntryNav *parent() const { return m_parent; }
- FileDef *fileDef() const { return m_fileDef; }
-
- private:
-
- // navigation
- EntryNav *m_parent; //!< parent node in the tree
- QList<EntryNav> *m_subList; //!< entries that are children of this one
-
- // identification
- int m_section; //!< entry type (see Sections);
- QCString m_type; //!< member type
- QCString m_name; //!< member name
- TagInfo *m_tagInfo; //!< tag file info
- FileDef *m_fileDef;
- SrcLangExt m_lang; //!< programming language in which this entry was found
-
- Entry *m_info;
- int64 m_offset;
- bool m_noLoad;
-};
-
-
-typedef QList<Entry> EntryList;
-typedef QListIterator<Entry> EntryListIterator;
-
-typedef QList<EntryNav> EntryNavList;
-typedef QListIterator<EntryNav> EntryNavListIterator;
-
-#endif
diff --git a/trunk/src/example.h b/trunk/src/example.h
deleted file mode 100644
index a780326..0000000
--- a/trunk/src/example.h
+++ /dev/null
@@ -1,45 +0,0 @@
-/******************************************************************************
- *
- *
- *
- * Copyright (C) 1997-2012 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.
- *
- */
-
-#ifndef EXAMPLE_H
-#define EXAMPLE_H
-
-#include "qtbc.h"
-#include <qdict.h>
-
-class ClassDef;
-class MemberName;
-
-struct Example
-{
- QCString anchor;
- QCString name;
- QCString file;
-};
-
-class ExampleSDict : public SDict<Example>
-{
- public:
- ExampleSDict(int size=17) : SDict<Example>(size) {}
- ~ExampleSDict() {}
- int compareItems(GCI item1,GCI item2)
- {
- return stricmp(((Example *)item1)->name,((Example *)item2)->name);
- }
-};
-
-#endif
diff --git a/trunk/src/filedef.cpp b/trunk/src/filedef.cpp
deleted file mode 100644
index e25e04f..0000000
--- a/trunk/src/filedef.cpp
+++ /dev/null
@@ -1,1679 +0,0 @@
-/******************************************************************************
- *
- *
- *
- * Copyright (C) 1997-2012 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.
- *
- */
-
-#include "qtbc.h"
-#include "memberlist.h"
-#include "classlist.h"
-#include "filedef.h"
-#include "doxygen.h"
-#include "memberdef.h"
-#include "classdef.h"
-#include "namespacedef.h"
-#include "util.h"
-#include "language.h"
-#include "outputlist.h"
-#include "dot.h"
-#include "message.h"
-#include "docparser.h"
-#include "searchindex.h"
-#include "htags.h"
-#include "parserintf.h"
-#include "portable.h"
-#include "vhdldocgen.h"
-#include "debug.h"
-#include "layout.h"
-#include "entry.h"
-
-//---------------------------------------------------------------------------
-
-class DevNullCodeDocInterface : public CodeOutputInterface
-{
- public:
- virtual void codify(const char *) {}
- virtual void writeCodeLink(const char *,const char *,
- const char *,const char *,
- const char *) {}
- virtual void writeLineNumber(const char *,const char *,
- const char *,int) {}
- virtual void startCodeLine() {}
- virtual void endCodeLine() {}
- virtual void startCodeAnchor(const char *) {}
- virtual void endCodeAnchor() {}
- virtual void startFontClass(const char *) {}
- virtual void endFontClass() {}
- virtual void writeCodeAnchor(const char *) {}
- virtual void linkableSymbol(int, const char *,Definition *,Definition *) {}
-};
-
-//---------------------------------------------------------------------------
-
-/*! create a new file definition, where \a p is the file path,
- \a nm the file name, and \a lref is an HTML anchor name if the
- file was read from a tag file or 0 otherwise
-*/
-FileDef::FileDef(const char *p,const char *nm,
- const char *lref,const char *dn)
- : Definition((QCString)p+nm,1,nm)
-{
- path=p;
- filepath=path+nm;
- filename=nm;
- diskname=dn;
- if (diskname.isEmpty()) diskname=nm;
- setReference(lref);
- classSDict = 0;
- includeList = 0;
- includeDict = 0;
- includedByList = 0;
- includedByDict = 0;
- namespaceSDict = 0;
- srcDefDict = 0;
- srcMemberDict = 0;
- usingDirList = 0;
- usingDeclList = 0;
- package = 0;
- isSource = FALSE;
- docname = nm;
- dir = 0;
- if (Config_getBool("FULL_PATH_NAMES"))
- {
- docname.prepend(stripFromPath(path.copy()));
- }
- SrcLangExt lang = getLanguageFromFileName(name());
- setLanguage(lang);
- //m_isJava = lang==SrcLangExt_Java;
- //m_isCSharp = lang==SrcLangExt_CSharp;
- memberGroupSDict = 0;
- acquireFileVersion();
- m_subGrouping=Config_getBool("SUBGROUPING");
-}
-
-/*! destroy the file definition */
-FileDef::~FileDef()
-{
- delete classSDict;
- delete includeDict;
- delete includeList;
- delete includedByDict;
- delete includedByList;
- delete namespaceSDict;
- delete srcDefDict;
- delete srcMemberDict;
- delete usingDirList;
- delete usingDeclList;
- delete memberGroupSDict;
-}
-
-/*! Compute the HTML anchor names for all members in the class */
-void FileDef::computeAnchors()
-{
- MemberList *ml = getMemberList(MemberList::allMembersList);
- if (ml) setAnchors(0,'a',ml);
-}
-
-void FileDef::distributeMemberGroupDocumentation()
-{
- //printf("FileDef::distributeMemberGroupDocumentation()\n");
- if (memberGroupSDict)
- {
- MemberGroupSDict::Iterator mgli(*memberGroupSDict);
- MemberGroup *mg;
- for (;(mg=mgli.current());++mgli)
- {
- mg->distributeMemberGroupDocumentation();
- }
- }
-}
-
-void FileDef::findSectionsInDocumentation()
-{
- docFindSections(documentation(),this,0,docFile());
- if (memberGroupSDict)
- {
- MemberGroupSDict::Iterator mgli(*memberGroupSDict);
- MemberGroup *mg;
- for (;(mg=mgli.current());++mgli)
- {
- mg->findSectionsInDocumentation();
- }
- }
-
- QListIterator<MemberList> mli(m_memberLists);
- MemberList *ml;
- for (mli.toFirst();(ml=mli.current());++mli)
- {
- if (ml->listType()&MemberList::declarationLists)
- {
- ml->findSectionsInDocumentation();
- }
- }
-}
-
-void FileDef::writeDetailedDescription(OutputList &ol,const QCString &title)
-{
- if ((!briefDescription().isEmpty() && Config_getBool("REPEAT_BRIEF")) ||
- !documentation().isEmpty() ||
- (Config_getBool("SOURCE_BROWSER") && getStartBodyLine()!=-1 && getBodyDef())
- )
- {
- ol.writeRuler();
- ol.pushGeneratorState();
- ol.disableAllBut(OutputGenerator::Html);
- ol.writeAnchor(0,"details");
- ol.popGeneratorState();
- ol.startGroupHeader();
- ol.parseText(title);
- ol.endGroupHeader();
-
- ol.startTextBlock();
- if (!briefDescription().isEmpty() && Config_getBool("REPEAT_BRIEF"))
- {
- ol.parseDoc(briefFile(),briefLine(),this,0,briefDescription(),FALSE,FALSE);
- }
- if (!briefDescription().isEmpty() && Config_getBool("REPEAT_BRIEF") &&
- !documentation().isEmpty())
- {
- ol.pushGeneratorState();
- ol.disable(OutputGenerator::Man);
- ol.disable(OutputGenerator::RTF);
- // ol.newParagraph(); // FIXME:PARA
- ol.enableAll();
- ol.disableAllBut(OutputGenerator::Man);
- ol.writeString("\n\n");
- ol.popGeneratorState();
- }
- if (!documentation().isEmpty())
- {
- ol.parseDoc(docFile(),docLine(),this,0,documentation()+"\n",TRUE,FALSE);
- }
- //printf("Writing source ref for file %s\n",name().data());
- if (Config_getBool("SOURCE_BROWSER"))
- {
- ol.startParagraph();
- QCString refText = theTranslator->trDefinedInSourceFile();
- int fileMarkerPos = refText.find("@0");
- if (fileMarkerPos!=-1) // should always pass this.
- {
- ol.parseText(refText.left(fileMarkerPos)); //text left from marker 1
- ol.writeObjectLink(0,getSourceFileBase(),
- 0,name());
- ol.parseText(refText.right(
- refText.length()-fileMarkerPos-2)); // text right from marker 2
- }
- ol.endParagraph();
- }
- ol.endTextBlock();
- }
-}
-
-void FileDef::writeBriefDescription(OutputList &ol)
-{
- if (!briefDescription().isEmpty() && Config_getBool("BRIEF_MEMBER_DESC"))
- {
- ol.startParagraph();
- ol.parseDoc(briefFile(),briefLine(),this,0,
- briefDescription(),TRUE,FALSE,0,TRUE,FALSE);
- ol.pushGeneratorState();
- ol.disable(OutputGenerator::RTF);
- ol.writeString(" \n");
- ol.enable(OutputGenerator::RTF);
-
- if (Config_getBool("REPEAT_BRIEF") ||
- !documentation().isEmpty()
- )
- {
- ol.disableAllBut(OutputGenerator::Html);
- ol.startTextLink(0,"details");
- ol.parseText(theTranslator->trMore());
- ol.endTextLink();
- }
- ol.popGeneratorState();
- ol.endParagraph();
-
- //ol.pushGeneratorState();
- //ol.disable(OutputGenerator::RTF);
- //ol.newParagraph();
- //ol.popGeneratorState();
- }
- ol.writeSynopsis();
-}
-
-void FileDef::writeIncludeFiles(OutputList &ol)
-{
- if (/*Config_getBool("SHOW_INCLUDE_FILES") &&*/ includeList &&
- includeList->count()>0)
- {
- ol.startTextBlock(TRUE);
- QListIterator<IncludeInfo> ili(*includeList);
- IncludeInfo *ii;
- for (;(ii=ili.current());++ili)
- {
- if (!ii->indirect)
- {
- FileDef *fd=ii->fileDef;
- bool isIDLorJava = FALSE;
- if (fd)
- {
- SrcLangExt lang = fd->getLanguage();
- isIDLorJava = lang==SrcLangExt_IDL || lang==SrcLangExt_Java;
- }
- ol.startTypewriter();
- if (isIDLorJava) // IDL/Java include
- {
- ol.docify("import ");
- }
- else if (ii->imported) // Objective-C include
- {
- ol.docify("#import ");
- }
- else // C/C++ include
- {
- ol.docify("#include ");
- }
- if (ii->local || isIDLorJava)
- ol.docify("\"");
- else
- ol.docify("<");
- ol.disable(OutputGenerator::Html);
- ol.docify(ii->includeName);
- ol.enableAll();
- ol.disableAllBut(OutputGenerator::Html);
-
- // Here we use the include file name as it appears in the file.
- // we could also we the name as it is used within doxygen,
- // then we should have used fd->docName() instead of ii->includeName
- if (fd && fd->isLinkable())
- {
- ol.writeObjectLink(fd->getReference(),
- fd->generateSourceFile() ? fd->includeName() : fd->getOutputFileBase(),
- 0,ii->includeName);
- if (!Config_getString("GENERATE_TAGFILE").isEmpty() && !fd->isReference())
- {
- const char *locStr = (ii->local || isIDLorJava) ? "yes" : "no";
- const char *impStr = (ii->imported || isIDLorJava) ? "yes" : "no";
- Doxygen::tagFile << " <includes id=\""
- << convertToXML(fd->getOutputFileBase()) << "\" "
- << "name=\"" << convertToXML(fd->name()) << "\" "
- << "local=\"" << locStr << "\" "
- << "imported=\"" << impStr << "\">"
- << convertToXML(ii->includeName)
- << "</includes>"
- << endl;
- }
- }
- else
- {
- ol.docify(ii->includeName);
- }
-
- ol.enableAll();
- if (ii->local || isIDLorJava)
- ol.docify("\"");
- else
- ol.docify(">");
- if (isIDLorJava)
- ol.docify(";");
- ol.endTypewriter();
- ol.lineBreak();
- }
- }
- ol.endTextBlock();
- }
-}
-
-void FileDef::writeIncludeGraph(OutputList &ol)
-{
- if (Config_getBool("HAVE_DOT") /*&& Config_getBool("INCLUDE_GRAPH")*/)
- {
- //printf("Graph for file %s\n",name().data());
- DotInclDepGraph incDepGraph(this,FALSE);
- if (!incDepGraph.isTrivial() && !incDepGraph.isTooBig())
- {
- ol.startTextBlock();
- ol.disable(OutputGenerator::Man);
- ol.startInclDepGraph();
- ol.parseText(theTranslator->trInclDepGraph(name()));
- ol.endInclDepGraph(incDepGraph);
- ol.enableAll();
- ol.endTextBlock(TRUE);
- }
- //incDepGraph.writeGraph(Config_getString("HTML_OUTPUT"),fd->getOutputFileBase());
- }
-}
-
-void FileDef::writeIncludedByGraph(OutputList &ol)
-{
- if (Config_getBool("HAVE_DOT") /*&& Config_getBool("INCLUDED_BY_GRAPH")*/)
- {
- //printf("Graph for file %s\n",name().data());
- DotInclDepGraph incDepGraph(this,TRUE);
- if (!incDepGraph.isTrivial() && !incDepGraph.isTooBig())
- {
- ol.startTextBlock();
- ol.disable(OutputGenerator::Man);
- ol.startInclDepGraph();
- ol.parseText(theTranslator->trInclByDepGraph());
- ol.endInclDepGraph(incDepGraph);
- ol.enableAll();
- ol.endTextBlock(TRUE);
- }
- //incDepGraph.writeGraph(Config_getString("HTML_OUTPUT"),fd->getOutputFileBase());
- }
-}
-
-
-void FileDef::writeSourceLink(OutputList &ol)
-{
- //printf("%s: generateSourceFile()=%d\n",name().data(),generateSourceFile());
- if (generateSourceFile())
- {
- ol.disableAllBut(OutputGenerator::Html);
- ol.startParagraph();
- ol.startTextLink(includeName(),0);
- ol.parseText(theTranslator->trGotoSourceCode());
- ol.endTextLink();
- ol.endParagraph();
- ol.enableAll();
- }
-}
-
-void FileDef::writeNamespaceDeclarations(OutputList &ol,const QCString &title)
-{
- // write list of namespaces
- if (namespaceSDict) namespaceSDict->writeDeclaration(ol,title);
-}
-
-void FileDef::writeClassDeclarations(OutputList &ol,const QCString &title)
-{
- // write list of classes
- if (classSDict) classSDict->writeDeclaration(ol,0,title,FALSE);
-}
-
-void FileDef::writeInlineClasses(OutputList &ol)
-{
- if (classSDict) classSDict->writeDocumentation(ol,this);
-}
-
-void FileDef::startMemberDeclarations(OutputList &ol)
-{
- ol.startMemberSections();
-}
-
-void FileDef::endMemberDeclarations(OutputList &ol)
-{
- ol.endMemberSections();
-}
-
-void FileDef::startMemberDocumentation(OutputList &ol)
-{
- if (Config_getBool("SEPARATE_MEMBER_PAGES"))
- {
- ol.disable(OutputGenerator::Html);
- Doxygen::suppressDocWarnings = TRUE;
- }
-}
-
-void FileDef::endMemberDocumentation(OutputList &ol)
-{
- if (Config_getBool("SEPARATE_MEMBER_PAGES"))
- {
- ol.enable(OutputGenerator::Html);
- Doxygen::suppressDocWarnings = FALSE;
- }
-}
-
-void FileDef::writeMemberGroups(OutputList &ol)
-{
- /* write user defined member groups */
- if (memberGroupSDict)
- {
- memberGroupSDict->sort();
- MemberGroupSDict::Iterator mgli(*memberGroupSDict);
- MemberGroup *mg;
- for (;(mg=mgli.current());++mgli)
- {
- if ((!mg->allMembersInSameSection() || !m_subGrouping)
- && mg->header()!="[NOHEADER]")
- {
- mg->writeDeclarations(ol,0,0,this,0);
- }
- }
- }
-}
-
-void FileDef::writeAuthorSection(OutputList &ol)
-{
- // write Author section (Man only)
- ol.pushGeneratorState();
- ol.disableAllBut(OutputGenerator::Man);
- ol.startGroupHeader();
- ol.parseText(theTranslator->trAuthor(TRUE,TRUE));
- ol.endGroupHeader();
- ol.parseText(theTranslator->trGeneratedAutomatically(Config_getString("PROJECT_NAME")));
- ol.popGeneratorState();
-}
-
-void FileDef::writeSummaryLinks(OutputList &ol)
-{
- ol.pushGeneratorState();
- ol.disableAllBut(OutputGenerator::Html);
- QListIterator<LayoutDocEntry> eli(
- LayoutDocManager::instance().docEntries(LayoutDocManager::File));
- LayoutDocEntry *lde;
- bool first=TRUE;
- for (eli.toFirst();(lde=eli.current());++eli)
- {
- if ((lde->kind()==LayoutDocEntry::FileClasses && classSDict && classSDict->declVisible()) ||
- (lde->kind()==LayoutDocEntry::FileNamespaces && namespaceSDict && namespaceSDict->declVisible())
- )
- {
- LayoutDocEntrySection *ls = (LayoutDocEntrySection*)lde;
- QCString label = lde->kind()==LayoutDocEntry::FileClasses ? "nested-classes" : "namespaces";
- writeSummaryLink(ol,label,ls->title,first);
- }
- else if (lde->kind()==LayoutDocEntry::MemberDecl)
- {
- LayoutDocEntryMemberDecl *lmd = (LayoutDocEntryMemberDecl*)lde;
- MemberList * ml = getMemberList(lmd->type);
- if (ml && ml->declVisible())
- {
- writeSummaryLink(ol,ml->listTypeAsString(),lmd->title,first);
- }
- }
- }
- if (!first)
- {
- ol.writeString(" </div>\n");
- }
- ol.popGeneratorState();
-}
-
-/*! Write the documentation page for this file to the file of output
- generators \a ol.
-*/
-void FileDef::writeDocumentation(OutputList &ol)
-{
- static bool generateTreeView = Config_getBool("GENERATE_TREEVIEW");
- //funcList->countDecMembers();
-
- //QCString fn = name();
- //if (Config_getBool("FULL_PATH_NAMES"))
- //{
- // fn.prepend(stripFromPath(getPath().copy()));
- //}
-
- //printf("WriteDocumentation diskname=%s\n",diskname.data());
-
- QCString versionTitle;
- if (!fileVersion.isEmpty())
- {
- versionTitle=("("+fileVersion+")");
- }
- QCString title = docname+versionTitle;
- QCString pageTitle=theTranslator->trFileReference(docname);
-
- if (Config_getBool("SHOW_DIRECTORIES") && getDirDef())
- {
- startFile(ol,getOutputFileBase(),name(),pageTitle,HLI_FileVisible,!generateTreeView);
- if (!generateTreeView)
- {
- getDirDef()->writeNavigationPath(ol);
- ol.endQuickIndices();
- }
- QCString pageTitleShort=theTranslator->trFileReference(name());
- startTitle(ol,getOutputFileBase(),this);
- ol.pushGeneratorState();
- ol.disableAllBut(OutputGenerator::Html);
- ol.parseText(pageTitleShort); // Html only
- ol.enableAll();
- ol.disable(OutputGenerator::Html);
- ol.parseText(pageTitle); // other output formats
- ol.popGeneratorState();
- addGroupListToTitle(ol,this);
- endTitle(ol,getOutputFileBase(),title);
- }
- else
- {
- startFile(ol,getOutputFileBase(),name(),pageTitle,HLI_FileVisible,!generateTreeView);
- if (!generateTreeView)
- {
- ol.endQuickIndices();
- }
- startTitle(ol,getOutputFileBase(),this);
- ol.parseText(pageTitle);
- addGroupListToTitle(ol,this);
- endTitle(ol,getOutputFileBase(),title);
- }
-
- ol.startContents();
-
- if (!fileVersion.isEmpty())
- {
- ol.disableAllBut(OutputGenerator::Html);
- ol.startProjectNumber();
- ol.docify(versionTitle);
- ol.endProjectNumber();
- ol.enableAll();
- }
-
- if (Doxygen::searchIndex)
- {
- Doxygen::searchIndex->setCurrentDoc(pageTitle,getOutputFileBase());
- Doxygen::searchIndex->addWord(localName(),TRUE);
- }
-
- if (!Config_getString("GENERATE_TAGFILE").isEmpty())
- {
- Doxygen::tagFile << " <compound kind=\"file\">" << endl;
- Doxygen::tagFile << " <name>" << convertToXML(name()) << "</name>" << endl;
- Doxygen::tagFile << " <path>" << convertToXML(getPath()) << "</path>" << endl;
- Doxygen::tagFile << " <filename>"
- << convertToXML(getOutputFileBase())
- << "</filename>" << endl;
- }
-
- //---------------------------------------- start flexible part -------------------------------
-
- QListIterator<LayoutDocEntry> eli(
- LayoutDocManager::instance().docEntries(LayoutDocManager::File));
- LayoutDocEntry *lde;
- for (eli.toFirst();(lde=eli.current());++eli)
- {
- switch (lde->kind())
- {
- case LayoutDocEntry::BriefDesc:
- writeBriefDescription(ol);
- break;
- case LayoutDocEntry::MemberDeclStart:
- startMemberDeclarations(ol);
- break;
- case LayoutDocEntry::FileIncludes:
- writeIncludeFiles(ol);
- break;
- case LayoutDocEntry::FileIncludeGraph:
- writeIncludeGraph(ol);
- break;
- case LayoutDocEntry::FileIncludedByGraph:
- writeIncludedByGraph(ol);
- break;
- case LayoutDocEntry::FileSourceLink:
- writeSourceLink(ol);
- break;
- case LayoutDocEntry::FileClasses:
- {
- LayoutDocEntrySection *ls = (LayoutDocEntrySection*)lde;
- writeClassDeclarations(ol,ls->title);
- }
- break;
- case LayoutDocEntry::FileNamespaces:
- {
- LayoutDocEntrySection *ls = (LayoutDocEntrySection*)lde;
- writeNamespaceDeclarations(ol,ls->title);
- }
- break;
- case LayoutDocEntry::MemberGroups:
- writeMemberGroups(ol);
- break;
- case LayoutDocEntry::MemberDecl:
- {
- LayoutDocEntryMemberDecl *lmd = (LayoutDocEntryMemberDecl*)lde;
- writeMemberDeclarations(ol,lmd->type,lmd->title);
- }
- break;
- case LayoutDocEntry::MemberDeclEnd:
- endMemberDeclarations(ol);
- break;
- case LayoutDocEntry::DetailedDesc:
- {
- LayoutDocEntrySection *ls = (LayoutDocEntrySection*)lde;
- writeDetailedDescription(ol,ls->title);
- }
- break;
- case LayoutDocEntry::MemberDefStart:
- startMemberDocumentation(ol);
- break;
- case LayoutDocEntry::FileInlineClasses:
- writeInlineClasses(ol);
- break;
- case LayoutDocEntry::MemberDef:
- {
- LayoutDocEntryMemberDef *lmd = (LayoutDocEntryMemberDef*)lde;
- writeMemberDocumentation(ol,lmd->type,lmd->title);
- }
- break;
- case LayoutDocEntry::MemberDefEnd:
- endMemberDocumentation(ol);
- break;
- case LayoutDocEntry::AuthorSection:
- writeAuthorSection(ol);
- break;
- case LayoutDocEntry::ClassIncludes:
- case LayoutDocEntry::ClassInheritanceGraph:
- case LayoutDocEntry::ClassNestedClasses:
- case LayoutDocEntry::ClassCollaborationGraph:
- case LayoutDocEntry::ClassAllMembersLink:
- case LayoutDocEntry::ClassUsedFiles:
- case LayoutDocEntry::ClassInlineClasses:
- case LayoutDocEntry::NamespaceNestedNamespaces:
- case LayoutDocEntry::NamespaceClasses:
- case LayoutDocEntry::NamespaceInlineClasses:
- case LayoutDocEntry::GroupClasses:
- case LayoutDocEntry::GroupInlineClasses:
- case LayoutDocEntry::GroupNamespaces:
- case LayoutDocEntry::GroupDirs:
- case LayoutDocEntry::GroupNestedGroups:
- case LayoutDocEntry::GroupFiles:
- case LayoutDocEntry::GroupGraph:
- case LayoutDocEntry::GroupPageDocs:
- case LayoutDocEntry::DirSubDirs:
- case LayoutDocEntry::DirFiles:
- case LayoutDocEntry::DirGraph:
- err("Internal inconsistency: member %d should not be part of "
- "LayoutDocManager::File entry list\n",lde->kind());
- break;
- }
- }
-
- //---------------------------------------- end flexible part -------------------------------
-
- if (!Config_getString("GENERATE_TAGFILE").isEmpty())
- {
- writeDocAnchorsToTagFile();
- Doxygen::tagFile << " </compound>" << endl;
- }
-
- ol.endContents();
-
- endFileWithNavPath(this,ol);
-
- if (Config_getBool("SEPARATE_MEMBER_PAGES"))
- {
- MemberList *ml = getMemberList(MemberList::allMembersList);
- if (ml) ml->sort();
- writeMemberPages(ol);
- }
-}
-
-void FileDef::writeMemberPages(OutputList &ol)
-{
- ol.pushGeneratorState();
- ol.disableAllBut(OutputGenerator::Html);
-
- QListIterator<MemberList> mli(m_memberLists);
- MemberList *ml;
- for (mli.toFirst();(ml=mli.current());++mli)
- {
- if (ml->listType()&MemberList::documentationLists)
- {
- ml->writeDocumentationPage(ol,name(),this);
- }
- }
-
- ol.popGeneratorState();
-}
-
-void FileDef::writeQuickMemberLinks(OutputList &ol,MemberDef *currentMd) const
-{
- static bool createSubDirs=Config_getBool("CREATE_SUBDIRS");
-
- ol.writeString(" <div class=\"navtab\">\n");
- ol.writeString(" <table>\n");
-
- MemberList *allMemberList = getMemberList(MemberList::allMembersList);
- if (allMemberList)
- {
- MemberListIterator mli(*allMemberList);
- MemberDef *md;
- for (mli.toFirst();(md=mli.current());++mli)
- {
- if (md->getFileDef()==this && md->getNamespaceDef()==0 && md->isLinkable())
- {
- ol.writeString(" <tr><td class=\"navtab\">");
- if (md->isLinkableInProject())
- {
- if (md==currentMd) // selected item => highlight
- {
- ol.writeString("<a class=\"qindexHL\" ");
- }
- else
- {
- ol.writeString("<a class=\"qindex\" ");
- }
- ol.writeString("href=\"");
- if (createSubDirs) ol.writeString("../../");
- ol.writeString(md->getOutputFileBase()+Doxygen::htmlFileExtension+"#"+md->anchor());
- ol.writeString("\">");
- ol.writeString(convertToHtml(md->localName()));
- ol.writeString("</a>");
- }
- ol.writeString("</td></tr>\n");
- }
- }
- }
-
- ol.writeString(" </table>\n");
- ol.writeString(" </div>\n");
-}
-
-/*! Write a source listing of this file to the output */
-void FileDef::writeSource(OutputList &ol)
-{
- static bool generateTreeView = Config_getBool("GENERATE_TREEVIEW");
- static bool filterSourceFiles = Config_getBool("FILTER_SOURCE_FILES");
- static bool latexSourceCode = Config_getBool("LATEX_SOURCE_CODE");
- QCString title = docname;
- if (!fileVersion.isEmpty())
- {
- title+=(" ("+fileVersion+")");
- }
- QCString pageTitle = theTranslator->trSourceFile(title);
- ol.disable(OutputGenerator::Man);
- ol.disable(OutputGenerator::RTF);
- if (!latexSourceCode) ol.disable(OutputGenerator::Latex);
-
- if (Config_getBool("SHOW_DIRECTORIES") && getDirDef())
- {
- startFile(ol,getSourceFileBase(),0,pageTitle,HLI_FileVisible,
- !generateTreeView,getOutputFileBase());
- if (!generateTreeView)
- {
- getDirDef()->writeNavigationPath(ol);
- ol.endQuickIndices();
- }
- startTitle(ol,getOutputFileBase());
- ol.parseText(name());
- endTitle(ol,getOutputFileBase(),title);
- }
- else
- {
- startFile(ol,getSourceFileBase(),0,pageTitle,HLI_FileVisible,
- FALSE,getOutputFileBase());
- startTitle(ol,getSourceFileBase());
- ol.parseText(title);
- endTitle(ol,getSourceFileBase(),0);
- }
-
- ol.startContents();
-
- if (isLinkable())
- {
- if (latexSourceCode) ol.disable(OutputGenerator::Latex);
- ol.startTextLink(getOutputFileBase(),0);
- ol.parseText(theTranslator->trGotoDocumentation());
- ol.endTextLink();
- if (latexSourceCode) ol.enable(OutputGenerator::Latex);
- }
-
- ParserInterface *pIntf = Doxygen::parserManager->getParser(getDefFileExtension());
- pIntf->resetCodeParserState();
- ol.startCodeFragment();
- pIntf->parseCode(ol,0,
- fileToString(absFilePath(),filterSourceFiles,TRUE),
- FALSE,0,this
- );
- ol.endCodeFragment();
- ol.endContents();
- endFileWithNavPath(this,ol);
- ol.enableAll();
-}
-
-void FileDef::parseSource()
-{
- static bool filterSourceFiles = Config_getBool("FILTER_SOURCE_FILES");
- DevNullCodeDocInterface devNullIntf;
- ParserInterface *pIntf = Doxygen::parserManager->getParser(getDefFileExtension());
- pIntf->resetCodeParserState();
- pIntf->parseCode(
- devNullIntf,0,
- fileToString(absFilePath(),filterSourceFiles,TRUE),
- FALSE,0,this
- );
-}
-
-void FileDef::addMembersToMemberGroup()
-{
- QListIterator<MemberList> mli(m_memberLists);
- MemberList *ml;
- for (mli.toFirst();(ml=mli.current());++mli)
- {
- if (ml->listType()&MemberList::declarationLists)
- {
- ::addMembersToMemberGroup(ml,&memberGroupSDict,this);
- }
- }
-
- // add members inside sections to their groups
- if (memberGroupSDict)
- {
- MemberGroupSDict::Iterator mgli(*memberGroupSDict);
- MemberGroup *mg;
- for (;(mg=mgli.current());++mgli)
- {
- if (mg->allMembersInSameSection() && m_subGrouping)
- {
- //printf("----> addToDeclarationSection(%s)\n",mg->header().data());
- mg->addToDeclarationSection();
- }
- }
- }
-}
-
-/*! Adds member definition \a md to the list of all members of this file */
-void FileDef::insertMember(MemberDef *md)
-{
- if (md->isHidden()) return;
- //printf("%s:FileDef::insertMember(%s (=%p) list has %d elements)\n",
- // name().data(),md->name().data(),md,allMemberList.count());
- MemberList *allMemberList = getMemberList(MemberList::allMembersList);
- if (allMemberList && allMemberList->findRef(md)!=-1) // TODO optimize the findRef!
- {
- return;
- }
-
- if (allMemberList==0)
- {
- allMemberList = new MemberList(MemberList::allMembersList);;
- m_memberLists.append(allMemberList);
- }
- allMemberList->append(md);
- //::addFileMemberNameToIndex(md);
- switch (md->memberType())
- {
- case MemberDef::Variable:
- case MemberDef::Property:
- addMemberToList(MemberList::decVarMembers,md);
- addMemberToList(MemberList::docVarMembers,md);
- break;
- case MemberDef::Function:
- addMemberToList(MemberList::decFuncMembers,md);
- addMemberToList(MemberList::docFuncMembers,md);
- break;
- case MemberDef::Typedef:
- addMemberToList(MemberList::decTypedefMembers,md);
- addMemberToList(MemberList::docTypedefMembers,md);
- break;
- case MemberDef::Enumeration:
- addMemberToList(MemberList::decEnumMembers,md);
- addMemberToList(MemberList::docEnumMembers,md);
- break;
- case MemberDef::EnumValue: // enum values are shown inside their enums
- break;
- case MemberDef::Define:
- addMemberToList(MemberList::decDefineMembers,md);
- addMemberToList(MemberList::docDefineMembers,md);
- break;
- default:
- err("FileDef::insertMembers(): "
- "member `%s' with class scope `%s' inserted in file scope `%s'!\n",
- md->name().data(),
- md->getClassDef() ? md->getClassDef()->name().data() : "<global>",
- name().data());
- }
- //addMemberToGroup(md,groupId);
-}
-
-/*! Adds compound definition \a cd to the list of all compounds of this file */
-void FileDef::insertClass(ClassDef *cd)
-{
- if (cd->isHidden()) return;
- if (classSDict==0)
- {
- classSDict = new ClassSDict(17);
- }
- if (Config_getBool("SORT_BRIEF_DOCS"))
- classSDict->inSort(cd->name(),cd);
- else
- classSDict->append(cd->name(),cd);
-}
-
-/*! Adds namespace definition \a nd to the list of all compounds of this file */
-void FileDef::insertNamespace(NamespaceDef *nd)
-{
- if (nd->isHidden()) return;
- if (!nd->name().isEmpty() &&
- (namespaceSDict==0 || namespaceSDict->find(nd->name())==0))
- {
- if (namespaceSDict==0)
- {
- namespaceSDict = new NamespaceSDict;
- }
- if (Config_getBool("SORT_BRIEF_DOCS"))
- namespaceSDict->inSort(nd->name(),nd);
- else
- namespaceSDict->append(nd->name(),nd);
- }
-}
-
-void FileDef::addSourceRef(int line,Definition *d,MemberDef *md)
-{
- //printf("FileDef::addSourceDef(%d,%p,%p)\n",line,d,md);
- if (d)
- {
- if (srcDefDict==0) srcDefDict = new QIntDict<Definition>(257);
- if (srcMemberDict==0) srcMemberDict = new QIntDict<MemberDef>(257);
- srcDefDict->insert(line,d);
- if (md) srcMemberDict->insert(line,md);
- //printf("Adding member %s with anchor %s at line %d to file %s\n",
- // md->name().data(),md->anchor().data(),line,name().data());
- }
-}
-
-Definition *FileDef::getSourceDefinition(int lineNr)
-{
- Definition *result=0;
- if (srcDefDict)
- {
- result = srcDefDict->find(lineNr);
- }
- return result;
-}
-
-MemberDef *FileDef::getSourceMember(int lineNr)
-{
- MemberDef *result=0;
- if (srcMemberDict)
- {
- result = srcMemberDict->find(lineNr);
- }
- return result;
-}
-
-
-void FileDef::addUsingDirective(NamespaceDef *nd)
-{
- if (usingDirList==0)
- {
- usingDirList = new NamespaceSDict;
- }
- if (usingDirList->find(nd->qualifiedName())==0)
- {
- usingDirList->append(nd->qualifiedName(),nd);
- }
- //printf("%p: FileDef::addUsingDirective: %s:%d\n",this,name().data(),usingDirList->count());
-}
-
-NamespaceSDict *FileDef::getUsedNamespaces() const
-{
- //printf("%p: FileDef::getUsedNamespace: %s:%d\n",this,name().data(),usingDirList?usingDirList->count():0);
- return usingDirList;
-}
-
-void FileDef::addUsingDeclaration(Definition *d)
-{
- if (usingDeclList==0)
- {
- usingDeclList = new SDict<Definition>(17);
- }
- if (usingDeclList->find(d->qualifiedName())==0)
- {
- usingDeclList->append(d->qualifiedName(),d);
- }
-}
-
-void FileDef::addIncludeDependency(FileDef *fd,const char *incName,bool local,
- bool imported,bool indirect)
-{
- //printf("FileDef::addIncludeDependency(%p,%s,%d)\n",fd,incName,local);
- QCString iName = fd ? fd->absFilePath().data() : incName;
- if (!iName.isEmpty() && (!includeDict || includeDict->find(iName)==0))
- {
- if (includeDict==0)
- {
- includeDict = new QDict<IncludeInfo>(61);
- includeList = new QList<IncludeInfo>;
- includeList->setAutoDelete(TRUE);
- }
- IncludeInfo *ii = new IncludeInfo;
- ii->fileDef = fd;
- ii->includeName = incName;
- ii->local = local;
- ii->imported = imported;
- ii->indirect = indirect;
- includeList->append(ii);
- includeDict->insert(iName,ii);
- }
-}
-
-void FileDef::addIncludedUsingDirectives()
-{
- if (visited) return;
- visited=TRUE;
- //printf("( FileDef::addIncludedUsingDirectives for file %s\n",name().data());
-
- NamespaceList nl;
- if (includeList) // file contains #includes
- {
- {
- QListIterator<IncludeInfo> iii(*includeList);
- IncludeInfo *ii;
- for (iii.toFirst();(ii=iii.current());++iii) // foreach #include...
- {
- if (ii->fileDef && !ii->fileDef->visited) // ...that is a known file
- {
- // recurse into this file
- ii->fileDef->addIncludedUsingDirectives();
- }
- }
- }
- {
- QListIterator<IncludeInfo> iii(*includeList);
- IncludeInfo *ii;
- // iterate through list from last to first
- for (iii.toLast();(ii=iii.current());--iii)
- {
- if (ii->fileDef && ii->fileDef!=this)
- {
- // add using directives
- NamespaceSDict *unl = ii->fileDef->usingDirList;
- if (unl)
- {
- NamespaceSDict::Iterator nli(*unl);
- NamespaceDef *nd;
- for (nli.toLast();(nd=nli.current());--nli)
- {
- // append each using directive found in a #include file
- if (usingDirList==0) usingDirList = new NamespaceSDict;
- //printf("Prepending used namespace %s to the list of file %s\n",
- // nd->name().data(),name().data());
- if (usingDirList->find(nd->qualifiedName())==0) // not yet added
- {
- usingDirList->prepend(nd->qualifiedName(),nd);
- }
- }
- }
- // add using declarations
- SDict<Definition> *udl = ii->fileDef->usingDeclList;
- if (udl)
- {
- SDict<Definition>::Iterator udi(*udl);
- Definition *d;
- for (udi.toLast();(d=udi.current());--udi)
- {
- //printf("Adding using declaration %s\n",d->name().data());
- if (usingDeclList==0)
- {
- usingDeclList = new SDict<Definition>(17);
- }
- if (usingDeclList->find(d->qualifiedName())==0)
- {
- usingDeclList->prepend(d->qualifiedName(),d);
- }
- }
- }
- }
- }
- }
- }
- //printf(") end FileDef::addIncludedUsingDirectives for file %s\n",name().data());
-}
-
-
-void FileDef::addIncludedByDependency(FileDef *fd,const char *incName,
- bool local,bool imported)
-{
- //printf("FileDef::addIncludedByDependency(%p,%s,%d)\n",fd,incName,local);
- QCString iName = fd ? fd->absFilePath().data() : incName;
- if (!iName.isEmpty() && (includedByDict==0 || includedByDict->find(iName)==0))
- {
- if (includedByDict==0)
- {
- includedByDict = new QDict<IncludeInfo>(61);
- includedByList = new QList<IncludeInfo>;
- includedByList->setAutoDelete(TRUE);
- }
- IncludeInfo *ii = new IncludeInfo;
- ii->fileDef = fd;
- ii->includeName = incName;
- ii->local = local;
- ii->imported = imported;
- ii->indirect = FALSE;
- includedByList->append(ii);
- includedByDict->insert(iName,ii);
- }
-}
-
-bool FileDef::isIncluded(const QCString &name) const
-{
- if (name.isEmpty()) return FALSE;
- return includeDict!=0 && includeDict->find(name)!=0;
-}
-
-bool FileDef::generateSourceFile() const
-{
- QCString extension = name().right(4);
- return !isReference() &&
- (Config_getBool("SOURCE_BROWSER") ||
- (Config_getBool("VERBATIM_HEADERS") && guessSection(name())==Entry::HEADER_SEC)
- ) &&
- extension!=".doc" && extension!=".txt" && extension!=".dox";
-}
-
-
-void FileDef::addListReferences()
-{
- {
- LockingPtr< QList<ListItemInfo> > xrefItems = xrefListItems();
- addRefItem(xrefItems.pointer(),
- getOutputFileBase(),
- theTranslator->trFile(TRUE,TRUE),
- getOutputFileBase(),name(),
- 0
- );
- }
- if (memberGroupSDict)
- {
- MemberGroupSDict::Iterator mgli(*memberGroupSDict);
- MemberGroup *mg;
- for (;(mg=mgli.current());++mgli)
- {
- mg->addListReferences(this);
- }
- }
- QListIterator<MemberList> mli(m_memberLists);
- MemberList *ml;
- for (mli.toFirst();(ml=mli.current());++mli)
- {
- if (ml->listType()&MemberList::documentationLists)
- {
- ml->addListReferences(this);
- }
- }
-}
-
-//-------------------------------------------------------------------
-
-static int findMatchingPart(const QCString &path,const QCString dir)
-{
- int si1;
- int pos1=0,pos2=0;
- while ((si1=path.find('/',pos1))!=-1)
- {
- int si2=dir.find('/',pos2);
- //printf(" found slash at pos %d in path %d: %s<->%s\n",si1,si2,
- // path.mid(pos1,si1-pos2).data(),dir.mid(pos2).data());
- if (si2==-1 && path.mid(pos1,si1-pos2)==dir.mid(pos2)) // match at end
- {
- return dir.length();
- }
- if (si1!=si2 || path.mid(pos1,si1-pos2)!=dir.mid(pos2,si2-pos2)) // no match in middle
- {
- return QMAX(pos1-1,0);
- }
- pos1=si1+1;
- pos2=si2+1;
- }
- return 0;
-}
-
-static Directory *findDirNode(Directory *root,const QCString &name)
-{
- QListIterator<DirEntry> dli(root->children());
- DirEntry *de;
- for (dli.toFirst();(de=dli.current());++dli)
- {
- if (de->kind()==DirEntry::Dir)
- {
- Directory *dir = (Directory *)de;
- QCString dirName=dir->name();
- int sp=findMatchingPart(name,dirName);
- //printf("findMatchingPart(%s,%s)=%d\n",name.data(),dirName.data(),sp);
- if (sp>0) // match found
- {
- if ((uint)sp==dirName.length()) // whole directory matches
- {
- // recurse into the directory
- return findDirNode(dir,name.mid(dirName.length()+1));
- }
- else // partial match => we need to split the path into three parts
- {
- QCString baseName =dirName.left(sp);
- QCString oldBranchName=dirName.mid(sp+1);
- QCString newBranchName=name.mid(sp+1);
- // strip file name from path
- int newIndex=newBranchName.findRev('/');
- if (newIndex>0) newBranchName=newBranchName.left(newIndex);
-
- //printf("Splitting off part in new branch \n"
- // "base=%s old=%s new=%s\n",
- // baseName.data(),
- // oldBranchName.data(),
- // newBranchName.data()
- // );
- Directory *base = new Directory(root,baseName);
- Directory *newBranch = new Directory(base,newBranchName);
- dir->reParent(base);
- dir->rename(oldBranchName);
- base->addChild(dir);
- base->addChild(newBranch);
- dir->setLast(FALSE);
- // remove DirEntry container from list (without deleting it)
- root->children().setAutoDelete(FALSE);
- root->children().removeRef(dir);
- root->children().setAutoDelete(TRUE);
- // add new branch to the root
- if (!root->children().isEmpty())
- {
- root->children().last()->setLast(FALSE);
- }
- root->addChild(base);
- return newBranch;
- }
- }
- }
- }
- int si=name.findRev('/');
- if (si==-1) // no subdir
- {
- return root; // put the file under the root node.
- }
- else // need to create a subdir
- {
- QCString baseName = name.left(si);
- //printf("new subdir %s\n",baseName.data());
- Directory *newBranch = new Directory(root,baseName);
- if (!root->children().isEmpty())
- {
- root->children().last()->setLast(FALSE);
- }
- root->addChild(newBranch);
- return newBranch;
- }
-}
-
-static void mergeFileDef(Directory *root,FileDef *fd)
-{
- QCString rootPath = root->name();
- QCString filePath = fd->absFilePath();
- //printf("merging %s\n",filePath.data());
- Directory *dirNode = findDirNode(root,filePath);
- if (!dirNode->children().isEmpty())
- {
- dirNode->children().last()->setLast(FALSE);
- }
- DirEntry *e=new DirEntry(dirNode,fd);
- dirNode->addChild(e);
-}
-
-#if 0
-static void generateIndent(QTextStream &t,DirEntry *de,int level)
-{
- if (de->parent())
- {
- generateIndent(t,de->parent(),level+1);
- }
- // from the root up to node n do...
- if (level==0) // item before a dir or document
- {
- if (de->isLast())
- {
- if (de->kind()==DirEntry::Dir)
- {
- t << "<img " << FTV_IMGATTRIBS(plastnode) << "/>";
- }
- else
- {
- t << "<img " << FTV_IMGATTRIBS(lastnode) << "/>";
- }
- }
- else
- {
- if (de->kind()==DirEntry::Dir)
- {
- t << "<img " << FTV_IMGATTRIBS(pnode) << "/>";
- }
- else
- {
- t << "<img " << FTV_IMGATTRIBS(node) << "/>";
- }
- }
- }
- else // item at another level
- {
- if (de->isLast())
- {
- t << "<img " << FTV_IMGATTRIBS(blank) << "/>";
- }
- else
- {
- t << "<img " << FTV_IMGATTRIBS(vertline) << "/>";
- }
- }
-}
-
-static void writeDirTreeNode(QTextStream &t,Directory *root,int level)
-{
- QCString indent;
- indent.fill(' ',level*2);
- QListIterator<DirEntry> dli(root->children());
- DirEntry *de;
- for (dli.toFirst();(de=dli.current());++dli)
- {
- t << indent << "<p>";
- generateIndent(t,de,0);
- if (de->kind()==DirEntry::Dir)
- {
- Directory *dir=(Directory *)de;
- //printf("%s [dir]: %s (last=%d,dir=%d)\n",indent.data(),dir->name().data(),dir->isLast(),dir->kind()==DirEntry::Dir);
- t << "<img " << FTV_IMGATTRIBS(folderclosed) << "/>";
- t << dir->name();
- t << "</p>\n";
- t << indent << "<div>\n";
- writeDirTreeNode(t,dir,level+1);
- t << indent << "</div>\n";
- }
- else
- {
- //printf("%s [file]: %s (last=%d,dir=%d)\n",indent.data(),de->file()->name().data(),de->isLast(),de->kind()==DirEntry::Dir);
- t << "<img " << FTV_IMGATTRIBS(doc) << "/>";
- t << de->file()->name();
- t << "</p>\n";
- }
- }
-}
-#endif
-
-static void addDirsAsGroups(Directory *root,GroupDef *parent,int level)
-{
- GroupDef *gd=0;
- if (root->kind()==DirEntry::Dir)
- {
- gd = new GroupDef("[generated]",
- 1,
- root->path(), // name
- root->name() // title
- );
- if (parent)
- {
- parent->addGroup(gd);
- gd->makePartOfGroup(parent);
- }
- else
- {
- Doxygen::groupSDict->append(root->path(),gd);
- }
- }
- QListIterator<DirEntry> dli(root->children());
- DirEntry *de;
- for (dli.toFirst();(de=dli.current());++dli)
- {
- if (de->kind()==DirEntry::Dir)
- {
- addDirsAsGroups((Directory *)de,gd,level+1);
- }
- }
-}
-
-void generateFileTree()
-{
- Directory *root=new Directory(0,"root");
- root->setLast(TRUE);
- FileNameListIterator fnli(*Doxygen::inputNameList);
- FileName *fn;
- for (fnli.toFirst();(fn=fnli.current());++fnli)
- {
- FileNameIterator fni(*fn);
- FileDef *fd;
- for (;(fd=fni.current());++fni)
- {
- mergeFileDef(root,fd);
- }
- }
- //t << "<div class=\"directory\">\n";
- //writeDirTreeNode(t,root,0);
- //t << "</div>\n";
- addDirsAsGroups(root,0,0);
- delete root;
-}
-
-//-------------------------------------------------------------------
-
-void FileDef::combineUsingRelations()
-{
- if (visited) return; // already done
- visited=TRUE;
- if (usingDirList)
- {
- NamespaceSDict::Iterator nli(*usingDirList);
- NamespaceDef *nd;
- for (nli.toFirst();(nd=nli.current());++nli)
- {
- nd->combineUsingRelations();
- }
- for (nli.toFirst();(nd=nli.current());++nli)
- {
- // add used namespaces of namespace nd to this namespace
- if (nd->getUsedNamespaces())
- {
- NamespaceSDict::Iterator unli(*nd->getUsedNamespaces());
- NamespaceDef *und;
- for (unli.toFirst();(und=unli.current());++unli)
- {
- //printf("Adding namespace %s to the using list of %s\n",und->qualifiedName().data(),qualifiedName().data());
- addUsingDirective(und);
- }
- }
- // add used classes of namespace nd to this namespace
- if (nd->getUsedClasses())
- {
- SDict<Definition>::Iterator cli(*nd->getUsedClasses());
- Definition *ucd;
- for (cli.toFirst();(ucd=cli.current());++cli)
- {
- //printf("Adding class %s to the using list of %s\n",cd->qualifiedName().data(),qualifiedName().data());
- addUsingDeclaration(ucd);
- }
- }
- }
- }
-}
-
-bool FileDef::isDocumentationFile() const
-{
- return name().right(4)==".doc" ||
- name().right(4)==".txt" ||
- name().right(4)==".dox";
-}
-
-void FileDef::acquireFileVersion()
-{
- QCString vercmd = Config_getString("FILE_VERSION_FILTER");
- if (!vercmd.isEmpty() && !filepath.isEmpty() && filepath!="generated")
- {
- msg("Version of %s : ",filepath.data());
- QCString cmd = vercmd+" \""+filepath+"\"";
- Debug::print(Debug::ExtCmd,0,"Executing popen(`%s`)\n",cmd.data());
- FILE *f=portable_popen(cmd,"r");
- if (!f)
- {
- err("error: could not execute %s\n",vercmd.data());
- return;
- }
- const int bufSize=1024;
- char buf[bufSize];
- int numRead = fread(buf,1,bufSize,f);
- portable_pclose(f);
- if (numRead>0 && !(fileVersion=QCString(buf,numRead).stripWhiteSpace()).isEmpty())
- {
- msg("%s\n",fileVersion.data());
- }
- else
- {
- msg("no version available\n");
- }
- }
-}
-
-
-QCString FileDef::getSourceFileBase() const
-{
- if (Htags::useHtags)
- {
- return Htags::path2URL(filepath);
- }
- else
- {
- return convertNameToFile(diskname)+"_source";
- }
-}
-
-/*! Returns the name of the verbatim copy of this file (if any). */
-QCString FileDef::includeName() const
-{
- if (Htags::useHtags)
- {
- return Htags::path2URL(filepath);
- }
- else
- {
- return convertNameToFile(diskname)+"_source";
- }
-}
-
-MemberList *FileDef::createMemberList(MemberList::ListType lt)
-{
- m_memberLists.setAutoDelete(TRUE);
- QListIterator<MemberList> mli(m_memberLists);
- MemberList *ml;
- for (mli.toFirst();(ml=mli.current());++mli)
- {
- if (ml->listType()==lt)
- {
- return ml;
- }
- }
- // not found, create a new member list
- ml = new MemberList(lt);
- m_memberLists.append(ml);
- return ml;
-}
-
-void FileDef::addMemberToList(MemberList::ListType lt,MemberDef *md)
-{
- static bool sortBriefDocs = Config_getBool("SORT_BRIEF_DOCS");
- static bool sortMemberDocs = Config_getBool("SORT_MEMBER_DOCS");
- MemberList *ml = createMemberList(lt);
- ml->setNeedsSorting(
- ((ml->listType()&MemberList::declarationLists) && sortBriefDocs) ||
- ((ml->listType()&MemberList::documentationLists) && sortMemberDocs));
- ml->append(md);
-#if 0
- if (ml->needsSorting())
- ml->inSort(md);
- else
- ml->append(md);
-#endif
- if (lt&MemberList::documentationLists)
- {
- ml->setInFile(TRUE);
- }
- if (ml->listType()&MemberList::declarationLists) md->setSectionList(this,ml);
-}
-
-void FileDef::sortMemberLists()
-{
- MemberList *ml = m_memberLists.first();
- while (ml)
- {
- if (ml->needsSorting()) { ml->sort(); ml->setNeedsSorting(FALSE); }
- ml = m_memberLists.next();
- }
-}
-
-MemberList *FileDef::getMemberList(MemberList::ListType lt) const
-{
- FileDef *that = (FileDef*)this;
- MemberList *ml = that->m_memberLists.first();
- while (ml)
- {
- if (ml->listType()==lt)
- {
- return ml;
- }
- ml = that->m_memberLists.next();
- }
- return 0;
-}
-
-void FileDef::writeMemberDeclarations(OutputList &ol,MemberList::ListType lt,const QCString &title)
-{
- static bool optVhdl = Config_getBool("OPTIMIZE_OUTPUT_VHDL");
- MemberList * ml = getMemberList(lt);
- if (ml)
- {
- if (optVhdl) // use specific declarations function
- {
-
- VhdlDocGen::writeVhdlDeclarations(ml,ol,0,0,this,0);
- }
- else
- {
- ml->writeDeclarations(ol,0,0,this,0,title,0);
- }
- }
-}
-
-void FileDef::writeMemberDocumentation(OutputList &ol,MemberList::ListType lt,const QCString &title)
-{
- MemberList * ml = getMemberList(lt);
- if (ml) ml->writeDocumentation(ol,name(),this,title);
-}
-
-bool FileDef::isLinkableInProject() const
-{
- static bool showFiles = Config_getBool("SHOW_FILES");
- return hasDocumentation() && !isReference() && showFiles;
-}
-
-#if 0
-bool FileDef::includes(FileDef *incFile,QDict<FileDef> *includedFiles) const
-{
- //printf("%s::includes(%s)\n",name().data(),incFile->name().data());
- if (incFile==this) return TRUE;
- includedFiles->insert(absFilePath(),this);
- if (includeList)
- {
- QListIterator<IncludeInfo> ili(*includeList);
- IncludeInfo *ii;
- for (;(ii=ili.current());++ili)
- {
- //printf("ii=%s\n",ii->includeName.data());
- if ((ii->fileDef &&
- includedFiles->find(ii->fileDef->absFilePath())==0 &&
- ii->fileDef->includes(incFile,includedFiles)
- ) ||
- incFile->absFilePath()==ii->includeName
- ) return TRUE;
- }
- }
- return FALSE;
-}
-
-bool FileDef::includesByName(const QCString &fileName) const
-{
- if (includeList)
- {
- QListIterator<IncludeInfo> ili(*includeList);
- IncludeInfo *ii;
- for (;(ii=ili.current());++ili)
- {
- //printf("ii=%s\n",ii->includeName.data());
- if (fileName==ii->includeName) return TRUE;
- }
- }
- return FALSE;
-}
-#endif
diff --git a/trunk/src/filedef.h b/trunk/src/filedef.h
deleted file mode 100644
index 08b8480..0000000
--- a/trunk/src/filedef.h
+++ /dev/null
@@ -1,326 +0,0 @@
-/******************************************************************************
- *
- *
- *
- * Copyright (C) 1997-2012 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.
- *
- */
-
-#ifndef FILEDEF_H
-#define FILEDEF_H
-
-#include "index.h"
-#include <qlist.h>
-#include <qintdict.h>
-#include <qdict.h>
-#include "config.h"
-#include "definition.h"
-#include "memberlist.h"
-#include "util.h"
-
-class FileDef;
-class FileList;
-class ClassSDict;
-class ClassDef;
-class ClassList;
-class MemberDef;
-class OutputList;
-class NamespaceDef;
-class NamespaceSDict;
-class MemberGroupSDict;
-class PackageDef;
-class DirDef;
-
-struct IncludeInfo
-{
- IncludeInfo() { fileDef=0; local=FALSE; indirect=FALSE; }
- ~IncludeInfo() {}
- FileDef *fileDef;
- QCString includeName;
- bool local;
- bool imported;
- bool indirect;
-};
-
-/*! \class FileDef filedef.h
- \brief A File definition.
-
- An object of this class contains all file information that is gathered.
- This includes the members and compounds defined in the file.
-
- The member writeDocumentation() can be used to generate the page of
- documentation to HTML and LaTeX.
-*/
-
-class FileDef : public Definition
-{
- friend class FileName;
-
- public:
- //enum FileType { Source, Header, Unknown };
-
- FileDef(const char *p,const char *n,const char *ref=0,const char *dn=0);
- ~FileDef();
- DefType definitionType() const { return TypeFile; }
-
- /*! Returns the unique file name (this may include part of the path). */
- QCString name() const
- {
- if (Config_getBool("FULL_PATH_NAMES"))
- return filename;
- else
- return Definition::name();
- }
- QCString displayName() const { return name(); }
- QCString fileName() const { return filename; }
-
- QCString getOutputFileBase() const
- { return convertNameToFile(diskname); }
- QCString anchor() const
- { return QCString(); }
-
- QCString getFileBase() const
- { return diskname; }
-
- QCString getSourceFileBase() const;
-
- /*! Returns the name of the verbatim copy of this file (if any). */
- QCString includeName() const;
-
- /*! Returns the absolute path including the file name. */
- QCString absFilePath() const { return filepath; }
-
-
- /*! Returns the name as it is used in the documentation */
- QCString docName() const { return docname; }
-
- void addSourceRef(int line,Definition *d,MemberDef *md);
- Definition *getSourceDefinition(int lineNr);
- MemberDef *getSourceMember(int lineNr);
-
- /* Sets the name of the include file to \a n. */
- //void setIncludeName(const char *n_) { incName=n_; }
-
- /*! Returns the absolute path of this file. */
- QCString getPath() const { return path; }
-
- /*! Returns version of this file. */
- QCString getVersion() const { return fileVersion; }
-
- bool isLinkableInProject() const;
-
- bool isLinkable() const
- {
- return isLinkableInProject() || isReference();
- }
- bool isIncluded(const QCString &name) const;
-
- //bool isJava() const { return m_isJava; }
- //bool isCSharp() const { return m_isCSharp; }
-
- void writeDocumentation(OutputList &ol);
- void writeMemberPages(OutputList &ol);
- void writeQuickMemberLinks(OutputList &ol,MemberDef *currentMd) const;
- void writeSummaryLinks(OutputList &ol);
-
- void writeSource(OutputList &ol);
- void parseSource();
- friend void generatedFileNames();
- void insertMember(MemberDef *md);
- void insertClass(ClassDef *cd);
- void insertNamespace(NamespaceDef *nd);
- void computeAnchors();
-
- void setPackageDef(PackageDef *pd) { package=pd; }
- PackageDef *packageDef() const { return package; }
-
- void setDirDef(DirDef *dd) { dir=dd; }
- DirDef *getDirDef() const { return dir; }
-
- void addUsingDirective(NamespaceDef *nd);
- NamespaceSDict *getUsedNamespaces() const;
- void addUsingDeclaration(Definition *def);
- SDict<Definition> *getUsedClasses() const { return usingDeclList; }
- void combineUsingRelations();
-
- bool generateSourceFile() const;
- void sortMemberLists();
-
- void addIncludeDependency(FileDef *fd,const char *incName,bool local,bool imported,bool indirect);
- void addIncludedByDependency(FileDef *fd,const char *incName,bool local,bool imported);
- QList<IncludeInfo> *includeFileList() const { return includeList; }
- QList<IncludeInfo> *includedByFileList() const { return includedByList; }
-
- void addMembersToMemberGroup();
- void distributeMemberGroupDocumentation();
- void findSectionsInDocumentation();
- void addIncludedUsingDirectives();
-
- void addListReferences();
- bool isDocumentationFile() const;
- //bool includes(FileDef *incFile,QDict<FileDef> *includedFiles) const;
- //bool includesByName(const QCString &name) const;
-
- MemberList *getMemberList(MemberList::ListType lt) const;
- const QList<MemberList> &getMemberLists() const { return m_memberLists; }
-
- /* user defined member groups */
- MemberGroupSDict *getMemberGroupSDict() const { return memberGroupSDict; }
- NamespaceSDict *getNamespaceSDict() const { return namespaceSDict; }
- ClassSDict *getClassSDict() const { return classSDict; }
-
- bool visited;
-
- protected:
- /**
- * Retrieves the file version from version control system.
- */
- void acquireFileVersion();
-
- private:
- MemberList *createMemberList(MemberList::ListType lt);
- void addMemberToList(MemberList::ListType lt,MemberDef *md);
- void writeMemberDeclarations(OutputList &ol,MemberList::ListType lt,const QCString &title);
- void writeMemberDocumentation(OutputList &ol,MemberList::ListType lt,const QCString &title);
- void writeIncludeFiles(OutputList &ol);
- void writeIncludeGraph(OutputList &ol);
- void writeIncludedByGraph(OutputList &ol);
- void writeMemberGroups(OutputList &ol);
- void writeAuthorSection(OutputList &ol);
- void writeSourceLink(OutputList &ol);
- void writeNamespaceDeclarations(OutputList &ol,const QCString &title);
- void writeClassDeclarations(OutputList &ol,const QCString &title);
- void writeInlineClasses(OutputList &ol);
- void startMemberDeclarations(OutputList &ol);
- void endMemberDeclarations(OutputList &ol);
- void startMemberDocumentation(OutputList &ol);
- void endMemberDocumentation(OutputList &ol);
- void writeDetailedDescription(OutputList &ol,const QCString &title);
- void writeBriefDescription(OutputList &ol);
-
- QDict<IncludeInfo> *includeDict;
- QList<IncludeInfo> *includeList;
- QDict<IncludeInfo> *includedByDict;
- QList<IncludeInfo> *includedByList;
- NamespaceSDict *usingDirList;
- SDict<Definition> *usingDeclList;
- QCString path;
- QCString filepath;
- QCString diskname;
- QCString filename;
- QCString docname;
- QIntDict<Definition> *srcDefDict;
- QIntDict<MemberDef> *srcMemberDict;
- bool isSource;
- //bool m_isJava;
- //bool m_isCSharp;
- QCString fileVersion;
- PackageDef *package;
- DirDef *dir;
- QList<MemberList> m_memberLists;
- MemberGroupSDict *memberGroupSDict;
- NamespaceSDict *namespaceSDict;
- ClassSDict *classSDict;
- bool m_subGrouping;
-};
-
-
-class FileList : public QList<FileDef>
-{
- public:
- FileList() : m_pathName("tmp") {}
- FileList(const char *path) : QList<FileDef>(), m_pathName(path) {}
- ~FileList() {}
- QCString path() const { return m_pathName; }
- int compareItems(GCI item1,GCI item2)
- {
- FileDef *md1 = (FileDef *)item1;
- FileDef *md2 = (FileDef *)item2;
- return stricmp(md1->name(),md2->name());
- }
- private:
- QCString m_pathName;
-};
-
-class OutputNameList : public QList<FileList>
-{
- public:
- OutputNameList() : QList<FileList>() {}
- ~OutputNameList() {}
- int compareItems(GCI item1,GCI item2)
- {
- FileList *fl1 = (FileList *)item1;
- FileList *fl2 = (FileList *)item2;
- return stricmp(fl1->path(),fl2->path());
- }
-};
-
-class OutputNameDict : public QDict<FileList>
-{
- public:
- OutputNameDict(int size) : QDict<FileList>(size) {}
- ~OutputNameDict() {}
-};
-
-class Directory;
-
-class DirEntry
-{
- public:
- enum EntryKind { Dir, File };
- DirEntry(DirEntry *parent,FileDef *fd)
- : m_parent(parent), m_name(fd->name()), m_kind(File), m_fd(fd),
- m_isLast(FALSE) { }
- DirEntry(DirEntry *parent,QCString name)
- : m_parent(parent), m_name(name), m_kind(Dir),
- m_fd(0), m_isLast(FALSE) { }
- virtual ~DirEntry() { }
- EntryKind kind() const { return m_kind; }
- FileDef *file() const { return m_fd; }
- bool isLast() const { return m_isLast; }
- void setLast(bool b) { m_isLast=b; }
- DirEntry *parent() const { return m_parent; }
- QCString name() const { return m_name; }
- QCString path() const { return parent() ? parent()->path()+"/"+name() : name(); }
-
- protected:
- DirEntry *m_parent;
- QCString m_name;
-
- private:
- EntryKind m_kind;
- FileDef *m_fd;
- int num;
- bool m_isLast;
-};
-
-class Directory : public DirEntry
-{
- public:
- Directory(Directory *parent,const QCString &name)
- : DirEntry(parent,name)
- { m_children.setAutoDelete(TRUE); }
- virtual ~Directory() {}
- void addChild(DirEntry *d) { m_children.append(d); d->setLast(TRUE); }
- QList<DirEntry> &children() { return m_children; }
- void rename(const QCString &name) { m_name=name; }
- void reParent(Directory *parent) { m_parent=parent; }
-
- private:
- QList<DirEntry> m_children;
-};
-
-//void generateFileTree(QTextStream &t);
-void generateFileTree();
-
-#endif
-
diff --git a/trunk/src/filename.cpp b/trunk/src/filename.cpp
deleted file mode 100644
index dddeeca..0000000
--- a/trunk/src/filename.cpp
+++ /dev/null
@@ -1,144 +0,0 @@
-/******************************************************************************
- *
- *
- *
- * Copyright (C) 1997-2012 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.
- *
- */
-
-#include "filename.h"
-#include "util.h"
-
-FileName::FileName(const char *fn,const char *n) : FileList()
-{
- setAutoDelete(TRUE);
- fName=fn;
- name=n;
-}
-
-FileName::~FileName()
-{
-}
-
-
-void FileName::generateDiskNames()
-{
- //QCString commonPrefix;
- FileDef *fd=first();
- int count=0;
- while (fd)
- {
- if (!fd->isReference()) count++;
- fd=next();
- }
- if (count==1)
- {
- fd=first();
- // skip references
- while (fd && fd->isReference()) fd=next();
- // name if unique, so diskname is simply the name
- //printf("!!!!!!!! Unique disk name=%s for fd=%s\n",name.data(),fd->diskname.data());
- fd->diskname=name.copy();
- }
- else if (count>1) // multiple occurrences of the same file name
- {
- //printf("Multiple occurrences of %s\n",name.data());
- int i=0,j=0;
- bool found=FALSE;
- while (!found) // search for the common prefix of all paths
- {
- fd=first();
- while (fd && fd->isReference()) fd=next();
- char c=fd->path.at(i);
- if (c=='/') j=i; // remember last position of dirname
- fd=next();
- while (fd && !found)
- {
- if (!fd->isReference())
- {
- //printf("i=%d j=%d fd->path=`%s' fd->name=`%s'\n",i,j,fd->path.left(i).data(),fd->name().data());
- if (i==(int)fd->path.length())
- {
- //warning("Warning: Input file %s found multiple times!\n"
- // " The generated documentation for this file may not be correct!\n",fd->absFilePath().data());
- found=TRUE;
- }
- else if (fd->path[i]!=c)
- {
- found=TRUE;
- }
- }
- fd=next();
- }
- i++;
- }
- fd=first();
- while (fd)
- {
- //printf("fd->setName(%s)\n",(fd->path.right(fd->path.length()-j-1)+name).data());
- if (!fd->isReference())
- {
- QCString prefix = fd->path.right(fd->path.length()-j-1);
- fd->setName(prefix+name);
- //printf("!!!!!!!! non unique disk name=%s for fd=%s\n",(prefix+name).data(),fd->diskname.data());
- fd->diskname=prefix+name;
- }
- fd=next();
- }
- }
-}
-
-int FileName::compareItems(GCI item1, GCI item2)
-{
- FileName *f1=(FileName *)item1;
- FileName *f2=(FileName *)item2;
- return stricmp(f1->fileName(),f2->fileName());
-}
-
-FileNameIterator::FileNameIterator(const FileName &fname) :
- QListIterator<FileDef>(fname)
-{
-}
-
-FileNameList::FileNameList() : QList<FileName>()
-{
-}
-
-FileNameList::~FileNameList()
-{
-}
-
-void FileNameList::generateDiskNames()
-{
- FileName *fn=first();
- while (fn)
- {
- fn->generateDiskNames();
- fn=next();
- }
-}
-
-int FileNameList::compareItems(GCI item1, GCI item2)
-{
- FileName *f1=(FileName *)item1;
- FileName *f2=(FileName *)item2;
- //printf("FileNameList::compareItems `%s'<->`%s'\n",
- // f1->fileName(),f2->fileName());
- return Config_getBool("FULL_PATH_NAMES") ?
- stricmp(f1->fullName(),f2->fullName()) :
- stricmp(f1->fileName(),f2->fileName());
-}
-
-FileNameListIterator::FileNameListIterator(const FileNameList &fnlist) :
- QListIterator<FileName>(fnlist)
-{
-}
diff --git a/trunk/src/filename.h b/trunk/src/filename.h
deleted file mode 100644
index 29e90c0..0000000
--- a/trunk/src/filename.h
+++ /dev/null
@@ -1,69 +0,0 @@
-/******************************************************************************
- *
- *
- *
- * Copyright (C) 1997-2012 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.
- *
- */
-
-#ifndef FILENAME_H
-#define FILENAME_H
-
-#include "qtbc.h"
-#include <qdict.h>
-#include "filedef.h"
-
-class FileName : public FileList
-{
- public:
- FileName(const char *fn,const char *name);
- ~FileName();
- const char *fileName() const { return name; }
- const char *fullName() const { return fName; }
- void generateDiskNames();
- int compareItems(GCI item1,GCI item2);
-
- private:
- QCString name;
- QCString fName;
-};
-
-class FileNameIterator : public QListIterator<FileDef>
-{
- public:
- FileNameIterator(const FileName &list);
-};
-
-class FileNameList : public QList<FileName>
-{
- public:
- FileNameList();
- ~FileNameList();
- void generateDiskNames();
- int compareItems(GCI item1,GCI item2);
-};
-
-class FileNameListIterator : public QListIterator<FileName>
-{
- public:
- FileNameListIterator( const FileNameList &list );
-};
-
-class FileNameDict : public QDict<FileName>
-{
- public:
- FileNameDict(uint size) :
- QDict<FileName>(size,Config_getBool("CASE_SENSE_NAMES")) {}
- ~FileNameDict() {}
-};
-
-#endif
diff --git a/trunk/src/filestorage.h b/trunk/src/filestorage.h
deleted file mode 100644
index ddffeda..0000000
--- a/trunk/src/filestorage.h
+++ /dev/null
@@ -1,135 +0,0 @@
-/******************************************************************************
- *
- * Copyright (C) 1997-2012 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.
- *
- */
-
-#include <qfile.h>
-#include <assert.h>
-#include "store.h"
-
-
-#ifndef FILESTORAGE_H
-#define FILESTORAGE_H
-
-/** @brief Store implementation based on a file.
- Writing is linear, after that the file is re-opened for reading.
- Reading is random (seek+read).
- */
-class FileStorage : public StorageIntf
-{
- public:
- FileStorage() : m_readOnly(FALSE) {}
- FileStorage( const QString &name) :
- m_readOnly(FALSE) { m_file.setName(name); }
- int read(char *buf,uint size) { return m_file.readBlock(buf,size); }
- int write(const char *buf,uint size) { assert(m_readOnly==FALSE); return m_file.writeBlock(buf,size); }
- bool open( int m ) { m_readOnly = m==IO_ReadOnly; return m_file.open(m); }
- bool seek(int64 pos) { return m_file.seek(pos); }
- int64 pos() const { return m_file.pos(); }
- void close() { m_file.close(); }
- void setName( const char *name ) { m_file.setName(name); }
- private:
- bool m_readOnly;
- QFile m_file;
-};
-
-#if 0 // experimental version using mmap after opening the file as read only.
-#include <sys/mman.h>
-#include <sys/stat.h>
-#include <fcntl.h>
-#include <string.h>
-#include <unistd.h>
-#include <stdio.h>
-
-class FileStorage : public StorageIntf
-{
- public:
- FileStorage() : m_readOnly(FALSE), m_map(0), m_off(0), m_size(0) {}
- FileStorage( const QString &name) :
- m_readOnly(FALSE) { m_file.setName(name); }
- void setName( const char *name ) { m_file.setName(name); }
- bool open( int m )
- {
- if (m==IO_ReadOnly)
- {
- m_readOnly=TRUE;
- QString name = m_file.name();
- m_file.close();
- m_fd = ::open(name.data(),O_RDONLY);
- struct stat stat;
- fstat(m_fd,&stat);
- m_size = stat.st_size;
- m_map = mmap(NULL,m_size,PROT_READ,MAP_SHARED,m_fd,0);
- if (m_map==MAP_FAILED) perror("mmap failed");
- assert(m_map!=MAP_FAILED);
- m_off = 0;
- return TRUE;
- }
- else
- {
- m_readOnly = FALSE;
- return m_file.open(m);
- }
- }
- int write(const char *buf,uint size)
- {
- assert(m_map==0);
- return m_file.writeBlock(buf,size);
- }
- int read(char *buf,uint size)
- {
- assert(m_map!=0);
- memcpy(buf,((char *)m_map)+m_off,size);
- m_off+=size;
- return size;
- }
- bool seek(int64 pos)
- {
- m_off=pos;
- return TRUE;
- }
- int64 pos() const
- {
- if (m_readOnly)
- {
- return m_off;
- }
- else
- {
- return m_file.pos();
- }
- }
- void close()
- {
- if (m_readOnly)
- {
- munmap(m_map,m_size);
- ::close(m_fd);
- exit(1);
- }
- else
- {
- m_file.close();
- }
- }
- private:
- bool m_readOnly;
- QFile m_file;
- int m_fd;
- void *m_map;
- off_t m_off;
- off_t m_size;
-};
-#endif
-
-#endif
diff --git a/trunk/src/footer.html b/trunk/src/footer.html
deleted file mode 100644
index c93cb56..0000000
--- a/trunk/src/footer.html
+++ /dev/null
@@ -1,16 +0,0 @@
-<!--BEGIN GENERATE_TREEVIEW-->
- <li class="footer">$generatedby
- <a href="http://www.doxygen.org/index.html">
- <img class="footer" src="doxygen.png" alt="doxygen"/></a> $doxygenversion </li>
- </ul>
- </div>
-<!--END GENERATE_TREEVIEW-->
-<!--BEGIN !GENERATE_TREEVIEW-->
-<hr class="footer"/><address class="footer"><small>
-$generatedby &#160;<a href="http://www.doxygen.org/index.html">
-<img class="footer" src="$relpath$doxygen.png" alt="doxygen"/>
-</a> $doxygenversion
-</small></address>
-<!--END !GENERATE_TREEVIEW-->
-</body>
-</html>
diff --git a/trunk/src/footer_html.h b/trunk/src/footer_html.h
deleted file mode 100644
index 86a2e91..0000000
--- a/trunk/src/footer_html.h
+++ /dev/null
@@ -1,16 +0,0 @@
-"<!--BEGIN GENERATE_TREEVIEW-->\n"
-" <li class=\"footer\">$generatedby\n"
-" <a href=\"http://www.doxygen.org/index.html\">\n"
-" <img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/></a> $doxygenversion </li>\n"
-" </ul>\n"
-" </div>\n"
-"<!--END GENERATE_TREEVIEW-->\n"
-"<!--BEGIN !GENERATE_TREEVIEW-->\n"
-"<hr class=\"footer\"/><address class=\"footer\"><small>\n"
-"$generatedby &#160;<a href=\"http://www.doxygen.org/index.html\">\n"
-"<img class=\"footer\" src=\"$relpath$doxygen.png\" alt=\"doxygen\"/>\n"
-"</a> $doxygenversion\n"
-"</small></address>\n"
-"<!--END !GENERATE_TREEVIEW-->\n"
-"</body>\n"
-"</html>\n"
diff --git a/trunk/src/formula.cpp b/trunk/src/formula.cpp
deleted file mode 100644
index adc1d42..0000000
--- a/trunk/src/formula.cpp
+++ /dev/null
@@ -1,329 +0,0 @@
-/******************************************************************************
- *
- *
- * Copyright (C) 1997-2012 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.
- *
- */
-
-#include <stdlib.h>
-#include <unistd.h>
-
-#include "qtbc.h"
-#include <qfile.h>
-#include <qfileinfo.h>
-#include <qtextstream.h>
-#include <qdir.h>
-
-#include "formula.h"
-#include "image.h"
-#include "util.h"
-#include "message.h"
-#include "config.h"
-#include "portable.h"
-#include "index.h"
-#include "doxygen.h"
-#include "ftextstream.h"
-
-Formula::Formula(const char *text)
-{
- static int count=0;
- number = count++;
- form=text;
-}
-
-Formula::~Formula()
-{
-}
-
-int Formula::getId()
-{
- return number;
-}
-
-void FormulaList::generateBitmaps(const char *path)
-{
- int x1,y1,x2,y2;
- QDir d(path);
- // store the original directory
- if (!d.exists()) { err("error: Output dir %s does not exist!\n",path); exit(1); }
- QCString oldDir = convertToQCString(QDir::currentDirPath());
- // go to the html output directory (i.e. path)
- QDir::setCurrent(d.absPath());
- QDir thisDir;
- // generate a latex file containing one formula per page.
- QCString texName="_formulas.tex";
- QList<int> pagesToGenerate;
- pagesToGenerate.setAutoDelete(TRUE);
- FormulaListIterator fli(*this);
- Formula *formula;
- QFile f(texName);
- bool formulaError=FALSE;
- if (f.open(IO_WriteOnly))
- {
- FTextStream t(&f);
- if (Config_getBool("LATEX_BATCHMODE")) t << "\\batchmode" << endl;
- t << "\\documentclass{article}" << endl;
- t << "\\usepackage{epsfig}" << endl; // for those who want to include images
- const char *s=Config_getList("EXTRA_PACKAGES").first();
- while (s)
- {
- t << "\\usepackage{" << s << "}\n";
- s=Config_getList("EXTRA_PACKAGES").next();
- }
- t << "\\pagestyle{empty}" << endl;
- t << "\\begin{document}" << endl;
- int page=0;
- for (fli.toFirst();(formula=fli.current());++fli)
- {
- QCString resultName;
- resultName.sprintf("form_%d.png",formula->getId());
- // only formulas for which no image exists are generated
- QFileInfo fi(resultName);
- if (!fi.exists())
- {
- // we force a pagebreak after each formula
- t << formula->getFormulaText() << endl << "\\pagebreak\n\n";
- pagesToGenerate.append(new int(page));
- }
- Doxygen::indexList.addImageFile(resultName);
- page++;
- }
- t << "\\end{document}" << endl;
- f.close();
- }
- if (pagesToGenerate.count()>0) // there are new formulas
- {
- //printf("Running latex...\n");
- //system("latex _formulas.tex </dev/null >/dev/null");
- QCString latexCmd = Config_getString("LATEX_CMD_NAME");
- if (latexCmd.isEmpty()) latexCmd="latex";
- portable_sysTimerStart();
- if (portable_system(latexCmd,"_formulas.tex")!=0)
- {
- err("Problems running latex. Check your installation or look "
- "for typos in _formulas.tex and check _formulas.log!\n");
- formulaError=TRUE;
- //return;
- }
- portable_sysTimerStop();
- //printf("Running dvips...\n");
- QListIterator<int> pli(pagesToGenerate);
- int *pagePtr;
- int pageIndex=1;
- for (;(pagePtr=pli.current());++pli,++pageIndex)
- {
- int pageNum=*pagePtr;
- msg("Generating image form_%d.png for formula\n",pageNum);
- char dviArgs[4096];
- QCString formBase;
- formBase.sprintf("_form%d",pageNum);
- // run dvips to convert the page with number pageIndex to an
- // encapsulated postscript.
- sprintf(dviArgs,"-q -D 600 -E -n 1 -p %d -o %s.eps _formulas.dvi",
- pageIndex,formBase.data());
- portable_sysTimerStart();
- if (portable_system("dvips",dviArgs)!=0)
- {
- err("Problems running dvips. Check your installation!\n");
- portable_sysTimerStop();
- return;
- }
- portable_sysTimerStop();
- // now we read the generated postscript file to extract the bounding box
- QFileInfo fi(formBase+".eps");
- if (fi.exists())
- {
- QCString eps = fileToString(formBase+".eps");
- int i=eps.find("%%BoundingBox:");
- if (i!=-1)
- {
- sscanf(eps.data()+i,"%%%%BoundingBox:%d %d %d %d",&x1,&y1,&x2,&y2);
- }
- else
- {
- err("error: Couldn't extract bounding box!\n");
- }
- }
- // next we generate a postscript file which contains the eps
- // and displays it in the right colors and the right bounding box
- f.setName(formBase+".ps");
- if (f.open(IO_WriteOnly))
- {
- FTextStream t(&f);
- t << "1 1 1 setrgbcolor" << endl; // anti-alias to white background
- t << "newpath" << endl;
- t << "-1 -1 moveto" << endl;
- t << (x2-x1+2) << " -1 lineto" << endl;
- t << (x2-x1+2) << " " << (y2-y1+2) << " lineto" << endl;
- t << "-1 " << (y2-y1+2) << " lineto" <<endl;
- t << "closepath" << endl;
- t << "fill" << endl;
- t << -x1 << " " << -y1 << " translate" << endl;
- t << "0 0 0 setrgbcolor" << endl;
- t << "(" << formBase << ".eps) run" << endl;
- f.close();
- }
- // scale the image so that it is four times larger than needed.
- // and the sizes are a multiple of four.
- double scaleFactor = 16.0/3.0;
- int zoomFactor = Config_getInt("FORMULA_FONTSIZE");
- if (zoomFactor<8 || zoomFactor>50) zoomFactor=10;
- scaleFactor *= zoomFactor/10.0;
- int gx = (((int)((x2-x1)*scaleFactor))+3)&~1;
- int gy = (((int)((y2-y1)*scaleFactor))+3)&~1;
- // Then we run ghostscript to convert the postscript to a pixmap
- // The pixmap is a truecolor image, where only black and white are
- // used.
-
- char gsArgs[4096];
- sprintf(gsArgs,"-q -g%dx%d -r%dx%dx -sDEVICE=ppmraw "
- "-sOutputFile=%s.pnm -dNOPAUSE -dBATCH -- %s.ps",
- gx,gy,(int)(scaleFactor*72),(int)(scaleFactor*72),
- formBase.data(),formBase.data()
- );
- portable_sysTimerStart();
- if (portable_system(portable_ghostScriptCommand(),gsArgs)!=0)
- {
- err("Problem running ghostscript %s %s. Check your installation!\n",portable_ghostScriptCommand(),gsArgs);
- portable_sysTimerStop();
- return;
- }
- portable_sysTimerStop();
- f.setName(formBase+".pnm");
- uint imageX=0,imageY=0;
- // we read the generated image again, to obtain the pixel data.
- if (f.open(IO_ReadOnly))
- {
- QTextStream t(&f);
- QCString s;
- if (!t.eof())
- s=t.readLine();
- if (s.length()<2 || s.left(2)!="P6")
- err("error: ghostscript produced an illegal image format!");
- else
- {
- // assume the size if after the first line that does not start with
- // # excluding the first line of the file.
- while (!t.eof() && (s=t.readLine()) && !s.isEmpty() && s.at(0)=='#') { }
- sscanf(s,"%d %d",&imageX,&imageY);
- }
- if (imageX>0 && imageY>0)
- {
- //printf("Converting image...\n");
- char *data = new char[imageX*imageY*3]; // rgb 8:8:8 format
- uint i,x,y,ix,iy;
- f.readBlock(data,imageX*imageY*3);
- Image srcImage(imageX,imageY),
- filteredImage(imageX,imageY),
- dstImage(imageX/4,imageY/4);
- uchar *ps=srcImage.getData();
- // convert image to black (1) and white (0) index.
- for (i=0;i<imageX*imageY;i++) *ps++= (data[i*3]==0 ? 1 : 0);
- // apply a simple box filter to the image
- static int filterMask[]={1,2,1,2,8,2,1,2,1};
- for (y=0;y<srcImage.getHeight();y++)
- {
- for (x=0;x<srcImage.getWidth();x++)
- {
- int s=0;
- for (iy=0;iy<2;iy++)
- {
- for (ix=0;ix<2;ix++)
- {
- s+=srcImage.getPixel(x+ix-1,y+iy-1)*filterMask[iy*3+ix];
- }
- }
- filteredImage.setPixel(x,y,s);
- }
- }
- // down-sample the image to 1/16th of the area using 16 gray scale
- // colors.
- // TODO: optimize this code.
- for (y=0;y<dstImage.getHeight();y++)
- {
- for (x=0;x<dstImage.getWidth();x++)
- {
- int xp=x<<2;
- int yp=y<<2;
- int c=filteredImage.getPixel(xp+0,yp+0)+
- filteredImage.getPixel(xp+1,yp+0)+
- filteredImage.getPixel(xp+2,yp+0)+
- filteredImage.getPixel(xp+3,yp+0)+
- filteredImage.getPixel(xp+0,yp+1)+
- filteredImage.getPixel(xp+1,yp+1)+
- filteredImage.getPixel(xp+2,yp+1)+
- filteredImage.getPixel(xp+3,yp+1)+
- filteredImage.getPixel(xp+0,yp+2)+
- filteredImage.getPixel(xp+1,yp+2)+
- filteredImage.getPixel(xp+2,yp+2)+
- filteredImage.getPixel(xp+3,yp+2)+
- filteredImage.getPixel(xp+0,yp+3)+
- filteredImage.getPixel(xp+1,yp+3)+
- filteredImage.getPixel(xp+2,yp+3)+
- filteredImage.getPixel(xp+3,yp+3);
- // here we scale and clip the color value so the
- // resulting image has a reasonable contrast
- dstImage.setPixel(x,y,QMIN(15,(c*15)/(16*10)));
- }
- }
- // save the result as a bitmap
- QCString resultName;
- resultName.sprintf("form_%d.png",pageNum);
- // the option parameter 1 is used here as a temporary hack
- // to select the right color palette!
- dstImage.save(resultName,1);
- delete[] data;
- }
- f.close();
- }
- // remove intermediate image files
- thisDir.remove(formBase+".eps");
- thisDir.remove(formBase+".pnm");
- thisDir.remove(formBase+".ps");
- }
- // remove intermediate files produced by latex
- thisDir.remove("_formulas.dvi");
- if (!formulaError) thisDir.remove("_formulas.log"); // keep file in case of errors
- thisDir.remove("_formulas.aux");
- }
- // remove the latex file itself
- if (!formulaError) thisDir.remove("_formulas.tex");
- // write/update the formula repository so we know what text the
- // generated images represent (we use this next time to avoid regeneration
- // of the images, and to avoid forcing the user to delete all images in order
- // to let a browser refresh the images).
- f.setName("formula.repository");
- if (f.open(IO_WriteOnly))
- {
- FTextStream t(&f);
- for (fli.toFirst();(formula=fli.current());++fli)
- {
- t << "\\form#" << formula->getId() << ":" << formula->getFormulaText() << endl;
- }
- f.close();
- }
- // reset the directory to the original location.
- QDir::setCurrent(oldDir);
-}
-
-
-#ifdef FORMULA_TEST
-int main()
-{
- FormulaList fl;
- fl.append(new Formula("$x^2$"));
- fl.append(new Formula("$y^2$"));
- fl.append(new Formula("$\\sqrt{x_0^2+x_1^2+x_2^2}$"));
- fl.generateBitmaps("dest");
- return 0;
-}
-#endif
diff --git a/trunk/src/formula.h b/trunk/src/formula.h
deleted file mode 100644
index ca68e6e..0000000
--- a/trunk/src/formula.h
+++ /dev/null
@@ -1,59 +0,0 @@
-/******************************************************************************
- *
- *
- *
- * Copyright (C) 1997-2012 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.
- *
- */
-
-#ifndef FORMULA_H
-#define FORMULA_H
-
-#include "qtbc.h"
-#include <qlist.h>
-#include <qdict.h>
-
-class Formula
-{
- public:
- Formula(const char *text);
- ~Formula();
- int getId();
- QCString getFormulaText() const { return form; }
-
- private:
- int number;
- QCString form;
-};
-
-class FormulaList : public QList<Formula>
-{
- public:
- void generateBitmaps(const char *path);
-};
-
-class FormulaListIterator : public QListIterator<Formula>
-{
- public:
- FormulaListIterator(const FormulaList &l) :
- QListIterator<Formula>(l) {}
-};
-
-class FormulaDict : public QDict<Formula>
-{
- public:
- FormulaDict(uint size) :
- QDict<Formula>(size) {}
- ~FormulaDict() {}
-};
-
-#endif
diff --git a/trunk/src/fortrancode.h b/trunk/src/fortrancode.h
deleted file mode 100644
index 887fe65..0000000
--- a/trunk/src/fortrancode.h
+++ /dev/null
@@ -1,35 +0,0 @@
-/******************************************************************************
- *
- *
- *
- * Copyright (C) 1997-2012 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.
- *
- */
-
-#ifndef CODE_H
-#define CODE_H
-
-#include "qtbc.h"
-#include <stdio.h>
-
-class CodeOutputInterface;
-class FileDef;
-class MemberDef;
-
-void parseFortranCode(CodeOutputInterface &,const char *,const QCString &,
- bool ,const char *,FileDef *fd=0,
- int startLine=-1,int endLine=-1,bool inlineFragment=FALSE,
- MemberDef *memberDef=0,bool showLineNumbers=TRUE);
-void resetFortranCodeParserState();
-void codeFreeScanner();
-
-#endif
diff --git a/trunk/src/fortrancode.l b/trunk/src/fortrancode.l
deleted file mode 100644
index f4ee358..0000000
--- a/trunk/src/fortrancode.l
+++ /dev/null
@@ -1,1073 +0,0 @@
-/******************************************************************************
- *
- * Parser for syntax hightlighting and references for Fortran90 F subset
- *
- * Copyright (C) by Anke Visser
- * based on the work of 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.
- *
- */
-
-/**
- @todo - continutation lines not always recognized
- - merging of use-statements with same module name and different only-names
- - rename part of use-statement
- - links to interface functions
- - references to variables
-**/
-
-%{
-
-/*
- * includes
- */
-#include "qtbc.h"
-#include <stdio.h>
-#include <assert.h>
-#include <ctype.h>
-#include <qregexp.h>
-#include <qdir.h>
-#include <qstringlist.h>
-#include "entry.h"
-#include "doxygen.h"
-#include "message.h"
-#include "outputlist.h"
-#include "util.h"
-#include "membername.h"
-#include "searchindex.h"
-#include "defargs.h"
-
-#define YY_NEVER_INTERACTIVE 1
-#define YY_NO_TOP_STATE 1
-
-//--------------------------------------------------------------------------------
-
-/**
- data of an use-statement
-*/
-class UseEntry
-{
- public:
- QCString module; // just for debug
- QStringList onlyNames; /* entries of the ONLY-part */
-};
-
-/**
- module name -> list of ONLY/remote entries
- (module name = name of the module, which can be accessed via use-directive)
-*/
-class UseSDict : public SDict<UseEntry>
-{
- public:
- UseSDict() : SDict<UseEntry>(17) {}
-};
-
-/**
- Contains names of used modules and names of local variables.
-*/
-class Scope
-{
- public:
- QStringList useNames; //!< contains names of used modules
- QDict<void> localVars; //!< contains names of local variables
-
- Scope() : localVars(7, FALSE /*caseSensitive*/) {}
-};
-
-/*===================================================================*/
-/*
- * statics
- */
-
-static QCString docBlock; //!< contents of all lines of a documentation block
-static QCString currentModule=0; //!< name of the current enclosing module
-static UseSDict *useMembers= new UseSDict; //!< info about used modules
-static UseEntry *useEntry = 0; //!< current use statement info
-static QList<Scope> scopeStack;
-// static QStringList *currentUseNames= new QStringList; //! contains names of used modules of current program unit
-static QCString str=""; //!> contents of fortran string
-
-static CodeOutputInterface * g_code;
-
-// TODO: is this still needed? if so, make it work
-static QCString g_parmType;
-static QCString g_parmName;
-
-static const char * g_inputString; //!< the code fragment as text
-static int g_inputPosition; //!< read offset during parsing
-static int g_inputLines; //!< number of line in the code fragment
-static int g_yyLineNr; //!< current line number
-static bool g_needsTermination;
-static bool g_isFixedForm;
-
-static bool g_insideBody; //!< inside subprog/program body? => create links
-static const char * g_currentFontClass;
-
-static bool g_exampleBlock;
-static QCString g_exampleName;
-static QCString g_exampleFile;
-
-static FileDef * g_sourceFileDef;
-static Definition * g_currentDefinition;
-static MemberDef * g_currentMemberDef;
-static bool g_includeCodeFragment;
-
-static char stringStartSymbol; // single or double quote
-// count in variable declaration to filter out
-// declared from referenced names
-static int bracketCount = 0;
-
-// simplified way to know if this is fixed form
-// duplicate in fortranscanner.l
-static bool recognizeFixedForm(const char* contents)
-{
- int column=0;
- bool skipLine=FALSE;
-
- for (int i=0;;i++)
- {
- column++;
-
- switch(contents[i])
- {
- case '\n':
- column=0;
- skipLine=FALSE;
- break;
- case ' ':
- break;
- case '\000':
- return FALSE;
- case 'C':
- case 'c':
- case '*':
- if(column==1) return TRUE;
- if(skipLine) break;
- return FALSE;
- case '!':
- if(column>1 && column<7) return FALSE;
- skipLine=TRUE;
- break;
- default:
- if(skipLine) break;
- if(column==7) return TRUE;
- return FALSE;
- }
- }
- return FALSE;
-}
-
-static void endFontClass()
-{
- if (g_currentFontClass)
- {
- g_code->endFontClass();
- g_currentFontClass=0;
- }
-}
-
-static void startFontClass(const char *s)
-{
- endFontClass();
- g_code->startFontClass(s);
- g_currentFontClass=s;
-}
-
-static void setCurrentDoc(const QCString &name,const QCString &base,const QCString &anchor="")
-{
- if (Doxygen::searchIndex)
- {
- Doxygen::searchIndex->setCurrentDoc(name,base,anchor);
- }
-}
-
-static void addToSearchIndex(const char *text)
-{
- if (Doxygen::searchIndex)
- {
- Doxygen::searchIndex->addWord(text,FALSE);
- }
-}
-
-/*! start a new line of code, inserting a line number if g_sourceFileDef
- * is TRUE. If a definition starts at the current line, then the line
- * number is linked to the documentation of that definition.
- */
-static void startCodeLine()
-{
- if (g_sourceFileDef)
- {
- //QCString lineNumber,lineAnchor;
- //lineNumber.sprintf("%05d",g_yyLineNr);
- //lineAnchor.sprintf("l%05d",g_yyLineNr);
-
- Definition *d = g_sourceFileDef->getSourceDefinition(g_yyLineNr);
- //printf("startCodeLine %d d=%s\n", g_yyLineNr,d ? d->name().data() : "<null>");
- if (!g_includeCodeFragment && d)
- {
- g_currentDefinition = d;
- g_currentMemberDef = g_sourceFileDef->getSourceMember(g_yyLineNr);
- g_insideBody = FALSE;
- g_parmType.resize(0);
- g_parmName.resize(0);
- QCString lineAnchor;
- lineAnchor.sprintf("l%05d",g_yyLineNr);
- if (g_currentMemberDef)
- {
- g_code->writeLineNumber(g_currentMemberDef->getReference(),
- g_currentMemberDef->getOutputFileBase(),
- g_currentMemberDef->anchor(),g_yyLineNr);
- setCurrentDoc(
- g_currentMemberDef->qualifiedName(),
- g_sourceFileDef->getSourceFileBase(),
- lineAnchor);
- }
- else if (d->isLinkableInProject())
- {
- g_code->writeLineNumber(d->getReference(),
- d->getOutputFileBase(),
- 0,g_yyLineNr);
- setCurrentDoc(
- d->qualifiedName(),
- g_sourceFileDef->getSourceFileBase(),
- lineAnchor);
- }
- }
- else
- {
- g_code->writeLineNumber(0,0,0,g_yyLineNr);
- }
- }
- g_code->startCodeLine();
- if (g_currentFontClass)
- {
- g_code->startFontClass(g_currentFontClass);
- }
-}
-
-
-static void endFontClass();
-static void endCodeLine()
-{
- endFontClass();
- g_code->endCodeLine();
-}
-
-/*! write a code fragment `text' that may span multiple lines, inserting
- * line numbers for each line.
- */
-static void codifyLines(char *text)
-{
- //printf("codifyLines(%d,\"%s\")\n",g_yyLineNr,text);
- char *p=text,*sp=p;
- char c;
- bool done=FALSE;
- while (!done)
- {
- sp=p;
- while ((c=*p++) && c!='\n') { }
- if (c=='\n')
- {
- g_yyLineNr++;
- *(p-1)='\0';
- g_code->codify(sp);
- endCodeLine();
- if (g_yyLineNr<g_inputLines)
- {
- startCodeLine();
- }
- }
- else
- {
- g_code->codify(sp);
- done=TRUE;
- }
- }
-}
-
-static void codifyLines(QCString str)
-{
- char *tmp= (char *) malloc(str.length()+1);
- strcpy(tmp, str);
- codifyLines(tmp);
- free(tmp);
-}
-
-/*! writes a link to a fragment \a text that may span multiple lines, inserting
- * line numbers for each line. If \a text contains newlines, the link will be
- * split into multiple links with the same destination, one for each line.
- */
-static void writeMultiLineCodeLink(CodeOutputInterface &ol,
- const char *ref,const char *file,
- const char *anchor,const char *text)
-{
- bool done=FALSE;
- char *p=(char *)text;
- while (!done)
- {
- char *sp=p;
- char c;
- while ((c=*p++) && c!='\n') { }
- if (c=='\n')
- {
- g_yyLineNr++;
- *(p-1)='\0';
- //printf("writeCodeLink(%s,%s,%s,%s)\n",ref,file,anchor,sp);
- ol.writeCodeLink(ref,file,anchor,sp,0);
- endCodeLine();
- if (g_yyLineNr<g_inputLines)
- {
- startCodeLine();
- }
- }
- else
- {
- //printf("writeCodeLink(%s,%s,%s,%s)\n",ref,file,anchor,sp);
- ol.writeCodeLink(ref,file,anchor,sp,0);
- done=TRUE;
- }
- }
-}
-
-/**
- generates dictionay entries that are used if REFERENCED_BY_RELATION ... options are set
- (e.g. the "referenced by ..." list after the function documentation)
-*/
-
-static void addDocCrossReference(MemberDef *src, MemberDef *dst)
-{
- if (dst->isTypedef() || dst->isEnumerate()) return; // don't add types
- //printf("======= addDocCrossReference src=%s,dst=%s\n",src->name().data(),dst->name().data());
- if ((Config_getBool("REFERENCED_BY_RELATION") || Config_getBool("CALLER_GRAPH")) &&
- (src->isFunction()))
- {
- dst->addSourceReferencedBy(src);
- }
- if ((Config_getBool("REFERENCES_RELATION") || Config_getBool("CALL_GRAPH")) && (src->isFunction()))
- {
- src->addSourceReferences(dst);
- }
-}
-
-//-------------------------------------------------------------------------------
-/**
- searches for definition of a type
- @param tname the name of the type
- @param moduleName name of enclosing module or null, if global entry
- @param cd the entry, if found or null
- @param useDict dictionary of data of USE-statement
- @returns true, if type is found
-*/
-static bool getFortranTypeDefs(const QCString &tname, const QCString &moduleName,
- ClassDef *&cd, UseSDict *usedict=0)
-{
- if (tname.isEmpty()) return FALSE; /* empty name => nothing to link */
-
- //cout << "=== search for type: " << tname << endl;
-
- // search for type
- if ((cd=Doxygen::classSDict->find(tname)))
- {
- //cout << "=== type found in global module" << endl;
- return TRUE;
- }
- else if (moduleName && (cd= Doxygen::classSDict->find(moduleName+"::"+tname)))
- {
- //cout << "=== type found in local module" << endl;
- return TRUE;
- }
- else
- {
- UseEntry *use;
- for (UseSDict::Iterator di(*usedict); (use=di.current()); ++di)
- if ((cd= Doxygen::classSDict->find(use->module+"::"+tname)))
- {
- //cout << "=== type found in used module" << endl;
- return TRUE;
- }
- }
-
- return FALSE;
-}
-
-/**
- searches for definition of function memberName
- @param memberName the name of the function/variable
- @param moduleName name of enclosing module or null, if global entry
- @param md the entry, if found or null
- @param usedict array of data of USE-statement
- @returns true, if found
-*/
-static bool getFortranDefs(const QCString &memberName, const QCString &moduleName,
- MemberDef *&md, UseSDict *usedict=0)
-{
- if (memberName.isEmpty()) return FALSE; /* empty name => nothing to link */
-
- // look in local variables
- for (Scope *scope=scopeStack.last(); scope!=NULL; scope=scopeStack.prev())
- {
- if(scope->localVars.find(memberName))
- return FALSE;
- }
-
- // search for function
- MemberName *mn = Doxygen::functionNameSDict->find(memberName);
-
- if (mn) // name is known
- {
- MemberListIterator mli(*mn);
- for (mli.toFirst();(md=mli.current());++mli) // all found functions with given name
- {
- FileDef *fd=md->getFileDef();
- GroupDef *gd=md->getGroupDef();
-
- //cout << "found link with same name: " << fd->fileName() << " " << memberName;
- //if (md->getNamespaceDef() != 0) cout << " in namespace " << md->getNamespaceDef()->name();cout << endl;
-
- if ((gd && gd->isLinkable()) || (fd && fd->isLinkable()))
- {
- NamespaceDef *nspace= md->getNamespaceDef();
-
- if (nspace == 0)
- { // found function in global scope
- return TRUE;
- }
- else if (moduleName == nspace->name())
- { // found in local scope
- return TRUE;
- }
- else
- { // else search in used modules
- QCString moduleName= nspace->name();
- UseEntry *ue= usedict->find(moduleName);
- if (ue)
- {
- // check if only-list exists and if current entry exists is this list
- QStringList &only= ue->onlyNames;
- if (only.isEmpty())
- {
- //cout << " found in module " << moduleName << " entry " << memberName << endl;
- return TRUE; // whole module used
- }
- else
- {
- for ( QStringList::Iterator it = only.begin(); it != only.end(); ++it)
- {
- //cout << " search in only: " << moduleName << ":: " << memberName << "==" << (*it)<< endl;
- if (memberName == (QCString)(*it))
- return TRUE; // found in ONLY-part of use list
- }
- }
- }
- }
- } // if linkable
- } // for
- }
- return FALSE;
-}
-
-/**
- gets the link to a generic procedure which depends not on the name, but on the parameter list
- @todo implementation
-*/
-static bool getGenericProcedureLink(const ClassDef *cd,
- const char *memberText,
- CodeOutputInterface &ol)
-{
- (void)cd;
- (void)memberText;
- (void)ol;
- return FALSE;
-}
-
-static bool getLink(UseSDict *usedict, // dictonary with used modules
- const char *memberText, // exact member text
- CodeOutputInterface &ol,
- const char *text)
-{
- MemberDef *md;
- QCString memberName= removeRedundantWhiteSpace(memberText);
-
- if (getFortranDefs(memberName, currentModule, md, usedict) && md->isLinkable())
- {
- //if (md->isVariable()) return FALSE; // variables aren't handled yet
-
- Definition *d = md->getOuterScope()==Doxygen::globalScope ?
- md->getBodyDef() : md->getOuterScope();
- if (md->getGroupDef()) d = md->getGroupDef();
- if (d && d->isLinkable())
- {
- if (g_currentDefinition && g_currentMemberDef && md!=g_currentMemberDef && g_insideBody)
- {
- addDocCrossReference(g_currentMemberDef,md);
- }
- ol.linkableSymbol(g_yyLineNr,md->name(),md,
- g_currentMemberDef ? g_currentMemberDef : g_currentDefinition);
- writeMultiLineCodeLink(ol,md->getReference(),
- md->getOutputFileBase(),
- md->anchor(),
- text ? text : memberText);
- addToSearchIndex(text ? text : memberText);
- return TRUE;
- }
- }
- return FALSE;
-}
-
-
-static void generateLink(CodeOutputInterface &ol, char *lname)
-{
- ClassDef *cd=0;
-
- // check if lname is a linkable type or interface
- if ( (getFortranTypeDefs(lname, currentModule, cd, useMembers)) && cd->isLinkable() )
- {
- if ( (cd->compoundType() == ClassDef::Class) && // was Entry::INTERFACE_SEC) &&
- (getGenericProcedureLink(cd, lname, ol)) )
- {
- //cout << "=== generic procedure resolved" << endl;
- }
- else
- { // write type or interface link
- ol.linkableSymbol(g_yyLineNr, lname, cd, g_currentMemberDef?g_currentMemberDef:g_currentDefinition);
- writeMultiLineCodeLink(ol,cd->getReference(),cd->getOutputFileBase(),cd->anchor(),lname);
- addToSearchIndex(lname);
- }
- }
- // check for function/variable
- else if (getLink(useMembers, lname, ol, lname))
- {
- //cout << "=== found link for " << lname << endl;
- }
- else
- {
- // nothing found, just write out the word
- ol.linkableSymbol(g_yyLineNr, lname, 0, g_currentMemberDef?g_currentMemberDef:g_currentDefinition);
- //startFontClass("charliteral"); //test
- codifyLines(lname);
- //endFontClass(); //test
- addToSearchIndex(lname);
- }
-}
-
-/*! counts the number of lines in the input */
-static int countLines()
-{
- const char *p=g_inputString;
- char c;
- int count=1;
- while ((c=*p))
- {
- p++ ;
- if (c=='\n') count++;
- }
- if (p>g_inputString && *(p-1)!='\n')
- { // last line does not end with a \n, so we add an extra
- // line and explicitly terminate the line after parsing.
- count++,
- g_needsTermination=TRUE;
- }
- return count;
-}
-
-//----------------------------------------------------------------------------
-/** start scope */
-void startScope()
-{
- // fprintf(stderr, "===> startScope %s",yytext);
- Scope *scope = new Scope;
- scopeStack.append(scope);
-}
-
-/** end scope */
-void endScope()
-{
- // fprintf(stderr,"===> endScope %s",yytext);
- if (scopeStack.isEmpty())
- {
- //fprintf(stderr,"WARNING: fortrancode.l: stack empty!\n");
- return;
- }
-
- Scope *scope = scopeStack.getLast();
- scopeStack.removeLast();
- for ( QStringList::Iterator it = scope->useNames.begin(); it != scope->useNames.end(); ++it)
- {
- useMembers->remove(*it);
- }
- delete scope;
-}
-
-void addUse(QString moduleName)
-{
- if (!scopeStack.isEmpty())
- scopeStack.last()->useNames.append(moduleName);
-}
-
-void addLocalVar(QString varName)
-{
- if (!scopeStack.isEmpty())
- scopeStack.last()->localVars.insert(varName, (void*)1);
-}
-
-//----------------------------------------------------------------------------
-
-/* -----------------------------------------------------------------*/
-#undef YY_INPUT
-#define YY_INPUT(buf,result,max_size) result=yyread(buf,max_size);
-
-static int yyread(char *buf,int max_size)
-{
- int c=0;
- while( c < max_size && g_inputString[g_inputPosition] )
- {
- *buf = g_inputString[g_inputPosition++] ;
- c++; buf++;
- }
- return c;
-}
-
-%}
-
-IDSYM [a-z_A-Z0-9]
-ID [a-z_A-Z]+{IDSYM}*
-SUBPROG (subroutine|function)
-B [ \t]
-BS [ \t]*
-BS_ [ \t]+
-COMMA {BS},{BS}
-ARGS_L0 ("("[^)]*")")
-ARGS_L1a [^()]*"("[^)]*")"[^)]*
-ARGS_L1 ("("{ARGS_L1a}*")")
-ARGS_L2 "("({ARGS_L0}|[^()]|{ARGS_L1a}|{ARGS_L1})*")"
-ARGS {BS}({ARGS_L0}|{ARGS_L1}|{ARGS_L2})
-
-NUM_TYPE (complex|integer|logical|real)
-LOG_OPER (\.and\.|\.eq\.|\.eqv\.|\.ge\.|\.gt\.|\.le\.|\.lt\.|\.ne\.|\.neqv\.|\.or\.|\.not\.)
-KIND {ARGS}
-CHAR (CHARACTER{ARGS}?|CHARACTER{BS}"*"({BS}[0-9]+|{ARGS}))
-TYPE_SPEC (({NUM_TYPE}({BS}"*"{BS}[0-9]+)?)|({NUM_TYPE}{KIND})|DOUBLE{BS_}COMPLEX|DOUBLE{BS_}PRECISION|{CHAR}|TYPE{ARGS})
-
-INTENT_SPEC intent{BS}"("{BS}(in|out|in{BS}out){BS}")"
-ATTR_SPEC (ALLOCATABLE|DIMENSION{ARGS}|EXTERNAL|{INTENT_SPEC}|INTRINSIC|OPTIONAL|PARAMETER|POINTER|PRIVATE|PUBLIC|SAVE|TARGET|RECURSIVE|PURE|ELEMENTAL)
-ACCESS_SPEC (PRIVATE|PUBLIC)
-/* Assume that attribute statements are almost the same as attributes. */
-ATTR_STMT {ATTR_SPEC}|DIMENSION
-COMMANDS (DO|SELECT|CASE|WHERE|IF|THEN|ELSE|MODULE{BS_}PROCEDURE|CONTAINS|IMPLICIT{BS}NONE|CONTAINS|WRITE|READ|ALLOCATE|ALLOCATED|ASSOCIATED|DEALLOCATE|SIZE|END{BS}IF|END{BS}DO|WHILE|INQUIRE|OPEN|CLOSE|DATA)
-IGNORE (CALL)
-
-/* | */
-
-%option noyywrap
-%option stack
-%option caseless
-/*%option debug*/
-
-%x Start
-%x SubCall
-%x FuncDef
-%x ClassName
-%x ClassVar
-%x Subprog
-%x DocBlock
-%x Use
-%x UseOnly
-%x TypeDecl
-%x Declaration
-%x DeclContLine
-%x Parameterlist
-%x String
-
-%%
- /*==================================================================*/
-
- /*-------- ignore ------------------------------------------------------------*/
-
-<Start>{IGNORE}/{BS}"("? { // do not search keywords, intrinsics... TODO: complete list
- codifyLines(yytext);
- }
- /*-------- inner construct ---------------------------------------------------*/
-
-<Start>{COMMANDS}/[,( \t\n].* { // hightlight rest of fortran statements
- /* font class is defined e.g. in doxygen.css */
- startFontClass("keyword");
- codifyLines(yytext);
- endFontClass();
- }
-<Start>"end"({BS_}{COMMANDS})?/[ \t\n] {
- startFontClass("keyword");
- codifyLines(yytext);
- endFontClass();
- }
-
- /*-------- use statement -------------------------------------------*/
-<Start>"use"{BS_} {
- codifyLines(yytext);
- yy_push_state(YY_START);
- BEGIN(Use);
- }
-<Use>{ID} {
- startFontClass("keywordflow");
- codifyLines(yytext);
- endFontClass();
-
- /* append module name to use dict */
- useEntry = new UseEntry();
- useEntry->module = yytext;
- useMembers->append(yytext, useEntry);
- addUse(yytext);
- }
-<Use>,{BS}"ONLY" { // TODO: rename
- codifyLines(yytext);
- yy_push_state(YY_START);
- BEGIN(UseOnly);
- }
-<UseOnly>{BS},{BS} { codifyLines(yytext); }
-<UseOnly>{ID} {
- codifyLines(yytext);
- useEntry->onlyNames.append(yytext);
- }
-<Use,UseOnly>"\n" {
- unput(*yytext);
- yy_pop_state();
- }
-
- /*-------- fortran module -----------------------------------------*/
-<Start>("block"{BS}"data"|"program"|"module"|"type"|"interface")/{BS_}|({COMMA}{ACCESS_SPEC})|\n { //
- startScope();
- startFontClass("keyword");
- codifyLines(yytext);
- endFontClass();
- yy_push_state(YY_START);
- BEGIN(ClassName);
- if (!stricmp(yytext,"module")) currentModule="module";
- }
-<ClassName>{ID} {
- if (currentModule == "module") currentModule=yytext;
- generateLink(*g_code,yytext);
- yy_pop_state();
- }
-<ClassName>\n { // interface may be without name
- yy_pop_state();
- REJECT;
- }
-<Start>"end"({BS_}"module").* { // just reset currentModule, rest is done in following rule
- currentModule=0;
- REJECT;
- }
-<Start>^{BS}"end"({BS}("program"|"module"|"type"|"interface")({BS_}{ID})?)?{BS}/(\n|!) { //
- endScope();
- startFontClass("keyword");
- codifyLines(yytext);
- endFontClass();
- }
-
- /*-------- subprog definition -------------------------------------*/
-<Start>{TYPE_SPEC}{BS}/{SUBPROG}{BS_} { // TYPE_SPEC is for old function style function result
- startFontClass("keyword");
- codifyLines(yytext);
- endFontClass();
- }
-<Start>{SUBPROG}{BS_} { // Fortran subroutine or function found
- startFontClass("keyword");
- codifyLines(yytext);
- endFontClass();
- yy_push_state(YY_START);
- BEGIN(Subprog);
- }
-<Subprog>{ID} { // subroutine/function name
- // fprintf(stderr, "===> start subprogram %s\n", yytext);
- startScope();
- generateLink(*g_code,yytext);
- }
-<Subprog>"(".* { // ignore rest of line
- codifyLines(yytext);
- }
-<Subprog>"\n" { codifyLines(yytext);
- yy_pop_state();
- }
-<Start>^{BS}"end"({BS}{SUBPROG}({BS_}{ID})?)?{BS}/(\n|!) { // Fortran subroutine or function ends
- //cout << "===> end function " << yytext << endl;
- endScope();
- startFontClass("keyword");
- codifyLines(yytext);
- endFontClass();
- }
- /*-------- variable declaration ----------------------------------*/
-<Start>"TYPE"{BS}"(" {
- yy_push_state(YY_START);
- BEGIN(TypeDecl);
- startFontClass("keywordtype");
- g_code->codify(yytext);
- endFontClass();
- }
-<TypeDecl>{ID} { // link type
- g_insideBody=TRUE;
- generateLink(*g_code,yytext);
- g_insideBody=FALSE;
- }
-<TypeDecl>")" {
- BEGIN(Declaration);
- startFontClass("keywordtype");
- g_code->codify(yytext);
- endFontClass();
- }
-<Start>{TYPE_SPEC}/[,:( ] {
- yy_push_state(YY_START);
- BEGIN(Declaration);
- startFontClass("keywordtype");
- g_code->codify(yytext);
- endFontClass();
- }
-<Start>{ATTR_SPEC} {
- startFontClass("keywordtype");
- g_code->codify(yytext);
- endFontClass();
- }
-<Declaration>({TYPE_SPEC}|{ATTR_SPEC})/[,:( ] { //| variable deklaration
- startFontClass("keywordtype");
- g_code->codify(yytext);
- endFontClass();
- }
-<Declaration>{ID} { // local var
- g_code->codify(yytext);
- if (g_currentMemberDef && g_currentMemberDef->isFunction())
- addLocalVar(yytext);
- }
-<Declaration>[(] { // start of array specification
- bracketCount++;
- g_code->codify(yytext);
- }
-
-<Declaration>[)] { // end array specification
- bracketCount--;
- g_code->codify(yytext);
- }
-
-<Declaration>"&" { // continuation line
- yy_push_state(YY_START);
- BEGIN(DeclContLine);
- }
-<DeclContLine>"\n" { // declaration not yet finished
- codifyLines(yytext);
- bracketCount = 0;
- yy_pop_state();
- }
-<Declaration>"\n" { // end declaration line
- codifyLines(yytext);
- bracketCount = 0;
- yy_pop_state();
- }
-
- /*-------- subprog calls -----------------------------------------*/
-
-<Start>"call"{BS_} {
- codifyLines(yytext);
- yy_push_state(YY_START);
- BEGIN(SubCall);
- }
-<SubCall>{ID} { // subroutine call
- g_insideBody=TRUE;
- generateLink(*g_code, yytext);
- g_insideBody=FALSE;
- yy_pop_state();
- }
-<Start>{ID}{BS}/"(" { // function call
- g_insideBody=TRUE;
- generateLink(*g_code, yytext);
- g_insideBody=FALSE;
- }
-
- /*-------- comments ---------------------------------------------------*/
-<Start>\n?{BS}"!>" { // start comment line or comment block
- yy_push_state(YY_START);
- BEGIN(DocBlock);
- docBlock=yytext;
- }
-
-<DocBlock>.* { // contents of current comment line
- docBlock+=yytext;
- }
-<DocBlock>"\n"{BS}("!>"|"!"+) { //| comment block (next line is also comment line)
- docBlock+=yytext;
- }
-<DocBlock>"\n" { // comment block ends at the end of this line
- docBlock+=yytext;
- // remove special comment (default config)
- if (Config_getBool("STRIP_CODE_COMMENTS"))
- {
- g_yyLineNr+=((QCString)docBlock).contains('\n');
- endCodeLine();
- if (g_yyLineNr<g_inputLines)
- {
- startCodeLine();
- }
- }
- else // do not remove comment
- {
- startFontClass("comment");
- codifyLines(docBlock);
- endFontClass();
- }
- yy_pop_state();
- }
-
-<*>"!"[^>\n].*|"!"$ { // normal comment
- if(YY_START == String) REJECT; // ignore in strings
- startFontClass("comment");
- codifyLines(yytext);
- endFontClass();
- }
-
-<*>^[Cc*].* { // normal comment
- if(! g_isFixedForm) REJECT;
-
- startFontClass("comment");
- codifyLines(yytext);
- endFontClass();
- }
-
- /*------ preprocessor --------------------------------------------*/
-<Start>"#".*\n { startFontClass("preprocessor");
- codifyLines(yytext);
- endFontClass();
- }
- /*------ variable references? -------------------------------------*/
-
-<Start>"%"{BS}{ID} { // ignore references to elements
- g_code->codify(yytext);
- }
-<Start>{ID} {
- g_insideBody=TRUE;
- generateLink(*g_code, yytext);
- g_insideBody=FALSE;
- }
- /*------ strings --------------------------------------------------*/
-<*>"\\\\" { str+=yytext; /* ignore \\ */}
-<*>"\\\""|\\\' { str+=yytext; /* ignore \" */}
-
-<String>\"|\' { // string ends with next quote without previous backspace
- if(yytext[0]!=stringStartSymbol) REJECT; // single vs double quote
- str+=yytext;
- startFontClass("stringliteral");
- codifyLines(str);
- endFontClass();
- yy_pop_state();
- }
-<String>. {str+=yytext;}
-
-<*>\"|\' { /* string starts */
- /* if(YY_START == StrIgnore) REJECT; // ignore in simple comments */
- yy_push_state(YY_START);
- stringStartSymbol=yytext[0]; // single or double quote
- BEGIN(String);
- str=yytext;
- }
- /*-----------------------------------------------------------------------------*/
-
-<*>\n {
- codifyLines(yytext);
- }
-<*>. {
- g_code->codify(yytext);
- }
-<*>{LOG_OPER} { // Fortran logical comparison keywords
- g_code->codify(yytext);
- }
-%%
-
-/*@ ----------------------------------------------------------------------------
- */
-
-/*===================================================================*/
-
-
-void resetFortranCodeParserState() {}
-
-void parseFortranCode(CodeOutputInterface &od,const char *className,const QCString &s,
- bool exBlock, const char *exName,FileDef *fd,
- int startLine,int endLine,bool inlineFragment,
- MemberDef *memberDef,bool)
-{
- //printf("***parseCode() exBlock=%d exName=%s fd=%p\n",exBlock,exName,fd);
-
- // used parameters
- (void)memberDef;
- (void)className;
-
- if (s.isEmpty()) return;
- g_code = &od;
- g_inputString = s;
- g_inputPosition = 0;
- g_isFixedForm = recognizeFixedForm((const char*)s);
- g_currentFontClass = 0;
- g_needsTermination = FALSE;
- if (endLine!=-1)
- g_inputLines = endLine+1;
- else
- g_inputLines = countLines();
-
- if (startLine!=-1)
- g_yyLineNr = startLine;
- else
- g_yyLineNr = 1;
-
- g_exampleBlock = exBlock;
- g_exampleName = exName;
- g_sourceFileDef = fd;
- if (exBlock && fd==0)
- {
- // create a dummy filedef for the example
- g_sourceFileDef = new FileDef("",exName);
- }
- if (g_sourceFileDef)
- {
- setCurrentDoc(g_sourceFileDef->name(),g_sourceFileDef->getSourceFileBase());
- }
- g_currentDefinition = 0;
- g_currentMemberDef = 0;
- if (!g_exampleName.isEmpty())
- {
- g_exampleFile = convertNameToFile(g_exampleName+"-example");
- }
- g_includeCodeFragment = inlineFragment;
- startCodeLine();
- g_parmName.resize(0);
- g_parmType.resize(0);
- fcodeYYrestart( fcodeYYin );
- BEGIN( Start );
- fcodeYYlex();
- if (g_needsTermination)
- {
- endFontClass();
- g_code->endCodeLine();
- }
- if (exBlock && g_sourceFileDef)
- {
- // delete the temporary file definition used for this example
- delete g_sourceFileDef;
- g_sourceFileDef=0;
- }
- return;
-}
-
-#if !defined(YY_FLEX_SUBMINOR_VERSION)
-extern "C" { // some bogus code to keep the compiler happy
- void fcodeYYdummy() { yy_flex_realloc(0,0); }
-}
-#elif YY_FLEX_SUBMINOR_VERSION<33
-#error "You seem to be using a version of flex newer than 2.5.4 but older than 2.5.33. These versions do NOT work with doxygen! Please use version <=2.5.4 or >=2.5.33 or expect things to be parsed wrongly!"
-#else
-extern "C" { // some bogus code to keep the compiler happy
- void fcodeYYdummy() { yy_top_state(); }
-}
-#endif
-
diff --git a/trunk/src/fortranscanner.h b/trunk/src/fortranscanner.h
deleted file mode 100644
index 392a75d..0000000
--- a/trunk/src/fortranscanner.h
+++ /dev/null
@@ -1,51 +0,0 @@
-/******************************************************************************
- *
- *
- *
- * Copyright (C) 1997-2012 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.
- *
- */
-
-#ifndef SCANNER_FORTRAN_H
-#define SCANNER_FORTRAN_H
-
-#include "parserintf.h"
-
-/** \brief Fortran language parser using state-based lexical scanning.
- *
- * This is the Fortran language parser for doxygen.
- */
-class FortranLanguageScanner : public ParserInterface
-{
- public:
- virtual ~FortranLanguageScanner() {}
- void parseInput(const char *fileName,
- const char *fileBuf,
- Entry *root);
- bool needsPreprocessing(const QCString &extension);
- void parseCode(CodeOutputInterface &codeOutIntf,
- const char *scopeName,
- const QCString &input,
- bool isExampleBlock,
- const char *exampleName=0,
- FileDef *fileDef=0,
- int startLine=-1,
- int endLine=-1,
- bool inlineFragment=FALSE,
- MemberDef *memberDef=0,
- bool showLineNumbers=TRUE
- );
- void resetCodeParserState();
- void parsePrototype(const char *text);
-};
-
-#endif
diff --git a/trunk/src/fortranscanner.l b/trunk/src/fortranscanner.l
deleted file mode 100644
index 0a11483..0000000
--- a/trunk/src/fortranscanner.l
+++ /dev/null
@@ -1,2252 +0,0 @@
-/* -*- mode: fundamental; indent-tabs-mode: 1; -*- */
-/*****************************************************************************
- * Parser for Fortran90 F subset
- *
- * Copyright (C) by Anke Visser
- * based on the work of 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.
- *
- */
-
-/* Developer notes.
- *
- * - Consider using startScope(), endScope() functions with module, program,
- * subroutine or any other scope in fortran program.
- *
- * - Symbol modifiers (attributes) are collected using SymbolModifiers |= operator during
- * substructure parsing. When substructure ends all modifiers are applied to actual
- * entries in applyModifiers() functions.
- *
- * - How case insensitiveness should be handled in code?
- * On one side we have arg->name and entry->name, on another side modifierMap[name].
- * In entries and arguments case is the same as in code, in modifier map case is lowered and
- * then it is compared to lowered entry/argument names.
- *
- * - Do not like constructs like aa{BS} or {BS}bb. Should try to handle blank space
- * with separate rule?: It seems it is often necessary, because we may parse something like
- * "functionA" or "MyInterface". So constructs like `(^|[ \t])interface({BS_}{ID})?/[ \t\n]'
- * are desired.
- *
- * - Must track yyLineNr when using REJECT, unput() or similar commands.
- */
-
-%{
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <assert.h>
-#include <ctype.h>
-
-#include "qtbc.h"
-#include <qarray.h>
-#include <qstack.h>
-#include <qregexp.h>
-#include <unistd.h>
-#include <qfile.h>
-#include <qmap.h>
-
-#include "fortranscanner.h"
-#include "entry.h"
-#include "message.h"
-#include "config.h"
-#include "doxygen.h"
-#include "util.h"
-#include "defargs.h"
-#include "language.h"
-#include "commentscan.h"
-#include "fortrancode.h"
-#include "pre.h"
-#include "arguments.h"
-
-#define YY_NEVER_INTERACTIVE 1
-
-class Arguments;
-
-enum ScanVar { V_IGNORE, V_VARIABLE, V_PARAMETER};
-enum InterfaceType { IF_NONE, IF_SPECIFIC, IF_GENERIC, IF_ABSTRACT };
-
-// {{{ ----- Helper structs -----
-//! Holds modifiers (ie attributes) for one symbol (variable, function, etc)
-struct SymbolModifiers {
- enum Protection {NONE_P, PUBLIC, PRIVATE};
- enum Direction {NONE_D, IN, OUT, INOUT};
-
- //!< This is only used with function return value.
- QCString type, returnName;
- Protection protection;
- Direction direction;
- bool optional;
- QCString dimension;
- bool allocatable;
- bool external;
- bool intrinsic;
- bool parameter;
- bool pointer;
- bool target;
- bool save;
- bool deferred;
- bool nonoverridable;
- bool nopass;
- bool pass;
- QCString passVar;
-
- SymbolModifiers() : type(), returnName(), protection(NONE_P), direction(NONE_D),
- optional(FALSE), dimension(), allocatable(FALSE),
- external(FALSE), intrinsic(FALSE), parameter(FALSE),
- pointer(FALSE), target(FALSE), save(FALSE), deferred(FALSE), nonoverridable(FALSE),
- nopass(FALSE), pass(FALSE), passVar() {}
-
- SymbolModifiers& operator|=(const SymbolModifiers &mdfs);
- SymbolModifiers& operator|=(QCString mdfrString);
-};
-
-//ostream& operator<<(ostream& out, const SymbolModifiers& mdfs);
-
-static const char *directionStrs[] =
-{
- "", "intent(in)", "intent(out)", "intent(inout)"
-};
-static const char *directionParam[] =
-{
- "", "[in]", "[out]", "[in,out]"
-};
-
-// }}}
-
-/* -----------------------------------------------------------------
- *
- * statics
- */
-static ParserInterface *g_thisParser;
-static const char * inputString;
-static int inputPosition;
-static bool isFixedForm;
-static QCString inputStringPrepass; ///< Input string for prepass of line cont. '&'
-static QCString inputStringSemi; ///< Input string after command separetor ';'
-static unsigned int inputPositionPrepass;
-static int lineCountPrepass = 0;
-
-static QList<Entry> subrCurrent;
-
-struct CommentInPrepass {
- int column;
- QCString str;
- CommentInPrepass(int column, QCString str) : column(column), str(str) {}
-};
-static QList<CommentInPrepass> comments;
-
-#define MAX_INCLUDE_DEPTH 10
-YY_BUFFER_STATE include_stack[MAX_INCLUDE_DEPTH];
-int include_stack_ptr = 0;
-
-static QFile inputFile;
-static QCString yyFileName;
-static int yyLineNr = 1 ;
-static int yyColNr = 0 ;
-static Entry* current_root = 0 ;
-static Entry* global_root = 0 ;
-static Entry* file_root = 0 ;
-static Entry* current = 0 ;
-static Entry* last_entry = 0 ;
-static ScanVar v_type = V_IGNORE; // type of parsed variable
-static QList<Entry> moduleProcedures; // list of all interfaces which contain unresolved
- // module procedures
-static QCString docBlock;
-static QCString docBlockName;
-static bool docBlockInBody;
-static bool docBlockJavaStyle;
-
-static MethodTypes mtype;
-static bool gstat;
-static Specifier virt;
-
-static QCString debugStr;
-static QCString result; // function result
-static Argument *parameter; // element of parameter list
-static QCString argType; // fortran type of an argument of a parameter list
-static QCString argName; // last identifier name in variable list
-static QCString initializer; // initial value of a variable
-static int initializerArrayScope; // number if nested array scopes in initializer
-static int initializerScope; // number if nested function calls in initializer
-static QCString useModuleName; // name of module in the use statement
-static Protection defaultProtection;
-static Protection typeProtection;
-static int typeMode = false;
-static InterfaceType ifType = IF_NONE;
-static bool functionLine = FALSE;
-
-static char stringStartSymbol; // single or double quote
-
-//! Accumulated modifiers of current statement, eg variable declaration.
-static SymbolModifiers currentModifiers;
-//! Holds program scope->symbol name->symbol modifiers.
-static QMap<Entry*,QMap<QCString,SymbolModifiers> > modifiers;
-
-//-----------------------------------------------------------------------------
-
-static int yyread(char *buf,int max_size);
-static void startCommentBlock(bool);
-static void handleCommentBlock(const QCString &doc,bool brief);
-static void subrHandleCommentBlock(const QCString &doc,bool brief);
-static void addCurrentEntry();
-static void addModule(const char *name, bool isModule=FALSE);
-static void addSubprogram(const char *text);
-static void addInterface(QCString name, InterfaceType type);
-static Argument *getParameter(const QCString &name);
-static void scanner_abort();
-
-static void startScope(Entry *scope);
-static bool endScope(Entry *scope, bool isGlobalRoot=FALSE);
-static QCString getFullName(Entry *e);
-//static bool isTypeName(QCString name);
-static void resolveModuleProcedures(QList<Entry> &moduleProcedures, Entry *current_root);
-static int getAmpersandAtTheStart(const char *buf, int length);
-static int getAmpOrExclAtTheEnd(const char *buf, int length);
-static void truncatePrepass(int index);
-static void pushBuffer(QCString &buffer);
-static void popBuffer();
-//static void extractPrefix(QCString& text);
-static QCString extractFromParens(const QCString name);
-static CommentInPrepass* locatePrepassComment(int from, int to);
-static void updateVariablePrepassComment(int from, int to);
-static void newLine();
-
-//-----------------------------------------------------------------------------
-#undef YY_INPUT
-#define YY_INPUT(buf,result,max_size) result=yyread(buf,max_size);
-#define YY_USER_ACTION yyColNr+=yyleng;
-//-----------------------------------------------------------------------------
-
-%}
-
- //-----------------------------------------------------------------------------
- //-----------------------------------------------------------------------------
-IDSYM [a-z_A-Z0-9]
-NOTIDSYM [^a-z_A-Z0-9]
-SEPARATE [:, \t]
-ID [a-z_A-Z%]+{IDSYM}*
-ID_ [a-z_A-Z%]*{IDSYM}*
-PP_ID {ID}
-LABELID [a-z_A-Z]+[a-z_A-Z0-9\-]*
-SUBPROG (subroutine|function)
-B [ \t]
-BS [ \t]*
-BS_ [ \t]+
-COMMA {BS},{BS}
-ARGS_L0 ("("[^)]*")")
-ARGS_L1a [^()]*"("[^)]*")"[^)]*
-ARGS_L1 ("("{ARGS_L1a}*")")
-ARGS_L2 "("({ARGS_L0}|[^()]|{ARGS_L1a}|{ARGS_L1})*")"
-ARGS {BS}({ARGS_L0}|{ARGS_L1}|{ARGS_L2})
-NOARGS {BS}"\n"
-
-NUM_TYPE (complex|integer|logical|real)
-LOG_OPER (\.and\.|\.eq\.|\.eqv\.|\.ge\.|\.gt\.|\.le\.|\.lt\.|\.ne\.|\.neqv\.|\.or\.|\.not\.)
-KIND {ARGS}
-CHAR (CHARACTER{ARGS}?|CHARACTER{BS}"*"({BS}[0-9]+|{ARGS}))
-TYPE_SPEC (({NUM_TYPE}({BS}"*"{BS}[0-9]+)?)|({NUM_TYPE}{KIND})|DOUBLE{BS_}COMPLEX|DOUBLE{BS_}PRECISION|{CHAR}|TYPE{ARGS}|CLASS{ARGS}|PROCEDURE{ARGS}?)
-
-INTENT_SPEC intent{BS}"("{BS}(in|out|in{BS}out){BS}")"
-ATTR_SPEC (ALLOCATABLE|DIMENSION{ARGS}|EXTERNAL|{INTENT_SPEC}|INTRINSIC|OPTIONAL|PARAMETER|POINTER|PRIVATE|PUBLIC|SAVE|TARGET|NOPASS|PASS{ARGS}?|DEFERRED|NON_OVERRIDABLE)
-ACCESS_SPEC (PRIVATE|PUBLIC)
-LANGUAGE_BIND_SPEC BIND{BS}"("{BS}C{BS}(,{BS}NAME{BS}"="{BS}"\""(.*)"\""{BS})?")"
-/* Assume that attribute statements are almost the same as attributes. */
-ATTR_STMT {ATTR_SPEC}|DIMENSION|{ACCESS_SPEC}
-
-CONTAINS CONTAINS
-PREFIX (RECURSIVE{BS_}|PURE{BS_}|ELEMENTAL{BS_}){0,2}(RECURSIVE|PURE|ELEMENTAL)?
-
-%option noyywrap
-%option stack
-%option caseless
-/*%option debug */
-
- //---------------------------------------------------------------------------------
-
- /** fortran parsing states */
-%x Subprog
-%x SubprogPrefix
-%x Parameterlist
-%x SubprogBody
-%x SubprogBodyContains
-%x Start
-%x Comment
-%x Module
-%x Program
-%x ModuleBody
-%x ModuleBodyContains
-%x AttributeList
-%x Variable
-%x Initialization
-%x ArrayInitializer
-%x Typedef
-%x TypedefBody
-%x TypedefBodyContains
-%x InterfaceBody
-%x StrIgnore
-%x String
-%x Use
-%x UseOnly
-%x ModuleProcedure
-
-%x Prepass
-
- /** comment parsing states */
-%x DocBlock
-%x DocBackLine
-%x EndDoc
-
-%x BlockData
-%%
-
- /*-----------------------------------------------------------------------------------*/
-
-<*>^.*\n { // prepass: look for line continuations
- functionLine = FALSE;
-
- //fprintf(stderr, "---%s", yytext);
-
- int indexStart = getAmpersandAtTheStart(yytext, yyleng);
- int indexEnd = getAmpOrExclAtTheEnd(yytext, yyleng);
- if (indexEnd>=0 && yytext[indexEnd]!='&') //we are only interested in amp
- indexEnd=-1;
-
- if(indexEnd<0){ // ----- no ampersand as line continuation
- if(YY_START == Prepass) { // last line in "continuation"
-
- // Only take input after initial ampersand
- inputStringPrepass+=(const char*)(yytext+(indexStart+1));
-
- //printf("BUFFER:%s\n", (const char*)inputStringPrepass);
- pushBuffer(inputStringPrepass);
- yyColNr = 0;
- yy_pop_state();
- } else { // simple line
- yyColNr = 0;
- REJECT;
- }
-
- } else { // ----- line with continuation
- if(YY_START != Prepass) {
- comments.setAutoDelete(TRUE);
- comments.clear();
- yy_push_state(Prepass);
- }
-
- int length = inputStringPrepass.length();
-
- // Only take input after initial ampersand
- inputStringPrepass+=(const char*)(yytext+(indexStart+1));
- lineCountPrepass ++;
-
- // cut off & and remove following comment if present
- truncatePrepass(length+indexEnd-(indexStart+1));
- }
-
- }
-
-
- /*------ ignore strings that are not initialization strings */
-<*>"\\\\" { if (yy_top_state() == Initialization
- || yy_top_state() == ArrayInitializer)
- initializer+=yytext;
- }
-<*>"\\\""|\\\' { if (yy_top_state() == Initialization
- || yy_top_state() == ArrayInitializer)
- initializer+=yytext;
- }
-<String>\"|\' { // string ends with next quote without previous backspace
- if (yytext[0]!=stringStartSymbol) { yyColNr -= yyleng; REJECT; } // single vs double quote
- if (yy_top_state() == Initialization
- || yy_top_state() == ArrayInitializer)
- initializer+=yytext;
- yy_pop_state();
- }
-<String>. { if (yy_top_state() == Initialization
- || yy_top_state() == ArrayInitializer)
- initializer+=yytext;
- }
-<*>\"|\' { /* string starts */
- if (YY_START == StrIgnore) { yyColNr -= yyleng; REJECT; }; // ignore in simple comments
- yy_push_state(YY_START);
- if (yy_top_state() == Initialization
- || yy_top_state() == ArrayInitializer)
- initializer+=yytext;
- stringStartSymbol=yytext[0]; // single or double quote
- BEGIN(String);
- }
-
- /*------ ignore simple comment (not documentation comments) */
-
-<*>"!"/[^<>\n] { if (YY_START == String) { yyColNr -= yyleng; REJECT; } // "!" is ignored in strings
- // skip comment line (without docu comments "!>" "!<" )
- /* ignore further "!" and ignore comments in Strings */
- if ((YY_START != StrIgnore) && (YY_START != String))
- {
- yy_push_state(YY_START);
- BEGIN(StrIgnore);
- debugStr="*!";
- //fprintf(stderr,"start comment %d\n",yyLineNr);
- }
- }
-<StrIgnore>.?/\n { yy_pop_state(); // comment ends with endline character
- //fprintf(stderr,"end comment %d %s\n",yyLineNr,debugStr.data());
- } // comment line ends
-<StrIgnore>. { debugStr+=yytext; }
-
-
- /*------ use handling ------------------------------------------------------------*/
-
-<Start,ModuleBody,SubprogBody>"use"{BS_} {
- if(YY_START == Start)
- {
- addModule(NULL);
- yy_push_state(ModuleBody); //anon program
- }
- yy_push_state(Use);
- }
-<Use>{ID} {
- //fprintf(stderr,"using dir %s\n",yytext);
- current->name=yytext;
- current->fileName = yyFileName;
- current->section=Entry::USINGDIR_SEC;
- current_root->addSubEntry(current);
- current = new Entry;
- current->lang = SrcLangExt_Fortran;
- yy_pop_state();
- }
-<Use>{ID}/, {
- useModuleName=yytext;
- }
-<Use>,{BS}"ONLY" { BEGIN(UseOnly);
- }
-<UseOnly>{BS},{BS} {}
-<UseOnly>{ID} {
- current->name= useModuleName+"::"+yytext;
- current->fileName = yyFileName;
- current->section=Entry::USINGDECL_SEC;
- current_root->addSubEntry(current);
- current = new Entry ;
- current->lang = SrcLangExt_Fortran;
- }
-<Use,UseOnly>"\n" {
- yyColNr -= 1;
- unput(*yytext);
- yy_pop_state();
- }
-
- /* INTERFACE definitions */
-<Start,ModuleBody,SubprogBody>{
-^{BS}interface{IDSYM}+ { /* variable with interface prefix */ }
-^{BS}interface { ifType = IF_SPECIFIC;
- yy_push_state(InterfaceBody);
- // do not start a scope here, every
- // interface body is a scope of its own
- }
-
-^{BS}abstract{BS_}interface { ifType = IF_ABSTRACT;
- yy_push_state(InterfaceBody);
- // do not start a scope here, every
- // interface body is a scope of its own
- }
-
-^{BS}interface{BS_}{ID}{ARGS}? { ifType = IF_GENERIC;
- yy_push_state(InterfaceBody);
-
- // extract generic name
- QCString name = QCString(yytext).stripWhiteSpace();
- name = name.right(name.length() - 9).stripWhiteSpace();
- addInterface(name, ifType);
-
- startScope(last_entry);
- }
-}
-
-<InterfaceBody>^{BS}end{BS}interface({BS_}{ID})? {
- // end scope only if GENERIC interface
- if (ifType == IF_GENERIC && !endScope(current_root))
- yyterminate();
-
- ifType = IF_NONE;
- yy_pop_state();
- }
-<InterfaceBody>module{BS}procedure { yy_push_state(YY_START);
- BEGIN(ModuleProcedure);
- }
-<ModuleProcedure>{ID} { if (ifType == IF_ABSTRACT || ifType == IF_SPECIFIC)
- {
- addInterface(yytext, ifType);
- startScope(last_entry);
- }
-
- current->section = Entry::FUNCTION_SEC ;
- current->name = yytext;
- moduleProcedures.append(current);
- addCurrentEntry();
- }
-<ModuleProcedure>"\n" { yyColNr -= 1;
- unput(*yytext);
- yy_pop_state();
- }
-<InterfaceBody>. {}
-
- /*-- Contains handling --*/
-<Start>^{BS}{CONTAINS}/({BS}|\n|!) {
- if(YY_START == Start)
- {
- addModule(NULL);
- yy_push_state(ModuleBodyContains); //anon program
- }
- }
-<ModuleBody>^{BS}{CONTAINS}/({BS}|\n|!) { BEGIN(ModuleBodyContains); }
-<SubprogBody>^{BS}{CONTAINS}/({BS}|\n|!) { BEGIN(SubprogBodyContains); }
-<TypedefBody>^{BS}{CONTAINS}/({BS}|\n|!) { BEGIN(TypedefBodyContains); }
-
- /*------ module handling ------------------------------------------------------------*/
-<Start>block{BS}data{BS}{ID_} { //
- v_type = V_IGNORE;
- yy_push_state(BlockData);
- defaultProtection = Public;
- }
-<Start>module|program{BS_} { //
- v_type = V_IGNORE;
- if(yytext[0]=='m' || yytext[0]=='M')
- yy_push_state(Module);
- else
- yy_push_state(Program);
- defaultProtection = Public;
- }
-<BlockData>^{BS}"end"({BS}(block{BS}data)({BS_}{ID})?)?{BS}/(\n|!) { // end block data
- //if (!endScope(current_root))
- // yyterminate();
- defaultProtection = Public;
- yy_pop_state();
- }
-<Start,ModuleBody,ModuleBodyContains>^{BS}"end"({BS}(module|program)({BS_}{ID})?)?{BS}/(\n|!) { // end module
- resolveModuleProcedures(moduleProcedures, current_root);
- if (!endScope(current_root))
- yyterminate();
- defaultProtection = Public;
- yy_pop_state();
- }
-<Module>{ID} {
- addModule(yytext, TRUE);
- BEGIN(ModuleBody);
- }
-
-<Program>{ID} {
- addModule(yytext, FALSE);
- BEGIN(ModuleBody);
- }
-
- /*------- access specification --------------------------------------------------------------------------*/
-
-<ModuleBody>private/{BS}(\n|"!") { defaultProtection = Private;
- current->protection = defaultProtection ;
- }
-<ModuleBody>public/{BS}(\n|"!") { defaultProtection = Public;
- current->protection = defaultProtection ;
- }
-
- /*------- type definition -------------------------------------------------------------------------------*/
-
-<Start,ModuleBody>^{BS}type {
- if(YY_START == Start)
- {
- addModule(NULL);
- yy_push_state(ModuleBody); //anon program
- }
-
- yy_push_state(Typedef);
- current->protection = defaultProtection;
- typeProtection = defaultProtection;
- typeMode = true;
- }
-<Typedef>{
-{COMMA} {}
-
-{BS}"::"{BS} {}
-
-abstract {
- current->spec |= Entry::AbstractClass;
- }
-extends{ARGS} {
- QCString basename = extractFromParens(yytext);
- current->extends->append(new BaseInfo(basename, Public, Normal));
- }
-public {
- current->protection = Public;
- typeProtection = Public;
- }
-private {
- current->protection = Private;
- typeProtection = Private;
- }
-{LANGUAGE_BIND_SPEC} {
- /* ignored for now */
- }
-{ID} { /* type name found */
- current->section = Entry::CLASS_SEC;
- current->spec |= Entry::Struct;
- current->name = yytext;
- current->fileName = yyFileName;
- current->bodyLine = yyLineNr;
-
- /* if type is part of a module, mod name is necessary for output */
- if ((current_root) &&
- (current_root->section == Entry::CLASS_SEC
- || current_root->section == Entry::NAMESPACE_SEC))
- {
- current->name = current_root->name + "::" + current->name;
- }
-
- addCurrentEntry();
- startScope(last_entry);
- BEGIN(TypedefBody);
- }
-}
-
-<TypedefBodyContains>{ /* Type Bound Procedures */
-^{BS}PROCEDURE{ARGS}? {
- current->type = QCString(yytext).simplifyWhiteSpace();
- }
-^{BS}final {
- current->spec |= Entry::Final;
- current->type = QCString(yytext).simplifyWhiteSpace();
- }
-^{BS}generic {
- current->type = QCString(yytext).simplifyWhiteSpace();
- }
-{COMMA} {
- }
-{ATTR_SPEC} {
- currentModifiers |= QCString(yytext);
- }
-{BS}"::"{BS} {
- }
-{ID} {
- QCString name = yytext;
- modifiers[current_root][name.lower()] |= currentModifiers;
- current->section = Entry::FUNCTION_SEC;
- current->name = name;
- current->fileName = yyFileName;
- current->bodyLine = yyLineNr;
- addCurrentEntry();
- }
-{BS}"=>"[^(\n|\!)]* { /* Specific bindings come after the ID. */
- last_entry->args = yytext;
- }
-"\n" {
- currentModifiers = SymbolModifiers();
- newLine();
- docBlock.resize(0);
- }
-}
-
-
-<TypedefBody,TypedefBodyContains>{
-^{BS}"end"{BS}"type"({BS_}{ID})?{BS}/(\n|!) { /* end type definition */
- if (!endScope(current_root))
- yyterminate();
- typeMode = false;
- yy_pop_state();
- }
-}
-
- /*------- module/global/typedef variable ---------------------------------------------------*/
-
-<SubprogBody,SubprogBodyContains>^{BS}[0-9]*{BS}"end"({BS}{SUBPROG}({BS_}{ID})?)?{BS}/(\n|!) {
- //
- // ABSTRACT and specific interfaces are stored
- // in a scope of their own, even if multiple
- // are group in one INTERFACE/END INTERFACE block.
- //
- if (ifType == IF_ABSTRACT || ifType == IF_SPECIFIC)
- endScope(current_root);
-
- if (!endScope(current_root))
- yyterminate();
- subrCurrent.remove(0u);
- yy_pop_state() ;
- }
-<BlockData>{
-{ID} {
- }
-}
-<Start,ModuleBody,TypedefBody,SubprogBody>{
-^{BS}{TYPE_SPEC}/{SEPARATE} {
- /* variable declaration starts */
- if(YY_START == Start)
- {
- addModule(NULL);
- yy_push_state(ModuleBody); //anon program
- }
- argType = QCString(yytext).simplifyWhiteSpace();
- yy_push_state(AttributeList);
- }
- /* Dimitri: macro expansion should already be done during preprocessing not here!
-^{BS}{PP_ID}{KIND}? { // check for preprocessor symbol expand to type
- QCString str = yytext;
- str = str.stripWhiteSpace();
- //DefineDict* defines = getGlobalDefineDict();
- QCString name;
- int index = str.find("(");
- if (index != -1)
- name = str.left(index).stripWhiteSpace();
- else
- name = str;
-
- Define *define = 0; //(*defines)[name];
- if (define != 0 && isTypeName(define->definition))
- {
- argType = str;
- yy_push_state(AttributeList);
- }
- else
- {
- yyColNr -= yyleng;
- REJECT;
- }
- }
- */
-{ATTR_STMT}/{BS_}{ID} |
-{ATTR_STMT}/{BS}"::" {
- /* attribute statement starts */
- //fprintf(stderr,"5=========> Attribute statement: %s\n", yytext);
- QCString tmp = yytext;
- currentModifiers |= tmp.stripWhiteSpace();
- argType="";
- yy_push_state(YY_START);
- BEGIN( AttributeList ) ;
- }
-{ID} {
- }
-^{BS}"type"{BS_}"is" { }
-}
-<AttributeList>{
-{COMMA} {}
-{BS} {}
-{ATTR_SPEC}. { /* update current modifierswhen it is an ATTR_SPEC and not a variable name */
- /* bug_625519 */
- QChar chr = yytext[yyleng-1];
- if (chr.isLetter() || chr.isDigit() || (chr == '_'))
- {
- yyColNr -= yyleng;
- REJECT;
- }
- else
- {
- QCString tmp = yytext;
- tmp = tmp.left(tmp.length() - 1);
- yyColNr -= 1;
- unput(yytext[yyleng-1]);
- currentModifiers |= (tmp);
- }
- }
-"::" { /* end attribute list */
- BEGIN( Variable );
- }
-. { /* unknown attribute, consider variable name */
- //cout<<"start variables, unput "<<*yytext<<endl;
- yyColNr -= 1;
- unput(*yytext);
- BEGIN( Variable );
- }
-}
-
-<Variable>{BS} { }
-<Variable>{ID} { /* parse variable declaration */
- //cout << "5=========> got variable: " << argType << "::" << yytext << endl;
- /* work around for bug in QCString.replace (QCString works) */
- QCString name=yytext;
- /* remember attributes for the symbol */
- modifiers[current_root][name.lower()] |= currentModifiers;
- argName= name;
-
- v_type= V_IGNORE;
- if (!argType.isEmpty() && current_root->section!=Entry::FUNCTION_SEC)
- { // new variable entry
- v_type = V_VARIABLE;
- current->section = Entry::VARIABLE_SEC;
- current->name = argName;
- current->type = argType;
- current->fileName = yyFileName;
- current->bodyLine = yyLineNr; // used for source reference
- addCurrentEntry();
- }
- else if (!argType.isEmpty())
- { // declaration of parameter list: add type for corr. parameter
- parameter = getParameter(argName);
- if (parameter)
- {
- v_type= V_PARAMETER;
- if (!argType.isNull()) parameter->type=argType.stripWhiteSpace();
- if (!docBlock.isNull())
- {
- subrHandleCommentBlock(docBlock,TRUE);
- }
- }
- // save, it may be function return type
- if (parameter)
- {
- modifiers[current_root][name.lower()].type = argType;
- }
- else
- {
- if ((current_root->name.lower() == argName.lower()) ||
- (modifiers[current_root->parent()][current_root->name.lower()].returnName.lower() == argName.lower()))
- {
- int strt = current_root->type.find("function");
- QString lft;
- QString rght;
- if (strt != -1)
- {
- lft = "";
- rght = "";
- if (strt != 0) lft = current_root->type.left(strt).stripWhiteSpace();
- if ((current_root->type.length() - strt - strlen("function"))!= 0)
- {
- rght = current_root->type.right(current_root->type.length() - strt - strlen("function")).stripWhiteSpace();
- }
- current_root->type = lft;
- if (rght.length() > 0)
- {
- if (current_root->type.length() > 0) current_root->type += " ";
- current_root->type += rght;
- }
- if (argType.stripWhiteSpace().length() > 0)
- {
- if (current_root->type.length() > 0) current_root->type += " ";
- current_root->type += argType.stripWhiteSpace();
- }
- if (current_root->type.length() > 0) current_root->type += " ";
- current_root->type += "function";
- }
- else
- {
- current_root->type += " " + argType.stripWhiteSpace();
- }
- current_root->type = current_root->type.stripWhiteSpace();
- modifiers[current_root][name.lower()].type = current_root->type;
- }
- else
- {
- modifiers[current_root][name.lower()].type = argType;
- }
- }
- // any accumulated doc for argument should be emptied,
- // because it is handled other way and this doc can be
- // unexpectedly passed to the next member.
- current->doc.resize(0);
- current->brief.resize(0);
- }
- }
-<Variable>{ARGS} { /* dimension of the previous entry. */
- QCString name(argName);
- QCString attr("dimension");
- attr += yytext;
- modifiers[current_root][name] |= attr;
- }
-<Variable>{COMMA} { //printf("COMMA: %d<=..<=%d\n", yyColNr-yyleng, yyColNr);
- // locate !< comment
- updateVariablePrepassComment(yyColNr-yyleng, yyColNr);
- }
-<Variable>{BS}"=" { yy_push_state(YY_START);
- initializer="";
- initializerScope = initializerArrayScope = 0;
- BEGIN(Initialization);
- }
-<Variable>"\n" { currentModifiers = SymbolModifiers();
- yy_pop_state(); // end variable declaration list
- newLine();
- docBlock.resize(0);
- }
-<Variable>";".*"\n" { currentModifiers = SymbolModifiers();
- yy_pop_state(); // end variable declaration list
- docBlock.resize(0);
- inputStringSemi =(const char*)(QCString(" \n") + QCString(yytext+1)).data();
- yyLineNr--;
- pushBuffer(inputStringSemi);
- }
-<*>";".*"\n" {
- if (YY_START == Variable) REJECT; // Just be on the safe side
- if (YY_START == String) REJECT; // ";" ignored in strings
- if (YY_START == StrIgnore) REJECT; // ";" ignored in regular comments
- inputStringSemi =(const char*)(QCString(" \n") + QCString(yytext+1)).data();
- yyLineNr--;
- pushBuffer(inputStringSemi);
- }
-
-<Initialization,ArrayInitializer>"(/" { initializer+=yytext;
- initializerArrayScope++;
- BEGIN(ArrayInitializer); // initializer may contain comma
- }
-<ArrayInitializer>"/)" { initializer+=yytext;
- initializerArrayScope--;
- if(initializerArrayScope<=0)
- {
- initializerArrayScope = 0; // just in case
- BEGIN(Initialization);
- }
- }
-<ArrayInitializer>. { initializer+=yytext; }
-<Initialization>"(" { initializerScope++;
- initializer+=yytext;
- }
-<Initialization>")" { initializerScope--;
- initializer+=yytext;
- }
-<Initialization>{COMMA} { if (initializerScope == 0)
- {
- updateVariablePrepassComment(yyColNr-yyleng, yyColNr);
- yy_pop_state(); // end initialization
- if (v_type == V_VARIABLE) last_entry->initializer= initializer;
- }
- else
- initializer+=", ";
- }
-<Initialization>"\n"|"!" { //|
- yy_pop_state(); // end initialization
- if (v_type == V_VARIABLE) last_entry->initializer= initializer;
- yyColNr -= 1;
- unput(*yytext);
- }
-<Initialization>. { initializer+=yytext; }
-
- /*------ fortran subroutine/function handling ------------------------------------------------------------*/
- /* Start is initial condition */
-
-<Start,ModuleBody,SubprogBody,InterfaceBody,ModuleBodyContains,SubprogBodyContains>^{BS}({PREFIX}{BS_})?{TYPE_SPEC}{BS}/{SUBPROG}{BS_} {
- if (ifType == IF_ABSTRACT || ifType == IF_SPECIFIC)
- {
- addInterface("$interface$", ifType);
- startScope(last_entry);
- }
-
- // TYPE_SPEC is for old function style function result
- result = QCString(yytext).stripWhiteSpace();
- current->type = result;
- yy_push_state(SubprogPrefix);
- }
-
-<SubprogPrefix>{BS}{SUBPROG}{BS_} {
- // Fortran subroutine or function found
- v_type = V_IGNORE;
- result=yytext;
- result=result.stripWhiteSpace();
- addSubprogram(result);
- BEGIN(Subprog);
- }
-
-<Start,ModuleBody,SubprogBody,InterfaceBody,ModuleBodyContains,SubprogBodyContains>^{BS}({PREFIX}{BS_})?{SUBPROG}{BS_} {
- // Fortran subroutine or function found
- v_type = V_IGNORE;
- if (ifType == IF_ABSTRACT || ifType == IF_SPECIFIC)
- {
- addInterface("$interface$", ifType);
- startScope(last_entry);
- }
-
- result = QCString(yytext).stripWhiteSpace();
- addSubprogram(result);
- yy_push_state(Subprog);
- }
-
-<Subprog>{BS} { /* ignore white space */ }
-<Subprog>{ID} { current->name = yytext;
- //cout << "1a==========> got " << current->type << " " << yytext << " " << yyLineNr << endl;
- modifiers[current_root][current->name.lower()].returnName = current->name;
-
- if (ifType == IF_ABSTRACT || ifType == IF_SPECIFIC)
- {
- current_root->name.replace(QRegExp("\\$interface\\$"), yytext);
- }
-
- BEGIN(Parameterlist);
- }
-<Parameterlist>"(" { current->args = "("; }
-<Parameterlist>")" {
- current->args += ")";
- current->args = removeRedundantWhiteSpace(current->args);
- addCurrentEntry();
- startScope(last_entry);
- BEGIN(SubprogBody);
- }
-<Parameterlist>{COMMA}|{BS} { current->args += yytext;
- CommentInPrepass *c = locatePrepassComment(yyColNr-yyleng, yyColNr);
- if (c!=NULL) {
- if(current->argList->count()>0) {
- current->argList->at(current->argList->count()-1)->docs = c->str;
- }
- }
- }
-<Parameterlist>{ID} {
- //current->type not yet available
- QCString param = yytext;
- // std::cout << "3=========> got parameter " << param << std::endl;
- current->args += param;
- Argument *arg = new Argument;
- arg->name = param;
- arg->type = "";
- current->argList->append(arg);
- }
-<Parameterlist>{NOARGS} {
- newLine();
- //printf("3=========> without parameterlist \n");
- //current->argList = ;
- addCurrentEntry();
- startScope(last_entry);
- BEGIN(SubprogBody);
-}
-<SubprogBody>result{BS}\({BS}{ID} {
- if (functionLine)
- {
- result= yytext;
- result= result.right(result.length()-result.find("(")-1);
- result= result.stripWhiteSpace();
- modifiers[current_root->parent()][current_root->name.lower()].returnName = result;
- }
- //cout << "=====> got result " << result << endl;
- }
-
- /*---- documentation comments --------------------------------------------------------------------*/
-
-<Variable,SubprogBody,ModuleBody,TypedefBody>"!<" { /* backward docu comment */
- if (v_type != V_IGNORE) {
- current->docLine = yyLineNr;
- docBlockJavaStyle = FALSE;
- docBlock.resize(0);
- docBlockJavaStyle = Config_getBool("JAVADOC_AUTOBRIEF");
- startCommentBlock(TRUE);
- yy_push_state(DocBackLine);
- }
- }
-<DocBackLine>.* { // contents of current comment line
- docBlock+=yytext;
- }
-<DocBackLine>"\n"{BS}"!"("<"|"!"+) { // comment block (next line is also comment line)
- docBlock+="\n"; // \n is necessary for lists
- newLine();
- }
-<DocBackLine>"\n" { // comment block ends at the end of this line
- //cout <<"3=========> comment block : "<< docBlock << endl;
- yyColNr -= 1;
- unput(*yytext);
- if (v_type == V_VARIABLE)
- {
- Entry *tmp_entry = current;
- current = last_entry; // temporarily switch to the previous entry
- handleCommentBlock(docBlock,TRUE);
- current=tmp_entry;
- }
- else if (v_type == V_PARAMETER)
- {
- subrHandleCommentBlock(docBlock,TRUE);
- }
- yy_pop_state();
- docBlock.resize(0);
- }
-
-<Start,SubprogBody,ModuleBody,TypedefBody,InterfaceBody,ModuleBodyContains,SubprogBodyContains,TypedefBodyContains>"!>" {
- yy_push_state(YY_START);
- current->docLine = yyLineNr;
- docBlockJavaStyle = FALSE;
- docBlock.resize(0);
- docBlockJavaStyle = Config_getBool("JAVADOC_AUTOBRIEF");
- startCommentBlock(TRUE);
- BEGIN(DocBlock);
- //cout << "start DocBlock " << endl;
- }
-
-<DocBlock>.* { // contents of current comment line
- docBlock+=yytext;
- }
-<DocBlock>"\n"{BS}"!"(">"|"!"+) { // comment block (next line is also comment line)
- docBlock+="\n"; // \n is necessary for lists
- newLine();
- }
-<DocBlock>"\n" { // comment block ends at the end of this line
- //cout <<"3=========> comment block : "<< docBlock << endl;
- yyColNr -= 1;
- unput(*yytext);
- handleCommentBlock(docBlock,TRUE);
- yy_pop_state();
- }
-
- /*------------------------------------------------------------------------------------------------*/
-
-<*>"\n" {
- newLine();
- //if (debugStr.stripWhiteSpace().length() > 0) cout << "ignored text: " << debugStr << " state: " <<YY_START << endl;
- debugStr="";
- }
-
-
- /*---- error: EOF in wrong state --------------------------------------------------------------------*/
-
-<*><<EOF>> {
- if ( include_stack_ptr <= 0 ) {
- if (YY_START!=INITIAL && YY_START!=Start) {
- //fprintf(stderr,"==== Error: EOF reached in wrong state (end missing)");
- scanner_abort();
- }
- yyterminate();
- } else {
- popBuffer();
- }
- }
-<*>{LOG_OPER} { // Fortran logical comparison keywords
- }
-<*>. {
- //debugStr+=yytext;
- //printf("I:%c\n", *yytext);
- } // ignore remaining text
-
- /**********************************************************************************/
- /**********************************************************************************/
- /**********************************************************************************/
-%%
-//----------------------------------------------------------------------------
-
-#if 0
-static void extractPrefix(QCString &text)
-{
- int prefixIndex = 0;
- int curIndex = 0;
- bool cont = TRUE;
- const char* pre[] = {"RECURSIVE","PURE","ELEMENTAL"};
- while(cont)
- {
- cont = FALSE;
- for(unsigned int i=0; i<3; i++)
- {
- if((prefixIndex=text.find(pre[i], curIndex, FALSE))==0)
- {
- text.remove(0,strlen(pre[i]));
- text.stripWhiteSpace();
- cont = TRUE;
- }
- }
- }
-}
-#endif
-
-static void newLine() {
- yyLineNr++;
- yyLineNr+=lineCountPrepass;
- lineCountPrepass=0;
- comments.clear();
-}
-
-static CommentInPrepass* locatePrepassComment(int from, int to) {
- //printf("Locate %d-%d\n", from, to);
- for(uint i=0; i<comments.count(); i++) { // todo: optimize
- int c = comments.at(i)->column;
- //printf("Candidate %d\n", c);
- if (c>=from && c<=to) {
- // comment for previous variable or parameter
- return comments.at(i);
- }
- }
- return NULL;
-}
-
-static void updateVariablePrepassComment(int from, int to) {
- CommentInPrepass *c = locatePrepassComment(from, to);
- if (c!=NULL && v_type == V_VARIABLE) {
- last_entry->brief = c->str;
- } else if (c!=NULL && v_type == V_PARAMETER) {
- Argument *parameter = getParameter(argName);
- if (parameter) parameter->docs = c->str;
- }
-}
-
-static int getAmpersandAtTheStart(const char *buf, int length)
-{
- for(int i=0; i<length; i++) {
- switch(buf[i]) {
- case ' ':
- case '\t':
- break;
- case '&':
- return i;
- default:
- return -1;
- }
- }
- return -1;
-}
-
-/* Returns ampersand index, comment start index or -1 if neither exist.*/
-static int getAmpOrExclAtTheEnd(const char *buf, int length)
-{
- // Avoid ampersands in string and comments
- int parseState = Start;
- char quoteSymbol = 0;
- int ampIndex = -1;
- int commentIndex = -1;
-
- for(int i=0; i<length && parseState!=Comment; i++)
- {
- // When in string, skip backslashes
- // Legacy code, not sure whether this is correct?
- if(parseState==String)
- {
- if(buf[i]=='\\') i++;
- }
-
- switch(buf[i])
- {
- case '\'':
- case '"':
- // Close string, if quote symbol matches.
- // Quote symbol is set iff parseState==String
- if(buf[i]==quoteSymbol)
- {
- parseState = Start;
- quoteSymbol = 0;
- }
- // Start new string, if not already in string or comment
- else if(parseState==Start)
- {
- parseState = String;
- quoteSymbol = buf[i];
- }
- ampIndex = -1; // invalidate prev ampersand
- break;
- case '!':
- // When in string or comment, ignore exclamation mark
- if(parseState==Start)
- {
- parseState = Comment;
- commentIndex = i;
- }
- break;
- case ' ': // ignore whitespace
- case '\t':
- case '\n': // this may be at the end of line
- break;
- case '&':
- ampIndex = i;
- break;
- default:
- ampIndex = -1; // invalidate prev ampersand
- }
- }
-
- if (ampIndex>=0)
- return ampIndex;
- else
- return commentIndex;
-}
-
-/* Although comments at the end of continuation line are grabbed by this function,
-* we still do not know how to use them later in parsing.
-*/
-void truncatePrepass(int index)
-{
- int length = inputStringPrepass.length();
- for (int i=index+1; i<length; i++) {
- if (inputStringPrepass[i]=='!' && i<length-1 && inputStringPrepass[i+1]=='<') { // save comment
- struct CommentInPrepass *c=new CommentInPrepass(index, inputStringPrepass.right(length-i-2));
- comments.append(c);
- }
- }
- inputStringPrepass.truncate(index);
-}
-
-// simplified way to know if this is fixed form
-// duplicate in fortrancode.l
-static bool recognizeFixedForm(const char* contents)
-{
- int column=0;
- bool skipLine=FALSE;
-
- for(int i=0;;i++) {
- column++;
-
- switch(contents[i]) {
- case '\n':
- column=0;
- skipLine=FALSE;
- break;
- case ' ':
- break;
- case '\000':
- return FALSE;
- case 'C':
- case 'c':
- case '*':
- if(column==1) return TRUE;
- if(skipLine) break;
- return FALSE;
- case '!':
- if(column>1 && column<7) return FALSE;
- skipLine=TRUE;
- break;
- default:
- if(skipLine) break;
- if(column==7) return TRUE;
- return FALSE;
- }
- }
- return FALSE;
-}
-
-/* This function assumes that contents has at least size=length+1 */
-static void insertCharacter(char *contents, int length, int pos, char c)
-{
- // shift tail by one character
- for(int i=length; i>pos; i--)
- contents[i]=contents[i-1];
- // set the character
- contents[pos] = c;
-}
-
-/* change comments and bring line continuation character to previous line */
-static const char* prepassFixedForm(const char* contents)
-{
- int column=0;
- int prevLineLength=0;
- int prevLineAmpOrExclIndex=-1;
- bool emptyLabel=TRUE;
- int newContentsSize = strlen(contents)+2; // \000 and one spare character (to avoid reallocation)
- char* newContents = (char*)malloc(newContentsSize);
-
- for(int i=0, j=0;;i++,j++) {
- if(j>=newContentsSize-1) { // check for one spare character, which may be eventually used below (by &)
- newContents = (char*)realloc(newContents, newContentsSize+1000);
- newContentsSize = newContentsSize+1000;
- }
-
- column++;
- char c = contents[i];
- switch(c) {
- case '\n':
- prevLineLength=column;
- prevLineAmpOrExclIndex=getAmpOrExclAtTheEnd(&contents[i-prevLineLength+1], prevLineLength);
- column=0;
- emptyLabel=TRUE;
- newContents[j]=c;
- break;
- case ' ':
- newContents[j]=c;
- break;
- case '\000':
- newContents[j]='\000';
- return newContents;
- case 'C':
- case 'c':
- case '*':
- if (column!=6)
- {
- emptyLabel=FALSE;
- if(column==1)
- newContents[j]='!';
- else
- newContents[j]=c;
- break;
- }
- default:
- if(column==6 && emptyLabel) { // continuation
- if (c != '0') { // 0 not allowed as continuatioin character, see f95 standard paragraph 3.3.2.3
- newContents[j]=' ';
-
- if(prevLineAmpOrExclIndex==-1) { // add & just before end of previous line
- insertCharacter(newContents, j+1, (j+1)-6-1, '&');
- j++;
- } else { // add & just before end of previous line comment
- insertCharacter(newContents, j+1, (j+1)-6-prevLineLength+prevLineAmpOrExclIndex, '&');
- j++;
- }
- } else {
- newContents[j]=c; // , just handle like space
- }
- } else {
- newContents[j]=c;
- emptyLabel=FALSE;
- }
- break;
- }
- }
- return newContents;
-}
-
-static void pushBuffer(QCString& buffer)
-{
- if ( include_stack_ptr >= MAX_INCLUDE_DEPTH )
- {
- fprintf( stderr, "Stack buffers nested too deeply" );
- exit( 1 );
- }
- include_stack[include_stack_ptr++] = YY_CURRENT_BUFFER;
- yy_switch_to_buffer(yy_scan_string(buffer));
-
- //fprintf(stderr, "--PUSH--%s", (const char *)buffer);
- buffer = NULL;
-}
-
-static void popBuffer() {
- //fprintf(stderr, "--POP--");
- include_stack_ptr --;
- yy_delete_buffer( YY_CURRENT_BUFFER );
- yy_switch_to_buffer( include_stack[include_stack_ptr] );
-}
-
-/** used to copy entry to an interface module procedure */
-static void copyEntry(Entry *dest, Entry *src)
-{
- dest->type = src->type;
- dest->fileName = src->fileName;
- dest->bodyLine = src->bodyLine;
- dest->args = src->args;
- dest->argList = new ArgumentList(*src->argList);
- dest->doc = src->doc;
- dest->brief = src->brief;
-}
-
-/** fill empty interface module procedures with info from
- corresponding module subprogs
- @TODO: handle procedures in used modules
-*/
-void resolveModuleProcedures(QList<Entry> &moduleProcedures, Entry *current_root)
-{
- if (moduleProcedures.isEmpty()) return;
-
- EntryListIterator eli1(moduleProcedures);
- // for all module procedures
- for (Entry *ce1; (ce1=eli1.current()); ++eli1)
- {
- // check all entries in this module
- EntryListIterator eli2(*current_root->children());
- for (Entry *ce2; (ce2=eli2.current()); ++eli2)
- {
- if (ce1->name == ce2->name)
- {
- copyEntry(ce1, ce2);
- }
- } // for procedures in current module
- } // for all interface module procedures
- moduleProcedures.clear();
-}
-
-#if 0
-static bool isTypeName(QCString name)
-{
- name = name.lower();
- return name=="integer" || name == "real" ||
- name=="complex" || name == "logical";
-}
-#endif
-
-/*! Extracts string which resides within parentheses of provided string. */
-static QCString extractFromParens(const QCString name)
-{
- QCString extracted = name;
- int start = extracted.find("(");
- if (start != -1)
- {
- extracted.remove(0, start+1);
- }
- int end = extracted.findRev(")");
- if (end != -1)
- {
- int length = extracted.length();
- extracted.remove(end, length);
- }
- extracted = extracted.stripWhiteSpace();
-
- return extracted;
-}
-
-/*! Adds passed modifiers to these modifiers.*/
-SymbolModifiers& SymbolModifiers::operator|=(const SymbolModifiers &mdfs)
-{
- if (mdfs.protection!=NONE_P) protection = mdfs.protection;
- if (mdfs.direction!=NONE_D) direction = mdfs.direction;
- optional |= mdfs.optional;
- if (!mdfs.dimension.isNull()) dimension = mdfs.dimension;
- allocatable |= mdfs.allocatable;
- external |= mdfs.external;
- intrinsic |= mdfs.intrinsic;
- parameter |= mdfs.parameter;
- pointer |= mdfs.pointer;
- target |= mdfs.target;
- save |= mdfs.save;
- deferred |= mdfs.deferred;
- nonoverridable |= mdfs.nonoverridable;
- nopass |= mdfs.nopass;
- pass |= mdfs.pass;
- passVar = mdfs.passVar;
- return *this;
-}
-
-/*! Extracts and adds passed modifier to these modifiers.*/
-SymbolModifiers& SymbolModifiers::operator|=(QCString mdfString)
-{
- mdfString = mdfString.lower();
- SymbolModifiers newMdf;
-
- if (mdfString.find("dimension")==0)
- {
- newMdf.dimension=mdfString;
- }
- else if (mdfString.contains("intent"))
- {
- QCString tmp = extractFromParens(mdfString);
- bool isin = tmp.contains("in");
- bool isout = tmp.contains("out");
- if (isin && isout) newMdf.direction = SymbolModifiers::INOUT;
- else if (isin) newMdf.direction = SymbolModifiers::IN;
- else if (isout) newMdf.direction = SymbolModifiers::OUT;
- }
- else if (mdfString=="public")
- {
- newMdf.protection = SymbolModifiers::PUBLIC;
- }
- else if (mdfString=="private")
- {
- newMdf.protection = SymbolModifiers::PRIVATE;
- }
- else if (mdfString=="optional")
- {
- newMdf.optional = TRUE;
- }
- else if (mdfString=="allocatable")
- {
- newMdf.allocatable = TRUE;
- }
- else if (mdfString=="external")
- {
- newMdf.external = TRUE;
- }
- else if (mdfString=="intrinsic")
- {
- newMdf.intrinsic = TRUE;
- }
- else if (mdfString=="parameter")
- {
- newMdf.parameter = TRUE;
- }
- else if (mdfString=="pointer")
- {
- newMdf.pointer = TRUE;
- }
- else if (mdfString=="target")
- {
- newMdf.target = TRUE;
- }
- else if (mdfString=="save")
- {
- newMdf.save = TRUE;
- }
- else if (mdfString=="nopass")
- {
- newMdf.nopass = TRUE;
- }
- else if (mdfString=="deferred")
- {
- newMdf.deferred = TRUE;
- }
- else if (mdfString=="non_overridable")
- {
- newMdf.nonoverridable = TRUE;
- }
- else if (mdfString.contains("pass"))
- {
- newMdf.pass = TRUE;
- if (mdfString.contains("("))
- newMdf.passVar = extractFromParens(mdfString);
- else
- newMdf.passVar = "";
- }
-
- (*this) |= newMdf;
- return *this;
-}
-
-/*! For debugging purposes. */
-//ostream& operator<<(ostream& out, const SymbolModifiers& mdfs)
-//{
-// out<<mdfs.protection<<", "<<mdfs.direction<<", "<<mdfs.optional<<
-// ", "<<(mdfs.dimension.isNull() ? "" : mdfs.dimension.latin1())<<
-// ", "<<mdfs.allocatable<<", "<<mdfs.external<<", "<<mdfs.intrinsic;
-//
-// return out;
-//}
-
-/*! Find argument with given name in \a subprog entry. */
-static Argument *findArgument(Entry* subprog, QCString name, bool byTypeName = FALSE)
-{
- QCString cname(name.lower());
- for (unsigned int i=0; i<subprog->argList->count(); i++)
- {
- Argument *arg = subprog->argList->at(i);
- if ((!byTypeName && arg->name.lower() == cname) ||
- (byTypeName && arg->type.lower() == cname)
- )
- {
- return arg;
- }
- }
- return 0;
-}
-
-/*! Find function with given name in \a entry. */
-#if 0
-static Entry *findFunction(Entry* entry, QCString name)
-{
- QCString cname(name.lower());
-
- EntryListIterator eli(*entry->children());
- Entry *ce;
- for (;(ce=eli.current());++eli)
- {
- if (ce->section != Entry::FUNCTION_SEC)
- continue;
-
- if (ce->name.lower() == cname)
- return ce;
- }
-
- return 0;
-}
-#endif
-
-/*! Apply modifiers stored in \a mdfs to the \a typeName string. */
-static QCString applyModifiers(QCString typeName, SymbolModifiers& mdfs)
-{
- if (!mdfs.dimension.isNull())
- {
- typeName += ", ";
- typeName += mdfs.dimension;
- }
- if (mdfs.direction!=SymbolModifiers::NONE_D)
- {
- typeName += ", ";
- typeName += directionStrs[mdfs.direction];
- }
- if (mdfs.optional)
- {
- typeName += ", ";
- typeName += "optional";
- }
- if (mdfs.allocatable)
- {
- typeName += ", ";
- typeName += "allocatable";
- }
- if (mdfs.external)
- {
- typeName += ", ";
- typeName += "external";
- }
- if (mdfs.intrinsic)
- {
- typeName += ", ";
- typeName += "intrinsic";
- }
- if (mdfs.parameter)
- {
- typeName += ", ";
- typeName += "parameter";
- }
- if (mdfs.pointer)
- {
- typeName += ", ";
- typeName += "pointer";
- }
- if (mdfs.target)
- {
- typeName += ", ";
- typeName += "target";
- }
- if (mdfs.save)
- {
- typeName += ", ";
- typeName += "save";
- }
- if (mdfs.deferred)
- {
- typeName += ", ";
- typeName += "deferred";
- }
- if (mdfs.nonoverridable)
- {
- typeName += ", ";
- typeName += "non_overridable";
- }
- if (mdfs.nopass)
- {
- typeName += ", ";
- typeName += "nopass";
- }
- if (mdfs.pass)
- {
- typeName += ", ";
- typeName += "pass";
- if (!mdfs.passVar.isEmpty())
- typeName += "(" + mdfs.passVar + ")";
- }
- if (mdfs.protection == SymbolModifiers::PUBLIC)
- {
- typeName += ", ";
- typeName += "public";
- }
- else if (mdfs.protection == SymbolModifiers::PRIVATE)
- {
- typeName += ", ";
- typeName += "private";
- }
-
- return typeName;
-}
-
-/*! Apply modifiers stored in \a mdfs to the \a arg argument. */
-static void applyModifiers(Argument *arg, SymbolModifiers& mdfs)
-{
- QCString tmp = arg->type;
- arg->type = applyModifiers(tmp, mdfs);
-}
-
-/*! Apply modifiers stored in \a mdfs to the \a ent entry. */
-static void applyModifiers(Entry *ent, SymbolModifiers& mdfs)
-{
- QCString tmp = ent->type;
- ent->type = applyModifiers(tmp, mdfs);
-
- if (mdfs.protection == SymbolModifiers::PUBLIC)
- ent->protection = Public;
- else if (mdfs.protection == SymbolModifiers::PRIVATE)
- ent->protection = Private;
-}
-
-/*! Starts the new scope in fortran program. Consider using this function when
- * starting module, interface, function or other program block.
- * \see endScope()
- */
-static void startScope(Entry *scope)
-{
- //cout<<"start scope: "<<scope->name<<endl;
- current_root= scope; /* start substructure */
-
- QMap<QCString,SymbolModifiers> mdfMap;
- modifiers.insert(scope, mdfMap);
-}
-
-/*! Ends scope in fortran program: may update subprogram arguments or module variable attributes.
- * \see startScope()
- */
-static bool endScope(Entry *scope, bool isGlobalRoot)
-{
- //cout<<"end scope: "<<scope->name<<endl;
- if (current_root->parent() || isGlobalRoot)
- {
- current_root= current_root->parent(); /* end substructure */
- }
- else
- {
- fprintf(stderr,"parse error in end <scopename>");
- scanner_abort();
- return FALSE;
- }
-
- // update variables or subprogram arguments with modifiers
- QMap<QCString,SymbolModifiers>& mdfsMap = modifiers[scope];
-
- if (scope->section == Entry::FUNCTION_SEC)
- {
- // iterate all symbol modifiers of the scope
- for (QMap<QCString,SymbolModifiers>::Iterator it=mdfsMap.begin(); it!=mdfsMap.end(); it++)
- {
- //cout<<it.key()<<": "<<it.data()<<endl;
- Argument *arg = findArgument(scope, it.key());
-
- if (arg)
- applyModifiers(arg, it.data());
- }
-
- // find return type for function
- //cout<<"RETURN NAME "<<modifiers[current_root][scope->name.lower()].returnName<<endl;
- QCString returnName = modifiers[current_root][scope->name.lower()].returnName.lower();
- if (modifiers[scope].contains(returnName))
- {
- scope->type = modifiers[scope][returnName].type; // returning type works
- applyModifiers(scope, modifiers[scope][returnName]); // returning array works
- }
-
- }
- if (scope->section == Entry::CLASS_SEC)
- { // was INTERFACE_SEC
- if (scope->parent()->section == Entry::FUNCTION_SEC)
- { // interface within function
- // iterate functions of interface and
- // try to find types for dummy(ie. argument) procedures.
- //cout<<"Search in "<<scope->name<<endl;
- EntryListIterator eli(*scope->children());
- Entry *ce;
- int count = 0;
- int found = FALSE;
- for (;(ce=eli.current());++eli)
- {
- count++;
- if (ce->section != Entry::FUNCTION_SEC)
- continue;
-
- Argument *arg = findArgument(scope->parent(), ce->name, TRUE);
- if (arg != 0)
- {
- // set type of dummy procedure argument to interface
- arg->name = arg->type;
- arg->type = scope->name;
- }
- if (ce->name.lower() == scope->name.lower()) found = TRUE;
- }
- if ((count == 1) && found)
- {
- // clear all modifiers of the scope
- modifiers.remove(scope);
- delete scope->parent()->removeSubEntry(scope);
- scope = 0;
- return TRUE;
- }
- }
- }
- if (scope->section!=Entry::FUNCTION_SEC)
- { // not function section
- // iterate variables: get and apply modifiers
- EntryListIterator eli(*scope->children());
- Entry *ce;
- for (;(ce=eli.current());++eli)
- {
- if (ce->section != Entry::VARIABLE_SEC && ce->section != Entry::FUNCTION_SEC)
- continue;
-
- //cout<<ce->name<<", "<<mdfsMap.contains(ce->name.lower())<<mdfsMap.count()<<endl;
- if (mdfsMap.contains(ce->name.lower()))
- applyModifiers(ce, mdfsMap[ce->name.lower()]);
- }
- }
-
- // clear all modifiers of the scope
- modifiers.remove(scope);
-
- return TRUE;
-}
-
-//! Return full name of the entry. Sometimes we must combine several names recursively.
-static QCString getFullName(Entry *e)
-{
- QCString name = e->name;
- if (e->section == Entry::CLASS_SEC // || e->section == Entry::INTERFACE_SEC
- || !e->parent() || e->parent()->name.isEmpty())
- return name;
-
- return getFullName(e->parent())+"::"+name;
-}
-
-static int yyread(char *buf,int max_size)
-{
- int c=0;
-
- while ( c < max_size && inputString[inputPosition] )
- {
- *buf = inputString[inputPosition++] ;
- c++; buf++;
- }
- return c;
-}
-
-static void initParser()
-{
- last_entry = 0;
-}
-
-static void initEntry()
-{
- if (typeMode)
- {
- current->protection = typeProtection;
- }
- else
- {
- current->protection = defaultProtection;
- }
- current->mtype = mtype;
- current->virt = virt;
- current->stat = gstat;
- current->lang = SrcLangExt_Fortran;
- initGroupInfo(current);
-}
-
-/**
- adds current entry to current_root and creates new current
-*/
-static void addCurrentEntry()
-{
- //printf("===Adding entry %s to %s\n", current->name.data(), current_root->name.data());
- current_root->addSubEntry(current);
- last_entry = current;
- current = new Entry ;
- initEntry();
-}
-
-static int max(int a, int b) {return a>b?a:b;}
-
-static void addModule(const char *name, bool isModule)
-{
- //fprintf(stderr, "0=========> got module %s\n", name);
-
- if (isModule)
- current->section = Entry::CLASS_SEC;
- else
- current->section = Entry::FUNCTION_SEC;
-
- if (name!=NULL)
- {
- current->name = name;
- }
- else
- {
- QCString fname = yyFileName;
- int index = max(fname.findRev('/'), fname.findRev('\\'));
- fname = fname.right(fname.length()-index-1);
- fname = fname.prepend("__").append("__");
- current->name = fname;
- }
- current->type = "program";
- current->fileName = yyFileName;
- current->bodyLine = yyLineNr; // used for source reference
- current->protection = Public ;
- addCurrentEntry();
- startScope(last_entry);
-}
-
-
-static void addSubprogram(const char *text)
-{
- //fprintf(stderr,"1=========> got subprog, type: %s\n",text);
- subrCurrent.prepend(current);
- current->section = Entry::FUNCTION_SEC ;
- QCString subtype = text; subtype=subtype.lower().stripWhiteSpace();
- functionLine = subtype=="function";
- current->type += " " + subtype;
- current->type = current->type.stripWhiteSpace();
- current->fileName = yyFileName;
- current->bodyLine = yyLineNr; // used for source reference
- current->startLine = -1; // ??? what is startLine for?
- current->args.resize(0);
- current->argList->clear();
- docBlock.resize(0);
-}
-
-/*! Adds interface to the root entry.
- * \note Code was brought to this procedure from the parser,
- * because there was/is idea to use it in several parts of the parser.
- */
-static void addInterface(QCString name, InterfaceType type)
-{
- if (YY_START == Start)
- {
- addModule(NULL);
- yy_push_state(ModuleBody); //anon program
- }
-
- current->section = Entry::CLASS_SEC; // was Entry::INTERFACE_SEC;
- current->spec = Entry::Interface;
- current->name = name;
-
- switch (type)
- {
- case IF_ABSTRACT:
- current->type = "abstract";
- break;
-
- case IF_GENERIC:
- current->type = "generic";
- break;
-
- case IF_SPECIFIC:
- case IF_NONE:
- default:
- current->type = "";
- }
-
- /* if type is part of a module, mod name is necessary for output */
- if ((current_root) &&
- (current_root->section == Entry::CLASS_SEC ||
- current_root->section == Entry::NAMESPACE_SEC))
- {
- current->name= current_root->name + "::" + current->name;
- }
-
- current->fileName = yyFileName;
- current->bodyLine = yyLineNr;
- addCurrentEntry();
-}
-
-
-//-----------------------------------------------------------------------------
-
-/*! Get the argument \a name.
- */
-static Argument* getParameter(const QCString &name)
-{
- // std::cout<<"addFortranParameter(): "<<name<<" DOCS:"<<(docs.isNull()?QCString("null"):docs)<<std::endl;
- Argument *ret = 0;
- if (current_root->argList==0) return 0;
- ArgumentListIterator ali(*current_root->argList);
- Argument *a;
- for (ali.toFirst();(a=ali.current());++ali)
- {
- if (a->name.lower()==name.lower())
- {
- ret=a;
- //printf("parameter found: %s\n",(const char*)name);
- break;
- }
- } // for
- return ret;
-}
-
- //----------------------------------------------------------------------------
-static void startCommentBlock(bool brief)
-{
- if (brief)
- {
- current->briefFile = yyFileName;
- current->briefLine = yyLineNr;
- }
- else
- {
- current->docFile = yyFileName;
- current->docLine = yyLineNr;
- }
-}
-
-//----------------------------------------------------------------------------
-
-static void handleCommentBlock(const QCString &doc,bool brief)
-{
- docBlockInBody = FALSE;
- bool needsEntry = FALSE;
- static bool hideInBodyDocs = Config_getBool("HIDE_IN_BODY_DOCS");
- int position=0;
- if (docBlockInBody && hideInBodyDocs) return;
- //fprintf(stderr,"call parseCommentBlock [%s]\n",doc.data());
- int lineNr = brief ? current->briefLine : current->docLine;
- while (parseCommentBlock(
- g_thisParser,
- docBlockInBody ? last_entry : current,
- doc, // text
- yyFileName, // file
- lineNr,
- docBlockInBody ? FALSE : brief,
- docBlockInBody ? FALSE : docBlockJavaStyle,
- docBlockInBody,
- defaultProtection,
- position,
- needsEntry
- ))
- {
- //fprintf(stderr,"parseCommentBlock position=%d [%s] needsEntry=%d\n",position,doc.data()+position,needsEntry);
- if (needsEntry) addCurrentEntry();
- }
- //fprintf(stderr,"parseCommentBlock position=%d [%s] needsEntry=%d\n",position,doc.data()+position,needsEntry);
-
- if (needsEntry) addCurrentEntry();
-}
-
-//----------------------------------------------------------------------------
-
-static void subrHandleCommentBlock(const QCString &doc,bool brief)
-{
- Entry *tmp_entry = current;
- current = subrCurrent.first(); // temporarily switch to the entry of the subroutine / function
- if (docBlock.stripWhiteSpace().find("\\param") == 0)
- {
- handleCommentBlock("\n\n"+doc,brief);
- }
- else if (docBlock.stripWhiteSpace().find("@param") == 0)
- {
- handleCommentBlock("\n\n"+doc,brief);
- }
- else
- {
- int dir1 = modifiers[current_root][argName.lower()].direction;
- handleCommentBlock(QCString("\n\n@param ") + directionParam[dir1] + " " +
- argName + " " + doc,brief);
- }
- current=tmp_entry;
-}
-
-//----------------------------------------------------------------------------
-static int level=0;
-static void debugCompounds(Entry *rt) // print Entry structure (for debugging)
-{
- level++;
- printf("%d) debugCompounds(%s) line %d\n",level, rt->name.data(), rt->bodyLine);
- EntryListIterator eli(*rt->children());
- Entry *ce;
- for (;(ce=eli.current());++eli)
- {
- debugCompounds(ce);
- }
-level--;
-}
-
-
-static void parseMain(const char *fileName,const char *fileBuf,Entry *rt)
-{
- initParser();
-
- defaultProtection = Public;
- inputString = fileBuf;
- inputPosition = 0;
- inputStringPrepass = NULL;
- inputPositionPrepass = 0;
-
- //anonCount = 0; // don't reset per file
- mtype = Method;
- gstat = FALSE;
- virt = Normal;
- current_root = rt;
- global_root = rt;
- inputFile.setName(fileName);
- if (inputFile.open(IO_ReadOnly))
- {
- isFixedForm = recognizeFixedForm(fileBuf);
-
- if (isFixedForm)
- {
- msg("Prepassing fixed form of %s\n", fileName);
- //printf("---strlen=%d\n", strlen(fileBuf));
- //clock_t start=clock();
-
- inputString = prepassFixedForm(fileBuf);
-
- //clock_t end=clock();
- //printf("CPU time used=%f\n", ((double) (end-start))/CLOCKS_PER_SEC);
- }
-
- yyLineNr= 1 ;
- yyFileName = fileName;
- msg("Parsing file %s...\n",yyFileName.data());
-
- startScope(rt); // implies current_root = rt
- initParser();
- groupEnterFile(yyFileName,yyLineNr);
-
- current = new Entry;
- current->lang = SrcLangExt_Fortran;
- current->name = yyFileName;
- current->section = Entry::SOURCE_SEC;
- current_root->addSubEntry(current);
- file_root = current;
- current = new Entry;
- current->lang = SrcLangExt_Fortran;
-
- fscanYYrestart( fscanYYin );
- {
- BEGIN( Start );
- }
-
- fscanYYlex();
- groupLeaveFile(yyFileName,yyLineNr);
-
- endScope(current_root, TRUE); // TRUE - global root
-
- //debugCompounds(rt); //debug
-
- rt->program.resize(0);
- delete current; current=0;
- moduleProcedures.clear();
- if (isFixedForm) {
- free((char*)inputString);
- inputString=NULL;
- }
-
- inputFile.close();
- }
-}
-
-//----------------------------------------------------------------------------
-
-void FortranLanguageScanner::parseInput(const char *fileName,const char *fileBuf,Entry *root)
-{
- g_thisParser = this;
- ::parseMain(fileName,fileBuf,root);
-}
-
-void FortranLanguageScanner::parseCode(CodeOutputInterface & codeOutIntf,
- const char * scopeName,
- const QCString & input,
- bool isExampleBlock,
- const char * exampleName,
- FileDef * fileDef,
- int startLine,
- int endLine,
- bool inlineFragment,
- MemberDef *memberDef,
- bool showLineNumbers
- )
-{
- ::parseFortranCode(codeOutIntf,scopeName,input,isExampleBlock,exampleName,
- fileDef,startLine,endLine,inlineFragment,memberDef,
- showLineNumbers);
-}
-
-bool FortranLanguageScanner::needsPreprocessing(const QCString &extension)
-{
- return extension!=extension.lower(); // use preprocessor only for upper case extensions
-}
-void FortranLanguageScanner::resetCodeParserState()
-{
- ::resetFortranCodeParserState();
-}
-
-void FortranLanguageScanner::parsePrototype(const char *text)
-{
- (void)text;
-}
-
-static void scanner_abort()
-{
- fprintf(stderr,"********************************************************************\n");
- fprintf(stderr,"Error in file %s line: %d, state: %d\n",yyFileName.data(),yyLineNr,YY_START);
- fprintf(stderr,"********************************************************************\n");
-
- EntryListIterator eli(*global_root->children());
- Entry *ce;
- bool start=FALSE;
-
- for (;(ce=eli.current());++eli)
- {
- if (ce == file_root) start=TRUE;
- if (start) ce->reset();
- }
-
- // dummy call to avoid compiler warning
- (void)yy_top_state();
-
- return;
- //exit(-1);
-}
-
-//----------------------------------------------------------------------------
-
-#if !defined(YY_FLEX_SUBMINOR_VERSION)
-//----------------------------------------------------------------------------
-extern "C" { // some bogus code to keep the compiler happy
- void fscannerYYdummy() { yy_flex_realloc(0,0); }
-}
-#endif
-
diff --git a/trunk/src/ftextstream.cpp b/trunk/src/ftextstream.cpp
deleted file mode 100644
index f72185f..0000000
--- a/trunk/src/ftextstream.cpp
+++ /dev/null
@@ -1,259 +0,0 @@
-#include "ftextstream.h"
-#include <qfile.h>
-
-//----------------------------------------------------------------------------
-
-class QGStringBuffer : public QIODevice
-{
- public:
- QGStringBuffer( QGString* str );
- ~QGStringBuffer();
- bool open( int m );
- void close();
- void flush();
- uint size() const;
- int at() const;
- bool at( int pos );
- int readBlock( char *, uint) { return -1; }
- int writeBlock( const char *p, uint len );
- int getch() { return -1; }
- int putch( int ch );
- int ungetch( int ) { return -1; }
-
- protected:
- QGString* m_str;
-
- private: // Disabled copy constructor and operator=
- QGStringBuffer( const QGStringBuffer & );
- QGStringBuffer &operator=( const QGStringBuffer & );
-};
-
-QGStringBuffer::QGStringBuffer( QGString* str ) : m_str(str)
-{
- //printf("QGStringBuffer::QGStringBuffer(%p)\n",str);
-}
-
-QGStringBuffer::~QGStringBuffer()
-{
-}
-
-bool QGStringBuffer::open( int m )
-{
- if ( !m_str )
- {
-#if defined(CHECK_STATE)
- qWarning( "QGStringBuffer::open: No string" );
-#endif
- return FALSE;
- }
- if ( isOpen() )
- { // buffer already open
-#if defined(CHECK_STATE)
- qWarning( "QGStringBuffer::open: Buffer already open" );
-#endif
- return FALSE;
- }
- setMode( m );
- if ( m & IO_Truncate )
- { // truncate buffer
- m_str->truncate( 0 );
- }
- if ( m & IO_Append )
- { // append to end of buffer
- ioIndex = m_str->length();
- }
- else
- {
- ioIndex = 0;
- }
- setState( IO_Open );
- setStatus( 0 );
- return TRUE;
-}
-
-void QGStringBuffer::close()
-{
- if ( isOpen() )
- {
- setFlags( IO_Direct );
- ioIndex = 0;
- }
-}
-
-void QGStringBuffer::flush()
-{
-}
-
-uint QGStringBuffer::size() const
-{
- return m_str ? m_str->length() : 0;
-}
-
-int QGStringBuffer::at() const
-{
- return ioIndex;
-}
-
-bool QGStringBuffer::at( int pos )
-{
-#if defined(CHECK_STATE)
- if ( !isOpen() )
- {
- qWarning( "QGStringBuffer::at: Buffer is not open" );
- return FALSE;
- }
-#endif
- if ( (uint)pos >= m_str->length() )
- {
-#if defined(CHECK_RANGE)
- qWarning( "QGStringBuffer::at: Index %d out of range", pos );
-#endif
- return FALSE;
- }
-
- ioIndex = pos;
- return TRUE;
-}
-
-int QGStringBuffer::writeBlock( const char *p, uint len )
-{
- //printf("QGStringBuffer::writeBlock(%p,%d) m_str=%p ioIndex=%d\n",p,len,
- // m_str,ioIndex);
- m_str->enlarge(ioIndex+len+1);
- memcpy(m_str->data()+ioIndex,p,len);
- ioIndex+=len;
- m_str->data()[ioIndex]='\0';
- m_str->setLen(ioIndex);
- return len;
-}
-
-int QGStringBuffer::putch( int ch )
-{
- //printf("QGStringBuffer::putch(%d) m_str=%p ioIndex=%d\n",
- // ch,m_str,ioIndex);
- m_str->enlarge(ioIndex+2);
- m_str->data()[ioIndex] = (char)ch;
- ioIndex++;
- m_str->data()[ioIndex] = '\0';
- m_str->setLen(ioIndex);
- return ch;
-}
-
-
-//----------------------------------------------------------------------------
-
-FTextStream::FTextStream()
-{
- m_dev = 0;
- m_owndev = FALSE;
-}
-
-FTextStream::FTextStream( QIODevice *dev )
-{
- m_dev = dev;
- m_owndev = FALSE;
-}
-
-FTextStream::FTextStream( QGString *s )
-{
- m_dev = new QGStringBuffer(s);
- ((QGStringBuffer*)m_dev)->open( IO_WriteOnly );
- m_owndev = TRUE;
-}
-
-FTextStream::FTextStream( FILE *fh )
-{
- m_dev = new QFile;
- ((QFile *)m_dev)->open( IO_WriteOnly, fh);
-}
-
-FTextStream::~FTextStream()
-{
- if (m_owndev) delete m_dev;
- m_dev = 0;
-}
-
-QIODevice *FTextStream::device() const
-{
- return m_dev;
-}
-
-void FTextStream::setDevice( QIODevice *dev )
-{
- if (m_owndev)
- {
- delete m_dev;
- m_owndev = FALSE;
- }
- m_dev = dev;
-}
-
-void FTextStream::unsetDevice()
-{
- setDevice(0);
-}
-
-FTextStream &FTextStream::output_int( ulong n, bool neg )
-{
- char buf[20];
- char *p = &buf[19];
- *p = '\0';
- if ( neg )
- {
- n = (ulong)(-(long)n);
- }
- do
- {
- *--p = ((int)(n%10)) + '0';
- n /= 10;
- } while ( n );
- if ( neg ) *--p = '-';
- return operator<<(p);
-}
-
-FTextStream &FTextStream::operator<<( signed short i )
-{
- return output_int( i, i < 0 );
-}
-
-FTextStream &FTextStream::operator<<( unsigned short i )
-{
- return output_int( i, FALSE );
-}
-
-FTextStream &FTextStream::operator<<( signed int i )
-{
- return output_int( i, i < 0 );
-}
-
-FTextStream &FTextStream::operator<<( unsigned int i )
-{
- return output_int( i, FALSE );
-}
-
-FTextStream &FTextStream::operator<<( signed long i )
-{
- return output_int( i, i < 0 );
-}
-
-FTextStream &FTextStream::operator<<( unsigned long i )
-{
- return output_int( i, FALSE );
-}
-
-FTextStream &FTextStream::operator<<( float f )
-{
- return *this << (double)f;
-}
-
-FTextStream &FTextStream::operator<<( double d )
-{
- char buf[64];
- sprintf(buf,"%f",d);
- return *this << buf;
-}
-
-
-
-
-
diff --git a/trunk/src/ftextstream.h b/trunk/src/ftextstream.h
deleted file mode 100644
index 63ef244..0000000
--- a/trunk/src/ftextstream.h
+++ /dev/null
@@ -1,82 +0,0 @@
-#ifndef FTEXTSTREAM_H
-#define FTEXTSTREAM_H
-
-#include "qtbc.h"
-#include "qiodevice.h"
-#include "qstring.h"
-#include "qgstring.h"
-#include <stdio.h>
-
-/** @brief Simplified and optimized version of QTextStream */
-class FTextStream
-{
- public:
- FTextStream();
- FTextStream( QIODevice * );
- FTextStream( QGString * );
- FTextStream( FILE * );
- virtual ~FTextStream();
-
- QIODevice *device() const;
- void setDevice( QIODevice * );
- void unsetDevice();
-
- FTextStream &operator<<( char );
- FTextStream &operator<<( const char *);
- FTextStream &operator<<( const QString & );
- FTextStream &operator<<( const QCString & );
- FTextStream &operator<<( signed short );
- FTextStream &operator<<( unsigned short );
- FTextStream &operator<<( signed int );
- FTextStream &operator<<( unsigned int );
- FTextStream &operator<<( signed long );
- FTextStream &operator<<( unsigned long );
- FTextStream &operator<<( float );
- FTextStream &operator<<( double );
-
- private:
- QIODevice *m_dev;
- bool m_owndev;
- FTextStream &output_int( ulong n, bool neg );
-
- private: // Disabled copy constructor and operator=
-#if defined(Q_DISABLE_COPY)
- FTextStream( const FTextStream & );
- FTextStream &operator=( const FTextStream & );
-#endif
-};
-
-inline FTextStream &FTextStream::operator<<( char c)
-{
- m_dev->putch(c);
- return *this;
-}
-
-inline FTextStream &FTextStream::operator<<( const char* s)
-{
- uint len = qstrlen( s );
- m_dev->writeBlock( s, len );
- return *this;
-}
-
-inline FTextStream &FTextStream::operator<<( const QString & s)
-{
- return operator<<(s.data());
-}
-
-inline FTextStream &FTextStream::operator<<( const QCString &s)
-{
- return operator<<(s.data());
-}
-
-typedef FTextStream & (*FTSFUNC)(FTextStream &);// manipulator function
-
-inline FTextStream &operator<<( FTextStream &s, FTSFUNC f )
-{ return (*f)( s ); }
-
-inline FTextStream &endl( FTextStream & s)
-{
- return s << '\n';
-}
-
-#endif // FTEXTSTREAM_H
diff --git a/trunk/src/ftvhelp.cpp b/trunk/src/ftvhelp.cpp
deleted file mode 100644
index 4816b50..0000000
--- a/trunk/src/ftvhelp.cpp
+++ /dev/null
@@ -1,992 +0,0 @@
-/******************************************************************************
- * ftvhelp.cpp,v 1.0 2000/09/06 16:09:00
- *
- * Copyright (C) 1997-2012 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.
- *
- * Original version contributed by Kenney Wong <kwong@ea.com>
- * Modified by Dimitri van Heesch
- *
- * Folder Tree View for offline help on browsers that do not support HTML Help.
- */
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <qlist.h>
-#include <qdict.h>
-#include <qfileinfo.h>
-
-#include "ftvhelp.h"
-#include "config.h"
-#include "message.h"
-#include "doxygen.h"
-#include "language.h"
-#include "htmlgen.h"
-#include "layout.h"
-#include "pagedef.h"
-
-#define MAX_INDENT 1024
-
-
-static const char navtree_script[]=
-#include "navtree_js.h"
-;
-
-static const char resize_script[]=
-#include "resize_js.h"
-;
-
-static const char navtree_css[]=
-#include "navtree_css.h"
-;
-
-static unsigned char blank_png[352] =
-{
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
-};
-
-static unsigned char folderopen_png[528] =
-{
- 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
- 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
- 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
- 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
- 255,255,255,255,255,255,228,195,193,190,187,218,255,255,255,255,255,255,255,255,255,255,255,255,
- 255,255,255,255,255,255,195,215,221,225,225,178,176,176,175,176,178,180,255,255,255,255,255,255,
- 255,255,255,255,255,255,189,206,215,219,226,220,214,212,207,204,200,176,255,255,255,255,255,255,
- 255,255,255,255,168,154,153,153,152,152,151,149,150,150,149,147,146,145,145,167,255,255,255,255,
- 255,255,255,255,146,187,187,188,187,187,185,183,183,182,179,178,175,173,174,145,255,255,255,255,
- 255,255,255,255,146,180,182,182,181,181,179,178,176,174,173,171,169,170,168,144,255,255,255,255,
- 255,255,255,255,144,173,176,176,177,175,175,174,171,170,168,168,166,166,164,143,255,255,255,255,
- 255,255,255,255,142,168,170,171,170,170,169,168,166,166,165,163,163,164,162,142,255,255,255,255,
- 255,255,255,255,141,162,166,164,164,165,163,163,161,161,161,161,161,160,159,141,255,255,255,255,
- 255,255,255,255,138,157,159,159,158,158,158,157,157,157,157,156,157,157,155,138,255,255,255,255,
- 255,255,255,255,137,154,153,154,154,153,154,154,154,153,154,154,154,154,154,137,255,255,255,255,
- 255,255,255,255,137,154,154,154,154,154,154,154,153,154,154,153,153,153,154,137,255,255,255,255,
- 255,255,255,255,137,125,125,125,125,124,125,124,124,125,124,124,125,124,125,138,255,255,255,255,
- 255,255,255,255,212,209,204,199,193,190,186,183,180,181,185,188,192,197,202,203,255,255,255,255,
- 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
- 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
- 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
- 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255
-};
-
-static unsigned char folderopen_a_png[528] =
-{
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,255,255,255,255,255,255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,255,255,255,255,255,255,255,255,255,255,255,255, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,255,255,255,255,255,255,255,255,255,255,255,255, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 0, 0, 0, 0,
- 0, 0, 0, 0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 0, 0, 0, 0,
- 0, 0, 0, 0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 0, 0, 0, 0,
- 0, 0, 0, 0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 0, 0, 0, 0,
- 0, 0, 0, 0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 0, 0, 0, 0,
- 0, 0, 0, 0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 0, 0, 0, 0,
- 0, 0, 0, 0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 0, 0, 0, 0,
- 0, 0, 0, 0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 0, 0, 0, 0,
- 0, 0, 0, 0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 0, 0, 0, 0,
- 0, 0, 0, 0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 0, 0, 0, 0,
- 0, 0, 0, 0,148,148,148,148,148,148,148,148,148,148,148,148,148,148,148,148, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
-};
-
-static unsigned char folderclosed_png[528] =
-{
- 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
- 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
- 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
- 255,255,255,255,255,197,155,155,155,155,196,255,255,255,255,255,255,255,255,255,255,255,255,255,
- 255,255,255,255,255,155,191,191,191,192,155,255,255,255,255,255,255,255,255,255,255,255,255,255,
- 255,255,255,255,168,144,180,180,181,180,145,145,146,145,146,146,146,146,145,167,255,255,255,255,
- 255,255,255,255,147,225,226,226,225,226,225,221,221,219,215,214,212,211,213,145,255,255,255,255,
- 255,255,255,255,147,212,211,211,210,211,210,205,206,205,201,201,199,196,201,145,255,255,255,255,
- 255,255,255,255,146,204,203,204,203,203,202,200,200,197,197,196,195,194,196,145,255,255,255,255,
- 255,255,255,255,146,202,200,201,201,200,199,198,198,195,194,194,193,192,194,145,255,255,255,255,
- 255,255,255,255,145,200,196,196,196,195,195,193,192,192,190,189,189,189,191,143,255,255,255,255,
- 255,255,255,255,143,192,191,190,190,189,189,188,186,187,186,185,185,185,187,142,255,255,255,255,
- 255,255,255,255,142,186,184,183,182,183,182,183,180,181,181,181,181,181,182,141,255,255,255,255,
- 255,255,255,255,138,177,175,176,176,177,177,176,175,174,175,175,175,174,176,138,255,255,255,255,
- 255,255,255,255,138,173,169,170,168,170,169,170,170,169,171,171,171,171,174,137,255,255,255,255,
- 255,255,255,255,138,166,163,163,162,162,162,162,162,162,164,163,163,163,166,137,255,255,255,255,
- 255,255,255,255,137,124,124,124,125,124,124,124,125,125,124,124,125,124,125,138,255,255,255,255,
- 255,255,255,255,231,231,228,225,222,220,218,216,214,215,217,219,221,224,227,226,255,255,255,255,
- 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
- 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
- 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
- 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255
-};
-
-static unsigned char folderclosed_a_png[528] =
-{
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,255,255,255,255,255,255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,255,255,255,255,255,255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 0, 0, 0, 0,
- 0, 0, 0, 0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 0, 0, 0, 0,
- 0, 0, 0, 0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 0, 0, 0, 0,
- 0, 0, 0, 0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 0, 0, 0, 0,
- 0, 0, 0, 0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 0, 0, 0, 0,
- 0, 0, 0, 0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 0, 0, 0, 0,
- 0, 0, 0, 0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 0, 0, 0, 0,
- 0, 0, 0, 0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 0, 0, 0, 0,
- 0, 0, 0, 0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 0, 0, 0, 0,
- 0, 0, 0, 0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 0, 0, 0, 0,
- 0, 0, 0, 0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 0, 0, 0, 0,
- 0, 0, 0, 0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 0, 0, 0, 0,
- 0, 0, 0, 0,148,148,148,148,148,148,148,148,148,148,148,148,148,148,148,148, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
-};
-
-static unsigned char doc_png[528] =
-{
- 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
- 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
- 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
- 255,255,255,255,255,218,214,208,208,204,191,179,190,197,209,231,255,255,255,255,255,255,255,255,
- 255,255,255,255,255,195,224,226,226,222,214,204,181,203,229,188,225,255,255,255,255,255,255,255,
- 255,255,255,255,255,198,226,228,227,227,224,215,203,180,252,229,184,224,255,255,255,255,255,255,
- 255,255,255,255,255,198,229,230,229,229,228,224,214,154,252,252,229,187,235,255,255,255,255,255,
- 255,255,255,255,255,198,232,233,233,232,231,230,223,176,154,144,165,177,216,255,255,255,255,255,
- 255,255,255,255,255,198,236,236,216,226,238,219,232,225,209,190,189,166,193,255,255,255,255,255,
- 255,255,255,255,255,198,239,240,178,177,230,175,169,184,188,219,208,189,187,255,255,255,255,255,
- 255,255,255,255,255,198,241,242,240,218,237,236,240,235,241,244,221,208,182,255,255,255,255,255,
- 255,255,255,255,255,198,243,243,188,154,183,158,166,140,185,198,231,219,177,255,255,255,255,255,
- 255,255,255,255,255,198,243,245,248,228,241,241,226,249,237,227,239,232,177,255,255,255,255,255,
- 255,255,255,255,255,198,244,246,213,172,163,149,171,200,167,149,242,239,177,255,255,255,255,255,
- 255,255,255,255,255,198,249,248,240,218,237,236,240,235,241,244,244,242,177,255,255,255,255,255,
- 255,255,255,255,255,198,249,251,188,155,184,158,166,140,185,198,246,244,177,255,255,255,255,255,
- 255,255,255,255,255,198,251,253,248,228,241,241,226,249,237,227,249,246,177,255,255,255,255,255,
- 255,255,255,255,255,196,253,252,252,252,252,251,251,250,250,249,249,248,175,255,255,255,255,255,
- 255,255,255,255,255,194, 64, 30, 37, 37, 37, 37, 37, 37, 37, 37, 30, 64,188,255,255,255,255,255,
- 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
- 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
- 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255
-};
-
-static unsigned char doc_a_png[528] =
-{
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,255,255,255,255,255,255,255,255,255,255,255, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,255,255,255,255,255,255,255,255,255,255,255,255, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,255,255,255,255,255,255,255,255,255,255,255,255,255, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
-};
-
-static unsigned char arrow_right_png[352] =
-{
- 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
- 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
- 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
- 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
- 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
- 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
- 255,255,255,152,152,255,255,255,255,255,255,255,255,255,255,255,
- 255,255,255,152,152,152,152,255,255,255,255,255,255,255,255,255,
- 255,255,255,152,152,152,152,152,255,255,255,255,255,255,255,255,
- 255,255,255,152,152,152,152,152,152,152,255,255,255,255,255,255,
- 255,255,255,152,152,152,152,152,152,152,152,255,255,255,255,255,
- 255,255,255,152,152,152,152,152,152,152,255,255,255,255,255,255,
- 255,255,255,152,152,152,152,152,255,255,255,255,255,255,255,255,
- 255,255,255,152,152,152,152,255,255,255,255,255,255,255,255,255,
- 255,255,255,152,152,255,255,255,255,255,255,255,255,255,255,255,
- 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
- 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
- 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
- 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
- 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
- 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
- 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255
-};
-
-static unsigned char arrow_right_a_png[352] =
-{
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0,223, 75, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0,255,255,176, 33, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0,255,255,255,248,117, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0,255,255,255,255,255,211, 60, 0, 0, 0, 0, 0, 0,
- 0, 0, 0,255,255,255,255,255,255,255, 77, 0, 0, 0, 0, 0,
- 0, 0, 0,255,255,255,255,255,211, 60, 0, 0, 0, 0, 0, 0,
- 0, 0, 0,255,255,255,248,117, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0,255,255,176, 33, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0,223, 75, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
-};
-
-static unsigned char arrow_down_png[352] =
-{
- 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
- 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
- 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
- 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
- 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
- 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
- 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
- 255,255,255,152,152,152,152,152,152,152,152,152,255,255,255,255,
- 255,255,255,152,152,152,152,152,152,152,152,152,255,255,255,255,
- 255,255,255,255,152,152,152,152,152,152,152,255,255,255,255,255,
- 255,255,255,255,152,152,152,152,152,152,152,255,255,255,255,255,
- 255,255,255,255,255,152,152,152,152,152,255,255,255,255,255,255,
- 255,255,255,255,255,255,152,152,152,255,255,255,255,255,255,255,
- 255,255,255,255,255,255,152,152,152,255,255,255,255,255,255,255,
- 255,255,255,255,255,255,255,152,255,255,255,255,255,255,255,255,
- 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
- 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
- 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
- 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
- 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
- 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
- 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255
-};
-
-static unsigned char arrow_down_a_png[352] =
-{
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0,231,255,255,255,255,255,255,255,216, 0, 0, 0, 0,
- 0, 0, 0, 87,255,255,255,255,255,255,255, 65, 0, 0, 0, 0,
- 0, 0, 0, 0,186,255,255,255,255,255,164, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 38,251,255,255,255,241, 25, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,127,255,255,255,107, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,221,255,204, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 72,253, 52, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 77, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
-};
-
-#define SPLITBAR_LINE 170,242,224,202,183,170
-#define SPLITBAR_BLOCK2 SPLITBAR_LINE , SPLITBAR_LINE
-#define SPLITBAR_BLOCK4 SPLITBAR_BLOCK2 , SPLITBAR_BLOCK2
-#define SPLITBAR_BLOCK8 SPLITBAR_BLOCK4 , SPLITBAR_BLOCK4
-#define SPLITBAR_BLOCK16 SPLITBAR_BLOCK8 , SPLITBAR_BLOCK8
-#define SPLITBAR_BLOCK32 SPLITBAR_BLOCK16 , SPLITBAR_BLOCK16
-
-#define SPLITBAR_ALTLINE1 170,242,170,202,170,170
-#define SPLITBAR_ALTLINE2 170,243,224,255,183,255
-#define SPLITBAR_ALTBLOCK2 SPLITBAR_ALTLINE1 , SPLITBAR_ALTLINE2
-#define SPLITBAR_ALTBLOCK4 SPLITBAR_ALTBLOCK2 , SPLITBAR_ALTBLOCK2
-#define SPLITBAR_ALTBLOCK8 SPLITBAR_ALTBLOCK4 , SPLITBAR_ALTBLOCK4
-
-static unsigned char splitbar_png[32*32*6] =
-{
- SPLITBAR_BLOCK32,
- SPLITBAR_BLOCK32,
- SPLITBAR_BLOCK32,
- SPLITBAR_BLOCK32,
- SPLITBAR_BLOCK32,
- SPLITBAR_BLOCK32,
- SPLITBAR_BLOCK32,
- SPLITBAR_BLOCK32,
- SPLITBAR_BLOCK32,
- SPLITBAR_BLOCK32,
- SPLITBAR_BLOCK32,
- SPLITBAR_BLOCK32,
- SPLITBAR_BLOCK32,
- SPLITBAR_BLOCK32,
- SPLITBAR_BLOCK32,
- SPLITBAR_BLOCK8,
- SPLITBAR_BLOCK8,
- SPLITBAR_ALTBLOCK8,
- SPLITBAR_BLOCK8,
- SPLITBAR_BLOCK32,
- SPLITBAR_BLOCK32,
- SPLITBAR_BLOCK32,
- SPLITBAR_BLOCK32,
- SPLITBAR_BLOCK32,
- SPLITBAR_BLOCK32,
- SPLITBAR_BLOCK32,
- SPLITBAR_BLOCK32,
- SPLITBAR_BLOCK32,
- SPLITBAR_BLOCK32,
- SPLITBAR_BLOCK32,
- SPLITBAR_BLOCK32,
- SPLITBAR_BLOCK32,
- SPLITBAR_BLOCK32,
- SPLITBAR_BLOCK32,
- SPLITBAR_BLOCK32
-};
-
-struct FTVImageInfo
-{
- const char *alt;
- const char *name;
- const unsigned char *data;
- unsigned int len;
- unsigned short width, height;
-};
-
-//extern FTVImageInfo image_info[];
-
-#define FTVIMG_blank 0
-#define FTVIMG_doc 1
-#define FTVIMG_folderclosed 2
-#define FTVIMG_folderopen 3
-#define FTVIMG_lastnode 4
-#define FTVIMG_link 5
-#define FTVIMG_mlastnode 6
-#define FTVIMG_mnode 7
-#define FTVIMG_node 8
-#define FTVIMG_plastnode 9
-#define FTVIMG_pnode 10
-#define FTVIMG_vertline 11
-
-#define FTV_S(name) #name
-#define FTV_ICON_FILE(name) "ftv2" FTV_S(name) ".png"
-#define FTVIMG_INDEX(name) FTVIMG_ ## name
-#define FTV_INFO(name) ( image_info[FTVIMG_INDEX(name)] )
-#define FTV_IMGATTRIBS(name) \
- "src=\"" FTV_ICON_FILE(name) "\" " \
- "alt=\"" << FTV_INFO(name).alt << "\" " \
- "width=\"" << FTV_INFO(name).width << "\" " \
- "height=\"" << FTV_INFO(name).height << "\" "
-
-
-static FTVImageInfo image_info[] =
-{
- { "&#160;", "ftv2blank.png", 0 /*ftv2blank_png*/ ,174,16,22 },
- { "*", "ftv2doc.png", 0 /*ftv2doc_png*/ ,255,24,22 },
- { "+", "ftv2folderclosed.png", 0 /*ftv2folderclosed_png*/ ,259,24,22 },
- { "-", "ftv2folderopen.png", 0 /*ftv2folderopen_png*/ ,261,24,22 },
- { "\\", "ftv2lastnode.png", 0 /*ftv2lastnode_png*/ ,233,16,22 },
- { "-", "ftv2link.png", 0 /*ftv2link_png*/ ,358,24,22 },
- { "\\", "ftv2mlastnode.png", 0 /*ftv2mlastnode_png*/ ,160,16,22 },
- { "o", "ftv2mnode.png", 0 /*ftv2mnode_png*/ ,194,16,22 },
- { "o", "ftv2node.png", 0 /*ftv2node_png*/ ,235,16,22 },
- { "\\", "ftv2plastnode.png", 0 /*ftv2plastnode_png*/ ,165,16,22 },
- { "o", "ftv2pnode.png", 0 /*ftv2pnode_png*/ ,200,16,22 },
- { "|", "ftv2vertline.png", 0 /*ftv2vertline_png*/ ,229,16,22 },
- { 0, 0, 0, 0, 0, 0 }
-};
-
-static ColoredImgDataItem ftv_image_data[] =
-{
- { "ftv2blank.png", 16, 22, blank_png, blank_png },
- { "ftv2doc.png", 24, 22, doc_png, doc_a_png },
- { "ftv2folderclosed.png", 24, 22, folderclosed_png, folderclosed_a_png },
- { "ftv2folderopen.png", 24, 22, folderopen_png, folderopen_a_png },
- { "ftv2lastnode.png", 16, 22, blank_png, blank_png },
- { "ftv2link.png", 24, 22, doc_png, doc_a_png },
- { "ftv2mlastnode.png", 16, 22, arrow_down_png, arrow_down_a_png },
- { "ftv2mnode.png", 16, 22, arrow_down_png, arrow_down_a_png },
- { "ftv2node.png", 16, 22, blank_png, blank_png },
- { "ftv2plastnode.png", 16, 22, arrow_right_png, arrow_right_a_png },
- { "ftv2pnode.png", 16, 22, arrow_right_png, arrow_right_a_png },
- { "ftv2vertline.png", 16, 22, blank_png, blank_png },
- { "ftv2splitbar.png", 6,1024, splitbar_png, 0 },
- { 0, 0, 0, 0, 0 }
-};
-
-static int folderId=1;
-
-struct FTVNode
-{
- FTVNode(bool dir,const char *r,const char *f,const char *a,const char *n,bool sepIndex,bool navIndex)
- : isLast(TRUE), isDir(dir),ref(r),file(f),anchor(a),name(n), index(0),
- parent(0), separateIndex(sepIndex), addToNavIndex(navIndex) { children.setAutoDelete(TRUE); }
- bool isLast;
- bool isDir;
- QCString ref;
- QCString file;
- QCString anchor;
- QCString name;
- int index;
- QList<FTVNode> children;
- FTVNode *parent;
- bool separateIndex;
- bool addToNavIndex;
-};
-
-
-//----------------------------------------------------------------------------
-
-/*! Constructs an ftv help object.
- * The object has to be \link initialize() initialized\endlink before it can
- * be used.
- */
-FTVHelp::FTVHelp(bool TLI)
-{
- /* initial depth */
- m_indentNodes = new QList<FTVNode>[MAX_INDENT];
- m_indentNodes[0].setAutoDelete(TRUE);
- m_indent=0;
- m_topLevelIndex = TLI;
-}
-
-/*! Destroys the ftv help object. */
-FTVHelp::~FTVHelp()
-{
- delete[] m_indentNodes;
-}
-
-/*! This will create a folder tree view table of contents file (tree.js).
- * \sa finalize()
- */
-void FTVHelp::initialize()
-{
-}
-
-/*! Finalizes the FTV help. This will finish and close the
- * contents file (index.js).
- * \sa initialize()
- */
-void FTVHelp::finalize()
-{
- generateTreeView();
-}
-
-/*! Increase the level of the contents hierarchy.
- * This will start a new sublist in contents file.
- * \sa decContentsDepth()
- */
-void FTVHelp::incContentsDepth()
-{
- //printf("incContentsDepth() indent=%d\n",m_indent);
- m_indent++;
- ASSERT(m_indent<MAX_INDENT);
-}
-
-/*! Decrease the level of the contents hierarchy.
- * This will end the current sublist.
- * \sa incContentsDepth()
- */
-void FTVHelp::decContentsDepth()
-{
- //printf("decContentsDepth() indent=%d\n",m_indent);
- ASSERT(m_indent>0);
- if (m_indent>0)
- {
- m_indent--;
- QList<FTVNode> *nl = &m_indentNodes[m_indent];
- FTVNode *parent = nl->getLast();
- if (parent)
- {
- QList<FTVNode> *children = &m_indentNodes[m_indent+1];
- while (!children->isEmpty())
- {
- parent->children.append(children->take(0));
- }
- }
- }
-}
-
-/*! Add a list item to the contents file.
- * \param isDir TRUE if the item is a directory, FALSE if it is a text
- * \param ref the URL of to the item.
- * \param file the file containing the definition of the item
- * \param anchor the anchor within the file.
- * \param name the name of the item.
- * \param separateIndex put the entries in a separate index file
- * \param addToNavIndex add this entry to the quick navigation index
- */
-void FTVHelp::addContentsItem(bool isDir,
- const char *name,
- const char *ref,
- const char *file,
- const char *anchor,
- bool separateIndex,
- bool addToNavIndex
- )
-{
- //printf("addContentsItem(%s,%s,%s,%s)\n",name,ref,file,anchor);
- QList<FTVNode> *nl = &m_indentNodes[m_indent];
- FTVNode *newNode = new FTVNode(isDir,ref,file,anchor,name,separateIndex,addToNavIndex);
- if (!nl->isEmpty())
- {
- nl->getLast()->isLast=FALSE;
- }
- nl->append(newNode);
- newNode->index = nl->count()-1;
- if (m_indent>0)
- {
- QList<FTVNode> *pnl = &m_indentNodes[m_indent-1];
- newNode->parent = pnl->getLast();
- }
-
-}
-
-static QCString node2URL(FTVNode *n)
-{
- QCString url = n->file;
- if (!url.isEmpty() && url.at(0)=='!') // relative URL
- {
- // remove leading !
- url = url.mid(1);
- }
- else if (!url.isEmpty() && url.at(0)=='^') // absolute URL
- {
- // skip, keep ^ in the output
- }
- else // local file (with optional anchor)
- {
- url+=Doxygen::htmlFileExtension;
- if (!n->anchor.isEmpty()) url+="#"+n->anchor;
- }
- return url;
-}
-
-
-void FTVHelp::generateIndent(FTextStream &t, FTVNode *n,int level)
-{
- if (n->parent)
- {
- generateIndent(t,n->parent,level+1);
- }
- // from the root up to node n do...
- if (level==0) // item before a dir or document
- {
- if (n->isLast)
- {
- if (n->isDir)
- {
- t << "<img " << FTV_IMGATTRIBS(plastnode) << "onclick=\"toggleFolder('folder" << folderId << "', this)\"/>";
- }
- else
- {
- t << "<img " << FTV_IMGATTRIBS(lastnode) << "/>";
- }
- }
- else
- {
- if (n->isDir)
- {
- t << "<img " << FTV_IMGATTRIBS(pnode) << "onclick=\"toggleFolder('folder" << folderId << "', this)\"/>";
- }
- else
- {
- t << "<img " << FTV_IMGATTRIBS(node) << "/>";
- }
- }
- }
- else // item at another level
- {
- if (n->isLast)
- {
- t << "<img " << FTV_IMGATTRIBS(blank) << "/>";
- }
- else
- {
- t << "<img " << FTV_IMGATTRIBS(vertline) << "/>";
- }
- }
-}
-
-void FTVHelp::generateLink(FTextStream &t,FTVNode *n)
-{
- //printf("FTVHelp::generateLink(ref=%s,file=%s,anchor=%s\n",
- // n->ref.data(),n->file.data(),n->anchor.data());
- if (n->file.isEmpty()) // no link
- {
- t << "<b>" << convertToHtml(n->name) << "</b>";
- }
- else // link into other frame
- {
- if (!n->ref.isEmpty()) // link to entity imported via tag file
- {
- t << "<a class=\"elRef\" ";
- t << externalLinkTarget() << externalRef("",n->ref,FALSE);
- }
- else // local link
- {
- t << "<a class=\"el\" ";
- }
- t << "href=\"";
- t << externalRef("",n->ref,TRUE);
- t << node2URL(n);
- if (m_topLevelIndex)
- t << "\" target=\"basefrm\">";
- else
- t << "\" target=\"_self\">";
- t << convertToHtml(n->name);
- t << "</a>";
- if (!n->ref.isEmpty())
- {
- t << "&#160;[external]";
- }
- }
-}
-
-void FTVHelp::generateJSLink(FTextStream &t,FTVNode *n)
-{
- if (n->file.isEmpty()) // no link
- {
- t << "\"" << convertToJSString(n->name) << "\", null, ";
- }
- else // link into other page
- {
- // TODO: use m_topLevelIndex
- t << "\"" << convertToJSString(n->name) << "\", \"";
- t << externalRef("",n->ref,TRUE);
- t << node2URL(n);
- t << "\", ";
- }
-}
-
-void FTVHelp::generateTree(FTextStream &t, const QList<FTVNode> &nl,int level)
-{
- QCString spaces;
- spaces.fill(' ',level*2+8);
- QListIterator<FTVNode> nli(nl);
- FTVNode *n;
- for (nli.toFirst();(n=nli.current());++nli)
- {
- t << spaces << "<p>";
- generateIndent(t,n,0);
- if (n->isDir)
- {
- t << "<img " << FTV_IMGATTRIBS(folderclosed) << "onclick=\"toggleFolder('folder" << folderId << "', this)\"/>";
- generateLink(t,n);
- t << "</p>\n";
- t << spaces << "<div id=\"folder" << folderId << "\">\n";
- folderId++;
- generateTree(t,n->children,level+1);
- t << spaces << "</div>\n";
- }
- else
- {
- t << "<img " << FTV_IMGATTRIBS(doc) << "/>";
- generateLink(t,n);
- t << "</p>\n";
- }
- }
-}
-
-static void writePathToNode(FTextStream &tidx,FTVNode *leaf,FTVNode *n)
-{
- if (n->parent)
- {
- writePathToNode(tidx,leaf,n->parent);
- }
- tidx << n->index;
- if (leaf!=n) tidx << ",";
-}
-
-bool childOfHierarchy(const FTVNode *n)
-{
- if (n==0) return FALSE;
- if (n->file=="hierarchy")
- return TRUE;
- else
- return childOfHierarchy(n->parent);
-}
-
-bool dupOfParent(const FTVNode *n)
-{
- if (n->parent==0) return FALSE;
- if (n->file==n->parent->file) return TRUE;
- return FALSE;
-}
-
-bool FTVHelp::generateJSTree(FTextStream &tidx,FTextStream &t, const QList<FTVNode> &nl,int level,bool &first)
-{
- QCString indentStr;
- indentStr.fill(' ',level*2);
- bool found=FALSE;
- QListIterator<FTVNode> nli(nl);
- FTVNode *n;
- for (nli.toFirst();(n=nli.current());++nli)
- {
- // terminate previous entry
- if (!first) t << "," << endl;
- first=FALSE;
-
- // start entry
- if (!found)
- {
- t << "[" << endl;
- }
- found=TRUE;
-
- //if (!n->file.isEmpty() && !childOfHierarchy(n->parent))
- if (n->addToNavIndex)
- {
- tidx << "," << endl << "\"" << node2URL(n) << "\":[";
- writePathToNode(tidx,n,n);
- tidx << "]";
- }
-
- if (n->separateIndex) // store items in a separate file for dynamic loading
- {
- bool firstChild=TRUE;
- t << indentStr << " [ ";
- generateJSLink(t,n);
- if (n->children.count()>0) // write children to separate file for dynamic loading
- {
- QCString fileId = n->file;
- if (dupOfParent(n)) fileId+="_dup";
- QFile f(Config_getString("HTML_OUTPUT")+"/"+fileId+".js");
- if (f.open(IO_WriteOnly))
- {
- FTextStream tt(&f);
- QCString varId = fileId;
- int i=fileId.findRev('/');
- if (i>=0) varId = varId.mid(i+1);
- tt << "var " << varId << " =" << endl;
- generateJSTree(tidx,tt,n->children,1,firstChild);
- tt << endl << "];";
- }
- // write file name without extension as marker
- t << "\"" << fileId << "\" ]";
- //if (n->file!="hierarchy") addFilesToIndex(tidx,n);
- }
- else // no children
- {
- t << "null ]";
- }
- }
- else // show items in this file
- {
- bool firstChild=TRUE;
- t << indentStr << " [ ";
- generateJSLink(t,n);
- bool emptySection = !generateJSTree(tidx,t,n->children,level+1,firstChild);
- if (emptySection)
- t << "null ]";
- else
- t << endl << indentStr << " ] ]";
- }
- }
- return found;
-}
-
-// new style images
-void FTVHelp::generateTreeViewImages()
-{
- QCString dname=Config_getString("HTML_OUTPUT");
- writeColoredImgData(dname,ftv_image_data);
-}
-
-// new style scripts
-void FTVHelp::generateTreeViewScripts()
-{
- // generate navtree.js
- {
- QCString htmlOutput = Config_getString("HTML_OUTPUT");
- QFile f(htmlOutput+"/navtree.js");
- QFile fidx(htmlOutput+"/navtreeindex.js");
- if (f.open(IO_WriteOnly) && fidx.open(IO_WriteOnly))
- {
- FTextStream tidx(&fidx);
- tidx << "var NAVTREEINDEX =" << endl;
- tidx << "{" << endl;
- FTextStream t(&f);
- t << "var NAVTREE =" << endl;
- t << "[" << endl;
- t << " [ ";
- QCString &projName = Config_getString("PROJECT_NAME");
- if (projName.isEmpty())
- {
- if (Doxygen::mainPage && !Doxygen::mainPage->title().isEmpty()) // Use title of main page as root
- {
- t << "\"" << convertToJSString(Doxygen::mainPage->title()) << "\", ";
- }
- else // Use default section title as root
- {
- LayoutNavEntry *lne = LayoutDocManager::instance().rootNavEntry()->find(LayoutNavEntry::MainPage);
- t << "\"" << convertToJSString(lne->title()) << "\", ";
- }
- }
- else // use PROJECT_NAME as root tree element
- {
- t << "\"" << convertToJSString(projName) << "\", ";
- }
- t << "\"index" << Doxygen::htmlFileExtension << "\", ";
-
- tidx << "\"index" << Doxygen::htmlFileExtension << "\":[]";
-
- bool first=TRUE;
- generateJSTree(tidx,t,m_indentNodes[0],1,first);
-
- if (first)
- t << "]" << endl;
- else
- t << endl << " ] ]" << endl;
- t << "];" << endl;
- t << endl << navtree_script;
-
- tidx << endl << "};" << endl;
- }
- }
- // generate resize.js
- {
- QFile f(Config_getString("HTML_OUTPUT")+"/resize.js");
- if (f.open(IO_WriteOnly))
- {
- FTextStream t(&f);
- t << resize_script;
- }
- }
- // generate navtree.css
- {
- QFile f(Config_getString("HTML_OUTPUT")+"/navtree.css");
- if (f.open(IO_WriteOnly))
- {
- FTextStream t(&f);
- t << replaceColorMarkers(navtree_css);
- }
- }
-}
-
-// old style script (used for inline trees)
-void FTVHelp::generateScript(FTextStream &t)
-{
- t << " <script type=\"text/javascript\">\n";
- t << " <!-- // Hide script from old browsers\n";
- t << " \n";
-
- /* User has clicked on a node (folder or +/-) in the tree */
- t << " function toggleFolder(id, imageNode) \n";
- t << " {\n";
- t << " var folder = document.getElementById(id);\n";
- t << " var l = imageNode.src.length;\n";
- /* If the user clicks on the book icon, we move left one image so
- * the code (below) will also adjust the '+' icon.
- */
- t << " if (imageNode.src.substring(l-20,l)==\"" FTV_ICON_FILE(folderclosed) "\" || \n";
- t << " imageNode.src.substring(l-18,l)==\"" FTV_ICON_FILE(folderopen) "\")\n";
- t << " {\n";
- t << " imageNode = imageNode.previousSibling;\n";
- t << " l = imageNode.src.length;\n";
- t << " }\n";
- t << " if (folder == null) \n";
- t << " {\n";
- t << " } \n";
- /* Node controls a open section, we need to close it */
- t << " else if (folder.style.display == \"block\") \n";
- t << " {\n";
- t << " if (imageNode != null) \n";
- t << " {\n";
- t << " imageNode.nextSibling.src = \"" FTV_ICON_FILE(folderclosed) "\";\n";
- t << " if (imageNode.src.substring(l-13,l) == \"" FTV_ICON_FILE(mnode) "\")\n";
- t << " {\n";
- t << " imageNode.src = \"" FTV_ICON_FILE(pnode) "\";\n";
- t << " }\n";
- t << " else if (imageNode.src.substring(l-17,l) == \"" FTV_ICON_FILE(mlastnode) "\")\n";
- t << " {\n";
- t << " imageNode.src = \"" FTV_ICON_FILE(plastnode) "\";\n";
- t << " }\n";
- t << " }\n";
- t << " folder.style.display = \"none\";\n";
- t << " } \n";
- t << " else \n"; /* section is closed, we need to open it */
- t << " {\n";
- t << " if (imageNode != null) \n";
- t << " {\n";
- t << " imageNode.nextSibling.src = \"" FTV_ICON_FILE(folderopen) "\";\n";
- t << " if (imageNode.src.substring(l-13,l) == \"" FTV_ICON_FILE(pnode) "\")\n";
- t << " {\n";
- t << " imageNode.src = \"" FTV_ICON_FILE(mnode) "\";\n";
- t << " }\n";
- t << " else if (imageNode.src.substring(l-17,l) == \"" FTV_ICON_FILE(plastnode) "\")\n";
- t << " {\n";
- t << " imageNode.src = \"" FTV_ICON_FILE(mlastnode) "\";\n";
- t << " }\n";
- t << " }\n";
- t << " folder.style.display = \"block\";\n";
- t << " }\n";
- t << " }\n";
- t << "\n";
- t << " // End script hiding --> \n";
- t << " </script>\n";
-}
-
-// write tree inside page
-void FTVHelp::generateTreeViewInline(FTextStream &t)
-{
- generateScript(t);
- t << " <div class=\"directory-alt\">\n";
- t << " <br/>\n";
- t << " <div style=\"display: block;\">\n";
-
- generateTree(t,m_indentNodes[0],0);
-
- t << " </div>\n";
- t << " </div>\n";
-}
-
-// write old style index.html and tree.html
-void FTVHelp::generateTreeView()
-{
- generateTreeViewImages();
- generateTreeViewScripts();
-}
-
diff --git a/trunk/src/ftvhelp.h b/trunk/src/ftvhelp.h
deleted file mode 100644
index 89e9e62..0000000
--- a/trunk/src/ftvhelp.h
+++ /dev/null
@@ -1,80 +0,0 @@
-/******************************************************************************
- *
- * Copyright (C) 1997-2012 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.
- *
- */
-
-/******************************************************************************
- * ftvhelp.h,v 1.0 2000/09/06 16:09:00
- *
- * Kenney Wong <kwong@ea.com>
- *
- * Folder Tree View for offline help on browsers that do not support HTML Help.
- */
-
-#ifndef FTVHELP_H
-#define FTVHELP_H
-
-#include "qtbc.h"
-#include <qtextstream.h>
-#include <qlist.h>
-#include "index.h"
-
-class QFile;
-struct FTVNode;
-class FTextStream;
-
-/*! A class that generates a dynamic tree view side panel.
- */
-class FTVHelp : public IndexIntf
-{
- public:
- FTVHelp(bool LTI);
- ~FTVHelp();
- void initialize();
- void finalize();
- void incContentsDepth();
- void decContentsDepth();
- void addContentsItem(bool isDir,
- const char *name,
- const char *ref,
- const char *file,
- const char *anchor,
- bool separateIndex=FALSE,
- bool addToNavIndex=FALSE);
- //void addIndexItem(const char *, const char *,
- // const char *, const char *,
- // const char *, const MemberDef *) {}
- void addIndexItem(Definition *,MemberDef *,const char *) {}
- void addIndexFile(const char *) {}
- void addImageFile(const char *) {}
- void addStyleSheetFile(const char *) {}
- void generateTreeView();
- void generateTreeViewInline(FTextStream &t);
- static void generateTreeViewImages();
- void generateTreeViewScripts();
- private:
- void generateScript(FTextStream &t);
- void generateTree(FTextStream &t,const QList<FTVNode> &nl,int level);
- bool generateJSTree(FTextStream &tidx,FTextStream &t,const QList<FTVNode> &nl,int level,bool &first);
- //bool generateJSTreeTopLevel(FTextStream &tidx,FTextStream &t,const QList<FTVNode> &nl,int level,bool &first);
- void generateIndent(FTextStream &t,FTVNode *n,int level);
- void generateLink(FTextStream &t,FTVNode *n);
- void generateJSLink(FTextStream &t,FTVNode *n);
- QList<FTVNode> *m_indentNodes;
- int m_indent;
- bool m_topLevelIndex;
-};
-
-
-#endif /* FTVHELP_H */
-
diff --git a/trunk/src/groupdef.cpp b/trunk/src/groupdef.cpp
deleted file mode 100644
index 57d04f7..0000000
--- a/trunk/src/groupdef.cpp
+++ /dev/null
@@ -1,1475 +0,0 @@
-/******************************************************************************
- *
- *
- *
- * Copyright (C) 1997-2012 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.
- *
- */
-
-#include <ctype.h>
-#include <qregexp.h>
-#include "qtbc.h"
-#include "groupdef.h"
-#include "classdef.h"
-#include "filedef.h"
-#include "classlist.h"
-#include "outputlist.h"
-#include "namespacedef.h"
-#include "language.h"
-#include "util.h"
-#include "memberlist.h"
-#include "message.h"
-#include "membergroup.h"
-#include "doxygen.h"
-#include "pagedef.h"
-#include "docparser.h"
-#include "searchindex.h"
-#include "dot.h"
-#include "vhdldocgen.h"
-#include "layout.h"
-#include "arguments.h"
-#include "entry.h"
-
-//---------------------------------------------------------------------------
-
-GroupDef::GroupDef(const char *df,int dl,const char *na,const char *t,
- const char *refFileName) : Definition(df,dl,na)
-{
- fileList = new FileList;
- classSDict = new ClassSDict(17);
- groupList = new GroupList;
- namespaceSDict = new NamespaceSDict(17);
- pageDict = new PageSDict(17);
- exampleDict = new PageSDict(17);
- dirList = new DirList;
- allMemberNameInfoSDict = new MemberNameInfoSDict(17);
- if (refFileName)
- {
- fileName=stripExtension(refFileName);
- }
- else
- {
- fileName = (QCString)"group_"+na;
- }
- setGroupTitle( t );
- memberGroupSDict = new MemberGroupSDict;
- memberGroupSDict->setAutoDelete(TRUE);
-
- allMemberList = new MemberList(MemberList::allMembersList);
-
- visited = 0;
- groupScope = 0;
-}
-
-GroupDef::~GroupDef()
-{
- delete fileList;
- delete classSDict;
- delete groupList;
- delete namespaceSDict;
- delete pageDict;
- delete exampleDict;
- delete allMemberList;
- delete allMemberNameInfoSDict;
- delete memberGroupSDict;
- delete dirList;
-}
-
-void GroupDef::setGroupTitle( const char *t )
-{
- if ( t && strlen(t) )
- {
- title = t;
- titleSet = TRUE;
- }
- else
- {
- title = name();
- title.at(0)=toupper(title.at(0));
- titleSet = FALSE;
- }
-}
-
-
-void GroupDef::distributeMemberGroupDocumentation()
-{
- MemberGroupSDict::Iterator mgli(*memberGroupSDict);
- MemberGroup *mg;
- for (;(mg=mgli.current());++mgli)
- {
- mg->distributeMemberGroupDocumentation();
- }
-}
-
-void GroupDef::findSectionsInDocumentation()
-{
- docFindSections(documentation(),this,0,docFile());
- MemberGroupSDict::Iterator mgli(*memberGroupSDict);
- MemberGroup *mg;
- for (;(mg=mgli.current());++mgli)
- {
- mg->findSectionsInDocumentation();
- }
-
- QListIterator<MemberList> mli(m_memberLists);
- MemberList *ml;
- for (mli.toFirst();(ml=mli.current());++mli)
- {
- if (ml->listType()&MemberList::declarationLists)
- {
- ml->findSectionsInDocumentation();
- }
- }
-}
-
-void GroupDef::addFile(const FileDef *def)
-{
- static bool sortBriefDocs = Config_getBool("SORT_BRIEF_DOCS");
- if (def->isHidden()) return;
- if (sortBriefDocs)
- fileList->inSort(def);
- else
- fileList->append(def);
-}
-
-bool GroupDef::addClass(const ClassDef *cd)
-{
- static bool sortBriefDocs = Config_getBool("SORT_BRIEF_DOCS");
- if (cd->isHidden()) return FALSE;
- if (classSDict->find(cd->qualifiedName())==0)
- {
- QCString qn = cd->qualifiedName();
- //printf("--- addClass %s sort=%d\n",qn.data(),sortBriefDocs);
- if (sortBriefDocs)
- {
- classSDict->inSort(cd->qualifiedName(),cd);
- }
- else
- {
- int i=qn.findRev("::");
- if (i==-1) i=qn.find('.');
- bool found=FALSE;
- //printf("i=%d\n",i);
- if (i!=-1)
- {
- // add nested classes (e.g. A::B, A::C) after their parent (A) in
- // order of insertion
- QCString scope = qn.left(i);
- int j=classSDict->findAt(scope);
- if (j!=-1)
- {
- while (j<(int)classSDict->count() &&
- classSDict->at(j)->qualifiedName().left(i)==scope)
- {
- //printf("skipping over %s\n",classSDict->at(j)->qualifiedName().data());
- j++;
- }
- //printf("Found scope at index %d\n",j);
- classSDict->insertAt(j,cd->qualifiedName(),cd);
- found=TRUE;
- }
- }
- if (!found) // no insertion point found -> just append
- {
- classSDict->append(cd->qualifiedName(),cd);
- }
- }
- return TRUE;
- }
- return FALSE;
-}
-
-bool GroupDef::addNamespace(const NamespaceDef *def)
-{
- static bool sortBriefDocs = Config_getBool("SORT_BRIEF_DOCS");
- if (def->isHidden()) return FALSE;
- if (namespaceSDict->find(def->name())==0)
- {
- if (sortBriefDocs)
- namespaceSDict->inSort(def->name(),def);
- else
- namespaceSDict->append(def->name(),def);
- return TRUE;
- }
- return FALSE;
-}
-
-void GroupDef::addDir(const DirDef *def)
-{
- if (def->isHidden()) return;
- if (Config_getBool("SORT_BRIEF_DOCS"))
- dirList->inSort(def);
- else
- dirList->append(def);
-}
-
-void GroupDef::addPage(PageDef *def)
-{
- if (def->isHidden()) return;
- //printf("Making page %s part of a group\n",def->name.data());
- pageDict->append(def->name(),def);
- def->makePartOfGroup(this);
-}
-
-void GroupDef::addExample(const PageDef *def)
-{
- if (def->isHidden()) return;
- exampleDict->append(def->name(),def);
-}
-
-
-void GroupDef::addMembersToMemberGroup()
-{
- QListIterator<MemberList> mli(m_memberLists);
- MemberList *ml;
- for (mli.toFirst();(ml=mli.current());++mli)
- {
- if (ml->listType()&MemberList::declarationLists)
- {
- ::addMembersToMemberGroup(ml,&memberGroupSDict,this);
- }
- }
-
- //printf("GroupDef::addMembersToMemberGroup() memberGroupList=%d\n",memberGroupList->count());
- MemberGroupSDict::Iterator mgli(*memberGroupSDict);
- MemberGroup *mg;
- for (;(mg=mgli.current());++mgli)
- {
- mg->setInGroup(TRUE);
- }
-}
-
-
-bool GroupDef::insertMember(MemberDef *md,bool docOnly)
-{
- if (md->isHidden()) return FALSE;
- //printf("GroupDef(%s)::insertMember(%s)\n", title.data(), md->name().data());
- MemberNameInfo *mni=0;
- if ((mni=(*allMemberNameInfoSDict)[md->name()]))
- { // member with this name already found
- MemberNameInfoIterator srcMnii(*mni);
- MemberInfo *srcMi;
- for ( ; (srcMi=srcMnii.current()) ; ++srcMnii )
- {
- MemberDef *srcMd = srcMi->memberDef;
- if (srcMd==md) return FALSE; // already added before!
-
- bool sameScope = srcMd->getOuterScope()==md->getOuterScope() || // same class or namespace
- // both inside a file => definition and declaration do not have to be in the same file
- (srcMd->getOuterScope()->definitionType()==Definition::TypeFile &&
- md->getOuterScope()->definitionType()==Definition::TypeFile);
-
- LockingPtr<ArgumentList> srcMdAl = srcMd->argumentList();
- LockingPtr<ArgumentList> mdAl = md->argumentList();
- LockingPtr<ArgumentList> tSrcMdAl = srcMd->templateArguments();
- LockingPtr<ArgumentList> tMdAl = md->templateArguments();
-
- if (srcMd->isFunction() && md->isFunction() && // both are a function
- ((tSrcMdAl.pointer()==0 && tMdAl.pointer()==0) ||
- (tSrcMdAl.pointer()!=0 && tMdAl.pointer()!=0 && tSrcMdAl->count()==tMdAl->count())
- ) && // same number of template arguments
- matchArguments2(srcMd->getOuterScope(),srcMd->getFileDef(),srcMdAl.pointer(),
- md->getOuterScope(),md->getFileDef(),mdAl.pointer(),
- TRUE
- ) && // matching parameters
- sameScope // both are found in the same scope
- )
- {
- if (srcMd->getGroupAlias()==0)
- {
- md->setGroupAlias(srcMd);
- }
- else
- {
- md->setGroupAlias(srcMd->getGroupAlias());
- }
- return FALSE; // member is the same as one that is already added
- }
- }
- mni->append(new MemberInfo(md,md->protection(),md->virtualness(),FALSE));
- }
- else
- {
- mni = new MemberNameInfo(md->name());
- mni->append(new MemberInfo(md,md->protection(),md->virtualness(),FALSE));
- allMemberNameInfoSDict->append(mni->memberName(),mni);
- }
- //printf("Added member!\n");
- allMemberList->append(md);
- switch(md->memberType())
- {
- case MemberDef::Variable:
- if (!docOnly)
- {
- addMemberToList(MemberList::decVarMembers,md);
- }
- addMemberToList(MemberList::docVarMembers,md);
- break;
- case MemberDef::Function:
- if (!docOnly)
- {
- addMemberToList(MemberList::decFuncMembers,md);
- }
- addMemberToList(MemberList::docFuncMembers,md);
- break;
- case MemberDef::Typedef:
- if (!docOnly)
- {
- addMemberToList(MemberList::decTypedefMembers,md);
- }
- addMemberToList(MemberList::docTypedefMembers,md);
- break;
- case MemberDef::Enumeration:
- if (!docOnly)
- {
- addMemberToList(MemberList::decEnumMembers,md);
- }
- addMemberToList(MemberList::docEnumMembers,md);
- break;
- case MemberDef::EnumValue:
- if (!docOnly)
- {
- addMemberToList(MemberList::decEnumValMembers,md);
- }
- addMemberToList(MemberList::docEnumValMembers,md);
- break;
- case MemberDef::Define:
- if (!docOnly)
- {
- addMemberToList(MemberList::decDefineMembers,md);
- }
- addMemberToList(MemberList::docDefineMembers,md);
- break;
- case MemberDef::Signal:
- if (!docOnly)
- {
- addMemberToList(MemberList::decSignalMembers,md);
- }
- addMemberToList(MemberList::docSignalMembers,md);
- break;
- case MemberDef::Slot:
- if (md->protection()==Public)
- {
- if (!docOnly)
- {
- addMemberToList(MemberList::decPubSlotMembers,md);
- }
- addMemberToList(MemberList::docPubSlotMembers,md);
- }
- else if (md->protection()==Protected)
- {
- if (!docOnly)
- {
- addMemberToList(MemberList::decProSlotMembers,md);
- }
- addMemberToList(MemberList::docProSlotMembers,md);
- }
- else
- {
- if (!docOnly)
- {
- addMemberToList(MemberList::decPriSlotMembers,md);
- }
- addMemberToList(MemberList::docPriSlotMembers,md);
- }
- break;
- case MemberDef::Event:
- if (!docOnly)
- {
- addMemberToList(MemberList::decEventMembers,md);
- }
- addMemberToList(MemberList::docEventMembers,md);
- break;
- case MemberDef::Property:
- if (!docOnly)
- {
- addMemberToList(MemberList::decPropMembers,md);
- }
- addMemberToList(MemberList::docPropMembers,md);
- break;
- case MemberDef::Friend:
- if (!docOnly)
- {
- addMemberToList(MemberList::decFriendMembers,md);
- }
- addMemberToList(MemberList::docFriendMembers,md);
- break;
- default:
- err("GroupDef::insertMembers(): "
- "member `%s' (typeid=%d) with scope `%s' inserted in group scope `%s'!\n",
- md->name().data(),md->memberType(),
- md->getClassDef() ? md->getClassDef()->name().data() : "",
- name().data());
- }
- return TRUE;
-}
-
-void GroupDef::removeMember(MemberDef *md)
-{
- // fprintf(stderr, "GroupDef(%s)::removeMember( %s )\n", title.data(), md->name().data());
- MemberNameInfo *mni = allMemberNameInfoSDict->find(md->name());
- if (mni)
- {
- MemberNameInfoIterator mnii(*mni);
- while( mnii.current() )
- {
- if( mnii.current()->memberDef == md )
- {
- mni->remove(mnii.current());
- break;
- }
- ++mnii;
- }
- if( mni->isEmpty() )
- {
- allMemberNameInfoSDict->remove(md->name());
- delete mni;
- }
-
- removeMemberFromList(MemberList::allMembersList,md);
- switch(md->memberType())
- {
- case MemberDef::Variable:
- removeMemberFromList(MemberList::decVarMembers,md);
- removeMemberFromList(MemberList::docVarMembers,md);
- break;
- case MemberDef::Function:
- removeMemberFromList(MemberList::decFuncMembers,md);
- removeMemberFromList(MemberList::docFuncMembers,md);
- break;
- case MemberDef::Typedef:
- removeMemberFromList(MemberList::decTypedefMembers,md);
- removeMemberFromList(MemberList::docTypedefMembers,md);
- break;
- case MemberDef::Enumeration:
- removeMemberFromList(MemberList::decEnumMembers,md);
- removeMemberFromList(MemberList::docEnumMembers,md);
- break;
- case MemberDef::EnumValue:
- removeMemberFromList(MemberList::decEnumValMembers,md);
- removeMemberFromList(MemberList::docEnumValMembers,md);
- break;
- case MemberDef::Define:
- removeMemberFromList(MemberList::decDefineMembers,md);
- removeMemberFromList(MemberList::docDefineMembers,md);
- break;
- case MemberDef::Signal:
- removeMemberFromList(MemberList::decSignalMembers,md);
- removeMemberFromList(MemberList::docSignalMembers,md);
- break;
- case MemberDef::Slot:
- if (md->protection()==Public)
- {
- removeMemberFromList(MemberList::decPubSlotMembers,md);
- removeMemberFromList(MemberList::docPubSlotMembers,md);
- }
- else if (md->protection()==Protected)
- {
- removeMemberFromList(MemberList::decProSlotMembers,md);
- removeMemberFromList(MemberList::docProSlotMembers,md);
- }
- else
- {
- removeMemberFromList(MemberList::decPriSlotMembers,md);
- removeMemberFromList(MemberList::docPriSlotMembers,md);
- }
- break;
- case MemberDef::Event:
- removeMemberFromList(MemberList::decEventMembers,md);
- removeMemberFromList(MemberList::docEventMembers,md);
- break;
- case MemberDef::Property:
- removeMemberFromList(MemberList::decPropMembers,md);
- removeMemberFromList(MemberList::docPropMembers,md);
- break;
- case MemberDef::Friend:
- removeMemberFromList(MemberList::decFriendMembers,md);
- removeMemberFromList(MemberList::docFriendMembers,md);
- break;
- default:
- err("GroupDef::removeMember(): unexpected member remove in file!\n");
- }
- }
-}
-
-bool GroupDef::containsGroup(const GroupDef *def)
-{
- return this==def || groupList->find(def) >= 0;
-}
-
-void GroupDef::addGroup(const GroupDef *def)
-{
- //printf("adding group `%s' to group `%s'\n",def->name().data(),name().data());
- //if (Config_getBool("SORT_MEMBER_DOCS"))
- // groupList->inSort(def);
- //else
- groupList->append(def);
-}
-
-bool GroupDef::isASubGroup() const
-{
- LockingPtr<GroupList> groups = partOfGroups();
- return groups!=0 && groups->count()!=0;
-}
-
-int GroupDef::countMembers() const
-{
- return fileList->count()+
- classSDict->count()+
- namespaceSDict->count()+
- groupList->count()+
- allMemberList->count()+
- pageDict->count()+
- exampleDict->count();
-}
-
-/*! Compute the HTML anchor names for all members in the group */
-void GroupDef::computeAnchors()
-{
- //printf("GroupDef::computeAnchors()\n");
- setAnchors(0,'a',allMemberList);
-}
-
-void GroupDef::writeDetailedDescription(OutputList &ol,const QCString &title)
-{
- if ((!briefDescription().isEmpty() && Config_getBool("REPEAT_BRIEF"))
- || !documentation().isEmpty() || !inbodyDocumentation().isEmpty()
- )
- {
- if (pageDict->count()!=countMembers()) // not only pages -> classical layout
- {
- ol.writeRuler();
- ol.pushGeneratorState();
- ol.disableAllBut(OutputGenerator::Html);
- ol.writeAnchor(0,"details");
- ol.popGeneratorState();
- ol.startGroupHeader();
- ol.parseText(title);
- ol.endGroupHeader();
- }
-
- // repeat brief description
- if (!briefDescription().isEmpty() && Config_getBool("REPEAT_BRIEF"))
- {
- ol.parseDoc(briefFile(),briefLine(),this,0,briefDescription(),FALSE,FALSE);
- }
- // write separator between brief and details
- if (!briefDescription().isEmpty() && Config_getBool("REPEAT_BRIEF") &&
- !documentation().isEmpty())
- {
- ol.pushGeneratorState();
- ol.disable(OutputGenerator::Man);
- ol.disable(OutputGenerator::RTF);
- // ol.newParagraph(); // FIXME:PARA
- ol.enableAll();
- ol.disableAllBut(OutputGenerator::Man);
- ol.writeString("\n\n");
- ol.popGeneratorState();
- }
-
- // write detailed documentation
- if (!documentation().isEmpty())
- {
- ol.parseDoc(docFile(),docLine(),this,0,documentation()+"\n",TRUE,FALSE);
- }
-
- // write inbody documentation
- if (!inbodyDocumentation().isEmpty())
- {
- ol.parseDoc(inbodyFile(),inbodyLine(),this,0,inbodyDocumentation()+"\n",TRUE,FALSE);
- }
- }
-}
-
-void GroupDef::writeBriefDescription(OutputList &ol)
-{
- if (!briefDescription().isEmpty() && Config_getBool("BRIEF_MEMBER_DESC"))
- {
- ol.startParagraph();
- ol.parseDoc(briefFile(),briefLine(),this,0,
- briefDescription(),TRUE,FALSE,0,TRUE,FALSE);
- ol.pushGeneratorState();
- ol.disable(OutputGenerator::RTF);
- ol.writeString(" \n");
- ol.enable(OutputGenerator::RTF);
-
- if (Config_getBool("REPEAT_BRIEF") ||
- !documentation().isEmpty()
- )
- {
- ol.disableAllBut(OutputGenerator::Html);
- ol.startTextLink(0,"details");
- ol.parseText(theTranslator->trMore());
- ol.endTextLink();
- }
- ol.popGeneratorState();
- ol.endParagraph();
- }
-}
-
-void GroupDef::writeGroupGraph(OutputList &ol)
-{
- if (Config_getBool("HAVE_DOT") /*&& Config_getBool("GROUP_GRAPHS")*/ )
- {
- DotGroupCollaboration graph(this);
- if (!graph.isTrivial())
- {
- msg("Generating dependency graph for group %s\n",qualifiedName().data());
- ol.pushGeneratorState();
- ol.disable(OutputGenerator::Man);
- //ol.startParagraph();
- ol.startGroupCollaboration();
- ol.parseText(theTranslator->trCollaborationDiagram(title));
- ol.endGroupCollaboration(graph);
- //ol.endParagraph();
- ol.popGeneratorState();
- }
- }
-}
-
-void GroupDef::writeFiles(OutputList &ol,const QCString &title)
-{
- // write list of files
- if (fileList->count()>0)
- {
- ol.startMemberHeader("files");
- ol.parseText(title);
- ol.endMemberHeader();
- ol.startMemberList();
- FileDef *fd=fileList->first();
- while (fd)
- {
- ol.startMemberItem(fd->getOutputFileBase(),0);
- ol.docify(theTranslator->trFile(FALSE,TRUE)+" ");
- ol.insertMemberAlign();
- ol.writeObjectLink(fd->getReference(),fd->getOutputFileBase(),0,fd->name());
- if (!Config_getString("GENERATE_TAGFILE").isEmpty())
- {
- Doxygen::tagFile << " <file>" << convertToXML(fd->name()) << "</file>" << endl;
- }
- ol.endMemberItem();
- if (!fd->briefDescription().isEmpty() && Config_getBool("BRIEF_MEMBER_DESC"))
- {
- ol.startMemberDescription(fd->getOutputFileBase());
- ol.parseDoc(briefFile(),briefLine(),fd,0,fd->briefDescription(),FALSE,FALSE,0,TRUE,FALSE);
- ol.endMemberDescription();
- }
- fd=fileList->next();
- }
- ol.endMemberList();
- }
-}
-
-void GroupDef::writeNamespaces(OutputList &ol,const QCString &title)
-{
- // write list of namespaces
- namespaceSDict->writeDeclaration(ol,title);
-}
-
-void GroupDef::writeNestedGroups(OutputList &ol,const QCString &title)
-{
- // write list of groups
- int count=0;
- if (groupList->count()>0)
- {
- GroupDef *gd=groupList->first();
- while (gd)
- {
- if (gd->isVisible()) count++;
- gd=groupList->next();
- }
- }
- if (count>0)
- {
- ol.startMemberHeader("groups");
- ol.parseText(title);
- ol.endMemberHeader();
- ol.startMemberList();
- GroupDef *gd=groupList->first();
- while (gd)
- {
- if (gd->isVisible())
- {
- ol.startMemberItem(gd->getOutputFileBase(),0);
- //ol.docify(theTranslator->trGroup(FALSE,TRUE));
- //ol.docify(" ");
- ol.insertMemberAlign();
- ol.writeObjectLink(gd->getReference(),gd->getOutputFileBase(),0,gd->groupTitle());
- if (!Config_getString("GENERATE_TAGFILE").isEmpty())
- {
- Doxygen::tagFile << " <subgroup>" << convertToXML(gd->name()) << "</subgroup>" << endl;
- }
- ol.endMemberItem();
- if (!gd->briefDescription().isEmpty() && Config_getBool("BRIEF_MEMBER_DESC"))
- {
- ol.startMemberDescription(gd->getOutputFileBase());
- ol.parseDoc(briefFile(),briefLine(),gd,0,gd->briefDescription(),FALSE,FALSE,0,TRUE,FALSE);
- ol.endMemberDescription();
- }
- }
- gd=groupList->next();
- }
- ol.endMemberList();
- }
-}
-
-void GroupDef::writeDirs(OutputList &ol,const QCString &title)
-{
- // write list of directories
- if (dirList->count()>0)
- {
- ol.startMemberHeader("dirs");
- ol.parseText(title);
- ol.endMemberHeader();
- ol.startMemberList();
- DirDef *dd=dirList->first();
- while (dd)
- {
- ol.startMemberItem(dd->getOutputFileBase(),0);
- ol.parseText(theTranslator->trDir(FALSE,TRUE));
- ol.insertMemberAlign();
- ol.writeObjectLink(dd->getReference(),dd->getOutputFileBase(),0,dd->shortName());
- ol.endMemberItem();
- if (!Config_getString("GENERATE_TAGFILE").isEmpty())
- {
- Doxygen::tagFile << " <dir>" << convertToXML(dd->displayName()) << "</dir>" << endl;
- }
- if (!dd->briefDescription().isEmpty() && Config_getBool("BRIEF_MEMBER_DESC"))
- {
- ol.startMemberDescription(dd->getOutputFileBase());
- ol.parseDoc(briefFile(),briefLine(),dd,0,dd->briefDescription(),FALSE,FALSE,0,TRUE,FALSE);
- ol.endMemberDescription();
- }
- dd=dirList->next();
- }
-
- ol.endMemberList();
- }
-}
-
-void GroupDef::writeClasses(OutputList &ol,const QCString &title)
-{
- // write list of classes
- classSDict->writeDeclaration(ol,0,title,FALSE);
-}
-
-void GroupDef::writeInlineClasses(OutputList &ol)
-{
- classSDict->writeDocumentation(ol);
-}
-
-void GroupDef::writePageDocumentation(OutputList &ol)
-{
- PageDef *pd=0;
- PageSDict::Iterator pdi(*pageDict);
- for (pdi.toFirst();(pd=pdi.current());++pdi)
- {
- if (!pd->isReference())
- {
- QCString pageName = pd->getOutputFileBase();
-
- if (!Config_getString("GENERATE_TAGFILE").isEmpty())
- {
- Doxygen::tagFile << " <page>" << convertToXML(pageName) << "</page>" << endl;
- }
-
- SectionInfo *si=0;
- if (!pd->title().isEmpty() && !pd->name().isEmpty() &&
- (si=Doxygen::sectionDict[pd->name()])!=0)
- {
- ol.startSection(si->label,si->title,SectionInfo::Subsection);
- ol.docify(si->title);
- ol.endSection(si->label,SectionInfo::Subsection);
- }
- ol.startTextBlock();
- ol.parseDoc(pd->docFile(),pd->docLine(),pd,0,pd->documentation()+pd->inbodyDocumentation(),TRUE,FALSE,0,TRUE,FALSE);
- ol.endTextBlock();
- }
- }
-}
-
-void GroupDef::writeMemberGroups(OutputList &ol)
-{
- /* write user defined member groups */
- if (memberGroupSDict)
- {
- memberGroupSDict->sort();
- /* write user defined member groups */
- MemberGroupSDict::Iterator mgli(*memberGroupSDict);
- MemberGroup *mg;
- for (;(mg=mgli.current());++mgli)
- {
- mg->writeDeclarations(ol,0,0,0,this);
- }
- }
-}
-
-void GroupDef::startMemberDeclarations(OutputList &ol)
-{
- ol.startMemberSections();
-}
-
-void GroupDef::endMemberDeclarations(OutputList &ol)
-{
- ol.endMemberSections();
-}
-
-void GroupDef::startMemberDocumentation(OutputList &ol)
-{
- //printf("** GroupDef::startMemberDocumentation()\n");
- if (Config_getBool("SEPARATE_MEMBER_PAGES"))
- {
- ol.pushGeneratorState();
- ol.disable(OutputGenerator::Html);
- Doxygen::suppressDocWarnings = TRUE;
- }
-}
-
-void GroupDef::endMemberDocumentation(OutputList &ol)
-{
- //printf("** GroupDef::endMemberDocumentation()\n");
- if (Config_getBool("SEPARATE_MEMBER_PAGES"))
- {
- ol.popGeneratorState();
- Doxygen::suppressDocWarnings = FALSE;
- }
-}
-
-void GroupDef::writeAuthorSection(OutputList &ol)
-{
- // write Author section (Man only)
- ol.pushGeneratorState();
- ol.disableAllBut(OutputGenerator::Man);
- ol.startGroupHeader();
- ol.parseText(theTranslator->trAuthor(TRUE,TRUE));
- ol.endGroupHeader();
- ol.parseText(theTranslator->trGeneratedAutomatically(Config_getString("PROJECT_NAME")));
- ol.popGeneratorState();
-}
-
-void GroupDef::writeSummaryLinks(OutputList &ol)
-{
- ol.pushGeneratorState();
- ol.disableAllBut(OutputGenerator::Html);
- QListIterator<LayoutDocEntry> eli(
- LayoutDocManager::instance().docEntries(LayoutDocManager::Group));
- LayoutDocEntry *lde;
- bool first=TRUE;
- for (eli.toFirst();(lde=eli.current());++eli)
- {
- if ((lde->kind()==LayoutDocEntry::GroupClasses && classSDict->declVisible()) ||
- (lde->kind()==LayoutDocEntry::GroupNamespaces && namespaceSDict->declVisible()) ||
- (lde->kind()==LayoutDocEntry::GroupFiles && fileList->count()>0) ||
- (lde->kind()==LayoutDocEntry::GroupNestedGroups && groupList->count()>0) ||
- (lde->kind()==LayoutDocEntry::GroupDirs && dirList->count()>0)
- )
- {
- LayoutDocEntrySection *ls = (LayoutDocEntrySection*)lde;
- QCString label = lde->kind()==LayoutDocEntry::GroupClasses ? "nested-classes" :
- lde->kind()==LayoutDocEntry::GroupNamespaces ? "namespaces" :
- lde->kind()==LayoutDocEntry::GroupFiles ? "files" :
- lde->kind()==LayoutDocEntry::GroupNestedGroups ? "groups" :
- "dirs";
- writeSummaryLink(ol,label,ls->title,first);
- }
- else if (lde->kind()==LayoutDocEntry::MemberDecl)
- {
- LayoutDocEntryMemberDecl *lmd = (LayoutDocEntryMemberDecl*)lde;
- MemberList * ml = getMemberList(lmd->type);
- if (ml && ml->declVisible())
- {
- writeSummaryLink(ol,ml->listTypeAsString(),lmd->title,first);
- }
- }
- }
- if (!first)
- {
- ol.writeString(" </div>\n");
- }
- ol.popGeneratorState();
-}
-
-void GroupDef::writeDocumentation(OutputList &ol)
-{
- //static bool generateTreeView = Config_getBool("GENERATE_TREEVIEW");
- ol.pushGeneratorState();
- startFile(ol,getOutputFileBase(),name(),title,HLI_None);
-
- ol.startHeaderSection();
- writeSummaryLinks(ol);
- ol.startTitleHead(getOutputFileBase());
- ol.pushGeneratorState();
- ol.disable(OutputGenerator::Man);
- ol.parseText(title);
- ol.popGeneratorState();
- ol.endTitleHead(getOutputFileBase(),title);
- addGroupListToTitle(ol,this);
- ol.endHeaderSection();
- ol.startContents();
-
- if (Doxygen::searchIndex)
- {
- Doxygen::searchIndex->setCurrentDoc(title,getOutputFileBase());
- static QRegExp we("[a-zA-Z_][-a-zA-Z_0-9]*");
- int i=0,p=0,l=0;
- while ((i=we.match(title,p,&l))!=-1) // foreach word in the title
- {
- Doxygen::searchIndex->addWord(title.mid(i,l),TRUE);
- p=i+l;
- }
- }
-
- Doxygen::indexList.addIndexItem(this,0,title);
-
- if (!Config_getString("GENERATE_TAGFILE").isEmpty())
- {
- Doxygen::tagFile << " <compound kind=\"group\">" << endl;
- Doxygen::tagFile << " <name>" << convertToXML(name()) << "</name>" << endl;
- Doxygen::tagFile << " <title>" << convertToXML(title) << "</title>" << endl;
- Doxygen::tagFile << " <filename>" << convertToXML(getOutputFileBase()) << Doxygen::htmlFileExtension << "</filename>" << endl;
- }
-
-
- //---------------------------------------- start flexible part -------------------------------
-
- QListIterator<LayoutDocEntry> eli(
- LayoutDocManager::instance().docEntries(LayoutDocManager::Group));
- LayoutDocEntry *lde;
- for (eli.toFirst();(lde=eli.current());++eli)
- {
- switch (lde->kind())
- {
- case LayoutDocEntry::BriefDesc:
- writeBriefDescription(ol);
- break;
- case LayoutDocEntry::MemberDeclStart:
- startMemberDeclarations(ol);
- break;
- case LayoutDocEntry::GroupClasses:
- {
- LayoutDocEntrySection *ls = (LayoutDocEntrySection*)lde;
- writeClasses(ol,ls->title);
- }
- break;
- case LayoutDocEntry::GroupInlineClasses:
- {
- writeInlineClasses(ol);
- }
- break;
- case LayoutDocEntry::GroupNamespaces:
- {
- LayoutDocEntrySection *ls = (LayoutDocEntrySection*)lde;
- writeNamespaces(ol,ls->title);
- }
- break;
- case LayoutDocEntry::MemberGroups:
- writeMemberGroups(ol);
- break;
- case LayoutDocEntry::MemberDecl:
- {
- LayoutDocEntryMemberDecl *lmd = (LayoutDocEntryMemberDecl*)lde;
- writeMemberDeclarations(ol,lmd->type,lmd->title);
- }
- break;
- case LayoutDocEntry::MemberDeclEnd:
- endMemberDeclarations(ol);
- break;
- case LayoutDocEntry::DetailedDesc:
- {
- LayoutDocEntrySection *ls = (LayoutDocEntrySection*)lde;
- writeDetailedDescription(ol,ls->title);
- }
- break;
- case LayoutDocEntry::MemberDefStart:
- startMemberDocumentation(ol);
- break;
- case LayoutDocEntry::MemberDef:
- {
- LayoutDocEntryMemberDef *lmd = (LayoutDocEntryMemberDef*)lde;
- writeMemberDocumentation(ol,lmd->type,lmd->title);
- }
- break;
- case LayoutDocEntry::MemberDefEnd:
- endMemberDocumentation(ol);
- break;
- case LayoutDocEntry::GroupNestedGroups:
- {
- LayoutDocEntrySection *ls = (LayoutDocEntrySection*)lde;
- writeNestedGroups(ol,ls->title);
- }
- break;
- case LayoutDocEntry::GroupPageDocs:
- writePageDocumentation(ol);
- break;
- case LayoutDocEntry::GroupDirs:
- {
- LayoutDocEntrySection *ls = (LayoutDocEntrySection*)lde;
- writeDirs(ol,ls->title);
- }
- break;
- case LayoutDocEntry::GroupFiles:
- {
- LayoutDocEntrySection *ls = (LayoutDocEntrySection*)lde;
- writeFiles(ol,ls->title);
- }
- break;
- case LayoutDocEntry::GroupGraph:
- writeGroupGraph(ol);
- break;
- case LayoutDocEntry::AuthorSection:
- writeAuthorSection(ol);
- break;
- case LayoutDocEntry::ClassIncludes:
- case LayoutDocEntry::ClassInheritanceGraph:
- case LayoutDocEntry::ClassNestedClasses:
- case LayoutDocEntry::ClassCollaborationGraph:
- case LayoutDocEntry::ClassAllMembersLink:
- case LayoutDocEntry::ClassUsedFiles:
- case LayoutDocEntry::ClassInlineClasses:
- case LayoutDocEntry::NamespaceNestedNamespaces:
- case LayoutDocEntry::NamespaceClasses:
- case LayoutDocEntry::NamespaceInlineClasses:
- case LayoutDocEntry::FileClasses:
- case LayoutDocEntry::FileNamespaces:
- case LayoutDocEntry::FileIncludes:
- case LayoutDocEntry::FileIncludeGraph:
- case LayoutDocEntry::FileIncludedByGraph:
- case LayoutDocEntry::FileSourceLink:
- case LayoutDocEntry::FileInlineClasses:
- case LayoutDocEntry::DirSubDirs:
- case LayoutDocEntry::DirFiles:
- case LayoutDocEntry::DirGraph:
- err("Internal inconsistency: member %d should not be part of "
- "LayoutDocManager::Group entry list\n",lde->kind());
- break;
- }
- }
-
- //---------------------------------------- end flexible part -------------------------------
-
- endFile(ol);
-
- ol.popGeneratorState();
-
- if (!Config_getString("GENERATE_TAGFILE").isEmpty())
- {
- writeDocAnchorsToTagFile();
- Doxygen::tagFile << " </compound>" << endl;
- }
-
- if (Config_getBool("SEPARATE_MEMBER_PAGES"))
- {
- allMemberList->sort();
- writeMemberPages(ol);
- }
-
-}
-
-void GroupDef::writeMemberPages(OutputList &ol)
-{
- ol.pushGeneratorState();
- ol.disableAllBut(OutputGenerator::Html);
-
- QListIterator<MemberList> mli(m_memberLists);
- MemberList *ml;
- for (mli.toFirst();(ml=mli.current());++mli)
- {
- if (ml->listType()&MemberList::documentationLists)
- {
- ml->writeDocumentationPage(ol,name(),this);
- }
- }
-
- ol.popGeneratorState();
-}
-
-void GroupDef::writeQuickMemberLinks(OutputList &ol,MemberDef *currentMd) const
-{
- static bool createSubDirs=Config_getBool("CREATE_SUBDIRS");
-
- ol.writeString(" <div class=\"navtab\">\n");
- ol.writeString(" <table>\n");
-
- MemberListIterator mli(*allMemberList);
- MemberDef *md;
- for (mli.toFirst();(md=mli.current());++mli)
- {
- if (md->getGroupDef()==this && md->isLinkable())
- {
- ol.writeString(" <tr><td class=\"navtab\">");
- if (md->isLinkableInProject())
- {
- if (md==currentMd) // selected item => highlight
- {
- ol.writeString("<a class=\"qindexHL\" ");
- }
- else
- {
- ol.writeString("<a class=\"qindex\" ");
- }
- ol.writeString("href=\"");
- if (createSubDirs) ol.writeString("../../");
- ol.writeString(md->getOutputFileBase()+Doxygen::htmlFileExtension+"#"+md->anchor());
- ol.writeString("\">");
- ol.writeString(convertToHtml(md->localName()));
- ol.writeString("</a>");
- }
- ol.writeString("</td></tr>\n");
- }
- }
-
- ol.writeString(" </table>\n");
- ol.writeString(" </div>\n");
-}
-
-
-
-//---- helper functions ------------------------------------------------------
-
-void addClassToGroups(Entry *root,ClassDef *cd)
-{
- QListIterator<Grouping> gli(*root->groups);
- Grouping *g;
- for (;(g=gli.current());++gli)
- {
- GroupDef *gd=0;
- if (!g->groupname.isEmpty() && (gd=Doxygen::groupSDict->find(g->groupname)))
- {
- if (gd->addClass(cd))
- {
- cd->makePartOfGroup(gd);
- }
- //printf("Compound %s: in group %s\n",cd->name().data(),gd->groupTitle());
- }
- }
-}
-
-void addNamespaceToGroups(Entry *root,NamespaceDef *nd)
-{
- //printf("root->groups->count()=%d\n",root->groups->count());
- QListIterator<Grouping> gli(*root->groups);
- Grouping *g;
- for (;(g=gli.current());++gli)
- {
- GroupDef *gd=0;
- //printf("group `%s'\n",s->data());
- if (!g->groupname.isEmpty() && (gd=Doxygen::groupSDict->find(g->groupname)))
- {
- if (gd->addNamespace(nd)) nd->makePartOfGroup(gd);
- //printf("Namespace %s: in group %s\n",nd->name().data(),s->data());
- }
- }
-}
-
-void addDirToGroups(Entry *root,DirDef *dd)
-{
- //printf("*** root->groups->count()=%d\n",root->groups->count());
- QListIterator<Grouping> gli(*root->groups);
- Grouping *g;
- for (;(g=gli.current());++gli)
- {
- GroupDef *gd=0;
- //printf("group `%s'\n",g->groupname.data());
- if (!g->groupname.isEmpty() && (gd=Doxygen::groupSDict->find(g->groupname)))
- {
- gd->addDir(dd);
- dd->makePartOfGroup(gd);
- //printf("Dir %s: in group %s\n",dd->name().data(),g->groupname.data());
- }
- }
-}
-
-void addGroupToGroups(Entry *root,GroupDef *subGroup)
-{
- //printf("addGroupToGroups for %s groups=%d\n",root->name.data(),
- // root->groups?root->groups->count():-1);
- QListIterator<Grouping> gli(*root->groups);
- Grouping *g;
- for (;(g=gli.current());++gli)
- {
- GroupDef *gd=0;
- if (!g->groupname.isEmpty() && (gd=Doxygen::groupSDict->find(g->groupname)) &&
- !gd->containsGroup(subGroup) )
- {
- gd->addGroup(subGroup);
- subGroup->makePartOfGroup(gd);
- }
- else if (gd==subGroup)
- {
- warn(root->fileName,root->startLine,"Trying to add group %s to itself!",
- gd->name().data());
- }
- }
-}
-
-/*! Add a member to the group with the highest priority */
-void addMemberToGroups(Entry *root,MemberDef *md)
-{
- //printf("addMemberToGroups: Root %p = %s, md %p=%s groups=%d\n",
- // root, root->name.data(), md, md->name().data(), root->groups->count() );
- QListIterator<Grouping> gli(*root->groups);
- Grouping *g;
-
- // Search entry's group list for group with highest pri.
- Grouping::GroupPri_t pri = Grouping::GROUPING_LOWEST;
- GroupDef *fgd=0;
- for (;(g=gli.current());++gli)
- {
- GroupDef *gd=0;
- if (!g->groupname.isEmpty() &&
- (gd=Doxygen::groupSDict->find(g->groupname)) &&
- g->pri >= pri)
- {
- if (fgd && gd!=fgd && g->pri==pri)
- {
- warn(root->fileName.data(), root->startLine,
- "warning: Member %s found in multiple %s groups! "
- "The member will be put in group %s, and not in group %s",
- md->name().data(), Grouping::getGroupPriName( pri ),
- gd->name().data(), fgd->name().data()
- );
- }
-
- fgd = gd;
- pri = g->pri;
- }
- }
- //printf("fgd=%p\n",fgd);
-
- // put member into group defined by this entry?
- if (fgd)
- {
- GroupDef *mgd = md->getGroupDef();
- //printf("mgd=%p\n",mgd);
- bool insertit = FALSE;
- if (mgd==0)
- {
- insertit = TRUE;
- }
- else if (mgd!=fgd)
- {
- bool moveit = FALSE;
-
- // move member from one group to another if
- // - the new one has a higher priority
- // - the new entry has the same priority, but with docs where the old one had no docs
- if (md->getGroupPri()<pri)
- {
- moveit = TRUE;
- }
- else
- {
- if (md->getGroupPri()==pri)
- {
- if (!root->doc.isEmpty() && !md->getGroupHasDocs())
- {
- moveit = TRUE;
- }
- else if (!root->doc.isEmpty() && md->getGroupHasDocs())
- {
- warn(md->getGroupFileName(),md->getGroupStartLine(),
- "warning: Member documentation for %s found several times in %s groups!\n"
- "%s:%d: The member will remain in group %s, and won't be put into group %s",
- md->name().data(), Grouping::getGroupPriName( pri ),
- root->fileName.data(), root->startLine,
- mgd->name().data(),
- fgd->name().data()
- );
- }
- }
- }
-
- if (moveit)
- {
- //printf("removeMember\n");
- mgd->removeMember(md);
- insertit = TRUE;
- }
- }
-
- if (insertit)
- {
- //printf("insertMember found at %s line %d: %s: related %s\n",
- // md->getDefFileName().data(),md->getDefLine(),
- // md->name().data(),root->relates.data());
- bool success = fgd->insertMember(md);
- if (success)
- {
- //printf("insertMember successful\n");
- md->setGroupDef(fgd,pri,root->fileName,root->startLine,
- !root->doc.isEmpty());
- ClassDef *cd = md->getClassDefOfAnonymousType();
- if (cd)
- {
- cd->setGroupDefForAllMembers(fgd,pri,root->fileName,root->startLine,root->doc.length() != 0);
- }
- }
- }
- }
-}
-
-
-void addExampleToGroups(Entry *root,PageDef *eg)
-{
- QListIterator<Grouping> gli(*root->groups);
- Grouping *g;
- for (;(g=gli.current());++gli)
- {
- GroupDef *gd=0;
- if (!g->groupname.isEmpty() && (gd=Doxygen::groupSDict->find(g->groupname)))
- {
- gd->addExample(eg);
- eg->makePartOfGroup(gd);
- //printf("Example %s: in group %s\n",eg->name().data(),s->data());
- }
- }
-}
-
-QCString GroupDef::getOutputFileBase() const
-{
- if (isReference())
- {
- return fileName;
- }
- else
- {
- return convertNameToFile(fileName);
- }
-}
-
-void GroupDef::addListReferences()
-{
- {
- LockingPtr< QList<ListItemInfo> > xrefItems = xrefListItems();
- addRefItem(xrefItems.pointer(),
- getOutputFileBase(),
- theTranslator->trGroup(TRUE,TRUE),
- getOutputFileBase(),name(),
- 0
- );
- }
- MemberGroupSDict::Iterator mgli(*memberGroupSDict);
- MemberGroup *mg;
- for (;(mg=mgli.current());++mgli)
- {
- mg->addListReferences(this);
- }
- QListIterator<MemberList> mli(m_memberLists);
- MemberList *ml;
- for (mli.toFirst();(ml=mli.current());++mli)
- {
- if (ml->listType()&MemberList::documentationLists)
- {
- ml->addListReferences(this);
- }
- }
-}
-
-MemberList *GroupDef::createMemberList(MemberList::ListType lt)
-{
- m_memberLists.setAutoDelete(TRUE);
- QListIterator<MemberList> mli(m_memberLists);
- MemberList *ml;
- for (mli.toFirst();(ml=mli.current());++mli)
- {
- if (ml->listType()==lt)
- {
- return ml;
- }
- }
- // not found, create a new member list
- ml = new MemberList(lt);
- m_memberLists.append(ml);
- ml->setInGroup(TRUE);
- return ml;
-}
-
-void GroupDef::addMemberToList(MemberList::ListType lt,MemberDef *md)
-{
- static bool sortBriefDocs = Config_getBool("SORT_BRIEF_DOCS");
- static bool sortMemberDocs = Config_getBool("SORT_MEMBER_DOCS");
- MemberList *ml = createMemberList(lt);
- ml->setNeedsSorting(
- ((ml->listType()&MemberList::declarationLists) && sortBriefDocs) ||
- ((ml->listType()&MemberList::documentationLists) && sortMemberDocs));
- ml->append(md);
-}
-
-void GroupDef::sortMemberLists()
-{
- MemberList *ml = m_memberLists.first();
- while (ml)
- {
- if (ml->needsSorting()) { ml->sort(); ml->setNeedsSorting(FALSE); }
- ml = m_memberLists.next();
- }
-}
-
-
-MemberList *GroupDef::getMemberList(MemberList::ListType lt) const
-{
- GroupDef *that = (GroupDef*)this;
- MemberList *ml = that->m_memberLists.first();
- while (ml)
- {
- if (ml->listType()==lt)
- {
- return ml;
- }
- ml = that->m_memberLists.next();
- }
- return 0;
-}
-
-void GroupDef::writeMemberDeclarations(OutputList &ol,MemberList::ListType lt,const QCString &title)
-{
- static bool optimizeVhdl = Config_getBool("OPTIMIZE_OUTPUT_VHDL");
-
- MemberList * ml = getMemberList(lt);
- if (optimizeVhdl && ml)
- {
- VhdlDocGen::writeVhdlDeclarations(ml,ol,this,0,0,0);
- return;
- }
- if (ml)
- {
- ml->writeDeclarations(ol,0,0,0,this,title,0);
- }
-}
-
-void GroupDef::writeMemberDocumentation(OutputList &ol,MemberList::ListType lt,const QCString &title)
-{
- MemberList * ml = getMemberList(lt);
- if (ml) ml->writeDocumentation(ol,name(),this,title);
-}
-
-void GroupDef::removeMemberFromList(MemberList::ListType lt,MemberDef *md)
-{
- MemberList *ml = getMemberList(lt);
- if (ml) ml->remove(md);
-}
-
-void GroupDef::sortSubGroups()
-{
- groupList->sort();
-}
-
-bool GroupDef::isLinkableInProject() const
-{
- return !isReference() && isLinkable();
-}
-
-bool GroupDef::isLinkable() const
-{
- return hasUserDocumentation();
-}
-
diff --git a/trunk/src/groupdef.h b/trunk/src/groupdef.h
deleted file mode 100644
index 5c83b81..0000000
--- a/trunk/src/groupdef.h
+++ /dev/null
@@ -1,192 +0,0 @@
-/******************************************************************************
- *
- *
- *
- * Copyright (C) 1997-2012 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.
- *
- */
-
-#ifndef GROUPDEF_H
-#define GROUPDEF_H
-
-#include "qtbc.h"
-#include "sortdict.h"
-#include "definition.h"
-#include "memberlist.h"
-#include "memberdef.h"
-#include "htmlhelp.h"
-
-class FileList;
-class ClassSDict;
-class FileDef;
-class ClassDef;
-class NamespaceDef;
-class GroupList;
-class OutputList;
-class NamespaceSDict;
-class MemberGroupSDict;
-class MemberNameInfoSDict;
-class PageSDict;
-class PageDef;
-class DirDef;
-class DirList;
-class FTVHelp;
-class Entry;
-
-class GroupDef : public Definition
-{
- public:
- GroupDef(const char *fileName,int line,const char *name,const char *title,const char *refFileName=0);
- ~GroupDef();
- DefType definitionType() const { return TypeGroup; }
- QCString getOutputFileBase() const;
- QCString anchor() const { return QCString(); }
- QCString displayName() const { return hasGroupTitle() ? title : Definition::name(); }
- const char *groupTitle() const { return title; }
- void setGroupTitle( const char *newtitle );
- bool hasGroupTitle( ) const { return titleSet; }
- void addFile(const FileDef *def);
- bool addClass(const ClassDef *def);
- bool addNamespace(const NamespaceDef *def);
- void addGroup(const GroupDef *def);
- void addParentGroup(const GroupDef *def);
- void addPage(PageDef *def);
- void addExample(const PageDef *def);
- void addDir(const DirDef *dd);
- bool insertMember(MemberDef *def,bool docOnly=FALSE);
- void removeMember(MemberDef *md);
- bool containsGroup(const GroupDef *def); // true if def is already a subgroup
- void writeDocumentation(OutputList &ol);
- void writeMemberPages(OutputList &ol);
- void writeQuickMemberLinks(OutputList &ol,MemberDef *currentMd) const;
- int countMembers() const;
- bool isLinkableInProject() const;
- bool isLinkable() const;
- bool isASubGroup() const;
- void computeAnchors();
-
- void addMembersToMemberGroup();
- void distributeMemberGroupDocumentation();
- void findSectionsInDocumentation();
-
- void addListReferences();
- void sortMemberLists();
-
- bool visited; // number of times accessed for output - KPW
-
- //friend void writeGroupTreeNode(OutputList&, GroupDef*, int, FTVHelp*);
- // make accessible for writing tree view of group in index.cpp - KPW
-
- void setGroupScope(Definition *d) { groupScope = d; }
- Definition *getGroupScope() const { return groupScope; }
-
- MemberList *getMemberList(MemberList::ListType lt) const;
- const QList<MemberList> &getMemberLists() const { return m_memberLists; }
-
- /* user defined member groups */
- MemberGroupSDict *getMemberGroupSDict() const { return memberGroupSDict; }
-
- FileList * getFiles() const { return fileList; }
- ClassSDict * getClasses() const { return classSDict; }
- NamespaceSDict * getNamespaces() const { return namespaceSDict; }
- GroupList * getSubGroups() const { return groupList; }
- PageSDict * getPages() const { return pageDict; }
- DirList * getDirs() const { return dirList; }
- PageSDict * getExamples() const { return exampleDict; }
- //MemberList* getMembers() const { return allMemberList; }
- void sortSubGroups();
-
- protected:
- void addMemberListToGroup(MemberList *,bool (MemberDef::*)() const);
-
- private:
- MemberList *createMemberList(MemberList::ListType lt);
- void addMemberToList(MemberList::ListType lt,MemberDef *md);
- void writeMemberDeclarations(OutputList &ol,MemberList::ListType lt,const QCString &title);
- void writeMemberDocumentation(OutputList &ol,MemberList::ListType lt,const QCString &title);
- void removeMemberFromList(MemberList::ListType lt,MemberDef *md);
- void writeGroupGraph(OutputList &ol);
- void writeFiles(OutputList &ol,const QCString &title);
- void writeNamespaces(OutputList &ol,const QCString &title);
- void writeNestedGroups(OutputList &ol,const QCString &title);
- void writeDirs(OutputList &ol,const QCString &title);
- void writeClasses(OutputList &ol,const QCString &title);
- void writeInlineClasses(OutputList &ol);
- void writePageDocumentation(OutputList &ol);
- void writeDetailedDescription(OutputList &ol,const QCString &title);
- void writeBriefDescription(OutputList &ol);
- void writeMemberGroups(OutputList &ol);
- void startMemberDeclarations(OutputList &ol);
- void endMemberDeclarations(OutputList &ol);
- void startMemberDocumentation(OutputList &ol);
- void endMemberDocumentation(OutputList &ol);
- void writeAuthorSection(OutputList &ol);
- void writeSummaryLinks(OutputList &ol);
-
- QCString title; // title of the group
- bool titleSet; // true if title is not the same as the name
- QCString fileName; // base name of the generated file
- FileList *fileList; // list of files in the group
- ClassSDict *classSDict; // list of classes in the group
- NamespaceSDict *namespaceSDict; // list of namespaces in the group
- GroupList *groupList; // list of sub groups.
- PageSDict *pageDict; // list of pages in the group
- PageSDict *exampleDict; // list of examples in the group
- DirList *dirList; // list of directories in the group
-
- MemberList *allMemberList;
- MemberNameInfoSDict *allMemberNameInfoSDict;
-
- Definition *groupScope;
-
- QList<MemberList> m_memberLists;
- MemberGroupSDict *memberGroupSDict;
-
-};
-
-class GroupSDict : public SDict<GroupDef>
-{
- public:
- GroupSDict(uint size) : SDict<GroupDef>(size) {}
- virtual ~GroupSDict() {}
- int compareItems(GCI item1,GCI item2)
- {
- return strcmp(((GroupDef*)item1)->groupTitle(),((GroupDef*)item2)->groupTitle());
- }
-};
-
-class GroupList : public QList<GroupDef>
-{
- public:
- int compareItems(GCI item1,GCI item2)
- {
- return strcmp(((GroupDef*)item1)->groupTitle(),((GroupDef*)item2)->groupTitle());
- }
-};
-
-class GroupListIterator : public QListIterator<GroupDef>
-{
- public:
- GroupListIterator(const GroupList &l) : QListIterator<GroupDef>(l) {}
- virtual ~GroupListIterator() {}
-};
-
-void addClassToGroups(Entry *root,ClassDef *cd);
-void addNamespaceToGroups(Entry *root,NamespaceDef *nd);
-void addGroupToGroups(Entry *root,GroupDef *subGroup);
-void addMemberToGroups(Entry *root,MemberDef *md);
-void addPageToGroups(Entry *root,PageDef *pd);
-void addExampleToGroups(Entry *root,PageDef *eg);
-void addDirToGroups(Entry *root,DirDef *dd);
-
-#endif
-
diff --git a/trunk/src/growbuf.h b/trunk/src/growbuf.h
deleted file mode 100644
index 6798692..0000000
--- a/trunk/src/growbuf.h
+++ /dev/null
@@ -1,38 +0,0 @@
-#ifndef GROWBUF_H
-#define GROWBUF_H
-
-#include <stdlib.h>
-#include <string.h>
-
-class GrowBuf
-{
- public:
- GrowBuf() : str(0), pos(0), len(0) {}
- ~GrowBuf() { free(str); str=0; pos=0; len=0; }
- void clear() { pos=0; }
- void addChar(char c) { if (pos>=len) { len+=1024; str = (char*)realloc(str,len); }
- str[pos++]=c;
- }
- void addStr(const char *s) {
- int l=strlen(s);
- if (pos+l>=len) { len+=l+1024; str = (char*)realloc(str,len); }
- strcpy(&str[pos],s);
- pos+=l;
- }
- void addStr(const char *s,int n) {
- int l=strlen(s);
- if (n<l) l=n;
- if (pos+l>=len) { len+=l+1024; str = (char*)realloc(str,len); }
- strncpy(&str[pos],s,n);
- pos+=l;
- }
- const char *get() { return str; }
- int getPos() const { return pos; }
- char at(int i) const { return str[i]; }
- private:
- char *str;
- int pos;
- int len;
-};
-
-#endif
diff --git a/trunk/src/header.html b/trunk/src/header.html
deleted file mode 100644
index 76e9553..0000000
--- a/trunk/src/header.html
+++ /dev/null
@@ -1,49 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<meta http-equiv="X-UA-Compatible" content="IE=9"/>
-<!--BEGIN PROJECT_NAME--><title>$projectname: $title</title><!--END PROJECT_NAME-->
-<!--BEGIN !PROJECT_NAME--><title>$title</title><!--END !PROJECT_NAME-->
-<link href="$relpath$tabs.css" rel="stylesheet" type="text/css"/>
-<link href="$relpath$$stylesheet" rel="stylesheet" type="text/css" />
-$treeview
-$search
-$mathjax
-</head>
-<body>
-<div id="top"><!-- do not remove this div! -->
-
-<!--BEGIN TITLEAREA-->
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr style="height: 56px;">
- <!--BEGIN PROJECT_LOGO-->
- <td id="projectlogo"><img alt="Logo" src="$relpath$$projectlogo"/></td>
- <!--END PROJECT_LOGO-->
- <!--BEGIN PROJECT_NAME-->
- <td style="padding-left: 0.5em;">
- <div id="projectname">$projectname
- <!--BEGIN PROJECT_NUMBER-->&#160;<span id="projectnumber">$projectnumber</span><!--END PROJECT_NUMBER-->
- </div>
- <!--BEGIN PROJECT_BRIEF--><div id="projectbrief">$projectbrief</div><!--END PROJECT_BRIEF-->
- </td>
- <!--END PROJECT_NAME-->
- <!--BEGIN !PROJECT_NAME-->
- <!--BEGIN PROJECT_BRIEF-->
- <td style="padding-left: 0.5em;">
- <div id="projectbrief">$projectbrief</div>
- </td>
- <!--END PROJECT_BRIEF-->
- <!--END !PROJECT_NAME-->
- <!--BEGIN DISABLE_INDEX-->
- <!--BEGIN SEARCHENGINE-->
- <td>$searchbox</td>
- <!--END SEARCHENGINE-->
- <!--END DISABLE_INDEX-->
- </tr>
- </tbody>
-</table>
-</div>
-<!--END TITLEAREA-->
diff --git a/trunk/src/header_html.h b/trunk/src/header_html.h
deleted file mode 100644
index 4ed2e02..0000000
--- a/trunk/src/header_html.h
+++ /dev/null
@@ -1,49 +0,0 @@
-"<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n"
-"<html xmlns=\"http://www.w3.org/1999/xhtml\">\n"
-"<head>\n"
-"<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n"
-"<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n"
-"<!--BEGIN PROJECT_NAME--><title>$projectname: $title</title><!--END PROJECT_NAME-->\n"
-"<!--BEGIN !PROJECT_NAME--><title>$title</title><!--END !PROJECT_NAME-->\n"
-"<link href=\"$relpath$tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n"
-"<link href=\"$relpath$$stylesheet\" rel=\"stylesheet\" type=\"text/css\" />\n"
-"$treeview\n"
-"$search\n"
-"$mathjax\n"
-"</head>\n"
-"<body>\n"
-"<div id=\"top\"><!-- do not remove this div! -->\n"
-"\n"
-"<!--BEGIN TITLEAREA-->\n"
-"<div id=\"titlearea\">\n"
-"<table cellspacing=\"0\" cellpadding=\"0\">\n"
-" <tbody>\n"
-" <tr style=\"height: 56px;\">\n"
-" <!--BEGIN PROJECT_LOGO-->\n"
-" <td id=\"projectlogo\"><img alt=\"Logo\" src=\"$relpath$$projectlogo\"/></td>\n"
-" <!--END PROJECT_LOGO-->\n"
-" <!--BEGIN PROJECT_NAME-->\n"
-" <td style=\"padding-left: 0.5em;\">\n"
-" <div id=\"projectname\">$projectname\n"
-" <!--BEGIN PROJECT_NUMBER-->&#160;<span id=\"projectnumber\">$projectnumber</span><!--END PROJECT_NUMBER-->\n"
-" </div>\n"
-" <!--BEGIN PROJECT_BRIEF--><div id=\"projectbrief\">$projectbrief</div><!--END PROJECT_BRIEF-->\n"
-" </td>\n"
-" <!--END PROJECT_NAME-->\n"
-" <!--BEGIN !PROJECT_NAME-->\n"
-" <!--BEGIN PROJECT_BRIEF-->\n"
-" <td style=\"padding-left: 0.5em;\">\n"
-" <div id=\"projectbrief\">$projectbrief</div>\n"
-" </td>\n"
-" <!--END PROJECT_BRIEF-->\n"
-" <!--END !PROJECT_NAME-->\n"
-" <!--BEGIN DISABLE_INDEX-->\n"
-" <!--BEGIN SEARCHENGINE-->\n"
-" <td>$searchbox</td>\n"
-" <!--END SEARCHENGINE-->\n"
-" <!--END DISABLE_INDEX-->\n"
-" </tr>\n"
-" </tbody>\n"
-"</table>\n"
-"</div>\n"
-"<!--END TITLEAREA-->\n"
diff --git a/trunk/src/htags.cpp b/trunk/src/htags.cpp
deleted file mode 100644
index caa4535..0000000
--- a/trunk/src/htags.cpp
+++ /dev/null
@@ -1,179 +0,0 @@
-/******************************************************************************
- *
- * Copyright (C) 1997-2012 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.
- *
- */
-
-#include <stdio.h>
-
-#include <qdir.h>
-#include <qdict.h>
-
-#include "qtbc.h"
-#include "htags.h"
-#include "util.h"
-#include "message.h"
-#include "config.h"
-#include "portable.h"
-
-
-bool Htags::useHtags = FALSE;
-
-static QDir g_inputDir;
-static QDict<QCString> g_symbolDict(10007);
-
-/*! constructs command line of htags(1) and executes it.
- * \retval TRUE success
- * \retval FALSE an error has occured.
- */
-bool Htags::execute(const QCString &htmldir)
-{
- static QStrList &inputSource = Config_getList("INPUT");
- static bool quiet = Config_getBool("QUIET");
- static bool warnings = Config_getBool("WARNINGS");
- static QCString htagsOptions = ""; //Config_getString("HTAGS_OPTIONS");
- static QCString projectName = Config_getString("PROJECT_NAME");
- static QCString projectNumber = Config_getString("PROJECT_NUMBER");
-
- QCString cwd = convertToQCString(QDir::currentDirPath());
- if (inputSource.isEmpty())
- {
- g_inputDir.setPath(cwd);
- }
- else if (inputSource.count()==1)
- {
- g_inputDir.setPath(inputSource.first());
- if (!g_inputDir.exists())
- err("error: Cannot find directory %s. "
- "Check the value of the INPUT tag in the configuration file.\n",
- inputSource.first()
- );
- }
- else
- {
- err("error: If you use USE_HTAGS then INPUT should specific a single directory. \n");
- return FALSE;
- }
-
- /*
- * Construct command line for htags(1).
- */
- QCString commandLine = " -g -s -a -n ";
- if (!quiet) commandLine += "-v ";
- if (warnings) commandLine += "-w ";
- if (!htagsOptions.isEmpty())
- {
- commandLine += ' ';
- commandLine += htagsOptions;
- }
- if (!projectName.isEmpty())
- {
- commandLine += "-t \"";
- commandLine += projectName;
- if (!projectNumber.isEmpty())
- {
- commandLine += '-';
- commandLine += projectNumber;
- }
- commandLine += "\" ";
- }
- commandLine += " \"" + htmldir + "\"";
- QCString oldDir = convertToQCString(QDir::currentDirPath());
- QDir::setCurrent(g_inputDir.absPath());
- //printf("CommandLine=[%s]\n",commandLine.data());
- portable_sysTimerStart();
- bool result=portable_system("htags",commandLine,FALSE)==0;
- portable_sysTimerStop();
- QDir::setCurrent(oldDir);
- return result;
-}
-
-
-/*! load filemap and make index.
- * \param htmlDir of HTML directory generated by htags(1).
- * \retval TRUE success
- * \retval FALSE error
- */
-bool Htags::loadFilemap(const QCString &htmlDir)
-{
- QCString fileMapName = htmlDir+"/HTML/FILEMAP";
- QCString fileMap;
- QFileInfo fi(fileMapName);
- /*
- * Construct FILEMAP dictionary using QDict.
- *
- * In FILEMAP, URL includes 'html' suffix but we cut it off according
- * to the method of FileDef class.
- *
- * FILEMAP format:
- * <NAME>\t<HREF>.html\n
- * QDICT:
- * dict[<NAME>] = <HREF>
- */
- if (fi.exists() && fi.isReadable())
- {
- QFile f(fileMapName);
- const int maxlen = 8192;
- QCString line(maxlen+1);
- line.at(maxlen)='\0';
- if (f.open(IO_ReadOnly))
- {
- while (f.readLine(line.data(),maxlen)>0)
- {
- //printf("Read line: %s",line.data());
- int sep = line.find('\t');
- if (sep!=-1)
- {
- QCString key = line.left(sep).stripWhiteSpace();
- QCString value = line.mid(sep+1).stripWhiteSpace();
- int ext=value.findRev('.');
- if (ext!=-1) value=value.left(ext); // strip extension
- g_symbolDict.setAutoDelete(TRUE);
- g_symbolDict.insert(key,new QCString(value));
- //printf("Key/Value=(%s,%s)\n",key.data(),value.data());
- }
- }
- return TRUE;
- }
- else
- {
- err("error: file %s cannot be opened\n",fileMapName.data());
- }
- }
- return FALSE;
-}
-
-/*! convert path name into the url in the hypertext generated by htags.
- * \param path path name
- * \returns URL NULL: not found.
- */
-QCString Htags::path2URL(const QCString &path)
-{
- QCString url,symName=path;
- QCString dir = convertToQCString(g_inputDir.absPath());
- int dl=dir.length();
- if ((int)symName.length()>dl+1)
- {
- symName = symName.mid(dl+1);
- }
- if (!symName.isEmpty())
- {
- QCString *result = g_symbolDict[symName];
- //printf("path2URL=%s symName=%s result=%p\n",path.data(),symName.data(),result);
- if (result)
- {
- url = "HTML/" + *result;
- }
- }
- return url;
-}
-
diff --git a/trunk/src/htags.h b/trunk/src/htags.h
deleted file mode 100644
index 458adec..0000000
--- a/trunk/src/htags.h
+++ /dev/null
@@ -1,28 +0,0 @@
-/******************************************************************************
- *
- * Copyright (C) 1997-2012 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.
- *
- */
-#ifndef HTAGS_H
-#define HTAGS_H
-
-class QCString;
-
-struct Htags
-{
- static bool useHtags;
- static bool loadFilemap(const QCString &htmldir);
- static QCString path2URL(const QCString &path);
- static bool execute(const QCString &htmldir);
-};
-
-#endif /* HTAGS_H */
diff --git a/trunk/src/htmlattrib.h b/trunk/src/htmlattrib.h
deleted file mode 100644
index b391861..0000000
--- a/trunk/src/htmlattrib.h
+++ /dev/null
@@ -1,77 +0,0 @@
-/******************************************************************************
- *
- *
- *
- * Copyright (C) 1997-2012 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.
- *
- */
-
-#ifndef _HTMLATTRIB_H
-#define _HTMLATTRIB_H
-
-/*! A Html option. A name, value pair */
-struct HtmlAttrib
-{
- QCString name;
- QCString value;
-};
-
-/*! @brief A list of Html attributes.
- *
- * The Html attributes are deeply copied into the list.
- */
-class HtmlAttribList : public QList<HtmlAttrib>
-{
- public:
- HtmlAttribList() : QList<HtmlAttrib>() { setAutoDelete(TRUE); }
- ~HtmlAttribList() { clear(); }
- HtmlAttribList(const HtmlAttribList &l) : QList<HtmlAttrib>()
- { operator=(l); }
- HtmlAttribList &operator=(const HtmlAttribList &l)
- { clear(); QList<HtmlAttrib>::operator=(l); return *this; }
- QCString find(const QCString name) const
- {
- HtmlAttribList *that = (HtmlAttribList *)this;
- QCString result;
- HtmlAttrib *attr=that->first();
- while (attr)
- {
- if (attr->name==name) return attr->value;
- attr=that->next();
- }
- return result;
- }
- QCString toString() const
- {
- HtmlAttribList *that = (HtmlAttribList *)this;
- QCString result;
- HtmlAttrib *attr=that->first();
- while (attr)
- {
- result+=" "+attr->name+"=\""+attr->value+"\"";
- attr=that->next();
- }
- return result;
- }
- private:
- QCollection::Item newItem( QCollection::Item d )
- { return (QCollection::Item)new HtmlAttrib(*(HtmlAttrib *)d); }
- void deleteItem(QCollection::Item d)
- { delete (HtmlAttrib *)d; }
-};
-
-/*! @brief Html attribute list iterator */
-class HtmlAttribListIterator : public QListIterator<HtmlAttrib>
-{
- public:
- HtmlAttribListIterator(const HtmlAttribList &l) : QListIterator<HtmlAttrib>(l) {}
-};
-
-#endif
-
diff --git a/trunk/src/htmldocvisitor.cpp b/trunk/src/htmldocvisitor.cpp
deleted file mode 100644
index dc73510..0000000
--- a/trunk/src/htmldocvisitor.cpp
+++ /dev/null
@@ -1,1855 +0,0 @@
-/******************************************************************************
- *
- *
- *
- *
- * Copyright (C) 1997-2012 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.
- *
- */
-
-#include <qdir.h>
-#include "htmldocvisitor.h"
-#include "docparser.h"
-#include "language.h"
-#include "doxygen.h"
-#include "outputgen.h"
-#include "dot.h"
-#include "message.h"
-#include "config.h"
-#include "htmlgen.h"
-#include "parserintf.h"
-#include "msc.h"
-#include "util.h"
-
-
-static const int NUM_HTML_LIST_TYPES = 4;
-static const char types[][NUM_HTML_LIST_TYPES] = {"1", "a", "i", "A"};
-
-static QCString convertIndexWordToAnchor(const QString &word)
-{
- static char hex[] = "0123456789abcdef";
- uint i;
- QCString result;
- for (i=0;i<word.length();i++)
- {
- int c = word.at(i);
- if (isId(c))
- {
- result+=c;
- }
- else if (isspace(c))
- {
- result+="_";
- }
- else
- {
- char cs[3];
- cs[0]=hex[c>>4];
- cs[1]=hex[c&0xf];
- cs[2]=0;
- result+=cs;
- }
- }
- return result;
-}
-
-static bool mustBeOutsideParagraph(DocNode *n)
-{
- switch (n->kind())
- {
- /* <ul> */
- case DocNode::Kind_HtmlList:
- case DocNode::Kind_SimpleList:
- case DocNode::Kind_AutoList:
- /* <dl> */
- case DocNode::Kind_SimpleSect:
- case DocNode::Kind_ParamSect:
- case DocNode::Kind_HtmlDescList:
- case DocNode::Kind_XRefItem:
- /* <table> */
- case DocNode::Kind_HtmlTable:
- /* <h?> */
- case DocNode::Kind_Section:
- case DocNode::Kind_HtmlHeader:
- /* \internal */
- case DocNode::Kind_Internal:
- /* <div> */
- case DocNode::Kind_Include:
- case DocNode::Kind_Verbatim:
- case DocNode::Kind_Image:
- case DocNode::Kind_SecRefList:
- /* <hr> */
- case DocNode::Kind_HorRuler:
- /* CopyDoc gets paragraph markers from the wrapping DocPara node,
- * but needs to insert them for all documentation being copied to
- * preserve formatting.
- */
- case DocNode::Kind_Copy:
- /* <blockquote> */
- case DocNode::Kind_HtmlBlockQuote:
- return TRUE;
- case DocNode::Kind_StyleChange:
- return ((DocStyleChange*)n)->style()==DocStyleChange::Preformatted ||
- ((DocStyleChange*)n)->style()==DocStyleChange::Div ||
- ((DocStyleChange*)n)->style()==DocStyleChange::Center;
- case DocNode::Kind_Formula:
- return !((DocFormula*)n)->isInline();
- default:
- break;
- }
- return FALSE;
-}
-
-static QString htmlAttribsToString(const HtmlAttribList &attribs)
-{
- QString result;
- HtmlAttribListIterator li(attribs);
- HtmlAttrib *att;
- for (li.toFirst();(att=li.current());++li)
- {
- if (!att->value.isEmpty()) // ignore attribute without values as they
- // are not XHTML compliant
- {
- result+=" ";
- result+=att->name;
- result+="=\""+convertToXML(att->value)+"\"";
- }
- }
- return result;
-}
-
-//-------------------------------------------------------------------------
-
-HtmlDocVisitor::HtmlDocVisitor(FTextStream &t,CodeOutputInterface &ci,
- const char *langExt)
- : DocVisitor(DocVisitor_Html), m_t(t), m_ci(ci), m_insidePre(FALSE),
- m_hide(FALSE), m_langExt(langExt)
-{
-}
-
- //--------------------------------------
- // visitor functions for leaf nodes
- //--------------------------------------
-
-void HtmlDocVisitor::visit(DocWord *w)
-{
- //printf("word: %s\n",w->word().data());
- if (m_hide) return;
- filter(w->word());
-}
-
-void HtmlDocVisitor::visit(DocLinkedWord *w)
-{
- if (m_hide) return;
- startLink(w->ref(),w->file(),w->relPath(),w->anchor(),w->tooltip());
- filter(w->word());
- endLink();
-}
-
-void HtmlDocVisitor::visit(DocWhiteSpace *w)
-{
- if (m_hide) return;
- if (m_insidePre)
- {
- m_t << w->chars();
- }
- else
- {
- m_t << " ";
- }
-}
-
-void HtmlDocVisitor::visit(DocSymbol *s)
-{
- if (m_hide) return;
- switch(s->symbol())
- {
- case DocSymbol::BSlash: m_t << "\\"; break;
- case DocSymbol::At: m_t << "@"; break;
- case DocSymbol::Less: m_t << "&lt;"; break;
- case DocSymbol::Greater: m_t << "&gt;"; break;
- case DocSymbol::Amp: m_t << "&amp;"; break;
- case DocSymbol::Dollar: m_t << "$"; break;
- case DocSymbol::Hash: m_t << "#"; break;
- case DocSymbol::DoubleColon: m_t << "::"; break;
- case DocSymbol::Percent: m_t << "%"; break;
- case DocSymbol::Copy: m_t << "&copy;"; break;
- case DocSymbol::Tm: m_t << "&trade;"; break;
- case DocSymbol::Reg: m_t << "&reg;"; break;
- case DocSymbol::Apos: m_t << "'"; break;
- case DocSymbol::Quot: m_t << "\""; break;
- case DocSymbol::Lsquo: m_t << "&lsquo;"; break;
- case DocSymbol::Rsquo: m_t << "&rsquo;"; break;
- case DocSymbol::Ldquo: m_t << "&ldquo;"; break;
- case DocSymbol::Rdquo: m_t << "&rdquo;"; break;
- case DocSymbol::Ndash: m_t << "&ndash;"; break;
- case DocSymbol::Mdash: m_t << "&mdash;"; break;
- case DocSymbol::Uml: m_t << "&" << s->letter() << "uml;"; break;
- case DocSymbol::Acute: m_t << "&" << s->letter() << "acute;"; break;
- case DocSymbol::Grave: m_t << "&" << s->letter() << "grave;"; break;
- case DocSymbol::Circ: m_t << "&" << s->letter() << "circ;"; break;
- case DocSymbol::Slash: m_t << "&" << s->letter() << "slash;"; break;
- case DocSymbol::Tilde: m_t << "&" << s->letter() << "tilde;"; break;
- case DocSymbol::Szlig: m_t << "&szlig;"; break;
- case DocSymbol::Cedil: m_t << "&" << s->letter() << "cedil;"; break;
- case DocSymbol::Ring: m_t << "&" << s->letter() << "ring;"; break;
- case DocSymbol::Nbsp: m_t << "&#160;"; break;
- case DocSymbol::AElig: m_t << "&AElig;"; break;
- case DocSymbol::Aelig: m_t << "&aelig;"; break;
- default:
- err("error: unknown symbol found\n");
- }
-}
-
-void HtmlDocVisitor::visit(DocURL *u)
-{
- if (m_hide) return;
- if (u->isEmail()) // mail address
- {
- // do obfuscation via javascript
- m_t << "<a href=\"#\" onclick=\"location.href='mai'+'lto:'";
- QCString url = u->url();
- uint i;
- int size=3;
- for (i=0;i<url.length();)
- {
- m_t << "+'" << url.mid(i,size) << "'";
- i+=size;
- if (size==3) size=2; else size=3;
- }
- m_t << "; return false;\">";
- size=5;
- for (i=0;i<url.length();)
- {
- filter(url.mid(i,size));
- if (i<url.length()-size) m_t << "<span style=\"display: none;\">.nosp@m.</span>";
- i+=size;
- if (size==5) size=4; else size=5;
- }
- m_t << "</a>";
- }
- else // web address
- {
- m_t << "<a href=\"";
- m_t << u->url() << "\">";
- filter(u->url());
- m_t << "</a>";
- }
-}
-
-void HtmlDocVisitor::visit(DocLineBreak *)
-{
- if (m_hide) return;
- m_t << "<br/>\n";
-}
-
-void HtmlDocVisitor::visit(DocHorRuler *)
-{
- if (m_hide) return;
- m_t << "<hr/>\n";
-}
-
-void HtmlDocVisitor::visit(DocStyleChange *s)
-{
- if (m_hide) return;
- switch (s->style())
- {
- case DocStyleChange::Bold:
- if (s->enable()) m_t << "<b" << htmlAttribsToString(s->attribs()) << ">"; else m_t << "</b>";
- break;
- case DocStyleChange::Italic:
- if (s->enable()) m_t << "<em" << htmlAttribsToString(s->attribs()) << ">"; else m_t << "</em>";
- break;
- case DocStyleChange::Code:
- if (s->enable()) m_t << "<code" << htmlAttribsToString(s->attribs()) << ">"; else m_t << "</code>";
- break;
- case DocStyleChange::Subscript:
- if (s->enable()) m_t << "<sub" << htmlAttribsToString(s->attribs()) << ">"; else m_t << "</sub>";
- break;
- case DocStyleChange::Superscript:
- if (s->enable()) m_t << "<sup" << htmlAttribsToString(s->attribs()) << ">"; else m_t << "</sup>";
- break;
- case DocStyleChange::Center:
- if (s->enable())
- {
- forceEndParagraph(s);
- m_t << "<center" << htmlAttribsToString(s->attribs()) << ">";
- }
- else
- {
- m_t << "</center>";
- forceStartParagraph(s);
- }
- break;
- case DocStyleChange::Small:
- if (s->enable()) m_t << "<small" << htmlAttribsToString(s->attribs()) << ">"; else m_t << "</small>";
- break;
- case DocStyleChange::Preformatted:
- if (s->enable())
- {
- forceEndParagraph(s);
- m_t << "<pre" << htmlAttribsToString(s->attribs()) << ">";
- m_insidePre=TRUE;
- }
- else
- {
- m_insidePre=FALSE;
- m_t << "</pre>";
- forceStartParagraph(s);
- }
- break;
- case DocStyleChange::Div:
- if (s->enable())
- {
- forceEndParagraph(s);
- m_t << "<div" << htmlAttribsToString(s->attribs()) << ">";
- }
- else
- {
- m_t << "</div>";
- forceStartParagraph(s);
- }
- break;
- case DocStyleChange::Span:
- if (s->enable()) m_t << "<span" << htmlAttribsToString(s->attribs()) << ">"; else m_t << "</span>";
- break;
-
- }
-}
-
-
-void HtmlDocVisitor::visit(DocVerbatim *s)
-{
- if (m_hide) return;
- QCString lang = m_langExt;
- if (!s->language().isEmpty()) // explicit language setting
- {
- lang = s->language();
- }
- switch(s->type())
- {
- case DocVerbatim::Code:
- forceEndParagraph(s);
- m_t << PREFRAG_START;
- Doxygen::parserManager->getParser(lang)
- ->parseCode(m_ci,s->context(),s->text(),
- s->isExample(),s->exampleFile());
- m_t << PREFRAG_END;
- forceStartParagraph(s);
- break;
- case DocVerbatim::Verbatim:
- forceEndParagraph(s);
- m_t << PREFRAG_START;
- filter(s->text());
- m_t << PREFRAG_END;
- forceStartParagraph(s);
- break;
- case DocVerbatim::HtmlOnly:
- m_t << s->text();
- break;
- case DocVerbatim::ManOnly:
- case DocVerbatim::LatexOnly:
- case DocVerbatim::XmlOnly:
- /* nothing */
- break;
-
- case DocVerbatim::Dot:
- {
- static int dotindex = 1;
- QCString fileName(4096);
-
- fileName.sprintf("%s%d%s",
- (Config_getString("HTML_OUTPUT")+"/inline_dotgraph_").data(),
- dotindex++,
- ".dot"
- );
- QFile file(fileName);
- if (!file.open(IO_WriteOnly))
- {
- err("Could not open file %s for writing\n",fileName.data());
- }
- file.writeBlock( s->text(), s->text().length() );
- file.close();
-
- forceEndParagraph(s);
- m_t << "<div align=\"center\">" << endl;
- writeDotFile(fileName,s->relPath(),s->context());
- m_t << "</div>" << endl;
- forceStartParagraph(s);
-
- if (Config_getBool("DOT_CLEANUP")) file.remove();
- }
- break;
- case DocVerbatim::Msc:
- {
- static int mscindex = 1;
- QCString baseName(4096);
-
- baseName.sprintf("%s%d",
- (Config_getString("HTML_OUTPUT")+"/inline_mscgraph_").data(),
- mscindex++
- );
- QFile file(baseName+".msc");
- if (!file.open(IO_WriteOnly))
- {
- err("Could not open file %s.msc for writing\n",baseName.data());
- }
- QCString text = "msc {";
- text+=s->text();
- text+="}";
- file.writeBlock( text, text.length() );
- file.close();
-
- forceEndParagraph(s);
- m_t << "<div align=\"center\">" << endl;
- writeMscFile(baseName+".msc",s->relPath(),s->context());
- m_t << "</div>" << endl;
- forceStartParagraph(s);
-
- if (Config_getBool("DOT_CLEANUP")) file.remove();
- }
- break;
- }
-}
-
-void HtmlDocVisitor::visit(DocAnchor *anc)
-{
- if (m_hide) return;
- m_t << "<a class=\"anchor\" id=\"" << anc->anchor() << "\"></a>";
-}
-
-void HtmlDocVisitor::visit(DocInclude *inc)
-{
- if (m_hide) return;
- switch(inc->type())
- {
- case DocInclude::Include:
- forceEndParagraph(inc);
- m_t << PREFRAG_START;
- Doxygen::parserManager->getParser(inc->extension())
- ->parseCode(m_ci,
- inc->context(),
- inc->text(),
- inc->isExample(),
- inc->exampleFile(),
- 0, // fd
- -1, // startLine
- -1, // endLine
- TRUE // inlineFragment
- );
- m_t << PREFRAG_END;
- forceStartParagraph(inc);
- break;
- case DocInclude::IncWithLines:
- {
- forceEndParagraph(inc);
- m_t << PREFRAG_START;
- QFileInfo cfi( inc->file() );
- FileDef fd( cfi.dirPath(), cfi.fileName() );
- Doxygen::parserManager->getParser(inc->extension())
- ->parseCode(m_ci,
- inc->context(),
- inc->text(),
- inc->isExample(),
- inc->exampleFile(), &fd);
- m_t << PREFRAG_END;
- forceStartParagraph(inc);
- }
- break;
- case DocInclude::DontInclude:
- break;
- case DocInclude::HtmlInclude:
- m_t << inc->text();
- break;
- case DocInclude::VerbInclude:
- forceEndParagraph(inc);
- m_t << PREFRAG_START;
- filter(inc->text());
- m_t << PREFRAG_END;
- forceStartParagraph(inc);
- break;
- case DocInclude::Snippet:
- {
- forceEndParagraph(inc);
- m_t << PREFRAG_START;
- Doxygen::parserManager->getParser(inc->extension())
- ->parseCode(m_ci,
- inc->context(),
- extractBlock(inc->text(),inc->blockId()),
- inc->isExample(),
- inc->exampleFile(),
- 0,
- -1, // startLine
- -1, // endLine
- TRUE // inlineFragment
- );
- m_t << PREFRAG_END;
- forceStartParagraph(inc);
- }
- break;
- }
-}
-
-void HtmlDocVisitor::visit(DocIncOperator *op)
-{
- //printf("DocIncOperator: type=%d first=%d, last=%d text=`%s'\n",
- // op->type(),op->isFirst(),op->isLast(),op->text().data());
- if (op->isFirst())
- {
- if (!m_hide) m_t << PREFRAG_START;
- pushEnabled();
- m_hide=TRUE;
- }
- if (op->type()!=DocIncOperator::Skip)
- {
- popEnabled();
- if (!m_hide)
- {
- Doxygen::parserManager->getParser(m_langExt)
- ->parseCode(m_ci,op->context(),
- op->text(),op->isExample(),
- op->exampleFile());
- }
- pushEnabled();
- m_hide=TRUE;
- }
- if (op->isLast())
- {
- popEnabled();
- if (!m_hide) m_t << PREFRAG_END;
- }
- else
- {
- if (!m_hide) m_t << endl;
- }
-}
-
-void HtmlDocVisitor::visit(DocFormula *f)
-{
- if (m_hide) return;
- bool bDisplay = !f->isInline();
- if (bDisplay)
- {
- forceEndParagraph(f);
- m_t << "<p class=\"formulaDsp\">" << endl;
- }
-
- if (Config_getBool("USE_MATHJAX"))
- {
- QCString text = f->text();
- bool closeInline = FALSE;
- if (!bDisplay && !text.isEmpty() && text.at(0)=='$' &&
- text.at(text.length()-1)=='$')
- {
- closeInline=TRUE;
- text = text.mid(1,text.length()-2);
- m_t << "\\(";
- }
- m_t << convertToHtml(text);
- if (closeInline)
- {
- m_t << "\\)";
- }
- }
- else
- {
- m_t << "<img class=\"formula"
- << (bDisplay ? "Dsp" : "Inl");
- m_t << "\" alt=\"";
- filterQuotedCdataAttr(f->text());
- m_t << "\"";
- /// @todo cache image dimensions on formula generation and give height/width
- /// for faster preloading and better rendering of the page
- m_t << " src=\"" << f->relPath() << f->name() << ".png\"/>";
-
- }
- if (bDisplay)
- {
- m_t << endl << "</p>" << endl;
- forceStartParagraph(f);
- }
-}
-
-void HtmlDocVisitor::visit(DocIndexEntry *e)
-{
- QCString anchor = convertIndexWordToAnchor(e->entry());
- if (e->member())
- {
- anchor.prepend(e->member()->anchor()+"_");
- }
- m_t << "<a name=\"" << anchor << "\"></a>";
- //printf("*** DocIndexEntry: word='%s' scope='%s' member='%s'\n",
- // e->entry().data(),
- // e->scope() ? e->scope()->name().data() : "<null>",
- // e->member() ? e->member()->name().data() : "<null>"
- // );
- Doxygen::indexList.addIndexItem(e->scope(),e->member(),e->entry());
-}
-
-void HtmlDocVisitor::visit(DocSimpleSectSep *)
-{
- m_t << "</dd>" << endl;
- m_t << "<dd>" << endl;
-}
-
-void HtmlDocVisitor::visit(DocCite *cite)
-{
- if (m_hide) return;
- if (!cite->file().isEmpty())
- {
- startLink(cite->ref(),cite->file(),cite->relPath(),cite->anchor());
- }
- else
- {
- m_t << "<b>[";
- }
- filter(cite->text());
- if (!cite->file().isEmpty())
- {
- endLink();
- }
- else
- {
- m_t << "]</b>";
- }
-}
-
-
-//--------------------------------------
-// visitor functions for compound nodes
-//--------------------------------------
-
-
-void HtmlDocVisitor::visitPre(DocAutoList *l)
-{
- //printf("DocAutoList::visitPre\n");
- if (m_hide) return;
- forceEndParagraph(l);
- if (l->isEnumList())
- {
- //
- // Do list type based on depth:
- // 1.
- // a.
- // i.
- // A.
- // 1. (repeat)...
- //
- m_t << "<ol type=\"" << types[l->depth() % NUM_HTML_LIST_TYPES] << "\">";
- }
- else
- {
- m_t << "<ul>";
- }
- if (!l->isPreformatted()) m_t << "\n";
-}
-
-void HtmlDocVisitor::visitPost(DocAutoList *l)
-{
- //printf("DocAutoList::visitPost\n");
- if (m_hide) return;
- if (l->isEnumList())
- {
- m_t << "</ol>";
- }
- else
- {
- m_t << "</ul>";
- }
- if (!l->isPreformatted()) m_t << "\n";
- forceStartParagraph(l);
-}
-
-void HtmlDocVisitor::visitPre(DocAutoListItem *)
-{
- if (m_hide) return;
- m_t << "<li>";
-}
-
-void HtmlDocVisitor::visitPost(DocAutoListItem *li)
-{
- if (m_hide) return;
- m_t << "</li>";
- if (!li->isPreformatted()) m_t << "\n";
-}
-
-template<class T>
-bool isFirstChildNode(T *parent, DocNode *node)
-{
- return parent->children().getFirst()==node;
-}
-
-template<class T>
-bool isLastChildNode(T *parent, DocNode *node)
-{
- return parent->children().getLast()==node;
-}
-
-bool isSeparatedParagraph(DocSimpleSect *parent,DocPara *par)
-{
- QList<DocNode> nodes = parent->children();
- int i = nodes.findRef(par);
- if (i==-1) return FALSE;
- int count = parent->children().count();
- if (count>1 && i==0)
- {
- if (nodes.at(i+1)->kind()==DocNode::Kind_SimpleSectSep)
- {
- return TRUE;
- }
- }
- else if (count>1 && i==count-1)
- {
- if (nodes.at(i-1)->kind()==DocNode::Kind_SimpleSectSep)
- {
- return TRUE;
- }
- }
- else if (count>2 && i>0 && i<count-1)
- {
- if (nodes.at(i-1)->kind()==DocNode::Kind_SimpleSectSep &&
- nodes.at(i+1)->kind()==DocNode::Kind_SimpleSectSep)
- {
- return TRUE;
- }
- }
- return FALSE;
-}
-
-static int getParagraphContext(DocPara *p,bool &isFirst,bool &isLast)
-{
- int t=0;
- isFirst=FALSE;
- isLast=FALSE;
- if (p && p->parent())
- {
- switch (p->parent()->kind())
- {
- case DocNode::Kind_AutoListItem:
- //isFirst=TRUE;
- //isLast =TRUE;
- isFirst=isFirstChildNode((DocAutoListItem*)p->parent(),p);
- isLast =isLastChildNode ((DocAutoListItem*)p->parent(),p);
- t=1; // not used
- break;
- case DocNode::Kind_SimpleListItem:
- isFirst=TRUE;
- isLast =TRUE;
- t=1; // not used
- break;
- case DocNode::Kind_ParamList:
- isFirst=TRUE;
- isLast =TRUE;
- t=1; // not used
- break;
- case DocNode::Kind_HtmlListItem:
- isFirst=isFirstChildNode((DocHtmlListItem*)p->parent(),p);
- isLast =isLastChildNode ((DocHtmlListItem*)p->parent(),p);
- if (isFirst) t=1;
- if (isLast) t=3;
- break;
- case DocNode::Kind_SecRefItem:
- isFirst=isFirstChildNode((DocSecRefItem*)p->parent(),p);
- isLast =isLastChildNode ((DocSecRefItem*)p->parent(),p);
- if (isFirst) t=1;
- if (isLast) t=3;
- break;
- case DocNode::Kind_HtmlDescData:
- isFirst=isFirstChildNode((DocHtmlDescData*)p->parent(),p);
- isLast =isLastChildNode ((DocHtmlDescData*)p->parent(),p);
- if (isFirst) t=2;
- if (isLast) t=4;
- break;
- case DocNode::Kind_XRefItem:
- isFirst=isFirstChildNode((DocXRefItem*)p->parent(),p);
- isLast =isLastChildNode ((DocXRefItem*)p->parent(),p);
- if (isFirst) t=2;
- if (isLast) t=4;
- break;
- case DocNode::Kind_HtmlCell:
- isFirst=isFirstChildNode((DocHtmlCell*)p->parent(),p);
- isLast =isLastChildNode ((DocHtmlCell*)p->parent(),p);
- if (isFirst) t=5;
- if (isLast) t=6;
- break;
- case DocNode::Kind_SimpleSect:
- isFirst=isFirstChildNode((DocSimpleSect*)p->parent(),p);
- isLast =isLastChildNode ((DocSimpleSect*)p->parent(),p);
- if (isFirst) t=2;
- if (isLast) t=4;
- if (isSeparatedParagraph((DocSimpleSect*)p->parent(),p))
- // if the paragraph is enclosed with separators it will
- // be included in <dd>..</dd> so avoid addition paragraph
- // markers
- {
- isFirst=isLast=TRUE;
- }
- break;
- default:
- break;
- }
- //printf("para=%p parent()->kind=%d isFirst=%d isLast=%d t=%d\n",
- // p,p->parent()->kind(),isFirst,isLast,t);
- }
- return t;
-}
-
-void HtmlDocVisitor::visitPre(DocPara *p)
-{
- if (m_hide) return;
-
- //printf("DocPara::visitPre: parent of kind %d ",
- // p->parent() ? p->parent()->kind() : -1);
-
- bool needsTag = FALSE;
- if (p && p->parent())
- {
- switch (p->parent()->kind())
- {
- case DocNode::Kind_Section:
- case DocNode::Kind_Internal:
- case DocNode::Kind_HtmlListItem:
- case DocNode::Kind_HtmlDescData:
- case DocNode::Kind_HtmlCell:
- case DocNode::Kind_SimpleListItem:
- case DocNode::Kind_AutoListItem:
- case DocNode::Kind_SimpleSect:
- case DocNode::Kind_XRefItem:
- case DocNode::Kind_Copy:
- case DocNode::Kind_HtmlBlockQuote:
- needsTag = TRUE;
- break;
- case DocNode::Kind_Root:
- needsTag = !((DocRoot*)p->parent())->singleLine();
- break;
- default:
- needsTag = FALSE;
- }
- }
-
- // if the first element of a paragraph is something that should be outside of
- // the paragraph (<ul>,<dl>,<table>,..) then that will already started the
- // paragraph and we don't need to do it here
- uint nodeIndex = 0;
- if (p && nodeIndex<p->children().count())
- {
- while (nodeIndex<p->children().count() &&
- p->children().at(nodeIndex)->kind()==DocNode::Kind_WhiteSpace)
- {
- nodeIndex++;
- }
- if (nodeIndex<p->children().count())
- {
- DocNode *n = p->children().at(nodeIndex);
- if (mustBeOutsideParagraph(n))
- {
- needsTag = FALSE;
- }
- }
- }
-
- // check if this paragraph is the first or last child of a <li> or <dd>.
- // this allows us to mark the tag with a special class so we can
- // fix the otherwise ugly spacing.
- int t;
- static const char *contexts[7] =
- { "", // 0
- " class=\"startli\"", // 1
- " class=\"startdd\"", // 2
- " class=\"endli\"", // 3
- " class=\"enddd\"", // 4
- " class=\"starttd\"", // 5
- " class=\"endtd\"" // 6
- };
- bool isFirst;
- bool isLast;
- t = getParagraphContext(p,isFirst,isLast);
- //printf("startPara first=%d last=%d\n",isFirst,isLast);
- if (isFirst && isLast) needsTag=FALSE;
-
- //printf(" needsTag=%d\n",needsTag);
- // write the paragraph tag (if needed)
- if (needsTag) m_t << "<p" << contexts[t] << ">";
-}
-
-void HtmlDocVisitor::visitPost(DocPara *p)
-{
- bool needsTag = FALSE;
- if (p && p->parent())
- {
- switch (p->parent()->kind())
- {
- case DocNode::Kind_Section:
- case DocNode::Kind_Internal:
- case DocNode::Kind_HtmlListItem:
- case DocNode::Kind_HtmlDescData:
- case DocNode::Kind_HtmlCell:
- case DocNode::Kind_SimpleListItem:
- case DocNode::Kind_AutoListItem:
- case DocNode::Kind_SimpleSect:
- case DocNode::Kind_XRefItem:
- case DocNode::Kind_Copy:
- case DocNode::Kind_HtmlBlockQuote:
- needsTag = TRUE;
- break;
- case DocNode::Kind_Root:
- needsTag = !((DocRoot*)p->parent())->singleLine();
- break;
- default:
- needsTag = FALSE;
- }
- }
-
- QCString context;
- // if the last element of a paragraph is something that should be outside of
- // the paragraph (<ul>,<dl>,<table>) then that will already have ended the
- // paragraph and we don't need to do it here
- int nodeIndex = p->children().count()-1;
- if (p && nodeIndex>=0)
- {
- while (nodeIndex>=0 && p->children().at(nodeIndex)->kind()==DocNode::Kind_WhiteSpace)
- {
- nodeIndex--;
- }
- if (nodeIndex>=0)
- {
- DocNode *n = p->children().at(nodeIndex);
- if (mustBeOutsideParagraph(n))
- {
- needsTag = FALSE;
- }
- }
- }
-
- bool isFirst;
- bool isLast;
- getParagraphContext(p,isFirst,isLast);
- //printf("endPara first=%d last=%d\n",isFirst,isLast);
- if (isFirst && isLast) needsTag=FALSE;
-
- //printf("DocPara::visitPost needsTag=%d\n",needsTag);
-
- if (needsTag) m_t << "</p>\n";
-
-}
-
-void HtmlDocVisitor::visitPre(DocRoot *)
-{
-}
-
-void HtmlDocVisitor::visitPost(DocRoot *)
-{
-}
-
-void HtmlDocVisitor::visitPre(DocSimpleSect *s)
-{
- if (m_hide) return;
- forceEndParagraph(s);
- m_t << "<dl class=\"section " << s->typeString() << "\"><dt>";
- switch(s->type())
- {
- case DocSimpleSect::See:
- m_t << theTranslator->trSeeAlso(); break;
- case DocSimpleSect::Return:
- m_t << theTranslator->trReturns(); break;
- case DocSimpleSect::Author:
- m_t << theTranslator->trAuthor(TRUE,TRUE); break;
- case DocSimpleSect::Authors:
- m_t << theTranslator->trAuthor(TRUE,FALSE); break;
- case DocSimpleSect::Version:
- m_t << theTranslator->trVersion(); break;
- case DocSimpleSect::Since:
- m_t << theTranslator->trSince(); break;
- case DocSimpleSect::Date:
- m_t << theTranslator->trDate(); break;
- case DocSimpleSect::Note:
- m_t << theTranslator->trNote(); break;
- case DocSimpleSect::Warning:
- m_t << theTranslator->trWarning(); break;
- case DocSimpleSect::Pre:
- m_t << theTranslator->trPrecondition(); break;
- case DocSimpleSect::Post:
- m_t << theTranslator->trPostcondition(); break;
- case DocSimpleSect::Copyright:
- m_t << theTranslator->trCopyright(); break;
- case DocSimpleSect::Invar:
- m_t << theTranslator->trInvariant(); break;
- case DocSimpleSect::Remark:
- m_t << theTranslator->trRemarks(); break;
- case DocSimpleSect::Attention:
- m_t << theTranslator->trAttention(); break;
- case DocSimpleSect::User: break;
- case DocSimpleSect::Rcs: break;
- case DocSimpleSect::Unknown: break;
- }
-
- // special case 1: user defined title
- if (s->type()!=DocSimpleSect::User && s->type()!=DocSimpleSect::Rcs)
- {
- m_t << ":</dt><dd>";
- }
-}
-
-void HtmlDocVisitor::visitPost(DocSimpleSect *s)
-{
- if (m_hide) return;
- m_t << "</dd></dl>\n";
- forceStartParagraph(s);
-}
-
-void HtmlDocVisitor::visitPre(DocTitle *)
-{
-}
-
-void HtmlDocVisitor::visitPost(DocTitle *)
-{
- if (m_hide) return;
- m_t << "</b></dt><dd>";
-}
-
-void HtmlDocVisitor::visitPre(DocSimpleList *sl)
-{
- if (m_hide) return;
- forceEndParagraph(sl);
- m_t << "<ul>";
- if (!sl->isPreformatted()) m_t << "\n";
-
-}
-
-void HtmlDocVisitor::visitPost(DocSimpleList *sl)
-{
- if (m_hide) return;
- m_t << "</ul>";
- if (!sl->isPreformatted()) m_t << "\n";
- forceStartParagraph(sl);
-}
-
-void HtmlDocVisitor::visitPre(DocSimpleListItem *)
-{
- if (m_hide) return;
- m_t << "<li>";
-}
-
-void HtmlDocVisitor::visitPost(DocSimpleListItem *li)
-{
- if (m_hide) return;
- m_t << "</li>";
- if (!li->isPreformatted()) m_t << "\n";
-}
-
-void HtmlDocVisitor::visitPre(DocSection *s)
-{
- if (m_hide) return;
- forceEndParagraph(s);
- m_t << "<h" << s->level()+1 << ">";
- m_t << "<a class=\"anchor\" id=\"" << s->anchor();
- m_t << "\"></a>" << endl;
- filter(convertCharEntitiesToUTF8(s->title().data()));
- m_t << "</h" << s->level()+1 << ">\n";
-}
-
-void HtmlDocVisitor::visitPost(DocSection *s)
-{
- forceStartParagraph(s);
-}
-
-void HtmlDocVisitor::visitPre(DocHtmlList *s)
-{
- if (m_hide) return;
- forceEndParagraph(s);
- if (s->type()==DocHtmlList::Ordered)
- {
- m_t << "<ol" << htmlAttribsToString(s->attribs()) << ">\n";
- }
- else
- {
- m_t << "<ul" << htmlAttribsToString(s->attribs()) << ">\n";
- }
-}
-
-void HtmlDocVisitor::visitPost(DocHtmlList *s)
-{
- if (m_hide) return;
- if (s->type()==DocHtmlList::Ordered)
- {
- m_t << "</ol>";
- }
- else
- {
- m_t << "</ul>";
- }
- if (!s->isPreformatted()) m_t << "\n";
- forceStartParagraph(s);
-}
-
-void HtmlDocVisitor::visitPre(DocHtmlListItem *i)
-{
- if (m_hide) return;
- m_t << "<li" << htmlAttribsToString(i->attribs()) << ">";
- if (!i->isPreformatted()) m_t << "\n";
-}
-
-void HtmlDocVisitor::visitPost(DocHtmlListItem *)
-{
- if (m_hide) return;
- m_t << "</li>\n";
-}
-
-void HtmlDocVisitor::visitPre(DocHtmlDescList *dl)
-{
- if (m_hide) return;
- forceEndParagraph(dl);
- m_t << "<dl" << htmlAttribsToString(dl->attribs()) << ">\n";
-}
-
-void HtmlDocVisitor::visitPost(DocHtmlDescList *dl)
-{
- if (m_hide) return;
- m_t << "</dl>\n";
- forceStartParagraph(dl);
-}
-
-void HtmlDocVisitor::visitPre(DocHtmlDescTitle *dt)
-{
- if (m_hide) return;
- m_t << "<dt" << htmlAttribsToString(dt->attribs()) << ">";
-}
-
-void HtmlDocVisitor::visitPost(DocHtmlDescTitle *)
-{
- if (m_hide) return;
- m_t << "</dt>\n";
-}
-
-void HtmlDocVisitor::visitPre(DocHtmlDescData *dd)
-{
- if (m_hide) return;
- m_t << "<dd" << htmlAttribsToString(dd->attribs()) << ">";
-}
-
-void HtmlDocVisitor::visitPost(DocHtmlDescData *)
-{
- if (m_hide) return;
- m_t << "</dd>\n";
-}
-
-void HtmlDocVisitor::visitPre(DocHtmlTable *t)
-{
- if (m_hide) return;
-
- forceEndParagraph(t);
-
- QString attrs = htmlAttribsToString(t->attribs());
- if (attrs.isEmpty())
- {
- m_t << "<table class=\"doxtable\">\n";
- }
- else
- {
- m_t << "<table " << htmlAttribsToString(t->attribs()) << ">\n";
- }
-}
-
-void HtmlDocVisitor::visitPost(DocHtmlTable *t)
-{
- if (m_hide) return;
- m_t << "</table>\n";
- forceStartParagraph(t);
-}
-
-void HtmlDocVisitor::visitPre(DocHtmlRow *tr)
-{
- if (m_hide) return;
- m_t << "<tr" << htmlAttribsToString(tr->attribs()) << ">\n";
-}
-
-void HtmlDocVisitor::visitPost(DocHtmlRow *)
-{
- if (m_hide) return;
- m_t << "</tr>\n";
-}
-
-void HtmlDocVisitor::visitPre(DocHtmlCell *c)
-{
- if (m_hide) return;
- if (c->isHeading())
- {
- m_t << "<th" << htmlAttribsToString(c->attribs()) << ">";
- }
- else
- {
- m_t << "<td" << htmlAttribsToString(c->attribs()) << ">";
- }
-}
-
-void HtmlDocVisitor::visitPost(DocHtmlCell *c)
-{
- if (m_hide) return;
- if (c->isHeading()) m_t << "</th>"; else m_t << "</td>";
-}
-
-void HtmlDocVisitor::visitPre(DocHtmlCaption *c)
-{
- if (m_hide) return;
- bool hasAlign = FALSE;
- HtmlAttribListIterator li(c->attribs());
- HtmlAttrib *att;
- for (li.toFirst();(att=li.current());++li)
- {
- if (att->name=="align") hasAlign=TRUE;
- }
- m_t << "<caption" << htmlAttribsToString(c->attribs());
- if (!hasAlign) m_t << " align=\"bottom\"";
- m_t << ">";
-}
-
-void HtmlDocVisitor::visitPost(DocHtmlCaption *)
-{
- if (m_hide) return;
- m_t << "</caption>\n";
-}
-
-void HtmlDocVisitor::visitPre(DocInternal *)
-{
- if (m_hide) return;
- //forceEndParagraph(i);
- //m_t << "<p><b>" << theTranslator->trForInternalUseOnly() << "</b></p>" << endl;
-}
-
-void HtmlDocVisitor::visitPost(DocInternal *)
-{
- if (m_hide) return;
- //forceStartParagraph(i);
-}
-
-void HtmlDocVisitor::visitPre(DocHRef *href)
-{
- if (m_hide) return;
- QCString url = correctURL(href->url(),href->relPath());
- m_t << "<a href=\"" << convertToXML(url) << "\""
- << htmlAttribsToString(href->attribs()) << ">";
-}
-
-void HtmlDocVisitor::visitPost(DocHRef *)
-{
- if (m_hide) return;
- m_t << "</a>";
-}
-
-void HtmlDocVisitor::visitPre(DocHtmlHeader *header)
-{
- if (m_hide) return;
- forceEndParagraph(header);
- m_t << "<h" << header->level()
- << htmlAttribsToString(header->attribs()) << ">";
-}
-
-void HtmlDocVisitor::visitPost(DocHtmlHeader *header)
-{
- if (m_hide) return;
- m_t << "</h" << header->level() << ">\n";
- forceStartParagraph(header);
-}
-
-void HtmlDocVisitor::visitPre(DocImage *img)
-{
- if (img->type()==DocImage::Html)
- {
- forceEndParagraph(img);
- if (m_hide) return;
- QString baseName=img->name();
- int i;
- if ((i=baseName.findRev('/'))!=-1 || (i=baseName.findRev('\\'))!=-1)
- {
- baseName=baseName.right(baseName.length()-i-1);
- }
- m_t << "<div class=\"image\">" << endl;
- QCString url = img->url();
- if (url.isEmpty())
- {
- m_t << "<img src=\"" << img->relPath() << img->name() << "\" alt=\""
- << baseName << "\"" << htmlAttribsToString(img->attribs())
- << "/>" << endl;
- }
- else
- {
- m_t << "<img src=\"" << correctURL(url,img->relPath()) << "\" "
- << htmlAttribsToString(img->attribs())
- << "/>" << endl;
- }
- if (img->hasCaption())
- {
- m_t << "<div class=\"caption\">" << endl;
- }
- }
- else // other format -> skip
- {
- pushEnabled();
- m_hide=TRUE;
- }
-}
-
-void HtmlDocVisitor::visitPost(DocImage *img)
-{
- if (img->type()==DocImage::Html)
- {
- if (m_hide) return;
- if (img->hasCaption())
- {
- m_t << "</div>";
- }
- m_t << "</div>" << endl;
- forceStartParagraph(img);
- }
- else // other format
- {
- popEnabled();
- }
-}
-
-void HtmlDocVisitor::visitPre(DocDotFile *df)
-{
- if (m_hide) return;
- m_t << "<div class=\"dotgraph\">" << endl;
- writeDotFile(df->file(),df->relPath(),df->context());
- if (df->hasCaption())
- {
- m_t << "<div class=\"caption\">" << endl;
- }
-}
-
-void HtmlDocVisitor::visitPost(DocDotFile *df)
-{
- if (m_hide) return;
- if (df->hasCaption())
- {
- m_t << "</div>" << endl;
- }
- m_t << "</div>" << endl;
-}
-
-void HtmlDocVisitor::visitPre(DocMscFile *df)
-{
- if (m_hide) return;
- m_t << "<div class=\"mscgraph\">" << endl;
- writeMscFile(df->file(),df->relPath(),df->context());
- if (df->hasCaption())
- {
- m_t << "<div class=\"caption\">" << endl;
- }
-}
-void HtmlDocVisitor::visitPost(DocMscFile *df)
-{
- if (m_hide) return;
- if (df->hasCaption())
- {
- m_t << "</div>" << endl;
- }
- m_t << "</div>" << endl;
-}
-
-void HtmlDocVisitor::visitPre(DocLink *lnk)
-{
- if (m_hide) return;
- startLink(lnk->ref(),lnk->file(),lnk->relPath(),lnk->anchor());
-}
-
-void HtmlDocVisitor::visitPost(DocLink *)
-{
- if (m_hide) return;
- endLink();
-}
-
-void HtmlDocVisitor::visitPre(DocRef *ref)
-{
- if (m_hide) return;
- if (!ref->file().isEmpty())
- {
- // when ref->isSubPage()==TRUE we use ref->file() for HTML and
- // ref->anchor() for LaTeX/RTF
- startLink(ref->ref(),ref->file(),ref->relPath(),ref->isSubPage() ? QCString() : ref->anchor());
- }
- if (!ref->hasLinkText()) filter(ref->targetTitle());
-}
-
-void HtmlDocVisitor::visitPost(DocRef *ref)
-{
- if (m_hide) return;
- if (!ref->file().isEmpty()) endLink();
- //m_t << " ";
-}
-
-void HtmlDocVisitor::visitPre(DocSecRefItem *ref)
-{
- if (m_hide) return;
- QString refName=ref->file();
- if (refName.right(Doxygen::htmlFileExtension.length())!=
- QString(Doxygen::htmlFileExtension))
- {
- refName+=Doxygen::htmlFileExtension;
- }
- m_t << "<li><a href=\"" << refName << "#" << ref->anchor() << "\">";
-
-}
-
-void HtmlDocVisitor::visitPost(DocSecRefItem *)
-{
- if (m_hide) return;
- m_t << "</a></li>\n";
-}
-
-void HtmlDocVisitor::visitPre(DocSecRefList *s)
-{
- if (m_hide) return;
- forceEndParagraph(s);
- m_t << "<div class=\"multicol\">" << endl;
- m_t << "<ul>" << endl;
-}
-
-void HtmlDocVisitor::visitPost(DocSecRefList *s)
-{
- if (m_hide) return;
- m_t << "</ul>" << endl;
- m_t << "</div>" << endl;
- forceStartParagraph(s);
-}
-
-//void HtmlDocVisitor::visitPre(DocLanguage *l)
-//{
-// QString langId = Config_getEnum("OUTPUT_LANGUAGE");
-// if (l->id().lower()!=langId.lower())
-// {
-// pushEnabled();
-// m_hide = TRUE;
-// }
-//}
-//
-//void HtmlDocVisitor::visitPost(DocLanguage *l)
-//{
-// QString langId = Config_getEnum("OUTPUT_LANGUAGE");
-// if (l->id().lower()!=langId.lower())
-// {
-// popEnabled();
-// }
-//}
-
-void HtmlDocVisitor::visitPre(DocParamSect *s)
-{
- if (m_hide) return;
- forceEndParagraph(s);
- QCString className;
- QCString heading;
- switch(s->type())
- {
- case DocParamSect::Param:
- heading=theTranslator->trParameters();
- className="params";
- break;
- case DocParamSect::RetVal:
- heading=theTranslator->trReturnValues();
- className="retval";
- break;
- case DocParamSect::Exception:
- heading=theTranslator->trExceptions();
- className="exception";
- break;
- case DocParamSect::TemplateParam:
- heading="Template Parameters"; break; // TODO: TRANSLATE ME
- className="tparams";
- default:
- ASSERT(0);
- }
- m_t << "<dl class=\"" << className << "\"><dt><b>";
- m_t << heading << ":";
- m_t << "</b></dt><dd>" << endl;
- m_t << " <table class=\"" << className << "\">" << endl;
-}
-
-void HtmlDocVisitor::visitPost(DocParamSect *s)
-{
- if (m_hide) return;
- m_t << " </table>" << endl;
- m_t << " </dd>" << endl;
- m_t << "</dl>" << endl;
- forceStartParagraph(s);
-}
-
-void HtmlDocVisitor::visitPre(DocParamList *pl)
-{
- //printf("DocParamList::visitPre\n");
- if (m_hide) return;
- m_t << " <tr>";
- DocParamSect *sect = 0;
- if (pl->parent()->kind()==DocNode::Kind_ParamSect)
- {
- sect=(DocParamSect*)pl->parent();
- }
- if (sect && sect->hasInOutSpecifier())
- {
- m_t << "<td class=\"paramdir\">";
- if (pl->direction()!=DocParamSect::Unspecified)
- {
- m_t << "[";
- if (pl->direction()==DocParamSect::In)
- {
- m_t << "in";
- }
- else if (pl->direction()==DocParamSect::Out)
- {
- m_t << "out";
- }
- else if (pl->direction()==DocParamSect::InOut)
- {
- m_t << "in,out";
- }
- m_t << "]";
- }
- m_t << "</td>";
- }
- if (sect && sect->hasTypeSpecifier())
- {
- m_t << "<td class=\"paramtype\">";
- QListIterator<DocNode> li(pl->paramTypes());
- DocNode *type;
- bool first=TRUE;
- for (li.toFirst();(type=li.current());++li)
- {
- if (!first) m_t << "&#160;|&#160;"; else first=FALSE;
- if (type->kind()==DocNode::Kind_Word)
- {
- visit((DocWord*)type);
- }
- else if (type->kind()==DocNode::Kind_LinkedWord)
- {
- visit((DocLinkedWord*)type);
- }
- }
- m_t << "</td>";
- }
- m_t << "<td class=\"paramname\">";
- //QStrListIterator li(pl->parameters());
- //const char *s;
- QListIterator<DocNode> li(pl->parameters());
- DocNode *param;
- bool first=TRUE;
- for (li.toFirst();(param=li.current());++li)
- {
- if (!first) m_t << ","; else first=FALSE;
- if (param->kind()==DocNode::Kind_Word)
- {
- visit((DocWord*)param);
- }
- else if (param->kind()==DocNode::Kind_LinkedWord)
- {
- visit((DocLinkedWord*)param);
- }
- }
- m_t << "</td><td>";
-}
-
-void HtmlDocVisitor::visitPost(DocParamList *)
-{
- //printf("DocParamList::visitPost\n");
- if (m_hide) return;
- m_t << "</td></tr>" << endl;
-}
-
-void HtmlDocVisitor::visitPre(DocXRefItem *x)
-{
- if (m_hide) return;
- forceEndParagraph(x);
- bool anonymousEnum = x->file()=="@";
- if (!anonymousEnum)
- {
- m_t << "<dl class=\"" << x->key() << "\"><dt><b><a class=\"el\" href=\""
- << x->relPath() << x->file() << Doxygen::htmlFileExtension
- << "#" << x->anchor() << "\">";
- }
- else
- {
- m_t << "<dl class=\"" << x->key() << "\"><dt><b>";
- }
- filter(x->title());
- m_t << ":";
- if (!anonymousEnum) m_t << "</a>";
- m_t << "</b></dt><dd>";
-}
-
-void HtmlDocVisitor::visitPost(DocXRefItem *x)
-{
- if (m_hide) return;
- m_t << "</dd></dl>" << endl;
- forceStartParagraph(x);
-}
-
-void HtmlDocVisitor::visitPre(DocInternalRef *ref)
-{
- if (m_hide) return;
- startLink(0,ref->file(),ref->relPath(),ref->anchor());
-}
-
-void HtmlDocVisitor::visitPost(DocInternalRef *)
-{
- if (m_hide) return;
- endLink();
- m_t << " ";
-}
-
-void HtmlDocVisitor::visitPre(DocCopy *)
-{
-}
-
-void HtmlDocVisitor::visitPost(DocCopy *)
-{
-}
-
-void HtmlDocVisitor::visitPre(DocText *)
-{
-}
-
-void HtmlDocVisitor::visitPost(DocText *)
-{
-}
-
-void HtmlDocVisitor::visitPre(DocHtmlBlockQuote *b)
-{
- if (m_hide) return;
- forceEndParagraph(b);
-
- QString attrs = htmlAttribsToString(b->attribs());
- if (attrs.isEmpty())
- {
- m_t << "<blockquote class=\"doxtable\">\n";
- }
- else
- {
- m_t << "<blockquote " << htmlAttribsToString(b->attribs()) << ">\n";
- }
-}
-
-void HtmlDocVisitor::visitPost(DocHtmlBlockQuote *b)
-{
- if (m_hide) return;
- m_t << "</blockquote>" << endl;
- forceStartParagraph(b);
-}
-
-void HtmlDocVisitor::filter(const char *str)
-{
- if (str==0) return;
- const char *p=str;
- char c;
- while (*p)
- {
- c=*p++;
- switch(c)
- {
- case '<': m_t << "&lt;"; break;
- case '>': m_t << "&gt;"; break;
- case '&': m_t << "&amp;"; break;
- default: m_t << c;
- }
- }
-}
-
-/// Escape basic entities to produce a valid CDATA attribute value,
-/// assume that the outer quoting will be using the double quote &quot;
-void HtmlDocVisitor::filterQuotedCdataAttr(const char* str)
-{
- if (str==0) return;
- const char *p=str;
- char c;
- while (*p)
- {
- c=*p++;
- switch(c)
- {
- case '&': m_t << "&amp;"; break;
- case '"': m_t << "&quot;"; break;
- // For SGML compliance, and given the SGML declaration for HTML syntax,
- // it's enough to replace these two, provided that the declaration
- // for the HTML version we generate (and as supported by the browser)
- // specifies that all the other symbols used in rawVal are
- // within the right charachter class (i.e., they're not
- // some multinational weird charachters not in the BASESET).
- // We assume that 1) the browser will support whatever is remaining
- // in the formula and 2) the TeX formulae are generally governed
- // by even stricter charachter restrictions so it should be enough.
- //
- // On some incompliant browsers, additional translation of
- // '>' and '<' into "&gt;" and "&lt;", respectively, might be needed;
- // but I'm unaware of particular modern (last 4 years) versions
- // with such problems, so let's not do it for performance.
- // Also, some brousers will (wrongly) not process the entity references
- // inside the attribute value and show the &...; form instead,
- // so we won't create entites unless necessary to minimize clutter there.
- // --vassilii
- default: m_t << c;
- }
- }
-}
-
-void HtmlDocVisitor::startLink(const QCString &ref,const QCString &file,
- const QCString &relPath,const QCString &anchor,
- const QCString &tooltip)
-{
- if (!ref.isEmpty()) // link to entity imported via tag file
- {
- m_t << "<a class=\"elRef\" ";
- m_t << externalLinkTarget() << externalRef(relPath,ref,FALSE);
- }
- else // local link
- {
- m_t << "<a class=\"el\" ";
- }
- m_t << "href=\"";
- m_t << externalRef(relPath,ref,TRUE);
- if (!file.isEmpty()) m_t << file << Doxygen::htmlFileExtension;
- if (!anchor.isEmpty()) m_t << "#" << anchor;
- m_t << "\"";
- if (!tooltip.isEmpty()) m_t << " title=\"" << substitute(tooltip,"\"","&quot;") << "\"";
- m_t << ">";
-}
-
-void HtmlDocVisitor::endLink()
-{
- m_t << "</a>";
-}
-
-void HtmlDocVisitor::pushEnabled()
-{
- m_enabled.push(new bool(m_hide));
-}
-
-void HtmlDocVisitor::popEnabled()
-{
- bool *v=m_enabled.pop();
- ASSERT(v!=0);
- m_hide = *v;
- delete v;
-}
-
-void HtmlDocVisitor::writeDotFile(const QCString &fn,const QCString &relPath,
- const QCString &context)
-{
- QCString baseName=fn;
- int i;
- if ((i=baseName.findRev('/'))!=-1)
- {
- baseName=baseName.right(baseName.length()-i-1);
- }
- if ((i=baseName.find('.'))!=-1) // strip extension
- {
- baseName=baseName.left(i);
- }
- baseName.prepend("dot_");
- QCString outDir = Config_getString("HTML_OUTPUT");
- writeDotGraphFromFile(fn,outDir,baseName,BITMAP);
- writeDotImageMapFromFile(m_t,fn,outDir,relPath,baseName,context);
-}
-
-void HtmlDocVisitor::writeMscFile(const QCString &fileName,
- const QCString &relPath,
- const QCString &context)
-{
- QCString baseName=fileName;
- int i;
- if ((i=baseName.findRev('/'))!=-1) // strip path
- {
- baseName=baseName.right(baseName.length()-i-1);
- }
- if ((i=baseName.find('.'))!=-1) // strip extension
- {
- baseName=baseName.left(i);
- }
- baseName.prepend("msc_");
- QCString outDir = Config_getString("HTML_OUTPUT");
- writeMscGraphFromFile(fileName,outDir,baseName,MSC_BITMAP);
- writeMscImageMapFromFile(m_t,fileName,outDir,relPath,baseName,context);
-}
-
-/** Used for items found inside a paragraph, which due to XHTML restrictions
- * have to be outside of the paragraph. This method will forcefully end
- * the current paragraph and forceStartParagraph() will restart it.
- */
-void HtmlDocVisitor::forceEndParagraph(DocNode *n)
-{
- //printf("forceEndParagraph(%p) %d\n",n,n->kind());
- if (n->parent() && n->parent()->kind()==DocNode::Kind_Para)
- {
- DocPara *para = (DocPara*)n->parent();
- int nodeIndex = para->children().findRef(n);
- nodeIndex--;
- if (nodeIndex<0) return; // first node
- while (nodeIndex>=0 &&
- para->children().at(nodeIndex)->kind()==DocNode::Kind_WhiteSpace
- )
- {
- nodeIndex--;
- }
- if (nodeIndex>=0)
- {
- DocNode *n = para->children().at(nodeIndex);
- //printf("n=%p kind=%d outside=%d\n",n,n->kind(),mustBeOutsideParagraph(n));
- if (mustBeOutsideParagraph(n)) return;
- }
-
- bool isFirst;
- bool isLast;
- getParagraphContext(para,isFirst,isLast);
- //printf("forceEnd first=%d last=%d\n",isFirst,isLast);
- if (isFirst && isLast) return;
-
- m_t << "</p>" << endl;
- }
-}
-
-/** Used for items found inside a paragraph, which due to XHTML restrictions
- * have to be outside of the paragraph. This method will forcefully start
- * the paragraph, that was previously ended by forceEndParagraph().
- */
-void HtmlDocVisitor::forceStartParagraph(DocNode *n)
-{
- //printf("forceStartParagraph(%p) %d\n",n,n->kind());
- if (n->parent() && n->parent()->kind()==DocNode::Kind_Para) // if we are inside a paragraph
- {
- DocPara *para = (DocPara*)n->parent();
- int nodeIndex = para->children().findRef(n);
- int numNodes = para->children().count();
- nodeIndex++;
- if (nodeIndex==numNodes) return; // last node
- while (nodeIndex<numNodes &&
- para->children().at(nodeIndex)->kind()==DocNode::Kind_WhiteSpace
- )
- {
- nodeIndex++;
- }
- if (nodeIndex<numNodes)
- {
- DocNode *n = para->children().at(nodeIndex);
- if (mustBeOutsideParagraph(n)) return;
- }
- else
- {
- return; // only whitespace at the end!
- }
-
- bool isFirst;
- bool isLast;
- getParagraphContext(para,isFirst,isLast);
- //printf("forceStart first=%d last=%d\n",isFirst,isLast);
- if (isFirst && isLast) return;
-
- m_t << "<p>";
- }
-}
-
diff --git a/trunk/src/htmldocvisitor.h b/trunk/src/htmldocvisitor.h
deleted file mode 100644
index 33d1177..0000000
--- a/trunk/src/htmldocvisitor.h
+++ /dev/null
@@ -1,165 +0,0 @@
-/******************************************************************************
- *
- *
- *
- *
- * Copyright (C) 1997-2012 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.
- *
- */
-
-#ifndef _HTMLDOCVISITOR_H
-#define _HTMLDOCVISITOR_H
-
-#include "docvisitor.h"
-#include <qstack.h>
-#include <qcstring.h>
-
-class DocNode;
-class FTextStream;
-class CodeOutputInterface;
-
-/*! @brief Concrete visitor implementation for HTML output. */
-class HtmlDocVisitor : public DocVisitor
-{
- public:
- HtmlDocVisitor(FTextStream &t,CodeOutputInterface &ci,const char *langExt);
-
- //--------------------------------------
- // visitor functions for leaf nodes
- //--------------------------------------
-
- void visit(DocWord *);
- void visit(DocLinkedWord *);
- void visit(DocWhiteSpace *);
- void visit(DocSymbol *);
- void visit(DocURL *);
- void visit(DocLineBreak *);
- void visit(DocHorRuler *);
- void visit(DocStyleChange *);
- void visit(DocVerbatim *);
- void visit(DocAnchor *);
- void visit(DocInclude *);
- void visit(DocIncOperator *);
- void visit(DocFormula *);
- void visit(DocIndexEntry *);
- void visit(DocSimpleSectSep *);
- void visit(DocCite *);
-
- //--------------------------------------
- // visitor functions for compound nodes
- //--------------------------------------
-
- void visitPre(DocAutoList *);
- void visitPost(DocAutoList *);
- void visitPre(DocAutoListItem *);
- void visitPost(DocAutoListItem *);
- void visitPre(DocPara *) ;
- void visitPost(DocPara *);
- void visitPre(DocRoot *);
- void visitPost(DocRoot *);
- void visitPre(DocSimpleSect *);
- void visitPost(DocSimpleSect *);
- void visitPre(DocTitle *);
- void visitPost(DocTitle *);
- void visitPre(DocSimpleList *);
- void visitPost(DocSimpleList *);
- void visitPre(DocSimpleListItem *);
- void visitPost(DocSimpleListItem *);
- void visitPre(DocSection *);
- void visitPost(DocSection *);
- void visitPre(DocHtmlList *);
- void visitPost(DocHtmlList *) ;
- void visitPre(DocHtmlListItem *);
- void visitPost(DocHtmlListItem *);
- void visitPre(DocHtmlDescList *);
- void visitPost(DocHtmlDescList *);
- void visitPre(DocHtmlDescTitle *);
- void visitPost(DocHtmlDescTitle *);
- void visitPre(DocHtmlDescData *);
- void visitPost(DocHtmlDescData *);
- void visitPre(DocHtmlTable *);
- void visitPost(DocHtmlTable *);
- void visitPre(DocHtmlRow *);
- void visitPost(DocHtmlRow *) ;
- void visitPre(DocHtmlCell *);
- void visitPost(DocHtmlCell *);
- void visitPre(DocHtmlCaption *);
- void visitPost(DocHtmlCaption *);
- void visitPre(DocInternal *);
- void visitPost(DocInternal *);
- void visitPre(DocHRef *);
- void visitPost(DocHRef *);
- void visitPre(DocHtmlHeader *);
- void visitPost(DocHtmlHeader *);
- void visitPre(DocImage *);
- void visitPost(DocImage *);
- void visitPre(DocDotFile *);
- void visitPost(DocDotFile *);
- void visitPre(DocMscFile *);
- void visitPost(DocMscFile *);
- void visitPre(DocLink *);
- void visitPost(DocLink *);
- void visitPre(DocRef *);
- void visitPost(DocRef *);
- void visitPre(DocSecRefItem *);
- void visitPost(DocSecRefItem *);
- void visitPre(DocSecRefList *);
- void visitPost(DocSecRefList *);
- void visitPre(DocParamSect *);
- void visitPost(DocParamSect *);
- void visitPre(DocParamList *);
- void visitPost(DocParamList *);
- void visitPre(DocXRefItem *);
- void visitPost(DocXRefItem *);
- void visitPre(DocInternalRef *);
- void visitPost(DocInternalRef *);
- void visitPre(DocCopy *);
- void visitPost(DocCopy *);
- void visitPre(DocText *);
- void visitPost(DocText *);
- void visitPre(DocHtmlBlockQuote *);
- void visitPost(DocHtmlBlockQuote *);
-
- private:
-
- //--------------------------------------
- // helper functions
- //--------------------------------------
-
- void filter(const char *str);
- void filterQuotedCdataAttr(const char* str);
- void startLink(const QCString &ref,const QCString &file,
- const QCString &relPath,const QCString &anchor,
- const QCString &tooltip = "");
- void endLink();
- void writeDotFile(const QCString &fileName,const QCString &relPath,const QCString &context);
- void writeMscFile(const QCString &fileName,const QCString &relPath,const QCString &context);
-
- void pushEnabled();
- void popEnabled();
-
- void forceEndParagraph(DocNode *n);
- void forceStartParagraph(DocNode *n);
-
- //--------------------------------------
- // state variables
- //--------------------------------------
-
- FTextStream &m_t;
- CodeOutputInterface &m_ci;
- bool m_insidePre;
- bool m_hide;
- QStack<bool> m_enabled;
- QCString m_langExt;
-};
-
-#endif
diff --git a/trunk/src/htmlgen.cpp b/trunk/src/htmlgen.cpp
deleted file mode 100644
index eac4a20..0000000
--- a/trunk/src/htmlgen.cpp
+++ /dev/null
@@ -1,3021 +0,0 @@
-/******************************************************************************
- *
- *
- *
- * Copyright (C) 1997-2012 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.
- *
- */
-
-#include <stdlib.h>
-
-#include "qtbc.h"
-#include <qdir.h>
-#include <qregexp.h>
-#include "message.h"
-#include "htmlgen.h"
-#include "config.h"
-#include "util.h"
-#include "doxygen.h"
-#include "logos.h"
-#include "diagram.h"
-#include "version.h"
-#include "dot.h"
-#include "language.h"
-#include "htmlhelp.h"
-#include "docparser.h"
-#include "htmldocvisitor.h"
-#include "searchindex.h"
-#include "pagedef.h"
-#include "debug.h"
-#include "dirdef.h"
-#include "vhdldocgen.h"
-#include "layout.h"
-#include "image.h"
-
-
-//#define DBG_HTML(x) x;
-#define DBG_HTML(x)
-
-static const char defaultHtmlHeader[] =
-#include "header_html.h"
-;
-
-static const char defaultHtmlFooter[] =
-#include "footer_html.h"
-;
-
-static const char defaultStyleSheet[] =
-#include "doxygen_css.h"
-;
-
-static const char search_functions_script[]=
-#include "search_functions_php.h"
-;
-
-static const char search_opensearch_script[]=
-#include "search_opensearch_php.h"
-;
-
-static const char search_styleSheet[] =
-#include "search_css.h"
-;
-
-static const char search_jquery_script1[]=
-#include "jquery_js.h"
-;
-
-static const char search_jquery_script2[]=
-#include "sizzle_js.h"
-;
-
-static const char search_jquery_script3[]=
-#include "jquery_ui_js.h"
-;
-
-static const char search_jquery_script4[]=
-#include "jquery_fx_js.h"
-;
-
-static const char svgpan_script[]=
-#include "svgpan_js.h"
-;
-
-
-static QCString g_header;
-static QCString g_footer;
-
-//------------------------- Pictures for the Tabs ------------------------
-
-// active
-static unsigned char tab_a_png[36] =
-{
- 31, 42, 59, 69, 73, 74, 75, 77, 77,
- 77, 79, 80, 80, 82, 81, 83, 84, 86,
- 87, 88, 89, 90, 91, 91, 93, 94, 94,
- 96, 96, 97, 98, 98, 99, 99, 99, 100
-};
-
-// normal background
-static unsigned char tab_b_png[36] =
-{
- 240, 239, 238, 237, 235, 234, 234, 232, 231,
- 229, 228, 227, 224, 224, 221, 219, 218, 217,
- 214, 212, 210, 209, 206, 203, 202, 200, 198,
- 196, 195, 193, 192, 190, 189, 188, 188, 188
-};
-
-// shadowed header
-static unsigned char header_png[12] =
-{
- 255, 240, 241, 242, 243, 244,
- 245, 246, 247, 248, 249, 250
-};
-
-// function header
-static unsigned char func_header_png[56] =
-{
- 248, 247, 246, 245, 244, 243, 242, 241,
- 240, 239, 238, 237, 236, 235, 234, 233,
- 232, 231, 230, 229, 228, 223, 223, 223,
- 223, 223, 223, 223, 223, 223, 223, 223,
- 224, 224, 224, 224, 225, 225, 225, 225,
- 225, 226, 226, 226, 227, 227, 227, 227,
- 228, 228, 228, 229, 229, 229, 229, 229
-};
-
-// hovering
-static unsigned char tab_h_png[36] =
-{
- 199, 198, 196, 196, 195, 194, 193, 192, 189,
- 188, 187, 184, 184, 181, 180, 178, 176, 173,
- 171, 169, 166, 164, 163, 161, 159, 156, 155,
- 153, 152, 149, 148, 147, 145, 145, 150, 161
-};
-
-// separator
-static unsigned char tab_s_png[36] =
-{
- 187, 186, 185, 183, 182, 181, 180, 178, 176,
- 174, 173, 171, 169, 167, 164, 163, 161, 158,
- 156, 154, 152, 150, 148, 145, 143, 141, 140,
- 138, 136, 134, 131, 131, 128, 126, 125, 124
-};
-
-
-static unsigned char bc_s_png[240] =
-{
- 150,187,187,148,148,148,148,148,
- 147,175,186,147,147,147,147,147,
- 146,153,185,185,146,146,146,146,
- 144,144,177,183,144,144,144,144,
- 144,144,159,182,144,144,144,144,
- 143,143,144,179,181,143,143,143,
- 142,142,142,165,180,142,142,142,
- 141,141,141,144,178,178,141,141,
- 139,139,139,139,167,176,139,139,
- 137,137,137,137,146,174,137,137,
- 137,137,137,137,137,169,173,137,
- 135,135,135,135,135,150,171,135,
- 133,133,133,133,133,135,167,169,
- 132,132,132,132,132,132,154,167,
- 129,129,129,129,129,129,140,164,
- 129,129,129,129,129,129,154,163,
- 127,127,127,127,127,128,161,161,
- 125,125,125,125,125,141,158,125,
- 123,123,123,123,123,152,156,123,
- 121,121,121,121,129,154,121,121,
- 120,120,120,120,143,152,120,120,
- 118,118,118,120,150,150,118,118,
- 117,117,117,132,148,117,117,117,
- 114,114,114,142,145,114,114,114,
- 113,113,120,143,113,113,113,113,
- 111,111,133,141,111,111,111,111,
- 110,112,140,140,110,110,110,110,
- 109,124,138,109,109,109,109,109,
- 107,133,136,107,107,107,107,107,
- 111,134,106,106,106,106,106,106
-};
-
-static unsigned char bc_s_a_png[240] =
-{
- 241,241, 21, 0, 0, 0, 0, 0,
- 162,205,117, 0, 0, 0, 0, 0,
- 54,231,225, 3, 0, 0, 0, 0,
- 0,198,215, 78, 0, 0, 0, 0,
- 0, 93,211,186, 0, 0, 0, 0,
- 0, 6,232,235, 42, 0, 0, 0,
- 0, 0,132,203,147, 0, 0, 0,
- 0, 0, 27,242,241, 15, 0, 0,
- 0, 0, 0,168,205,108, 0, 0,
- 0, 0, 0, 63,228,219, 0, 0,
- 0, 0, 0, 0,207,221, 72, 0,
- 0, 0, 0, 0,102,208,177, 0,
- 0, 0, 0, 0, 9,238,240, 36,
- 0, 0, 0, 0, 0,138,201,138,
- 0, 0, 0, 0, 0, 77,187,158,
- 0, 0, 0, 0, 0,159,204,120,
- 0, 0, 0, 0, 15,241,241, 21,
- 0, 0, 0, 0,111,208,171, 0,
- 0, 0, 0, 0,210,222, 66, 0,
- 0, 0, 0, 60,227,219, 0, 0,
- 0, 0, 0,162,204,114, 0, 0,
- 0, 0, 18,238,238, 21, 0, 0,
- 0, 0,114,205,165, 0, 0, 0,
- 0, 0,216,225, 60, 0, 0, 0,
- 0, 66,226,216, 0, 0, 0, 0,
- 0,165,204,111, 0, 0, 0, 0,
- 21,241,241, 18, 0, 0, 0, 0,
- 117,203,159, 0, 0, 0, 0, 0,
- 219,227, 57, 0, 0, 0, 0, 0,
- 211,201, 0, 0, 0, 0, 0, 0
-};
-
-static unsigned char doxygen_png[3224] =
-{
- 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
- 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
- 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,255,255,255,255,255,255,255,255,
- 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 91, 91, 91, 91, 32, 32,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
- 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,255,255,255,255, 32, 32,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
- 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,253,253,253,253, 32, 32,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,255,255,255,255,255,255,255,255,
- 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,251,251,251,251, 32, 32,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,255,255,255,255,255,255,255,255,
- 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,249,249,249,249, 32, 32,249,249,249,249, 32, 32, 32, 32, 32, 32,249,249,249,249, 32, 32, 32, 32, 32, 32,249,249,249,249, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,249,249,249, 32, 32, 32, 32, 32,249,249,249,249, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,249,249,249,249,249,249, 32, 32, 32, 32, 32, 32, 32,249,249,249,249,249, 32, 32, 32, 32, 32,249, 32, 32, 32, 32, 32,255,255,255,
- 32, 32, 32, 32, 46,132,190,190,147, 61,247,247,247,247, 32, 32,247,247, 32, 32,118,161,190,190,161,118, 32, 32,247, 32, 46, 89, 89, 89, 89, 46, 32,247,247, 32, 89, 89, 89, 89, 61, 89, 89, 89, 89, 46, 32,247, 32, 46, 89, 89, 89, 89, 32,247, 32, 32,118,175,190,161, 89, 61, 89, 89, 89, 61, 32,247,247,247, 32, 32,104,147,190,190,190,132, 89, 32, 32,247,247, 32, 46, 89, 89, 89, 75, 32, 89,161,190,161, 75, 32,255,255,
- 32, 32, 32, 74,230,244,244,244,244,244,244,244,244,244, 32, 32,244, 32, 74,216,244,244,244,244,244,244,216, 74, 32,244, 32,187,244,244,244,159, 32,244, 32,117,244,244,244,230, 46,173,244,244,244,131, 32,244, 32,131,244,244,244,173, 32, 32, 46,173,244,244,244,244,244,230,244,244,244,131, 32,244,244, 32, 74,202,244,244,244,244,244,244,244,173, 46, 32,244, 32, 89,244,244,244,187,145,244,244,244,244,244, 89, 32,255,
- 32, 32, 46,213,241,241,241,241,241,241,241,241,241,241, 32, 32, 32, 60,227,241,241,241,241,241,241,241,241,227, 60, 32, 32, 46,227,241,241,241,102, 32, 60,227,241,241,241, 88, 32,116,241,241,241,199, 32,241, 32,185,241,241,241,116, 32, 32,143,241,241,241,241,241,241,241,241,241,241,130, 32,241, 32, 74,227,241,241,241,199,185,241,241,241,241,171, 32,241, 32, 88,241,241,241,241,241,241,241,241,241,241,199, 32,255,
- 32, 32,128,237,237,237,223,128, 87,128,237,237,237,237, 32, 32, 32,182,237,237,237,196,100,100,196,237,237,237,182, 32,237, 32,100,237,237,237,223, 59,196,237,237,237,141, 32, 32, 46,237,237,237,237, 59, 32, 46,237,237,237,237, 46, 32, 59,237,237,237,237,169, 87, 87,182,237,237,237,128, 32,237, 32,196,237,237,237, 87, 32, 32, 73,223,237,237,237, 73, 32, 32, 87,237,237,237,237,223,182,223,237,237,237,237, 46, 32,
- 32, 32,207,234,234,234,113, 32, 32, 32,234,234,234,234, 32, 32, 59,234,234,234,221, 45, 32, 32, 45,221,234,234,234, 59, 32,234, 32,140,234,234,234,221,234,234,234,194, 32, 32,234, 32,167,234,234,234,126, 32, 99,234,234,234,167, 32, 32,126,234,234,234,180, 32, 32, 32,126,234,234,234,126, 32, 32, 99,234,234,234,167, 32, 32, 32, 32,153,234,234,234,126, 32, 32, 86,234,234,234,207, 45, 32, 45,234,234,234,234, 86, 32,
- 32, 45,231,231,231,218, 32, 32, 32, 32,231,231,231,231, 32, 32, 98,231,231,231,165, 32,231,231, 32,165,231,231,231, 98, 32,231, 32, 45,191,231,231,231,231,231,218, 72, 32,231,231, 32, 98,231,231,231,165, 32,151,231,231,231,112, 32, 32,165,231,231,231,112, 32,231, 32,125,231,231,231,125, 32, 32,138,231,231,231,178,125,125,125,125,178,231,231,231,178, 32, 32, 85,231,231,231,178, 32,255, 32,191,231,231,231, 85, 32,
- 32, 84,227,227,227,175, 32, 32, 32, 32,227,227,227,227, 32, 32,123,227,227,227,123, 32,227,227, 32,123,227,227,227,123, 32,227,227, 32, 71,227,227,227,227,227,123, 32,227,227,227,227, 32,214,227,227,227, 45,201,227,227,227, 45, 32, 32,175,227,227,227, 84, 32,227, 32,123,227,227,227,123, 32, 32,175,227,227,227,227,227,227,227,227,227,227,227,227,175, 32, 32, 84,227,227,227,175, 32,255, 32,175,227,227,227, 84, 32,
- 32, 83,223,223,223,172, 32, 32, 32, 32,223,223,223,223, 32, 32,121,223,223,223,121, 32,223,223, 32,121,223,223,223,121, 32,223,223,223, 32,172,223,223,223,210, 45, 32,223,223,223,223, 32,147,223,223,223,134,223,223,223,147, 32,223, 32,172,223,223,223, 83, 32,223, 32,121,223,223,223,121, 32, 32,172,223,223,223,223,223,223,223,223,223,223,223,223,172, 32, 32, 83,223,223,223,172, 32,255, 32,172,223,223,223, 83, 32,
- 32, 82,220,220,220,170, 32, 32, 32, 32,220,220,220,220, 32, 32,120,220,220,220,120, 32,220,220, 32,120,220,220,220,120, 32,220,220, 32, 95,220,220,220,220,220,132, 32,220,220,220,220, 32, 95,220,220,220,207,220,220,220, 95, 32,220, 32,170,220,220,220,107, 32,220, 32,120,220,220,220,120, 32, 32,170,220,220,220,132, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 82,220,220,220,170, 32,255, 32,170,220,220,220, 82, 32,
- 32, 57,216,216,216,216, 32, 32, 32, 32,216,216,216,216, 32, 32, 81,216,216,216,167, 32,216,216, 32,155,216,216,216, 81, 32,216, 32, 57,204,216,216,216,216,216,216, 93, 32,216,216,216,216, 32,204,216,216,216,216,216,204, 32,216,216, 32,118,216,216,216,167, 32, 32, 32,130,216,216,216,118, 32, 32,118,216,216,216,191, 32, 32,216,216,216, 32, 32, 44, 57, 32, 32, 81,216,216,216,167, 32,255, 32,167,216,216,216, 81, 32,
- 32, 32,189,213,213,213,116, 32, 32, 80,213,213,213,213, 32, 32, 44,201,213,213,213, 68, 32, 32, 68,213,213,213,213, 44, 32, 32, 32,165,213,213,213,165,213,213,213,201, 44, 32,213,213,213, 32,129,213,213,213,213,213,141, 32,213,213, 32, 80,213,213,213,213,165,116,153,213,213,213,213,116, 32, 32, 56,213,213,213,213,153, 56, 32, 32, 32, 44,104,189,116, 32, 32, 80,213,213,213,165, 32,255, 32,165,213,213,213, 80, 32,
- 32, 32,139,210,210,210,210,174,174,210,210,210,210,210, 32, 32, 32,127,210,210,210,198,127,127,198,210,210,210,127, 32,210, 32,115,210,210,210,174, 44,139,210,210,210,163, 32, 32,210,210, 32, 68,210,210,210,210,210, 91, 32,210,210,210, 32,174,210,210,210,210,210,210,210,210,210,210,115, 32,210, 32,127,210,210,210,210,210,174,163,163,210,210,210,115, 32, 32, 79,210,210,210,163, 32,255, 32,163,210,210,210, 79, 32,
- 32, 32, 55,194,206,206,206,206,206,194,206,206,206,206, 32, 32, 32, 44,171,206,206,206,206,206,206,206,206,171, 44, 32, 32, 67,206,206,206,206, 67, 32, 44,183,206,206,206,113, 32,206,206,206, 32,183,206,206,206,194, 32,206,206,206,206, 32, 67,194,206,206,206,206,206,171,206,206,206,113, 32,206, 32, 32,136,206,206,206,206,206,206,206,206,206,206,113, 32, 32, 78,206,206,206,160, 32,255, 32,160,206,206,206, 78, 32,
- 32, 32, 32,100,192,203,203,203,157, 55,203,203,203,203, 32, 32,203, 32, 43,135,203,203,203,203,203,203,135, 43, 32, 32, 43,180,203,203,203,112, 32,203, 32, 66,203,203,203,203, 66, 32,203,203, 32,157,203,203,203,135, 32,203,203,203,203,203, 32, 43,112,157,157,123, 55,112,203,203,203,112, 32,203,203, 32, 32, 78,146,203,203,203,203,203,203,169,123, 55, 32, 32, 78,203,203,203,157, 32,255, 32,157,203,203,203, 78, 32,
- 32, 32, 32, 32, 54,110,110, 88, 32, 32, 32, 32, 32, 32, 32, 32,200,200, 32, 32, 54, 99,110,110, 99, 54, 32, 32,200,200, 32, 32, 32, 32, 32, 32, 32,200,200, 32, 32, 32, 32, 32, 32,200,200, 32, 54,200,200,200,200, 77, 32,200,200,200,200,200, 32, 32, 32, 32, 32, 32, 32,166,200,200,200, 88, 32,200,200,200,200, 32, 32, 32, 66, 77, 77, 77, 32, 32, 32, 32,200,200, 32, 32, 32, 32, 32, 32,255, 32, 32, 32, 32, 32, 32,255,
- 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,198,198,198,198, 32, 32, 32, 32, 32, 32,198,198,198,198,198,198,198,198,198,198,198,198,198,198,198,198,198,198,198,198,198, 32,109,198,198,198,176, 32,198,198,198,198,198, 32, 98,121, 76, 32, 32, 54,109,198,198,198,198, 43, 32,198,198,198,198,198,198,198, 32, 32, 32, 32,198,198,198,198,198,198,198,198,198,198,198,198,255,255,255,255,255,255,255,255,
- 32, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 33,159,191,191,191,117, 36, 41, 41, 41, 41, 41, 34,108,191,191,191,191,191,191,191,191,191,117, 36, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41,255,
- 32, 41, 97,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, 78, 38, 64,190,192,192,192, 66, 66, 41, 41, 85,128, 65, 34,107,190,192,192,192,192,192,192,192,139, 48, 39, 41, 41,105,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, 97, 41,255,
- 32, 41, 97,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, 96, 36, 95,147,148,148,139, 55, 41, 41, 85,121,128, 91, 38, 75,137,158,190,190,190,170,139, 97, 49, 37, 41, 41,105,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, 97, 41,255,
- 32, 41, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 41, 36, 45, 45, 45, 48, 38, 41, 41, 76, 76, 76, 76, 76, 37, 34, 42, 33, 33, 33, 39, 48, 59, 41, 41, 41, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 41,255,
- 32, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41,255,
- 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
- 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255
-};
-
-static unsigned char doxygen_a_png[3224] =
-{
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66, 66, 66, 66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,145,247,247,247,247,145, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,247,247,247,247,247,247, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,247,247,247,247,247,247, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,247,247,247,247,247,247, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 16,115,181,181,132,247,247,247,247,247,247, 0, 0, 0, 0, 0, 99,148,181,181,148, 99, 0, 0, 0, 0, 16, 66, 66, 66, 66, 16, 0, 0, 0, 0, 66, 66, 66, 66, 33, 66, 66, 66, 66, 16, 0, 0, 0, 16, 66, 66, 66, 66, 0, 0, 0, 0, 99,165,181,148, 66, 33, 66, 66, 66, 33, 0, 0, 0, 0, 0, 0, 82,132,181,181,181,115, 66, 0, 0, 0, 0, 0, 16, 66, 66, 66, 49, 0, 66,148,181,148, 49, 0, 0, 0,
- 0, 0, 0,129,247,247,247,247,247,247,247,247,247,247,247, 0, 0, 0,112,214,247,247,247,247,247,247,214,112, 0, 16,247,247,247,247,247,247, 46, 0, 0,145,247,247,247,247,247,247,247,247,247,247, 16, 0, 16,247,247,247,247,247, 66, 0, 63,165,247,247,247,247,247,247,247,247,247,247, 33, 0, 0, 0, 96,198,247,247,247,247,247,247,247,165, 63, 0, 0, 16,247,247,247,247,247,145,247,247,247,247,247,145, 0, 0,
- 0, 0,112,247,247,247,247,247,247,247,247,247,247,247,247, 0, 0,129,247,247,247,247,247,247,247,247,247,247,129, 0,181,247,247,247,247,247,148, 0,129,247,247,247,247,247,247,247,247,247,247,247,115, 0,115,247,247,247,247,247,165, 30,247,247,247,247,247,247,247,247,247,247,247,247,115, 0, 0,129,247,247,247,247,247,247,247,247,247,247,247, 63, 0, 66,247,247,247,247,247,247,247,247,247,247,247,247, 96, 0,
- 0, 16,247,247,247,247,247,247,247,247,247,247,247,247,247, 0, 79,247,247,247,247,247,247,247,247,247,247,247,247, 79, 79,247,247,247,247,247,247,129,247,247,247,247,247,247,129,247,247,247,247,247,198, 0,181,247,247,247,247,247, 99,145,247,247,247,247,247,247,247,247,247,247,247,247,115, 0, 96,247,247,247,247,247,247,247,247,247,247,247,247,165, 0, 66,247,247,247,247,247,247,247,247,247,247,247,247,198, 0,
- 0,115,247,247,247,247,247,247,247,247,247,247,247,247,247, 0,181,247,247,247,247,247,247,247,247,247,247,247,247,181, 0,129,247,247,247,247,247,247,247,247,247,247,247,145, 16,247,247,247,247,247,247, 33,247,247,247,247,247,247, 33,247,247,247,247,247,247,247,247,247,247,247,247,247,115, 0,198,247,247,247,247,247,198,181,247,247,247,247,247,247, 49, 66,247,247,247,247,247,247,247,247,247,247,247,247,247, 16,
- 0,214,247,247,247,247,247,129, 66,247,247,247,247,247,247, 33,247,247,247,247,247,247, 96, 96,247,247,247,247,247,247, 33, 0,145,247,247,247,247,247,247,247,247,247,198, 30, 0,165,247,247,247,247,247,115,247,247,247,247,247,165,115,247,247,247,247,247,181, 66,115,247,247,247,247,247,115, 82,247,247,247,247,247,165,115,115,148,247,247,247,247,247,115, 66,247,247,247,247,247,247,181,247,247,247,247,247,247, 66,
- 16,247,247,247,247,247,231, 0, 0,247,247,247,247,247,247, 82,247,247,247,247,247,165, 0, 0,165,247,247,247,247,247, 82, 0, 30,247,247,247,247,247,247,247,247,247, 96, 0, 0, 82,247,247,247,247,247,165,247,247,247,247,247, 99,165,247,247,247,247,247, 99, 0,115,247,247,247,247,247,115,132,247,247,247,247,247,247,247,247,247,247,247,247,247,247,181, 66,247,247,247,247,247,181, 0,198,247,247,247,247,247, 66,
- 66,247,247,247,247,247,181, 0, 0,247,247,247,247,247,247,115,247,247,247,247,247,115, 0, 0,115,247,247,247,247,247,115, 0, 0, 96,247,247,247,247,247,247,247,129, 0, 0, 0, 0,231,247,247,247,247,247,247,247,247,247,247, 16,181,247,247,247,247,247, 66, 0,115,247,247,247,247,247,115,181,247,247,247,247,247,247,247,247,247,247,247,247,247,247,181, 66,247,247,247,247,247,181, 0,181,247,247,247,247,247, 66,
- 66,247,247,247,247,247,181, 0, 0,247,247,247,247,247,247,115,247,247,247,247,247,115, 0, 0,115,247,247,247,247,247,115, 0, 0, 0,181,247,247,247,247,247,247, 30, 0, 0, 0, 0,148,247,247,247,247,247,247,247,247,247,148, 0,181,247,247,247,247,247, 66, 0,115,247,247,247,247,247,115,181,247,247,247,247,247,247,247,247,247,247,247,247,247,247,181, 66,247,247,247,247,247,181, 0,181,247,247,247,247,247, 66,
- 66,247,247,247,247,247,181, 0, 0,247,247,247,247,247,247,115,247,247,247,247,247,115, 0, 0,115,247,247,247,247,247,115, 0, 0,129,247,247,247,247,247,247,247,145, 0, 0, 0, 0, 82,247,247,247,247,247,247,247,247,247, 82, 0,181,247,247,247,247,247, 99, 0,115,247,247,247,247,247,115,181,247,247,247,247,247,247,247,247,247,247,247,247,247,181, 79, 66,247,247,247,247,247,181, 0,181,247,247,247,247,247, 66,
- 33,247,247,247,247,247,247, 14, 0,247,247,247,247,247,247, 66,247,247,247,247,247,181, 0, 0,165,247,247,247,247,247, 66, 0, 79,247,247,247,247,247,247,247,247,247,129, 0, 0, 0, 0,231,247,247,247,247,247,247,247,231, 0, 0,115,247,247,247,247,247,181,115,165,247,247,247,247,247,115,115,247,247,247,247,247,214, 63, 0, 0, 0, 16,112,247,247, 33, 66,247,247,247,247,247,181, 0,181,247,247,247,247,247, 66,
- 0,214,247,247,247,247,247,198,198,247,247,247,247,247,247, 16,247,247,247,247,247,247,132,132,247,247,247,247,247,247, 16, 14,181,247,247,247,247,247,247,247,247,247,247, 79, 0, 0, 0,132,247,247,247,247,247,247,247,148, 0, 0, 66,247,247,247,247,247,247,247,247,247,247,247,247,247,115, 33,247,247,247,247,247,247,247,198,181,181,247,247,247,247,115, 66,247,247,247,247,247,181, 0,181,247,247,247,247,247, 66,
- 0,148,247,247,247,247,247,247,247,247,247,247,247,247,247, 0,132,247,247,247,247,247,247,247,247,247,247,247,247,145, 0,145,247,247,247,247,247,247,247,247,247,247,247,181, 14, 0, 0, 49,247,247,247,247,247,247,247, 82, 0, 0, 0,198,247,247,247,247,247,247,247,247,247,247,247,247,115, 0,145,247,247,247,247,247,247,247,247,247,247,247,247,247,115, 66,247,247,247,247,247,181, 0,181,247,247,247,247,247, 66,
- 0, 46,247,247,247,247,247,247,247,247,247,247,247,247,247, 0, 30,247,247,247,247,247,247,247,247,247,247,247,247, 30,112,247,247,247,247,247,247, 96,247,247,247,247,247,247,145, 0, 0, 0,214,247,247,247,247,247,231, 0, 0, 0, 0, 96,247,247,247,247,247,247,247,247,247,247,247,247,115, 0, 30,148,247,247,247,247,247,247,247,247,247,247,247,247,115, 66,247,247,247,247,247,181, 0,181,247,247,247,247,247, 66,
- 0, 0,129,247,247,247,247,247,247,247,247,247,247,247,247, 0, 0, 96,247,247,247,247,247,247,247,247,247,247, 96, 16,247,247,247,247,247,247,145, 0,112,247,247,247,247,247,247, 49, 0, 0,181,247,247,247,247,247,148, 0, 0, 0, 0, 0,129,247,247,247,247,247,247,247,247,247,247,247,115, 0, 0, 46,148,247,247,247,247,247,247,247,247,247,247,247, 33, 66,247,247,247,247,247,181, 0,181,247,247,247,247,247, 66,
- 0, 0, 0,129,247,247,247,247,181,145,247,247,247,247,145, 0, 0, 0, 46,148,247,247,247,247,247,247,148, 46, 0, 0,112,214,247,247,247,145, 14, 0, 0,145,247,247,247,247,145, 0, 0, 33,247,247,247,247,247,247, 66, 0, 0, 0, 0, 0, 99,132,115,181,181,132,198,247,247,247,247,247, 82, 0, 0, 0, 0, 66,165,247,247,247,247,247,247,198,132, 33, 0, 0,145,247,247,247,181, 79, 0, 79,181,247,247,247,145, 0,
- 0, 0, 0, 0, 33,115,115, 82, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 33, 99,115,115, 99, 33, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,115,247,247,247,247,247,214, 0, 0, 0, 0, 0, 99,247,247,247,247,247,247,247,247,247,247,247,247, 16, 0, 0, 0, 0, 0, 0, 0, 49, 66, 66, 66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0,165,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,108,224,255,255,255,255,255,255,101,164,255,255,255,143,250,255,255,255,255,255,255,255,255,255,255,255, 98,170,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,165, 0,
- 0,165,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,136,251,255,255,255,255,255,255,101,130,255,255,255,153,250,255,255,255,255,255,255,255,255,255,255,121, 98,189,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,165, 0,
- 0,165,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,198,252,255,255,255,255,255,164,164,255,255,255,255,176,249,251,255,255,255,255,255,255,255,255,150, 86,192,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,165, 0,
- 0,165,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,164,198,255,255,255,255,201,133,164,255,255,255,255,255,145,203,255,255,255,255,255,255,255,117, 79,194,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,165, 0,
- 0, 66,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102, 73, 73,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102, 47, 70,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102, 66, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
-};
-
-unsigned char mag_sel_png[] = {
- 0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a, 0x00, 0x00, 0x00, 0x0d,
- 0x49, 0x48, 0x44, 0x52, 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, 0x13,
- 0x08, 0x06, 0x00, 0x00, 0x00, 0x90, 0x8c, 0x2d, 0xb5, 0x00, 0x00, 0x00,
- 0x09, 0x70, 0x48, 0x59, 0x73, 0x00, 0x00, 0x0b, 0x13, 0x00, 0x00, 0x0b,
- 0x13, 0x01, 0x00, 0x9a, 0x9c, 0x18, 0x00, 0x00, 0x00, 0x20, 0x63, 0x48,
- 0x52, 0x4d, 0x00, 0x00, 0x6d, 0x98, 0x00, 0x00, 0x73, 0x8e, 0x00, 0x00,
- 0xe0, 0x38, 0x00, 0x00, 0x82, 0xd5, 0x00, 0x00, 0x7a, 0x07, 0x00, 0x00,
- 0xca, 0xb4, 0x00, 0x00, 0x33, 0x44, 0x00, 0x00, 0x1c, 0x76, 0x84, 0x36,
- 0x2a, 0xbd, 0x00, 0x00, 0x01, 0xb9, 0x49, 0x44, 0x41, 0x54, 0x78, 0xda,
- 0xe4, 0x94, 0xbb, 0x8a, 0x22, 0x41, 0x14, 0x86, 0xbf, 0xda, 0x16, 0x3a,
- 0x10, 0xba, 0x03, 0x2f, 0x78, 0x03, 0x51, 0x11, 0x4c, 0xd4, 0x40, 0xd4,
- 0x37, 0x30, 0x31, 0x30, 0xe9, 0x07, 0xf0, 0x15, 0x14, 0x7c, 0x1e, 0x31,
- 0x37, 0x33, 0x11, 0x73, 0xe9, 0x56, 0x44, 0x84, 0x36, 0xe9, 0x40, 0x50,
- 0x54, 0x14, 0xc4, 0xc0, 0xa8, 0x6d, 0x50, 0x6a, 0x92, 0x1d, 0xd9, 0x9d,
- 0x99, 0x75, 0x0d, 0x26, 0x58, 0xd8, 0x3f, 0xaa, 0xe2, 0xfc, 0xf5, 0xd5,
- 0x39, 0x9c, 0x53, 0x25, 0xa4, 0x94, 0x7c, 0xa7, 0x7e, 0xf0, 0xcd, 0xfa,
- 0xf7, 0x81, 0xbe, 0xf7, 0xc5, 0xf9, 0x7c, 0x96, 0x93, 0xc9, 0x84, 0xe5,
- 0x72, 0xc9, 0x66, 0xb3, 0x21, 0x99, 0x4c, 0x92, 0xcf, 0xe7, 0xa9, 0x54,
- 0x2a, 0x04, 0x02, 0x01, 0xf1, 0x2a, 0x50, 0x48, 0x29, 0x39, 0x9d, 0x4e,
- 0x72, 0x30, 0x18, 0x60, 0x59, 0xd6, 0x27, 0x43, 0xb5, 0x5a, 0xa5, 0xd1,
- 0x68, 0x10, 0x0c, 0x06, 0xc5, 0xcb, 0x19, 0x4e, 0xa7, 0x53, 0x2c, 0xcb,
- 0x22, 0x95, 0x4a, 0x51, 0x2a, 0x95, 0xc8, 0x64, 0x32, 0xac, 0x56, 0x2b,
- 0x66, 0xb3, 0x19, 0x93, 0xc9, 0x84, 0x48, 0x24, 0x42, 0xbd, 0x5e, 0x7f,
- 0xbd, 0x64, 0xdb, 0xb6, 0x01, 0x28, 0x97, 0xcb, 0x54, 0x2a, 0x15, 0x34,
- 0x4d, 0x13, 0xa1, 0x50, 0x48, 0x2a, 0x8a, 0xc2, 0x7a, 0xbd, 0xc6, 0xb6,
- 0x6d, 0xea, 0xf5, 0x3a, 0xa3, 0xd1, 0x48, 0xf6, 0xfb, 0xfd, 0xc7, 0x61,
- 0xc3, 0x30, 0xa8, 0xd5, 0x6a, 0xe2, 0x53, 0x53, 0xb6, 0xdb, 0x2d, 0x00,
- 0xc5, 0x62, 0x11, 0x4d, 0xd3, 0x04, 0x80, 0xa6, 0x69, 0xa2, 0x50, 0x28,
- 0xf0, 0x6b, 0x1c, 0x10, 0x86, 0x61, 0x3c, 0x60, 0x80, 0xf8, 0xb2, 0xcb,
- 0x89, 0x44, 0x02, 0x00, 0xc7, 0x71, 0x00, 0xde, 0x27, 0x5d, 0xfe, 0xdc,
- 0x3f, 0xe2, 0x1f, 0xa0, 0xe2, 0x8f, 0x63, 0x93, 0xcb, 0xe5, 0x00, 0x18,
- 0x8f, 0xc7, 0x98, 0xa6, 0x89, 0xeb, 0xba, 0xd2, 0x34, 0x4d, 0xc6, 0xe3,
- 0x31, 0x00, 0xe9, 0x74, 0x1a, 0x80, 0x5a, 0xad, 0xf6, 0x80, 0x3e, 0xed,
- 0xf2, 0x7a, 0xbd, 0x96, 0xc3, 0xe1, 0x90, 0xf9, 0x7c, 0xfe, 0xa5, 0x29,
- 0x1c, 0x0e, 0xd3, 0xe9, 0x74, 0xd0, 0x75, 0x5d, 0x00, 0x8c, 0x46, 0xa3,
- 0x8f, 0x17, 0xfc, 0x0e, 0xf4, 0x3c, 0x4f, 0xee, 0x76, 0x3b, 0x16, 0x8b,
- 0x05, 0x8e, 0xe3, 0xb0, 0xdf, 0xef, 0x89, 0xc7, 0xe3, 0xa4, 0xd3, 0x69,
- 0x6c, 0xdb, 0xe6, 0x74, 0x3a, 0x11, 0x8d, 0x46, 0x69, 0xb7, 0xdb, 0x0f,
- 0xe8, 0xd3, 0x0c, 0x01, 0x3c, 0xcf, 0x93, 0xae, 0xeb, 0xe2, 0x79, 0x1e,
- 0xb7, 0xdb, 0x0d, 0x9f, 0xcf, 0x87, 0xa2, 0x28, 0x5c, 0x2e, 0x17, 0x7a,
- 0xbd, 0x1e, 0xc7, 0xe3, 0x91, 0x58, 0x2c, 0x46, 0xab, 0xd5, 0x7a, 0x0a,
- 0x7d, 0xbc, 0x14, 0x55, 0x55, 0x85, 0xaa, 0xaa, 0x9f, 0x0c, 0x7e, 0xbf,
- 0x5f, 0x36, 0x9b, 0x4d, 0xba, 0xdd, 0x2e, 0xd7, 0xeb, 0x95, 0xeb, 0xf5,
- 0x8a, 0xae, 0xeb, 0x7f, 0xcf, 0xf0, 0x99, 0x5c, 0xd7, 0x95, 0x87, 0xc3,
- 0x81, 0xfb, 0xfd, 0x4e, 0x36, 0x9b, 0x7d, 0xad, 0xe4, 0xff, 0xe7, 0xfb,
- 0x7a, 0x1b, 0x00, 0x59, 0xa8, 0xba, 0x68, 0xca, 0x4f, 0xc5, 0xa7, 0x00,
- 0x00, 0x00, 0x00, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82
-};
-unsigned int mag_sel_png_len = 563;
-
-unsigned char mag_png[] = {
- 0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a, 0x00, 0x00, 0x00, 0x0d,
- 0x49, 0x48, 0x44, 0x52, 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, 0x13,
- 0x08, 0x06, 0x00, 0x00, 0x00, 0x90, 0x8c, 0x2d, 0xb5, 0x00, 0x00, 0x00,
- 0x09, 0x70, 0x48, 0x59, 0x73, 0x00, 0x00, 0x0b, 0x13, 0x00, 0x00, 0x0b,
- 0x13, 0x01, 0x00, 0x9a, 0x9c, 0x18, 0x00, 0x00, 0x00, 0x20, 0x63, 0x48,
- 0x52, 0x4d, 0x00, 0x00, 0x6d, 0x98, 0x00, 0x00, 0x73, 0x8e, 0x00, 0x00,
- 0xe0, 0x38, 0x00, 0x00, 0x82, 0xd5, 0x00, 0x00, 0x7a, 0x07, 0x00, 0x00,
- 0xca, 0xb4, 0x00, 0x00, 0x33, 0x44, 0x00, 0x00, 0x1c, 0x76, 0x84, 0x36,
- 0x2a, 0xbd, 0x00, 0x00, 0x01, 0x92, 0x49, 0x44, 0x41, 0x54, 0x78, 0xda,
- 0xe4, 0x94, 0xbb, 0xaa, 0xea, 0x50, 0x10, 0x86, 0xbf, 0xec, 0x08, 0x29,
- 0x36, 0x24, 0x85, 0x17, 0xbc, 0x81, 0x18, 0x11, 0x6c, 0xd4, 0x42, 0x8c,
- 0x0f, 0x61, 0xe1, 0x2b, 0xf8, 0x0a, 0x0a, 0x3e, 0x8f, 0xf8, 0x0c, 0x36,
- 0x62, 0x1f, 0x92, 0x88, 0x88, 0x10, 0x9b, 0x14, 0x42, 0x44, 0x45, 0x41,
- 0x2c, 0xac, 0x92, 0x80, 0xb2, 0x4e, 0x73, 0x94, 0x03, 0xfb, 0xb0, 0x4d,
- 0xb1, 0x8b, 0x03, 0xe7, 0xaf, 0xd6, 0x62, 0xfe, 0xf5, 0x31, 0xc3, 0xcc,
- 0x1a, 0x49, 0x08, 0xc1, 0x4f, 0xea, 0x83, 0x1f, 0xd6, 0xbf, 0x0f, 0x4c,
- 0x3c, 0x0f, 0xd7, 0xeb, 0x55, 0x38, 0x8e, 0xc3, 0x66, 0xb3, 0x61, 0xb7,
- 0xdb, 0x51, 0x2a, 0x95, 0xa8, 0xd7, 0xeb, 0x18, 0x86, 0x41, 0x32, 0x99,
- 0x94, 0xe2, 0x02, 0x25, 0x21, 0x04, 0x97, 0xcb, 0x45, 0x4c, 0xa7, 0x53,
- 0x6c, 0xdb, 0xfe, 0x62, 0xe8, 0x74, 0x3a, 0xf4, 0x7a, 0x3d, 0x52, 0xa9,
- 0x94, 0x14, 0x3b, 0xc3, 0xc5, 0x62, 0x81, 0x6d, 0xdb, 0x94, 0xcb, 0x65,
- 0x5a, 0xad, 0x16, 0x95, 0x4a, 0x85, 0xed, 0x76, 0xcb, 0x72, 0xb9, 0xc4,
- 0x71, 0x1c, 0xb2, 0xd9, 0x2c, 0xdd, 0x6e, 0x37, 0x7e, 0xc9, 0xae, 0xeb,
- 0x02, 0xd0, 0x6e, 0xb7, 0x31, 0x0c, 0x03, 0x55, 0x55, 0xa5, 0x74, 0x3a,
- 0x2d, 0x64, 0x59, 0xc6, 0xf7, 0x7d, 0x5c, 0xd7, 0x8d, 0x0d, 0xfc, 0x00,
- 0xd8, 0xef, 0xf7, 0x00, 0x34, 0x9b, 0x4d, 0x54, 0x55, 0x95, 0x00, 0x54,
- 0x55, 0x95, 0x1a, 0x8d, 0x06, 0x7f, 0xc6, 0x63, 0x03, 0x8b, 0xc5, 0x22,
- 0x00, 0x9e, 0xe7, 0x01, 0x3c, 0x27, 0x5d, 0xfc, 0xbe, 0xbf, 0xe2, 0xb1,
- 0x81, 0xb5, 0x5a, 0x0d, 0x00, 0xd3, 0x34, 0xb1, 0x2c, 0x8b, 0x20, 0x08,
- 0x84, 0x65, 0x59, 0x98, 0xa6, 0x09, 0x80, 0xae, 0xeb, 0xaf, 0x07, 0xf3,
- 0xf9, 0xfc, 0x7d, 0x97, 0x7d, 0xdf, 0x17, 0xb3, 0xd9, 0x8c, 0xd5, 0x6a,
- 0xf5, 0x57, 0x53, 0x26, 0x93, 0x61, 0x34, 0x1a, 0xa1, 0x69, 0x9a, 0x14,
- 0x6b, 0x6c, 0xa2, 0x28, 0x12, 0x87, 0xc3, 0x81, 0xf5, 0x7a, 0x8d, 0xe7,
- 0x79, 0x1c, 0x8f, 0x47, 0x0a, 0x85, 0x02, 0xba, 0xae, 0xe3, 0xba, 0x2e,
- 0x97, 0xcb, 0x85, 0x5c, 0x2e, 0xc7, 0x70, 0x38, 0x7c, 0x0b, 0x95, 0x9e,
- 0xcb, 0x21, 0x8a, 0x22, 0x11, 0x04, 0x01, 0x51, 0x14, 0x71, 0xbf, 0xdf,
- 0x49, 0x24, 0x12, 0xc8, 0xb2, 0xcc, 0xed, 0x76, 0x63, 0x32, 0x99, 0x70,
- 0x3e, 0x9f, 0xc9, 0xe7, 0xf3, 0x0c, 0x06, 0x83, 0x6f, 0xa1, 0xaf, 0x9f,
- 0xa2, 0x28, 0x8a, 0xa4, 0x28, 0xca, 0x17, 0xc3, 0xe7, 0xe7, 0xa7, 0xe8,
- 0xf7, 0xfb, 0x8c, 0xc7, 0x63, 0xc2, 0x30, 0x24, 0x0c, 0x43, 0x34, 0x4d,
- 0x7b, 0x9f, 0xe1, 0x77, 0x0a, 0x82, 0x40, 0x9c, 0x4e, 0x27, 0x1e, 0x8f,
- 0x07, 0xd5, 0x6a, 0x35, 0x5e, 0xc9, 0xff, 0xcf, 0xfa, 0xfa, 0x35, 0x00,
- 0x70, 0xf3, 0xae, 0xcb, 0x89, 0xcd, 0xd2, 0x46, 0x00, 0x00, 0x00, 0x00,
- 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82
-};
-unsigned int mag_png_len = 524;
-
-unsigned char search_l_png[] = {
- 0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a, 0x00, 0x00, 0x00, 0x0d,
- 0x49, 0x48, 0x44, 0x52, 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, 0x13,
- 0x08, 0x06, 0x00, 0x00, 0x00, 0x90, 0x8c, 0x2d, 0xb5, 0x00, 0x00, 0x00,
- 0x09, 0x70, 0x48, 0x59, 0x73, 0x00, 0x00, 0x0b, 0x13, 0x00, 0x00, 0x0b,
- 0x13, 0x01, 0x00, 0x9a, 0x9c, 0x18, 0x00, 0x00, 0x00, 0x20, 0x63, 0x48,
- 0x52, 0x4d, 0x00, 0x00, 0x6d, 0x98, 0x00, 0x00, 0x73, 0x8e, 0x00, 0x00,
- 0xe0, 0x38, 0x00, 0x00, 0x82, 0xd5, 0x00, 0x00, 0x7a, 0x07, 0x00, 0x00,
- 0xca, 0xb4, 0x00, 0x00, 0x33, 0x44, 0x00, 0x00, 0x1c, 0x76, 0x84, 0x36,
- 0x2a, 0xbd, 0x00, 0x00, 0x01, 0xe2, 0x49, 0x44, 0x41, 0x54, 0x78, 0xda,
- 0xac, 0x54, 0x3d, 0xab, 0xda, 0x50, 0x18, 0x7e, 0xce, 0xc9, 0x39, 0x31,
- 0x4d, 0xfc, 0x40, 0x30, 0x46, 0x14, 0xec, 0x50, 0x44, 0x17, 0x2f, 0x9d,
- 0xba, 0x15, 0xda, 0xd1, 0xa1, 0x2e, 0xdd, 0x3b, 0x14, 0x4a, 0xa1, 0x7f,
- 0xa6, 0x74, 0xbd, 0x43, 0xff, 0x84, 0xfd, 0x05, 0x82, 0xda, 0xa5, 0x83,
- 0x1d, 0xdc, 0x8a, 0x88, 0xa0, 0x44, 0x83, 0xc6, 0x28, 0xad, 0x1f, 0x49,
- 0xde, 0x2e, 0x8d, 0x78, 0x6f, 0xaf, 0x34, 0x68, 0x9f, 0xed, 0xbc, 0x70,
- 0x1e, 0x9e, 0x8f, 0xf7, 0x1c, 0x46, 0x44, 0x38, 0x45, 0xaf, 0xd7, 0x63,
- 0xb6, 0x6d, 0xe7, 0x6d, 0xdb, 0x6e, 0xba, 0xae, 0xfb, 0x6e, 0xb3, 0xd9,
- 0xdc, 0x6c, 0xb7, 0xdb, 0x04, 0xe7, 0x1c, 0x8c, 0x31, 0xfc, 0x0b, 0x2c,
- 0x22, 0xec, 0x76, 0xbb, 0xcc, 0xf3, 0xbc, 0xcc, 0x68, 0x34, 0x7a, 0xed,
- 0xba, 0xee, 0x87, 0x6c, 0x36, 0x7b, 0x93, 0xcb, 0xe5, 0x44, 0x3a, 0x9d,
- 0x86, 0xa6, 0x69, 0x50, 0x14, 0x25, 0x3e, 0x61, 0xa7, 0xd3, 0x61, 0xf3,
- 0xf9, 0xfc, 0xc9, 0x78, 0x3c, 0xbe, 0xd5, 0x75, 0xfd, 0x79, 0xa5, 0x52,
- 0x11, 0xa6, 0x69, 0x22, 0x95, 0x4a, 0x41, 0xd3, 0x34, 0x08, 0x21, 0xc0,
- 0x18, 0x8b, 0x45, 0x28, 0x00, 0x60, 0xb5, 0x5a, 0xa5, 0x27, 0x93, 0xc9,
- 0xa7, 0x62, 0xb1, 0xf8, 0xb2, 0x5a, 0xad, 0x22, 0x9f, 0xcf, 0xc3, 0x30,
- 0x0c, 0x48, 0x29, 0xc1, 0x39, 0x47, 0x5c, 0xbb, 0x00, 0x20, 0xda, 0xed,
- 0x36, 0x9f, 0x4e, 0xa7, 0xaf, 0x4c, 0xd3, 0x7c, 0x51, 0xaf, 0xd7, 0x61,
- 0x59, 0x16, 0x74, 0x5d, 0x87, 0x94, 0x12, 0x97, 0x40, 0x2c, 0x16, 0x0b,
- 0x93, 0x88, 0xde, 0xd6, 0x6a, 0x35, 0xdd, 0xb2, 0x2c, 0x18, 0x86, 0x01,
- 0x21, 0x04, 0x2e, 0x05, 0xf7, 0x3c, 0xaf, 0x59, 0x2e, 0x97, 0x9f, 0x45,
- 0xca, 0x38, 0xe7, 0xb8, 0x06, 0x3c, 0x08, 0x82, 0x46, 0xa1, 0x50, 0x78,
- 0x74, 0xad, 0xb2, 0x23, 0xa1, 0x94, 0xf2, 0x69, 0x26, 0x93, 0xe1, 0x51,
- 0x66, 0xf7, 0xf7, 0xd2, 0xf7, 0xfd, 0x07, 0x2f, 0x9e, 0x9b, 0x73, 0x55,
- 0x55, 0xb3, 0x91, 0x55, 0xc6, 0x18, 0xc2, 0x30, 0xbc, 0x1b, 0xf2, 0x19,
- 0xd5, 0xe7, 0xe6, 0x5c, 0x4a, 0x39, 0x06, 0x70, 0x5c, 0x8b, 0xb8, 0xeb,
- 0x71, 0xd6, 0x32, 0x11, 0x75, 0xf6, 0xfb, 0xfd, 0xd1, 0xea, 0xd5, 0xa5,
- 0x10, 0xd1, 0xb7, 0xf5, 0x7a, 0x1d, 0x84, 0x61, 0x08, 0x22, 0xba, 0x9e,
- 0x50, 0x51, 0x94, 0xaf, 0x8e, 0xe3, 0xfc, 0xdc, 0xed, 0x76, 0xf8, 0x1f,
- 0xe0, 0x89, 0x44, 0xe2, 0xc7, 0x72, 0xb9, 0xfc, 0xee, 0x38, 0x0e, 0x7c,
- 0xdf, 0x3f, 0x5a, 0xbf, 0xdf, 0x76, 0x6c, 0xc2, 0x46, 0xa3, 0xf1, 0x2b,
- 0x08, 0x82, 0xdb, 0xe1, 0x70, 0xe8, 0x2c, 0x16, 0x0b, 0x04, 0x41, 0x00,
- 0x22, 0xba, 0xb8, 0x1c, 0xfe, 0x67, 0x05, 0xbe, 0x78, 0x9e, 0xf7, 0x79,
- 0x30, 0x18, 0x8c, 0x67, 0xb3, 0x19, 0x45, 0x25, 0x9d, 0x53, 0x49, 0x44,
- 0x38, 0x1c, 0x0e, 0x38, 0x2d, 0xf3, 0xce, 0x6f, 0x03, 0x60, 0x29, 0x84,
- 0xf8, 0xe8, 0x79, 0x9e, 0xdb, 0xef, 0xf7, 0xdf, 0x97, 0x4a, 0xa5, 0xc7,
- 0xd1, 0x53, 0x54, 0x55, 0x15, 0x52, 0xca, 0xbf, 0x14, 0x0b, 0x21, 0x1e,
- 0x8c, 0x87, 0x9d, 0x1e, 0x5a, 0xad, 0x96, 0x00, 0x50, 0x27, 0xa2, 0x37,
- 0xaa, 0xaa, 0x36, 0x0d, 0xc3, 0x28, 0x26, 0x93, 0x49, 0xa1, 0x69, 0x9a,
- 0xc2, 0x39, 0x8f, 0x95, 0xc1, 0xef, 0x01, 0x00, 0x35, 0xe5, 0xd5, 0x5e,
- 0xd0, 0xed, 0x0c, 0xfd, 0x00, 0x00, 0x00, 0x00, 0x49, 0x45, 0x4e, 0x44,
- 0xae, 0x42, 0x60, 0x82
-};
-unsigned int search_l_png_len = 604;
-
-unsigned char search_m_png[] = {
- 0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a, 0x00, 0x00, 0x00, 0x0d,
- 0x49, 0x48, 0x44, 0x52, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x13,
- 0x08, 0x02, 0x00, 0x00, 0x00, 0x35, 0x5e, 0x4b, 0x4d, 0x00, 0x00, 0x00,
- 0x04, 0x67, 0x41, 0x4d, 0x41, 0x00, 0x00, 0xd6, 0xd8, 0xd4, 0x4f, 0x58,
- 0x32, 0x00, 0x00, 0x00, 0x19, 0x74, 0x45, 0x58, 0x74, 0x53, 0x6f, 0x66,
- 0x74, 0x77, 0x61, 0x72, 0x65, 0x00, 0x41, 0x64, 0x6f, 0x62, 0x65, 0x20,
- 0x49, 0x6d, 0x61, 0x67, 0x65, 0x52, 0x65, 0x61, 0x64, 0x79, 0x71, 0xc9,
- 0x65, 0x3c, 0x00, 0x00, 0x00, 0x30, 0x49, 0x44, 0x41, 0x54, 0x78, 0xda,
- 0x62, 0x2c, 0x2f, 0x2f, 0x67, 0x60, 0x60, 0x60, 0x3c, 0x7e, 0xfc, 0x38,
- 0x88, 0xfa, 0xf8, 0xf1, 0x23, 0x88, 0xfa, 0xff, 0xff, 0x3f, 0x90, 0x62,
- 0x62, 0x00, 0x03, 0x5a, 0x50, 0x2c, 0x10, 0x1b, 0x58, 0x6e, 0xdd, 0xba,
- 0x05, 0xa4, 0x00, 0x02, 0x0c, 0x00, 0xa5, 0x07, 0x0f, 0x3c, 0x7e, 0xe1,
- 0x45, 0xa7, 0x00, 0x00, 0x00, 0x00, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42,
- 0x60, 0x82
-};
-unsigned int search_m_png_len = 158;
-
-unsigned char search_r_png[] = {
- 0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a, 0x00, 0x00, 0x00, 0x0d,
- 0x49, 0x48, 0x44, 0x52, 0x00, 0x00, 0x00, 0x12, 0x00, 0x00, 0x00, 0x13,
- 0x08, 0x06, 0x00, 0x00, 0x00, 0x9d, 0x92, 0x5d, 0xf2, 0x00, 0x00, 0x00,
- 0x09, 0x70, 0x48, 0x59, 0x73, 0x00, 0x00, 0x0b, 0x13, 0x00, 0x00, 0x0b,
- 0x13, 0x01, 0x00, 0x9a, 0x9c, 0x18, 0x00, 0x00, 0x00, 0x20, 0x63, 0x48,
- 0x52, 0x4d, 0x00, 0x00, 0x6d, 0x98, 0x00, 0x00, 0x73, 0x8e, 0x00, 0x00,
- 0xe0, 0x38, 0x00, 0x00, 0x82, 0xd5, 0x00, 0x00, 0x7a, 0x07, 0x00, 0x00,
- 0xca, 0xb4, 0x00, 0x00, 0x33, 0x44, 0x00, 0x00, 0x1c, 0x76, 0x84, 0x36,
- 0x2a, 0xbd, 0x00, 0x00, 0x01, 0xea, 0x49, 0x44, 0x41, 0x54, 0x78, 0xda,
- 0xa4, 0xd4, 0xbf, 0xaa, 0x1a, 0x41, 0x14, 0x06, 0xf0, 0x6f, 0xf6, 0x9f,
- 0xb2, 0x0a, 0x6b, 0xa5, 0x56, 0x8b, 0xa4, 0x92, 0xd4, 0x69, 0x7c, 0x03,
- 0xb1, 0x59, 0x49, 0x11, 0x52, 0xdf, 0xbc, 0x43, 0xcc, 0x2b, 0xa4, 0x4c,
- 0x97, 0x67, 0x08, 0xa4, 0x11, 0x2c, 0x52, 0x5c, 0x42, 0x24, 0x60, 0x8a,
- 0x34, 0x29, 0x42, 0x50, 0x41, 0x21, 0xa0, 0x97, 0xd5, 0x55, 0xb3, 0xbb,
- 0xee, 0xb2, 0xce, 0xee, 0xcc, 0x49, 0x91, 0x28, 0xc2, 0x0d, 0xe6, 0xaa,
- 0xa7, 0x9d, 0xc3, 0x8f, 0x73, 0x98, 0xf9, 0x86, 0x75, 0x3a, 0x1d, 0xc2,
- 0x89, 0x12, 0x42, 0x24, 0xf9, 0x7c, 0x7e, 0x5a, 0x2c, 0x16, 0x3f, 0x96,
- 0x4a, 0xa5, 0x5e, 0xb5, 0x5a, 0xfd, 0x52, 0x2e, 0x97, 0xfd, 0x46, 0xa3,
- 0x21, 0x8e, 0xfb, 0xd8, 0x60, 0x30, 0x38, 0x09, 0x65, 0x59, 0x86, 0x24,
- 0x49, 0x10, 0x04, 0x81, 0xf0, 0x3c, 0x6f, 0xb3, 0xd9, 0x6c, 0x7e, 0x58,
- 0x96, 0x75, 0x5b, 0xab, 0xd5, 0xde, 0x34, 0x9b, 0xcd, 0x5f, 0x07, 0xc8,
- 0xf7, 0xfd, 0x93, 0x90, 0x94, 0xf2, 0x80, 0x85, 0x61, 0x88, 0xe5, 0x72,
- 0x49, 0xe3, 0xf1, 0x58, 0xc6, 0x71, 0xfc, 0xc1, 0xb6, 0xed, 0xe7, 0x8e,
- 0xe3, 0x84, 0x00, 0xc0, 0xa4, 0x94, 0x27, 0x21, 0x22, 0x82, 0x94, 0x12,
- 0x52, 0x4a, 0xa4, 0x69, 0x8a, 0x28, 0x8a, 0xb0, 0x58, 0x2c, 0x30, 0x1c,
- 0x0e, 0x85, 0xeb, 0xba, 0xef, 0x6b, 0xb5, 0xda, 0x4d, 0xab, 0xd5, 0x8a,
- 0x34, 0xc6, 0xd8, 0x29, 0x07, 0x8c, 0x31, 0x28, 0x8a, 0x02, 0x22, 0x82,
- 0xae, 0xeb, 0x30, 0x0c, 0x03, 0xb9, 0x5c, 0x0e, 0x86, 0x61, 0xa8, 0x52,
- 0xca, 0xa7, 0xf3, 0xf9, 0xfc, 0x67, 0xbf, 0xdf, 0x7f, 0xa5, 0xe0, 0x81,
- 0xc5, 0x18, 0x03, 0x63, 0x0c, 0x9a, 0xa6, 0xa1, 0x50, 0x28, 0xa0, 0x52,
- 0xa9, 0xa0, 0x5e, 0xaf, 0x6b, 0x00, 0x5e, 0xac, 0xd7, 0xeb, 0x47, 0x0f,
- 0x86, 0x8e, 0x41, 0x55, 0x55, 0x61, 0x9a, 0x26, 0x2a, 0x95, 0x0a, 0x6c,
- 0xdb, 0xb6, 0x82, 0x20, 0x78, 0x76, 0x36, 0xb4, 0xc7, 0xf6, 0x93, 0x55,
- 0xab, 0x55, 0x26, 0x84, 0x78, 0xac, 0x1c, 0x5f, 0xf3, 0xb9, 0xa5, 0xeb,
- 0x3a, 0x2c, 0xcb, 0x82, 0xae, 0xeb, 0xbb, 0x03, 0xa4, 0x69, 0xda, 0xd9,
- 0x53, 0x29, 0x8a, 0x02, 0xd3, 0x34, 0x99, 0x61, 0x18, 0xcb, 0x8b, 0x56,
- 0x3b, 0xc6, 0xfe, 0x4e, 0x76, 0x77, 0x15, 0x44, 0x44, 0xe0, 0x9c, 0x0b,
- 0x22, 0xfa, 0xaa, 0x5c, 0x83, 0x48, 0x29, 0x11, 0x86, 0xe1, 0x86, 0x88,
- 0xbe, 0x5f, 0x35, 0xd1, 0x6e, 0xb7, 0x83, 0xe7, 0x79, 0x3d, 0x55, 0x55,
- 0x7d, 0xd0, 0x05, 0x25, 0xa5, 0x24, 0xce, 0x39, 0x4d, 0x26, 0x93, 0x45,
- 0xb7, 0xdb, 0x7d, 0x42, 0x44, 0x50, 0x2e, 0x59, 0x49, 0x08, 0x81, 0xf5,
- 0x7a, 0x9d, 0x4c, 0xa7, 0xd3, 0x77, 0x42, 0x88, 0x6f, 0x00, 0xa0, 0xed,
- 0x0f, 0xb3, 0x2c, 0x3b, 0xe4, 0xe9, 0x5f, 0xf9, 0x23, 0xfa, 0x93, 0x6d,
- 0xce, 0x39, 0x56, 0xab, 0x95, 0x18, 0x0e, 0x87, 0x9f, 0x82, 0x20, 0x78,
- 0xdd, 0x6e, 0xb7, 0xd3, 0x7b, 0xe9, 0x27, 0xa2, 0x7b, 0x08, 0x11, 0x21,
- 0x4d, 0x53, 0x70, 0xce, 0x11, 0xc7, 0xb1, 0x74, 0x5d, 0xd7, 0x9f, 0xcd,
- 0x66, 0x3d, 0xce, 0xf9, 0x4b, 0xc7, 0x71, 0xee, 0x0e, 0xef, 0x70, 0x34,
- 0x1a, 0xe1, 0x7f, 0xff, 0x51, 0x92, 0x24, 0xd8, 0x6e, 0xb7, 0x61, 0x14,
- 0x45, 0x9f, 0x39, 0xe7, 0x6f, 0x19, 0x63, 0xb7, 0x8e, 0xe3, 0x44, 0xc7,
- 0x7d, 0xbf, 0x07, 0x00, 0x5f, 0x77, 0x46, 0x8c, 0x30, 0x2c, 0xd8, 0x9d,
- 0x00, 0x00, 0x00, 0x00, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82
-};
-unsigned int search_r_png_len = 612;
-
-static unsigned char close_png[] = {
- 0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a, 0x00, 0x00, 0x00, 0x0d,
- 0x49, 0x48, 0x44, 0x52, 0x00, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x0b,
- 0x08, 0x06, 0x00, 0x00, 0x00, 0xa9, 0xac, 0x77, 0x26, 0x00, 0x00, 0x00,
- 0xd8, 0x49, 0x44, 0x41, 0x54, 0x18, 0x19, 0x75, 0x51, 0xbd, 0x12, 0x46,
- 0x40, 0x0c, 0xdc, 0x18, 0x15, 0x0a, 0x14, 0x14, 0x1a, 0x43, 0xeb, 0x35,
- 0xbc, 0x7f, 0xa7, 0x43, 0x67, 0x06, 0x33, 0x28, 0xd0, 0xde, 0x77, 0x7b,
- 0x23, 0x2a, 0xdf, 0x16, 0x97, 0x9f, 0xdb, 0xcb, 0x26, 0x39, 0xc1, 0x83,
- 0x7d, 0xdf, 0xcd, 0xb2, 0x2c, 0xd8, 0xb6, 0x0d, 0xe7, 0x79, 0x22, 0x8a,
- 0x22, 0xc4, 0x71, 0x8c, 0x3c, 0xcf, 0x91, 0xa6, 0xa9, 0x90, 0xe6, 0x8e,
- 0x69, 0x9a, 0xcc, 0x38, 0x8e, 0xb8, 0xae, 0x4b, 0xdf, 0xbe, 0x36, 0x0c,
- 0x43, 0x94, 0x65, 0x89, 0xa2, 0x28, 0xc4, 0x3b, 0x8e, 0xe3, 0x2f, 0x91,
- 0x2f, 0xa8, 0xc2, 0x42, 0x56, 0xd1, 0x78, 0xf3, 0x3c, 0xbb, 0x04, 0x2f,
- 0xda, 0xb6, 0x45, 0x55, 0x55, 0x74, 0x9d, 0x65, 0x2c, 0x22, 0xb8, 0xef,
- 0x1b, 0xeb, 0xba, 0xc2, 0x67, 0x8f, 0x4c, 0x10, 0x7d, 0xdf, 0xa3, 0xae,
- 0x6b, 0xe7, 0xd3, 0x32, 0x56, 0x90, 0xe7, 0x53, 0x46, 0x31, 0x0c, 0x83,
- 0x73, 0x95, 0xa8, 0x31, 0x93, 0x9c, 0xc7, 0xe3, 0xd4, 0x0a, 0xb6, 0xa0,
- 0x44, 0x5a, 0xc6, 0xc6, 0x18, 0x77, 0xcd, 0x41, 0xbd, 0x24, 0x49, 0x94,
- 0xfb, 0x12, 0x59, 0x51, 0x5b, 0xd2, 0x16, 0xed, 0xfa, 0x20, 0xdc, 0x6f,
- 0xd7, 0x75, 0x9f, 0x6b, 0xd3, 0x2a, 0x41, 0x10, 0xa0, 0x69, 0x1a, 0x57,
- 0x59, 0x28, 0x47, 0x99, 0x2f, 0x30, 0xcf, 0x7b, 0xfb, 0x41, 0xcf, 0x1a,
- 0x2c, 0xeb, 0xeb, 0x07, 0x29, 0x9d, 0x65, 0x19, 0x6c, 0xab, 0x6e, 0x5d,
- 0x3f, 0x07, 0x0a, 0x79, 0x90, 0x0e, 0x11, 0x45, 0xc2, 0x00, 0x00, 0x00,
- 0x00, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82
-};
-static unsigned int close_png_len = 273;
-
-#if 0
-unsigned char open_gif[] = {
- 0x47, 0x49, 0x46, 0x38, 0x39, 0x61, 0x09, 0x00, 0x09, 0x00, 0xf0, 0x00,
- 0x00, 0x8e, 0xaf, 0xc4, 0x00, 0x00, 0x00, 0x21, 0xf9, 0x04, 0x01, 0x00,
- 0x00, 0x01, 0x00, 0x2c, 0x00, 0x00, 0x00, 0x00, 0x09, 0x00, 0x09, 0x00,
- 0x00, 0x02, 0x0d, 0x8c, 0x8f, 0xa9, 0xcb, 0xe0, 0xff, 0x02, 0x8c, 0x66,
- 0x26, 0x7a, 0x51, 0x01, 0x00, 0x3b
-};
-unsigned int open_gif_len = 54;
-
-unsigned char closed_gif[] = {
- 0x47, 0x49, 0x46, 0x38, 0x39, 0x61, 0x09, 0x00, 0x09, 0x00, 0xf0, 0x00,
- 0x00, 0x8e, 0xaf, 0xc4, 0x00, 0x00, 0x00, 0x21, 0xf9, 0x04, 0x01, 0x00,
- 0x00, 0x01, 0x00, 0x2c, 0x00, 0x00, 0x00, 0x00, 0x09, 0x00, 0x09, 0x00,
- 0x00, 0x02, 0x10, 0x8c, 0x03, 0xa7, 0x98, 0xcb, 0xad, 0x80, 0x84, 0x66,
- 0xca, 0x38, 0x57, 0xd6, 0xf4, 0xd0, 0x02, 0x00, 0x3b
-};
-unsigned int closed_gif_len = 57;
-#endif
-
-static unsigned char closed_png[81] =
-{
- 0, 0, 0, 0,142, 0, 0, 0, 0,
- 0, 0, 0, 0,142,142, 0, 0, 0,
- 0, 0, 0, 0,142,142,142, 0, 0,
- 0, 0, 0, 0,142,142,142,142, 0,
- 0, 0, 0, 0,142,142,142,142,142,
- 0, 0, 0, 0,142,142,142,142, 0,
- 0, 0, 0, 0,142,142,142, 0, 0,
- 0, 0, 0, 0,142,142, 0, 0, 0,
- 0, 0, 0, 0,142, 0, 0, 0, 0
-};
-
-static unsigned char closed_a_png[81] =
-{
- 0, 0, 0, 0,255, 0, 0, 0, 0,
- 0, 0, 0, 0,255,255, 0, 0, 0,
- 0, 0, 0, 0,255,255,255, 0, 0,
- 0, 0, 0, 0,255,255,255,255, 0,
- 0, 0, 0, 0,255,255,255,255,255,
- 0, 0, 0, 0,255,255,255,255, 0,
- 0, 0, 0, 0,255,255,255, 0, 0,
- 0, 0, 0, 0,255,255, 0, 0, 0,
- 0, 0, 0, 0,255, 0, 0, 0, 0
-};
-
-static unsigned char open_png[81] =
-{
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 142,142,142,142,142,142,142,142,142,
- 0,142,142,142,142,142,142,142, 0,
- 0, 0,142,142,142,142,142, 0, 0,
- 0, 0, 0,142,142,142, 0, 0, 0,
- 0, 0, 0, 0,142, 0, 0, 0, 0
-};
-
-static unsigned char open_a_png[81] =
-{
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 255,255,255,255,255,255,255,255,255,
- 0,255,255,255,255,255,255,255, 0,
- 0, 0,255,255,255,255,255, 0, 0,
- 0, 0, 0,255,255,255, 0, 0, 0,
- 0, 0, 0, 0,255, 0, 0, 0, 0
-};
-
-static unsigned char bdwn_png[7*8] =
-{
- 0, 0, 0,142, 0, 0, 0,
- 0, 0, 0,142, 0, 0, 0,
- 0, 0, 0,142, 0, 0, 0,
- 142, 0, 0,142, 0, 0,142,
- 142,142, 0,142, 0,142,142,
- 142,142,142,142,142,142,142,
- 0,142,142,142,142,142, 0,
- 0, 0,142,142,142, 0, 0,
-};
-
-static unsigned char bdwn_a_png[7*8] =
-{
- 0, 0, 0,255, 0, 0, 0,
- 0, 0, 0,255, 0, 0, 0,
- 0, 0, 0,255, 0, 0, 0,
- 128, 0, 0,255, 0, 0,128,
- 255,128, 0,255, 0,128,255,
- 128,255,128,255,128,255,128,
- 0,128,255,255,255,128, 0,
- 0, 0,128,255,128, 0, 0,
-};
-
-
-
-//------------------------------------------------------------------------
-
-static const char tabs_css[] =
-".tabs, .tabs2, .tabs3 {\n"
-" background-image: url('tab_b.png');\n"
-" width: 100%;\n"
-" z-index: 101;\n"
-" font-size: 13px;\n"
-"}\n"
-"\n"
-".tabs2 {\n"
-" font-size: 10px;\n"
-"}\n"
-".tabs3 {\n"
-" font-size: 9px;\n"
-"}\n"
-"\n"
-".tablist {\n"
-" margin: 0;\n"
-" padding: 0;\n"
-" display: table;\n"
-"}\n"
-"\n"
-".tablist li {\n"
-" float: left;\n"
-" display: table-cell;\n"
-" background-image: url('tab_b.png');\n"
-" line-height: 36px;\n"
-" list-style: none;\n"
-"}\n"
-"\n"
-".tablist a {\n"
-" display: block;\n"
-" padding: 0 20px;\n"
-" font-weight: bold;\n"
-" background-image:url('tab_s.png');\n"
-" background-repeat:no-repeat;\n"
-" background-position:right;\n"
-" color: ##30;\n"
-" text-shadow: 0px 1px 1px rgba(255, 255, 255, 0.9);\n"
-" text-decoration: none;\n"
-" outline: none;\n"
-"}\n"
-"\n"
-".tabs3 .tablist a {\n"
-" padding: 0 10px;\n"
-"}\n"
-"\n"
-".tablist a:hover {\n"
-" background-image: url('tab_h.png');\n"
-" background-repeat:repeat-x;\n"
-" color: #fff;\n"
-" text-shadow: 0px 1px 1px rgba(0, 0, 0, 1.0);\n"
-" text-decoration: none;\n"
-"}\n"
-"\n"
-".tablist li.current a {\n"
-" background-image: url('tab_a.png');\n"
-" background-repeat:repeat-x;\n"
-" color: #fff;\n"
-" text-shadow: 0px 1px 1px rgba(0, 0, 0, 1.0);\n"
-"}\n"
-;
-
-struct img_data_item
-{
- const char *name;
- unsigned char *content;
- unsigned int len;
-};
-
-
-static void writeImgData(const char *dir,img_data_item *data)
-{
- while (data->name)
- {
- QCString fileName;
- fileName=(QCString)dir+"/"+data->name;
- QFile f(fileName);
- if (f.open(IO_WriteOnly))
- {
- f.writeBlock((char*)data->content,
- data->len>0 ? data->len : strlen((char*)data->content));
- }
- else
- {
- fprintf(stderr,"Warning: Cannot open file %s for writing\n",data->name);
- }
- Doxygen::indexList.addImageFile(QCString("/search/")+data->name);
- data++;
- }
-}
-
-static ColoredImgDataItem colored_tab_data[] =
-{
- { "tab_a.png", 1, 36, tab_a_png, 0 },
- { "tab_b.png", 1, 36, tab_b_png, 0 },
- { "tab_h.png", 1, 36, tab_h_png, 0 },
- { "tab_s.png", 1, 36, tab_s_png, 0 },
- { "nav_h.png", 1, 12, header_png, 0 },
- { "nav_f.png", 1, 56, func_header_png, 0 },
- { "bc_s.png", 8, 32, bc_s_png, bc_s_a_png },
- { "doxygen.png", 104,31, doxygen_png, doxygen_a_png },
- { "closed.png", 9, 9, closed_png, closed_a_png },
- { "open.png", 9, 9, open_png, open_a_png },
- { "bdwn.png", 7, 8, bdwn_png, bdwn_a_png },
- { 0, 0, 0, 0, 0 }
-};
-
-static img_data_item search_client_data[] =
-{
- { "mag_sel.png", mag_sel_png, mag_sel_png_len },
- { "search_l.png", search_l_png, search_l_png_len },
- { "search_m.png", search_m_png, search_m_png_len },
- { "search_r.png", search_r_png, search_r_png_len },
- { "close.png", close_png, close_png_len },
- { 0, 0, 0 }
-};
-
-static img_data_item search_server_data[] =
-{
- { "mag.png", mag_png, mag_png_len },
- { "search_l.png", search_l_png, search_l_png_len },
- { "search_m.png", search_m_png, search_m_png_len },
- { "search_r.png", search_r_png, search_r_png_len },
- { 0, 0, 0 }
-};
-
-//------------------------------------------------------------------------
-
-static void writeClientSearchBox(FTextStream &t,const char *relPath)
-{
- t << " <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n";
- t << " <span class=\"left\">\n";
- t << " <img id=\"MSearchSelect\" src=\"" << relPath << "search/mag_sel.png\"\n";
- t << " onmouseover=\"return searchBox.OnSearchSelectShow()\"\n";
- t << " onmouseout=\"return searchBox.OnSearchSelectHide()\"\n";
- t << " alt=\"\"/>\n";
- t << " <input type=\"text\" id=\"MSearchField\" value=\""
- << theTranslator->trSearch() << "\" accesskey=\"S\"\n";
- t << " onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n";
- t << " onblur=\"searchBox.OnSearchFieldFocus(false)\" \n";
- t << " onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n";
- t << " </span><span class=\"right\">\n";
- t << " <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\">"
- << "<img id=\"MSearchCloseImg\" border=\"0\" src=\"" << relPath << "search/close.png\" alt=\"\"/></a>\n";
- t << " </span>\n";
- t << " </div>\n";
-}
-
-static void writeServerSearchBox(FTextStream &t,const char *relPath,bool highlightSearch)
-{
- t << " <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n";
- t << " <div class=\"left\">\n";
- t << " <form id=\"FSearchBox\" action=\"" << relPath << "search.php\" method=\"get\">\n";
- t << " <img id=\"MSearchSelect\" src=\"" << relPath << "search/mag.png\" alt=\"\"/>\n";
- if (!highlightSearch)
- {
- t << " <input type=\"text\" id=\"MSearchField\" name=\"query\" value=\""
- << theTranslator->trSearch() << "\" size=\"20\" accesskey=\"S\" \n";
- t << " onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n";
- t << " onblur=\"searchBox.OnSearchFieldFocus(false)\"/>\n";
- t << " </form>\n";
- t << " </div><div class=\"right\"></div>\n";
- t << " </div>\n";
- }
-}
-
-//------------------------------------------------------------------------
-
-/// substitute all occurrences of \a src in \a s by \a dst
-QCString substitute(const char *s,const char *src,const char *dst)
-{
- if (s==0 || src==0) return s;
- const char *p, *q;
- int srcLen = strlen(src);
- int dstLen = dst ? strlen(dst) : 0;
- int resLen;
- if (srcLen!=dstLen)
- {
- int count;
- for (count=0, p=s; (q=strstr(p,src))!=0; p=q+srcLen) count++;
- resLen = p-s+strlen(p)+count*(dstLen-srcLen);
- }
- else // result has same size as s
- {
- resLen = strlen(s);
- }
- QCString result(resLen+1);
- char *r;
- for (r=result.data(), p=s; (q=strstr(p,src))!=0; p=q+srcLen)
- {
- int l = (int)(q-p);
- memcpy(r,p,l);
- r+=l;
- if (dst) memcpy(r,dst,dstLen);
- r+=dstLen;
- }
- strcpy(r,p);
- //printf("substitute(%s,%s,%s)->%s\n",s,src,dst,result.data());
- return result;
-}
-//----------------------------------------------------------------------
-
-/// Clear a text block \a s from \a begin to \a end markers
-QCString clearBlock(const char *s,const char *begin,const char *end)
-{
- if (s==0 || begin==0 || end==0) return s;
- const char *p, *q;
- int beginLen = strlen(begin);
- int endLen = strlen(end);
- int resLen = 0;
- for (p=s; (q=strstr(p,begin))!=0; p=q+endLen)
- {
- resLen+=q-p;
- p=q+beginLen;
- if ((q=strstr(p,end))==0)
- {
- resLen+=beginLen;
- break;
- }
- }
- resLen+=strlen(p);
- // resLen is the length of the string without the marked block
-
- QCString result(resLen+1);
- char *r;
- for (r=result.data(), p=s; (q=strstr(p,begin))!=0; p=q+endLen)
- {
- int l = (int)(q-p);
- memcpy(r,p,l);
- r+=l;
- p=q+beginLen;
- if ((q=strstr(p,end))==0)
- {
- memcpy(r,begin,beginLen);
- r+=beginLen;
- break;
- }
- }
- strcpy(r,p);
- return result;
-}
-//----------------------------------------------------------------------
-
-QCString selectBlock(const QCString& s,const QCString &name,bool enable)
-{
- const QCString begin = "<!--BEGIN " + name + "-->";
- const QCString end = "<!--END " + name + "-->";
- const QCString nobegin = "<!--BEGIN !" + name + "-->";
- const QCString noend = "<!--END !" + name + "-->";
-
- QCString result = s;
- if (enable)
- {
- result = substitute(result, begin, "");
- result = substitute(result, end, "");
- result = clearBlock(result, nobegin, noend);
- }
- else
- {
- result = substitute(result, nobegin, "");
- result = substitute(result, noend, "");
- result = clearBlock(result, begin, end);
- }
-
- return result;
-}
-
-static QCString getSearchBox(bool serverSide, QCString relPath, bool highlightSearch)
-{
- QGString result;
- FTextStream t(&result);
- if (serverSide) {
- writeServerSearchBox(t, relPath, highlightSearch);
- }
- else {
- writeClientSearchBox(t, relPath);
- }
- return QCString(result);
-}
-
-
-static QCString substituteHtmlKeywords(const QCString &s,const char *title,
- const QCString &relPath)
-{
- // Build CSS/Javascript tags depending on treeview, search engine settings
- QCString cssFile;
- QCString generatedBy;
- QCString treeViewCssJs;
- QCString searchCssJs;
- QCString searchBox;
- QCString mathJaxJs;
-
- static QCString projectName = Config_getString("PROJECT_NAME");
- static bool timeStamp = Config_getBool("HTML_TIMESTAMP");
- static bool treeView = Config_getBool("GENERATE_TREEVIEW");
- static bool searchEngine = Config_getBool("SEARCHENGINE");
- static bool serverBasedSearch = Config_getBool("SERVER_BASED_SEARCH");
- static bool mathJax = Config_getBool("USE_MATHJAX");
- static bool disableIndex = Config_getBool("DISABLE_INDEX");
- static bool hasProjectName = !projectName.isEmpty();
- static bool hasProjectNumber = !Config_getString("PROJECT_NUMBER").isEmpty();
- static bool hasProjectBrief = !Config_getString("PROJECT_BRIEF").isEmpty();
- static bool hasProjectLogo = !Config_getString("PROJECT_LOGO").isEmpty();
- static bool titleArea = (hasProjectName || hasProjectBrief || hasProjectLogo || (disableIndex && searchEngine));
-
- cssFile = Config_getString("HTML_STYLESHEET");
- if (cssFile.isEmpty())
- {
- cssFile = "doxygen.css";
- }
- else
- {
- QFileInfo cssfi(cssFile);
- if (cssfi.exists())
- {
- cssFile = cssfi.fileName();
- }
- else
- {
- cssFile = "doxygen.css";
- }
- }
-
- if (timeStamp) {
- generatedBy = theTranslator->trGeneratedAt(dateToString(TRUE), Config_getString("PROJECT_NAME"));
- }
- else {
- generatedBy = theTranslator->trGeneratedBy();
- }
-
- if (treeView)
- {
- treeViewCssJs = "<link href=\"$relpath$navtree.css\" rel=\"stylesheet\" type=\"text/css\"/>\n"
- "<script type=\"text/javascript\" src=\"$relpath$jquery.js\"></script>\n"
- "<script type=\"text/javascript\" src=\"$relpath$resize.js\"></script>\n"
- "<script type=\"text/javascript\" src=\"$relpath$navtree.js\"></script>\n"
- "<script type=\"text/javascript\">\n"
- " $(document).ready(initResizable);\n"
- "</script>";
- }
-
- if (searchEngine)
- {
- searchCssJs = "<link href=\"$relpath$search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n";
- if (!Config_getBool("GENERATE_TREEVIEW"))
- {
- searchCssJs += "<script type=\"text/javascript\" src=\"$relpath$jquery.js\"></script>\n";
- }
- searchCssJs += "<script type=\"text/javascript\" src=\"$relpath$search/search.js\"></script>\n";
-
- if (!serverBasedSearch)
- {
- searchCssJs += "<script type=\"text/javascript\">\n"
- " $(document).ready(function() { searchBox.OnSelectItem(0); });\n"
- "</script>";
- }
- else
- {
- searchCssJs += "<script type=\"text/javascript\">\n"
- " $(document).ready(function() {\n"
- " if ($('.searchresults').length > 0) { searchBox.DOMSearchField().focus(); }\n"
- " });\n"
- "</script>\n";
-
- // OPENSEARCH_PROVIDER {
- searchCssJs += "<link rel=\"search\" href=\"" + relPath +
- "search-opensearch.php?v=opensearch.xml\" "
- "type=\"application/opensearchdescription+xml\" title=\"" +
- (hasProjectName ? projectName : QCString("Doxygen")) +
- "\"/>";
- // OPENSEARCH_PROVIDER }
- }
- searchBox = getSearchBox(serverBasedSearch, relPath, FALSE);
- }
-
- if (mathJax)
- {
- QCString path = Config_getString("MATHJAX_RELPATH");
- if (!path.isEmpty() && path.at(path.length()-1)!='/')
- {
- path+="/";
- }
- if (path.isEmpty() || path.left(2)=="..") // relative path
- {
- path.prepend(relPath);
- }
- mathJaxJs = "<script type=\"text/x-mathjax-config\">\n"
- " MathJax.Hub.Config({\n"
- " extensions: [\"tex2jax.js\"";
- QStrList &mathJaxExtensions = Config_getList("MATHJAX_EXTENSIONS");
- const char *s = mathJaxExtensions.first();
- while (s)
- {
- mathJaxJs+= ", \""+QCString(s)+".js\"";
- s = mathJaxExtensions.next();
- }
- mathJaxJs += "],\n"
- " jax: [\"input/TeX\",\"output/HTML-CSS\"],\n"
- "});\n"
- "</script>";
- mathJaxJs += "<script src=\"" + path + "MathJax.js\"></script>\n";
- }
-
- // first substitute generic keywords
- QCString result = substituteKeywords(s,title,
- convertToHtml(Config_getString("PROJECT_NAME")),
- convertToHtml(Config_getString("PROJECT_NUMBER")),
- convertToHtml(Config_getString("PROJECT_BRIEF")));
-
- // additional HTML only keywords
- result = substitute(result,"$stylesheet",cssFile);
- result = substitute(result,"$treeview",treeViewCssJs);
- result = substitute(result,"$searchbox",searchBox);
- result = substitute(result,"$search",searchCssJs);
- result = substitute(result,"$mathjax",mathJaxJs);
- result = substitute(result,"$generatedby",generatedBy);
- result = substitute(result,"$relpath$",relPath); //<-- must be last
-
- // additional HTML only conditional blocks
- result = selectBlock(result,"DISABLE_INDEX",disableIndex);
- result = selectBlock(result,"GENERATE_TREEVIEW",treeView);
- result = selectBlock(result,"SEARCHENGINE",searchEngine);
- result = selectBlock(result,"TITLEAREA",titleArea);
- result = selectBlock(result,"PROJECT_NAME",hasProjectName);
- result = selectBlock(result,"PROJECT_NUMBER",hasProjectNumber);
- result = selectBlock(result,"PROJECT_BRIEF",hasProjectBrief);
- result = selectBlock(result,"PROJECT_LOGO",hasProjectLogo);
-
- return result;
-}
-
-//------------------------- Pictures for the Tabs ------------------------
-
-HtmlGenerator::HtmlGenerator() : OutputGenerator()
-{
- dir=Config_getString("HTML_OUTPUT");
- col=0;
- m_emptySection=FALSE;
-}
-
-HtmlGenerator::~HtmlGenerator()
-{
- //printf("HtmlGenerator::~HtmlGenerator()\n");
-}
-
-void HtmlGenerator::init()
-{
- QCString dname=Config_getString("HTML_OUTPUT");
- QDir d(dname);
- if (!d.exists() && !d.mkdir(dname))
- {
- err("Could not create output directory %s\n",dname.data());
- exit(1);
- }
- //writeLogo(dname);
- if (!Config_getString("HTML_HEADER").isEmpty())
- {
- g_header=fileToString(Config_getString("HTML_HEADER"));
- //printf("g_header='%s'\n",g_header.data());
- }
- else
- {
- g_header = defaultHtmlHeader;
- }
-
- if (!Config_getString("HTML_FOOTER").isEmpty())
- {
- g_footer=fileToString(Config_getString("HTML_FOOTER"));
- //printf("g_footer='%s'\n",g_footer.data());
- }
- else
- {
- g_footer = defaultHtmlFooter;
- }
- createSubDirs(d);
-
- QCString fileName=dname+"/tabs.css";
- QFile f(fileName);
- if (f.open(IO_WriteOnly))
- {
- FTextStream t(&f);
- t << replaceColorMarkers(tabs_css);
- }
- else
- {
- fprintf(stderr,"Warning: Cannot open file %s for writing\n",fileName.data());
- }
-
- {
- QFile f(dname+"/jquery.js");
- if (f.open(IO_WriteOnly))
- {
- FTextStream t(&f);
- t << search_jquery_script1 << search_jquery_script2 << search_jquery_script3;
- if (Config_getBool("GENERATE_TREEVIEW"))
- {
- t << search_jquery_script4;
- }
- }
- }
-
- if (Config_getBool("INTERACTIVE_SVG"))
- {
- QFile f(dname+"/svgpan.js");
- if (f.open(IO_WriteOnly))
- {
- FTextStream t(&f);
- t << svgpan_script;
- }
- }
-
- if (Config_getBool("HTML_DYNAMIC_SECTIONS"))
- {
- QFile f(dname+"/dynsections.js");
- if (f.open(IO_WriteOnly))
- {
- FTextStream t(&f);
- t <<
- "var showTriggers = new Array();\n"
- "\n"
- "function registerShow(sectId,showFunc) {\n"
- " showTriggers[sectId] = showFunc;\n"
- "}\n"
- "\n"
- "function hasClass(ele,cls) {\n"
- " return ele.className.match(new RegExp('(\\\\s|^)'+cls+'(\\\\s|$)'));\n"
- "}\n"
- "\n"
- "function addClass(ele,cls) {\n"
- " if (!this.hasClass(ele,cls)) ele.className += \" \"+cls;\n"
- "}\n"
- "\n"
- "function removeClass(ele,cls) {\n"
- " if (hasClass(ele,cls)) {\n"
- " var reg = new RegExp('(\\\\s|^)'+cls+'(\\\\s|$)');\n"
- " ele.className=ele.className.replace(reg,' ');\n"
- " }\n"
- "}\n"
- "\n"
- "function toggleVisibility(linkObj) {\n"
- " var base = linkObj.getAttribute('id');\n"
- " var summary = document.getElementById(base + '-summary');\n"
- " var content = document.getElementById(base + '-content');\n"
- " var trigger = document.getElementById(base + '-trigger');\n"
- " if ( hasClass(linkObj,'closed') ) {\n"
- " summary.style.display = 'none';\n"
- " content.style.display = 'block';\n"
- " trigger.src = trigger.src.substring(0,trigger.src.length-10)+'open.png';\n"
- " removeClass(linkObj,'closed');\n"
- " addClass(linkObj,'opened');\n"
- " if (showTriggers[base]) { showTriggers[base](); }\n"
- " } else if ( hasClass(linkObj,'opened') ) {\n"
- " summary.style.display = 'block';\n"
- " content.style.display = 'none';\n"
- " trigger.src = trigger.src.substring(0,trigger.src.length-8)+'closed.png';\n"
- " removeClass(linkObj,'opened');\n"
- " addClass(linkObj,'closed');\n"
- " }\n"
- " return false;\n"
- "}\n";
- }
- }
-}
-
-/// Additional initialization after indices have been created
-void HtmlGenerator::writeTabData()
-{
- Doxygen::indexList.addStyleSheetFile("tabs.css");
- QCString dname=Config_getString("HTML_OUTPUT");
- writeColoredImgData(dname,colored_tab_data);
-}
-
-void HtmlGenerator::writeSearchData(const char *dir)
-{
- static bool serverBasedSearch = Config_getBool("SERVER_BASED_SEARCH");
- writeImgData(dir,serverBasedSearch ? search_server_data : search_client_data);
- QCString searchDirName = Config_getString("HTML_OUTPUT")+"/search";
- QFile f(searchDirName+"/search.css");
- if (f.open(IO_WriteOnly))
- {
- FTextStream t(&f);
- QCString searchCss = replaceColorMarkers(search_styleSheet);
- if (Config_getBool("DISABLE_INDEX"))
- {
- // move up the search box if there are no tabs
- searchCss = substitute(searchCss,"margin-top: 8px;","margin-top: 0px;");
- }
- t << searchCss;
- }
- Doxygen::indexList.addStyleSheetFile("search/search.css");
-}
-
-
-
-void HtmlGenerator::writeStyleSheetFile(QFile &file)
-{
- FTextStream t(&file);
- t << replaceColorMarkers(defaultStyleSheet);
-}
-
-void HtmlGenerator::writeHeaderFile(QFile &file, const char *cssname)
-{
- FTextStream t(&file);
-
- QString relPathStr = "$relpath$";
-
- QCString id(file.name());
- if (id.right(Doxygen::htmlFileExtension.length())==Doxygen::htmlFileExtension)
- {
- id=id.left(id.length()-Doxygen::htmlFileExtension.length());
- }
-
- t << substitute(defaultHtmlHeader, "$stylesheet", cssname);
-}
-
-void HtmlGenerator::writeFooterFile(QFile &file)
-{
- FTextStream t(&file);
- QCString contents(defaultHtmlFooter);
- t << contents;
-}
-
-static void generateDynamicSections(FTextStream &t,const QCString &relPath)
-{
- if (Config_getBool("HTML_DYNAMIC_SECTIONS"))
- {
- t << "<script type=\"text/javascript\" src=\"" << relPath
- << "dynsections.js\"></script>\n";
- }
-}
-
-
-void HtmlGenerator::startFile(const char *name,const char *,
- const char *title)
-{
- //printf("HtmlGenerator::startFile(%s)\n",name);
- QCString fileName=name;
- lastTitle=title;
- relPath = relativePathToRoot(fileName);
-
- if (fileName.right(Doxygen::htmlFileExtension.length())!=Doxygen::htmlFileExtension)
- {
- fileName+=Doxygen::htmlFileExtension;
- }
- startPlainFile(fileName);
- Doxygen::indexList.addIndexFile(fileName);
- //if (Config_getBool("GENERATE_HTMLHELP"))
- //{
- // HtmlHelp::getInstance()->addIndexFile(fileName);
- //}
-
- lastFile = fileName;
- t << substituteHtmlKeywords(g_header,convertToHtml(title),relPath);
-
- t << "<!-- " << theTranslator->trGeneratedBy() << " Doxygen "
- << versionString << " -->" << endl;
- //static bool generateTreeView = Config_getBool("GENERATE_TREEVIEW");
- static bool searchEngine = Config_getBool("SEARCHENGINE");
- if (searchEngine /*&& !generateTreeView*/)
- {
- t << "<script type=\"text/javascript\">\n";
- t << "var searchBox = new SearchBox(\"searchBox\", \""
- << relPath<< "search\",false,'" << theTranslator->trSearch() << "');\n";
- t << "</script>\n";
- }
- generateDynamicSections(t,relPath);
- m_sectionCount=0;
-}
-
-void HtmlGenerator::writeSearchInfo(FTextStream &t,const QCString &relPath)
-{
- static bool searchEngine = Config_getBool("SEARCHENGINE");
- static bool serverBasedSearch = Config_getBool("SERVER_BASED_SEARCH");
- if (searchEngine && !serverBasedSearch)
- {
- (void)relPath;
- t << "<!-- window showing the filter options -->\n";
- t << "<div id=\"MSearchSelectWindow\"\n";
- t << " onmouseover=\"return searchBox.OnSearchSelectShow()\"\n";
- t << " onmouseout=\"return searchBox.OnSearchSelectHide()\"\n";
- t << " onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n";
- writeSearchCategories(t);
- t << "</div>\n";
- t << "\n";
- t << "<!-- iframe showing the search results (closed by default) -->\n";
- t << "<div id=\"MSearchResultsWindow\">\n";
- t << "<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n";
- t << " name=\"MSearchResults\" id=\"MSearchResults\">\n";
- t << "</iframe>\n";
- t << "</div>\n";
- t << "\n";
- }
-}
-
-void HtmlGenerator::writeSearchInfo()
-{
- writeSearchInfo(t,relPath);
-}
-
-
-QCString HtmlGenerator::writeLogoAsString(const char *path)
-{
- static bool timeStamp = Config_getBool("HTML_TIMESTAMP");
- QCString result;
- if (timeStamp)
- {
- result += theTranslator->trGeneratedAt(
- dateToString(TRUE),
- Config_getString("PROJECT_NAME")
- );
- }
- else
- {
- result += theTranslator->trGeneratedBy();
- }
- result += "&#160;\n<a href=\"http://www.doxygen.org/index.html\">\n"
- "<img class=\"footer\" src=\"";
- result += path;
- result += "doxygen.png\" alt=\"doxygen\"/></a> ";
- result += versionString;
- result += " ";
- return result;
-}
-
-void HtmlGenerator::writeLogo()
-{
- t << writeLogoAsString(relPath);
-}
-
-void HtmlGenerator::writePageFooter(FTextStream &t,const QCString &lastTitle,const QCString &relPath)
-{
- t << substituteHtmlKeywords(g_footer,convertToHtml(lastTitle),relPath);
-}
-
-void HtmlGenerator::writeFooter()
-{
- writePageFooter(t,lastTitle,relPath);
-}
-
-void HtmlGenerator::endFile()
-{
- endPlainFile();
-}
-
-void HtmlGenerator::startProjectNumber()
-{
- t << "<h3 class=\"version\">";
-}
-
-void HtmlGenerator::endProjectNumber()
-{
- t << "</h3>";
-}
-
-void HtmlGenerator::writeStyleInfo(int part)
-{
- //printf("writeStyleInfo(%d)\n",part);
- if (part==0)
- {
- if (Config_getString("HTML_STYLESHEET").isEmpty()) // write default style sheet
- {
- //printf("write doxygen.css\n");
- startPlainFile("doxygen.css");
-
- // alternative, cooler looking titles
- //t << "H1 { text-align: center; border-width: thin none thin none;" << endl;
- //t << " border-style : double; border-color : blue; padding-left : 1em; padding-right : 1em }" << endl;
-
- t << replaceColorMarkers(defaultStyleSheet);
- endPlainFile();
- Doxygen::indexList.addStyleSheetFile("doxygen.css");
- }
- else // write user defined style sheet
- {
- QCString cssname=Config_getString("HTML_STYLESHEET");
- QFileInfo cssfi(cssname);
- if (!cssfi.exists() || !cssfi.isFile() || !cssfi.isReadable())
- {
- err("error: style sheet %s does not exist or is not readable!", Config_getString("HTML_STYLESHEET").data());
- }
- else
- {
- // convert style sheet to string
- QCString fileStr = fileToString(cssname);
- // write the string into the output dir
- startPlainFile(cssfi.fileName());
- t << fileStr;
- endPlainFile();
- }
- Doxygen::indexList.addStyleSheetFile(cssfi.fileName());
- }
- }
-}
-
-void HtmlGenerator::startDoxyAnchor(const char *,const char *,
- const char *anchor, const char *,
- const char *)
-{
- t << "<a class=\"anchor\" id=\"" << anchor << "\"></a>";
-}
-
-void HtmlGenerator::endDoxyAnchor(const char *,const char *)
-{
-}
-
-//void HtmlGenerator::newParagraph()
-//{
-// t << endl << "<p>" << endl;
-//}
-
-void HtmlGenerator::startParagraph()
-{
- t << endl << "<p>";
-}
-
-void HtmlGenerator::endParagraph()
-{
- t << "</p>" << endl;
-}
-
-void HtmlGenerator::writeString(const char *text)
-{
- t << text;
-}
-
-void HtmlGenerator::startIndexListItem()
-{
- t << "<li>";
-}
-
-void HtmlGenerator::endIndexListItem()
-{
- t << "</li>" << endl;
-}
-
-void HtmlGenerator::startIndexItem(const char *ref,const char *f)
-{
- //printf("HtmlGenerator::startIndexItem(%s,%s)\n",ref,f);
- if (ref || f)
- {
- if (ref)
- {
- t << "<a class=\"elRef\" ";
- t << externalLinkTarget() << externalRef(relPath,ref,FALSE);
- }
- else
- {
- t << "<a class=\"el\" ";
- }
- t << "href=\"";
- t << externalRef(relPath,ref,TRUE);
- if (f) t << f << Doxygen::htmlFileExtension << "\">";
- }
- else
- {
- t << "<b>";
- }
-}
-
-void HtmlGenerator::endIndexItem(const char *ref,const char *f)
-{
- //printf("HtmlGenerator::endIndexItem(%s,%s,%s)\n",ref,f,name);
- if (ref || f)
- {
- t << "</a>";
- }
- else
- {
- t << "</b>";
- }
-}
-
-void HtmlGenerator::writeStartAnnoItem(const char *,const char *f,
- const char *path,const char *name)
-{
- t << "<li>";
- if (path) docify(path);
- t << "<a class=\"el\" href=\"" << f << Doxygen::htmlFileExtension << "\">";
- docify(name);
- t << "</a> ";
-}
-
-void HtmlGenerator::writeObjectLink(const char *ref,const char *f,
- const char *anchor, const char *name)
-{
- if (ref)
- {
- t << "<a class=\"elRef\" ";
- t << externalLinkTarget() << externalRef(relPath,ref,FALSE);
- }
- else
- {
- t << "<a class=\"el\" ";
- }
- t << "href=\"";
- t << externalRef(relPath,ref,TRUE);
- if (f) t << f << Doxygen::htmlFileExtension;
- if (anchor) t << "#" << anchor;
- t << "\">";
- docify(name);
- t << "</a>";
-}
-
-void HtmlGenerator::writeCodeLink(const char *ref,const char *f,
- const char *anchor, const char *name,
- const char *tooltip)
-{
- //printf("writeCodeLink(ref=%s,f=%s,anchor=%s,name=%s,tooltip=%s)\n",ref,f,anchor,name,tooltip);
- if (ref)
- {
- t << "<a class=\"codeRef\" ";
- t << externalLinkTarget() << externalRef(relPath,ref,FALSE);
- }
- else
- {
- t << "<a class=\"code\" ";
- }
- t << "href=\"";
- t << externalRef(relPath,ref,TRUE);
- if (f) t << f << Doxygen::htmlFileExtension;
- if (anchor) t << "#" << anchor;
- t << "\"";
- if (tooltip) t << " title=\"" << tooltip << "\"";
- t << ">";
- docify(name);
- t << "</a>";
- col+=strlen(name);
-}
-
-void HtmlGenerator::startTextLink(const char *f,const char *anchor)
-{
- t << "<a href=\"";
- if (f) t << relPath << f << Doxygen::htmlFileExtension;
- if (anchor) t << "#" << anchor;
- t << "\">";
-}
-
-void HtmlGenerator::endTextLink()
-{
- t << "</a>";
-}
-
-void HtmlGenerator::startHtmlLink(const char *url)
-{
- static bool generateTreeView = Config_getBool("GENERATE_TREEVIEW");
- t << "<a ";
- if (generateTreeView) t << "target=\"top\" ";
- t << "href=\"";
- if (url) t << url;
- t << "\">";
-}
-
-void HtmlGenerator::endHtmlLink()
-{
- t << "</a>";
-}
-
-void HtmlGenerator::startGroupHeader(int extraIndentLevel)
-{
- if (extraIndentLevel==2)
- {
- t << "<h4>";
- }
- else if (extraIndentLevel==1)
- {
- t << "<h3>";
- }
- else // extraIndentLevel==0
- {
- t << "<h2>";
- }
-}
-
-void HtmlGenerator::endGroupHeader(int extraIndentLevel)
-{
- if (extraIndentLevel==2)
- {
- t << "</h4>" << endl;
- }
- else if (extraIndentLevel==1)
- {
- t << "</h3>" << endl;
- }
- else
- {
- t << "</h2>" << endl;
- }
-}
-
-void HtmlGenerator::startSection(const char *lab,const char *,SectionInfo::SectionType type)
-{
- switch(type)
- {
- case SectionInfo::Page: t << "\n\n<h1>"; break;
- case SectionInfo::Section: t << "\n\n<h2>"; break;
- case SectionInfo::Subsection: t << "\n\n<h3>"; break;
- case SectionInfo::Subsubsection: t << "\n\n<h4>"; break;
- case SectionInfo::Paragraph: t << "\n\n<h5>"; break;
- default: ASSERT(0); break;
- }
- t << "<a class=\"anchor\" id=\"" << lab << "\"></a>";
-}
-
-void HtmlGenerator::endSection(const char *,SectionInfo::SectionType type)
-{
- switch(type)
- {
- case SectionInfo::Page: t << "</h1>"; break;
- case SectionInfo::Section: t << "</h2>"; break;
- case SectionInfo::Subsection: t << "</h3>"; break;
- case SectionInfo::Subsubsection: t << "</h4>"; break;
- case SectionInfo::Paragraph: t << "</h5>"; break;
- default: ASSERT(0); break;
- }
-}
-
-void HtmlGenerator::docify(const char *str)
-{
- docify(str,FALSE);
-}
-
-void HtmlGenerator::docify(const char *str,bool inHtmlComment)
-{
- if (str)
- {
- const char *p=str;
- char c;
- while (*p)
- {
- c=*p++;
- switch(c)
- {
- case '<': t << "&lt;"; break;
- case '>': t << "&gt;"; break;
- case '&': t << "&amp;"; break;
- case '"': t << "&quot;"; break;
- case '-': if (inHtmlComment) t << "&#45;"; else t << "-"; break;
- case '\\':
- if (*p=='<')
- { t << "&lt;"; p++; }
- else if (*p=='>')
- { t << "&gt;"; p++; }
- else
- t << "\\";
- break;
- default: t << c;
- }
- }
- }
-}
-
-void HtmlGenerator::codify(const char *str)
-{
- //docify(str);
- //static char spaces[]=" ";
- if (str)
- {
- const char *p=str;
- char c;
- int spacesToNextTabStop;
- while (*p)
- {
- c=*p++;
- switch(c)
- {
- case '\t': spacesToNextTabStop =
- Config_getInt("TAB_SIZE") - (col%Config_getInt("TAB_SIZE"));
- t << Doxygen::spaces.left(spacesToNextTabStop);
- col+=spacesToNextTabStop;
- break;
- case '\n': t << "\n"; col=0;
- break;
- //case '\n': t << "<br>"; col=0;
- // break;
- case '\r': break;
- case '<': t << "&lt;"; col++;
- break;
- case '>': t << "&gt;"; col++;
- break;
- case '&': t << "&amp;"; col++;
- break;
- case '\'': t << "&#39;"; col++; // &apos; is not valid HTML
- break;
- case '"': t << "&quot;"; col++;
- break;
- //case ' ': t << "&#160;"; col++;
- // break;
- case '\\':
- if (*p=='<')
- { t << "&lt;"; p++; }
- else if (*p=='>')
- { t << "&gt;"; p++; }
- else
- t << "\\";
- col++;
- break;
- default: t << c;
- col++;
- break;
- }
- }
- }
-}
-
-void HtmlGenerator::writeChar(char c)
-{
- char cs[2];
- cs[0]=c;
- cs[1]=0;
- docify(cs);
-}
-
-//--- helper function for dynamic sections -------------------------
-
-static void startSectionHeader(FTextStream &t,
- const QCString &relPath,int sectionCount)
-{
- //t << "<!-- startSectionHeader -->";
- static bool dynamicSections = Config_getBool("HTML_DYNAMIC_SECTIONS");
- if (dynamicSections)
- {
- t << "<div id=\"dynsection-" << sectionCount << "\" "
- "onclick=\"return toggleVisibility(this)\" "
- "class=\"dynheader closed\" "
- "style=\"cursor:pointer;\">" << endl;
- t << " <img id=\"dynsection-" << sectionCount << "-trigger\" src=\""
- << relPath << "closed.png\" alt=\"+\"/> ";
- }
- else
- {
- t << "<div class=\"dynheader\">" << endl;
- }
-}
-
-static void endSectionHeader(FTextStream &t)
-{
- //t << "<!-- endSectionHeader -->";
- t << "</div>" << endl;
-}
-
-static void startSectionSummary(FTextStream &t,int sectionCount)
-{
- //t << "<!-- startSectionSummary -->";
- static bool dynamicSections = Config_getBool("HTML_DYNAMIC_SECTIONS");
- if (dynamicSections)
- {
- t << "<div id=\"dynsection-" << sectionCount << "-summary\" "
- "class=\"dynsummary\" "
- "style=\"display:block;\">" << endl;
- }
-}
-
-static void endSectionSummary(FTextStream &t)
-{
- //t << "<!-- endSectionSummary -->";
- static bool dynamicSections = Config_getBool("HTML_DYNAMIC_SECTIONS");
- if (dynamicSections)
- {
- t << "</div>" << endl;
- }
-}
-
-static void startSectionContent(FTextStream &t,int sectionCount)
-{
- //t << "<!-- startSectionContent -->";
- static bool dynamicSections = Config_getBool("HTML_DYNAMIC_SECTIONS");
- if (dynamicSections)
- {
- t << "<div id=\"dynsection-" << sectionCount << "-content\" "
- "class=\"dyncontent\" "
- "style=\"display:none;\">" << endl;
- }
- else
- {
- t << "<div class=\"dyncontent\">" << endl;
- }
-}
-
-static void endSectionContent(FTextStream &t)
-{
- //t << "<!-- endSectionContent -->";
- t << "</div>" << endl;
-}
-
-//----------------------------
-
-void HtmlGenerator::startClassDiagram()
-{
- startSectionHeader(t,relPath,m_sectionCount);
-}
-
-void HtmlGenerator::endClassDiagram(const ClassDiagram &d,
- const char *fileName,const char *name)
-{
- endSectionHeader(t);
- startSectionSummary(t,m_sectionCount);
- endSectionSummary(t);
- startSectionContent(t,m_sectionCount);
- t << " <div class=\"center\">" << endl;
- t << " <img src=\"";
- t << relPath << fileName << ".png\" usemap=\"#";
- docify(name);
- t << "_map\" alt=\"\"/>" << endl;
- t << " <map id=\"";
- docify(name);
- t << "_map\" name=\"";
- docify(name);
- t << "_map\">" << endl;
-
- d.writeImage(t,dir,relPath,fileName);
- t << " </div>";
- endSectionContent(t);
- m_sectionCount++;
-}
-
-
-void HtmlGenerator::startMemberList()
-{
- DBG_HTML(t << "<!-- startMemberList -->" << endl)
- if (Config_getBool("HTML_ALIGN_MEMBERS"))
- {
- }
- else
- {
- t << "<ul>" << endl;
- }
-}
-
-void HtmlGenerator::endMemberList()
-{
- DBG_HTML(t << "<!-- endMemberList -->" << endl)
- if (Config_getBool("HTML_ALIGN_MEMBERS"))
- {
- }
- else
- {
- t << "</ul>" << endl;
- }
-}
-
-// anonymous type:
-// 0 = single column right aligned
-// 1 = double column left aligned
-// 2 = single column left aligned
-void HtmlGenerator::startMemberItem(const char *anchor,int annoType)
-{
- DBG_HTML(t << "<!-- startMemberItem() -->" << endl)
- if (Config_getBool("HTML_ALIGN_MEMBERS"))
- {
- if (m_emptySection)
- {
- t << "<table class=\"memberdecls\">" << endl;
- m_emptySection=FALSE;
- }
- t << "<tr class=\"memitem:" << anchor << "\">";
- switch(annoType)
- {
- case 0: t << "<td class=\"memItemLeft\" align=\"right\" valign=\"top\">"; break;
- case 1: t << "<td class=\"memItemLeft\" >"; break;
- case 2: t << "<td class=\"memItemLeft\" valign=\"top\">"; break;
- default: t << "<td class=\"memTemplParams\" colspan=\"2\">"; break;
- }
- }
- else
- {
- t << "<li>";
- }
-}
-
-void HtmlGenerator::endMemberItem()
-{
- //DBG_HTML(t << "<!-- endMemberItem(" << (int)inGroup << "," << fileName << "," << headerName << " -->" << endl)
- if (Config_getBool("HTML_ALIGN_MEMBERS"))
- {
- t << "</td></tr>";
- }
- t << endl;
-}
-
-void HtmlGenerator::startMemberTemplateParams()
-{
-}
-
-void HtmlGenerator::endMemberTemplateParams(const char *anchor)
-{
- if (Config_getBool("HTML_ALIGN_MEMBERS"))
- {
- t << "</td></tr>" << endl;
- t << "<tr class=\"memitem:" << anchor << "\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">";
- }
-}
-
-
-void HtmlGenerator::insertMemberAlign(bool templ)
-{
- DBG_HTML(t << "<!-- insertMemberAlign -->" << endl)
- if (Config_getBool("HTML_ALIGN_MEMBERS"))
- {
- QCString className = templ ? "memTemplItemRight" : "memItemRight";
- t << "&#160;</td><td class=\"" << className << "\" valign=\"bottom\">";
- }
-}
-
-void HtmlGenerator::startMemberDescription(const char *anchor)
-{
- DBG_HTML(t << "<!-- startMemberDescription -->" << endl)
- if (Config_getBool("HTML_ALIGN_MEMBERS"))
- {
- if (m_emptySection)
- {
- t << "<table class=\"memberdecls\">" << endl;
- m_emptySection=FALSE;
- }
- t << "<tr class=\"memdesc:" << anchor << "\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">";
- }
- else
- {
- t << "<dl class=\"el\"><dd class=\"mdescRight\">";
- }
-}
-
-void HtmlGenerator::endMemberDescription()
-{
- DBG_HTML(t << "<!-- endMemberDescription -->" << endl)
- if (Config_getBool("HTML_ALIGN_MEMBERS"))
- {
- t << "<br/></td></tr>" << endl;
- }
- else
- {
- t << "<br/></dl>";
- }
-}
-
-void HtmlGenerator::startMemberSections()
-{
- DBG_HTML(t << "<!-- startMemberSections -->" << endl)
- if (Config_getBool("HTML_ALIGN_MEMBERS"))
- {
- m_emptySection=TRUE; // we postpone writing <table> until we actually
- // write a row to prevent empty tables, which
- // are not valid XHTML!
- }
-}
-
-void HtmlGenerator::endMemberSections()
-{
- DBG_HTML(t << "<!-- endMemberSections -->" << endl)
- if (Config_getBool("HTML_ALIGN_MEMBERS"))
- {
- if (!m_emptySection)
- {
- t << "</table>" << endl;
- }
- }
-}
-
-void HtmlGenerator::startMemberHeader(const char *anchor)
-{
- DBG_HTML(t << "<!-- startMemberHeader -->" << endl)
- if (Config_getBool("HTML_ALIGN_MEMBERS"))
- {
- if (m_emptySection)
- {
- t << "<table class=\"memberdecls\">" << endl;
- m_emptySection=FALSE;
- }
- t << "<tr><td colspan=\"2\"><h2>";
- }
- else
- {
- startGroupHeader(FALSE);
- }
- if (anchor)
- {
- t << "<a name=\"" << anchor << "\"></a>" << endl;
- }
-}
-
-void HtmlGenerator::endMemberHeader()
-{
- DBG_HTML(t << "<!-- endMemberHeader -->" << endl)
- if (Config_getBool("HTML_ALIGN_MEMBERS"))
- {
- t << "</h2></td></tr>" << endl;
- }
- else
- {
- endGroupHeader(FALSE);
- }
-}
-
-void HtmlGenerator::startMemberSubtitle()
-{
- DBG_HTML(t << "<!-- startMemberSubtitle -->" << endl)
- if (Config_getBool("HTML_ALIGN_MEMBERS")) t << "<tr><td class=\"ititle\" colspan=\"2\">";
-}
-
-void HtmlGenerator::endMemberSubtitle()
-{
- DBG_HTML(t << "<!-- endMemberSubtitle -->" << endl)
- if (Config_getBool("HTML_ALIGN_MEMBERS")) t << "</td></tr>" << endl;
-}
-
-void HtmlGenerator::startIndexList()
-{
- t << "<table>" << endl;
-}
-
-void HtmlGenerator::endIndexList()
-{
- t << "</table>" << endl;
-}
-
-void HtmlGenerator::startIndexKey()
-{
- // inserted 'class = ...', 02 jan 2002, jh
- t << " <tr><td class=\"indexkey\">";
-}
-
-void HtmlGenerator::endIndexKey()
-{
- t << "</td>";
-}
-
-void HtmlGenerator::startIndexValue(bool)
-{
- // inserted 'class = ...', 02 jan 2002, jh
- t << "<td class=\"indexvalue\">";
-}
-
-void HtmlGenerator::endIndexValue(const char *,bool)
-{
- t << "</td></tr>" << endl;
-}
-
-void HtmlGenerator::startMemberDocList()
-{
- DBG_HTML(t << "<!-- startMemberDocList -->" << endl;)
-}
-
-void HtmlGenerator::endMemberDocList()
-{
- DBG_HTML(t << "<!-- endMemberDocList -->" << endl;)
-}
-
-void HtmlGenerator::startMemberDoc(const char *,const char *,const char *,const char *,bool)
-{
- DBG_HTML(t << "<!-- startMemberDoc -->" << endl;)
-
- t << "\n<div class=\"memitem\">" << endl;
- t << "<div class=\"memproto\">" << endl;
-}
-
-void HtmlGenerator::startMemberDocPrefixItem()
-{
- DBG_HTML(t << "<!-- startMemberDocPrefixItem -->" << endl;)
- t << "<div class=\"memtemplate\">" << endl;
-}
-
-void HtmlGenerator::endMemberDocPrefixItem()
-{
- DBG_HTML(t << "<!-- endMemberDocPrefixItem -->" << endl;)
- t << "</div>" << endl;
-}
-
-void HtmlGenerator::startMemberDocName(bool /*align*/)
-{
- DBG_HTML(t << "<!-- startMemberDocName -->" << endl;)
-
- t << " <table class=\"memname\">" << endl;
-
- t << " <tr>" << endl;
- t << " <td class=\"memname\">";
-}
-
-void HtmlGenerator::endMemberDocName()
-{
- DBG_HTML(t << "<!-- endMemberDocName -->" << endl;)
- t << "</td>" << endl;
-}
-
-void HtmlGenerator::startParameterList(bool openBracket)
-{
- DBG_HTML(t << "<!-- startParameterList -->" << endl;)
- t << " <td>";
- if (openBracket) t << "(";
- t << "</td>" << endl;
-}
-
-void HtmlGenerator::startParameterType(bool first,const char *key)
-{
- if (first)
- {
- DBG_HTML(t << "<!-- startFirstParameterType -->" << endl;)
- t << " <td class=\"paramtype\">";
- }
- else
- {
- DBG_HTML(t << "<!-- startParameterType -->" << endl;)
- t << " <tr>" << endl;
- t << " <td class=\"paramkey\">";
- if (key) t << key;
- t << "</td>" << endl;
- t << " <td></td>" << endl;
- t << " <td class=\"paramtype\">";
- }
-}
-
-void HtmlGenerator::endParameterType()
-{
- DBG_HTML(t << "<!-- endParameterType -->" << endl;)
- t << "&#160;</td>" << endl;
-}
-
-void HtmlGenerator::startParameterName(bool /*oneArgOnly*/)
-{
- DBG_HTML(t << "<!-- startParameterName -->" << endl;)
- t << " <td class=\"paramname\">";
-}
-
-void HtmlGenerator::endParameterName(bool last,bool emptyList,bool closeBracket)
-{
- DBG_HTML(t << "<!-- endParameterName -->" << endl;)
- if (last)
- {
- if (emptyList)
- {
- if (closeBracket) t << "</td><td>)";
- t << "</td>" << endl;
- t << " <td>";
- }
- else
- {
- t << "&#160;</td>" << endl;
- t << " </tr>" << endl;
- t << " <tr>" << endl;
- t << " <td></td>" << endl;
- t << " <td>";
- if (closeBracket) t << ")";
- t << "</td>" << endl;
- t << " <td></td><td>";
- }
- }
- else
- {
- t << "</td>" << endl;
- t << " </tr>" << endl;
- }
-}
-
-void HtmlGenerator::endParameterList()
-{
- DBG_HTML(t << "<!-- endParameterList -->" << endl;)
- t << "</td>" << endl;
- t << " </tr>" << endl;
-}
-
-void HtmlGenerator::endMemberDoc(bool hasArgs)
-{
- DBG_HTML(t << "<!-- endMemberDoc -->" << endl;)
- if (!hasArgs)
- {
- t << " </tr>" << endl;
- }
- t << " </table>" << endl;
- t << "</div>" << endl;
-}
-
-void HtmlGenerator::startDotGraph()
-{
- startSectionHeader(t,relPath,m_sectionCount);
-}
-
-void HtmlGenerator::endDotGraph(const DotClassGraph &g)
-{
- endSectionHeader(t);
- startSectionSummary(t,m_sectionCount);
- endSectionSummary(t);
- startSectionContent(t,m_sectionCount);
-
- g.writeGraph(t,BITMAP,dir,fileName,relPath,TRUE,TRUE,m_sectionCount);
- if (Config_getBool("GENERATE_LEGEND"))
- {
- t << "<center><span class=\"legend\">[";
- startHtmlLink(relPath+"graph_legend"+Doxygen::htmlFileExtension);
- t << theTranslator->trLegend();
- endHtmlLink();
- t << "]</span></center>";
- }
-
- endSectionContent(t);
- m_sectionCount++;
-}
-
-void HtmlGenerator::startInclDepGraph()
-{
- startSectionHeader(t,relPath,m_sectionCount);
-}
-
-void HtmlGenerator::endInclDepGraph(const DotInclDepGraph &g)
-{
- endSectionHeader(t);
- startSectionSummary(t,m_sectionCount);
- endSectionSummary(t);
- startSectionContent(t,m_sectionCount);
-
- g.writeGraph(t,BITMAP,dir,fileName,relPath,TRUE,m_sectionCount);
-
- endSectionContent(t);
- m_sectionCount++;
-}
-
-void HtmlGenerator::startGroupCollaboration()
-{
- startSectionHeader(t,relPath,m_sectionCount);
-}
-
-void HtmlGenerator::endGroupCollaboration(const DotGroupCollaboration &g)
-{
- endSectionHeader(t);
- startSectionSummary(t,m_sectionCount);
- endSectionSummary(t);
- startSectionContent(t,m_sectionCount);
-
- g.writeGraph(t,BITMAP,dir,fileName,relPath,TRUE,m_sectionCount);
-
- endSectionContent(t);
- m_sectionCount++;
-}
-
-void HtmlGenerator::startCallGraph()
-{
- startSectionHeader(t,relPath,m_sectionCount);
-}
-
-void HtmlGenerator::endCallGraph(const DotCallGraph &g)
-{
- endSectionHeader(t);
- startSectionSummary(t,m_sectionCount);
- endSectionSummary(t);
- startSectionContent(t,m_sectionCount);
-
- g.writeGraph(t,BITMAP,dir,fileName,relPath,TRUE,m_sectionCount);
-
- endSectionContent(t);
- m_sectionCount++;
-}
-
-void HtmlGenerator::startDirDepGraph()
-{
- startSectionHeader(t,relPath,m_sectionCount);
-}
-
-void HtmlGenerator::endDirDepGraph(const DotDirDeps &g)
-{
- endSectionHeader(t);
- startSectionSummary(t,m_sectionCount);
- endSectionSummary(t);
- startSectionContent(t,m_sectionCount);
-
- g.writeGraph(t,BITMAP,dir,fileName,relPath,TRUE,m_sectionCount);
-
- endSectionContent(t);
- m_sectionCount++;
-}
-
-void HtmlGenerator::writeGraphicalHierarchy(const DotGfxHierarchyTable &g)
-{
- g.writeGraph(t,dir,fileName);
-}
-
-void HtmlGenerator::startMemberGroupHeader(bool)
-{
- t << "<tr><td colspan=\"2\"><div class=\"groupHeader\">";
-}
-
-void HtmlGenerator::endMemberGroupHeader()
-{
- t << "</div></td></tr>" << endl;
-}
-
-void HtmlGenerator::startMemberGroupDocs()
-{
- t << "<tr><td colspan=\"2\"><div class=\"groupText\">";
-}
-
-void HtmlGenerator::endMemberGroupDocs()
-{
- t << "</div></td></tr>" << endl;
-}
-
-void HtmlGenerator::startMemberGroup()
-{
-}
-
-void HtmlGenerator::endMemberGroup(bool)
-{
-}
-
-void HtmlGenerator::startIndent()
-{
- DBG_HTML(t << "<!-- startIndent -->" << endl;)
-
- t << "<div class=\"memdoc\">\n";
-}
-
-void HtmlGenerator::endIndent()
-{
- DBG_HTML(t << "<!-- endIndent -->" << endl;)
- t << endl << "</div>" << endl << "</div>" << endl;
-}
-
-void HtmlGenerator::addIndexItem(const char *,const char *)
-{
-}
-
-void HtmlGenerator::writeNonBreakableSpace(int n)
-{
- int i;
- for (i=0;i<n;i++)
- {
- t << "&#160;";
- }
-}
-
-void HtmlGenerator::writeLineNumber(const char *ref,const char *filename,
- const char *anchor,int l)
-{
- QCString lineNumber,lineAnchor;
- lineNumber.sprintf("%05d",l);
- lineAnchor.sprintf("l%05d",l);
-
- if (filename)
- {
- startCodeAnchor(lineAnchor);
- writeCodeLink(ref,filename,anchor,lineNumber,0);
- endCodeAnchor();
- }
- else
- {
- startCodeAnchor(lineAnchor);
- codify(lineNumber);
- endCodeAnchor();
- }
- codify(" ");
-}
-
-void HtmlGenerator::startSimpleSect(SectionTypes,
- const char *filename,const char *anchor,
- const char *title)
-{
- t << "<dl><dt><b>";
- if (filename)
- {
- writeObjectLink(0,filename,anchor,title);
- }
- else
- {
- docify(title);
- }
- t << "</b></dt>";
-}
-
-void HtmlGenerator::endSimpleSect()
-{
- t << "</dl>";
-}
-
-void HtmlGenerator::startParamList(ParamListTypes,
- const char *title)
-{
- t << "<dl><dt><b>";
- docify(title);
- t << "</b></dt>";
-}
-
-void HtmlGenerator::endParamList()
-{
- t << "</dl>";
-}
-
-void HtmlGenerator::printDoc(DocNode *n,const char *langExt)
-{
- HtmlDocVisitor *visitor = new HtmlDocVisitor(t,*this,langExt);
- n->accept(visitor);
- delete visitor;
-}
-
-//---------------- helpers for index generation -----------------------------
-
-static void startQuickIndexList(FTextStream &t,bool compact,bool topLevel=TRUE)
-{
- if (compact)
- {
- if (topLevel)
- {
- t << " <div id=\"navrow1\" class=\"tabs\">\n";
- }
- else
- {
- t << " <div id=\"navrow2\" class=\"tabs2\">\n";
- }
- t << " <ul class=\"tablist\">\n";
- }
- else
- {
- t << "<ul>";
- }
-}
-
-static void endQuickIndexList(FTextStream &t,bool compact)
-{
- if (compact)
- {
- t << " </ul>\n";
- t << " </div>\n";
- }
- else
- {
- t << "</ul>\n";
- }
-}
-
-static void startQuickIndexItem(FTextStream &t,const char *l,
- bool hl,bool /*compact*/,
- const QCString &relPath)
-{
- t << " <li";
- if (hl)
- {
- t << " class=\"current\"";
- }
- t << ">";
- if (l) t << "<a href=\"" << correctURL(l,relPath) << "\">";
- t << "<span>";
-}
-
-static void endQuickIndexItem(FTextStream &t,const char *l)
-{
- t << "</span>";
- if (l) t << "</a>";
- t << "</li>\n";
-}
-
-static QCString fixSpaces(const QCString &s)
-{
- return substitute(s," ","&#160;");
-}
-
-static bool quickLinkVisible(LayoutNavEntry::Kind kind)
-{
- switch (kind)
- {
- case LayoutNavEntry::MainPage: return TRUE;
- case LayoutNavEntry::User: return TRUE;
- case LayoutNavEntry::UserGroup: return TRUE;
- case LayoutNavEntry::Pages: return indexedPages>0;
- case LayoutNavEntry::Modules: return documentedGroups>0;
- case LayoutNavEntry::Namespaces: return documentedNamespaces>0;
- case LayoutNavEntry::NamespaceList: return documentedNamespaces>0;
- case LayoutNavEntry::NamespaceMembers: return documentedNamespaceMembers[NMHL_All]>0;
- case LayoutNavEntry::Classes: return annotatedClasses>0;
- case LayoutNavEntry::ClassList: return annotatedClasses>0;
- case LayoutNavEntry::ClassIndex: return annotatedClasses>0;
- case LayoutNavEntry::ClassHierarchy: return hierarchyClasses>0;
- case LayoutNavEntry::ClassMembers: return documentedClassMembers[CMHL_All]>0;
- case LayoutNavEntry::Files: return documentedHtmlFiles>0;
- case LayoutNavEntry::FileList: return documentedHtmlFiles>0;
- case LayoutNavEntry::FileGlobals: return documentedFileMembers[FMHL_All]>0;
- case LayoutNavEntry::Dirs: return documentedDirs>0;
- case LayoutNavEntry::Examples: return Doxygen::exampleSDict->count()>0;
- }
- return FALSE;
-}
-
-static void renderQuickLinksAsTree(FTextStream &t,const QCString &relPath,LayoutNavEntry *root)
-
-{
- QListIterator<LayoutNavEntry> li(root->children());
- LayoutNavEntry *entry;
- int count=0;
- for (li.toFirst();(entry=li.current());++li)
- {
- if (entry->visible() && quickLinkVisible(entry->kind())) count++;
- }
- if (count>0) // at least one item is visible
- {
- startQuickIndexList(t,FALSE);
- for (li.toFirst();(entry=li.current());++li)
- {
- if (entry->visible() && quickLinkVisible(entry->kind()))
- {
- QCString url = entry->url();
- t << "<li><a href=\"" << relPath << url << "\"><span>";
- t << fixSpaces(entry->title());
- t << "</span></a>\n";
- // recursive into child list
- renderQuickLinksAsTree(t,relPath,entry);
- t << "</li>";
- }
- }
- endQuickIndexList(t,FALSE);
- }
-}
-
-
-static void renderQuickLinksAsTabs(FTextStream &t,const QCString &relPath,
- LayoutNavEntry *hlEntry,LayoutNavEntry::Kind kind,
- bool highlightParent,bool highlightSearch)
-{
- if (hlEntry->parent()) // first draw the tabs for the parent of hlEntry
- {
- renderQuickLinksAsTabs(t,relPath,hlEntry->parent(),kind,highlightParent,highlightSearch);
- }
- if (hlEntry->parent() && hlEntry->parent()->children().count()>0) // draw tabs for row containing hlEntry
- {
- bool topLevel = hlEntry->parent()->parent()==0;
- QListIterator<LayoutNavEntry> li(hlEntry->parent()->children());
- LayoutNavEntry *entry;
-
- int count=0;
- for (li.toFirst();(entry=li.current());++li)
- {
- if (entry->visible() && quickLinkVisible(entry->kind())) count++;
- }
- if (count>0) // at least one item is visible
- {
- startQuickIndexList(t,TRUE,topLevel);
- for (li.toFirst();(entry=li.current());++li)
- {
- if (entry->visible() && quickLinkVisible(entry->kind()))
- {
- QCString url = entry->url();
- startQuickIndexItem(t,url,
- entry==hlEntry &&
- (entry->children().count()>0 ||
- (entry->kind()==kind && !highlightParent)
- ),
- TRUE,relPath);
- t << fixSpaces(entry->title());
- endQuickIndexItem(t,url);
- }
- }
- if (hlEntry->parent()==LayoutDocManager::instance().rootNavEntry()) // first row is special as it contains the search box
- {
- static bool searchEngine = Config_getBool("SEARCHENGINE");
- static bool serverBasedSearch = Config_getBool("SERVER_BASED_SEARCH");
- if (searchEngine)
- {
- t << " <li>\n";
- if (!serverBasedSearch) // pure client side search
- {
- writeClientSearchBox(t,relPath);
- t << " </li>\n";
- }
- else // server based search
- {
- writeServerSearchBox(t,relPath,highlightSearch);
- if (!highlightSearch)
- {
- t << " </li>\n";
- }
- }
- }
- if (!highlightSearch) // on the search page the index will be ended by the
- // page itself
- {
- endQuickIndexList(t,TRUE);
- }
- }
- else // normal case for other rows than first one
- {
- endQuickIndexList(t,TRUE);
- }
- }
- }
-}
-
-static void writeDefaultQuickLinks(FTextStream &t,bool compact,
- HighlightedItem hli,
- const char *file,
- const QCString &relPath)
-{
- LayoutNavEntry *root = LayoutDocManager::instance().rootNavEntry();
- LayoutNavEntry::Kind kind = (LayoutNavEntry::Kind)-1;
- LayoutNavEntry::Kind altKind = (LayoutNavEntry::Kind)-1; // fall back for the old layout file
- bool highlightParent=FALSE;
- switch (hli) // map HLI enums to LayoutNavEntry::Kind enums
- {
- case HLI_Main: kind = LayoutNavEntry::MainPage; break;
- case HLI_Modules: kind = LayoutNavEntry::Modules; break;
- case HLI_Directories: kind = LayoutNavEntry::Dirs; break;
- case HLI_Namespaces: kind = LayoutNavEntry::NamespaceList; altKind = LayoutNavEntry::Namespaces; break;
- case HLI_Hierarchy: kind = LayoutNavEntry::ClassHierarchy; break;
- case HLI_Classes: kind = LayoutNavEntry::ClassIndex; altKind = LayoutNavEntry::Classes; break;
- case HLI_Annotated: kind = LayoutNavEntry::ClassList; altKind = LayoutNavEntry::Classes; break;
- case HLI_Files: kind = LayoutNavEntry::FileList; altKind = LayoutNavEntry::Files; break;
- case HLI_NamespaceMembers: kind = LayoutNavEntry::NamespaceMembers; break;
- case HLI_Functions: kind = LayoutNavEntry::ClassMembers; break;
- case HLI_Globals: kind = LayoutNavEntry::FileGlobals; break;
- case HLI_Pages: kind = LayoutNavEntry::Pages; break;
- case HLI_Examples: kind = LayoutNavEntry::Examples; break;
- case HLI_UserGroup: kind = LayoutNavEntry::UserGroup; break;
- case HLI_ClassVisible: kind = LayoutNavEntry::ClassList; altKind = LayoutNavEntry::Classes;
- highlightParent = TRUE; break;
- case HLI_NamespaceVisible: kind = LayoutNavEntry::NamespaceList; altKind = LayoutNavEntry::Namespaces;
- highlightParent = TRUE; break;
- case HLI_FileVisible: kind = LayoutNavEntry::FileList; altKind = LayoutNavEntry::Files;
- highlightParent = TRUE; break;
- case HLI_None: break;
- case HLI_Search: break;
- }
-
- if (compact)
- {
- // find highlighted index item
- LayoutNavEntry *hlEntry = root->find(kind,kind==LayoutNavEntry::UserGroup ? file : 0);
- if (!hlEntry && altKind!=(LayoutNavEntry::Kind)-1) { hlEntry=root->find(altKind); kind=altKind; }
- if (!hlEntry) // highlighted item not found in the index! -> just show the level 1 index...
- {
- highlightParent=TRUE;
- hlEntry = root->children().getFirst();
- if (hlEntry==0)
- {
- return; // argl, empty index!
- }
- }
- if (kind==LayoutNavEntry::UserGroup)
- {
- LayoutNavEntry *e = hlEntry->children().getFirst();
- if (e)
- {
- hlEntry = e;
- }
- }
- renderQuickLinksAsTabs(t,relPath,hlEntry,kind,highlightParent,hli==HLI_Search);
- }
- else
- {
- renderQuickLinksAsTree(t,relPath,root);
- }
-}
-
-void HtmlGenerator::endQuickIndices()
-{
- t << "</div>" << endl;
-}
-
-QCString HtmlGenerator::writeSplitBarAsString(const char *name,const char *relpath)
-{
- static bool generateTreeView = Config_getBool("GENERATE_TREEVIEW");
- QCString result;
- // write split bar
- if (generateTreeView)
- {
- result = QCString(
- "<div id=\"side-nav\" class=\"ui-resizable side-nav-resizable\">\n"
- " <div id=\"nav-tree\">\n"
- " <div id=\"nav-tree-contents\">\n"
- " </div>\n"
- " </div>\n"
- " <div id=\"splitbar\" style=\"-moz-user-select:none;\" \n"
- " class=\"ui-resizable-handle\">\n"
- " </div>\n"
- "</div>\n"
- "<script type=\"text/javascript\">\n"
- " initNavTree('") +
- QCString(name) + Doxygen::htmlFileExtension +
- QCString("','") + relpath +
- QCString("');\n"
- "</script>\n"
- "<div id=\"doc-content\">\n");
- }
- return result;
-}
-
-void HtmlGenerator::writeSplitBar(const char *name)
-{
- t << writeSplitBarAsString(name,relPath);
-}
-
-void HtmlGenerator::startContents()
-{
- t << "<div class=\"contents\">" << endl;
-}
-
-void HtmlGenerator::endContents()
-{
- t << "</div><!-- contents -->" << endl;
-}
-
-void HtmlGenerator::writeQuickLinks(bool compact,HighlightedItem hli,const char *file)
-{
- writeDefaultQuickLinks(t,compact,hli,file,relPath);
-}
-
-// PHP based search script
-void HtmlGenerator::writeSearchPage()
-{
- static bool generateTreeView = Config_getBool("GENERATE_TREEVIEW");
- static bool disableIndex = Config_getBool("DISABLE_INDEX");
- static QCString projectName = Config_getString("PROJECT_NAME");
-
- // OPENSEARCH_PROVIDER {
- QCString configFileName = Config_getString("HTML_OUTPUT")+"/search-config.php";
- QFile cf(configFileName);
- if (cf.open(IO_WriteOnly))
- {
- FTextStream t(&cf);
- t << "<script language=\"php\">\n\n";
- t << "$config = array(\n";
- t << " 'PROJECT_NAME' => \"" << projectName << "\",\n";
- t << " 'GENERATE_TREEVIEW' => " << (generateTreeView?"true":"false") << ",\n";
- t << " 'DISABLE_INDEX' => " << (disableIndex?"true":"false") << ",\n";
- t << ");\n\n";
- t << "$translator = array(\n";
- t << " 'search_results_title' => \"" << theTranslator->trSearchResultsTitle() << "\",\n";
- t << " 'search_results' => array(\n";
- t << " 0 => \"" << theTranslator->trSearchResults(0) << "\",\n";
- t << " 1 => \"" << theTranslator->trSearchResults(1) << "\",\n";
- t << " 2 => \"" << substitute(theTranslator->trSearchResults(2), "$", "\\$") << "\",\n";
- t << " ),\n";
- t << " 'search_matches' => \"" << theTranslator->trSearchMatches() << "\",\n";
- t << " 'search' => \"" << theTranslator->trSearch() << "\",\n";
- t << " 'split_bar' => \"" << substitute(substitute(writeSplitBarAsString("",""), "\"","\\\""), "\n","\\n") << "\",\n";
- t << " 'logo' => \"" << substitute(substitute(writeLogoAsString(""), "\"","\\\""), "\n","\\n") << "\",\n";
- t << ");\n\n";
- t << "</script>\n";
- }
-
- QCString functionsFileName = Config_getString("HTML_OUTPUT")+"/search-functions.php";
- QFile ff(functionsFileName);
- if (ff.open(IO_WriteOnly))
- {
- FTextStream t(&ff);
- // Write stuff from search_functions.php source file...
- t << search_functions_script;
- }
-
- QCString opensearchFileName = Config_getString("HTML_OUTPUT")+"/search-opensearch.php";
- QFile of(opensearchFileName);
- if (of.open(IO_WriteOnly))
- {
- FTextStream t(&of);
- // Write stuff from search_opensearch.php source file...
- t << search_opensearch_script;
- }
- // OPENSEARCH_PROVIDER }
-
- QCString fileName = Config_getString("HTML_OUTPUT")+"/search.php";
- QFile f(fileName);
- if (f.open(IO_WriteOnly))
- {
- FTextStream t(&f);
- t << substituteHtmlKeywords(g_header,"Search","");
-
- t << "<!-- " << theTranslator->trGeneratedBy() << " Doxygen "
- << versionString << " -->" << endl;
- //static bool generateTreeView = Config_getBool("GENERATE_TREEVIEW");
- static bool searchEngine = Config_getBool("SEARCHENGINE");
- if (searchEngine /* && !generateTreeView*/)
- {
- t << "<script type=\"text/javascript\">\n";
- t << "var searchBox = new SearchBox(\"searchBox\", \""
- << "search\",false,'" << theTranslator->trSearch() << "');\n";
- t << "</script>\n";
- }
- if (!Config_getBool("DISABLE_INDEX"))
- {
- writeDefaultQuickLinks(t,TRUE,HLI_Search,0,"");
- }
- else
- {
- //t << "&#160;\n<div class=\"qindex\">\n";
- //t << " <form class=\"search\" action=\"search.php\" "
- // << "method=\"get\">\n";
- t << "</div>" << endl;
- }
-
- t << "<script language=\"php\">\n";
- t << "require_once \"search-functions.php\";\n";
- t << "main();\n";
- t << "</script>\n";
-
- writeSearchInfo(t,"");
-
- // Write empty navigation path, to make footer connect properly
- if (generateTreeView)
- {
- t << "</div><div id=\"nav-path\" class=\"navpath\">\n";
- t << " <ul>\n";
- }
-
- writePageFooter(t,"Search","");
- }
- QCString scriptName = Config_getString("HTML_OUTPUT")+"/search/search.js";
- QFile sf(scriptName);
- if (sf.open(IO_WriteOnly))
- {
- FTextStream t(&sf);
- t << "function SearchBox(name, resultsPath, inFrame, label)\n";
- t << "{\n";
- t << " this.searchLabel = label;\n";
- t << " this.DOMSearchField = function()\n";
- t << " { return document.getElementById(\"MSearchField\"); }\n";
- t << " this.DOMSearchBox = function()\n";
- t << " { return document.getElementById(\"MSearchBox\"); }\n";
- t << " this.OnSearchFieldFocus = function(isActive)\n";
- t << " {\n";
- t << " if (isActive)\n";
- t << " {\n";
- t << " this.DOMSearchBox().className = 'MSearchBoxActive';\n";
- t << " var searchField = this.DOMSearchField();\n";
- t << " if (searchField.value == this.searchLabel) \n";
- t << " {\n";
- t << " searchField.value = '';\n";
- t << " }\n";
- t << " }\n";
- t << " else\n";
- t << " {\n";
- t << " this.DOMSearchBox().className = 'MSearchBoxInactive';\n";
- t << " this.DOMSearchField().value = this.searchLabel;\n";
- t << " }\n";
- t << " }\n";
- t << "}\n";
- }
- else
- {
- err("Failed to open file '%s' for writing...\n",scriptName.data());
- }
-
-}
-
-void HtmlGenerator::startConstraintList(const char *header)
-{
- t << "<div class=\"typeconstraint\">" << endl;
- t << "<dl><dt><b>" << header << "</b><dt><dd>" << endl;
- t << "<table border=\"0\" cellspacing=\"2\" cellpadding=\"0\">" << endl;
-}
-
-void HtmlGenerator::startConstraintParam()
-{
- t << "<tr><td valign=\"top\"><em>";
-}
-
-void HtmlGenerator::endConstraintParam()
-{
- t << "</em></td>";
-}
-
-void HtmlGenerator::startConstraintType()
-{
- t << "<td>&#160;:</td><td valign=\"top\"><em>";
-}
-
-void HtmlGenerator::endConstraintType()
-{
- t << "</em></td>";
-}
-
-void HtmlGenerator::startConstraintDocs()
-{
- t << "<td>&#160;";
-}
-
-void HtmlGenerator::endConstraintDocs()
-{
- t << "</td></tr>" << endl;
-}
-
-void HtmlGenerator::endConstraintList()
-{
- t << "</table>" << endl;
- t << "</dl>" << endl;
- t << "</div>" << endl;
-}
-
-void HtmlGenerator::lineBreak(const char *style)
-{
- if (style)
- {
- t << "<br class=\"" << style << "\"/>" << endl;
- }
- else
- {
- t << "<br/>" << endl;
- }
-}
-
-void HtmlGenerator::startHeaderSection()
-{
- t << "<div class=\"header\">" << endl;
-}
-
-void HtmlGenerator::startTitleHead(const char *)
-{
- t << " <div class=\"headertitle\">" << endl;
- startTitle();
-}
-
-void HtmlGenerator::endTitleHead(const char *,const char *)
-{
- endTitle();
- t << " </div>" << endl;
-}
-
-void HtmlGenerator::endHeaderSection()
-{
- t << "</div><!--header-->" << endl;
-}
-
-void HtmlGenerator::startInlineHeader()
-{
- if (m_emptySection)
- {
- t << "<table class=\"memberdecls\">" << endl;
- m_emptySection=FALSE;
- }
- t << "<tr><td colspan=\"2\"><h3>";
-}
-
-void HtmlGenerator::endInlineHeader()
-{
- t << "</h3></td></tr>" << endl;
-}
-
-void HtmlGenerator::startMemberDocSimple()
-{
- DBG_HTML(t << "<!-- startMemberDocSimple -->" << endl;)
- t << "<table class=\"fieldtable\">" << endl;
- t << "<tr><th colspan=\"3\">" << theTranslator->trCompoundMembers() << "</th></tr>" << endl;
-}
-
-void HtmlGenerator::endMemberDocSimple()
-{
- DBG_HTML(t << "<!-- endMemberDocSimple -->" << endl;)
- t << "</table>" << endl;
-}
-
-void HtmlGenerator::startInlineMemberType()
-{
- DBG_HTML(t << "<!-- startInlineMemberType -->" << endl;)
- t << "<tr><td class=\"fieldtype\">" << endl;
-}
-
-void HtmlGenerator::endInlineMemberType()
-{
- DBG_HTML(t << "<!-- endInlineMemberType -->" << endl;)
- t << "</td>" << endl;
-}
-
-void HtmlGenerator::startInlineMemberName()
-{
- DBG_HTML(t << "<!-- startInlineMemberName -->" << endl;)
- t << "<td class=\"fieldname\">" << endl;
-}
-
-void HtmlGenerator::endInlineMemberName()
-{
- DBG_HTML(t << "<!-- endInlineMemberName -->" << endl;)
- t << "</td>" << endl;
-}
-
-void HtmlGenerator::startInlineMemberDoc()
-{
- DBG_HTML(t << "<!-- startInlineMemberDoc -->" << endl;)
- t << "<td class=\"fielddoc\">" << endl;
-}
-
-void HtmlGenerator::endInlineMemberDoc()
-{
- DBG_HTML(t << "<!-- endInlineMemberDoc -->" << endl;)
- t << "</td></tr>" << endl;
-}
-
diff --git a/trunk/src/htmlgen.h b/trunk/src/htmlgen.h
deleted file mode 100644
index dbbdc11..0000000
--- a/trunk/src/htmlgen.h
+++ /dev/null
@@ -1,290 +0,0 @@
-/******************************************************************************
- *
- *
- *
- * Copyright (C) 1997-2012 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.
- *
- */
-
-#ifndef HTMLGEN_H
-#define HTMLGEN_H
-
-#include "qtbc.h"
-#include "outputgen.h"
-
-#define PREFRAG_START "<div class=\"fragment\"><pre class=\"fragment\">"
-#define PREFRAG_END "</pre></div>"
-
-class QFile;
-class FTextStream;
-
-class HtmlGenerator : public OutputGenerator
-{
- public:
- HtmlGenerator();
- virtual ~HtmlGenerator();
- static void init();
- static void writeStyleSheetFile(QFile &f);
- static void writeHeaderFile(QFile &f, const char *cssname);
- static void writeFooterFile(QFile &f);
- static void writeTabData();
- static void writeSearchInfo(FTextStream &t,const QCString &relPath);
- static void writeSearchData(const char *dir);
- static void writeSearchPage();
- static QCString writeLogoAsString(const char *path);
- static QCString writeSplitBarAsString(const char *name,const char *relpath);
-
- void enable()
- { if (genStack->top()) active=*genStack->top(); else active=TRUE; }
- void disable() { active=FALSE; }
- void enableIf(OutputType o) { if (o==Html) enable(); }
- void disableIf(OutputType o) { if (o==Html) disable(); }
- void disableIfNot(OutputType o) { if (o!=Html) disable(); }
- bool isEnabled(OutputType o) { return (o==Html && active); }
- OutputGenerator *get(OutputType o) { return (o==Html) ? this : 0; }
-
- void printDoc(DocNode *,const char *);
-
- void startFile(const char *name,const char *manName,const char *title);
- void writeFooter();
- void endFile();
- void clearBuffer();
- void writeSearchInfo();
-
- void startIndexSection(IndexSections) {}
- void endIndexSection(IndexSections) {}
- void writePageLink(const char *,bool) {}
- void startProjectNumber();
- void endProjectNumber();
- void writeStyleInfo(int part);
- void startTitleHead(const char *);
- void endTitleHead(const char *,const char *);
- void startTitle() { t << "<div class=\"title\">"; }
- void endTitle() { t << "</div>"; }
-
- void startParagraph();
- void endParagraph();
- void writeString(const char *text);
- void startIndexListItem();
- void endIndexListItem();
- void startIndexList();
- void endIndexList();
- void startIndexKey();
- void endIndexKey();
- void startIndexValue(bool);
- void endIndexValue(const char *,bool);
- void startItemList() { t << "<ul>" << endl; }
- void endItemList() { t << "</ul>" << endl; }
- void startIndexItem(const char *ref,const char *file);
- void endIndexItem(const char *ref,const char *file);
- void docify(const char *text);
- void codify(const char *text);
- void writeObjectLink(const char *ref,const char *file,
- const char *anchor,const char *name);
- void writeCodeLink(const char *ref,const char *file,
- const char *anchor,const char *name,
- const char *tooltip);
- void startTextLink(const char *file,const char *anchor);
- void endTextLink();
- void startHtmlLink(const char *url);
- void endHtmlLink();
- void startTypewriter() { t << "<code>"; }
- void endTypewriter() { t << "</code>"; }
- void startGroupHeader(int);
- void endGroupHeader(int);
- void startItemListItem() { t << "<li>"; }
- void endItemListItem() { t << "</li>\n"; }
-
- void startMemberSections();
- void endMemberSections();
- void startHeaderSection();
- void endHeaderSection();
- void startMemberHeader(const char *);
- void endMemberHeader();
- void startMemberSubtitle();
- void endMemberSubtitle();
- void startMemberDocList();
- void endMemberDocList();
- void startMemberList();
- void endMemberList();
- void startInlineHeader();
- void endInlineHeader();
- void startAnonTypeScope(int) {}
- void endAnonTypeScope(int) {}
- void startMemberItem(const char *anchor,int);
- void endMemberItem();
- void startMemberTemplateParams();
- void endMemberTemplateParams(const char *anchor);
-
- void startMemberGroupHeader(bool);
- void endMemberGroupHeader();
- void startMemberGroupDocs();
- void endMemberGroupDocs();
- void startMemberGroup();
- void endMemberGroup(bool);
-
- void insertMemberAlign(bool);
- void startMemberDescription(const char *anchor);
- void endMemberDescription();
-
- void writeRuler() { t << "<hr/>"; }
- void writeAnchor(const char *,const char *name)
- { t << "<a name=\"" << name <<"\" id=\"" << name << "\"></a>"; }
- void startCodeFragment() { t << PREFRAG_START; }
- void endCodeFragment() { t << PREFRAG_END; }
- void writeLineNumber(const char *,const char *,const char *,int);
- void startCodeLine() { col=0; }
- void endCodeLine() { codify("\n"); }
- void startEmphasis() { t << "<em>"; }
- void endEmphasis() { t << "</em>"; }
- void startBold() { t << "<b>"; }
- void endBold() { t << "</b>"; }
- void startDescription() { t << endl << "<dl>" << endl; }
- void endDescription() { t << endl << "</dl>\n" << endl; }
- void startDescItem() { t << "<dt>"; }
- void endDescItem() { t << "</dt>"; }
- void startDescForItem() { t << "<dd>"; }
- void endDescForItem() { t << "</dd>\n"; }
- void lineBreak(const char *style);
- void writeChar(char c);
- void startMemberDoc(const char *,const char *,const char *,const char *,bool);
- void endMemberDoc(bool);
- void startDoxyAnchor(const char *fName,const char *manName,
- const char *anchor,const char *name,
- const char *args);
- void endDoxyAnchor(const char *fName,const char *anchor);
- void startCodeAnchor(const char *label) { t << "<a name=\"" << label << "\"></a>"; }
- void endCodeAnchor() { }
- void writeLatexSpacing() {}
- void writeStartAnnoItem(const char *type,const char *file,
- const char *path,const char *name);
- void writeEndAnnoItem(const char *) { t << endl; }
- void startSubsection() { t << "<h2>"; }
- void endSubsection() { t << "</h2>" << endl; }
- void startSubsubsection() { t << "<h3>"; }
- void endSubsubsection() { t << "</h3>" << endl; }
- void startCenter() { t << "<center>" << endl; }
- void endCenter() { t << "</center>" << endl; }
- void startSmall() { t << "<small>" << endl; }
- void endSmall() { t << "</small>" << endl; }
- //void startDescList(SectionTypes) { t << "<dl compact><dt><b>" << endl; }
- //void endDescList() { t << "</dl>"; }
- void startSimpleSect(SectionTypes,const char *,const char *,const char *);
- void endSimpleSect();
- void startParamList(ParamListTypes,const char *);
- void endParamList();
- //void writeDescItem() { t << "<dd>" << endl; }
- void startSection(const char *,const char *,SectionInfo::SectionType);
- void endSection(const char *,SectionInfo::SectionType);
- void addIndexItem(const char *,const char *);
- void startIndent();
- void endIndent();
- void writeSynopsis() {}
- void startClassDiagram();
- void endClassDiagram(const ClassDiagram &,const char *,const char *);
- void startPageRef() {}
- void endPageRef(const char *,const char *) {}
- void startQuickIndices() {}
- void endQuickIndices();
- void writeSplitBar(const char *name);
- void writeLogo();
- void writeQuickLinks(bool compact,HighlightedItem hli,const char *file);
- void startContents();
- void endContents();
- void writeNonBreakableSpace(int);
-
- void startDescTable()
- { t << "<table border=\"0\" cellspacing=\"2\" cellpadding=\"0\">" << endl; }
- void endDescTable()
- { t << "</table>" << endl; }
- void startDescTableTitle()
- { t << "<tr><td valign=\"top\"><em>"; }
- void endDescTableTitle()
- { t << "</em>&nbsp;</td>"; }
- void startDescTableData()
- { t << "<td>" << endl; }
- void endDescTableData()
- { t << "</td></tr>" << endl; }
-
- void startDotGraph();
- void endDotGraph(const DotClassGraph &g);
- void startInclDepGraph();
- void endInclDepGraph(const DotInclDepGraph &g);
- void startGroupCollaboration();
- void endGroupCollaboration(const DotGroupCollaboration &g);
- void startCallGraph();
- void endCallGraph(const DotCallGraph &g);
- void startDirDepGraph();
- void endDirDepGraph(const DotDirDeps &g);
- void writeGraphicalHierarchy(const DotGfxHierarchyTable &g);
-
- void startTextBlock(bool)
- { t << "<div class=\"textblock\">"; }
- void endTextBlock(bool)
- { t << "</div>"; }
- void lastIndexPage() {}
-
- void startMemberDocPrefixItem();
- void endMemberDocPrefixItem();
- void startMemberDocName(bool);
- void endMemberDocName();
- void startParameterType(bool first,const char *key);
- void endParameterType();
- void startParameterName(bool);
- void endParameterName(bool last,bool emptyList,bool closeBracket);
- void startParameterList(bool);
- void endParameterList();
-
- void startConstraintList(const char *);
- void startConstraintParam();
- void endConstraintParam();
- void startConstraintType();
- void endConstraintType();
- void startConstraintDocs();
- void endConstraintDocs();
- void endConstraintList();
-
- void startMemberDocSimple();
- void endMemberDocSimple();
- void startInlineMemberType();
- void endInlineMemberType();
- void startInlineMemberName();
- void endInlineMemberName();
- void startInlineMemberDoc();
- void endInlineMemberDoc();
-
- void startFontClass(const char *s) { t << "<span class=\"" << s << "\">"; }
- void endFontClass() { t << "</span>"; }
-
-
- void writeCodeAnchor(const char *anchor)
- { t << "<a name=\"" << anchor << "\"></a>"; }
- void linkableSymbol(int,const char *,Definition *,Definition *) {}
-
- //static void generateSectionImages();
-
- private:
- static void writePageFooter(FTextStream &t,const QCString &,const QCString &);
- QCString lastTitle;
- QCString lastFile;
- QCString relPath;
- void docify(const char *text,bool inHtmlComment);
-
- HtmlGenerator &operator=(const HtmlGenerator &g);
- HtmlGenerator(const HtmlGenerator &g);
-
- int col;
- int m_sectionCount;
- bool m_emptySection;
-};
-
-#endif
diff --git a/trunk/src/htmlhelp.cpp b/trunk/src/htmlhelp.cpp
deleted file mode 100644
index af06445..0000000
--- a/trunk/src/htmlhelp.cpp
+++ /dev/null
@@ -1,708 +0,0 @@
-/******************************************************************************
- *
- *
- *
- * Copyright (C) 1997-2012 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.
- *
- * The original version of this file is largely based on a contribution from
- * Harm van der Heijden.
- */
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <qlist.h>
-#include <qdict.h>
-#include <qregexp.h>
-#include "qtextcodec.h"
-#include "sortdict.h"
-
-#include "htmlhelp.h"
-#include "config.h"
-#include "message.h"
-#include "doxygen.h"
-#include "language.h"
-#include "portable.h"
-
-//----------------------------------------------------------------------------
-
-struct IndexField
-{
- QCString name;
- QCString url;
- QCString anchor;
- bool link;
- bool reversed;
-};
-
-class IndexFieldSDict : public SDict<IndexField>
-{
- public:
- IndexFieldSDict() : SDict<IndexField>(17) {}
- ~IndexFieldSDict() {}
- int compareItems(GCI item1, GCI item2)
- {
- return stricmp(((IndexField *)item1)->name,((IndexField *)item2)->name);
- }
-};
-
-/*! A helper class for HtmlHelp that manages a two level index in
- * alphabetical order
- */
-class HtmlHelpIndex
-{
- public:
- HtmlHelpIndex(HtmlHelp *help);
- ~HtmlHelpIndex();
- void addItem(const char *first,const char *second,
- const char *url, const char *anchor,
- bool hasLink,bool reversed);
- void writeFields(FTextStream &t);
- private:
- IndexFieldSDict *dict;
- HtmlHelp *m_help;
-};
-
-/*! Constructs a new HtmlHelp index */
-HtmlHelpIndex::HtmlHelpIndex(HtmlHelp *help) : m_help(help)
-{
- dict = new IndexFieldSDict;
- dict->setAutoDelete(TRUE);
-}
-
-/*! Destroys the HtmlHelp index */
-HtmlHelpIndex::~HtmlHelpIndex()
-{
- delete dict;
-}
-
-/*! Stores an item in the index if it is not already present.
- * Items are stored in alphetical order, by sorting on the
- * concatenation of \a level1 and \a level2 (if present).
- *
- * \param level1 the string at level 1 in the index.
- * \param level2 the string at level 2 in the index (or 0 if not applicable).
- * \param url the url of the documentation (without .html extension).
- * \param anchor the anchor of the documentation within the page.
- * \param hasLink if true, the url (without anchor) can be used in the
- * level1 item, when writing the header of a list of level2 items.
- * \param reversed TRUE if level1 is the member name and level2 the compound
- * name.
- */
-void HtmlHelpIndex::addItem(const char *level1,const char *level2,
- const char *url,const char *anchor,bool hasLink,
- bool reversed)
-{
- QCString key = level1;
- if (level2) key+= (QCString)"?" + level2;
- if (key.find(QRegExp("@[0-9]+"))!=-1) // skip anonymous stuff
- {
- return;
- }
- if (dict->find(key)==0) // new key
- {
- //printf(">>>>>>>>> HtmlHelpIndex::addItem(%s,%s,%s,%s)\n",
- // level1,level2,url,anchor);
- IndexField *f = new IndexField;
- f->name = key;
- f->url = url;
- f->anchor = anchor;
- f->link = hasLink;
- f->reversed = reversed;
- dict->append(key,f);
- }
-}
-
-/*! Writes the sorted list of index items into a html like list.
- *
- * An list of calls with <code>name = level1,level2</code> as follows:
- * <pre>
- * a1,b1
- * a1,b2
- * a2,b1
- * a2,b2
- * a3
- * a4,b1
- * </pre>
- *
- * Will result in the following list:
- *
- * <pre>
- * a1 -> link to url if hasLink==TRUE
- * b1 -> link to url#anchor
- * b2 -> link to url#anchor
- * a2 -> link to url if hasLink==TRUE
- * b1 -> link to url#anchor
- * b2 -> link to url#anchor
- * a3 -> link to url if hasLink==TRUE
- * a4 -> link to url if hasLink==TRUE
- * b1 -> link to url#anchor
- * </pre>
- */
-void HtmlHelpIndex::writeFields(FTextStream &t)
-{
- dict->sort();
- IndexFieldSDict::Iterator ifli(*dict);
- IndexField *f;
- QCString lastLevel1;
- bool level2Started=FALSE;
- for (;(f=ifli.current());++ifli)
- {
- QCString level1,level2;
- int i;
- if ((i=f->name.find('?'))!=-1)
- {
- level1 = f->name.left(i);
- level2 = f->name.right(f->name.length()-i-1);
- }
- else
- {
- level1 = f->name.copy();
- }
-
- if (level1!=lastLevel1)
- { // finish old list at level 2
- if (level2Started) t << " </UL>" << endl;
- level2Started=FALSE;
-
- // <Antony>
- // Added this code so that an item with only one subitem is written
- // without any subitem.
- // For example:
- // a1, b1 -> will create only a1, not separate subitem for b1
- // a2, b2
- // a2, b3
- QCString nextLevel1;
- IndexField* fnext = ++ifli;
- if (fnext)
- {
- nextLevel1 = fnext->name.left(fnext->name.find('?'));
- --ifli;
- }
- if (level1 != nextLevel1)
- {
- level2 = "";
- }
- // </Antony>
-
- if (level2.isEmpty())
- {
- t << " <LI><OBJECT type=\"text/sitemap\">";
- t << "<param name=\"Local\" value=\"" << f->url << Doxygen::htmlFileExtension;
- if (!f->anchor.isEmpty() && f->reversed) t << "#" << f->anchor;
- t << "\">";
- t << "<param name=\"Name\" value=\"" << m_help->recode(level1) << "\">"
- "</OBJECT>\n";
- }
- else
- {
- if (f->link)
- {
- t << " <LI><OBJECT type=\"text/sitemap\">";
- t << "<param name=\"Local\" value=\"" << f->url << Doxygen::htmlFileExtension;
- if (!f->anchor.isEmpty() && f->reversed) t << "#" << f->anchor;
- t << "\">";
- t << "<param name=\"Name\" value=\"" << m_help->recode(level1) << "\">"
- "</OBJECT>\n";
- }
- else
- {
- t << " <LI><OBJECT type=\"text/sitemap\">";
- t << "<param name=\"See Also\" value=\"" << m_help->recode(level1) << "\">";
- t << "<param name=\"Name\" value=\"" << m_help->recode(level1) << "\">"
- "</OBJECT>\n";
- }
- }
- }
- if (!level2Started && !level2.isEmpty())
- { // start new list at level 2
- t << " <UL>" << endl;
- level2Started=TRUE;
- }
- else if (level2Started && level2.isEmpty())
- { // end list at level 2
- t << " </UL>" << endl;
- level2Started=FALSE;
- }
- if (level2Started)
- {
- t << " <LI><OBJECT type=\"text/sitemap\">";
- t << "<param name=\"Local\" value=\"" << f->url << Doxygen::htmlFileExtension;
- if (!f->anchor.isEmpty()) t << "#" << f->anchor;
- t << "\">";
- t << "<param name=\"Name\" value=\"" << m_help->recode(level2) << "\">"
- "</OBJECT>\n";
- }
- lastLevel1 = level1.copy();
- }
- if (level2Started) t << " </UL>" << endl;
-}
-
-//----------------------------------------------------------------------------
-
-HtmlHelp *HtmlHelp::theInstance = 0;
-
-/*! Constructs an html object.
- * The object has to be \link initialize() initialized\endlink before it can
- * be used.
- */
-HtmlHelp::HtmlHelp() : indexFileDict(1009)
-{
- /* initial depth */
- dc = 0;
- cf = kf = 0;
- index = new HtmlHelpIndex(this);
- m_fromUtf8 = (void *)(-1);
-}
-
-HtmlHelp::~HtmlHelp()
-{
- if (m_fromUtf8!=(void *)(-1)) portable_iconv_close(m_fromUtf8);
-}
-#if 0
-/*! return a reference to the one and only instance of this class.
- */
-HtmlHelp *HtmlHelp::getInstance()
-{
- if (theInstance==0) theInstance = new HtmlHelp;
- return theInstance;
-}
-#endif
-
-static QDict<QCString> s_languageDict;
-
-/*! This will create a contents file (index.hhc) and a index file (index.hhk)
- * and write the header of those files.
- * It also creates a project file (index.hhp)
- * \sa finalize()
- */
-void HtmlHelp::initialize()
-{
- const char *str = Config_getString("CHM_INDEX_ENCODING");
- if (!str) str = "CP1250"; // use safe and likely default
- m_fromUtf8 = portable_iconv_open(str,"UTF-8");
- if (m_fromUtf8==(void *)(-1))
- {
- err("Error: unsupported character conversion for CHM_INDEX_ENCODING: '%s'->'UTF-8'\n", str);
- exit(1);
- }
-
- /* open the contents file */
- QCString fName = Config_getString("HTML_OUTPUT") + "/index.hhc";
- cf = new QFile(fName);
- if (!cf->open(IO_WriteOnly))
- {
- err("Could not open file %s for writing\n",fName.data());
- exit(1);
- }
- /* Write the header of the contents file */
- cts.setDevice(cf);
- cts << "<!DOCTYPE HTML PUBLIC \"-//IETF//DTD HTML//EN\">\n"
- "<HTML><HEAD></HEAD><BODY>\n"
- "<OBJECT type=\"text/site properties\">\n"
- "<param name=\"FrameName\" value=\"right\">\n"
- "</OBJECT>\n"
- "<UL>\n";
-
- /* open the contents file */
- fName = Config_getString("HTML_OUTPUT") + "/index.hhk";
- kf = new QFile(fName);
- if (!kf->open(IO_WriteOnly))
- {
- err("Could not open file %s for writing\n",fName.data());
- exit(1);
- }
- /* Write the header of the contents file */
- kts.setDevice(kf);
- kts << "<!DOCTYPE HTML PUBLIC \"-//IETF//DTD HTML//EN\">\n"
- "<HTML><HEAD></HEAD><BODY>\n"
- "<OBJECT type=\"text/site properties\">\n"
- "<param name=\"FrameName\" value=\"right\">\n"
- "</OBJECT>\n"
- "<UL>\n";
-
- /* language codes for Html help
- 0x405 Czech
- 0x406 Danish
- 0x413 Dutch
- 0xC09 English (Australia)
- 0x809 English (Britain)
- 0x1009 English (Canada)
- 0x1809 English (Ireland)
- 0x1409 English (New Zealand)
- 0x1C09 English (South Africa)
- 0x409 English (United States)
- 0x40B Finnish
- 0x40C French
- 0x407 German
- 0x408 Greece
- 0x40E Hungarian
- 0x410 Italian
- 0x814 Norwegian
- 0x415 Polish
- 0x816 Portuguese(Portugal)
- 0x416 Portuguese(Brazil)
- 0x419 Russian
- 0x80A Spanish(Mexico)
- 0xC0A Spanish(Modern Sort)
- 0x40A Spanish(Traditional Sort)
- 0x41D Swedish
- 0x41F Turkey
- 0x411 Japanese
- 0x412 Korean
- 0x804 Chinese (PRC)
- 0x404 Chinese (Taiwan)
-
- New LCIDs:
- 0x421 Indonesian
- 0x41A Croatian
- 0x418 Romanian
- 0x424 Slovenian
- 0x41B Slovak
- 0x422 Ukrainian
- 0x81A Serbian (Serbia, Latin)
- 0x403 Catalan
- 0x427 Lithuanian
- 0x436 Afrikaans
- 0x42A Vietnamese
- 0x429 Persian (Iran)
- 0xC01 Arabic (Egypt) - I don't know which version of arabic is used inside translator_ar.h ,
- so I have chosen Egypt at random
-
- */
- s_languageDict.setAutoDelete(TRUE);
- s_languageDict.clear();
- s_languageDict.insert("czech", new QCString("0x405 Czech"));
- s_languageDict.insert("danish", new QCString("0x406 Danish"));
- s_languageDict.insert("dutch", new QCString("0x413 Dutch"));
- s_languageDict.insert("finnish", new QCString("0x40B Finnish"));
- s_languageDict.insert("french", new QCString("0x40C French"));
- s_languageDict.insert("german", new QCString("0x407 German"));
- s_languageDict.insert("greek", new QCString("0x408 Greece"));
- s_languageDict.insert("hungarian", new QCString("0x40E Hungarian"));
- s_languageDict.insert("italian", new QCString("0x410 Italian"));
- s_languageDict.insert("norwegian", new QCString("0x814 Norwegian"));
- s_languageDict.insert("polish", new QCString("0x415 Polish"));
- s_languageDict.insert("portuguese", new QCString("0x816 Portuguese(Portugal)"));
- s_languageDict.insert("brazil", new QCString("0x416 Portuguese(Brazil)"));
- s_languageDict.insert("russian", new QCString("0x419 Russian"));
- s_languageDict.insert("spanish", new QCString("0x40A Spanish(Traditional Sort)"));
- s_languageDict.insert("swedish", new QCString("0x41D Swedish"));
- s_languageDict.insert("turkish", new QCString("0x41F Turkey"));
- s_languageDict.insert("japanese", new QCString("0x411 Japanese"));
- s_languageDict.insert("japanese-en", new QCString("0x411 Japanese"));
- s_languageDict.insert("korean", new QCString("0x412 Korean"));
- s_languageDict.insert("korean-en", new QCString("0x412 Korean"));
- s_languageDict.insert("chinese", new QCString("0x804 Chinese (PRC)"));
- s_languageDict.insert("chinese-traditional", new QCString("0x404 Chinese (Taiwan)"));
-
- // new LCIDs
- s_languageDict.insert("indonesian", new QCString("0x412 Indonesian"));
- s_languageDict.insert("croatian", new QCString("0x41A Croatian"));
- s_languageDict.insert("romanian", new QCString("0x418 Romanian"));
- s_languageDict.insert("slovene", new QCString("0x424 Slovenian"));
- s_languageDict.insert("slovak", new QCString("0x41B Slovak"));
- s_languageDict.insert("ukrainian", new QCString("0x422 Ukrainian"));
- s_languageDict.insert("serbian", new QCString("0x81A Serbian (Serbia, Latin)"));
- s_languageDict.insert("catalan", new QCString("0x403 Catalan"));
- s_languageDict.insert("lithuanian", new QCString("0x427 Lithuanian"));
- s_languageDict.insert("afrikaans", new QCString("0x436 Afrikaans"));
- s_languageDict.insert("vietnamese", new QCString("0x42A Vietnamese"));
- s_languageDict.insert("persian", new QCString("0x429 Persian (Iran)"));
- s_languageDict.insert("arabic", new QCString("0xC01 Arabic (Egypt)"));
-}
-
-
-static QCString getLanguageString()
-{
- if (!theTranslator->idLanguage().isEmpty())
- {
- QCString *s = s_languageDict[theTranslator->idLanguage()];
- if (s)
- {
- return *s;
- }
- }
- // default language
- return "0x409 English (United States)";
-}
-
-
-
-void HtmlHelp::createProjectFile()
-{
- /* Write the project file */
- QCString fName = Config_getString("HTML_OUTPUT") + "/index.hhp";
- QFile f(fName);
- if (f.open(IO_WriteOnly))
- {
- FTextStream t(&f);
-
- QCString indexName="index"+Doxygen::htmlFileExtension;
- //if (Config_getBool("GENERATE_TREEVIEW")) indexName="main"+Doxygen::htmlFileExtension;
- t << "[OPTIONS]\n";
- if (!Config_getString("CHM_FILE").isEmpty())
- {
- t << "Compiled file=" << Config_getString("CHM_FILE") << "\n";
- }
- t << "Compatibility=1.1\n"
- "Full-text search=Yes\n"
- "Contents file=index.hhc\n"
- "Default Window=main\n"
- "Default topic=" << indexName << "\n"
- "Index file=index.hhk\n"
- "Language=" << getLanguageString() << endl;
- if (Config_getBool("BINARY_TOC")) t << "Binary TOC=YES\n";
- if (Config_getBool("GENERATE_CHI")) t << "Create CHI file=YES\n";
- t << "Title=" << recode(Config_getString("PROJECT_NAME")) << endl << endl;
-
- t << "[WINDOWS]" << endl;
-
- // NOTE: the 0x10387e number is a set of bits specifying the buttons
- // which should appear in the CHM viewer; that specific value
- // means "show all buttons including the font-size one";
- // the font-size one is not normally settable by the HTML Help Workshop
- // utility but the way to set it is described here:
- // http://support.microsoft.com/?scid=kb%3Ben-us%3B240062&x=17&y=18
- t << "main=\"" << recode(Config_getString("PROJECT_NAME")) << "\",\"index.hhc\","
- "\"index.hhk\",\"" << indexName << "\",\"" <<
- indexName << "\",,,,,0x23520,,0x10387e,,,,,,,,0" << endl << endl;
-
- t << "[FILES]" << endl;
- char *s = indexFiles.first();
- while (s)
- {
- t << s << endl;
- s = indexFiles.next();
- }
-#if 0
- // items not found by the html help compiler scan.
- t << "tabs.css" << endl;
- t << "tab_a.png" << endl;
- t << "tab_b.png" << endl;
- t << "tab_h.png" << endl;
- t << "tab_s.png" << endl;
- t << "nav_h.png" << endl;
- t << "nav_f.png" << endl;
- t << "bc_s.png" << endl;
- if (Config_getBool("HTML_DYNAMIC_SECTIONS"))
- {
- t << "open.png" << endl;
- t << "closed.png" << endl;
- }
- if (Config_getBool("GENERATE_HTMLHELP"))
- {
- t << "ftv2blank.png" << endl;
- t << "ftv2doc.png" << endl;
- t << "ftv2folderclosed.png" << endl;
- t << "ftv2folderopen.png" << endl;
- t << "ftv2lastnode.png" << endl;
- t << "ftv2link.png" << endl;
- t << "ftv2mlastnode.png" << endl;
- t << "ftv2mnode.png" << endl;
- t << "ftv2node.png" << endl;
- t << "ftv2plastnode.png" << endl;
- t << "ftv2pnode.png" << endl;
- t << "ftv2vertline.png" << endl;
- }
- if (Config_getBool("SEARCHENGINE"))
- {
- t << "search_l.png" << endl;
- t << "search_m.png" << endl;
- t << "search_r.png" << endl;
- if (Config_getBool("SERVER_BASED_SEARCH"))
- {
- t << "mag.png" << endl;
- }
- else
- {
- t << "mag_sel.png" << endl;
- t << "close.png" << endl;
- }
- }
-#endif
- uint i;
- for (i=0;i<imageFiles.count();i++)
- {
- t << imageFiles.at(i) << endl;
- }
- f.close();
- }
- else
- {
- err("Could not open file %s for writing\n",fName.data());
- }
-}
-
-void HtmlHelp::addIndexFile(const char *s)
-{
- if (indexFileDict.find(s)==0)
- {
- indexFiles.append(s);
- indexFileDict.insert(s,(void *)0x8);
- }
-}
-
-/*! Finalizes the HTML help. This will finish and close the
- * contents file (index.hhc) and the index file (index.hhk).
- * \sa initialize()
- */
-void HtmlHelp::finalize()
-{
- // end the contents file
- cts << "</UL>\n";
- cts << "</BODY>\n";
- cts << "</HTML>\n";
- cts.unsetDevice();
- cf->close();
- delete cf;
-
- index->writeFields(kts);
-
- // end the index file
- kts << "</UL>\n";
- kts << "</BODY>\n";
- kts << "</HTML>\n";
- kts.unsetDevice();
- kf->close();
- delete kf;
-
- createProjectFile();
- s_languageDict.clear();
-}
-
-/*! Increase the level of the contents hierarchy.
- * This will start a new unnumbered HTML list in contents file.
- * \sa decContentsDepth()
- */
-void HtmlHelp::incContentsDepth()
-{
- int i; for (i=0;i<dc+1;i++) cts << " ";
- cts << "<UL>\n";
- ++dc;
-}
-
-/*! Decrease the level of the contents hierarchy.
- * This will end the unnumber HTML list.
- * \sa incContentsDepth()
- */
-void HtmlHelp::decContentsDepth()
-{
- int i; for (i=0;i<dc;i++) cts << " ";
- cts << "</UL>\n";
- --dc;
-}
-
-QCString HtmlHelp::recode(const QCString &s)
-{
- int iSize = s.length();
- int oSize = iSize*4+1;
- QCString output(oSize);
- size_t iLeft = iSize;
- size_t oLeft = oSize;
- const char *iPtr = s.data();
- char *oPtr = output.data();
- if (!portable_iconv(m_fromUtf8,&iPtr,&iLeft,&oPtr,&oLeft))
- {
- oSize -= oLeft;
- output.resize(oSize+1);
- output.at(oSize)='\0';
- return output;
- }
- else
- {
- return s;
- }
-}
-
-/*! Add an list item to the contents file.
- * \param isDir boolean indicating if this is a dir or file entry
- * \param name the name of the item.
- * \param ref the URL of to the item.
- * \param file the file in which the item is defined.
- * \param anchor the anchor of the item.
- * \param separateIndex not used.
- * \param addToNavIndex not used.
- */
-void HtmlHelp::addContentsItem(bool isDir,
- const char *name,
- const char * /*ref*/,
- const char *file,
- const char *anchor,
- bool /* separateIndex */,
- bool /* addToNavIndex */)
-{
- // If we're using a binary toc then folders cannot have links.
- if(Config_getBool("BINARY_TOC") && isDir)
- {
- file = 0;
- anchor = 0;
- }
- int i; for (i=0;i<dc;i++) cts << " ";
- cts << "<LI><OBJECT type=\"text/sitemap\">";
- cts << "<param name=\"Name\" value=\"" << recode(name) << "\">";
- if (file) // made file optional param - KPW
- {
- cts << "<param name=\"Local\" value=\"" << file << Doxygen::htmlFileExtension;
- if (anchor) cts << "#" << anchor;
- cts << "\">";
- }
- cts << "<param name=\"ImageNumber\" value=\"";
- if (isDir) // added - KPW
- {
- cts << (int)BOOK_CLOSED ;
- }
- else
- {
- cts << (int)TEXT;
- }
- cts << "\">";
- cts << "</OBJECT>\n";
-}
-
-
-void HtmlHelp::addIndexItem(Definition *context,MemberDef *md,
- const char *word)
-{
- if (md)
- {
- static bool separateMemberPages = Config_getBool("SEPARATE_MEMBER_PAGES");
- if (context==0) // global member
- {
- if (md->getGroupDef())
- context = md->getGroupDef();
- else if (md->getFileDef())
- context = md->getFileDef();
- }
- if (context==0) return; // should not happen
-
- QCString cfname = md->getOutputFileBase();
- QCString cfiname = context->getOutputFileBase();
- QCString level1 = context->name();
- QCString level2 = md->name();
- QCString contRef = separateMemberPages ? cfname : cfiname;
- QCString memRef = cfname;
- QCString anchor = md->anchor();
- index->addItem(level1,level2,contRef,anchor,TRUE,FALSE);
- index->addItem(level2,level1,memRef,anchor,TRUE,TRUE);
- }
- else if (context)
- {
- QCString level1 = word ? QCString(word) : context->name();
- index->addItem(level1,0,context->getOutputFileBase(),0,TRUE,FALSE);
- }
-}
-
-void HtmlHelp::addImageFile(const char *fileName)
-{
- imageFiles.append(fileName);
-}
-
diff --git a/trunk/src/htmlhelp.h b/trunk/src/htmlhelp.h
deleted file mode 100644
index ef5fb67..0000000
--- a/trunk/src/htmlhelp.h
+++ /dev/null
@@ -1,104 +0,0 @@
-/******************************************************************************
- *
- *
- *
- * Copyright (C) 1997-2012 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.
- *
- * The code is this file is largely based on a contribution from
- * Harm van der Heijden <H.v.d.Heijden@phys.tue.nl>
- * Please send thanks to him and bug reports to me :-)
- */
-
-#ifndef HTMLHELP_H
-#define HTMLHELP_H
-
-#include "qtbc.h"
-#include <qstrlist.h>
-#include "index.h"
-#include "ftextstream.h"
-
-class QFile;
-class HtmlHelpIndex;
-
-/*! A class that generated the HTML Help specific files.
- * These files can be used with the Microsoft HTML Help workshop
- * to generate compressed HTML files (.chm).
- */
-class HtmlHelp : public IndexIntf
-{
- /*! used in imageNumber param of HTMLHelp::addContentsItem() function
- to specify document icon in tree view.
- Writes \<param name="ImageNumber" value="xx"\> in .HHC file. */
- enum ImageNumber {
- BOOK_CLOSED=1, BOOK_OPEN,
- BOOK_CLOSED_NEW, BOOK_OPEN_NEW,
- FOLDER_CLOSED, FOLDER_OPEN,
- FOLDER_CLOSED_NEW,FOLDER_OPEN_NEW,
- QUERY, QUERY_NEW,
- TEXT, TEXT_NEW,
- WEB_DOC, WEB_DOC_NEW,
- WEB_LINK, WEB_LINK_NEW,
- INFO, INFO_NEW,
- LINK, LINK_NEW,
- BOOKLET, BOOKLET_NEW,
- EMAIL, EMAIL_NEW,
- EMAIL2, EMAIL2_NEW,
- IMAGE, IMAGE_NEW,
- AUDIO, AUDIO_NEW,
- MUSIC, MUSIC_NEW,
- VIDEO, VIDEO_NEW,
- INDEX, INDEX_NEW,
- IDEA, IDEA_NEW,
- NOTE, NOTE_NEW,
- TOOL, TOOL_NEW
- };
- public:
- //static HtmlHelp *getInstance();
- HtmlHelp();
- ~HtmlHelp();
- void initialize();
- void finalize();
- void incContentsDepth();
- void decContentsDepth();
- void addContentsItem(bool isDir,
- const char *name,
- const char *ref,
- const char *file,
- const char *anchor,
- bool separateIndex,
- bool addToNavIndex);
- //void addIndexItem(const char *level1, const char *level2,
- // const char *contRef, const char *memRef,
- // const char *anchor,const MemberDef *md);
- void addIndexItem(Definition *context,MemberDef *md,const char *title);
- void addIndexFile(const char *name);
- void addImageFile(const char *);
- void addStyleSheetFile(const char *) {}
-
- private:
- friend class HtmlHelpIndex;
- void createProjectFile();
-
- QFile *cf,*kf;
- FTextStream cts,kts;
- HtmlHelpIndex *index;
- int dc;
- QStrList indexFiles;
- QStrList imageFiles;
- QDict<void> indexFileDict;
- static HtmlHelp *theInstance;
- QCString recode(const QCString &s);
- void *m_fromUtf8;
-};
-
-#endif /* HTMLHELP_H */
-
diff --git a/trunk/src/image.cpp b/trunk/src/image.cpp
deleted file mode 100644
index 20fa868..0000000
--- a/trunk/src/image.cpp
+++ /dev/null
@@ -1,540 +0,0 @@
-/******************************************************************************
- *
- *
- *
- *
- * Copyright (C) 1997-2012 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.
- *
- */
-
-#include "qtbc.h"
-#include "image.h"
-#include <qfile.h>
-#include <math.h>
-#include "lodepng.h"
-#include "config.h"
-
-typedef unsigned char Byte;
-
-struct Color
-{
- Byte red;
- Byte green;
- Byte blue;
- Byte alpha;
-};
-
-const int charSetWidth=80;
-const int charHeight=12;
-const int numChars=96;
-
-unsigned short charPos[numChars] =
- {
- 0, 5, 8, 13, 20, 27, 38, 47,
- 50, 54, 58, 65, 72, 76, 83, 87,
- 91, 98,105,112,119,126,133,140,
- 147,154,161,164,167,174,181,188,
- 195,207,216,224,233,242,250,258,
- 267,276,279,286,294,301,312,321,
- 331,339,349,357,365,372,380,389,
- 400,409,418,427,430,434,437,443,
- 450,453,460,467,474,481,488,492,
- 499,506,509,512,518,521,530,537,
- 544,551,557,562,568,571,578,585,
- 594,600,607,613,617,620,624,631
- };
-
-unsigned char charWidth[numChars] =
- {
- 5, 3, 5, 7, 7,11, 9, 3,
- 4, 4, 7, 7, 4, 7, 4, 4,
-
- 7, 7, 7, 7, 7, 7, 7, 7,
- 7, 7, 3, 3, 7, 7, 7, 7,
- 12, 9, 8, 9, 9, 8, 8, 9,
- 9, 3, 7, 8, 7,11, 9,10,
- 8,10, 8, 8, 7, 8, 9,11,
- 9, 9, 9, 3, 4, 3, 6, 7,
- 3, 7, 7, 7, 7, 7, 4, 7,
- 7, 3, 3, 6, 3, 9, 7, 7,
- 7, 6, 5, 6, 3, 7, 7, 9,
- 6, 7, 6, 4, 3, 4, 7, 5
- };
-
-unsigned char fontRaw[charSetWidth*charHeight] = {
- 0x02, 0x50, 0x01, 0x06, 0x20, 0x60, 0xc6, 0x04, 0x00, 0x00, 0x00, 0x27,
- 0x04, 0x1c, 0x38, 0x11, 0xf1, 0xc7, 0xc7, 0x0e, 0x00, 0x00, 0x00, 0x03,
- 0x81, 0xf0, 0x10, 0x7c, 0x1e, 0x3e, 0x1f, 0x9f, 0x87, 0x88, 0x24, 0x09,
- 0x09, 0x02, 0x02, 0x41, 0x0f, 0x0f, 0x83, 0xc3, 0xe1, 0xe7, 0xf4, 0x24,
- 0x12, 0x22, 0x41, 0x20, 0x9f, 0xce, 0x30, 0x00, 0x10, 0x04, 0x00, 0x01,
- 0x00, 0x30, 0x08, 0x12, 0x41, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40,
- 0x00, 0x00, 0x00, 0x00, 0x01, 0xac, 0x00, 0x00, 0x02, 0x51, 0x43, 0x89,
- 0x40, 0x90, 0x49, 0x15, 0x00, 0x00, 0x00, 0x28, 0x9c, 0x22, 0x44, 0x31,
- 0x02, 0x20, 0x48, 0x91, 0x00, 0x00, 0x00, 0x04, 0x46, 0x08, 0x28, 0x42,
- 0x21, 0x21, 0x10, 0x10, 0x08, 0x48, 0x24, 0x09, 0x11, 0x03, 0x06, 0x61,
- 0x10, 0x88, 0x44, 0x22, 0x12, 0x10, 0x84, 0x24, 0x12, 0x22, 0x22, 0x20,
- 0x80, 0x4a, 0x11, 0x00, 0x20, 0x04, 0x00, 0x01, 0x00, 0x40, 0x08, 0x00,
- 0x41, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00,
- 0x02, 0x22, 0x00, 0x00, 0x02, 0x51, 0x45, 0x49, 0x40, 0x90, 0x89, 0x0a,
- 0x00, 0x00, 0x00, 0x48, 0x84, 0x02, 0x04, 0x51, 0x02, 0x00, 0x88, 0x91,
- 0x00, 0x00, 0x00, 0x04, 0x44, 0xd4, 0x28, 0x42, 0x40, 0x20, 0x90, 0x10,
- 0x10, 0x08, 0x24, 0x09, 0x21, 0x03, 0x06, 0x51, 0x20, 0x48, 0x48, 0x12,
- 0x12, 0x00, 0x84, 0x22, 0x22, 0x22, 0x22, 0x11, 0x00, 0x89, 0x12, 0x80,
- 0x31, 0xc5, 0x87, 0x0d, 0x1c, 0xe3, 0x4b, 0x12, 0x49, 0x29, 0x16, 0x1c,
- 0x58, 0x69, 0x4c, 0xe8, 0x91, 0x44, 0x61, 0x44, 0xf2, 0x22, 0x00, 0x00,
- 0x02, 0x07, 0xe5, 0x06, 0x80, 0x60, 0x10, 0x95, 0x08, 0x00, 0x00, 0x48,
- 0x84, 0x04, 0x18, 0x51, 0xe2, 0xc0, 0x87, 0x11, 0x24, 0x18, 0x03, 0x00,
- 0x89, 0x24, 0x44, 0x42, 0x40, 0x20, 0x90, 0x10, 0x10, 0x08, 0x24, 0x09,
- 0x41, 0x02, 0x8a, 0x51, 0x20, 0x48, 0x48, 0x12, 0x11, 0x80, 0x84, 0x22,
- 0x21, 0x24, 0x14, 0x11, 0x01, 0x09, 0x14, 0x40, 0x02, 0x26, 0x48, 0x93,
- 0x22, 0x44, 0xcc, 0x92, 0x51, 0x36, 0x99, 0x22, 0x64, 0x99, 0x92, 0x48,
- 0x91, 0x44, 0x52, 0x44, 0x12, 0x22, 0x00, 0x00, 0x02, 0x01, 0x43, 0x80,
- 0x80, 0xa0, 0x10, 0x84, 0x08, 0x00, 0x00, 0x88, 0x84, 0x08, 0x04, 0x90,
- 0x13, 0x21, 0x08, 0x8f, 0x00, 0x61, 0xf0, 0xc0, 0x8a, 0x24, 0x44, 0x7c,
- 0x40, 0x20, 0x9f, 0x9f, 0x11, 0xcf, 0xe4, 0x09, 0xc1, 0x02, 0x8a, 0x49,
- 0x20, 0x4f, 0x88, 0x13, 0xe0, 0x60, 0x84, 0x22, 0x21, 0x54, 0x08, 0x0a,
- 0x02, 0x08, 0x90, 0x00, 0x00, 0x24, 0x48, 0x11, 0x22, 0x44, 0x48, 0x92,
- 0x61, 0x24, 0x91, 0x22, 0x44, 0x89, 0x10, 0x48, 0x91, 0x24, 0x8c, 0x44,
- 0x22, 0x22, 0x64, 0x00, 0x02, 0x07, 0xe1, 0x41, 0x31, 0x14, 0x10, 0x80,
- 0x3e, 0x07, 0xc0, 0x88, 0x84, 0x10, 0x05, 0x10, 0x12, 0x21, 0x08, 0x81,
- 0x01, 0x80, 0x00, 0x31, 0x0a, 0x24, 0x7c, 0x42, 0x40, 0x20, 0x90, 0x10,
- 0x10, 0x48, 0x24, 0x09, 0x21, 0x02, 0x52, 0x45, 0x20, 0x48, 0x08, 0x92,
- 0x20, 0x10, 0x84, 0x21, 0x41, 0x54, 0x14, 0x04, 0x04, 0x08, 0x90, 0x00,
- 0x01, 0xe4, 0x48, 0x11, 0x3e, 0x44, 0x48, 0x92, 0x61, 0x24, 0x91, 0x22,
- 0x44, 0x89, 0x0c, 0x48, 0x8a, 0x24, 0x8c, 0x48, 0x44, 0x21, 0x98, 0x00,
- 0x02, 0x02, 0x85, 0x41, 0x49, 0x08, 0x10, 0x80, 0x08, 0x00, 0x00, 0x88,
- 0x84, 0x20, 0x45, 0xf9, 0x12, 0x21, 0x08, 0x81, 0x00, 0x61, 0xf0, 0xc1,
- 0x0a, 0x68, 0x82, 0x42, 0x40, 0x20, 0x90, 0x10, 0x10, 0x48, 0x24, 0x89,
- 0x11, 0x02, 0x52, 0x45, 0x20, 0x48, 0x08, 0x52, 0x12, 0x10, 0x84, 0x21,
- 0x40, 0x88, 0x22, 0x04, 0x08, 0x08, 0x90, 0x00, 0x02, 0x24, 0x48, 0x11,
- 0x20, 0x44, 0x48, 0x92, 0x51, 0x24, 0x91, 0x22, 0x44, 0x89, 0x02, 0x48,
- 0x8a, 0x2a, 0x92, 0x28, 0x42, 0x22, 0x00, 0x00, 0x00, 0x02, 0x85, 0x41,
- 0x49, 0x18, 0x10, 0x80, 0x08, 0x00, 0x01, 0x08, 0x84, 0x20, 0x44, 0x11,
- 0x12, 0x22, 0x08, 0x91, 0x00, 0x18, 0x03, 0x00, 0x09, 0xb0, 0x82, 0x42,
- 0x21, 0x21, 0x10, 0x10, 0x08, 0xc8, 0x24, 0x89, 0x09, 0x02, 0x22, 0x43,
- 0x10, 0x88, 0x04, 0x22, 0x12, 0x10, 0x84, 0x20, 0x80, 0x88, 0x22, 0x04,
- 0x10, 0x08, 0x50, 0x00, 0x02, 0x26, 0x48, 0x93, 0x22, 0x44, 0xc8, 0x92,
- 0x49, 0x24, 0x91, 0x22, 0x64, 0x99, 0x12, 0x49, 0x84, 0x11, 0x21, 0x28,
- 0x82, 0x22, 0x00, 0x00, 0x02, 0x02, 0x83, 0x82, 0x30, 0xe4, 0x10, 0x80,
- 0x00, 0x20, 0x05, 0x07, 0x04, 0x3e, 0x38, 0x10, 0xe1, 0xc2, 0x07, 0x0e,
- 0x24, 0x00, 0x00, 0x01, 0x04, 0x00, 0x82, 0x7c, 0x1e, 0x3e, 0x1f, 0x90,
- 0x07, 0x48, 0x24, 0x71, 0x05, 0xf2, 0x22, 0x41, 0x0f, 0x08, 0x03, 0xd2,
- 0x11, 0xe0, 0x83, 0xc0, 0x80, 0x88, 0x41, 0x04, 0x1f, 0xc8, 0x50, 0x00,
- 0x01, 0xd5, 0x87, 0x0d, 0x1c, 0x43, 0x48, 0x92, 0x45, 0x24, 0x91, 0x1c,
- 0x58, 0x69, 0x0c, 0x66, 0x84, 0x11, 0x21, 0x10, 0xf2, 0x22, 0x00, 0x00,
- 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x20, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
- 0x03, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x40, 0x02, 0x00, 0x00, 0x00, 0x00, 0x40, 0x08, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x10, 0x02, 0x22, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x09, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x08, 0x10, 0x1f, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x04, 0x40, 0x02,
- 0x00, 0x00, 0x00, 0x00, 0x40, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20,
- 0x02, 0x22, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x30, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x80, 0x04, 0x00, 0x00, 0x00, 0x00,
- 0x40, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x01, 0xac, 0x00, 0x00
-};
-
-static Color palette[] =
-{
- { 0xff, 0xff, 0xff, 0x00 },
- { 0x00, 0x00, 0x00, 0xff },
- { 0xff, 0xff, 0xc0, 0xff },
- { 0x9f, 0x9f, 0x60, 0xff },
- { 0x90, 0x00, 0x00, 0xff },
- { 0x00, 0x90, 0x00, 0xff },
- { 0x00, 0x00, 0x90, 0xff },
- { 0xc0, 0xc0, 0xc0, 0xff }
-};
-
-// for alpha we use x^(1/1.3)
-static Color palette2[] =
-{
- { 0x00, 0x00, 0x00, 0x00 },
- { 0x00, 0x00, 0x00, 0x2e },
- { 0x00, 0x00, 0x00, 0x48 },
- { 0x00, 0x00, 0x00, 0x5d },
- { 0x00, 0x00, 0x00, 0x6f },
- { 0x00, 0x00, 0x00, 0x80 },
- { 0x00, 0x00, 0x00, 0x8f },
- { 0x00, 0x00, 0x00, 0x9e },
- { 0x00, 0x00, 0x00, 0xac },
- { 0x00, 0x00, 0x00, 0xb9 },
- { 0x00, 0x00, 0x00, 0xc5 },
- { 0x00, 0x00, 0x00, 0xd2 },
- { 0x00, 0x00, 0x00, 0xdd },
- { 0x00, 0x00, 0x00, 0xe9 },
- { 0x00, 0x00, 0x00, 0xf4 },
- { 0x00, 0x00, 0x00, 0xff }
-};
-
-static Color palette3[] =
-{
- { 0xff, 0xff, 0xff, 0xff },
- { 0xe0, 0xe0, 0xe0, 0xff },
- { 0xd0, 0xd0, 0xd0, 0xff },
- { 0xc0, 0xc0, 0xc0, 0xff },
- { 0xb0, 0xb0, 0xb0, 0xff },
- { 0xa0, 0xa0, 0xa0, 0xff },
- { 0x90, 0x90, 0x90, 0xff },
- { 0x80, 0x80, 0x80, 0xff },
- { 0x70, 0x70, 0x70, 0xff },
- { 0x60, 0x60, 0x60, 0xff },
- { 0x50, 0x50, 0x50, 0xff },
- { 0x40, 0x40, 0x40, 0xff },
- { 0x30, 0x30, 0x30, 0xff },
- { 0x20, 0x20, 0x20, 0xff },
- { 0x10, 0x10, 0x10, 0xff },
- { 0x00, 0x00, 0x00, 0xff }
-};
-
-
-Image::Image(int w,int h)
-{
- static int hue = Config_getInt("HTML_COLORSTYLE_HUE");
- static int sat = Config_getInt("HTML_COLORSTYLE_SAT");
- static int gamma = Config_getInt("HTML_COLORSTYLE_GAMMA");
-
- double red1,green1,blue1;
- double red2,green2,blue2;
-
- ColoredImage::hsl2rgb(hue/360.0, // hue
- sat/255.0, // saturation
- pow(235/255.0,gamma/100.0), // luma (gamma corrected)
- &red1,&green1,&blue1
- );
-
- ColoredImage::hsl2rgb(hue/360.0, // hue
- sat/255.0, // saturation
- pow(138/255.0,gamma/100.0), // luma (gamma corrected)
- &red2,&green2,&blue2
- );
-
- palette[2].red = (int)(red1 * 255.0);
- palette[2].green = (int)(green1 * 255.0);
- palette[2].blue = (int)(blue1 * 255.0);
-
- palette[3].red = (int)(red2 * 255.0);
- palette[3].green = (int)(green2 * 255.0);
- palette[3].blue = (int)(blue2 * 255.0);
-
- data = new uchar[w*h];
- memset(data,0,w*h);
- width = w;
- height = h;
-}
-
-Image::~Image()
-{
- delete[] data;
-}
-
-void Image::setPixel(int x,int y,uchar val)
-{
- if (x>=0 && x<width && y>=0 && y<height)
- data[y*width+x] = val;
-}
-
-uchar Image::getPixel(int x,int y) const
-{
- if (x>=0 && x<width && y>=0 && y<height)
- return data[y*width+x];
- else
- return 0;
-}
-
-void Image::writeChar(int x,int y,char c,uchar fg)
-{
- if (c>=' ')
- {
- int xf,yf,ci=c-' ';
- int rowOffset=0;
- int cw = charWidth[ci];
- int cp = charPos[ci];
- for (yf=0;yf<charHeight;yf++)
- {
- unsigned short bitPattern=0;
- int bitsLeft=cw;
- int byteOffset = rowOffset+(cp>>3);
- int bitOffset = cp&7;
- // get the bit pattern for row yf of the character from the font data
- while (bitsLeft>0)
- {
- int bits=8-bitOffset;
- if (bits>bitsLeft) bits=bitsLeft;
- bitPattern<<=bits;
- bitPattern|=((fontRaw[byteOffset]<<bitOffset)&0xff)>>(8-bits);
- bitsLeft-=bits;
- bitOffset=0;
- byteOffset++;
- }
- int mask=1<<(cw-1);
- // draw character row yf
- for (xf=0;xf<cw;xf++)
- {
- setPixel(x+xf,y+yf,(bitPattern&mask) ? fg : getPixel(x+xf,y+yf));
- mask>>=1;
- }
- rowOffset+=charSetWidth;
- }
- }
-}
-
-void Image::writeString(int x,int y,const char *s,uchar fg)
-{
- if (s)
- {
- char c;
- while ((c=*s++))
- {
- writeChar(x,y,c,fg);
- x+=charWidth[c-' '];
- }
- }
-}
-
-uint Image::stringLength(const char *s)
-{
- int w=0;
- if (s)
- {
- char c;
- while ((c=*s++)) w+=charWidth[c-' '];
- }
- return w;
-}
-
-void Image::drawHorzLine(int y,int xs,int xe,uchar colIndex,uint mask)
-{
- int x,i=0,j=0;
- for (x=xs;x<=xe;x++,j++)
- {
- if (j&1) i++;
- if (mask&(1<<(i&0x1f))) setPixel(x,y,colIndex);
- }
-}
-
-void Image::drawHorzArrow(int y,int xs,int xe,uchar colIndex,uint mask)
-{
- drawHorzLine(y,xs,xe,colIndex,mask);
- int i;
- for (i=0;i<6;i++)
- {
- int h=i>>1;
- drawVertLine(xe-i,y-h,y+h,colIndex,0xffffffff);
- }
-}
-
-void Image::drawVertLine(int x,int ys,int ye,uchar colIndex,uint mask)
-{
- int y,i=0;
- for (y=ys;y<=ye;y++,i++)
- {
- if (mask&(1<<(i&0x1f))) setPixel(x,y,colIndex);
- }
-}
-
-void Image::drawVertArrow(int x,int ys,int ye,uchar colIndex,uint mask)
-{
- drawVertLine(x,ys,ye,colIndex,mask);
- int i;
- for (i=0;i<6;i++)
- {
- int h=i>>1;
- drawHorzLine(ys+i,x-h,x+h,colIndex,0xffffffff);
- }
-}
-
-void Image::drawRect(int x,int y,int w,int h,uchar colIndex,uint mask)
-{
- drawHorzLine(y,x,x+w-1,colIndex,mask);
- drawHorzLine(y+h-1,x,x+w-1,colIndex,mask);
- drawVertLine(x,y,y+h-1,colIndex,mask);
- drawVertLine(x+w-1,y,y+h-1,colIndex,mask);
-}
-
-void Image::fillRect(int x,int y,int lwidth,int lheight,uchar colIndex,uint mask)
-{
- int xp,yp,xi,yi;
- for (yp=y,yi=0;yp<y+lheight;yp++,yi++)
- for (xp=x,xi=0;xp<x+lwidth;xp++,xi++)
- if (mask&(1<<((xi+yi)&0x1f)))
- setPixel(xp,yp,colIndex);
-}
-
-bool Image::save(const char *fileName,int mode)
-{
-#if 0
- GifEncoder gifenc(data,
- mode==0 ? palette : palette2,
- width,height,
- mode==0 ? 3 : 4,
- 0);
- QFile file(fileName);
- if (file.open(IO_WriteOnly))
- {
- gifenc.writeGIF(file);
- return TRUE;
- }
- else
- {
- return FALSE;
- }
-#endif
- static bool useTransparency = Config_getBool("FORMULA_TRANSPARENT");
- uchar* buffer;
- size_t bufferSize;
- LodePNG_Encoder encoder;
- LodePNG_Encoder_init(&encoder);
- int numCols = mode==0 ? 8 : 16;
- Color *pPal = mode==0 ? palette :
- useTransparency ? palette2 :
- palette3 ;
- int i;
- for (i=0;i<numCols;i++,pPal++)
- {
- LodePNG_InfoColor_addPalette(&encoder.infoPng.color,
- pPal->red,pPal->green,pPal->blue,pPal->alpha);
- }
- encoder.infoPng.color.colorType = 3;
- encoder.infoRaw.color.colorType = 3;
- LodePNG_encode(&encoder, &buffer, &bufferSize, data, width, height);
- LodePNG_saveFile(buffer, bufferSize, fileName);
- free(buffer);
- LodePNG_Encoder_cleanup(&encoder);
- return TRUE;
-}
-
-//----------------------------------------------------------------
-
-void ColoredImage::hsl2rgb(double h,double s,double l,
- double *pRed,double *pGreen,double *pBlue)
-{
- double v;
- double r,g,b;
-
- r = l; // default to gray
- g = l;
- b = l;
- v = (l <= 0.5) ? (l * (1.0 + s)) : (l + s - l * s);
- if (v > 0)
- {
- double m;
- double sv;
- int sextant;
- double fract, vsf, mid1, mid2;
-
- m = l + l - v;
- sv = (v - m ) / v;
- h *= 6.0;
- sextant = (int)h;
- fract = h - sextant;
- vsf = v * sv * fract;
- mid1 = m + vsf;
- mid2 = v - vsf;
- switch (sextant)
- {
- case 0:
- r = v;
- g = mid1;
- b = m;
- break;
- case 1:
- r = mid2;
- g = v;
- b = m;
- break;
- case 2:
- r = m;
- g = v;
- b = mid1;
- break;
- case 3:
- r = m;
- g = mid2;
- b = v;
- break;
- case 4:
- r = mid1;
- g = m;
- b = v;
- break;
- case 5:
- r = v;
- g = m;
- b = mid2;
- break;
- }
- }
- *pRed = r;
- *pGreen = g;
- *pBlue = b;
-}
-
-ColoredImage::ColoredImage(int width,int height,
- const uchar *greyLevels,const uchar *alphaLevels,
- int saturation,int hue,int gamma)
-{
- m_hasAlpha = alphaLevels!=0;
- m_width = width;
- m_height = height;
- m_data = (uchar*)malloc(width*height*4);
- int i;
- for (i=0;i<width*height;i++)
- {
- uchar r,g,b,a;
- double red,green,blue;
- hsl2rgb(hue/360.0, // hue
- saturation/255.0, // saturation
- pow(greyLevels[i]/255.0,gamma/100.0), // luma (gamma corrected)
- &red,&green,&blue);
- r = (int)(red *255.0);
- g = (int)(green*255.0);
- b = (int)(blue *255.0);
- a = alphaLevels ? alphaLevels[i] : 255;
- m_data[i*4+0]=r;
- m_data[i*4+1]=g;
- m_data[i*4+2]=b;
- m_data[i*4+3]=a;
- }
-}
-
-ColoredImage::~ColoredImage()
-{
- free(m_data);
-}
-
-bool ColoredImage::save(const char *fileName)
-{
- uchar *buffer;
- size_t bufferSize;
- LodePNG_Encoder encoder;
- LodePNG_Encoder_init(&encoder);
- encoder.infoPng.color.colorType = m_hasAlpha ? 6 : 2; // 2=RGB 24 bit, 6=RGBA 32 bit
- encoder.infoRaw.color.colorType = 6; // 6=RGBA 32 bit
- LodePNG_encode(&encoder, &buffer, &bufferSize, m_data, m_width, m_height);
- LodePNG_saveFile(buffer, bufferSize, fileName);
- LodePNG_Encoder_cleanup(&encoder);
- free(buffer);
- return TRUE;
-}
-
-
diff --git a/trunk/src/image.h b/trunk/src/image.h
deleted file mode 100644
index a73be0d..0000000
--- a/trunk/src/image.h
+++ /dev/null
@@ -1,69 +0,0 @@
-/******************************************************************************
- *
- *
- *
- *
- * Copyright (C) 1997-2012 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.
- *
- */
-
-#ifndef _IMAGE_H
-#define _IMAGE_H
-#include <qglobal.h>
-
-class Image
-{
- public:
- Image(int w,int h);
- ~Image();
-
- void setPixel(int x,int y,uchar val);
- uchar getPixel(int x,int y) const;
- void writeChar(int x,int y,char c,uchar fg);
- void writeString(int x,int y,const char *s,uchar fg);
- void drawHorzLine(int y,int xs,int xe,uchar colIndex,uint mask);
- void drawHorzArrow(int y,int xs,int xe,uchar colIndex,uint mask);
- void drawVertLine(int x,int ys,int ye,uchar colIndex,uint mask);
- void drawVertArrow(int x,int ys,int ye,uchar colIndex,uint mask);
- void drawRect(int x,int y,int width,int height,uchar colIndex,uint mask);
- void fillRect(int x,int y,int width,int height,uchar colIndex,uint mask);
- bool save(const char *fileName,int mode=0);
- friend uint stringLength(const char *s);
- uint getWidth() const { return width; }
- uint getHeight() const { return height; }
- uchar *getData() const { return data; }
- static uint stringLength(const char *s);
-
- private:
- int width;
- int height;
- uchar *data;
-};
-
-class ColoredImage
-{
- public:
- ColoredImage(int width,int height,
- const uchar *greyLevels,const uchar *alphaLevels,
- int saturation,int hue,int gamma);
- ~ColoredImage();
- bool save(const char *fileName);
- static void hsl2rgb(double h,double s,double l,
- double *pRed,double *pGreen,double *pBlue);
- private:
- int m_width;
- int m_height;
- uchar *m_data;
- bool m_hasAlpha;
-};
-
-#endif
diff --git a/trunk/src/increasebuffer.pl b/trunk/src/increasebuffer.pl
deleted file mode 100755
index 109f9ad..0000000
--- a/trunk/src/increasebuffer.pl
+++ /dev/null
@@ -1,9 +0,0 @@
-# Since the internal token buffer of a generated flex file is hardcoded
-# to 16K, this script is used to increase the buffer size of a flex
-# generated scanner to 256K.
-while (<>)
-{
- s/YY_BUF_SIZE 16384/YY_BUF_SIZE 262144/g;
- s/YY_READ_BUF_SIZE 8192/YY_READ_BUF_SIZE 262144/g;
- print $_;
-}
diff --git a/trunk/src/index.cpp b/trunk/src/index.cpp
deleted file mode 100644
index d92fbc5..0000000
--- a/trunk/src/index.cpp
+++ /dev/null
@@ -1,3932 +0,0 @@
-/******************************************************************************
- *
- *
- *
- * Copyright (C) 1997-2012 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.
- *
- */
-
-/** @file
- * @brief This file contains functions for the various index pages.
- */
-
-#include <stdlib.h>
-
-#include <qtextstream.h>
-#include <qdatetime.h>
-#include <qdir.h>
-#include <qregexp.h>
-
-#include "message.h"
-#include "index.h"
-#include "doxygen.h"
-#include "config.h"
-#include "filedef.h"
-#include "outputlist.h"
-#include "util.h"
-#include "groupdef.h"
-#include "language.h"
-#include "htmlgen.h"
-#include "htmlhelp.h"
-#include "ftvhelp.h"
-#include "dot.h"
-#include "pagedef.h"
-#include "dirdef.h"
-#include "vhdldocgen.h"
-#include "layout.h"
-
-#define MAX_ITEMS_BEFORE_MULTIPAGE_INDEX 200
-#define MAX_ITEMS_BEFORE_QUICK_INDEX 30
-
-
-int annotatedClasses;
-int annotatedClassesPrinted;
-int hierarchyClasses;
-int documentedFiles;
-int documentedGroups;
-int documentedNamespaces;
-int indexedPages;
-int documentedClassMembers[CMHL_Total];
-int documentedFileMembers[FMHL_Total];
-int documentedNamespaceMembers[NMHL_Total];
-int documentedHtmlFiles;
-int documentedPages;
-int documentedDirs;
-
-static int countClassHierarchy();
-static void countFiles(int &htmlFiles,int &files);
-static int countGroups();
-static int countDirs();
-static int countNamespaces();
-static int countAnnotatedClasses(int *cp);
-static void countRelatedPages(int &docPages,int &indexPages);
-
-void countDataStructures()
-{
- annotatedClasses = countAnnotatedClasses(&annotatedClassesPrinted); // "classes" + "annotated"
- hierarchyClasses = countClassHierarchy(); // "hierarchy"
- countFiles(documentedHtmlFiles,documentedFiles); // "files"
- countRelatedPages(documentedPages,indexedPages); // "pages"
- documentedGroups = countGroups(); // "modules"
- documentedNamespaces = countNamespaces(); // "namespaces"
- documentedDirs = countDirs(); // "dirs"
- // "globals"
- // "namespacemembers"
- // "functions"
-}
-
-static void startIndexHierarchy(OutputList &ol,int level)
-{
- ol.pushGeneratorState();
- ol.disable(OutputGenerator::Man);
- ol.disable(OutputGenerator::Html);
- if (level<6) ol.startIndexList();
- ol.enableAll();
- ol.disable(OutputGenerator::Latex);
- ol.disable(OutputGenerator::RTF);
- ol.startItemList();
- ol.popGeneratorState();
-}
-
-static void endIndexHierarchy(OutputList &ol,int level)
-{
- ol.pushGeneratorState();
- ol.disable(OutputGenerator::Man);
- ol.disable(OutputGenerator::Html);
- if (level<6) ol.endIndexList();
- ol.enableAll();
- ol.disable(OutputGenerator::Latex);
- ol.disable(OutputGenerator::RTF);
- ol.endItemList();
- ol.popGeneratorState();
-}
-
-//----------------------------------------------------------------------------
-
-class MemberIndexList : public QList<MemberDef>
-{
- public:
- MemberIndexList() : QList<MemberDef>() {}
- ~MemberIndexList() {}
- int compareItems(GCI item1, GCI item2)
- {
- MemberDef *md1=(MemberDef *)item1;
- MemberDef *md2=(MemberDef *)item2;
- return stricmp(md1->name(),md2->name());
- }
-};
-
-#define MEMBER_INDEX_ENTRIES 256
-
-static MemberIndexList g_memberIndexLetterUsed[CMHL_Total][MEMBER_INDEX_ENTRIES];
-static MemberIndexList g_fileIndexLetterUsed[FMHL_Total][MEMBER_INDEX_ENTRIES];
-static MemberIndexList g_namespaceIndexLetterUsed[NMHL_Total][MEMBER_INDEX_ENTRIES];
-
-//static bool g_classIndexLetterUsed[CHL_Total][256];
-
-const int maxItemsBeforeQuickIndex = MAX_ITEMS_BEFORE_QUICK_INDEX;
-
-//----------------------------------------------------------------------------
-
-// strips w from s iff s starts with w
-static bool stripWord(QCString &s,QCString w)
-{
- bool success=FALSE;
- if (s.left(w.length())==w)
- {
- success=TRUE;
- s=s.right(s.length()-w.length());
- }
- return success;
-}
-
-//----------------------------------------------------------------------------
-// some quasi intelligent brief description abbreviator :^)
-static QCString abbreviate(const char *s,const char *name)
-{
- QCString scopelessName=name;
- int i=scopelessName.findRev("::");
- if (i!=-1) scopelessName=scopelessName.mid(i+2);
- QCString result=s;
- result=result.stripWhiteSpace();
- // strip trailing .
- if (!result.isEmpty() && result.at(result.length()-1)=='.')
- result=result.left(result.length()-1);
-
- // strip any predefined prefix
- QStrList &briefDescAbbrev = Config_getList("ABBREVIATE_BRIEF");
- const char *p = briefDescAbbrev.first();
- while (p)
- {
- QCString s = p;
- s.replace(QRegExp("\\$name"), scopelessName); // replace $name with entity name
- s += " ";
- stripWord(result,s);
- p = briefDescAbbrev.next();
- }
-
- // capitalize first word
- if (!result.isEmpty())
- {
- int c=result[0];
- if (c>='a' && c<='z') c+='A'-'a';
- result[0]=c;
- }
- return result;
-}
-
-//----------------------------------------------------------------------------
-
-static void startQuickIndexList(OutputList &ol,bool letterTabs=FALSE)
-{
- bool fancyTabs = TRUE;
- if (fancyTabs)
- {
- if (letterTabs)
- {
- ol.writeString(" <div id=\"navrow4\" class=\"tabs3\">\n");
- }
- else
- {
- ol.writeString(" <div id=\"navrow3\" class=\"tabs2\">\n");
- }
- ol.writeString(" <ul class=\"tablist\">\n");
- }
- else
- {
- ol.writeString(" <div class=\"qindex\">");
- }
-}
-
-static void endQuickIndexList(OutputList &ol)
-{
- bool fancyTabs = TRUE;
- if (fancyTabs)
- {
- ol.writeString(" </ul>\n");
- }
- ol.writeString(" </div>\n");
-}
-
-static void startQuickIndexItem(OutputList &ol,const char *l,
- bool hl,bool compact,bool &first)
-{
- bool fancyTabs = TRUE;
- if (!first && compact && !fancyTabs) ol.writeString(" | ");
- first=FALSE;
- if (fancyTabs)
- {
- ol.writeString(" <li");
- if (hl) ol.writeString(" class=\"current\"");
- ol.writeString("><a ");
- }
- else
- {
- if (!compact) ol.writeString("<li>");
- if (hl && compact)
- {
- ol.writeString("<a class=\"qindexHL\" ");
- }
- else
- {
- ol.writeString("<a class=\"qindex\" ");
- }
- }
- ol.writeString("href=\"");
- ol.writeString(l);
- ol.writeString("\">");
- if (fancyTabs)
- {
- ol.writeString("<span>");
- }
-}
-
-static void endQuickIndexItem(OutputList &ol)
-{
- bool fancyTabs=TRUE;
- if (fancyTabs) ol.writeString("</span>");
- ol.writeString("</a>");
- if (fancyTabs) ol.writeString("</li>\n");
-}
-
-// don't make this static as it is called from a template function and some
-// old compilers don't support calls to static functions from a template.
-QCString fixSpaces(const QCString &s)
-{
- return substitute(s," ","&#160;");
-}
-
-void startTitle(OutputList &ol,const char *fileName,Definition *def)
-{
- ol.startHeaderSection();
- if (def) def->writeSummaryLinks(ol);
- ol.startTitleHead(fileName);
- ol.pushGeneratorState();
- ol.disable(OutputGenerator::Man);
-}
-
-void endTitle(OutputList &ol,const char *fileName,const char *name)
-{
- ol.popGeneratorState();
- ol.endTitleHead(fileName,name);
- ol.endHeaderSection();
-}
-
-void startFile(OutputList &ol,const char *name,const char *manName,
- const char *title,HighlightedItem hli,bool additionalIndices,
- const char *altSidebarName)
-{
- static bool disableIndex = Config_getBool("DISABLE_INDEX");
- ol.startFile(name,manName,title);
- ol.startQuickIndices();
- if (!disableIndex)
- {
- ol.writeQuickLinks(TRUE,hli,name);
- }
- if (!additionalIndices)
- {
- ol.endQuickIndices();
- }
- ol.writeSplitBar(altSidebarName ? altSidebarName : name);
- ol.writeSearchInfo();
-}
-
-void endFile(OutputList &ol,bool skipNavIndex,bool skipEndContents)
-{
- static bool generateTreeView = Config_getBool("GENERATE_TREEVIEW");
- ol.pushGeneratorState();
- ol.disableAllBut(OutputGenerator::Html);
- if (!skipNavIndex)
- {
- if (!skipEndContents) ol.endContents();
- if (generateTreeView)
- {
- ol.writeString("</div>\n");
- ol.writeString(" <div id=\"nav-path\" class=\"navpath\">\n");
- ol.writeString(" <ul>\n");
- }
- }
- ol.writeFooter(); // write the footer
- ol.popGeneratorState();
- ol.endFile();
-}
-
-void endFileWithNavPath(Definition *d,OutputList &ol)
-{
- static bool generateTreeView = Config_getBool("GENERATE_TREEVIEW");
- if (generateTreeView)
- {
- d->writeNavigationPath(ol);
- }
- endFile(ol,generateTreeView,TRUE);
-}
-
-//----------------------------------------------------------------------
-template<class T> void addMembersToIndex(T *def,LayoutDocManager::LayoutPart part,const QCString &name,const QCString &anchor)
-{
- bool hasMembers = def->getMemberLists().count()>0 || def->getMemberGroupSDict()!=0;
- Doxygen::indexList.addContentsItem(hasMembers,name,def->getReference(),def->getOutputFileBase(),anchor,hasMembers,TRUE);
- if (hasMembers)
- {
- Doxygen::indexList.incContentsDepth();
- QListIterator<LayoutDocEntry> eli(LayoutDocManager::instance().docEntries(part));
- LayoutDocEntry *lde;
- for (eli.toFirst();(lde=eli.current());++eli)
- {
- if (lde->kind()==LayoutDocEntry::MemberDef)
- {
- LayoutDocEntryMemberDef *lmd = (LayoutDocEntryMemberDef*)lde;
- MemberList *ml = def->getMemberList(lmd->type);
- if (ml)
- {
- MemberListIterator mi(*ml);
- MemberDef *md;
- for (mi.toFirst();(md=mi.current());++mi)
- {
- if (md->name().find('@')==-1)
- {
- Doxygen::indexList.addContentsItem(FALSE,
- md->name(),md->getReference(),md->getOutputFileBase(),md->anchor(),FALSE);
- }
- }
- }
- }
- else if (lde->kind()==LayoutDocEntry::NamespaceClasses ||
- lde->kind()==LayoutDocEntry::FileClasses)
- {
- ClassSDict *classes = def->getClassSDict();
- if (classes)
- {
- ClassDef *cd;
- ClassSDict::Iterator it(*classes);
- for (;(cd=it.current());++it)
- {
- if (cd->getOuterScope()==def)
- {
- Doxygen::indexList.addContentsItem(FALSE,
- cd->localName(),
- cd->getReference(),cd->getOutputFileBase(),cd->anchor(),FALSE,FALSE);
- }
- }
- }
- }
- }
-
- Doxygen::indexList.decContentsDepth();
- }
-}
-
-//----------------------------------------------------------------------------
-
-static bool classHasVisibleChildren(ClassDef *cd)
-{
- BaseClassList *bcl;
-
- if (cd->getLanguage()==SrcLangExt_VHDL) // reverse baseClass/subClass relation
- {
- if (cd->baseClasses()==0) return FALSE;
- bcl=cd->baseClasses();
- }
- else
- {
- if (cd->subClasses()==0) return FALSE;
- bcl=cd->subClasses();
- }
-
- BaseClassListIterator bcli(*bcl);
- for ( ; bcli.current() ; ++bcli)
- {
- if (bcli.current()->classDef->isVisibleInHierarchy())
- {
- return TRUE;
- }
- }
- return FALSE;
-}
-
-//----------------------------------------------------------------------------
-/*! Generates HTML Help tree of classes */
-
-static void writeClassTree(OutputList &ol,BaseClassList *bcl,bool hideSuper,int level,FTVHelp* ftv,bool addToIndex)
-{
- if (bcl==0) return;
- BaseClassListIterator bcli(*bcl);
- bool started=FALSE;
- for ( ; bcli.current() ; ++bcli)
- {
- ClassDef *cd=bcli.current()->classDef;
- bool b;
- if (cd->getLanguage()==SrcLangExt_VHDL)
- {
- b=hasVisibleRoot(cd->subClasses());
- }
- else
- {
- b=hasVisibleRoot(cd->baseClasses());
- }
-
- if (cd->isVisibleInHierarchy() && b) // hasVisibleRoot(cd->baseClasses()))
- {
- if (!started)
- {
- startIndexHierarchy(ol,level);
- if (addToIndex)
- {
- Doxygen::indexList.incContentsDepth();
- }
- if (ftv)
- {
- ftv->incContentsDepth();
- }
- started=TRUE;
- }
- ol.startIndexListItem();
- //printf("Passed...\n");
- bool hasChildren = !cd->visited && !hideSuper && classHasVisibleChildren(cd);
- //printf("tree4: Has children %s: %d\n",cd->name().data(),hasChildren);
- if (cd->isLinkable())
- {
- //printf("Writing class %s\n",cd->displayName().data());
- ol.startIndexItem(cd->getReference(),cd->getOutputFileBase());
- ol.parseText(cd->displayName());
- ol.endIndexItem(cd->getReference(),cd->getOutputFileBase());
- if (cd->isReference())
- {
- ol.startTypewriter();
- ol.docify(" [external]");
- ol.endTypewriter();
- }
- if (addToIndex)
- {
- Doxygen::indexList.addContentsItem(hasChildren,cd->displayName(),cd->getReference(),cd->getOutputFileBase(),cd->anchor());
- }
- if (ftv)
- {
- ftv->addContentsItem(hasChildren,cd->displayName(),cd->getReference(),cd->getOutputFileBase(),cd->anchor());
- }
- }
- else
- {
- ol.startIndexItem(0,0);
- ol.parseText(cd->name());
- ol.endIndexItem(0,0);
- if (addToIndex)
- {
- Doxygen::indexList.addContentsItem(hasChildren,cd->displayName(),0,0,0);
- }
- if (ftv)
- {
- ftv->addContentsItem(hasChildren,cd->displayName(),0,0,0);
- }
- }
- if (hasChildren)
- {
- //printf("Class %s at %p visited=%d\n",cd->name().data(),cd,cd->visited);
- bool wasVisited=cd->visited;
- cd->visited=TRUE;
- if (cd->getLanguage()==SrcLangExt_VHDL)
- {
- writeClassTree(ol,cd->baseClasses(),wasVisited,level+1,ftv,addToIndex);
- }
- else
- {
- writeClassTree(ol,cd->subClasses(),wasVisited,level+1,ftv,addToIndex);
- }
- }
- ol.endIndexListItem();
- }
- }
- if (started)
- {
- endIndexHierarchy(ol,level);
- if (addToIndex)
- {
- Doxygen::indexList.decContentsDepth();
- }
- if (ftv)
- {
- ftv->decContentsDepth();
- }
- }
-}
-
-//----------------------------------------------------------------------------
-
-static void writeClassTreeForList(OutputList &ol,ClassSDict *cl,bool &started,FTVHelp* ftv,bool addToIndex)
-{
- ClassSDict::Iterator cli(*cl);
- for (;cli.current(); ++cli)
- {
- ClassDef *cd=cli.current();
- //printf("class %s hasVisibleRoot=%d isVisibleInHierarchy=%d\n",
- // cd->name().data(),
- // hasVisibleRoot(cd->baseClasses()),
- // cd->isVisibleInHierarchy()
- // );
- bool b;
- if (cd->getLanguage()==SrcLangExt_VHDL)
- {
- if (!(VhdlDocGen::VhdlClasses)cd->protection()==VhdlDocGen::ENTITYCLASS)
- {
- continue;
- }
- b=!hasVisibleRoot(cd->subClasses());
- }
- else
- {
- b=!hasVisibleRoot(cd->baseClasses());
- }
-
- if (b) //filter on root classes
- {
- if (cd->isVisibleInHierarchy()) // should it be visible
- {
- if (!started)
- {
- startIndexHierarchy(ol,0);
- if (addToIndex)
- {
- Doxygen::indexList.incContentsDepth();
- }
- started=TRUE;
- }
- ol.startIndexListItem();
- bool hasChildren = !cd->visited && classHasVisibleChildren(cd);
- //printf("list: Has children %s: %d\n",cd->name().data(),hasChildren);
- if (cd->isLinkable())
- {
- //printf("Writing class %s isLinkable()=%d isLinkableInProject()=%d cd->templateMaster()=%p\n",
- // cd->displayName().data(),cd->isLinkable(),cd->isLinkableInProject(),cd->templateMaster());
- ol.startIndexItem(cd->getReference(),cd->getOutputFileBase());
- ol.parseText(cd->displayName());
- ol.endIndexItem(cd->getReference(),cd->getOutputFileBase());
- if (cd->isReference())
- {
- ol.startTypewriter();
- ol.docify(" [external]");
- ol.endTypewriter();
- }
- if (addToIndex)
- {
- Doxygen::indexList.addContentsItem(hasChildren,cd->displayName(),cd->getReference(),cd->getOutputFileBase(),cd->anchor(),FALSE,FALSE);
- }
- if (ftv)
- {
- ftv->addContentsItem(hasChildren,cd->displayName(),cd->getReference(),cd->getOutputFileBase(),cd->anchor());
- }
- }
- else
- {
- ol.startIndexItem(0,0);
- ol.parseText(cd->displayName());
- ol.endIndexItem(0,0);
- if (addToIndex)
- {
- Doxygen::indexList.addContentsItem(hasChildren,cd->displayName(),0,0,0,FALSE,FALSE);
- }
- if (ftv)
- {
- ftv->addContentsItem(hasChildren,cd->displayName(),0,0,0);
- }
- }
- if (cd->getLanguage()==SrcLangExt_VHDL && hasChildren)
- {
- writeClassTree(ol,cd->baseClasses(),cd->visited,1,ftv,addToIndex);
- cd->visited=TRUE;
- }
- else if (hasChildren)
- {
- writeClassTree(ol,cd->subClasses(),cd->visited,1,ftv,addToIndex);
- cd->visited=TRUE;
- }
- ol.endIndexListItem();
- }
- }
- }
-}
-
-static void writeClassHierarchy(OutputList &ol, FTVHelp* ftv,bool addToIndex)
-{
- initClassHierarchy(Doxygen::classSDict);
- initClassHierarchy(Doxygen::hiddenClasses);
- if (ftv)
- {
- ol.pushGeneratorState();
- ol.disable(OutputGenerator::Html);
- }
- bool started=FALSE;
- writeClassTreeForList(ol,Doxygen::classSDict,started,ftv,addToIndex);
- writeClassTreeForList(ol,Doxygen::hiddenClasses,started,ftv,addToIndex);
- if (started)
- {
- endIndexHierarchy(ol,0);
- if (addToIndex)
- {
- Doxygen::indexList.decContentsDepth();
- }
- }
- if (ftv)
- ol.popGeneratorState();
-}
-
-//----------------------------------------------------------------------------
-
-static int countClassesInTreeList(const ClassSDict &cl)
-{
- int count=0;
- ClassSDict::Iterator cli(cl);
- for (;cli.current(); ++cli)
- {
- ClassDef *cd=cli.current();
- if (!hasVisibleRoot(cd->baseClasses())) // filter on root classes
- {
- if (cd->isVisibleInHierarchy()) // should it be visible
- {
- if (cd->subClasses()) // should have sub classes
- {
- count++;
- }
- }
- }
- }
- return count;
-}
-
-static int countClassHierarchy()
-{
- int count=0;
- initClassHierarchy(Doxygen::classSDict);
- initClassHierarchy(Doxygen::hiddenClasses);
- count+=countClassesInTreeList(*Doxygen::classSDict);
- count+=countClassesInTreeList(*Doxygen::hiddenClasses);
- return count;
-}
-
-//----------------------------------------------------------------------------
-
-static void writeHierarchicalIndex(OutputList &ol)
-{
- if (hierarchyClasses==0) return;
- ol.pushGeneratorState();
- ol.disable(OutputGenerator::Man);
-
- LayoutNavEntry *lne = LayoutDocManager::instance().rootNavEntry()->find(LayoutNavEntry::ClassHierarchy);
- QCString title = lne ? lne->title() : theTranslator->trClassHierarchy();
- bool addToIndex = lne==0 || lne->visible();
-
- startFile(ol,"hierarchy",0, title, HLI_Hierarchy);
- startTitle(ol,0);
- ol.parseText(title);
- endTitle(ol,0,0);
- ol.startContents();
- ol.startTextBlock();
-
- if (addToIndex)
- {
- Doxygen::indexList.addContentsItem(TRUE,title,0,"hierarchy",0,TRUE,TRUE);
- }
-
- if (Config_getBool("HAVE_DOT") && Config_getBool("GRAPHICAL_HIERARCHY"))
- {
- ol.disable(OutputGenerator::Latex);
- ol.disable(OutputGenerator::RTF);
- ol.startParagraph();
- ol.startTextLink("inherits",0);
- ol.parseText(theTranslator->trGotoGraphicalHierarchy());
- ol.endTextLink();
- ol.endParagraph();
- ol.enable(OutputGenerator::Latex);
- ol.enable(OutputGenerator::RTF);
- }
- ol.parseText(lne ? lne->intro() : theTranslator->trClassHierarchyDescription());
- ol.endTextBlock();
-
- FTVHelp* ftv = 0;
- bool treeView=Config_getBool("USE_INLINE_TREES");
- if (treeView)
- {
- ftv = new FTVHelp(FALSE);
- }
-
- writeClassHierarchy(ol,ftv,addToIndex);
-
- if (ftv)
- {
- QGString outStr;
- FTextStream t(&outStr);
- ftv->generateTreeViewInline(t);
- ol.pushGeneratorState();
- ol.disableAllBut(OutputGenerator::Html);
- ol.writeString(outStr);
- ol.popGeneratorState();
- delete ftv;
- }
- endFile(ol);
- ol.popGeneratorState();
-}
-
-//----------------------------------------------------------------------------
-
-static void writeGraphicalClassHierarchy(OutputList &ol)
-{
- if (hierarchyClasses==0) return;
- ol.disableAllBut(OutputGenerator::Html);
- LayoutNavEntry *lne = LayoutDocManager::instance().rootNavEntry()->find(LayoutNavEntry::ClassHierarchy);
- QCString title = lne ? lne->title() : theTranslator->trClassHierarchy();
- startFile(ol,"inherits",0,title,HLI_Hierarchy,FALSE,"hierarchy");
- startTitle(ol,0);
- ol.parseText(title);
- endTitle(ol,0,0);
- ol.startContents();
- ol.startTextBlock();
- ol.startParagraph();
- ol.startTextLink("hierarchy",0);
- ol.parseText(theTranslator->trGotoTextualHierarchy());
- ol.endTextLink();
- ol.endParagraph();
- ol.endTextBlock();
- DotGfxHierarchyTable g;
- ol.writeGraphicalHierarchy(g);
- endFile(ol);
- ol.enableAll();
-}
-
-//----------------------------------------------------------------------------
-
-static void countFiles(int &htmlFiles,int &files)
-{
- htmlFiles=0;
- files=0;
- FileNameListIterator fnli(*Doxygen::inputNameList);
- FileName *fn;
- for (;(fn=fnli.current());++fnli)
- {
- FileNameIterator fni(*fn);
- FileDef *fd;
- for (;(fd=fni.current());++fni)
- {
- bool doc = fd->isLinkableInProject();
- bool src = fd->generateSourceFile();
- bool nameOk = !fd->isDocumentationFile();
- if (nameOk)
- {
- if (doc || src)
- {
- htmlFiles++;
- }
- if (doc)
- {
- files++;
- }
- }
- }
- }
-}
-
-//----------------------------------------------------------------------------
-
-static void writeFileIndex(OutputList &ol)
-{
- if (documentedHtmlFiles==0) return;
- ol.pushGeneratorState();
- ol.disable(OutputGenerator::Man);
- if (documentedFiles==0) ol.disableAllBut(OutputGenerator::Html);
- LayoutNavEntry *lne = LayoutDocManager::instance().rootNavEntry()->find(LayoutNavEntry::FileList);
- if (lne==0) lne = LayoutDocManager::instance().rootNavEntry()->find(LayoutNavEntry::Files); // fall back
- QCString title = lne ? lne->title() : theTranslator->trFileList();
- bool addToIndex = lne==0 || lne->visible();
-
- startFile(ol,"files",0,title,HLI_Files);
- startTitle(ol,0);
- //if (!Config_getString("PROJECT_NAME").isEmpty())
- //{
- // title.prepend(Config_getString("PROJECT_NAME")+" ");
- //}
- ol.parseText(title);
- endTitle(ol,0,0);
- ol.startContents();
- ol.startTextBlock();
-
- if (addToIndex)
- {
- Doxygen::indexList.addContentsItem(TRUE,title,0,"files",0,TRUE,TRUE);
- Doxygen::indexList.incContentsDepth();
- }
-
- ol.parseText(lne ? lne->intro() : theTranslator->trFileListDescription(Config_getBool("EXTRACT_ALL")));
- ol.endTextBlock();
-
- OutputNameDict outputNameDict(1009);
- OutputNameList outputNameList;
- outputNameList.setAutoDelete(TRUE);
-
- if (Config_getBool("FULL_PATH_NAMES"))
- {
- // re-sort input files in (dir,file) output order instead of (file,dir) input order
- FileName *fn=Doxygen::inputNameList->first();
- while (fn)
- {
- FileDef *fd=fn->first();
- while (fd)
- {
- QCString path=fd->getPath();
- if (path.isEmpty()) path="[external]";
- FileList *fl = outputNameDict.find(path);
- if (fl)
- {
- fl->inSort(fd);
- //printf("+ inserting %s---%s\n",fd->getPath().data(),fd->name().data());
- }
- else
- {
- //printf("o inserting %s---%s\n",fd->getPath().data(),fd->name().data());
- fl = new FileList(path);
- fl->inSort(fd);
- outputNameList.inSort(fl);
- outputNameDict.insert(path,fl);
- }
- fd=fn->next();
- }
- fn=Doxygen::inputNameList->next();
- }
- }
-
- ol.startIndexList();
- FileList *fl=0;
- if (Config_getBool("FULL_PATH_NAMES"))
- {
- fl = outputNameList.first();
- }
- else
- {
- fl = Doxygen::inputNameList->first();
- }
- while (fl)
- {
- FileDef *fd=fl->first();
- while (fd)
- {
- //printf("Found filedef %s\n",fd->name().data());
- bool doc = fd->isLinkableInProject();
- bool src = fd->generateSourceFile();
- bool nameOk = !fd->isDocumentationFile();
- if (nameOk && (doc || src) &&
- !fd->isReference())
- {
- QCString path;
- if (Config_getBool("FULL_PATH_NAMES"))
- {
- path=stripFromPath(fd->getPath().copy());
- }
- QCString fullName=fd->name();
- if (!path.isEmpty())
- {
- if (path.at(path.length()-1)!='/') fullName.prepend("/");
- fullName.prepend(path);
- }
-
- ol.startIndexKey();
- ol.docify(path);
- if (doc)
- {
- ol.writeObjectLink(0,fd->getOutputFileBase(),0,fd->name());
- if (addToIndex)
- {
- addMembersToIndex(fd,LayoutDocManager::File,fullName,QCString());
- }
- }
- else
- {
- ol.startBold();
- ol.docify(fd->name());
- ol.endBold();
- if (addToIndex)
- {
- Doxygen::indexList.addContentsItem(FALSE,fullName,0,0,0);
- }
- }
- if (src)
- {
- ol.pushGeneratorState();
- ol.disableAllBut(OutputGenerator::Html);
- ol.docify(" ");
- ol.startTextLink(fd->includeName(),0);
- ol.docify("[");
- ol.parseText(theTranslator->trCode());
- ol.docify("]");
- ol.endTextLink();
- ol.popGeneratorState();
- }
- ol.endIndexKey();
- bool hasBrief = !fd->briefDescription().isEmpty();
- ol.startIndexValue(hasBrief);
- if (hasBrief)
- {
- //ol.docify(" (");
- ol.parseDoc(
- fd->briefFile(),fd->briefLine(),
- fd,0,
- abbreviate(fd->briefDescription(),fd->name()),
- FALSE, // index words
- FALSE, // isExample
- 0, // example name
- TRUE, // single line
- TRUE // link from index
- );
- //ol.docify(")");
- }
- ol.endIndexValue(fd->getOutputFileBase(),hasBrief);
- //ol.popGeneratorState();
- // --------------------------------------------------------
- }
- fd=fl->next();
- }
- if (Config_getBool("FULL_PATH_NAMES"))
- {
- fl=outputNameList.next();
- }
- else
- {
- fl=Doxygen::inputNameList->next();
- }
- }
- ol.endIndexList();
-
- if (addToIndex)
- {
- Doxygen::indexList.decContentsDepth();
- }
-
- endFile(ol);
- ol.popGeneratorState();
-}
-
-//----------------------------------------------------------------------------
-static int countNamespaces()
-{
- int count=0;
- NamespaceSDict::Iterator nli(*Doxygen::namespaceSDict);
- NamespaceDef *nd;
- for (;(nd=nli.current());++nli)
- {
- if (nd->isLinkableInProject()) count++;
- }
- return count;
-}
-
-//----------------------------------------------------------------------------
-
-static void writeNamespaceIndex(OutputList &ol)
-{
- if (documentedNamespaces==0) return;
- ol.pushGeneratorState();
- ol.disable(OutputGenerator::Man);
- LayoutNavEntry *lne = LayoutDocManager::instance().rootNavEntry()->find(LayoutNavEntry::NamespaceList);
- if (lne==0) lne = LayoutDocManager::instance().rootNavEntry()->find(LayoutNavEntry::Namespaces); // fall back
- QCString title = lne ? lne->title() : theTranslator->trNamespaceList();
- bool addToIndex = lne==0 || lne->visible();
- startFile(ol,"namespaces",0,title,HLI_Namespaces);
- startTitle(ol,0);
- ol.parseText(title);
- endTitle(ol,0,0);
- ol.startContents();
- ol.startTextBlock();
- if (addToIndex)
- {
- Doxygen::indexList.addContentsItem(TRUE,title,0,"namespaces",0,TRUE,TRUE);
- Doxygen::indexList.incContentsDepth();
- }
- ol.parseText(lne ? lne->intro() : theTranslator->trNamespaceListDescription(Config_getBool("EXTRACT_ALL")));
- ol.endTextBlock();
-
- bool first=TRUE;
-
- NamespaceSDict::Iterator nli(*Doxygen::namespaceSDict);
- NamespaceDef *nd;
- for (nli.toFirst();(nd=nli.current());++nli)
- {
- if (nd->isLinkableInProject())
- {
- if (first)
- {
- ol.startIndexList();
- first=FALSE;
- }
- //ol.writeStartAnnoItem("namespace",nd->getOutputFileBase(),0,nd->name());
- ol.startIndexKey();
- if (nd->getLanguage()==SrcLangExt_VHDL)
- {
- ClassDef* ccd=getClass(nd->displayName());
- if (ccd) ol.writeObjectLink(0,ccd->getOutputFileBase(),0,nd->displayName());
- }
- else
- {
- ol.writeObjectLink(0,nd->getOutputFileBase(),0,nd->displayName());
- }
- ol.endIndexKey();
-
- bool hasBrief = !nd->briefDescription().isEmpty();
- ol.startIndexValue(hasBrief);
- if (hasBrief)
- {
- //ol.docify(" (");
- ol.parseDoc(
- nd->briefFile(),nd->briefLine(),
- nd,0,
- abbreviate(nd->briefDescription(),nd->displayName()),
- FALSE, // index words
- FALSE, // isExample
- 0, // example name
- TRUE, // single line
- TRUE // link from index
- );
- //ol.docify(")");
- }
- ol.endIndexValue(nd->getOutputFileBase(),hasBrief);
-
- if (addToIndex)
- {
- if (nd->getLanguage()==SrcLangExt_VHDL)
- {
- ClassDef* ccd=getClass(nd->displayName().data());
- if (ccd) Doxygen::indexList.addContentsItem(FALSE,ccd->displayName(),ccd->getReference(),ccd->getOutputFileBase(),0);
- }
- else
- {
- addMembersToIndex(nd,LayoutDocManager::Namespace,nd->displayName(),QCString());
- }
- }
- }
- }
- if (!first) ol.endIndexList();
- if (addToIndex)
- {
- Doxygen::indexList.decContentsDepth();
- }
- endFile(ol);
- ol.popGeneratorState();
-}
-
-//----------------------------------------------------------------------------
-
-static int countAnnotatedClasses(int *cp)
-{
- int count=0;
- int countPrinted=0;
- ClassSDict::Iterator cli(*Doxygen::classSDict);
- ClassDef *cd;
- for (;(cd=cli.current());++cli)
- {
- if (cd->isLinkableInProject() && cd->templateMaster()==0)
- {
- if (!cd->isEmbeddedInOuterScope())
- {
- countPrinted++;
- }
- count++;
- }
- }
- *cp = countPrinted;
- return count;
-}
-
-
-static void writeAnnotatedClassList(OutputList &ol)
-{
- LayoutNavEntry *lne = LayoutDocManager::instance().rootNavEntry()->find(LayoutNavEntry::ClassList);
- bool addToIndex = lne==0 || lne->visible();
-
- ol.startIndexList();
- ClassSDict::Iterator cli(*Doxygen::classSDict);
- ClassDef *cd;
-
- for (cli.toFirst();(cd=cli.current());++cli)
- {
- if (cd->getLanguage()==SrcLangExt_VHDL &&(!(VhdlDocGen::VhdlClasses)cd->protection()==VhdlDocGen::ENTITYCLASS ))
- continue;
-
- ol.pushGeneratorState();
- if (cd->isEmbeddedInOuterScope())
- {
- ol.disable(OutputGenerator::Latex);
- ol.disable(OutputGenerator::RTF);
- }
- if (cd->isLinkableInProject() && cd->templateMaster()==0)
- {
- QCString type=cd->compoundTypeString();
- ol.startIndexKey();
- if (cd->getLanguage()==SrcLangExt_VHDL)
- {
- QCString prot= VhdlDocGen::getProtectionName((VhdlDocGen::VhdlClasses)cd->protection());
- ol.docify(prot.data());
- ol.writeString(" ");
- }
- ol.writeObjectLink(0,cd->getOutputFileBase(),cd->anchor(),cd->displayName());
- ol.endIndexKey();
- bool hasBrief = !cd->briefDescription().isEmpty();
- ol.startIndexValue(hasBrief);
- if (hasBrief)
- {
- ol.parseDoc(
- cd->briefFile(),cd->briefLine(),
- cd,0,
- abbreviate(cd->briefDescription(),cd->displayName()),
- FALSE, // indexWords
- FALSE, // isExample
- 0, // example name
- TRUE, // single line
- TRUE // link from index
- );
- }
- ol.endIndexValue(cd->getOutputFileBase(),hasBrief);
-
- if (addToIndex)
- {
- addMembersToIndex(cd,LayoutDocManager::Class,cd->displayName(),cd->anchor());
- }
- }
- ol.popGeneratorState();
- }
- ol.endIndexList();
-}
-
-static QCString letterToLabel(char startLetter)
-{
- QCString s(5);
- if (isId(startLetter))
- {
- s[0]=startLetter; s[1]=0;
- }
- else
- {
- const char hex[]="0123456789abcdef";
- s[0]='0';
- s[1]='x';
- s[2]=hex[startLetter>>4];
- s[3]=hex[startLetter&0xF];
- s[4]=0;
- }
- return s;
-}
-
-//----------------------------------------------------------------------------
-
-class PrefixIgnoreClassList : public ClassList
-{
-public:
- virtual int compareItems(GCI item1, GCI item2)
- {
- ClassDef *c1=(ClassDef *)item1;
- ClassDef *c2=(ClassDef *)item2;
-
- QCString n1 = c1->className();
- QCString n2 = c2->className();
- return stricmp (n1.data()+getPrefixIndex(n1), n2.data()+getPrefixIndex(n2));
- }
-};
-
-class AlphaIndexTableCell
-{
- public:
- AlphaIndexTableCell(int row,int col,uchar letter,ClassDef *cd) :
- m_letter(letter), m_class(cd), m_row(row), m_col(col)
- { //printf("AlphaIndexTableCell(%d,%d,%c,%s)\n",row,col,letter!=0 ? letter: '-',
- // cd!=(ClassDef*)0x8 ? cd->name().data() : "<null>");
- }
-
- ClassDef *classDef() const { return m_class; }
- uchar letter() const { return m_letter; }
- int row() const { return m_row; }
- int column() const { return m_col; }
-
- private:
- uchar m_letter;
- ClassDef *m_class;
- int m_row;
- int m_col;
-};
-
-class AlphaIndexTableRows : public QList<AlphaIndexTableCell>
-{
- public:
- AlphaIndexTableRows() { setAutoDelete(TRUE); }
-};
-
-class AlphaIndexTableRowsIterator : public QListIterator<AlphaIndexTableCell>
-{
- public:
- AlphaIndexTableRowsIterator(const AlphaIndexTableRows &list) :
- QListIterator<AlphaIndexTableCell>(list) {}
-};
-
-class AlphaIndexTableColumns : public QList<AlphaIndexTableRows>
-{
- public:
- AlphaIndexTableColumns() { setAutoDelete(TRUE); }
-};
-
-// write an alphabetical index of all class with a header for each letter
-static void writeAlphabeticalClassList(OutputList &ol)
-{
- // What starting letters are used
- bool indexLetterUsed[256];
- memset (indexLetterUsed, 0, sizeof (indexLetterUsed));
-
- // first count the number of headers
- ClassSDict::Iterator cli(*Doxygen::classSDict);
- ClassDef *cd;
- uint startLetter=0;
- int headerItems=0;
- for (;(cd=cli.current());++cli)
- {
- if (cd->isLinkableInProject() && cd->templateMaster()==0)
- {
- if (cd->getLanguage()==SrcLangExt_VHDL && !((VhdlDocGen::VhdlClasses)cd->protection()==VhdlDocGen::ENTITYCLASS ))// no architecture
- continue;
-
- int index = getPrefixIndex(cd->className());
- //printf("name=%s index=%d %d\n",cd->className().data(),index,cd->protection());
- startLetter=toupper(cd->className().at(index))&0xFF;
- indexLetterUsed[startLetter] = true;
- }
- }
-
- // write quick link index (row of letters)
- QCString alphaLinks = "<div class=\"qindex\">";
- int l;
- for (l=0; l<256; l++)
- {
- if (indexLetterUsed[l])
- {
- if (headerItems) alphaLinks += "&#160;|&#160;";
- headerItems++;
- alphaLinks += (QCString)"<a class=\"qindex\" href=\"#letter_" +
- (char)l + "\">" +
- (char)l + "</a>";
- }
- }
- alphaLinks += "</div>\n";
- ol.writeString(alphaLinks);
-
-
- // the number of columns in the table
- const int columns = Config_getInt("COLS_IN_ALPHA_INDEX");
-
- int i,j;
- int totalItems = headerItems*2 + annotatedClasses; // number of items in the table (headers span 2 items)
- int rows = (totalItems + columns - 1)/columns; // number of rows in the table
-
- //printf("headerItems=%d totalItems=%d columns=%d rows=%d itemsInLastRow=%d\n",
- // headerItems,totalItems,columns,rows,itemsInLastRow);
-
- // Keep a list of classes for each starting letter
- PrefixIgnoreClassList classesByLetter[256];
- AlphaIndexTableColumns tableColumns;
-
- // fill the columns with the class list (row elements in each column,
- // expect for the columns with number >= itemsInLastRow, which get one
- // item less.
- //int icount=0;
- startLetter=0;
- for (cli.toFirst();(cd=cli.current());++cli)
- {
- if (cd->getLanguage()==SrcLangExt_VHDL && !((VhdlDocGen::VhdlClasses)cd->protection()==VhdlDocGen::ENTITYCLASS ))// no architecture
- continue;
-
- if (cd->isLinkableInProject() && cd->templateMaster()==0)
- {
- int index = getPrefixIndex(cd->className());
- startLetter=toupper(cd->className().at(index))&0xFF;
- // Do some sorting again, since the classes are sorted by name with
- // prefix, which should be ignored really.
- if (cd->getLanguage()==SrcLangExt_VHDL)
- {
- if ((VhdlDocGen::VhdlClasses)cd->protection()==VhdlDocGen::ENTITYCLASS )// no architecture
- classesByLetter[startLetter].inSort(cd);
- }
- else
- classesByLetter[startLetter].inSort(cd);
- }
- }
-
- #define NEXT_ROW() \
- do \
- { \
- if (row>maxRows) maxRows=row; \
- if (row>=rows && col<columns) \
- { \
- col++; \
- row=0; \
- tableRows = new AlphaIndexTableRows; \
- tableColumns.append(tableRows); \
- } \
- } \
- while(0) \
-
- AlphaIndexTableRows *tableRows = new AlphaIndexTableRows;
- tableColumns.append(tableRows);
- int col=0,row=0,maxRows=0;
- for (l=0; l<256; l++)
- {
- if (classesByLetter[l].count()>0)
- {
- // add special header cell
- tableRows->append(new AlphaIndexTableCell(row,col,(uchar)l,(ClassDef*)0x8));
- row++;
- tableRows->append(new AlphaIndexTableCell(row,col,0,(ClassDef*)0x8));
- row++;
- tableRows->append(new AlphaIndexTableCell(row,col,0,classesByLetter[l].at(0)));
- row++;
- NEXT_ROW();
- for (i=1; i<(int)classesByLetter[l].count(); i++)
- {
- // add normal cell
- tableRows->append(new AlphaIndexTableCell(row,col,0,classesByLetter[l].at(i)));
- row++;
- NEXT_ROW();
- }
- }
- }
-
- // create row iterators for each column
- AlphaIndexTableRowsIterator **colIterators = new AlphaIndexTableRowsIterator*[columns];
- for (i=0;i<columns;i++)
- {
- if (i<(int)tableColumns.count())
- {
- colIterators[i] = new AlphaIndexTableRowsIterator(*tableColumns.at(i));
- }
- else // empty column
- {
- colIterators[i] = 0;
- }
- }
-
- ol.writeString("<table style=\"margin: 10px; white-space: nowrap;\" align=\"center\" width=\"95%\" border=\"0\" cellspacing=\"0\" cellpadding=\"0\">\n");
- // generate table
- for (i=0;i<=maxRows;i++) // foreach table row
- {
- //printf("writing row %d\n",i);
- //ol.nextTableRow();
- ol.writeString("<tr>");
- // the last column may contain less items then the others
- //int colsInRow = (i<rows-1) ? columns : itemsInLastRow;
- //printf("row [%d]\n",i);
- for (j=0;j<columns;j++) // foreach table column
- {
- if (colIterators[j])
- {
- AlphaIndexTableCell *cell = colIterators[j]->current();
- if (cell)
- {
- if (cell->row()==i)
- {
- if (cell->letter()!=0)
- {
- QCString s = letterToLabel(cell->letter());
- ol.writeString("<td rowspan=\"2\" valign=\"bottom\">");
- ol.writeString("<a name=\"letter_");
- ol.writeString(s);
- ol.writeString("\"></a>");
- ol.writeString("<table border=\"0\" cellspacing=\"0\" cellpadding=\"0\">"
- "<tr>"
- "<td><div class=\"ah\">&#160;&#160;");
- ol.writeString(s);
- ol.writeString( "&#160;&#160;</div>"
- "</td>"
- "</tr>"
- "</table>\n");
- }
- else if (cell->classDef()!=(ClassDef*)0x8)
- {
- cd = cell->classDef();
- ol.writeString("<td valign=\"top\">");
- QCString namesp,cname;
- //if (cd->getNamespaceDef()) namesp=cd->getNamespaceDef()->displayName();
- //QCString cname=cd->className();
- extractNamespaceName(cd->name(),cname,namesp);
- QCString nsDispName;
- SrcLangExt lang = cd->getLanguage();
- QCString sep = getLanguageSpecificSeparator(lang);
- if (sep!="::")
- {
- nsDispName=substitute(namesp,"::",sep);
- }
- else
- {
- nsDispName=namesp;
- }
- if (cname.right(2)=="-g" || cname.right(2)=="-p")
- {
- cname = cname.left(cname.length()-2);
- }
-
- ol.writeObjectLink(cd->getReference(),
- cd->getOutputFileBase(),cd->anchor(),cname);
- if (!namesp.isEmpty())
- {
- ol.docify(" (");
- NamespaceDef *nd = getResolvedNamespace(namesp);
- if (nd && nd->isLinkable())
- {
- ol.writeObjectLink(nd->getReference(),
- nd->getOutputFileBase(),0,nsDispName);
- }
- else
- {
- ol.docify(nsDispName);
- }
- ol.docify(")");
- }
- ol.writeNonBreakableSpace(3);
- }
- ++(*colIterators[j]);
- if (cell->letter()!=0 || cell->classDef()!=(ClassDef*)0x8)
- {
- ol.writeString("</td>");
- }
- }
- }
- else
- {
- ol.writeString("<td></td>");
- }
- }
- }
- ol.writeString("</tr>\n");
- }
- ol.writeString("</table>\n");
-
- ol.writeString(alphaLinks);
-
- // release the temporary memory
- for (i=0;i<columns;i++)
- {
- delete colIterators[i];
- }
- delete[] colIterators;
-}
-
-//----------------------------------------------------------------------------
-
-static void writeAlphabeticalIndex(OutputList &ol)
-{
- if (annotatedClasses==0) return;
- ol.pushGeneratorState();
- ol.disableAllBut(OutputGenerator::Html);
- LayoutNavEntry *lne = LayoutDocManager::instance().rootNavEntry()->find(LayoutNavEntry::ClassIndex);
- QCString title = lne ? lne->title() : theTranslator->trCompoundIndex();
- bool addToIndex = lne==0 || lne->visible();
-
- startFile(ol,"classes",0,title,HLI_Classes);
-
- startTitle(ol,0);
- ol.parseText(title);
- endTitle(ol,0,0);
-
- if (addToIndex)
- {
- Doxygen::indexList.addContentsItem(TRUE,title,0,"classes",0,TRUE,TRUE);
- }
-
- ol.startContents();
- writeAlphabeticalClassList(ol);
- endFile(ol); // contains ol.endContents()
-
- ol.popGeneratorState();
-}
-
-//----------------------------------------------------------------------------
-
-static void writeAnnotatedIndex(OutputList &ol)
-{
- //printf("writeAnnotatedIndex: count=%d printed=%d\n",
- // annotatedClasses,annotatedClassesPrinted);
- if (annotatedClasses==0) return;
-
- ol.pushGeneratorState();
- ol.disable(OutputGenerator::Man);
- if (annotatedClassesPrinted==0)
- {
- ol.disable(OutputGenerator::Latex);
- ol.disable(OutputGenerator::RTF);
- }
- LayoutNavEntry *lne = LayoutDocManager::instance().rootNavEntry()->find(LayoutNavEntry::ClassList);
- if (lne==0) lne = LayoutDocManager::instance().rootNavEntry()->find(LayoutNavEntry::Classes); // fall back
- QCString title = lne ? lne->title() : theTranslator->trCompoundList();
- bool addToIndex = lne==0 || lne->visible();
-
- if (Config_getBool("OPTIMIZE_OUTPUT_VHDL"))
- {
- VhdlDocGen::findConstraintFile(lne);
- }
-
- startFile(ol,"annotated",0,title,HLI_Annotated);
-
- startTitle(ol,0);
- ol.parseText(title);
- endTitle(ol,0,0);
-
- ol.startContents();
-
- if (addToIndex)
- {
- Doxygen::indexList.addContentsItem(TRUE,title,0,"annotated",0,TRUE,TRUE);
- Doxygen::indexList.incContentsDepth();
- }
-
- ol.startTextBlock();
- ol.parseText(lne ? lne->intro() : theTranslator->trCompoundListDescription());
- ol.endTextBlock();
-
- writeAnnotatedClassList(ol);
-
- if (addToIndex)
- {
- Doxygen::indexList.decContentsDepth();
- }
-
- endFile(ol); // contains ol.endContents()
- ol.popGeneratorState();
-}
-
-//----------------------------------------------------------------------------
-static void writeClassLinkForMember(OutputList &ol,MemberDef *md,const char *separator,
- QCString &prevClassName)
-{
- ClassDef *cd=md->getClassDef();
- if ( cd && prevClassName!=cd->displayName())
- {
- ol.docify(separator);
- ol.writeObjectLink(md->getReference(),md->getOutputFileBase(),md->anchor(),
- cd->displayName());
- ol.writeString("\n");
- prevClassName = cd->displayName();
- }
-}
-
-static void writeFileLinkForMember(OutputList &ol,MemberDef *md,const char *separator,
- QCString &prevFileName)
-{
- FileDef *fd=md->getFileDef();
- if (fd && prevFileName!=fd->name())
- {
- ol.docify(separator);
- ol.writeObjectLink(md->getReference(),md->getOutputFileBase(),md->anchor(),
- fd->name());
- ol.writeString("\n");
- prevFileName = fd->name();
- }
-}
-
-static void writeNamespaceLinkForMember(OutputList &ol,MemberDef *md,const char *separator,
- QCString &prevNamespaceName)
-{
- NamespaceDef *nd=md->getNamespaceDef();
- if (nd && prevNamespaceName!=nd->name())
- {
- ol.docify(separator);
- ol.writeObjectLink(md->getReference(),md->getOutputFileBase(),md->anchor(),
- nd->name());
- ol.writeString("\n");
- prevNamespaceName = nd->name();
- }
-}
-
-static void writeMemberList(OutputList &ol,bool useSections,int page,
- MemberIndexList memberLists[MEMBER_INDEX_ENTRIES],
- DefinitionIntf::DefType type)
-{
- int pi;
- // page==-1 => write all member indices to one page (used when total members is small)
- // page!=-1 => write all member for this page only (used when total member is large)
- int startIndex = page==-1 ? 0 : page;
- int endIndex = page==-1 ? MEMBER_INDEX_ENTRIES-1 : page;
- ASSERT((int)type<3);
-
- typedef void (*writeLinkForMember_t)(OutputList &ol,MemberDef *md,const char *separator,
- QCString &prevNamespaceName);
-
- // each index tab has its own write function
- static writeLinkForMember_t writeLinkForMemberMap[3] =
- {
- &writeClassLinkForMember,
- &writeFileLinkForMember,
- &writeNamespaceLinkForMember
- };
- QCString prevName;
- QCString prevDefName;
- bool first=TRUE;
- bool firstSection=TRUE;
- bool firstItem=TRUE;
- for (pi=startIndex; pi<=endIndex; pi++) // page==-1 => pi=[0..127], page!=-1 => pi=page
- {
- MemberIndexList *ml = &memberLists[pi];
- if (ml->count()==0) continue;
- ml->sort();
- QListIterator<MemberDef> mli(*ml);
- MemberDef *md;
- for (mli.toFirst();(md=mli.current());++mli)
- {
- const char *sep;
- bool isFunc=!md->isObjCMethod() &&
- (md->isFunction() || md->isSlot() || md->isSignal());
- QCString name=md->name();
- int startIndex = getPrefixIndex(name);
- if (QCString(name.data()+startIndex)!=prevName) // new entry
- {
- if ((prevName.isEmpty() ||
- tolower(name.at(startIndex))!=tolower(prevName.at(0))) &&
- useSections) // new section
- {
- if (!firstItem) ol.endItemListItem();
- if (!firstSection) ol.endItemList();
- char cl[2];
- cl[0] = tolower(name.at(startIndex));
- cl[1] = 0;
- QCString cs = letterToLabel(cl[0]);
- QCString anchor=(QCString)"index_"+cs;
- QCString title=(QCString)"- "+cl+" -";
- ol.startSection(anchor,title,SectionInfo::Subsection);
- ol.docify(title);
- ol.endSection(anchor,SectionInfo::Subsection);
- ol.startItemList();
- firstSection=FALSE;
- firstItem=TRUE;
- }
- else if (!useSections && first)
- {
- ol.startItemList();
- first=FALSE;
- }
-
- // member name
- if (!firstItem) ol.endItemListItem();
- ol.startItemListItem();
- firstItem=FALSE;
- ol.docify(name);
- if (isFunc) ol.docify("()");
- ol.writeString("\n");
-
- // link to class
- prevDefName="";
- sep = ": ";
- prevName = name.data()+startIndex;
- }
- else // same entry
- {
- sep = ", ";
- // link to class for other members with the same name
- }
- // write the link for the specific list type
- writeLinkForMemberMap[(int)type](ol,md,sep,prevDefName);
- }
- }
- if (!firstItem) ol.endItemListItem();
- ol.endItemList();
-}
-
-//----------------------------------------------------------------------------
-
-void initClassMemberIndices()
-{
- int i=0;
- int j=0;
- for (j=0;j<CMHL_Total;j++)
- {
- documentedClassMembers[j]=0;
- for (i=0;i<MEMBER_INDEX_ENTRIES;i++)
- {
- g_memberIndexLetterUsed[j][i].clear();
- }
- }
-}
-
-void addClassMemberNameToIndex(MemberDef *md)
-{
- static bool hideFriendCompounds = Config_getBool("HIDE_FRIEND_COMPOUNDS");
- ClassDef *cd=0;
-
-
-
- if (md->isLinkableInProject() &&
- (cd=md->getClassDef()) &&
- cd->isLinkableInProject() &&
- cd->templateMaster()==0)
- {
- QCString n = md->name();
- int index = getPrefixIndex(n);
- uchar charCode = (uchar)n.at(index);
- uint letter = charCode<128 ? tolower(charCode) : charCode;
- if (!n.isEmpty())
- {
- bool isFriendToHide = hideFriendCompounds &&
- (QCString(md->typeString())=="friend class" ||
- QCString(md->typeString())=="friend struct" ||
- QCString(md->typeString())=="friend union");
- if (!(md->isFriend() && isFriendToHide))
- {
- g_memberIndexLetterUsed[CMHL_All][letter].append(md);
- documentedClassMembers[CMHL_All]++;
- }
- if (md->isFunction() || md->isSlot() || md->isSignal())
- {
- g_memberIndexLetterUsed[CMHL_Functions][letter].append(md);
- documentedClassMembers[CMHL_Functions]++;
- }
- else if (md->isVariable())
- {
- g_memberIndexLetterUsed[CMHL_Variables][letter].append(md);
- documentedClassMembers[CMHL_Variables]++;
- }
- else if (md->isTypedef())
- {
- g_memberIndexLetterUsed[CMHL_Typedefs][letter].append(md);
- documentedClassMembers[CMHL_Typedefs]++;
- }
- else if (md->isEnumerate())
- {
- g_memberIndexLetterUsed[CMHL_Enums][letter].append(md);
- documentedClassMembers[CMHL_Enums]++;
- }
- else if (md->isEnumValue())
- {
- g_memberIndexLetterUsed[CMHL_EnumValues][letter].append(md);
- documentedClassMembers[CMHL_EnumValues]++;
- }
- else if (md->isProperty())
- {
- g_memberIndexLetterUsed[CMHL_Properties][letter].append(md);
- documentedClassMembers[CMHL_Properties]++;
- }
- else if (md->isEvent())
- {
- g_memberIndexLetterUsed[CMHL_Events][letter].append(md);
- documentedClassMembers[CMHL_Events]++;
- }
- else if (md->isRelated() || md->isForeign() ||
- (md->isFriend() && !isFriendToHide))
- {
- g_memberIndexLetterUsed[CMHL_Related][letter].append(md);
- documentedClassMembers[CMHL_Related]++;
- }
- }
- }
-}
-
-//----------------------------------------------------------------------------
-
-void initNamespaceMemberIndices()
-{
- int i=0;
- int j=0;
- for (j=0;j<NMHL_Total;j++)
- {
- documentedNamespaceMembers[j]=0;
- for (i=0;i<MEMBER_INDEX_ENTRIES;i++)
- {
- g_namespaceIndexLetterUsed[j][i].clear();
- }
- }
-}
-
-void addNamespaceMemberNameToIndex(MemberDef *md)
-{
- NamespaceDef *nd=md->getNamespaceDef();
- if (nd && nd->isLinkableInProject() && md->isLinkableInProject())
- {
- QCString n = md->name();
- int index = getPrefixIndex(n);
- uchar charCode = (uchar)n.at(index);
- uint letter = charCode<128 ? tolower(charCode) : charCode;
- if (!n.isEmpty())
- {
- g_namespaceIndexLetterUsed[NMHL_All][letter].append(md);
- documentedNamespaceMembers[NMHL_All]++;
-
- if (md->isFunction())
- {
- g_namespaceIndexLetterUsed[NMHL_Functions][letter].append(md);
- documentedNamespaceMembers[NMHL_Functions]++;
- }
- else if (md->isVariable())
- {
- g_namespaceIndexLetterUsed[NMHL_Variables][letter].append(md);
- documentedNamespaceMembers[NMHL_Variables]++;
- }
- else if (md->isTypedef())
- {
- g_namespaceIndexLetterUsed[NMHL_Typedefs][letter].append(md);
- documentedNamespaceMembers[NMHL_Typedefs]++;
- }
- else if (md->isEnumerate())
- {
- g_namespaceIndexLetterUsed[NMHL_Enums][letter].append(md);
- documentedNamespaceMembers[NMHL_Enums]++;
- }
- else if (md->isEnumValue())
- {
- g_namespaceIndexLetterUsed[NMHL_EnumValues][letter].append(md);
- documentedNamespaceMembers[NMHL_EnumValues]++;
- }
- }
- }
-}
-
-//----------------------------------------------------------------------------
-
-void initFileMemberIndices()
-{
- int i=0;
- int j=0;
- for (j=0;j<NMHL_Total;j++)
- {
- documentedFileMembers[j]=0;
- for (i=0;i<MEMBER_INDEX_ENTRIES;i++)
- {
- g_fileIndexLetterUsed[j][i].clear();
- }
- }
-}
-
-void addFileMemberNameToIndex(MemberDef *md)
-{
- FileDef *fd=md->getFileDef();
- if (fd && fd->isLinkableInProject() && md->isLinkableInProject())
- {
- QCString n = md->name();
- int index = getPrefixIndex(n);
- uchar charCode = (uchar)n.at(index);
- uint letter = charCode<128 ? tolower(charCode) : charCode;
- if (!n.isEmpty())
- {
- g_fileIndexLetterUsed[FMHL_All][letter].append(md);
- documentedFileMembers[FMHL_All]++;
-
- if (md->isFunction())
- {
- g_fileIndexLetterUsed[FMHL_Functions][letter].append(md);
- documentedFileMembers[FMHL_Functions]++;
- }
- else if (md->isVariable())
- {
- g_fileIndexLetterUsed[FMHL_Variables][letter].append(md);
- documentedFileMembers[FMHL_Variables]++;
- }
- else if (md->isTypedef())
- {
- g_fileIndexLetterUsed[FMHL_Typedefs][letter].append(md);
- documentedFileMembers[FMHL_Typedefs]++;
- }
- else if (md->isEnumerate())
- {
- g_fileIndexLetterUsed[FMHL_Enums][letter].append(md);
- documentedFileMembers[FMHL_Enums]++;
- }
- else if (md->isEnumValue())
- {
- g_fileIndexLetterUsed[FMHL_EnumValues][letter].append(md);
- documentedFileMembers[FMHL_EnumValues]++;
- }
- else if (md->isDefine())
- {
- g_fileIndexLetterUsed[FMHL_Defines][letter].append(md);
- documentedFileMembers[FMHL_Defines]++;
- }
- }
- }
-}
-
-//----------------------------------------------------------------------------
-
-static void writeQuickMemberIndex(OutputList &ol,
- MemberIndexList charUsed[MEMBER_INDEX_ENTRIES],int page,
- QCString fullName,bool multiPage)
-{
- bool first=TRUE;
- int i;
- startQuickIndexList(ol,TRUE);
- for (i=33;i<127;i++)
- {
- char is[2];is[0]=(char)i;is[1]='\0';
- QCString ci = letterToLabel((char)i);
- if (charUsed[i].count()>0)
- {
- QCString anchor;
- QCString extension=Doxygen::htmlFileExtension;
- if (!multiPage)
- anchor="#index_";
- else if (first)
- anchor=fullName+extension+"#index_";
- else
- anchor=fullName+QCString().sprintf("_0x%02x",i)+extension+"#index_";
- startQuickIndexItem(ol,anchor+ci,i==page,TRUE,first);
- ol.writeString(is);
- endQuickIndexItem(ol);
- first=FALSE;
- }
- }
- endQuickIndexList(ol);
-}
-
-//----------------------------------------------------------------------------
-
-struct CmhlInfo
-{
- CmhlInfo(const char *fn,const char *t) : fname(fn), title(t) {}
- const char *fname;
- QCString title;
-};
-
-static const CmhlInfo *getCmhlInfo(int hl)
-{
- static bool fortranOpt = Config_getBool("OPTIMIZE_FOR_FORTRAN");
- static bool vhdlOpt = Config_getBool("OPTIMIZE_OUTPUT_VHDL");
- static CmhlInfo cmhlInfo[] =
- {
- CmhlInfo("functions", theTranslator->trAll()),
- CmhlInfo("functions_func",
- fortranOpt ? theTranslator->trSubprograms() :
- vhdlOpt ? VhdlDocGen::trFunctionAndProc() :
- theTranslator->trFunctions()),
- CmhlInfo("functions_vars",theTranslator->trVariables()),
- CmhlInfo("functions_type",theTranslator->trTypedefs()),
- CmhlInfo("functions_enum",theTranslator->trEnumerations()),
- CmhlInfo("functions_eval",theTranslator->trEnumerationValues()),
- CmhlInfo("functions_prop",theTranslator->trProperties()),
- CmhlInfo("functions_evnt",theTranslator->trEvents()),
- CmhlInfo("functions_rela",theTranslator->trRelatedFunctions())
- };
- return &cmhlInfo[hl];
-}
-
-static void writeClassMemberIndexFiltered(OutputList &ol, ClassMemberHighlight hl)
-{
- if (documentedClassMembers[hl]==0) return;
-
- static bool disableIndex = Config_getBool("DISABLE_INDEX");
-
- bool multiPageIndex=FALSE;
- int numPages=1;
- if (documentedClassMembers[hl]>MAX_ITEMS_BEFORE_MULTIPAGE_INDEX)
- {
- multiPageIndex=TRUE;
- numPages=127;
- }
-
- ol.pushGeneratorState();
- ol.disableAllBut(OutputGenerator::Html);
-
- QCString extension=Doxygen::htmlFileExtension;
- LayoutNavEntry *lne = LayoutDocManager::instance().rootNavEntry()->find(LayoutNavEntry::ClassMembers);
- QCString title = lne ? lne->title() : theTranslator->trCompoundMembers();
- if (hl!=CMHL_All) title+=(QCString)" - "+getCmhlInfo(hl)->title;
- bool addToIndex = lne==0 || lne->visible();
-
- if (addToIndex)
- {
- Doxygen::indexList.addContentsItem(multiPageIndex,getCmhlInfo(hl)->title,0,
- getCmhlInfo(hl)->fname,0,multiPageIndex,TRUE);
- if (multiPageIndex) Doxygen::indexList.incContentsDepth();
- }
-
- int page;
- bool first=TRUE;
- for (page=0;page<numPages;page++)
- {
- if (!multiPageIndex || g_memberIndexLetterUsed[hl][page].count()>0)
- {
- QCString fileName = getCmhlInfo(hl)->fname;
- if (multiPageIndex)
- {
- if (!first)
- {
- fileName+=QCString().sprintf("_0x%02x",page);
- }
- char cs[2];
- cs[0]=page;
- cs[1]=0;
- if (addToIndex)
- {
- Doxygen::indexList.addContentsItem(FALSE,cs,0,fileName,0,FALSE,TRUE);
- }
- }
- bool quickIndex = documentedClassMembers[hl]>maxItemsBeforeQuickIndex;
-
- ol.startFile(fileName+extension,0,title);
- ol.startQuickIndices();
- if (!disableIndex)
- {
- ol.writeQuickLinks(TRUE,HLI_Functions,0);
- startQuickIndexList(ol);
-
- // index item for global member list
- startQuickIndexItem(ol,
- getCmhlInfo(0)->fname+Doxygen::htmlFileExtension,hl==CMHL_All,TRUE,first);
- ol.writeString(fixSpaces(getCmhlInfo(0)->title));
- endQuickIndexItem(ol);
-
- int i;
- // index items per category member lists
- for (i=1;i<CMHL_Total;i++)
- {
- if (documentedClassMembers[i]>0)
- {
- startQuickIndexItem(ol,getCmhlInfo(i)->fname+Doxygen::htmlFileExtension,hl==i,TRUE,first);
- ol.writeString(fixSpaces(getCmhlInfo(i)->title));
- //printf("multiPageIndex=%d first=%d fileName=%s file=%s title=%s\n",
- // multiPageIndex,first,fileName.data(),getCmhlInfo(i)->fname,getCmhlInfo(i)->title.data());
- endQuickIndexItem(ol);
- }
- }
-
- endQuickIndexList(ol);
-
- // quick alphabetical index
- if (quickIndex)
- {
- writeQuickMemberIndex(ol,g_memberIndexLetterUsed[hl],page,
- getCmhlInfo(hl)->fname,multiPageIndex);
- }
- }
- ol.endQuickIndices();
- ol.writeSplitBar(fileName);
- ol.writeSearchInfo();
-
- ol.startContents();
-
- if (hl==CMHL_All)
- {
- ol.startTextBlock();
- ol.parseText(lne ? lne->intro() : theTranslator->trCompoundMembersDescription(Config_getBool("EXTRACT_ALL")));
- ol.endTextBlock();
- }
- else
- {
- // hack to work around a mozilla bug, which refuses to switch to
- // normal lists otherwise
- ol.writeString("&#160;");
- }
- //ol.newParagraph(); // FIXME:PARA
- writeMemberList(ol,quickIndex,
- multiPageIndex?page:-1,
- g_memberIndexLetterUsed[hl],
- Definition::TypeClass);
- endFile(ol);
- first=FALSE;
- }
- }
-
- if (multiPageIndex && addToIndex) Doxygen::indexList.decContentsDepth();
-
- ol.popGeneratorState();
-}
-
-static void writeClassMemberIndex(OutputList &ol)
-{
- LayoutNavEntry *lne = LayoutDocManager::instance().rootNavEntry()->find(LayoutNavEntry::ClassMembers);
- bool addToIndex = lne==0 || lne->visible();
-
- if (documentedClassMembers[CMHL_All]>0 && addToIndex)
- {
- Doxygen::indexList.addContentsItem(TRUE,lne ? lne->title() : theTranslator->trCompoundMembers(),0,"functions",0);
- Doxygen::indexList.incContentsDepth();
- }
- writeClassMemberIndexFiltered(ol,CMHL_All);
- writeClassMemberIndexFiltered(ol,CMHL_Functions);
- writeClassMemberIndexFiltered(ol,CMHL_Variables);
- writeClassMemberIndexFiltered(ol,CMHL_Typedefs);
- writeClassMemberIndexFiltered(ol,CMHL_Enums);
- writeClassMemberIndexFiltered(ol,CMHL_EnumValues);
- writeClassMemberIndexFiltered(ol,CMHL_Properties);
- writeClassMemberIndexFiltered(ol,CMHL_Events);
- writeClassMemberIndexFiltered(ol,CMHL_Related);
- if (documentedClassMembers[CMHL_All]>0 && addToIndex)
- {
- Doxygen::indexList.decContentsDepth();
- }
-
-}
-
-//----------------------------------------------------------------------------
-
-struct FmhlInfo
-{
- FmhlInfo(const char *fn,const char *t) : fname(fn), title(t) {}
- const char *fname;
- QCString title;
-};
-
-static const FmhlInfo *getFmhlInfo(int hl)
-{
- static bool fortranOpt = Config_getBool("OPTIMIZE_FOR_FORTRAN");
- static bool vhdlOpt = Config_getBool("OPTIMIZE_OUTPUT_VHDL");
- static FmhlInfo fmhlInfo[] =
- {
- FmhlInfo("globals", theTranslator->trAll()),
- FmhlInfo("globals_func",
- fortranOpt ? theTranslator->trSubprograms() :
- vhdlOpt ? VhdlDocGen::trFunctionAndProc() :
- theTranslator->trFunctions()),
- FmhlInfo("globals_vars",theTranslator->trVariables()),
- FmhlInfo("globals_type",theTranslator->trTypedefs()),
- FmhlInfo("globals_enum",theTranslator->trEnumerations()),
- FmhlInfo("globals_eval",theTranslator->trEnumerationValues()),
- FmhlInfo("globals_defs",theTranslator->trDefines())
- };
- return &fmhlInfo[hl];
-}
-
-static void writeFileMemberIndexFiltered(OutputList &ol, FileMemberHighlight hl)
-{
- if (documentedFileMembers[hl]==0) return;
-
- static bool disableIndex = Config_getBool("DISABLE_INDEX");
-
- bool multiPageIndex=FALSE;
- int numPages=1;
- if (documentedFileMembers[hl]>MAX_ITEMS_BEFORE_MULTIPAGE_INDEX)
- {
- multiPageIndex=TRUE;
- numPages=127;
- }
-
- ol.pushGeneratorState();
- ol.disableAllBut(OutputGenerator::Html);
-
- QCString extension=Doxygen::htmlFileExtension;
- LayoutNavEntry *lne = LayoutDocManager::instance().rootNavEntry()->find(LayoutNavEntry::FileGlobals);
- QCString title = lne ? lne->title() : theTranslator->trFileMembers();
- bool addToIndex = lne==0 || lne->visible();
-
- if (addToIndex)
- {
- Doxygen::indexList.addContentsItem(multiPageIndex,getFmhlInfo(hl)->title,0,
- getFmhlInfo(hl)->fname,0,multiPageIndex,TRUE);
- if (multiPageIndex) Doxygen::indexList.incContentsDepth();
- }
-
- int page;
- bool first=TRUE;
- for (page=0;page<numPages;page++)
- {
- if (!multiPageIndex || g_fileIndexLetterUsed[hl][page].count()>0)
- {
- QCString fileName = getFmhlInfo(hl)->fname;
- if (multiPageIndex)
- {
- if (!first)
- {
- fileName+=QCString().sprintf("_0x%02x",page);
- }
- char cs[2];
- cs[0]=page;
- cs[1]=0;
- if (addToIndex)
- {
- Doxygen::indexList.addContentsItem(FALSE,cs,0,fileName,0,FALSE,TRUE);
- }
- }
- bool quickIndex = documentedFileMembers[hl]>maxItemsBeforeQuickIndex;
-
- ol.startFile(fileName+extension,0,title);
- ol.startQuickIndices();
- if (!disableIndex)
- {
- ol.writeQuickLinks(TRUE,HLI_Globals,0);
- startQuickIndexList(ol);
-
- // index item for all file member lists
- startQuickIndexItem(ol,
- getFmhlInfo(0)->fname+Doxygen::htmlFileExtension,hl==FMHL_All,TRUE,first);
- ol.writeString(fixSpaces(getFmhlInfo(0)->title));
- endQuickIndexItem(ol);
-
- int i;
- // index items for per category member lists
- for (i=1;i<FMHL_Total;i++)
- {
- if (documentedFileMembers[i]>0)
- {
- startQuickIndexItem(ol,
- getFmhlInfo(i)->fname+Doxygen::htmlFileExtension,hl==i,TRUE,first);
- ol.writeString(fixSpaces(getFmhlInfo(i)->title));
- endQuickIndexItem(ol);
- }
- }
-
- endQuickIndexList(ol);
-
- if (quickIndex)
- {
- writeQuickMemberIndex(ol,g_fileIndexLetterUsed[hl],page,
- getFmhlInfo(hl)->fname,multiPageIndex);
- }
- }
- ol.endQuickIndices();
- ol.writeSplitBar(fileName);
- ol.writeSearchInfo();
-
- ol.startContents();
-
- if (hl==FMHL_All)
- {
- ol.startTextBlock();
- ol.parseText(lne ? lne->intro() : theTranslator->trFileMembersDescription(Config_getBool("EXTRACT_ALL")));
- ol.endTextBlock();
- }
- else
- {
- // hack to work around a mozilla bug, which refuses to switch to
- // normal lists otherwise
- ol.writeString("&#160;");
- }
- //ol.newParagraph(); // FIXME:PARA
- //writeFileMemberList(ol,quickIndex,hl,page);
- writeMemberList(ol,quickIndex,
- multiPageIndex?page:-1,
- g_fileIndexLetterUsed[hl],
- Definition::TypeFile);
- endFile(ol);
- first=FALSE;
- }
- }
- if (multiPageIndex && addToIndex) Doxygen::indexList.decContentsDepth();
- ol.popGeneratorState();
-}
-
-static void writeFileMemberIndex(OutputList &ol)
-{
- LayoutNavEntry *lne = LayoutDocManager::instance().rootNavEntry()->find(LayoutNavEntry::FileGlobals);
- bool addToIndex = lne==0 || lne->visible();
- if (documentedFileMembers[FMHL_All]>0 && addToIndex)
- {
- Doxygen::indexList.addContentsItem(FALSE,lne ? lne->title() : theTranslator->trFileMembers(),0,"globals",0);
- Doxygen::indexList.incContentsDepth();
- }
- writeFileMemberIndexFiltered(ol,FMHL_All);
- writeFileMemberIndexFiltered(ol,FMHL_Functions);
- writeFileMemberIndexFiltered(ol,FMHL_Variables);
- writeFileMemberIndexFiltered(ol,FMHL_Typedefs);
- writeFileMemberIndexFiltered(ol,FMHL_Enums);
- writeFileMemberIndexFiltered(ol,FMHL_EnumValues);
- writeFileMemberIndexFiltered(ol,FMHL_Defines);
- if (documentedFileMembers[FMHL_All]>0 && addToIndex)
- {
- Doxygen::indexList.decContentsDepth();
- }
-
-}
-
-//----------------------------------------------------------------------------
-
-struct NmhlInfo
-{
- NmhlInfo(const char *fn,const char *t) : fname(fn), title(t) {}
- const char *fname;
- QCString title;
-};
-
-static const NmhlInfo *getNmhlInfo(int hl)
-{
- static bool fortranOpt = Config_getBool("OPTIMIZE_FOR_FORTRAN");
- static bool vhdlOpt = Config_getBool("OPTIMIZE_OUTPUT_VHDL");
- static NmhlInfo nmhlInfo[] =
- {
- NmhlInfo("namespacemembers", theTranslator->trAll()),
- NmhlInfo("namespacemembers_func",
- fortranOpt ? theTranslator->trSubprograms() :
- vhdlOpt ? VhdlDocGen::trFunctionAndProc() :
- theTranslator->trFunctions()),
- NmhlInfo("namespacemembers_vars",theTranslator->trVariables()),
- NmhlInfo("namespacemembers_type",theTranslator->trTypedefs()),
- NmhlInfo("namespacemembers_enum",theTranslator->trEnumerations()),
- NmhlInfo("namespacemembers_eval",theTranslator->trEnumerationValues())
- };
- return &nmhlInfo[hl];
-}
-
-//----------------------------------------------------------------------------
-
-static void writeNamespaceMemberIndexFiltered(OutputList &ol,
- NamespaceMemberHighlight hl)
-{
- if (documentedNamespaceMembers[hl]==0) return;
-
- static bool disableIndex = Config_getBool("DISABLE_INDEX");
-
-
- bool multiPageIndex=FALSE;
- int numPages=1;
- if (documentedNamespaceMembers[hl]>MAX_ITEMS_BEFORE_MULTIPAGE_INDEX)
- {
- multiPageIndex=TRUE;
- numPages=127;
- }
-
- ol.pushGeneratorState();
- ol.disableAllBut(OutputGenerator::Html);
-
- QCString extension=Doxygen::htmlFileExtension;
- LayoutNavEntry *lne = LayoutDocManager::instance().rootNavEntry()->find(LayoutNavEntry::NamespaceMembers);
- QCString title = lne ? lne->title() : theTranslator->trNamespaceMembers();
- bool addToIndex = lne==0 || lne->visible();
-
- if (addToIndex)
- {
- Doxygen::indexList.addContentsItem(multiPageIndex,getNmhlInfo(hl)->title,0,
- getNmhlInfo(hl)->fname,0,multiPageIndex,TRUE);
- if (multiPageIndex) Doxygen::indexList.incContentsDepth();
- }
-
- int page;
- bool first=TRUE;
- for (page=0;page<numPages;page++)
- {
- if (!multiPageIndex || g_namespaceIndexLetterUsed[hl][page].count()>0)
- {
- QCString fileName = getNmhlInfo(hl)->fname;
- if (multiPageIndex)
- {
- if (!first)
- {
- fileName+=QCString().sprintf("_0x%02x",page);
- }
- char cs[2];
- cs[0]=page;
- cs[1]=0;
- if (addToIndex)
- {
- Doxygen::indexList.addContentsItem(FALSE,cs,0,fileName,0,FALSE,TRUE);
- }
- }
- bool quickIndex = documentedNamespaceMembers[hl]>maxItemsBeforeQuickIndex;
-
- ol.startFile(fileName+extension,0,title);
- ol.startQuickIndices();
- if (!disableIndex)
- {
- ol.writeQuickLinks(TRUE,HLI_NamespaceMembers,0);
- startQuickIndexList(ol);
-
- // index item for all namespace member lists
- startQuickIndexItem(ol,
- getNmhlInfo(0)->fname+Doxygen::htmlFileExtension,hl==NMHL_All,TRUE,first);
- ol.writeString(fixSpaces(getNmhlInfo(0)->title));
- endQuickIndexItem(ol);
-
- int i;
- // index items per category member lists
- for (i=1;i<NMHL_Total;i++)
- {
- if (documentedNamespaceMembers[i]>0)
- {
- startQuickIndexItem(ol,
- getNmhlInfo(i)->fname+Doxygen::htmlFileExtension,hl==i,TRUE,first);
- ol.writeString(fixSpaces(getNmhlInfo(i)->title));
- endQuickIndexItem(ol);
- }
- }
-
- endQuickIndexList(ol);
-
- if (quickIndex)
- {
- writeQuickMemberIndex(ol,g_namespaceIndexLetterUsed[hl],page,
- getNmhlInfo(hl)->fname,multiPageIndex);
- }
-
- }
- ol.endQuickIndices();
- ol.writeSplitBar(fileName);
- ol.writeSearchInfo();
-
- ol.startContents();
-
- if (hl==NMHL_All)
- {
- ol.startTextBlock();
- ol.parseText(lne ? lne->intro() : theTranslator->trNamespaceMemberDescription(Config_getBool("EXTRACT_ALL")));
- ol.endTextBlock();
- }
- else
- {
- // hack to work around a mozilla bug, which refuses to switch to
- // normal lists otherwise
- ol.writeString("&#160;");
- }
- //ol.newParagraph(); // FIXME:PARA
-
- //writeNamespaceMemberList(ol,quickIndex,hl,page);
- writeMemberList(ol,quickIndex,
- multiPageIndex?page:-1,
- g_namespaceIndexLetterUsed[hl],
- Definition::TypeNamespace);
- endFile(ol);
- }
- }
- if (multiPageIndex && addToIndex) Doxygen::indexList.decContentsDepth();
- ol.popGeneratorState();
-}
-
-static void writeNamespaceMemberIndex(OutputList &ol)
-{
- LayoutNavEntry *lne = LayoutDocManager::instance().rootNavEntry()->find(LayoutNavEntry::NamespaceMembers);
- bool addToIndex = lne==0 || lne->visible();
- if (documentedNamespaceMembers[NMHL_All]>0 && addToIndex)
- {
- Doxygen::indexList.addContentsItem(FALSE,lne ? lne->title() : theTranslator->trNamespaceMembers(),0,"namespacemembers",0);
- Doxygen::indexList.incContentsDepth();
- }
- //bool fortranOpt = Config_getBool("OPTIMIZE_FOR_FORTRAN");
- writeNamespaceMemberIndexFiltered(ol,NMHL_All);
- writeNamespaceMemberIndexFiltered(ol,NMHL_Functions);
- writeNamespaceMemberIndexFiltered(ol,NMHL_Variables);
- writeNamespaceMemberIndexFiltered(ol,NMHL_Typedefs);
- writeNamespaceMemberIndexFiltered(ol,NMHL_Enums);
- writeNamespaceMemberIndexFiltered(ol,NMHL_EnumValues);
- if (documentedNamespaceMembers[NMHL_All]>0 && addToIndex)
- {
- Doxygen::indexList.decContentsDepth();
- }
-
-}
-
-//----------------------------------------------------------------------------
-
-//----------------------------------------------------------------------------
-
-static void writeExampleIndex(OutputList &ol)
-{
- if (Doxygen::exampleSDict->count()==0) return;
- ol.pushGeneratorState();
- ol.disable(OutputGenerator::Man);
- LayoutNavEntry *lne = LayoutDocManager::instance().rootNavEntry()->find(LayoutNavEntry::Examples);
- QCString title = lne ? lne->title() : theTranslator->trExamples();
- bool addToIndex = lne==0 || lne->visible();
-
- startFile(ol,"examples",0,title,HLI_Examples);
-
- startTitle(ol,0);
- ol.parseText(title);
- endTitle(ol,0,0);
-
- ol.startContents();
-
- if (addToIndex)
- {
- Doxygen::indexList.addContentsItem(TRUE,title,0,"examples",0,TRUE,TRUE);
- Doxygen::indexList.incContentsDepth();
- }
-
- ol.startTextBlock();
- ol.parseText(lne ? lne->intro() : theTranslator->trExamplesDescription());
- ol.endTextBlock();
-
- ol.startItemList();
- PageSDict::Iterator pdi(*Doxygen::exampleSDict);
- PageDef *pd=0;
- for (pdi.toFirst();(pd=pdi.current());++pdi)
- {
- ol.startItemListItem();
- QCString n=pd->getOutputFileBase();
- if (!pd->title().isEmpty())
- {
- ol.writeObjectLink(0,n,0,pd->title());
- if (addToIndex)
- {
- Doxygen::indexList.addContentsItem(FALSE,filterTitle(pd->title()),pd->getReference(),n,0,FALSE,TRUE);
- }
- }
- else
- {
- ol.writeObjectLink(0,n,0,pd->name());
- if (addToIndex)
- {
- Doxygen::indexList.addContentsItem(FALSE,pd->name(),pd->getReference(),n,0,FALSE,TRUE);
- }
- }
- ol.endItemListItem();
- ol.writeString("\n");
- }
- ol.endItemList();
-
- if (addToIndex)
- {
- Doxygen::indexList.decContentsDepth();
- }
- endFile(ol);
- ol.popGeneratorState();
-}
-
-
-//----------------------------------------------------------------------------
-
-template<typename T>
-bool writeMemberNavIndex(FTextStream &t,
- int indent,
- int n,
- int documentedMembers[],
- MemberIndexList indexLetterUsed[][MEMBER_INDEX_ENTRIES],
- const T *(*getInfo)(int),
- bool &first
- )
-
-{
- bool found=FALSE;
- QCString indentStr;
- indentStr.fill(' ',indent*2);
- // index items per category member lists
- int i;
- for (i=0;i<n;i++)
- {
- bool hasIndex = documentedMembers[i]>0;
- bool quickIndex = documentedMembers[i]>maxItemsBeforeQuickIndex;
- bool multiIndexPage = documentedMembers[i]>MAX_ITEMS_BEFORE_MULTIPAGE_INDEX;
- if (hasIndex)
- {
- // terminate previous entry
- if (!first) t << "," << endl;
- first = FALSE;
-
- // start entry
- if (!found)
- {
- t << "[" << endl;
- }
- found = TRUE;
-
- t << indentStr << " [ ";
- t << "\"" << fixSpaces(getInfo(i)->title) << "\", ";
- t << "\"" << getInfo(i)->fname << Doxygen::htmlFileExtension << "\", ";
- bool firstPage=TRUE;
- if (quickIndex)
- {
- t << "[ " << endl;
- int j;
- for (j=33;j<127;j++)
- {
- if (indexLetterUsed[i][j].count()>0)
- {
- if (!firstPage) t << "," << endl;
- QCString fullName = getInfo(i)->fname;
- QCString extension = Doxygen::htmlFileExtension;
- QCString anchor;
- if (firstPage || !multiIndexPage)
- anchor=fullName+extension+"#index_";
- else
- anchor=fullName+QCString().sprintf("_0x%02x",j)+extension+"#index_";
- char is[2];is[0]=(char)j;is[1]='\0';
- QCString ci = letterToLabel((char)j);
- t << indentStr << " [ ";
- t << "\"" << is << "\", ";
- t << "\"" << anchor << ci << "\", null ]";
- firstPage=FALSE;
- }
- }
- t << endl << indentStr << " ] ]";
- }
- else
- {
- t << "null" << " ]";
- }
- }
- }
- return found;
-}
-
-//----------------------------------------------------------------------------
-
-static bool writeFullNavIndex(FTextStream &t, LayoutNavEntry *root,int indent,bool &first)
-{
- static struct NavEntryCountMap
- {
- LayoutNavEntry::Kind kind;
- bool hasItems;
- } navEntryCountMap[] =
- {
- { LayoutNavEntry::MainPage, TRUE },
- { LayoutNavEntry::Pages, indexedPages>0 },
- { LayoutNavEntry::Modules, documentedGroups>0 },
- { LayoutNavEntry::Namespaces, documentedNamespaces>0 },
- { LayoutNavEntry::NamespaceList, documentedNamespaces>0 },
- { LayoutNavEntry::NamespaceMembers, documentedNamespaceMembers[NMHL_All]>0 },
- { LayoutNavEntry::Classes, annotatedClasses>0 },
- { LayoutNavEntry::ClassList, annotatedClasses>0 },
- { LayoutNavEntry::ClassIndex, annotatedClasses>0 },
- { LayoutNavEntry::ClassHierarchy, hierarchyClasses>0 },
- { LayoutNavEntry::ClassMembers, documentedClassMembers[CMHL_All]>0 },
- { LayoutNavEntry::Files, documentedFiles>0 },
- { LayoutNavEntry::FileList, documentedFiles>0 },
- { LayoutNavEntry::FileGlobals, documentedFileMembers[FMHL_All]>0 },
- { LayoutNavEntry::Dirs, documentedDirs>0 },
- { LayoutNavEntry::Examples, Doxygen::exampleSDict->count()>0 }
- };
-
- QCString indentStr;
- indentStr.fill(' ',indent*2);
- bool found=FALSE;
- if (root->children().count()>0)
- {
- QListIterator<LayoutNavEntry> li(root->children());
- LayoutNavEntry *entry;
- for (li.toFirst();(entry=li.current());++li)
- {
- if (navEntryCountMap[entry->kind()].hasItems && entry->visible())
- {
- // terminate previous entry
- if (!first) t << "," << endl;
- first = FALSE;
-
- // start entry
- if (!found)
- {
- t << "[" << endl;
- }
- found = TRUE;
-
- bool emptySection=TRUE;
- t << indentStr << " [ ";
- t << "\"" << fixSpaces(entry->title()) << "\", ";
- t << "\"" << entry->baseFile() << Doxygen::htmlFileExtension << "\", ";
-
- // write children (if any)
- bool firstChild=TRUE;
- if (entry->kind()==LayoutNavEntry::ClassMembers)
- {
- emptySection = !writeMemberNavIndex(t,indent+1,CMHL_Total,documentedClassMembers,g_memberIndexLetterUsed,&getCmhlInfo,firstChild);
- }
- else if (entry->kind()==LayoutNavEntry::NamespaceMembers)
- {
- emptySection = !writeMemberNavIndex(t,indent+1,NMHL_Total,documentedNamespaceMembers,g_namespaceIndexLetterUsed,&getNmhlInfo,firstChild);
- }
- else if (entry->kind()==LayoutNavEntry::FileGlobals)
- {
- emptySection = !writeMemberNavIndex(t,indent+1,FMHL_Total,documentedFileMembers,g_fileIndexLetterUsed,&getFmhlInfo,firstChild);
- }
- else
- {
- emptySection = !writeFullNavIndex(t,entry,indent+1,firstChild);
- }
- // end entry
- if (emptySection) // entry without children
- t << "null ]";
- else // entry with children
- t << endl << indentStr << " ] ]";
- }
- }
- }
- return found;
-}
-
-//----------------------------------------------------------------------------
-
-static void countRelatedPages(int &docPages,int &indexPages)
-{
- docPages=indexPages=0;
- PageSDict::Iterator pdi(*Doxygen::pageSDict);
- PageDef *pd=0;
- for (pdi.toFirst();(pd=pdi.current());++pdi)
- {
- if ( pd->visibleInIndex())
- {
- indexPages++;
- }
- if ( pd->documentedPage())
- {
- docPages++;
- }
- }
-}
-
-//----------------------------------------------------------------------------
-
-static void writeSubPages(PageDef *pd)
-{
- LayoutNavEntry *lne = LayoutDocManager::instance().rootNavEntry()->find(LayoutNavEntry::Pages);
- bool addToIndex = lne==0 || lne->visible();
- //printf("Write subpages(%s #=%d)\n",pd->name().data(),pd->getSubPages() ? pd->getSubPages()->count() : 0 );
- PageSDict *subPages = pd->getSubPages();
- if (subPages)
- {
- PageSDict::Iterator pi(*subPages);
- PageDef *subPage;
- for (pi.toFirst();(subPage=pi.current());++pi)
- {
- QCString pageTitle;
-
- if (subPage->title().isEmpty())
- pageTitle=subPage->name();
- else
- pageTitle=subPage->title();
-
- bool hasSubPages = subPage->hasSubPages();
- bool hasSections = subPage->hasSections();
-
- //printf("subpage %s: addToIndex=%d hasSubPages=%d hasSections=%d\n",
- // pd->name().data(),addToIndex,hasSubPages,hasSections);
- if (addToIndex)
- {
- Doxygen::indexList.addContentsItem(hasSubPages,pageTitle,
- subPage->getReference(),subPage->getOutputFileBase(),
- 0,hasSubPages,TRUE);
- if (hasSections || hasSubPages)
- {
- Doxygen::indexList.incContentsDepth();
- }
- if (hasSections)
- {
- subPage->addSectionsToIndex();
- }
- }
- writeSubPages(subPage);
- if (addToIndex && (hasSections || hasSubPages))
- {
- Doxygen::indexList.decContentsDepth();
- }
- }
- }
-}
-
-static void writePageIndex(OutputList &ol)
-{
- if (indexedPages==0) return;
- ol.pushGeneratorState();
- ol.disableAllBut(OutputGenerator::Html);
- LayoutNavEntry *lne = LayoutDocManager::instance().rootNavEntry()->find(LayoutNavEntry::Pages);
- QCString title = lne ? lne->title() : theTranslator->trRelatedPages();
- startFile(ol,"pages",0,title,HLI_Pages);
- startTitle(ol,0);
- ol.parseText(title);
- endTitle(ol,0,0);
- ol.startContents();
- ol.startTextBlock();
- bool addToIndex = lne==0 || lne->visible();
- if (0 /*addToIndex*/) // skip Related Pages section in navigation index
- {
- Doxygen::indexList.addContentsItem(TRUE,title,0,"pages",0,TRUE,TRUE);
- Doxygen::indexList.incContentsDepth();
- }
- ol.parseText(lne ? lne->intro() : theTranslator->trRelatedPagesDescription());
- ol.endTextBlock();
- startIndexHierarchy(ol,0);
- PageSDict::Iterator pdi(*Doxygen::pageSDict);
- PageDef *pd=0;
- for (pdi.toFirst();(pd=pdi.current());++pdi)
- {
- if (pd->visibleInIndex())
- {
- QCString pageTitle;
-
- if (pd->title().isEmpty())
- pageTitle=pd->name();
- else
- pageTitle=pd->title();
-
- bool hasSubPages = pd->hasSubPages();
- bool hasSections = pd->hasSections();
-
- ol.startIndexListItem();
- ol.startIndexItem(pd->getReference(),pd->getOutputFileBase());
- ol.parseText(pageTitle);
- ol.endIndexItem(pd->getReference(),pd->getOutputFileBase());
- if (pd->isReference())
- {
- ol.startTypewriter();
- ol.docify(" [external]");
- ol.endTypewriter();
- }
- ol.writeString("\n");
- if (addToIndex)
- {
- Doxygen::indexList.addContentsItem(
- hasSubPages || hasSections, // isDir
- filterTitle(pageTitle), // name
- pd->getReference(), // ref
- pd->getOutputFileBase(), // file
- 0, // anchor
- hasSubPages || hasSections, // separateIndex
- TRUE); // addToNavIndex
- if (hasSections || hasSubPages)
- {
- Doxygen::indexList.incContentsDepth();
- }
- if (hasSections)
- {
- pd->addSectionsToIndex();
- }
- }
- writeSubPages(pd);
- if (addToIndex && (hasSections || hasSubPages))
- {
- Doxygen::indexList.decContentsDepth();
- }
- ol.endIndexListItem();
- }
- }
- endIndexHierarchy(ol,0);
- if (0 /*addToIndex*/) // skip Related Pages section in navigation index
- {
- Doxygen::indexList.decContentsDepth();
- }
- endFile(ol);
- ol.popGeneratorState();
-}
-
-//----------------------------------------------------------------------------
-
-static int countGroups()
-{
- int count=0;
- GroupSDict::Iterator gli(*Doxygen::groupSDict);
- GroupDef *gd;
- for (gli.toFirst();(gd=gli.current());++gli)
- {
- if (!gd->isReference())
- {
- gd->visited=FALSE;
- count++;
- }
- }
- return count;
-}
-
-//----------------------------------------------------------------------------
-
-static int countDirs()
-{
- int count=0;
- SDict<DirDef>::Iterator dli(*Doxygen::directories);
- DirDef *dd;
- for (dli.toFirst();(dd=dli.current());++dli)
- {
- if (dd->isLinkableInProject())
- {
- dd->visited=FALSE;
- count++;
- }
- }
- return count;
-}
-
-
-//----------------------------------------------------------------------------
-
-void writeGraphInfo(OutputList &ol)
-{
- if (!Config_getBool("HAVE_DOT") || !Config_getBool("GENERATE_HTML")) return;
- ol.pushGeneratorState();
- ol.disableAllBut(OutputGenerator::Html);
- generateGraphLegend(Config_getString("HTML_OUTPUT"));
- startFile(ol,"graph_legend",0,theTranslator->trLegendTitle().data());
- startTitle(ol,0);
- ol.parseText(theTranslator->trLegendTitle());
- endTitle(ol,0,0);
- ol.startContents();
- bool &stripCommentsStateRef = Config_getBool("STRIP_CODE_COMMENTS");
- bool oldStripCommentsState = stripCommentsStateRef;
- // temporarily disable the stripping of comments for our own code example!
- stripCommentsStateRef = FALSE;
- QCString legendDocs = theTranslator->trLegendDocs();
- int s = legendDocs.find("<center>");
- int e = legendDocs.find("</center>");
- if (Config_getEnum("DOT_IMAGE_FORMAT")=="svg" && s!=-1 && e!=-1)
- {
- legendDocs = legendDocs.left(s+8) + "[!-- SVG 0 --]\n" + legendDocs.mid(e);
- //printf("legendDocs=%s\n",legendDocs.data());
- }
- ol.parseDoc("graph_legend",1,0,0,legendDocs,FALSE,FALSE);
- stripCommentsStateRef = oldStripCommentsState;
- endFile(ol);
- ol.popGeneratorState();
-}
-
-
-
-//----------------------------------------------------------------------------
-/*!
- * write groups as hierarchical trees
- */
-static void writeGroupTreeNode(OutputList &ol, GroupDef *gd, int level, FTVHelp* ftv, bool addToIndex)
-{
- //bool fortranOpt = Config_getBool("OPTIMIZE_FOR_FORTRAN");
- //bool vhdlOpt = Config_getBool("OPTIMIZE_OUTPUT_VHDL");
- if (level>20)
- {
- warn(gd->getDefFileName(),gd->getDefLine(),
- "warning: maximum nesting level exceeded for group %s: check for possible recursive group relation!\n",gd->name().data()
- );
- return;
- }
-
- /* Some groups should appear twice under different parent-groups.
- * That is why we should not check if it was visited
- */
- if (/*!gd->visited &&*/ (!gd->isASubGroup() || level>0) &&
- gd->isVisible() &&
- (!gd->isReference() || Config_getBool("EXTERNAL_GROUPS")) // hide external groups by default
- )
- {
- //printf("gd->name()=%s #members=%d\n",gd->name().data(),gd->countMembers());
- // write group info
- bool hasSubGroups = gd->getSubGroups()->count()>0;
- bool hasSubPages = gd->getPages()->count()>0;
- int numSubItems = 0;
- if (1 /*Config_getBool("TOC_EXPAND")*/)
- {
- QListIterator<MemberList> mli(gd->getMemberLists());
- MemberList *ml;
- for (mli.toFirst();(ml=mli.current());++mli)
- {
- if (ml->listType()&MemberList::documentationLists)
- {
- numSubItems += ml->count();
- }
- }
- numSubItems += gd->getNamespaces()->count();
- numSubItems += gd->getClasses()->count();
- numSubItems += gd->getFiles()->count();
- numSubItems += gd->getDirs()->count();
- numSubItems += gd->getPages()->count();
- }
-
- bool isDir = hasSubGroups || hasSubPages || numSubItems>0;
- //printf("gd=`%s': pageDict=%d\n",gd->name().data(),gd->pageDict->count());
- if (addToIndex)
- {
- Doxygen::indexList.addContentsItem(isDir,gd->groupTitle(),gd->getReference(),gd->getOutputFileBase(),0,isDir,TRUE);
- Doxygen::indexList.incContentsDepth();
- }
- if (ftv)
- {
- ftv->addContentsItem(hasSubGroups,gd->groupTitle(),gd->getReference(),gd->getOutputFileBase(),0);
- ftv->incContentsDepth();
- }
-
- //ol.writeListItem();
- //ol.startTextLink(gd->getOutputFileBase(),0);
- //parseText(ol,gd->groupTitle());
- //ol.endTextLink();
-
- ol.startIndexListItem();
- ol.startIndexItem(gd->getReference(),gd->getOutputFileBase());
- ol.parseText(gd->groupTitle());
- ol.endIndexItem(gd->getReference(),gd->getOutputFileBase());
- if (gd->isReference())
- {
- ol.startTypewriter();
- ol.docify(" [external]");
- ol.endTypewriter();
- }
-
- QListIterator<LayoutDocEntry> eli(LayoutDocManager::instance().docEntries(LayoutDocManager::Group));
- LayoutDocEntry *lde;
- for (eli.toFirst();(lde=eli.current());++eli)
- {
- if (lde->kind()==LayoutDocEntry::MemberDef && addToIndex)
- {
- LayoutDocEntryMemberDef *lmd = (LayoutDocEntryMemberDef*)lde;
- MemberList *ml = gd->getMemberList(lmd->type);
- if (ml)
- {
- MemberListIterator mi(*ml);
- MemberDef *md;
- for (mi.toFirst();(md=mi.current());++mi)
- {
- if (md->isVisible() && md->name().find('@')==-1)
- {
- Doxygen::indexList.addContentsItem(FALSE,
- md->name(),md->getReference(),
- md->getOutputFileBase(),md->anchor(),FALSE);
- }
- }
- }
- }
- else if (lde->kind()==LayoutDocEntry::GroupClasses && addToIndex)
- {
- ClassSDict::Iterator it(*gd->getClasses());
- ClassDef *cd;
- for (;(cd=it.current());++it)
- {
- if (cd->isVisible())
- {
- Doxygen::indexList.addContentsItem(FALSE,
- cd->localName(),cd->getReference(),
- cd->getOutputFileBase(),cd->anchor(),FALSE,FALSE);
- }
- }
- }
- else if (lde->kind()==LayoutDocEntry::GroupNamespaces && addToIndex)
- {
- NamespaceSDict::Iterator it(*gd->getNamespaces());
- NamespaceDef *nd;
- for (;(nd=it.current());++it)
- {
- if (nd->isVisible())
- {
- Doxygen::indexList.addContentsItem(FALSE,
- nd->localName(),nd->getReference(),
- nd->getOutputFileBase(),0,FALSE,FALSE);
- }
- }
- }
- else if (lde->kind()==LayoutDocEntry::GroupFiles && addToIndex)
- {
- QListIterator<FileDef> it(*gd->getFiles());
- FileDef *fd;
- for (;(fd=it.current());++it)
- {
- if (fd->isVisible())
- {
- Doxygen::indexList.addContentsItem(FALSE,
- fd->displayName(),fd->getReference(),
- fd->getOutputFileBase(),0,FALSE,FALSE);
- }
- }
- }
- else if (lde->kind()==LayoutDocEntry::GroupDirs && addToIndex)
- {
- static bool showDirs = Config_getBool("SHOW_DIRECTORIES");
- if (showDirs)
- {
- QListIterator<DirDef> it(*gd->getDirs());
- DirDef *dd;
- for (;(dd=it.current());++it)
- {
- if (dd->isVisible())
- {
- Doxygen::indexList.addContentsItem(FALSE,
- dd->shortName(),dd->getReference(),
- dd->getOutputFileBase(),0,FALSE,FALSE);
- }
- }
- }
- }
- else if (lde->kind()==LayoutDocEntry::GroupPageDocs && addToIndex)
- {
- SDict<PageDef>::Iterator it(*gd->getPages());
- PageDef *pd;
- for (;(pd=it.current());++it)
- {
- SectionInfo *si=0;
- if (!pd->name().isEmpty()) si=Doxygen::sectionDict[pd->name()];
- bool hasSubPages = pd->hasSubPages();
- bool hasSections = pd->hasSections();
- Doxygen::indexList.addContentsItem(
- hasSubPages || hasSections,
- convertToHtml(pd->title(),TRUE),
- gd->getReference(),
- gd->getOutputFileBase(),
- si ? si->label.data() : 0,
- hasSubPages || hasSections,
- TRUE); // addToNavIndex
- if (hasSections || hasSubPages)
- {
- Doxygen::indexList.incContentsDepth();
- }
- if (hasSections)
- {
- pd->addSectionsToIndex();
- }
- writeSubPages(pd);
- if (hasSections || hasSubPages)
- {
- Doxygen::indexList.decContentsDepth();
- }
- }
- }
- else if (lde->kind()==LayoutDocEntry::GroupNestedGroups)
- {
- if (gd->getSubGroups()->count()>0)
- {
- startIndexHierarchy(ol,level+1);
- if (Config_getBool("SORT_GROUP_NAMES")) gd->sortSubGroups();
- QListIterator<GroupDef> gli(*gd->getSubGroups());
- GroupDef *subgd = 0;
- for (gli.toFirst();(subgd=gli.current());++gli)
- {
- writeGroupTreeNode(ol,subgd,level+1,ftv,addToIndex);
- }
- endIndexHierarchy(ol,level+1);
- }
- }
- }
-
- ol.endIndexListItem();
-
- if (addToIndex)
- {
- Doxygen::indexList.decContentsDepth();
- }
- if (ftv)
- {
- ftv->decContentsDepth();
- }
- //gd->visited=TRUE;
- }
-}
-
-static void writeGroupHierarchy(OutputList &ol, FTVHelp* ftv,bool addToIndex)
-{
- if (ftv)
- {
- ol.pushGeneratorState();
- ol.disable(OutputGenerator::Html);
- }
- startIndexHierarchy(ol,0);
- if (Config_getBool("SORT_GROUP_NAMES"))
- {
- Doxygen::groupSDict->sort();
- }
- GroupSDict::Iterator gli(*Doxygen::groupSDict);
- GroupDef *gd;
- for (gli.toFirst();(gd=gli.current());++gli)
- {
- writeGroupTreeNode(ol,gd,0,ftv,addToIndex);
- }
- endIndexHierarchy(ol,0);
- if (ftv)
- {
- ol.popGeneratorState();
- }
-}
-
-//----------------------------------------------------------------------------
-static void writeDirTreeNode(OutputList &ol, DirDef *dd, int level, FTVHelp* ftv,bool addToIndex)
-{
- if (level>20)
- {
- warn(dd->getDefFileName(),dd->getDefLine(),
- "warning: maximum nesting level exceeded for directory %s: "
- "check for possible recursive directory relation!\n",dd->name().data()
- );
- return;
- }
-
- static bool tocExpand = TRUE; //Config_getBool("TOC_EXPAND");
- bool isDir = dd->subDirs().count()>0 || // there are subdirs
- (tocExpand && // or toc expand and
- dd->getFiles() && dd->getFiles()->count()>0 // there are files
- );
- //printf("gd=`%s': pageDict=%d\n",gd->name().data(),gd->pageDict->count());
- if (addToIndex)
- {
- Doxygen::indexList.addContentsItem(isDir,dd->shortName(),dd->getReference(),dd->getOutputFileBase(),0,TRUE,TRUE);
- Doxygen::indexList.incContentsDepth();
- }
- if (ftv)
- {
- ftv->addContentsItem(isDir,dd->shortName(),dd->getReference(),dd->getOutputFileBase(),0);
- ftv->incContentsDepth();
- }
-
- ol.startIndexListItem();
- ol.startIndexItem(dd->getReference(),dd->getOutputFileBase());
- ol.parseText(dd->shortName());
- ol.endIndexItem(dd->getReference(),dd->getOutputFileBase());
- if (dd->isReference())
- {
- ol.startTypewriter();
- ol.docify(" [external]");
- ol.endTypewriter();
- }
-
- // write sub directories
- if (dd->subDirs().count()>0)
- {
- startIndexHierarchy(ol,level+1);
- QListIterator<DirDef> dli(dd->subDirs());
- DirDef *subdd = 0;
- for (dli.toFirst();(subdd=dli.current());++dli)
- {
- writeDirTreeNode(ol,subdd,level+1,ftv,addToIndex);
- }
- endIndexHierarchy(ol,level+1);
- }
-
- if (tocExpand && addToIndex)
- {
- // write files of this directory
- FileList *fileList=dd->getFiles();
- if (fileList && fileList->count()>0)
- {
- FileDef *fd=fileList->first();
- while (fd)
- {
- if (fd->isLinkable())
- {
- Doxygen::indexList.addContentsItem(FALSE, convertToHtml(fd->name(),TRUE),fd->getReference(), fd->getOutputFileBase(), 0);
- }
- fd=fileList->next();
- }
- }
- }
- ol.endIndexListItem();
-
- if (addToIndex)
- {
- Doxygen::indexList.decContentsDepth();
- }
- if (ftv)
- {
- ftv->decContentsDepth();
- }
-}
-
-static void writeDirHierarchy(OutputList &ol, FTVHelp* ftv,bool addToIndex)
-{
- if (ftv)
- {
- ol.pushGeneratorState();
- ol.disable(OutputGenerator::Html);
- }
- startIndexHierarchy(ol,0);
- SDict<DirDef>::Iterator dli(*Doxygen::directories);
- DirDef *dd;
- for (dli.toFirst();(dd=dli.current());++dli)
- {
- if (dd->getOuterScope()==Doxygen::globalScope) writeDirTreeNode(ol,dd,0,ftv,addToIndex);
- }
- endIndexHierarchy(ol,0);
- if (ftv)
- {
- ol.popGeneratorState();
- }
-}
-
-//----------------------------------------------------------------------------
-
-static void writeGroupIndex(OutputList &ol)
-{
- if (documentedGroups==0) return;
- ol.pushGeneratorState();
- ol.disable(OutputGenerator::Man);
- LayoutNavEntry *lne = LayoutDocManager::instance().rootNavEntry()->find(LayoutNavEntry::Modules);
- QCString title = lne ? lne->title() : theTranslator->trModules();
- bool addToIndex = lne==0 || lne->visible();
-
- startFile(ol,"modules",0,title,HLI_Modules);
- startTitle(ol,0);
- ol.parseText(title);
- endTitle(ol,0,0);
- ol.startContents();
- ol.startTextBlock();
- if (addToIndex)
- {
- Doxygen::indexList.addContentsItem(TRUE,title,0,"modules",0,TRUE,TRUE);
- Doxygen::indexList.incContentsDepth();
- }
- ol.parseText(lne ? lne->intro() : theTranslator->trModulesDescription());
- ol.endTextBlock();
-
- FTVHelp* ftv = 0;
- bool treeView=Config_getBool("USE_INLINE_TREES");
- if (treeView)
- {
- ftv = new FTVHelp(FALSE);
- }
-
- writeGroupHierarchy(ol,ftv,addToIndex);
-
- if (addToIndex)
- {
- Doxygen::indexList.decContentsDepth();
- }
- if (ftv)
- {
- QGString outStr;
- FTextStream t(&outStr);
- ftv->generateTreeViewInline(t);
- ol.pushGeneratorState();
- ol.disableAllBut(OutputGenerator::Html);
- ol.writeString(outStr);
- ol.popGeneratorState();
- delete ftv;
- }
- endFile(ol);
- ol.popGeneratorState();
-}
-
-//----------------------------------------------------------------------------
-
-static void writeDirIndex(OutputList &ol)
-{
- if (documentedDirs==0) return;
- ol.pushGeneratorState();
- ol.disable(OutputGenerator::Man);
- LayoutNavEntry *lne = LayoutDocManager::instance().rootNavEntry()->find(LayoutNavEntry::Dirs);
- QCString title = lne ? lne->title() : theTranslator->trDirectories();
- bool addToIndex=lne==0 || lne->visible();
-
- startFile(ol,"dirs",0,title,HLI_Directories);
- startTitle(ol,0);
- ol.parseText(title);
- endTitle(ol,0,0);
- ol.startContents();
- ol.startTextBlock();
-
- if (addToIndex)
- {
- Doxygen::indexList.addContentsItem(TRUE,title,0,"dirs",0,TRUE,TRUE);
- Doxygen::indexList.incContentsDepth();
- }
- ol.parseText(lne ? lne->intro() : theTranslator->trDirDescription());
- ol.endTextBlock();
-
- FTVHelp* ftv = 0;
- bool treeView=Config_getBool("USE_INLINE_TREES");
- if (treeView)
- {
- ftv = new FTVHelp(FALSE);
- }
-
- writeDirHierarchy(ol,ftv,addToIndex);
-
- if (ftv)
- {
- QGString outStr;
- FTextStream t(&outStr);
- ftv->generateTreeViewInline(t);
- ol.pushGeneratorState();
- ol.disableAllBut(OutputGenerator::Html);
- ol.writeString(outStr);
- ol.popGeneratorState();
- delete ftv;
- }
- if (addToIndex)
- {
- Doxygen::indexList.decContentsDepth();
- }
- endFile(ol);
- ol.popGeneratorState();
-}
-
-//----------------------------------------------------------------------------
-
-static void writeUserGroupStubPage(OutputList &ol,LayoutNavEntry *lne)
-{
- ol.pushGeneratorState();
- ol.disableAllBut(OutputGenerator::Html);
- startFile(ol,lne->baseFile(),0,lne->title(),HLI_UserGroup);
- startTitle(ol,0);
- ol.parseText(lne->title());
- endTitle(ol,0,0);
- QListIterator<LayoutNavEntry> li(lne->children());
- LayoutNavEntry *entry;
- int count=0;
- for (li.toFirst();(entry=li.current());++li)
- {
- if (entry->visible()) count++;
- }
- if (count>0)
- {
- ol.writeString("<ul>\n");
- for (li.toFirst();(entry=li.current());++li)
- {
- if (entry->visible())
- {
- ol.writeString("<li><a href=\""+entry->url()+"\"><span>"+
- fixSpaces(entry->title())+"</span></a></li>\n");
- }
- }
- ol.writeString("</ul>\n");
- }
- endFile(ol);
- ol.popGeneratorState();
-}
-
-//----------------------------------------------------------------------------
-
-static bool mainPageHasTitle()
-{
- if (Doxygen::mainPage==0) return FALSE;
- if (Doxygen::mainPage->title().isEmpty()) return FALSE;
- if (Doxygen::mainPage->title().lower()=="notitle") return FALSE;
- return TRUE;
-}
-
-//----------------------------------------------------------------------------
-
-static void writeIndex(OutputList &ol)
-{
- static bool fortranOpt = Config_getBool("OPTIMIZE_FOR_FORTRAN");
- static bool vhdlOpt = Config_getBool("OPTIMIZE_OUTPUT_VHDL");
- // save old generator state
- ol.pushGeneratorState();
-
- QCString projPrefix;
- if (!Config_getString("PROJECT_NAME").isEmpty())
- {
- projPrefix=Config_getString("PROJECT_NAME")+" ";
- }
-
- //--------------------------------------------------------------------
- // write HTML index
- //--------------------------------------------------------------------
- ol.disableAllBut(OutputGenerator::Html);
-
- QCString defFileName =
- Doxygen::mainPage ? Doxygen::mainPage->docFile().data() : "[generated]";
- int defLine =
- Doxygen::mainPage ? Doxygen::mainPage->docLine() : -1;
-
- QCString title;
- if (!mainPageHasTitle())
- {
- title = theTranslator->trMainPage();
- }
- else
- {
- title = filterTitle(Doxygen::mainPage->title());
- }
-
- QCString indexName="index";
- ol.startFile(indexName,0,title);
-
- if (Doxygen::mainPage)
- {
- if (Doxygen::mainPage->hasSubPages() ||
- (!Config_getString("PROJECT_NAME").isEmpty() && mainPageHasTitle())
- ) // to avoid duplicate entries in the treeview
- {
- Doxygen::indexList.addContentsItem(Doxygen::mainPage->hasSubPages(),title,0,indexName,0,Doxygen::mainPage->hasSubPages(),TRUE);
- }
- if (Doxygen::mainPage->hasSubPages())
- {
- writeSubPages(Doxygen::mainPage);
- }
- }
-
- ol.startQuickIndices();
- if (!Config_getBool("DISABLE_INDEX"))
- {
- ol.writeQuickLinks(TRUE,HLI_Main,0);
- }
- ol.endQuickIndices();
- ol.writeSplitBar(indexName);
- ol.writeSearchInfo();
- bool headerWritten=FALSE;
- if (Doxygen::mainPage && !Doxygen::mainPage->title().isEmpty())
- {
- if (Doxygen::mainPage->title().lower()!="notitle")
- {
- ol.startHeaderSection();
- ol.startTitleHead(0);
- ol.parseDoc(Doxygen::mainPage->docFile(),Doxygen::mainPage->docLine(),
- Doxygen::mainPage,0,Doxygen::mainPage->title(),
- TRUE,FALSE,0,TRUE,FALSE);
- headerWritten = TRUE;
- }
- }
- else
- {
- if (!Config_getString("PROJECT_NAME").isEmpty())
- {
- ol.startHeaderSection();
- ol.startTitleHead(0);
- ol.parseText(projPrefix+theTranslator->trDocumentation());
- headerWritten = TRUE;
- }
- }
- if (headerWritten)
- {
- ol.endTitleHead(0,0);
- ol.endHeaderSection();
- }
-
- ol.startContents();
- if (Config_getBool("DISABLE_INDEX") && Doxygen::mainPage==0)
- {
- ol.writeQuickLinks(FALSE,HLI_Main,0);
- }
-
- if (Doxygen::mainPage)
- {
- Doxygen::insideMainPage=TRUE;
- if (Doxygen::mainPage->showToc() && Doxygen::mainPage->hasSections())
- {
- Doxygen::mainPage->writeToc(ol);
- }
-
- ol.startTextBlock();
- ol.parseDoc(defFileName,defLine,Doxygen::mainPage,0,
- Doxygen::mainPage->documentation(),TRUE,FALSE
- /*,Doxygen::mainPage->sectionDict*/);
- ol.endTextBlock();
-
- if (!Config_getString("GENERATE_TAGFILE").isEmpty())
- {
- Doxygen::tagFile << " <compound kind=\"page\">" << endl
- << " <name>"
- << convertToXML(Doxygen::mainPage->name())
- << "</name>" << endl
- << " <title>"
- << convertToXML(Doxygen::mainPage->title())
- << "</title>" << endl
- << " <filename>"
- << convertToXML(Doxygen::mainPage->getOutputFileBase())
- << "</filename>" << endl;
-
- Doxygen::mainPage->writeDocAnchorsToTagFile();
- Doxygen::tagFile << " </compound>" << endl;
- }
- Doxygen::insideMainPage=FALSE;
- }
-
- endFile(ol);
- ol.disable(OutputGenerator::Html);
-
- //--------------------------------------------------------------------
- // write LaTeX/RTF index
- //--------------------------------------------------------------------
- ol.enable(OutputGenerator::Latex);
- ol.enable(OutputGenerator::RTF);
-
- ol.startFile("refman",0,0);
- ol.startIndexSection(isTitlePageStart);
- if (!Config_getString("LATEX_HEADER").isEmpty())
- {
- ol.disable(OutputGenerator::Latex);
- }
-
- if (projPrefix.isEmpty())
- {
- ol.parseText(theTranslator->trReferenceManual());
- }
- else
- {
- ol.parseText(projPrefix);
- }
-
- if (!Config_getString("PROJECT_NUMBER").isEmpty())
- {
- ol.startProjectNumber();
- ol.parseDoc(defFileName,defLine,Doxygen::mainPage,0,Config_getString("PROJECT_NUMBER"),FALSE,FALSE);
- ol.endProjectNumber();
- }
- ol.endIndexSection(isTitlePageStart);
- ol.startIndexSection(isTitlePageAuthor);
- ol.parseText(theTranslator->trGeneratedBy());
- ol.endIndexSection(isTitlePageAuthor);
- ol.enable(OutputGenerator::Latex);
-
- ol.lastIndexPage();
- if (Doxygen::mainPage)
- {
- ol.startIndexSection(isMainPage);
- if (mainPageHasTitle())
- {
- ol.parseText(Doxygen::mainPage->title());
- }
- else
- {
- ol.parseText(/*projPrefix+*/theTranslator->trMainPage());
- }
- ol.endIndexSection(isMainPage);
- }
- if (documentedPages>0)
- {
- //ol.parseText(projPrefix+theTranslator->trPageDocumentation());
- //ol.endIndexSection(isPageDocumentation);
- PageSDict::Iterator pdi(*Doxygen::pageSDict);
- PageDef *pd=pdi.toFirst();
- bool first=Doxygen::mainPage==0;
- for (pdi.toFirst();(pd=pdi.current());++pdi)
- {
- if (!pd->getGroupDef() && !pd->isReference() &&
- (!pd->hasParentPage() || // not inside other page
- (Doxygen::mainPage==pd->getOuterScope())) // or inside main page
- )
- {
- bool isCitationPage = pd->name()=="citelist";
- if (isCitationPage)
- {
- // For LaTeX the bibliograph is already written by \bibliography
- ol.pushGeneratorState();
- ol.disable(OutputGenerator::Latex);
- }
- QCString title = pd->title();
- if (title.isEmpty()) title=pd->name();
- ol.startIndexSection(isPageDocumentation);
- ol.parseText(title);
- ol.endIndexSection(isPageDocumentation);
- ol.pushGeneratorState(); // write TOC title (RTF only)
- ol.disableAllBut(OutputGenerator::RTF);
- ol.startIndexSection(isPageDocumentation2);
- ol.parseText(title);
- ol.endIndexSection(isPageDocumentation2);
- ol.popGeneratorState();
- ol.writeAnchor(0,pd->name());
-
- ol.writePageLink(pd->getOutputFileBase(),first);
- first=FALSE;
-
- if (isCitationPage)
- {
- ol.popGeneratorState();
- }
- }
- }
- }
-
- if (!Config_getBool("LATEX_HIDE_INDICES"))
- {
- //if (indexedPages>0)
- //{
- // ol.startIndexSection(isPageIndex);
- // ol.parseText(/*projPrefix+*/ theTranslator->trPageIndex());
- // ol.endIndexSection(isPageIndex);
- //}
- if (documentedGroups>0)
- {
- ol.startIndexSection(isModuleIndex);
- ol.parseText(/*projPrefix+*/ theTranslator->trModuleIndex());
- ol.endIndexSection(isModuleIndex);
- }
- if (Config_getBool("SHOW_DIRECTORIES") && documentedDirs>0)
- {
- ol.startIndexSection(isDirIndex);
- ol.parseText(/*projPrefix+*/ theTranslator->trDirIndex());
- ol.endIndexSection(isDirIndex);
- }
- if (documentedNamespaces>0)
- {
- ol.startIndexSection(isNamespaceIndex);
- ol.parseText(/*projPrefix+*/(fortranOpt?theTranslator->trModulesIndex():theTranslator->trNamespaceIndex()));
- ol.endIndexSection(isNamespaceIndex);
- }
- if (hierarchyClasses>0)
- {
- ol.startIndexSection(isClassHierarchyIndex);
- ol.parseText(/*projPrefix+*/
- (fortranOpt ? theTranslator->trCompoundIndexFortran() :
- vhdlOpt ? VhdlDocGen::trDesignUnitIndex() :
- theTranslator->trCompoundIndex()
- ));
- ol.endIndexSection(isClassHierarchyIndex);
- }
- if (annotatedClassesPrinted>0)
- {
- ol.startIndexSection(isCompoundIndex);
- ol.parseText(/*projPrefix+*/
- (fortranOpt ? theTranslator->trCompoundIndexFortran() :
- vhdlOpt ? VhdlDocGen::trDesignUnitIndex() :
- theTranslator->trCompoundIndex()
- ));
- ol.endIndexSection(isCompoundIndex);
- }
- if (documentedFiles>0)
- {
- ol.startIndexSection(isFileIndex);
- ol.parseText(/*projPrefix+*/theTranslator->trFileIndex());
- ol.endIndexSection(isFileIndex);
- }
- }
- if (documentedGroups>0)
- {
- ol.startIndexSection(isModuleDocumentation);
- ol.parseText(/*projPrefix+*/theTranslator->trModuleDocumentation());
- ol.endIndexSection(isModuleDocumentation);
- }
- if (Config_getBool("SHOW_DIRECTORIES") && documentedDirs>0)
- {
- ol.startIndexSection(isDirDocumentation);
- ol.parseText(/*projPrefix+*/theTranslator->trDirDocumentation());
- ol.endIndexSection(isDirDocumentation);
- }
- if (documentedNamespaces>0)
- {
- ol.startIndexSection(isNamespaceDocumentation);
- ol.parseText(/*projPrefix+*/(fortranOpt?theTranslator->trModuleDocumentation():theTranslator->trNamespaceDocumentation()));
- ol.endIndexSection(isNamespaceDocumentation);
- }
- if (annotatedClassesPrinted>0)
- {
- ol.startIndexSection(isClassDocumentation);
- ol.parseText(/*projPrefix+*/(fortranOpt?theTranslator->trTypeDocumentation():theTranslator->trClassDocumentation()));
- ol.endIndexSection(isClassDocumentation);
- }
- if (documentedFiles>0)
- {
- ol.startIndexSection(isFileDocumentation);
- ol.parseText(/*projPrefix+*/theTranslator->trFileDocumentation());
- ol.endIndexSection(isFileDocumentation);
- }
- if (Doxygen::exampleSDict->count()>0)
- {
- ol.startIndexSection(isExampleDocumentation);
- ol.parseText(/*projPrefix+*/theTranslator->trExampleDocumentation());
- ol.endIndexSection(isExampleDocumentation);
- }
- ol.endIndexSection(isEndIndex);
- endFile(ol);
-
- if (Doxygen::mainPage)
- {
- Doxygen::insideMainPage=TRUE;
- ol.disable(OutputGenerator::Man);
- startFile(ol,Doxygen::mainPage->name(),0,Doxygen::mainPage->title());
- ol.startContents();
- ol.startTextBlock();
- ol.parseDoc(defFileName,defLine,Doxygen::mainPage,0,
- Doxygen::mainPage->documentation(),FALSE,FALSE
- );
- ol.endTextBlock();
- endFile(ol);
- ol.enable(OutputGenerator::Man);
- Doxygen::insideMainPage=FALSE;
- }
-
- ol.popGeneratorState();
-}
-
-static QArray<bool> indexWritten;
-
-static void writeIndexHierarchyEntries(OutputList &ol,const QList<LayoutNavEntry> &entries)
-{
- QListIterator<LayoutNavEntry> li(entries);
- LayoutNavEntry *lne;
- for (li.toFirst();(lne=li.current());++li)
- {
- LayoutNavEntry::Kind kind = lne->kind();
- uint index = (uint)kind;
- if (index>=indexWritten.size())
- {
- uint i;
- uint oldSize = indexWritten.size();
- uint newSize = index+1;
- indexWritten.resize(newSize);
- for (i=oldSize;i<newSize;i++) indexWritten.at(i)=FALSE;
- }
- //printf("starting %s kind=%d\n",lne->title().data(),lne->kind());
- bool addToIndex=lne==0 || lne->visible();
- bool needsClosing=FALSE;
- if (!indexWritten.at(index))
- {
- switch(kind)
- {
- case LayoutNavEntry::MainPage:
- msg("Generating index page...\n");
- writeIndex(ol);
- break;
- case LayoutNavEntry::Pages:
- msg("Generating page index...\n");
- writePageIndex(ol);
- break;
- case LayoutNavEntry::Modules:
- msg("Generating module index...\n");
- writeGroupIndex(ol);
- break;
- case LayoutNavEntry::Namespaces:
- {
- if (documentedNamespaces>0 && addToIndex)
- {
- Doxygen::indexList.addContentsItem(TRUE,lne->title(),0,0,0);
- Doxygen::indexList.incContentsDepth();
- needsClosing=TRUE;
- }
- if (LayoutDocManager::instance().rootNavEntry()->find(LayoutNavEntry::Namespaces)!=lne) // for backward compatibility with old layout file
- {
- msg("Generating namespace index...\n");
- writeNamespaceIndex(ol);
- }
- }
- break;
- case LayoutNavEntry::NamespaceList:
- msg("Generating namespace index...\n");
- writeNamespaceIndex(ol);
- break;
- case LayoutNavEntry::NamespaceMembers:
- msg("Generating namespace member index...\n");
- writeNamespaceMemberIndex(ol);
- break;
- case LayoutNavEntry::Classes:
- if (annotatedClasses>0 && addToIndex)
- {
- Doxygen::indexList.addContentsItem(TRUE,lne->title(),0,0,0);
- Doxygen::indexList.incContentsDepth();
- needsClosing=TRUE;
- }
- if (LayoutDocManager::instance().rootNavEntry()->find(LayoutNavEntry::Classes)!=lne) // for backward compatibility with old layout file
- {
- msg("Generating annotated compound index...\n");
- writeAnnotatedIndex(ol);
- }
- break;
- case LayoutNavEntry::ClassList:
- msg("Generating annotated compound index...\n");
- writeAnnotatedIndex(ol);
- break;
- case LayoutNavEntry::ClassIndex:
- msg("Generating alphabetical compound index...\n");
- writeAlphabeticalIndex(ol);
- break;
- case LayoutNavEntry::ClassHierarchy:
- msg("Generating hierarchical class index...\n");
- writeHierarchicalIndex(ol);
- if (Config_getBool("HAVE_DOT") && Config_getBool("GRAPHICAL_HIERARCHY"))
- {
- msg("Generating graphical class hierarchy...\n");
- writeGraphicalClassHierarchy(ol);
- }
- break;
- case LayoutNavEntry::ClassMembers:
- msg("Generating member index...\n");
- writeClassMemberIndex(ol);
- break;
- case LayoutNavEntry::Files:
- if (documentedHtmlFiles>0 && addToIndex)
- {
- Doxygen::indexList.addContentsItem(TRUE,lne->title(),0,0,0);
- Doxygen::indexList.incContentsDepth();
- needsClosing=TRUE;
- }
- if (LayoutDocManager::instance().rootNavEntry()->find(LayoutNavEntry::Files)!=lne) // for backward compatibility with old layout file
- {
- msg("Generating file index...\n");
- writeFileIndex(ol);
- }
- break;
- case LayoutNavEntry::FileList:
- msg("Generating file index...\n");
- writeFileIndex(ol);
- break;
- case LayoutNavEntry::FileGlobals:
- msg("Generating file member index...\n");
- writeFileMemberIndex(ol);
- break;
- case LayoutNavEntry::Dirs:
- if (Config_getBool("SHOW_DIRECTORIES"))
- {
- msg("Generating directory index...\n");
- writeDirIndex(ol);
- }
- break;
- case LayoutNavEntry::Examples:
- msg("Generating example index...\n");
- writeExampleIndex(ol);
- break;
- case LayoutNavEntry::User:
- {
- // prepend a ! or ^ marker to the URL to avoid tampering with it
- QCString url = correctURL(lne->url(),"!"); // add ! to relative URL
- if (!url.isEmpty() && url.at(0)!='!') // absolute URL
- {
- url.prepend("^"); // prepend ^ to absolute URL
- }
- bool isRef = lne->baseFile().left(4)=="@ref" || lne->baseFile().left(4)=="\\ref";
- Doxygen::indexList.addContentsItem(TRUE,lne->title(),0,url,0,FALSE,isRef);
- }
- break;
- case LayoutNavEntry::UserGroup:
- if (addToIndex)
- {
- Doxygen::indexList.addContentsItem(TRUE,lne->title(),0,lne->baseFile(),0,TRUE,TRUE);
- Doxygen::indexList.incContentsDepth();
- needsClosing=TRUE;
- }
- writeUserGroupStubPage(ol,lne);
- break;
- }
- if (kind!=LayoutNavEntry::User && kind!=LayoutNavEntry::UserGroup) // User entry may appear multiple times
- {
- indexWritten.at(index)=TRUE;
- }
- }
- writeIndexHierarchyEntries(ol,lne->children());
- if (needsClosing)
- {
- switch(kind)
- {
- case LayoutNavEntry::Namespaces:
- case LayoutNavEntry::Classes:
- case LayoutNavEntry::Files:
- case LayoutNavEntry::UserGroup:
- Doxygen::indexList.decContentsDepth();
- break;
- default:
- break;
- }
- }
- //printf("ending %s kind=%d\n",lne->title().data(),lne->kind());
- }
-}
-
-void writeIndexHierarchy(OutputList &ol)
-{
- LayoutNavEntry *lne = LayoutDocManager::instance().rootNavEntry();
- if (lne)
- {
- writeIndexHierarchyEntries(ol,lne->children());
- }
-}
-
diff --git a/trunk/src/index.h b/trunk/src/index.h
deleted file mode 100644
index 54f7f35..0000000
--- a/trunk/src/index.h
+++ /dev/null
@@ -1,271 +0,0 @@
-/******************************************************************************
- *
- *
- *
- * Copyright (C) 1997-2012 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.
- *
- */
-
-#ifndef INDEX_H
-#define INDEX_H
-
-#include "qtbc.h"
-#include <qfile.h>
-#include <qlist.h>
-
-class Definition;
-class MemberDef;
-class OutputList;
-class FTextStream;
-
-/** \brief Abstract interface for index generators. */
-class IndexIntf
-{
- public:
- virtual ~IndexIntf() {}
- virtual void initialize() = 0;
- virtual void finalize() = 0;
- virtual void incContentsDepth() = 0;
- virtual void decContentsDepth() = 0;
- virtual void addContentsItem(bool isDir, const char *name, const char *ref,
- const char *file, const char *anchor, bool separateIndex,
- bool addToNavIndex) = 0;
- virtual void addIndexItem(Definition *context,MemberDef *md,const char *title) = 0;
- virtual void addIndexFile(const char *name) = 0;
- virtual void addImageFile(const char *name) = 0;
- virtual void addStyleSheetFile(const char *name) = 0;
-};
-
-/** \brief A list of index interfaces.
- *
- * This class itself implements all methods of IndexIntf and
- * just forwards the calls to all items in the list.
- */
-class IndexList : public IndexIntf
-{
- private:
- QList<IndexIntf> m_intfs;
-
- // --- foreach implementations for various number of arguments
-
- void foreach(void (IndexIntf::*methodPtr)())
- {
- QListIterator<IndexIntf> li(m_intfs);
- for (li.toFirst();li.current();++li) (li.current()->*methodPtr)();
- }
-
- template<typename A1>
- void foreach(void (IndexIntf::*methodPtr)(A1),A1 a1)
- {
- QListIterator<IndexIntf> li(m_intfs);
- for (li.toFirst();li.current();++li) (li.current()->*methodPtr)(a1);
- }
-
- template<typename A1,typename A2,typename A3>
- void foreach(void (IndexIntf::*methodPtr)(A1,A2,A3),A1 a1,A2 a2,A3 a3)
- {
- QListIterator<IndexIntf> li(m_intfs);
- for (li.toFirst();li.current();++li) (li.current()->*methodPtr)(a1,a2,a3);
- }
-
- template<typename A1,typename A2,typename A3,typename A4>
- void foreach(void (IndexIntf::*methodPtr)(A1,A2,A3,A4),A1 a1,A2 a2,A3 a3,A4 a4)
- {
- QListIterator<IndexIntf> li(m_intfs);
- for (li.toFirst();li.current();++li) (li.current()->*methodPtr)(a1,a2,a3,a4);
- }
-
- template<typename A1,typename A2,typename A3,typename A4,typename A5>
- void foreach(void (IndexIntf::*methodPtr)(A1,A2,A3,A4,A5),A1 a1,A2 a2,A3 a3,A4 a4,A5 a5)
- {
- QListIterator<IndexIntf> li(m_intfs);
- for (li.toFirst();li.current();++li) (li.current()->*methodPtr)(a1,a2,a3,a4,a5);
- }
-
- template<typename A1,typename A2,typename A3,typename A4,typename A5,typename A6>
- void foreach(void (IndexIntf::*methodPtr)(A1,A2,A3,A4,A5,A6),A1 a1,A2 a2,A3 a3,A4 a4,A5 a5,A6 a6)
- {
- QListIterator<IndexIntf> li(m_intfs);
- for (li.toFirst();li.current();++li) (li.current()->*methodPtr)(a1,a2,a3,a4,a5,a6);
- }
-
- template<typename A1,typename A2,typename A3,typename A4,typename A5,typename A6,typename A7>
- void foreach(void (IndexIntf::*methodPtr)(A1,A2,A3,A4,A5,A6,A7),A1 a1,A2 a2,A3 a3,A4 a4,A5 a5,A6 a6,A7 a7)
- {
- QListIterator<IndexIntf> li(m_intfs);
- for (li.toFirst();li.current();++li) (li.current()->*methodPtr)(a1,a2,a3,a4,a5,a6,a7);
- }
-
- public:
- /** Creates a list of indexes */
- IndexList() { m_intfs.setAutoDelete(TRUE); }
- /** Add an index generator to the list */
- void addIndex(IndexIntf *intf)
- { m_intfs.append(intf); }
-
- // IndexIntf implementation
- void initialize()
- { foreach(&IndexIntf::initialize); }
- void finalize()
- { foreach(&IndexIntf::finalize); }
- void incContentsDepth()
- { foreach(&IndexIntf::incContentsDepth); }
- void decContentsDepth()
- { foreach(&IndexIntf::decContentsDepth); }
- void addContentsItem(bool isDir, const char *name, const char *ref,
- const char *file, const char *anchor,bool separateIndex=FALSE,bool addToNavIndex=FALSE)
- { foreach<bool,const char *,const char *,const char *,const char*,bool,bool>
- (&IndexIntf::addContentsItem,isDir,name,ref,file,anchor,separateIndex,addToNavIndex); }
- void addIndexItem(Definition *context,MemberDef *md,const char *title=0)
- { foreach<Definition *,MemberDef *>
- (&IndexIntf::addIndexItem,context,md,title); }
- void addIndexFile(const char *name)
- { foreach<const char *>(&IndexIntf::addIndexFile,name); }
- void addImageFile(const char *name)
- { foreach<const char *>(&IndexIntf::addImageFile,name); }
- void addStyleSheetFile(const char *name)
- { foreach<const char *>(&IndexIntf::addStyleSheetFile,name); }
-
-};
-
-
-enum IndexSections
-{
- isTitlePageStart,
- isTitlePageAuthor,
- isMainPage,
- isModuleIndex,
- isDirIndex,
- isNamespaceIndex,
- isClassHierarchyIndex,
- isCompoundIndex,
- isFileIndex,
- isPageIndex,
- isModuleDocumentation,
- isDirDocumentation,
- isNamespaceDocumentation,
- isClassDocumentation,
- isFileDocumentation,
- isExampleDocumentation,
- isPageDocumentation,
- isPageDocumentation2,
- isEndIndex
-};
-
-enum HighlightedItem
-{
- HLI_None=0,
- HLI_Main,
- HLI_Modules,
- HLI_Directories,
- HLI_Namespaces,
- HLI_Hierarchy,
- HLI_Classes,
- HLI_Annotated,
- HLI_Files,
- HLI_NamespaceMembers,
- HLI_Functions,
- HLI_Globals,
- HLI_Pages,
- HLI_Examples,
- HLI_Search,
- HLI_UserGroup,
-
- HLI_ClassVisible,
- HLI_NamespaceVisible,
- HLI_FileVisible
-};
-
-enum ClassMemberHighlight
-{
- CMHL_All = 0,
- CMHL_Functions,
- CMHL_Variables,
- CMHL_Typedefs,
- CMHL_Enums,
- CMHL_EnumValues,
- CMHL_Properties,
- CMHL_Events,
- CMHL_Related,
- CMHL_Total = CMHL_Related+1
-};
-
-enum FileMemberHighlight
-{
- FMHL_All = 0,
- FMHL_Functions,
- FMHL_Variables,
- FMHL_Typedefs,
- FMHL_Enums,
- FMHL_EnumValues,
- FMHL_Defines,
- FMHL_Total = FMHL_Defines+1
-};
-
-enum NamespaceMemberHighlight
-{
- NMHL_All = 0,
- NMHL_Functions,
- NMHL_Variables,
- NMHL_Typedefs,
- NMHL_Enums,
- NMHL_EnumValues,
- NMHL_Total = NMHL_EnumValues+1
-};
-
-enum ClassHighlight
-{
- CHL_All = 0,
- CHL_Classes,
- CHL_Structs,
- CHL_Unions,
- CHL_Interfaces,
- CHL_Protocols,
- CHL_Categories,
- CHL_Exceptions,
- CHL_Total = CHL_Exceptions+1
-};
-
-void writeGraphInfo(OutputList &ol);
-void writeIndexHierarchy(OutputList &ol);
-
-void countDataStructures();
-
-extern int annotatedClasses;
-extern int hierarchyClasses;
-extern int documentedFiles;
-extern int documentedGroups;
-extern int documentedNamespaces;
-extern int indexedPages;
-extern int documentedClassMembers[CMHL_Total];
-extern int documentedFileMembers[FMHL_Total];
-extern int documentedNamespaceMembers[NMHL_Total];
-extern int documentedDirs;
-extern int documentedHtmlFiles;
-extern int documentedPages;
-
-void startTitle(OutputList &ol,const char *fileName,Definition *def=0);
-void endTitle(OutputList &ol,const char *fileName,const char *name);
-void startFile(OutputList &ol,const char *name,const char *manName,
- const char *title,HighlightedItem hli=HLI_None,
- bool additionalIndices=FALSE,const char *altSidebarName=0);
-void endFile(OutputList &ol,bool skipNavIndex=FALSE,bool skipEndContents=FALSE);
-void endFileWithNavPath(Definition *d,OutputList &ol);
-
-void initClassMemberIndices();
-void initFileMemberIndices();
-void initNamespaceMemberIndices();
-void addClassMemberNameToIndex(MemberDef *md);
-void addFileMemberNameToIndex(MemberDef *md);
-void addNamespaceMemberNameToIndex(MemberDef *md);
-
-#endif
diff --git a/trunk/src/index.xsd b/trunk/src/index.xsd
deleted file mode 100644
index d7ab2a9..0000000
--- a/trunk/src/index.xsd
+++ /dev/null
@@ -1,66 +0,0 @@
-<?xml version='1.0' encoding='utf-8' ?>
-<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
- <xsd:element name="doxygenindex" type="DoxygenType"/>
-
- <xsd:complexType name="DoxygenType">
- <xsd:sequence>
- <xsd:element name="compound" type="CompoundType" minOccurs="0" maxOccurs="unbounded"/>
- </xsd:sequence>
- <xsd:attribute name="version" type="xsd:string" use="required"/>
- </xsd:complexType>
-
- <xsd:complexType name="CompoundType">
- <xsd:sequence>
- <xsd:element name="name" type="xsd:string"/>
- <xsd:element name="member" type="MemberType" minOccurs="0" maxOccurs="unbounded"/>
- </xsd:sequence>
- <xsd:attribute name="refid" type="xsd:string" use="required"/>
- <xsd:attribute name="kind" type="CompoundKind" use="required"/>
- </xsd:complexType>
-
- <xsd:complexType name="MemberType">
- <xsd:sequence>
- <xsd:element name="name" type="xsd:string"/>
- </xsd:sequence>
- <xsd:attribute name="refid" type="xsd:string" use="required"/>
- <xsd:attribute name="kind" type="MemberKind" use="required"/>
- </xsd:complexType>
-
- <xsd:simpleType name="CompoundKind">
- <xsd:restriction base="xsd:string">
- <xsd:enumeration value="class"/>
- <xsd:enumeration value="struct"/>
- <xsd:enumeration value="union"/>
- <xsd:enumeration value="interface"/>
- <xsd:enumeration value="protocol"/>
- <xsd:enumeration value="category"/>
- <xsd:enumeration value="exception"/>
- <xsd:enumeration value="file"/>
- <xsd:enumeration value="namespace"/>
- <xsd:enumeration value="group"/>
- <xsd:enumeration value="page"/>
- <xsd:enumeration value="example"/>
- <xsd:enumeration value="dir"/>
- </xsd:restriction>
- </xsd:simpleType>
-
- <xsd:simpleType name="MemberKind">
- <xsd:restriction base="xsd:string">
- <xsd:enumeration value="define"/>
- <xsd:enumeration value="property"/>
- <xsd:enumeration value="event"/>
- <xsd:enumeration value="variable"/>
- <xsd:enumeration value="typedef"/>
- <xsd:enumeration value="enum"/>
- <xsd:enumeration value="enumvalue"/>
- <xsd:enumeration value="function"/>
- <xsd:enumeration value="signal"/>
- <xsd:enumeration value="prototype"/>
- <xsd:enumeration value="friend"/>
- <xsd:enumeration value="dcop"/>
- <xsd:enumeration value="slot"/>
- </xsd:restriction>
- </xsd:simpleType>
-
-</xsd:schema>
-
diff --git a/trunk/src/index_xsd.h b/trunk/src/index_xsd.h
deleted file mode 100644
index 2f5d0c5..0000000
--- a/trunk/src/index_xsd.h
+++ /dev/null
@@ -1,66 +0,0 @@
-"<?xml version='1.0' encoding='utf-8' ?>\n"
-"<xsd:schema xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\">\n"
-" <xsd:element name=\"doxygenindex\" type=\"DoxygenType\"/>\n"
-"\n"
-" <xsd:complexType name=\"DoxygenType\">\n"
-" <xsd:sequence>\n"
-" <xsd:element name=\"compound\" type=\"CompoundType\" minOccurs=\"0\" maxOccurs=\"unbounded\"/>\n"
-" </xsd:sequence>\n"
-" <xsd:attribute name=\"version\" type=\"xsd:string\" use=\"required\"/>\n"
-" </xsd:complexType>\n"
-"\n"
-" <xsd:complexType name=\"CompoundType\">\n"
-" <xsd:sequence>\n"
-" <xsd:element name=\"name\" type=\"xsd:string\"/>\n"
-" <xsd:element name=\"member\" type=\"MemberType\" minOccurs=\"0\" maxOccurs=\"unbounded\"/>\n"
-" </xsd:sequence>\n"
-" <xsd:attribute name=\"refid\" type=\"xsd:string\" use=\"required\"/>\n"
-" <xsd:attribute name=\"kind\" type=\"CompoundKind\" use=\"required\"/>\n"
-" </xsd:complexType>\n"
-"\n"
-" <xsd:complexType name=\"MemberType\">\n"
-" <xsd:sequence>\n"
-" <xsd:element name=\"name\" type=\"xsd:string\"/>\n"
-" </xsd:sequence>\n"
-" <xsd:attribute name=\"refid\" type=\"xsd:string\" use=\"required\"/>\n"
-" <xsd:attribute name=\"kind\" type=\"MemberKind\" use=\"required\"/>\n"
-" </xsd:complexType>\n"
-" \n"
-" <xsd:simpleType name=\"CompoundKind\">\n"
-" <xsd:restriction base=\"xsd:string\">\n"
-" <xsd:enumeration value=\"class\"/>\n"
-" <xsd:enumeration value=\"struct\"/>\n"
-" <xsd:enumeration value=\"union\"/>\n"
-" <xsd:enumeration value=\"interface\"/>\n"
-" <xsd:enumeration value=\"protocol\"/>\n"
-" <xsd:enumeration value=\"category\"/>\n"
-" <xsd:enumeration value=\"exception\"/>\n"
-" <xsd:enumeration value=\"file\"/>\n"
-" <xsd:enumeration value=\"namespace\"/>\n"
-" <xsd:enumeration value=\"group\"/>\n"
-" <xsd:enumeration value=\"page\"/>\n"
-" <xsd:enumeration value=\"example\"/>\n"
-" <xsd:enumeration value=\"dir\"/>\n"
-" </xsd:restriction>\n"
-" </xsd:simpleType>\n"
-"\n"
-" <xsd:simpleType name=\"MemberKind\">\n"
-" <xsd:restriction base=\"xsd:string\">\n"
-" <xsd:enumeration value=\"define\"/>\n"
-" <xsd:enumeration value=\"property\"/>\n"
-" <xsd:enumeration value=\"event\"/>\n"
-" <xsd:enumeration value=\"variable\"/>\n"
-" <xsd:enumeration value=\"typedef\"/>\n"
-" <xsd:enumeration value=\"enum\"/>\n"
-" <xsd:enumeration value=\"enumvalue\"/>\n"
-" <xsd:enumeration value=\"function\"/>\n"
-" <xsd:enumeration value=\"signal\"/>\n"
-" <xsd:enumeration value=\"prototype\"/>\n"
-" <xsd:enumeration value=\"friend\"/>\n"
-" <xsd:enumeration value=\"dcop\"/>\n"
-" <xsd:enumeration value=\"slot\"/>\n"
-" </xsd:restriction>\n"
-" </xsd:simpleType>\n"
-"\n"
-"</xsd:schema>\n"
-"\n"
diff --git a/trunk/src/indexlog.cpp b/trunk/src/indexlog.cpp
deleted file mode 100644
index 5fb67f5..0000000
--- a/trunk/src/indexlog.cpp
+++ /dev/null
@@ -1,152 +0,0 @@
-/*
- * Copyright (C) 2008 by Sebastian Pipping.
- * Copyright (C) 2008 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.
- *
- * Sebastian Pipping <sebastian@pipping.org>
- */
-
-#include "indexlog.h"
-#include "message.h"
-#include "config.h"
-
-#include <qstring.h>
-#include <qfile.h>
-
-
-IndexLog::IndexLog()
-{
-}
-
-IndexLog::~IndexLog()
-{
-}
-
-void IndexLog::initialize()
-{
- char const * const attributes[] =
- { "xmlns",
- "http://doxygen.org/xmlns/indexlog/1/0/",
- NULL
- };
- m_out.open("log", attributes);
-
- openMethodCall("initialize");
- closeMethodCall();
-}
-
-void IndexLog::finalize()
-{
- openMethodCall("finalize");
- closeMethodCall();
- m_out.close("log");
- QCString fileName = Config_getString("HTML_OUTPUT")+"/index.log.xml";
- QFile file(fileName);
- if (!file.open(IO_WriteOnly))
- {
- err("Could not open file %s for writing\n", fileName.data());
- exit(1);
- }
- m_out.dumpTo(file);
- file.flush();
- file.close();
-}
-
-void IndexLog::incContentsDepth()
-{
- openMethodCall("incContentsDepth");
- closeMethodCall();
-}
-
-void IndexLog::decContentsDepth()
-{
- openMethodCall("decContentsDepth");
- closeMethodCall();
-}
-
-void IndexLog::addContentsItem(bool isDir, char const * name,
- char const * ref, char const * file,
- char const * anchor)
-{
- openMethodCall("addContentsItem");
- addBoolParameter("isDir", isDir);
- addStringParameter("name", name);
- addStringParameter("ref", ref);
- addStringParameter("file", file);
- addStringParameter("anchor", anchor);
- closeMethodCall();
-}
-
-void IndexLog::addIndexItem(char const * level1, char const * level2,
- char const * contRef, char const * memRef,
- char const * anchor, const MemberDef * md)
-{
- openMethodCall("addIndexItem");
- addStringParameter("level1", level1);
- addStringParameter("level2", level2);
- addStringParameter("contRef", contRef);
- addStringParameter("memRef", memRef);
- addStringParameter("anchor", anchor);
- addMemberDefParameter("md", md);
- closeMethodCall();
-}
-
-void IndexLog::addIndexFile(char const * name)
-{
- openMethodCall("addIndexFile");
- addStringParameter("name", name);
- closeMethodCall();
-}
-
-void IndexLog::openMethodCall(char const * methodName)
-{
- m_out.setCompressionEnabled(true);
- m_out.open("call");
- m_out.openCloseContent("method", methodName);
-}
-
-void IndexLog::addPrimitiveParameter(char const * parameterName,
- char const * value)
-{
- m_out.open("param");
- m_out.openCloseContent("name", parameterName);
- if (value != NULL)
- {
- m_out.openCloseContent("value", value);
- }
- m_out.close("param");
-}
-
-void IndexLog::addBoolParameter(char const * parameterName, bool value)
-{
- addPrimitiveParameter(parameterName, value ? "true" : "false");
-}
-
-void IndexLog::addStringParameter(char const * parameterName,
- char const * value)
-{
- addPrimitiveParameter(parameterName, value);
-}
-
-void IndexLog::addMemberDefParameter(char const * parameterName,
- const MemberDef * /*value*/)
-{
- m_out.open("param");
- m_out.openCloseContent("name", parameterName);
- m_out.close("param");
-}
-
-void IndexLog::closeMethodCall()
-{
- m_out.setCompressionEnabled(false);
- m_out.close("call");
-}
-
diff --git a/trunk/src/indexlog.h b/trunk/src/indexlog.h
deleted file mode 100644
index 6875971..0000000
--- a/trunk/src/indexlog.h
+++ /dev/null
@@ -1,57 +0,0 @@
-/*
- * Copyright (C) 2008 by Sebastian Pipping.
- * Copyright (C) 2008 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.
- *
- * Sebastian Pipping <sebastian@pipping.org>
- */
-
-#ifndef INDEXLOG_H
-#define INDEXLOG_H
-
-#include "index.h"
-#include "qhpxmlwriter.h"
-
-class IndexLog : public IndexIntf
-{
- public:
- IndexLog();
- ~IndexLog();
-
- // BEGIN IndexIntf
- void initialize();
- void finalize();
- void incContentsDepth();
- void decContentsDepth();
- void addContentsItem(bool isDir, const char *name, const char *ref,
- const char *file, const char *anchor);
- void addIndexItem(const char *level1, const char *level2,
- const char *contRef, const char *memRef,
- const char *anchor, const MemberDef * md);
- void addIndexFile(const char *name);
- // END IndexIntf
-
- private:
- void openMethodCall(char const * methodName);
- void addPrimitiveParameter(char const * parameterName,
- char const * value);
- void addBoolParameter(char const * parameterName, bool value);
- void addStringParameter(char const * parameterName,
- char const * value);
- void addMemberDefParameter(char const * parameterName,
- const MemberDef * value);
- void closeMethodCall();
-
- QhpXmlWriter m_out;
-};
-
-#endif // INDEXLOG_H
-
diff --git a/trunk/src/jquery.js b/trunk/src/jquery.js
deleted file mode 100644
index 60894d0..0000000
--- a/trunk/src/jquery.js
+++ /dev/null
@@ -1,13 +0,0 @@
-/*
- * jQuery JavaScript Library v1.3.2
- * http://jquery.com/
- *
- * Copyright (c) 2009 John Resig
- * Dual licensed under the MIT and GPL licenses.
- * http://docs.jquery.com/License
- *
- * Date: 2009-02-19 17:34:21 -0500 (Thu, 19 Feb 2009)
- * Revision: 6246
- */
-(function(){var l=this,g,y=l.jQuery,p=l.$,o=l.jQuery=l.$=function(E,F){return new o.fn.init(E,F)},D=/^[^<]*(<(.|\s)+>)[^>]*$|^#([\w-]+)$/,f=/^.[^:#\[\.,]*$/;o.fn=o.prototype={init:function(E,H){E=E||document;if(E.nodeType){this[0]=E;this.length=1;this.context=E;return this}if(typeof E==="string"){var G=D.exec(E);if(G&&(G[1]||!H)){if(G[1]){E=o.clean([G[1]],H)}else{var I=document.getElementById(G[3]);if(I&&I.id!=G[3]){return o().find(E)}var F=o(I||[]);F.context=document;F.selector=E;return F}}else{return o(H).find(E)}}else{if(o.isFunction(E)){return o(document).ready(E)}}if(E.selector&&E.context){this.selector=E.selector;this.context=E.context}return this.setArray(o.isArray(E)?E:o.makeArray(E))},selector:"",jquery:"1.3.2",size:function(){return this.length},get:function(E){return E===g?Array.prototype.slice.call(this):this[E]},pushStack:function(F,H,E){var G=o(F);G.prevObject=this;G.context=this.context;if(H==="find"){G.selector=this.selector+(this.selector?" ":"")+E}else{if(H){G.selector=this.selector+"."+H+"("+E+")"}}return G},setArray:function(E){this.length=0;Array.prototype.push.apply(this,E);return this},each:function(F,E){return o.each(this,F,E)},index:function(E){return o.inArray(E&&E.jquery?E[0]:E,this)},attr:function(F,H,G){var E=F;if(typeof F==="string"){if(H===g){return this[0]&&o[G||"attr"](this[0],F)}else{E={};E[F]=H}}return this.each(function(I){for(F in E){o.attr(G?this.style:this,F,o.prop(this,E[F],G,I,F))}})},css:function(E,F){if((E=="width"||E=="height")&&parseFloat(F)<0){F=g}return this.attr(E,F,"curCSS")},text:function(F){if(typeof F!=="object"&&F!=null){return this.empty().append((this[0]&&this[0].ownerDocument||document).createTextNode(F))}var E="";o.each(F||this,function(){o.each(this.childNodes,function(){if(this.nodeType!=8){E+=this.nodeType!=1?this.nodeValue:o.fn.text([this])}})});return E},wrapAll:function(E){if(this[0]){var F=o(E,this[0].ownerDocument).clone();if(this[0].parentNode){F.insertBefore(this[0])}F.map(function(){var G=this;while(G.firstChild){G=G.firstChild}return G}).append(this)}return this},wrapInner:function(E){return this.each(function(){o(this).contents().wrapAll(E)})},wrap:function(E){return this.each(function(){o(this).wrapAll(E)})},append:function(){return this.domManip(arguments,true,function(E){if(this.nodeType==1){this.appendChild(E)}})},prepend:function(){return this.domManip(arguments,true,function(E){if(this.nodeType==1){this.insertBefore(E,this.firstChild)}})},before:function(){return this.domManip(arguments,false,function(E){this.parentNode.insertBefore(E,this)})},after:function(){return this.domManip(arguments,false,function(E){this.parentNode.insertBefore(E,this.nextSibling)})},end:function(){return this.prevObject||o([])},push:[].push,sort:[].sort,splice:[].splice,find:function(E){if(this.length===1){var F=this.pushStack([],"find",E);F.length=0;o.find(E,this[0],F);return F}else{return this.pushStack(o.unique(o.map(this,function(G){return o.find(E,G)})),"find",E)}},clone:function(G){var E=this.map(function(){if(!o.support.noCloneEvent&&!o.isXMLDoc(this)){var I=this.outerHTML;if(!I){var J=this.ownerDocument.createElement("div");J.appendChild(this.cloneNode(true));I=J.innerHTML}return o.clean([I.replace(/ jQuery\d+="(?:\d+|null)"/g,"").replace(/^\s*/,"")])[0]}else{return this.cloneNode(true)}});if(G===true){var H=this.find("*").andSelf(),F=0;E.find("*").andSelf().each(function(){if(this.nodeName!==H[F].nodeName){return}var I=o.data(H[F],"events");for(var K in I){for(var J in I[K]){o.event.add(this,K,I[K][J],I[K][J].data)}}F++})}return E},filter:function(E){return this.pushStack(o.isFunction(E)&&o.grep(this,function(G,F){return E.call(G,F)})||o.multiFilter(E,o.grep(this,function(F){return F.nodeType===1})),"filter",E)},closest:function(E){var G=o.expr.match.POS.test(E)?o(E):null,F=0;return this.map(function(){var H=this;while(H&&H.ownerDocument){if(G?G.index(H)>-1:o(H).is(E)){o.data(H,"closest",F);return H}H=H.parentNode;F++}})},not:function(E){if(typeof E==="string"){if(f.test(E)){return this.pushStack(o.multiFilter(E,this,true),"not",E)}else{E=o.multiFilter(E,this)}}var F=E.length&&E[E.length-1]!==g&&!E.nodeType;return this.filter(function(){return F?o.inArray(this,E)<0:this!=E})},add:function(E){return this.pushStack(o.unique(o.merge(this.get(),typeof E==="string"?o(E):o.makeArray(E))))},is:function(E){return !!E&&o.multiFilter(E,this).length>0},hasClass:function(E){return !!E&&this.is("."+E)},val:function(K){if(K===g){var E=this[0];if(E){if(o.nodeName(E,"option")){return(E.attributes.value||{}).specified?E.value:E.text}if(o.nodeName(E,"select")){var I=E.selectedIndex,L=[],M=E.options,H=E.type=="select-one";if(I<0){return null}for(var F=H?I:0,J=H?I+1:M.length;F<J;F++){var G=M[F];if(G.selected){K=o(G).val();if(H){return K}L.push(K)}}return L}return(E.value||"").replace(/\r/g,"")}return g}if(typeof K==="number"){K+=""}return this.each(function(){if(this.nodeType!=1){return}if(o.isArray(K)&&/radio|checkbox/.test(this.type)){this.checked=(o.inArray(this.value,K)>=0||o.inArray(this.name,K)>=0)}else{if(o.nodeName(this,"select")){var N=o.makeArray(K);o("option",this).each(function(){this.selected=(o.inArray(this.value,N)>=0||o.inArray(this.text,N)>=0)});if(!N.length){this.selectedIndex=-1}}else{this.value=K}}})},html:function(E){return E===g?(this[0]?this[0].innerHTML.replace(/ jQuery\d+="(?:\d+|null)"/g,""):null):this.empty().append(E)},replaceWith:function(E){return this.after(E).remove()},eq:function(E){return this.slice(E,+E+1)},slice:function(){return this.pushStack(Array.prototype.slice.apply(this,arguments),"slice",Array.prototype.slice.call(arguments).join(","))},map:function(E){return this.pushStack(o.map(this,function(G,F){return E.call(G,F,G)}))},andSelf:function(){return this.add(this.prevObject)},domManip:function(J,M,L){if(this[0]){var I=(this[0].ownerDocument||this[0]).createDocumentFragment(),F=o.clean(J,(this[0].ownerDocument||this[0]),I),H=I.firstChild;if(H){for(var G=0,E=this.length;G<E;G++){L.call(K(this[G],H),this.length>1||G>0?I.cloneNode(true):I)}}if(F){o.each(F,z)}}return this;function K(N,O){return M&&o.nodeName(N,"table")&&o.nodeName(O,"tr")?(N.getElementsByTagName("tbody")[0]||N.appendChild(N.ownerDocument.createElement("tbody"))):N}}};o.fn.init.prototype=o.fn;function z(E,F){if(F.src){o.ajax({url:F.src,async:false,dataType:"script"})}else{o.globalEval(F.text||F.textContent||F.innerHTML||"")}if(F.parentNode){F.parentNode.removeChild(F)}}function e(){return +new Date}o.extend=o.fn.extend=function(){var J=arguments[0]||{},H=1,I=arguments.length,E=false,G;if(typeof J==="boolean"){E=J;J=arguments[1]||{};H=2}if(typeof J!=="object"&&!o.isFunction(J)){J={}}if(I==H){J=this;--H}for(;H<I;H++){if((G=arguments[H])!=null){for(var F in G){var K=J[F],L=G[F];if(J===L){continue}if(E&&L&&typeof L==="object"&&!L.nodeType){J[F]=o.extend(E,K||(L.length!=null?[]:{}),L)}else{if(L!==g){J[F]=L}}}}}return J};var b=/z-?index|font-?weight|opacity|zoom|line-?height/i,q=document.defaultView||{},s=Object.prototype.toString;o.extend({noConflict:function(E){l.$=p;if(E){l.jQuery=y}return o},isFunction:function(E){return s.call(E)==="[object Function]"},isArray:function(E){return s.call(E)==="[object Array]"},isXMLDoc:function(E){return E.nodeType===9&&E.documentElement.nodeName!=="HTML"||!!E.ownerDocument&&o.isXMLDoc(E.ownerDocument)},globalEval:function(G){if(G&&/\S/.test(G)){var F=document.getElementsByTagName("head")[0]||document.documentElement,E=document.createElement("script");E.type="text/javascript";if(o.support.scriptEval){E.appendChild(document.createTextNode(G))}else{E.text=G}F.insertBefore(E,F.firstChild);F.removeChild(E)}},nodeName:function(F,E){return F.nodeName&&F.nodeName.toUpperCase()==E.toUpperCase()},each:function(G,K,F){var E,H=0,I=G.length;if(F){if(I===g){for(E in G){if(K.apply(G[E],F)===false){break}}}else{for(;H<I;){if(K.apply(G[H++],F)===false){break}}}}else{if(I===g){for(E in G){if(K.call(G[E],E,G[E])===false){break}}}else{for(var J=G[0];H<I&&K.call(J,H,J)!==false;J=G[++H]){}}}return G},prop:function(H,I,G,F,E){if(o.isFunction(I)){I=I.call(H,F)}return typeof I==="number"&&G=="curCSS"&&!b.test(E)?I+"px":I},className:{add:function(E,F){o.each((F||"").split(/\s+/),function(G,H){if(E.nodeType==1&&!o.className.has(E.className,H)){E.className+=(E.className?" ":"")+H}})},remove:function(E,F){if(E.nodeType==1){E.className=F!==g?o.grep(E.className.split(/\s+/),function(G){return !o.className.has(F,G)}).join(" "):""}},has:function(F,E){return F&&o.inArray(E,(F.className||F).toString().split(/\s+/))>-1}},swap:function(H,G,I){var E={};for(var F in G){E[F]=H.style[F];H.style[F]=G[F]}I.call(H);for(var F in G){H.style[F]=E[F]}},css:function(H,F,J,E){if(F=="width"||F=="height"){var L,G={position:"absolute",visibility:"hidden",display:"block"},K=F=="width"?["Left","Right"]:["Top","Bottom"];function I(){L=F=="width"?H.offsetWidth:H.offsetHeight;if(E==="border"){return}o.each(K,function(){if(!E){L-=parseFloat(o.curCSS(H,"padding"+this,true))||0}if(E==="margin"){L+=parseFloat(o.curCSS(H,"margin"+this,true))||0}else{L-=parseFloat(o.curCSS(H,"border"+this+"Width",true))||0}})}if(H.offsetWidth!==0){I()}else{o.swap(H,G,I)}return Math.max(0,Math.round(L))}return o.curCSS(H,F,J)},curCSS:function(I,F,G){var L,E=I.style;if(F=="opacity"&&!o.support.opacity){L=o.attr(E,"opacity");return L==""?"1":L}if(F.match(/float/i)){F=w}if(!G&&E&&E[F]){L=E[F]}else{if(q.getComputedStyle){if(F.match(/float/i)){F="float"}F=F.replace(/([A-Z])/g,"-$1").toLowerCase();var M=q.getComputedStyle(I,null);if(M){L=M.getPropertyValue(F)}if(F=="opacity"&&L==""){L="1"}}else{if(I.currentStyle){var J=F.replace(/\-(\w)/g,function(N,O){return O.toUpperCase()});L=I.currentStyle[F]||I.currentStyle[J];if(!/^\d+(px)?$/i.test(L)&&/^\d/.test(L)){var H=E.left,K=I.runtimeStyle.left;I.runtimeStyle.left=I.currentStyle.left;E.left=L||0;L=E.pixelLeft+"px";E.left=H;I.runtimeStyle.left=K}}}}return L},clean:function(F,K,I){K=K||document;if(typeof K.createElement==="undefined"){K=K.ownerDocument||K[0]&&K[0].ownerDocument||document}if(!I&&F.length===1&&typeof F[0]==="string"){var H=/^<(\w+)\s*\/?>$/.exec(F[0]);if(H){return[K.createElement(H[1])]}}var G=[],E=[],L=K.createElement("div");o.each(F,function(P,S){if(typeof S==="number"){S+=""}if(!S){return}if(typeof S==="string"){S=S.replace(/(<(\w+)[^>]*?)\/>/g,function(U,V,T){return T.match(/^(abbr|br|col|img|input|link|meta|param|hr|area|embed)$/i)?U:V+"></"+T+">"});var O=S.replace(/^\s+/,"").substring(0,10).toLowerCase();var Q=!O.indexOf("<opt")&&[1,"<select multiple='multiple'>","</select>"]||!O.indexOf("<leg")&&[1,"<fieldset>","</fieldset>"]||O.match(/^<(thead|tbody|tfoot|colg|cap)/)&&[1,"<table>","</table>"]||!O.indexOf("<tr")&&[2,"<table><tbody>","</tbody></table>"]||(!O.indexOf("<td")||!O.indexOf("<th"))&&[3,"<table><tbody><tr>","</tr></tbody></table>"]||!O.indexOf("<col")&&[2,"<table><tbody></tbody><colgroup>","</colgroup></table>"]||!o.support.htmlSerialize&&[1,"div<div>","</div>"]||[0,"",""];L.innerHTML=Q[1]+S+Q[2];while(Q[0]--){L=L.lastChild}if(!o.support.tbody){var R=/<tbody/i.test(S),N=!O.indexOf("<table")&&!R?L.firstChild&&L.firstChild.childNodes:Q[1]=="<table>"&&!R?L.childNodes:[];for(var M=N.length-1;M>=0;--M){if(o.nodeName(N[M],"tbody")&&!N[M].childNodes.length){N[M].parentNode.removeChild(N[M])}}}if(!o.support.leadingWhitespace&&/^\s/.test(S)){L.insertBefore(K.createTextNode(S.match(/^\s*/)[0]),L.firstChild)}S=o.makeArray(L.childNodes)}if(S.nodeType){G.push(S)}else{G=o.merge(G,S)}});if(I){for(var J=0;G[J];J++){if(o.nodeName(G[J],"script")&&(!G[J].type||G[J].type.toLowerCase()==="text/javascript")){E.push(G[J].parentNode?G[J].parentNode.removeChild(G[J]):G[J])}else{if(G[J].nodeType===1){G.splice.apply(G,[J+1,0].concat(o.makeArray(G[J].getElementsByTagName("script"))))}I.appendChild(G[J])}}return E}return G},attr:function(J,G,K){if(!J||J.nodeType==3||J.nodeType==8){return g}var H=!o.isXMLDoc(J),L=K!==g;G=H&&o.props[G]||G;if(J.tagName){var F=/href|src|style/.test(G);if(G=="selected"&&J.parentNode){J.parentNode.selectedIndex}if(G in J&&H&&!F){if(L){if(G=="type"&&o.nodeName(J,"input")&&J.parentNode){throw"type property can't be changed"}J[G]=K}if(o.nodeName(J,"form")&&J.getAttributeNode(G)){return J.getAttributeNode(G).nodeValue}if(G=="tabIndex"){var I=J.getAttributeNode("tabIndex");return I&&I.specified?I.value:J.nodeName.match(/(button|input|object|select|textarea)/i)?0:J.nodeName.match(/^(a|area)$/i)&&J.href?0:g}return J[G]}if(!o.support.style&&H&&G=="style"){return o.attr(J.style,"cssText",K)}if(L){J.setAttribute(G,""+K)}var E=!o.support.hrefNormalized&&H&&F?J.getAttribute(G,2):J.getAttribute(G);return E===null?g:E}if(!o.support.opacity&&G=="opacity"){if(L){J.zoom=1;J.filter=(J.filter||"").replace(/alpha\([^)]*\)/,"")+(parseInt(K)+""=="NaN"?"":"alpha(opacity="+K*100+")")}return J.filter&&J.filter.indexOf("opacity=")>=0?(parseFloat(J.filter.match(/opacity=([^)]*)/)[1])/100)+"":""}G=G.replace(/-([a-z])/ig,function(M,N){return N.toUpperCase()});if(L){J[G]=K}return J[G]},trim:function(E){return(E||"").replace(/^\s+|\s+$/g,"")},makeArray:function(G){var E=[];if(G!=null){var F=G.length;if(F==null||typeof G==="string"||o.isFunction(G)||G.setInterval){E[0]=G}else{while(F){E[--F]=G[F]}}}return E},inArray:function(G,H){for(var E=0,F=H.length;E<F;E++){if(H[E]===G){return E}}return -1},merge:function(H,E){var F=0,G,I=H.length;if(!o.support.getAll){while((G=E[F++])!=null){if(G.nodeType!=8){H[I++]=G}}}else{while((G=E[F++])!=null){H[I++]=G}}return H},unique:function(K){var F=[],E={};try{for(var G=0,H=K.length;G<H;G++){var J=o.data(K[G]);if(!E[J]){E[J]=true;F.push(K[G])}}}catch(I){F=K}return F},grep:function(F,J,E){var G=[];for(var H=0,I=F.length;H<I;H++){if(!E!=!J(F[H],H)){G.push(F[H])}}return G},map:function(E,J){var F=[];for(var G=0,H=E.length;G<H;G++){var I=J(E[G],G);if(I!=null){F[F.length]=I}}return F.concat.apply([],F)}});var C=navigator.userAgent.toLowerCase();o.browser={version:(C.match(/.+(?:rv|it|ra|ie)[\/: ]([\d.]+)/)||[0,"0"])[1],safari:/webkit/.test(C),opera:/opera/.test(C),msie:/msie/.test(C)&&!/opera/.test(C),mozilla:/mozilla/.test(C)&&!/(compatible|webkit)/.test(C)};o.each({parent:function(E){return E.parentNode},parents:function(E){return o.dir(E,"parentNode")},next:function(E){return o.nth(E,2,"nextSibling")},prev:function(E){return o.nth(E,2,"previousSibling")},nextAll:function(E){return o.dir(E,"nextSibling")},prevAll:function(E){return o.dir(E,"previousSibling")},siblings:function(E){return o.sibling(E.parentNode.firstChild,E)},children:function(E){return o.sibling(E.firstChild)},contents:function(E){return o.nodeName(E,"iframe")?E.contentDocument||E.contentWindow.document:o.makeArray(E.childNodes)}},function(E,F){o.fn[E]=function(G){var H=o.map(this,F);if(G&&typeof G=="string"){H=o.multiFilter(G,H)}return this.pushStack(o.unique(H),E,G)}});o.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(E,F){o.fn[E]=function(G){var J=[],L=o(G);for(var K=0,H=L.length;K<H;K++){
-var I=(K>0?this.clone(true):this).get();o.fn[F].apply(o(L[K]),I);J=J.concat(I)}return this.pushStack(J,E,G)}});o.each({removeAttr:function(E){o.attr(this,E,"");if(this.nodeType==1){this.removeAttribute(E)}},addClass:function(E){o.className.add(this,E)},removeClass:function(E){o.className.remove(this,E)},toggleClass:function(F,E){if(typeof E!=="boolean"){E=!o.className.has(this,F)}o.className[E?"add":"remove"](this,F)},remove:function(E){if(!E||o.filter(E,[this]).length){o("*",this).add([this]).each(function(){o.event.remove(this);o.removeData(this)});if(this.parentNode){this.parentNode.removeChild(this)}}},empty:function(){o(this).children().remove();while(this.firstChild){this.removeChild(this.firstChild)}}},function(E,F){o.fn[E]=function(){return this.each(F,arguments)}});function j(E,F){return E[0]&&parseInt(o.curCSS(E[0],F,true),10)||0}var h="jQuery"+e(),v=0,A={};o.extend({cache:{},data:function(F,E,G){F=F==l?A:F;var H=F[h];if(!H){H=F[h]=++v}if(E&&!o.cache[H]){o.cache[H]={}}if(G!==g){o.cache[H][E]=G}return E?o.cache[H][E]:H},removeData:function(F,E){F=F==l?A:F;var H=F[h];if(E){if(o.cache[H]){delete o.cache[H][E];E="";for(E in o.cache[H]){break}if(!E){o.removeData(F)}}}else{try{delete F[h]}catch(G){if(F.removeAttribute){F.removeAttribute(h)}}delete o.cache[H]}},queue:function(F,E,H){if(F){E=(E||"fx")+"queue";var G=o.data(F,E);if(!G||o.isArray(H)){G=o.data(F,E,o.makeArray(H))}else{if(H){G.push(H)}}}return G},dequeue:function(H,G){var E=o.queue(H,G),F=E.shift();if(!G||G==="fx"){F=E[0]}if(F!==g){F.call(H)}}});o.fn.extend({data:function(E,G){var H=E.split(".");H[1]=H[1]?"."+H[1]:"";if(G===g){var F=this.triggerHandler("getData"+H[1]+"!",[H[0]]);if(F===g&&this.length){F=o.data(this[0],E)}return F===g&&H[1]?this.data(H[0]):F}else{return this.trigger("setData"+H[1]+"!",[H[0],G]).each(function(){o.data(this,E,G)})}},removeData:function(E){return this.each(function(){o.removeData(this,E)})},queue:function(E,F){if(typeof E!=="string"){F=E;E="fx"}if(F===g){return o.queue(this[0],E)}return this.each(function(){var G=o.queue(this,E,F);if(E=="fx"&&G.length==1){G[0].call(this)}})},dequeue:function(E){return this.each(function(){o.dequeue(this,E)})}});
diff --git a/trunk/src/jquery_fx.js b/trunk/src/jquery_fx.js
deleted file mode 100644
index f3e326e..0000000
--- a/trunk/src/jquery_fx.js
+++ /dev/null
@@ -1,47 +0,0 @@
-/*
- * jQuery UI Effects 1.8.16
- *
- * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT or GPL Version 2 licenses.
- * http://jquery.org/license
- *
- * http://docs.jquery.com/UI/Effects/
- */
-jQuery.effects||function(f,j){function m(c){var a;if(c&&c.constructor==Array&&c.length==3)return c;if(a=/rgb\(\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*\)/.exec(c))return[parseInt(a[1],10),parseInt(a[2],10),parseInt(a[3],10)];if(a=/rgb\(\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\%\s*\)/.exec(c))return[parseFloat(a[1])*2.55,parseFloat(a[2])*2.55,parseFloat(a[3])*2.55];if(a=/#([a-fA-F0-9]{2})([a-fA-F0-9]{2})([a-fA-F0-9]{2})/.exec(c))return[parseInt(a[1],
-16),parseInt(a[2],16),parseInt(a[3],16)];if(a=/#([a-fA-F0-9])([a-fA-F0-9])([a-fA-F0-9])/.exec(c))return[parseInt(a[1]+a[1],16),parseInt(a[2]+a[2],16),parseInt(a[3]+a[3],16)];if(/rgba\(0, 0, 0, 0\)/.exec(c))return n.transparent;return n[f.trim(c).toLowerCase()]}function s(c,a){var b;do{b=f.curCSS(c,a);if(b!=""&&b!="transparent"||f.nodeName(c,"body"))break;a="backgroundColor"}while(c=c.parentNode);return m(b)}function o(){var c=document.defaultView?document.defaultView.getComputedStyle(this,null):this.currentStyle,
-a={},b,d;if(c&&c.length&&c[0]&&c[c[0]])for(var e=c.length;e--;){b=c[e];if(typeof c[b]=="string"){d=b.replace(/\-(\w)/g,function(g,h){return h.toUpperCase()});a[d]=c[b]}}else for(b in c)if(typeof c[b]==="string")a[b]=c[b];return a}function p(c){var a,b;for(a in c){b=c[a];if(b==null||f.isFunction(b)||a in t||/scrollbar/.test(a)||!/color/i.test(a)&&isNaN(parseFloat(b)))delete c[a]}return c}function u(c,a){var b={_:0},d;for(d in a)if(c[d]!=a[d])b[d]=a[d];return b}function k(c,a,b,d){if(typeof c=="object"){d=
-a;b=null;a=c;c=a.effect}if(f.isFunction(a)){d=a;b=null;a={}}if(typeof a=="number"||f.fx.speeds[a]){d=b;b=a;a={}}if(f.isFunction(b)){d=b;b=null}a=a||{};b=b||a.duration;b=f.fx.off?0:typeof b=="number"?b:b in f.fx.speeds?f.fx.speeds[b]:f.fx.speeds._default;d=d||a.complete;return[c,a,b,d]}function l(c){if(!c||typeof c==="number"||f.fx.speeds[c])return true;if(typeof c==="string"&&!f.effects[c])return true;return false}f.effects={};f.each(["backgroundColor","borderBottomColor","borderLeftColor","borderRightColor",
-"borderTopColor","borderColor","color","outlineColor"],function(c,a){f.fx.step[a]=function(b){if(!b.colorInit){b.start=s(b.elem,a);b.end=m(b.end);b.colorInit=true}b.elem.style[a]="rgb("+Math.max(Math.min(parseInt(b.pos*(b.end[0]-b.start[0])+b.start[0],10),255),0)+","+Math.max(Math.min(parseInt(b.pos*(b.end[1]-b.start[1])+b.start[1],10),255),0)+","+Math.max(Math.min(parseInt(b.pos*(b.end[2]-b.start[2])+b.start[2],10),255),0)+")"}});var n={aqua:[0,255,255],azure:[240,255,255],beige:[245,245,220],black:[0,
-0,0],blue:[0,0,255],brown:[165,42,42],cyan:[0,255,255],darkblue:[0,0,139],darkcyan:[0,139,139],darkgrey:[169,169,169],darkgreen:[0,100,0],darkkhaki:[189,183,107],darkmagenta:[139,0,139],darkolivegreen:[85,107,47],darkorange:[255,140,0],darkorchid:[153,50,204],darkred:[139,0,0],darksalmon:[233,150,122],darkviolet:[148,0,211],fuchsia:[255,0,255],gold:[255,215,0],green:[0,128,0],indigo:[75,0,130],khaki:[240,230,140],lightblue:[173,216,230],lightcyan:[224,255,255],lightgreen:[144,238,144],lightgrey:[211,
-211,211],lightpink:[255,182,193],lightyellow:[255,255,224],lime:[0,255,0],magenta:[255,0,255],maroon:[128,0,0],navy:[0,0,128],olive:[128,128,0],orange:[255,165,0],pink:[255,192,203],purple:[128,0,128],violet:[128,0,128],red:[255,0,0],silver:[192,192,192],white:[255,255,255],yellow:[255,255,0],transparent:[255,255,255]},q=["add","remove","toggle"],t={border:1,borderBottom:1,borderColor:1,borderLeft:1,borderRight:1,borderTop:1,borderWidth:1,margin:1,padding:1};f.effects.animateClass=function(c,a,b,
-d){if(f.isFunction(b)){d=b;b=null}return this.queue(function(){var e=f(this),g=e.attr("style")||" ",h=p(o.call(this)),r,v=e.attr("class");f.each(q,function(w,i){c[i]&&e[i+"Class"](c[i])});r=p(o.call(this));e.attr("class",v);e.animate(u(h,r),{queue:false,duration:a,easing:b,complete:function(){f.each(q,function(w,i){c[i]&&e[i+"Class"](c[i])});if(typeof e.attr("style")=="object"){e.attr("style").cssText="";e.attr("style").cssText=g}else e.attr("style",g);d&&d.apply(this,arguments);f.dequeue(this)}})})};
-f.fn.extend({_addClass:f.fn.addClass,addClass:function(c,a,b,d){return a?f.effects.animateClass.apply(this,[{add:c},a,b,d]):this._addClass(c)},_removeClass:f.fn.removeClass,removeClass:function(c,a,b,d){return a?f.effects.animateClass.apply(this,[{remove:c},a,b,d]):this._removeClass(c)},_toggleClass:f.fn.toggleClass,toggleClass:function(c,a,b,d,e){return typeof a=="boolean"||a===j?b?f.effects.animateClass.apply(this,[a?{add:c}:{remove:c},b,d,e]):this._toggleClass(c,a):f.effects.animateClass.apply(this,
-[{toggle:c},a,b,d])},switchClass:function(c,a,b,d,e){return f.effects.animateClass.apply(this,[{add:a,remove:c},b,d,e])}});f.extend(f.effects,{version:"1.8.16",save:function(c,a){for(var b=0;b<a.length;b++)a[b]!==null&&c.data("ec.storage."+a[b],c[0].style[a[b]])},restore:function(c,a){for(var b=0;b<a.length;b++)a[b]!==null&&c.css(a[b],c.data("ec.storage."+a[b]))},setMode:function(c,a){if(a=="toggle")a=c.is(":hidden")?"show":"hide";return a},getBaseline:function(c,a){var b;switch(c[0]){case "top":b=
-0;break;case "middle":b=0.5;break;case "bottom":b=1;break;default:b=c[0]/a.height}switch(c[1]){case "left":c=0;break;case "center":c=0.5;break;case "right":c=1;break;default:c=c[1]/a.width}return{x:c,y:b}},createWrapper:function(c){if(c.parent().is(".ui-effects-wrapper"))return c.parent();var a={width:c.outerWidth(true),height:c.outerHeight(true),"float":c.css("float")},b=f("<div></div>").addClass("ui-effects-wrapper").css({fontSize:"100%",background:"transparent",border:"none",margin:0,padding:0}),
-d=document.activeElement;c.wrap(b);if(c[0]===d||f.contains(c[0],d))f(d).focus();b=c.parent();if(c.css("position")=="static"){b.css({position:"relative"});c.css({position:"relative"})}else{f.extend(a,{position:c.css("position"),zIndex:c.css("z-index")});f.each(["top","left","bottom","right"],function(e,g){a[g]=c.css(g);if(isNaN(parseInt(a[g],10)))a[g]="auto"});c.css({position:"relative",top:0,left:0,right:"auto",bottom:"auto"})}return b.css(a).show()},removeWrapper:function(c){var a,b=document.activeElement;
-if(c.parent().is(".ui-effects-wrapper")){a=c.parent().replaceWith(c);if(c[0]===b||f.contains(c[0],b))f(b).focus();return a}return c},setTransition:function(c,a,b,d){d=d||{};f.each(a,function(e,g){unit=c.cssUnit(g);if(unit[0]>0)d[g]=unit[0]*b+unit[1]});return d}});f.fn.extend({effect:function(c){var a=k.apply(this,arguments),b={options:a[1],duration:a[2],callback:a[3]};a=b.options.mode;var d=f.effects[c];if(f.fx.off||!d)return a?this[a](b.duration,b.callback):this.each(function(){b.callback&&b.callback.call(this)});
-return d.call(this,b)},_show:f.fn.show,show:function(c){if(l(c))return this._show.apply(this,arguments);else{var a=k.apply(this,arguments);a[1].mode="show";return this.effect.apply(this,a)}},_hide:f.fn.hide,hide:function(c){if(l(c))return this._hide.apply(this,arguments);else{var a=k.apply(this,arguments);a[1].mode="hide";return this.effect.apply(this,a)}},__toggle:f.fn.toggle,toggle:function(c){if(l(c)||typeof c==="boolean"||f.isFunction(c))return this.__toggle.apply(this,arguments);else{var a=k.apply(this,
-arguments);a[1].mode="toggle";return this.effect.apply(this,a)}},cssUnit:function(c){var a=this.css(c),b=[];f.each(["em","px","%","pt"],function(d,e){if(a.indexOf(e)>0)b=[parseFloat(a),e]});return b}});f.easing.jswing=f.easing.swing;f.extend(f.easing,{def:"easeOutQuad",swing:function(c,a,b,d,e){return f.easing[f.easing.def](c,a,b,d,e)},easeInQuad:function(c,a,b,d,e){return d*(a/=e)*a+b},easeOutQuad:function(c,a,b,d,e){return-d*(a/=e)*(a-2)+b},easeInOutQuad:function(c,a,b,d,e){if((a/=e/2)<1)return d/
-2*a*a+b;return-d/2*(--a*(a-2)-1)+b},easeInCubic:function(c,a,b,d,e){return d*(a/=e)*a*a+b},easeOutCubic:function(c,a,b,d,e){return d*((a=a/e-1)*a*a+1)+b},easeInOutCubic:function(c,a,b,d,e){if((a/=e/2)<1)return d/2*a*a*a+b;return d/2*((a-=2)*a*a+2)+b},easeInQuart:function(c,a,b,d,e){return d*(a/=e)*a*a*a+b},easeOutQuart:function(c,a,b,d,e){return-d*((a=a/e-1)*a*a*a-1)+b},easeInOutQuart:function(c,a,b,d,e){if((a/=e/2)<1)return d/2*a*a*a*a+b;return-d/2*((a-=2)*a*a*a-2)+b},easeInQuint:function(c,a,b,
-d,e){return d*(a/=e)*a*a*a*a+b},easeOutQuint:function(c,a,b,d,e){return d*((a=a/e-1)*a*a*a*a+1)+b},easeInOutQuint:function(c,a,b,d,e){if((a/=e/2)<1)return d/2*a*a*a*a*a+b;return d/2*((a-=2)*a*a*a*a+2)+b},easeInSine:function(c,a,b,d,e){return-d*Math.cos(a/e*(Math.PI/2))+d+b},easeOutSine:function(c,a,b,d,e){return d*Math.sin(a/e*(Math.PI/2))+b},easeInOutSine:function(c,a,b,d,e){return-d/2*(Math.cos(Math.PI*a/e)-1)+b},easeInExpo:function(c,a,b,d,e){return a==0?b:d*Math.pow(2,10*(a/e-1))+b},easeOutExpo:function(c,
-a,b,d,e){return a==e?b+d:d*(-Math.pow(2,-10*a/e)+1)+b},easeInOutExpo:function(c,a,b,d,e){if(a==0)return b;if(a==e)return b+d;if((a/=e/2)<1)return d/2*Math.pow(2,10*(a-1))+b;return d/2*(-Math.pow(2,-10*--a)+2)+b},easeInCirc:function(c,a,b,d,e){return-d*(Math.sqrt(1-(a/=e)*a)-1)+b},easeOutCirc:function(c,a,b,d,e){return d*Math.sqrt(1-(a=a/e-1)*a)+b},easeInOutCirc:function(c,a,b,d,e){if((a/=e/2)<1)return-d/2*(Math.sqrt(1-a*a)-1)+b;return d/2*(Math.sqrt(1-(a-=2)*a)+1)+b},easeInElastic:function(c,a,b,
-d,e){c=1.70158;var g=0,h=d;if(a==0)return b;if((a/=e)==1)return b+d;g||(g=e*0.3);if(h<Math.abs(d)){h=d;c=g/4}else c=g/(2*Math.PI)*Math.asin(d/h);return-(h*Math.pow(2,10*(a-=1))*Math.sin((a*e-c)*2*Math.PI/g))+b},easeOutElastic:function(c,a,b,d,e){c=1.70158;var g=0,h=d;if(a==0)return b;if((a/=e)==1)return b+d;g||(g=e*0.3);if(h<Math.abs(d)){h=d;c=g/4}else c=g/(2*Math.PI)*Math.asin(d/h);return h*Math.pow(2,-10*a)*Math.sin((a*e-c)*2*Math.PI/g)+d+b},easeInOutElastic:function(c,a,b,d,e){c=1.70158;var g=
-0,h=d;if(a==0)return b;if((a/=e/2)==2)return b+d;g||(g=e*0.3*1.5);if(h<Math.abs(d)){h=d;c=g/4}else c=g/(2*Math.PI)*Math.asin(d/h);if(a<1)return-0.5*h*Math.pow(2,10*(a-=1))*Math.sin((a*e-c)*2*Math.PI/g)+b;return h*Math.pow(2,-10*(a-=1))*Math.sin((a*e-c)*2*Math.PI/g)*0.5+d+b},easeInBack:function(c,a,b,d,e,g){if(g==j)g=1.70158;return d*(a/=e)*a*((g+1)*a-g)+b},easeOutBack:function(c,a,b,d,e,g){if(g==j)g=1.70158;return d*((a=a/e-1)*a*((g+1)*a+g)+1)+b},easeInOutBack:function(c,a,b,d,e,g){if(g==j)g=1.70158;
-if((a/=e/2)<1)return d/2*a*a*(((g*=1.525)+1)*a-g)+b;return d/2*((a-=2)*a*(((g*=1.525)+1)*a+g)+2)+b},easeInBounce:function(c,a,b,d,e){return d-f.easing.easeOutBounce(c,e-a,0,d,e)+b},easeOutBounce:function(c,a,b,d,e){return(a/=e)<1/2.75?d*7.5625*a*a+b:a<2/2.75?d*(7.5625*(a-=1.5/2.75)*a+0.75)+b:a<2.5/2.75?d*(7.5625*(a-=2.25/2.75)*a+0.9375)+b:d*(7.5625*(a-=2.625/2.75)*a+0.984375)+b},easeInOutBounce:function(c,a,b,d,e){if(a<e/2)return f.easing.easeInBounce(c,a*2,0,d,e)*0.5+b;return f.easing.easeOutBounce(c,
-a*2-e,0,d,e)*0.5+d*0.5+b}})}(jQuery);
-;
-/*
- * jQuery UI Effects Highlight 1.8.16
- *
- * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT or GPL Version 2 licenses.
- * http://jquery.org/license
- *
- * http://docs.jquery.com/UI/Effects/Highlight
- *
- * Depends:
- * jquery.effects.core.js
- */
-(function(b){b.effects.highlight=function(c){return this.queue(function(){var a=b(this),e=["backgroundImage","backgroundColor","opacity"],d=b.effects.setMode(a,c.options.mode||"show"),f={backgroundColor:a.css("backgroundColor")};if(d=="hide")f.opacity=0;b.effects.save(a,e);a.show().css({backgroundImage:"none",backgroundColor:c.options.color||"#ffff99"}).animate(f,{queue:false,duration:c.duration,easing:c.options.easing,complete:function(){d=="hide"&&a.hide();b.effects.restore(a,e);d=="show"&&!b.support.opacity&&
-this.style.removeAttribute("filter");c.callback&&c.callback.apply(this,arguments);a.dequeue()}})})}})(jQuery);
-;
diff --git a/trunk/src/jquery_fx_js.h b/trunk/src/jquery_fx_js.h
deleted file mode 100644
index e9ae22a..0000000
--- a/trunk/src/jquery_fx_js.h
+++ /dev/null
@@ -1,47 +0,0 @@
-"/*\n"
-" * jQuery UI Effects 1.8.16\n"
-" *\n"
-" * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)\n"
-" * Dual licensed under the MIT or GPL Version 2 licenses.\n"
-" * http://jquery.org/license\n"
-" *\n"
-" * http://docs.jquery.com/UI/Effects/\n"
-" */\n"
-"jQuery.effects||function(f,j){function m(c){var a;if(c&&c.constructor==Array&&c.length==3)return c;if(a=/rgb\\(\\s*([0-9]{1,3})\\s*,\\s*([0-9]{1,3})\\s*,\\s*([0-9]{1,3})\\s*\\)/.exec(c))return[parseInt(a[1],10),parseInt(a[2],10),parseInt(a[3],10)];if(a=/rgb\\(\\s*([0-9]+(?:\\.[0-9]+)?)\\%\\s*,\\s*([0-9]+(?:\\.[0-9]+)?)\\%\\s*,\\s*([0-9]+(?:\\.[0-9]+)?)\\%\\s*\\)/.exec(c))return[parseFloat(a[1])*2.55,parseFloat(a[2])*2.55,parseFloat(a[3])*2.55];if(a=/#([a-fA-F0-9]{2})([a-fA-F0-9]{2})([a-fA-F0-9]{2})/.exec(c))return[parseInt(a[1],\n"
-"16),parseInt(a[2],16),parseInt(a[3],16)];if(a=/#([a-fA-F0-9])([a-fA-F0-9])([a-fA-F0-9])/.exec(c))return[parseInt(a[1]+a[1],16),parseInt(a[2]+a[2],16),parseInt(a[3]+a[3],16)];if(/rgba\\(0, 0, 0, 0\\)/.exec(c))return n.transparent;return n[f.trim(c).toLowerCase()]}function s(c,a){var b;do{b=f.curCSS(c,a);if(b!=\"\"&&b!=\"transparent\"||f.nodeName(c,\"body\"))break;a=\"backgroundColor\"}while(c=c.parentNode);return m(b)}function o(){var c=document.defaultView?document.defaultView.getComputedStyle(this,null):this.currentStyle,\n"
-"a={},b,d;if(c&&c.length&&c[0]&&c[c[0]])for(var e=c.length;e--;){b=c[e];if(typeof c[b]==\"string\"){d=b.replace(/\\-(\\w)/g,function(g,h){return h.toUpperCase()});a[d]=c[b]}}else for(b in c)if(typeof c[b]===\"string\")a[b]=c[b];return a}function p(c){var a,b;for(a in c){b=c[a];if(b==null||f.isFunction(b)||a in t||/scrollbar/.test(a)||!/color/i.test(a)&&isNaN(parseFloat(b)))delete c[a]}return c}function u(c,a){var b={_:0},d;for(d in a)if(c[d]!=a[d])b[d]=a[d];return b}function k(c,a,b,d){if(typeof c==\"object\"){d=\n"
-"a;b=null;a=c;c=a.effect}if(f.isFunction(a)){d=a;b=null;a={}}if(typeof a==\"number\"||f.fx.speeds[a]){d=b;b=a;a={}}if(f.isFunction(b)){d=b;b=null}a=a||{};b=b||a.duration;b=f.fx.off?0:typeof b==\"number\"?b:b in f.fx.speeds?f.fx.speeds[b]:f.fx.speeds._default;d=d||a.complete;return[c,a,b,d]}function l(c){if(!c||typeof c===\"number\"||f.fx.speeds[c])return true;if(typeof c===\"string\"&&!f.effects[c])return true;return false}f.effects={};f.each([\"backgroundColor\",\"borderBottomColor\",\"borderLeftColor\",\"borderRightColor\",\n"
-"\"borderTopColor\",\"borderColor\",\"color\",\"outlineColor\"],function(c,a){f.fx.step[a]=function(b){if(!b.colorInit){b.start=s(b.elem,a);b.end=m(b.end);b.colorInit=true}b.elem.style[a]=\"rgb(\"+Math.max(Math.min(parseInt(b.pos*(b.end[0]-b.start[0])+b.start[0],10),255),0)+\",\"+Math.max(Math.min(parseInt(b.pos*(b.end[1]-b.start[1])+b.start[1],10),255),0)+\",\"+Math.max(Math.min(parseInt(b.pos*(b.end[2]-b.start[2])+b.start[2],10),255),0)+\")\"}});var n={aqua:[0,255,255],azure:[240,255,255],beige:[245,245,220],black:[0,\n"
-"0,0],blue:[0,0,255],brown:[165,42,42],cyan:[0,255,255],darkblue:[0,0,139],darkcyan:[0,139,139],darkgrey:[169,169,169],darkgreen:[0,100,0],darkkhaki:[189,183,107],darkmagenta:[139,0,139],darkolivegreen:[85,107,47],darkorange:[255,140,0],darkorchid:[153,50,204],darkred:[139,0,0],darksalmon:[233,150,122],darkviolet:[148,0,211],fuchsia:[255,0,255],gold:[255,215,0],green:[0,128,0],indigo:[75,0,130],khaki:[240,230,140],lightblue:[173,216,230],lightcyan:[224,255,255],lightgreen:[144,238,144],lightgrey:[211,\n"
-"211,211],lightpink:[255,182,193],lightyellow:[255,255,224],lime:[0,255,0],magenta:[255,0,255],maroon:[128,0,0],navy:[0,0,128],olive:[128,128,0],orange:[255,165,0],pink:[255,192,203],purple:[128,0,128],violet:[128,0,128],red:[255,0,0],silver:[192,192,192],white:[255,255,255],yellow:[255,255,0],transparent:[255,255,255]},q=[\"add\",\"remove\",\"toggle\"],t={border:1,borderBottom:1,borderColor:1,borderLeft:1,borderRight:1,borderTop:1,borderWidth:1,margin:1,padding:1};f.effects.animateClass=function(c,a,b,\n"
-"d){if(f.isFunction(b)){d=b;b=null}return this.queue(function(){var e=f(this),g=e.attr(\"style\")||\" \",h=p(o.call(this)),r,v=e.attr(\"class\");f.each(q,function(w,i){c[i]&&e[i+\"Class\"](c[i])});r=p(o.call(this));e.attr(\"class\",v);e.animate(u(h,r),{queue:false,duration:a,easing:b,complete:function(){f.each(q,function(w,i){c[i]&&e[i+\"Class\"](c[i])});if(typeof e.attr(\"style\")==\"object\"){e.attr(\"style\").cssText=\"\";e.attr(\"style\").cssText=g}else e.attr(\"style\",g);d&&d.apply(this,arguments);f.dequeue(this)}})})};\n"
-"f.fn.extend({_addClass:f.fn.addClass,addClass:function(c,a,b,d){return a?f.effects.animateClass.apply(this,[{add:c},a,b,d]):this._addClass(c)},_removeClass:f.fn.removeClass,removeClass:function(c,a,b,d){return a?f.effects.animateClass.apply(this,[{remove:c},a,b,d]):this._removeClass(c)},_toggleClass:f.fn.toggleClass,toggleClass:function(c,a,b,d,e){return typeof a==\"boolean\"||a===j?b?f.effects.animateClass.apply(this,[a?{add:c}:{remove:c},b,d,e]):this._toggleClass(c,a):f.effects.animateClass.apply(this,\n"
-"[{toggle:c},a,b,d])},switchClass:function(c,a,b,d,e){return f.effects.animateClass.apply(this,[{add:a,remove:c},b,d,e])}});f.extend(f.effects,{version:\"1.8.16\",save:function(c,a){for(var b=0;b<a.length;b++)a[b]!==null&&c.data(\"ec.storage.\"+a[b],c[0].style[a[b]])},restore:function(c,a){for(var b=0;b<a.length;b++)a[b]!==null&&c.css(a[b],c.data(\"ec.storage.\"+a[b]))},setMode:function(c,a){if(a==\"toggle\")a=c.is(\":hidden\")?\"show\":\"hide\";return a},getBaseline:function(c,a){var b;switch(c[0]){case \"top\":b=\n"
-"0;break;case \"middle\":b=0.5;break;case \"bottom\":b=1;break;default:b=c[0]/a.height}switch(c[1]){case \"left\":c=0;break;case \"center\":c=0.5;break;case \"right\":c=1;break;default:c=c[1]/a.width}return{x:c,y:b}},createWrapper:function(c){if(c.parent().is(\".ui-effects-wrapper\"))return c.parent();var a={width:c.outerWidth(true),height:c.outerHeight(true),\"float\":c.css(\"float\")},b=f(\"<div></div>\").addClass(\"ui-effects-wrapper\").css({fontSize:\"100%\",background:\"transparent\",border:\"none\",margin:0,padding:0}),\n"
-"d=document.activeElement;c.wrap(b);if(c[0]===d||f.contains(c[0],d))f(d).focus();b=c.parent();if(c.css(\"position\")==\"static\"){b.css({position:\"relative\"});c.css({position:\"relative\"})}else{f.extend(a,{position:c.css(\"position\"),zIndex:c.css(\"z-index\")});f.each([\"top\",\"left\",\"bottom\",\"right\"],function(e,g){a[g]=c.css(g);if(isNaN(parseInt(a[g],10)))a[g]=\"auto\"});c.css({position:\"relative\",top:0,left:0,right:\"auto\",bottom:\"auto\"})}return b.css(a).show()},removeWrapper:function(c){var a,b=document.activeElement;\n"
-"if(c.parent().is(\".ui-effects-wrapper\")){a=c.parent().replaceWith(c);if(c[0]===b||f.contains(c[0],b))f(b).focus();return a}return c},setTransition:function(c,a,b,d){d=d||{};f.each(a,function(e,g){unit=c.cssUnit(g);if(unit[0]>0)d[g]=unit[0]*b+unit[1]});return d}});f.fn.extend({effect:function(c){var a=k.apply(this,arguments),b={options:a[1],duration:a[2],callback:a[3]};a=b.options.mode;var d=f.effects[c];if(f.fx.off||!d)return a?this[a](b.duration,b.callback):this.each(function(){b.callback&&b.callback.call(this)});\n"
-"return d.call(this,b)},_show:f.fn.show,show:function(c){if(l(c))return this._show.apply(this,arguments);else{var a=k.apply(this,arguments);a[1].mode=\"show\";return this.effect.apply(this,a)}},_hide:f.fn.hide,hide:function(c){if(l(c))return this._hide.apply(this,arguments);else{var a=k.apply(this,arguments);a[1].mode=\"hide\";return this.effect.apply(this,a)}},__toggle:f.fn.toggle,toggle:function(c){if(l(c)||typeof c===\"boolean\"||f.isFunction(c))return this.__toggle.apply(this,arguments);else{var a=k.apply(this,\n"
-"arguments);a[1].mode=\"toggle\";return this.effect.apply(this,a)}},cssUnit:function(c){var a=this.css(c),b=[];f.each([\"em\",\"px\",\"%\",\"pt\"],function(d,e){if(a.indexOf(e)>0)b=[parseFloat(a),e]});return b}});f.easing.jswing=f.easing.swing;f.extend(f.easing,{def:\"easeOutQuad\",swing:function(c,a,b,d,e){return f.easing[f.easing.def](c,a,b,d,e)},easeInQuad:function(c,a,b,d,e){return d*(a/=e)*a+b},easeOutQuad:function(c,a,b,d,e){return-d*(a/=e)*(a-2)+b},easeInOutQuad:function(c,a,b,d,e){if((a/=e/2)<1)return d/\n"
-"2*a*a+b;return-d/2*(--a*(a-2)-1)+b},easeInCubic:function(c,a,b,d,e){return d*(a/=e)*a*a+b},easeOutCubic:function(c,a,b,d,e){return d*((a=a/e-1)*a*a+1)+b},easeInOutCubic:function(c,a,b,d,e){if((a/=e/2)<1)return d/2*a*a*a+b;return d/2*((a-=2)*a*a+2)+b},easeInQuart:function(c,a,b,d,e){return d*(a/=e)*a*a*a+b},easeOutQuart:function(c,a,b,d,e){return-d*((a=a/e-1)*a*a*a-1)+b},easeInOutQuart:function(c,a,b,d,e){if((a/=e/2)<1)return d/2*a*a*a*a+b;return-d/2*((a-=2)*a*a*a-2)+b},easeInQuint:function(c,a,b,\n"
-"d,e){return d*(a/=e)*a*a*a*a+b},easeOutQuint:function(c,a,b,d,e){return d*((a=a/e-1)*a*a*a*a+1)+b},easeInOutQuint:function(c,a,b,d,e){if((a/=e/2)<1)return d/2*a*a*a*a*a+b;return d/2*((a-=2)*a*a*a*a+2)+b},easeInSine:function(c,a,b,d,e){return-d*Math.cos(a/e*(Math.PI/2))+d+b},easeOutSine:function(c,a,b,d,e){return d*Math.sin(a/e*(Math.PI/2))+b},easeInOutSine:function(c,a,b,d,e){return-d/2*(Math.cos(Math.PI*a/e)-1)+b},easeInExpo:function(c,a,b,d,e){return a==0?b:d*Math.pow(2,10*(a/e-1))+b},easeOutExpo:function(c,\n"
-"a,b,d,e){return a==e?b+d:d*(-Math.pow(2,-10*a/e)+1)+b},easeInOutExpo:function(c,a,b,d,e){if(a==0)return b;if(a==e)return b+d;if((a/=e/2)<1)return d/2*Math.pow(2,10*(a-1))+b;return d/2*(-Math.pow(2,-10*--a)+2)+b},easeInCirc:function(c,a,b,d,e){return-d*(Math.sqrt(1-(a/=e)*a)-1)+b},easeOutCirc:function(c,a,b,d,e){return d*Math.sqrt(1-(a=a/e-1)*a)+b},easeInOutCirc:function(c,a,b,d,e){if((a/=e/2)<1)return-d/2*(Math.sqrt(1-a*a)-1)+b;return d/2*(Math.sqrt(1-(a-=2)*a)+1)+b},easeInElastic:function(c,a,b,\n"
-"d,e){c=1.70158;var g=0,h=d;if(a==0)return b;if((a/=e)==1)return b+d;g||(g=e*0.3);if(h<Math.abs(d)){h=d;c=g/4}else c=g/(2*Math.PI)*Math.asin(d/h);return-(h*Math.pow(2,10*(a-=1))*Math.sin((a*e-c)*2*Math.PI/g))+b},easeOutElastic:function(c,a,b,d,e){c=1.70158;var g=0,h=d;if(a==0)return b;if((a/=e)==1)return b+d;g||(g=e*0.3);if(h<Math.abs(d)){h=d;c=g/4}else c=g/(2*Math.PI)*Math.asin(d/h);return h*Math.pow(2,-10*a)*Math.sin((a*e-c)*2*Math.PI/g)+d+b},easeInOutElastic:function(c,a,b,d,e){c=1.70158;var g=\n"
-"0,h=d;if(a==0)return b;if((a/=e/2)==2)return b+d;g||(g=e*0.3*1.5);if(h<Math.abs(d)){h=d;c=g/4}else c=g/(2*Math.PI)*Math.asin(d/h);if(a<1)return-0.5*h*Math.pow(2,10*(a-=1))*Math.sin((a*e-c)*2*Math.PI/g)+b;return h*Math.pow(2,-10*(a-=1))*Math.sin((a*e-c)*2*Math.PI/g)*0.5+d+b},easeInBack:function(c,a,b,d,e,g){if(g==j)g=1.70158;return d*(a/=e)*a*((g+1)*a-g)+b},easeOutBack:function(c,a,b,d,e,g){if(g==j)g=1.70158;return d*((a=a/e-1)*a*((g+1)*a+g)+1)+b},easeInOutBack:function(c,a,b,d,e,g){if(g==j)g=1.70158;\n"
-"if((a/=e/2)<1)return d/2*a*a*(((g*=1.525)+1)*a-g)+b;return d/2*((a-=2)*a*(((g*=1.525)+1)*a+g)+2)+b},easeInBounce:function(c,a,b,d,e){return d-f.easing.easeOutBounce(c,e-a,0,d,e)+b},easeOutBounce:function(c,a,b,d,e){return(a/=e)<1/2.75?d*7.5625*a*a+b:a<2/2.75?d*(7.5625*(a-=1.5/2.75)*a+0.75)+b:a<2.5/2.75?d*(7.5625*(a-=2.25/2.75)*a+0.9375)+b:d*(7.5625*(a-=2.625/2.75)*a+0.984375)+b},easeInOutBounce:function(c,a,b,d,e){if(a<e/2)return f.easing.easeInBounce(c,a*2,0,d,e)*0.5+b;return f.easing.easeOutBounce(c,\n"
-"a*2-e,0,d,e)*0.5+d*0.5+b}})}(jQuery);\n"
-";\n"
-"/*\n"
-" * jQuery UI Effects Highlight 1.8.16\n"
-" *\n"
-" * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)\n"
-" * Dual licensed under the MIT or GPL Version 2 licenses.\n"
-" * http://jquery.org/license\n"
-" *\n"
-" * http://docs.jquery.com/UI/Effects/Highlight\n"
-" *\n"
-" * Depends:\n"
-" * jquery.effects.core.js\n"
-" */\n"
-"(function(b){b.effects.highlight=function(c){return this.queue(function(){var a=b(this),e=[\"backgroundImage\",\"backgroundColor\",\"opacity\"],d=b.effects.setMode(a,c.options.mode||\"show\"),f={backgroundColor:a.css(\"backgroundColor\")};if(d==\"hide\")f.opacity=0;b.effects.save(a,e);a.show().css({backgroundImage:\"none\",backgroundColor:c.options.color||\"#ffff99\"}).animate(f,{queue:false,duration:c.duration,easing:c.options.easing,complete:function(){d==\"hide\"&&a.hide();b.effects.restore(a,e);d==\"show\"&&!b.support.opacity&&\n"
-"this.style.removeAttribute(\"filter\");c.callback&&c.callback.apply(this,arguments);a.dequeue()}})})}})(jQuery);\n"
-";\n"
diff --git a/trunk/src/jquery_js.h b/trunk/src/jquery_js.h
deleted file mode 100644
index 220d20e..0000000
--- a/trunk/src/jquery_js.h
+++ /dev/null
@@ -1,13 +0,0 @@
-"/*\n"
-" * jQuery JavaScript Library v1.3.2\n"
-" * http://jquery.com/\n"
-" *\n"
-" * Copyright (c) 2009 John Resig\n"
-" * Dual licensed under the MIT and GPL licenses.\n"
-" * http://docs.jquery.com/License\n"
-" *\n"
-" * Date: 2009-02-19 17:34:21 -0500 (Thu, 19 Feb 2009)\n"
-" * Revision: 6246\n"
-" */\n"
-"(function(){var l=this,g,y=l.jQuery,p=l.$,o=l.jQuery=l.$=function(E,F){return new o.fn.init(E,F)},D=/^[^<]*(<(.|\\s)+>)[^>]*$|^#([\\w-]+)$/,f=/^.[^:#\\[\\.,]*$/;o.fn=o.prototype={init:function(E,H){E=E||document;if(E.nodeType){this[0]=E;this.length=1;this.context=E;return this}if(typeof E===\"string\"){var G=D.exec(E);if(G&&(G[1]||!H)){if(G[1]){E=o.clean([G[1]],H)}else{var I=document.getElementById(G[3]);if(I&&I.id!=G[3]){return o().find(E)}var F=o(I||[]);F.context=document;F.selector=E;return F}}else{return o(H).find(E)}}else{if(o.isFunction(E)){return o(document).ready(E)}}if(E.selector&&E.context){this.selector=E.selector;this.context=E.context}return this.setArray(o.isArray(E)?E:o.makeArray(E))},selector:\"\",jquery:\"1.3.2\",size:function(){return this.length},get:function(E){return E===g?Array.prototype.slice.call(this):this[E]},pushStack:function(F,H,E){var G=o(F);G.prevObject=this;G.context=this.context;if(H===\"find\"){G.selector=this.selector+(this.selector?\" \":\"\")+E}else{if(H){G.selector=this.selector+\".\"+H+\"(\"+E+\")\"}}return G},setArray:function(E){this.length=0;Array.prototype.push.apply(this,E);return this},each:function(F,E){return o.each(this,F,E)},index:function(E){return o.inArray(E&&E.jquery?E[0]:E,this)},attr:function(F,H,G){var E=F;if(typeof F===\"string\"){if(H===g){return this[0]&&o[G||\"attr\"](this[0],F)}else{E={};E[F]=H}}return this.each(function(I){for(F in E){o.attr(G?this.style:this,F,o.prop(this,E[F],G,I,F))}})},css:function(E,F){if((E==\"width\"||E==\"height\")&&parseFloat(F)<0){F=g}return this.attr(E,F,\"curCSS\")},text:function(F){if(typeof F!==\"object\"&&F!=null){return this.empty().append((this[0]&&this[0].ownerDocument||document).createTextNode(F))}var E=\"\";o.each(F||this,function(){o.each(this.childNodes,function(){if(this.nodeType!=8){E+=this.nodeType!=1?this.nodeValue:o.fn.text([this])}})});return E},wrapAll:function(E){if(this[0]){var F=o(E,this[0].ownerDocument).clone();if(this[0].parentNode){F.insertBefore(this[0])}F.map(function(){var G=this;while(G.firstChild){G=G.firstChild}return G}).append(this)}return this},wrapInner:function(E){return this.each(function(){o(this).contents().wrapAll(E)})},wrap:function(E){return this.each(function(){o(this).wrapAll(E)})},append:function(){return this.domManip(arguments,true,function(E){if(this.nodeType==1){this.appendChild(E)}})},prepend:function(){return this.domManip(arguments,true,function(E){if(this.nodeType==1){this.insertBefore(E,this.firstChild)}})},before:function(){return this.domManip(arguments,false,function(E){this.parentNode.insertBefore(E,this)})},after:function(){return this.domManip(arguments,false,function(E){this.parentNode.insertBefore(E,this.nextSibling)})},end:function(){return this.prevObject||o([])},push:[].push,sort:[].sort,splice:[].splice,find:function(E){if(this.length===1){var F=this.pushStack([],\"find\",E);F.length=0;o.find(E,this[0],F);return F}else{return this.pushStack(o.unique(o.map(this,function(G){return o.find(E,G)})),\"find\",E)}},clone:function(G){var E=this.map(function(){if(!o.support.noCloneEvent&&!o.isXMLDoc(this)){var I=this.outerHTML;if(!I){var J=this.ownerDocument.createElement(\"div\");J.appendChild(this.cloneNode(true));I=J.innerHTML}return o.clean([I.replace(/ jQuery\\d+=\"(?:\\d+|null)\"/g,\"\").replace(/^\\s*/,\"\")])[0]}else{return this.cloneNode(true)}});if(G===true){var H=this.find(\"*\").andSelf(),F=0;E.find(\"*\").andSelf().each(function(){if(this.nodeName!==H[F].nodeName){return}var I=o.data(H[F],\"events\");for(var K in I){for(var J in I[K]){o.event.add(this,K,I[K][J],I[K][J].data)}}F++})}return E},filter:function(E){return this.pushStack(o.isFunction(E)&&o.grep(this,function(G,F){return E.call(G,F)})||o.multiFilter(E,o.grep(this,function(F){return F.nodeType===1})),\"filter\",E)},closest:function(E){var G=o.expr.match.POS.test(E)?o(E):null,F=0;return this.map(function(){var H=this;while(H&&H.ownerDocument){if(G?G.index(H)>-1:o(H).is(E)){o.data(H,\"closest\",F);return H}H=H.parentNode;F++}})},not:function(E){if(typeof E===\"string\"){if(f.test(E)){return this.pushStack(o.multiFilter(E,this,true),\"not\",E)}else{E=o.multiFilter(E,this)}}var F=E.length&&E[E.length-1]!==g&&!E.nodeType;return this.filter(function(){return F?o.inArray(this,E)<0:this!=E})},add:function(E){return this.pushStack(o.unique(o.merge(this.get(),typeof E===\"string\"?o(E):o.makeArray(E))))},is:function(E){return !!E&&o.multiFilter(E,this).length>0},hasClass:function(E){return !!E&&this.is(\".\"+E)},val:function(K){if(K===g){var E=this[0];if(E){if(o.nodeName(E,\"option\")){return(E.attributes.value||{}).specified?E.value:E.text}if(o.nodeName(E,\"select\")){var I=E.selectedIndex,L=[],M=E.options,H=E.type==\"select-one\";if(I<0){return null}for(var F=H?I:0,J=H?I+1:M.length;F<J;F++){var G=M[F];if(G.selected){K=o(G).val();if(H){return K}L.push(K)}}return L}return(E.value||\"\").replace(/\\r/g,\"\")}return g}if(typeof K===\"number\"){K+=\"\"}return this.each(function(){if(this.nodeType!=1){return}if(o.isArray(K)&&/radio|checkbox/.test(this.type)){this.checked=(o.inArray(this.value,K)>=0||o.inArray(this.name,K)>=0)}else{if(o.nodeName(this,\"select\")){var N=o.makeArray(K);o(\"option\",this).each(function(){this.selected=(o.inArray(this.value,N)>=0||o.inArray(this.text,N)>=0)});if(!N.length){this.selectedIndex=-1}}else{this.value=K}}})},html:function(E){return E===g?(this[0]?this[0].innerHTML.replace(/ jQuery\\d+=\"(?:\\d+|null)\"/g,\"\"):null):this.empty().append(E)},replaceWith:function(E){return this.after(E).remove()},eq:function(E){return this.slice(E,+E+1)},slice:function(){return this.pushStack(Array.prototype.slice.apply(this,arguments),\"slice\",Array.prototype.slice.call(arguments).join(\",\"))},map:function(E){return this.pushStack(o.map(this,function(G,F){return E.call(G,F,G)}))},andSelf:function(){return this.add(this.prevObject)},domManip:function(J,M,L){if(this[0]){var I=(this[0].ownerDocument||this[0]).createDocumentFragment(),F=o.clean(J,(this[0].ownerDocument||this[0]),I),H=I.firstChild;if(H){for(var G=0,E=this.length;G<E;G++){L.call(K(this[G],H),this.length>1||G>0?I.cloneNode(true):I)}}if(F){o.each(F,z)}}return this;function K(N,O){return M&&o.nodeName(N,\"table\")&&o.nodeName(O,\"tr\")?(N.getElementsByTagName(\"tbody\")[0]||N.appendChild(N.ownerDocument.createElement(\"tbody\"))):N}}};o.fn.init.prototype=o.fn;function z(E,F){if(F.src){o.ajax({url:F.src,async:false,dataType:\"script\"})}else{o.globalEval(F.text||F.textContent||F.innerHTML||\"\")}if(F.parentNode){F.parentNode.removeChild(F)}}function e(){return +new Date}o.extend=o.fn.extend=function(){var J=arguments[0]||{},H=1,I=arguments.length,E=false,G;if(typeof J===\"boolean\"){E=J;J=arguments[1]||{};H=2}if(typeof J!==\"object\"&&!o.isFunction(J)){J={}}if(I==H){J=this;--H}for(;H<I;H++){if((G=arguments[H])!=null){for(var F in G){var K=J[F],L=G[F];if(J===L){continue}if(E&&L&&typeof L===\"object\"&&!L.nodeType){J[F]=o.extend(E,K||(L.length!=null?[]:{}),L)}else{if(L!==g){J[F]=L}}}}}return J};var b=/z-?index|font-?weight|opacity|zoom|line-?height/i,q=document.defaultView||{},s=Object.prototype.toString;o.extend({noConflict:function(E){l.$=p;if(E){l.jQuery=y}return o},isFunction:function(E){return s.call(E)===\"[object Function]\"},isArray:function(E){return s.call(E)===\"[object Array]\"},isXMLDoc:function(E){return E.nodeType===9&&E.documentElement.nodeName!==\"HTML\"||!!E.ownerDocument&&o.isXMLDoc(E.ownerDocument)},globalEval:function(G){if(G&&/\\S/.test(G)){var F=document.getElementsByTagName(\"head\")[0]||document.documentElement,E=document.createElement(\"script\");E.type=\"text/javascript\";if(o.support.scriptEval){E.appendChild(document.createTextNode(G))}else{E.text=G}F.insertBefore(E,F.firstChild);F.removeChild(E)}},nodeName:function(F,E){return F.nodeName&&F.nodeName.toUpperCase()==E.toUpperCase()},each:function(G,K,F){var E,H=0,I=G.length;if(F){if(I===g){for(E in G){if(K.apply(G[E],F)===false){break}}}else{for(;H<I;){if(K.apply(G[H++],F)===false){break}}}}else{if(I===g){for(E in G){if(K.call(G[E],E,G[E])===false){break}}}else{for(var J=G[0];H<I&&K.call(J,H,J)!==false;J=G[++H]){}}}return G},prop:function(H,I,G,F,E){if(o.isFunction(I)){I=I.call(H,F)}return typeof I===\"number\"&&G==\"curCSS\"&&!b.test(E)?I+\"px\":I},className:{add:function(E,F){o.each((F||\"\").split(/\\s+/),function(G,H){if(E.nodeType==1&&!o.className.has(E.className,H)){E.className+=(E.className?\" \":\"\")+H}})},remove:function(E,F){if(E.nodeType==1){E.className=F!==g?o.grep(E.className.split(/\\s+/),function(G){return !o.className.has(F,G)}).join(\" \"):\"\"}},has:function(F,E){return F&&o.inArray(E,(F.className||F).toString().split(/\\s+/))>-1}},swap:function(H,G,I){var E={};for(var F in G){E[F]=H.style[F];H.style[F]=G[F]}I.call(H);for(var F in G){H.style[F]=E[F]}},css:function(H,F,J,E){if(F==\"width\"||F==\"height\"){var L,G={position:\"absolute\",visibility:\"hidden\",display:\"block\"},K=F==\"width\"?[\"Left\",\"Right\"]:[\"Top\",\"Bottom\"];function I(){L=F==\"width\"?H.offsetWidth:H.offsetHeight;if(E===\"border\"){return}o.each(K,function(){if(!E){L-=parseFloat(o.curCSS(H,\"padding\"+this,true))||0}if(E===\"margin\"){L+=parseFloat(o.curCSS(H,\"margin\"+this,true))||0}else{L-=parseFloat(o.curCSS(H,\"border\"+this+\"Width\",true))||0}})}if(H.offsetWidth!==0){I()}else{o.swap(H,G,I)}return Math.max(0,Math.round(L))}return o.curCSS(H,F,J)},curCSS:function(I,F,G){var L,E=I.style;if(F==\"opacity\"&&!o.support.opacity){L=o.attr(E,\"opacity\");return L==\"\"?\"1\":L}if(F.match(/float/i)){F=w}if(!G&&E&&E[F]){L=E[F]}else{if(q.getComputedStyle){if(F.match(/float/i)){F=\"float\"}F=F.replace(/([A-Z])/g,\"-$1\").toLowerCase();var M=q.getComputedStyle(I,null);if(M){L=M.getPropertyValue(F)}if(F==\"opacity\"&&L==\"\"){L=\"1\"}}else{if(I.currentStyle){var J=F.replace(/\\-(\\w)/g,function(N,O){return O.toUpperCase()});L=I.currentStyle[F]||I.currentStyle[J];if(!/^\\d+(px)?$/i.test(L)&&/^\\d/.test(L)){var H=E.left,K=I.runtimeStyle.left;I.runtimeStyle.left=I.currentStyle.left;E.left=L||0;L=E.pixelLeft+\"px\";E.left=H;I.runtimeStyle.left=K}}}}return L},clean:function(F,K,I){K=K||document;if(typeof K.createElement===\"undefined\"){K=K.ownerDocument||K[0]&&K[0].ownerDocument||document}if(!I&&F.length===1&&typeof F[0]===\"string\"){var H=/^<(\\w+)\\s*\\/?>$/.exec(F[0]);if(H){return[K.createElement(H[1])]}}var G=[],E=[],L=K.createElement(\"div\");o.each(F,function(P,S){if(typeof S===\"number\"){S+=\"\"}if(!S){return}if(typeof S===\"string\"){S=S.replace(/(<(\\w+)[^>]*?)\\/>/g,function(U,V,T){return T.match(/^(abbr|br|col|img|input|link|meta|param|hr|area|embed)$/i)?U:V+\"></\"+T+\">\"});var O=S.replace(/^\\s+/,\"\").substring(0,10).toLowerCase();var Q=!O.indexOf(\"<opt\")&&[1,\"<select multiple='multiple'>\",\"</select>\"]||!O.indexOf(\"<leg\")&&[1,\"<fieldset>\",\"</fieldset>\"]||O.match(/^<(thead|tbody|tfoot|colg|cap)/)&&[1,\"<table>\",\"</table>\"]||!O.indexOf(\"<tr\")&&[2,\"<table><tbody>\",\"</tbody></table>\"]||(!O.indexOf(\"<td\")||!O.indexOf(\"<th\"))&&[3,\"<table><tbody><tr>\",\"</tr></tbody></table>\"]||!O.indexOf(\"<col\")&&[2,\"<table><tbody></tbody><colgroup>\",\"</colgroup></table>\"]||!o.support.htmlSerialize&&[1,\"div<div>\",\"</div>\"]||[0,\"\",\"\"];L.innerHTML=Q[1]+S+Q[2];while(Q[0]--){L=L.lastChild}if(!o.support.tbody){var R=/<tbody/i.test(S),N=!O.indexOf(\"<table\")&&!R?L.firstChild&&L.firstChild.childNodes:Q[1]==\"<table>\"&&!R?L.childNodes:[];for(var M=N.length-1;M>=0;--M){if(o.nodeName(N[M],\"tbody\")&&!N[M].childNodes.length){N[M].parentNode.removeChild(N[M])}}}if(!o.support.leadingWhitespace&&/^\\s/.test(S)){L.insertBefore(K.createTextNode(S.match(/^\\s*/)[0]),L.firstChild)}S=o.makeArray(L.childNodes)}if(S.nodeType){G.push(S)}else{G=o.merge(G,S)}});if(I){for(var J=0;G[J];J++){if(o.nodeName(G[J],\"script\")&&(!G[J].type||G[J].type.toLowerCase()===\"text/javascript\")){E.push(G[J].parentNode?G[J].parentNode.removeChild(G[J]):G[J])}else{if(G[J].nodeType===1){G.splice.apply(G,[J+1,0].concat(o.makeArray(G[J].getElementsByTagName(\"script\"))))}I.appendChild(G[J])}}return E}return G},attr:function(J,G,K){if(!J||J.nodeType==3||J.nodeType==8){return g}var H=!o.isXMLDoc(J),L=K!==g;G=H&&o.props[G]||G;if(J.tagName){var F=/href|src|style/.test(G);if(G==\"selected\"&&J.parentNode){J.parentNode.selectedIndex}if(G in J&&H&&!F){if(L){if(G==\"type\"&&o.nodeName(J,\"input\")&&J.parentNode){throw\"type property can't be changed\"}J[G]=K}if(o.nodeName(J,\"form\")&&J.getAttributeNode(G)){return J.getAttributeNode(G).nodeValue}if(G==\"tabIndex\"){var I=J.getAttributeNode(\"tabIndex\");return I&&I.specified?I.value:J.nodeName.match(/(button|input|object|select|textarea)/i)?0:J.nodeName.match(/^(a|area)$/i)&&J.href?0:g}return J[G]}if(!o.support.style&&H&&G==\"style\"){return o.attr(J.style,\"cssText\",K)}if(L){J.setAttribute(G,\"\"+K)}var E=!o.support.hrefNormalized&&H&&F?J.getAttribute(G,2):J.getAttribute(G);return E===null?g:E}if(!o.support.opacity&&G==\"opacity\"){if(L){J.zoom=1;J.filter=(J.filter||\"\").replace(/alpha\\([^)]*\\)/,\"\")+(parseInt(K)+\"\"==\"NaN\"?\"\":\"alpha(opacity=\"+K*100+\")\")}return J.filter&&J.filter.indexOf(\"opacity=\")>=0?(parseFloat(J.filter.match(/opacity=([^)]*)/)[1])/100)+\"\":\"\"}G=G.replace(/-([a-z])/ig,function(M,N){return N.toUpperCase()});if(L){J[G]=K}return J[G]},trim:function(E){return(E||\"\").replace(/^\\s+|\\s+$/g,\"\")},makeArray:function(G){var E=[];if(G!=null){var F=G.length;if(F==null||typeof G===\"string\"||o.isFunction(G)||G.setInterval){E[0]=G}else{while(F){E[--F]=G[F]}}}return E},inArray:function(G,H){for(var E=0,F=H.length;E<F;E++){if(H[E]===G){return E}}return -1},merge:function(H,E){var F=0,G,I=H.length;if(!o.support.getAll){while((G=E[F++])!=null){if(G.nodeType!=8){H[I++]=G}}}else{while((G=E[F++])!=null){H[I++]=G}}return H},unique:function(K){var F=[],E={};try{for(var G=0,H=K.length;G<H;G++){var J=o.data(K[G]);if(!E[J]){E[J]=true;F.push(K[G])}}}catch(I){F=K}return F},grep:function(F,J,E){var G=[];for(var H=0,I=F.length;H<I;H++){if(!E!=!J(F[H],H)){G.push(F[H])}}return G},map:function(E,J){var F=[];for(var G=0,H=E.length;G<H;G++){var I=J(E[G],G);if(I!=null){F[F.length]=I}}return F.concat.apply([],F)}});var C=navigator.userAgent.toLowerCase();o.browser={version:(C.match(/.+(?:rv|it|ra|ie)[\\/: ]([\\d.]+)/)||[0,\"0\"])[1],safari:/webkit/.test(C),opera:/opera/.test(C),msie:/msie/.test(C)&&!/opera/.test(C),mozilla:/mozilla/.test(C)&&!/(compatible|webkit)/.test(C)};o.each({parent:function(E){return E.parentNode},parents:function(E){return o.dir(E,\"parentNode\")},next:function(E){return o.nth(E,2,\"nextSibling\")},prev:function(E){return o.nth(E,2,\"previousSibling\")},nextAll:function(E){return o.dir(E,\"nextSibling\")},prevAll:function(E){return o.dir(E,\"previousSibling\")},siblings:function(E){return o.sibling(E.parentNode.firstChild,E)},children:function(E){return o.sibling(E.firstChild)},contents:function(E){return o.nodeName(E,\"iframe\")?E.contentDocument||E.contentWindow.document:o.makeArray(E.childNodes)}},function(E,F){o.fn[E]=function(G){var H=o.map(this,F);if(G&&typeof G==\"string\"){H=o.multiFilter(G,H)}return this.pushStack(o.unique(H),E,G)}});o.each({appendTo:\"append\",prependTo:\"prepend\",insertBefore:\"before\",insertAfter:\"after\",replaceAll:\"replaceWith\"},function(E,F){o.fn[E]=function(G){var J=[],L=o(G);for(var K=0,H=L.length;K<H;K++){\n"
-"var I=(K>0?this.clone(true):this).get();o.fn[F].apply(o(L[K]),I);J=J.concat(I)}return this.pushStack(J,E,G)}});o.each({removeAttr:function(E){o.attr(this,E,\"\");if(this.nodeType==1){this.removeAttribute(E)}},addClass:function(E){o.className.add(this,E)},removeClass:function(E){o.className.remove(this,E)},toggleClass:function(F,E){if(typeof E!==\"boolean\"){E=!o.className.has(this,F)}o.className[E?\"add\":\"remove\"](this,F)},remove:function(E){if(!E||o.filter(E,[this]).length){o(\"*\",this).add([this]).each(function(){o.event.remove(this);o.removeData(this)});if(this.parentNode){this.parentNode.removeChild(this)}}},empty:function(){o(this).children().remove();while(this.firstChild){this.removeChild(this.firstChild)}}},function(E,F){o.fn[E]=function(){return this.each(F,arguments)}});function j(E,F){return E[0]&&parseInt(o.curCSS(E[0],F,true),10)||0}var h=\"jQuery\"+e(),v=0,A={};o.extend({cache:{},data:function(F,E,G){F=F==l?A:F;var H=F[h];if(!H){H=F[h]=++v}if(E&&!o.cache[H]){o.cache[H]={}}if(G!==g){o.cache[H][E]=G}return E?o.cache[H][E]:H},removeData:function(F,E){F=F==l?A:F;var H=F[h];if(E){if(o.cache[H]){delete o.cache[H][E];E=\"\";for(E in o.cache[H]){break}if(!E){o.removeData(F)}}}else{try{delete F[h]}catch(G){if(F.removeAttribute){F.removeAttribute(h)}}delete o.cache[H]}},queue:function(F,E,H){if(F){E=(E||\"fx\")+\"queue\";var G=o.data(F,E);if(!G||o.isArray(H)){G=o.data(F,E,o.makeArray(H))}else{if(H){G.push(H)}}}return G},dequeue:function(H,G){var E=o.queue(H,G),F=E.shift();if(!G||G===\"fx\"){F=E[0]}if(F!==g){F.call(H)}}});o.fn.extend({data:function(E,G){var H=E.split(\".\");H[1]=H[1]?\".\"+H[1]:\"\";if(G===g){var F=this.triggerHandler(\"getData\"+H[1]+\"!\",[H[0]]);if(F===g&&this.length){F=o.data(this[0],E)}return F===g&&H[1]?this.data(H[0]):F}else{return this.trigger(\"setData\"+H[1]+\"!\",[H[0],G]).each(function(){o.data(this,E,G)})}},removeData:function(E){return this.each(function(){o.removeData(this,E)})},queue:function(E,F){if(typeof E!==\"string\"){F=E;E=\"fx\"}if(F===g){return o.queue(this[0],E)}return this.each(function(){var G=o.queue(this,E,F);if(E==\"fx\"&&G.length==1){G[0].call(this)}})},dequeue:function(E){return this.each(function(){o.dequeue(this,E)})}});\n"
diff --git a/trunk/src/jquery_ui.js b/trunk/src/jquery_ui.js
deleted file mode 100644
index facb8dd..0000000
--- a/trunk/src/jquery_ui.js
+++ /dev/null
@@ -1,32 +0,0 @@
-/*
- * jQuery UI 1.7.2
- *
- * Copyright (c) 2009 AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT (MIT-LICENSE.txt)
- * and GPL (GPL-LICENSE.txt) licenses.
- *
- * http://docs.jquery.com/UI
- */
-jQuery.ui||(function(c){var i=c.fn.remove,d=c.browser.mozilla&&(parseFloat(c.browser.version)<1.9);c.ui={version:"1.7.2",plugin:{add:function(k,l,n){var m=c.ui[k].prototype;for(var j in n){m.plugins[j]=m.plugins[j]||[];m.plugins[j].push([l,n[j]])}},call:function(j,l,k){var n=j.plugins[l];if(!n||!j.element[0].parentNode){return}for(var m=0;m<n.length;m++){if(j.options[n[m][0]]){n[m][1].apply(j.element,k)}}}},contains:function(k,j){return document.compareDocumentPosition?k.compareDocumentPosition(j)&16:k!==j&&k.contains(j)},hasScroll:function(m,k){if(c(m).css("overflow")=="hidden"){return false}var j=(k&&k=="left")?"scrollLeft":"scrollTop",l=false;if(m[j]>0){return true}m[j]=1;l=(m[j]>0);m[j]=0;return l},isOverAxis:function(k,j,l){return(k>j)&&(k<(j+l))},isOver:function(o,k,n,m,j,l){return c.ui.isOverAxis(o,n,j)&&c.ui.isOverAxis(k,m,l)},keyCode:{BACKSPACE:8,CAPS_LOCK:20,COMMA:188,CONTROL:17,DELETE:46,DOWN:40,END:35,ENTER:13,ESCAPE:27,HOME:36,INSERT:45,LEFT:37,NUMPAD_ADD:107,NUMPAD_DECIMAL:110,NUMPAD_DIVIDE:111,NUMPAD_ENTER:108,NUMPAD_MULTIPLY:106,NUMPAD_SUBTRACT:109,PAGE_DOWN:34,PAGE_UP:33,PERIOD:190,RIGHT:39,SHIFT:16,SPACE:32,TAB:9,UP:38}};if(d){var f=c.attr,e=c.fn.removeAttr,h="http://www.w3.org/2005/07/aaa",a=/^aria-/,b=/^wairole:/;c.attr=function(k,j,l){var m=l!==undefined;return(j=="role"?(m?f.call(this,k,j,"wairole:"+l):(f.apply(this,arguments)||"").replace(b,"")):(a.test(j)?(m?k.setAttributeNS(h,j.replace(a,"aaa:"),l):f.call(this,k,j.replace(a,"aaa:"))):f.apply(this,arguments)))};c.fn.removeAttr=function(j){return(a.test(j)?this.each(function(){this.removeAttributeNS(h,j.replace(a,""))}):e.call(this,j))}}c.fn.extend({remove:function(){c("*",this).add(this).each(function(){c(this).triggerHandler("remove")});return i.apply(this,arguments)},enableSelection:function(){return this.attr("unselectable","off").css("MozUserSelect","").unbind("selectstart.ui")},disableSelection:function(){return this.attr("unselectable","on").css("MozUserSelect","none").bind("selectstart.ui",function(){return false})},scrollParent:function(){var j;if((c.browser.msie&&(/(static|relative)/).test(this.css("position")))||(/absolute/).test(this.css("position"))){j=this.parents().filter(function(){return(/(relative|absolute|fixed)/).test(c.curCSS(this,"position",1))&&(/(auto|scroll)/).test(c.curCSS(this,"overflow",1)+c.curCSS(this,"overflow-y",1)+c.curCSS(this,"overflow-x",1))}).eq(0)}else{j=this.parents().filter(function(){return(/(auto|scroll)/).test(c.curCSS(this,"overflow",1)+c.curCSS(this,"overflow-y",1)+c.curCSS(this,"overflow-x",1))}).eq(0)}return(/fixed/).test(this.css("position"))||!j.length?c(document):j}});c.extend(c.expr[":"],{data:function(l,k,j){return !!c.data(l,j[3])},focusable:function(k){var l=k.nodeName.toLowerCase(),j=c.attr(k,"tabindex");return(/input|select|textarea|button|object/.test(l)?!k.disabled:"a"==l||"area"==l?k.href||!isNaN(j):!isNaN(j))&&!c(k)["area"==l?"parents":"closest"](":hidden").length},tabbable:function(k){var j=c.attr(k,"tabindex");return(isNaN(j)||j>=0)&&c(k).is(":focusable")}});function g(m,n,o,l){function k(q){var p=c[m][n][q]||[];return(typeof p=="string"?p.split(/,?\s+/):p)}var j=k("getter");if(l.length==1&&typeof l[0]=="string"){j=j.concat(k("getterSetter"))}return(c.inArray(o,j)!=-1)}c.widget=function(k,j){var l=k.split(".")[0];k=k.split(".")[1];c.fn[k]=function(p){var n=(typeof p=="string"),o=Array.prototype.slice.call(arguments,1);if(n&&p.substring(0,1)=="_"){return this}if(n&&g(l,k,p,o)){var m=c.data(this[0],k);return(m?m[p].apply(m,o):undefined)}return this.each(function(){var q=c.data(this,k);(!q&&!n&&c.data(this,k,new c[l][k](this,p))._init());(q&&n&&c.isFunction(q[p])&&q[p].apply(q,o))})};c[l]=c[l]||{};c[l][k]=function(o,n){var m=this;this.namespace=l;this.widgetName=k;this.widgetEventPrefix=c[l][k].eventPrefix||k;this.widgetBaseClass=l+"-"+k;this.options=c.extend({},c.widget.defaults,c[l][k].defaults,c.metadata&&c.metadata.get(o)[k],n);this.element=c(o).bind("setData."+k,function(q,p,r){if(q.target==o){return m._setData(p,r)}}).bind("getData."+k,function(q,p){if(q.target==o){return m._getData(p)}}).bind("remove",function(){return m.destroy()})};c[l][k].prototype=c.extend({},c.widget.prototype,j);c[l][k].getterSetter="option"};c.widget.prototype={_init:function(){},destroy:function(){this.element.removeData(this.widgetName).removeClass(this.widgetBaseClass+"-disabled "+this.namespace+"-state-disabled").removeAttr("aria-disabled")},option:function(l,m){var k=l,j=this;if(typeof l=="string"){if(m===undefined){return this._getData(l)}k={};k[l]=m}c.each(k,function(n,o){j._setData(n,o)})},_getData:function(j){return this.options[j]},_setData:function(j,k){this.options[j]=k;if(j=="disabled"){this.element[k?"addClass":"removeClass"](this.widgetBaseClass+"-disabled "+this.namespace+"-state-disabled").attr("aria-disabled",k)}},enable:function(){this._setData("disabled",false)},disable:function(){this._setData("disabled",true)},_trigger:function(l,m,n){var p=this.options[l],j=(l==this.widgetEventPrefix?l:this.widgetEventPrefix+l);m=c.Event(m);m.type=j;if(m.originalEvent){for(var k=c.event.props.length,o;k;){o=c.event.props[--k];m[o]=m.originalEvent[o]}}this.element.trigger(m,n);return !(c.isFunction(p)&&p.call(this.element[0],m,n)===false||m.isDefaultPrevented())}};c.widget.defaults={disabled:false};c.ui.mouse={_mouseInit:function(){var j=this;this.element.bind("mousedown."+this.widgetName,function(k){return j._mouseDown(k)}).bind("click."+this.widgetName,function(k){if(j._preventClickEvent){j._preventClickEvent=false;k.stopImmediatePropagation();return false}});if(c.browser.msie){this._mouseUnselectable=this.element.attr("unselectable");this.element.attr("unselectable","on")}this.started=false},_mouseDestroy:function(){this.element.unbind("."+this.widgetName);(c.browser.msie&&this.element.attr("unselectable",this._mouseUnselectable))},_mouseDown:function(l){l.originalEvent=l.originalEvent||{};if(l.originalEvent.mouseHandled){return}(this._mouseStarted&&this._mouseUp(l));this._mouseDownEvent=l;var k=this,m=(l.which==1),j=(typeof this.options.cancel=="string"?c(l.target).parents().add(l.target).filter(this.options.cancel).length:false);if(!m||j||!this._mouseCapture(l)){return true}this.mouseDelayMet=!this.options.delay;if(!this.mouseDelayMet){this._mouseDelayTimer=setTimeout(function(){k.mouseDelayMet=true},this.options.delay)}if(this._mouseDistanceMet(l)&&this._mouseDelayMet(l)){this._mouseStarted=(this._mouseStart(l)!==false);if(!this._mouseStarted){l.preventDefault();return true}}this._mouseMoveDelegate=function(n){return k._mouseMove(n)};this._mouseUpDelegate=function(n){return k._mouseUp(n)};c(document).bind("mousemove."+this.widgetName,this._mouseMoveDelegate).bind("mouseup."+this.widgetName,this._mouseUpDelegate);(c.browser.safari||l.preventDefault());l.originalEvent.mouseHandled=true;return true},_mouseMove:function(j){if(c.browser.msie&&!j.button){return this._mouseUp(j)}if(this._mouseStarted){this._mouseDrag(j);return j.preventDefault()}if(this._mouseDistanceMet(j)&&this._mouseDelayMet(j)){this._mouseStarted=(this._mouseStart(this._mouseDownEvent,j)!==false);(this._mouseStarted?this._mouseDrag(j):this._mouseUp(j))}return !this._mouseStarted},_mouseUp:function(j){c(document).unbind("mousemove."+this.widgetName,this._mouseMoveDelegate).unbind("mouseup."+this.widgetName,this._mouseUpDelegate);if(this._mouseStarted){this._mouseStarted=false;this._preventClickEvent=(j.target==this._mouseDownEvent.target);this._mouseStop(j)}return false},_mouseDistanceMet:function(j){return(Math.max(Math.abs(this._mouseDownEvent.pageX-j.pageX),Math.abs(this._mouseDownEvent.pageY-j.pageY))>=this.options.distance)},_mouseDelayMet:function(j){return this.mouseDelayMet},_mouseStart:function(j){},_mouseDrag:function(j){},_mouseStop:function(j){},_mouseCapture:function(j){return true}};c.ui.mouse.defaults={cancel:null,distance:1,delay:0}})(jQuery);;/* * jQuery UI Resizable 1.7.2
- *
- * Copyright (c) 2009 AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT (MIT-LICENSE.txt)
- * and GPL (GPL-LICENSE.txt) licenses.
- *
- * http://docs.jquery.com/UI/Resizables
- *
- * Depends:
- * ui.core.js
- */
-(function(c){c.widget("ui.resizable",c.extend({},c.ui.mouse,{_init:function(){var e=this,j=this.options;this.element.addClass("ui-resizable");c.extend(this,{_aspectRatio:!!(j.aspectRatio),aspectRatio:j.aspectRatio,originalElement:this.element,_proportionallyResizeElements:[],_helper:j.helper||j.ghost||j.animate?j.helper||"ui-resizable-helper":null});if(this.element[0].nodeName.match(/canvas|textarea|input|select|button|img/i)){if(/relative/.test(this.element.css("position"))&&c.browser.opera){this.element.css({position:"relative",top:"auto",left:"auto"})}this.element.wrap(c('<div class="ui-wrapper" style="overflow: hidden;"></div>').css({position:this.element.css("position"),width:this.element.outerWidth(),height:this.element.outerHeight(),top:this.element.css("top"),left:this.element.css("left")}));this.element=this.element.parent().data("resizable",this.element.data("resizable"));this.elementIsWrapper=true;this.element.css({marginLeft:this.originalElement.css("marginLeft"),marginTop:this.originalElement.css("marginTop"),marginRight:this.originalElement.css("marginRight"),marginBottom:this.originalElement.css("marginBottom")});this.originalElement.css({marginLeft:0,marginTop:0,marginRight:0,marginBottom:0});this.originalResizeStyle=this.originalElement.css("resize");this.originalElement.css("resize","none");this._proportionallyResizeElements.push(this.originalElement.css({position:"static",zoom:1,display:"block"}));this.originalElement.css({margin:this.originalElement.css("margin")});this._proportionallyResize()}this.handles=j.handles||(!c(".ui-resizable-handle",this.element).length?"e,s,se":{n:".ui-resizable-n",e:".ui-resizable-e",s:".ui-resizable-s",w:".ui-resizable-w",se:".ui-resizable-se",sw:".ui-resizable-sw",ne:".ui-resizable-ne",nw:".ui-resizable-nw"});if(this.handles.constructor==String){if(this.handles=="all"){this.handles="n,e,s,w,se,sw,ne,nw"}var k=this.handles.split(",");this.handles={};for(var f=0;f<k.length;f++){var h=c.trim(k[f]),d="ui-resizable-"+h;var g=c('<div class="ui-resizable-handle '+d+'"></div>');if(/sw|se|ne|nw/.test(h)){g.css({zIndex:++j.zIndex})}if("se"==h){g.addClass("ui-icon ui-icon-gripsmall-diagonal-se")}this.handles[h]=".ui-resizable-"+h;this.element.append(g)}}this._renderAxis=function(p){p=p||this.element;for(var m in this.handles){if(this.handles[m].constructor==String){this.handles[m]=c(this.handles[m],this.element).show()}if(this.elementIsWrapper&&this.originalElement[0].nodeName.match(/textarea|input|select|button/i)){var n=c(this.handles[m],this.element),o=0;o=/sw|ne|nw|se|n|s/.test(m)?n.outerHeight():n.outerWidth();var l=["padding",/ne|nw|n/.test(m)?"Top":/se|sw|s/.test(m)?"Bottom":/^e$/.test(m)?"Right":"Left"].join("");p.css(l,o);this._proportionallyResize()}if(!c(this.handles[m]).length){continue}}};this._renderAxis(this.element);this._handles=c(".ui-resizable-handle",this.element).disableSelection();this._handles.mouseover(function(){if(!e.resizing){if(this.className){var i=this.className.match(/ui-resizable-(se|sw|ne|nw|n|e|s|w)/i)}e.axis=i&&i[1]?i[1]:"se"}});if(j.autoHide){this._handles.hide();c(this.element).addClass("ui-resizable-autohide").hover(function(){c(this).removeClass("ui-resizable-autohide");e._handles.show()},function(){if(!e.resizing){c(this).addClass("ui-resizable-autohide");e._handles.hide()}})}this._mouseInit()},destroy:function(){this._mouseDestroy();var d=function(f){c(f).removeClass("ui-resizable ui-resizable-disabled ui-resizable-resizing").removeData("resizable").unbind(".resizable").find(".ui-resizable-handle").remove()};if(this.elementIsWrapper){d(this.element);var e=this.element;e.parent().append(this.originalElement.css({position:e.css("position"),width:e.outerWidth(),height:e.outerHeight(),top:e.css("top"),left:e.css("left")})).end().remove()}this.originalElement.css("resize",this.originalResizeStyle);d(this.originalElement)},_mouseCapture:function(e){var f=false;for(var d in this.handles){if(c(this.handles[d])[0]==e.target){f=true}}return this.options.disabled||!!f},_mouseStart:function(f){var i=this.options,e=this.element.position(),d=this.element;this.resizing=true;this.documentScroll={top:c(document).scrollTop(),left:c(document).scrollLeft()};if(d.is(".ui-draggable")||(/absolute/).test(d.css("position"))){d.css({position:"absolute",top:e.top,left:e.left})}if(c.browser.opera&&(/relative/).test(d.css("position"))){d.css({position:"relative",top:"auto",left:"auto"})}this._renderProxy();var j=b(this.helper.css("left")),g=b(this.helper.css("top"));if(i.containment){j+=c(i.containment).scrollLeft()||0;g+=c(i.containment).scrollTop()||0}this.offset=this.helper.offset();this.position={left:j,top:g};this.size=this._helper?{width:d.outerWidth(),height:d.outerHeight()}:{width:d.width(),height:d.height()};this.originalSize=this._helper?{width:d.outerWidth(),height:d.outerHeight()}:{width:d.width(),height:d.height()};this.originalPosition={left:j,top:g};this.sizeDiff={width:d.outerWidth()-d.width(),height:d.outerHeight()-d.height()};this.originalMousePosition={left:f.pageX,top:f.pageY};this.aspectRatio=(typeof i.aspectRatio=="number")?i.aspectRatio:((this.originalSize.width/this.originalSize.height)||1);var h=c(".ui-resizable-"+this.axis).css("cursor");c("body").css("cursor",h=="auto"?this.axis+"-resize":h);d.addClass("ui-resizable-resizing");this._propagate("start",f);return true},_mouseDrag:function(d){var g=this.helper,f=this.options,l={},p=this,i=this.originalMousePosition,m=this.axis;var q=(d.pageX-i.left)||0,n=(d.pageY-i.top)||0;var h=this._change[m];if(!h){return false}var k=h.apply(this,[d,q,n]),j=c.browser.msie&&c.browser.version<7,e=this.sizeDiff;if(this._aspectRatio||d.shiftKey){k=this._updateRatio(k,d)}k=this._respectSize(k,d);this._propagate("resize",d);g.css({top:this.position.top+"px",left:this.position.left+"px",width:this.size.width+"px",height:this.size.height+"px"});if(!this._helper&&this._proportionallyResizeElements.length){this._proportionallyResize()}this._updateCache(k);this._trigger("resize",d,this.ui());return false},_mouseStop:function(g){this.resizing=false;var h=this.options,l=this;if(this._helper){var f=this._proportionallyResizeElements,d=f.length&&(/textarea/i).test(f[0].nodeName),e=d&&c.ui.hasScroll(f[0],"left")?0:l.sizeDiff.height,j=d?0:l.sizeDiff.width;var m={width:(l.size.width-j),height:(l.size.height-e)},i=(parseInt(l.element.css("left"),10)+(l.position.left-l.originalPosition.left))||null,k=(parseInt(l.element.css("top"),10)+(l.position.top-l.originalPosition.top))||null;if(!h.animate){this.element.css(c.extend(m,{top:k,left:i}))}l.helper.height(l.size.height);l.helper.width(l.size.width);if(this._helper&&!h.animate){this._proportionallyResize()}}c("body").css("cursor","auto");this.element.removeClass("ui-resizable-resizing");this._propagate("stop",g);if(this._helper){this.helper.remove()}return false},_updateCache:function(d){var e=this.options;this.offset=this.helper.offset();if(a(d.left)){this.position.left=d.left}if(a(d.top)){this.position.top=d.top}if(a(d.height)){this.size.height=d.height}if(a(d.width)){this.size.width=d.width}},_updateRatio:function(g,f){var h=this.options,i=this.position,e=this.size,d=this.axis;if(g.height){g.width=(e.height*this.aspectRatio)}else{if(g.width){g.height=(e.width/this.aspectRatio)}}if(d=="sw"){g.left=i.left+(e.width-g.width);g.top=null}if(d=="nw"){g.top=i.top+(e.height-g.height);g.left=i.left+(e.width-g.width)}return g},_respectSize:function(k,f){var i=this.helper,h=this.options,q=this._aspectRatio||f.shiftKey,p=this.axis,s=a(k.width)&&h.maxWidth&&(h.maxWidth<k.width),l=a(k.height)&&h.maxHeight&&(h.maxHeight<k.height),g=a(k.width)&&h.minWidth&&(h.minWidth>k.width),r=a(k.height)&&h.minHeight&&(h.minHeight>k.height);if(g){k.width=h.minWidth}if(r){k.height=h.minHeight}if(s){k.width=h.maxWidth}if(l){k.height=h.maxHeight}var e=this.originalPosition.left+this.originalSize.width,n=this.position.top+this.size.height;var j=/sw|nw|w/.test(p),d=/nw|ne|n/.test(p);if(g&&j){k.left=e-h.minWidth}if(s&&j){k.left=e-h.maxWidth}if(r&&d){k.top=n-h.minHeight}if(l&&d){k.top=n-h.maxHeight}var m=!k.width&&!k.height;if(m&&!k.left&&k.top){k.top=null}else{if(m&&!k.top&&k.left){k.left=null}}return k},_proportionallyResize:function(){var j=this.options;if(!this._proportionallyResizeElements.length){return}var f=this.helper||this.element;for(var e=0;e<this._proportionallyResizeElements.length;e++){var g=this._proportionallyResizeElements[e];if(!this.borderDif){var d=[g.css("borderTopWidth"),g.css("borderRightWidth"),g.css("borderBottomWidth"),g.css("borderLeftWidth")],h=[g.css("paddingTop"),g.css("paddingRight"),g.css("paddingBottom"),g.css("paddingLeft")];this.borderDif=c.map(d,function(k,m){var l=parseInt(k,10)||0,n=parseInt(h[m],10)||0;return l+n})}if(c.browser.msie&&!(!(c(f).is(":hidden")||c(f).parents(":hidden").length))){continue}g.css({height:(f.height()-this.borderDif[0]-this.borderDif[2])||0,width:(f.width()-this.borderDif[1]-this.borderDif[3])||0})}},_renderProxy:function(){var e=this.element,h=this.options;this.elementOffset=e.offset();if(this._helper){this.helper=this.helper||c('<div style="overflow:hidden;"></div>');var d=c.browser.msie&&c.browser.version<7,f=(d?1:0),g=(d?2:-1);this.helper.addClass(this._helper).css({width:this.element.outerWidth()+g,height:this.element.outerHeight()+g,position:"absolute",left:this.elementOffset.left-f+"px",top:this.elementOffset.top-f+"px",zIndex:++h.zIndex});this.helper.appendTo("body").disableSelection()}else{this.helper=this.element}},_change:{e:function(f,e,d){return{width:this.originalSize.width+e}},w:function(g,e,d){var i=this.options,f=this.originalSize,h=this.originalPosition;return{left:h.left+e,width:f.width-e}},n:function(g,e,d){var i=this.options,f=this.originalSize,h=this.originalPosition;return{top:h.top+d,height:f.height-d}},s:function(f,e,d){return{height:this.originalSize.height+d}},se:function(f,e,d){return c.extend(this._change.s.apply(this,arguments),this._change.e.apply(this,[f,e,d]))},sw:function(f,e,d){return c.extend(this._change.s.apply(this,arguments),this._change.w.apply(this,[f,e,d]))},ne:function(f,e,d){return c.extend(this._change.n.apply(this,arguments),this._change.e.apply(this,[f,e,d]))},nw:function(f,e,d){return c.extend(this._change.n.apply(this,arguments),this._change.w.apply(this,[f,e,d]))}},_propagate:function(e,d){c.ui.plugin.call(this,e,[d,this.ui()]);(e!="resize"&&this._trigger(e,d,this.ui()))},plugins:{},ui:function(){return{originalElement:this.originalElement,element:this.element,helper:this.helper,position:this.position,size:this.size,originalSize:this.originalSize,originalPosition:this.originalPosition}}}));c.extend(c.ui.resizable,{version:"1.7.2",eventPrefix:"resize",defaults:{alsoResize:false,animate:false,animateDuration:"slow",animateEasing:"swing",aspectRatio:false,autoHide:false,cancel:":input,option",containment:false,delay:0,distance:1,ghost:false,grid:false,handles:"e,s,se",helper:false,maxHeight:null,maxWidth:null,minHeight:10,minWidth:10,zIndex:1000}});c.ui.plugin.add("resizable","alsoResize",{start:function(e,f){var d=c(this).data("resizable"),g=d.options;_store=function(h){c(h).each(function(){c(this).data("resizable-alsoresize",{width:parseInt(c(this).width(),10),height:parseInt(c(this).height(),10),left:parseInt(c(this).css("left"),10),top:parseInt(c(this).css("top"),10)})})};if(typeof(g.alsoResize)=="object"&&!g.alsoResize.parentNode){if(g.alsoResize.length){g.alsoResize=g.alsoResize[0];_store(g.alsoResize)}else{c.each(g.alsoResize,function(h,i){_store(h)})}}else{_store(g.alsoResize)}},resize:function(f,h){var e=c(this).data("resizable"),i=e.options,g=e.originalSize,k=e.originalPosition;var j={height:(e.size.height-g.height)||0,width:(e.size.width-g.width)||0,top:(e.position.top-k.top)||0,left:(e.position.left-k.left)||0},d=function(l,m){c(l).each(function(){var p=c(this),q=c(this).data("resizable-alsoresize"),o={},n=m&&m.length?m:["width","height","top","left"];c.each(n||["width","height","top","left"],function(r,t){var s=(q[t]||0)+(j[t]||0);if(s&&s>=0){o[t]=s||null}});if(/relative/.test(p.css("position"))&&c.browser.opera){e._revertToRelativePosition=true;p.css({position:"absolute",top:"auto",left:"auto"})}p.css(o)})};if(typeof(i.alsoResize)=="object"&&!i.alsoResize.nodeType){c.each(i.alsoResize,function(l,m){d(l,m)})}else{d(i.alsoResize)}},stop:function(e,f){var d=c(this).data("resizable");if(d._revertToRelativePosition&&c.browser.opera){d._revertToRelativePosition=false;el.css({position:"relative"})}c(this).removeData("resizable-alsoresize-start")}});c.ui.plugin.add("resizable","animate",{stop:function(h,m){var n=c(this).data("resizable"),i=n.options;var g=n._proportionallyResizeElements,d=g.length&&(/textarea/i).test(g[0].nodeName),e=d&&c.ui.hasScroll(g[0],"left")?0:n.sizeDiff.height,k=d?0:n.sizeDiff.width;var f={width:(n.size.width-k),height:(n.size.height-e)},j=(parseInt(n.element.css("left"),10)+(n.position.left-n.originalPosition.left))||null,l=(parseInt(n.element.css("top"),10)+(n.position.top-n.originalPosition.top))||null;n.element.animate(c.extend(f,l&&j?{top:l,left:j}:{}),{duration:i.animateDuration,easing:i.animateEasing,step:function(){var o={width:parseInt(n.element.css("width"),10),height:parseInt(n.element.css("height"),10),top:parseInt(n.element.css("top"),10),left:parseInt(n.element.css("left"),10)};if(g&&g.length){c(g[0]).css({width:o.width,height:o.height})}n._updateCache(o);n._propagate("resize",h)}})}});c.ui.plugin.add("resizable","containment",{start:function(e,q){var s=c(this).data("resizable"),i=s.options,k=s.element;var f=i.containment,j=(f instanceof c)?f.get(0):(/parent/.test(f))?k.parent().get(0):f;if(!j){return}s.containerElement=c(j);if(/document/.test(f)||f==document){s.containerOffset={left:0,top:0};s.containerPosition={left:0,top:0};s.parentData={element:c(document),left:0,top:0,width:c(document).width(),height:c(document).height()||document.body.parentNode.scrollHeight}}else{var m=c(j),h=[];c(["Top","Right","Left","Bottom"]).each(function(p,o){h[p]=b(m.css("padding"+o))});s.containerOffset=m.offset();s.containerPosition=m.position();s.containerSize={height:(m.innerHeight()-h[3]),width:(m.innerWidth()-h[1])};var n=s.containerOffset,d=s.containerSize.height,l=s.containerSize.width,g=(c.ui.hasScroll(j,"left")?j.scrollWidth:l),r=(c.ui.hasScroll(j)?j.scrollHeight:d);s.parentData={element:j,left:n.left,top:n.top,width:g,height:r}}},resize:function(f,p){var s=c(this).data("resizable"),h=s.options,e=s.containerSize,n=s.containerOffset,l=s.size,m=s.position,q=s._aspectRatio||f.shiftKey,d={top:0,left:0},g=s.containerElement;if(g[0]!=document&&(/static/).test(g.css("position"))){d=n}if(m.left<(s._helper?n.left:0)){s.size.width=s.size.width+(s._helper?(s.position.left-n.left):(s.position.left-d.left));if(q){s.size.height=s.size.width/h.aspectRatio}s.position.left=h.helper?n.left:0}if(m.top<(s._helper?n.top:0))
-{s.size.height=s.size.height+(s._helper?(s.position.top-n.top):s.position.top);if(q){s.size.width=s.size.height*h.aspectRatio}s.position.top=s._helper?n.top:0}s.offset.left=s.parentData.left+s.position.left;s.offset.top=s.parentData.top+s.position.top;var k=Math.abs((s._helper?s.offset.left-d.left:(s.offset.left-d.left))+s.sizeDiff.width),r=Math.abs((s._helper?s.offset.top-d.top:(s.offset.top-n.top))+s.sizeDiff.height);var j=s.containerElement.get(0)==s.element.parent().get(0),i=/relative|absolute/.test(s.containerElement.css("position"));if(j&&i){k-=s.parentData.left}if(k+s.size.width>=s.parentData.width){s.size.width=s.parentData.width-k;if(q){s.size.height=s.size.width/s.aspectRatio}}if(r+s.size.height>=s.parentData.height){s.size.height=s.parentData.height-r;if(q){s.size.width=s.size.height*s.aspectRatio}}},stop:function(e,m){var p=c(this).data("resizable"),f=p.options,k=p.position,l=p.containerOffset,d=p.containerPosition,g=p.containerElement;var i=c(p.helper),q=i.offset(),n=i.outerWidth()-p.sizeDiff.width,j=i.outerHeight()-p.sizeDiff.height;if(p._helper&&!f.animate&&(/relative/).test(g.css("position"))){c(this).css({left:q.left-d.left-l.left,width:n,height:j})}if(p._helper&&!f.animate&&(/static/).test(g.css("position"))){c(this).css({left:q.left-d.left-l.left,width:n,height:j})}}});c.ui.plugin.add("resizable","ghost",{start:function(f,g){var d=c(this).data("resizable"),h=d.options,e=d.size;d.ghost=d.originalElement.clone();d.ghost.css({opacity:0.25,display:"block",position:"relative",height:e.height,width:e.width,margin:0,left:0,top:0}).addClass("ui-resizable-ghost").addClass(typeof h.ghost=="string"?h.ghost:"");d.ghost.appendTo(d.helper)},resize:function(e,f){var d=c(this).data("resizable"),g=d.options;if(d.ghost){d.ghost.css({position:"relative",height:d.size.height,width:d.size.width})}},stop:function(e,f){var d=c(this).data("resizable"),g=d.options;if(d.ghost&&d.helper){d.helper.get(0).removeChild(d.ghost.get(0))}}});c.ui.plugin.add("resizable","grid",{resize:function(d,l){var n=c(this).data("resizable"),g=n.options,j=n.size,h=n.originalSize,i=n.originalPosition,m=n.axis,k=g._aspectRatio||d.shiftKey;g.grid=typeof g.grid=="number"?[g.grid,g.grid]:g.grid;var f=Math.round((j.width-h.width)/(g.grid[0]||1))*(g.grid[0]||1),e=Math.round((j.height-h.height)/(g.grid[1]||1))*(g.grid[1]||1);if(/^(se|s|e)$/.test(m)){n.size.width=h.width+f;n.size.height=h.height+e}else{if(/^(ne)$/.test(m)){n.size.width=h.width+f;n.size.height=h.height+e;n.position.top=i.top-e}else{if(/^(sw)$/.test(m)){n.size.width=h.width+f;n.size.height=h.height+e;n.position.left=i.left-f}else{n.size.width=h.width+f;n.size.height=h.height+e;n.position.top=i.top-e;n.position.left=i.left-f}}}}});var b=function(d){return parseInt(d,10)||0};var a=function(d){return !isNaN(parseInt(d,10))}})(jQuery);;
-/**
- * jQuery.ScrollTo - Easy element scrolling using jQuery.
- * Copyright (c) 2008 Ariel Flesler - aflesler(at)gmail(dot)com
- * Licensed under GPL license (http://www.opensource.org/licenses/gpl-license.php).
- * Date: 2/8/2008
- * @author Ariel Flesler
- * @version 1.3.2
- */
-;(function($){var o=$.scrollTo=function(a,b,c){o.window().scrollTo(a,b,c)};o.defaults={axis:'y',duration:1};o.window=function(){return $($.browser.safari?'body':'html')};$.fn.scrollTo=function(l,m,n){if(typeof m=='object'){n=m;m=0}n=$.extend({},o.defaults,n);m=m||n.speed||n.duration;n.queue=n.queue&&n.axis.length>1;if(n.queue)m/=2;n.offset=j(n.offset);n.over=j(n.over);return this.each(function(){var a=this,b=$(a),t=l,c,d={},w=b.is('html,body');switch(typeof t){case'number':case'string':if(/^([+-]=)?\d+(px)?$/.test(t)){t=j(t);break}t=$(t,this);case'object':if(t.is||t.style)c=(t=$(t)).offset()}$.each(n.axis.split(''),function(i,f){var P=f=='x'?'Left':'Top',p=P.toLowerCase(),k='scroll'+P,e=a[k],D=f=='x'?'Width':'Height';if(c){d[k]=c[p]+(w?0:e-b.offset()[p]);if(n.margin){d[k]-=parseInt(t.css('margin'+P))||0;d[k]-=parseInt(t.css('border'+P+'Width'))||0}d[k]+=n.offset[p]||0;if(n.over[p])d[k]+=t[D.toLowerCase()]()*n.over[p]}else d[k]=t[p];if(/^\d+$/.test(d[k]))d[k]=d[k]<=0?0:Math.min(d[k],h(D));if(!i&&n.queue){if(e!=d[k])g(n.onAfterFirst);delete d[k]}});g(n.onAfter);function g(a){b.animate(d,m,n.easing,a&&function(){a.call(this,l)})};function h(D){var b=w?$.browser.opera?document.body:document.documentElement:a;return b['scroll'+D]-b['client'+D]}})};function j(a){return typeof a=='object'?a:{top:a,left:a}}})(jQuery);
-
diff --git a/trunk/src/jquery_ui_js.h b/trunk/src/jquery_ui_js.h
deleted file mode 100644
index 3b90c22..0000000
--- a/trunk/src/jquery_ui_js.h
+++ /dev/null
@@ -1,32 +0,0 @@
-"/*\n"
-" * jQuery UI 1.7.2\n"
-" *\n"
-" * Copyright (c) 2009 AUTHORS.txt (http://jqueryui.com/about)\n"
-" * Dual licensed under the MIT (MIT-LICENSE.txt)\n"
-" * and GPL (GPL-LICENSE.txt) licenses.\n"
-" *\n"
-" * http://docs.jquery.com/UI\n"
-" */\n"
-"jQuery.ui||(function(c){var i=c.fn.remove,d=c.browser.mozilla&&(parseFloat(c.browser.version)<1.9);c.ui={version:\"1.7.2\",plugin:{add:function(k,l,n){var m=c.ui[k].prototype;for(var j in n){m.plugins[j]=m.plugins[j]||[];m.plugins[j].push([l,n[j]])}},call:function(j,l,k){var n=j.plugins[l];if(!n||!j.element[0].parentNode){return}for(var m=0;m<n.length;m++){if(j.options[n[m][0]]){n[m][1].apply(j.element,k)}}}},contains:function(k,j){return document.compareDocumentPosition?k.compareDocumentPosition(j)&16:k!==j&&k.contains(j)},hasScroll:function(m,k){if(c(m).css(\"overflow\")==\"hidden\"){return false}var j=(k&&k==\"left\")?\"scrollLeft\":\"scrollTop\",l=false;if(m[j]>0){return true}m[j]=1;l=(m[j]>0);m[j]=0;return l},isOverAxis:function(k,j,l){return(k>j)&&(k<(j+l))},isOver:function(o,k,n,m,j,l){return c.ui.isOverAxis(o,n,j)&&c.ui.isOverAxis(k,m,l)},keyCode:{BACKSPACE:8,CAPS_LOCK:20,COMMA:188,CONTROL:17,DELETE:46,DOWN:40,END:35,ENTER:13,ESCAPE:27,HOME:36,INSERT:45,LEFT:37,NUMPAD_ADD:107,NUMPAD_DECIMAL:110,NUMPAD_DIVIDE:111,NUMPAD_ENTER:108,NUMPAD_MULTIPLY:106,NUMPAD_SUBTRACT:109,PAGE_DOWN:34,PAGE_UP:33,PERIOD:190,RIGHT:39,SHIFT:16,SPACE:32,TAB:9,UP:38}};if(d){var f=c.attr,e=c.fn.removeAttr,h=\"http://www.w3.org/2005/07/aaa\",a=/^aria-/,b=/^wairole:/;c.attr=function(k,j,l){var m=l!==undefined;return(j==\"role\"?(m?f.call(this,k,j,\"wairole:\"+l):(f.apply(this,arguments)||\"\").replace(b,\"\")):(a.test(j)?(m?k.setAttributeNS(h,j.replace(a,\"aaa:\"),l):f.call(this,k,j.replace(a,\"aaa:\"))):f.apply(this,arguments)))};c.fn.removeAttr=function(j){return(a.test(j)?this.each(function(){this.removeAttributeNS(h,j.replace(a,\"\"))}):e.call(this,j))}}c.fn.extend({remove:function(){c(\"*\",this).add(this).each(function(){c(this).triggerHandler(\"remove\")});return i.apply(this,arguments)},enableSelection:function(){return this.attr(\"unselectable\",\"off\").css(\"MozUserSelect\",\"\").unbind(\"selectstart.ui\")},disableSelection:function(){return this.attr(\"unselectable\",\"on\").css(\"MozUserSelect\",\"none\").bind(\"selectstart.ui\",function(){return false})},scrollParent:function(){var j;if((c.browser.msie&&(/(static|relative)/).test(this.css(\"position\")))||(/absolute/).test(this.css(\"position\"))){j=this.parents().filter(function(){return(/(relative|absolute|fixed)/).test(c.curCSS(this,\"position\",1))&&(/(auto|scroll)/).test(c.curCSS(this,\"overflow\",1)+c.curCSS(this,\"overflow-y\",1)+c.curCSS(this,\"overflow-x\",1))}).eq(0)}else{j=this.parents().filter(function(){return(/(auto|scroll)/).test(c.curCSS(this,\"overflow\",1)+c.curCSS(this,\"overflow-y\",1)+c.curCSS(this,\"overflow-x\",1))}).eq(0)}return(/fixed/).test(this.css(\"position\"))||!j.length?c(document):j}});c.extend(c.expr[\":\"],{data:function(l,k,j){return !!c.data(l,j[3])},focusable:function(k){var l=k.nodeName.toLowerCase(),j=c.attr(k,\"tabindex\");return(/input|select|textarea|button|object/.test(l)?!k.disabled:\"a\"==l||\"area\"==l?k.href||!isNaN(j):!isNaN(j))&&!c(k)[\"area\"==l?\"parents\":\"closest\"](\":hidden\").length},tabbable:function(k){var j=c.attr(k,\"tabindex\");return(isNaN(j)||j>=0)&&c(k).is(\":focusable\")}});function g(m,n,o,l){function k(q){var p=c[m][n][q]||[];return(typeof p==\"string\"?p.split(/,?\\s+/):p)}var j=k(\"getter\");if(l.length==1&&typeof l[0]==\"string\"){j=j.concat(k(\"getterSetter\"))}return(c.inArray(o,j)!=-1)}c.widget=function(k,j){var l=k.split(\".\")[0];k=k.split(\".\")[1];c.fn[k]=function(p){var n=(typeof p==\"string\"),o=Array.prototype.slice.call(arguments,1);if(n&&p.substring(0,1)==\"_\"){return this}if(n&&g(l,k,p,o)){var m=c.data(this[0],k);return(m?m[p].apply(m,o):undefined)}return this.each(function(){var q=c.data(this,k);(!q&&!n&&c.data(this,k,new c[l][k](this,p))._init());(q&&n&&c.isFunction(q[p])&&q[p].apply(q,o))})};c[l]=c[l]||{};c[l][k]=function(o,n){var m=this;this.namespace=l;this.widgetName=k;this.widgetEventPrefix=c[l][k].eventPrefix||k;this.widgetBaseClass=l+\"-\"+k;this.options=c.extend({},c.widget.defaults,c[l][k].defaults,c.metadata&&c.metadata.get(o)[k],n);this.element=c(o).bind(\"setData.\"+k,function(q,p,r){if(q.target==o){return m._setData(p,r)}}).bind(\"getData.\"+k,function(q,p){if(q.target==o){return m._getData(p)}}).bind(\"remove\",function(){return m.destroy()})};c[l][k].prototype=c.extend({},c.widget.prototype,j);c[l][k].getterSetter=\"option\"};c.widget.prototype={_init:function(){},destroy:function(){this.element.removeData(this.widgetName).removeClass(this.widgetBaseClass+\"-disabled \"+this.namespace+\"-state-disabled\").removeAttr(\"aria-disabled\")},option:function(l,m){var k=l,j=this;if(typeof l==\"string\"){if(m===undefined){return this._getData(l)}k={};k[l]=m}c.each(k,function(n,o){j._setData(n,o)})},_getData:function(j){return this.options[j]},_setData:function(j,k){this.options[j]=k;if(j==\"disabled\"){this.element[k?\"addClass\":\"removeClass\"](this.widgetBaseClass+\"-disabled \"+this.namespace+\"-state-disabled\").attr(\"aria-disabled\",k)}},enable:function(){this._setData(\"disabled\",false)},disable:function(){this._setData(\"disabled\",true)},_trigger:function(l,m,n){var p=this.options[l],j=(l==this.widgetEventPrefix?l:this.widgetEventPrefix+l);m=c.Event(m);m.type=j;if(m.originalEvent){for(var k=c.event.props.length,o;k;){o=c.event.props[--k];m[o]=m.originalEvent[o]}}this.element.trigger(m,n);return !(c.isFunction(p)&&p.call(this.element[0],m,n)===false||m.isDefaultPrevented())}};c.widget.defaults={disabled:false};c.ui.mouse={_mouseInit:function(){var j=this;this.element.bind(\"mousedown.\"+this.widgetName,function(k){return j._mouseDown(k)}).bind(\"click.\"+this.widgetName,function(k){if(j._preventClickEvent){j._preventClickEvent=false;k.stopImmediatePropagation();return false}});if(c.browser.msie){this._mouseUnselectable=this.element.attr(\"unselectable\");this.element.attr(\"unselectable\",\"on\")}this.started=false},_mouseDestroy:function(){this.element.unbind(\".\"+this.widgetName);(c.browser.msie&&this.element.attr(\"unselectable\",this._mouseUnselectable))},_mouseDown:function(l){l.originalEvent=l.originalEvent||{};if(l.originalEvent.mouseHandled){return}(this._mouseStarted&&this._mouseUp(l));this._mouseDownEvent=l;var k=this,m=(l.which==1),j=(typeof this.options.cancel==\"string\"?c(l.target).parents().add(l.target).filter(this.options.cancel).length:false);if(!m||j||!this._mouseCapture(l)){return true}this.mouseDelayMet=!this.options.delay;if(!this.mouseDelayMet){this._mouseDelayTimer=setTimeout(function(){k.mouseDelayMet=true},this.options.delay)}if(this._mouseDistanceMet(l)&&this._mouseDelayMet(l)){this._mouseStarted=(this._mouseStart(l)!==false);if(!this._mouseStarted){l.preventDefault();return true}}this._mouseMoveDelegate=function(n){return k._mouseMove(n)};this._mouseUpDelegate=function(n){return k._mouseUp(n)};c(document).bind(\"mousemove.\"+this.widgetName,this._mouseMoveDelegate).bind(\"mouseup.\"+this.widgetName,this._mouseUpDelegate);(c.browser.safari||l.preventDefault());l.originalEvent.mouseHandled=true;return true},_mouseMove:function(j){if(c.browser.msie&&!j.button){return this._mouseUp(j)}if(this._mouseStarted){this._mouseDrag(j);return j.preventDefault()}if(this._mouseDistanceMet(j)&&this._mouseDelayMet(j)){this._mouseStarted=(this._mouseStart(this._mouseDownEvent,j)!==false);(this._mouseStarted?this._mouseDrag(j):this._mouseUp(j))}return !this._mouseStarted},_mouseUp:function(j){c(document).unbind(\"mousemove.\"+this.widgetName,this._mouseMoveDelegate).unbind(\"mouseup.\"+this.widgetName,this._mouseUpDelegate);if(this._mouseStarted){this._mouseStarted=false;this._preventClickEvent=(j.target==this._mouseDownEvent.target);this._mouseStop(j)}return false},_mouseDistanceMet:function(j){return(Math.max(Math.abs(this._mouseDownEvent.pageX-j.pageX),Math.abs(this._mouseDownEvent.pageY-j.pageY))>=this.options.distance)},_mouseDelayMet:function(j){return this.mouseDelayMet},_mouseStart:function(j){},_mouseDrag:function(j){},_mouseStop:function(j){},_mouseCapture:function(j){return true}};c.ui.mouse.defaults={cancel:null,distance:1,delay:0}})(jQuery);;/* * jQuery UI Resizable 1.7.2\n"
-" *\n"
-" * Copyright (c) 2009 AUTHORS.txt (http://jqueryui.com/about)\n"
-" * Dual licensed under the MIT (MIT-LICENSE.txt)\n"
-" * and GPL (GPL-LICENSE.txt) licenses.\n"
-" *\n"
-" * http://docs.jquery.com/UI/Resizables\n"
-" *\n"
-" * Depends:\n"
-" * ui.core.js\n"
-" */\n"
-"(function(c){c.widget(\"ui.resizable\",c.extend({},c.ui.mouse,{_init:function(){var e=this,j=this.options;this.element.addClass(\"ui-resizable\");c.extend(this,{_aspectRatio:!!(j.aspectRatio),aspectRatio:j.aspectRatio,originalElement:this.element,_proportionallyResizeElements:[],_helper:j.helper||j.ghost||j.animate?j.helper||\"ui-resizable-helper\":null});if(this.element[0].nodeName.match(/canvas|textarea|input|select|button|img/i)){if(/relative/.test(this.element.css(\"position\"))&&c.browser.opera){this.element.css({position:\"relative\",top:\"auto\",left:\"auto\"})}this.element.wrap(c('<div class=\"ui-wrapper\" style=\"overflow: hidden;\"></div>').css({position:this.element.css(\"position\"),width:this.element.outerWidth(),height:this.element.outerHeight(),top:this.element.css(\"top\"),left:this.element.css(\"left\")}));this.element=this.element.parent().data(\"resizable\",this.element.data(\"resizable\"));this.elementIsWrapper=true;this.element.css({marginLeft:this.originalElement.css(\"marginLeft\"),marginTop:this.originalElement.css(\"marginTop\"),marginRight:this.originalElement.css(\"marginRight\"),marginBottom:this.originalElement.css(\"marginBottom\")});this.originalElement.css({marginLeft:0,marginTop:0,marginRight:0,marginBottom:0});this.originalResizeStyle=this.originalElement.css(\"resize\");this.originalElement.css(\"resize\",\"none\");this._proportionallyResizeElements.push(this.originalElement.css({position:\"static\",zoom:1,display:\"block\"}));this.originalElement.css({margin:this.originalElement.css(\"margin\")});this._proportionallyResize()}this.handles=j.handles||(!c(\".ui-resizable-handle\",this.element).length?\"e,s,se\":{n:\".ui-resizable-n\",e:\".ui-resizable-e\",s:\".ui-resizable-s\",w:\".ui-resizable-w\",se:\".ui-resizable-se\",sw:\".ui-resizable-sw\",ne:\".ui-resizable-ne\",nw:\".ui-resizable-nw\"});if(this.handles.constructor==String){if(this.handles==\"all\"){this.handles=\"n,e,s,w,se,sw,ne,nw\"}var k=this.handles.split(\",\");this.handles={};for(var f=0;f<k.length;f++){var h=c.trim(k[f]),d=\"ui-resizable-\"+h;var g=c('<div class=\"ui-resizable-handle '+d+'\"></div>');if(/sw|se|ne|nw/.test(h)){g.css({zIndex:++j.zIndex})}if(\"se\"==h){g.addClass(\"ui-icon ui-icon-gripsmall-diagonal-se\")}this.handles[h]=\".ui-resizable-\"+h;this.element.append(g)}}this._renderAxis=function(p){p=p||this.element;for(var m in this.handles){if(this.handles[m].constructor==String){this.handles[m]=c(this.handles[m],this.element).show()}if(this.elementIsWrapper&&this.originalElement[0].nodeName.match(/textarea|input|select|button/i)){var n=c(this.handles[m],this.element),o=0;o=/sw|ne|nw|se|n|s/.test(m)?n.outerHeight():n.outerWidth();var l=[\"padding\",/ne|nw|n/.test(m)?\"Top\":/se|sw|s/.test(m)?\"Bottom\":/^e$/.test(m)?\"Right\":\"Left\"].join(\"\");p.css(l,o);this._proportionallyResize()}if(!c(this.handles[m]).length){continue}}};this._renderAxis(this.element);this._handles=c(\".ui-resizable-handle\",this.element).disableSelection();this._handles.mouseover(function(){if(!e.resizing){if(this.className){var i=this.className.match(/ui-resizable-(se|sw|ne|nw|n|e|s|w)/i)}e.axis=i&&i[1]?i[1]:\"se\"}});if(j.autoHide){this._handles.hide();c(this.element).addClass(\"ui-resizable-autohide\").hover(function(){c(this).removeClass(\"ui-resizable-autohide\");e._handles.show()},function(){if(!e.resizing){c(this).addClass(\"ui-resizable-autohide\");e._handles.hide()}})}this._mouseInit()},destroy:function(){this._mouseDestroy();var d=function(f){c(f).removeClass(\"ui-resizable ui-resizable-disabled ui-resizable-resizing\").removeData(\"resizable\").unbind(\".resizable\").find(\".ui-resizable-handle\").remove()};if(this.elementIsWrapper){d(this.element);var e=this.element;e.parent().append(this.originalElement.css({position:e.css(\"position\"),width:e.outerWidth(),height:e.outerHeight(),top:e.css(\"top\"),left:e.css(\"left\")})).end().remove()}this.originalElement.css(\"resize\",this.originalResizeStyle);d(this.originalElement)},_mouseCapture:function(e){var f=false;for(var d in this.handles){if(c(this.handles[d])[0]==e.target){f=true}}return this.options.disabled||!!f},_mouseStart:function(f){var i=this.options,e=this.element.position(),d=this.element;this.resizing=true;this.documentScroll={top:c(document).scrollTop(),left:c(document).scrollLeft()};if(d.is(\".ui-draggable\")||(/absolute/).test(d.css(\"position\"))){d.css({position:\"absolute\",top:e.top,left:e.left})}if(c.browser.opera&&(/relative/).test(d.css(\"position\"))){d.css({position:\"relative\",top:\"auto\",left:\"auto\"})}this._renderProxy();var j=b(this.helper.css(\"left\")),g=b(this.helper.css(\"top\"));if(i.containment){j+=c(i.containment).scrollLeft()||0;g+=c(i.containment).scrollTop()||0}this.offset=this.helper.offset();this.position={left:j,top:g};this.size=this._helper?{width:d.outerWidth(),height:d.outerHeight()}:{width:d.width(),height:d.height()};this.originalSize=this._helper?{width:d.outerWidth(),height:d.outerHeight()}:{width:d.width(),height:d.height()};this.originalPosition={left:j,top:g};this.sizeDiff={width:d.outerWidth()-d.width(),height:d.outerHeight()-d.height()};this.originalMousePosition={left:f.pageX,top:f.pageY};this.aspectRatio=(typeof i.aspectRatio==\"number\")?i.aspectRatio:((this.originalSize.width/this.originalSize.height)||1);var h=c(\".ui-resizable-\"+this.axis).css(\"cursor\");c(\"body\").css(\"cursor\",h==\"auto\"?this.axis+\"-resize\":h);d.addClass(\"ui-resizable-resizing\");this._propagate(\"start\",f);return true},_mouseDrag:function(d){var g=this.helper,f=this.options,l={},p=this,i=this.originalMousePosition,m=this.axis;var q=(d.pageX-i.left)||0,n=(d.pageY-i.top)||0;var h=this._change[m];if(!h){return false}var k=h.apply(this,[d,q,n]),j=c.browser.msie&&c.browser.version<7,e=this.sizeDiff;if(this._aspectRatio||d.shiftKey){k=this._updateRatio(k,d)}k=this._respectSize(k,d);this._propagate(\"resize\",d);g.css({top:this.position.top+\"px\",left:this.position.left+\"px\",width:this.size.width+\"px\",height:this.size.height+\"px\"});if(!this._helper&&this._proportionallyResizeElements.length){this._proportionallyResize()}this._updateCache(k);this._trigger(\"resize\",d,this.ui());return false},_mouseStop:function(g){this.resizing=false;var h=this.options,l=this;if(this._helper){var f=this._proportionallyResizeElements,d=f.length&&(/textarea/i).test(f[0].nodeName),e=d&&c.ui.hasScroll(f[0],\"left\")?0:l.sizeDiff.height,j=d?0:l.sizeDiff.width;var m={width:(l.size.width-j),height:(l.size.height-e)},i=(parseInt(l.element.css(\"left\"),10)+(l.position.left-l.originalPosition.left))||null,k=(parseInt(l.element.css(\"top\"),10)+(l.position.top-l.originalPosition.top))||null;if(!h.animate){this.element.css(c.extend(m,{top:k,left:i}))}l.helper.height(l.size.height);l.helper.width(l.size.width);if(this._helper&&!h.animate){this._proportionallyResize()}}c(\"body\").css(\"cursor\",\"auto\");this.element.removeClass(\"ui-resizable-resizing\");this._propagate(\"stop\",g);if(this._helper){this.helper.remove()}return false},_updateCache:function(d){var e=this.options;this.offset=this.helper.offset();if(a(d.left)){this.position.left=d.left}if(a(d.top)){this.position.top=d.top}if(a(d.height)){this.size.height=d.height}if(a(d.width)){this.size.width=d.width}},_updateRatio:function(g,f){var h=this.options,i=this.position,e=this.size,d=this.axis;if(g.height){g.width=(e.height*this.aspectRatio)}else{if(g.width){g.height=(e.width/this.aspectRatio)}}if(d==\"sw\"){g.left=i.left+(e.width-g.width);g.top=null}if(d==\"nw\"){g.top=i.top+(e.height-g.height);g.left=i.left+(e.width-g.width)}return g},_respectSize:function(k,f){var i=this.helper,h=this.options,q=this._aspectRatio||f.shiftKey,p=this.axis,s=a(k.width)&&h.maxWidth&&(h.maxWidth<k.width),l=a(k.height)&&h.maxHeight&&(h.maxHeight<k.height),g=a(k.width)&&h.minWidth&&(h.minWidth>k.width),r=a(k.height)&&h.minHeight&&(h.minHeight>k.height);if(g){k.width=h.minWidth}if(r){k.height=h.minHeight}if(s){k.width=h.maxWidth}if(l){k.height=h.maxHeight}var e=this.originalPosition.left+this.originalSize.width,n=this.position.top+this.size.height;var j=/sw|nw|w/.test(p),d=/nw|ne|n/.test(p);if(g&&j){k.left=e-h.minWidth}if(s&&j){k.left=e-h.maxWidth}if(r&&d){k.top=n-h.minHeight}if(l&&d){k.top=n-h.maxHeight}var m=!k.width&&!k.height;if(m&&!k.left&&k.top){k.top=null}else{if(m&&!k.top&&k.left){k.left=null}}return k},_proportionallyResize:function(){var j=this.options;if(!this._proportionallyResizeElements.length){return}var f=this.helper||this.element;for(var e=0;e<this._proportionallyResizeElements.length;e++){var g=this._proportionallyResizeElements[e];if(!this.borderDif){var d=[g.css(\"borderTopWidth\"),g.css(\"borderRightWidth\"),g.css(\"borderBottomWidth\"),g.css(\"borderLeftWidth\")],h=[g.css(\"paddingTop\"),g.css(\"paddingRight\"),g.css(\"paddingBottom\"),g.css(\"paddingLeft\")];this.borderDif=c.map(d,function(k,m){var l=parseInt(k,10)||0,n=parseInt(h[m],10)||0;return l+n})}if(c.browser.msie&&!(!(c(f).is(\":hidden\")||c(f).parents(\":hidden\").length))){continue}g.css({height:(f.height()-this.borderDif[0]-this.borderDif[2])||0,width:(f.width()-this.borderDif[1]-this.borderDif[3])||0})}},_renderProxy:function(){var e=this.element,h=this.options;this.elementOffset=e.offset();if(this._helper){this.helper=this.helper||c('<div style=\"overflow:hidden;\"></div>');var d=c.browser.msie&&c.browser.version<7,f=(d?1:0),g=(d?2:-1);this.helper.addClass(this._helper).css({width:this.element.outerWidth()+g,height:this.element.outerHeight()+g,position:\"absolute\",left:this.elementOffset.left-f+\"px\",top:this.elementOffset.top-f+\"px\",zIndex:++h.zIndex});this.helper.appendTo(\"body\").disableSelection()}else{this.helper=this.element}},_change:{e:function(f,e,d){return{width:this.originalSize.width+e}},w:function(g,e,d){var i=this.options,f=this.originalSize,h=this.originalPosition;return{left:h.left+e,width:f.width-e}},n:function(g,e,d){var i=this.options,f=this.originalSize,h=this.originalPosition;return{top:h.top+d,height:f.height-d}},s:function(f,e,d){return{height:this.originalSize.height+d}},se:function(f,e,d){return c.extend(this._change.s.apply(this,arguments),this._change.e.apply(this,[f,e,d]))},sw:function(f,e,d){return c.extend(this._change.s.apply(this,arguments),this._change.w.apply(this,[f,e,d]))},ne:function(f,e,d){return c.extend(this._change.n.apply(this,arguments),this._change.e.apply(this,[f,e,d]))},nw:function(f,e,d){return c.extend(this._change.n.apply(this,arguments),this._change.w.apply(this,[f,e,d]))}},_propagate:function(e,d){c.ui.plugin.call(this,e,[d,this.ui()]);(e!=\"resize\"&&this._trigger(e,d,this.ui()))},plugins:{},ui:function(){return{originalElement:this.originalElement,element:this.element,helper:this.helper,position:this.position,size:this.size,originalSize:this.originalSize,originalPosition:this.originalPosition}}}));c.extend(c.ui.resizable,{version:\"1.7.2\",eventPrefix:\"resize\",defaults:{alsoResize:false,animate:false,animateDuration:\"slow\",animateEasing:\"swing\",aspectRatio:false,autoHide:false,cancel:\":input,option\",containment:false,delay:0,distance:1,ghost:false,grid:false,handles:\"e,s,se\",helper:false,maxHeight:null,maxWidth:null,minHeight:10,minWidth:10,zIndex:1000}});c.ui.plugin.add(\"resizable\",\"alsoResize\",{start:function(e,f){var d=c(this).data(\"resizable\"),g=d.options;_store=function(h){c(h).each(function(){c(this).data(\"resizable-alsoresize\",{width:parseInt(c(this).width(),10),height:parseInt(c(this).height(),10),left:parseInt(c(this).css(\"left\"),10),top:parseInt(c(this).css(\"top\"),10)})})};if(typeof(g.alsoResize)==\"object\"&&!g.alsoResize.parentNode){if(g.alsoResize.length){g.alsoResize=g.alsoResize[0];_store(g.alsoResize)}else{c.each(g.alsoResize,function(h,i){_store(h)})}}else{_store(g.alsoResize)}},resize:function(f,h){var e=c(this).data(\"resizable\"),i=e.options,g=e.originalSize,k=e.originalPosition;var j={height:(e.size.height-g.height)||0,width:(e.size.width-g.width)||0,top:(e.position.top-k.top)||0,left:(e.position.left-k.left)||0},d=function(l,m){c(l).each(function(){var p=c(this),q=c(this).data(\"resizable-alsoresize\"),o={},n=m&&m.length?m:[\"width\",\"height\",\"top\",\"left\"];c.each(n||[\"width\",\"height\",\"top\",\"left\"],function(r,t){var s=(q[t]||0)+(j[t]||0);if(s&&s>=0){o[t]=s||null}});if(/relative/.test(p.css(\"position\"))&&c.browser.opera){e._revertToRelativePosition=true;p.css({position:\"absolute\",top:\"auto\",left:\"auto\"})}p.css(o)})};if(typeof(i.alsoResize)==\"object\"&&!i.alsoResize.nodeType){c.each(i.alsoResize,function(l,m){d(l,m)})}else{d(i.alsoResize)}},stop:function(e,f){var d=c(this).data(\"resizable\");if(d._revertToRelativePosition&&c.browser.opera){d._revertToRelativePosition=false;el.css({position:\"relative\"})}c(this).removeData(\"resizable-alsoresize-start\")}});c.ui.plugin.add(\"resizable\",\"animate\",{stop:function(h,m){var n=c(this).data(\"resizable\"),i=n.options;var g=n._proportionallyResizeElements,d=g.length&&(/textarea/i).test(g[0].nodeName),e=d&&c.ui.hasScroll(g[0],\"left\")?0:n.sizeDiff.height,k=d?0:n.sizeDiff.width;var f={width:(n.size.width-k),height:(n.size.height-e)},j=(parseInt(n.element.css(\"left\"),10)+(n.position.left-n.originalPosition.left))||null,l=(parseInt(n.element.css(\"top\"),10)+(n.position.top-n.originalPosition.top))||null;n.element.animate(c.extend(f,l&&j?{top:l,left:j}:{}),{duration:i.animateDuration,easing:i.animateEasing,step:function(){var o={width:parseInt(n.element.css(\"width\"),10),height:parseInt(n.element.css(\"height\"),10),top:parseInt(n.element.css(\"top\"),10),left:parseInt(n.element.css(\"left\"),10)};if(g&&g.length){c(g[0]).css({width:o.width,height:o.height})}n._updateCache(o);n._propagate(\"resize\",h)}})}});c.ui.plugin.add(\"resizable\",\"containment\",{start:function(e,q){var s=c(this).data(\"resizable\"),i=s.options,k=s.element;var f=i.containment,j=(f instanceof c)?f.get(0):(/parent/.test(f))?k.parent().get(0):f;if(!j){return}s.containerElement=c(j);if(/document/.test(f)||f==document){s.containerOffset={left:0,top:0};s.containerPosition={left:0,top:0};s.parentData={element:c(document),left:0,top:0,width:c(document).width(),height:c(document).height()||document.body.parentNode.scrollHeight}}else{var m=c(j),h=[];c([\"Top\",\"Right\",\"Left\",\"Bottom\"]).each(function(p,o){h[p]=b(m.css(\"padding\"+o))});s.containerOffset=m.offset();s.containerPosition=m.position();s.containerSize={height:(m.innerHeight()-h[3]),width:(m.innerWidth()-h[1])};var n=s.containerOffset,d=s.containerSize.height,l=s.containerSize.width,g=(c.ui.hasScroll(j,\"left\")?j.scrollWidth:l),r=(c.ui.hasScroll(j)?j.scrollHeight:d);s.parentData={element:j,left:n.left,top:n.top,width:g,height:r}}},resize:function(f,p){var s=c(this).data(\"resizable\"),h=s.options,e=s.containerSize,n=s.containerOffset,l=s.size,m=s.position,q=s._aspectRatio||f.shiftKey,d={top:0,left:0},g=s.containerElement;if(g[0]!=document&&(/static/).test(g.css(\"position\"))){d=n}if(m.left<(s._helper?n.left:0)){s.size.width=s.size.width+(s._helper?(s.position.left-n.left):(s.position.left-d.left));if(q){s.size.height=s.size.width/h.aspectRatio}s.position.left=h.helper?n.left:0}if(m.top<(s._helper?n.top:0))\n"
-"{s.size.height=s.size.height+(s._helper?(s.position.top-n.top):s.position.top);if(q){s.size.width=s.size.height*h.aspectRatio}s.position.top=s._helper?n.top:0}s.offset.left=s.parentData.left+s.position.left;s.offset.top=s.parentData.top+s.position.top;var k=Math.abs((s._helper?s.offset.left-d.left:(s.offset.left-d.left))+s.sizeDiff.width),r=Math.abs((s._helper?s.offset.top-d.top:(s.offset.top-n.top))+s.sizeDiff.height);var j=s.containerElement.get(0)==s.element.parent().get(0),i=/relative|absolute/.test(s.containerElement.css(\"position\"));if(j&&i){k-=s.parentData.left}if(k+s.size.width>=s.parentData.width){s.size.width=s.parentData.width-k;if(q){s.size.height=s.size.width/s.aspectRatio}}if(r+s.size.height>=s.parentData.height){s.size.height=s.parentData.height-r;if(q){s.size.width=s.size.height*s.aspectRatio}}},stop:function(e,m){var p=c(this).data(\"resizable\"),f=p.options,k=p.position,l=p.containerOffset,d=p.containerPosition,g=p.containerElement;var i=c(p.helper),q=i.offset(),n=i.outerWidth()-p.sizeDiff.width,j=i.outerHeight()-p.sizeDiff.height;if(p._helper&&!f.animate&&(/relative/).test(g.css(\"position\"))){c(this).css({left:q.left-d.left-l.left,width:n,height:j})}if(p._helper&&!f.animate&&(/static/).test(g.css(\"position\"))){c(this).css({left:q.left-d.left-l.left,width:n,height:j})}}});c.ui.plugin.add(\"resizable\",\"ghost\",{start:function(f,g){var d=c(this).data(\"resizable\"),h=d.options,e=d.size;d.ghost=d.originalElement.clone();d.ghost.css({opacity:0.25,display:\"block\",position:\"relative\",height:e.height,width:e.width,margin:0,left:0,top:0}).addClass(\"ui-resizable-ghost\").addClass(typeof h.ghost==\"string\"?h.ghost:\"\");d.ghost.appendTo(d.helper)},resize:function(e,f){var d=c(this).data(\"resizable\"),g=d.options;if(d.ghost){d.ghost.css({position:\"relative\",height:d.size.height,width:d.size.width})}},stop:function(e,f){var d=c(this).data(\"resizable\"),g=d.options;if(d.ghost&&d.helper){d.helper.get(0).removeChild(d.ghost.get(0))}}});c.ui.plugin.add(\"resizable\",\"grid\",{resize:function(d,l){var n=c(this).data(\"resizable\"),g=n.options,j=n.size,h=n.originalSize,i=n.originalPosition,m=n.axis,k=g._aspectRatio||d.shiftKey;g.grid=typeof g.grid==\"number\"?[g.grid,g.grid]:g.grid;var f=Math.round((j.width-h.width)/(g.grid[0]||1))*(g.grid[0]||1),e=Math.round((j.height-h.height)/(g.grid[1]||1))*(g.grid[1]||1);if(/^(se|s|e)$/.test(m)){n.size.width=h.width+f;n.size.height=h.height+e}else{if(/^(ne)$/.test(m)){n.size.width=h.width+f;n.size.height=h.height+e;n.position.top=i.top-e}else{if(/^(sw)$/.test(m)){n.size.width=h.width+f;n.size.height=h.height+e;n.position.left=i.left-f}else{n.size.width=h.width+f;n.size.height=h.height+e;n.position.top=i.top-e;n.position.left=i.left-f}}}}});var b=function(d){return parseInt(d,10)||0};var a=function(d){return !isNaN(parseInt(d,10))}})(jQuery);;\n"
-"/**\n"
-" * jQuery.ScrollTo - Easy element scrolling using jQuery.\n"
-" * Copyright (c) 2008 Ariel Flesler - aflesler(at)gmail(dot)com\n"
-" * Licensed under GPL license (http://www.opensource.org/licenses/gpl-license.php).\n"
-" * Date: 2/8/2008\n"
-" * @author Ariel Flesler\n"
-" * @version 1.3.2\n"
-" */\n"
-";(function($){var o=$.scrollTo=function(a,b,c){o.window().scrollTo(a,b,c)};o.defaults={axis:'y',duration:1};o.window=function(){return $($.browser.safari?'body':'html')};$.fn.scrollTo=function(l,m,n){if(typeof m=='object'){n=m;m=0}n=$.extend({},o.defaults,n);m=m||n.speed||n.duration;n.queue=n.queue&&n.axis.length>1;if(n.queue)m/=2;n.offset=j(n.offset);n.over=j(n.over);return this.each(function(){var a=this,b=$(a),t=l,c,d={},w=b.is('html,body');switch(typeof t){case'number':case'string':if(/^([+-]=)?\\d+(px)?$/.test(t)){t=j(t);break}t=$(t,this);case'object':if(t.is||t.style)c=(t=$(t)).offset()}$.each(n.axis.split(''),function(i,f){var P=f=='x'?'Left':'Top',p=P.toLowerCase(),k='scroll'+P,e=a[k],D=f=='x'?'Width':'Height';if(c){d[k]=c[p]+(w?0:e-b.offset()[p]);if(n.margin){d[k]-=parseInt(t.css('margin'+P))||0;d[k]-=parseInt(t.css('border'+P+'Width'))||0}d[k]+=n.offset[p]||0;if(n.over[p])d[k]+=t[D.toLowerCase()]()*n.over[p]}else d[k]=t[p];if(/^\\d+$/.test(d[k]))d[k]=d[k]<=0?0:Math.min(d[k],h(D));if(!i&&n.queue){if(e!=d[k])g(n.onAfterFirst);delete d[k]}});g(n.onAfter);function g(a){b.animate(d,m,n.easing,a&&function(){a.call(this,l)})};function h(D){var b=w?$.browser.opera?document.body:document.documentElement:a;return b['scroll'+D]-b['client'+D]}})};function j(a){return typeof a=='object'?a:{top:a,left:a}}})(jQuery);\n"
-"\n"
diff --git a/trunk/src/lang_cfg.h b/trunk/src/lang_cfg.h
deleted file mode 100644
index 72305af..0000000
--- a/trunk/src/lang_cfg.h
+++ /dev/null
@@ -1,40 +0,0 @@
-#define LANG_NL
-#define LANG_SV
-#define LANG_CZ
-#define LANG_FR
-#define LANG_ID
-#define LANG_IT
-#define LANG_DE
-#define LANG_JP
-#define LANG_JE
-#define LANG_ES
-#define LANG_FI
-#define LANG_RU
-#define LANG_HR
-#define LANG_PL
-#define LANG_PT
-#define LANG_HU
-#define LANG_KR
-#define LANG_KE
-#define LANG_RO
-#define LANG_SI
-#define LANG_CN
-#define LANG_NO
-#define LANG_MK
-#define LANG_BR
-#define LANG_DK
-#define LANG_SK
-#define LANG_UA
-#define LANG_GR
-#define LANG_TW
-#define LANG_SR
-#define LANG_CA
-#define LANG_LT
-#define LANG_ZA
-#define LANG_AR
-#define LANG_FA
-#define LANG_SC
-#define LANG_VI
-#define LANG_TR
-#define LANG_EO
-#define LANG_AM
diff --git a/trunk/src/language.cpp b/trunk/src/language.cpp
deleted file mode 100644
index 3afa5b9..0000000
--- a/trunk/src/language.cpp
+++ /dev/null
@@ -1,422 +0,0 @@
-/******************************************************************************
- *
- *
- *
- * Copyright (C) 1997-2012 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.
- *
- */
-
-#include "message.h"
-#include "language.h"
-#include "lang_cfg.h"
-#include "translator.h"
-#include "translatordecoder.h"
-#include "translator_en.h"
-#if !defined(ENGLISH_ONLY)
-#include "translator_adapter.h"
-#ifdef LANG_NL
-#include "translator_nl.h"
-#endif
-#ifdef LANG_AM
-#include "translator_am.h"
-#endif
-#ifdef LANG_SV
-#include "translator_sv.h"
-#endif
-#ifdef LANG_CZ
-#include "translator_cz.h"
-#endif
-#ifdef LANG_FR
-#include "translator_fr.h"
-#endif
-#ifdef LANG_ID
-#include "translator_id.h"
-#endif
-#ifdef LANG_IT
-#include "translator_it.h"
-#endif
-#ifdef LANG_DE
-#include "translator_de.h"
-#endif
-#ifdef LANG_JP
-#include "translator_jp.h"
-#endif
-#ifdef LANG_JE
-#include "translator_je.h"
-#endif
-#ifdef LANG_ES
-#include "translator_es.h"
-#endif
-#ifdef LANG_EO
-#include "translator_eo.h"
-#endif
-#ifdef LANG_FI
-#include "translator_fi.h"
-#endif
-#ifdef LANG_RU
-#include "translator_ru.h"
-#endif
-#ifdef LANG_HR
-#include "translator_hr.h"
-#endif
-#ifdef LANG_PL
-#include "translator_pl.h"
-#endif
-#ifdef LANG_PT
-#include "translator_pt.h"
-#endif
-#ifdef LANG_HU
-#include "translator_hu.h"
-#endif
-#ifdef LANG_KE
-#include "translator_ke.h"
-#endif
-#ifdef LANG_KR
-#include "translator_kr.h"
-#endif
-#ifdef LANG_RO
-#include "translator_ro.h"
-#endif
-#ifdef LANG_SI
-#include "translator_si.h"
-#endif
-#ifdef LANG_CN
-#include "translator_cn.h"
-#endif
-#ifdef LANG_TW
-#include "translator_tw.h"
-#endif
-#ifdef LANG_NO
-#include "translator_no.h"
-#endif
-#ifdef LANG_BR
-#include "translator_br.h"
-#endif
-#ifdef LANG_DK
-#include "translator_dk.h"
-#endif
-#ifdef LANG_SK
-#include "translator_sk.h"
-#endif
-#ifdef LANG_UA
-#include "translator_ua.h"
-#endif
-#ifdef LANG_GR
-#include "translator_gr.h"
-#endif
-#ifdef LANG_SR
-#include "translator_sr.h"
-#endif
-#ifdef LANG_CA
-#include "translator_ca.h"
-#endif
-//#ifdef LANG_JS
-//#include "translator_js.h"
-//#endif
-#ifdef LANG_LT
-#include "translator_lt.h"
-#endif
-#ifdef LANG_ZA
-#include "translator_za.h"
-#endif
-#ifdef LANG_AR
-#include "translator_ar.h"
-#endif
-#ifdef LANG_FA
-#include "translator_fa.h"
-#endif
-#ifdef LANG_MK
-#include "translator_mk.h"
-#endif
-#ifdef LANG_SC
-#include "translator_sc.h"
-#endif
-#ifdef LANG_VI
-#include "translator_vi.h"
-#endif
-#ifdef LANG_TR
-#include "translator_tr.h"
-#endif
-#endif // !ENGLISH_ONLY
-
-#define L_EQUAL(a) !stricmp(langName,a)
-
-Translator *theTranslator=0;
-
-static const char obsoleteMsg[] =
- "---------\n"
- "ERROR: The selected language is no longer supported!\n"
- "If you want doxygen to produce output in this language \n"
- "you are kindly requested to help bringing the documentation \n"
- "up to date. Please read the development section of the manual \n"
- "for more information or contact Petr Prikryl (Prikryl@skil.cz).\n"
- "Thanks in advance!\n"
- "---------\n";
-
-bool setTranslator(const char *langName)
-{
- if (L_EQUAL("english"))
- {
- theTranslator=new TranslatorEnglish;
- }
-#if !defined(ENGLISH_ONLY)
-#ifdef LANG_NL
- else if (L_EQUAL("dutch"))
- {
- theTranslator=new TranslatorDutch;
- }
-#endif
-#ifdef LANG_AM
- else if (L_EQUAL("armenian"))
- {
- theTranslator=new TranslatorArmenian;
- }
-#endif
-#ifdef LANG_SV
- else if (L_EQUAL("swedish"))
- {
- theTranslator=new TranslatorDecoder(new TranslatorSwedish);
- }
-#endif
-#ifdef LANG_CZ
- else if (L_EQUAL("czech"))
- {
- theTranslator=new TranslatorCzech;
- }
-#endif
-#ifdef LANG_FR
- else if (L_EQUAL("french"))
- {
- theTranslator=new TranslatorDecoder(new TranslatorFrench);
- }
-#endif
-#ifdef LANG_ID
- else if (L_EQUAL("indonesian"))
- {
- theTranslator=new TranslatorDecoder(new TranslatorIndonesian);
- }
-#endif
-#ifdef LANG_IT
- else if (L_EQUAL("italian"))
- {
- theTranslator=new TranslatorItalian;
- }
-#endif
-#ifdef LANG_DE
- else if (L_EQUAL("german"))
- {
- theTranslator=new TranslatorGerman;
- }
-#endif
-#ifdef LANG_JP
- else if (L_EQUAL("japanese"))
- {
- theTranslator=new TranslatorDecoder(new TranslatorJapanese);
- }
-#endif
-#ifdef LANG_JE
- else if (L_EQUAL("japanese-en"))
- {
- theTranslator=new TranslatorDecoder(new TranslatorJapaneseEn);
- }
-#endif
-#ifdef LANG_ES
- else if (L_EQUAL("spanish"))
- {
- theTranslator=new TranslatorSpanish;
- }
-#endif
-#ifdef LANG_FI
- else if (L_EQUAL("finnish"))
- {
- theTranslator=new TranslatorFinnish;
- }
-#endif
-#ifdef LANG_RU
- else if (L_EQUAL("russian"))
- {
- theTranslator=new TranslatorDecoder(new TranslatorRussian);
- }
-#endif
-#ifdef LANG_HR
- else if (L_EQUAL("croatian"))
- {
- theTranslator=new TranslatorCroatian;
- }
-#endif
-#ifdef LANG_PL
- else if (L_EQUAL("polish"))
- {
- theTranslator=new TranslatorPolish;
- }
-#endif
-#ifdef LANG_PT
- else if (L_EQUAL("portuguese"))
- {
- theTranslator=new TranslatorPortuguese;
- }
-#endif
-#ifdef LANG_HU
- else if (L_EQUAL("hungarian"))
- {
- theTranslator=new TranslatorDecoder(new TranslatorHungarian);
- }
-#endif
-#ifdef LANG_KR
- else if (L_EQUAL("korean"))
- {
- theTranslator=new TranslatorDecoder(new TranslatorKorean);
- }
-#endif
-#ifdef LANG_KE
- else if (L_EQUAL("korean-en"))
- {
- theTranslator=new TranslatorDecoder(new TranslatorKoreanEn);
- }
-#endif
-#ifdef LANG_RO
- else if (L_EQUAL("romanian"))
- {
- theTranslator=new TranslatorDecoder(new TranslatorRomanian);
- }
-#endif
-#ifdef LANG_SI
- else if (L_EQUAL("slovene"))
- {
- theTranslator=new TranslatorDecoder(new TranslatorSlovene);
- }
-#endif
-#ifdef LANG_CN
- else if (L_EQUAL("chinese"))
- {
- theTranslator=new TranslatorChinese;
- }
-#endif
-#ifdef LANG_TW
- else if (L_EQUAL("chinese-traditional"))
- {
- theTranslator=new TranslatorDecoder(new TranslatorChinesetraditional);
- }
-#endif
-#ifdef LANG_NO
- else if (L_EQUAL("norwegian"))
- {
- theTranslator=new TranslatorDecoder(new TranslatorNorwegian);
- }
-#endif
-#ifdef LANG_BR
- else if (L_EQUAL("brazilian"))
- {
- theTranslator=new TranslatorBrazilian;
- }
-#endif
-#ifdef LANG_DK
- else if (L_EQUAL("danish"))
- {
- theTranslator=new TranslatorDecoder(new TranslatorDanish);
- }
-#endif
-#ifdef LANG_SK
- else if (L_EQUAL("slovak"))
- {
- theTranslator=new TranslatorSlovak;
- }
-#endif
-#ifdef LANG_UA
- else if (L_EQUAL("ukrainian"))
- {
- theTranslator=new TranslatorDecoder(new TranslatorUkrainian);
- }
-#endif
-#ifdef LANG_GR
- else if (L_EQUAL("greek"))
- {
- theTranslator=new TranslatorGreek;
- }
-#endif
-#ifdef LANG_SR
- else if (L_EQUAL("serbian"))
- {
- theTranslator=new TranslatorDecoder(new TranslatorSerbian);
- }
-#endif
-#ifdef LANG_SC
- else if (L_EQUAL("serbian-cyrilic"))
- {
- theTranslator=new TranslatorSerbian;
- }
-#endif
-#ifdef LANG_CA
- else if (L_EQUAL("catalan"))
- {
- theTranslator=new TranslatorCatalan;
- }
-#endif
-#ifdef LANG_LT
- else if (L_EQUAL("lithuanian"))
- {
- theTranslator=new TranslatorDecoder(new TranslatorLithuanian);
- }
-#endif
-#ifdef LANG_ZA
- else if (L_EQUAL("afrikaans"))
- {
- theTranslator=new TranslatorDecoder(new TranslatorAfrikaans);
- }
-#endif
-#ifdef LANG_AR
- else if (L_EQUAL("arabic"))
- {
- theTranslator=new TranslatorDecoder(new TranslatorArabic);
- }
-#endif
-#ifdef LANG_FA
- else if (L_EQUAL("persian") || L_EQUAL("farsi"))
- {
- theTranslator=new TranslatorPersian;
- }
-#endif
-#ifdef LANG_MK
- else if (L_EQUAL("macedonian"))
- {
- theTranslator=new TranslatorMacedonian;
- }
-#endif
-#ifdef LANG_VI
- else if (L_EQUAL("vietnamese"))
- {
- theTranslator=new TranslatorVietnamese;
- }
-#endif
-#ifdef LANG_TR
- else if (L_EQUAL("turkish"))
- {
- theTranslator=new TranslatorTurkish;
- }
-#endif
-#ifdef LANG_EO
- else if (L_EQUAL("esperanto"))
- {
- theTranslator=new TranslatorEsperanto;
- }
-#endif
-#endif // ENGLISH_ONLY
- else // use the default language (i.e. english)
- {
- theTranslator=new TranslatorEnglish;
- return FALSE;
- }
-
- QCString msg = theTranslator->updateNeededMessage();
- if (!msg.isEmpty()) err(msg);
- return TRUE;
-}
diff --git a/trunk/src/language.h b/trunk/src/language.h
deleted file mode 100644
index 17f5800..0000000
--- a/trunk/src/language.h
+++ /dev/null
@@ -1,26 +0,0 @@
-/******************************************************************************
- *
- *
- *
- * Copyright (C) 1997-2012 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.
- *
- */
-
-#ifndef LANGUAGE_H
-#define LANGUAGE_H
-
-#include "translator.h"
-
-extern Translator *theTranslator;
-extern bool setTranslator(const char *languageName);
-
-#endif
diff --git a/trunk/src/latexdocvisitor.cpp b/trunk/src/latexdocvisitor.cpp
deleted file mode 100644
index 0e9d0c2..0000000
--- a/trunk/src/latexdocvisitor.cpp
+++ /dev/null
@@ -1,1825 +0,0 @@
-/******************************************************************************
- *
- *
- *
- *
- * Copyright (C) 1997-2012 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.
- *
- */
-#include <qfileinfo.h>
-#include "latexdocvisitor.h"
-#include "docparser.h"
-#include "language.h"
-#include "doxygen.h"
-#include "outputgen.h"
-#include "dot.h"
-#include "util.h"
-#include "message.h"
-#include "parserintf.h"
-#include "msc.h"
-#include "htmlattrib.h"
-#include "cite.h"
-
-static QCString escapeLabelName(const char *s)
-{
- QCString result;
- const char *p=s;
- char c;
- while ((c=*p++))
- {
- switch (c)
- {
- case '%': result+="\\%"; break;
- case '|': result+="\\texttt{\"|}"; break;
- case '!': result+="\"!"; break;
- default: result+=c;
- }
- }
- return result;
-}
-
-const int maxLevels=5;
-static const char *secLabels[maxLevels] =
- { "section","subsection","subsubsection","paragraph","subparagraph" };
-
-static const char *getSectionName(int level)
-{
- static bool compactLatex = Config_getBool("COMPACT_LATEX");
- int l = level;
- if (compactLatex) l++;
- if (Doxygen::insideMainPage) l--;
- return secLabels[QMIN(maxLevels-1,l)];
-}
-
-#if 0
-static int rowspan(DocHtmlCell *cell)
-{
- int retval = 0;
- HtmlAttribList attrs = cell->attribs();
- uint i;
- for (i=0; i<attrs.count(); ++i)
- {
- if (attrs.at(i)->name.lower()=="rowspan")
- {
- retval = attrs.at(i)->value.toInt();
- break;
- }
- }
- return retval;
-}
-
-static int colspan(DocHtmlCell *cell)
-{
- int retval = 1;
- HtmlAttribList attrs = cell->attribs();
- uint i;
- for (i=0; i<attrs.count(); ++i)
- {
- if (attrs.at(i)->name.lower()=="colspan")
- {
- retval = QMAX(1,attrs.at(i)->value.toInt());
- break;
- }
- }
- return retval;
-}
-
-static int align(DocHtmlCell *cell)
-{
- HtmlAttribList attrs = cell->attribs();
- uint i;
- for (i=0; i<attrs.count(); ++i)
- {
- if (attrs.at(i)->name.lower()=="align")
- {
- if (attrs.at(i)->value.lower()=="center")
- return 1;
- else if (attrs.at(i)->value.lower()=="right")
- return 2;
- else return 0;
- }
- }
- return 0;
-}
-
-struct ActiveRowSpan
-{
- ActiveRowSpan(int rows,int col) : rowsLeft(rows), column(col) {}
- int rowsLeft;
- int column;
-};
-
-typedef QList<ActiveRowSpan> RowSpanList;
-
-static int determineNumCols(DocHtmlTable *table)
-{
- RowSpanList rowSpans;
- rowSpans.setAutoDelete(TRUE);
- int maxCols=0;
- int rowIdx=1;
- QListIterator<DocNode> li(table->children());
- DocNode *rowNode;
- for (li.toFirst();(rowNode=li.current());++li)
- {
- int colIdx=1;
- int cells=0;
- if (rowNode->kind()==DocNode::Kind_HtmlRow)
- {
- uint i;
- DocHtmlRow *row = (DocHtmlRow*)rowNode;
- QListIterator<DocNode> rli(row->children());
- DocNode *cellNode;
- for (rli.toFirst();(cellNode=rli.current());++rli)
- {
- if (cellNode->kind()==DocNode::Kind_HtmlCell)
- {
- DocHtmlCell *cell = (DocHtmlCell*)cellNode;
- int rs = rowspan(cell);
- int cs = colspan(cell);
-
- for (i=0;i<rowSpans.count();i++)
- {
- if (rowSpans.at(i)->rowsLeft>0 &&
- rowSpans.at(i)->column==colIdx)
- {
- colIdx=rowSpans.at(i)->column+1;
- cells++;
- }
- }
- if (rs>0) rowSpans.append(new ActiveRowSpan(rs,colIdx));
- cell->setRowIndex(rowIdx);
- cell->setColumnIndex(colIdx);
- colIdx+=cs;
- cells++;
- }
- }
- for (i=0;i<rowSpans.count();i++)
- {
- if (rowSpans.at(i)->rowsLeft>0) rowSpans.at(i)->rowsLeft--;
- }
- row->setVisibleCells(cells);
- rowIdx++;
- }
- if (colIdx-1>maxCols) maxCols=colIdx-1;
- }
- return maxCols;
-}
-#endif
-
-QCString LatexDocVisitor::escapeMakeIndexChars(const char *s)
-{
- QCString result;
- const char *p=s;
- char str[2]; str[1]=0;
- char c;
- while ((c=*p++))
- {
- switch (c)
- {
- case '!': m_t << "\"!"; break;
- case '"': m_t << "\"\""; break;
- case '@': m_t << "\"@"; break;
- case '|': m_t << "\\texttt{\"|}"; break;
- case '[': m_t << "["; break;
- case ']': m_t << "]"; break;
- default: str[0]=c; filter(str); break;
- }
- }
- return result;
-}
-
-
-LatexDocVisitor::LatexDocVisitor(FTextStream &t,CodeOutputInterface &ci,
- const char *langExt,bool insideTabbing)
- : DocVisitor(DocVisitor_Latex), m_t(t), m_ci(ci), m_insidePre(FALSE),
- m_insideItem(FALSE), m_hide(FALSE), m_insideTabbing(insideTabbing),
- m_insideTable(FALSE), m_langExt(langExt), m_currentColumn(0),
- m_inRowspan(FALSE), m_inColspan(FALSE)
-{
- m_rowSpans.setAutoDelete(TRUE);
-}
-
- //--------------------------------------
- // visitor functions for leaf nodes
- //--------------------------------------
-
-void LatexDocVisitor::visit(DocWord *w)
-{
- if (m_hide) return;
- filter(w->word());
-}
-
-void LatexDocVisitor::visit(DocLinkedWord *w)
-{
- if (m_hide) return;
- startLink(w->ref(),w->file(),w->anchor());
- filter(w->word());
- endLink(w->ref(),w->file(),w->anchor());
-}
-
-void LatexDocVisitor::visit(DocWhiteSpace *w)
-{
- if (m_hide) return;
- if (m_insidePre)
- {
- m_t << w->chars();
- }
- else
- {
- m_t << " ";
- }
-}
-
-void LatexDocVisitor::visit(DocSymbol *s)
-{
- if (m_hide) return;
- switch(s->symbol())
- {
- case DocSymbol::BSlash: m_t << "$\\backslash$"; break;
- case DocSymbol::At: m_t << "@"; break;
- case DocSymbol::Less: if (m_insidePre) m_t << "<"; else m_t << "$<$";
- break;
- case DocSymbol::Greater: if (m_insidePre) m_t << ">"; else m_t << "$>$"; break;
- case DocSymbol::Amp: m_t << "\\&"; break;
- case DocSymbol::Dollar: m_t << "\\$"; break;
- case DocSymbol::Hash: m_t << "\\#"; break;
- case DocSymbol::DoubleColon: m_t << "::"; break;
- case DocSymbol::Percent: m_t << "\\%"; break;
- case DocSymbol::Copy: m_t << "\\copyright"; break;
- case DocSymbol::Tm: m_t << "\\texttrademark"; break;
- case DocSymbol::Reg: m_t << "\\textregistered"; break;
- case DocSymbol::Apos: m_t << "'"; break;
- case DocSymbol::Quot: m_t << "\""; break;
- case DocSymbol::Lsquo: m_t << "`"; break;
- case DocSymbol::Rsquo: m_t << "'"; break;
- case DocSymbol::Ldquo: m_t << "``"; break;
- case DocSymbol::Rdquo: m_t << "''"; break;
- case DocSymbol::Ndash: m_t << "--"; break;
- case DocSymbol::Mdash: m_t << "---"; break;
- case DocSymbol::Uml:
- if (s->letter()=='i')
- m_t << "\\\"{\\i}";
- else
- m_t << "\\\"{" << s->letter() << "}";
- break;
- case DocSymbol::Acute:
- if (s->letter()=='i')
- m_t << "\\'{\\i}";
- else
- m_t << "\\'{" << s->letter() << "}";
- break;
- case DocSymbol::Grave:
- if (s->letter()=='i')
- m_t << "\\`{\\i}";
- else
- m_t << "\\`{" << s->letter() << "}";
- break;
- case DocSymbol::Circ:
- if (s->letter()=='i')
- m_t << "\\^{\\i}";
- else
- m_t << "\\^{" << s->letter() << "}";
- break;
- case DocSymbol::Slash: if (tolower(s->letter())=='o')
- m_t << "{\\" << s->letter() << "}";
- else
- m_t << s->letter();
- break;
- case DocSymbol::Tilde: m_t << "\\~{" << s->letter() << "}"; break;
- case DocSymbol::Szlig: m_t << "{\\ss}"; break;
- case DocSymbol::Cedil: m_t << "\\c{" << s->letter() << "}"; break;
- case DocSymbol::Ring: m_t << "\\" << s->letter() << s->letter(); break;
- case DocSymbol::Nbsp: m_t << "~"; break;
- case DocSymbol::AElig: m_t << "{\\AE}"; break;
- case DocSymbol::Aelig: m_t << "{\\ae}"; break;
- default:
- err("error: unknown symbol found\n");
- }
-}
-
-void LatexDocVisitor::visit(DocURL *u)
-{
- if (m_hide) return;
- if (Config_getBool("PDF_HYPERLINKS"))
- {
- m_t << "\\href{";
- if (u->isEmail()) m_t << "mailto:";
- m_t << u->url() << "}";
- }
- m_t << "{\\tt ";
- filter(u->url());
- m_t << "}";
-}
-
-void LatexDocVisitor::visit(DocLineBreak *)
-{
- if (m_hide) return;
- if (m_insideTable) m_t << "\\newline\n";
- else m_t << "\\par\n";
-}
-
-void LatexDocVisitor::visit(DocHorRuler *)
-{
- if (m_hide) return;
- m_t << "\n\n";
-}
-
-void LatexDocVisitor::visit(DocStyleChange *s)
-{
- if (m_hide) return;
- switch (s->style())
- {
- case DocStyleChange::Bold:
- if (s->enable()) m_t << "{\\bfseries "; else m_t << "}";
- break;
- case DocStyleChange::Italic:
- if (s->enable()) m_t << "{\\itshape "; else m_t << "}";
- break;
- case DocStyleChange::Code:
- if (s->enable()) m_t << "{\\ttfamily "; else m_t << "}";
- break;
- case DocStyleChange::Subscript:
- if (s->enable()) m_t << "$_{\\mbox{"; else m_t << "}}$ ";
- break;
- case DocStyleChange::Superscript:
- if (s->enable()) m_t << "$^{\\mbox{"; else m_t << "}}$ ";
- break;
- case DocStyleChange::Center:
- if (s->enable()) m_t << "\\begin{center}"; else m_t << "\\end{center} ";
- break;
- case DocStyleChange::Small:
- if (s->enable()) m_t << "\n\\footnotesize "; else m_t << "\n\\normalsize ";
- break;
- case DocStyleChange::Preformatted:
- if (s->enable())
- {
- m_t << "\n\\begin{DoxyPre}";
- m_insidePre=TRUE;
- }
- else
- {
- m_insidePre=FALSE;
- m_t << "\\end{DoxyPre}\n";
- }
- break;
- case DocStyleChange::Div: /* HTML only */ break;
- case DocStyleChange::Span: /* HTML only */ break;
- }
-}
-
-void LatexDocVisitor::visit(DocVerbatim *s)
-{
- //static bool latexSourceCode = Config_getBool("LATEX_SOURCE_CODE");
- if (m_hide) return;
- QCString lang = m_langExt;
- if (!s->language().isEmpty()) // explicit language setting
- {
- lang = s->language();
- }
- switch(s->type())
- {
- case DocVerbatim::Code:
- {
- m_t << "\n\\begin{DoxyCode}\n";
- Doxygen::parserManager->getParser(lang)
- ->parseCode(m_ci,s->context(),s->text(),
- s->isExample(),s->exampleFile());
- m_t << "\\end{DoxyCode}\n";
- }
- break;
- case DocVerbatim::Verbatim:
- m_t << "\\begin{DoxyVerb}";
- m_t << s->text();
- m_t << "\\end{DoxyVerb}\n";
- break;
- case DocVerbatim::HtmlOnly:
- case DocVerbatim::XmlOnly:
- case DocVerbatim::ManOnly:
- /* nothing */
- break;
- case DocVerbatim::LatexOnly:
- m_t << s->text();
- break;
- case DocVerbatim::Dot:
- {
- static int dotindex = 1;
- QCString fileName(4096);
-
- fileName.sprintf("%s%d%s",
- (Config_getString("LATEX_OUTPUT")+"/inline_dotgraph_").data(),
- dotindex++,
- ".dot"
- );
- QFile file(fileName);
- if (!file.open(IO_WriteOnly))
- {
- err("Could not open file %s for writing\n",fileName.data());
- }
- file.writeBlock( s->text(), s->text().length() );
- file.close();
-
- m_t << "\\begin{center}\n";
- startDotFile(fileName,"","",FALSE);
- endDotFile(FALSE);
- m_t << "\\end{center}\n";
-
- if (Config_getBool("DOT_CLEANUP")) file.remove();
- }
- break;
- case DocVerbatim::Msc:
- {
- static int mscindex = 1;
- QCString baseName(4096);
-
- baseName.sprintf("%s%d",
- (Config_getString("LATEX_OUTPUT")+"/inline_mscgraph_").data(),
- mscindex++
- );
- QFile file(baseName+".msc");
- if (!file.open(IO_WriteOnly))
- {
- err("Could not open file %s.msc for writing\n",baseName.data());
- }
- QCString text = "msc {";
- text+=s->text();
- text+="}";
- file.writeBlock( text, text.length() );
- file.close();
-
- m_t << "\\begin{center}\n";
- writeMscFile(baseName);
- m_t << "\\end{center}\n";
-
- if (Config_getBool("DOT_CLEANUP")) file.remove();
- }
- break;
- }
-}
-
-void LatexDocVisitor::visit(DocAnchor *anc)
-{
- if (m_hide) return;
- m_t << "\\label{" << anc->file() << "_" << anc->anchor() << "}%" << endl;
- if (!anc->file().isEmpty() && Config_getBool("PDF_HYPERLINKS"))
- {
- m_t << "\\hypertarget{" << anc->file() << "_" << anc->anchor()
- << "}{}%" << endl;
- }
-}
-
-void LatexDocVisitor::visit(DocInclude *inc)
-{
- if (m_hide) return;
- switch(inc->type())
- {
- case DocInclude::IncWithLines:
- {
- m_t << "\n\\begin{DoxyCodeInclude}\n";
- QFileInfo cfi( inc->file() );
- FileDef fd( cfi.dirPath(), cfi.fileName() );
- Doxygen::parserManager->getParser(inc->extension())
- ->parseCode(m_ci,inc->context(),
- inc->text(),
- inc->isExample(),
- inc->exampleFile(), &fd);
- m_t << "\\end{DoxyCodeInclude}" << endl;
- }
- break;
- case DocInclude::Include:
- m_t << "\n\\begin{DoxyCodeInclude}\n";
- Doxygen::parserManager->getParser(inc->extension())
- ->parseCode(m_ci,inc->context(),
- inc->text(),inc->isExample(),
- inc->exampleFile());
- m_t << "\\end{DoxyCodeInclude}\n";
- break;
- case DocInclude::DontInclude:
- break;
- case DocInclude::HtmlInclude:
- break;
- case DocInclude::VerbInclude:
- m_t << "\n\\begin{DoxyVerbInclude}\n";
- m_t << inc->text();
- m_t << "\\end{DoxyVerbInclude}\n";
- break;
- case DocInclude::Snippet:
- {
- m_t << "\n\\begin{DoxyCodeInclude}\n";
- Doxygen::parserManager->getParser(inc->extension())
- ->parseCode(m_ci,
- inc->context(),
- extractBlock(inc->text(),inc->blockId()),
- inc->isExample(),
- inc->exampleFile()
- );
- m_t << "\\end{DoxyCodeInclude}" << endl;
- }
- break;
- }
-}
-
-void LatexDocVisitor::visit(DocIncOperator *op)
-{
- //printf("DocIncOperator: type=%d first=%d, last=%d text=`%s'\n",
- // op->type(),op->isFirst(),op->isLast(),op->text().data());
- if (op->isFirst())
- {
- if (!m_hide) m_t << "\n\\begin{DoxyCodeInclude}\n";
- pushEnabled();
- m_hide = TRUE;
- }
- if (op->type()!=DocIncOperator::Skip)
- {
- popEnabled();
- if (!m_hide)
- {
- Doxygen::parserManager->getParser(m_langExt)
- ->parseCode(m_ci,op->context(),op->text(),
- op->isExample(),op->exampleFile());
- }
- pushEnabled();
- m_hide=TRUE;
- }
- if (op->isLast())
- {
- popEnabled();
- if (!m_hide) m_t << "\n\\end{DoxyCodeInclude}\n";
- }
- else
- {
- if (!m_hide) m_t << endl;
- }
-}
-
-void LatexDocVisitor::visit(DocFormula *f)
-{
- if (m_hide) return;
- m_t << f->text();
-}
-
-void LatexDocVisitor::visit(DocIndexEntry *i)
-{
- if (m_hide) return;
- m_t << "\\index{" << escapeLabelName(i->entry()) << "@{";
- escapeMakeIndexChars(i->entry());
- m_t << "}}";
-}
-
-void LatexDocVisitor::visit(DocSimpleSectSep *)
-{
-}
-
-void LatexDocVisitor::visit(DocCite *cite)
-{
- if (m_hide) return;
- if (!cite->file().isEmpty())
- {
- //startLink(cite->ref(),cite->file(),cite->anchor());
- QCString anchor = cite->anchor();
- anchor = anchor.mid(CiteConsts::anchorPrefix.length()); // strip prefix
- m_t << "\\cite{" << anchor << "}";
- }
- else
- {
- m_t << "{\\bfseries [";
- filter(cite->text());
- m_t << "]}";
- }
-}
-
-//--------------------------------------
-// visitor functions for compound nodes
-//--------------------------------------
-
-void LatexDocVisitor::visitPre(DocAutoList *l)
-{
- if (m_hide) return;
- if (l->isEnumList())
- {
- m_t << "\n\\begin{DoxyEnumerate}";
- }
- else
- {
- m_t << "\n\\begin{DoxyItemize}";
- }
-}
-
-void LatexDocVisitor::visitPost(DocAutoList *l)
-{
- if (m_hide) return;
- if (l->isEnumList())
- {
- m_t << "\n\\end{DoxyEnumerate}";
- }
- else
- {
- m_t << "\n\\end{DoxyItemize}";
- }
-}
-
-void LatexDocVisitor::visitPre(DocAutoListItem *)
-{
- if (m_hide) return;
- m_t << "\n\\item ";
-}
-
-void LatexDocVisitor::visitPost(DocAutoListItem *)
-{
-}
-
-void LatexDocVisitor::visitPre(DocPara *)
-{
-}
-
-void LatexDocVisitor::visitPost(DocPara *p)
-{
- if (m_hide) return;
- if (!p->isLast() && // omit <p> for last paragraph
- !(p->parent() && // and for parameter sections
- p->parent()->kind()==DocNode::Kind_ParamSect
- )
- ) m_t << endl << endl;
-}
-
-void LatexDocVisitor::visitPre(DocRoot *)
-{
-}
-
-void LatexDocVisitor::visitPost(DocRoot *)
-{
-}
-
-void LatexDocVisitor::visitPre(DocSimpleSect *s)
-{
- if (m_hide) return;
- switch(s->type())
- {
- case DocSimpleSect::See:
- m_t << "\\begin{DoxySeeAlso}{";
- filter(theTranslator->trSeeAlso());
- break;
- case DocSimpleSect::Return:
- m_t << "\\begin{DoxyReturn}{";
- filter(theTranslator->trReturns());
- break;
- case DocSimpleSect::Author:
- m_t << "\\begin{DoxyAuthor}{";
- filter(theTranslator->trAuthor(TRUE,TRUE));
- break;
- case DocSimpleSect::Authors:
- m_t << "\\begin{DoxyAuthor}{";
- filter(theTranslator->trAuthor(TRUE,FALSE));
- break;
- case DocSimpleSect::Version:
- m_t << "\\begin{DoxyVersion}{";
- filter(theTranslator->trVersion());
- break;
- case DocSimpleSect::Since:
- m_t << "\\begin{DoxySince}{";
- filter(theTranslator->trSince());
- break;
- case DocSimpleSect::Date:
- m_t << "\\begin{DoxyDate}{";
- filter(theTranslator->trDate());
- break;
- case DocSimpleSect::Note:
- m_t << "\\begin{DoxyNote}{";
- filter(theTranslator->trNote());
- break;
- case DocSimpleSect::Warning:
- m_t << "\\begin{DoxyWarning}{";
- filter(theTranslator->trWarning());
- break;
- case DocSimpleSect::Pre:
- m_t << "\\begin{DoxyPrecond}{";
- filter(theTranslator->trPrecondition());
- break;
- case DocSimpleSect::Post:
- m_t << "\\begin{DoxyPostcond}{";
- filter(theTranslator->trPostcondition());
- break;
- case DocSimpleSect::Copyright:
- m_t << "\\begin{DoxyCopyright}{";
- filter(theTranslator->trCopyright());
- break;
- case DocSimpleSect::Invar:
- m_t << "\\begin{DoxyInvariant}{";
- filter(theTranslator->trInvariant());
- break;
- case DocSimpleSect::Remark:
- m_t << "\\begin{DoxyRemark}{";
- filter(theTranslator->trRemarks());
- break;
- case DocSimpleSect::Attention:
- m_t << "\\begin{DoxyAttention}{";
- filter(theTranslator->trAttention());
- break;
- case DocSimpleSect::User:
- m_t << "\\begin{DoxyParagraph}{";
- break;
- case DocSimpleSect::Rcs:
- m_t << "\\begin{DoxyParagraph}{";
- break;
- case DocSimpleSect::Unknown: break;
- }
-
- // special case 1: user defined title
- if (s->type()!=DocSimpleSect::User && s->type()!=DocSimpleSect::Rcs)
- {
- m_t << "}\n";
- }
- else
- {
- m_insideItem=TRUE;
- }
-}
-
-void LatexDocVisitor::visitPost(DocSimpleSect *s)
-{
- if (m_hide) return;
- switch(s->type())
- {
- case DocSimpleSect::See:
- m_t << "\n\\end{DoxySeeAlso}\n";
- break;
- case DocSimpleSect::Return:
- m_t << "\n\\end{DoxyReturn}\n";
- break;
- case DocSimpleSect::Author:
- m_t << "\n\\end{DoxyAuthor}\n";
- break;
- case DocSimpleSect::Authors:
- m_t << "\n\\end{DoxyAuthor}\n";
- break;
- case DocSimpleSect::Version:
- m_t << "\n\\end{DoxyVersion}\n";
- break;
- case DocSimpleSect::Since:
- m_t << "\n\\end{DoxySince}\n";
- break;
- case DocSimpleSect::Date:
- m_t << "\n\\end{DoxyDate}\n";
- break;
- case DocSimpleSect::Note:
- m_t << "\n\\end{DoxyNote}\n";
- break;
- case DocSimpleSect::Warning:
- m_t << "\n\\end{DoxyWarning}\n";
- break;
- case DocSimpleSect::Pre:
- m_t << "\n\\end{DoxyPrecond}\n";
- break;
- case DocSimpleSect::Post:
- m_t << "\n\\end{DoxyPostcond}\n";
- break;
- case DocSimpleSect::Copyright:
- m_t << "\n\\end{DoxyCopyright}\n";
- break;
- case DocSimpleSect::Invar:
- m_t << "\n\\end{DoxyInvariant}\n";
- break;
- case DocSimpleSect::Remark:
- m_t << "\n\\end{DoxyRemark}\n";
- break;
- case DocSimpleSect::Attention:
- m_t << "\n\\end{DoxyAttention}\n";
- break;
- case DocSimpleSect::User:
- m_t << "\n\\end{DoxyParagraph}\n";
- break;
- case DocSimpleSect::Rcs:
- m_t << "\n\\end{DoxyParagraph}\n";
- break;
- default:
- break;
- }
-}
-
-void LatexDocVisitor::visitPre(DocTitle *)
-{
-}
-
-void LatexDocVisitor::visitPost(DocTitle *)
-{
- if (m_hide) return;
- m_insideItem=FALSE;
- m_t << "}\n";
-}
-
-void LatexDocVisitor::visitPre(DocSimpleList *)
-{
- if (m_hide) return;
- m_t << "\\begin{DoxyItemize}" << endl;
-}
-
-void LatexDocVisitor::visitPost(DocSimpleList *)
-{
- if (m_hide) return;
- m_t << "\\end{DoxyItemize}" << endl;
-}
-
-void LatexDocVisitor::visitPre(DocSimpleListItem *)
-{
- if (m_hide) return;
- m_t << "\\item ";
-}
-
-void LatexDocVisitor::visitPost(DocSimpleListItem *)
-{
-}
-
-void LatexDocVisitor::visitPre(DocSection *s)
-{
- if (m_hide) return;
- if (Config_getBool("PDF_HYPERLINKS"))
- {
- m_t << "\\hypertarget{" << s->file() << "_" << s->anchor() << "}{}";
- }
- m_t << "\\" << getSectionName(s->level()) << "{";
- filter(convertCharEntitiesToUTF8(s->title().data()));
- m_t << "}\\label{" << s->file() << "_" << s->anchor() << "}" << endl;
-}
-
-void LatexDocVisitor::visitPost(DocSection *)
-{
-}
-
-void LatexDocVisitor::visitPre(DocHtmlList *s)
-{
- if (m_hide) return;
- if (s->type()==DocHtmlList::Ordered)
- m_t << "\n\\begin{DoxyEnumerate}";
- else
- m_t << "\n\\begin{DoxyItemize}";
-}
-
-void LatexDocVisitor::visitPost(DocHtmlList *s)
-{
- if (m_hide) return;
- if (s->type()==DocHtmlList::Ordered)
- m_t << "\n\\end{DoxyEnumerate}";
- else
- m_t << "\n\\end{DoxyItemize}";
-}
-
-void LatexDocVisitor::visitPre(DocHtmlListItem *)
-{
- if (m_hide) return;
- m_t << "\n\\item ";
-}
-
-void LatexDocVisitor::visitPost(DocHtmlListItem *)
-{
-}
-
-//void LatexDocVisitor::visitPre(DocHtmlPre *)
-//{
-// m_t << "\\small\\begin{alltt}";
-// m_insidePre=TRUE;
-//}
-
-//void LatexDocVisitor::visitPost(DocHtmlPre *)
-//{
-// m_insidePre=FALSE;
-// m_t << "\\end{alltt}\\normalsize " << endl;
-//}
-
-void LatexDocVisitor::visitPre(DocHtmlDescList *dl)
-{
- if (m_hide) return;
- QCString val = dl->attribs().find("class");
- if (val=="reflist")
- {
- m_t << "\n\\begin{DoxyRefList}";
- }
- else
- {
- m_t << "\n\\begin{DoxyDescription}";
- }
-}
-
-void LatexDocVisitor::visitPost(DocHtmlDescList *dl)
-{
- if (m_hide) return;
- QCString val = dl->attribs().find("class");
- if (val=="reflist")
- {
- m_t << "\n\\end{DoxyRefList}";
- }
- else
- {
- m_t << "\n\\end{DoxyDescription}";
- }
-}
-
-void LatexDocVisitor::visitPre(DocHtmlDescTitle *)
-{
- if (m_hide) return;
- m_t << "\n\\item[";
- m_insideItem=TRUE;
-}
-
-void LatexDocVisitor::visitPost(DocHtmlDescTitle *)
-{
- if (m_hide) return;
- m_insideItem=FALSE;
- m_t << "]";
-}
-
-void LatexDocVisitor::visitPre(DocHtmlDescData *)
-{
-}
-
-void LatexDocVisitor::visitPost(DocHtmlDescData *)
-{
-}
-
-void LatexDocVisitor::visitPre(DocHtmlTable *t)
-{
- m_rowSpans.clear();
- m_insideTable=TRUE;
- if (m_hide) return;
- if (t->hasCaption())
- {
- m_t << "\\begin{table}[h]";
- }
- m_t << "\\begin{TabularC}{" << t->numColumns() << "}\n";
- m_numCols = t->numColumns();
- m_t << "\\hline\n";
-}
-
-void LatexDocVisitor::visitPost(DocHtmlTable *t)
-{
- m_insideTable=FALSE;
- if (m_hide) return;
- if (t->hasCaption())
- {
- m_t << "\\end{table}\n";
- }
- else
- {
- m_t << "\\end{TabularC}\n";
- }
-}
-
-void LatexDocVisitor::visitPre(DocHtmlCaption *)
-{
- if (m_hide) return;
- m_t << "\\end{TabularC}\n\\centering\n\\caption{";
-}
-
-void LatexDocVisitor::visitPost(DocHtmlCaption *)
-{
- if (m_hide) return;
- m_t << "}\n";
-}
-
-void LatexDocVisitor::visitPre(DocHtmlRow *r)
-{
- m_currentColumn = 0;
- if (r->isHeading()) m_t << "\\rowcolor{lightgray}";
-}
-
-void LatexDocVisitor::visitPost(DocHtmlRow *row)
-{
- if (m_hide) return;
-
- int c=m_currentColumn;
- while (c<=m_numCols) // end of row while inside a row span?
- {
- uint i;
- for (i=0;i<m_rowSpans.count();i++)
- {
- ActiveRowSpan *span = m_rowSpans.at(i);
- //printf(" founc row span: column=%d rs=%d cs=%d rowIdx=%d cell->rowIdx=%d\n",
- // span->column, span->rowSpan,span->colSpan,row->rowIndex(),span->cell->rowIndex());
- if (span->rowSpan>0 && span->column==c && // we are at a cell in a row span
- row->rowIndex()>span->cell->rowIndex() // but not the row that started the span
- )
- {
- m_t << "&";
- if (span->colSpan>1) // row span is also part of a column span
- {
- m_t << "\\multicolumn{" << span->colSpan << "}{";
- m_t << "p{(\\linewidth-\\tabcolsep*"
- << m_numCols << "-\\arrayrulewidth*"
- << row->visibleCells() << ")*"
- << span->colSpan <<"/"<< m_numCols << "}|}{}";
- }
- else // solitary row span
- {
- m_t << "\\multicolumn{1}{c|}{}";
- }
- }
- }
- c++;
- }
-
- m_t << "\\\\";
-
- int col = 1;
- uint i;
- for (i=0;i<m_rowSpans.count();i++)
- {
- ActiveRowSpan *span = m_rowSpans.at(i);
- if (span->rowSpan>0) span->rowSpan--;
- if (span->rowSpan<=0)
- {
- // inactive span
- }
- else if (span->column>col)
- {
- m_t << "\\cline{" << col << "-" << (span->column-1) << "}";
- col = span->column+span->colSpan;
- }
- else
- {
- col = span->column+span->colSpan;
- }
- }
-
- if (col <= m_numCols)
- {
- m_t << "\\cline{" << col << "-" << m_numCols << "}";
- }
-
- m_t << "\n";
-}
-
-void LatexDocVisitor::visitPre(DocHtmlCell *c)
-{
- if (m_hide) return;
-
- DocHtmlRow *row = 0;
- if (c->parent() && c->parent()->kind()==DocNode::Kind_HtmlRow)
- {
- row = (DocHtmlRow*)c->parent();
- }
-
- m_currentColumn++;
-
- //Skip columns that span from above.
- uint i;
- for (i=0;i<m_rowSpans.count();i++)
- {
- ActiveRowSpan *span = m_rowSpans.at(i);
- if (span->rowSpan>0 && span->column==m_currentColumn)
- {
- if (row && span->colSpan>1)
- {
- m_t << "\\multicolumn{" << span->colSpan << "}{";
- if (m_currentColumn /*c->columnIndex()*/==1) // add extra | for first column
- {
- m_t << "|";
- }
- m_t << "p{(\\linewidth-\\tabcolsep*"
- << m_numCols << "-\\arrayrulewidth*"
- << row->visibleCells() << ")*"
- << span->colSpan <<"/"<< m_numCols << "}|}{}";
- m_currentColumn+=span->colSpan;
- }
- else
- {
- m_currentColumn++;
- }
- m_t << "&";
- }
- }
-
-#if 0
- QMap<int, int>::Iterator it = m_rowspanIndices.find(m_currentColumn);
- if (it!=m_rowspanIndices.end() && it.data()>0)
- {
- m_t << "&";
- m_currentColumn++;
- it++;
- }
-#endif
-
- int cs = c->colSpan();
- if (cs>1 && row)
- {
- m_inColspan = TRUE;
- m_t << "\\multicolumn{" << cs << "}{";
- if (c->columnIndex()==1) // add extra | for first column
- {
- m_t << "|";
- }
- m_t << "p{(\\linewidth-\\tabcolsep*"
- << m_numCols << "-\\arrayrulewidth*"
- << row->visibleCells() << ")*"
- << cs <<"/"<< m_numCols << "}|}{";
- if (c->isHeading()) m_t << "\\cellcolor{lightgray}";
- }
- int rs = c->rowSpan();
- if (rs>0)
- {
- m_inRowspan = TRUE;
- //m_rowspanIndices[m_currentColumn] = rs;
- m_rowSpans.append(new ActiveRowSpan(c,rs,cs,m_currentColumn));
- m_t << "\\multirow{" << rs << "}{\\linewidth}{";
- }
- int a = c->alignment();
- if (a==DocHtmlCell::Center)
- {
- m_t << "\\PBS\\centering ";
- }
- else if (a==DocHtmlCell::Right)
- {
- m_t << "\\PBS\\raggedleft ";
- }
- if (c->isHeading())
- {
- m_t << "{\\bf ";
- }
- if (cs>1)
- {
- m_currentColumn+=cs-1;
- }
-}
-
-void LatexDocVisitor::visitPost(DocHtmlCell *c)
-{
- if (m_hide) return;
- if (c->isHeading())
- {
- m_t << "}";
- }
- if (m_inRowspan)
- {
- m_inRowspan = FALSE;
- m_t << "}";
- }
- if (m_inColspan)
- {
- m_inColspan = FALSE;
- m_t << "}";
- }
- if (!c->isLast()) m_t << "&";
-}
-
-void LatexDocVisitor::visitPre(DocInternal *)
-{
- if (m_hide) return;
- //m_t << "\\begin{DoxyInternal}{";
- //filter(theTranslator->trForInternalUseOnly());
- //m_t << "}\n";
-}
-
-void LatexDocVisitor::visitPost(DocInternal *)
-{
- if (m_hide) return;
- //m_t << "\\end{DoxyInternal}" << endl;
-}
-
-void LatexDocVisitor::visitPre(DocHRef *href)
-{
- if (m_hide) return;
- if (Config_getBool("PDF_HYPERLINKS"))
- {
- m_t << "\\href{";
- m_t << href->url();
- m_t << "}";
- }
- m_t << "{\\tt ";
-}
-
-void LatexDocVisitor::visitPost(DocHRef *)
-{
- if (m_hide) return;
- m_t << "}";
-}
-
-void LatexDocVisitor::visitPre(DocHtmlHeader *header)
-{
- if (m_hide) return;
- m_t << "\\" << getSectionName(header->level()) << "*{";
-}
-
-void LatexDocVisitor::visitPost(DocHtmlHeader *)
-{
- if (m_hide) return;
- m_t << "}";
-}
-
-void LatexDocVisitor::visitPre(DocImage *img)
-{
- if (img->type()==DocImage::Latex)
- {
- if (m_hide) return;
- if (img->hasCaption())
- {
- m_t << "\n\\begin{DoxyImage}\n";
- }
- else
- {
- m_t << "\n\\begin{DoxyImageNoCaption}\n"
- " \\mbox{";
- }
- QCString gfxName = img->name();
- if (gfxName.right(4)==".eps" || gfxName.right(4)==".pdf")
- {
- gfxName=gfxName.left(gfxName.length()-4);
- }
- m_t << "\\includegraphics";
- if (!img->width().isEmpty())
- {
- m_t << "[width=" << img->width() << "]";
- }
- else if (!img->height().isEmpty())
- {
- m_t << "[height=" << img->height() << "]";
- }
- m_t << "{" << gfxName << "}";
- if (img->hasCaption())
- {
- m_t << "\n\\caption{";
- }
- }
- else // other format -> skip
- {
- pushEnabled();
- m_hide=TRUE;
- }
-}
-
-void LatexDocVisitor::visitPost(DocImage *img)
-{
- if (img->type()==DocImage::Latex)
- {
- if (m_hide) return;
- m_t << "}\n"; // end mbox or caption
- if (img->hasCaption())
- {
- m_t << "\\end{DoxyImage}\n";
- }
- else{
- m_t << "\\end{DoxyImageNoCaption}\n";
- }
- }
- else // other format
- {
- popEnabled();
- }
-}
-
-void LatexDocVisitor::visitPre(DocDotFile *df)
-{
- if (m_hide) return;
- startDotFile(df->file(),df->width(),df->height(),df->hasCaption());
-}
-
-void LatexDocVisitor::visitPost(DocDotFile *df)
-{
- if (m_hide) return;
- endDotFile(df->hasCaption());
-}
-void LatexDocVisitor::visitPre(DocMscFile *df)
-{
- if (m_hide) return;
- startMscFile(df->file(),df->width(),df->height(),df->hasCaption());
-}
-
-void LatexDocVisitor::visitPost(DocMscFile *df)
-{
- if (m_hide) return;
- endMscFile(df->hasCaption());
-}
-void LatexDocVisitor::visitPre(DocLink *lnk)
-{
- if (m_hide) return;
- startLink(lnk->ref(),lnk->file(),lnk->anchor());
-}
-
-void LatexDocVisitor::visitPost(DocLink *lnk)
-{
- if (m_hide) return;
- endLink(lnk->ref(),lnk->file(),lnk->anchor());
-}
-
-void LatexDocVisitor::visitPre(DocRef *ref)
-{
- if (m_hide) return;
- // when ref->isSubPage()==TRUE we use ref->file() for HTML and
- // ref->anchor() for LaTeX/RTF
- if (ref->isSubPage())
- {
- startLink(ref->ref(),0,ref->anchor());
- }
- else
- {
- if (!ref->file().isEmpty()) startLink(ref->ref(),ref->file(),ref->anchor());
- }
- if (!ref->hasLinkText()) filter(ref->targetTitle());
-}
-
-void LatexDocVisitor::visitPost(DocRef *ref)
-{
- if (m_hide) return;
- if (ref->isSubPage())
- {
- endLink(ref->ref(),0,ref->anchor());
- }
- else
- {
- if (!ref->file().isEmpty()) endLink(ref->ref(),ref->file(),ref->anchor());
- }
-}
-
-void LatexDocVisitor::visitPre(DocSecRefItem *)
-{
- if (m_hide) return;
- m_t << "\\item \\contentsline{section}{";
-}
-
-void LatexDocVisitor::visitPost(DocSecRefItem *ref)
-{
- if (m_hide) return;
- m_t << "}{\\ref{" << ref->file() << "_" << ref->anchor() << "}}{}" << endl;
-}
-
-void LatexDocVisitor::visitPre(DocSecRefList *)
-{
- if (m_hide) return;
- m_t << "\\footnotesize" << endl;
- m_t << "\\begin{multicols}{2}" << endl;
- m_t << "\\begin{DoxyCompactList}" << endl;
-}
-
-void LatexDocVisitor::visitPost(DocSecRefList *)
-{
- if (m_hide) return;
- m_t << "\\end{DoxyCompactList}" << endl;
- m_t << "\\end{multicols}" << endl;
- m_t << "\\normalsize" << endl;
-}
-
-//void LatexDocVisitor::visitPre(DocLanguage *l)
-//{
-// QCString langId = Config_getEnum("OUTPUT_LANGUAGE");
-// if (l->id().lower()!=langId.lower())
-// {
-// pushEnabled();
-// m_hide = TRUE;
-// }
-//}
-//
-//void LatexDocVisitor::visitPost(DocLanguage *l)
-//{
-// QCString langId = Config_getEnum("OUTPUT_LANGUAGE");
-// if (l->id().lower()!=langId.lower())
-// {
-// popEnabled();
-// }
-//}
-
-void LatexDocVisitor::visitPre(DocParamSect *s)
-{
- if (m_hide) return;
- bool hasInOutSpecs = s->hasInOutSpecifier();
- bool hasTypeSpecs = s->hasTypeSpecifier();
- switch(s->type())
- {
- case DocParamSect::Param:
- m_t << "\n\\begin{DoxyParams}";
- if (hasInOutSpecs && hasTypeSpecs) m_t << "[2]"; // 2 extra cols
- else if (hasInOutSpecs || hasTypeSpecs) m_t << "[1]"; // 1 extra col
- m_t << "{";
- filter(theTranslator->trParameters());
- break;
- case DocParamSect::RetVal:
- m_t << "\n\\begin{DoxyRetVals}{";
- filter(theTranslator->trReturnValues());
- break;
- case DocParamSect::Exception:
- m_t << "\n\\begin{DoxyExceptions}{";
- filter(theTranslator->trExceptions());
- break;
- case DocParamSect::TemplateParam:
- /* TODO: add this
- filter(theTranslator->trTemplateParam()); break;
- */
- m_t << "\n\\begin{DoxyTemplParams}{";
- filter("Template Parameters");
- break;
- default:
- ASSERT(0);
- }
- m_t << "}\n";
-}
-
-void LatexDocVisitor::visitPost(DocParamSect *s)
-{
- if (m_hide) return;
- switch(s->type())
- {
- case DocParamSect::Param:
- m_t << "\\end{DoxyParams}\n";
- break;
- case DocParamSect::RetVal:
- m_t << "\\end{DoxyRetVals}\n";
- break;
- case DocParamSect::Exception:
- m_t << "\\end{DoxyExceptions}\n";
- break;
- case DocParamSect::TemplateParam:
- m_t << "\\end{DoxyTemplParams}\n";
- break;
- default:
- ASSERT(0);
- }
-}
-
-void LatexDocVisitor::visitPre(DocParamList *pl)
-{
- if (m_hide) return;
- DocParamSect::Type parentType = DocParamSect::Unknown;
- DocParamSect *sect = 0;
- if (pl->parent() && pl->parent()->kind()==DocNode::Kind_ParamSect)
- {
- parentType = ((DocParamSect*)pl->parent())->type();
- sect=(DocParamSect*)pl->parent();
- }
- bool useTable = parentType==DocParamSect::Param ||
- parentType==DocParamSect::RetVal ||
- parentType==DocParamSect::Exception ||
- parentType==DocParamSect::TemplateParam;
- if (!useTable)
- {
- m_t << "\\item[";
- }
- if (sect && sect->hasInOutSpecifier())
- {
- if (pl->direction()!=DocParamSect::Unspecified)
- {
- m_t << "\\mbox{\\tt ";
- if (pl->direction()==DocParamSect::In)
- {
- m_t << "in";
- }
- else if (pl->direction()==DocParamSect::Out)
- {
- m_t << "out";
- }
- else if (pl->direction()==DocParamSect::InOut)
- {
- m_t << "in,out";
- }
- m_t << "} ";
- }
- if (useTable) m_t << " & ";
- }
- if (sect && sect->hasTypeSpecifier())
- {
- QListIterator<DocNode> li(pl->paramTypes());
- DocNode *type;
- bool first=TRUE;
- for (li.toFirst();(type=li.current());++li)
- {
- if (!first) m_t << " | "; else first=FALSE;
- if (type->kind()==DocNode::Kind_Word)
- {
- visit((DocWord*)type);
- }
- else if (type->kind()==DocNode::Kind_LinkedWord)
- {
- visit((DocLinkedWord*)type);
- }
- }
- if (useTable) m_t << " & ";
- }
- m_t << "{\\em ";
- //QStrListIterator li(pl->parameters());
- //const char *s;
- QListIterator<DocNode> li(pl->parameters());
- DocNode *param;
- bool first=TRUE;
- for (li.toFirst();(param=li.current());++li)
- {
- if (!first) m_t << ","; else first=FALSE;
- m_insideItem=TRUE;
- if (param->kind()==DocNode::Kind_Word)
- {
- visit((DocWord*)param);
- }
- else if (param->kind()==DocNode::Kind_LinkedWord)
- {
- visit((DocLinkedWord*)param);
- }
- m_insideItem=FALSE;
- }
- m_t << "}";
- if (useTable)
- {
- m_t << " & ";
- }
- else
- {
- m_t << "]";
- }
-}
-
-void LatexDocVisitor::visitPost(DocParamList *pl)
-{
- if (m_hide) return;
- DocParamSect::Type parentType = DocParamSect::Unknown;
- if (pl->parent() && pl->parent()->kind()==DocNode::Kind_ParamSect)
- {
- parentType = ((DocParamSect*)pl->parent())->type();
- }
- bool useTable = parentType==DocParamSect::Param ||
- parentType==DocParamSect::RetVal ||
- parentType==DocParamSect::Exception ||
- parentType==DocParamSect::TemplateParam;
- if (useTable)
- {
- m_t << "\\\\" << endl
- << "\\hline" << endl;
- }
-}
-
-void LatexDocVisitor::visitPre(DocXRefItem *x)
-{
- if (m_hide) return;
- m_t << "\\begin{DoxyRefDesc}{";
- filter(x->title());
- m_t << "}" << endl;
- bool anonymousEnum = x->file()=="@";
- m_t << "\\item[";
- if (Config_getBool("PDF_HYPERLINKS") && !anonymousEnum)
- {
- m_t << "\\hyperlink{" << stripPath(x->file()) << "_" << x->anchor() << "}{";
- }
- else
- {
- m_t << "{\\bf ";
- }
- m_insideItem=TRUE;
- filter(x->title());
- m_insideItem=FALSE;
- m_t << "}]";
-}
-
-void LatexDocVisitor::visitPost(DocXRefItem *)
-{
- if (m_hide) return;
- m_t << "\\end{DoxyRefDesc}" << endl;
-}
-
-void LatexDocVisitor::visitPre(DocInternalRef *ref)
-{
- if (m_hide) return;
- startLink(0,ref->file(),ref->anchor());
-}
-
-void LatexDocVisitor::visitPost(DocInternalRef *ref)
-{
- if (m_hide) return;
- endLink(0,ref->file(),ref->anchor());
-}
-
-void LatexDocVisitor::visitPre(DocCopy *)
-{
-}
-
-void LatexDocVisitor::visitPost(DocCopy *)
-{
-}
-
-void LatexDocVisitor::visitPre(DocText *)
-{
-}
-
-void LatexDocVisitor::visitPost(DocText *)
-{
-}
-
-void LatexDocVisitor::visitPre(DocHtmlBlockQuote *)
-{
- if (m_hide) return;
- m_t << "\\begin{quotation}" << endl;
-}
-
-void LatexDocVisitor::visitPost(DocHtmlBlockQuote *)
-{
- if (m_hide) return;
- m_t << "\\end{quotation}" << endl;
-}
-
-void LatexDocVisitor::filter(const char *str)
-{
- filterLatexString(m_t,str,m_insideTabbing,m_insidePre,m_insideItem);
-}
-
-void LatexDocVisitor::startLink(const QCString &ref,const QCString &file,const QCString &anchor)
-{
- if (ref.isEmpty() && Config_getBool("PDF_HYPERLINKS")) // internal PDF link
- {
- if (ref.isEmpty()) {
- m_t << "\\hyperlink{";
- if (!file.isEmpty()) m_t << stripPath(file);
- if (!file.isEmpty() && !anchor.isEmpty()) m_t << "_";
- if (!anchor.isEmpty()) m_t << anchor;
- m_t << "}{";
- }
- else
- {
- QCString *dest;
- m_t << "\\href{";
- if ((dest=Doxygen::tagDestinationDict[ref])) m_t << *dest << "/";
- if (!file.isEmpty()) m_t << file << Doxygen::htmlFileExtension;
- if (!anchor.isEmpty()) m_t << "#" << anchor;
- m_t << "}{";
- }
- }
- else if (ref.isEmpty()) // internal non-PDF link
- {
- m_t << "\\doxyref{";
- }
- else // external link
- {
- m_t << "{\\bf ";
- }
-}
-
-void LatexDocVisitor::endLink(const QCString &ref,const QCString &file,const QCString &anchor)
-{
- m_t << "}";
- if (ref.isEmpty() && !Config_getBool("PDF_HYPERLINKS"))
- {
- m_t << "{";
- filter(theTranslator->trPageAbbreviation());
- m_t << "}{" << file;
- if (!anchor.isEmpty()) m_t << "_" << anchor;
- m_t << "}";
- }
-}
-
-void LatexDocVisitor::pushEnabled()
-{
- m_enabled.push(new bool(m_hide));
-}
-
-void LatexDocVisitor::popEnabled()
-{
- bool *v=m_enabled.pop();
- ASSERT(v!=0);
- m_hide = *v;
- delete v;
-}
-
-void LatexDocVisitor::startDotFile(const QCString &fileName,
- const QCString &width,
- const QCString &height,
- bool hasCaption
- )
-{
- QCString baseName=fileName;
- int i;
- if ((i=baseName.findRev('/'))!=-1)
- {
- baseName=baseName.right(baseName.length()-i-1);
- }
- if ((i=baseName.find('.'))!=-1)
- {
- baseName=baseName.left(i);
- }
- baseName.prepend("dot_");
- QCString outDir = Config_getString("LATEX_OUTPUT");
- QCString name = fileName;
- writeDotGraphFromFile(name,outDir,baseName,EPS);
- if (hasCaption)
- {
- m_t << "\n\\begin{DoxyImage}\n";
- }
- else
- {
- m_t << "\n\\begin{DoxyImageNoCaption}\n"
- " \\mbox{";
- }
- m_t << "\\includegraphics";
- if (!width.isEmpty())
- {
- m_t << "[width=" << width << "]";
- }
- else if (!height.isEmpty())
- {
- m_t << "[height=" << height << "]";
- }
- else
- {
- m_t << "[width=\\textwidth]";
- }
- m_t << "{" << baseName << "}";
-
- if (hasCaption)
- {
- m_t << "\n\\caption{";
- }
-}
-
-void LatexDocVisitor::endDotFile(bool hasCaption)
-{
- if (m_hide) return;
- m_t << "}\n"; // end caption or mbox
- if (hasCaption)
- {
- m_t << "\\end{DoxyImage}\n";
- }
- else
- {
- m_t << "\\end{DoxyImageNoCaption}\n";
- }
-}
-
-void LatexDocVisitor::startMscFile(const QCString &fileName,
- const QCString &width,
- const QCString &height,
- bool hasCaption
- )
-{
- QCString baseName=fileName;
- int i;
- if ((i=baseName.findRev('/'))!=-1)
- {
- baseName=baseName.right(baseName.length()-i-1);
- }
- if ((i=baseName.find('.'))!=-1)
- {
- baseName=baseName.left(i);
- }
- baseName.prepend("msc_");
-
- QCString outDir = Config_getString("LATEX_OUTPUT");
- writeMscGraphFromFile(fileName,outDir,baseName,MSC_EPS);
- if (hasCaption)
- {
- m_t << "\n\\begin{DoxyImage}\n";
- }
- else
- {
- m_t << "\n\\begin{DoxyImageNoCaption}\n"
- " \\mbox{";
- }
- m_t << "\\includegraphics";
- if (!width.isEmpty())
- {
- m_t << "[width=" << width << "]";
- }
- else if (!height.isEmpty())
- {
- m_t << "[height=" << height << "]";
- }
- else
- {
- m_t << "[width=\\textwidth]";
- }
- m_t << "{" << baseName << "}";
-
- if (hasCaption)
- {
- m_t << "\n\\caption{";
- }
-}
-
-void LatexDocVisitor::endMscFile(bool hasCaption)
-{
- if (m_hide) return;
- m_t << "}\n"; // end caption or mbox
- if (hasCaption)
- {
- m_t << "\\end{DoxyImage}\n";
- }
- else
- {
- m_t << "\\end{DoxyImageNoCaption}\n";
- }
-}
-
-
-void LatexDocVisitor::writeMscFile(const QCString &baseName)
-{
- QCString shortName = baseName;
- int i;
- if ((i=shortName.findRev('/'))!=-1)
- {
- shortName=shortName.right(shortName.length()-i-1);
- }
- QCString outDir = Config_getString("LATEX_OUTPUT");
- writeMscGraphFromFile(baseName+".msc",outDir,shortName,MSC_EPS);
- m_t << "\n\\begin{DoxyImageNoCaption}"
- " \\mbox{\\includegraphics";
- m_t << "{" << shortName << "}";
- m_t << "}\n"; // end mbox
- m_t << "\\end{DoxyImageNoCaption}\n";
-}
-
diff --git a/trunk/src/latexdocvisitor.h b/trunk/src/latexdocvisitor.h
deleted file mode 100644
index a4892ce..0000000
--- a/trunk/src/latexdocvisitor.h
+++ /dev/null
@@ -1,192 +0,0 @@
-/******************************************************************************
- *
- *
- *
- *
- * Copyright (C) 1997-2012 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.
- *
- */
-
-#ifndef _LATEXDOCVISITOR_H
-#define _LATEXDOCVISITOR_H
-
-#include "docvisitor.h"
-#include <qstack.h>
-#include <qcstring.h>
-#include <qlist.h>
-//#include <qmap.h>
-
-class FTextStream;
-class CodeOutputInterface;
-
-/*! @brief Concrete visitor implementation for LaTeX output. */
-class LatexDocVisitor : public DocVisitor
-{
- public:
- LatexDocVisitor(FTextStream &t,CodeOutputInterface &ci,
- const char *langExt,bool insideTabbing);
-
- //--------------------------------------
- // visitor functions for leaf nodes
- //--------------------------------------
-
- void visit(DocWord *);
- void visit(DocLinkedWord *);
- void visit(DocWhiteSpace *);
- void visit(DocSymbol *);
- void visit(DocURL *);
- void visit(DocLineBreak *);
- void visit(DocHorRuler *);
- void visit(DocStyleChange *);
- void visit(DocVerbatim *);
- void visit(DocAnchor *);
- void visit(DocInclude *);
- void visit(DocIncOperator *);
- void visit(DocFormula *);
- void visit(DocIndexEntry *);
- void visit(DocSimpleSectSep *);
- void visit(DocCite *);
-
- //--------------------------------------
- // visitor functions for compound nodes
- //--------------------------------------
-
- void visitPre(DocAutoList *);
- void visitPost(DocAutoList *);
- void visitPre(DocAutoListItem *);
- void visitPost(DocAutoListItem *);
- void visitPre(DocPara *);
- void visitPost(DocPara *);
- void visitPre(DocRoot *);
- void visitPost(DocRoot *);
- void visitPre(DocSimpleSect *);
- void visitPost(DocSimpleSect *);
- void visitPre(DocTitle *);
- void visitPost(DocTitle *);
- void visitPre(DocSimpleList *);
- void visitPost(DocSimpleList *);
- void visitPre(DocSimpleListItem *);
- void visitPost(DocSimpleListItem *);
- void visitPre(DocSection *s);
- void visitPost(DocSection *);
- void visitPre(DocHtmlList *s);
- void visitPost(DocHtmlList *s);
- void visitPre(DocHtmlListItem *);
- void visitPost(DocHtmlListItem *);
- //void visitPre(DocHtmlPre *);
- //void visitPost(DocHtmlPre *);
- void visitPre(DocHtmlDescList *);
- void visitPost(DocHtmlDescList *);
- void visitPre(DocHtmlDescTitle *);
- void visitPost(DocHtmlDescTitle *);
- void visitPre(DocHtmlDescData *);
- void visitPost(DocHtmlDescData *);
- void visitPre(DocHtmlTable *t);
- void visitPost(DocHtmlTable *t);
- void visitPre(DocHtmlCaption *);
- void visitPost(DocHtmlCaption *);
- void visitPre(DocHtmlRow *);
- void visitPost(DocHtmlRow *) ;
- void visitPre(DocHtmlCell *);
- void visitPost(DocHtmlCell *);
- void visitPre(DocInternal *);
- void visitPost(DocInternal *);
- void visitPre(DocHRef *);
- void visitPost(DocHRef *);
- void visitPre(DocHtmlHeader *);
- void visitPost(DocHtmlHeader *) ;
- void visitPre(DocImage *);
- void visitPost(DocImage *);
- void visitPre(DocDotFile *);
- void visitPost(DocDotFile *);
- void visitPre(DocMscFile *);
- void visitPost(DocMscFile *);
- void visitPre(DocLink *lnk);
- void visitPost(DocLink *);
- void visitPre(DocRef *ref);
- void visitPost(DocRef *);
- void visitPre(DocSecRefItem *);
- void visitPost(DocSecRefItem *);
- void visitPre(DocSecRefList *);
- void visitPost(DocSecRefList *);
- void visitPre(DocParamSect *);
- void visitPost(DocParamSect *);
- void visitPre(DocParamList *);
- void visitPost(DocParamList *);
- void visitPre(DocXRefItem *);
- void visitPost(DocXRefItem *);
- void visitPre(DocInternalRef *);
- void visitPost(DocInternalRef *);
- void visitPre(DocCopy *);
- void visitPost(DocCopy *);
- void visitPre(DocText *);
- void visitPost(DocText *);
- void visitPre(DocHtmlBlockQuote *);
- void visitPost(DocHtmlBlockQuote *);
-
- private:
-
- struct ActiveRowSpan
- {
- ActiveRowSpan(DocHtmlCell *c,int rs,int cs,int col)
- : cell(c), rowSpan(rs), colSpan(cs), column(col) {}
- DocHtmlCell *cell;
- int rowSpan;
- int colSpan;
- int column;
- };
-
- typedef QList<ActiveRowSpan> RowSpanList;
-
- //--------------------------------------
- // helper functions
- //--------------------------------------
-
- void filter(const char *str);
- void startLink(const QCString &ref,const QCString &file,
- const QCString &anchor);
- void endLink(const QCString &ref,const QCString &file,
- const QCString &anchor);
- QCString escapeMakeIndexChars(const char *s);
- void startDotFile(const QCString &fileName,const QCString &width,
- const QCString &height, bool hasCaption);
- void endDotFile(bool hasCaption);
-
- void startMscFile(const QCString &fileName,const QCString &width,
- const QCString &height, bool hasCaption);
- void endMscFile(bool hasCaption);
- void writeMscFile(const QCString &fileName);
-
- void pushEnabled();
- void popEnabled();
-
- //--------------------------------------
- // state variables
- //--------------------------------------
-
- FTextStream &m_t;
- CodeOutputInterface &m_ci;
- bool m_insidePre;
- bool m_insideItem;
- bool m_hide;
- bool m_insideTabbing;
- bool m_insideTable;
- int m_numCols;
- QStack<bool> m_enabled;
- QCString m_langExt;
- RowSpanList m_rowSpans;
- int m_currentColumn;
- bool m_inRowspan;
- bool m_inColspan;
-};
-
-#endif
diff --git a/trunk/src/latexgen.cpp b/trunk/src/latexgen.cpp
deleted file mode 100644
index ebf6a43..0000000
--- a/trunk/src/latexgen.cpp
+++ /dev/null
@@ -1,2623 +0,0 @@
-/******************************************************************************
- *
- *
- *
- * Copyright (C) 1997-2012 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.
- *
- */
-
-#include <stdlib.h>
-
-#include "qtbc.h"
-#include <qdir.h>
-#include "latexgen.h"
-#include "config.h"
-#include "message.h"
-#include "doxygen.h"
-#include "util.h"
-#include "diagram.h"
-#include "language.h"
-#include "version.h"
-#include "dot.h"
-#include "pagedef.h"
-#include "docparser.h"
-#include "latexdocvisitor.h"
-#include "dirdef.h"
-#include "cite.h"
-
-//static QCString filterTitle(const char *s)
-//{
-// QCString tmp=s,result;
-// uint i;for (i=0;i<tmp.length();i++)
-// {
-// char c=tmp.at(i);
-// switch(c)
-// {
-// case '#': result+="\\#"; break;
-// case '"': result+="\\\""; break;
-// case '%': result+="\\%"; break;
-// case '[': result+="{"; break;
-// case ']': result+="}"; break;
-// default: result+=c; break;
-// }
-// }
-// return result;
-//}
-
-
-
-LatexGenerator::LatexGenerator() : OutputGenerator()
-{
- dir=Config_getString("LATEX_OUTPUT");
- col=0;
- //printf("LatexGenerator::LatexGenerator() insideTabbing=FALSE\n");
- insideTabbing=FALSE;
- firstDescItem=TRUE;
- disableLinks=FALSE;
- m_indent=0;
- templateMemberItem = FALSE;
- m_prettyCode=Config_getBool("LATEX_SOURCE_CODE");
-}
-
-LatexGenerator::~LatexGenerator()
-{
-}
-
-static void writeLatexMakefile()
-{
- bool generateBib = !Doxygen::citeDict->isEmpty();
- QCString dir=Config_getString("LATEX_OUTPUT");
- QCString fileName=dir+"/Makefile";
- QFile file(fileName);
- if (!file.open(IO_WriteOnly))
- {
- err("Could not open file %s for writing\n",fileName.data());
- exit(1);
- }
- // inserted by KONNO Akihisa <konno@researchers.jp> 2002-03-05
- QCString latex_command = Config_getString("LATEX_CMD_NAME");
- QCString mkidx_command = Config_getString("MAKEINDEX_CMD_NAME");
- // end insertion by KONNO Akihisa <konno@researchers.jp> 2002-03-05
- FTextStream t(&file);
- if (!Config_getBool("USE_PDFLATEX")) // use plain old latex
- {
- t << "all: refman.dvi" << endl
- << endl
- << "ps: refman.ps" << endl
- << endl
- << "pdf: refman.pdf" << endl
- << endl
- << "ps_2on1: refman_2on1.ps" << endl
- << endl
- << "pdf_2on1: refman_2on1.pdf" << endl
- << endl
- << "refman.ps: refman.dvi" << endl
- << "\tdvips -o refman.ps refman.dvi" << endl
- << endl;
- t << "refman.pdf: refman.ps" << endl;
- t << "\tps2pdf refman.ps refman.pdf" << endl << endl;
- t << "refman.dvi: clean refman.tex doxygen.sty" << endl
- << "\techo \"Running latex...\"" << endl
- << "\t" << latex_command << " refman.tex" << endl
- << "\techo \"Running makeindex...\"" << endl
- << "\t" << mkidx_command << " refman.idx" << endl;
- if (generateBib)
- {
- t << "\techo \"Running bibtex...\"" << endl;
- t << "\tbibtex refman" << endl;
- t << "\techo \"Rerunning latex....\"" << endl;
- t << "\t" << latex_command << " refman.tex" << endl;
- }
- t << "\techo \"Rerunning latex....\"" << endl
- << "\t" << latex_command << " refman.tex" << endl
- << "\tlatex_count=5 ; \\" << endl
- << "\twhile egrep -s 'Rerun (LaTeX|to get cross-references right)' refman.log && [ $$latex_count -gt 0 ] ;\\" << endl
- << "\t do \\" << endl
- << "\t echo \"Rerunning latex....\" ;\\" << endl
- << "\t " << latex_command << " refman.tex ;\\" << endl
- << "\t latex_count=`expr $$latex_count - 1` ;\\" << endl
- << "\t done" << endl << endl
- << "refman_2on1.ps: refman.ps" << endl
- << "\tpsnup -2 refman.ps >refman_2on1.ps" << endl
- << endl
- << "refman_2on1.pdf: refman_2on1.ps" << endl
- << "\tps2pdf refman_2on1.ps refman_2on1.pdf" << endl;
- }
- else // use pdflatex for higher quality output
- {
- t << "all: refman.pdf" << endl << endl
- << "pdf: refman.pdf" << endl << endl;
- t << "refman.pdf: clean refman.tex" << endl;
- t << "\tpdflatex refman" << endl;
- t << "\t" << mkidx_command << " refman.idx" << endl;
- if (generateBib)
- {
- t << "\tbibtex refman" << endl;
- t << "\tpdflatex refman" << endl;
- }
- t << "\tpdflatex refman" << endl
- << "\tlatex_count=5 ; \\" << endl
- << "\twhile egrep -s 'Rerun (LaTeX|to get cross-references right)' refman.log && [ $$latex_count -gt 0 ] ;\\" << endl
- << "\t do \\" << endl
- << "\t echo \"Rerunning latex....\" ;\\" << endl
- << "\t pdflatex refman ;\\" << endl
- << "\t latex_count=`expr $$latex_count - 1` ;\\" << endl
- << "\t done" << endl << endl;
- }
-
- t << endl
- << "clean:" << endl
- << "\trm -f "
- << "*.ps *.dvi *.aux *.toc *.idx *.ind *.ilg *.log *.out *.brf *.blg *.bbl refman.pdf" << endl;
-}
-
-static void writeMakeBat()
-{
-#if defined(_MSC_VER)
- QCString dir=Config_getString("LATEX_OUTPUT");
- QCString fileName=dir+"/make.bat";
- QCString latex_command = Config_getString("LATEX_CMD_NAME");
- QCString mkidx_command = Config_getString("MAKEINDEX_CMD_NAME");
- QFile file(fileName);
- bool generateBib = !Doxygen::citeDict->isEmpty();
- if (!file.open(IO_WriteOnly))
- {
- err("Could not open file %s for writing\n",fileName.data());
- exit(1);
- }
- FTextStream t(&file);
- t << "del /s /f *.ps *.dvi *.aux *.toc *.idx *.ind *.ilg *.log *.out *.brf *.blg *.bbl refman.pdf\n\n";
- if (!Config_getBool("USE_PDFLATEX")) // use plain old latex
- {
- t << latex_command << " refman.tex\n";
- t << "echo ----\n";
- t << mkidx_command << " refman.idx\n";
- if (generateBib)
- {
- t << "bibtex refman\n";
- t << "echo ----\n";
- t << latex_command << " refman.tex\n";
- }
- t << "setlocal enabledelayedexpansion\n";
- t << "set count=5\n";
- t << ":repeat\n";
- t << "set content=X\n";
- t << "for /F \"tokens=*\" %%T in ( 'findstr /C:\"Rerun LaTeX\" refman.log' ) do set content=\"%%~T\"\n";
- t << "if !content! == X for /F \"tokens=*\" %%T in ( 'findstr /C:\"Rerun to get cross-references right\" refman.log' ) do set content=\"%%~T\"\n";
- t << "if !content! == X goto :skip\n";
- t << "set /a count-=1\n";
- t << "if !count! EQU 0 goto :skip\n\n";
- t << "echo ----\n";
- t << latex_command << " refman.tex\n";
- t << "goto :repeat\n";
- t << ":skip\n";
- t << "endlocal\n";
- t << "dvips -o refman.ps refman.dvi\n";
- t << "gswin32c -q -dNOPAUSE -dBATCH -sDEVICE=pdfwrite "
- "-sOutputFile=refman.pdf -c save pop -f refman.ps\n";
- }
- else // use pdflatex
- {
- t << "pdflatex refman\n";
- t << "echo ----\n";
- t << mkidx_command << " refman.idx\n";
- if (generateBib)
- {
- t << "bibtex refman" << endl;
- t << "pdflatex refman" << endl;
- }
- t << "echo ----\n";
- t << "pdflatex refman\n\n";
- t << "setlocal enabledelayedexpansion\n";
- t << "set count=5\n";
- t << ":repeat\n";
- t << "set content=X\n";
- t << "for /F \"tokens=*\" %%T in ( 'findstr /C:\"Rerun LaTeX\" refman.log' ) do set content=\"%%~T\"\n";
- t << "if !content! == X for /F \"tokens=*\" %%T in ( 'findstr /C:\"Rerun to get cross-references right\" refman.log' ) do set content=\"%%~T\"\n";
- t << "if !content! == X goto :skip\n";
- t << "set /a count-=1\n";
- t << "if !count! EQU 0 goto :skip\n\n";
- t << "echo ----\n";
- t << "pdflatex refman\n";
- t << "goto :repeat\n";
- t << ":skip\n";
- t << "endlocal\n";
- }
-#endif
-}
-
-void LatexGenerator::init()
-{
-
- QCString dir=Config_getString("LATEX_OUTPUT");
- QDir d(dir);
- if (!d.exists() && !d.mkdir(dir))
- {
- err("Could not create output directory %s\n",dir.data());
- exit(1);
- }
-
- writeLatexMakefile();
- writeMakeBat();
-
- createSubDirs(d);
-}
-
-static void writeDefaultHeaderPart1(FTextStream &t)
-{
- // part 1
-
- QCString paperName;
- if (Config_getBool("LATEX_BATCHMODE")) t << "\\batchmode" << endl;
- QCString &paperType=Config_getEnum("PAPER_TYPE");
- if (paperType=="a4wide")
- paperName="a4";
- else
- paperName=paperType;
- t << "\\documentclass";
- //"[" << paperName << "paper";
- //t << "]";
- t << "{";
- if (Config_getBool("COMPACT_LATEX")) t << "article"; else t << "book";
- t << "}\n";
- // the next package is obsolete (see bug 563698)
- //if (paperType=="a4wide") t << "\\usepackage{a4wide}\n";
- t <<
- "\\usepackage["<<paperName<<"paper,top=2.5cm,bottom=2.5cm,left=2.5cm,right=2.5cm]{geometry}\n"
- "\\usepackage{makeidx}\n"
- "\\usepackage{natbib}\n"
- "\\usepackage{graphicx}\n"
- "\\usepackage{multicol}\n"
- "\\usepackage{float}\n"
- "\\usepackage{listings}\n"
- "\\usepackage{color}\n"
- "\\usepackage{ifthen}\n"
- "\\usepackage[table]{xcolor}\n"
- "\\usepackage{textcomp}\n"
- "\\usepackage{alltt}\n"
- //"\\usepackage{ae,aecompl,aeguill}\n"
- ;
- //if (Config_getBool("USE_PDFLATEX"))
- //{
- // t << "\\usepackage{times}" << endl;
- //}
- if (Config_getBool("PDF_HYPERLINKS"))
- {
- t << "\\usepackage{ifpdf}" << endl
- << "\\ifpdf" << endl
- << "\\usepackage[pdftex," << endl
- << " pagebackref=true," << endl
- << " colorlinks=true," << endl
- << " linkcolor=blue," << endl
- << " unicode" << endl
- << " ]{hyperref}" << endl
- << "\\else" << endl
- << "\\usepackage[ps2pdf," << endl
- << " pagebackref=true," << endl
- << " colorlinks=true," << endl
- << " linkcolor=blue," << endl
- << " unicode" << endl
- << " ]{hyperref}" << endl
- << "\\usepackage{pspicture}" << endl
- << "\\fi" << endl;
- }
- // Try to get the command for switching on the language
- // support
- t << "\\usepackage[utf8]{inputenc}" << endl;
- QCString sLanguageSupportCommand(
- theTranslator->latexLanguageSupportCommand());
-
- if (!sLanguageSupportCommand.isEmpty())
- {
- // The command is not empty. Put it to the output.
- // if the command is empty, no output is needed.
- t << sLanguageSupportCommand << endl;
- }
- t << "\\usepackage{mathptmx}\n";
- t << "\\usepackage[scaled=.90]{helvet}\n";
- t << "\\usepackage{courier}\n";
- t << "\\usepackage{sectsty}\n";
- t << "\\usepackage[titles]{tocloft}\n";
- t << "\\usepackage{doxygen}\n";
-
- // define option for listings
- t << "\\lstset{language=C++,"
- "inputencoding=utf8,"
- "basicstyle=\\footnotesize,"
- "breaklines=true,"
- "breakatwhitespace=true,"
- "tabsize=" << Config_getInt("TAB_SIZE") <<","
- "numbers=left }" << endl;
-
- QStrList &extraPackages = Config_getList("EXTRA_PACKAGES");
- const char *s=extraPackages.first();
- while (s)
- {
- t << "\\usepackage{" << s << "}\n";
- s=extraPackages.next();
- }
- t << "\\makeindex\n"
- "\\setcounter{tocdepth}{3}\n"
- "\\renewcommand{\\footrulewidth}{0.4pt}\n"
- "\\renewcommand{\\familydefault}{\\sfdefault}\n"
- "\\hfuzz=15pt\n" // allow a bit of overflow to go unnoticed
- "\\setlength{\\emergencystretch}{15pt}\n"
- "\\hbadness=750\n"
- "\\tolerance=750\n"
- "\\begin{document}\n";
- static bool pdfHyperlinks = Config_getBool("PDF_HYPERLINKS");
- static bool usePDFLatex = Config_getBool("USE_PDFLATEX");
- if (pdfHyperlinks && usePDFLatex)
- {
- // to avoid duplicate page anchors due to reuse of same numbers for
- // the index (be it as roman numbers)
- t << "\\hypersetup{pageanchor=false,citecolor=blue}" << endl;
- }
- if (theTranslator->idLanguage()=="greek") t << "\\selectlanguage{greek}\n";
- t << "\\begin{titlepage}\n"
- "\\vspace*{7cm}\n"
- "\\begin{center}\n"
- "{\\Large ";
-
-}
-
-static void writeDefaultHeaderPart2(FTextStream &t)
-{
- // part 2
- t << "}\\\\" << endl
- << "\\vspace*{1cm}" << endl
- << "{\\large ";
-}
-
-static void writeDefaultHeaderPart3(FTextStream &t)
-{
- // part 3
- t << " Doxygen " << versionString << "}\\\\" << endl
- << "\\vspace*{0.5cm}" << endl
- << "{\\small " << dateToString(TRUE) << "}\\\\" << endl
- << "\\end{center}" << endl
- << "\\end{titlepage}" << endl;
- if (!Config_getBool("COMPACT_LATEX")) t << "\\clearemptydoublepage\n";
- t << "\\pagenumbering{roman}\n";
- t << "\\tableofcontents\n";
- if (!Config_getBool("COMPACT_LATEX")) t << "\\clearemptydoublepage\n";
- t << "\\pagenumbering{arabic}\n";
- static bool pdfHyperlinks = Config_getBool("PDF_HYPERLINKS");
- static bool usePDFLatex = Config_getBool("USE_PDFLATEX");
- if (pdfHyperlinks && usePDFLatex)
- {
- t << "\\hypersetup{pageanchor=true,citecolor=blue}" << endl;
- }
-}
-
-static void writeDefaultStyleSheetPart1(FTextStream &t)
-{
- // part 1
- t << "\\NeedsTeXFormat{LaTeX2e}\n"
- "\\ProvidesPackage{doxygen}\n\n";
- t << "% Packages used by this style file\n"
- "\\RequirePackage{alltt}\n"
- "\\RequirePackage{array}\n"
- "\\RequirePackage{calc}\n"
- "\\RequirePackage{color}\n"
- "\\RequirePackage{fancyhdr}\n"
- "\\RequirePackage{longtable}\n"
- "\\RequirePackage{verbatim}\n"
- "\\RequirePackage{ifthen}\n"
- "\\RequirePackage{xtab}\n"
- "\\RequirePackage{multirow}\n"
- "\\RequirePackage[table]{xcolor}\n\n";
-
- t << "% Use helvetica font instead of times roman\n"
- "\\RequirePackage{helvet}\n"
- "\\RequirePackage{sectsty}\n"
- "\\RequirePackage{tocloft}\n"
-// "\\allsectionsfont{\\usefont{OT1}{phv}{bc}{n}\\selectfont}\n"
-// "\\providecommand{\\cftchapfont}{%\n"
-// " \\fontsize{11}{13}\\usefont{OT1}{phv}{bc}{n}\\selectfont\n"
-// "}\n"
-// "\\providecommand{\\cftchappagefont}{%\n"
-// " \\fontsize{11}{13}\\usefont{OT1}{phv}{c}{n}\\selectfont\n"
-// "}\n"
-// "\\providecommand{\\cftsecfont}{%\n"
-// " \\fontsize{10}{12}\\usefont{OT1}{phv}{c}{n}\\selectfont\n"
-// "}\n"
-// "\\providecommand{\\cftsecpagefont}{%\n"
-// " \\fontsize{10}{12}\\usefont{OT1}{phv}{c}{n}\\selectfont\n"
-// "}\n"
-// "\\providecommand{\\cftsubsecfont}{%\n"
-// " \\fontsize{10}{12}\\usefont{OT1}{phv}{c}{n}\\selectfont\n"
-// "}\n"
-// "\\providecommand{\\cftsubsecpagefont}{%\n"
-// " \\fontsize{10}{12}\\usefont{OT1}{phv}{c}{n}\\selectfont\n"
-// "}\n"
-// "\\providecommand{\\cftsubsubsecfont}{%\n"
-// " \\fontsize{9}{11}\\usefont{OT1}{phv}{c}{n}\\selectfont\n"
-// "}\n"
-// "\\providecommand{\\cftsubsubsecpagefont}{%\n"
-// " \\fontsize{9}{11}\\usefont{OT1}{phv}{c}{n}\\selectfont\n"
-// "}\n"
-// "\\providecommand{\\cftparafont}{%\n"
-// " \\fontsize{9}{11}\\usefont{OT1}{phv}{c}{n}\\selectfont\n"
-// "}\n"
-// "\\providecommand{\\cftparapagefont}{%\n"
-// " \\fontsize{9}{11}\\usefont{OT1}{phv}{c}{n}\\selectfont\n"
-// "}\n"
-// "\\providecommand{\\cfttoctitlefont}{%\n"
-// " \\fontsize{20}{22}\\usefont{OT1}{phv}{b}{n}\\selectfont\n"
-// "}\n"
- "\\providecommand{\\rmdefault}{phv}\n"
- "\\providecommand{\\bfdefault}{bc}\n"
- "\n\n";
-
- t << "% Setup fancy headings\n"
- "\\pagestyle{fancyplain}\n"
- "\\newcommand{\\clearemptydoublepage}{%\n"
- " \\newpage{\\pagestyle{empty}\\cleardoublepage}%\n"
- "}\n";
- if (!Config_getBool("COMPACT_LATEX"))
- t << "\\renewcommand{\\chaptermark}[1]{%\n"
- " \\markboth{#1}{}%\n"
- "}\n";
- t << "\\renewcommand{\\sectionmark}[1]{%\n"
- " \\markright{\\thesection\\ #1}%\n"
- "}\n";
-
- //t << "\\lhead[\\fancyplain{}{\\bfseries\\thepage}]{%\n"
- // " \\fancyplain{}{\\bfseries\\rightmark}%\n"
- // "}\n";
- //t << "\\rhead[\\fancyplain{}{\\bfseries\\leftmark}]{%\n"
- // " \\fancyplain{}{\\bfseries\\thepage}%\n"
- // "}\n";
- //t << "\\rfoot[\\fancyplain{}{\\bfseries\\scriptsize%\n ";
- t << "\\fancyhead[LE]{\\fancyplain{}{\\bfseries\\thepage}}\n";
- t << "\\fancyhead[CE]{\\fancyplain{}{}}\n";
- t << "\\fancyhead[RE]{\\fancyplain{}{\\bfseries\\leftmark}}\n";
- t << "\\fancyhead[LO]{\\fancyplain{}{\\bfseries\\rightmark}}\n";
- t << "\\fancyhead[CO]{\\fancyplain{}{}}\n";
- t << "\\fancyhead[RO]{\\fancyplain{}{\\bfseries\\thepage}}\n";
-
- t << "\\fancyfoot[LE]{\\fancyplain{}{}}\n";
- t << "\\fancyfoot[CE]{\\fancyplain{}{}}\n";
- t << "\\fancyfoot[RE]{\\fancyplain{}{\\bfseries\\scriptsize ";
-}
-
-static void writeDefaultStyleSheetPart2(FTextStream &t)
-{
- t << "}}\n";
- t << "\\fancyfoot[LO]{\\fancyplain{}{\\bfseries\\scriptsize ";
- //t << "\\lfoot[]{\\fancyplain{}{\\bfseries\\scriptsize%\n ";
-
-}
-
-static void writeDefaultStyleSheetPart3(FTextStream &t)
-{
- static bool latexSourceCode = Config_getBool("LATEX_SOURCE_CODE");
- t << "}}\n";
- //t << "\\cfoot{}\n\n";
- t << "\\fancyfoot[CO]{\\fancyplain{}{}}\n";
- t << "\\fancyfoot[RO]{\\fancyplain{}{}}\n";
-
- t << "%---------- Internal commands used in this style file ----------------\n\n";
-
- t << "\\newcommand\\tabfill[1]{%\n";
- t << " \\dimen@\\linewidth%\n";
- t << " \\advance\\dimen@\\@totalleftmargin%\n";
- t << " \\advance\\dimen@-\\dimen\\@curtab%\n";
- t << " \\parbox[t]\\dimen@{\\raggedright #1\\ifhmode\\strut\\fi}%\n";
- t << "}\n\n";
-
- t << "\\newcommand{\\ensurespace}[1]{%\n";
- t << " \\begingroup\n";
- t << " \\setlength{\\dimen@}{#1}%\n";
- t << " \\vskip\\z@\\@plus\\dimen@\n";
- t << " \\penalty -100\\vskip\\z@\\@plus -\\dimen@\n";
- t << " \\vskip\\dimen@\n";
- t << " \\penalty 9999%\n";
- t << " \\vskip -\\dimen@\n";
- t << " \\vskip\\z@skip % hide the previous |\\vskip| from |\\addvspace|\n";
- t << " \\endgroup\n";
- t << "}\n\n";
-
- t << "% Generic environment used by all paragraph-based environments defined\n"
- "% below. Note that the command \\title{...} needs to be defined inside\n"
- "% those environments!\n"
- "\\newenvironment{DoxyDesc}[1]{%\n"
- //" \\filbreak%\n"
- " \\ensurespace{4\\baselineskip}%\n"
- " \\begin{list}{}%\n"
- " {%\n"
- " \\settowidth{\\labelwidth}{40pt}%\n"
- " \\setlength{\\leftmargin}{\\labelwidth}%\n"
- " \\setlength{\\parsep}{0pt}%\n"
- " \\setlength{\\itemsep}{-4pt}%\n"
- " \\renewcommand{\\makelabel}{\\entrylabel}%\n"
- " }%\n"
- " \\item[#1]%\n"
- "}{%\n"
- " \\end{list}%\n"
- "}\n\n";
- t << "%---------- Commands used by doxygen LaTeX output generator ----------\n\n";
- t << "% Used by <pre> ... </pre>\n"
- "\\newenvironment{DoxyPre}{%\n"
- " \\small%\n"
- " \\begin{alltt}%\n"
- "}{%\n"
- " \\end{alltt}%\n"
- " \\normalsize%\n"
- "}\n\n";
- t << "% Used by @code ... @endcode\n"
- "\\newenvironment{DoxyCode}{%\n";
- if (latexSourceCode)
- {
- t << "\n\n\\begin{scriptsize}\\begin{alltt}%" << endl;
- }
- else
- {
- t << " \\footnotesize%\n"
- " \\verbatim%\n";
- }
- t << "}{%\n";
- if (latexSourceCode)
- {
- t << "\\end{alltt}\\end{scriptsize}%" << endl;
- }
- else
- {
- t << " \\endverbatim%\n"
- " \\normalsize%\n";
- }
- t << "}\n\n";
- t << "% Used by @example, @include, @includelineno and @dontinclude\n"
- "\\newenvironment{DoxyCodeInclude}{%\n"
- " \\DoxyCode%\n"
- "}{%\n"
- " \\endDoxyCode%\n"
- "}\n\n";
- t << "% Used by @verbatim ... @endverbatim\n"
- "\\newenvironment{DoxyVerb}{%\n"
- " \\footnotesize%\n"
- " \\verbatim%\n"
- "}{%\n"
- " \\endverbatim%\n"
- " \\normalsize%\n"
- "}\n\n";
- t << "% Used by @verbinclude\n"
- "\\newenvironment{DoxyVerbInclude}{%\n"
- " \\DoxyVerb%\n"
- "}{%\n"
- " \\endDoxyVerb%\n"
- "}\n\n";
- t << "% Used by numbered lists (using '-#' or <ol> ... </ol>)\n"
- "\\newenvironment{DoxyEnumerate}{%\n"
- " \\enumerate%\n"
- "}{%\n"
- " \\endenumerate%\n"
- "}\n\n";
- t << "% Used by bullet lists (using '-', @li, @arg, or <ul> ... </ul>)\n"
- "\\newenvironment{DoxyItemize}{%\n"
- " \\itemize%\n"
- "}{%\n"
- " \\enditemize%\n"
- "}\n\n";
- t << "% Used by description lists (using <dl> ... </dl>)\n"
- "\\newenvironment{DoxyDescription}{%\n"
- " \\description%\n"
- "}{%\n"
- " \\enddescription%\n"
- "}\n\n";
- t << "% Used by @image, @dotfile, and @dot ... @enddot\n"
- "% (only if caption is specified)\n"
- "\\newenvironment{DoxyImage}{%\n"
- " \\begin{figure}[H]%\n"
- " \\begin{center}%\n"
- "}{%\n"
- " \\end{center}%\n"
- " \\end{figure}%\n"
- "}\n\n";
- t << "% Used by @image, @dotfile, @dot ... @enddot, and @msc ... @endmsc\n"
- "% (only if no caption is specified)\n"
- "\\newenvironment{DoxyImageNoCaption}{%\n"
- "}{%\n"
- "}\n\n";
- t << "% Used by @attention\n"
- "\\newenvironment{DoxyAttention}[1]{%\n"
- " \\begin{DoxyDesc}{#1}%\n"
- "}{%\n"
- " \\end{DoxyDesc}%\n"
- "}\n\n";
- t << "% Used by @author and @authors\n"
- "\\newenvironment{DoxyAuthor}[1]{%\n"
- " \\begin{DoxyDesc}{#1}%\n"
- "}{%\n"
- " \\end{DoxyDesc}%\n"
- "}\n\n";
- t << "% Used by @date\n"
- "\\newenvironment{DoxyDate}[1]{%\n"
- " \\begin{DoxyDesc}{#1}%\n"
- "}{%\n"
- " \\end{DoxyDesc}%\n"
- "}\n\n";
- t << "% Used by @invariant\n"
- "\\newenvironment{DoxyInvariant}[1]{%\n"
- " \\begin{DoxyDesc}{#1}%\n"
- "}{%\n"
- " \\end{DoxyDesc}%\n"
- "}\n\n";
- t << "% Used by @note\n"
- "\\newenvironment{DoxyNote}[1]{%\n"
- " \\begin{DoxyDesc}{#1}%\n"
- "}{%\n"
- " \\end{DoxyDesc}%\n"
- "}\n\n";
- t << "% Used by @post\n"
- "\\newenvironment{DoxyPostcond}[1]{%\n"
- " \\begin{DoxyDesc}{#1}%\n"
- "}{%\n"
- " \\end{DoxyDesc}%\n"
- "}\n\n";
- t << "% Used by @pre\n"
- "\\newenvironment{DoxyPrecond}[1]{%\n"
- " \\begin{DoxyDesc}{#1}%\n"
- "}{%\n"
- " \\end{DoxyDesc}%\n"
- "}\n\n";
- t << "% Used by @copyright\n"
- "\\newenvironment{DoxyCopyright}[1]{%\n"
- " \\begin{DoxyDesc}{#1}%\n"
- "}{%\n"
- " \\end{DoxyDesc}%\n"
- "}\n\n";
- t << "% Used by @remark\n"
- "\\newenvironment{DoxyRemark}[1]{%\n"
- " \\begin{DoxyDesc}{#1}%\n"
- "}{%\n"
- " \\end{DoxyDesc}%\n"
- "}\n\n";
- t << "% Used by @return\n"
- "\\newenvironment{DoxyReturn}[1]{%\n"
- " \\begin{DoxyDesc}{#1}%\n"
- "}{%\n"
- " \\end{DoxyDesc}%\n"
- "}\n\n";
- t << "% Used by @since\n"
- "\\newenvironment{DoxySince}[1]{%\n"
- " \\begin{DoxyDesc}{#1}%\n"
- "}{%\n"
- " \\end{DoxyDesc}%\n"
- "}\n\n";
- t << "% Used by @see\n"
- "\\newenvironment{DoxySeeAlso}[1]{%\n"
- " \\begin{DoxyDesc}{#1}%\n"
- "}{%\n"
- " \\end{DoxyDesc}%\n"
- "}\n\n";
- t << "% Used by @version\n"
- "\\newenvironment{DoxyVersion}[1]{%\n"
- " \\begin{DoxyDesc}{#1}%\n"
- "}{%\n"
- " \\end{DoxyDesc}%\n"
- "}\n\n";
- t << "% Used by @warning\n"
- "\\newenvironment{DoxyWarning}[1]{%\n"
- " \\begin{DoxyDesc}{#1}%\n"
- "}{%\n"
- " \\end{DoxyDesc}%\n"
- "}\n\n";
- t << "% Used by @internal\n"
- "\\newenvironment{DoxyInternal}[1]{%\n"
- " \\paragraph*{#1}%\n"
- "}{%\n"
- "}\n\n";
- t << "% Used by @par and @paragraph\n"
- "\\newenvironment{DoxyParagraph}[1]{%\n"
- " \\begin{list}{}%\n"
- " {%\n"
- " \\settowidth{\\labelwidth}{40pt}%\n"
- " \\setlength{\\leftmargin}{\\labelwidth}%\n"
- " \\setlength{\\parsep}{0pt}%\n"
- " \\setlength{\\itemsep}{-4pt}%\n"
- " \\renewcommand{\\makelabel}{\\entrylabel}%\n"
- " }%\n"
- " \\item[#1]%\n"
- "}{%\n"
- " \\end{list}%\n"
- "}\n\n";
- t << "% Used by parameter lists\n"
- "\\newenvironment{DoxyParams}[2][]{%\n"
- " \\begin{DoxyDesc}{#2}%\n"
- //" \\begin{description}%\n"
- " \\item[] \\hspace{\\fill} \\vspace{-40pt}%\n"
- //" \\definecolor{tableShade}{HTML}{F8F8F8}%\n"
- //" \\rowcolors{1}{white}{tableShade}%\n"
- //" \\arrayrulecolor{gray}%\n"
- " \\settowidth{\\labelwidth}{40pt}%\n"
- //" \\setlength{\\LTleft}{\\labelwidth}%\n"
- " \\setlength{\\LTleft}{0pt}%\n"
- " \\setlength{\\tabcolsep}{0.01\\textwidth}%\n"
- " \\ifthenelse{\\equal{#1}{}}%\n" // default: name, docs columns
- " {\\begin{longtable}{|>{\\raggedleft\\hspace{0pt}}p{0.15\\textwidth}|%\n"
- " p{0.815\\textwidth}|}}%\n"
- " {\\ifthenelse{\\equal{#1}{1}}%\n" // inout, name, docs columns, or type, name, docs columns
- " {\\begin{longtable}{|>{\\centering}p{0.10\\textwidth}|%\n"
- " >{\\raggedleft\\hspace{0pt}}p{0.15\\textwidth}|%\n"
- " p{0.685\\textwidth}|}}%\n"
- " {\\begin{longtable}{|>{\\centering}p{0.10\\textwidth}|%\n" // inout, type, name, docs columns
- " >{\\centering\\hspace{0pt}}p{0.15\\textwidth}|%\n"
- " >{\\raggedleft\\hspace{0pt}}p{0.15\\textwidth}|%\n"
- " p{0.515\\textwidth}|}}%\n"
- " }\\hline%\n"
- "}{%\n"
- " \\end{longtable}%\n"
- //" \\end{description}%\n"
- " \\end{DoxyDesc}%\n"
- "}\n\n";
- t << "% Used for fields of simple structs\n"
- "\\newenvironment{DoxyFields}[1]{%\n"
- " \\begin{DoxyDesc}{#1}%\n"
- " \\item[] \\hspace{\\fill} \\vspace{-40pt}%\n"
- " \\settowidth{\\labelwidth}{40pt}%\n"
- " \\setlength{\\LTleft}{0pt}%\n"
- " \\setlength{\\tabcolsep}{0.01\\textwidth}%\n"
- " \\begin{longtable}{|>{\\raggedleft\\hspace{0pt}}p{0.15\\textwidth}|%\n"
- " p{0.15\\textwidth}|%\n"
- " p{0.635\\textwidth}|}%\n"
- //"\\hline{\\sf\\textbf{Type}} & {\\sf\\textbf{Name}} & {\\sf\\textbf{Description}}\\endhead%\n"
- " \\hline%\n"
- "}{%\n"
- " \\end{longtable}%\n"
- //" \\end{description}%\n"
- " \\end{DoxyDesc}%\n"
- "}\n\n";
- t << "% is used for parameters within a detailed function description\n"
- "\\newenvironment{DoxyParamCaption}{%\n"
- " \\renewcommand{\\item}[2][]{##1 {\\em ##2}}%\n"
- " }{%\n"
- "}\n\n";
- t << "% Used by return value lists\n"
- "\\newenvironment{DoxyRetVals}[1]{%\n"
- " \\begin{DoxyDesc}{#1}%\n"
- " \\begin{description}%\n"
- " \\item[] \\hspace{\\fill} \\vspace{-25pt}%\n"
- //" \\definecolor{tableShade}{HTML}{F8F8F8}%\n"
- //" \\rowcolors{1}{white}{tableShade}%\n"
- //" \\arrayrulecolor{gray}%\n"
- " \\setlength{\\tabcolsep}{0.01\\textwidth}%\n"
- " \\begin{longtable}{|>{\\raggedleft\\hspace{0pt}}p{0.25\\textwidth}|%\n"
- " p{0.77\\textwidth}|}%\n"
- " \\hline%\n"
- "}{%\n"
- " \\end{longtable}%\n"
- " \\end{description}%\n"
- " \\end{DoxyDesc}%\n"
- "}\n\n";
- t << "% Used by exception lists\n"
- "\\newenvironment{DoxyExceptions}[1]{%\n"
- " \\begin{DoxyDesc}{#1}%\n"
- " \\begin{description}%\n"
- " \\item[] \\hspace{\\fill} \\vspace{-25pt}%\n"
- " \\definecolor{tableShade}{HTML}{F8F8F8}%\n"
- " \\rowcolors{1}{white}{tableShade}%\n"
- " \\arrayrulecolor{gray}%\n"
- " \\setlength{\\tabcolsep}{0.01\\textwidth}%\n"
- " \\begin{longtable}{|>{\\raggedleft\\hspace{0pt}}p{0.25\\textwidth}|%\n"
- " p{0.77\\textwidth}|}%\n"
- " \\hline%\n"
- "}{%\n"
- " \\end{longtable}%\n"
- " \\end{description}%\n"
- " \\end{DoxyDesc}%\n"
- "}\n\n";
- t << "% Used by template parameter lists\n"
- "\\newenvironment{DoxyTemplParams}[1]{%\n"
- " \\begin{DoxyDesc}{#1}%\n"
- " \\begin{description}%\n"
- " \\item[] \\hspace{\\fill} \\vspace{-25pt}%\n"
- " \\definecolor{tableShade}{HTML}{F8F8F8}%\n"
- " \\rowcolors{1}{white}{tableShade}%\n"
- " \\arrayrulecolor{gray}%\n"
- " \\setlength{\\tabcolsep}{0.01\\textwidth}%\n"
- " \\begin{longtable}{|>{\\raggedleft\\hspace{0pt}}p{0.25\\textwidth}|%\n"
- " p{0.77\\textwidth}|}%\n"
- " \\hline%\n"
- "}{%\n"
- " \\end{longtable}%\n"
- " \\end{description}%\n"
- " \\end{DoxyDesc}%\n"
- "}\n\n";
- t << "\\newcommand{\\doxyref}[3]{\\textbf{#1} (\\textnormal{#2}\\,\\pageref{#3})}\n";
- t << "\\newenvironment{DoxyCompactList}\n";
- t << "{\\begin{list}{}{\n";
- t << " \\setlength{\\leftmargin}{0.5cm}\n";
- t << " \\setlength{\\itemsep}{0pt}\n";
- t << " \\setlength{\\parsep}{0pt}\n";
- t << " \\setlength{\\topsep}{0pt}\n";
- t << " \\renewcommand{\\makelabel}{\\hfill}}}\n";
- t << "{\\end{list}}\n";
- t << "\\newenvironment{DoxyCompactItemize}\n";
- t << "{\n";
- t << " \\begin{itemize}\n";
- t << " \\setlength{\\itemsep}{-3pt}\n";
- t << " \\setlength{\\parsep}{0pt}\n";
- t << " \\setlength{\\topsep}{0pt}\n";
- t << " \\setlength{\\partopsep}{0pt}\n";
- t << "}\n";
- t << "{\\end{itemize}}\n";
- t << "\\newcommand{\\PBS}[1]{\\let\\temp=\\\\#1\\let\\\\=\\temp}\n";
- t << "\\newlength{\\tmplength}\n";
- t << "\\newenvironment{TabularC}[1]\n";
- t << "{\n";
- t << "\\setlength{\\tmplength}\n";
- t << " {\\linewidth/(#1)-\\tabcolsep*2-\\arrayrulewidth*(#1+1)/(#1)}\n";
- t << " \\par\\begin{xtabular*}{\\linewidth}\n";
- t << " {*{#1}{|>{\\PBS\\raggedright\\hspace{0pt}}p{\\the\\tmplength}}|}\n";
- t << "}\n";
- t << "{\\end{xtabular*}\\par}\n";
- t << "\\newcommand{\\entrylabel}[1]{\n";
- t << " {\\parbox[b]{\\labelwidth-4pt}{\\makebox[0pt][l]{%\n";
- t << " \\usefont{OT1}{phv}{bc}{n}\\color{darkgray}#1}\\vspace{1.5\\baselineskip}}}}\n";
- t << "\\newenvironment{Desc}\n";
- t << "{\\begin{list}{}\n";
- t << " {\n";
- t << " \\settowidth{\\labelwidth}{40pt}\n";
- t << " \\setlength{\\leftmargin}{\\labelwidth}\n";
- t << " \\setlength{\\parsep}{0pt}\n";
- t << " \\setlength{\\itemsep}{-4pt}\n";
- t << " \\renewcommand{\\makelabel}{\\entrylabel}\n";
- t << " }\n";
- t << "}\n";
- t << "{\\end{list}}\n";
-
- t << "\\newsavebox{\\xrefbox}\n";
- t << "\\newlength{\\xreflength}\n";
- t << "\\newcommand{\\xreflabel}[1]{%\n";
- t << " \\sbox{\\xrefbox}{#1}%\n";
- t << " \\setlength{\\xreflength}{\\wd\\xrefbox}%\n";
- t << " \\ifthenelse{\\xreflength>\\labelwidth}{%\n";
- t << " \\begin{minipage}{\\textwidth}%\n";
- t << " \\setlength{\\parindent}{0pt}%\n";
- t << " \\hangindent=15pt\\bfseries #1\\vspace{1.2\\itemsep}%\n";
- t << " \\end{minipage}%\n";
- t << " }{%\n";
- t << " \\parbox[b]{\\labelwidth}{\\makebox[0pt][l]{\\textbf{#1}}}%\n";
- t << " }}%\n";
- t << "\\newenvironment{DoxyRefList}{%\n";
- t << " \\begin{list}{}{%\n";
- t << " \\setlength{\\labelwidth}{10pt}%\n";
- t << " \\setlength{\\leftmargin}{\\labelwidth}%\n";
- t << " \\addtolength{\\leftmargin}{\\labelsep}%\n";
- t << " \\renewcommand{\\makelabel}{\\xreflabel}%\n";
- t << " }%\n";
- t << " }%\n";
- t << "{\\end{list}}\n";
- t << "\\newenvironment{DoxyRefDesc}[1]\n";
- t << "{\\begin{list}{}{%\n";
- t << " \\renewcommand\\makelabel[1]{\\textbf{##1}}\n";
- t << " \\settowidth\\labelwidth{\\makelabel{#1}}\n";
- t << " \\setlength\\leftmargin{\\labelwidth+\\labelsep}}}\n";
- t << "{\\end{list}}\n";
- t << "\\newenvironment{Indent}\n";
- t << " {\\begin{list}{}{\\setlength{\\leftmargin}{0.5cm}}\n";
- t << " \\item[]\\ignorespaces}\n";
- t << " {\\unskip\\end{list}}\n";
-
- t << "\\setlength{\\parindent}{0cm}\n";
- t << "\\setlength{\\parskip}{0.2cm}\n";
- t << "\\addtocounter{secnumdepth}{2}\n";
- // \sloppy should not be used, see bug 563698
- //t << "\\sloppy\n";
- t << "\\usepackage[T1]{fontenc}\n";
- t << "\\makeatletter\n";
- t << "\\renewcommand{\\paragraph}{\\@startsection{paragraph}{4}{0ex}%\n";
- t << " {-1.0ex}%\n";
- t << " {1.0ex}%\n";
- t << " {\\usefont{OT1}{phv}{bc}{n}\\color{darkgray}}}\n";
- t << "\\renewcommand{\\subparagraph}{\\@startsection{subparagraph}{5}{0ex}%\n";
- t << " {-1.0ex}%\n";
- t << " {1.0ex}%\n";
- t << " {\\usefont{OT1}{phv}{bc}{n}\\color{darkgray}}}\n";
- t << "\\makeatother\n";
- t << "\\allsectionsfont{\\usefont{OT1}{phv}{bc}{n}\\selectfont\\color{darkgray}}\n";
- t << "\\stepcounter{secnumdepth}\n";
- t << "\\stepcounter{tocdepth}\n";
- t << "\\definecolor{comment}{rgb}{0.5,0.0,0.0}\n";
- t << "\\definecolor{keyword}{rgb}{0.0,0.5,0.0}\n";
- t << "\\definecolor{keywordtype}{rgb}{0.38,0.25,0.125}\n";
- t << "\\definecolor{keywordflow}{rgb}{0.88,0.5,0.0}\n";
- t << "\\definecolor{preprocessor}{rgb}{0.5,0.38,0.125}\n";
- t << "\\definecolor{stringliteral}{rgb}{0.0,0.125,0.25}\n";
- t << "\\definecolor{charliteral}{rgb}{0.0,0.5,0.5}\n";
- t << "\\definecolor{vhdldigit}{rgb}{1.0,0.0,1.0}\n";
- t << "\\definecolor{vhdlkeyword}{rgb}{0.43,0.0,0.43}\n";
- t << "\\definecolor{vhdllogic}{rgb}{1.0,0.0,0.0}\n";
- t << "\\definecolor{vhdlchar}{rgb}{0.0,0.0,0.0}\n";
-}
-
-static void writeDefaultFooter(FTextStream &t)
-{
- Doxygen::citeDict->writeLatexBibliography(t);
- t << "\\printindex\n";
- t << "\\end{document}\n";
-}
-
-void LatexGenerator::writeHeaderFile(QFile &f)
-{
- FTextStream t(&f);
- writeDefaultHeaderPart1(t);
- t << "Your title here";
- writeDefaultHeaderPart2(t);
- t << "Generated by";
- writeDefaultHeaderPart3(t);
-}
-
-void LatexGenerator::writeFooterFile(QFile &f)
-{
- FTextStream t(&f);
- writeDefaultFooter(t);
-}
-
-void LatexGenerator::writeStyleSheetFile(QFile &f)
-{
- FTextStream t(&f);
-
- writeDefaultStyleSheetPart1(t);
- QCString &projectName = Config_getString("PROJECT_NAME");
-
- t << theTranslator->trGeneratedAt( dateToString(TRUE), projectName );
- t << " doxygen";
- //t << " " << theTranslator->trWrittenBy() << " ";
- //t << "Dimitri van Heesch \\copyright~1997-2012";
- writeDefaultStyleSheetPart2(t);
- t << theTranslator->trGeneratedAt( dateToString(TRUE), projectName );
- t << " doxygen";
- //t << " << theTranslator->trWrittenBy() << " ";
- //t << "Dimitri van Heesch \\copyright~1997-2012";
- writeDefaultStyleSheetPart3(t);
-}
-
-void LatexGenerator::startFile(const char *name,const char *,const char *)
-{
-#if 0
- setEncoding(Config_getString("LATEX_OUTPUT_ENCODING"));
-#endif
- QCString fileName=name;
- relPath = relativePathToRoot(fileName);
- sourceFileName = stripPath(fileName);
- if (fileName.right(4)!=".tex" && fileName.right(4)!=".sty") fileName+=".tex";
- startPlainFile(fileName);
-}
-
-void LatexGenerator::endFile()
-{
- endPlainFile();
- sourceFileName.resize(0);
-}
-
-//void LatexGenerator::writeIndex()
-//{
-// startFile("refman.tex");
-//}
-
-void LatexGenerator::startProjectNumber()
-{
- t << "\\\\[1ex]\\large ";
-}
-
-void LatexGenerator::startIndexSection(IndexSections is)
-{
- bool &compactLatex = Config_getBool("COMPACT_LATEX");
- QCString &latexHeader = Config_getString("LATEX_HEADER");
- switch (is)
- {
- case isTitlePageStart:
- {
- if (latexHeader.isEmpty())
- {
- writeDefaultHeaderPart1(t);
- }
- else
- {
- QCString header = fileToString(latexHeader);
- t << substituteKeywords(header,0,
- Config_getString("PROJECT_NAME"),
- Config_getString("PROJECT_NUMBER"),
- Config_getString("PROJECT_BRIEF"));
- }
- }
- break;
- case isTitlePageAuthor:
- if (latexHeader.isEmpty())
- {
- writeDefaultHeaderPart2(t);
- }
- break;
- case isMainPage:
- if (compactLatex) t << "\\section"; else t << "\\chapter";
- t << "{"; //Introduction}\n"
- break;
- //case isPackageIndex:
- // if (compactLatex) t << "\\section"; else t << "\\chapter";
- // t << "{"; //Package Index}\n"
- // break;
- case isModuleIndex:
- if (compactLatex) t << "\\section"; else t << "\\chapter";
- t << "{"; //Module Index}\n"
- break;
- case isDirIndex:
- if (compactLatex) t << "\\section"; else t << "\\chapter";
- t << "{"; //Directory Index}\n"
- break;
- case isNamespaceIndex:
- if (compactLatex) t << "\\section"; else t << "\\chapter";
- t << "{"; //Namespace Index}\"
- break;
- case isClassHierarchyIndex:
- if (compactLatex) t << "\\section"; else t << "\\chapter";
- t << "{"; //Hierarchical Index}\n"
- break;
- case isCompoundIndex:
- if (compactLatex) t << "\\section"; else t << "\\chapter";
- t << "{"; //Annotated Compound Index}\n"
- break;
- case isFileIndex:
- if (compactLatex) t << "\\section"; else t << "\\chapter";
- t << "{"; //Annotated File Index}\n"
- break;
- case isPageIndex:
- if (compactLatex) t << "\\section"; else t << "\\chapter";
- t << "{"; //Annotated Page Index}\n"
- break;
- case isModuleDocumentation:
- {
- GroupSDict::Iterator gli(*Doxygen::groupSDict);
- GroupDef *gd;
- bool found=FALSE;
- for (gli.toFirst();(gd=gli.current()) && !found;++gli)
- {
- if (!gd->isReference())
- {
- if (compactLatex) t << "\\section"; else t << "\\chapter";
- t << "{"; //Module Documentation}\n";
- found=TRUE;
- }
- }
- }
- break;
- case isDirDocumentation:
- {
- SDict<DirDef>::Iterator dli(*Doxygen::directories);
- DirDef *dd;
- bool found=FALSE;
- for (dli.toFirst();(dd=dli.current()) && !found;++dli)
- {
- if (dd->isLinkableInProject())
- {
- if (compactLatex) t << "\\section"; else t << "\\chapter";
- t << "{"; //Module Documentation}\n";
- found=TRUE;
- }
- }
- }
- break;
- case isNamespaceDocumentation:
- {
- NamespaceSDict::Iterator nli(*Doxygen::namespaceSDict);
- NamespaceDef *nd;
- bool found=FALSE;
- for (nli.toFirst();(nd=nli.current()) && !found;++nli)
- {
- if (nd->isLinkableInProject())
- {
- if (compactLatex) t << "\\section"; else t << "\\chapter";
- t << "{"; // Namespace Documentation}\n":
- found=TRUE;
- }
- }
- }
- break;
- case isClassDocumentation:
- {
- ClassSDict::Iterator cli(*Doxygen::classSDict);
- ClassDef *cd=0;
- bool found=FALSE;
- for (cli.toFirst();(cd=cli.current()) && !found;++cli)
- {
- if (cd->isLinkableInProject() &&
- cd->templateMaster()==0 &&
- !cd->isEmbeddedInOuterScope()
- )
- {
- if (compactLatex) t << "\\section"; else t << "\\chapter";
- t << "{"; //Compound Documentation}\n";
- found=TRUE;
- }
- }
- }
- break;
- case isFileDocumentation:
- {
- bool isFirst=TRUE;
- FileName *fn=Doxygen::inputNameList->first();
- while (fn)
- {
- FileDef *fd=fn->first();
- while (fd)
- {
- if (fd->isLinkableInProject())
- {
- if (isFirst)
- {
- if (compactLatex) t << "\\section"; else t << "\\chapter";
- t << "{"; //File Documentation}\n";
- isFirst=FALSE;
- break;
- }
- }
- fd=fn->next();
- }
- fn=Doxygen::inputNameList->next();
- }
- }
- break;
- case isExampleDocumentation:
- {
- if (compactLatex) t << "\\section"; else t << "\\chapter";
- t << "{"; //Example Documentation}\n";
- }
- break;
- case isPageDocumentation:
- {
- if (compactLatex) t << "\\section"; else t << "\\chapter";
- t << "{"; //Page Documentation}\n";
- }
- break;
- case isPageDocumentation2:
- break;
- case isEndIndex:
- break;
- }
-}
-
-void LatexGenerator::endIndexSection(IndexSections is)
-{
- //static bool compactLatex = Config_getBool("COMPACT_LATEX");
- static bool sourceBrowser = Config_getBool("SOURCE_BROWSER");
- static QCString latexHeader = Config_getString("LATEX_HEADER");
- static QCString latexFooter = Config_getString("LATEX_FOOTER");
- switch (is)
- {
- case isTitlePageStart:
- break;
- case isTitlePageAuthor:
- if (latexHeader.isEmpty())
- {
- writeDefaultHeaderPart3(t);
- }
- break;
- case isMainPage:
- {
- //QCString indexName=Config_getBool("GENERATE_TREEVIEW")?"main":"index";
- QCString indexName="index";
- t << "}\n\\label{index}";
- if (Config_getBool("PDF_HYPERLINKS")) t << "\\hypertarget{index}{}";
- t << "\\input{" << indexName << "}\n";
- }
- break;
- case isModuleIndex:
- t << "}\n\\input{modules}\n";
- break;
- case isDirIndex:
- t << "}\n\\input{dirs}\n";
- break;
- case isNamespaceIndex:
- t << "}\n\\input{namespaces}\n";
- break;
- case isClassHierarchyIndex:
- t << "}\n\\input{hierarchy}\n";
- break;
- case isCompoundIndex:
- t << "}\n\\input{annotated}\n";
- break;
- case isFileIndex:
- t << "}\n\\input{files}\n";
- break;
- case isPageIndex:
- t << "}\n\\input{pages}\n";
- break;
- case isModuleDocumentation:
- {
- GroupSDict::Iterator gli(*Doxygen::groupSDict);
- GroupDef *gd;
- bool found=FALSE;
- for (gli.toFirst();(gd=gli.current()) && !found;++gli)
- {
- if (!gd->isReference())
- {
- t << "}\n\\input{" << gd->getOutputFileBase() << "}\n";
- found=TRUE;
- }
- }
- for (;(gd=gli.current());++gli)
- {
- if (!gd->isReference())
- {
- //if (compactLatex) t << "\\input"; else t << "\\include";
- t << "\\include";
- t << "{" << gd->getOutputFileBase() << "}\n";
- }
- }
- }
- break;
- case isDirDocumentation:
- {
- SDict<DirDef>::Iterator dli(*Doxygen::directories);
- DirDef *dd;
- bool found=FALSE;
- for (dli.toFirst();(dd=dli.current()) && !found;++dli)
- {
- if (dd->isLinkableInProject())
- {
- t << "}\n\\input{" << dd->getOutputFileBase() << "}\n";
- found=TRUE;
- }
- }
- for (;(dd=dli.current());++dli)
- {
- if (dd->isLinkableInProject())
- {
- //if (compactLatex) t << "\\input"; else t << "\\include";
- t << "\\input";
- t << "{" << dd->getOutputFileBase() << "}\n";
- }
- }
- }
- break;
- case isNamespaceDocumentation:
- {
- NamespaceSDict::Iterator nli(*Doxygen::namespaceSDict);
- NamespaceDef *nd;
- bool found=FALSE;
- for (nli.toFirst();(nd=nli.current()) && !found;++nli)
- {
- if (nd->isLinkableInProject())
- {
- t << "}\n\\input{" << nd->getOutputFileBase() << "}\n";
- found=TRUE;
- }
- }
- while ((nd=nli.current()))
- {
- if (nd->isLinkableInProject())
- {
- //if (compactLatex) t << "\\input"; else t << "\\include";
- t << "\\input";
- t << "{" << nd->getOutputFileBase() << "}\n";
- }
- ++nli;
- }
- }
- break;
- case isClassDocumentation:
- {
- ClassSDict::Iterator cli(*Doxygen::classSDict);
- ClassDef *cd=0;
- bool found=FALSE;
- for (cli.toFirst();(cd=cli.current()) && !found;++cli)
- {
- if (cd->isLinkableInProject() &&
- cd->templateMaster()==0 &&
- !cd->isEmbeddedInOuterScope()
- )
- {
- t << "}\n\\input{" << cd->getOutputFileBase() << "}\n";
- found=TRUE;
- }
- }
- for (;(cd=cli.current());++cli)
- {
- if (cd->isLinkableInProject() &&
- cd->templateMaster()==0 &&
- !cd->isEmbeddedInOuterScope()
- )
- {
- //if (compactLatex) t << "\\input"; else t << "\\include";
- t << "\\input";
- t << "{" << cd->getOutputFileBase() << "}\n";
- }
- }
- }
- break;
- case isFileDocumentation:
- {
- bool isFirst=TRUE;
- FileName *fn=Doxygen::inputNameList->first();
- while (fn)
- {
- FileDef *fd=fn->first();
- while (fd)
- {
- if (fd->isLinkableInProject())
- {
- if (isFirst)
- {
- t << "}\n\\input{" << fd->getOutputFileBase() << "}\n";
- if (sourceBrowser && m_prettyCode && fd->generateSourceFile())
- {
- //t << "\\include{" << fd->getSourceFileBase() << "}\n";
- t << "\\input{" << fd->getSourceFileBase() << "}\n";
- }
- isFirst=FALSE;
- }
- else
- {
- //if (compactLatex) t << "\\input" ; else t << "\\include";
- t << "\\input" ;
- t << "{" << fd->getOutputFileBase() << "}\n";
- if (sourceBrowser && m_prettyCode && fd->generateSourceFile())
- {
- //t << "\\include{" << fd->getSourceFileBase() << "}\n";
- t << "\\input{" << fd->getSourceFileBase() << "}\n";
- }
- }
- }
- fd=fn->next();
- }
- fn=Doxygen::inputNameList->next();
- }
- }
- break;
- case isExampleDocumentation:
- {
- t << "}\n";
- PageSDict::Iterator pdi(*Doxygen::exampleSDict);
- PageDef *pd=pdi.toFirst();
- if (pd)
- {
- t << "\\input{" << pd->getOutputFileBase() << "}\n";
- }
- for (++pdi;(pd=pdi.current());++pdi)
- {
- //if (compactLatex) t << "\\input" ; else t << "\\include";
- t << "\\input";
- t << "{" << pd->getOutputFileBase() << "}\n";
- }
- }
- break;
- case isPageDocumentation:
- {
- t << "}\n";
-#if 0
- PageSDict::Iterator pdi(*Doxygen::pageSDict);
- PageDef *pd=pdi.toFirst();
- bool first=TRUE;
- for (pdi.toFirst();(pd=pdi.current());++pdi)
- {
- if (!pd->getGroupDef() && !pd->isReference())
- {
- if (compactLatex) t << "\\section"; else t << "\\chapter";
- t << "{" << pd->title();
- t << "}\n";
-
- if (compactLatex || first) t << "\\input" ; else t << "\\include";
- t << "{" << pd->getOutputFileBase() << "}\n";
- first=FALSE;
- }
- }
-#endif
- }
- break;
- case isPageDocumentation2:
- break;
- case isEndIndex:
- if (latexFooter.isEmpty())
- {
- writeDefaultFooter(t);
- }
- else
- {
- QCString footer = fileToString(latexFooter);
- t << substituteKeywords(footer,0,
- Config_getString("PROJECT_NAME"),
- Config_getString("PROJECT_NUMBER"),
- Config_getString("PROJECT_BRIEF"));
- }
- break;
- }
-}
-
-void LatexGenerator::writePageLink(const char *name, bool /*first*/)
-{
- //bool &compactLatex = Config_getBool("COMPACT_LATEX");
- // next is remove for bug615957
- //if (compactLatex || first) t << "\\input" ; else t << "\\include";
- t << "\\input" ;
- t << "{" << name << "}\n";
-}
-
-
-void LatexGenerator::writeStyleInfo(int part)
-{
- switch(part)
- {
- case 0:
- {
- //QCString pname=Config_getString("PROJECT_NAME").stripWhiteSpace();
- startPlainFile("doxygen.sty");
- writeDefaultStyleSheetPart1(t);
- }
- break;
- case 1:
- case 3:
- t << " Doxygen ";
- break;
- case 2:
- {
- writeDefaultStyleSheetPart2(t);
- }
- break;
- case 4:
- {
- writeDefaultStyleSheetPart3(t);
- endPlainFile();
- }
- break;
- }
-}
-
-void LatexGenerator::newParagraph()
-{
- t << endl << endl;
-}
-
-void LatexGenerator::startParagraph()
-{
- t << endl << endl;
-}
-
-void LatexGenerator::endParagraph()
-{
- t << endl << endl;
-}
-
-void LatexGenerator::writeString(const char *text)
-{
- t << text;
-}
-
-void LatexGenerator::startIndexItem(const char *ref,const char *fn)
-{
- t << "\\item ";
- if (!ref && fn)
- {
- t << "\\contentsline{section}{";
- }
-}
-
-void LatexGenerator::endIndexItem(const char *ref,const char *fn)
-{
- if (!ref && fn)
- {
- t << "}{\\pageref{" << fn << "}}{}" << endl;
- }
-}
-
-//void LatexGenerator::writeIndexFileItem(const char *,const char *text)
-//{
-// t << "\\item\\contentsline{section}{";
-// docify(text);
-// t << "}{\\pageref{" << text << "}}" << endl;
-//}
-
-
-void LatexGenerator::startHtmlLink(const char *url)
-{
- if (Config_getBool("PDF_HYPERLINKS"))
- {
- t << "\\href{";
- t << url;
- t << "}";
- }
- t << "{\\tt ";
-}
-
-void LatexGenerator::endHtmlLink()
-{
- t << "}";
-}
-
-//void LatexGenerator::writeMailLink(const char *url)
-//{
-// if (Config_getBool("PDF_HYPERLINKS"))
-// {
-// t << "\\href{mailto:";
-// t << url;
-// t << "}";
-// }
-// t << "{\\tt ";
-// docify(url);
-// t << "}";
-//}
-
-void LatexGenerator::writeStartAnnoItem(const char *,const char *,
- const char *path,const char *name)
-{
- t << "\\item\\contentsline{section}{\\bf ";
- if (path) docify(path);
- docify(name);
- t << "} ";
-}
-
-void LatexGenerator::writeEndAnnoItem(const char *name)
-{
- t << "}{\\pageref{" << name << "}}{}" << endl;
-}
-
-void LatexGenerator::startIndexKey()
-{
- t << "\\item\\contentsline{section}{";
-}
-
-void LatexGenerator::endIndexKey()
-{
-}
-
-void LatexGenerator::startIndexValue(bool hasBrief)
-{
- t << " ";
- if (hasBrief) t << "\\\\*";
-}
-
-void LatexGenerator::endIndexValue(const char *name,bool /*hasBrief*/)
-{
- //if (hasBrief) t << ")";
- t << "}{\\pageref{" << name << "}}{}" << endl;
-}
-
-//void LatexGenerator::writeClassLink(const char *,const char *,
-// const char *,const char *name)
-//{
-// t << "{\\bf ";
-// docify(name);
-// t << "}";
-//}
-
-void LatexGenerator::startTextLink(const char *f,const char *anchor)
-{
- if (!disableLinks && Config_getBool("PDF_HYPERLINKS"))
- {
- t << "\\hyperlink{";
- if (f) t << stripPath(f);
- if (anchor) t << "_" << anchor;
- t << "}{";
- }
- else
- {
- t << "{\\bf ";
- }
-}
-
-void LatexGenerator::endTextLink()
-{
- t << "}";
-}
-
-void LatexGenerator::writeObjectLink(const char *ref, const char *f,
- const char *anchor, const char *text)
-{
- if (!disableLinks && !ref && Config_getBool("PDF_HYPERLINKS"))
- {
- t << "\\hyperlink{";
- if (f) t << stripPath(f);
- if (f && anchor) t << "_";
- if (anchor) t << anchor;
- t << "}{";
- docify(text);
- t << "}";
- }
- else
- {
- t << "{\\bf ";
- docify(text);
- t << "}";
- }
-}
-
-void LatexGenerator::startPageRef()
-{
- t << " \\doxyref{}{";
-}
-
-void LatexGenerator::endPageRef(const char *clname, const char *anchor)
-{
- t << "}{";
- if (clname) t << clname;
- if (anchor) t << "_" << anchor;
- t << "}";
-}
-
-void LatexGenerator::writeCodeLink(const char *ref,const char *f,
- const char *anchor,const char *name,
- const char *)
-{
- static bool pdfHyperlinks = Config_getBool("PDF_HYPERLINKS");
- static bool usePDFLatex = Config_getBool("USE_PDFLATEX");
- int l = strlen(name);
- if (col+l>80)
- {
- t << "\n ";
- col=0;
- }
- if (m_prettyCode && !disableLinks && !ref && usePDFLatex && pdfHyperlinks)
- {
- t << "\\hyperlink{";
- if (f) t << stripPath(f);
- if (f && anchor) t << "_";
- if (anchor) t << anchor;
- t << "}{" << name << "}";
- }
- else
- {
- t << name;
- }
- col+=l;
-}
-
-void LatexGenerator::startTitleHead(const char *fileName)
-{
- static bool pdfHyperlinks = Config_getBool("PDF_HYPERLINKS");
- static bool usePDFLatex = Config_getBool("USE_PDFLATEX");
- if (usePDFLatex && pdfHyperlinks && fileName)
- {
- t << "\\hypertarget{" << stripPath(fileName) << "}{";
- }
- if (Config_getBool("COMPACT_LATEX"))
- {
- t << "\\subsection{";
- }
- else
- {
- t << "\\section{";
- }
-}
-
-void LatexGenerator::endTitleHead(const char *fileName,const char *name)
-{
- static bool pdfHyperlinks = Config_getBool("PDF_HYPERLINKS");
- static bool usePDFLatex = Config_getBool("USE_PDFLATEX");
- t << "}" << endl;
- if (name)
- {
- t << "\\label{" << fileName << "}\\index{";
- escapeLabelName(name);
- t << "@{";
- escapeMakeIndexChars(name);
- t << "}}" << endl;
- }
- if (usePDFLatex && pdfHyperlinks && fileName)
- {
- t << "}" << endl;
- }
-}
-
-void LatexGenerator::startTitle()
-{
- if (Config_getBool("COMPACT_LATEX"))
- {
- t << "\\subsection{";
- }
- else
- {
- t << "\\section{";
- }
-}
-
-void LatexGenerator::startGroupHeader(int extraIndentLevel)
-{
- if (Config_getBool("COMPACT_LATEX"))
- {
- extraIndentLevel++;
- }
-
- if (extraIndentLevel==3)
- {
- t << "\\subparagraph*{";
- }
- else if (extraIndentLevel==2)
- {
- t << "\\paragraph{";
- }
- else if (extraIndentLevel==1)
- {
- t << "\\subsubsection{";
- }
- else // extraIndentLevel==0
- {
- t << "\\subsection{";
- }
- disableLinks=TRUE;
-}
-
-void LatexGenerator::endGroupHeader(int)
-{
- disableLinks=FALSE;
- t << "}" << endl;
-}
-
-void LatexGenerator::startMemberHeader(const char *)
-{
- if (Config_getBool("COMPACT_LATEX"))
- {
- t << "\\subsubsection*{";
- }
- else
- {
- t << "\\subsection*{";
- }
- disableLinks=TRUE;
-}
-
-void LatexGenerator::endMemberHeader()
-{
- disableLinks=FALSE;
- t << "}" << endl;
-}
-
-void LatexGenerator::startMemberDoc(const char *clname,
- const char *memname,
- const char *,
- const char *title,
- bool showInline)
-{
- if (memname && memname[0]!='@')
- {
- t << "\\index{";
- if (clname)
- {
- escapeLabelName(clname);
- t << "@{";
- escapeMakeIndexChars(clname);
- t << "}!";
- }
- escapeLabelName(memname);
- t << "@{";
- escapeMakeIndexChars(memname);
- t << "}}" << endl;
-
- t << "\\index{";
- escapeLabelName(memname);
- t << "@{";
- escapeMakeIndexChars(memname);
- t << "}";
- if (clname)
- {
- t << "!" << clname << "@{";
- docify(clname);
- t << "}";
- }
- t << "}" << endl;
- }
- static const char *levelLab[] = { "subsubsection","paragraph","subparagraph", "subparagraph" };
- static bool compactLatex = Config_getBool("COMPACT_LATEX");
- int level=0;
- if (showInline) level+=2;
- if (compactLatex) level++;
- t << "\\" << levelLab[level];
-
- //if (Config_getBool("PDF_HYPERLINKS") && memname)
- //{
- // t << "[";
- // escapeMakeIndexChars(this,t,memname);
- // t << "]";
- //}
- t << "[{";
- escapeMakeIndexChars(title);
- t << "}]";
- t << "{\\setlength{\\rightskip}{0pt plus 5cm}";
- disableLinks=TRUE;
-}
-
-void LatexGenerator::endMemberDoc(bool)
-{
- disableLinks=FALSE;
- t << "}";
- //if (Config_getBool("COMPACT_LATEX")) t << "\\hfill";
-}
-
-void LatexGenerator::startDoxyAnchor(const char *fName,const char *,
- const char *anchor, const char *,
- const char *)
-{
- static bool pdfHyperlinks = Config_getBool("PDF_HYPERLINKS");
- static bool usePDFLatex = Config_getBool("USE_PDFLATEX");
- if (usePDFLatex && pdfHyperlinks)
- {
- t << "\\hypertarget{";
- if (fName) t << stripPath(fName);
- if (anchor) t << "_" << anchor;
- t << "}{";
- }
-}
-
-void LatexGenerator::endDoxyAnchor(const char *fName,const char *anchor)
-{
- static bool pdfHyperlinks = Config_getBool("PDF_HYPERLINKS");
- static bool usePDFLatex = Config_getBool("USE_PDFLATEX");
- if (usePDFLatex && pdfHyperlinks)
- {
- t << "}";
- }
- t << "\\label{";
- if (fName) t << fName;
- if (anchor) t << "_" << anchor;
- t << "}" << endl;
-}
-
-void LatexGenerator::writeAnchor(const char *fName,const char *name)
-{
- //printf("LatexGenerator::writeAnchor(%s,%s)\n",fName,name);
- t << "\\label{" << name << "}" << endl;
- static bool pdfHyperlinks = Config_getBool("PDF_HYPERLINKS");
- static bool usePDFLatex = Config_getBool("USE_PDFLATEX");
- if (usePDFLatex && pdfHyperlinks)
- {
- if (fName)
- {
- t << "\\hypertarget{" << stripPath(fName) << "_" << name << "}{}" << endl;
- }
- else
- {
- t << "\\hypertarget{" << name << "}{}" << endl;
- }
- }
-}
-
-
-//void LatexGenerator::writeLatexLabel(const char *clName,const char *anchor)
-//{
-// writeDoxyAnchor(0,clName,anchor,0);
-//}
-
-void LatexGenerator::addIndexItem(const char *s1,const char *s2)
-{
- if (s1)
- {
- t << "\\index{";
- escapeLabelName(s1);
- t << "@{";
- escapeMakeIndexChars(s1);
- t << "}";
- if (s2)
- {
- t << "!";
- escapeLabelName(s2);
- t << "@{";
- escapeMakeIndexChars(s2);
- t << "}";
- }
- t << "}";
- }
-}
-
-
-void LatexGenerator::startSection(const char *lab,const char *,SectionInfo::SectionType type)
-{
- static bool pdfHyperlinks = Config_getBool("PDF_HYPERLINKS");
- static bool usePDFLatex = Config_getBool("USE_PDFLATEX");
- if (usePDFLatex && pdfHyperlinks)
- {
- t << "\\hypertarget{" << stripPath(lab) << "}{}";
- }
- t << "\\";
- if (Config_getBool("COMPACT_LATEX"))
- {
- switch(type)
- {
- case SectionInfo::Page: t << "subsection"; break;
- case SectionInfo::Section: t << "subsubsection"; break;
- case SectionInfo::Subsection: t << "paragraph"; break;
- case SectionInfo::Subsubsection: t << "subparagraph"; break;
- case SectionInfo::Paragraph: t << "subparagraph"; break;
- default: ASSERT(0); break;
- }
- t << "{";
- }
- else
- {
- switch(type)
- {
- case SectionInfo::Page: t << "section"; break;
- case SectionInfo::Section: t << "subsection"; break;
- case SectionInfo::Subsection: t << "subsubsection"; break;
- case SectionInfo::Subsubsection: t << "paragraph"; break;
- case SectionInfo::Paragraph: t << "subparagraph"; break;
- default: ASSERT(0); break;
- }
- t << "{";
- }
-}
-
-void LatexGenerator::endSection(const char *lab,SectionInfo::SectionType)
-{
- t << "}\\label{" << lab << "}" << endl;
-}
-
-
-void LatexGenerator::docify(const char *str)
-{
- filterLatexString(t,str,insideTabbing,FALSE,FALSE);
-}
-
-void LatexGenerator::codify(const char *str)
-{
- if (str)
- {
- const char *p=str;
- char c;
- //char cs[5];
- int spacesToNextTabStop;
- static int tabSize = Config_getInt("TAB_SIZE");
- const int maxLineLen = 80;
- QCString result(4*maxLineLen+1); // worst case for 1 line of 4-byte chars
- int i;
- while ((c=*p))
- {
- switch(c)
- {
- case 0x0c: p++; // remove ^L
- break;
- case '\t': spacesToNextTabStop =
- tabSize - (col%tabSize);
- t << Doxygen::spaces.left(spacesToNextTabStop);
- col+=spacesToNextTabStop;
- p++;
- break;
- case '\n': t << '\n'; col=0; p++;
- break;
- default:
- i=0;
-
-#undef COPYCHAR
-// helper macro to copy a single utf8 character, dealing with multibyte chars.
-#define COPYCHAR() do { \
- result[i++]=c; p++; \
- if (c<0) /* multibyte utf-8 character */ \
- { \
- /* 1xxx.xxxx: >=2 byte character */ \
- result[i++]=*p++; \
- if (((uchar)c&0xE0)==0xE0) \
- { \
- /* 111x.xxxx: >=3 byte character */ \
- result[i++]=*p++; \
- } \
- if (((uchar)c&0xF0)==0xF0) \
- { \
- /* 1111.xxxx: 4 byte character */ \
- result[i++]=*p++; \
- } \
- } \
- col++; \
- } while(0)
-
- // gather characters until we find whitespace or are at
- // the end of a line
- COPYCHAR();
- if (col>=maxLineLen) // force line break
- {
- t << "\n ";
- col=0;
- }
- else // copy more characters
- {
- while (col<maxLineLen && (c=*p) &&
- c!=0x0c && c!='\t' && c!='\n' && c!=' '
- )
- {
- COPYCHAR();
- }
- if (col>=maxLineLen) // force line break
- {
- t << "\n ";
- col=0;
- }
- }
- result[i]=0; // add terminator
- if (m_prettyCode)
- {
- filterLatexString(t,result,insideTabbing,TRUE);
- }
- else
- {
- t << result;
- }
- break;
- }
- }
- }
-}
-
-void LatexGenerator::writeChar(char c)
-{
- char cs[2];
- cs[0]=c;
- cs[1]=0;
- docify(cs);
-}
-
-void LatexGenerator::startClassDiagram()
-{
- //if (Config_getBool("COMPACT_LATEX")) t << "\\subsubsection"; else t << "\\subsection";
- //t << "{";
-}
-
-void LatexGenerator::endClassDiagram(const ClassDiagram &d,
- const char *fileName,const char *)
-{
- d.writeFigure(t,dir,fileName);
-}
-
-
-void LatexGenerator::startAnonTypeScope(int indent)
-{
- if (indent==0)
- {
- t << "\\begin{tabbing}" << endl;
- t << "xx\\=xx\\=xx\\=xx\\=xx\\=xx\\=xx\\=xx\\=xx\\=\\kill" << endl;
- insideTabbing=TRUE;
- }
- m_indent=indent;
-}
-
-void LatexGenerator::endAnonTypeScope(int indent)
-{
- if (indent==0)
- {
- t << endl << "\\end{tabbing}";
- insideTabbing=FALSE;
- }
- m_indent=indent;
-}
-
-void LatexGenerator::startMemberTemplateParams()
-{
- if (templateMemberItem)
- {
- t << "{\\footnotesize ";
- }
-}
-
-void LatexGenerator::endMemberTemplateParams(const char *)
-{
- if (templateMemberItem)
- {
- t << "}\\\\";
- }
-}
-
-void LatexGenerator::startMemberItem(const char *,int annoType)
-{
- //printf("LatexGenerator::startMemberItem(%d)\n",annType);
- if (!insideTabbing)
- {
- t << "\\item " << endl;
- templateMemberItem = (annoType == 3);
- }
-}
-
-void LatexGenerator::endMemberItem()
-{
- if (insideTabbing)
- {
- t << "\\\\";
- }
- templateMemberItem = FALSE;
- t << endl;
-}
-
-void LatexGenerator::startMemberDescription(const char *)
-{
- if (!insideTabbing)
- {
- t << "\\begin{DoxyCompactList}\\small\\item\\em ";
- }
- else
- {
- for (int i=0;i<m_indent+2;i++) t << "\\>";
- t << "{\\em ";
- }
-}
-
-void LatexGenerator::endMemberDescription()
-{
- if (!insideTabbing)
- {
- //t << "\\item\\end{DoxyCompactList}";
- t << "\\end{DoxyCompactList}";
- }
- else
- {
- t << "}\\\\\n";
- }
-}
-
-
-void LatexGenerator::writeNonBreakableSpace(int)
-{
- //printf("writeNonBreakbleSpace()\n");
- if (insideTabbing)
- {
- t << "\\>";
- }
- else
- {
- t << "~";
- }
-}
-
-void LatexGenerator::startMemberList()
-{
- if (!insideTabbing)
- {
- t << "\\begin{DoxyCompactItemize}" << endl;
- }
-}
-
-void LatexGenerator::endMemberList()
-{
- //printf("LatexGenerator::endMemberList(%d)\n",insideTabbing);
- if (!insideTabbing)
- {
- t << "\\end{DoxyCompactItemize}" << endl;
- }
-}
-
-
-void LatexGenerator::startMemberGroupHeader(bool hasHeader)
-{
- if (hasHeader) t << "\\begin{Indent}";
- t << "{\\bf ";
- // changed back to rev 756 due to bug 660501
- //if (Config_getBool("COMPACT_LATEX"))
- //{
- // t << "\\subparagraph*{";
- //}
- //else
- //{
- // t << "\\paragraph*{";
- //}
-}
-
-void LatexGenerator::endMemberGroupHeader()
-{
- // changed back to rev 756 due to bug 660501
- t << "}\\par" << endl;
- //t << "}" << endl;
-}
-
-void LatexGenerator::startMemberGroupDocs()
-{
- t << "{\\em ";
-}
-
-void LatexGenerator::endMemberGroupDocs()
-{
- t << "}";
-}
-
-void LatexGenerator::startMemberGroup()
-{
-}
-
-void LatexGenerator::endMemberGroup(bool hasHeader)
-{
- if (hasHeader)t << "\\end{Indent}";
- t << endl;
-}
-
-void LatexGenerator::startDotGraph()
-{
- newParagraph();
-}
-
-void LatexGenerator::endDotGraph(const DotClassGraph &g)
-{
- g.writeGraph(t,EPS,Config_getString("LATEX_OUTPUT"),fileName,relPath);
-}
-
-void LatexGenerator::startInclDepGraph()
-{
-}
-
-void LatexGenerator::endInclDepGraph(const DotInclDepGraph &g)
-{
- g.writeGraph(t,EPS,Config_getString("LATEX_OUTPUT"),fileName,relPath);
-}
-
-void LatexGenerator::startGroupCollaboration()
-{
-}
-
-void LatexGenerator::endGroupCollaboration(const DotGroupCollaboration &g)
-{
- g.writeGraph(t,EPS,Config_getString("LATEX_OUTPUT"),fileName,relPath);
-}
-
-void LatexGenerator::startCallGraph()
-{
-}
-
-void LatexGenerator::endCallGraph(const DotCallGraph &g)
-{
- g.writeGraph(t,EPS,Config_getString("LATEX_OUTPUT"),fileName,relPath);
-}
-
-void LatexGenerator::startDirDepGraph()
-{
-}
-
-void LatexGenerator::endDirDepGraph(const DotDirDeps &g)
-{
- g.writeGraph(t,EPS,Config_getString("LATEX_OUTPUT"),fileName,relPath);
-}
-
-void LatexGenerator::startDescription()
-{
- t << "\\begin{description}" << endl;
-}
-
-void LatexGenerator::endDescription()
-{
- t << "\\end{description}" << endl;
- firstDescItem=TRUE;
-}
-
-void LatexGenerator::startDescItem()
-{
- firstDescItem=TRUE;
- t << "\\item[";
-}
-
-void LatexGenerator::endDescItem()
-{
- if (firstDescItem)
- {
- t << "]" << endl;
- firstDescItem=FALSE;
- }
- else
- {
- lineBreak();
- }
-}
-
-void LatexGenerator::startSimpleSect(SectionTypes,const char *file,
- const char *anchor,const char *title)
-{
- t << "\\begin{Desc}\n\\item[";
- if (file)
- {
- writeObjectLink(0,file,anchor,title);
- }
- else
- {
- docify(title);
- }
- t << "]";
-}
-
-void LatexGenerator::endSimpleSect()
-{
- t << "\\end{Desc}" << endl;
-}
-
-void LatexGenerator::startParamList(ParamListTypes,const char *title)
-{
- t << "\\begin{Desc}\n\\item[";
- docify(title);
- t << "]";
-}
-
-void LatexGenerator::endParamList()
-{
- t << "\\end{Desc}" << endl;
-}
-
-void LatexGenerator::startParameterList(bool openBracket)
-{
- /* start of ParameterType ParameterName list */
- if (openBracket) t << "(";
- t << endl << "\\begin{DoxyParamCaption}" << endl;
-}
-
-void LatexGenerator::endParameterList()
-{
-}
-
-void LatexGenerator::startParameterType(bool first,const char *key)
-{
- t << "\\item[{";
- if (!first && key) t << key;
-}
-
-void LatexGenerator::endParameterType()
-{
- t << "}]";
-}
-
-void LatexGenerator::startParameterName(bool /*oneArgOnly*/)
-{
- t << "{";
-}
-
-void LatexGenerator::endParameterName(bool last,bool /* emptyList */,bool closeBracket)
-{
- t << "}" << endl;
-
- if (last)
- {
- t << "\\end{DoxyParamCaption}" << endl;
- if (closeBracket) t << ")";
- }
-}
-
-
-void LatexGenerator::printDoc(DocNode *n,const char *langExt)
-{
- LatexDocVisitor *visitor = new LatexDocVisitor(t,*this,langExt,insideTabbing);
- n->accept(visitor);
- delete visitor;
-}
-
-void LatexGenerator::startConstraintList(const char *header)
-{
- t << "\\begin{Desc}\n\\item[";
- docify(header);
- t << "]";
- t << "\\begin{description}" << endl;
-}
-
-void LatexGenerator::startConstraintParam()
-{
- t << "\\item[{\\em ";
-}
-
-void LatexGenerator::endConstraintParam()
-{
-}
-
-void LatexGenerator::startConstraintType()
-{
- t << "} : {\\em ";
-}
-
-void LatexGenerator::endConstraintType()
-{
- t << "}]";
-}
-
-void LatexGenerator::startConstraintDocs()
-{
-}
-
-void LatexGenerator::endConstraintDocs()
-{
-}
-
-void LatexGenerator::endConstraintList()
-{
- t << "\\end{description}" << endl;
- t << "\\end{Desc}" << endl;
-}
-
-void LatexGenerator::escapeLabelName(const char *s)
-{
- if (s==0) return;
- const char *p=s;
- char c;
- QCString result(strlen(s)+1); // worst case allocation
- int i;
- while ((c=*p++))
- {
- switch (c)
- {
- case '%': t << "\\%"; break;
- // NOTE: adding a case here, means adding it to while below as well!
- default:
- i=0;
- // collect as long string as possible, before handing it to docify
- result[i++]=c;
- while ((c=*p) && c!='%')
- {
- result[i++]=c;
- p++;
- }
- result[i]=0;
- docify(result);
- break;
- }
- }
-}
-
-void LatexGenerator::escapeMakeIndexChars(const char *s)
-{
- if (s==0) return;
- const char *p=s;
- char c;
- QCString result(strlen(s)+1); // worst case allocation
- int i;
- while ((c=*p++))
- {
- switch (c)
- {
- case '"': t << "\"\""; break;
- case '@': t << "\"@"; break;
- case '[': t << "["; break;
- case ']': t << "]"; break;
- // NOTE: adding a case here, means adding it to while below as well!
- default:
- i=0;
- // collect as long string as possible, before handing it to docify
- result[i++]=c;
- while ((c=*p) && c!='"' && c!='@' && c!='[' && c!=']')
- {
- result[i++]=c;
- p++;
- }
- result[i]=0;
- docify(result);
- break;
- }
- }
-}
-
-void LatexGenerator::startCodeFragment()
-{
- t << "\n\\begin{DoxyCode}\n";
-}
-
-void LatexGenerator::endCodeFragment()
-{
- t << "\\end{DoxyCode}\n";
-}
-
-void LatexGenerator::writeLineNumber(const char *ref,const char *fileName,const char *anchor,int l)
-{
- if (m_prettyCode)
- {
- QCString lineNumber;
- lineNumber.sprintf("%05d",l);
-
- if (fileName && !sourceFileName.isEmpty())
- {
- QCString lineAnchor;
- lineAnchor.sprintf("_l%05d",l);
- lineAnchor.prepend(sourceFileName);
- startCodeAnchor(lineAnchor);
- writeCodeLink(ref,fileName,anchor,lineNumber,0);
- endCodeAnchor();
- }
- else
- {
- codify(lineNumber);
- }
- t << " ";
- }
- else
- {
- t << l << " ";
- }
-}
-
-void LatexGenerator::startCodeLine()
-{
- col=0;
-}
-
-void LatexGenerator::endCodeLine()
-{
- codify("\n");
-}
-
-void LatexGenerator::startFontClass(const char *name)
-{
- if (!m_prettyCode) return;
- t << "\\textcolor{" << name << "}{";
-}
-
-void LatexGenerator::endFontClass()
-{
- if (!m_prettyCode) return;
- t << "}";
-}
-
-void LatexGenerator::startCodeAnchor(const char *name)
-{
- static bool usePDFLatex = Config_getBool("USE_PDFLATEX");
- static bool pdfHyperlinks = Config_getBool("PDF_HYPERLINKS");
- if (!m_prettyCode) return;
- if (usePDFLatex && pdfHyperlinks)
- {
- t << "\\hypertarget{" << stripPath(name) << "}{}";
- }
-}
-
-void LatexGenerator::endCodeAnchor()
-{
-}
-
-void LatexGenerator::startInlineHeader()
-{
- if (Config_getBool("COMPACT_LATEX"))
- {
- t << "\\paragraph*{";
- }
- else
- {
- t << "\\subsubsection*{";
- }
-}
-
-void LatexGenerator::endInlineHeader()
-{
- t << "}" << endl;
-}
-
-void LatexGenerator::lineBreak(const char *)
-{
- if (insideTabbing)
- {
- t << "\\\\\n";
- }
- else
- {
- t << "\\\\*\n";
- }
-}
-
-void LatexGenerator::startMemberDocSimple()
-{
- t << "\\begin{DoxyFields}{";
- docify(theTranslator->trCompoundMembers());
- t << "}" << endl;
-}
-
-void LatexGenerator::endMemberDocSimple()
-{
- t << "\\end{DoxyFields}" << endl;
-}
-
-void LatexGenerator::startInlineMemberType()
-{
-}
-
-void LatexGenerator::endInlineMemberType()
-{
- t << "&" << endl;
-}
-
-void LatexGenerator::startInlineMemberName()
-{
-}
-
-void LatexGenerator::endInlineMemberName()
-{
- t << "&" << endl;
-}
-
-void LatexGenerator::startInlineMemberDoc()
-{
-}
-
-void LatexGenerator::endInlineMemberDoc()
-{
- t << "\\\\\n\\hline\n" << endl;
-}
-
diff --git a/trunk/src/latexgen.h b/trunk/src/latexgen.h
deleted file mode 100644
index 36246fd..0000000
--- a/trunk/src/latexgen.h
+++ /dev/null
@@ -1,272 +0,0 @@
-/******************************************************************************
- *
- *
- *
- * Copyright (C) 1997-2012 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.
- *
- */
-
-#ifndef LATEXGEN_H
-#define LATEXGEN_H
-
-#include "outputgen.h"
-
-class QFile;
-
-class LatexGenerator : public OutputGenerator
-{
- public:
- LatexGenerator();
- ~LatexGenerator();
- static void init();
- static void writeStyleSheetFile(QFile &f);
- static void writeHeaderFile(QFile &f);
- static void writeFooterFile(QFile &f);
-
- //OutputGenerator *copy();
- //OutputGenerator *clone() { return new LatexGenerator(*this); }
- //void append(const OutputGenerator *o);
- void enable()
- { if (genStack->top()) active=*genStack->top(); else active=TRUE; }
- void disable() { active=FALSE; }
- void enableIf(OutputType o) { if (o==Latex) enable(); }
- void disableIf(OutputType o) { if (o==Latex) disable(); }
- void disableIfNot(OutputType o) { if (o!=Latex) disable(); }
- bool isEnabled(OutputType o) { return (o==Latex && active); }
- OutputGenerator *get(OutputType o) { return (o==Latex) ? this : 0; }
-
- void printDoc(DocNode *,const char *);
-
- void startFile(const char *name,const char *manName,const char *title);
- void writeSearchInfo() {}
- void writeFooter() {}
- void endFile();
- void clearBuffer();
-
- void startIndexSection(IndexSections);
- void endIndexSection(IndexSections);
- void writePageLink(const char *,bool);
- void startProjectNumber();
- void endProjectNumber() {}
- void writeStyleInfo(int part);
- void startTitleHead(const char *);
- void startTitle();
- void endTitleHead(const char *,const char *name);
- void endTitle() { t << "}"; }
-
- void newParagraph();
- void startParagraph();
- void endParagraph();
- void writeString(const char *text);
- void startIndexListItem() {}
- void endIndexListItem() {}
- void startIndexList() { t << "\\begin{DoxyCompactList}" << endl; }
- void endIndexList() { t << "\\end{DoxyCompactList}" << endl; }
- void startIndexKey();
- void endIndexKey();
- void startIndexValue(bool);
- void endIndexValue(const char *,bool);
- void startItemList() { t << "\\begin{DoxyCompactItemize}" << endl; }
- void endItemList() { t << "\\end{DoxyCompactItemize}" << endl; }
- void startIndexItem(const char *ref,const char *file);
- void endIndexItem(const char *ref,const char *file);
- void docify(const char *text);
- void codify(const char *text);
- void writeObjectLink(const char *ref,const char *file,
- const char *anchor,const char *name);
- void writeCodeLink(const char *ref, const char *file,
- const char *anchor,const char *name,
- const char *tooltip);
- void startTextLink(const char *,const char *);
- void endTextLink();
- void startHtmlLink(const char *url);
- void endHtmlLink();
- void startTypewriter() { t << "{\\ttfamily "; }
- void endTypewriter() { t << "}"; }
- void startGroupHeader(int);
- void endGroupHeader(int);
- void startItemListItem() { t << "\\item " << endl; }
- void endItemListItem() {}
-
- void startMemberSections() {}
- void endMemberSections() {}
- void startHeaderSection() {}
- void endHeaderSection() {}
- void startMemberHeader(const char *);
- void endMemberHeader();
- void startMemberSubtitle() {}
- void endMemberSubtitle() {}
- void startMemberDocList() {}
- void endMemberDocList() {}
- void startMemberList();
- void endMemberList();
- void startInlineHeader();
- void endInlineHeader();
- void startAnonTypeScope(int);
- void endAnonTypeScope(int);
- void startMemberItem(const char *,int);
- void endMemberItem();
- void startMemberTemplateParams();
- void endMemberTemplateParams(const char *);
-
- void startMemberGroupHeader(bool);
- void endMemberGroupHeader();
- void startMemberGroupDocs();
- void endMemberGroupDocs();
- void startMemberGroup();
- void endMemberGroup(bool);
-
- void insertMemberAlign(bool) {}
-
- void writeRuler() { t << endl << endl; }
- void writeAnchor(const char *fileName,const char *name);
- void startCodeFragment();
- void endCodeFragment();
- void writeLineNumber(const char *,const char *,const char *,int l);
- void startCodeLine();
- void endCodeLine();
- void startEmphasis() { t << "{\\em "; }
- void endEmphasis() { t << "}"; }
- void startBold() { t << "{\\bfseries "; }
- void endBold() { t << "}"; }
- void startDescription();
- void endDescription();
- void startDescItem();
- void endDescItem();
- void lineBreak(const char *style=0);
- void startMemberDoc(const char *,const char *,const char *,const char *,bool);
- void endMemberDoc(bool);
- void startDoxyAnchor(const char *,const char *,const char *,const char *,const char *);
- void endDoxyAnchor(const char *,const char *);
- void startCodeAnchor(const char *);
- void endCodeAnchor();
- void writeChar(char c);
- void writeLatexSpacing() { t << "\\hspace{0.3cm}"; }
- void writeStartAnnoItem(const char *type,const char *file,
- const char *path,const char *name);
- void writeEndAnnoItem(const char *name);
- void startSubsection() { t << "\\subsection*{"; }
- void endSubsection() { t << "}" << endl; }
- void startSubsubsection() { t << "\\subsubsection*{"; }
- void endSubsubsection() { t << "}" << endl; }
- void startCenter() { t << "\\begin{center}" << endl; }
- void endCenter() { t << "\\end{center}" << endl; }
- void startSmall() { t << "\\footnotesize "; }
- void endSmall() { t << "\\normalsize "; }
- void startMemberDescription(const char *);
- void endMemberDescription();
- void startDescList(SectionTypes) { t << "\\begin{Desc}\n\\item["; }
- void endDescList() { t << "\\end{Desc}" << endl; }
- void startSimpleSect(SectionTypes,const char *,const char *,const char *);
- void endSimpleSect();
- void startParamList(ParamListTypes,const char *title);
- void endParamList();
- void startDescForItem() { t << "\\par" << endl; }
- void endDescForItem() {}
- void startSection(const char *,const char *,SectionInfo::SectionType);
- void endSection(const char *,SectionInfo::SectionType);
- void addIndexItem(const char *,const char *);
- void startIndent() {}
- void endIndent() {}
- void writeSynopsis() {}
- void startClassDiagram();
- void endClassDiagram(const ClassDiagram &,const char *,const char *);
- void startPageRef();
- void endPageRef(const char *,const char *);
- void startQuickIndices() {}
- void endQuickIndices() {}
- void writeSplitBar(const char *) {}
- void writeLogo() {}
- void writeQuickLinks(bool,HighlightedItem,const char*) {}
- void startContents() {}
- void endContents() {}
- void writeNonBreakableSpace(int);
-
- void startDescTable()
- { t << "\\begin{description}" << endl; }
- void endDescTable()
- { t << "\\end{description}" << endl; }
- void startDescTableTitle()
- { t << "\\item[{\\em " << endl; }
- void endDescTableTitle()
- { t << "}]"; }
- void startDescTableData() {}
- void endDescTableData() {}
- void lastIndexPage() {}
-
- void startDotGraph();
- void endDotGraph(const DotClassGraph &);
- void startInclDepGraph();
- void endInclDepGraph(const DotInclDepGraph &);
- void startCallGraph();
- void startGroupCollaboration();
- void endGroupCollaboration(const DotGroupCollaboration &g);
- void endCallGraph(const DotCallGraph &);
- void startDirDepGraph();
- void endDirDepGraph(const DotDirDeps &g);
- void writeGraphicalHierarchy(const DotGfxHierarchyTable &) {}
-
- void startTextBlock(bool) {}
- void endTextBlock(bool) {}
-
- void startMemberDocPrefixItem() {}
- void endMemberDocPrefixItem() {}
- void startMemberDocName(bool) {}
- void endMemberDocName() {}
- void startParameterType(bool,const char *);
- void endParameterType();
- void startParameterName(bool);
- void endParameterName(bool,bool,bool);
- void startParameterList(bool);
- void endParameterList();
-
- void startConstraintList(const char *);
- void startConstraintParam();
- void endConstraintParam();
- void startConstraintType();
- void endConstraintType();
- void startConstraintDocs();
- void endConstraintDocs();
- void endConstraintList();
-
- void startMemberDocSimple();
- void endMemberDocSimple();
- void startInlineMemberType();
- void endInlineMemberType();
- void startInlineMemberName();
- void endInlineMemberName();
- void startInlineMemberDoc();
- void endInlineMemberDoc();
-
- void startFontClass(const char *); // {}
- void endFontClass(); // {}
-
- void writeCodeAnchor(const char *) {}
- void linkableSymbol(int,const char *,Definition *,Definition *) {}
-
- private:
- LatexGenerator(const LatexGenerator &);
- LatexGenerator &operator=(const LatexGenerator &);
- void escapeLabelName(const char *s);
- void escapeMakeIndexChars(const char *s);
- int col;
- bool insideTabbing;
- bool firstDescItem;
- bool disableLinks;
- QCString relPath;
- QCString sourceFileName;
- int m_indent;
- bool templateMemberItem;
- bool m_prettyCode;
-};
-
-#endif
diff --git a/trunk/src/layout.cpp b/trunk/src/layout.cpp
deleted file mode 100644
index b4a94f2..0000000
--- a/trunk/src/layout.cpp
+++ /dev/null
@@ -1,1328 +0,0 @@
-/******************************************************************************
- *
- *
- *
- *
- * Copyright (C) 1997-2012 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.
- *
- */
-
-#include "layout.h"
-#include "message.h"
-#include "language.h"
-#include "vhdldocgen.h"
-#include "util.h"
-#include "doxygen.h"
-
-#include <qxml.h>
-#include <qfile.h>
-#include <qstring.h>
-#include <qfileinfo.h>
-#include <qtextstream.h>
-
-static const char layout_default[] =
-#include "layout_default.h"
-;
-
-static bool elemIsVisible(const QXmlAttributes &attrib,bool defVal=TRUE)
-{
- QCString visible = convertToQCString(attrib.value("visible"));
- if (visible.isEmpty()) return defVal;
- if (visible.at(0)=='$' && visible.length()>1)
- {
- QCString id = visible.mid(1);
- ConfigOption *opt = Config::instance()->get(id);
- if (opt && opt->kind()==ConfigOption::O_Bool)
- {
- return *((ConfigBool *)opt)->valueRef();
- }
- else if (!opt)
- {
- err("error: found unsupported value %s for visible attribute in layout file\n",
- visible.data());
- }
- }
- return visible!="no" && visible!="0";
-}
-
-//---------------------------------------------------------------------------------
-
-LayoutNavEntry *LayoutNavEntry::find(LayoutNavEntry::Kind kind,
- const char *file) const
-{
- LayoutNavEntry *result=0;
- QListIterator<LayoutNavEntry> li(m_children);
- LayoutNavEntry *entry;
- for (li.toFirst();(entry=li.current());++li)
- {
- // depth first search, needed to find the entry furthest from the
- // root in case an entry is in the tree twice
- result = entry->find(kind,file);
- if (result) return result;
- if (entry->kind()==kind && (file==0 || entry->baseFile()==file))
- {
- return entry;
- }
- }
- return result;
-}
-
-QCString LayoutNavEntry::url() const
-{
- QCString url = baseFile().stripWhiteSpace();
- if (kind()!=LayoutNavEntry::User)
- {
- url+=Doxygen::htmlFileExtension;
- }
- else if (url.left(5)=="@ref " || url.left(5)=="\\ref ")
- {
- Definition *d;
- QCString anchor;
- bool found=FALSE;
- if (resolveLink(0,url.mid(5).stripWhiteSpace(),TRUE,&d,anchor))
- {
- if (d && d->isLinkable())
- {
- url=d->getOutputFileBase()+Doxygen::htmlFileExtension;
- if (!anchor.isEmpty())
- {
- url+="#"+anchor;
- }
- found=TRUE;
- }
- }
- if (!found)
- {
- msg("warning: explicit link request to '%s' in layout file '%s' could not be resolved\n",qPrint(url.mid(5)),qPrint(Config_getString("LAYOUT_FILE")));
- }
- }
- //printf("LayoutNavEntry::url()=%s\n",url.data());
- return url;
-}
-
-//---------------------------------------------------------------------------------
-
-class LayoutParser : public QXmlDefaultHandler
-{
- private:
- class StartElementHandler
- {
- typedef void (LayoutParser::*Handler)(const QXmlAttributes &attrib);
- public:
- StartElementHandler(LayoutParser *parent, Handler h)
- : m_parent(parent), m_handler(h) {}
- virtual ~StartElementHandler() {}
- virtual void operator()(const QXmlAttributes &attrib)
- {
- (m_parent->*m_handler)(attrib);
- }
- protected:
- StartElementHandler() : m_parent(0), m_handler(0) {}
- private:
- LayoutParser *m_parent;
- Handler m_handler;
- };
-
- class StartElementHandlerKind : public StartElementHandler
- {
- typedef void (LayoutParser::*Handler)(LayoutDocEntry::Kind kind,
- const QXmlAttributes &attrib);
- public:
- StartElementHandlerKind(LayoutParser *parent, LayoutDocEntry::Kind k,Handler h)
- : m_parent(parent), m_kind(k), m_handler(h) {}
- void operator()(const QXmlAttributes &attrib)
- {
- (m_parent->*m_handler)(m_kind,attrib);
- }
- private:
- LayoutParser *m_parent;
- LayoutDocEntry::Kind m_kind;
- Handler m_handler;
- };
-
- class StartElementHandlerSection : public StartElementHandler
- {
- typedef void (LayoutParser::*Handler)(LayoutDocEntry::Kind kind,
- const QXmlAttributes &attrib,
- const QCString &title);
- public:
- StartElementHandlerSection(LayoutParser *parent, LayoutDocEntry::Kind k,Handler h,
- const QCString &title)
- : m_parent(parent), m_kind(k), m_handler(h), m_title(title) {}
- void operator()(const QXmlAttributes &attrib)
- {
- (m_parent->*m_handler)(m_kind,attrib,m_title);
- }
- private:
- LayoutParser *m_parent;
- LayoutDocEntry::Kind m_kind;
- Handler m_handler;
- QCString m_title;
- };
-
- class StartElementHandlerMember : public StartElementHandler
- {
- typedef void (LayoutParser::*Handler)(const QXmlAttributes &attrib,
- MemberList::ListType type,
- const QCString &title,
- const QCString &subtitle);
- public:
- StartElementHandlerMember(LayoutParser *parent,
- Handler h,
- MemberList::ListType type,
- const QCString &tl,
- const QCString &ss = QCString()
- )
- : m_parent(parent), m_handler(h), m_type(type),
- m_title(tl), m_subscript(ss) {}
- void operator()(const QXmlAttributes &attrib)
- {
- (m_parent->*m_handler)(attrib,m_type,m_title,m_subscript);
- }
- private:
- LayoutParser *m_parent;
- Handler m_handler;
- MemberList::ListType m_type;
- QCString m_title;
- QCString m_subscript;
- };
-
- class StartElementHandlerNavEntry : public StartElementHandler
- {
- typedef void (LayoutParser::*Handler)(LayoutNavEntry::Kind kind,
- const QXmlAttributes &attrib,
- const QCString &title);
- public:
- StartElementHandlerNavEntry(LayoutParser *parent,
- LayoutNavEntry::Kind kind,
- Handler h,
- const QCString &tl
- )
- : m_parent(parent), m_kind(kind), m_handler(h), m_title(tl) {}
- void operator()(const QXmlAttributes &attrib)
- {
- (m_parent->*m_handler)(m_kind,attrib,m_title);
- }
- private:
- LayoutParser *m_parent;
- LayoutNavEntry::Kind m_kind;
- Handler m_handler;
- QCString m_title;
- };
-
- class EndElementHandler
- {
- typedef void (LayoutParser::*Handler)();
- public:
- EndElementHandler(LayoutParser *parent, Handler h) : m_parent(parent), m_handler(h) {}
- void operator()() { (m_parent->*m_handler)(); }
- private:
- LayoutParser *m_parent;
- Handler m_handler;
- };
-
-
- public:
- static LayoutParser &instance()
- {
- static LayoutParser *theInstance = new LayoutParser;
- return *theInstance;
- }
- void init()
- {
- m_sHandler.setAutoDelete(TRUE);
- m_eHandler.setAutoDelete(TRUE);
- m_part = -1; // invalid
- m_rootNav = 0;
-
- bool fortranOpt = Config_getBool("OPTIMIZE_FOR_FORTRAN");
- bool vhdlOpt = Config_getBool("OPTIMIZE_OUTPUT_VHDL");
- bool javaOpt = Config_getBool("OPTIMIZE_OUTPUT_JAVA");
-
- // start & end handlers
- m_sHandler.insert("doxygenlayout",
- new StartElementHandler(this,&LayoutParser::startLayout));
- m_eHandler.insert("doxygenlayout",
- new EndElementHandler(this,&LayoutParser::endLayout));
-
- // class layout handlers
- m_sHandler.insert("navindex",
- new StartElementHandler(this,&LayoutParser::startNavIndex));
- m_sHandler.insert("navindex/tab",
- new StartElementHandler(this,&LayoutParser::startNavEntry));
- m_eHandler.insert("navindex/tab",
- new EndElementHandler(this,&LayoutParser::endNavEntry));
- m_eHandler.insert("navindex",
- new EndElementHandler(this,&LayoutParser::endNavIndex));
-
- // class layout handlers
- m_sHandler.insert("class",
- new StartElementHandler(this,&LayoutParser::startClass));
- m_sHandler.insert("class/briefdescription",
- new StartElementHandlerKind(this,LayoutDocEntry::BriefDesc,&LayoutParser::startSimpleEntry));
- m_sHandler.insert("class/detaileddescription",
- new StartElementHandlerSection(this,LayoutDocEntry::DetailedDesc,&LayoutParser::startSectionEntry,
- theTranslator->trDetailedDescription()));
- m_sHandler.insert("class/authorsection",
- new StartElementHandlerKind(this,LayoutDocEntry::AuthorSection,&LayoutParser::startSimpleEntry));
- m_sHandler.insert("class/includes",
- new StartElementHandlerKind(this,LayoutDocEntry::ClassIncludes,&LayoutParser::startSimpleEntry));
- m_sHandler.insert("class/inheritancegraph",
- new StartElementHandlerKind(this,LayoutDocEntry::ClassInheritanceGraph,&LayoutParser::startSimpleEntry));
- m_sHandler.insert("class/collaborationgraph",
- new StartElementHandlerKind(this,LayoutDocEntry::ClassCollaborationGraph,&LayoutParser::startSimpleEntry));
- m_sHandler.insert("class/allmemberslink",
- new StartElementHandlerKind(this,LayoutDocEntry::ClassAllMembersLink,&LayoutParser::startSimpleEntry));
- m_sHandler.insert("class/usedfiles",
- new StartElementHandlerKind(this,LayoutDocEntry::ClassUsedFiles,&LayoutParser::startSimpleEntry));
- m_sHandler.insert("class/memberdecl",
- new StartElementHandler(this,&LayoutParser::startMemberDecl));
- m_sHandler.insert("class/memberdecl/membergroups",
- new StartElementHandlerKind(this,LayoutDocEntry::MemberGroups,&LayoutParser::startSimpleEntry));
- m_sHandler.insert("class/memberdecl/nestedclasses",
- new StartElementHandlerSection(this,LayoutDocEntry::ClassNestedClasses,&LayoutParser::startSectionEntry,
- vhdlOpt ? VhdlDocGen::trVhdlType(VhdlDocGen::ENTITY,FALSE) :
- fortranOpt ? theTranslator->trDataTypes() :
- theTranslator->trCompounds()
- ));
- m_sHandler.insert("class/memberdecl/publictypes",
- new StartElementHandlerMember(this,&LayoutParser::startMemberDeclEntry,
- MemberList::pubTypes,theTranslator->trPublicTypes()));
- m_sHandler.insert("class/memberdecl/publicslots",
- new StartElementHandlerMember(this,&LayoutParser::startMemberDeclEntry,
- MemberList::pubSlots,theTranslator->trPublicSlots()));
- m_sHandler.insert("class/memberdecl/signals",
- new StartElementHandlerMember(this,&LayoutParser::startMemberDeclEntry,
- MemberList::signals,theTranslator->trSignals()));
- m_sHandler.insert("class/memberdecl/publicmethods",
- new StartElementHandlerMember(this,&LayoutParser::startMemberDeclEntry,
- MemberList::pubMethods,theTranslator->trPublicMembers()));
- m_sHandler.insert("class/memberdecl/publicstaticmethods",
- new StartElementHandlerMember(this,&LayoutParser::startMemberDeclEntry,
- MemberList::pubStaticMethods,theTranslator->trStaticPublicMembers()));
- m_sHandler.insert("class/memberdecl/publicattributes",
- new StartElementHandlerMember(this,&LayoutParser::startMemberDeclEntry,
- MemberList::pubAttribs,theTranslator->trPublicAttribs()));
- m_sHandler.insert("class/memberdecl/publicstaticattributes",
- new StartElementHandlerMember(this,&LayoutParser::startMemberDeclEntry,
- MemberList::pubStaticAttribs,theTranslator->trStaticPublicAttribs()));
- m_sHandler.insert("class/memberdecl/protectedtypes",
- new StartElementHandlerMember(this,&LayoutParser::startMemberDeclEntry,
- MemberList::proTypes,theTranslator->trProtectedTypes()));
- m_sHandler.insert("class/memberdecl/protectedslots",
- new StartElementHandlerMember(this,&LayoutParser::startMemberDeclEntry,
- MemberList::proSlots,theTranslator->trProtectedSlots()));
- m_sHandler.insert("class/memberdecl/protectedmethods",
- new StartElementHandlerMember(this,&LayoutParser::startMemberDeclEntry,
- MemberList::proMethods,theTranslator->trProtectedMembers()));
- m_sHandler.insert("class/memberdecl/protectedstaticmethods",
- new StartElementHandlerMember(this,&LayoutParser::startMemberDeclEntry,
- MemberList::proStaticMethods,theTranslator->trStaticProtectedMembers()));
- m_sHandler.insert("class/memberdecl/protectedattributes",
- new StartElementHandlerMember(this,&LayoutParser::startMemberDeclEntry,
- MemberList::proAttribs,theTranslator->trProtectedAttribs()));
- m_sHandler.insert("class/memberdecl/protectedstaticattributes",
- new StartElementHandlerMember(this,&LayoutParser::startMemberDeclEntry,
- MemberList::proStaticAttribs,theTranslator->trStaticProtectedAttribs()));
- m_sHandler.insert("class/memberdecl/packagetypes",
- new StartElementHandlerMember(this,&LayoutParser::startMemberDeclEntry,
- MemberList::pacTypes,theTranslator->trPackageTypes()));
- m_sHandler.insert("class/memberdecl/packagemethods",
- new StartElementHandlerMember(this,&LayoutParser::startMemberDeclEntry,
- MemberList::pacMethods,theTranslator->trPackageMembers()));
- m_sHandler.insert("class/memberdecl/packagestaticmethods",
- new StartElementHandlerMember(this,&LayoutParser::startMemberDeclEntry,
- MemberList::pacStaticMethods,theTranslator->trStaticPackageMembers()));
- m_sHandler.insert("class/memberdecl/packageattributes",
- new StartElementHandlerMember(this,&LayoutParser::startMemberDeclEntry,
- MemberList::pacAttribs,theTranslator->trPackageAttribs()));
- m_sHandler.insert("class/memberdecl/packagestaticattributes",
- new StartElementHandlerMember(this,&LayoutParser::startMemberDeclEntry,
- MemberList::pacStaticAttribs,theTranslator->trStaticPackageAttribs()));
- m_sHandler.insert("class/memberdecl/properties",
- new StartElementHandlerMember(this,&LayoutParser::startMemberDeclEntry,
- MemberList::properties,theTranslator->trProperties()));
- m_sHandler.insert("class/memberdecl/events",
- new StartElementHandlerMember(this,&LayoutParser::startMemberDeclEntry,
- MemberList::events,theTranslator->trEvents()));
- m_sHandler.insert("class/memberdecl/privatetypes",
- new StartElementHandlerMember(this,&LayoutParser::startMemberDeclEntry,
- MemberList::priTypes,theTranslator->trPrivateTypes()));
- m_sHandler.insert("class/memberdecl/privateslots",
- new StartElementHandlerMember(this,&LayoutParser::startMemberDeclEntry,
- MemberList::priSlots,theTranslator->trPrivateSlots()));
- m_sHandler.insert("class/memberdecl/privatemethods",
- new StartElementHandlerMember(this,&LayoutParser::startMemberDeclEntry,
- MemberList::priMethods,theTranslator->trPrivateMembers()));
- m_sHandler.insert("class/memberdecl/privatestaticmethods",
- new StartElementHandlerMember(this,&LayoutParser::startMemberDeclEntry,
- MemberList::priStaticMethods,theTranslator->trStaticPrivateMembers()));
- m_sHandler.insert("class/memberdecl/privateattributes",
- new StartElementHandlerMember(this,&LayoutParser::startMemberDeclEntry,
- MemberList::priAttribs,theTranslator->trPrivateAttribs()));
- m_sHandler.insert("class/memberdecl/privatestaticattributes",
- new StartElementHandlerMember(this,&LayoutParser::startMemberDeclEntry,
- MemberList::priStaticAttribs,theTranslator->trStaticPrivateAttribs()));
- m_sHandler.insert("class/memberdecl/friends",
- new StartElementHandlerMember(this,&LayoutParser::startMemberDeclEntry,
- MemberList::friends,theTranslator->trFriends()));
- m_sHandler.insert("class/memberdecl/related",
- new StartElementHandlerMember(this,&LayoutParser::startMemberDeclEntry,
- MemberList::related,theTranslator->trRelatedFunctions(),
- theTranslator->trRelatedSubscript()));
- m_eHandler.insert("class/memberdecl",
- new EndElementHandler(this,&LayoutParser::endMemberDecl));
- m_sHandler.insert("class/memberdef",
- new StartElementHandler(this,&LayoutParser::startMemberDef));
- m_sHandler.insert("class/memberdef/inlineclasses",
- new StartElementHandlerSection(this,LayoutDocEntry::ClassInlineClasses,&LayoutParser::startSectionEntry,
- fortranOpt ? theTranslator->trTypeDocumentation() :
- theTranslator->trClassDocumentation()
- ));
- m_sHandler.insert("class/memberdef/typedefs",
- new StartElementHandlerMember(this,&LayoutParser::startMemberDefEntry,
- MemberList::typedefMembers,theTranslator->trMemberTypedefDocumentation()));
- m_sHandler.insert("class/memberdef/enums",
- new StartElementHandlerMember(this,&LayoutParser::startMemberDefEntry,
- MemberList::enumMembers,theTranslator->trMemberEnumerationDocumentation()));
- m_sHandler.insert("class/memberdef/constructors",
- new StartElementHandlerMember(this,&LayoutParser::startMemberDefEntry,
- MemberList::constructors,theTranslator->trConstructorDocumentation()));
- m_sHandler.insert("class/memberdef/functions",
- new StartElementHandlerMember(this,&LayoutParser::startMemberDefEntry,
- MemberList::functionMembers,
- fortranOpt ?
- theTranslator->trMemberFunctionDocumentationFortran() :
- theTranslator->trMemberFunctionDocumentation()));
- m_sHandler.insert("class/memberdef/related",
- new StartElementHandlerMember(this,&LayoutParser::startMemberDefEntry,
- MemberList::relatedMembers,theTranslator->trRelatedFunctionDocumentation()));
- m_sHandler.insert("class/memberdef/variables",
- new StartElementHandlerMember(this,&LayoutParser::startMemberDefEntry,
- MemberList::variableMembers,theTranslator->trMemberDataDocumentation()));
- m_sHandler.insert("class/memberdef/properties",
- new StartElementHandlerMember(this,&LayoutParser::startMemberDefEntry,
- MemberList::propertyMembers,theTranslator->trPropertyDocumentation()));
- m_sHandler.insert("class/memberdef/events",
- new StartElementHandlerMember(this,&LayoutParser::startMemberDefEntry,
- MemberList::eventMembers,theTranslator->trEventDocumentation()));
- m_eHandler.insert("class/memberdef",
- new EndElementHandler(this,&LayoutParser::endMemberDef));
- m_eHandler.insert("class",
- new EndElementHandler(this,&LayoutParser::endClass));
-
-
- // namespace layout handlers
- m_sHandler.insert("namespace",
- new StartElementHandler(this,&LayoutParser::startNamespace));
- m_sHandler.insert("namespace/briefdescription",
- new StartElementHandlerKind(this,LayoutDocEntry::BriefDesc,&LayoutParser::startSimpleEntry));
- m_sHandler.insert("namespace/detaileddescription",
- new StartElementHandlerSection(this,LayoutDocEntry::DetailedDesc,&LayoutParser::startSectionEntry,
- theTranslator->trDetailedDescription()));
- m_sHandler.insert("namespace/authorsection",
- new StartElementHandlerKind(this,LayoutDocEntry::AuthorSection,&LayoutParser::startSimpleEntry));
- m_sHandler.insert("namespace/memberdecl",
- new StartElementHandler(this,&LayoutParser::startMemberDecl));
- m_sHandler.insert("namespace/memberdecl/nestednamespaces",
- new StartElementHandlerSection(this,LayoutDocEntry::NamespaceNestedNamespaces,&LayoutParser::startSectionEntry,
- javaOpt || vhdlOpt ? theTranslator->trPackages() :
- fortranOpt ? theTranslator->trModules() :
- theTranslator->trNamespaces()
- ));
- m_sHandler.insert("namespace/memberdecl/classes",
- new StartElementHandlerSection(this,LayoutDocEntry::NamespaceClasses,&LayoutParser::startSectionEntry,
- vhdlOpt ? VhdlDocGen::trVhdlType(VhdlDocGen::ENTITY,FALSE) :
- fortranOpt ? theTranslator->trDataTypes() :
- theTranslator->trCompounds()
- ));
- m_sHandler.insert("namespace/memberdecl/membergroups",
- new StartElementHandlerKind(this,LayoutDocEntry::MemberGroups,&LayoutParser::startSimpleEntry));
- m_sHandler.insert("namespace/memberdecl/typedefs",
- new StartElementHandlerMember(this,&LayoutParser::startMemberDeclEntry,
- MemberList::decTypedefMembers,theTranslator->trTypedefs()));
- m_sHandler.insert("namespace/memberdecl/enums",
- new StartElementHandlerMember(this,&LayoutParser::startMemberDeclEntry,
- MemberList::decEnumMembers,theTranslator->trEnumerations()));
- m_sHandler.insert("namespace/memberdecl/functions",
- new StartElementHandlerMember(this,&LayoutParser::startMemberDeclEntry,
- MemberList::decFuncMembers,
- fortranOpt ? theTranslator->trSubprograms() :
- vhdlOpt ? VhdlDocGen::trFunctionAndProc() :
- theTranslator->trFunctions()));
- m_sHandler.insert("namespace/memberdecl/variables",
- new StartElementHandlerMember(this,&LayoutParser::startMemberDeclEntry,
- MemberList::decVarMembers,theTranslator->trVariables()));
- m_eHandler.insert("namespace/memberdecl",
- new EndElementHandler(this,&LayoutParser::endMemberDecl));
- m_sHandler.insert("namespace/memberdef",
- new StartElementHandler(this,&LayoutParser::startMemberDef));
- m_sHandler.insert("namespace/memberdef/inlineclasses",
- new StartElementHandlerSection(this,LayoutDocEntry::NamespaceInlineClasses,&LayoutParser::startSectionEntry,
- fortranOpt ? theTranslator->trTypeDocumentation() :
- theTranslator->trClassDocumentation()
- ));
- m_sHandler.insert("namespace/memberdef/typedefs",
- new StartElementHandlerMember(this,&LayoutParser::startMemberDefEntry,
- MemberList::docTypedefMembers,theTranslator->trTypedefDocumentation()));
- m_sHandler.insert("namespace/memberdef/enums",
- new StartElementHandlerMember(this,&LayoutParser::startMemberDefEntry,
- MemberList::docEnumMembers,theTranslator->trEnumerationTypeDocumentation()));
- m_sHandler.insert("namespace/memberdef/functions",
- new StartElementHandlerMember(this,&LayoutParser::startMemberDefEntry,
- MemberList::docFuncMembers,
- fortranOpt ?
- theTranslator->trSubprogramDocumentation() :
- theTranslator->trFunctionDocumentation()));
- m_sHandler.insert("namespace/memberdef/variables",
- new StartElementHandlerMember(this,&LayoutParser::startMemberDefEntry,
- MemberList::docVarMembers,theTranslator->trVariableDocumentation()));
- m_eHandler.insert("namespace/memberdef",
- new EndElementHandler(this,&LayoutParser::endMemberDef));
- m_eHandler.insert("namespace",
- new EndElementHandler(this,&LayoutParser::endNamespace));
-
- // file layout handlers
- m_sHandler.insert("file",
- new StartElementHandler(this,&LayoutParser::startFile));
- m_sHandler.insert("file/briefdescription",
- new StartElementHandlerKind(this,LayoutDocEntry::BriefDesc,&LayoutParser::startSimpleEntry));
- m_sHandler.insert("file/detaileddescription",
- new StartElementHandlerSection(this,LayoutDocEntry::DetailedDesc,&LayoutParser::startSectionEntry,
- theTranslator->trDetailedDescription()));
- m_sHandler.insert("file/authorsection",
- new StartElementHandlerKind(this,LayoutDocEntry::AuthorSection,&LayoutParser::startSimpleEntry));
- m_sHandler.insert("file/includes",
- new StartElementHandlerKind(this,LayoutDocEntry::FileIncludes,&LayoutParser::startSimpleEntry));
- m_sHandler.insert("file/includegraph",
- new StartElementHandlerKind(this,LayoutDocEntry::FileIncludeGraph,&LayoutParser::startSimpleEntry));
- m_sHandler.insert("file/includedbygraph",
- new StartElementHandlerKind(this,LayoutDocEntry::FileIncludedByGraph,&LayoutParser::startSimpleEntry));
- m_sHandler.insert("file/sourcelink",
- new StartElementHandlerKind(this,LayoutDocEntry::FileSourceLink,&LayoutParser::startSimpleEntry));
- m_sHandler.insert("file/memberdecl/membergroups",
- new StartElementHandlerKind(this,LayoutDocEntry::MemberGroups,&LayoutParser::startSimpleEntry));
- m_sHandler.insert("file/memberdecl",
- new StartElementHandler(this,&LayoutParser::startMemberDecl));
- m_sHandler.insert("file/memberdecl/classes",
- new StartElementHandlerSection(this,LayoutDocEntry::FileClasses,&LayoutParser::startSectionEntry,
- vhdlOpt ? VhdlDocGen::trVhdlType(VhdlDocGen::ENTITY,FALSE) :
- fortranOpt ? theTranslator->trDataTypes() :
- theTranslator->trCompounds()
- ));
- m_sHandler.insert("file/memberdecl/namespaces",
- new StartElementHandlerSection(this,LayoutDocEntry::FileNamespaces,&LayoutParser::startSectionEntry,
- javaOpt ? theTranslator->trPackages() :
- fortranOpt ? theTranslator->trModules() :
- theTranslator->trNamespaces()
- ));
- m_sHandler.insert("file/memberdecl/defines",
- new StartElementHandlerMember(this,&LayoutParser::startMemberDeclEntry,
- MemberList::decDefineMembers,theTranslator->trDefines()));
- m_sHandler.insert("file/memberdecl/typedefs",
- new StartElementHandlerMember(this,&LayoutParser::startMemberDeclEntry,
- MemberList::decTypedefMembers,theTranslator->trTypedefs()));
- m_sHandler.insert("file/memberdecl/enums",
- new StartElementHandlerMember(this,&LayoutParser::startMemberDeclEntry,
- MemberList::decEnumMembers,theTranslator->trEnumerations()));
- m_sHandler.insert("file/memberdecl/functions",
- new StartElementHandlerMember(this,&LayoutParser::startMemberDeclEntry,
- MemberList::decFuncMembers,
- fortranOpt ? theTranslator->trSubprograms() :
- vhdlOpt ? VhdlDocGen::trFunctionAndProc() :
- theTranslator->trFunctions())) ;
- m_sHandler.insert("file/memberdecl/variables",
- new StartElementHandlerMember(this,&LayoutParser::startMemberDeclEntry,
- MemberList::decVarMembers,theTranslator->trVariables()));
-
- m_eHandler.insert("file/memberdecl",
- new EndElementHandler(this,&LayoutParser::endMemberDecl));
- m_sHandler.insert("file/memberdef",
- new StartElementHandler(this,&LayoutParser::startMemberDef));
- m_sHandler.insert("file/memberdef/inlineclasses",
- new StartElementHandlerSection(this,LayoutDocEntry::FileInlineClasses,&LayoutParser::startSectionEntry,
- fortranOpt ? theTranslator->trTypeDocumentation() :
- theTranslator->trClassDocumentation()
- ));
- m_sHandler.insert("file/memberdef/defines",
- new StartElementHandlerMember(this,&LayoutParser::startMemberDefEntry,
- MemberList::docDefineMembers,theTranslator->trDefineDocumentation()));
- m_sHandler.insert("file/memberdef/typedefs",
- new StartElementHandlerMember(this,&LayoutParser::startMemberDefEntry,
- MemberList::docTypedefMembers,theTranslator->trTypedefDocumentation()));
- m_sHandler.insert("file/memberdef/enums",
- new StartElementHandlerMember(this,&LayoutParser::startMemberDefEntry,
- MemberList::docEnumMembers,
- theTranslator->trEnumerationTypeDocumentation()));
- m_sHandler.insert("file/memberdef/functions",
- new StartElementHandlerMember(this,&LayoutParser::startMemberDefEntry,
- MemberList::docFuncMembers,
- fortranOpt ? theTranslator->trSubprogramDocumentation() : theTranslator->trFunctionDocumentation()));
- m_sHandler.insert("file/memberdef/variables",
- new StartElementHandlerMember(this,&LayoutParser::startMemberDefEntry,
- MemberList::docVarMembers,theTranslator->trVariableDocumentation()));
- m_eHandler.insert("file/memberdef",
- new EndElementHandler(this,&LayoutParser::endMemberDef));
- m_eHandler.insert("file",
- new EndElementHandler(this,&LayoutParser::endFile));
-
- // group layout handlers
- m_sHandler.insert("group",
- new StartElementHandler(this,&LayoutParser::startGroup));
- m_sHandler.insert("group/briefdescription",
- new StartElementHandlerKind(this,LayoutDocEntry::BriefDesc,&LayoutParser::startSimpleEntry));
- m_sHandler.insert("group/detaileddescription",
- new StartElementHandlerSection(this,LayoutDocEntry::DetailedDesc,&LayoutParser::startSectionEntry,
- theTranslator->trDetailedDescription()));
- m_sHandler.insert("group/authorsection",
- new StartElementHandlerKind(this,LayoutDocEntry::AuthorSection,&LayoutParser::startSimpleEntry));
- m_sHandler.insert("group/groupgraph",
- new StartElementHandlerKind(this,LayoutDocEntry::GroupGraph,&LayoutParser::startSimpleEntry));
- m_sHandler.insert("group/memberdecl/membergroups",
- new StartElementHandlerKind(this,LayoutDocEntry::MemberGroups,&LayoutParser::startSimpleEntry));
- m_sHandler.insert("group/memberdecl",
- new StartElementHandler(this,&LayoutParser::startMemberDecl));
- m_sHandler.insert("group/memberdecl/classes",
- new StartElementHandlerSection(this,LayoutDocEntry::GroupClasses,&LayoutParser::startSectionEntry,
- vhdlOpt ? VhdlDocGen::trVhdlType(VhdlDocGen::ENTITY,FALSE) :
- fortranOpt ? theTranslator->trDataTypes() :
- theTranslator->trCompounds()
- ));
- m_sHandler.insert("group/memberdecl/namespaces",
- new StartElementHandlerSection(this,LayoutDocEntry::GroupNamespaces,&LayoutParser::startSectionEntry,
- javaOpt ? theTranslator->trPackages() :
- fortranOpt ? theTranslator->trModules() :
- theTranslator->trNamespaces()
- ));
- m_sHandler.insert("group/memberdecl/dirs",
- new StartElementHandlerSection(this,LayoutDocEntry::GroupDirs,&LayoutParser::startSectionEntry,
- theTranslator->trDirectories()
- ));
- m_sHandler.insert("group/memberdecl/nestedgroups",
- new StartElementHandlerSection(this,LayoutDocEntry::GroupNestedGroups,&LayoutParser::startSectionEntry,
- theTranslator->trModules()
- ));
- m_sHandler.insert("group/memberdecl/files",
- new StartElementHandlerSection(this,LayoutDocEntry::GroupFiles,&LayoutParser::startSectionEntry,
- theTranslator->trFile(TRUE,FALSE)
- ));
-
- m_sHandler.insert("group/memberdecl/defines",
- new StartElementHandlerMember(this,&LayoutParser::startMemberDeclEntry,
- MemberList::decDefineMembers,theTranslator->trDefines()));
- m_sHandler.insert("group/memberdecl/typedefs",
- new StartElementHandlerMember(this,&LayoutParser::startMemberDeclEntry,
- MemberList::decTypedefMembers,theTranslator->trTypedefs()));
- m_sHandler.insert("group/memberdecl/enums",
- new StartElementHandlerMember(this,&LayoutParser::startMemberDeclEntry,
- MemberList::decEnumMembers,theTranslator->trEnumerations()));
- m_sHandler.insert("group/memberdecl/enumvalues",
- new StartElementHandlerMember(this,&LayoutParser::startMemberDeclEntry,
- MemberList::decEnumValMembers,theTranslator->trEnumerationValues()));
- m_sHandler.insert("group/memberdecl/functions",
- new StartElementHandlerMember(this,&LayoutParser::startMemberDeclEntry,
- MemberList::decFuncMembers,
- fortranOpt ? theTranslator->trSubprograms() :
- vhdlOpt ? VhdlDocGen::trFunctionAndProc() :
- theTranslator->trFunctions()));
- m_sHandler.insert("group/memberdecl/variables",
- new StartElementHandlerMember(this,&LayoutParser::startMemberDeclEntry,
- MemberList::decVarMembers,theTranslator->trVariables()));
- m_sHandler.insert("group/memberdecl/signals",
- new StartElementHandlerMember(this,&LayoutParser::startMemberDeclEntry,
- MemberList::decSignalMembers,theTranslator->trSignals()));
- m_sHandler.insert("group/memberdecl/publicslots",
- new StartElementHandlerMember(this,&LayoutParser::startMemberDeclEntry,
- MemberList::decPubSlotMembers,theTranslator->trPublicSlots()));
- m_sHandler.insert("group/memberdecl/protectedslots",
- new StartElementHandlerMember(this,&LayoutParser::startMemberDeclEntry,
- MemberList::decProSlotMembers,theTranslator->trProtectedSlots()));
- m_sHandler.insert("group/memberdecl/privateslots",
- new StartElementHandlerMember(this,&LayoutParser::startMemberDeclEntry,
- MemberList::decPriSlotMembers,theTranslator->trPrivateSlots()));
- m_sHandler.insert("group/memberdecl/events",
- new StartElementHandlerMember(this,&LayoutParser::startMemberDeclEntry,
- MemberList::decEventMembers,theTranslator->trEvents()));
- m_sHandler.insert("group/memberdecl/properties",
- new StartElementHandlerMember(this,&LayoutParser::startMemberDeclEntry,
- MemberList::decPropMembers,theTranslator->trProperties()));
- m_sHandler.insert("group/memberdecl/friends",
- new StartElementHandlerMember(this,&LayoutParser::startMemberDeclEntry,
- MemberList::decFriendMembers,theTranslator->trFriends()));
- m_eHandler.insert("group/memberdecl",
- new EndElementHandler(this,&LayoutParser::endMemberDecl));
- m_sHandler.insert("group/memberdef",
- new StartElementHandler(this,&LayoutParser::startMemberDef));
- m_sHandler.insert("group/memberdef/pagedocs",
- new StartElementHandlerKind(this,LayoutDocEntry::GroupPageDocs,&LayoutParser::startSimpleEntry));
- m_sHandler.insert("group/memberdef/inlineclasses",
- new StartElementHandlerSection(this,LayoutDocEntry::GroupInlineClasses,&LayoutParser::startSectionEntry,
- fortranOpt ? theTranslator->trTypeDocumentation() :
- theTranslator->trClassDocumentation()
- ));
- m_sHandler.insert("group/memberdef/defines",
- new StartElementHandlerMember(this,&LayoutParser::startMemberDefEntry,
- MemberList::docDefineMembers,theTranslator->trDefineDocumentation()));
- m_sHandler.insert("group/memberdef/typedefs",
- new StartElementHandlerMember(this,&LayoutParser::startMemberDefEntry,
- MemberList::docTypedefMembers,theTranslator->trTypedefDocumentation()));
- m_sHandler.insert("group/memberdef/enums",
- new StartElementHandlerMember(this,&LayoutParser::startMemberDefEntry,
- MemberList::docEnumMembers,theTranslator->trEnumerationTypeDocumentation()));
- m_sHandler.insert("group/memberdef/enumvalues",
- new StartElementHandlerMember(this,&LayoutParser::startMemberDefEntry,
- MemberList::docEnumValMembers,theTranslator->trEnumerationValueDocumentation()));
- m_sHandler.insert("group/memberdef/functions",
- new StartElementHandlerMember(this,&LayoutParser::startMemberDefEntry,
- MemberList::docFuncMembers,
- fortranOpt?
- theTranslator->trSubprogramDocumentation():
- theTranslator->trFunctionDocumentation()));
- m_sHandler.insert("group/memberdef/variables",
- new StartElementHandlerMember(this,&LayoutParser::startMemberDefEntry,
- MemberList::docVarMembers,theTranslator->trVariableDocumentation()));
- m_sHandler.insert("group/memberdef/signals",
- new StartElementHandlerMember(this,&LayoutParser::startMemberDefEntry,
- MemberList::docSignalMembers,theTranslator->trSignals()));
- m_sHandler.insert("group/memberdef/publicslots",
- new StartElementHandlerMember(this,&LayoutParser::startMemberDefEntry,
- MemberList::docPubSlotMembers,theTranslator->trPublicSlots()));
- m_sHandler.insert("group/memberdef/protectedslots",
- new StartElementHandlerMember(this,&LayoutParser::startMemberDefEntry,
- MemberList::docProSlotMembers,theTranslator->trProtectedSlots()));
- m_sHandler.insert("group/memberdef/privateslots",
- new StartElementHandlerMember(this,&LayoutParser::startMemberDefEntry,
- MemberList::docPriSlotMembers,theTranslator->trPrivateSlots()));
- m_sHandler.insert("group/memberdef/events",
- new StartElementHandlerMember(this,&LayoutParser::startMemberDefEntry,
- MemberList::docEventMembers,theTranslator->trEvents()));
- m_sHandler.insert("group/memberdef/properties",
- new StartElementHandlerMember(this,&LayoutParser::startMemberDefEntry,
- MemberList::docPropMembers,theTranslator->trProperties()));
- m_sHandler.insert("group/memberdef/friends",
- new StartElementHandlerMember(this,&LayoutParser::startMemberDefEntry,
- MemberList::docFriendMembers,theTranslator->trFriends()));
- m_eHandler.insert("group/memberdef",
- new EndElementHandler(this,&LayoutParser::endMemberDef));
- m_eHandler.insert("group",
- new EndElementHandler(this,&LayoutParser::endGroup));
-
- // directory layout handlers
- m_sHandler.insert("directory",
- new StartElementHandler(this,&LayoutParser::startDirectory));
- m_sHandler.insert("directory/briefdescription",
- new StartElementHandlerKind(this,LayoutDocEntry::BriefDesc,&LayoutParser::startSimpleEntry));
- m_sHandler.insert("directory/detaileddescription",
- new StartElementHandlerSection(this,LayoutDocEntry::DetailedDesc,&LayoutParser::startSectionEntry,
- theTranslator->trDetailedDescription()));
- m_sHandler.insert("directory/directorygraph",
- new StartElementHandlerKind(this,LayoutDocEntry::DirGraph,&LayoutParser::startSimpleEntry));
- m_sHandler.insert("directory/memberdecl",
- new StartElementHandler(this,&LayoutParser::startMemberDecl));
- m_sHandler.insert("directory/memberdecl/dirs",
- new StartElementHandlerKind(this,LayoutDocEntry::DirSubDirs,&LayoutParser::startSimpleEntry));
- m_sHandler.insert("directory/memberdecl/files",
- new StartElementHandlerKind(this,LayoutDocEntry::DirFiles,&LayoutParser::startSimpleEntry));
- m_eHandler.insert("directory/memberdecl",
- new EndElementHandler(this,&LayoutParser::endMemberDecl));
- m_eHandler.insert("directory",
- new EndElementHandler(this,&LayoutParser::endDirectory));
- }
-
- void startSimpleEntry(LayoutDocEntry::Kind k,const QXmlAttributes &attrib)
- {
- bool isVisible = elemIsVisible(attrib);
- if (m_part!=-1 && isVisible)
- {
- LayoutDocManager::instance().addEntry((LayoutDocManager::LayoutPart)m_part,
- new LayoutDocEntrySimple(k));
- }
- }
-
- void startSectionEntry(LayoutDocEntry::Kind k,const QXmlAttributes &attrib,
- const QCString &title)
- {
- bool isVisible = elemIsVisible(attrib);
- QCString userTitle = convertToQCString(attrib.value("title"));
- //printf("startSectionEntry: title='%s' userTitle='%s'\n",
- // title.data(),userTitle.data());
- if (userTitle.isEmpty()) userTitle = title;
- if (m_part!=-1 && isVisible)
- {
- LayoutDocManager::instance().addEntry((LayoutDocManager::LayoutPart)m_part,
- new LayoutDocEntrySection(k,userTitle));
- }
- }
-
-
- void startMemberDeclEntry(const QXmlAttributes &attrib,MemberList::ListType type,
- const QCString &title,const QCString &subscript)
- {
- //QCString visible = convertToQCString(attrib.value("visible"));
- //bool isVisible = visible.isEmpty() || (visible!="no" && visible!="0");
- QCString userTitle = convertToQCString(attrib.value("title"));
- QCString userSubscript = convertToQCString(attrib.value("subtitle"));
- if (userTitle.isEmpty()) userTitle = title;
- if (userSubscript.isEmpty()) userSubscript = subscript;
- //printf("memberdecl: %s\n",userTitle.data());
- if (m_part!=-1 /*&& isVisible*/)
- {
- LayoutDocManager::instance().addEntry((LayoutDocManager::LayoutPart)m_part,
- new LayoutDocEntryMemberDecl(type,userTitle,userSubscript));
- }
- }
-
- void startMemberDefEntry(const QXmlAttributes &attrib,MemberList::ListType type,
- const QCString &title,const QCString &)
- {
- QCString userTitle = convertToQCString(attrib.value("title"));
- if (userTitle.isEmpty()) userTitle = title;
- //printf("memberdef: %s\n",userTitle.data());
- if (m_part!=-1 /*&& isVisible*/)
- {
- LayoutDocManager::instance().addEntry((LayoutDocManager::LayoutPart)m_part,
- new LayoutDocEntryMemberDef(type,userTitle));
- }
- }
-
- void startLayout(const QXmlAttributes &)
- {
- }
-
- void endLayout()
- {
- }
-
- void startNavIndex(const QXmlAttributes &)
- {
- m_scope="navindex/";
- m_rootNav = LayoutDocManager::instance().rootNavEntry();
- if (m_rootNav) m_rootNav->clear();
- }
-
- void endNavIndex()
- {
- m_scope="";
- if (m_rootNav && !m_rootNav->find(LayoutNavEntry::MainPage))
- {
- // no MainPage node... add one the first item of the root node...
- new LayoutNavEntry(m_rootNav,LayoutNavEntry::MainPage, TRUE,
- /*Config_getBool("GENERATE_TREEVIEW") ? "main" :*/ "index",
- theTranslator->trMainPage(),TRUE);
- }
- }
-
- void startNavEntry(const QXmlAttributes &attrib)
- {
- static bool javaOpt = Config_getBool("OPTIMIZE_OUTPUT_JAVA");
- static bool fortranOpt = Config_getBool("OPTIMIZE_FOR_FORTRAN");
- static bool vhdlOpt = Config_getBool("OPTIMIZE_OUTPUT_VHDL");
- static bool hasGraphicalHierarchy = Config_getBool("HAVE_DOT") &&
- Config_getBool("GRAPHICAL_HIERARCHY");
- static bool extractAll = Config_getBool("EXTRACT_ALL");
- static struct NavEntryMap
- {
- const char *typeStr; // type attribute name in the XML file
- LayoutNavEntry::Kind kind; // corresponding enum name
- QCString mainName; // default title for an item if it has children
- QCString subName; // optional name for an item if it is rendered as a child
- QCString intro; // introduction text to be put on the index page
- QCString baseFile; // base name of the file containing the index page
- } mapping[] =
- {
- { "mainpage",
- LayoutNavEntry::MainPage,
- theTranslator->trMainPage(),
- QCString(),
- QCString(),
- "index"
- },
- { "pages",
- LayoutNavEntry::Pages,
- theTranslator->trRelatedPages(),
- QCString(),
- theTranslator->trRelatedPagesDescription(),
- "pages"
- },
- { "modules",
- LayoutNavEntry::Modules,
- theTranslator->trModules(),
- QCString(),
- theTranslator->trModulesDescription(),
- "modules"
- },
- { "namespaces",
- LayoutNavEntry::Namespaces,
- javaOpt || vhdlOpt ? theTranslator->trPackages() : fortranOpt ? theTranslator->trModules() : theTranslator->trNamespaces(),
- javaOpt || vhdlOpt ? theTranslator->trPackages() : fortranOpt ? theTranslator->trModulesList() : theTranslator->trNamespaceList(),
- javaOpt || vhdlOpt ? theTranslator->trPackageListDescription() : fortranOpt ? theTranslator->trModulesListDescription(extractAll) : theTranslator->trNamespaceListDescription(extractAll),
- "namespaces"
- },
- { "namespacelist",
- LayoutNavEntry::NamespaceList,
- javaOpt || vhdlOpt ? theTranslator->trPackages() : fortranOpt ? theTranslator->trModulesList() : theTranslator->trNamespaceList(),
- QCString(),
- javaOpt || vhdlOpt ? theTranslator->trPackageListDescription() : fortranOpt ? theTranslator->trModulesListDescription(extractAll) : theTranslator->trNamespaceListDescription(extractAll),
- "namespaces"
- },
- { "namespacemembers",
- LayoutNavEntry::NamespaceMembers,
- javaOpt || vhdlOpt ? theTranslator->trPackageMembers() : fortranOpt ? theTranslator->trModulesMembers() : theTranslator->trNamespaceMembers(),
- QCString(),
- fortranOpt ? theTranslator->trModulesMemberDescription(extractAll) : theTranslator->trNamespaceMemberDescription(extractAll),
- "namespacemembers"
- },
- { "classindex",
- LayoutNavEntry::ClassIndex,
- fortranOpt ? theTranslator->trDataTypes() : vhdlOpt ? VhdlDocGen::trDesignUnits() : theTranslator->trCompoundIndex(),
- QCString(),
- QCString(),
- "classes"
- },
- { "classes",
- LayoutNavEntry::Classes,
- fortranOpt ? theTranslator->trCompoundListFortran() : vhdlOpt ? VhdlDocGen::trDesignUnitList() : theTranslator->trClasses(),
- theTranslator->trCompoundList(),
- fortranOpt ? theTranslator->trCompoundListDescriptionFortran() : vhdlOpt ? VhdlDocGen::trDesignUnitListDescription() : theTranslator->trCompoundListDescription(),
- "annotated"
- },
- { "classlist",
- LayoutNavEntry::ClassList,
- fortranOpt ? theTranslator->trCompoundListFortran() : vhdlOpt ? VhdlDocGen::trDesignUnitList() : theTranslator->trCompoundList(),
- QCString(),
- fortranOpt ? theTranslator->trCompoundListDescriptionFortran() : vhdlOpt ? VhdlDocGen::trDesignUnitListDescription() : theTranslator->trCompoundListDescription(),
- "annotated"
- },
- { "hierarchy",
- LayoutNavEntry::ClassHierarchy,
- vhdlOpt ? VhdlDocGen::trDesignUnitHierarchy() : theTranslator->trClassHierarchy(),
- QCString(),
- theTranslator->trClassHierarchyDescription(),
- hasGraphicalHierarchy ? "inherits" : "hierarchy"
- },
- { "classmembers",
- LayoutNavEntry::ClassMembers,
- fortranOpt ? theTranslator->trCompoundMembersFortran() : vhdlOpt ? VhdlDocGen::trDesignUnitMembers() : theTranslator->trCompoundMembers(),
- QCString(),
- fortranOpt ? theTranslator->trCompoundMembersDescriptionFortran(extractAll) : theTranslator->trCompoundMembersDescription(extractAll),
- "functions"
- },
- { "files",
- LayoutNavEntry::Files,
- theTranslator->trFile(TRUE,FALSE),
- theTranslator->trFileList(),
- theTranslator->trFileListDescription(extractAll),
- "files"
- },
- { "filelist",
- LayoutNavEntry::FileList,
- theTranslator->trFileList(),
- QCString(),
- theTranslator->trFileListDescription(extractAll),
- "files"
- },
- { "globals",
- LayoutNavEntry::FileGlobals,
- theTranslator->trFileMembers(),
- QCString(),
- theTranslator->trFileMembersDescription(extractAll),
- "globals"
- },
- { "dirs",
- LayoutNavEntry::Dirs,
- theTranslator->trDirectories(),
- QCString(),
- theTranslator->trDirDescription(),
- "dirs"
- },
- { "examples",
- LayoutNavEntry::Examples,
- theTranslator->trExamples(),
- QCString(),
- theTranslator->trExamplesDescription(),
- "examples"
- },
- { "user",
- LayoutNavEntry::User,
- QCString(),
- QCString(),
- QCString(),
- "user"
- },
- { "usergroup",
- LayoutNavEntry::UserGroup,
- QCString(),
- QCString(),
- QCString(),
- "usergroup"
- },
- { 0, // end of list
- (LayoutNavEntry::Kind)0,
- QCString(),
- QCString(),
- QCString(),
- QCString()
- }
- };
- LayoutNavEntry::Kind kind;
- // find type in the table
- int i=0;
- QString type = attrib.value("type");
- while (mapping[i].typeStr)
- {
- if (mapping[i].typeStr==type)
- {
- kind = mapping[i].kind;
- break;
- }
- i++;
- }
- if (mapping[i].typeStr==0)
- {
- if (type.isEmpty())
- {
- err("error: an entry tag within a navindex has no type attribute! Check your layout file!\n");
- }
- else
- {
- err("error: the type '%s' is not supported for the entry tag within a navindex! Check your layout file!\n",type.data());
- }
- m_invalidEntry=TRUE;
- return;
- }
- QCString baseFile = mapping[i].baseFile;
- QCString title = convertToQCString(attrib.value("title"));
- bool isVisible = elemIsVisible(attrib);
- if (title.isEmpty()) // use default title
- {
- title = mapping[i].mainName; // use title for main row
- if (m_rootNav!=LayoutDocManager::instance().rootNavEntry() && !mapping[i].subName.isEmpty())
- {
- title = mapping[i].subName; // if this is a child of another row, use the subName if available
- // this is mainly done to get compatible naming with older versions.
- }
- }
- QCString intro = convertToQCString(attrib.value("intro"));
- if (intro.isEmpty()) // use default intro text
- {
- intro = mapping[i].intro;
- }
- QCString url = convertToQCString(attrib.value("url"));
- if (mapping[i].kind==LayoutNavEntry::User && !url.isEmpty())
- {
- baseFile=url;
- }
- else if (kind==LayoutNavEntry::UserGroup)
- {
- baseFile+=QCString().sprintf("%d",m_userGroupCount++);
- }
- // create new item and make it the new root
- m_rootNav = new LayoutNavEntry(m_rootNav,kind,kind==LayoutNavEntry::MainPage?TRUE:isVisible,baseFile,title,intro);
- }
-
- void endNavEntry()
- {
- // set the root back to the parent
- if (m_rootNav && !m_invalidEntry) m_rootNav = m_rootNav->parent();
- m_invalidEntry=FALSE;
- }
-
- void startClass(const QXmlAttributes &)
- {
- LayoutDocManager::instance().clear(LayoutDocManager::Class);
- m_scope="class/";
- m_part = (int)LayoutDocManager::Class;
- }
-
- void endClass()
- {
- m_scope="";
- m_part = -1;
- }
-
- void startNamespace(const QXmlAttributes &)
- {
- LayoutDocManager::instance().clear(LayoutDocManager::Namespace);
- m_scope="namespace/";
- m_part = (int)LayoutDocManager::Namespace;
- }
-
- void endNamespace()
- {
- m_scope="";
- m_part = -1;
- }
-
- void startFile(const QXmlAttributes &)
- {
- LayoutDocManager::instance().clear(LayoutDocManager::File);
- m_scope="file/";
- m_part = (int)LayoutDocManager::File;
- }
-
- void endFile()
- {
- m_scope="";
- m_part = -1;
- }
-
- void startGroup(const QXmlAttributes &)
- {
- LayoutDocManager::instance().clear(LayoutDocManager::Group);
- m_scope="group/";
- m_part = (int)LayoutDocManager::Group;
- }
-
- void endGroup()
- {
- m_scope="";
- m_part = -1;
- }
-
- void startDirectory(const QXmlAttributes &)
- {
- LayoutDocManager::instance().clear(LayoutDocManager::Directory);
- m_scope="directory/";
- m_part = (int)LayoutDocManager::Directory;
- }
-
- void endDirectory()
- {
- m_scope="";
- m_part = -1;
- }
-
- void startMemberDef(const QXmlAttributes &)
- {
- m_scope+="memberdef/";
- if (m_part!=-1)
- {
- LayoutDocManager::instance().addEntry((LayoutDocManager::LayoutPart)m_part,
- new LayoutDocEntrySimple(LayoutDocEntry::MemberDefStart));
- }
- }
-
- void endMemberDef()
- {
- int i=m_scope.findRev("memberdef/");
- if (i!=-1)
- {
- m_scope=m_scope.left(i);
- if (m_part!=-1)
- {
- LayoutDocManager::instance().addEntry((LayoutDocManager::LayoutPart)m_part,
- new LayoutDocEntrySimple(LayoutDocEntry::MemberDefEnd));
- }
- }
- }
-
- void startMemberDecl(const QXmlAttributes &)
- {
- m_scope+="memberdecl/";
- if (m_part!=-1)
- {
- LayoutDocManager::instance().addEntry((LayoutDocManager::LayoutPart)m_part,
- new LayoutDocEntrySimple(LayoutDocEntry::MemberDeclStart));
- }
- }
-
- void endMemberDecl()
- {
- int i=m_scope.findRev("memberdecl/");
- if (i!=-1)
- {
- m_scope=m_scope.left(i);
- if (m_part!=-1)
- {
- LayoutDocManager::instance().addEntry((LayoutDocManager::LayoutPart)m_part,
- new LayoutDocEntrySimple(LayoutDocEntry::MemberDeclEnd));
- }
- }
- }
-
- // reimplemented from QXmlDefaultHandler
- bool startElement( const QString&, const QString&,
- const QString& name, const QXmlAttributes& attrib )
- {
- //printf("startElement [%s]::[%s]\n",m_scope.data(),name.data());
- StartElementHandler *handler = m_sHandler[m_scope+name];
- if (handler)
- {
- (*handler)(attrib);
- }
- else
- {
- err("error: Unexpected start tag `%s' found in scope='%s'!\n",
- name.data(),m_scope.data());
- }
- return TRUE;
- }
- bool endElement( const QString&, const QString&, const QString& name )
- {
- //printf("endElement [%s]::[%s]\n",m_scope.data(),name.data());
- EndElementHandler *handler;
- if (!m_scope.isEmpty() && m_scope.right(name.length()+1)==name+"/")
- { // element ends current scope
- handler = m_eHandler[m_scope.left(m_scope.length()-1)];
- }
- else // continue with current scope
- {
- handler = m_eHandler[m_scope+name];
- }
- if (handler)
- {
- (*handler)();
- }
- return TRUE;
- }
- bool startDocument()
- {
- return TRUE;
- }
-
- private:
- LayoutParser() : m_sHandler(163), m_eHandler(17), m_invalidEntry(FALSE) { }
-
- QDict<StartElementHandler> m_sHandler;
- QDict<EndElementHandler> m_eHandler;
- QString m_scope;
- int m_part;
- LayoutNavEntry *m_rootNav;
- bool m_invalidEntry;
- static int m_userGroupCount;
-};
-
-int LayoutParser::m_userGroupCount=0;
-
-//---------------------------------------------------------------------------------
-
-class LayoutErrorHandler : public QXmlErrorHandler
-{
- public:
- LayoutErrorHandler(const char *fn) : fileName(fn) {}
- bool warning( const QXmlParseException &exception )
- {
- err("warning: at line %d column %d of %s: %s\n",
- exception.lineNumber(),exception.columnNumber(),fileName.data(),
- exception.message().data());
- return FALSE;
- }
- bool error( const QXmlParseException &exception )
- {
- err("error: at line %d column %d of %s: %s\n",
- exception.lineNumber(),exception.columnNumber(),fileName.data(),
- exception.message().data());
- return FALSE;
- }
- bool fatalError( const QXmlParseException &exception )
- {
- err("fatal error: at line %d column %d of %s: %s\n",
- exception.lineNumber(),exception.columnNumber(),fileName.data(),
- exception.message().data());
- return FALSE;
- }
- QString errorString() { return ""; }
-
- private:
- QString errorMsg;
- QString fileName;
-};
-
-//---------------------------------------------------------------------------------
-
-class LayoutDocManager::Private
-{
- public:
- QList<LayoutDocEntry> docEntries[LayoutDocManager::NrParts];
- LayoutNavEntry *rootNav;
-};
-
-LayoutDocManager::LayoutDocManager()
-{
- d = new Private;
- int i;
- for (i=0;i<LayoutDocManager::NrParts;i++)
- {
- d->docEntries[i].setAutoDelete(TRUE);
- }
- d->rootNav = new LayoutNavEntry;
- LayoutParser::instance().init();
-}
-
-
-void LayoutDocManager::init()
-{
- // parse the default layout
- LayoutErrorHandler errorHandler( "layout_default.xml" );
- QXmlInputSource source;
- source.setData( layout_default );
- QXmlSimpleReader reader;
- reader.setContentHandler( &LayoutParser::instance() );
- reader.setErrorHandler( &errorHandler );
- reader.parse( source );
-}
-
-LayoutDocManager::~LayoutDocManager()
-{
- delete d->rootNav;
- delete d;
-}
-
-LayoutDocManager & LayoutDocManager::instance()
-{
- static LayoutDocManager *theInstance = new LayoutDocManager;
- return *theInstance;
-}
-
-const QList<LayoutDocEntry> &LayoutDocManager::docEntries(LayoutDocManager::LayoutPart part) const
-{
- return d->docEntries[(int)part];
-}
-
-LayoutNavEntry* LayoutDocManager::rootNavEntry() const
-{
- return d->rootNav;
-}
-
-void LayoutDocManager::addEntry(LayoutDocManager::LayoutPart p,LayoutDocEntry *e)
-{
- d->docEntries[(int)p].append(e);
-}
-
-void LayoutDocManager::clear(LayoutDocManager::LayoutPart p)
-{
- d->docEntries[(int)p].clear();
-}
-
-void LayoutDocManager::parse(QTextStream &t,const char *fileName)
-{
- LayoutErrorHandler errorHandler(fileName);
- QXmlInputSource source( t );
- QXmlSimpleReader reader;
- reader.setContentHandler( &LayoutParser::instance() );
- reader.setErrorHandler( &errorHandler );
- reader.parse( source );
-}
-
-//---------------------------------------------------------------------------------
-
-void writeDefaultLayoutFile(const char *fileName)
-{
- QFile f(fileName);
- if (!f.open(IO_WriteOnly))
- {
- err("Failed to open file %s for writing!\n",fileName);
- return;
- }
- QTextStream t(&f);
- t << layout_default;
-}
diff --git a/trunk/src/layout.h b/trunk/src/layout.h
deleted file mode 100644
index e0ea4ca..0000000
--- a/trunk/src/layout.h
+++ /dev/null
@@ -1,198 +0,0 @@
-/******************************************************************************
- *
- *
- *
- *
- * Copyright (C) 1997-2012 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.
- *
- */
-
-#ifndef LAYOUT_H
-#define LAYOUT_H
-
-#include "qtbc.h"
-#include "memberlist.h"
-#include <qlist.h>
-
-class LayoutParser;
-
-/** @brief Base class representing a piece of a documentation page */
-struct LayoutDocEntry
-{
- virtual ~LayoutDocEntry() {}
- enum Kind {
- // Generic items for all pages
- MemberGroups,
- MemberDeclStart, MemberDeclEnd, MemberDecl,
- MemberDefStart, MemberDefEnd, MemberDef,
- BriefDesc, DetailedDesc,
- AuthorSection,
-
- // Class specific items
- ClassIncludes, ClassInlineClasses,
- ClassInheritanceGraph, ClassNestedClasses,
- ClassCollaborationGraph, ClassAllMembersLink,
- ClassUsedFiles,
-
- // Namespace specific items
- NamespaceNestedNamespaces, NamespaceClasses,
- NamespaceInlineClasses,
-
- // File specific items
- FileClasses, FileNamespaces,
- FileIncludes, FileIncludeGraph,
- FileIncludedByGraph, FileSourceLink,
- FileInlineClasses,
-
- // Group specific items
- GroupClasses, GroupInlineClasses, GroupNamespaces,
- GroupDirs, GroupNestedGroups, GroupFiles,
- GroupGraph, GroupPageDocs,
-
- // Directory specific items
- DirSubDirs, DirFiles, DirGraph
-
- };
- virtual Kind kind() const = 0;
-};
-
-/** @brief Represents of a piece of a documentation page without configurable parts */
-struct LayoutDocEntrySimple : LayoutDocEntry
-{
- public:
- LayoutDocEntrySimple(Kind k) : m_kind(k) {}
- Kind kind() const { return m_kind; }
- private:
- Kind m_kind;
-};
-
-struct LayoutDocEntrySection: public LayoutDocEntrySimple
-{
- LayoutDocEntrySection(Kind k,const QCString &tl) :
- LayoutDocEntrySimple(k), title(tl) {}
- QCString title;
-};
-
-/** @brief Represents of a member declaration list with configurable title and subtitle. */
-struct LayoutDocEntryMemberDecl: public LayoutDocEntry
-{
- LayoutDocEntryMemberDecl(MemberList::ListType tp,
- const QCString &tl,const QCString &ss)
- : type(tp), title(tl),subscript(ss) {}
-
- Kind kind() const { return MemberDecl; }
- MemberList::ListType type;
- QCString title;
- QCString subscript;
-};
-
-/** @brief Represents of a member definition list with configurable title. */
-struct LayoutDocEntryMemberDef: public LayoutDocEntry
-{
- LayoutDocEntryMemberDef(MemberList::ListType tp,const QCString &tl)
- : type(tp), title(tl) {}
-
- Kind kind() const { return MemberDef; }
- MemberList::ListType type;
- QCString title;
-};
-
-/** @brief Base class for the layout of a navigation item at the top of the HTML pages. */
-struct LayoutNavEntry
-{
- public:
- enum Kind {
- MainPage,
- Pages,
- Modules,
- Namespaces,
- NamespaceList,
- NamespaceMembers,
- Classes,
- ClassList,
- ClassIndex,
- ClassHierarchy,
- ClassMembers,
- Files,
- FileList,
- FileGlobals,
- Dirs,
- Examples,
- User,
- UserGroup
- };
- LayoutNavEntry(LayoutNavEntry *parent,Kind k,bool vs,const QCString &bf,
- const QCString &tl,const QCString &intro,bool prepend=FALSE)
- : m_parent(parent), m_kind(k), m_visible(vs), m_baseFile(bf), m_title(tl), m_intro(intro)
- { m_children.setAutoDelete(TRUE);
- if (parent) { if (prepend) parent->prependChild(this); else parent->addChild(this); }
- }
- LayoutNavEntry *parent() const { return m_parent; }
- Kind kind() const { return m_kind; }
- QCString baseFile() const { return m_baseFile; }
- QCString title() const { return m_title; }
- QCString intro() const { return m_intro; }
- QCString url() const;
- bool visible() { return m_visible; }
- void clear() { m_children.clear(); }
- void addChild(LayoutNavEntry *e) { m_children.append(e); }
- void prependChild(LayoutNavEntry *e) { m_children.prepend(e); }
- const QList<LayoutNavEntry> &children() const { return m_children; }
- LayoutNavEntry *find(LayoutNavEntry::Kind k,const char *file=0) const;
-
- private:
- LayoutNavEntry() : m_parent(0) {}
- LayoutNavEntry *m_parent;
- Kind m_kind;
- bool m_visible;
- QCString m_baseFile;
- QCString m_title;
- QCString m_intro;
- QList<LayoutNavEntry> m_children;
- friend class LayoutDocManager;
-};
-
-/** @brief Singleton providing access to the (user configurable) layout of the documentation */
-class LayoutDocManager
-{
- class Private;
- public:
- enum LayoutPart
- {
- Class, Namespace, File, Group, Directory,
- NrParts
- };
- /** Returns a reference to this singleton. */
- static LayoutDocManager &instance();
-
- /** Returns the list of LayoutDocEntry's in representation order for a given page identified by @a part. */
- const QList<LayoutDocEntry> &docEntries(LayoutPart part) const;
-
- /** returns the (invisible) root of the navigation tree. */
- LayoutNavEntry *rootNavEntry() const;
-
- /** Parses a user provided layout */
- void parse(QTextStream &t,const char *fileName);
- void init();
- private:
- void addEntry(LayoutPart p,LayoutDocEntry*e);
- void clear(LayoutPart p);
- LayoutDocManager();
- ~LayoutDocManager();
- Private *d;
- friend class LayoutParser;
-};
-
-void writeDefaultLayoutFile(const char *fileName);
-
-#endif
-
diff --git a/trunk/src/layout_default.h b/trunk/src/layout_default.h
deleted file mode 100644
index 6a1ff8f..0000000
--- a/trunk/src/layout_default.h
+++ /dev/null
@@ -1,188 +0,0 @@
-"<doxygenlayout version=\"1.0\">\n"
-" <!-- Navigation index tabs for HTML output -->\n"
-" <navindex>\n"
-" <tab type=\"mainpage\" visible=\"yes\" title=\"\"/>\n"
-" <tab type=\"pages\" visible=\"yes\" title=\"\" intro=\"\"/>\n"
-" <tab type=\"modules\" visible=\"yes\" title=\"\" intro=\"\"/>\n"
-" <tab type=\"namespaces\" visible=\"yes\" title=\"\">\n"
-" <tab type=\"namespacelist\" visible=\"yes\" title=\"\" intro=\"\"/>\n"
-" <tab type=\"namespacemembers\" visible=\"yes\" title=\"\" intro=\"\"/>\n"
-" </tab>\n"
-" <tab type=\"classes\" visible=\"yes\" title=\"\">\n"
-" <tab type=\"classlist\" visible=\"yes\" title=\"\" intro=\"\"/>\n"
-" <tab type=\"classindex\" visible=\"$ALPHABETICAL_INDEX\" title=\"\"/> \n"
-" <tab type=\"hierarchy\" visible=\"yes\" title=\"\" intro=\"\"/>\n"
-" <tab type=\"classmembers\" visible=\"yes\" title=\"\" intro=\"\"/>\n"
-" </tab>\n"
-" <tab type=\"files\" visible=\"yes\" title=\"\">\n"
-" <tab type=\"filelist\" visible=\"yes\" title=\"\" intro=\"\"/>\n"
-" <tab type=\"globals\" visible=\"yes\" title=\"\" intro=\"\"/>\n"
-" </tab>\n"
-" <tab type=\"dirs\" visible=\"yes\" title=\"\" intro=\"\"/>\n"
-" <tab type=\"examples\" visible=\"yes\" title=\"\" intro=\"\"/> \n"
-" </navindex>\n"
-"\n"
-" <!-- Layout definition for a class page -->\n"
-" <class>\n"
-" <briefdescription visible=\"yes\"/>\n"
-" <includes visible=\"$SHOW_INCLUDE_FILES\"/>\n"
-" <inheritancegraph visible=\"$CLASS_GRAPH\"/>\n"
-" <collaborationgraph visible=\"$COLLABORATION_GRAPH\"/>\n"
-" <allmemberslink visible=\"yes\"/>\n"
-" <memberdecl>\n"
-" <nestedclasses visible=\"yes\" title=\"\"/>\n"
-" <publictypes title=\"\"/>\n"
-" <publicslots title=\"\"/>\n"
-" <signals title=\"\"/>\n"
-" <publicmethods title=\"\"/>\n"
-" <publicstaticmethods title=\"\"/>\n"
-" <publicattributes title=\"\"/>\n"
-" <publicstaticattributes title=\"\"/>\n"
-" <protectedtypes title=\"\"/>\n"
-" <protectedslots title=\"\"/>\n"
-" <protectedmethods title=\"\"/>\n"
-" <protectedstaticmethods title=\"\"/>\n"
-" <protectedattributes title=\"\"/>\n"
-" <protectedstaticattributes title=\"\"/>\n"
-" <packagetypes title=\"\"/>\n"
-" <packagemethods title=\"\"/>\n"
-" <packagestaticmethods title=\"\"/>\n"
-" <packageattributes title=\"\"/>\n"
-" <packagestaticattributes title=\"\"/>\n"
-" <properties title=\"\"/>\n"
-" <events title=\"\"/>\n"
-" <privatetypes title=\"\"/>\n"
-" <privateslots title=\"\"/>\n"
-" <privatemethods title=\"\"/>\n"
-" <privatestaticmethods title=\"\"/>\n"
-" <privateattributes title=\"\"/>\n"
-" <privatestaticattributes title=\"\"/>\n"
-" <friends title=\"\"/>\n"
-" <related title=\"\" subtitle=\"\"/>\n"
-" <membergroups visible=\"yes\"/>\n"
-" </memberdecl>\n"
-" <detaileddescription title=\"\"/>\n"
-" <memberdef>\n"
-" <inlineclasses title=\"\"/>\n"
-" <typedefs title=\"\"/>\n"
-" <enums title=\"\"/>\n"
-" <constructors title=\"\"/>\n"
-" <functions title=\"\"/>\n"
-" <related title=\"\"/>\n"
-" <variables title=\"\"/>\n"
-" <properties title=\"\"/>\n"
-" <events title=\"\"/>\n"
-" </memberdef>\n"
-" <usedfiles visible=\"$SHOW_USED_FILES\"/>\n"
-" <authorsection visible=\"yes\"/>\n"
-" </class>\n"
-"\n"
-" <!-- Layout definition for a namespace page -->\n"
-" <namespace>\n"
-" <briefdescription visible=\"yes\"/>\n"
-" <memberdecl>\n"
-" <nestednamespaces visible=\"yes\" title=\"\"/>\n"
-" <classes visible=\"yes\" title=\"\"/>\n"
-" <typedefs title=\"\"/>\n"
-" <enums title=\"\"/>\n"
-" <functions title=\"\"/>\n"
-" <variables title=\"\"/>\n"
-" <membergroups visible=\"yes\"/>\n"
-" </memberdecl>\n"
-" <detaileddescription title=\"\"/>\n"
-" <memberdef>\n"
-" <inlineclasses title=\"\"/>\n"
-" <typedefs title=\"\"/>\n"
-" <enums title=\"\"/>\n"
-" <functions title=\"\"/>\n"
-" <variables title=\"\"/>\n"
-" </memberdef>\n"
-" <authorsection visible=\"yes\"/>\n"
-" </namespace>\n"
-"\n"
-" <!-- Layout definition for a file page -->\n"
-" <file>\n"
-" <briefdescription visible=\"yes\"/>\n"
-" <includes visible=\"$SHOW_INCLUDE_FILES\"/>\n"
-" <includegraph visible=\"$INCLUDE_GRAPH\"/>\n"
-" <includedbygraph visible=\"$INCLUDED_BY_GRAPH\"/>\n"
-" <sourcelink visible=\"yes\"/>\n"
-" <memberdecl>\n"
-" <classes visible=\"yes\" title=\"\"/>\n"
-" <namespaces visible=\"yes\" title=\"\"/>\n"
-" <defines title=\"\"/>\n"
-" <typedefs title=\"\"/>\n"
-" <enums title=\"\"/>\n"
-" <functions title=\"\"/>\n"
-" <variables title=\"\"/>\n"
-" <membergroups visible=\"yes\"/>\n"
-" </memberdecl>\n"
-" <detaileddescription title=\"\"/>\n"
-" <memberdef>\n"
-" <inlineclasses title=\"\"/>\n"
-" <defines title=\"\"/>\n"
-" <typedefs title=\"\"/>\n"
-" <enums title=\"\"/>\n"
-" <functions title=\"\"/>\n"
-" <variables title=\"\"/>\n"
-" </memberdef>\n"
-" <authorsection/>\n"
-" </file>\n"
-"\n"
-" <!-- Layout definition for a group page -->\n"
-" <group>\n"
-" <briefdescription visible=\"yes\"/>\n"
-" <groupgraph visible=\"$GROUP_GRAPHS\"/>\n"
-" <memberdecl>\n"
-" <nestedgroups visible=\"yes\" title=\"\"/>\n"
-" <dirs visible=\"yes\" title=\"\"/>\n"
-" <files visible=\"yes\" title=\"\"/>\n"
-" <namespaces visible=\"yes\" title=\"\"/>\n"
-" <classes visible=\"yes\" title=\"\"/>\n"
-" <defines title=\"\"/>\n"
-" <typedefs title=\"\"/>\n"
-" <enums title=\"\"/>\n"
-" <enumvalues title=\"\"/>\n"
-" <functions title=\"\"/>\n"
-" <variables title=\"\"/>\n"
-" <signals title=\"\"/>\n"
-" <publicslots title=\"\"/>\n"
-" <protectedslots title=\"\"/>\n"
-" <privateslots title=\"\"/>\n"
-" <events title=\"\"/>\n"
-" <properties title=\"\"/>\n"
-" <friends title=\"\"/>\n"
-" <membergroups visible=\"yes\"/>\n"
-" </memberdecl>\n"
-" <detaileddescription title=\"\"/>\n"
-" <memberdef>\n"
-" <pagedocs/>\n"
-" <inlineclasses title=\"\"/>\n"
-" <defines title=\"\"/>\n"
-" <typedefs title=\"\"/>\n"
-" <enums title=\"\"/>\n"
-" <enumvalues title=\"\"/>\n"
-" <functions title=\"\"/>\n"
-" <variables title=\"\"/>\n"
-" <signals title=\"\"/>\n"
-" <publicslots title=\"\"/>\n"
-" <protectedslots title=\"\"/>\n"
-" <privateslots title=\"\"/>\n"
-" <events title=\"\"/>\n"
-" <properties title=\"\"/>\n"
-" <friends title=\"\"/>\n"
-" </memberdef>\n"
-" <authorsection visible=\"yes\"/>\n"
-" </group>\n"
-"\n"
-" <!-- Layout definition for a directory page -->\n"
-" <directory>\n"
-" <briefdescription visible=\"yes\"/>\n"
-" <directorygraph visible=\"yes\"/>\n"
-" <memberdecl>\n"
-" <dirs visible=\"yes\"/>\n"
-" <files visible=\"yes\"/>\n"
-" </memberdecl>\n"
-" <detaileddescription title=\"\"/>\n"
-" </directory>\n"
-"</doxygenlayout>\n"
diff --git a/trunk/src/layout_default.xml b/trunk/src/layout_default.xml
deleted file mode 100644
index 7f62755..0000000
--- a/trunk/src/layout_default.xml
+++ /dev/null
@@ -1,188 +0,0 @@
-<doxygenlayout version="1.0">
- <!-- Navigation index tabs for HTML output -->
- <navindex>
- <tab type="mainpage" visible="yes" title=""/>
- <tab type="pages" visible="yes" title="" intro=""/>
- <tab type="modules" visible="yes" title="" intro=""/>
- <tab type="namespaces" visible="yes" title="">
- <tab type="namespacelist" visible="yes" title="" intro=""/>
- <tab type="namespacemembers" visible="yes" title="" intro=""/>
- </tab>
- <tab type="classes" visible="yes" title="">
- <tab type="classlist" visible="yes" title="" intro=""/>
- <tab type="classindex" visible="$ALPHABETICAL_INDEX" title=""/>
- <tab type="hierarchy" visible="yes" title="" intro=""/>
- <tab type="classmembers" visible="yes" title="" intro=""/>
- </tab>
- <tab type="files" visible="yes" title="">
- <tab type="filelist" visible="yes" title="" intro=""/>
- <tab type="globals" visible="yes" title="" intro=""/>
- </tab>
- <tab type="dirs" visible="yes" title="" intro=""/>
- <tab type="examples" visible="yes" title="" intro=""/>
- </navindex>
-
- <!-- Layout definition for a class page -->
- <class>
- <briefdescription visible="yes"/>
- <includes visible="$SHOW_INCLUDE_FILES"/>
- <inheritancegraph visible="$CLASS_GRAPH"/>
- <collaborationgraph visible="$COLLABORATION_GRAPH"/>
- <allmemberslink visible="yes"/>
- <memberdecl>
- <nestedclasses visible="yes" title=""/>
- <publictypes title=""/>
- <publicslots title=""/>
- <signals title=""/>
- <publicmethods title=""/>
- <publicstaticmethods title=""/>
- <publicattributes title=""/>
- <publicstaticattributes title=""/>
- <protectedtypes title=""/>
- <protectedslots title=""/>
- <protectedmethods title=""/>
- <protectedstaticmethods title=""/>
- <protectedattributes title=""/>
- <protectedstaticattributes title=""/>
- <packagetypes title=""/>
- <packagemethods title=""/>
- <packagestaticmethods title=""/>
- <packageattributes title=""/>
- <packagestaticattributes title=""/>
- <properties title=""/>
- <events title=""/>
- <privatetypes title=""/>
- <privateslots title=""/>
- <privatemethods title=""/>
- <privatestaticmethods title=""/>
- <privateattributes title=""/>
- <privatestaticattributes title=""/>
- <friends title=""/>
- <related title="" subtitle=""/>
- <membergroups visible="yes"/>
- </memberdecl>
- <detaileddescription title=""/>
- <memberdef>
- <inlineclasses title=""/>
- <typedefs title=""/>
- <enums title=""/>
- <constructors title=""/>
- <functions title=""/>
- <related title=""/>
- <variables title=""/>
- <properties title=""/>
- <events title=""/>
- </memberdef>
- <usedfiles visible="$SHOW_USED_FILES"/>
- <authorsection visible="yes"/>
- </class>
-
- <!-- Layout definition for a namespace page -->
- <namespace>
- <briefdescription visible="yes"/>
- <memberdecl>
- <nestednamespaces visible="yes" title=""/>
- <classes visible="yes" title=""/>
- <typedefs title=""/>
- <enums title=""/>
- <functions title=""/>
- <variables title=""/>
- <membergroups visible="yes"/>
- </memberdecl>
- <detaileddescription title=""/>
- <memberdef>
- <inlineclasses title=""/>
- <typedefs title=""/>
- <enums title=""/>
- <functions title=""/>
- <variables title=""/>
- </memberdef>
- <authorsection visible="yes"/>
- </namespace>
-
- <!-- Layout definition for a file page -->
- <file>
- <briefdescription visible="yes"/>
- <includes visible="$SHOW_INCLUDE_FILES"/>
- <includegraph visible="$INCLUDE_GRAPH"/>
- <includedbygraph visible="$INCLUDED_BY_GRAPH"/>
- <sourcelink visible="yes"/>
- <memberdecl>
- <classes visible="yes" title=""/>
- <namespaces visible="yes" title=""/>
- <defines title=""/>
- <typedefs title=""/>
- <enums title=""/>
- <functions title=""/>
- <variables title=""/>
- <membergroups visible="yes"/>
- </memberdecl>
- <detaileddescription title=""/>
- <memberdef>
- <inlineclasses title=""/>
- <defines title=""/>
- <typedefs title=""/>
- <enums title=""/>
- <functions title=""/>
- <variables title=""/>
- </memberdef>
- <authorsection/>
- </file>
-
- <!-- Layout definition for a group page -->
- <group>
- <briefdescription visible="yes"/>
- <groupgraph visible="$GROUP_GRAPHS"/>
- <memberdecl>
- <nestedgroups visible="yes" title=""/>
- <dirs visible="yes" title=""/>
- <files visible="yes" title=""/>
- <namespaces visible="yes" title=""/>
- <classes visible="yes" title=""/>
- <defines title=""/>
- <typedefs title=""/>
- <enums title=""/>
- <enumvalues title=""/>
- <functions title=""/>
- <variables title=""/>
- <signals title=""/>
- <publicslots title=""/>
- <protectedslots title=""/>
- <privateslots title=""/>
- <events title=""/>
- <properties title=""/>
- <friends title=""/>
- <membergroups visible="yes"/>
- </memberdecl>
- <detaileddescription title=""/>
- <memberdef>
- <pagedocs/>
- <inlineclasses title=""/>
- <defines title=""/>
- <typedefs title=""/>
- <enums title=""/>
- <enumvalues title=""/>
- <functions title=""/>
- <variables title=""/>
- <signals title=""/>
- <publicslots title=""/>
- <protectedslots title=""/>
- <privateslots title=""/>
- <events title=""/>
- <properties title=""/>
- <friends title=""/>
- </memberdef>
- <authorsection visible="yes"/>
- </group>
-
- <!-- Layout definition for a directory page -->
- <directory>
- <briefdescription visible="yes"/>
- <directorygraph visible="yes"/>
- <memberdecl>
- <dirs visible="yes"/>
- <files visible="yes"/>
- </memberdecl>
- <detaileddescription title=""/>
- </directory>
-</doxygenlayout>
diff --git a/trunk/src/libdoxycfg.pro.in b/trunk/src/libdoxycfg.pro.in
deleted file mode 100644
index 800c373..0000000
--- a/trunk/src/libdoxycfg.pro.in
+++ /dev/null
@@ -1,27 +0,0 @@
-#
-#
-#
-# Copyright (C) 1997-2012 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.
-#
-# TMake project file for doxygen
-
-TEMPLATE = libdoxycfg.t
-CONFIG = console warn_on staticlib $extraopts
-HEADERS = config.h configoptions.h portable.h
-SOURCES = config.cpp configoptions.cpp portable.cpp portable_c.c
-win32:TMAKE_CXXFLAGS += -DQT_NODLL
-win32-g++:TMAKE_CXXFLAGS += -fno-exceptions -fno-rtti
-INCLUDEPATH += ../qtools
-win32:INCLUDEPATH += .
-DESTDIR = ../lib
-TARGET = doxycfg
-OBJECTS_DIR = ../objects
diff --git a/trunk/src/libdoxycfg.t.in b/trunk/src/libdoxycfg.t.in
deleted file mode 100644
index 29b1623..0000000
--- a/trunk/src/libdoxycfg.t.in
+++ /dev/null
@@ -1,52 +0,0 @@
-#
-#
-#
-# Copyright (C) 1997-2012 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.
-#!
-#! doxygen.t: This is a custom template for building Doxygen
-#!
-#$ IncludeTemplate("lib.t");
-
-LEX = %%FLEX%%
-YACC = %%BISON%%
-
-#${
-sub GenerateDep {
- my($obj,$src,$dep) = @_;
- my(@objv,$srcv,$i,$s,$o,$d,$c);
- @objv = split(/\s+/,$obj);
- @srcv = split(/\s+/,$src);
- for $i ( 0..$#objv ) {
- $s = $srcv[$i];
- $o = $objv[$i];
- next if $s eq "";
- $text .= $o . ": " . $s;
- $text .= " ${linebreak}\n\t\t" . $dep if $dep ne "";
- if ( $moc_output{$s} ne "" ) {
- $text .= " ${linebreak}\n\t\t" . $moc_output{$s};
- }
- $d = &make_depend($s);
- $text .= " ${linebreak}\n\t\t" . $d if $d ne "";
- $text .= "\n";
- }
- chop $text;
-}
-#$}
-
-####################
-
-#$ GenerateDep("config.cpp","config.l");
- $(LEX) -PconfigYY -t config.l >config.cpp
-
-configoptions.cpp: config.xml
- python configgen.py config.xml >configoptions.cpp
-
diff --git a/trunk/src/libdoxygen.pro.in b/trunk/src/libdoxygen.pro.in
deleted file mode 100644
index b6c7dec..0000000
--- a/trunk/src/libdoxygen.pro.in
+++ /dev/null
@@ -1,274 +0,0 @@
-#
-#
-#
-# Copyright (C) 1997-2012 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.
-#
-# TMake project file for doxygen
-
-TEMPLATE = libdoxygen.t
-CONFIG = console warn_on staticlib $extraopts
-HEADERS = arguments.h \
- bufstr.h \
- cite.h \
- classdef.h \
- classlist.h \
- cmdmapper.h \
- code.h \
- commentcnv.h \
- commentscan.h \
- compound_xsd.h \
- config.h \
- constexp.h \
- cppvalue.h \
- debug.h \
- declinfo.h \
- defargs.h \
- defgen.h \
- define.h \
- definition.h \
- diagram.h \
- dirdef.h \
- docparser.h \
- docsets.h \
- doctokenizer.h \
- docvisitor.h \
- dot.h \
- doxygen.h \
- doxygen_bst.h \
- doxygen_css.h \
- eclipsehelp.h \
- entry.h \
- example.h \
- filedef.h \
- filename.h \
- footer_html.h \
- formula.h \
- ftextstream.h \
- ftvhelp.h \
- groupdef.h \
- header_html.h \
- htags.h \
- htmlattrib.h \
- htmldocvisitor.h \
- htmlgen.h \
- htmlhelp.h \
- indexlog.h \
- image.h \
- index.h \
- index_xsd.h \
- jquery_js.h \
- jquery_ui_js.h \
- sizzle_js.h \
- svgpan_js.h \
- language.h \
- latexdocvisitor.h \
- latexgen.h \
- layout.h \
- layout_default.h \
- lockingptr.h \
- logos.h \
- mandocvisitor.h \
- mangen.h \
- markdown.h \
- marshal.h \
- memberdef.h \
- membergroup.h \
- memberlist.h \
- membername.h \
- message.h \
- msc.h \
- namespacedef.h \
- navtree_css.h \
- navtree_js.h \
- objcache.h \
- outputgen.h \
- outputlist.h \
- pagedef.h \
- perlmodgen.h \
- lodepng.h \
- pre.h \
- printdocvisitor.h \
- pycode.h \
- pyscanner.h \
- fortrancode.h \
- fortranscanner.h \
- dbusxmlscanner.h \
- qhp.h \
- qhpxmlwriter.h \
- qtbc.h \
- reflist.h \
- resize_js.h \
- rtfdocvisitor.h \
- rtfgen.h \
- rtfstyle.h \
- scanner.h \
- searchindex.h \
- search_css.h \
- search_js.h \
- search_functions_php.h \
- search_opensearch_php.h \
- section.h \
- sortdict.h \
- store.h \
- tagreader.h \
- tclscanner.h \
- textdocvisitor.h \
- translator.h \
- translator_adapter.h \
- translator_am.h \
- translator_br.h \
- translator_ca.h \
- translator_cn.h \
- translator_cz.h \
- translator_de.h \
- translator_dk.h \
- translator_en.h \
- translator_es.h \
- translator_fi.h \
- translator_fr.h \
- translator_gr.h \
- translator_hr.h \
- translator_hu.h \
- translator_id.h \
- translator_it.h \
- translator_je.h \
- translator_jp.h \
- translator_ke.h \
- translator_kr.h \
- translator_nl.h \
- translator_no.h \
- translator_mk.h \
- translator_pl.h \
- translator_pt.h \
- translator_ro.h \
- translator_ru.h \
- translator_se.h \
- translator_si.h \
- translator_sk.h \
- translator_sr.h \
- translator_tw.h \
- translator_ua.h \
- translator_vi.h \
- translator_za.h \
- types.h \
- unistd.h \
- util.h \
- version.h \
- vhdlcode.h \
- vhdldocgen.h \
- vhdlscanner.h \
- xmldocvisitor.h \
- xmlgen.h
-
-SOURCES = arguments.cpp \
- ce_lex.cpp \
- ce_parse.cpp \
- cite.cpp \
- classdef.cpp \
- classlist.cpp \
- cmdmapper.cpp \
- code.cpp \
- commentcnv.cpp \
- commentscan.cpp \
- cppvalue.cpp \
- dbusxmlscanner.cpp \
- debug.cpp \
- defgen.cpp \
- declinfo.cpp \
- defargs.cpp \
- define.cpp \
- definition.cpp \
- diagram.cpp \
- dirdef.cpp \
- docparser.cpp \
- docsets.cpp \
- doctokenizer.cpp \
- dot.cpp \
- doxygen.cpp \
- eclipsehelp.cpp \
- entry.cpp \
- filedef.cpp \
- filename.cpp \
- formula.cpp \
- ftextstream.cpp \
- ftvhelp.cpp \
- fortrancode.cpp \
- fortranscanner.cpp \
- groupdef.cpp \
- htags.cpp \
- htmldocvisitor.cpp \
- htmlgen.cpp \
- htmlhelp.cpp \
- indexlog.cpp \
- image.cpp \
- index.cpp \
- language.cpp \
- latexdocvisitor.cpp \
- latexgen.cpp \
- layout.cpp \
- lodepng.cpp \
- logos.cpp \
- mandocvisitor.cpp \
- mangen.cpp \
- markdown.cpp \
- marshal.cpp \
- memberdef.cpp \
- membergroup.cpp \
- memberlist.cpp \
- membername.cpp \
- message.cpp \
- msc.cpp \
- namespacedef.cpp \
- objcache.cpp \
- outputgen.cpp \
- outputlist.cpp \
- pagedef.cpp \
- perlmodgen.cpp \
- pre.cpp \
- pycode.cpp \
- pyscanner.cpp \
- qhp.cpp \
- qhpxmlwriter.cpp \
- reflist.cpp \
- rtfdocvisitor.cpp \
- rtfgen.cpp \
- rtfstyle.cpp \
- scanner.cpp \
- searchindex.cpp \
- store.cpp \
- tagreader.cpp \
- tclscanner.cpp \
- textdocvisitor.cpp \
- translator.cpp \
- util.cpp \
- version.cpp \
- vhdlcode.cpp \
- vhdldocgen.cpp \
- vhdlparser.cpp \
- vhdlscanner.cpp \
- xmldocvisitor.cpp \
- xmlgen.cpp
-
-win32:TMAKE_CXXFLAGS += -DQT_NODLL
-win32-msvc:TMAKE_CXXFLAGS += -Zm200
-win32-g++:TMAKE_CXXFLAGS += -fno-exceptions -fno-rtti
-linux-g++:TMAKE_CXXFLAGS += -fno-exceptions -fno-rtti
-INCLUDEPATH += ../qtools
-#INCLUDEPATH += ../libpng
-INCLUDEPATH += ../libmd5
-win32:INCLUDEPATH += .
-#win32-g++:INCLUDEPATH = ../qtools /usr/include/libpng12 ../libmd5
-win32-g++:INCLUDEPATH = ../qtools ../libmd5
-DESTDIR = ../lib
-TARGET = doxygen
-OBJECTS_DIR = ../objects
-
diff --git a/trunk/src/libdoxygen.t.in b/trunk/src/libdoxygen.t.in
deleted file mode 100644
index accf5cf..0000000
--- a/trunk/src/libdoxygen.t.in
+++ /dev/null
@@ -1,177 +0,0 @@
-#
-#
-#
-# Copyright (C) 1997-2012 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.
-#!
-#! doxygen.t: This is a custom template for building Doxygen
-#!
-#$ IncludeTemplate("lib.t");
-
-LEX = %%FLEX%%
-YACC = %%BISON%%
-INCBUFSIZE = $(PERL) increasebuffer.pl
-
-#${
-sub GenerateDep {
- my($obj,$src,$dep) = @_;
- my(@objv,$srcv,$i,$s,$o,$d,$c);
- @objv = split(/\s+/,$obj);
- @srcv = split(/\s+/,$src);
- for $i ( 0..$#objv ) {
- $s = $srcv[$i];
- $o = $objv[$i];
- next if $s eq "";
- $text .= $o . ": " . $s;
- $text .= " ${linebreak}\n\t\t" . $dep if $dep ne "";
- if ( $moc_output{$s} ne "" ) {
- $text .= " ${linebreak}\n\t\t" . $moc_output{$s};
- }
- $d = &make_depend($s);
- $text .= " ${linebreak}\n\t\t" . $d if $d ne "";
- $text .= "\n";
- }
- chop $text;
-}
-#$}
-
-####################
-
-#$ GenerateDep("scanner.cpp","scanner.l");
- $(LEX) -PscanYY -t scanner.l | $(INCBUFSIZE) >scanner.cpp
-
-#$ GenerateDep("code.cpp","code.l");
- $(LEX) -PcodeYY -t code.l | $(INCBUFSIZE) >code.cpp
-
-#$ GenerateDep("pyscanner.cpp","pyscanner.l");
- $(LEX) -PpyscanYY -t pyscanner.l | $(INCBUFSIZE) >pyscanner.cpp
-
-#$ GenerateDep("pycode.cpp","pycode.l");
- $(LEX) -PpycodeYY -t pycode.l | $(INCBUFSIZE) >pycode.cpp
-
-#$ GenerateDep("fortranscanner.cpp","fortranscanner.l");
- $(LEX) -i -PfscanYY -t fortranscanner.l | $(INCBUFSIZE) >fortranscanner.cpp
-
-#$ GenerateDep("fortrancode.cpp","fortrancode.l");
- $(LEX) -i -PfcodeYY -t fortrancode.l | $(INCBUFSIZE) >fortrancode.cpp
-
-#$ GenerateDep("vhdlcode.cpp","vhdlcode.l");
- $(LEX) -i -PvhdlcodeYY -t vhdlcode.l | $(INCBUFSIZE) >vhdlcode.cpp
-
-#$ GenerateDep("tclscanner.cpp","tclscanner.l");
- $(LEX) -i -PtclscanYY -t tclscanner.l | $(INCBUFSIZE) >tclscanner.cpp
-
-#$ GenerateDep("pre.cpp","pre.l");
- $(LEX) -PpreYY -t pre.l | $(INCBUFSIZE) >pre.cpp
-
-#$ GenerateDep("declinfo.cpp","declinfo.l");
- $(LEX) -PdeclinfoYY -t declinfo.l | $(INCBUFSIZE) >declinfo.cpp
-
-#$ GenerateDep("defargs.cpp","defargs.l");
- $(LEX) -PdefargsYY -t defargs.l | $(INCBUFSIZE) >defargs.cpp
-
-#$ GenerateDep("doctokenizer.cpp","doctokenizer.l");
- $(LEX) -PdoctokenizerYY -t doctokenizer.l | $(INCBUFSIZE) >doctokenizer.cpp
-
-#$ GenerateDep("commentcnv.cpp","commentcnv.l");
- $(LEX) -PcommentcnvYY -t commentcnv.l | $(INCBUFSIZE) >commentcnv.cpp
-
-#$ GenerateDep("commentscan.cpp","commentscan.l");
- $(LEX) -PcommentScanYY -t commentscan.l | $(INCBUFSIZE) >commentscan.cpp
-
-#$ GenerateDep("ce_lex.cpp","constexp.l","ce_parse.h");
- $(LEX) -PcppExpYY -t constexp.l | $(INCBUFSIZE) >ce_lex.cpp
-
-#$ GenerateDep("ce_parse.cpp","constexp.y");
- $(YACC) -l -p cppExpYY constexp.y -o ce_parse.cpp
-
-#$ GenerateDep("ce_parse.h","constexp.y");
- $(YACC) -l -d -p cppExpYY constexp.y -o ce_parse.c
- -rm ce_parse.c
-
-#$ GenerateDep("vhdlscanner.cpp","vhdlscanner.l","vhdlparser.h");
- $(LEX) -i -PvhdlScanYY -t vhdlscanner.l | $(INCBUFSIZE) >vhdlscanner.cpp
-
-#$ GenerateDep("vhdlparser.cpp","vhdlparser.y");
- $(YACC) -l -p vhdlScanYY vhdlparser.y -o vhdlparser.cpp
-
-#$ GenerateDep("vhdlparser.h","vhdlparser.y");
- $(YACC) -l -d -p vhdlScanYY vhdlparser.y -o vhdlparser.c
- -rm vhdlparser.c
-
-#$ GenerateDep("layout.cpp","layout_default.h");
-
-TO_C_CMD=sed -e "s/\\\\/\\\\\\\\/g" -e "s/\"/\\\\\"/g" -e "s/^/\"/g" -e "s/$$/\\\\n\"/g"
-
-index_xsd.h: index.xsd
- cat index.xsd | $(TO_C_CMD) >index_xsd.h
-
-compound_xsd.h: compound.xsd
- cat compound.xsd | $(TO_C_CMD) >compound_xsd.h
-
-layout_default.h: layout_default.xml
- cat layout_default.xml | $(TO_C_CMD) >layout_default.h
-
-header_html.h: header.html
- cat header.html | $(TO_C_CMD) >header_html.h
-
-footer_html.h: footer.html
- cat footer.html | $(TO_C_CMD) >footer_html.h
-
-search_functions_php.h: search_functions.php
- cat search_functions.php | $(TO_C_CMD) >search_functions_php.h
-
-search_opensearch_php.h: search_opensearch.php
- cat search_opensearch.php | $(TO_C_CMD) >search_opensearch_php.h
-
-search_js.h: search.js
- cat search.js | $(TO_C_CMD) >search_js.h
-
-search_css.h: search.css
- cat search.css | $(TO_C_CMD) >search_css.h
-
-doxygen_css.h: doxygen.css
- cat doxygen.css | $(TO_C_CMD) >doxygen_css.h
-
-navtree_js.h: navtree.js
- cat navtree.js | $(TO_C_CMD) >navtree_js.h
-
-navindex_js.h: navindex.js
- cat navindex.js | $(TO_C_CMD) >navindex_js.h
-
-resize_js.h: resize.js
- cat resize.js | $(TO_C_CMD) >resize_js.h
-
-jquery_js.h: jquery.js
- cat jquery.js | $(TO_C_CMD) >jquery_js.h
-
-jquery_ui_js.h: jquery_ui.js
- cat jquery_ui.js | $(TO_C_CMD) >jquery_ui_js.h
-
-jquery_fx_js.h: jquery_fx.js
- cat jquery_fx.js | $(TO_C_CMD) >jquery_fx_js.h
-
-sizzle_js.h: sizzle.js
- cat sizzle.js | $(TO_C_CMD) >sizzle_js.h
-
-navtree_css.h: navtree.css
- cat navtree.css | $(TO_C_CMD) >navtree_css.h
-
-svgpan_js.h: svgpan.js
- cat svgpan.js | $(TO_C_CMD) >svgpan_js.h
-
-doxygen_bst.h: doxygen.bst
- cat doxygen.bst | $(TO_C_CMD) >doxygen_bst.h
-
-bib2xhtml.h: bib2xhtml.pl
- cat bib2xhtml.pl | $(TO_C_CMD) >bib2xhtml.h
-
-
diff --git a/trunk/src/lockingptr.h b/trunk/src/lockingptr.h
deleted file mode 100644
index 5fc328d..0000000
--- a/trunk/src/lockingptr.h
+++ /dev/null
@@ -1,162 +0,0 @@
-/******************************************************************************
- *
- *
- *
- * Copyright (C) 1997-2012 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.
- *
- */
-
-#ifndef LOCKINGPTR_H
-#define LOCKINGPTR_H
-
-/*! @brief Abstract interface for lockable objects.
- *
- * By implementing this interface, a smart pointer can be created which
- * will lock this object. This is used to prevent that an internal pointer
- * owned by a lockable object would become invalid when the object is removed from
- * memory, leaving the client with an invalid pointer. By letting the client use
- * a smart pointer instead of the real object the object will be locked into
- * memory until the pointer is no longer used, at which point the owner object will be
- * unlock and can be removed from memory.
- */
-class LockableObj
-{
- public:
- LockableObj() : m_lockCount(0) {}
- virtual ~LockableObj() {}
-
- /*! Returns TRUE if the object is currently locked. */
- bool isLocked() const { return m_lockCount>0; }
-
-//VC++6.0 workaround
-// protected:
- /*! Called when the object is locked. */
- virtual void lock() const = 0;
-
- /*! Called when the object is unlocked. */
- virtual void unlock() const = 0;
-
-//VC++6.0 workaround
-// private:
-// template<class T> friend class LockingPtr;
- int m_lockCount;
-};
-
-/*! @brief Smart pointer which keeps a lock on the owner of the pointer.
- *
- * With the pointer an owner object derived from LockableObj is associated.
- * As long as the smart object exists it will keep a lock on the obj by calling
- * LockableObj::lock(). Smart pointers can be copied and passed by value. As
- * soon as there or no more smart pointer references to the object,
- * LockableObj::unlock() will be called automatically.
- */
-template<class T> class LockingPtr
-{
- LockableObj *m_owner;
- const T *m_ptr;
-
- public:
- /*! Creates a smart pointer for pointer \a p owned by object \a o.
- */
- LockingPtr(const LockableObj *o,const T* p)
- {
- if (o->m_lockCount==0) o->lock();
- m_owner = (LockableObj *)o;
- m_owner->m_lockCount++;
- m_ptr = p;
- }
-
- /*! Copies the smart pointer \a lp
- */
- LockingPtr(const LockingPtr &lp)
- {
- m_ptr = lp.m_ptr;
- m_owner = lp.m_owner;
- m_owner->m_lockCount++;
- }
-
- /*! Assigns the smart pointer \a lp
- */
- LockingPtr &operator=(const LockingPtr &lp)
- {
- m_owner->m_lockCount--;
- if (m_owner->m_lockCount==0) // no more references
- {
- m_owner->unlock();
- }
- m_ptr = lp.m_ptr;
- m_owner = lp.m_owner;
- m_owner->m_lockCount++;
- return *this;
- }
-
- /*! Destroys the smart pointer, will unlock the owner.
- */
- ~LockingPtr()
- {
- m_owner->m_lockCount--;
- if (m_owner->m_lockCount==0) // no more references
- {
- m_owner->unlock();
- }
- }
-
- bool isNull() const
- {
- return m_ptr==0;
- }
-
- bool operator!() const
- {
- return !m_ptr;
- }
-
- bool operator==(T *p) const
- {
- return m_ptr==p;
- }
-
- bool operator==(const LockingPtr &lp) const
- {
- return m_ptr==lp.m_ptr;
- }
-
- bool operator!=(T *p) const
- {
- return m_ptr!=p;
- }
-
- bool operator!=(const LockingPtr &lp) const
- {
- return m_ptr!=lp.m_ptr;
- }
-
- /*! Dereference operator */
- const T& operator* () const
- {
- return *m_ptr;
- }
-
- T* pointer() const
- {
- return (T*)m_ptr;
- }
-
- /*! Pointer operator */
- T* operator-> () const
- {
- return (T*)m_ptr;
- }
-};
-
-#endif // LOCKINGPTR_H
-
diff --git a/trunk/src/lodepng.cpp b/trunk/src/lodepng.cpp
deleted file mode 100644
index 638dbf4..0000000
--- a/trunk/src/lodepng.cpp
+++ /dev/null
@@ -1,4158 +0,0 @@
-/*
-LodePNG version 20080927
-
-Copyright (c) 2005-2008 Lode Vandevenne
-
-This software is provided 'as-is', without any express or implied
-warranty. In no event will the authors be held liable for any damages
-arising from the use of this software.
-
-Permission is granted to anyone to use this software for any purpose,
-including commercial applications, and to alter it and redistribute it
-freely, subject to the following restrictions:
-
- 1. The origin of this software must not be misrepresented; you must not
- claim that you wrote the original software. If you use this software
- in a product, an acknowledgment in the product documentation would be
- appreciated but is not required.
-
- 2. Altered source versions must be plainly marked as such, and must not be
- misrepresented as being the original software.
-
- 3. This notice may not be removed or altered from any source
- distribution.
-*/
-
-/*
-The manual and changelog can be found in the header file "lodepng.h"
-You are free to name this file lodepng.cpp or lodepng.c depending on your usage.
-*/
-
-#include "lodepng.h"
-#include "portable.h"
-
-#define USE_BRUTE_FORCE_ENCODING 1
-
-#define VERSION_STRING "20080927"
-
-/* ////////////////////////////////////////////////////////////////////////// */
-/* / Tools For C / */
-/* ////////////////////////////////////////////////////////////////////////// */
-
-/*
-About these tools (vector, uivector, ucvector and string):
--LodePNG was originally written in C++. The vectors replace the std::vectors that were used in the C++ version.
--The string tools are made to avoid problems with compilers that declare things like strncat as deprecated.
--They're not used in the interface, only internally in this file, so all their functions are made static.
-*/
-
-#ifdef LODEPNG_COMPILE_ZLIB
-#ifdef LODEPNG_COMPILE_ENCODER
-
-typedef struct vector /*this one is used only by the deflate compressor*/
-{
- void* data;
- size_t size; /*in groups of bytes depending on type*/
- size_t allocsize; /*in bytes*/
- unsigned typesize; /*sizeof the type you store in data*/
-} vector;
-
-static unsigned vector_resize(vector* p, size_t size) /*returns 1 if success, 0 if failure ==> nothing done*/
-{
- if(size * p->typesize > p->allocsize)
- {
- size_t newsize = size * p->typesize * 2;
- void* data = realloc(p->data, newsize);
- if(data)
- {
- p->allocsize = newsize;
- p->data = data;
- p->size = size;
- }
- else return 0;
- }
- else p->size = size;
- return 1;
-}
-
-static unsigned vector_resized(vector* p, size_t size, void dtor(void*)) /*resize and use destructor on elements if it gets smaller*/
-{
- size_t i;
- if(size < p->size) for(i = size; i < p->size; i++) dtor(&((char*)(p->data))[i * p->typesize]);
- return vector_resize(p, size);
-}
-
-static void vector_cleanup(void* p)
-{
- ((vector*)p)->size = ((vector*)p)->allocsize = 0;
- free(((vector*)p)->data);
- ((vector*)p)->data = NULL;
-}
-
-static void vector_cleanupd(vector* p, void dtor(void*)) /*clear and use destructor on elements*/
-{
- vector_resized(p, 0, dtor);
- vector_cleanup(p);
-}
-
-static void vector_init(vector* p, unsigned typesize)
-{
- p->data = NULL;
- p->size = p->allocsize = 0;
- p->typesize = typesize;
-}
-
-static void vector_swap(vector* p, vector* q) /*they're supposed to have the same typesize*/
-{
- size_t tmp;
- void* tmpp;
- tmp = p->size; p->size = q->size; q->size = tmp;
- tmp = p->allocsize; p->allocsize = q->allocsize; q->allocsize = tmp;
- tmpp = p->data; p->data = q->data; q->data = tmpp;
-}
-
-static void* vector_get(vector* p, size_t index)
-{
- return &((char*)p->data)[index * p->typesize];
-}
-#endif /*LODEPNG_COMPILE_ENCODER*/
-#endif /*LODEPNG_COMPILE_ZLIB*/
-
-/* /////////////////////////////////////////////////////////////////////////// */
-
-#ifdef LODEPNG_COMPILE_ZLIB
-typedef struct uivector
-{
- unsigned* data;
- size_t size; /*size in number of unsigned longs*/
- size_t allocsize; /*allocated size in bytes*/
-} uivector;
-
-static void uivector_cleanup(void* p)
-{
- ((uivector*)p)->size = ((uivector*)p)->allocsize = 0;
- free(((uivector*)p)->data);
- ((uivector*)p)->data = NULL;
-}
-
-static unsigned uivector_resize(uivector* p, size_t size) /*returns 1 if success, 0 if failure ==> nothing done*/
-{
- if(size * sizeof(unsigned) > p->allocsize)
- {
- size_t newsize = size * sizeof(unsigned) * 2;
- void* data = realloc(p->data, newsize);
- if(data)
- {
- p->allocsize = newsize;
- p->data = (unsigned*)data;
- p->size = size;
- }
- else return 0;
- }
- else p->size = size;
- return 1;
-}
-
-static unsigned uivector_resizev(uivector* p, size_t size, unsigned value) /*resize and give all new elements the value*/
-{
- size_t oldsize = p->size, i;
- if(!uivector_resize(p, size)) return 0;
- for(i = oldsize; i < size; i++) p->data[i] = value;
- return 1;
-}
-
-static void uivector_init(uivector* p)
-{
- p->data = NULL;
- p->size = p->allocsize = 0;
-}
-
-#ifdef LODEPNG_COMPILE_ENCODER
-static unsigned uivector_push_back(uivector* p, unsigned c) /*returns 1 if success, 0 if failure ==> nothing done*/
-{
- if(!uivector_resize(p, p->size + 1)) return 0;
- p->data[p->size - 1] = c;
- return 1;
-}
-
-static unsigned uivector_copy(uivector* p, const uivector* q) /*copy q to p, returns 1 if success, 0 if failure ==> nothing done*/
-{
- size_t i;
- if(!uivector_resize(p, q->size)) return 0;
- for(i = 0; i < q->size; i++) p->data[i] = q->data[i];
- return 1;
-}
-
-static void uivector_swap(uivector* p, uivector* q)
-{
- size_t tmp;
- unsigned* tmpp;
- tmp = p->size; p->size = q->size; q->size = tmp;
- tmp = p->allocsize; p->allocsize = q->allocsize; q->allocsize = tmp;
- tmpp = p->data; p->data = q->data; q->data = tmpp;
-}
-#endif /*LODEPNG_COMPILE_ENCODER*/
-#endif /*LODEPNG_COMPILE_ZLIB*/
-
-/* /////////////////////////////////////////////////////////////////////////// */
-
-typedef struct ucvector
-{
- unsigned char* data;
- size_t size; /*used size*/
- size_t allocsize; /*allocated size*/
-} ucvector;
-
-static void ucvector_cleanup(void* p)
-{
- ((ucvector*)p)->size = ((ucvector*)p)->allocsize = 0;
- free(((ucvector*)p)->data);
- ((ucvector*)p)->data = NULL;
-}
-
-static unsigned ucvector_resize(ucvector* p, size_t size) /*returns 1 if success, 0 if failure ==> nothing done*/
-{
- if(size * sizeof(unsigned) > p->allocsize)
- {
- size_t newsize = size * sizeof(unsigned) * 2;
- void* data = realloc(p->data, newsize);
- if(data)
- {
- p->allocsize = newsize;
- p->data = (unsigned char*)data;
- p->size = size;
- }
- else return 0; /*error: not enough memory*/
- }
- else p->size = size;
- return 1;
-}
-
-#ifdef LODEPNG_COMPILE_DECODER
-#ifdef LODEPNG_COMPILE_PNG
-static unsigned ucvector_resizev(ucvector* p, size_t size, unsigned char value) /*resize and give all new elements the value*/
-{
- size_t oldsize = p->size, i;
- if(!ucvector_resize(p, size)) return 0;
- for(i = oldsize; i < size; i++) p->data[i] = value;
- return 1;
-}
-#endif /*LODEPNG_COMPILE_PNG*/
-#endif /*LODEPNG_COMPILE_DECODER*/
-
-static void ucvector_init(ucvector* p)
-{
- p->data = NULL;
- p->size = p->allocsize = 0;
-}
-
-#ifdef LODEPNG_COMPILE_ZLIB
-/*you can both convert from vector to buffer&size and vica versa*/
-static void ucvector_init_buffer(ucvector* p, unsigned char* buffer, size_t size)
-{
- p->data = buffer;
- p->allocsize = p->size = size;
-}
-#endif /*LODEPNG_COMPILE_ZLIB*/
-
-static unsigned ucvector_push_back(ucvector* p, unsigned char c) /*returns 1 if success, 0 if failure ==> nothing done*/
-{
- if(!ucvector_resize(p, p->size + 1)) return 0;
- p->data[p->size - 1] = c;
- return 1;
-}
-
-/* /////////////////////////////////////////////////////////////////////////// */
-
-#ifdef LODEPNG_COMPILE_PNG
-#ifdef LODEPNG_COMPILE_ANCILLARY_CHUNKS
-static unsigned string_resize(char** out, size_t size) /*returns 1 if success, 0 if failure ==> nothing done*/
-{
- char* data = (char*)realloc(*out, size + 1);
- if(data)
- {
- data[size] = 0; /*null termination char*/
- *out = data;
- }
- return data != 0;
-}
-
-static void string_init(char** out) /*init a {char*, size_t} pair for use as string*/
-{
- *out = NULL;
- string_resize(out, 0);
-}
-
-static void string_cleanup(char** out) /*free the above pair again*/
-{
- free(*out);
- *out = NULL;
-}
-
-static void string_set(char** out, const char* in)
-{
- size_t insize = strlen(in), i = 0;
- if(string_resize(out, insize)) for(i = 0; i < insize; i++) (*out)[i] = in[i];
-}
-#endif /*LODEPNG_COMPILE_ANCILLARY_CHUNKS*/
-#endif /*LODEPNG_COMPILE_PNG*/
-
-#ifdef LODEPNG_COMPILE_ZLIB
-
-/* ////////////////////////////////////////////////////////////////////////// */
-/* / Reading and writing single bits and bytes from/to stream for Deflate / */
-/* ////////////////////////////////////////////////////////////////////////// */
-
-#ifdef LODEPNG_COMPILE_ENCODER
-static void addBitToStream(size_t* bitpointer, ucvector* bitstream, unsigned char bit)
-{
- if((*bitpointer) % 8 == 0) ucvector_push_back(bitstream, 0); /*add a new byte at the end*/
- (bitstream->data[bitstream->size - 1]) |= (bit << ((*bitpointer) & 0x7)); /*earlier bit of huffman code is in a lesser significant bit of an earlier byte*/
- (*bitpointer)++;
-}
-
-static void addBitsToStream(size_t* bitpointer, ucvector* bitstream, unsigned value, size_t nbits)
-{
- size_t i;
- for(i = 0; i < nbits; i++) addBitToStream(bitpointer, bitstream, (unsigned char)((value >> i) & 1));
-}
-
-static void addBitsToStreamReversed(size_t* bitpointer, ucvector* bitstream, unsigned value, size_t nbits)
-{
- size_t i;
- for(i = 0; i < nbits; i++) addBitToStream(bitpointer, bitstream, (unsigned char)((value >> (nbits - 1 - i)) & 1));
-}
-#endif /*LODEPNG_COMPILE_ENCODER*/
-
-#ifdef LODEPNG_COMPILE_DECODER
-static unsigned char readBitFromStream(size_t* bitpointer, const unsigned char* bitstream)
-{
- unsigned char result = (unsigned char)((bitstream[(*bitpointer) >> 3] >> ((*bitpointer) & 0x7)) & 1);
- (*bitpointer)++;
- return result;
-}
-
-static unsigned readBitsFromStream(size_t* bitpointer, const unsigned char* bitstream, size_t nbits)
-{
- unsigned result = 0, i;
- for(i = 0; i < nbits; i++) result += ((unsigned)readBitFromStream(bitpointer, bitstream)) << i;
- return result;
-}
-#endif /*LODEPNG_COMPILE_DECODER*/
-
-/* ////////////////////////////////////////////////////////////////////////// */
-/* / Deflate - Huffman / */
-/* ////////////////////////////////////////////////////////////////////////// */
-
-#define FIRST_LENGTH_CODE_INDEX 257
-#define LAST_LENGTH_CODE_INDEX 285
-#define NUM_DEFLATE_CODE_SYMBOLS 288 /*256 literals, the end code, some length codes, and 2 unused codes*/
-#define NUM_DISTANCE_SYMBOLS 32 /*the distance codes have their own symbols, 30 used, 2 unused*/
-#define NUM_CODE_LENGTH_CODES 19 /*the code length codes. 0-15: code lengths, 16: copy previous 3-6 times, 17: 3-10 zeros, 18: 11-138 zeros*/
-
-static const unsigned LENGTHBASE[29] /*the base lengths represented by codes 257-285*/
- = {3, 4, 5, 6, 7, 8, 9, 10, 11, 13, 15, 17, 19, 23, 27, 31, 35, 43, 51, 59, 67, 83, 99, 115, 131, 163, 195, 227, 258};
-static const unsigned LENGTHEXTRA[29] /*the extra bits used by codes 257-285 (added to base length)*/
- = {0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5, 0};
-static const unsigned DISTANCEBASE[30] /*the base backwards distances (the bits of distance codes appear after length codes and use their own huffman tree)*/
- = {1, 2, 3, 4, 5, 7, 9, 13, 17, 25, 33, 49, 65, 97, 129, 193, 257, 385, 513, 769, 1025, 1537, 2049, 3073, 4097, 6145, 8193, 12289, 16385, 24577};
-static const unsigned DISTANCEEXTRA[30] /*the extra bits of backwards distances (added to base)*/
- = {0, 0, 0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 8, 8, 9, 9, 10, 10, 11, 11, 12, 12, 13, 13};
-static const unsigned CLCL[NUM_CODE_LENGTH_CODES] /*the order in which "code length alphabet code lengths" are stored, out of this the huffman tree of the dynamic huffman tree lengths is generated*/
- = {16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15};
-
-/* /////////////////////////////////////////////////////////////////////////// */
-
-#ifdef LODEPNG_COMPILE_ENCODER
-/*terminology used for the package-merge algorithm and the coin collector's problem*/
-typedef struct Coin /*a coin can be multiple coins (when they're merged)*/
-{
- uivector symbols;
- float weight; /*the sum of all weights in this coin*/
-} Coin;
-
-static void Coin_init(Coin* c)
-{
- uivector_init(&c->symbols);
-}
-
-static void Coin_cleanup(void* c) /*void* so that this dtor can be given as function pointer to the vector resize function*/
-{
- uivector_cleanup(&((Coin*)c)->symbols);
-}
-
-static void Coin_copy(Coin* c1, const Coin* c2)
-{
- c1->weight = c2->weight;
- uivector_copy(&c1->symbols, &c2->symbols);
-}
-
-static void addCoins(Coin* c1, const Coin* c2)
-{
- unsigned i;
- for(i = 0; i < c2->symbols.size; i++) uivector_push_back(&c1->symbols, c2->symbols.data[i]);
- c1->weight += c2->weight;
-}
-
-static void Coin_sort(Coin* data, size_t amount) /*combsort*/
-{
- size_t gap = amount;
- unsigned char swapped = 0;
- while(gap > 1 || swapped)
- {
- size_t i;
- gap = (gap * 10) / 13; /*shrink factor 1.3*/
- if(gap == 9 || gap == 10) gap = 11; /*combsort11*/
- if(gap < 1) gap = 1;
- swapped = 0;
- for(i = 0; i < amount - gap; i++)
- {
- size_t j = i + gap;
- if(data[j].weight < data[i].weight)
- {
- float temp = data[j].weight; data[j].weight = data[i].weight; data[i].weight = temp;
- uivector_swap(&data[i].symbols, &data[j].symbols);
- swapped = 1;
- }
- }
- }
-}
-#endif /*LODEPNG_COMPILE_ENCODER*/
-
-typedef struct HuffmanTree
-{
- uivector tree2d;
- uivector tree1d;
- uivector lengths; /*the lengths of the codes of the 1d-tree*/
- unsigned maxbitlen; /*maximum number of bits a single code can get*/
- unsigned numcodes; /*number of symbols in the alphabet = number of codes*/
-} HuffmanTree;
-
-/*function used for debug purposes*/
-/*#include <iostream>
-static void HuffmanTree_draw(HuffmanTree* tree)
-{
- std::cout << "tree. length: " << tree->numcodes << " maxbitlen: " << tree->maxbitlen << std::endl;
- for(size_t i = 0; i < tree->tree1d.size; i++)
- {
- if(tree->lengths.data[i])
- std::cout << i << " " << tree->tree1d.data[i] << " " << tree->lengths.data[i] << std::endl;
- }
- std::cout << std::endl;
-}*/
-
-static void HuffmanTree_init(HuffmanTree* tree)
-{
- uivector_init(&tree->tree2d);
- uivector_init(&tree->tree1d);
- uivector_init(&tree->lengths);
-}
-
-static void HuffmanTree_cleanup(HuffmanTree* tree)
-{
- uivector_cleanup(&tree->tree2d);
- uivector_cleanup(&tree->tree1d);
- uivector_cleanup(&tree->lengths);
-}
-
-/*the tree representation used by the decoder. return value is error*/
-static unsigned HuffmanTree_make2DTree(HuffmanTree* tree)
-{
- unsigned nodefilled = 0; /*up to which node it is filled*/
- unsigned treepos = 0; /*position in the tree (1 of the numcodes columns)*/
- unsigned n, i;
-
- if(!uivector_resize(&tree->tree2d, tree->numcodes * 2)) return 9901; /*if failed return not enough memory error*/
- /*convert tree1d[] to tree2d[][]. In the 2D array, a value of 32767 means uninited, a value >= numcodes is an address to another bit, a value < numcodes is a code. The 2 rows are the 2 possible bit values (0 or 1), there are as many columns as codes - 1
- a good huffmann tree has N * 2 - 1 nodes, of which N - 1 are internal nodes. Here, the internal nodes are stored (what their 0 and 1 option point to). There is only memory for such good tree currently, if there are more nodes (due to too long length codes), error 55 will happen*/
- for(n = 0; n < tree->numcodes * 2; n++) tree->tree2d.data[n] = 32767; /*32767 here means the tree2d isn't filled there yet*/
-
- for(n = 0; n < tree->numcodes; n++) /*the codes*/
- for(i = 0; i < tree->lengths.data[n]; i++) /*the bits for this code*/
- {
- unsigned char bit = (unsigned char)((tree->tree1d.data[n] >> (tree->lengths.data[n] - i - 1)) & 1);
- if(treepos > tree->numcodes - 2) return 55; /*error 55: oversubscribed; see description in header*/
- if(tree->tree2d.data[2 * treepos + bit] == 32767) /*not yet filled in*/
- {
- if(i + 1 == tree->lengths.data[n]) /*last bit*/
- {
- tree->tree2d.data[2 * treepos + bit] = n; /*put the current code in it*/
- treepos = 0;
- }
- else /*put address of the next step in here, first that address has to be found of course (it's just nodefilled + 1)...*/
- {
- nodefilled++;
- tree->tree2d.data[2 * treepos + bit] = nodefilled + tree->numcodes; /*addresses encoded with numcodes added to it*/
- treepos = nodefilled;
- }
- }
- else treepos = tree->tree2d.data[2 * treepos + bit] - tree->numcodes;
- }
- for(n = 0; n < tree->numcodes * 2; n++) if(tree->tree2d.data[n] == 32767) tree->tree2d.data[n] = 0; /*remove possible remaining 32767's*/
-
- return 0;
-}
-
-static unsigned HuffmanTree_makeFromLengths2(HuffmanTree* tree) /*given that numcodes, lengths and maxbitlen are already filled in correctly. return value is error.*/
-{
- uivector blcount;
- uivector nextcode;
- unsigned bits, n, error = 0;
-
- uivector_init(&blcount);
- uivector_init(&nextcode);
- if(!uivector_resize(&tree->tree1d, tree->numcodes)
- || !uivector_resizev(&blcount, tree->maxbitlen + 1, 0)
- || !uivector_resizev(&nextcode, tree->maxbitlen + 1, 0))
- error = 9902;
-
- if(!error)
- {
- /*step 1: count number of instances of each code length*/
- for(bits = 0; bits < tree->numcodes; bits++) blcount.data[tree->lengths.data[bits]]++;
- /*step 2: generate the nextcode values*/
- for(bits = 1; bits <= tree->maxbitlen; bits++) nextcode.data[bits] = (nextcode.data[bits - 1] + blcount.data[bits - 1]) << 1;
- /*step 3: generate all the codes*/
- for(n = 0; n < tree->numcodes; n++) if(tree->lengths.data[n] != 0) tree->tree1d.data[n] = nextcode.data[tree->lengths.data[n]]++;
- }
-
- uivector_cleanup(&blcount);
- uivector_cleanup(&nextcode);
-
- if(!error) return HuffmanTree_make2DTree(tree);
- else return error;
-}
-
-/*given the code lengths (as stored in the PNG file), generate the tree as defined by Deflate. maxbitlen is the maximum bits that a code in the tree can have. return value is error.*/
-static unsigned HuffmanTree_makeFromLengths(HuffmanTree* tree, const unsigned* bitlen, size_t numcodes, unsigned maxbitlen)
-{
- unsigned i;
- if(!uivector_resize(&tree->lengths, numcodes)) return 9903;
- for(i = 0; i < numcodes; i++) tree->lengths.data[i] = bitlen[i];
- tree->numcodes = (unsigned)numcodes; /*number of symbols*/
- tree->maxbitlen = maxbitlen;
- return HuffmanTree_makeFromLengths2(tree);
-}
-
-#ifdef LODEPNG_COMPILE_ENCODER
-static unsigned HuffmanTree_fillInCoins(vector* coins, const unsigned* frequencies, unsigned numcodes, size_t sum)
-{
- unsigned i;
- for(i = 0; i < numcodes; i++)
- {
- Coin* coin;
- if(frequencies[i] == 0) continue; /*it's important to exclude symbols that aren't present*/
- if(!vector_resize(coins, coins->size + 1)) { vector_cleanup(coins); return 9904; }
- coin = (Coin*)(vector_get(coins, coins->size - 1));
- Coin_init(coin);
- coin->weight = frequencies[i] / (float)sum;
- uivector_push_back(&coin->symbols, i);
- }
- if(coins->size) Coin_sort((Coin*)coins->data, coins->size);
- return 0;
-}
-
-static unsigned HuffmanTree_makeFromFrequencies(HuffmanTree* tree, const unsigned* frequencies, size_t numcodes, unsigned maxbitlen)
-{
- unsigned i, j;
- size_t sum = 0, numpresent = 0;
- unsigned error = 0;
-
- vector prev_row; /*type Coin, the previous row of coins*/
- vector coins; /*type Coin, the coins of the currently calculated row*/
-
- tree->maxbitlen = maxbitlen;
-
- for(i = 0; i < numcodes; i++)
- {
- if(frequencies[i] > 0)
- {
- numpresent++;
- sum += frequencies[i];
- }
- }
-
- if(numcodes == 0) return 80; /*error: a tree of 0 symbols is not supposed to be made*/
- tree->numcodes = (unsigned)numcodes; /*number of symbols*/
- uivector_resize(&tree->lengths, 0);
- if(!uivector_resizev(&tree->lengths, tree->numcodes, 0)) return 9905;
-
- if(numpresent == 0) /*there are no symbols at all, in that case add one symbol of value 0 to the tree (see RFC 1951 section 3.2.7) */
- {
- tree->lengths.data[0] = 1;
- return HuffmanTree_makeFromLengths2(tree);
- }
- else if(numpresent == 1) /*the package merge algorithm gives wrong results if there's only one symbol (theoretically 0 bits would then suffice, but we need a proper symbol for zlib)*/
- {
- for(i = 0; i < numcodes; i++) if(frequencies[i]) tree->lengths.data[i] = 1;
- return HuffmanTree_makeFromLengths2(tree);
- }
-
- vector_init(&coins, sizeof(Coin));
- vector_init(&prev_row, sizeof(Coin));
-
- /*Package-Merge algorithm represented by coin collector's problem
- For every symbol, maxbitlen coins will be created*/
-
- /*first row, lowest denominator*/
- error = HuffmanTree_fillInCoins(&coins, frequencies, tree->numcodes, sum);
- if(!error)
- {
- for(j = 1; j <= maxbitlen && !error; j++) /*each of the remaining rows*/
- {
- vector_swap(&coins, &prev_row); /*swap instead of copying*/
- if(!vector_resized(&coins, 0, Coin_cleanup)) { error = 9906; break; }
-
- for(i = 0; i + 1 < prev_row.size; i += 2)
- {
- if(!vector_resize(&coins, coins.size + 1)) { error = 9907; break; }
- Coin_init((Coin*)vector_get(&coins, coins.size - 1));
- Coin_copy((Coin*)vector_get(&coins, coins.size - 1), (Coin*)vector_get(&prev_row, i));
- addCoins((Coin*)vector_get(&coins, coins.size - 1), (Coin*)vector_get(&prev_row, i + 1)); /*merge the coins into packages*/
- }
- if(j < maxbitlen)
- {
- error = HuffmanTree_fillInCoins(&coins, frequencies, tree->numcodes, sum);
- }
- }
- }
-
- if(!error)
- {
- /*keep the coins with lowest weight, so that they add up to the amount of symbols - 1*/
- vector_resized(&coins, numpresent - 1, Coin_cleanup);
-
- /*calculate the lenghts of each symbol, as the amount of times a coin of each symbol is used*/
- for(i = 0; i < coins.size; i++)
- {
- Coin* coin = (Coin*)vector_get(&coins, i);
- for(j = 0; j < coin->symbols.size; j++) tree->lengths.data[coin->symbols.data[j]]++;
- }
-
- error = HuffmanTree_makeFromLengths2(tree);
- }
-
- vector_cleanupd(&coins, Coin_cleanup);
- vector_cleanupd(&prev_row, Coin_cleanup);
-
- return error;
-}
-
-static unsigned HuffmanTree_getCode(const HuffmanTree* tree, unsigned index) { return tree->tree1d.data[index]; }
-static unsigned HuffmanTree_getLength(const HuffmanTree* tree, unsigned index) { return tree->lengths.data[index]; }
-#endif /*LODEPNG_COMPILE_ENCODER*/
-
-/*get the tree of a deflated block with fixed tree, as specified in the deflate specification*/
-static unsigned generateFixedTree(HuffmanTree* tree)
-{
- unsigned i, error = 0;
- uivector bitlen;
- uivector_init(&bitlen);
- if(!uivector_resize(&bitlen, NUM_DEFLATE_CODE_SYMBOLS)) error = 9909;
-
- if(!error)
- {
- /*288 possible codes: 0-255=literals, 256=endcode, 257-285=lengthcodes, 286-287=unused*/
- for(i = 0; i <= 143; i++) bitlen.data[i] = 8;
- for(i = 144; i <= 255; i++) bitlen.data[i] = 9;
- for(i = 256; i <= 279; i++) bitlen.data[i] = 7;
- for(i = 280; i <= 287; i++) bitlen.data[i] = 8;
-
- error = HuffmanTree_makeFromLengths(tree, bitlen.data, NUM_DEFLATE_CODE_SYMBOLS, 15);
- }
-
- uivector_cleanup(&bitlen);
- return error;
-}
-
-static unsigned generateDistanceTree(HuffmanTree* tree)
-{
- unsigned i, error = 0;
- uivector bitlen;
- uivector_init(&bitlen);
- if(!uivector_resize(&bitlen, NUM_DISTANCE_SYMBOLS)) error = 9910;
-
- /*there are 32 distance codes, but 30-31 are unused*/
- if(!error)
- {
- for(i = 0; i < NUM_DISTANCE_SYMBOLS; i++) bitlen.data[i] = 5;
- error = HuffmanTree_makeFromLengths(tree, bitlen.data, NUM_DISTANCE_SYMBOLS, 15);
- }
- uivector_cleanup(&bitlen);
- return error;
-}
-
-#ifdef LODEPNG_COMPILE_DECODER
-/*Decodes a symbol from the tree
-if decoded is true, then result contains the symbol, otherwise it contains something unspecified (because the symbol isn't fully decoded yet)
-bit is the bit that was just read from the stream
-you have to decode a full symbol (let the decode function return true) before you can try to decode another one, otherwise the state isn't reset
-return value is error.*/
-static unsigned HuffmanTree_decode(const HuffmanTree* tree, unsigned* decoded, unsigned* result, unsigned* treepos, unsigned char bit)
-{
- if((*treepos) >= tree->numcodes) return 11; /*error: it appeared outside the codetree*/
-
- (*result) = tree->tree2d.data[2 * (*treepos) + bit];
- (*decoded) = ((*result) < tree->numcodes);
-
- if(*decoded) (*treepos) = 0;
- else (*treepos) = (*result) - tree->numcodes;
-
- return 0;
-}
-
-static unsigned huffmanDecodeSymbol(unsigned int* error, const unsigned char* in, size_t* bp, const HuffmanTree* codetree, size_t inlength)
-{
- unsigned treepos = 0, decoded, ct;
- for(;;)
- {
- unsigned char bit;
- if(((*bp) & 0x07) == 0 && ((*bp) >> 3) > inlength) { *error = 10; return 0; } /*error: end of input memory reached without endcode*/
- bit = readBitFromStream(bp, in);
- *error = HuffmanTree_decode(codetree, &decoded, &ct, &treepos, bit);
- if(*error) return 0; /*stop, an error happened*/
- if(decoded) return ct;
- }
-}
-#endif /*LODEPNG_COMPILE_DECODER*/
-
-#ifdef LODEPNG_COMPILE_DECODER
-
-/* ////////////////////////////////////////////////////////////////////////// */
-/* / Inflator / */
-/* ////////////////////////////////////////////////////////////////////////// */
-
-/*get the tree of a deflated block with fixed tree, as specified in the deflate specification*/
-static void getTreeInflateFixed(HuffmanTree* tree, HuffmanTree* treeD)
-{
- /*error checking not done, this is fixed stuff, it works, it doesn't depend on the image*/
- generateFixedTree(tree);
- generateDistanceTree(treeD);
-}
-
-/*get the tree of a deflated block with dynamic tree, the tree itself is also Huffman compressed with a known tree*/
-static unsigned getTreeInflateDynamic(HuffmanTree* codetree, HuffmanTree* codetreeD, HuffmanTree* codelengthcodetree,
- const unsigned char* in, size_t* bp, size_t inlength)
-{
- /*make sure that length values that aren't filled in will be 0, or a wrong tree will be generated*/
- /*C-code note: use no "return" between ctor and dtor of an uivector!*/
- unsigned error = 0;
- unsigned n, HLIT, HDIST, HCLEN, i;
- uivector bitlen;
- uivector bitlenD;
- uivector codelengthcode;
-
- if((*bp) >> 3 >= inlength - 2) { return 49; } /*the bit pointer is or will go past the memory*/
-
- HLIT = readBitsFromStream(bp, in, 5) + 257; /*number of literal/length codes + 257. Unlike the spec, the value 257 is added to it here already*/
- HDIST = readBitsFromStream(bp, in, 5) + 1; /*number of distance codes. Unlike the spec, the value 1 is added to it here already*/
- HCLEN = readBitsFromStream(bp, in, 4) + 4; /*number of code length codes. Unlike the spec, the value 4 is added to it here already*/
-
- /*read the code length codes out of 3 * (amount of code length codes) bits*/
- uivector_init(&codelengthcode);
- if(!uivector_resize(&codelengthcode, NUM_CODE_LENGTH_CODES)) error = 9911;
-
- if(!error)
- {
- for(i = 0; i < NUM_CODE_LENGTH_CODES; i++)
- {
- if(i < HCLEN) codelengthcode.data[CLCL[i]] = readBitsFromStream(bp, in, 3);
- else codelengthcode.data[CLCL[i]] = 0; /*if not, it must stay 0*/
- }
-
- error = HuffmanTree_makeFromLengths(codelengthcodetree, codelengthcode.data, codelengthcode.size, 7);
- }
-
- uivector_cleanup(&codelengthcode);
- if(error) return error;
-
- /*now we can use this tree to read the lengths for the tree that this function will return*/
- uivector_init(&bitlen);
- uivector_resizev(&bitlen, NUM_DEFLATE_CODE_SYMBOLS, 0);
- uivector_init(&bitlenD);
- uivector_resizev(&bitlenD, NUM_DISTANCE_SYMBOLS, 0);
- i = 0;
- if(!bitlen.data || !bitlenD.data) error = 9912;
- else while(i < HLIT + HDIST) /*i is the current symbol we're reading in the part that contains the code lengths of lit/len codes and dist codes*/
- {
- unsigned code = huffmanDecodeSymbol(&error, in, bp, codelengthcodetree, inlength);
- if(error) break;
-
- if(code <= 15) /*a length code*/
- {
- if(i < HLIT) bitlen.data[i] = code;
- else bitlenD.data[i - HLIT] = code;
- i++;
- }
- else if(code == 16) /*repeat previous*/
- {
- unsigned replength = 3; /*read in the 2 bits that indicate repeat length (3-6)*/
- unsigned value; /*set value to the previous code*/
-
- if((*bp) >> 3 >= inlength) { error = 50; break; } /*error, bit pointer jumps past memory*/
-
- replength += readBitsFromStream(bp, in, 2);
-
- if((i - 1) < HLIT) value = bitlen.data[i - 1];
- else value = bitlenD.data[i - HLIT - 1];
- /*repeat this value in the next lengths*/
- for(n = 0; n < replength; n++)
- {
- if(i >= HLIT + HDIST) { error = 13; break; } /*error: i is larger than the amount of codes*/
- if(i < HLIT) bitlen.data[i] = value;
- else bitlenD.data[i - HLIT] = value;
- i++;
- }
- }
- else if(code == 17) /*repeat "0" 3-10 times*/
- {
- unsigned replength = 3; /*read in the bits that indicate repeat length*/
- if((*bp) >> 3 >= inlength) { error = 50; break; } /*error, bit pointer jumps past memory*/
-
- replength += readBitsFromStream(bp, in, 3);
-
- /*repeat this value in the next lengths*/
- for(n = 0; n < replength; n++)
- {
- if(i >= HLIT + HDIST) { error = 14; break; } /*error: i is larger than the amount of codes*/
- if(i < HLIT) bitlen.data[i] = 0;
- else bitlenD.data[i - HLIT] = 0;
- i++;
- }
- }
- else if(code == 18) /*repeat "0" 11-138 times*/
- {
- unsigned replength = 11; /*read in the bits that indicate repeat length*/
- if((*bp) >> 3 >= inlength) { error = 50; break; } /*error, bit pointer jumps past memory*/
- replength += readBitsFromStream(bp, in, 7);
-
- /*repeat this value in the next lengths*/
- for(n = 0; n < replength; n++)
- {
- if(i >= HLIT + HDIST) { error = 15; break; } /*error: i is larger than the amount of codes*/
- if(i < HLIT) bitlen.data[i] = 0;
- else bitlenD.data[i - HLIT] = 0;
- i++;
- }
- }
- else { error = 16; break; } /*error: somehow an unexisting code appeared. This can never happen.*/
- }
-
- if(!error && bitlen.data[256] == 0) { error = 64; } /*the length of the end code 256 must be larger than 0*/
-
- /*now we've finally got HLIT and HDIST, so generate the code trees, and the function is done*/
- if(!error) error = HuffmanTree_makeFromLengths(codetree, &bitlen.data[0], bitlen.size, 15);
- if(!error) error = HuffmanTree_makeFromLengths(codetreeD, &bitlenD.data[0], bitlenD.size, 15);
-
- uivector_cleanup(&bitlen);
- uivector_cleanup(&bitlenD);
-
- return error;
-}
-
-/*inflate a block with dynamic of fixed Huffman tree*/
-static unsigned inflateHuffmanBlock(ucvector* out, const unsigned char* in, size_t* bp, size_t* pos, size_t inlength, unsigned btype)
-{
- unsigned endreached = 0, error = 0;
- HuffmanTree codetree; /*287, the code tree for Huffman codes*/
- HuffmanTree codetreeD; /*31, the code tree for distance codes*/
-
- HuffmanTree_init(&codetree);
- HuffmanTree_init(&codetreeD);
-
- if(btype == 1) getTreeInflateFixed(&codetree, &codetreeD);
- else if(btype == 2)
- {
- HuffmanTree codelengthcodetree; /*18, the code tree for code length codes*/
- HuffmanTree_init(&codelengthcodetree);
- error = getTreeInflateDynamic(&codetree, &codetreeD, &codelengthcodetree, in, bp, inlength);
- HuffmanTree_cleanup(&codelengthcodetree);
- }
-
- while(!endreached && !error)
- {
- unsigned code = huffmanDecodeSymbol(&error, in, bp, &codetree, inlength);
- if(error) break; /*some error happened in the above function*/
- if(code == 256) endreached = 1; /*end code*/
- else if(code <= 255) /*literal symbol*/
- {
- if((*pos) >= out->size) ucvector_resize(out, ((*pos) + 1) * 2); /*reserve more room at once*/
- if((*pos) >= out->size) { error = 9913; break; } /*not enough memory*/
- out->data[(*pos)] = (unsigned char)(code);
- (*pos)++;
- }
- else if(code >= FIRST_LENGTH_CODE_INDEX && code <= LAST_LENGTH_CODE_INDEX) /*length code*/
- {
- /*part 1: get length base*/
- size_t length = LENGTHBASE[code - FIRST_LENGTH_CODE_INDEX];
- unsigned codeD, distance, numextrabitsD;
- size_t start, forward, backward, numextrabits;
-
- /*part 2: get extra bits and add the value of that to length*/
- numextrabits = LENGTHEXTRA[code - FIRST_LENGTH_CODE_INDEX];
- if(((*bp) >> 3) >= inlength) { error = 51; break; } /*error, bit pointer will jump past memory*/
- length += readBitsFromStream(bp, in, numextrabits);
-
- /*part 3: get distance code*/
- codeD = huffmanDecodeSymbol(&error, in, bp, &codetreeD, inlength);
- if(error) break;
- if(codeD > 29) { error = 18; break; } /*error: invalid distance code (30-31 are never used)*/
- distance = DISTANCEBASE[codeD];
-
- /*part 4: get extra bits from distance*/
- numextrabitsD = DISTANCEEXTRA[codeD];
- if(((*bp) >> 3) >= inlength) { error = 51; break; } /*error, bit pointer will jump past memory*/
- distance += readBitsFromStream(bp, in, numextrabitsD);
-
- /*part 5: fill in all the out[n] values based on the length and dist*/
- start = (*pos);
- backward = start - distance;
- if((*pos) + length >= out->size) ucvector_resize(out, ((*pos) + length) * 2); /*reserve more room at once*/
- if((*pos) + length >= out->size) { error = 9914; break; } /*not enough memory*/
-
- for(forward = 0; forward < length; forward++)
- {
- out->data[(*pos)] = out->data[backward];
- (*pos)++;
- backward++;
- if(backward >= start) backward = start - distance;
- }
- }
- }
-
- HuffmanTree_cleanup(&codetree);
- HuffmanTree_cleanup(&codetreeD);
-
- return error;
-}
-
-static unsigned inflateNoCompression(ucvector* out, const unsigned char* in, size_t* bp, size_t* pos, size_t inlength)
-{
- /*go to first boundary of byte*/
- size_t p;
- unsigned LEN, NLEN, n, error = 0;
- while(((*bp) & 0x7) != 0) (*bp)++;
- p = (*bp) / 8; /*byte position*/
-
- /*read LEN (2 bytes) and NLEN (2 bytes)*/
- if(p >= inlength - 4) return 52; /*error, bit pointer will jump past memory*/
- LEN = in[p] + 256 * in[p + 1]; p += 2;
- NLEN = in[p] + 256 * in[p + 1]; p += 2;
-
- /*check if 16-bit NLEN is really the one's complement of LEN*/
- if(LEN + NLEN != 65535) return 21; /*error: NLEN is not one's complement of LEN*/
-
- if((*pos) + LEN >= out->size) { if(!ucvector_resize(out, (*pos) + LEN)) return 9915; }
-
- /*read the literal data: LEN bytes are now stored in the out buffer*/
- if(p + LEN > inlength) return 23; /*error: reading outside of in buffer*/
- for(n = 0; n < LEN; n++) out->data[(*pos)++] = in[p++];
-
- (*bp) = p * 8;
-
- return error;
-}
-
-/*inflate the deflated data (cfr. deflate spec); return value is the error*/
-unsigned LodeFlate_inflate(ucvector* out, const unsigned char* in, size_t insize, size_t inpos)
-{
- size_t bp = 0; /*bit pointer in the "in" data, current byte is bp >> 3, current bit is bp & 0x7 (from lsb to msb of the byte)*/
- unsigned BFINAL = 0;
- size_t pos = 0; /*byte position in the out buffer*/
-
- unsigned error = 0;
-
- while(!BFINAL)
- {
- unsigned BTYPE;
- if((bp >> 3) >= insize) return 52; /*error, bit pointer will jump past memory*/
- BFINAL = readBitFromStream(&bp, &in[inpos]);
- BTYPE = 1 * readBitFromStream(&bp, &in[inpos]); BTYPE += 2 * readBitFromStream(&bp, &in[inpos]);
-
- if(BTYPE == 3) return 20; /*error: invalid BTYPE*/
- else if(BTYPE == 0) error = inflateNoCompression(out, &in[inpos], &bp, &pos, insize); /*no compression*/
- else error = inflateHuffmanBlock(out, &in[inpos], &bp, &pos, insize, BTYPE); /*compression, BTYPE 01 or 10*/
- if(error) return error;
- }
-
- if(!ucvector_resize(out, pos)) error = 9916; /*Only now we know the true size of out, resize it to that*/
-
- return error;
-}
-
-#endif /*LODEPNG_COMPILE_DECODER*/
-
-#ifdef LODEPNG_COMPILE_ENCODER
-
-/* ////////////////////////////////////////////////////////////////////////// */
-/* / Deflator / */
-/* ////////////////////////////////////////////////////////////////////////// */
-
-static const size_t MAX_SUPPORTED_DEFLATE_LENGTH = 258;
-
-/*bitlen is the size in bits of the code*/
-static void addHuffmanSymbol(size_t* bp, ucvector* compressed, unsigned code, unsigned bitlen)
-{
- addBitsToStreamReversed(bp, compressed, code, bitlen);
-}
-
-/*search the index in the array, that has the largest value smaller than or equal to the given value, given array must be sorted (if no value is smaller, it returns the size of the given array)*/
-static size_t searchCodeIndex(const unsigned* array, size_t array_size, size_t value)
-{
- /*linear search implementation*/
- /*for(size_t i = 1; i < array_size; i++) if(array[i] > value) return i - 1;
- return array_size - 1;*/
-
- /*binary search implementation (not that much faster) (precondition: array_size > 0)*/
- size_t left = 1;
- size_t right = array_size - 1;
- while(left <= right)
- {
- size_t mid = (left + right) / 2;
- if(array[mid] <= value) left = mid + 1; /*the value to find is more to the right*/
- else if(array[mid - 1] > value) right = mid - 1; /*the value to find is more to the left*/
- else return mid - 1;
- }
- return array_size - 1;
-}
-
-static void addLengthDistance(uivector* values, size_t length, size_t distance)
-{
- /*values in encoded vector are those used by deflate:
- 0-255: literal bytes
- 256: end
- 257-285: length/distance pair (length code, followed by extra length bits, distance code, extra distance bits)
- 286-287: invalid*/
-
- unsigned length_code = (unsigned)searchCodeIndex(LENGTHBASE, 29, length);
- unsigned extra_length = (unsigned)(length - LENGTHBASE[length_code]);
- unsigned dist_code = (unsigned)searchCodeIndex(DISTANCEBASE, 30, distance);
- unsigned extra_distance = (unsigned)(distance - DISTANCEBASE[dist_code]);
-
- uivector_push_back(values, length_code + FIRST_LENGTH_CODE_INDEX);
- uivector_push_back(values, extra_length);
- uivector_push_back(values, dist_code);
- uivector_push_back(values, extra_distance);
-}
-
-#if USE_BRUTE_FORCE_ENCODING
-#define encodeLZ77 encodeLZ77_brute
-/*the "brute force" version of the encodeLZ7 algorithm, not used anymore, kept here for reference*/
-static unsigned encodeLZ77_brute(uivector* out, const unsigned char* in, size_t size, unsigned windowSize)
-{
- size_t pos;
- /*using pointer instead of vector for input makes it faster when NOT using optimization when compiling; no influence if optimization is used*/
- for(pos = 0; pos < size; pos++)
- {
- /*Phase 1: doxygen images often have long runs of the same color, try to find them*/
- const int minLength = 4; // Minimum length for a run to make sense
-
- if(pos < size - minLength * 4)
- {
- size_t p, fp;
- size_t current_length;
-
- /*RGBA pixel run?*/
- p = pos;
- fp = pos + 4;
- current_length = 0;
-
- while(fp < size && in[p] == in[fp] && current_length < MAX_SUPPORTED_DEFLATE_LENGTH)
- {
- ++p;
- ++fp;
- ++current_length;
- }
-
- if (current_length > (minLength - 1 ) * 4) /*worth using?*/
- {
- uivector_push_back(out, in[pos ]);
- uivector_push_back(out, in[pos + 1]);
- uivector_push_back(out, in[pos + 2]);
- uivector_push_back(out, in[pos + 3]);
- addLengthDistance(out, current_length, 4);
-
- pos += current_length + 4 - 1; /*-1 for loop's pos++*/
- continue;
- }
-
- /*RGB pixel run?*/
- p = pos;
- fp = pos + 3;
- current_length = 0;
-
- while(fp < size && in[p] == in[fp] && current_length < MAX_SUPPORTED_DEFLATE_LENGTH)
- {
- ++p;
- ++fp;
- ++current_length;
- }
-
- if (current_length > (minLength - 1 ) * 3) /*worth using?*/
- {
- uivector_push_back(out, in[pos ]);
- uivector_push_back(out, in[pos + 1]);
- uivector_push_back(out, in[pos + 2]);
- addLengthDistance(out, current_length, 3);
-
- pos += current_length + 3 - 1; /*-1 for loop's pos++*/
- continue;
- }
- }
-
- size_t length = 0, offset = 0; /*the length and offset found for the current position*/
- size_t max_offset = pos < windowSize ? pos : windowSize; /*how far back to test*/
- size_t current_offset;
-
- /**search for the longest string**/
- for(current_offset = 1; current_offset < max_offset; current_offset++) /*search backwards through all possible distances (=offsets)*/
- {
- size_t backpos = pos - current_offset;
- if(in[backpos] == in[pos])
- {
- /*test the next characters*/
- size_t current_length = 1;
- size_t backtest = backpos + 1;
- size_t foretest = pos + 1;
- while(foretest < size && in[backtest] == in[foretest] && current_length < MAX_SUPPORTED_DEFLATE_LENGTH) /*maximum supporte length by deflate is max length*/
- {
- if(backpos >= pos) backpos -= current_offset; /*continue as if we work on the decoded bytes after pos by jumping back before pos*/
- current_length++;
- backtest++;
- foretest++;
- }
- if(current_length > length)
- {
- length = current_length; /*the longest length*/
- offset = current_offset; /*the offset that is related to this longest length*/
- if(current_length == MAX_SUPPORTED_DEFLATE_LENGTH) break; /*you can jump out of this for loop once a length of max length is found (gives significant speed gain)*/
- }
- }
- }
-
- /**encode it as length/distance pair or literal value**/
- if(length < 3) /*only lengths of 3 or higher are supported as length/distance pair*/
- {
- uivector_push_back(out, in[pos]);
- }
- else
- {
- addLengthDistance(out, length, offset);
- pos += (length - 1);
- }
- } /*end of the loop through each character of input*/
-
- return 0;
-}
-#endif
-
-static const unsigned HASH_NUM_VALUES = 65536;
-static const unsigned HASH_NUM_CHARACTERS = 6;
-static const unsigned HASH_SHIFT = 2;
-/*
-Good and fast values: HASH_NUM_VALUES=65536, HASH_NUM_CHARACTERS=6, HASH_SHIFT=2
-making HASH_NUM_CHARACTERS larger (like 8), makes the file size larger but is a bit faster
-making HASH_NUM_CHARACTERS smaller (like 3), makes the file size smaller but is slower
-*/
-
-#if !defined(USE_BRUTE_FORCE_ENCODING)
-static unsigned getHash(const unsigned char* data, size_t size, size_t pos)
-{
- unsigned result = 0;
- size_t amount, i;
- if(pos >= size) return 0;
- amount = HASH_NUM_CHARACTERS; if(pos + amount >= size) amount = size - pos;
- for(i = 0; i < amount; i++) result ^= (data[pos + i] << (i * HASH_SHIFT));
- return result % HASH_NUM_VALUES;
-}
-
-/*LZ77-encode the data using a hash table technique to let it encode faster. Return value is error code*/
-static unsigned encodeLZ77(uivector* out, const unsigned char* in, size_t size, unsigned windowSize)
-{
- /**generate hash table**/
- vector table; /*HASH_NUM_VALUES uivectors; this represents what would be an std::vector<std::vector<unsigned> > in C++*/
- uivector tablepos1, tablepos2;
- unsigned pos, i, error = 0;
-
- vector_init(&table, sizeof(uivector));
- if(!vector_resize(&table, HASH_NUM_VALUES)) return 9917;
- for(i = 0; i < HASH_NUM_VALUES; i++)
- {
- uivector* v = (uivector*)vector_get(&table, i);
- uivector_init(v);
- }
-
- /*remember start and end positions in the tables to searching in*/
- uivector_init(&tablepos1);
- uivector_init(&tablepos2);
- if(!uivector_resizev(&tablepos1, HASH_NUM_VALUES, 0)) error = 9918;
- if(!uivector_resizev(&tablepos2, HASH_NUM_VALUES, 0)) error = 9919;
-
- if(!error)
- {
- for(pos = 0; pos < size; pos++)
- {
- unsigned length = 0, offset = 0; /*the length and offset found for the current position*/
- unsigned max_offset = pos < windowSize ? pos : windowSize; /*how far back to test*/
- unsigned tablepos;
-
- /*/search for the longest string*/
- /*first find out where in the table to start (the first value that is in the range from "pos - max_offset" to "pos")*/
- unsigned hash = getHash(in, size, pos);
- if(!uivector_push_back((uivector*)vector_get(&table, hash), pos)) { error = 9920; break; }
-
- while(((uivector*)vector_get(&table, hash))->data[tablepos1.data[hash]] < pos - max_offset) tablepos1.data[hash]++; /*it now points to the first value in the table for which the index is larger than or equal to pos - max_offset*/
- while(((uivector*)vector_get(&table, hash))->data[tablepos2.data[hash]] < pos) tablepos2.data[hash]++; /*it now points to the first value in the table for which the index is larger than or equal to pos*/
-
- for(tablepos = tablepos2.data[hash] - 1; tablepos >= tablepos1.data[hash] && tablepos < tablepos2.data[hash]; tablepos--)
- {
- unsigned backpos = ((uivector*)vector_get(&table, hash))->data[tablepos];
- unsigned current_offset = pos - backpos;
-
- /*test the next characters*/
- unsigned current_length = 0;
- unsigned backtest = backpos;
- unsigned foretest = pos;
- while(foretest < size && in[backtest] == in[foretest] && current_length < MAX_SUPPORTED_DEFLATE_LENGTH) /*maximum supporte length by deflate is max length*/
- {
- if(backpos >= pos) backpos -= current_offset; /*continue as if we work on the decoded bytes after pos by jumping back before pos*/
- current_length++;
- backtest++;
- foretest++;
- }
- if(current_length > length)
- {
- length = current_length; /*the longest length*/
- offset = current_offset; /*the offset that is related to this longest length*/
- if(current_length == MAX_SUPPORTED_DEFLATE_LENGTH) break; /*you can jump out of this for loop once a length of max length is found (gives significant speed gain)*/
- }
- }
-
- /**encode it as length/distance pair or literal value**/
- if(length < 3) /*only lengths of 3 or higher are supported as length/distance pair*/
- {
- if(!uivector_push_back(out, in[pos])) { error = 9921; break; }
- }
- else
- {
- unsigned j;
- addLengthDistance(out, length, offset);
- for(j = 0; j < length - 1; j++)
- {
- pos++;
- if(!uivector_push_back((uivector*)vector_get(&table, getHash(in, size, pos)), pos)) { error = 9922; break; }
- }
- }
- } /*end of the loop through each character of input*/
- } /*end of "if(!error)"*/
-
- /*cleanup*/
- for(i = 0; i < table.size; i++)
- {
- uivector* v = (uivector*)vector_get(&table, i);
- uivector_cleanup(v);
- }
- vector_cleanup(&table);
- uivector_cleanup(&tablepos1);
- uivector_cleanup(&tablepos2);
- return error;
-}
-#endif
-
-/* /////////////////////////////////////////////////////////////////////////// */
-
-static unsigned deflateNoCompression(ucvector* out, const unsigned char* data, size_t datasize)
-{
- /*non compressed deflate block data: 1 bit BFINAL,2 bits BTYPE,(5 bits): it jumps to start of next byte, 2 bytes LEN, 2 bytes NLEN, LEN bytes literal DATA*/
-
- size_t i, j, numdeflateblocks = datasize / 65536 + 1;
- unsigned datapos = 0;
- for(i = 0; i < numdeflateblocks; i++)
- {
- unsigned BFINAL, BTYPE, LEN, NLEN;
- unsigned char firstbyte;
-
- BFINAL = (i == numdeflateblocks - 1);
- BTYPE = 0;
-
- firstbyte = (unsigned char)(BFINAL + ((BTYPE & 1) << 1) + ((BTYPE & 2) << 1));
- ucvector_push_back(out, firstbyte);
-
- LEN = 65535;
- if(datasize - datapos < 65535) LEN = (unsigned)datasize - datapos;
- NLEN = 65535 - LEN;
-
- ucvector_push_back(out, (unsigned char)(LEN % 256));
- ucvector_push_back(out, (unsigned char)(LEN / 256));
- ucvector_push_back(out, (unsigned char)(NLEN % 256));
- ucvector_push_back(out, (unsigned char)(NLEN / 256));
-
- /*Decompressed data*/
- for(j = 0; j < 65535 && datapos < datasize; j++)
- {
- ucvector_push_back(out, data[datapos++]);
- }
- }
-
- return 0;
-}
-
-/*write the encoded data, using lit/len as well as distance codes*/
-static void writeLZ77data(size_t* bp, ucvector* out, const uivector* lz77_encoded, const HuffmanTree* codes, const HuffmanTree* codesD)
-{
- size_t i = 0;
- for(i = 0; i < lz77_encoded->size; i++)
- {
- unsigned val = lz77_encoded->data[i];
- addHuffmanSymbol(bp, out, HuffmanTree_getCode(codes, val), HuffmanTree_getLength(codes, val));
- if(val > 256) /*for a length code, 3 more things have to be added*/
- {
- unsigned length_index = val - FIRST_LENGTH_CODE_INDEX;
- unsigned n_length_extra_bits = LENGTHEXTRA[length_index];
- unsigned length_extra_bits = lz77_encoded->data[++i];
-
- unsigned distance_code = lz77_encoded->data[++i];
-
- unsigned distance_index = distance_code;
- unsigned n_distance_extra_bits = DISTANCEEXTRA[distance_index];
- unsigned distance_extra_bits = lz77_encoded->data[++i];
-
- addBitsToStream(bp, out, length_extra_bits, n_length_extra_bits);
- addHuffmanSymbol(bp, out, HuffmanTree_getCode(codesD, distance_code), HuffmanTree_getLength(codesD, distance_code));
- addBitsToStream(bp, out, distance_extra_bits, n_distance_extra_bits);
- }
- }
-}
-
-static unsigned deflateDynamic(ucvector* out, const unsigned char* data, size_t datasize, const LodeZlib_DeflateSettings* settings)
-{
- /*
- after the BFINAL and BTYPE, the dynamic block consists out of the following:
- - 5 bits HLIT, 5 bits HDIST, 4 bits HCLEN
- - (HCLEN+4)*3 bits code lengths of code length alphabet
- - HLIT + 257 code lenghts of lit/length alphabet (encoded using the code length alphabet, + possible repetition codes 16, 17, 18)
- - HDIST + 1 code lengths of distance alphabet (encoded using the code length alphabet, + possible repetition codes 16, 17, 18)
- - compressed data
- - 256 (end code)
- */
-
- unsigned error = 0;
-
- uivector lz77_encoded;
- HuffmanTree codes; /*tree for literal values and length codes*/
- HuffmanTree codesD; /*tree for distance codes*/
- HuffmanTree codelengthcodes;
- uivector frequencies;
- uivector frequenciesD;
- uivector amounts; /*the amounts in the "normal" order*/
- uivector lldl;
- uivector lldll; /*lit/len & dist code lenghts*/
- uivector clcls;
-
- unsigned BFINAL = 1; /*make only one block... the first and final one*/
- size_t numcodes, numcodesD, i, bp = 0; /*the bit pointer*/
- unsigned HLIT, HDIST, HCLEN;
-
- uivector_init(&lz77_encoded);
- HuffmanTree_init(&codes);
- HuffmanTree_init(&codesD);
- HuffmanTree_init(&codelengthcodes);
- uivector_init(&frequencies);
- uivector_init(&frequenciesD);
- uivector_init(&amounts);
- uivector_init(&lldl);
- uivector_init(&lldll);
- uivector_init(&clcls);
-
- while(!error) /*the goto-avoiding while construct: break out to go to the cleanup phase, a break at the end makes sure the while is never repeated*/
- {
- if(settings->useLZ77)
- {
- error = encodeLZ77(&lz77_encoded, data, datasize, settings->windowSize); /*LZ77 encoded*/
- if(error) break;
- }
- else
- {
- if(!uivector_resize(&lz77_encoded, datasize)) { error = 9923; break; }
- for(i = 0; i < datasize; i++) lz77_encoded.data[i] = data[i]; /*no LZ77, but still will be Huffman compressed*/
- }
-
- if(!uivector_resizev(&frequencies, 286, 0)) { error = 9924; break; }
- if(!uivector_resizev(&frequenciesD, 30, 0)) { error = 9925; break; }
- for(i = 0; i < lz77_encoded.size; i++)
- {
- unsigned symbol = lz77_encoded.data[i];
- frequencies.data[symbol]++;
- if(symbol > 256)
- {
- unsigned dist = lz77_encoded.data[i + 2];
- frequenciesD.data[dist]++;
- i += 3;
- }
- }
- frequencies.data[256] = 1; /*there will be exactly 1 end code, at the end of the block*/
-
- error = HuffmanTree_makeFromFrequencies(&codes, frequencies.data, frequencies.size, 15);
- if(error) break;
- error = HuffmanTree_makeFromFrequencies(&codesD, frequenciesD.data, frequenciesD.size, 15);
- if(error) break;
-
- addBitToStream(&bp, out, BFINAL);
- addBitToStream(&bp, out, 0); /*first bit of BTYPE "dynamic"*/
- addBitToStream(&bp, out, 1); /*second bit of BTYPE "dynamic"*/
-
- numcodes = codes.numcodes; if(numcodes > 286) numcodes = 286;
- numcodesD = codesD.numcodes; if(numcodesD > 30) numcodesD = 30;
- for(i = 0; i < numcodes; i++) uivector_push_back(&lldll, HuffmanTree_getLength(&codes, (unsigned)i));
- for(i = 0; i < numcodesD; i++) uivector_push_back(&lldll, HuffmanTree_getLength(&codesD, (unsigned)i));
-
- /*make lldl smaller by using repeat codes 16 (copy length 3-6 times), 17 (3-10 zeroes), 18 (11-138 zeroes)*/
- for(i = 0; i < (unsigned)lldll.size; i++)
- {
- unsigned j = 0;
- while(i + j + 1 < (unsigned)lldll.size && lldll.data[i + j + 1] == lldll.data[i]) j++;
-
- if(lldll.data[i] == 0 && j >= 2)
- {
- j++; /*include the first zero*/
- if(j <= 10) { uivector_push_back(&lldl, 17); uivector_push_back(&lldl, j - 3); }
- else
- {
- if(j > 138) j = 138;
- uivector_push_back(&lldl, 18); uivector_push_back(&lldl, j - 11);
- }
- i += (j - 1);
- }
- else if(j >= 3)
- {
- size_t k;
- unsigned num = j / 6, rest = j % 6;
- uivector_push_back(&lldl, lldll.data[i]);
- for(k = 0; k < num; k++) { uivector_push_back(&lldl, 16); uivector_push_back(&lldl, 6 - 3); }
- if(rest >= 3) { uivector_push_back(&lldl, 16); uivector_push_back(&lldl, rest - 3); }
- else j -= rest;
- i += j;
- }
- else uivector_push_back(&lldl, lldll.data[i]);
- }
-
- /*generate huffmantree for the length codes of lit/len and dist codes*/
- if(!uivector_resizev(&amounts, 19, 0)) { error = 9926; break; } /*16 possible lengths (0-15) and 3 repeat codes (16, 17 and 18)*/
- for(i = 0; i < lldl.size; i++)
- {
- amounts.data[lldl.data[i]]++;
- if(lldl.data[i] >= 16) i++; /*after a repeat code come the bits that specify the amount, those don't need to be in the amounts calculation*/
- }
-
- error = HuffmanTree_makeFromFrequencies(&codelengthcodes, amounts.data, amounts.size, 7);
- if(error) break;
-
- if(!uivector_resize(&clcls, 19)) { error = 9927; break; }
- for(i = 0; i < 19; i++) clcls.data[i] = HuffmanTree_getLength(&codelengthcodes, CLCL[i]); /*lenghts of code length tree is in the order as specified by deflate*/
- while(clcls.data[clcls.size - 1] == 0 && clcls.size > 4)
- {
- if(!uivector_resize(&clcls, clcls.size - 1)) { error = 9928; break; } /*remove zeros at the end, but minimum size must be 4*/
- }
- if(error) break;
-
- /*write the HLIT, HDIST and HCLEN values*/
- HLIT = (unsigned)(numcodes - 257);
- HDIST = (unsigned)(numcodesD - 1);
- HCLEN = (unsigned)clcls.size - 4;
- addBitsToStream(&bp, out, HLIT, 5);
- addBitsToStream(&bp, out, HDIST, 5);
- addBitsToStream(&bp, out, HCLEN, 4);
-
- /*write the code lenghts of the code length alphabet*/
- for(i = 0; i < HCLEN + 4; i++) addBitsToStream(&bp, out, clcls.data[i], 3);
-
- /*write the lenghts of the lit/len AND the dist alphabet*/
- for(i = 0; i < lldl.size; i++)
- {
- addHuffmanSymbol(&bp, out, HuffmanTree_getCode(&codelengthcodes, lldl.data[i]), HuffmanTree_getLength(&codelengthcodes, lldl.data[i]));
- /*extra bits of repeat codes*/
- if(lldl.data[i] == 16) addBitsToStream(&bp, out, lldl.data[++i], 2);
- else if(lldl.data[i] == 17) addBitsToStream(&bp, out, lldl.data[++i], 3);
- else if(lldl.data[i] == 18) addBitsToStream(&bp, out, lldl.data[++i], 7);
- }
-
- /*write the compressed data symbols*/
- writeLZ77data(&bp, out, &lz77_encoded, &codes, &codesD);
- if(HuffmanTree_getLength(&codes, 256) == 0) { error = 64; break; } /*the length of the end code 256 must be larger than 0*/
- addHuffmanSymbol(&bp, out, HuffmanTree_getCode(&codes, 256), HuffmanTree_getLength(&codes, 256)); /*end code*/
-
- break; /*end of error-while*/
- }
-
- /*cleanup*/
- uivector_cleanup(&lz77_encoded);
- HuffmanTree_cleanup(&codes);
- HuffmanTree_cleanup(&codesD);
- HuffmanTree_cleanup(&codelengthcodes);
- uivector_cleanup(&frequencies);
- uivector_cleanup(&frequenciesD);
- uivector_cleanup(&amounts);
- uivector_cleanup(&lldl);
- uivector_cleanup(&lldll);
- uivector_cleanup(&clcls);
-
- return error;
-}
-
-static unsigned deflateFixed(ucvector* out, const unsigned char* data, size_t datasize, const LodeZlib_DeflateSettings* settings)
-{
- HuffmanTree codes; /*tree for literal values and length codes*/
- HuffmanTree codesD; /*tree for distance codes*/
-
- unsigned BFINAL = 1; /*make only one block... the first and final one*/
- unsigned error = 0;
- size_t i, bp = 0; /*the bit pointer*/
-
- HuffmanTree_init(&codes);
- HuffmanTree_init(&codesD);
-
- generateFixedTree(&codes);
- generateDistanceTree(&codesD);
-
- addBitToStream(&bp, out, BFINAL);
- addBitToStream(&bp, out, 1); /*first bit of BTYPE*/
- addBitToStream(&bp, out, 0); /*second bit of BTYPE*/
-
- if(settings->useLZ77) /*LZ77 encoded*/
- {
- uivector lz77_encoded;
- uivector_init(&lz77_encoded);
- error = encodeLZ77(&lz77_encoded, data, datasize, settings->windowSize);
- if(!error) writeLZ77data(&bp, out, &lz77_encoded, &codes, &codesD);
- uivector_cleanup(&lz77_encoded);
- }
- else /*no LZ77, but still will be Huffman compressed*/
- {
- for(i = 0; i < datasize; i++) addHuffmanSymbol(&bp, out, HuffmanTree_getCode(&codes, data[i]), HuffmanTree_getLength(&codes, data[i]));
- }
- if(!error) addHuffmanSymbol(&bp, out, HuffmanTree_getCode(&codes, 256), HuffmanTree_getLength(&codes, 256)); /*"end" code*/
-
- /*cleanup*/
- HuffmanTree_cleanup(&codes);
- HuffmanTree_cleanup(&codesD);
-
- return error;
-}
-
-unsigned LodeFlate_deflate(ucvector* out, const unsigned char* data, size_t datasize, const LodeZlib_DeflateSettings* settings)
-{
- unsigned error = 0;
- if(settings->btype == 0) error = deflateNoCompression(out, data, datasize);
- else if(settings->btype == 1) error = deflateFixed(out, data, datasize, settings);
- else if(settings->btype == 2) error = deflateDynamic(out, data, datasize, settings);
- else error = 61;
- return error;
-}
-
-#endif /*LODEPNG_COMPILE_DECODER*/
-
-/* ////////////////////////////////////////////////////////////////////////// */
-/* / Adler32 */
-/* ////////////////////////////////////////////////////////////////////////// */
-
-static unsigned update_adler32(unsigned adler, const unsigned char* data, unsigned len)
-{
- unsigned s1 = adler & 0xffff;
- unsigned s2 = (adler >> 16) & 0xffff;
-
- while(len > 0)
- {
- /*at least 5550 sums can be done before the sums overflow, saving us from a lot of module divisions*/
- unsigned amount = len > 5550 ? 5550 : len;
- len -= amount;
- while(amount > 0)
- {
- s1 = (s1 + *data++);
- s2 = (s2 + s1);
- amount--;
- }
- s1 %= 65521;
- s2 %= 65521;
- }
-
- return (s2 << 16) | s1;
-}
-
-/*Return the adler32 of the bytes data[0..len-1]*/
-static unsigned adler32(const unsigned char* data, unsigned len)
-{
- return update_adler32(1L, data, len);
-}
-
-/* ////////////////////////////////////////////////////////////////////////// */
-/* / Reading and writing single bits and bytes from/to stream for Zlib / */
-/* ////////////////////////////////////////////////////////////////////////// */
-
-#ifdef LODEPNG_COMPILE_ENCODER
-void LodeZlib_add32bitInt(ucvector* buffer, unsigned value)
-{
- ucvector_push_back(buffer, (unsigned char)((value >> 24) & 0xff));
- ucvector_push_back(buffer, (unsigned char)((value >> 16) & 0xff));
- ucvector_push_back(buffer, (unsigned char)((value >> 8) & 0xff));
- ucvector_push_back(buffer, (unsigned char)((value ) & 0xff));
-}
-#endif /*LODEPNG_COMPILE_ENCODER*/
-
-unsigned LodeZlib_read32bitInt(const unsigned char* buffer)
-{
- return (buffer[0] << 24) | (buffer[1] << 16) | (buffer[2] << 8) | buffer[3];
-}
-
-/* ////////////////////////////////////////////////////////////////////////// */
-/* / Zlib / */
-/* ////////////////////////////////////////////////////////////////////////// */
-
-#ifdef LODEPNG_COMPILE_DECODER
-
-unsigned LodeZlib_decompress(unsigned char** out, size_t* outsize, const unsigned char* in, size_t insize, const LodeZlib_DecompressSettings* settings)
-{
- unsigned error = 0;
- unsigned CM, CINFO, FDICT;
- ucvector outv;
-
- if(insize < 2) { error = 53; return error; } /*error, size of zlib data too small*/
- /*read information from zlib header*/
- if((in[0] * 256 + in[1]) % 31 != 0) { error = 24; return error; } /*error: 256 * in[0] + in[1] must be a multiple of 31, the FCHECK value is supposed to be made that way*/
-
- CM = in[0] & 15;
- CINFO = (in[0] >> 4) & 15;
- /*FCHECK = in[1] & 31; //FCHECK is already tested above*/
- FDICT = (in[1] >> 5) & 1;
- /*FLEVEL = (in[1] >> 6) & 3; //not really important, all it does it to give a compiler warning about unused variable, we don't care what encoding setting the encoder used*/
-
- if(CM != 8 || CINFO > 7) { error = 25; return error; } /*error: only compression method 8: inflate with sliding window of 32k is supported by the PNG spec*/
- if(FDICT != 0) { error = 26; return error; } /*error: the specification of PNG says about the zlib stream: "The additional flags shall not specify a preset dictionary."*/
-
- ucvector_init_buffer(&outv, *out, *outsize); /*ucvector-controlled version of the output buffer, for dynamic array*/
- error = LodeFlate_inflate(&outv, in, insize, 2);
- *out = outv.data;
- *outsize = outv.size;
- if(error) return error;
-
- if(!settings->ignoreAdler32)
- {
- unsigned ADLER32 = LodeZlib_read32bitInt(&in[insize - 4]);
- unsigned checksum = adler32(outv.data, (unsigned)outv.size);
- if(checksum != ADLER32) { error = 58; return error; }
- }
-
- return error;
-}
-
-#endif /*LODEPNG_COMPILE_DECODER*/
-
-#ifdef LODEPNG_COMPILE_ENCODER
-
-unsigned LodeZlib_compress(unsigned char** out, size_t* outsize, const unsigned char* in, size_t insize, const LodeZlib_DeflateSettings* settings)
-{
- /*initially, *out must be NULL and outsize 0, if you just give some random *out that's pointing to a non allocated buffer, this'll crash*/
- ucvector deflatedata, outv;
- size_t i;
- unsigned error;
-
- unsigned ADLER32;
- /*zlib data: 1 byte CMF (CM+CINFO), 1 byte FLG, deflate data, 4 byte ADLER32 checksum of the Decompressed data*/
- unsigned CMF = 120; /*0b01111000: CM 8, CINFO 7. With CINFO 7, any window size up to 32768 can be used.*/
- unsigned FLEVEL = 0;
- unsigned FDICT = 0;
- unsigned CMFFLG = 256 * CMF + FDICT * 32 + FLEVEL * 64;
- unsigned FCHECK = 31 - CMFFLG % 31;
- CMFFLG += FCHECK;
-
- ucvector_init_buffer(&outv, *out, *outsize); /*ucvector-controlled version of the output buffer, for dynamic array*/
-
- ucvector_push_back(&outv, (unsigned char)(CMFFLG / 256));
- ucvector_push_back(&outv, (unsigned char)(CMFFLG % 256));
-
- ucvector_init(&deflatedata);
- error = LodeFlate_deflate(&deflatedata, in, insize, settings);
-
- if(!error)
- {
- ADLER32 = adler32(in, (unsigned)insize);
- for(i = 0; i < deflatedata.size; i++) ucvector_push_back(&outv, deflatedata.data[i]);
- ucvector_cleanup(&deflatedata);
- LodeZlib_add32bitInt(&outv, ADLER32);
- }
-
- *out = outv.data;
- *outsize = outv.size;
-
- return error;
-}
-
-#endif /*LODEPNG_COMPILE_ENCODER*/
-
-#endif /*LODEPNG_COMPILE_ZLIB*/
-
-/* ////////////////////////////////////////////////////////////////////////// */
-
-#ifdef LODEPNG_COMPILE_ENCODER
-
-void LodeZlib_DeflateSettings_init(LodeZlib_DeflateSettings* settings)
-{
- settings->btype = 2; /*compress with dynamic huffman tree (not in the mathematical sense, just not the predefined one)*/
- settings->useLZ77 = 1;
- settings->windowSize = 2048; /*this is a good tradeoff between speed and compression ratio*/
-}
-
-const LodeZlib_DeflateSettings LodeZlib_defaultDeflateSettings = {2, 1, 2048};
-
-#endif /*LODEPNG_COMPILE_ENCODER*/
-
-#ifdef LODEPNG_COMPILE_DECODER
-
-void LodeZlib_DecompressSettings_init(LodeZlib_DecompressSettings* settings)
-{
- settings->ignoreAdler32 = 0;
-}
-
-const LodeZlib_DecompressSettings LodeZlib_defaultDecompressSettings = {0};
-
-#endif /*LODEPNG_COMPILE_DECODER*/
-
-/* ////////////////////////////////////////////////////////////////////////// */
-/* ////////////////////////////////////////////////////////////////////////// */
-/* ////////////////////////////////////////////////////////////////////////// */
-/* ////////////////////////////////////////////////////////////////////////// */
-/* ////////////////////////////////////////////////////////////////////////// */
-/* // End of Zlib related code, now comes the PNG related code that uses it// */
-/* ////////////////////////////////////////////////////////////////////////// */
-/* ////////////////////////////////////////////////////////////////////////// */
-/* ////////////////////////////////////////////////////////////////////////// */
-/* ////////////////////////////////////////////////////////////////////////// */
-/* ////////////////////////////////////////////////////////////////////////// */
-
-#ifdef LODEPNG_COMPILE_PNG
-
-/*
-The two functions below (LodePNG_decompress and LodePNG_compress) directly call the
-LodeZlib_decompress and LodeZlib_compress functions. The only purpose of the functions
-below, is to provide the ability to let LodePNG use a different Zlib encoder by only
-changing the two functions below, instead of changing it inside the vareous places
-in the other LodePNG functions.
-
-*out must be NULL and *outsize must be 0 initially, and after the function is done,
-*out must point to the decompressed data, *outsize must be the size of it, and must
-be the size of the useful data in bytes, not the alloc size.
-*/
-
-#ifdef LODEPNG_COMPILE_DECODER
-static unsigned LodePNG_decompress(unsigned char** out, size_t* outsize, const unsigned char* in, size_t insize, const LodeZlib_DecompressSettings* settings)
-{
- return LodeZlib_decompress(out, outsize, in, insize, settings);
-}
-#endif /*LODEPNG_COMPILE_DECODER*/
-#ifdef LODEPNG_COMPILE_ENCODER
-static unsigned LodePNG_compress(unsigned char** out, size_t* outsize, const unsigned char* in, size_t insize, const LodeZlib_DeflateSettings* settings)
-{
- return LodeZlib_compress(out, outsize, in, insize, settings);
-}
-#endif /*LODEPNG_COMPILE_ENCODER*/
-
-/* ////////////////////////////////////////////////////////////////////////// */
-/* / CRC32 / */
-/* ////////////////////////////////////////////////////////////////////////// */
-
-static unsigned Crc32_crc_table_computed = 0;
-static unsigned Crc32_crc_table[256];
-
-/*Make the table for a fast CRC.*/
-static void Crc32_make_crc_table(void)
-{
- unsigned c, k, n;
- for(n = 0; n < 256; n++)
- {
- c = n;
- for(k = 0; k < 8; k++)
- {
- if(c & 1) c = 0xedb88320L ^ (c >> 1);
- else c = c >> 1;
- }
- Crc32_crc_table[n] = c;
- }
- Crc32_crc_table_computed = 1;
-}
-
-/*Update a running CRC with the bytes buf[0..len-1]--the CRC should be
-initialized to all 1's, and the transmitted value is the 1's complement of the
-final running CRC (see the crc() routine below).*/
-static unsigned Crc32_update_crc(const unsigned char* buf, unsigned crc, size_t len)
-{
- unsigned c = crc;
- size_t n;
-
- if(!Crc32_crc_table_computed) Crc32_make_crc_table();
- for(n = 0; n < len; n++)
- {
- c = Crc32_crc_table[(c ^ buf[n]) & 0xff] ^ (c >> 8);
- }
- return c;
-}
-
-/*Return the CRC of the bytes buf[0..len-1].*/
-static unsigned Crc32_crc(const unsigned char* buf, size_t len)
-{
- return Crc32_update_crc(buf, 0xffffffffL, len) ^ 0xffffffffL;
-}
-
-/* ////////////////////////////////////////////////////////////////////////// */
-/* / Reading and writing single bits and bytes from/to stream for LodePNG / */
-/* ////////////////////////////////////////////////////////////////////////// */
-
-static unsigned char readBitFromReversedStream(size_t* bitpointer, const unsigned char* bitstream)
-{
- unsigned char result = (unsigned char)((bitstream[(*bitpointer) >> 3] >> (7 - ((*bitpointer) & 0x7))) & 1);
- (*bitpointer)++;
- return result;
-}
-
-static unsigned readBitsFromReversedStream(size_t* bitpointer, const unsigned char* bitstream, size_t nbits)
-{
- unsigned result = 0;
- size_t i;
- for(i = nbits - 1; i < nbits; i--) result += (unsigned)readBitFromReversedStream(bitpointer, bitstream) << i;
- return result;
-}
-
-#ifdef LODEPNG_COMPILE_DECODER
-static void setBitOfReversedStream0(size_t* bitpointer, unsigned char* bitstream, unsigned char bit)
-{
- /*the current bit in bitstream must be 0 for this to work*/
- if(bit) bitstream[(*bitpointer) >> 3] |= (bit << (7 - ((*bitpointer) & 0x7))); /*earlier bit of huffman code is in a lesser significant bit of an earlier byte*/
- (*bitpointer)++;
-}
-#endif /*LODEPNG_COMPILE_DECODER*/
-
-static void setBitOfReversedStream(size_t* bitpointer, unsigned char* bitstream, unsigned char bit)
-{
- /*the current bit in bitstream may be 0 or 1 for this to work*/
- if(bit == 0) bitstream[(*bitpointer) >> 3] &= (unsigned char)(~(1 << (7 - ((*bitpointer) & 0x7))));
- else bitstream[(*bitpointer) >> 3] |= (1 << (7 - ((*bitpointer) & 0x7)));
- (*bitpointer)++;
-}
-
-static unsigned LodePNG_read32bitInt(const unsigned char* buffer)
-{
- return (buffer[0] << 24) | (buffer[1] << 16) | (buffer[2] << 8) | buffer[3];
-}
-
-static void LodePNG_set32bitInt(unsigned char* buffer, unsigned value) /*buffer must have at least 4 allocated bytes available*/
-{
- buffer[0] = (unsigned char)((value >> 24) & 0xff);
- buffer[1] = (unsigned char)((value >> 16) & 0xff);
- buffer[2] = (unsigned char)((value >> 8) & 0xff);
- buffer[3] = (unsigned char)((value ) & 0xff);
-}
-
-#ifdef LODEPNG_COMPILE_ENCODER
-static void LodePNG_add32bitInt(ucvector* buffer, unsigned value)
-{
- ucvector_resize(buffer, buffer->size + 4);
- LodePNG_set32bitInt(&buffer->data[buffer->size - 4], value);
-}
-#endif /*LODEPNG_COMPILE_ENCODER*/
-
-/* ////////////////////////////////////////////////////////////////////////// */
-/* / PNG chunks / */
-/* ////////////////////////////////////////////////////////////////////////// */
-
-unsigned LodePNG_chunk_length(const unsigned char* chunk) /*get the length of the data of the chunk. Total chunk length has 12 bytes more.*/
-{
- return LodePNG_read32bitInt(&chunk[0]);
-}
-
-void LodePNG_chunk_type(char type[5], const unsigned char* chunk) /*puts the 4-byte type in null terminated string*/
-{
- unsigned i;
- for(i = 0; i < 4; i++) type[i] = chunk[4 + i];
- type[4] = 0; /*null termination char*/
-}
-
-unsigned char LodePNG_chunk_type_equals(const unsigned char* chunk, const char* type) /*check if the type is the given type*/
-{
- if(strlen(type) != 4) return 0;
- return (chunk[4] == type[0] && chunk[5] == type[1] && chunk[6] == type[2] && chunk[7] == type[3]);
-}
-
-/*properties of PNG chunks gotten from capitalization of chunk type name, as defined by the standard*/
-unsigned char LodePNG_chunk_critical(const unsigned char* chunk) /*0: ancillary chunk, 1: it's one of the critical chunk types*/
-{
- return((chunk[4] & 32) == 0);
-}
-
-unsigned char LodePNG_chunk_private(const unsigned char* chunk) /*0: public, 1: private*/
-{
- return((chunk[6] & 32) != 0);
-}
-
-unsigned char LodePNG_chunk_safetocopy(const unsigned char* chunk) /*0: the chunk is unsafe to copy, 1: the chunk is safe to copy*/
-{
- return((chunk[7] & 32) != 0);
-}
-
-unsigned char* LodePNG_chunk_data(unsigned char* chunk) /*get pointer to the data of the chunk*/
-{
- return &chunk[8];
-}
-
-const unsigned char* LodePNG_chunk_data_const(const unsigned char* chunk) /*get pointer to the data of the chunk*/
-{
- return &chunk[8];
-}
-
-unsigned LodePNG_chunk_check_crc(const unsigned char* chunk) /*returns 0 if the crc is correct, error code if it's incorrect*/
-{
- unsigned length = LodePNG_chunk_length(chunk);
- unsigned CRC = LodePNG_read32bitInt(&chunk[length + 8]);
- unsigned checksum = Crc32_crc(&chunk[4], length + 4); /*the CRC is taken of the data and the 4 chunk type letters, not the length*/
- if(CRC != checksum) return 1;
- else return 0;
-}
-
-void LodePNG_chunk_generate_crc(unsigned char* chunk) /*generates the correct CRC from the data and puts it in the last 4 bytes of the chunk*/
-{
- unsigned length = LodePNG_chunk_length(chunk);
- unsigned CRC = Crc32_crc(&chunk[4], length + 4);
- LodePNG_set32bitInt(chunk + 8 + length, CRC);
-}
-
-unsigned char* LodePNG_chunk_next(unsigned char* chunk) /*don't use on IEND chunk, as there is no next chunk then*/
-{
- unsigned total_chunk_length = LodePNG_chunk_length(chunk) + 12;
- return &chunk[total_chunk_length];
-}
-
-const unsigned char* LodePNG_chunk_next_const(const unsigned char* chunk) /*don't use on IEND chunk, as there is no next chunk then*/
-{
- unsigned total_chunk_length = LodePNG_chunk_length(chunk) + 12;
- return &chunk[total_chunk_length];
-}
-
-unsigned LodePNG_append_chunk(unsigned char** out, size_t* outlength, const unsigned char* chunk) /*appends chunk that was already created, to the data. Returns error code.*/
-{
- unsigned i;
- unsigned total_chunk_length = LodePNG_chunk_length(chunk) + 12;
- unsigned char *chunk_start, *new_buffer;
- size_t new_length = (*outlength) + total_chunk_length;
- if(new_length < total_chunk_length || new_length < (*outlength)) return 77; /*integer overflow happened*/
-
- new_buffer = (unsigned char*)realloc(*out, new_length);
- if(!new_buffer) return 9929;
- (*out) = new_buffer;
- (*outlength) = new_length;
- chunk_start = &(*out)[new_length - total_chunk_length];
-
- for(i = 0; i < total_chunk_length; i++) chunk_start[i] = chunk[i];
-
- return 0;
-}
-
-unsigned LodePNG_create_chunk(unsigned char** out, size_t* outlength, unsigned length, const char* type, const unsigned char* data) /*appends new chunk to out. Returns error code; may change memory address of out buffer*/
-{
- unsigned i;
- unsigned char *chunk, *new_buffer;
- size_t new_length = (*outlength) + length + 12;
- if(new_length < length + 12 || new_length < (*outlength)) return 77; /*integer overflow happened*/
- new_buffer = (unsigned char*)realloc(*out, new_length);
- if(!new_buffer) return 9930;
- (*out) = new_buffer;
- (*outlength) = new_length;
- chunk = &(*out)[(*outlength) - length - 12];
-
- /*1: length*/
- LodePNG_set32bitInt(chunk, (unsigned)length);
-
- /*2: chunk name (4 letters)*/
- chunk[4] = type[0];
- chunk[5] = type[1];
- chunk[6] = type[2];
- chunk[7] = type[3];
-
- /*3: the data*/
- for(i = 0; i < length; i++) chunk[8 + i] = data[i];
-
- /*4: CRC (of the chunkname characters and the data)*/
- LodePNG_chunk_generate_crc(chunk);
-
- return 0;
-}
-
-/* ////////////////////////////////////////////////////////////////////////// */
-/* / Color types and such / */
-/* ////////////////////////////////////////////////////////////////////////// */
-
-/*return type is a LodePNG error code*/
-static unsigned checkColorValidity(unsigned colorType, unsigned bd) /*bd = bitDepth*/
-{
- switch(colorType)
- {
- case 0: if(!(bd == 1 || bd == 2 || bd == 4 || bd == 8 || bd == 16)) return 37; break; /*grey*/
- case 2: if(!( bd == 8 || bd == 16)) return 37; break; /*RGB*/
- case 3: if(!(bd == 1 || bd == 2 || bd == 4 || bd == 8 )) return 37; break; /*palette*/
- case 4: if(!( bd == 8 || bd == 16)) return 37; break; /*grey + alpha*/
- case 6: if(!( bd == 8 || bd == 16)) return 37; break; /*RGBA*/
- default: return 31;
- }
- return 0; /*allowed color type / bits combination*/
-}
-
-static unsigned getNumColorChannels(unsigned colorType)
-{
- switch(colorType)
- {
- case 0: return 1; /*grey*/
- case 2: return 3; /*RGB*/
- case 3: return 1; /*palette*/
- case 4: return 2; /*grey + alpha*/
- case 6: return 4; /*RGBA*/
- }
- return 0; /*unexisting color type*/
-}
-
-static unsigned getBpp(unsigned colorType, unsigned bitDepth)
-{
- return getNumColorChannels(colorType) * bitDepth; /*bits per pixel is amount of channels * bits per channel*/
-}
-
-/* ////////////////////////////////////////////////////////////////////////// */
-
-void LodePNG_InfoColor_init(LodePNG_InfoColor* info)
-{
- info->key_defined = 0;
- info->key_r = info->key_g = info->key_b = 0;
- info->colorType = 6;
- info->bitDepth = 8;
- info->palette = 0;
- info->palettesize = 0;
-}
-
-void LodePNG_InfoColor_cleanup(LodePNG_InfoColor* info)
-{
- LodePNG_InfoColor_clearPalette(info);
-}
-
-void LodePNG_InfoColor_clearPalette(LodePNG_InfoColor* info)
-{
- if(info->palette) free(info->palette);
- info->palettesize = 0;
-}
-
-unsigned LodePNG_InfoColor_addPalette(LodePNG_InfoColor* info, unsigned char r, unsigned char g, unsigned char b, unsigned char a)
-{
- unsigned char* data;
- /*the same resize technique as C++ std::vectors is used, and here it's made so that for a palette with the max of 256 colors, it'll have the exact alloc size*/
- if(!(info->palettesize & (info->palettesize - 1))) /*if palettesize is 0 or a power of two*/
- {
- /*allocated data must be at least 4* palettesize (for 4 color bytes)*/
- size_t alloc_size = info->palettesize == 0 ? 4 : info->palettesize * 4 * 2;
- data = (unsigned char*)realloc(info->palette, alloc_size);
- if(!data) return 9931;
- else info->palette = data;
- }
- info->palette[4 * info->palettesize + 0] = r;
- info->palette[4 * info->palettesize + 1] = g;
- info->palette[4 * info->palettesize + 2] = b;
- info->palette[4 * info->palettesize + 3] = a;
- info->palettesize++;
- return 0;
-}
-
-unsigned LodePNG_InfoColor_getBpp(const LodePNG_InfoColor* info) { return getBpp(info->colorType, info->bitDepth); } /*calculate bits per pixel out of colorType and bitDepth*/
-unsigned LodePNG_InfoColor_getChannels(const LodePNG_InfoColor* info) { return getNumColorChannels(info->colorType); }
-unsigned LodePNG_InfoColor_isGreyscaleType(const LodePNG_InfoColor* info) { return info->colorType == 0 || info->colorType == 4; }
-unsigned LodePNG_InfoColor_isAlphaType(const LodePNG_InfoColor* info) { return (info->colorType & 4) != 0; }
-
-unsigned LodePNG_InfoColor_equal(const LodePNG_InfoColor* info1, const LodePNG_InfoColor* info2)
-{
- return info1->colorType == info2->colorType
- && info1->bitDepth == info2->bitDepth; /*palette and color key not compared*/
-}
-
-#ifdef LODEPNG_COMPILE_UNKNOWN_CHUNKS
-
-void LodePNG_UnknownChunks_init(LodePNG_UnknownChunks* chunks)
-{
- unsigned i;
- for(i = 0; i < 3; i++) chunks->data[i] = 0;
- for(i = 0; i < 3; i++) chunks->datasize[i] = 0;
-}
-
-void LodePNG_UnknownChunks_cleanup(LodePNG_UnknownChunks* chunks)
-{
- unsigned i;
- for(i = 0; i < 3; i++) free(chunks->data[i]);
-}
-
-unsigned LodePNG_UnknownChunks_copy(LodePNG_UnknownChunks* dest, const LodePNG_UnknownChunks* src)
-{
- unsigned i;
-
- LodePNG_UnknownChunks_cleanup(dest);
-
- for(i = 0; i < 3; i++)
- {
- size_t j;
- dest->datasize[i] = src->datasize[i];
- dest->data[i] = (unsigned char*)malloc(src->datasize[i]);
- if(!dest->data[i] && dest->datasize[i]) return 9932;
- for(j = 0; j < src->datasize[i]; j++) dest->data[i][j] = src->data[i][j];
- }
-
- return 0;
-}
-
-#endif /*LODEPNG_COMPILE_UNKNOWN_CHUNKS*/
-
-#ifdef LODEPNG_COMPILE_ANCILLARY_CHUNKS
-
-void LodePNG_Text_init(LodePNG_Text* text)
-{
- text->num = 0;
- text->keys = NULL;
- text->strings = NULL;
-}
-
-void LodePNG_Text_cleanup(LodePNG_Text* text)
-{
- LodePNG_Text_clear(text);
-}
-
-unsigned LodePNG_Text_copy(LodePNG_Text* dest, const LodePNG_Text* source)
-{
- size_t i = 0;
- dest->keys = 0;
- dest->strings = 0;
- dest->num = 0;
- for(i = 0; i < source->num; i++)
- {
- unsigned error = LodePNG_Text_add(dest, source->keys[i], source->strings[i]);
- if(error) return error;
- }
- return 0;
-}
-
-void LodePNG_Text_clear(LodePNG_Text* text)
-{
- size_t i;
- for(i = 0; i < text->num; i++)
- {
- string_cleanup(&text->keys[i]);
- string_cleanup(&text->strings[i]);
- }
- free(text->keys);
- free(text->strings);
-}
-
-unsigned LodePNG_Text_add(LodePNG_Text* text, const char* key, const char* str)
-{
- char** new_keys = (char**)(realloc(text->keys, sizeof(char*) * (text->num + 1)));
- char** new_strings = (char**)(realloc(text->strings, sizeof(char*) * (text->num + 1)));
- if(!new_keys || !new_strings)
- {
- free(new_keys);
- free(new_strings);
- return 9933;
- }
-
- text->num++;
- text->keys = new_keys;
- text->strings = new_strings;
-
- string_init(&text->keys[text->num - 1]);
- string_set(&text->keys[text->num - 1], key);
-
- string_init(&text->strings[text->num - 1]);
- string_set(&text->strings[text->num - 1], str);
-
- return 0;
-}
-
-/******************************************************************************/
-
-void LodePNG_IText_init(LodePNG_IText* text)
-{
- text->num = 0;
- text->keys = NULL;
- text->langtags = NULL;
- text->transkeys = NULL;
- text->strings = NULL;
-}
-
-void LodePNG_IText_cleanup(LodePNG_IText* text)
-{
- LodePNG_IText_clear(text);
-}
-
-unsigned LodePNG_IText_copy(LodePNG_IText* dest, const LodePNG_IText* source)
-{
- size_t i = 0;
- dest->keys = 0;
- dest->langtags = 0;
- dest->transkeys = 0;
- dest->strings = 0;
- dest->num = 0;
- for(i = 0; i < source->num; i++)
- {
- unsigned error = LodePNG_IText_add(dest, source->keys[i], source->langtags[i], source->transkeys[i], source->strings[i]);
- if(error) return error;
- }
- return 0;
-}
-
-void LodePNG_IText_clear(LodePNG_IText* text)
-{
- size_t i;
- for(i = 0; i < text->num; i++)
- {
- string_cleanup(&text->keys[i]);
- string_cleanup(&text->langtags[i]);
- string_cleanup(&text->transkeys[i]);
- string_cleanup(&text->strings[i]);
- }
- free(text->keys);
- free(text->langtags);
- free(text->transkeys);
- free(text->strings);
-}
-
-unsigned LodePNG_IText_add(LodePNG_IText* text, const char* key, const char* langtag, const char* transkey, const char* str)
-{
- char** new_keys = (char**)(realloc(text->keys, sizeof(char*) * (text->num + 1)));
- char** new_langtags = (char**)(realloc(text->langtags, sizeof(char*) * (text->num + 1)));
- char** new_transkeys = (char**)(realloc(text->transkeys, sizeof(char*) * (text->num + 1)));
- char** new_strings = (char**)(realloc(text->strings, sizeof(char*) * (text->num + 1)));
- if(!new_keys || !new_langtags || !new_transkeys || !new_strings)
- {
- free(new_keys);
- free(new_langtags);
- free(new_transkeys);
- free(new_strings);
- return 9934;
- }
-
- text->num++;
- text->keys = new_keys;
- text->langtags = new_langtags;
- text->transkeys = new_transkeys;
- text->strings = new_strings;
-
- string_init(&text->keys[text->num - 1]);
- string_set(&text->keys[text->num - 1], key);
-
- string_init(&text->langtags[text->num - 1]);
- string_set(&text->langtags[text->num - 1], langtag);
-
- string_init(&text->transkeys[text->num - 1]);
- string_set(&text->transkeys[text->num - 1], transkey);
-
- string_init(&text->strings[text->num - 1]);
- string_set(&text->strings[text->num - 1], str);
-
- return 0;
-}
-
-#endif /*LODEPNG_COMPILE_ANCILLARY_CHUNKS*/
-
-void LodePNG_InfoPng_init(LodePNG_InfoPng* info)
-{
- info->width = info->height = 0;
- LodePNG_InfoColor_init(&info->color);
- info->interlaceMethod = 0;
- info->compressionMethod = 0;
- info->filterMethod = 0;
-#ifdef LODEPNG_COMPILE_ANCILLARY_CHUNKS
- info->background_defined = 0;
- info->background_r = info->background_g = info->background_b = 0;
-
- LodePNG_Text_init(&info->text);
- LodePNG_IText_init(&info->itext);
-
- info->time_defined = 0;
- info->phys_defined = 0;
-#endif /*LODEPNG_COMPILE_ANCILLARY_CHUNKS*/
-#ifdef LODEPNG_COMPILE_UNKNOWN_CHUNKS
- LodePNG_UnknownChunks_init(&info->unknown_chunks);
-#endif /*LODEPNG_COMPILE_UNKNOWN_CHUNKS*/
-}
-
-void LodePNG_InfoPng_cleanup(LodePNG_InfoPng* info)
-{
- LodePNG_InfoColor_cleanup(&info->color);
-#ifdef LODEPNG_COMPILE_ANCILLARY_CHUNKS
- LodePNG_Text_cleanup(&info->text);
- LodePNG_IText_cleanup(&info->itext);
-#endif /*LODEPNG_COMPILE_ANCILLARY_CHUNKS*/
-#ifdef LODEPNG_COMPILE_UNKNOWN_CHUNKS
- LodePNG_UnknownChunks_cleanup(&info->unknown_chunks);
-#endif /*LODEPNG_COMPILE_UNKNOWN_CHUNKS*/
-}
-
-unsigned LodePNG_InfoPng_copy(LodePNG_InfoPng* dest, const LodePNG_InfoPng* source)
-{
- unsigned error = 0;
- LodePNG_InfoPng_cleanup(dest);
- *dest = *source;
- LodePNG_InfoColor_init(&dest->color);
- error = LodePNG_InfoColor_copy(&dest->color, &source->color); if(error) return error;
-
-#ifdef LODEPNG_COMPILE_ANCILLARY_CHUNKS
- error = LodePNG_Text_copy(&dest->text, &source->text); if(error) return error;
- error = LodePNG_IText_copy(&dest->itext, &source->itext); if(error) return error;
-#endif /*LODEPNG_COMPILE_ANCILLARY_CHUNKS*/
-
-#ifdef LODEPNG_COMPILE_UNKNOWN_CHUNKS
- LodePNG_UnknownChunks_init(&dest->unknown_chunks);
- error = LodePNG_UnknownChunks_copy(&dest->unknown_chunks, &source->unknown_chunks); if(error) return error;
-#endif /*LODEPNG_COMPILE_UNKNOWN_CHUNKS*/
- return error;
-}
-
-void LodePNG_InfoPng_swap(LodePNG_InfoPng* a, LodePNG_InfoPng* b)
-{
- LodePNG_InfoPng temp = *a;
- *a = *b;
- *b = temp;
-}
-
-unsigned LodePNG_InfoColor_copy(LodePNG_InfoColor* dest, const LodePNG_InfoColor* source)
-{
- size_t i;
- LodePNG_InfoColor_cleanup(dest);
- *dest = *source;
- dest->palette = (unsigned char*)malloc(source->palettesize * 4);
- if(!dest->palette && source->palettesize) return 9935;
- for(i = 0; i < source->palettesize * 4; i++) dest->palette[i] = source->palette[i];
- return 0;
-}
-
-void LodePNG_InfoRaw_init(LodePNG_InfoRaw* info)
-{
- LodePNG_InfoColor_init(&info->color);
-}
-
-void LodePNG_InfoRaw_cleanup(LodePNG_InfoRaw* info)
-{
- LodePNG_InfoColor_cleanup(&info->color);
-}
-
-unsigned LodePNG_InfoRaw_copy(LodePNG_InfoRaw* dest, const LodePNG_InfoRaw* source)
-{
- unsigned error = 0;
- LodePNG_InfoRaw_cleanup(dest);
- *dest = *source;
- LodePNG_InfoColor_init(&dest->color);
- error = LodePNG_InfoColor_copy(&dest->color, &source->color); if(error) return error;
- return error;
-}
-
-/* ////////////////////////////////////////////////////////////////////////// */
-
-/*
-converts from any color type to 24-bit or 32-bit (later maybe more supported). return value = LodePNG error code
-the out buffer must have (w * h * bpp + 7) / 8 bytes, where bpp is the bits per pixel of the output color type (LodePNG_InfoColor_getBpp)
-for < 8 bpp images, there may _not_ be padding bits at the end of scanlines.
-*/
-unsigned LodePNG_convert(unsigned char* out, const unsigned char* in, LodePNG_InfoColor* infoOut, LodePNG_InfoColor* infoIn, unsigned w, unsigned h)
-{
- const size_t numpixels = w * h; /*amount of pixels*/
- const unsigned OUT_BYTES = LodePNG_InfoColor_getBpp(infoOut) / 8; /*bytes per pixel in the output image*/
- const unsigned OUT_ALPHA = LodePNG_InfoColor_isAlphaType(infoOut); /*use 8-bit alpha channel*/
- size_t i, c, bp = 0; /*bitpointer, used by less-than-8-bit color types*/
-
- /*cases where in and out already have the same format*/
- if(LodePNG_InfoColor_equal(infoIn, infoOut))
- {
- size_t i, size = (w * h * LodePNG_InfoColor_getBpp(infoIn) + 7) / 8;
- for(i = 0; i < size; i++) out[i] = in[i];
- return 0;
- }
-
- if((infoOut->colorType == 2 || infoOut->colorType == 6) && infoOut->bitDepth == 8)
- {
- if(infoIn->bitDepth == 8)
- {
- switch(infoIn->colorType)
- {
- case 0: /*greyscale color*/
- for(i = 0; i < numpixels; i++)
- {
- if(OUT_ALPHA) out[OUT_BYTES * i + 3] = 255;
- out[OUT_BYTES * i + 0] = out[OUT_BYTES * i + 1] = out[OUT_BYTES * i + 2] = in[i];
- if(OUT_ALPHA && infoIn->key_defined && in[i] == infoIn->key_r) out[OUT_BYTES * i + 3] = 0;
- }
- break;
- case 2: /*RGB color*/
- for(i = 0; i < numpixels; i++)
- {
- if(OUT_ALPHA) out[OUT_BYTES * i + 3] = 255;
- for(c = 0; c < 3; c++) out[OUT_BYTES * i + c] = in[3 * i + c];
- if(OUT_ALPHA && infoIn->key_defined == 1 && in[3 * i + 0] == infoIn->key_r && in[3 * i + 1] == infoIn->key_g && in[3 * i + 2] == infoIn->key_b) out[OUT_BYTES * i + 3] = 0;
- }
- break;
- case 3: /*indexed color (palette)*/
- for(i = 0; i < numpixels; i++)
- {
- if(OUT_ALPHA) out[OUT_BYTES * i + 3] = 255;
- if(in[i] >= infoIn->palettesize) return 46;
- for(c = 0; c < OUT_BYTES; c++) out[OUT_BYTES * i + c] = infoIn->palette[4 * in[i] + c]; /*get rgb colors from the palette*/
- }
- break;
- case 4: /*greyscale with alpha*/
- for(i = 0; i < numpixels; i++)
- {
- out[OUT_BYTES * i + 0] = out[OUT_BYTES * i + 1] = out[OUT_BYTES * i + 2] = in[2 * i + 0];
- if(OUT_ALPHA) out[OUT_BYTES * i + 3] = in[2 * i + 1];
- }
- break;
- case 6: /*RGB with alpha*/
- for(i = 0; i < numpixels; i++)
- {
- for(c = 0; c < OUT_BYTES; c++) out[OUT_BYTES * i + c] = in[4 * i + c];
- }
- break;
- default: break;
- }
- }
- else if(infoIn->bitDepth == 16)
- {
- switch(infoIn->colorType)
- {
- case 0: /*greyscale color*/
- for(i = 0; i < numpixels; i++)
- {
- if(OUT_ALPHA) out[OUT_BYTES * i + 3] = 255;
- out[OUT_BYTES * i + 0] = out[OUT_BYTES * i + 1] = out[OUT_BYTES * i + 2] = in[2 * i];
- if(OUT_ALPHA && infoIn->key_defined && 256U * in[i] + in[i + 1] == infoIn->key_r) out[OUT_BYTES * i + 3] = 0;
- }
- break;
- case 2: /*RGB color*/
- for(i = 0; i < numpixels; i++)
- {
- if(OUT_ALPHA) out[OUT_BYTES * i + 3] = 255;
- for(c = 0; c < 3; c++) out[OUT_BYTES * i + c] = in[6 * i + 2 * c];
- if(OUT_ALPHA && infoIn->key_defined && 256U * in[6 * i + 0] + in[6 * i + 1] == infoIn->key_r && 256U * in[6 * i + 2] + in[6 * i + 3] == infoIn->key_g && 256U * in[6 * i + 4] + in[6 * i + 5] == infoIn->key_b) out[OUT_BYTES * i + 3] = 0;
- }
- break;
- case 4: /*greyscale with alpha*/
- for(i = 0; i < numpixels; i++)
- {
- out[OUT_BYTES * i + 0] = out[OUT_BYTES * i + 1] = out[OUT_BYTES * i + 2] = in[4 * i]; /*most significant byte*/
- if(OUT_ALPHA) out[OUT_BYTES * i + 3] = in[4 * i + 2];
- }
- break;
- case 6: /*RGB with alpha*/
- for(i = 0; i < numpixels; i++)
- {
- for(c = 0; c < OUT_BYTES; c++) out[OUT_BYTES * i + c] = in[8 * i + 2 * c];
- }
- break;
- default: break;
- }
- }
- else /*infoIn->bitDepth is less than 8 bit per channel*/
- {
- switch(infoIn->colorType)
- {
- case 0: /*greyscale color*/
- for(i = 0; i < numpixels; i++)
- {
- unsigned value = readBitsFromReversedStream(&bp, in, infoIn->bitDepth);
- if(OUT_ALPHA) out[OUT_BYTES * i + 3] = 255;
- if(OUT_ALPHA && infoIn->key_defined && value && ((1U << infoIn->bitDepth) - 1U) == infoIn->key_r && ((1U << infoIn->bitDepth) - 1U)) out[OUT_BYTES * i + 3] = 0;
- value = (value * 255) / ((1 << infoIn->bitDepth) - 1); /*scale value from 0 to 255*/
- out[OUT_BYTES * i + 0] = out[OUT_BYTES * i + 1] = out[OUT_BYTES * i + 2] = (unsigned char)(value);
- }
- break;
- case 3: /*indexed color (palette)*/
- for(i = 0; i < numpixels; i++)
- {
- unsigned value = readBitsFromReversedStream(&bp, in, infoIn->bitDepth);
- if(OUT_ALPHA) out[OUT_BYTES * i + 3] = 255;
- if(value >= infoIn->palettesize) return 47;
- for(c = 0; c < OUT_BYTES; c++) out[OUT_BYTES * i + c] = infoIn->palette[4 * value + c]; /*get rgb colors from the palette*/
- }
- break;
- default: break;
- }
- }
- }
- else if(LodePNG_InfoColor_isGreyscaleType(infoOut) && infoOut->bitDepth == 8) /*conversion from greyscale to greyscale*/
- {
- if(!LodePNG_InfoColor_isGreyscaleType(infoIn)) return 62;
- if(infoIn->bitDepth == 8)
- {
- switch(infoIn->colorType)
- {
- case 0: /*greyscale color*/
- for(i = 0; i < numpixels; i++)
- {
- if(OUT_ALPHA) out[OUT_BYTES * i + 1] = 255;
- out[OUT_BYTES * i] = in[i];
- if(OUT_ALPHA && infoIn->key_defined && in[i] == infoIn->key_r) out[OUT_BYTES * i + 1] = 0;
- }
- break;
- case 4: /*greyscale with alpha*/
- for(i = 0; i < numpixels; i++)
- {
- out[OUT_BYTES * i + 0] = in[2 * i + 0];
- if(OUT_ALPHA) out[OUT_BYTES * i + 1] = in[2 * i + 1];
- }
- break;
- default: return 31;
- }
- }
- else if(infoIn->bitDepth == 16)
- {
- switch(infoIn->colorType)
- {
- case 0: /*greyscale color*/
- for(i = 0; i < numpixels; i++)
- {
- if(OUT_ALPHA) out[OUT_BYTES * i + 1] = 255;
- out[OUT_BYTES * i] = in[2 * i];
- if(OUT_ALPHA && infoIn->key_defined && 256U * in[i] + in[i + 1] == infoIn->key_r) out[OUT_BYTES * i + 1] = 0;
- }
- break;
- case 4: /*greyscale with alpha*/
- for(i = 0; i < numpixels; i++)
- {
- out[OUT_BYTES * i] = in[4 * i]; /*most significant byte*/
- if(OUT_ALPHA) out[OUT_BYTES * i + 1] = in[4 * i + 2]; /*most significant byte*/
- }
- break;
- default: return 31;
- }
- }
- else /*infoIn->bitDepth is less than 8 bit per channel*/
- {
- if(infoIn->colorType != 0) return 31; /*colorType 0 is the only greyscale type with < 8 bits per channel*/
- for(i = 0; i < numpixels; i++)
- {
- unsigned value = readBitsFromReversedStream(&bp, in, infoIn->bitDepth);
- if(OUT_ALPHA) out[OUT_BYTES * i + 1] = 255;
- if(OUT_ALPHA && infoIn->key_defined && value && ((1U << infoIn->bitDepth) - 1U) == infoIn->key_r && ((1U << infoIn->bitDepth) - 1U)) out[OUT_BYTES * i + 1] = 0;
- value = (value * 255) / ((1 << infoIn->bitDepth) - 1); /*scale value from 0 to 255*/
- out[OUT_BYTES * i] = (unsigned char)(value);
- }
- }
- }
- else return 59;
-
- return 0;
-}
-
-/*Paeth predicter, used by PNG filter type 4*/
-static int paethPredictor(int a, int b, int c)
-{
- int p = a + b - c;
- int pa = p > a ? p - a : a - p;
- int pb = p > b ? p - b : b - p;
- int pc = p > c ? p - c : c - p;
-
- if(pa <= pb && pa <= pc) return a;
- else if(pb <= pc) return b;
- else return c;
-}
-
-/*shared values used by multiple Adam7 related functions*/
-
-static const unsigned ADAM7_IX[7] = { 0, 4, 0, 2, 0, 1, 0 }; /*x start values*/
-static const unsigned ADAM7_IY[7] = { 0, 0, 4, 0, 2, 0, 1 }; /*y start values*/
-static const unsigned ADAM7_DX[7] = { 8, 8, 4, 4, 2, 2, 1 }; /*x delta values*/
-static const unsigned ADAM7_DY[7] = { 8, 8, 8, 4, 4, 2, 2 }; /*y delta values*/
-
-static void Adam7_getpassvalues(unsigned passw[7], unsigned passh[7], size_t filter_passstart[8], size_t padded_passstart[8], size_t passstart[8], unsigned w, unsigned h, unsigned bpp)
-{
- /*the passstart values have 8 values: the 8th one actually indicates the byte after the end of the 7th (= last) pass*/
- unsigned i;
-
- /*calculate width and height in pixels of each pass*/
- for(i = 0; i < 7; i++)
- {
- passw[i] = (w + ADAM7_DX[i] - ADAM7_IX[i] - 1) / ADAM7_DX[i];
- passh[i] = (h + ADAM7_DY[i] - ADAM7_IY[i] - 1) / ADAM7_DY[i];
- if(passw[i] == 0) passh[i] = 0;
- if(passh[i] == 0) passw[i] = 0;
- }
-
- filter_passstart[0] = padded_passstart[0] = passstart[0] = 0;
- for(i = 0; i < 7; i++)
- {
- filter_passstart[i + 1] = filter_passstart[i] + ((passw[i] && passh[i]) ? passh[i] * (1 + (passw[i] * bpp + 7) / 8) : 0); /*if passw[i] is 0, it's 0 bytes, not 1 (no filtertype-byte)*/
- padded_passstart[i + 1] = padded_passstart[i] + passh[i] * ((passw[i] * bpp + 7) / 8); /*bits padded if needed to fill full byte at end of each scanline*/
- passstart[i + 1] = passstart[i] + (passh[i] * passw[i] * bpp + 7) / 8; /*only padded at end of reduced image*/
- }
-}
-
-#ifdef LODEPNG_COMPILE_DECODER
-
-/* ////////////////////////////////////////////////////////////////////////// */
-/* / PNG Decoder / */
-/* ////////////////////////////////////////////////////////////////////////// */
-
-/*read the information from the header and store it in the LodePNG_Info. return value is error*/
-void LodePNG_inspect(LodePNG_Decoder* decoder, const unsigned char* in, size_t inlength)
-{
- if(inlength == 0 || in == 0) { decoder->error = 48; return; } /*the given data is empty*/
- if(inlength < 29) { decoder->error = 27; return; } /*error: the data length is smaller than the length of the header*/
-
- /*when decoding a new PNG image, make sure all parameters created after previous decoding are reset*/
- LodePNG_InfoPng_cleanup(&decoder->infoPng);
- LodePNG_InfoPng_init(&decoder->infoPng);
- decoder->error = 0;
-
- if(in[0] != 137 || in[1] != 80 || in[2] != 78 || in[3] != 71 || in[4] != 13 || in[5] != 10 || in[6] != 26 || in[7] != 10) { decoder->error = 28; return; } /*error: the first 8 bytes are not the correct PNG signature*/
- if(in[12] != 'I' || in[13] != 'H' || in[14] != 'D' || in[15] != 'R') { decoder->error = 29; return; } /*error: it doesn't start with a IHDR chunk!*/
-
- /*read the values given in the header*/
- decoder->infoPng.width = LodePNG_read32bitInt(&in[16]);
- decoder->infoPng.height = LodePNG_read32bitInt(&in[20]);
- decoder->infoPng.color.bitDepth = in[24];
- decoder->infoPng.color.colorType = in[25];
- decoder->infoPng.compressionMethod = in[26];
- decoder->infoPng.filterMethod = in[27];
- decoder->infoPng.interlaceMethod = in[28];
-
- if(!decoder->settings.ignoreCrc)
- {
- unsigned CRC = LodePNG_read32bitInt(&in[29]);
- unsigned checksum = Crc32_crc(&in[12], 17);
- if(CRC != checksum) { decoder->error = 57; return; }
- }
-
- if(decoder->infoPng.compressionMethod != 0) { decoder->error = 32; return; } /*error: only compression method 0 is allowed in the specification*/
- if(decoder->infoPng.filterMethod != 0) { decoder->error = 33; return; } /*error: only filter method 0 is allowed in the specification*/
- if(decoder->infoPng.interlaceMethod > 1) { decoder->error = 34; return; } /*error: only interlace methods 0 and 1 exist in the specification*/
-
- decoder->error = checkColorValidity(decoder->infoPng.color.colorType, decoder->infoPng.color.bitDepth);
-}
-
-static unsigned unfilterScanline(unsigned char* recon, const unsigned char* scanline, const unsigned char* precon, size_t bytewidth, unsigned char filterType, size_t length)
-{
- /*
- For PNG filter method 0
- unfilter a PNG image scanline by scanline. when the pixels are smaller than 1 byte, the filter works byte per byte (bytewidth = 1)
- precon is the previous unfiltered scanline, recon the result, scanline the current one
- the incoming scanlines do NOT include the filtertype byte, that one is given in the parameter filterType instead
- recon and scanline MAY be the same memory address! precon must be disjoint.
- */
-
- size_t i;
- switch(filterType)
- {
- case 0:
- for(i = 0; i < length; i++) recon[i] = scanline[i];
- break;
- case 1:
- for(i = 0; i < bytewidth; i++) recon[i] = scanline[i];
- for(i = bytewidth; i < length; i++) recon[i] = scanline[i] + recon[i - bytewidth];
- break;
- case 2:
- if(precon) for(i = 0; i < length; i++) recon[i] = scanline[i] + precon[i];
- else for(i = 0; i < length; i++) recon[i] = scanline[i];
- break;
- case 3:
- if(precon)
- {
- for(i = 0; i < bytewidth; i++) recon[i] = scanline[i] + precon[i] / 2;
- for(i = bytewidth; i < length; i++) recon[i] = scanline[i] + ((recon[i - bytewidth] + precon[i]) / 2);
- }
- else
- {
- for(i = 0; i < bytewidth; i++) recon[i] = scanline[i];
- for(i = bytewidth; i < length; i++) recon[i] = scanline[i] + recon[i - bytewidth] / 2;
- }
- break;
- case 4:
- if(precon)
- {
- for(i = 0; i < bytewidth; i++) recon[i] = (unsigned char)(scanline[i] + paethPredictor(0, precon[i], 0));
- for(i = bytewidth; i < length; i++) recon[i] = (unsigned char)(scanline[i] + paethPredictor(recon[i - bytewidth], precon[i], precon[i - bytewidth]));
- }
- else
- {
- for(i = 0; i < bytewidth; i++) recon[i] = scanline[i];
- for(i = bytewidth; i < length; i++) recon[i] = (unsigned char)(scanline[i] + paethPredictor(recon[i - bytewidth], 0, 0));
- }
- break;
- default: return 36; /*error: unexisting filter type given*/
- }
- return 0;
-}
-
-static unsigned unfilter(unsigned char* out, const unsigned char* in, unsigned w, unsigned h, unsigned bpp)
-{
- /*
- For PNG filter method 0
- this function unfilters a single image (e.g. without interlacing this is called once, with Adam7 it's called 7 times)
- out must have enough bytes allocated already, in must have the scanlines + 1 filtertype byte per scanline
- w and h are image dimensions or dimensions of reduced image, bpp is bits per pixel
- in and out are allowed to be the same memory address!
- */
-
- unsigned y;
- unsigned char* prevline = 0;
-
- size_t bytewidth = (bpp + 7) / 8; /*bytewidth is used for filtering, is 1 when bpp < 8, number of bytes per pixel otherwise*/
- size_t linebytes = (w * bpp + 7) / 8;
-
- for(y = 0; y < h; y++)
- {
- size_t outindex = linebytes * y;
- size_t inindex = (1 + linebytes) * y; /*the extra filterbyte added to each row*/
- unsigned char filterType = in[inindex];
-
- unsigned error = unfilterScanline(&out[outindex], &in[inindex + 1], prevline, bytewidth, filterType, linebytes);
- if(error) return error;
-
- prevline = &out[outindex];
- }
-
- return 0;
-}
-
-static void Adam7_deinterlace(unsigned char* out, const unsigned char* in, unsigned w, unsigned h, unsigned bpp)
-{
- /*Note: this function works on image buffers WITHOUT padding bits at end of scanlines with non-multiple-of-8 bit amounts, only between reduced images is padding
- out must be big enough AND must be 0 everywhere if bpp < 8 in the current implementation (because that's likely a little bit faster)*/
- unsigned passw[7], passh[7]; size_t filter_passstart[8], padded_passstart[8], passstart[8];
- unsigned i;
-
- Adam7_getpassvalues(passw, passh, filter_passstart, padded_passstart, passstart, w, h, bpp);
-
- if(bpp >= 8)
- {
- for(i = 0; i < 7; i++)
- {
- unsigned x, y, b;
- size_t bytewidth = bpp / 8;
- for(y = 0; y < passh[i]; y++)
- for(x = 0; x < passw[i]; x++)
- {
- size_t pixelinstart = passstart[i] + (y * passw[i] + x) * bytewidth;
- size_t pixeloutstart = ((ADAM7_IY[i] + y * ADAM7_DY[i]) * w + ADAM7_IX[i] + x * ADAM7_DX[i]) * bytewidth;
- for(b = 0; b < bytewidth; b++)
- {
- out[pixeloutstart + b] = in[pixelinstart + b];
- }
- }
- }
- }
- else /*bpp < 8: Adam7 with pixels < 8 bit is a bit trickier: with bit pointers*/
- {
- for(i = 0; i < 7; i++)
- {
- unsigned x, y, b;
- unsigned ilinebits = bpp * passw[i];
- unsigned olinebits = bpp * w;
- size_t obp, ibp; /*bit pointers (for out and in buffer)*/
- for(y = 0; y < passh[i]; y++)
- for(x = 0; x < passw[i]; x++)
- {
- ibp = (8 * passstart[i]) + (y * ilinebits + x * bpp);
- obp = (ADAM7_IY[i] + y * ADAM7_DY[i]) * olinebits + (ADAM7_IX[i] + x * ADAM7_DX[i]) * bpp;
- for(b = 0; b < bpp; b++)
- {
- unsigned char bit = readBitFromReversedStream(&ibp, in);
- setBitOfReversedStream0(&obp, out, bit); /*note that this function assumes the out buffer is completely 0, use setBitOfReversedStream otherwise*/
- }
- }
- }
- }
-}
-
-static void removePaddingBits(unsigned char* out, const unsigned char* in, size_t olinebits, size_t ilinebits, unsigned h)
-{
- /*
- After filtering there are still padding bits if scanlines have non multiple of 8 bit amounts. They need to be removed (except at last scanline of (Adam7-reduced) image) before working with pure image buffers for the Adam7 code, the color convert code and the output to the user.
- in and out are allowed to be the same buffer, in may also be higher but still overlapping; in must have >= ilinebits*h bits, out must have >= olinebits*h bits, olinebits must be <= ilinebits
- also used to move bits after earlier such operations happened, e.g. in a sequence of reduced images from Adam7
- only useful if (ilinebits - olinebits) is a value in the range 1..7
- */
- unsigned y;
- size_t diff = ilinebits - olinebits;
- size_t obp = 0, ibp = 0; /*bit pointers*/
- for(y = 0; y < h; y++)
- {
- size_t x;
- for(x = 0; x < olinebits; x++)
- {
- unsigned char bit = readBitFromReversedStream(&ibp, in);
- setBitOfReversedStream(&obp, out, bit);
- }
- ibp += diff;
- }
-}
-
-/*out must be buffer big enough to contain full image, and in must contain the full decompressed data from the IDAT chunks*/
-static unsigned postProcessScanlines(unsigned char* out, unsigned char* in, const LodePNG_InfoPng* infoPng) /*return value is error*/
-{
- /*
- This function converts the filtered-padded-interlaced data into pure 2D image buffer with the PNG's colortype. Steps:
- *) if no Adam7: 1) unfilter 2) remove padding bits (= posible extra bits per scanline if bpp < 8)
- *) if adam7: 1) 7x unfilter 2) 7x remove padding bits 3) Adam7_deinterlace
- NOTE: the in buffer will be overwritten with intermediate data!
- */
- unsigned bpp = LodePNG_InfoColor_getBpp(&infoPng->color);
- unsigned w = infoPng->width;
- unsigned h = infoPng->height;
- unsigned error = 0;
- if(bpp == 0) return 31; /*error: invalid colortype*/
-
- if(infoPng->interlaceMethod == 0)
- {
- if(bpp < 8 && w * bpp != ((w * bpp + 7) / 8) * 8)
- {
- error = unfilter(in, in, w, h, bpp);
- if(error) return error;
- removePaddingBits(out, in, w * bpp, ((w * bpp + 7) / 8) * 8, h);
- }
- else error = unfilter(out, in, w, h, bpp); /*we can immediatly filter into the out buffer, no other steps needed*/
- }
- else /*interlaceMethod is 1 (Adam7)*/
- {
- unsigned passw[7], passh[7]; size_t filter_passstart[8], padded_passstart[8], passstart[8];
- unsigned i;
-
- Adam7_getpassvalues(passw, passh, filter_passstart, padded_passstart, passstart, w, h, bpp);
-
- for(i = 0; i < 7; i++)
- {
- error = unfilter(&in[padded_passstart[i]], &in[filter_passstart[i]], passw[i], passh[i], bpp);
- if(error) return error;
- if(bpp < 8) /*TODO: possible efficiency improvement: if in this reduced image the bits fit nicely in 1 scanline, move bytes instead of bits or move not at all*/
- {
- /*remove padding bits in scanlines; after this there still may be padding bits between the different reduced images: each reduced image still starts nicely at a byte*/
- removePaddingBits(&in[passstart[i]], &in[padded_passstart[i]], passw[i] * bpp, ((passw[i] * bpp + 7) / 8) * 8, passh[i]);
- }
- }
-
- Adam7_deinterlace(out, in, w, h, bpp);
- }
-
- return error;
-}
-
-/*read a PNG, the result will be in the same color type as the PNG (hence "generic")*/
-static void decodeGeneric(LodePNG_Decoder* decoder, unsigned char** out, size_t* outsize, const unsigned char* in, size_t size)
-{
- unsigned char IEND = 0;
- const unsigned char* chunk;
- size_t i;
- ucvector idat; /*the data from idat chunks*/
-
- /*for unknown chunk order*/
- unsigned unknown = 0;
- unsigned critical_pos = 1; /*1 = after IHDR, 2 = after PLTE, 3 = after IDAT*/
-
- /*provide some proper output values if error will happen*/
- *out = 0;
- *outsize = 0;
-
- if(size == 0 || in == 0) { decoder->error = 48; return; } /*the given data is empty*/
-
- LodePNG_inspect(decoder, in, size); /*reads header and resets other parameters in decoder->infoPng*/
- if(decoder->error) return;
-
- ucvector_init(&idat);
-
- chunk = &in[33]; /*first byte of the first chunk after the header*/
-
- while(!IEND) /*loop through the chunks, ignoring unknown chunks and stopping at IEND chunk. IDAT data is put at the start of the in buffer*/
- {
- unsigned chunkLength;
- const unsigned char* data; /*the data in the chunk*/
-
- if((size_t)((chunk - in) + 12) > size || chunk < in) { decoder->error = 30; break; } /*error: size of the in buffer too small to contain next chunk*/
- chunkLength = LodePNG_chunk_length(chunk); /*length of the data of the chunk, excluding the length bytes, chunk type and CRC bytes*/
- if(chunkLength > 2147483647) { decoder->error = 63; break; }
- if((size_t)((chunk - in) + chunkLength + 12) > size || (chunk + chunkLength + 12) < in) { decoder->error = 35; break; } /*error: size of the in buffer too small to contain next chunk*/
- data = LodePNG_chunk_data_const(chunk);
-
- /*IDAT chunk, containing compressed image data*/
- if(LodePNG_chunk_type_equals(chunk, "IDAT"))
- {
- size_t oldsize = idat.size;
- if(!ucvector_resize(&idat, oldsize + chunkLength)) { decoder->error = 9936; break; }
- for(i = 0; i < chunkLength; i++) idat.data[oldsize + i] = data[i];
- critical_pos = 3;
- }
- /*IEND chunk*/
- else if(LodePNG_chunk_type_equals(chunk, "IEND"))
- {
- IEND = 1;
- }
- /*palette chunk (PLTE)*/
- else if(LodePNG_chunk_type_equals(chunk, "PLTE"))
- {
- unsigned pos = 0;
- if(decoder->infoPng.color.palette) free(decoder->infoPng.color.palette);
- decoder->infoPng.color.palettesize = chunkLength / 3;
- decoder->infoPng.color.palette = (unsigned char*)malloc(4 * decoder->infoPng.color.palettesize);
- if(!decoder->infoPng.color.palette && decoder->infoPng.color.palettesize) { decoder->error = 9937; break; }
- if(!decoder->infoPng.color.palette) decoder->infoPng.color.palettesize = 0; /*malloc failed...*/
- if(decoder->infoPng.color.palettesize > 256) { decoder->error = 38; break; } /*error: palette too big*/
- for(i = 0; i < decoder->infoPng.color.palettesize; i++)
- {
- decoder->infoPng.color.palette[4 * i + 0] = data[pos++]; /*R*/
- decoder->infoPng.color.palette[4 * i + 1] = data[pos++]; /*G*/
- decoder->infoPng.color.palette[4 * i + 2] = data[pos++]; /*B*/
- decoder->infoPng.color.palette[4 * i + 3] = 255; /*alpha*/
- }
- critical_pos = 2;
- }
- /*palette transparency chunk (tRNS)*/
- else if(LodePNG_chunk_type_equals(chunk, "tRNS"))
- {
- if(decoder->infoPng.color.colorType == 3)
- {
- if(chunkLength > decoder->infoPng.color.palettesize) { decoder->error = 39; break; } /*error: more alpha values given than there are palette entries*/
- for(i = 0; i < chunkLength; i++) decoder->infoPng.color.palette[4 * i + 3] = data[i];
- }
- else if(decoder->infoPng.color.colorType == 0)
- {
- if(chunkLength != 2) { decoder->error = 40; break; } /*error: this chunk must be 2 bytes for greyscale image*/
- decoder->infoPng.color.key_defined = 1;
- decoder->infoPng.color.key_r = decoder->infoPng.color.key_g = decoder->infoPng.color.key_b = 256 * data[0] + data[1];
- }
- else if(decoder->infoPng.color.colorType == 2)
- {
- if(chunkLength != 6) { decoder->error = 41; break; } /*error: this chunk must be 6 bytes for RGB image*/
- decoder->infoPng.color.key_defined = 1;
- decoder->infoPng.color.key_r = 256 * data[0] + data[1];
- decoder->infoPng.color.key_g = 256 * data[2] + data[3];
- decoder->infoPng.color.key_b = 256 * data[4] + data[5];
- }
- else { decoder->error = 42; break; } /*error: tRNS chunk not allowed for other color models*/
- }
-#ifdef LODEPNG_COMPILE_ANCILLARY_CHUNKS
- /*background color chunk (bKGD)*/
- else if(LodePNG_chunk_type_equals(chunk, "bKGD"))
- {
- if(decoder->infoPng.color.colorType == 3)
- {
- if(chunkLength != 1) { decoder->error = 43; break; } /*error: this chunk must be 1 byte for indexed color image*/
- decoder->infoPng.background_defined = 1;
- decoder->infoPng.background_r = decoder->infoPng.background_g = decoder->infoPng.background_g = data[0];
- }
- else if(decoder->infoPng.color.colorType == 0 || decoder->infoPng.color.colorType == 4)
- {
- if(chunkLength != 2) { decoder->error = 44; break; } /*error: this chunk must be 2 bytes for greyscale image*/
- decoder->infoPng.background_defined = 1;
- decoder->infoPng.background_r = decoder->infoPng.background_g = decoder->infoPng.background_b = 256 * data[0] + data[1];
- }
- else if(decoder->infoPng.color.colorType == 2 || decoder->infoPng.color.colorType == 6)
- {
- if(chunkLength != 6) { decoder->error = 45; break; } /*error: this chunk must be 6 bytes for greyscale image*/
- decoder->infoPng.background_defined = 1;
- decoder->infoPng.background_r = 256 * data[0] + data[1];
- decoder->infoPng.background_g = 256 * data[2] + data[3];
- decoder->infoPng.background_b = 256 * data[4] + data[5];
- }
- }
- /*text chunk (tEXt)*/
- else if(LodePNG_chunk_type_equals(chunk, "tEXt"))
- {
- if(decoder->settings.readTextChunks)
- {
- char *key = 0, *str = 0;
-
- while(!decoder->error) /*not really a while loop, only used to break on error*/
- {
- unsigned length, string2_begin;
-
- for(length = 0; length < chunkLength && data[length] != 0; length++) ;
- if(length + 1 >= chunkLength) { decoder->error = 75; break; }
- key = (char*)malloc(length + 1);
- if(!key) { decoder->error = 9938; break; }
- key[length] = 0;
- for(i = 0; i < length; i++) key[i] = data[i];
-
- string2_begin = length + 1;
- if(string2_begin > chunkLength) { decoder->error = 75; break; }
- length = chunkLength - string2_begin;
- str = (char*)malloc(length + 1);
- if(!str) { decoder->error = 9939; break; }
- str[length] = 0;
- for(i = 0; i < length; i++) str[i] = data[string2_begin + i];
-
- decoder->error = LodePNG_Text_add(&decoder->infoPng.text, key, str);
-
- break;
- }
-
- free(key);
- free(str);
- }
- }
- /*compressed text chunk (zTXt)*/
- else if(LodePNG_chunk_type_equals(chunk, "zTXt"))
- {
- if(decoder->settings.readTextChunks)
- {
- unsigned length, string2_begin;
- char *key = 0;
- ucvector decoded;
-
- ucvector_init(&decoded);
-
- while(!decoder->error) /*not really a while loop, only used to break on error*/
- {
- for(length = 0; length < chunkLength && data[length] != 0; length++) ;
- if(length + 2 >= chunkLength) { decoder->error = 75; break; }
- key = (char*)malloc(length + 1);
- if(!key) { decoder->error = 9940; break; }
- key[length] = 0;
- for(i = 0; i < length; i++) key[i] = data[i];
-
- if(data[length + 1] != 0) { decoder->error = 72; break; } /*the 0 byte indicating compression must be 0*/
-
- string2_begin = length + 2;
- if(string2_begin > chunkLength) { decoder->error = 75; break; }
- length = chunkLength - string2_begin;
- decoder->error = LodePNG_decompress(&decoded.data, &decoded.size, (unsigned char*)(&data[string2_begin]), length, &decoder->settings.zlibsettings);
- if(decoder->error) break;
- ucvector_push_back(&decoded, 0);
-
- decoder->error = LodePNG_Text_add(&decoder->infoPng.text, key, (char*)decoded.data);
-
- break;
- }
-
- free(key);
- ucvector_cleanup(&decoded);
- if(decoder->error) break;
- }
- }
- /*international text chunk (iTXt)*/
- else if(LodePNG_chunk_type_equals(chunk, "iTXt"))
- {
- if(decoder->settings.readTextChunks)
- {
- unsigned length, begin, compressed;
- char *key = 0, *langtag = 0, *transkey = 0;
- ucvector decoded;
- ucvector_init(&decoded);
-
- while(!decoder->error) /*not really a while loop, only used to break on error*/
- {
- if(chunkLength < 5) { decoder->error = 76; break; }
- for(length = 0; length < chunkLength && data[length] != 0; length++) ;
- if(length + 2 >= chunkLength) { decoder->error = 75; break; }
- key = (char*)malloc(length + 1);
- if(!key) { decoder->error = 9941; break; }
- key[length] = 0;
- for(i = 0; i < length; i++) key[i] = data[i];
-
- compressed = data[length + 1];
- if(data[length + 2] != 0) { decoder->error = 72; break; } /*the 0 byte indicating compression must be 0*/
-
- begin = length + 3;
- length = 0;
- for(i = begin; i < chunkLength && data[i] != 0; i++) length++;
- if(begin + length + 1 >= chunkLength) { decoder->error = 75; break; }
- langtag = (char*)malloc(length + 1);
- if(!langtag) { decoder->error = 9942; break; }
- langtag[length] = 0;
- for(i = 0; i < length; i++) langtag[i] = data[begin + i];
-
- begin += length + 1;
- length = 0;
- for(i = begin; i < chunkLength && data[i] != 0; i++) length++;
- if(begin + length + 1 >= chunkLength) { decoder->error = 75; break; }
- transkey = (char*)malloc(length + 1);
- if(!transkey) { decoder->error = 9943; break; }
- transkey[length] = 0;
- for(i = 0; i < length; i++) transkey[i] = data[begin + i];
-
- begin += length + 1;
- if(begin > chunkLength) { decoder->error = 75; break; }
- length = chunkLength - begin;
-
- if(compressed)
- {
- decoder->error = LodePNG_decompress(&decoded.data, &decoded.size, (unsigned char*)(&data[begin]), length, &decoder->settings.zlibsettings);
- if(decoder->error) break;
- ucvector_push_back(&decoded, 0);
- }
- else
- {
- if(!ucvector_resize(&decoded, length + 1)) { decoder->error = 9944; break; }
- decoded.data[length] = 0;
- for(i = 0; i < length; i++) decoded.data[i] = data[begin + i];
- }
-
- decoder->error = LodePNG_IText_add(&decoder->infoPng.itext, key, langtag, transkey, (char*)decoded.data);
-
- break;
- }
-
- free(key);
- free(langtag);
- free(transkey);
- ucvector_cleanup(&decoded);
- if(decoder->error) break;
- }
- }
- else if(LodePNG_chunk_type_equals(chunk, "tIME"))
- {
- if(chunkLength != 7) { decoder->error = 73; break; }
- decoder->infoPng.time_defined = 1;
- decoder->infoPng.time.year = 256 * data[0] + data[+ 1];
- decoder->infoPng.time.month = data[2];
- decoder->infoPng.time.day = data[3];
- decoder->infoPng.time.hour = data[4];
- decoder->infoPng.time.minute = data[5];
- decoder->infoPng.time.second = data[6];
- }
- else if(LodePNG_chunk_type_equals(chunk, "pHYs"))
- {
- if(chunkLength != 9) { decoder->error = 74; break; }
- decoder->infoPng.phys_defined = 1;
- decoder->infoPng.phys_x = 16777216 * data[0] + 65536 * data[1] + 256 * data[2] + data[3];
- decoder->infoPng.phys_y = 16777216 * data[4] + 65536 * data[5] + 256 * data[6] + data[7];
- decoder->infoPng.phys_unit = data[8];
- }
-#endif /*LODEPNG_COMPILE_ANCILLARY_CHUNKS*/
- else /*it's not an implemented chunk type, so ignore it: skip over the data*/
- {
- if(LodePNG_chunk_critical(chunk)) { decoder->error = 69; break; } /*error: unknown critical chunk (5th bit of first byte of chunk type is 0)*/
- unknown = 1;
-#ifdef LODEPNG_COMPILE_UNKNOWN_CHUNKS
- if(decoder->settings.rememberUnknownChunks)
- {
- LodePNG_UnknownChunks* unknown = &decoder->infoPng.unknown_chunks;
- decoder->error = LodePNG_append_chunk(&unknown->data[critical_pos - 1], &unknown->datasize[critical_pos - 1], chunk);
- if(decoder->error) break;
- }
-#endif /*LODEPNG_COMPILE_UNKNOWN_CHUNKS*/
- }
-
- if(!decoder->settings.ignoreCrc && !unknown) /*check CRC if wanted, only on known chunk types*/
- {
- if(LodePNG_chunk_check_crc(chunk)) { decoder->error = 57; break; }
- }
-
- if(!IEND) chunk = LodePNG_chunk_next_const(chunk);
- }
-
- if(!decoder->error)
- {
- ucvector scanlines;
- ucvector_init(&scanlines);
- if(!ucvector_resize(&scanlines, ((decoder->infoPng.width * (decoder->infoPng.height * LodePNG_InfoColor_getBpp(&decoder->infoPng.color) + 7)) / 8) + decoder->infoPng.height)) decoder->error = 9945; /*maximum final image length is already reserved in the vector's length - this is not really necessary*/
- if(!decoder->error) decoder->error = LodePNG_decompress(&scanlines.data, &scanlines.size, idat.data, idat.size, &decoder->settings.zlibsettings); /*decompress with the Zlib decompressor*/
-
- if(!decoder->error)
- {
- ucvector outv;
- ucvector_init(&outv);
- if(!ucvector_resizev(&outv, (decoder->infoPng.height * decoder->infoPng.width * LodePNG_InfoColor_getBpp(&decoder->infoPng.color) + 7) / 8, 0)) decoder->error = 9946;
- if(!decoder->error) decoder->error = postProcessScanlines(outv.data, scanlines.data, &decoder->infoPng);
- *out = outv.data;
- *outsize = outv.size;
- }
- ucvector_cleanup(&scanlines);
- }
-
- ucvector_cleanup(&idat);
-}
-
-void LodePNG_decode(LodePNG_Decoder* decoder, unsigned char** out, size_t* outsize, const unsigned char* in, size_t insize)
-{
- *out = 0;
- *outsize = 0;
- decodeGeneric(decoder, out, outsize, in, insize);
- if(decoder->error) return;
- if(!decoder->settings.color_convert || LodePNG_InfoColor_equal(&decoder->infoRaw.color, &decoder->infoPng.color))
- {
- /*same color type, no copying or converting of data needed*/
- /*store the infoPng color settings on the infoRaw so that the infoRaw still reflects what colorType
- the raw image has to the end user*/
- if(!decoder->settings.color_convert)
- {
- decoder->error = LodePNG_InfoColor_copy(&decoder->infoRaw.color, &decoder->infoPng.color);
- if(decoder->error) return;
- }
- }
- else
- {
- /*color conversion needed; sort of copy of the data*/
- unsigned char* data = *out;
-
- /*TODO: check if this works according to the statement in the documentation: "The converter can convert from greyscale input color type, to 8-bit greyscale or greyscale with alpha"*/
- if(!(decoder->infoRaw.color.colorType == 2 || decoder->infoRaw.color.colorType == 6) && !(decoder->infoRaw.color.bitDepth == 8)) { decoder->error = 56; return; }
-
- *outsize = (decoder->infoPng.width * decoder->infoPng.height * LodePNG_InfoColor_getBpp(&decoder->infoRaw.color) + 7) / 8;
- *out = (unsigned char*)malloc(*outsize);
- if(!(*out))
- {
- decoder->error = 9947;
- *outsize = 0;
- }
- else decoder->error = LodePNG_convert(*out, data, &decoder->infoRaw.color, &decoder->infoPng.color, decoder->infoPng.width, decoder->infoPng.height);
- free(data);
- }
-}
-
-unsigned LodePNG_decode32(unsigned char** out, unsigned* w, unsigned* h, const unsigned char* in, size_t insize)
-{
- unsigned error;
- size_t dummy_size;
- LodePNG_Decoder decoder;
- LodePNG_Decoder_init(&decoder);
- LodePNG_decode(&decoder, out, &dummy_size, in, insize);
- error = decoder.error;
- *w = decoder.infoPng.width;
- *h = decoder.infoPng.height;
- LodePNG_Decoder_cleanup(&decoder);
- return error;
-}
-
-#ifdef LODEPNG_COMPILE_DISK
-unsigned LodePNG_decode32f(unsigned char** out, unsigned* w, unsigned* h, const char* filename)
-{
- unsigned char* buffer;
- size_t buffersize;
- unsigned error;
- error = LodePNG_loadFile(&buffer, &buffersize, filename);
- if(!error) error = LodePNG_decode32(out, w, h, buffer, buffersize);
- free(buffer);
- return error;
-}
-#endif /*LODEPNG_COMPILE_DISK*/
-
-void LodePNG_DecodeSettings_init(LodePNG_DecodeSettings* settings)
-{
- settings->color_convert = 1;
-#ifdef LODEPNG_COMPILE_ANCILLARY_CHUNKS
- settings->readTextChunks = 1;
-#endif /*LODEPNG_COMPILE_ANCILLARY_CHUNKS*/
- settings->ignoreCrc = 0;
-#ifdef LODEPNG_COMPILE_UNKNOWN_CHUNKS
- settings->rememberUnknownChunks = 0;
-#endif /*LODEPNG_COMPILE_UNKNOWN_CHUNKS*/
- LodeZlib_DecompressSettings_init(&settings->zlibsettings);
-}
-
-void LodePNG_Decoder_init(LodePNG_Decoder* decoder)
-{
- LodePNG_DecodeSettings_init(&decoder->settings);
- LodePNG_InfoRaw_init(&decoder->infoRaw);
- LodePNG_InfoPng_init(&decoder->infoPng);
- decoder->error = 1;
-}
-
-void LodePNG_Decoder_cleanup(LodePNG_Decoder* decoder)
-{
- LodePNG_InfoRaw_cleanup(&decoder->infoRaw);
- LodePNG_InfoPng_cleanup(&decoder->infoPng);
-}
-
-void LodePNG_Decoder_copy(LodePNG_Decoder* dest, const LodePNG_Decoder* source)
-{
- LodePNG_Decoder_cleanup(dest);
- *dest = *source;
- LodePNG_InfoRaw_init(&dest->infoRaw);
- LodePNG_InfoPng_init(&dest->infoPng);
- dest->error = LodePNG_InfoRaw_copy(&dest->infoRaw, &source->infoRaw); if(dest->error) return;
- dest->error = LodePNG_InfoPng_copy(&dest->infoPng, &source->infoPng); if(dest->error) return;
-}
-
-#endif /*LODEPNG_COMPILE_DECODER*/
-
-#ifdef LODEPNG_COMPILE_ENCODER
-
-/* ////////////////////////////////////////////////////////////////////////// */
-/* / PNG Encoder / */
-/* ////////////////////////////////////////////////////////////////////////// */
-
-/*chunkName must be string of 4 characters*/
-static unsigned addChunk(ucvector* out, const char* chunkName, const unsigned char* data, size_t length)
-{
- unsigned error = LodePNG_create_chunk(&out->data, &out->size, (unsigned)length, chunkName, data);
- if(error) return error;
- out->allocsize = out->size; /*fix the allocsize again*/
- return 0;
-}
-
-static void writeSignature(ucvector* out)
-{
- /*8 bytes PNG signature*/
- ucvector_push_back(out, 137);
- ucvector_push_back(out, 80);
- ucvector_push_back(out, 78);
- ucvector_push_back(out, 71);
- ucvector_push_back(out, 13);
- ucvector_push_back(out, 10);
- ucvector_push_back(out, 26);
- ucvector_push_back(out, 10);
-}
-
-static unsigned addChunk_IHDR(ucvector* out, unsigned w, unsigned h, unsigned bitDepth, unsigned colorType, unsigned interlaceMethod)
-{
- unsigned error = 0;
- ucvector header;
- ucvector_init(&header);
-
- LodePNG_add32bitInt(&header, w); /*width*/
- LodePNG_add32bitInt(&header, h); /*height*/
- ucvector_push_back(&header, (unsigned char)bitDepth); /*bit depth*/
- ucvector_push_back(&header, (unsigned char)colorType); /*color type*/
- ucvector_push_back(&header, 0); /*compression method*/
- ucvector_push_back(&header, 0); /*filter method*/
- ucvector_push_back(&header, interlaceMethod); /*interlace method*/
-
- error = addChunk(out, "IHDR", header.data, header.size);
- ucvector_cleanup(&header);
-
- return error;
-}
-
-static unsigned addChunk_PLTE(ucvector* out, const LodePNG_InfoColor* info)
-{
- unsigned error = 0;
- size_t i;
- ucvector PLTE;
- ucvector_init(&PLTE);
- for(i = 0; i < info->palettesize * 4; i++) if(i % 4 != 3) ucvector_push_back(&PLTE, info->palette[i]); /*add all channels except alpha channel*/
- error = addChunk(out, "PLTE", PLTE.data, PLTE.size);
- ucvector_cleanup(&PLTE);
-
- return error;
-}
-
-static unsigned addChunk_tRNS(ucvector* out, const LodePNG_InfoColor* info)
-{
- unsigned error = 0;
- size_t i;
- ucvector tRNS;
- ucvector_init(&tRNS);
- if(info->colorType == 3)
- {
- for(i = 0; i < info->palettesize; i++) ucvector_push_back(&tRNS, info->palette[4 * i + 3]); /*add only alpha channel*/
- }
- else if(info->colorType == 0)
- {
- if(info->key_defined)
- {
- ucvector_push_back(&tRNS, (unsigned char)(info->key_r / 256));
- ucvector_push_back(&tRNS, (unsigned char)(info->key_r % 256));
- }
- }
- else if(info->colorType == 2)
- {
- if(info->key_defined)
- {
- ucvector_push_back(&tRNS, (unsigned char)(info->key_r / 256));
- ucvector_push_back(&tRNS, (unsigned char)(info->key_r % 256));
- ucvector_push_back(&tRNS, (unsigned char)(info->key_g / 256));
- ucvector_push_back(&tRNS, (unsigned char)(info->key_g % 256));
- ucvector_push_back(&tRNS, (unsigned char)(info->key_b / 256));
- ucvector_push_back(&tRNS, (unsigned char)(info->key_b % 256));
- }
- }
-
- error = addChunk(out, "tRNS", tRNS.data, tRNS.size);
- ucvector_cleanup(&tRNS);
-
- return error;
-}
-
-static unsigned addChunk_IDAT(ucvector* out, const unsigned char* data, size_t datasize, LodeZlib_DeflateSettings* zlibsettings)
-{
- ucvector zlibdata;
- unsigned error = 0;
-
- /*compress with the Zlib compressor*/
- ucvector_init(&zlibdata);
- error = LodePNG_compress(&zlibdata.data, &zlibdata.size, data, datasize, zlibsettings);
- if(!error) error = addChunk(out, "IDAT", zlibdata.data, zlibdata.size);
- ucvector_cleanup(&zlibdata);
-
- return error;
-}
-
-static unsigned addChunk_IEND(ucvector* out)
-{
- unsigned error = 0;
- error = addChunk(out, "IEND", 0, 0);
- return error;
-}
-
-#ifdef LODEPNG_COMPILE_ANCILLARY_CHUNKS
-
-static unsigned addChunk_tEXt(ucvector* out, const char* keyword, const char* textstring) /*add text chunk*/
-{
- unsigned error = 0;
- size_t i;
- ucvector text;
- ucvector_init(&text);
- for(i = 0; keyword[i] != 0; i++) ucvector_push_back(&text, (unsigned char)keyword[i]);
- ucvector_push_back(&text, 0);
- for(i = 0; textstring[i] != 0; i++) ucvector_push_back(&text, (unsigned char)textstring[i]);
- error = addChunk(out, "tEXt", text.data, text.size);
- ucvector_cleanup(&text);
-
- return error;
-}
-
-static unsigned addChunk_zTXt(ucvector* out, const char* keyword, const char* textstring, LodeZlib_DeflateSettings* zlibsettings)
-{
- unsigned error = 0;
- ucvector data, compressed;
- size_t i, textsize = strlen(textstring);
-
- ucvector_init(&data);
- ucvector_init(&compressed);
- for(i = 0; keyword[i] != 0; i++) ucvector_push_back(&data, (unsigned char)keyword[i]);
- ucvector_push_back(&data, 0); /* 0 termination char*/
- ucvector_push_back(&data, 0); /*compression method: 0*/
-
- error = LodePNG_compress(&compressed.data, &compressed.size, (unsigned char*)textstring, textsize, zlibsettings);
- if(!error)
- {
- for(i = 0; i < compressed.size; i++) ucvector_push_back(&data, compressed.data[i]);
- error = addChunk(out, "zTXt", data.data, data.size);
- }
-
- ucvector_cleanup(&compressed);
- ucvector_cleanup(&data);
- return error;
-}
-
-static unsigned addChunk_iTXt(ucvector* out, unsigned compressed, const char* keyword, const char* langtag, const char* transkey, const char* textstring, LodeZlib_DeflateSettings* zlibsettings)
-{
- unsigned error = 0;
- ucvector data, compressed_data;
- size_t i, textsize = strlen(textstring);
-
- ucvector_init(&data);
-
- for(i = 0; keyword[i] != 0; i++) ucvector_push_back(&data, (unsigned char)keyword[i]);
- ucvector_push_back(&data, 0); /*null termination char*/
- ucvector_push_back(&data, compressed ? 1 : 0); /*compression flag*/
- ucvector_push_back(&data, 0); /*compression method*/
- for(i = 0; langtag[i] != 0; i++) ucvector_push_back(&data, (unsigned char)langtag[i]);
- ucvector_push_back(&data, 0); /*null termination char*/
- for(i = 0; transkey[i] != 0; i++) ucvector_push_back(&data, (unsigned char)transkey[i]);
- ucvector_push_back(&data, 0); /*null termination char*/
-
- if(compressed)
- {
- ucvector_init(&compressed_data);
- error = LodePNG_compress(&compressed_data.data, &compressed_data.size, (unsigned char*)textstring, textsize, zlibsettings);
- if(!error)
- {
- for(i = 0; i < compressed_data.size; i++) ucvector_push_back(&data, compressed_data.data[i]);
- for(i = 0; textstring[i] != 0; i++) ucvector_push_back(&data, (unsigned char)textstring[i]);
- }
- }
- else /*not compressed*/
- {
- for(i = 0; textstring[i] != 0; i++) ucvector_push_back(&data, (unsigned char)textstring[i]);
- }
-
- if(!error) error = addChunk(out, "iTXt", data.data, data.size);
- ucvector_cleanup(&data);
- return error;
-}
-
-static unsigned addChunk_bKGD(ucvector* out, const LodePNG_InfoPng* info)
-{
- unsigned error = 0;
- ucvector bKGD;
- ucvector_init(&bKGD);
- if(info->color.colorType == 0 || info->color.colorType == 4)
- {
- ucvector_push_back(&bKGD, (unsigned char)(info->background_r / 256));
- ucvector_push_back(&bKGD, (unsigned char)(info->background_r % 256));
- }
- else if(info->color.colorType == 2 || info->color.colorType == 6)
- {
- ucvector_push_back(&bKGD, (unsigned char)(info->background_r / 256));
- ucvector_push_back(&bKGD, (unsigned char)(info->background_r % 256));
- ucvector_push_back(&bKGD, (unsigned char)(info->background_g / 256));
- ucvector_push_back(&bKGD, (unsigned char)(info->background_g % 256));
- ucvector_push_back(&bKGD, (unsigned char)(info->background_b / 256));
- ucvector_push_back(&bKGD, (unsigned char)(info->background_b % 256));
- }
- else if(info->color.colorType == 3)
- {
- ucvector_push_back(&bKGD, (unsigned char)(info->background_r % 256)); /*palette index*/
- }
-
- error = addChunk(out, "bKGD", bKGD.data, bKGD.size);
- ucvector_cleanup(&bKGD);
-
- return error;
-}
-
-static unsigned addChunk_tIME(ucvector* out, const LodePNG_Time* time)
-{
- unsigned error = 0;
- unsigned char* data = (unsigned char*)malloc(7);
- if(!data) return 9948;
- data[0] = (unsigned char)(time->year / 256);
- data[1] = (unsigned char)(time->year % 256);
- data[2] = time->month;
- data[3] = time->day;
- data[4] = time->hour;
- data[5] = time->minute;
- data[6] = time->second;
- error = addChunk(out, "tIME", data, 7);
- free(data);
- return error;
-}
-
-static unsigned addChunk_pHYs(ucvector* out, const LodePNG_InfoPng* info)
-{
- unsigned error = 0;
- ucvector data;
- ucvector_init(&data);
-
- LodePNG_add32bitInt(&data, info->phys_x);
- LodePNG_add32bitInt(&data, info->phys_y);
- ucvector_push_back(&data, info->phys_unit);
-
- error = addChunk(out, "pHYs", data.data, data.size);
- ucvector_cleanup(&data);
-
- return error;
-}
-
-#endif /*LODEPNG_COMPILE_ANCILLARY_CHUNKS*/
-
-static void filterScanline(unsigned char* out, const unsigned char* scanline, const unsigned char* prevline, size_t length, size_t bytewidth, unsigned char filterType)
-{
- size_t i;
- switch(filterType)
- {
- case 0:
- if(prevline) for(i = 0; i < length; i++) out[i] = scanline[i];
- else for(i = 0; i < length; i++) out[i] = scanline[i];
- break;
- case 1:
- if(prevline)
- {
- for(i = 0; i < bytewidth; i++) out[i] = scanline[i];
- for(i = bytewidth; i < length ; i++) out[i] = scanline[i] - scanline[i - bytewidth];
- }
- else
- {
- for(i = 0; i < bytewidth; i++) out[i] = scanline[i];
- for(i = bytewidth; i < length; i++) out[i] = scanline[i] - scanline[i - bytewidth];
- }
- break;
- case 2:
- if(prevline) for(i = 0; i < length; i++) out[i] = scanline[i] - prevline[i];
- else for(i = 0; i < length; i++) out[i] = scanline[i];
- break;
- case 3:
- if(prevline)
- {
- for(i = 0; i < bytewidth; i++) out[i] = scanline[i] - prevline[i] / 2;
- for(i = bytewidth; i < length; i++) out[i] = scanline[i] - ((scanline[i - bytewidth] + prevline[i]) / 2);
- }
- else
- {
- for(i = 0; i < length; i++) out[i] = scanline[i];
- for(i = bytewidth; i < length; i++) out[i] = scanline[i] - scanline[i - bytewidth] / 2;
- }
- break;
- case 4:
- if(prevline)
- {
- for(i = 0; i < bytewidth; i++) out[i] = (unsigned char)(scanline[i] - paethPredictor(0, prevline[i], 0));
- for(i = bytewidth; i < length; i++) out[i] = (unsigned char)(scanline[i] - paethPredictor(scanline[i - bytewidth], prevline[i], prevline[i - bytewidth]));
- }
- else
- {
- for(i = 0; i < bytewidth; i++) out[i] = scanline[i];
- for(i = bytewidth; i < length; i++) out[i] = (unsigned char)(scanline[i] - paethPredictor(scanline[i - bytewidth], 0, 0));
- }
- break;
- default: return; /*unexisting filter type given*/
- }
-}
-
-static unsigned filter(unsigned char* out, const unsigned char* in, unsigned w, unsigned h, const LodePNG_InfoColor* info)
-{
- /*
- For PNG filter method 0
- out must be a buffer with as size: h + (w * h * bpp + 7) / 8, because there are the scanlines with 1 extra byte per scanline
-
- There is a nice heuristic described here: http://www.cs.toronto.edu/~cosmin/pngtech/optipng.html. It says:
- * If the image type is Palette, or the bit depth is smaller than 8, then do not filter the image (i.e. use fixed filtering, with the filter None).
- * (The other case) If the image type is Grayscale or RGB (with or without Alpha), and the bit depth is not smaller than 8, then use adaptive filtering heuristic as follows: independently for each row, apply all five filters and select the filter that produces the smallest sum of absolute values per row.
-
- Here the above method is used mostly. Note though that it appears to be better to use the adaptive filtering on the plasma 8-bit palette example, but that image isn't the best reference for palette images in general.
- */
-
- unsigned bpp = LodePNG_InfoColor_getBpp(info);
- size_t linebytes = (w * bpp + 7) / 8; /*the width of a scanline in bytes, not including the filter type*/
- size_t bytewidth = (bpp + 7) / 8; /*bytewidth is used for filtering, is 1 when bpp < 8, number of bytes per pixel otherwise*/
- const unsigned char* prevline = 0;
- unsigned x, y;
- unsigned heuristic;
- unsigned error = 0;
-
- if(bpp == 0) return 31; /*invalid color type*/
-
- /*choose heuristic as described above*/
- if(info->colorType == 3 || info->bitDepth < 8) heuristic = 0;
- else heuristic = 1;
-
- if(heuristic == 0) /*None filtertype for everything*/
- {
- for(y = 0; y < h; y++)
- {
- size_t outindex = (1 + linebytes) * y; /*the extra filterbyte added to each row*/
- size_t inindex = linebytes * y;
- const unsigned TYPE = 0;
- out[outindex] = TYPE; /*filter type byte*/
- filterScanline(&out[outindex + 1], &in[inindex], prevline, linebytes, bytewidth, TYPE);
- prevline = &in[inindex];
- }
- }
- else if(heuristic == 1) /*adaptive filtering*/
- {
- size_t sum[5];
- ucvector attempt[5]; /*five filtering attempts, one for each filter type*/
- size_t smallest = 0;
- unsigned type, bestType = 0;
-
- for(type = 0; type < 5; type++) ucvector_init(&attempt[type]);
- for(type = 0; type < 5; type++)
- {
- if(!ucvector_resize(&attempt[type], linebytes)) { error = 9949; break; }
- }
-
- if(!error)
- {
- for(y = 0; y < h; y++)
- {
- /*try the 5 filter types*/
- for(type = 0; type < 5; type++)
- {
- filterScanline(attempt[type].data, &in[y * linebytes], prevline, linebytes, bytewidth, type);
-
- /*calculate the sum of the result*/
- sum[type] = 0;
- for(x = 0; x < attempt[type].size; x+=3) sum[type] += attempt[type].data[x]; /*note that not all pixels are checked to speed this up while still having probably the best choice*/
-
- /*check if this is smallest sum (or if type == 0 it's the first case so always store the values)*/
- if(type == 0 || sum[type] < smallest)
- {
- bestType = type;
- smallest = sum[type];
- }
- }
-
- prevline = &in[y * linebytes];
-
- /*now fill the out values*/
- out[y * (linebytes + 1)] = bestType; /*the first byte of a scanline will be the filter type*/
- for(x = 0; x < linebytes; x++) out[y * (linebytes + 1) + 1 + x] = attempt[bestType].data[x];
- }
- }
-
- for(type = 0; type < 5; type++) ucvector_cleanup(&attempt[type]);
- }
- #if 0 /*deflate the scanline with a fixed tree after every filter attempt to see which one deflates best. This is slow, and _does not work as expected_: the heuristic gives smaller result!*/
- else if(heuristic == 2) /*adaptive filtering by using deflate*/
- {
- size_t size[5];
- ucvector attempt[5]; /*five filtering attempts, one for each filter type*/
- size_t smallest;
- unsigned type = 0, bestType = 0;
- unsigned char* dummy;
- LodeZlib_DeflateSettings deflatesettings = LodeZlib_defaultDeflateSettings;
- deflatesettings.btype = 1; /*use fixed tree on the attempts so that the tree is not adapted to the filtertype on purpose, to simulate the true case where the tree is the same for the whole image*/
- for(type = 0; type < 5; type++) { ucvector_init(&attempt[type]); ucvector_resize(&attempt[type], linebytes); }
- for(y = 0; y < h; y++) /*try the 5 filter types*/
- {
- for(type = 0; type < 5; type++)
- {
- filterScanline(attempt[type].data, &in[y * linebytes], prevline, linebytes, bytewidth, type);
- size[type] = 0; dummy = 0;
- LodePNG_compress(&dummy, &size[type], attempt[type].data, attempt[type].size, &deflatesettings);
- free(dummy);
- /*check if this is smallest size (or if type == 0 it's the first case so always store the values)*/
- if(type == 0 || size[type] < smallest) { bestType = type; smallest = size[type]; }
- }
- prevline = &in[y * linebytes];
- out[y * (linebytes + 1)] = bestType; /*the first byte of a scanline will be the filter type*/
- for(x = 0; x < linebytes; x++) out[y * (linebytes + 1) + 1 + x] = attempt[bestType].data[x];
- }
- for(type = 0; type < 5; type++) ucvector_cleanup(&attempt[type]);
- }
- #endif
-
- return error;
-}
-
-static void addPaddingBits(unsigned char* out, const unsigned char* in, size_t olinebits, size_t ilinebits, unsigned h)
-{
- /*The opposite of the removePaddingBits function
- olinebits must be >= ilinebits*/
- unsigned y;
- size_t diff = olinebits - ilinebits;
- size_t obp = 0, ibp = 0; /*bit pointers*/
- for(y = 0; y < h; y++)
- {
- size_t x;
- for(x = 0; x < ilinebits; x++)
- {
- unsigned char bit = readBitFromReversedStream(&ibp, in);
- setBitOfReversedStream(&obp, out, bit);
- }
- /*obp += diff; --> no, fill in some value in the padding bits too, to avoid "Use of uninitialised value of size ###" warning from valgrind*/
- for(x = 0; x < diff; x++) setBitOfReversedStream(&obp, out, 0);
- }
-}
-
-static void Adam7_interlace(unsigned char* out, const unsigned char* in, unsigned w, unsigned h, unsigned bpp)
-{
- /*Note: this function works on image buffers WITHOUT padding bits at end of scanlines with non-multiple-of-8 bit amounts, only between reduced images is padding*/
- unsigned passw[7], passh[7]; size_t filter_passstart[8], padded_passstart[8], passstart[8];
- unsigned i;
-
- Adam7_getpassvalues(passw, passh, filter_passstart, padded_passstart, passstart, w, h, bpp);
-
- if(bpp >= 8)
- {
- for(i = 0; i < 7; i++)
- {
- unsigned x, y, b;
- size_t bytewidth = bpp / 8;
- for(y = 0; y < passh[i]; y++)
- for(x = 0; x < passw[i]; x++)
- {
- size_t pixelinstart = ((ADAM7_IY[i] + y * ADAM7_DY[i]) * w + ADAM7_IX[i] + x * ADAM7_DX[i]) * bytewidth;
- size_t pixeloutstart = passstart[i] + (y * passw[i] + x) * bytewidth;
- for(b = 0; b < bytewidth; b++)
- {
- out[pixeloutstart + b] = in[pixelinstart + b];
- }
- }
- }
- }
- else /*bpp < 8: Adam7 with pixels < 8 bit is a bit trickier: with bit pointers*/
- {
- for(i = 0; i < 7; i++)
- {
- unsigned x, y, b;
- unsigned ilinebits = bpp * passw[i];
- unsigned olinebits = bpp * w;
- size_t obp, ibp; /*bit pointers (for out and in buffer)*/
- for(y = 0; y < passh[i]; y++)
- for(x = 0; x < passw[i]; x++)
- {
- ibp = (ADAM7_IY[i] + y * ADAM7_DY[i]) * olinebits + (ADAM7_IX[i] + x * ADAM7_DX[i]) * bpp;
- obp = (8 * passstart[i]) + (y * ilinebits + x * bpp);
- for(b = 0; b < bpp; b++)
- {
- unsigned char bit = readBitFromReversedStream(&ibp, in);
- setBitOfReversedStream(&obp, out, bit);
- }
- }
- }
- }
-}
-
-/*out must be buffer big enough to contain uncompressed IDAT chunk data, and in must contain the full image*/
-static unsigned preProcessScanlines(unsigned char** out, size_t* outsize, const unsigned char* in, const LodePNG_InfoPng* infoPng) /*return value is error*/
-{
- /*
- This function converts the pure 2D image with the PNG's colortype, into filtered-padded-interlaced data. Steps:
- *) if no Adam7: 1) add padding bits (= posible extra bits per scanline if bpp < 8) 2) filter
- *) if adam7: 1) Adam7_interlace 2) 7x add padding bits 3) 7x filter
- */
- unsigned bpp = LodePNG_InfoColor_getBpp(&infoPng->color);
- unsigned w = infoPng->width;
- unsigned h = infoPng->height;
- unsigned error = 0;
-
- if(infoPng->interlaceMethod == 0)
- {
- *outsize = h + (h * ((w * bpp + 7) / 8)); /*image size plus an extra byte per scanline + possible padding bits*/
- *out = (unsigned char*)malloc(*outsize);
- if(!(*out) && (*outsize)) error = 9950;
-
- if(!error)
- {
- if(bpp < 8 && w * bpp != ((w * bpp + 7) / 8) * 8) /*non multiple of 8 bits per scanline, padding bits needed per scanline*/
- {
- ucvector padded;
- ucvector_init(&padded);
- if(!ucvector_resize(&padded, h * ((w * bpp + 7) / 8))) error = 9951;
- if(!error)
- {
- addPaddingBits(padded.data, in, ((w * bpp + 7) / 8) * 8, w * bpp, h);
- error = filter(*out, padded.data, w, h, &infoPng->color);
- }
- ucvector_cleanup(&padded);
- }
- else error = filter(*out, in, w, h, &infoPng->color); /*we can immediatly filter into the out buffer, no other steps needed*/
- }
- }
- else /*interlaceMethod is 1 (Adam7)*/
- {
- unsigned char* adam7 = (unsigned char*)malloc((h * w * bpp + 7) / 8);
- if(!adam7 && ((h * w * bpp + 7) / 8)) error = 9952; /*malloc failed*/
-
- while(!error) /*not a real while loop, used to break out to cleanup to avoid a goto*/
- {
- unsigned passw[7], passh[7]; size_t filter_passstart[8], padded_passstart[8], passstart[8];
- unsigned i;
-
- Adam7_getpassvalues(passw, passh, filter_passstart, padded_passstart, passstart, w, h, bpp);
-
- *outsize = filter_passstart[7]; /*image size plus an extra byte per scanline + possible padding bits*/
- *out = (unsigned char*)malloc(*outsize);
- if(!(*out) && (*outsize)) { error = 9953; break; }
-
- Adam7_interlace(adam7, in, w, h, bpp);
-
- for(i = 0; i < 7; i++)
- {
- if(bpp < 8)
- {
- ucvector padded;
- ucvector_init(&padded);
- if(!ucvector_resize(&padded, h * ((w * bpp + 7) / 8))) error = 9954;
- if(!error)
- {
- addPaddingBits(&padded.data[padded_passstart[i]], &adam7[passstart[i]], ((passw[i] * bpp + 7) / 8) * 8, passw[i] * bpp, passh[i]);
- error = filter(&(*out)[filter_passstart[i]], &padded.data[padded_passstart[i]], passw[i], passh[i], &infoPng->color);
- }
-
- ucvector_cleanup(&padded);
- }
- else
- {
- error = filter(&(*out)[filter_passstart[i]], &adam7[padded_passstart[i]], passw[i], passh[i], &infoPng->color);
- }
- }
-
- break;
- }
-
- free(adam7);
- }
-
- return error;
-}
-
-/*palette must have 4 * palettesize bytes allocated*/
-static unsigned isPaletteFullyOpaque(const unsigned char* palette, size_t palettesize) /*palette given in format RGBARGBARGBARGBA...*/
-{
- size_t i;
- for(i = 0; i < palettesize; i++)
- {
- if(palette[4 * i + 3] != 255) return 0;
- }
- return 1;
-}
-
-/*this function checks if the input image given by the user has no transparent pixels*/
-static unsigned isFullyOpaque(const unsigned char* image, unsigned w, unsigned h, const LodePNG_InfoColor* info)
-{
- /*TODO: When the user specified a color key for the input image, then this function must also check for pixels that are the same as the color key and treat those as transparent.*/
-
- unsigned i, numpixels = w * h;
- if(info->colorType == 6)
- {
- if(info->bitDepth == 8)
- {
- for(i = 0; i < numpixels; i++) if(image[i * 4 + 3] != 255) return 0;
- }
- else
- {
- for(i = 0; i < numpixels; i++) if(image[i * 8 + 6] != 255 || image[i * 8 + 7] != 255) return 0;
- }
- return 1; /*no single pixel with alpha channel other than 255 found*/
- }
- else if(info->colorType == 4)
- {
- if(info->bitDepth == 8)
- {
- for(i = 0; i < numpixels; i++) if(image[i * 2 + 1] != 255) return 0;
- }
- else
- {
- for(i = 0; i < numpixels; i++) if(image[i * 4 + 2] != 255 || image[i * 4 + 3] != 255) return 0;
- }
- return 1; /*no single pixel with alpha channel other than 255 found*/
- }
- else if(info->colorType == 3)
- {
- /*when there's a palette, we could check every pixel for translucency, but much quicker is to just check the palette*/
- return(isPaletteFullyOpaque(info->palette, info->palettesize));
- }
-
- return 0; /*color type that isn't supported by this function yet, so assume there is transparency to be safe*/
-}
-
-#ifdef LODEPNG_COMPILE_UNKNOWN_CHUNKS
-static unsigned addUnknownChunks(ucvector* out, unsigned char* data, size_t datasize)
-{
- unsigned char* inchunk = data;
- while((size_t)(inchunk - data) < datasize)
- {
- unsigned error = LodePNG_append_chunk(&out->data, &out->size, inchunk);
- if(error) return error; /*error: not enough memory*/
- out->allocsize = out->size; /*fix the allocsize again*/
- inchunk = LodePNG_chunk_next(inchunk);
- }
- return 0;
-}
-#endif /*LODEPNG_COMPILE_UNKNOWN_CHUNKS*/
-
-void LodePNG_encode(LodePNG_Encoder* encoder, unsigned char** out, size_t* outsize, const unsigned char* image, unsigned w, unsigned h)
-{
- LodePNG_InfoPng info;
- ucvector outv;
- unsigned char* data = 0; /*uncompressed version of the IDAT chunk data*/
- size_t datasize = 0;
-
- /*provide some proper output values if error will happen*/
- *out = 0;
- *outsize = 0;
- encoder->error = 0;
-
- info = encoder->infoPng; /*UNSAFE copy to avoid having to cleanup! but we will only change primitive parameters, and not invoke the cleanup function nor touch the palette's buffer so we use it safely*/
- info.width = w;
- info.height = h;
-
- if(encoder->settings.autoLeaveOutAlphaChannel && isFullyOpaque(image, w, h, &encoder->infoRaw.color))
- {
- /*go to a color type without alpha channel*/
- if(info.color.colorType == 6) info.color.colorType = 2;
- else if(info.color.colorType == 4) info.color.colorType = 0;
- }
-
- if(encoder->settings.zlibsettings.windowSize > 32768) { encoder->error = 60; return; } /*error: windowsize larger than allowed*/
- if(encoder->settings.zlibsettings.btype > 2) { encoder->error = 61; return; } /*error: unexisting btype*/
- if(encoder->infoPng.interlaceMethod > 1) { encoder->error = 71; return; } /*error: unexisting interlace mode*/
- if((encoder->error = checkColorValidity(info.color.colorType, info.color.bitDepth))) return; /*error: unexisting color type given*/
- if((encoder->error = checkColorValidity(encoder->infoRaw.color.colorType, encoder->infoRaw.color.bitDepth))) return; /*error: unexisting color type given*/
-
- if(!LodePNG_InfoColor_equal(&encoder->infoRaw.color, &info.color))
- {
- unsigned char* converted;
- size_t size = (w * h * LodePNG_InfoColor_getBpp(&info.color) + 7) / 8;
-
- if((info.color.colorType != 6 && info.color.colorType != 2) || (info.color.bitDepth != 8)) { encoder->error = 59; return; } /*for the output image, only these types are supported*/
- converted = (unsigned char*)malloc(size);
- if(!converted && size) encoder->error = 9955; /*error: malloc failed*/
- if(!encoder->error) encoder->error = LodePNG_convert(converted, image, &info.color, &encoder->infoRaw.color, w, h);
- if(!encoder->error) preProcessScanlines(&data, &datasize, converted, &info);/*filter(data.data, converted.data, w, h, LodePNG_InfoColor_getBpp(&info.color));*/
- free(converted);
- }
- else preProcessScanlines(&data, &datasize, image, &info);/*filter(data.data, image, w, h, LodePNG_InfoColor_getBpp(&info.color));*/
-
- ucvector_init(&outv);
- while(!encoder->error) /*not really a while loop, this is only used to break out if an error happens to avoid goto's to do the ucvector cleanup*/
- {
-#ifdef LODEPNG_COMPILE_ANCILLARY_CHUNKS
- size_t i;
-#endif /*LODEPNG_COMPILE_ANCILLARY_CHUNKS*/
- /*write signature and chunks*/
- writeSignature(&outv);
- /*IHDR*/
- addChunk_IHDR(&outv, w, h, info.color.bitDepth, info.color.colorType, info.interlaceMethod);
-#ifdef LODEPNG_COMPILE_UNKNOWN_CHUNKS
- /*unknown chunks between IHDR and PLTE*/
- if(info.unknown_chunks.data[0]) { encoder->error = addUnknownChunks(&outv, info.unknown_chunks.data[0], info.unknown_chunks.datasize[0]); if(encoder->error) break; }
-#endif /*LODEPNG_COMPILE_UNKNOWN_CHUNKS*/
- /*PLTE*/
- if(info.color.colorType == 3)
- {
- if(info.color.palettesize == 0 || info.color.palettesize > 256) { encoder->error = 68; break; }
- addChunk_PLTE(&outv, &info.color);
- }
- if(encoder->settings.force_palette && (info.color.colorType == 2 || info.color.colorType == 6))
- {
- if(info.color.palettesize == 0 || info.color.palettesize > 256) { encoder->error = 68; break; }
- addChunk_PLTE(&outv, &info.color);
- }
- /*tRNS*/
- if(info.color.colorType == 3 && !isPaletteFullyOpaque(info.color.palette, info.color.palettesize)) addChunk_tRNS(&outv, &info.color);
- if((info.color.colorType == 0 || info.color.colorType == 2) && info.color.key_defined) addChunk_tRNS(&outv, &info.color);
-#ifdef LODEPNG_COMPILE_ANCILLARY_CHUNKS
- /*bKGD (must come between PLTE and the IDAt chunks*/
- if(info.background_defined) addChunk_bKGD(&outv, &info);
- /*pHYs (must come before the IDAT chunks)*/
- if(info.phys_defined) addChunk_pHYs(&outv, &info);
-#endif /*LODEPNG_COMPILE_ANCILLARY_CHUNKS*/
-#ifdef LODEPNG_COMPILE_UNKNOWN_CHUNKS
- /*unknown chunks between PLTE and IDAT*/
- if(info.unknown_chunks.data[1]) { encoder->error = addUnknownChunks(&outv, info.unknown_chunks.data[1], info.unknown_chunks.datasize[1]); if(encoder->error) break; }
-#endif /*LODEPNG_COMPILE_UNKNOWN_CHUNKS*/
- /*IDAT (multiple IDAT chunks must be consecutive)*/
- encoder->error = addChunk_IDAT(&outv, data, datasize, &encoder->settings.zlibsettings);
- if(encoder->error) break;
-#ifdef LODEPNG_COMPILE_ANCILLARY_CHUNKS
- /*tIME*/
- if(info.time_defined) addChunk_tIME(&outv, &info.time);
- /*tEXt and/or zTXt*/
- for(i = 0; i < info.text.num; i++)
- {
- if(strlen(info.text.keys[i]) > 79) { encoder->error = 66; break; }
- if(strlen(info.text.keys[i]) < 1) { encoder->error = 67; break; }
- if(encoder->settings.text_compression)
- addChunk_zTXt(&outv, info.text.keys[i], info.text.strings[i], &encoder->settings.zlibsettings);
- else
- addChunk_tEXt(&outv, info.text.keys[i], info.text.strings[i]);
- }
- /*LodePNG version id in text chunk*/
- if(encoder->settings.add_id)
- {
- unsigned alread_added_id_text = 0;
- for(i = 0; i < info.text.num; i++)
- if(!strcmp(info.text.keys[i], "LodePNG")) { alread_added_id_text = 1; break; }
- if(alread_added_id_text == 0)
- addChunk_tEXt(&outv, "LodePNG", VERSION_STRING); /*it's shorter as tEXt than as zTXt chunk*/
- }
- /*iTXt*/
- for(i = 0; i < info.itext.num; i++)
- {
- if(strlen(info.itext.keys[i]) > 79) { encoder->error = 66; break; }
- if(strlen(info.itext.keys[i]) < 1) { encoder->error = 67; break; }
- addChunk_iTXt(&outv, encoder->settings.text_compression,
- info.itext.keys[i], info.itext.langtags[i], info.itext.transkeys[i], info.itext.strings[i],
- &encoder->settings.zlibsettings);
- }
-#endif /*LODEPNG_COMPILE_ANCILLARY_CHUNKS*/
-#ifdef LODEPNG_COMPILE_UNKNOWN_CHUNKS
- /*unknown chunks between IDAT and IEND*/
- if(info.unknown_chunks.data[2]) { encoder->error = addUnknownChunks(&outv, info.unknown_chunks.data[2], info.unknown_chunks.datasize[2]); if(encoder->error) break; }
-#endif /*LODEPNG_COMPILE_UNKNOWN_CHUNKS*/
- /*IEND*/
- addChunk_IEND(&outv);
-
- break; /*this isn't really a while loop; no error happened so break out now!*/
- }
-
- free(data);
- /*instead of cleaning the vector up, give it to the output*/
- *out = outv.data;
- *outsize = outv.size;
-}
-
-unsigned LodePNG_encode32(unsigned char** out, size_t* outsize, const unsigned char* image, unsigned w, unsigned h)
-{
- unsigned error;
- LodePNG_Encoder encoder;
- LodePNG_Encoder_init(&encoder);
- LodePNG_encode(&encoder, out, outsize, image, w, h);
- error = encoder.error;
- LodePNG_Encoder_cleanup(&encoder);
- return error;
-}
-
-#ifdef LODEPNG_COMPILE_DISK
-unsigned LodePNG_encode32f(const char* filename, const unsigned char* image, unsigned w, unsigned h)
-{
- unsigned char* buffer;
- size_t buffersize;
- unsigned error = LodePNG_encode32(&buffer, &buffersize, image, w, h);
- LodePNG_saveFile(buffer, buffersize, filename);
- free(buffer);
- return error;
-}
-#endif /*LODEPNG_COMPILE_DISK*/
-
-void LodePNG_EncodeSettings_init(LodePNG_EncodeSettings* settings)
-{
- LodeZlib_DeflateSettings_init(&settings->zlibsettings);
- settings->autoLeaveOutAlphaChannel = 1;
- settings->force_palette = 0;
-#ifdef LODEPNG_COMPILE_ANCILLARY_CHUNKS
- settings->add_id = 1;
- settings->text_compression = 0;
-#endif /*LODEPNG_COMPILE_ANCILLARY_CHUNKS*/
-}
-
-void LodePNG_Encoder_init(LodePNG_Encoder* encoder)
-{
- LodePNG_EncodeSettings_init(&encoder->settings);
- LodePNG_InfoPng_init(&encoder->infoPng);
- LodePNG_InfoRaw_init(&encoder->infoRaw);
- encoder->error = 1;
-}
-
-void LodePNG_Encoder_cleanup(LodePNG_Encoder* encoder)
-{
- LodePNG_InfoPng_cleanup(&encoder->infoPng);
- LodePNG_InfoRaw_cleanup(&encoder->infoRaw);
-}
-
-void LodePNG_Encoder_copy(LodePNG_Encoder* dest, const LodePNG_Encoder* source)
-{
- LodePNG_Encoder_cleanup(dest);
- *dest = *source;
- LodePNG_InfoPng_init(&dest->infoPng);
- LodePNG_InfoRaw_init(&dest->infoRaw);
- dest->error = LodePNG_InfoPng_copy(&dest->infoPng, &source->infoPng); if(dest->error) return;
- dest->error = LodePNG_InfoRaw_copy(&dest->infoRaw, &source->infoRaw); if(dest->error) return;
-}
-
-#endif /*LODEPNG_COMPILE_ENCODER*/
-
-#endif /*LODEPNG_COMPILE_PNG*/
-
-/* ////////////////////////////////////////////////////////////////////////// */
-/* / File IO / */
-/* ////////////////////////////////////////////////////////////////////////// */
-
-#ifdef LODEPNG_COMPILE_DISK
-
-unsigned LodePNG_loadFile(unsigned char** out, size_t* outsize, const char* filename) /*designed for loading files from hard disk in a dynamically allocated buffer*/
-{
- FILE* file;
- long size;
-
- /*provide some proper output values if error will happen*/
- *out = 0;
- *outsize = 0;
-
- file = portable_fopen(filename, "rb");
- if(!file) return 78;
-
- /*get filesize:*/
- fseek(file , 0 , SEEK_END);
- size = ftell(file);
- rewind(file);
-
- /*read contents of the file into the vector*/
- *outsize = 0;
- *out = (unsigned char*)malloc((size_t)size);
- if(size && (*out)) (*outsize) = fread(*out, 1, (size_t)size, file);
-
- fclose(file);
- if(!(*out) && size) return 80; /*the above malloc failed*/
- return 0;
-}
-
-/*write given buffer to the file, overwriting the file, it doesn't append to it.*/
-unsigned LodePNG_saveFile(const unsigned char* buffer, size_t buffersize, const char* filename)
-{
- FILE* file;
- file = portable_fopen(filename, "wb" );
- if(!file) return 79;
- fwrite((char*)buffer , 1 , buffersize, file);
- fclose(file);
- return 0;
-}
-
-#endif /*LODEPNG_COMPILE_DISK*/
-
diff --git a/trunk/src/lodepng.h b/trunk/src/lodepng.h
deleted file mode 100644
index bbf40dc..0000000
--- a/trunk/src/lodepng.h
+++ /dev/null
@@ -1,1575 +0,0 @@
-/*
-LodePNG version 20080927
-
-Copyright (c) 2005-2008 Lode Vandevenne
-
-This software is provided 'as-is', without any express or implied
-warranty. In no event will the authors be held liable for any damages
-arising from the use of this software.
-
-Permission is granted to anyone to use this software for any purpose,
-including commercial applications, and to alter it and redistribute it
-freely, subject to the following restrictions:
-
- 1. The origin of this software must not be misrepresented; you must not
- claim that you wrote the original software. If you use this software
- in a product, an acknowledgment in the product documentation would be
- appreciated but is not required.
-
- 2. Altered source versions must be plainly marked as such, and must not be
- misrepresented as being the original software.
-
- 3. This notice may not be removed or altered from any source
- distribution.
-*/
-
-#ifndef LODEPNG_H
-#define LODEPNG_H
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-
-/* ////////////////////////////////////////////////////////////////////////// */
-/* Code Sections */
-/* ////////////////////////////////////////////////////////////////////////// */
-
-/*The following defines can be commented disable code sections. Gives potential faster compile and smaller binary.*/
-
-#define LODEPNG_COMPILE_ZLIB /*deflate&zlib encoder and deflate&zlib decoder*/
-#define LODEPNG_COMPILE_PNG /*png encoder and png decoder*/
-//#define LODEPNG_COMPILE_DECODER /*deflate&zlib decoder and png decoder*/
-#define LODEPNG_COMPILE_ENCODER /*deflate&zlib encoder and png encoder*/
-#define LODEPNG_COMPILE_DISK /*the optional built in harddisk file loading and saving functions*/
-//#define LODEPNG_COMPILE_ANCILLARY_CHUNKS /*any code or struct datamember related to chunks other than IHDR, IDAT, PLTE, tRNS, IEND*/
-//#define LODEPNG_COMPILE_UNKNOWN_CHUNKS /*handling of unknown chunks*/
-
-/* ////////////////////////////////////////////////////////////////////////// */
-/* LodeFlate & LodeZlib Setting structs */
-/* ////////////////////////////////////////////////////////////////////////// */
-
-#ifdef LODEPNG_COMPILE_DECODER
-typedef struct LodeZlib_DecompressSettings
-{
- unsigned ignoreAdler32;
-} LodeZlib_DecompressSettings;
-
-extern const LodeZlib_DecompressSettings LodeZlib_defaultDecompressSettings;
-void LodeZlib_DecompressSettings_init(LodeZlib_DecompressSettings* settings);
-#endif /*LODEPNG_COMPILE_DECODER*/
-
-#ifdef LODEPNG_COMPILE_ENCODER
-typedef struct LodeZlib_DeflateSettings /*deflate = compress*/
-{
- /*LZ77 related settings*/
- unsigned btype; /*the block type for LZ*/
- unsigned useLZ77; /*whether or not to use LZ77*/
- unsigned windowSize; /*the maximum is 32768*/
-} LodeZlib_DeflateSettings;
-
-extern const LodeZlib_DeflateSettings LodeZlib_defaultDeflateSettings;
-void LodeZlib_DeflateSettings_init(LodeZlib_DeflateSettings* settings);
-#endif /*LODEPNG_COMPILE_ENCODER*/
-
-#ifdef LODEPNG_COMPILE_ZLIB
-/* ////////////////////////////////////////////////////////////////////////// */
-/* LodeFlate & LodeZlib */
-/* ////////////////////////////////////////////////////////////////////////// */
-
-#ifdef LODEPNG_COMPILE_DECODER
-/*This function reallocates the out buffer and appends the data.
-Either, *out must be NULL and *outsize must be 0, or, *out must be a valid buffer and *outsize its size in bytes.*/
-unsigned LodeZlib_decompress(unsigned char** out, size_t* outsize, const unsigned char* in, size_t insize, const LodeZlib_DecompressSettings* settings);
-#endif /*LODEPNG_COMPILE_DECODER*/
-
-#ifdef LODEPNG_COMPILE_ENCODER
-/*This function reallocates the out buffer and appends the data.
-Either, *out must be NULL and *outsize must be 0, or, *out must be a valid buffer and *outsize its size in bytes.*/
-unsigned LodeZlib_compress(unsigned char** out, size_t* outsize, const unsigned char* in, size_t insize, const LodeZlib_DeflateSettings* settings);
-#endif /*LODEPNG_COMPILE_ENCODER*/
-#endif /*LODEPNG_COMPILE_ZLIB*/
-
-#ifdef LODEPNG_COMPILE_PNG
-
-/* ////////////////////////////////////////////////////////////////////////// */
-/* LodePNG */
-/* ////////////////////////////////////////////////////////////////////////// */
-
-/*LodePNG_chunk functions: These functions need as input a large enough amount of allocated memory.*/
-
-unsigned LodePNG_chunk_length(const unsigned char* chunk); /*get the length of the data of the chunk. Total chunk length has 12 bytes more.*/
-
-void LodePNG_chunk_type(char type[5], const unsigned char* chunk); /*puts the 4-byte type in null terminated string*/
-unsigned char LodePNG_chunk_type_equals(const unsigned char* chunk, const char* type); /*check if the type is the given type*/
-
-/*properties of PNG chunks gotten from capitalization of chunk type name, as defined by the standard*/
-unsigned char LodePNG_chunk_critical(const unsigned char* chunk); /*0: ancillary chunk, 1: it's one of the critical chunk types*/
-unsigned char LodePNG_chunk_private(const unsigned char* chunk); /*0: public, 1: private*/
-unsigned char LodePNG_chunk_safetocopy(const unsigned char* chunk); /*0: the chunk is unsafe to copy, 1: the chunk is safe to copy*/
-
-unsigned char* LodePNG_chunk_data(unsigned char* chunk); /*get pointer to the data of the chunk*/
-const unsigned char* LodePNG_chunk_data_const(const unsigned char* chunk); /*get pointer to the data of the chunk*/
-
-unsigned LodePNG_chunk_check_crc(const unsigned char* chunk); /*returns 0 if the crc is correct, 1 if it's incorrect*/
-void LodePNG_chunk_generate_crc(unsigned char* chunk); /*generates the correct CRC from the data and puts it in the last 4 bytes of the chunk*/
-
-/*iterate to next chunks.*/
-unsigned char* LodePNG_chunk_next(unsigned char* chunk);
-const unsigned char* LodePNG_chunk_next_const(const unsigned char* chunk);
-
-/*add chunks to out buffer. It reallocs the buffer to append the data. returns error code*/
-unsigned LodePNG_append_chunk(unsigned char** out, size_t* outlength, const unsigned char* chunk); /*appends chunk that was already created, to the data. Returns pointer to start of appended chunk, or NULL if error happened*/
-unsigned LodePNG_create_chunk(unsigned char** out, size_t* outlength, unsigned length, const char* type, const unsigned char* data); /*appends new chunk to out. Returns pointer to start of appended chunk, or NULL if error happened; may change memory address of out buffer*/
-
-typedef struct LodePNG_InfoColor /*info about the color type of an image*/
-{
- /*header (IHDR)*/
- unsigned colorType; /*color type*/
- unsigned bitDepth; /*bits per sample*/
-
- /*palette (PLTE)*/
- unsigned char* palette; /*palette in RGBARGBA... order*/
- size_t palettesize; /*palette size in number of colors (amount of bytes is 4 * palettesize)*/
-
- /*transparent color key (tRNS)*/
- unsigned key_defined; /*is a transparent color key given?*/
- unsigned key_r; /*red component of color key*/
- unsigned key_g; /*green component of color key*/
- unsigned key_b; /*blue component of color key*/
-} LodePNG_InfoColor;
-
-void LodePNG_InfoColor_init(LodePNG_InfoColor* info);
-void LodePNG_InfoColor_cleanup(LodePNG_InfoColor* info);
-unsigned LodePNG_InfoColor_copy(LodePNG_InfoColor* dest, const LodePNG_InfoColor* source);
-
-/*Use these functions instead of allocating palette manually*/
-void LodePNG_InfoColor_clearPalette(LodePNG_InfoColor* info);
-unsigned LodePNG_InfoColor_addPalette(LodePNG_InfoColor* info, unsigned char r, unsigned char g, unsigned char b, unsigned char a); /*add 1 color to the palette*/
-
-/*additional color info*/
-unsigned LodePNG_InfoColor_getBpp(const LodePNG_InfoColor* info); /*bits per pixel*/
-unsigned LodePNG_InfoColor_getChannels(const LodePNG_InfoColor* info); /*amount of channels*/
-unsigned LodePNG_InfoColor_isGreyscaleType(const LodePNG_InfoColor* info); /*is it a greyscale type? (colorType 0 or 4)*/
-unsigned LodePNG_InfoColor_isAlphaType(const LodePNG_InfoColor* info); /*has it an alpha channel? (colorType 2 or 6)*/
-
-#ifdef LODEPNG_COMPILE_ANCILLARY_CHUNKS
-typedef struct LodePNG_Time /*LodePNG's encoder does not generate the current time. To make it add a time chunk the correct time has to be provided*/
-{
- unsigned year; /*2 bytes*/
- unsigned char month; /*1-12*/
- unsigned char day; /*1-31*/
- unsigned char hour; /*0-23*/
- unsigned char minute; /*0-59*/
- unsigned char second; /*0-60 (to allow for leap seconds)*/
-} LodePNG_Time;
-
-typedef struct LodePNG_Text /*non-international text*/
-{
- size_t num;
- char** keys; /*the keyword of a text chunk (e.g. "Comment")*/
- char** strings; /*the actual text*/
-} LodePNG_Text;
-
-void LodePNG_Text_init(LodePNG_Text* text);
-void LodePNG_Text_cleanup(LodePNG_Text* text);
-unsigned LodePNG_Text_copy(LodePNG_Text* dest, const LodePNG_Text* source);
-
-/*Use these functions instead of allocating the char**s manually*/
-void LodePNG_Text_clear(LodePNG_Text* text);
-unsigned LodePNG_Text_add(LodePNG_Text* text, const char* key, const char* str); /*push back both texts at once*/
-
-
-typedef struct LodePNG_IText /*international text*/
-{
- size_t num;
- char** keys; /*the English keyword of the text chunk (e.g. "Comment")*/
- char** langtags; /*the language tag for this text's international language, ISO/IEC 646 string, e.g. ISO 639 language tag*/
- char** transkeys; /*keyword translated to the international language - UTF-8 string*/
- char** strings; /*the actual international text - UTF-8 string*/
-} LodePNG_IText;
-
-void LodePNG_IText_init(LodePNG_IText* text);
-void LodePNG_IText_cleanup(LodePNG_IText* text);
-unsigned LodePNG_IText_copy(LodePNG_IText* dest, const LodePNG_IText* source);
-
-/*Use these functions instead of allocating the char**s manually*/
-void LodePNG_IText_clear(LodePNG_IText* text);
-unsigned LodePNG_IText_add(LodePNG_IText* text, const char* key, const char* langtag, const char* transkey, const char* str); /*push back the 4 texts of 1 chunk at once*/
-#endif /*LODEPNG_COMPILE_ANCILLARY_CHUNKS*/
-
-#ifdef LODEPNG_COMPILE_UNKNOWN_CHUNKS
-typedef struct LodePNG_UnknownChunks /*unknown chunks read from the PNG, or extra chunks the user wants to have added in the encoded PNG*/
-{
- /*There are 3 buffers, one for each position in the PNG where unknown chunks can appear
- each buffer contains all unknown chunks for that position consecutively
- The 3 buffers are the unknown chunks between certain critical chunks:
- 0: IHDR-PLTE, 1: PLTE-IDAT, 2: IDAT-IEND*/
- unsigned char* data[3];
- size_t datasize[3]; /*size in bytes of the unknown chunks, given for protection*/
-
-} LodePNG_UnknownChunks;
-
-void LodePNG_UnknownChunks_init(LodePNG_UnknownChunks* chunks);
-void LodePNG_UnknownChunks_cleanup(LodePNG_UnknownChunks* chunks);
-unsigned LodePNG_UnknownChunks_copy(LodePNG_UnknownChunks* dest, const LodePNG_UnknownChunks* src);
-#endif /*LODEPNG_COMPILE_UNKNOWN_CHUNKS*/
-
-typedef struct LodePNG_InfoPng /*information about the PNG image, except pixels and sometimes except width and height*/
-{
- /*header (IHDR), palette (PLTE) and transparency (tRNS)*/
- unsigned width; /*width of the image in pixels (ignored by encoder, but filled in by decoder)*/
- unsigned height; /*height of the image in pixels (ignored by encoder, but filled in by decoder)*/
- unsigned compressionMethod; /*compression method of the original file*/
- unsigned filterMethod; /*filter method of the original file*/
- unsigned interlaceMethod; /*interlace method of the original file*/
- LodePNG_InfoColor color; /*color type and bits, palette, transparency*/
-
-#ifdef LODEPNG_COMPILE_ANCILLARY_CHUNKS
-
- /*suggested background color (bKGD)*/
- unsigned background_defined; /*is a suggested background color given?*/
- unsigned background_r; /*red component of suggested background color*/
- unsigned background_g; /*green component of suggested background color*/
- unsigned background_b; /*blue component of suggested background color*/
-
- /*non-international text chunks (tEXt and zTXt)*/
- LodePNG_Text text;
-
- /*international text chunks (iTXt)*/
- LodePNG_IText itext;
-
- /*time chunk (tIME)*/
- unsigned char time_defined; /*if 0, no tIME chunk was or will be generated in the PNG image*/
- LodePNG_Time time;
-
- /*phys chunk (pHYs)*/
- unsigned phys_defined; /*is pHYs chunk defined?*/
- unsigned phys_x;
- unsigned phys_y;
- unsigned char phys_unit; /*may be 0 (unknown unit) or 1 (metre)*/
-
-#endif /*LODEPNG_COMPILE_ANCILLARY_CHUNKS*/
-
-#ifdef LODEPNG_COMPILE_UNKNOWN_CHUNKS
- /*unknown chunks*/
- LodePNG_UnknownChunks unknown_chunks;
-#endif /*LODEPNG_COMPILE_UNKNOWN_CHUNKS*/
-
-} LodePNG_InfoPng;
-
-void LodePNG_InfoPng_init(LodePNG_InfoPng* info);
-void LodePNG_InfoPng_cleanup(LodePNG_InfoPng* info);
-unsigned LodePNG_InfoPng_copy(LodePNG_InfoPng* dest, const LodePNG_InfoPng* source);
-
-typedef struct LodePNG_InfoRaw /*contains user-chosen information about the raw image data, which is independent of the PNG image*/
-{
- LodePNG_InfoColor color;
-} LodePNG_InfoRaw;
-
-void LodePNG_InfoRaw_init(LodePNG_InfoRaw* info);
-void LodePNG_InfoRaw_cleanup(LodePNG_InfoRaw* info);
-unsigned LodePNG_InfoRaw_copy(LodePNG_InfoRaw* dest, const LodePNG_InfoRaw* source);
-
-/*
-LodePNG_convert: Converts from any color type to 24-bit or 32-bit (later maybe more supported). return value = LodePNG error code
-The out buffer must have (w * h * bpp + 7) / 8, where bpp is the bits per pixel of the output color type (LodePNG_InfoColor_getBpp)
-*/
-unsigned LodePNG_convert(unsigned char* out, const unsigned char* in, LodePNG_InfoColor* infoOut, LodePNG_InfoColor* infoIn, unsigned w, unsigned h);
-
-#ifdef LODEPNG_COMPILE_DECODER
-
-typedef struct LodePNG_DecodeSettings
-{
- LodeZlib_DecompressSettings zlibsettings; /*in here is the setting to ignore Adler32 checksums*/
-
- unsigned ignoreCrc; /*ignore CRC checksums*/
- unsigned color_convert; /*whether to convert the PNG to the color type you want. Default: yes*/
-
-#ifdef LODEPNG_COMPILE_ANCILLARY_CHUNKS
- unsigned readTextChunks; /*if false but rememberUnknownChunks is true, they're stored in the unknown chunks*/
-#endif /*LODEPNG_COMPILE_ANCILLARY_CHUNKS*/
-
-#ifdef LODEPNG_COMPILE_UNKNOWN_CHUNKS
- unsigned rememberUnknownChunks; /*store all bytes from unknown chunks in the InfoPng (off by default, useful for a png editor)*/
-#endif /*LODEPNG_COMPILE_UNKNOWN_CHUNKS*/
-} LodePNG_DecodeSettings;
-
-void LodePNG_DecodeSettings_init(LodePNG_DecodeSettings* settings);
-
-typedef struct LodePNG_Decoder
-{
- LodePNG_DecodeSettings settings;
- LodePNG_InfoRaw infoRaw;
- LodePNG_InfoPng infoPng; /*info of the PNG image obtained after decoding*/
- unsigned error;
-} LodePNG_Decoder;
-
-void LodePNG_Decoder_init(LodePNG_Decoder* decoder);
-void LodePNG_Decoder_cleanup(LodePNG_Decoder* decoder);
-void LodePNG_Decoder_copy(LodePNG_Decoder* dest, const LodePNG_Decoder* source);
-
-/*decoding functions*/
-/*This function allocates the out buffer and stores the size in *outsize.*/
-void LodePNG_decode(LodePNG_Decoder* decoder, unsigned char** out, size_t* outsize, const unsigned char* in, size_t insize);
-unsigned LodePNG_decode32(unsigned char** out, unsigned* w, unsigned* h, const unsigned char* in, size_t insize); /*return value is error*/
-#ifdef LODEPNG_COMPILE_DISK
-unsigned LodePNG_decode32f(unsigned char** out, unsigned* w, unsigned* h, const char* filename);
-#endif /*LODEPNG_COMPILE_DISK*/
-void LodePNG_inspect(LodePNG_Decoder* decoder, const unsigned char* in, size_t size); /*read the png header*/
-
-#endif /*LODEPNG_COMPILE_DECODER*/
-
-#ifdef LODEPNG_COMPILE_ENCODER
-
-typedef struct LodePNG_EncodeSettings
-{
- LodeZlib_DeflateSettings zlibsettings; /*settings for the zlib encoder, such as window size, ...*/
-
- unsigned autoLeaveOutAlphaChannel; /*automatically use color type without alpha instead of given one, if given image is opaque*/
- unsigned force_palette; /*force creating a PLTE chunk if colortype is 2 or 6 (= a suggested palette). If colortype is 3, PLTE is _always_ created.*/
-#ifdef LODEPNG_COMPILE_ANCILLARY_CHUNKS
- unsigned add_id; /*add LodePNG version as text chunk*/
- unsigned text_compression; /*encode text chunks as zTXt chunks instead of tEXt chunks, and use compression in iTXt chunks*/
-#endif /*LODEPNG_COMPILE_ANCILLARY_CHUNKS*/
-} LodePNG_EncodeSettings;
-
-void LodePNG_EncodeSettings_init(LodePNG_EncodeSettings* settings);
-
-typedef struct LodePNG_Encoder
-{
- LodePNG_EncodeSettings settings;
- LodePNG_InfoPng infoPng; /*the info specified by the user may not be changed by the encoder. The encoder will try to generate a PNG close to the given info.*/
- LodePNG_InfoRaw infoRaw; /*put the properties of the input raw image in here*/
- unsigned error;
-} LodePNG_Encoder;
-
-void LodePNG_Encoder_init(LodePNG_Encoder* encoder);
-void LodePNG_Encoder_cleanup(LodePNG_Encoder* encoder);
-void LodePNG_Encoder_copy(LodePNG_Encoder* dest, const LodePNG_Encoder* source);
-
-/*This function allocates the out buffer and stores the size in *outsize.*/
-void LodePNG_encode(LodePNG_Encoder* encoder, unsigned char** out, size_t* outsize, const unsigned char* image, unsigned w, unsigned h);
-unsigned LodePNG_encode32(unsigned char** out, size_t* outsize, const unsigned char* image, unsigned w, unsigned h); /*return value is error*/
-#ifdef LODEPNG_COMPILE_DISK
-unsigned LodePNG_encode32f(const char* filename, const unsigned char* image, unsigned w, unsigned h);
-#endif /*LODEPNG_COMPILE_DISK*/
-#endif /*LODEPNG_COMPILE_ENCODER*/
-#endif /*LODEPNG_COMPILE_PNG*/
-
-#ifdef LODEPNG_COMPILE_DISK
-/*free functions allowing to load and save a file from/to harddisk*/
-/*This function allocates the out buffer and stores the size in *outsize.*/
-unsigned LodePNG_loadFile(unsigned char** out, size_t* outsize, const char* filename);
-unsigned LodePNG_saveFile(const unsigned char* buffer, size_t buffersize, const char* filename);
-#endif /*LODEPNG_COMPILE_DISK*/
-
-
-/*
-TODO:
-[ ] test if there are no memory leaks or security exploits - done a lot but needs to be checked often
-[ ] LZ77 encoder more like the one described in zlib - to make sure it's patentfree
-[ ] converting color to 16-bit types
-[ ] read all public PNG chunk types (but never let the color profile and gamma ones ever touch RGB values, that is very annoying for textures as well as images in a browser)
-[ ] make sure encoder generates no chunks with size > (2^31)-1
-[ ] partial decoding (stream processing)
-[ ] let the "isFullyOpaque" function check color keys and transparent palettes too
-[ ] better name for the variables "codes", "codesD", "codelengthcodes", "clcl" and "lldl"
-[ ] check compatibility with vareous compilers - done but needs to be redone for every newer version
-[ ] don't stop decoding on errors like 69, 57, 58 (make warnings that the decoder stores in the error at the very end? and make some errors just let it stop with this one chunk but still do the next ones)
-[ ] make option to choose if the raw image with non multiple of 8 bits per scanline should have padding bits or not, if people like storing raw images that way
-*/
-
-#endif
-
-/*
-LodePNG Documentation
----------------------
-
-0. table of contents
---------------------
-
- 1. about
- 1.1. supported features
- 1.2. features not supported
- 2. C and C++ version
- 3. A note about security!
- 4. simple functions
- 4.1 C Simple Functions
- 4.2 C++ Simple Functions
- 5. decoder
- 6. encoder
- 7. color conversions
- 8. info values
- 9. error values
- 10. file IO
- 11. chunks and PNG editing
- 12. compiler support
- 13. examples
- 13.1. decoder example
- 13.2. encoder example
- 14. LodeZlib
- 15. changes
- 16. contact information
-
-
-1. about
---------
-
-PNG is a file format to store raster images losslessly with good compression,
-supporting different color types. It can be implemented in a patent-free way.
-
-LodePNG is a PNG codec according to the Portable Network Graphics (PNG)
-Specification (Second Edition) - W3C Recommendation 10 November 2003.
-
-The specifications used are:
-
-*) Portable Network Graphics (PNG) Specification (Second Edition):
- http://www.w3.org/TR/2003/REC-PNG-20031110
-*) RFC 1950 ZLIB Compressed Data Format version 3.3:
- http://www.gzip.org/zlib/rfc-zlib.html
-*) RFC 1951 DEFLATE Compressed Data Format Specification ver 1.3:
- http://www.gzip.org/zlib/rfc-deflate.html
-
-The most recent version of LodePNG can currently be found at
-http://members.gamedev.net/lode/projects/LodePNG/
-
-LodePNG works both in C (ISO C90) and C++, with a C++ wrapper that adds
-extra functionality.
-
-LodePNG exists out of two files:
--lodepng.h: the header file for both C and C++
--lodepng.c(pp): give it the name lodepng.c or lodepng.cpp depending on your usage
-
-If you want to start using LodePNG right away without reading this doc, get the
-files lodepng_examples.c or lodepng_examples.cpp to see how to use it in code,
-or check the (smaller) examples in chapter 13 here.
-
-LodePNG is simple but only supports the basic requirements. To achieve
-simplicity, the following design choices were made: There are no dependencies
-on any external library. To decode PNGs, there's a Decoder struct or class that
-can convert any PNG file data into an RGBA image buffer with a single function
-call. To encode PNGs, there's an Encoder struct or class that can convert image
-data into PNG file data with a single function call. To read and write files,
-there are simple functions to convert the files to/from buffers in memory.
-
-This all makes LodePNG suitable for loading textures in games, demoscene
-productions, saving a screenshot, images in programs that require them for simple
-usage, ... It's less suitable for full fledged image editors, loading PNGs
-over network (it requires all the image data to be available before decoding can
-begin), life-critical systems, ...
-LodePNG has a standards conformant decoder and encoder, and supports the ability
-to make a somewhat conformant editor.
-
-1.1. supported features
------------------------
-
-The following features are supported by the decoder:
-
-*) decoding of PNGs with any color type, bit depth and interlace mode, to a 24- or 32-bit color raw image, or the same color type as the PNG
-*) encoding of PNGs, from any raw image to 24- or 32-bit color, or the same color type as the raw image
-*) Adam7 interlace and deinterlace for any color type
-*) loading the image from harddisk or decoding it from a buffer from other sources than harddisk
-*) support for alpha channels, including RGBA color model, translucent palettes and color keying
-*) zlib decompression (inflate)
-*) zlib compression (deflate)
-*) CRC32 and ADLER32 checksums
-*) handling of unknown chunks, allowing making a PNG editor that stores custom and unknown chunks.
-*) the following chunks are supported (generated/interpreted) by both encoder and decoder:
- IHDR: header information
- PLTE: color palette
- IDAT: pixel data
- IEND: the final chunk
- tRNS: transparency for palettized images
- tEXt: textual information
- zTXt: compressed textual information
- iTXt: international textual information
- bKGD: suggested background color
- pHYs: physical dimensions
- tIME: modification time
-
-1.2. features not supported
----------------------------
-
-The following features are _not_ supported:
-
-*) some features needed to make a conformant PNG-Editor might be still missing.
-*) partial loading/stream processing. All data must be available and is processed in one call.
-*) The following public chunks are not supported but treated as unknown chunks by LodePNG
- cHRM, gAMA, iCCP, sRGB, sBIT, hIST, sPLT
-
-
-2. C and C++ version
---------------------
-
-The C version uses buffers allocated with alloc instead that you need to free()
-yourself. On top of that, you need to use init and cleanup functions for each
-struct whenever using a struct from the C version to avoid exploits and memory leaks.
-
-The C++ version has constructors and destructors that take care of these things,
-and uses std::vectors in the interface for storing data.
-
-Both the C and the C++ version are contained in this file! The C++ code depends on
-the C code, the C code works on its own.
-
-These files work without modification for both C and C++ compilers because all the
-additional C++ code is in "#ifdef __cplusplus" blocks that make C-compilers ignore
-it, and the C code is made to compile both with strict ISO C90 and C++.
-
-To use the C++ version, you need to rename the source file to lodepng.cpp (instead
-of lodepng.c), and compile it with a C++ compiler.
-
-To use the C version, you need to rename the source file to lodepng.c (instead
-of lodepng.cpp), and compile it with a C compiler.
-
-
-3. A note about security!
--------------------------
-
-Despite being used already and having received bug fixes whenever bugs were reported,
-LodePNG may still contain possible exploits.
-
-If you discover a possible exploit, please let me know, and it will be eliminated.
-
-When using LodePNG, care has to be taken with the C version of LodePNG, as well as the C-style
-structs when working with C++. The following conventions are used for all C-style structs:
-
--if a struct has a corresponding init function, always call the init function when making a new one, to avoid exploits
--if a struct has a corresponding cleanup function, call it before the struct disappears to avoid memory leaks
--if a struct has a corresponding copy function, use the copy function instead of "=". The destination must be inited already!
-
-
-4. "Simple" Functions
----------------------
-
-For the most simple usage cases of loading and saving a PNG image, there
-are some simple functions that do everything in 1 call (instead of you
-having to instantiate a struct or class).
-
-The simple versions always use 32-bit RGBA color for the raw image, but
-still support loading arbitrary-colortype PNG images.
-
-The later sections of this manual are devoted to the complex versions, where
-you can use other color types and conversions.
-
-4.1 C Simple Functions
-----------------------
-
-The C simple functions have a "32" or "32f" in their name, and don't take a struct as
-parameter, unlike the non-simple ones (see more down in the documentation).
-
-unsigned LodePNG_decode32(unsigned char** out, unsigned* w, unsigned* h, const unsigned char* in, size_t insize);
-
-Load PNG from given buffer.
-As input, give an unsigned char* buffer gotten by loading the .png file and its size.
-As output, you get a dynamically allocated buffer of large enough size, and the width and height of the image.
-The buffer's size is w * h * 4. The image is in RGBA format.
-The return value is the error (0 if ok).
-You need to do free(out) after usage to clean up the memory.
-
-unsigned LodePNG_decode32f(unsigned char** out, unsigned* w, unsigned* h, const char* filename);
-
-Load PNG from disk, from file with given name.
-Same as decode32, except you give a filename instead of an input buffer.
-
-unsigned LodePNG_encode32(unsigned char** out, size_t* outsize, const unsigned char* image, unsigned w, unsigned h);
-
-Encode PNG into buffer.
-As input, give a image buffer of size w * h * 4, in RGBA format.
-As output, you get a dynamically allocated buffer and its size, which is a PNG file that can
-directly be saved in this form to the harddisk.
-The return value is the error (0 if ok).
-You need to do free(out) after usage to clean up the memory.
-
-unsigned LodePNG_encode32f(const char* filename, const unsigned char* image, unsigned w, unsigned h);
-
-Encode PNG into file on disk with given name.
-If the file exists, it's overwritten without warning!
-Same parameters as encode2, except the result is stored in a file instead of a dynamic buffer.
-
-4.2 C++ Simple Functions
-------------------------
-
-For decoding a PNG there are:
-
-unsigned LodePNG::decode(std::vector<unsigned char>& out, unsigned& w, unsigned& h, const unsigned char* in, unsigned size);
-unsigned LodePNG::decode(std::vector<unsigned char>& out, unsigned& w, unsigned& h, const std::vector<unsigned char>& in);
-unsigned LodePNG::decode(std::vector<unsigned char>& out, unsigned& w, unsigned& h, const std::string& filename);
-
-These store the pixel data as 32-bit RGBA color in the out vector, and the width
-and height of the image in w and h.
-The 3 functions each have a different input type: The first as unsigned char
-buffer, the second as std::vector buffer, and the third allows you to give the
-filename in case you want to load the PNG from disk instead of from a buffer.
-The return value is the error (0 if ok).
-
-For encoding a PNG there are:
-
-unsigned LodePNG::encode(std::vector<unsigned char>& out, const unsigned char* in, unsigned w, unsigned h);
-unsigned LodePNG::encode(std::vector<unsigned char>& out, const std::vector<unsigned char>& in, unsigned w, unsigned h);
-unsigned LodePNG::encode(const std::string& filename, const std::vector<unsigned char>& in, unsigned w, unsigned h);
-unsigned LodePNG::encode(const std::string& filename, const unsigned char* in, unsigned w, unsigned h);
-
-Specify the width and height of the input image with w and h.
-You can choose to get the output in an std::vector or stored in a file, and
-the input can come from an std::vector or an unsigned char* buffer. The input
-buffer must be in RGBA format and the size must be w * h * 4 bytes.
-
-The first two functions append to the out buffer, they don't clear it, clear it
-first before encoding into a buffer that you expect to only contain this result.
-
-On the other hand, the functions that encode to a file will completely overwrite
-the original file without warning if it exists.
-
-The return value is the error (0 if ok).
-
-5. Decoder
-----------
-
-This is about the LodePNG_Decoder struct in the C version, and the
-LodePNG::Decoder class in the C++ version. The C++ version inherits
-from the C struct and adds functions in the interface.
-
-The Decoder class can be used to convert a PNG image to a raw image.
-
-Usage:
-
--in C++:
- declare a LodePNG::Decoder
- call its decode member function with the parameters described below
-
--in C more needs to be done due to the lack of constructors and destructors:
- declare a LodePNG_Decoder struct
- call LodePNG_Decoder_init with the struct as parameter
- call LodePNG_Decode with the parameters described below
- after usage, call LodePNG_Decoder_cleanup with the struct as parameter
- after usage, free() the out buffer with image data that was created by the decode function
-
-The other parameters of the decode function are:
-*) out: this buffer will be filled with the raw image pixels
-*) in: pointer to the PNG image data or std::vector with the data
-*) size: the size of the PNG image data (not needed for std::vector version)
-
-After decoding you need to read the width and height of the image from the
-decoder, see further down in this manual to see how.
-
-There's also an optional function "inspect". It has the same parameters as decode except
-the "out" parameter. This function will read only the header chunk of the PNG
-image, and store the information from it in the LodePNG_InfoPng (see below).
-This allows knowing information about the image without decoding it. Only the
-header (IHDR) information is read by this, not text chunks, not the palette, ...
-
-During the decoding it's possible that an error can happen, for example if the
-PNG image was corrupted. To check if an error happened during the last decoding,
-check the value error, which is a member of the decoder struct.
-In the C++ version, use hasError() and getError() of the Decoder.
-The error codes are explained in another section.
-
-Now about colors and settings...
-
-The Decoder contains 3 components:
-*) LodePNG_InfoPng: it stores information about the PNG (the input) in an LodePNG_InfoPng struct, don't modify this one yourself
-*) Settings: you can specify a few other settings for the decoder to use
-*) LodePNG_InfoRaw: here you can say what type of raw image (the output) you want to get
-
-Some of the parameters described below may be inside the sub-struct "LodePNG_InfoColor color".
-In the C and C++ version, when using Info structs outside of the decoder or encoder, you need to use their
-init and cleanup functions, but normally you use the ones in the decoder that are already handled
-in the init and cleanup functions of the decoder itself.
-
-=LodePNG_InfoPng=
-
-This contains information such as the original color type of the PNG image, text
-comments, suggested background color, etc... More details about the LodePNG_InfoPng struct
-are in another section.
-
-Because the dimensions of the image are important, there are shortcuts to get them in the
-C++ version: use decoder.getWidth() and decoder.getHeight().
-In the C version, use decoder.infoPng.width and decoder.infoPng.height.
-
-=LodePNG_InfoRaw=
-
-In the LodePNG_InfoRaw struct of the Decoder, you can specify which color type you want
-the resulting raw image to be. If this is different from the colorType of the
-PNG, then the decoder will automatically convert the result to your LodePNG_InfoRaw
-settings. Currently the following options are supported to convert to:
--colorType 6, bitDepth 8: 32-bit RGBA
--colorType 2, bitDepth 8: 24-bit RGB
--other color types if it's exactly the same as that in the PNG image
-
-Palette of LodePNG_InfoRaw isn't used by the Decoder, when converting from palette color
-to palette color, the values of the pixels are left untouched so that the colors
-will change if the palette is different. Color key of LodePNG_InfoRaw is not used by the
-Decoder. If setting color_convert is false then LodePNG_InfoRaw is completely ignored,
-but it will be modified to match the color type of the PNG so will be overwritten.
-
-By default, 32-bit color is used for the result.
-
-=Settings=
-
-The Settings can be used to ignore the errors created by invalid CRC and Adler32
-chunks, and to disable the decoding of tEXt chunks.
-
-There's also a setting color_convert, true by default. If false, no conversion
-is done, the resulting data will be as it was in the PNG (after decompression)
-and you'll have to puzzle the colors of the pixels together yourself using the
-color type information in the LodePNG_InfoPng.
-
-
-6. Encoder
-----------
-
-This is about the LodePNG_Encoder struct in the C version, and the
-LodePNG::Encoder class in the C++ version.
-
-The Encoder class can be used to convert raw image data into a PNG image.
-
-The PNG part of the encoder is working good, the zlib compression part is
-becoming quite fine but not as good as the official zlib yet, because it's not
-as fast and doesn't provide an as high compression ratio.
-
-Usage:
-
--in C++:
- declare a LodePNG::Encoder
- call its encode member function with the parameters described below
-
--in C more needs to be done due to the lack of constructors and destructors:
- declare a LodePNG_Encoder struct
- call LodePNG_Encoder_init with the struct as parameter
- call LodePNG_Encode with the parameters described below
- after usage, call LodePNG_Encoder_cleanup with the struct as parameter
- after usage, free() the out buffer with PNG data that was created by the encode function
-
-The raw image given to the encoder is an unsigned char* buffer. You also have to
-specify the width and height of the raw image. The result is stored in a given
-buffer. These buffers can be unsigned char* pointers, std::vectors or dynamically
-allocated unsigned char* buffers that you have to free() yourself, depending on
-which you use.
-
-The parameters of the encode function are:
-*) out: in this buffer the PNG file data will be stored (it will be appended)
-*) in: vector of or pointer to a buffer containing the raw image
-*) w and h: the width and height of the raw image in pixels
-
-Make sure that the in buffer you provide, is big enough to contain w * h pixels
-of the color type specified by the LodePNG_InfoRaw.
-
-In the C version, you need to free() the out buffer after usage to avoid memory leaks.
-In the C version, you need to use the LodePNG_Encoder_init function before using the decoder,
-and the LodePNG_Encoder_cleanup function after using it.
-In the C++ version, you don't need to do this since RAII takes care of it.
-
-The encoder generates some errors but not for everything, because, unlike when
-decoding a PNG, when encoding one there aren't so much parameters of the input
-that can be corrupted. It's the responsibility of the user to make sure that all
-preconditions are satesfied, such as giving a correct window size, giving an
-existing btype, making sure the given buffer is large enough to contain an image
-with the given width and height and colortype, ... The encoder can generate
-some errors, see the section with the explanations of errors for those.
-
-Like the Decoder, the Encoder has 3 components:
-*) LodePNG_InfoRaw: here you say what color type of the raw image (the input) has
-*) Settings: you can specify a few settings for the encoder to use
-*) LodePNG_InfoPng: the same LodePNG_InfoPng struct as created by the Decoder. For the encoder,
-with this you specify how you want the PNG (the output) to be.
-
-Some of the parameters described below may be inside the sub-struct "LodePNG_InfoColor color".
-In the C and C++ version, when using Info structs outside of the decoder or encoder, you need to use their
-init and cleanup functions, but normally you use the ones in the encoder that are already handled
-in the init and cleanup functions of the decoder itself.
-
-=LodePNG_InfoPng=
-
-The Decoder class stores information about the PNG image in an LodePNG_InfoPng object. With
-the Encoder you can do the opposite: you give it an LodePNG_InfoPng object, and it'll try
-to match the LodePNG_InfoPng you give as close as possible in the PNG it encodes. For
-example in the LodePNG_InfoPng you can specify the color type you want to use, possible
-tEXt chunks you want the PNG to contain, etc... For an explanation of all the
-values in LodePNG_InfoPng see a further section. Not all PNG color types are supported
-by the Encoder.
-
-Note that the encoder will only TRY to match the LodePNG_InfoPng struct you give.
-Some things are ignored by the encoder. The width and height of LodePNG_InfoPng are
-ignored as well, because instead the width and height of the raw image you give
-in the input are used. In fact the encoder currently uses only the following
-settings from it:
--colorType: the ones it supports
--text chunks, that you can add to the LodePNG_InfoPng with "addText"
--the color key, if applicable for the given color type
--the palette, if you encode to a PNG with colorType 3
--the background color: it'll add a bKGD chunk to the PNG if one is given
--the interlaceMethod: None (0) or Adam7 (1)
-
-When encoding to a PNG with colorType 3, the encoder will generate a PLTE chunk.
-If the palette contains any colors for which the alpha channel is not 255 (so
-there are translucent colors in the palette), it'll add a tRNS chunk.
-
-=LodePNG_InfoRaw=
-
-You specify the color type of the raw image that you give to the input here,
-including a possible transparent color key and palette you happen to be using in
-your raw image data.
-
-By default, 32-bit color is assumed, meaning your input has to be in RGBA
-format with 4 bytes (unsigned chars) per pixel.
-
-=Settings=
-
-The following settings are supported (some are in sub-structs):
-*) autoLeaveOutAlphaChannel: when this option is enabled, when you specify a PNG
-color type with alpha channel (not to be confused with the color type of the raw
-image you specify!!), but the encoder detects that all pixels of the given image
-are opaque, then it'll automatically use the corresponding type without alpha
-channel, resulting in a smaller PNG image.
-*) btype: the block type for LZ77. 0 = uncompressed, 1 = fixed huffman tree, 2 = dynamic huffman tree (best compression)
-*) useLZ77: whether or not to use LZ77 for compressed block types
-*) windowSize: the window size used by the LZ77 encoder (1 - 32768)
-*) force_palette: if colorType is 2 or 6, you can make the encoder write a PLTE
- chunk if force_palette is true. This can used as suggested palette to convert
- to by viewers that don't support more than 256 colors (if those still exist)
-*) add_id: add text chunk "Encoder: LodePNG <version>" to the image.
-*) text_compression: default 0. If 1, it'll store texts as zTXt instead of tEXt chunks.
- zTXt chunks use zlib compression on the text. This gives a smaller result on
- large texts but a larger result on small texts (such as a single program name).
- It's all tEXt or all zTXt though, there's no separate setting per text yet.
-
-
-7. color conversions
---------------------
-
-For trickier usage of LodePNG, you need to understand about PNG color types and
-about how and when LodePNG uses the settings in LodePNG_InfoPng, LodePNG_InfoRaw and Settings.
-
-=PNG color types=
-
-A PNG image can have many color types, ranging from 1-bit color to 64-bit color,
-as well as palettized color modes. After the zlib decompression and unfiltering
-in the PNG image is done, the raw pixel data will have that color type and thus
-a certain amount of bits per pixel. If you want the output raw image after
-decoding to have another color type, a conversion is done by LodePNG.
-
-The PNG specification mentions the following color types:
-
-0: greyscale, bit depths 1, 2, 4, 8, 16
-2: RGB, bit depths 8 and 16
-3: palette, bit depths 1, 2, 4 and 8
-4: greyscale with alpha, bit depths 8 and 16
-6: RGBA, bit depths 8 and 16
-
-Bit depth is the amount of bits per color channel.
-
-=Default Behaviour of LodePNG=
-
-By default, the Decoder will convert the data from the PNG to 32-bit RGBA color,
-no matter what color type the PNG has, so that the result can be used directly
-as a texture in OpenGL etc... without worries about what color type the original
-image has.
-
-The Encoder assumes by default that the raw input you give it is a 32-bit RGBA
-buffer and will store the PNG as either 32 bit or 24 bit depending on whether
-or not any translucent pixels were detected in it.
-
-To get the default behaviour, don't change the values of LodePNG_InfoRaw and LodePNG_InfoPng of
-the encoder, and don't change the values of LodePNG_InfoRaw of the decoder.
-
-=Color Conversions=
-
-As explained in the sections about the Encoder and Decoder, you can specify
-color types and bit depths in LodePNG_InfoPng and LodePNG_InfoRaw, to change the default behaviour
-explained above. (for the Decoder you can only specify the LodePNG_InfoRaw, because the
-LodePNG_InfoPng contains what the PNG file has).
-
-To avoid some confusion:
--the Decoder converts from PNG to raw image
--the Encoder converts from raw image to PNG
--the color type and bit depth in LodePNG_InfoRaw, are those of the raw image
--the color type and bit depth in LodePNG_InfoPng, are those of the PNG
--if the color type of the LodePNG_InfoRaw and PNG image aren't the same, a conversion
-between the color types is done if the color types are supported
-
-Supported color types:
--It's possible to load PNGs from any colortype and to save PNGs of any colorType.
--Both encoder and decoder use the same converter. So both encoder and decoder
-suport the same color types at the input and the output. So the decoder supports
-any type of PNG image and can convert it to certain types of raw image, while the
-encoder supports any type of raw data but only certain color types for the output PNG.
--The converter can convert from _any_ input color type, to 24-bit RGB or 32-bit RGBA
--The converter can convert from greyscale input color type, to 8-bit greyscale or greyscale with alpha
--If both color types are the same, conversion from anything to anything is possible
--Color types that are invalid according to the PNG specification are not allowed
--When converting from a type with alpha channel to one without, the alpha channel information is discarded
--When converting from a type without alpha channel to one with, the result will be opaque except pixels that have the same color as the color key of the input if one was given
--When converting from 16-bit bitDepth to 8-bit bitDepth, the 16-bit precision information is lost, only the most significant byte is kept
--Converting from color to greyscale is not supported on purpose: choosing what kind of color to greyscale conversion to do is not a decision a PNG codec should make
--Converting from/to a palette type, only keeps the indices, it ignores the colors defined in the palette
-
-No conversion needed...:
--If the color type of the PNG image and raw image are the same, then no
-conversion is done, and all color types are supported.
--In the encoder, you can make it save a PNG with any color by giving the
-LodePNG_InfoRaw and LodePNG_InfoPng the same color type.
--In the decoder, you can make it store the pixel data in the same color type
-as the PNG has, by setting the color_convert setting to false. Settings in
-infoRaw are then ignored.
-
-The function LodePNG_convert does this, which is available in the interface but
-normally isn't needed since the encoder and decoder already call it.
-
-=More Notes=
-
-In the PNG file format, if a less than 8-bit per pixel color type is used and the scanlines
-have a bit amount that isn't a multiple of 8, then padding bits are used so that each
-scanline starts at a fresh byte.
-However: The input image you give to the encoder, and the output image you get from the decoder
-will NOT have these padding bits in that case, e.g. in the case of a 1-bit image with a width
-of 7 pixels, the first pixel of the second scanline will the the 8th bit of the first byte,
-not the first bit of a new byte.
-
-8. info values
---------------
-
-Both the encoder and decoder use a variable of type LodePNG_InfoPng and LodePNG_InfoRaw, which
-both also contain a LodePNG_InfoColor. Here's a list of each of the values stored in them:
-
-*) info from the PNG header (IHDR chunk):
-
-width: width of the image in pixels
-height: height of the image in pixels
-colorType: color type of the original PNG file
-bitDepth: bits per sample
-compressionMethod: compression method of the original file. Always 0.
-filterMethod: filter method of the original file. Always 0.
-interlaceMethod: interlace method of the original file. 0 is no interlace, 1 is adam7 interlace.
-
-Note: width and height are only used as information of a decoded PNG image. When encoding one, you don't have
-to specify width and height in an LodePNG_Info struct, but you give them as parameters of the encode function.
-The rest of the LodePNG_Info struct IS used by the encoder though!
-
-*) palette:
-
-This is a dynamically allocated unsigned char array with the colors of the palette. The value palettesize
-indicates the amount of colors in the palette. The allocated size of the buffer is 4 * palettesize bytes,
-because there are 4 values per color: R, G, B and A. Even if less color channels are used, the palette
-is always in RGBA format, in the order RGBARGBARGBA.....
-
-When encoding a PNG, to store your colors in the palette of the LodePNG_InfoRaw, first use
-LodePNG_InfoColor_clearPalette, then for each color use LodePNG_InfoColor_addPalette.
-In the C++ version the Encoder class also has the above functions available directly in its interface.
-
-Note that the palette information from the tRNS chunk is also already included in this palette vector.
-
-If you encode an image with palette, don't forget that you have to set the alpha channels (A) of the palette
-too, set them to 255 for an opaque palette. If you leave them at zero, the image will be encoded as
-fully invisible. This both for the palette in the infoRaw and the infoPng if the png is to have a palette.
-
-*) transparent color key
-
-key_defined: is a transparent color key given?
-key_r: red/greyscale component of color key
-key_g: green component of color key
-key_b: blue component of color key
-
-For greyscale PNGs, r, g and b will all 3 be set to the same.
-
-This color is 8-bit for 8-bit PNGs, 16-bit for 16-bit per channel PNGs.
-
-*) suggested background color
-
-background_defined: is a suggested background color given?
-background_r: red component of sugg. background color
-background_g: green component of sugg. background color
-background_b: blue component of sugg. background color
-
-This color is 8-bit for 8-bit PNGs, 16-bit for 16-bit PNGs
-
-For greyscale PNGs, r, g and b will all 3 be set to the same. When encoding
-the encoder writes the red one away.
-For palette PNGs: When decoding, the RGB value will be stored, no a palette
-index. But when encoding, specify the index of the palette in background_r,
-the other two are then ignored.
-
-The decoder pretty much ignores this background color, after all if you make a
-PNG translucent normally you intend it to be used against any background, on
-websites, as translucent textures in games, ... But you can get the color this
-way if needed.
-
-*) text and itext
-
-Non-international text:
-
--text.keys: a char** buffer containing the keywords (see below)
--text.strings: a char** buffer containing the texts (see below)
--text.num: the amount of texts in the above char** buffers (there may be more texts in itext)
--LodePNG_InfoText_clearText: use this to clear the texts again after you filled them in
--LodePNG_InfoText_addText: this function is used to push back a keyword and text
-
-International text: This is stored in separate arrays! The sum text.num and itext.num is the real amount of texts.
-
--itext.keys: keyword in English
--itext.langtags: ISO 639 letter code for the language
--itext.transkeys: keyword in this language
--itext.strings: the text in this language, in UTF-8
--itext.num: the amount of international texts in this PNG
--LodePNG_InfoIText_clearText: use this to clear the itexts again after you filled them in
--LodePNG_InfoIText_addText: this function is used to push back all 4 parts of an itext
-
-Don't allocate these text buffers yourself. Use the init/cleanup functions
-correctly and use addText and clearText.
-
-In the C++ version the Encoder class also has the above functions available directly in its interface.
-The char** buffers are used like the argv parameter of a main() function, and (i)text.num takes the role
-of argc.
-
-In a text, there must be as much keys as strings because they always form pairs. In an itext,
-there must always be as much keys, langtags, transkeys and strings.
-
-They keyword of text chunks gives a short description what the actual text
-represents. There are a few standard standard keywords recognised
-by many programs: Title, Author, Description, Copyright, Creation Time,
-Software, Disclaimer, Warning, Source, Comment. It's allowed to use other keys.
-
-The keyword is minimum 1 character and maximum 79 characters long. It's
-discouraged to use a single line length longer than 79 characters for texts.
-
-*) additional color info
-
-These functions are available with longer names in the C version, and directly
-in the Decoder's interface in the C++ version.
-
-getBpp(): bits per pixel of the PNG image
-getChannels(): amount of color channels of the PNG image
-isGreyscaleType(): its color type 0 or 4
-isAlphaType(): its color type 2 or 6
-
-These values are calculated out of color type and bit depth of InfoColor.
-
-The difference between bits per pixel and bit depth is that bit depth is the
-number of bits per color channel, while a pixel can have multiple channels.
-
-*) pHYs chunk (image dimensions)
-
-phys_defined: if 0, there is no pHYs chunk and the values are undefined, if 1 else there is one
-phys_x: pixels per unit in x direction
-phys_y: pixels per unit in y direction
-phys_unit: the unit, 0 is no unit (x and y only give the ratio), 1 is metre
-
-*) tIME chunk (modification time)
-
-time_defined: if 0, there is no tIME chunk and the values are undefined, if 1 there is one
-time: this struct contains year as a 2-byte number (0-65535), month, day, hour, minute,
-second as 1-byte numbers that must be in the correct range
-
-Note: to make the encoder add a time chunk, set time_defined to 1 and fill in
-the correct values in all the time parameters, LodePNG will not fill the current
-time in these values itself, all it does is copy them over into the chunk bytes.
-
-
-9. error values
----------------
-
-The meanings of the LodePNG error values:
-
-*) 0: no error, everything went ok
-*) 1: the Encoder/Decoder has done nothing yet, so error checking makes no sense yet
-*) 10: while huffman decoding: end of input memory reached without endcode
-*) 11: while huffman decoding: error in code tree made it jump outside of tree
-*) 13: problem while processing dynamic deflate block
-*) 14: problem while processing dynamic deflate block
-*) 15: problem while processing dynamic deflate block
-*) 16: unexisting code while processing dynamic deflate block
-*) 17: while inflating: end of out buffer memory reached
-*) 18: while inflating: invalid distance code
-*) 19: while inflating: end of out buffer memory reached
-*) 20: invalid deflate block BTYPE encountered while decoding
-*) 21: NLEN is not ones complement of LEN in a deflate block
-*) 22: while inflating: end of out buffer memory reached.
- This can happen if the inflated deflate data is longer than the amount of bytes required to fill up
- all the pixels of the image, given the color depth and image dimensions. Something that doesn't
- happen in a normal, well encoded, PNG image.
-*) 23: while inflating: end of in buffer memory reached
-*) 24: invalid FCHECK in zlib header
-*) 25: invalid compression method in zlib header
-*) 26: FDICT encountered in zlib header while it's not used for PNG
-*) 27: PNG file is smaller than a PNG header
-*) 28: incorrect PNG signature (the first 8 bytes of the PNG file)
- Maybe it's not a PNG, or a PNG file that got corrupted so that the header indicates the corruption.
-*) 29: first chunk is not the header chunk
-*) 30: chunk length too large, chunk broken off at end of file
-*) 31: illegal PNG color type or bpp
-*) 32: illegal PNG compression method
-*) 33: illegal PNG filter method
-*) 34: illegal PNG interlace method
-*) 35: chunk length of a chunk is too large or the chunk too small
-*) 36: illegal PNG filter type encountered
-*) 37: illegal bit depth for this color type given
-*) 38: the palette is too big (more than 256 colors)
-*) 39: more palette alpha values given in tRNS, than there are colors in the palette
-*) 40: tRNS chunk has wrong size for greyscale image
-*) 41: tRNS chunk has wrong size for RGB image
-*) 42: tRNS chunk appeared while it was not allowed for this color type
-*) 43: bKGD chunk has wrong size for palette image
-*) 44: bKGD chunk has wrong size for greyscale image
-*) 45: bKGD chunk has wrong size for RGB image
-*) 46: value encountered in indexed image is larger than the palette size (bitdepth == 8). Is the palette too small?
-*) 47: value encountered in indexed image is larger than the palette size (bitdepth < 8). Is the palette too small?
-*) 48: the input data is empty. Maybe a PNG file you tried to load doesn't exist or is in the wrong path.
-*) 49: jumped past memory while generating dynamic huffman tree
-*) 50: jumped past memory while generating dynamic huffman tree
-*) 51: jumped past memory while inflating huffman block
-*) 52: jumped past memory while inflating
-*) 53: size of zlib data too small
-*) 55: jumped past tree while generating huffman tree, this could be when the
- tree will have more leaves than symbols after generating it out of the
- given lengths. They call this an oversubscribed dynamic bit lengths tree in zlib.
-*) 56: given output image colorType or bitDepth not supported for color conversion
-*) 57: invalid CRC encountered (checking CRC can be disabled)
-*) 58: invalid ADLER32 encountered (checking ADLER32 can be disabled)
-*) 59: conversion to unexisting or unsupported color type or bit depth requested by encoder or decoder
-*) 60: invalid window size given in the settings of the encoder (must be 0-32768)
-*) 61: invalid BTYPE given in the settings of the encoder (only 0, 1 and 2 are allowed)
-*) 62: conversion from non-greyscale color to greyscale color requested by encoder or decoder. LodePNG
- leaves the choice of RGB to greyscale conversion formula to the user.
-*) 63: length of a chunk too long, max allowed for PNG is 2147483647 bytes per chunk (2^31-1)
-*) 64: the length of the "end" symbol 256 in the Huffman tree is 0, resulting in the inability of a deflated
- block to ever contain an end code. It must be at least 1.
-*) 66: the length of a text chunk keyword given to the encoder is longer than the maximum 79 bytes.
-*) 67: the length of a text chunk keyword given to the encoder is smaller than the minimum 1 byte.
-*) 68: tried to encode a PLTE chunk with a palette that has less than 1 or more than 256 colors
-*) 69: unknown chunk type with "critical" flag encountered by the decoder
-*) 71: unexisting interlace mode given to encoder (must be 0 or 1)
-*) 72: while decoding, unexisting compression method encountering in zTXt or iTXt chunk (it must be 0)
-*) 73: invalid tIME chunk size
-*) 74: invalid pHYs chunk size
-*) 75: no null termination char found while decoding any kind of text chunk, or wrong length
-*) 76: iTXt chunk too short to contain required bytes
-*) 77: integer overflow in buffer size happened somewhere
-*) 78: file doesn't exist or couldn't be opened for reading
-*) 79: file couldn't be opened for writing
-*) 80: tried creating a tree for 0 symbols
-*) 9900-9999: out of memory while allocating chunk of memory somewhere
-
-
-10. file IO
------------
-
-For cases where you want to load the PNG image from a file, you can use your own
-file loading code, or the file loading and saving functions provided with
-LodePNG. These use the same unsigned char format used by the Decoder and Encoder.
-
-The loadFile function fills the given buffer up with the file from harddisk
-with the given name.
-
-The saveFile function saves the contents of the given buffer to the file
-with given name. Warning: this overwrites the contents that were previously in
-the file if it already existed, without warning.
-
-Note that you don't have to decode a PNG image from a file, you can as well
-retrieve the buffer another way in your code, because the decode function takes
-a buffer as parameter, not a filename.
-
-Both C and C++ versions of the loadFile and saveFile functions are available.
-For the C version of loadFile, you need to free() the buffer after use. The
-C++ versions use std::vectors so they clean themselves automatically.
-
-
-11. chunks and PNG editing
---------------------------
-
-If you want to add extra chunks to a PNG you encode, or use LodePNG for a PNG
-editor that should follow the rules about handling of unknown chunks, or if you
-program is able to read other types of chunks than the ones handled by LodePNG,
-then that's possible with the chunk functions of LodePNG.
-
-A PNG chunk has the following layout:
-
-4 bytes length
-4 bytes type name
-length bytes data
-4 bytes CRC
-
-
-11.1 iterating through chunks
------------------------------
-
-If you have a buffer containing the PNG image data, then the first chunk (the
-IHDR chunk) starts at byte number 8 of that buffer. The first 8 bytes are the
-signature of the PNG and are not part of a chunk. But if you start at byte 8
-then you have a chunk, and can check the following things of it.
-
-NOTE: none of these functions check for memory buffer boundaries. To avoid
-exploits, always make sure the buffer contains all the data of the chunks.
-When using LodePNG_chunk_next, make sure the returned value is within the
-allocated memory.
-
-unsigned LodePNG_chunk_length(const unsigned char* chunk):
-
-Get the length of the chunk's data. The total chunk length is this length + 12.
-
-void LodePNG_chunk_type(char type[5], const unsigned char* chunk):
-unsigned char LodePNG_chunk_type_equals(const unsigned char* chunk, const char* type):
-
-Get the type of the chunk or compare if it's a certain type
-
-unsigned char LodePNG_chunk_critical(const unsigned char* chunk):
-unsigned char LodePNG_chunk_private(const unsigned char* chunk):
-unsigned char LodePNG_chunk_safetocopy(const unsigned char* chunk):
-
-Check if the chunk is critical in the PNG standard (only IHDR, PLTE, IDAT and IEND are).
-Check if the chunk is private (public chunks are part of the standard, private ones not).
-Check if the chunk is safe to copy. If it's not, then, when modifying data in a critical
-chunk, unsafe to copy chunks of the old image may NOT be saved in the new one if your
-program doesn't handle that type of unknown chunk.
-
-unsigned char* LodePNG_chunk_data(unsigned char* chunk):
-const unsigned char* LodePNG_chunk_data_const(const unsigned char* chunk):
-
-Get a pointer to the start of the data of the chunk.
-
-unsigned LodePNG_chunk_check_crc(const unsigned char* chunk):
-void LodePNG_chunk_generate_crc(unsigned char* chunk):
-
-Check if the crc is correct or generate a correct one.
-
-unsigned char* LodePNG_chunk_next(unsigned char* chunk):
-const unsigned char* LodePNG_chunk_next_const(const unsigned char* chunk):
-
-Iterate to the next chunk. This works if you have a buffer with consecutive chunks. Note that these
-functions do no boundary checking of the allocated data whatsoever, so make sure there is enough
-data available in the buffer to be able to go to the next chunk.
-
-unsigned LodePNG_append_chunk(unsigned char** out, size_t* outlength, const unsigned char* chunk):
-unsigned LodePNG_create_chunk(unsigned char** out, size_t* outlength, unsigned length, const char* type, const unsigned char* data):
-
-These functions are used to create new chunks that are appended to the data in *out that has
-length *outlength. The append function appends an existing chunk to the new data. The create
-function creates a new chunk with the given parameters and appends it. Type is the 4-letter
-name of the chunk.
-
-
-11.2 chunks in infoPng
-----------------------
-
-The LodePNG_InfoPng struct contains a struct LodePNG_UnknownChunks in it. This
-struct has 3 buffers (each with size) to contain 3 types of unknown chunks:
-the ones that come before the PLTE chunk, the ones that come between the PLTE
-and the IDAT chunks, and the ones that come after the IDAT chunks.
-It's necessary to make the distionction between these 3 cases because the PNG
-standard forces to keep the ordering of unknown chunks compared to the critical
-chunks, but does not force any other ordering rules.
-
-infoPng.unknown_chunks.data[0] is the chunks before PLTE
-infoPng.unknown_chunks.data[1] is the chunks after PLTE, before IDAT
-infoPng.unknown_chunks.data[2] is the chunks after IDAT
-
-The chunks in these 3 buffers can be iterated through and read by using the same
-way described in the previous subchapter.
-
-When using the decoder to decode a PNG, you can make it store all unknown chunks
-if you set the option settings.rememberUnknownChunks to 1. By default, this option
-is off and is 0.
-
-The encoder will always encode unknown chunks that are stored in the infoPng. If
-you need it to add a particular chunk that isn't known by LodePNG, you can use
-LodePNG_append_chunk or LodePNG_create_chunk to the chunk data in
-infoPng.unknown_chunks.data[x].
-
-Chunks that are known by LodePNG should not be added in that way. E.g. to make
-LodePNG add a bKGD chunk, set background_defined to true and add the correct
-parameters there and LodePNG will generate the chunk.
-
-
-12. compiler support
---------------------
-
-No libraries other than the current standard C library are needed to compile
-LodePNG. For the C++ version, only the standard C++ library is needed on top.
-Add the files lodepng.c(pp) and lodepng.h to your project, include
-lodepng.h where needed, and your program can read/write PNG files.
-
-Use optimization! For both the encoder and decoder, compiling with the best
-optimizations makes a large difference.
-
-Make sure that LodePNG is compiled with the same compiler of the same version
-and with the same settings as the rest of the program, or the interfaces with
-std::vectors and std::strings in C++ can be incompatible resulting in bad things.
-
-CHAR_BITS must be 8 or higher, because LodePNG uses unsigned chars for octets.
-
-*) gcc and g++
-
-LodePNG is developed in gcc so this compiler is natively supported. It gives no
-warnings with compiler options "-Wall -Wextra -pedantic -ansi", with gcc and g++
-version 4.2.2 on Linux.
-
-*) Mingw and Bloodshed DevC++
-
-The Mingw compiler (a port of gcc) used by Bloodshed DevC++ for Windows is fully
-supported by LodePNG.
-
-*) Visual Studio 2005 and Visual C++ 2005 Express Edition
-
-Versions 20070604 up to 20080107 have been tested on VS2005 and work. There are no
-warnings, except two warnings about 'fopen' being deprecated. 'fopen' is a function
-required by the C standard, so this warning is the fault of VS2005, it's nice of
-them to enforce secure code, however the multiplatform LodePNG can't follow their
-non-standard extensions. LodePNG is fully ISO C90 compliant.
-
-If you're using LodePNG in VS2005 and don't want to see the deprecated warnings,
-put this on top of lodepng.h before the inclusions: #define _CRT_SECURE_NO_DEPRECATE
-
-*) Visual Studio 6.0
-
-The C++ version of LodePNG was not supported by Visual Studio 6.0 because Visual
-Studio 6.0 doesn't follow the C++ standard and implements it incorrectly.
-The current C version of LodePNG has not been tested in VS6 but may work now.
-
-*) Comeau C/C++
-
-Vesion 20070107 compiles without problems on the Comeau C/C++ Online Test Drive
-at http://www.comeaucomputing.com/tryitout in both C90 and C++ mode.
-
-*) Compilers on Macintosh
-
-I'd love to support Macintosh but don't have one available to test it on.
-If it doesn't work with your compiler, maybe it can be gotten to work with the
-gcc compiler for Macintosh. Someone reported that it doesn't work well at all
-for Macintosh. All information on attempts to get it to work on Mac is welcome.
-
-*) Other Compilers
-
-If you encounter problems on other compilers, I'm happy to help out make LodePNG
-support the compiler if it supports the ISO C90 and C++ standard well enough. If
-the required modification to support the compiler requires using non standard or
-lesser C/C++ code or headers, I won't support it.
-
-
-13. examples
-------------
-
-This decoder and encoder example show the most basic usage of LodePNG (using the
-classes, not the simple functions, which would be trivial)
-
-More complex examples can be found in:
--lodepng_examples.c: 9 different examples in C, such as showing the image with SDL, ...
--lodepng_examples.cpp: the exact same examples in C++ using the C++ wrapper of LodePNG
-
-
-13.1. decoder C++ example
--------------------------
-
-////////////////////////////////////////////////////////////////////////////////
-#include "lodepng.h"
-#include <iostream>
-
-int main(int argc, char *argv[])
-{
- const char* filename = argc > 1 ? argv[1] : "test.png";
-
- //load and decode
- std::vector<unsigned char> buffer, image;
- LodePNG::loadFile(buffer, filename); //load the image file with given filename
- LodePNG::Decoder decoder;
- decoder.decode(image, buffer.size() ? &buffer[0] : 0, (unsigned)buffer.size()); //decode the png
-
- //if there's an error, display it
- if(decoder.hasError()) std::cout << "error: " << decoder.getError() << std::endl;
-
- //the pixels are now in the vector "image", use it as texture, draw it, ...
-}
-
-//alternative version using the "simple" function
-int main(int argc, char *argv[])
-{
- const char* filename = argc > 1 ? argv[1] : "test.png";
-
- //load and decode
- std::vector<unsigned char> image;
- unsigned w, h;
- unsigned error = LodePNG::decode(image, w, h, filename);
-
- //if there's an error, display it
- if(error != 0) std::cout << "error: " << error << std::endl;
-
- //the pixels are now in the vector "image", use it as texture, draw it, ...
-}
-////////////////////////////////////////////////////////////////////////////////
-
-
-13.2 encoder C++ example
-------------------------
-
-////////////////////////////////////////////////////////////////////////////////
-#include "lodepng.h"
-#include <iostream>
-
-int main(int argc, char *argv[])
-{
- //check if user gave a filename
- if(argc <= 1)
- {
- std::cout << "please provide a filename to save to\n";
- return 0;
- }
-
- //generate some image
- std::vector<unsigned char> image;
- image.resize(512 * 512 * 4);
- for(unsigned y = 0; y < 512; y++)
- for(unsigned x = 0; x < 512; x++)
- {
- image[4 * 512 * y + 4 * x + 0] = 255 * !(x & y);
- image[4 * 512 * y + 4 * x + 1] = x ^ y;
- image[4 * 512 * y + 4 * x + 2] = x | y;
- image[4 * 512 * y + 4 * x + 3] = 255;
- }
-
- //encode and save
- std::vector<unsigned char> buffer;
- LodePNG::Encoder encoder;
- encoder.encode(buffer, image, 512, 512);
- LodePNG::saveFile(buffer, argv[1]);
-
- //the same as the 4 lines of code above, but in 1 call:
- //LodePNG::encode(argv[1], image, 512, 512);
-}
-////////////////////////////////////////////////////////////////////////////////
-
-
-13.3 Decoder C example
-----------------------
-
-This example loads the PNG in 1 function call
-
-#include "lodepng.h"
-
-int main(int argc, char *argv[])
-{
- unsigned error;
- unsigned char* image;
- size_t w, h;
-
- if(argc <= 1) return 0;
-
- error = LodePNG_decode3(&image, &w, &h, filename);
-
- free(image);
-}
-
-
-14. LodeZlib
-------------
-
-Also available in the interface is LodeZlib. Both C and C++ versions of these
-functions are available. The interface is similar to that of the "simple" PNG
-encoding and decoding functions.
-
-LodeZlib can be used to zlib compress and decompress a buffer. It cannot be
-used to create gzip files however. Also, it only supports the part of zlib
-that is required for PNG, it does not support compression and decompression
-with dictionaries.
-
-
-15. changes
------------
-
-The version number of LodePNG is the date of the change given in the format
-yyyymmdd.
-
-Some changes aren't backwards compatible. Those are indicated with a (!)
-symbol.
-
-*) 02 sep 2008: fixed bug where it could create empty tree that linux apps could
- read by ignoring the problem but windows apps couldn't.
-*) 06 jun 2008: added more error checks for out of memory cases.
-*) 26 apr 2008: added a few more checks here and there to ensure more safety.
-*) 06 mar 2008: crash with encoding of strings fixed
-*) 02 feb 2008: support for international text chunks added (iTXt)
-*) 23 jan 2008: small cleanups, and #defines to divide code in sections
-*) 20 jan 2008: support for unknown chunks allowing using LodePNG for an editor.
-*) 18 jan 2008: support for tIME and pHYs chunks added to encoder and decoder.
-*) 17 jan 2008: ability to encode and decode compressed zTXt chunks added
- Also vareous fixes, such as in the deflate and the padding bits code.
-*) 13 jan 2008: Added ability to encode Adam7-interlaced images. Improved
- filtering code of encoder.
-*) 07 jan 2008: (!) changed LodePNG to use ISO C90 instead of C++. A
- C++ wrapper around this provides an interface almost identical to before.
- Having LodePNG be pure ISO C90 makes it more portable. The C and C++ code
- are together in these files but it works both for C and C++ compilers.
-*) 29 dec 2007: (!) changed most integer types to unsigned int + other tweaks
-*) 30 aug 2007: bug fixed which makes this Borland C++ compatible
-*) 09 aug 2007: some VS2005 warnings removed again
-*) 21 jul 2007: deflate code placed in new namespace separate from zlib code
-*) 08 jun 2007: fixed bug with 2- and 4-bit color, and small interlaced images
-*) 04 jun 2007: improved support for Visual Studio 2005: crash with accessing
- invalid std::vector element [0] fixed, and level 3 and 4 warnings removed
-*) 02 jun 2007: made the encoder add a tag with version by default
-*) 27 may 2007: zlib and png code separated (but still in the same file),
- simple encoder/decoder functions added for more simple usage cases
-*) 19 may 2007: minor fixes, some code cleaning, new error added (error 69),
- moved some examples from here to lodepng_examples.cpp
-*) 12 may 2007: palette decoding bug fixed
-*) 24 apr 2007: changed the license from BSD to the zlib license
-*) 11 mar 2007: very simple addition: ability to encode bKGD chunks.
-*) 04 mar 2007: (!) tEXt chunk related fixes, and support for encoding
- palettized PNG images. Plus little interface change with palette and texts.
-*) 03 mar 2007: Made it encode dynamic Huffman shorter with repeat codes.
- Fixed a bug where the end code of a block had length 0 in the Huffman tree.
-*) 26 feb 2007: Huffman compression with dynamic trees (BTYPE 2) now implemented
- and supported by the encoder, resulting in smaller PNGs at the output.
-*) 27 jan 2007: Made the Adler-32 test faster so that a timewaste is gone.
-*) 24 jan 2007: gave encoder an error interface. Added color conversion from any
- greyscale type to 8-bit greyscale with or without alpha.
-*) 21 jan 2007: (!) Totally changed the interface. It allows more color types
- to convert to and is more uniform. See the manual for how it works now.
-*) 07 jan 2007: Some cleanup & fixes, and a few changes over the last days:
- encode/decode custom tEXt chunks, separate classes for zlib & deflate, and
- at last made the decoder give errors for incorrect Adler32 or Crc.
-*) 01 jan 2007: Fixed bug with encoding PNGs with less than 8 bits per channel.
-*) 29 dec 2006: Added support for encoding images without alpha channel, and
- cleaned out code as well as making certain parts faster.
-*) 28 dec 2006: Added "Settings" to the encoder.
-*) 26 dec 2006: The encoder now does LZ77 encoding and produces much smaller files now.
- Removed some code duplication in the decoder. Fixed little bug in an example.
-*) 09 dec 2006: (!) Placed output parameters of public functions as first parameter.
- Fixed a bug of the decoder with 16-bit per color.
-*) 15 okt 2006: Changed documentation structure
-*) 09 okt 2006: Encoder class added. It encodes a valid PNG image from the
- given image buffer, however for now it's not compressed.
-*) 08 sep 2006: (!) Changed to interface with a Decoder class
-*) 30 jul 2006: (!) LodePNG_InfoPng , width and height are now retrieved in different
- way. Renamed decodePNG to decodePNGGeneric.
-*) 29 jul 2006: (!) Changed the interface: image info is now returned as a
- struct of type LodePNG::LodePNG_Info, instead of a vector, which was a bit clumsy.
-*) 28 jul 2006: Cleaned the code and added new error checks.
- Corrected terminology "deflate" into "inflate".
-*) 23 jun 2006: Added SDL example in the documentation in the header, this
- example allows easy debugging by displaying the PNG and its transparency.
-*) 22 jun 2006: (!) Changed way to obtain error value. Added
- loadFile function for convenience. Made decodePNG32 faster.
-*) 21 jun 2006: (!) Changed type of info vector to unsigned.
- Changed position of palette in info vector. Fixed an important bug that
- happened on PNGs with an uncompressed block.
-*) 16 jun 2006: Internally changed unsigned into unsigned where
- needed, and performed some optimizations.
-*) 07 jun 2006: (!) Renamed functions to decodePNG and placed them
- in LodePNG namespace. Changed the order of the parameters. Rewrote the
- documentation in the header. Renamed files to lodepng.cpp and lodepng.h
-*) 22 apr 2006: Optimized and improved some code
-*) 07 sep 2005: (!) Changed to std::vector interface
-*) 12 aug 2005: Initial release
-
-
-16. contact information
------------------------
-
-Feel free to contact me with suggestions, problems, comments, ... concerning
-LodePNG. If you encounter a PNG image that doesn't work properly with this
-decoder, feel free to send it and I'll use it to find and fix the problem.
-
-My email address is (puzzle the account and domain together with an @ symbol):
-Domain: gmail dot com.
-Account: lode dot vandevenne.
-
-
-Copyright (c) 2005-2008 Lode Vandevenne
-*/
diff --git a/trunk/src/logos.cpp b/trunk/src/logos.cpp
deleted file mode 100644
index afc93cb..0000000
--- a/trunk/src/logos.cpp
+++ /dev/null
@@ -1,1986 +0,0 @@
-/******************************************************************************
- *
- *
- *
- * Copyright (C) 1997-2012 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.
- *
- */
-
-#include <stdio.h>
-
-#include "qtbc.h"
-#include <qfile.h>
-#include <qdir.h>
-
-// Stripped version of FreeSans.ttf part of FreeFonts package,
-// see http://www.nongnu.org/freefont for more info
-unsigned char FreeSans_ttf[] = {
- 0x00, 0x01, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x80, 0x00, 0x03, 0x00, 0x70,
- 0x47, 0x44, 0x45, 0x46, 0x01, 0x0a, 0x00, 0xe3, 0x00, 0x00, 0x48, 0x28,
- 0x00, 0x00, 0x00, 0x2a, 0x47, 0x50, 0x4f, 0x53, 0x9d, 0x1a, 0x99, 0x8a,
- 0x00, 0x00, 0x49, 0x50, 0x00, 0x00, 0x10, 0x42, 0x47, 0x53, 0x55, 0x42,
- 0xa8, 0x85, 0x92, 0x0c, 0x00, 0x00, 0x48, 0x54, 0x00, 0x00, 0x00, 0xfc,
- 0x4f, 0x53, 0x2f, 0x32, 0x67, 0x3f, 0xcf, 0x10, 0x00, 0x00, 0x01, 0x78,
- 0x00, 0x00, 0x00, 0x56, 0x63, 0x6d, 0x61, 0x70, 0xe6, 0xd7, 0x91, 0x3d,
- 0x00, 0x00, 0x04, 0xec, 0x00, 0x00, 0x01, 0x8a, 0x63, 0x76, 0x74, 0x20,
- 0x00, 0x21, 0x02, 0x79, 0x00, 0x00, 0x06, 0x78, 0x00, 0x00, 0x00, 0x04,
- 0x67, 0x61, 0x73, 0x70, 0xff, 0xff, 0x00, 0x03, 0x00, 0x00, 0x48, 0x20,
- 0x00, 0x00, 0x00, 0x08, 0x67, 0x6c, 0x79, 0x66, 0xb3, 0x58, 0xaf, 0x41,
- 0x00, 0x00, 0x08, 0x10, 0x00, 0x00, 0x37, 0xca, 0x68, 0x65, 0x61, 0x64,
- 0xe7, 0x18, 0xbe, 0xac, 0x00, 0x00, 0x00, 0xfc, 0x00, 0x00, 0x00, 0x36,
- 0x68, 0x68, 0x65, 0x61, 0x10, 0xbb, 0x06, 0xf2, 0x00, 0x00, 0x01, 0x34,
- 0x00, 0x00, 0x00, 0x24, 0x68, 0x6d, 0x74, 0x78, 0x55, 0x0d, 0x49, 0xe2,
- 0x00, 0x00, 0x01, 0xd0, 0x00, 0x00, 0x03, 0x1a, 0x6c, 0x6f, 0x63, 0x61,
- 0x1f, 0xdd, 0x2c, 0xb6, 0x00, 0x00, 0x06, 0x7c, 0x00, 0x00, 0x01, 0x94,
- 0x6d, 0x61, 0x78, 0x70, 0x01, 0x16, 0x00, 0xb3, 0x00, 0x00, 0x01, 0x58,
- 0x00, 0x00, 0x00, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x85, 0x1f, 0xf3, 0x73,
- 0x00, 0x00, 0x3f, 0xdc, 0x00, 0x00, 0x06, 0x69, 0x70, 0x6f, 0x73, 0x74,
- 0x46, 0xf5, 0x10, 0xd8, 0x00, 0x00, 0x46, 0x48, 0x00, 0x00, 0x01, 0xd6,
- 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0xc2, 0x8f, 0x00, 0x8a, 0xba, 0xad,
- 0x5f, 0x0f, 0x3c, 0xf5, 0x00, 0x0b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0xc0, 0x44, 0xd8, 0x89, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x44, 0xd8, 0x89,
- 0xff, 0xd3, 0xfe, 0x3d, 0x07, 0x9c, 0x07, 0xd1, 0x00, 0x00, 0x00, 0x08,
- 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00,
- 0x07, 0xd1, 0xfe, 0x3d, 0x01, 0x78, 0x08, 0x1e, 0xff, 0xd3, 0xff, 0xd2,
- 0x07, 0x9c, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc4, 0x00, 0x01, 0x00, 0x00,
- 0x00, 0xc9, 0x00, 0x66, 0x00, 0x05, 0x00, 0x49, 0x00, 0x04, 0x00, 0x02,
- 0x00, 0x00, 0x00, 0x01, 0x00, 0x01, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00,
- 0x00, 0x02, 0x00, 0x01, 0x00, 0x01, 0x03, 0x87, 0x01, 0x90, 0x00, 0x05,
- 0x00, 0x00, 0x05, 0x33, 0x05, 0x99, 0x00, 0x00, 0x03, 0xd7, 0x05, 0x33,
- 0x05, 0x99, 0x00, 0x00, 0x00, 0x00, 0x00, 0x66, 0x02, 0x12, 0x00, 0x00,
- 0x02, 0x0b, 0x05, 0x04, 0x02, 0x02, 0x02, 0x02, 0x02, 0x04, 0x00, 0x00,
- 0x00, 0x27, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x50, 0x66, 0x45, 0x64, 0x00, 0x40, 0x00, 0x0d, 0x02, 0xdc,
- 0x06, 0x66, 0xfe, 0x66, 0x00, 0x00, 0x07, 0xd1, 0x01, 0xc3, 0x80, 0x02,
- 0x00, 0xbf, 0xdf, 0xf7, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x89,
- 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x01, 0xb2, 0x00, 0x00,
- 0x02, 0x39, 0x00, 0x00, 0x02, 0x39, 0x00, 0xfe, 0x02, 0xd7, 0x00, 0x6a,
- 0x04, 0x72, 0x00, 0x1d, 0x04, 0x72, 0x00, 0x44, 0x07, 0x1c, 0x00, 0x3b,
- 0x05, 0x56, 0x00, 0x6a, 0x01, 0x87, 0x00, 0x62, 0x02, 0xa9, 0x00, 0x96,
- 0x02, 0xa9, 0x00, 0x4e, 0x03, 0x1c, 0x00, 0x52, 0x04, 0xac, 0x00, 0x66,
- 0x02, 0x39, 0x00, 0xb2, 0x02, 0xa9, 0x00, 0x5e, 0x02, 0x39, 0x00, 0xb2,
- 0x02, 0x39, 0xff, 0xf0, 0x04, 0x72, 0x00, 0x58, 0x04, 0x72, 0x00, 0xd1,
- 0x04, 0x72, 0x00, 0x46, 0x04, 0x72, 0x00, 0x42, 0x04, 0x72, 0x00, 0x39,
- 0x04, 0x72, 0x00, 0x48, 0x04, 0x72, 0x00, 0x58, 0x04, 0x72, 0x00, 0x5e,
- 0x04, 0x72, 0x00, 0x4c, 0x04, 0x72, 0x00, 0x4e, 0x02, 0x39, 0x00, 0xe1,
- 0x02, 0x39, 0x00, 0xe1, 0x04, 0xac, 0x00, 0x5c, 0x04, 0xac, 0x00, 0x66,
- 0x04, 0xac, 0x00, 0x66, 0x04, 0x72, 0x00, 0x9e, 0x08, 0x1e, 0x00, 0x46,
- 0x05, 0x56, 0x00, 0x23, 0x05, 0x56, 0x00, 0xa2, 0x05, 0xc6, 0x00, 0x62,
- 0x05, 0xc6, 0x00, 0xb6, 0x05, 0x56, 0x00, 0xb8, 0x04, 0xe3, 0x00, 0xb8,
- 0x06, 0x39, 0x00, 0x5a, 0x05, 0xc6, 0x00, 0xaa, 0x02, 0x39, 0x00, 0xcd,
- 0x04, 0x00, 0x00, 0x23, 0x05, 0x56, 0x00, 0xa2, 0x04, 0x72, 0x00, 0xa4,
- 0x06, 0xa9, 0x00, 0x9a, 0x05, 0xc6, 0x00, 0x9c, 0x06, 0x39, 0x00, 0x4e,
- 0x05, 0x56, 0x00, 0xba, 0x06, 0x39, 0x00, 0x4e, 0x05, 0xc6, 0x00, 0xbe,
- 0x05, 0x56, 0x00, 0x62, 0x04, 0xe3, 0x00, 0x2b, 0x05, 0xc6, 0x00, 0xae,
- 0x05, 0x56, 0x00, 0x3d, 0x07, 0x8d, 0x00, 0x2d, 0x05, 0x56, 0x00, 0x2d,
- 0x05, 0x56, 0x00, 0x1b, 0x04, 0xe3, 0x00, 0x39, 0x02, 0x39, 0x00, 0x83,
- 0x02, 0x39, 0xff, 0xf0, 0x02, 0x39, 0x00, 0x2f, 0x03, 0xc0, 0x00, 0x5a,
- 0x04, 0x72, 0xff, 0xd3, 0x02, 0xa9, 0x00, 0x2d, 0x04, 0x72, 0x00, 0x56,
- 0x04, 0x72, 0x00, 0x6f, 0x04, 0x00, 0x00, 0x3f, 0x04, 0x72, 0x00, 0x35,
- 0x04, 0x72, 0x00, 0x52, 0x02, 0x39, 0x00, 0x25, 0x04, 0x72, 0x00, 0x3b,
- 0x04, 0x72, 0x00, 0x8f, 0x01, 0xc6, 0x00, 0x87, 0x01, 0xc6, 0xff, 0xdb,
- 0x04, 0x00, 0x00, 0x77, 0x01, 0xc6, 0x00, 0x8b, 0x06, 0xa9, 0x00, 0x8f,
- 0x04, 0x72, 0x00, 0x8f, 0x04, 0x72, 0x00, 0x4a, 0x04, 0x72, 0x00, 0x6f,
- 0x04, 0x72, 0x00, 0x35, 0x02, 0xa9, 0x00, 0x8d, 0x04, 0x00, 0x00, 0x46,
- 0x02, 0x39, 0x00, 0x1d, 0x04, 0x72, 0x00, 0x85, 0x04, 0x00, 0x00, 0x14,
- 0x05, 0xc6, 0x00, 0x0c, 0x04, 0x00, 0x00, 0x23, 0x04, 0x00, 0x00, 0x29,
- 0x04, 0x00, 0x00, 0x3f, 0x02, 0xac, 0x00, 0x58, 0x02, 0x14, 0x00, 0xcd,
- 0x02, 0xac, 0x00, 0x3b, 0x04, 0xac, 0x00, 0x9a, 0x02, 0x39, 0x00, 0x00,
- 0x02, 0x39, 0x00, 0xfa, 0x04, 0x72, 0x00, 0x6a, 0x04, 0x72, 0x00, 0x35,
- 0x04, 0x72, 0x00, 0x89, 0x04, 0x72, 0x00, 0x17, 0x02, 0x14, 0x00, 0xcd,
- 0x04, 0x72, 0x00, 0x58, 0x02, 0xa9, 0x00, 0x3d, 0x05, 0xe5, 0xff, 0xe5,
- 0x02, 0xf5, 0x00, 0x4c, 0x04, 0x72, 0x00, 0xc9, 0x04, 0xac, 0x00, 0x52,
- 0x02, 0xa9, 0x00, 0x5e, 0x05, 0xe5, 0xff, 0xe5, 0x02, 0xa9, 0x00, 0x39,
- 0x04, 0xd9, 0x01, 0x35, 0x04, 0xac, 0x00, 0x66, 0x02, 0xce, 0x00, 0x27,
- 0x02, 0xce, 0x00, 0x21, 0x02, 0xa9, 0x00, 0xbc, 0x04, 0x72, 0x00, 0x85,
- 0x04, 0x4b, 0x00, 0x62, 0x02, 0x39, 0x00, 0xb2, 0x02, 0xa9, 0x00, 0x50,
- 0x02, 0xce, 0x00, 0x7d, 0x02, 0xeb, 0x00, 0x52, 0x04, 0x72, 0x00, 0xc9,
- 0x06, 0xf3, 0x00, 0x7d, 0x06, 0xf3, 0x00, 0x7d, 0x06, 0xf3, 0x00, 0x21,
- 0x04, 0x72, 0x00, 0xc5, 0x05, 0x56, 0x00, 0x23, 0x05, 0x56, 0x00, 0x23,
- 0x05, 0x56, 0x00, 0x23, 0x05, 0x56, 0x00, 0x23, 0x05, 0x56, 0x00, 0x23,
- 0x05, 0x56, 0x00, 0x23, 0x08, 0x00, 0x00, 0x17, 0x05, 0xc6, 0x00, 0x62,
- 0x05, 0x56, 0x00, 0xb8, 0x05, 0x56, 0x00, 0xb8, 0x05, 0x56, 0x00, 0xb8,
- 0x05, 0x56, 0x00, 0xb8, 0x02, 0x39, 0x00, 0xcd, 0x02, 0x39, 0x00, 0xcd,
- 0x02, 0x39, 0x00, 0xcd, 0x02, 0x39, 0x00, 0x1c, 0x05, 0xc6, 0x00, 0x29,
- 0x05, 0xc6, 0x00, 0x9c, 0x06, 0x39, 0x00, 0x4e, 0x06, 0x39, 0x00, 0x4e,
- 0x06, 0x39, 0x00, 0x4e, 0x06, 0x39, 0x00, 0x4e, 0x06, 0x39, 0x00, 0x4e,
- 0x04, 0xac, 0x00, 0xc3, 0x06, 0x39, 0x00, 0x3d, 0x05, 0xc6, 0x00, 0xae,
- 0x05, 0xc6, 0x00, 0xae, 0x05, 0xc6, 0x00, 0xae, 0x05, 0xc6, 0x00, 0xae,
- 0x05, 0x56, 0x00, 0x1b, 0x05, 0x53, 0x00, 0xba, 0x04, 0xe3, 0x00, 0x89,
- 0x04, 0x72, 0x00, 0x56, 0x04, 0x72, 0x00, 0x56, 0x04, 0x72, 0x00, 0x56,
- 0x04, 0x72, 0x00, 0x56, 0x04, 0x72, 0x00, 0x56, 0x04, 0x72, 0x00, 0x56,
- 0x07, 0x1c, 0x00, 0x46, 0x04, 0x00, 0x00, 0x3f, 0x04, 0x72, 0x00, 0x52,
- 0x04, 0x72, 0x00, 0x52, 0x04, 0x72, 0x00, 0x52, 0x04, 0x72, 0x00, 0x52,
- 0x02, 0x39, 0x00, 0x00, 0x02, 0x39, 0x00, 0x00, 0x02, 0x39, 0x00, 0x00,
- 0x02, 0x39, 0x00, 0x06, 0x04, 0x72, 0x00, 0x4a, 0x04, 0x72, 0x00, 0x8f,
- 0x04, 0x72, 0x00, 0x4a, 0x04, 0x72, 0x00, 0x4a, 0x04, 0x72, 0x00, 0x4a,
- 0x04, 0x72, 0x00, 0x4a, 0x04, 0x72, 0x00, 0x4a, 0x04, 0xac, 0x00, 0x66,
- 0x04, 0xe3, 0x00, 0x25, 0x04, 0x72, 0x00, 0x85, 0x04, 0x72, 0x00, 0x85,
- 0x04, 0x72, 0x00, 0x85, 0x04, 0x72, 0x00, 0x85, 0x04, 0x00, 0x00, 0x29,
- 0x04, 0x70, 0x00, 0x6f, 0x04, 0x00, 0x00, 0x29, 0x08, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x1c,
- 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x84, 0x00, 0x03, 0x00, 0x01,
- 0x00, 0x00, 0x00, 0x1c, 0x00, 0x04, 0x00, 0x68, 0x00, 0x00, 0x00, 0x16,
- 0x00, 0x10, 0x00, 0x03, 0x00, 0x06, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x0e,
- 0x00, 0x7e, 0x00, 0xff, 0x01, 0x31, 0x02, 0xc6, 0x02, 0xcb, 0x02, 0xda,
- 0x02, 0xdc, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x0e,
- 0x00, 0x20, 0x00, 0xa0, 0x01, 0x31, 0x02, 0xc6, 0x02, 0xca, 0x02, 0xda,
- 0x02, 0xdc, 0xff, 0xff, 0x00, 0x01, 0xff, 0xf6, 0xff, 0xf5, 0xff, 0xe4,
- 0xff, 0xc3, 0xff, 0x92, 0xfd, 0xfe, 0xfd, 0xfb, 0xfd, 0xed, 0xfd, 0xec,
- 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x01, 0x06, 0x00, 0x00, 0x01, 0x93, 0xb3, 0x00, 0x00, 0x00,
- 0x00, 0xa0, 0xc0, 0x02, 0x00, 0xa1, 0xc1, 0x02, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x80, 0x7f, 0x7c, 0x81, 0x76, 0x75, 0x69, 0x70, 0x9a,
- 0x00, 0x00, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d,
- 0x0e, 0x0f, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19,
- 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, 0x20, 0x21, 0x22, 0x23, 0x24, 0x25,
- 0x26, 0x27, 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f, 0x30, 0x31,
- 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d,
- 0x3e, 0x3f, 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48, 0x49,
- 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f, 0x50, 0x51, 0x52, 0x53, 0x54, 0x55,
- 0x56, 0x57, 0x58, 0x59, 0x5a, 0x5b, 0x5c, 0x5d, 0x5e, 0x5f, 0x60, 0x61,
- 0x62, 0x00, 0x87, 0x88, 0x8a, 0x8c, 0x94, 0x99, 0x9f, 0xa4, 0xa3, 0xa5,
- 0xa7, 0xa6, 0xa8, 0xaa, 0xac, 0xab, 0xad, 0xae, 0xb0, 0xaf, 0xb1, 0xb2,
- 0xb4, 0xb6, 0xb5, 0xb7, 0xb9, 0xb8, 0xbd, 0xbc, 0xbe, 0xbf, 0x00, 0x73,
- 0x65, 0x66, 0x6a, 0x00, 0x79, 0xa2, 0x71, 0x6c, 0x00, 0x77, 0x6b, 0x00,
- 0x89, 0x9b, 0x00, 0x74, 0x00, 0x00, 0x68, 0x78, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x6d, 0x7d, 0x00, 0xa9, 0xbb, 0x82, 0x64, 0x6f, 0x00, 0x00, 0x00,
- 0x00, 0x6e, 0x7e, 0x00, 0x63, 0x83, 0x86, 0x98, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0xba, 0x00, 0xc2, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x7a, 0x00, 0x00, 0x00, 0x85, 0x8d, 0x84, 0x8e, 0x8b,
- 0x90, 0x91, 0x92, 0x8f, 0x96, 0x97, 0x00, 0x95, 0x9d, 0x9e, 0x9c, 0x00,
- 0x00, 0x00, 0x72, 0x00, 0x00, 0x00, 0x7b, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x21, 0x02, 0x79, 0x00, 0x00, 0x00, 0x16, 0x00, 0x16, 0x00, 0x16,
- 0x00, 0x16, 0x00, 0x16, 0x00, 0x2e, 0x00, 0x48, 0x00, 0x7f, 0x00, 0xe5,
- 0x01, 0x5d, 0x01, 0xc9, 0x01, 0xd9, 0x01, 0xfd, 0x02, 0x20, 0x02, 0x3e,
- 0x02, 0x56, 0x02, 0x6c, 0x02, 0x79, 0x02, 0x85, 0x02, 0x93, 0x02, 0xc3,
- 0x02, 0xda, 0x03, 0x16, 0x03, 0x63, 0x03, 0x80, 0x03, 0xbe, 0x04, 0x0c,
- 0x04, 0x2a, 0x04, 0x84, 0x04, 0xd4, 0x04, 0xe6, 0x05, 0x03, 0x05, 0x17,
- 0x05, 0x2b, 0x05, 0x3f, 0x05, 0x7d, 0x06, 0x10, 0x06, 0x2c, 0x06, 0x6d,
- 0x06, 0xaa, 0x06, 0xd3, 0x06, 0xec, 0x07, 0x02, 0x07, 0x50, 0x07, 0x68,
- 0x07, 0x76, 0x07, 0x99, 0x07, 0xb5, 0x07, 0xc6, 0x07, 0xe2, 0x07, 0xfa,
- 0x08, 0x47, 0x08, 0x72, 0x08, 0xc7, 0x09, 0x08, 0x09, 0x57, 0x09, 0x6a,
- 0x09, 0x8f, 0x09, 0xa2, 0x09, 0xc1, 0x09, 0xe0, 0x09, 0xf7, 0x0a, 0x0e,
- 0x0a, 0x20, 0x0a, 0x2f, 0x0a, 0x41, 0x0a, 0x54, 0x0a, 0x61, 0x0a, 0x70,
- 0x0a, 0xd1, 0x0b, 0x0b, 0x0b, 0x3e, 0x0b, 0x79, 0x0b, 0xba, 0x0b, 0xdc,
- 0x0c, 0x34, 0x0c, 0x5b, 0x0c, 0x6f, 0x0c, 0x91, 0x0c, 0xae, 0x0c, 0xbc,
- 0x0c, 0xfb, 0x0d, 0x21, 0x0d, 0x55, 0x0d, 0x8c, 0x0d, 0xc6, 0x0d, 0xe3,
- 0x0e, 0x2f, 0x0e, 0x55, 0x0e, 0x7b, 0x0e, 0x8e, 0x0e, 0xaa, 0x0e, 0xc9,
- 0x0e, 0xec, 0x0f, 0x03, 0x0f, 0x43, 0x0f, 0x50, 0x0f, 0x8f, 0x0f, 0xc0,
- 0x0f, 0xc8, 0x0f, 0xd2, 0x10, 0x13, 0x10, 0x73, 0x10, 0xbe, 0x10, 0xe8,
- 0x10, 0xfb, 0x11, 0x77, 0x11, 0x89, 0x12, 0x03, 0x12, 0x5c, 0x12, 0x78,
- 0x12, 0x88, 0x12, 0x95, 0x13, 0x17, 0x13, 0x24, 0x13, 0x55, 0x13, 0x74,
- 0x13, 0xb1, 0x13, 0xf8, 0x14, 0x06, 0x14, 0x38, 0x14, 0x5a, 0x14, 0x68,
- 0x14, 0x99, 0x14, 0xb1, 0x14, 0xea, 0x15, 0x07, 0x15, 0x3d, 0x15, 0x94,
- 0x15, 0xf9, 0x16, 0x03, 0x16, 0x0f, 0x16, 0x1b, 0x16, 0x27, 0x16, 0x33,
- 0x16, 0x3f, 0x16, 0x4b, 0x16, 0x72, 0x16, 0xdc, 0x16, 0xe8, 0x16, 0xf4,
- 0x17, 0x00, 0x17, 0x0c, 0x17, 0x18, 0x17, 0x24, 0x17, 0x30, 0x17, 0x3c,
- 0x17, 0x70, 0x17, 0x7c, 0x17, 0x88, 0x17, 0x94, 0x17, 0xa0, 0x17, 0xac,
- 0x17, 0xb8, 0x17, 0xd9, 0x18, 0x2e, 0x18, 0x3a, 0x18, 0x46, 0x18, 0x52,
- 0x18, 0x5e, 0x18, 0x6a, 0x18, 0x95, 0x18, 0xdf, 0x18, 0xeb, 0x18, 0xf7,
- 0x19, 0x03, 0x19, 0x0f, 0x19, 0x1b, 0x19, 0x27, 0x19, 0xa9, 0x1a, 0x05,
- 0x1a, 0x11, 0x1a, 0x1d, 0x1a, 0x29, 0x1a, 0x35, 0x1a, 0x40, 0x1a, 0x4b,
- 0x1a, 0x56, 0x1a, 0x61, 0x1a, 0xb5, 0x1a, 0xc1, 0x1a, 0xcd, 0x1a, 0xd9,
- 0x1a, 0xe5, 0x1a, 0xf1, 0x1a, 0xfd, 0x1b, 0x17, 0x1b, 0x60, 0x1b, 0x6c,
- 0x1b, 0x78, 0x1b, 0x84, 0x1b, 0x90, 0x1b, 0x9c, 0x1b, 0xd7, 0x1b, 0xe3,
- 0x1b, 0xe3, 0x1b, 0xe3, 0x1b, 0xe3, 0x1b, 0xe3, 0x1b, 0xe3, 0x1b, 0xe3,
- 0x00, 0x02, 0x00, 0x89, 0x00, 0x00, 0x03, 0xbe, 0x07, 0xd1, 0x00, 0x03,
- 0x00, 0x07, 0x00, 0x00, 0x01, 0x11, 0x21, 0x11, 0x05, 0x21, 0x11, 0x21,
- 0x03, 0xbe, 0xfc, 0xcb, 0x02, 0xac, 0xfd, 0xdd, 0x02, 0x23, 0x07, 0xd1,
- 0xf8, 0x2f, 0x07, 0xd1, 0x89, 0xf9, 0x41, 0x00, 0x00, 0x02, 0x00, 0xfe,
- 0x00, 0x00, 0x01, 0xaa, 0x05, 0xd5, 0x00, 0x05, 0x00, 0x09, 0x00, 0x00,
- 0x01, 0x11, 0x03, 0x23, 0x03, 0x11, 0x13, 0x15, 0x23, 0x35, 0x01, 0xaa,
- 0x2d, 0x50, 0x2d, 0xaa, 0xac, 0x05, 0xd5, 0xfd, 0x4c, 0xfe, 0x37, 0x01,
- 0xc9, 0x02, 0xb4, 0xfb, 0x00, 0xd5, 0xd5, 0x00, 0x00, 0x02, 0x00, 0x6a,
- 0x03, 0xb6, 0x02, 0x71, 0x05, 0xac, 0x00, 0x05, 0x00, 0x0b, 0x00, 0x00,
- 0x13, 0x33, 0x15, 0x03, 0x23, 0x03, 0x25, 0x33, 0x15, 0x03, 0x23, 0x03,
- 0x6a, 0xbf, 0x37, 0x50, 0x38, 0x01, 0x48, 0xbf, 0x38, 0x50, 0x37, 0x05,
- 0xac, 0xe3, 0xfe, 0xed, 0x01, 0x13, 0xe3, 0xe3, 0xfe, 0xed, 0x01, 0x13,
- 0x00, 0x02, 0x00, 0x1d, 0xff, 0xd7, 0x04, 0x56, 0x05, 0x93, 0x00, 0x1b,
- 0x00, 0x1f, 0x00, 0x00, 0x01, 0x03, 0x33, 0x15, 0x23, 0x03, 0x33, 0x15,
- 0x23, 0x03, 0x23, 0x13, 0x23, 0x03, 0x23, 0x13, 0x23, 0x35, 0x33, 0x13,
- 0x23, 0x35, 0x33, 0x13, 0x33, 0x03, 0x21, 0x13, 0x03, 0x23, 0x03, 0x21,
- 0x03, 0xe1, 0x49, 0xbe, 0xd9, 0x40, 0xd7, 0xef, 0x50, 0x9c, 0x4e, 0xfe,
- 0x50, 0x9b, 0x4e, 0xcf, 0xe9, 0x40, 0xde, 0xf8, 0x4a, 0x9c, 0x4a, 0x01,
- 0x00, 0x48, 0x63, 0xfe, 0x41, 0x01, 0x00, 0x05, 0x93, 0xfe, 0x6f, 0x8b,
- 0xfe, 0x9b, 0x8b, 0xfe, 0x50, 0x01, 0xb0, 0xfe, 0x50, 0x01, 0xb0, 0x8b,
- 0x01, 0x65, 0x8b, 0x01, 0x91, 0xfe, 0x6f, 0x01, 0x91, 0xfd, 0xe4, 0xfe,
- 0x9b, 0x00, 0x00, 0x03, 0x00, 0x44, 0xfe, 0xfe, 0x04, 0x25, 0x06, 0x29,
- 0x00, 0x2f, 0x00, 0x38, 0x00, 0x41, 0x00, 0x00, 0x01, 0x14, 0x07, 0x06,
- 0x07, 0x15, 0x23, 0x35, 0x24, 0x27, 0x26, 0x3d, 0x01, 0x33, 0x16, 0x17,
- 0x16, 0x17, 0x16, 0x17, 0x11, 0x26, 0x27, 0x26, 0x27, 0x26, 0x35, 0x34,
- 0x37, 0x36, 0x37, 0x35, 0x33, 0x15, 0x16, 0x17, 0x16, 0x15, 0x23, 0x26,
- 0x27, 0x26, 0x27, 0x11, 0x17, 0x16, 0x17, 0x16, 0x01, 0x11, 0x06, 0x07,
- 0x06, 0x15, 0x14, 0x17, 0x16, 0x13, 0x36, 0x37, 0x36, 0x35, 0x34, 0x27,
- 0x26, 0x27, 0x04, 0x25, 0xb0, 0x6a, 0xa1, 0x78, 0xfe, 0xec, 0x66, 0x34,
- 0xa1, 0x0b, 0x12, 0x2e, 0x9b, 0x13, 0x14, 0xab, 0x3e, 0x0c, 0x0d, 0x92,
- 0xcc, 0x54, 0x74, 0x78, 0xdb, 0x69, 0x4a, 0xa2, 0x02, 0x59, 0x3c, 0x55,
- 0x8a, 0xde, 0x3c, 0x17, 0xfd, 0xcd, 0xa9, 0x33, 0x12, 0xbe, 0x16, 0x92,
- 0xbd, 0x3e, 0x18, 0x41, 0x3c, 0x96, 0x01, 0x8f, 0xf9, 0x74, 0x46, 0x0b,
- 0xd3, 0xd3, 0x12, 0xbd, 0x61, 0x86, 0x23, 0x77, 0x31, 0x7d, 0x20, 0x04,
- 0x03, 0x02, 0x2d, 0x33, 0x27, 0x08, 0x09, 0x68, 0xc3, 0xf8, 0x68, 0x2b,
- 0x0e, 0x6f, 0x6f, 0x10, 0x8f, 0x64, 0x90, 0x85, 0x49, 0x32, 0x04, 0xfe,
- 0x02, 0x27, 0x49, 0xa1, 0x3f, 0x01, 0x60, 0x01, 0xec, 0x17, 0x7a, 0x2d,
- 0x36, 0xa6, 0x43, 0x08, 0xfd, 0x1a, 0x17, 0x89, 0x36, 0x43, 0x69, 0x39,
- 0x33, 0x2d, 0x00, 0x05, 0x00, 0x3b, 0xff, 0xd7, 0x06, 0xdf, 0x05, 0xac,
- 0x00, 0x15, 0x00, 0x25, 0x00, 0x29, 0x00, 0x3f, 0x00, 0x4f, 0x00, 0x00,
- 0x01, 0x32, 0x17, 0x16, 0x17, 0x14, 0x07, 0x06, 0x07, 0x06, 0x23, 0x22,
- 0x27, 0x26, 0x27, 0x34, 0x35, 0x34, 0x37, 0x36, 0x37, 0x36, 0x17, 0x22,
- 0x07, 0x06, 0x15, 0x14, 0x17, 0x16, 0x33, 0x32, 0x37, 0x36, 0x35, 0x34,
- 0x27, 0x26, 0x25, 0x33, 0x01, 0x23, 0x01, 0x32, 0x17, 0x16, 0x17, 0x14,
- 0x07, 0x06, 0x07, 0x06, 0x23, 0x22, 0x27, 0x26, 0x27, 0x34, 0x35, 0x34,
- 0x37, 0x36, 0x37, 0x36, 0x17, 0x22, 0x07, 0x06, 0x15, 0x14, 0x17, 0x16,
- 0x33, 0x32, 0x37, 0x36, 0x35, 0x34, 0x27, 0x26, 0x01, 0x98, 0x91, 0x65,
- 0x65, 0x03, 0x60, 0x60, 0x87, 0x0b, 0x0a, 0x8d, 0x66, 0x65, 0x07, 0x62,
- 0x60, 0x88, 0x0a, 0x09, 0x5e, 0x3e, 0x33, 0x48, 0x3b, 0x4e, 0x5c, 0x3f,
- 0x33, 0x48, 0x3a, 0x02, 0xf9, 0x87, 0xfc, 0xd7, 0x87, 0x03, 0xcb, 0x93,
- 0x65, 0x64, 0x02, 0x61, 0x5f, 0x85, 0x0b, 0x0c, 0x8c, 0x65, 0x65, 0x08,
- 0x61, 0x60, 0x88, 0x0a, 0x09, 0x5e, 0x3e, 0x33, 0x48, 0x3b, 0x4e, 0x5d,
- 0x3f, 0x33, 0x4a, 0x39, 0x05, 0x7b, 0x65, 0x6b, 0x92, 0x89, 0x65, 0x64,
- 0x08, 0x01, 0x62, 0x61, 0x8a, 0x09, 0x09, 0x8b, 0x66, 0x65, 0x07, 0x01,
- 0x8f, 0x47, 0x3b, 0x4d, 0x5d, 0x3f, 0x33, 0x46, 0x3a, 0x4d, 0x61, 0x3e,
- 0x32, 0xc0, 0xfa, 0x2b, 0x02, 0xbc, 0x65, 0x69, 0x92, 0x88, 0x65, 0x63,
- 0x09, 0x01, 0x62, 0x60, 0x89, 0x0a, 0x09, 0x8b, 0x65, 0x64, 0x07, 0x01,
- 0x8f, 0x47, 0x3a, 0x4c, 0x5e, 0x3e, 0x33, 0x47, 0x39, 0x4b, 0x62, 0x3e,
- 0x31, 0x00, 0x00, 0x03, 0x00, 0x6a, 0xff, 0xd1, 0x05, 0x19, 0x05, 0xac,
- 0x00, 0x29, 0x00, 0x39, 0x00, 0x46, 0x00, 0x00, 0x25, 0x06, 0x07, 0x06,
- 0x23, 0x22, 0x27, 0x26, 0x35, 0x34, 0x37, 0x36, 0x37, 0x26, 0x27, 0x26,
- 0x35, 0x34, 0x37, 0x36, 0x33, 0x32, 0x17, 0x16, 0x15, 0x14, 0x07, 0x06,
- 0x07, 0x01, 0x36, 0x37, 0x34, 0x3d, 0x01, 0x33, 0x14, 0x07, 0x06, 0x07,
- 0x13, 0x23, 0x01, 0x36, 0x37, 0x36, 0x35, 0x34, 0x27, 0x26, 0x23, 0x22,
- 0x07, 0x06, 0x15, 0x14, 0x17, 0x16, 0x09, 0x01, 0x06, 0x07, 0x06, 0x15,
- 0x14, 0x17, 0x16, 0x33, 0x32, 0x37, 0x36, 0x03, 0xba, 0x4a, 0x27, 0x8e,
- 0xad, 0xc8, 0x74, 0x68, 0x49, 0x46, 0xbd, 0x7c, 0x1c, 0x0e, 0x65, 0x66,
- 0x94, 0x9c, 0x5e, 0x53, 0x4b, 0x3f, 0x90, 0x01, 0x10, 0x3a, 0x06, 0xa4,
- 0x6d, 0x05, 0x05, 0xfa, 0xe0, 0xfe, 0x0f, 0x8f, 0x29, 0x1b, 0x46, 0x2f,
- 0x3e, 0x67, 0x2f, 0x1a, 0x1f, 0x1b, 0x01, 0x66, 0xfe, 0xb8, 0xa9, 0x31,
- 0x1f, 0x53, 0x4e, 0x6b, 0x75, 0x6e, 0x27, 0xa0, 0x49, 0x1d, 0x69, 0x7b,
- 0x6e, 0xae, 0x8e, 0x5d, 0x5c, 0x6e, 0x9c, 0x56, 0x2b, 0x30, 0x86, 0x5d,
- 0x5f, 0x65, 0x59, 0x84, 0x79, 0x53, 0x46, 0x52, 0xfe, 0xb2, 0x68, 0x73,
- 0x09, 0x08, 0x08, 0xb4, 0xb3, 0x08, 0x08, 0xfe, 0xcb, 0x03, 0x73, 0x5a,
- 0x40, 0x2b, 0x37, 0x5a, 0x32, 0x22, 0x4c, 0x2b, 0x39, 0x3a, 0x32, 0x2c,
- 0xfd, 0x44, 0x01, 0x99, 0x6c, 0x57, 0x36, 0x42, 0x70, 0x4d, 0x49, 0x5b,
- 0x1f, 0x00, 0x00, 0x01, 0x00, 0x62, 0x03, 0xb6, 0x01, 0x23, 0x05, 0xac,
- 0x00, 0x05, 0x00, 0x00, 0x13, 0x33, 0x15, 0x03, 0x23, 0x03, 0x62, 0xc1,
- 0x37, 0x52, 0x38, 0x05, 0xac, 0xe3, 0xfe, 0xed, 0x01, 0x13, 0x00, 0x01,
- 0x00, 0x96, 0xfe, 0x4e, 0x02, 0x54, 0x05, 0xd5, 0x00, 0x11, 0x00, 0x00,
- 0x01, 0x33, 0x02, 0x03, 0x06, 0x15, 0x10, 0x13, 0x16, 0x17, 0x23, 0x26,
- 0x03, 0x26, 0x35, 0x10, 0x13, 0x36, 0x01, 0xe3, 0x71, 0xd3, 0x36, 0x10,
- 0xb3, 0x2e, 0x38, 0x71, 0xbe, 0x58, 0x37, 0x89, 0x51, 0x05, 0xd5, 0xfe,
- 0xab, 0xfe, 0x77, 0x74, 0x71, 0xfe, 0x76, 0xfe, 0x82, 0x61, 0x5b, 0xfa,
- 0x01, 0x47, 0xc9, 0xba, 0x01, 0x31, 0x01, 0x3f, 0xbd, 0x00, 0x00, 0x01,
- 0x00, 0x4e, 0xfe, 0x4e, 0x02, 0x0c, 0x05, 0xd5, 0x00, 0x11, 0x00, 0x00,
- 0x13, 0x23, 0x12, 0x13, 0x36, 0x35, 0x10, 0x03, 0x26, 0x27, 0x33, 0x16,
- 0x13, 0x16, 0x15, 0x10, 0x03, 0x06, 0xbe, 0x70, 0xd2, 0x36, 0x10, 0xb4,
- 0x2d, 0x37, 0x70, 0xbf, 0x59, 0x36, 0x89, 0x52, 0xfe, 0x4e, 0x01, 0x53,
- 0x01, 0x8a, 0x74, 0x71, 0x01, 0x8e, 0x01, 0x7e, 0x60, 0x59, 0xfa, 0xfe,
- 0xb9, 0xca, 0xba, 0xfe, 0xd1, 0xfe, 0xc2, 0xbe, 0x00, 0x01, 0x00, 0x52,
- 0x03, 0x87, 0x02, 0xbe, 0x05, 0xd5, 0x00, 0x0e, 0x00, 0x00, 0x01, 0x33,
- 0x07, 0x37, 0x17, 0x07, 0x17, 0x07, 0x27, 0x07, 0x27, 0x37, 0x27, 0x37,
- 0x17, 0x01, 0x48, 0x81, 0x0b, 0xda, 0x26, 0xdd, 0x90, 0x69, 0x7f, 0x81,
- 0x66, 0x8d, 0xdd, 0x27, 0xd9, 0x05, 0xd5, 0xe5, 0x4d, 0x78, 0x3e, 0xb6,
- 0x4a, 0xbf, 0xbf, 0x4a, 0xb6, 0x3e, 0x78, 0x4d, 0x00, 0x01, 0x00, 0x66,
- 0xff, 0xec, 0x04, 0x46, 0x03, 0xcb, 0x00, 0x0b, 0x00, 0x00, 0x01, 0x15,
- 0x21, 0x11, 0x23, 0x11, 0x21, 0x35, 0x21, 0x11, 0x33, 0x11, 0x04, 0x46,
- 0xfe, 0x58, 0x90, 0xfe, 0x58, 0x01, 0xa8, 0x90, 0x02, 0x23, 0x90, 0xfe,
- 0x59, 0x01, 0xa7, 0x90, 0x01, 0xa8, 0xfe, 0x58, 0x00, 0x01, 0x00, 0xb2,
- 0xfe, 0xd3, 0x01, 0x89, 0x00, 0xd5, 0x00, 0x0b, 0x00, 0x00, 0x37, 0x33,
- 0x15, 0x10, 0x23, 0x35, 0x36, 0x37, 0x36, 0x3d, 0x01, 0x23, 0xb2, 0xd7,
- 0xd7, 0x4c, 0x19, 0x16, 0x7b, 0xd5, 0xf6, 0xfe, 0xf4, 0x4e, 0x03, 0x2c,
- 0x27, 0x64, 0x25, 0x00, 0x00, 0x01, 0x00, 0x5e, 0x01, 0xec, 0x02, 0x46,
- 0x02, 0x7f, 0x00, 0x03, 0x00, 0x00, 0x01, 0x15, 0x21, 0x35, 0x02, 0x46,
- 0xfe, 0x18, 0x02, 0x7f, 0x93, 0x93, 0x00, 0x01, 0x00, 0xb2, 0x00, 0x00,
- 0x01, 0x87, 0x00, 0xd5, 0x00, 0x03, 0x00, 0x00, 0x25, 0x15, 0x23, 0x35,
- 0x01, 0x87, 0xd5, 0xd5, 0xd5, 0xd5, 0x00, 0x01, 0xff, 0xf0, 0xff, 0xd7,
- 0x02, 0x46, 0x05, 0xd5, 0x00, 0x03, 0x00, 0x00, 0x01, 0x33, 0x01, 0x23,
- 0x01, 0xd5, 0x71, 0xfe, 0x1a, 0x70, 0x05, 0xd5, 0xfa, 0x02, 0x00, 0x02,
- 0x00, 0x58, 0xff, 0xd1, 0x04, 0x0e, 0x05, 0xac, 0x00, 0x0f, 0x00, 0x19,
- 0x00, 0x00, 0x13, 0x10, 0x25, 0x36, 0x33, 0x20, 0x13, 0x16, 0x15, 0x10,
- 0x07, 0x06, 0x23, 0x20, 0x03, 0x26, 0x01, 0x20, 0x11, 0x10, 0x21, 0x32,
- 0x13, 0x36, 0x35, 0x10, 0x58, 0x01, 0x24, 0x52, 0x65, 0x01, 0x7d, 0x4c,
- 0x12, 0xd1, 0x6c, 0x9e, 0xfe, 0xcf, 0x6f, 0x3b, 0x01, 0xdb, 0xfe, 0xdd,
- 0x01, 0x1f, 0xc7, 0x3f, 0x21, 0x02, 0xbe, 0x02, 0x43, 0x86, 0x25, 0xfe,
- 0x10, 0x77, 0x93, 0xfe, 0x27, 0xae, 0x5a, 0x01, 0x44, 0xab, 0x03, 0x4c,
- 0xfd, 0xb0, 0xfd, 0xaa, 0x01, 0x06, 0x86, 0xd1, 0x02, 0x49, 0x00, 0x01,
- 0x00, 0xd1, 0x00, 0x00, 0x02, 0xc7, 0x05, 0xac, 0x00, 0x0a, 0x00, 0x00,
- 0x01, 0x21, 0x35, 0x3e, 0x01, 0x37, 0x36, 0x37, 0x33, 0x11, 0x23, 0x02,
- 0x12, 0xfe, 0xbf, 0xb3, 0x7f, 0x24, 0x12, 0x17, 0x77, 0xb5, 0x04, 0x0a,
- 0x81, 0x16, 0x43, 0x50, 0x29, 0x4f, 0xfa, 0x54, 0x00, 0x01, 0x00, 0x46,
- 0x00, 0x00, 0x04, 0x17, 0x05, 0xac, 0x00, 0x23, 0x00, 0x00, 0x13, 0x12,
- 0x21, 0x32, 0x17, 0x16, 0x15, 0x10, 0x05, 0x06, 0x0f, 0x01, 0x06, 0x07,
- 0x06, 0x07, 0x21, 0x15, 0x21, 0x36, 0x37, 0x36, 0x37, 0x36, 0x3f, 0x01,
- 0x36, 0x35, 0x34, 0x27, 0x26, 0x23, 0x20, 0x03, 0x06, 0x07, 0x66, 0x0f,
- 0x01, 0xd1, 0xd0, 0x82, 0x7f, 0xfe, 0xec, 0x0f, 0x11, 0xcc, 0xa8, 0x37,
- 0x1d, 0x0b, 0x02, 0xfc, 0xfc, 0x3a, 0x0b, 0x48, 0x45, 0xa7, 0x28, 0x30,
- 0xbd, 0xc4, 0x5b, 0x51, 0x73, 0xfe, 0xfe, 0x1f, 0x02, 0x01, 0x03, 0xb4,
- 0x01, 0xf8, 0x79, 0x76, 0xbb, 0xff, 0x00, 0xa4, 0x09, 0x09, 0x6f, 0x5a,
- 0x5e, 0x31, 0x42, 0xb2, 0xe0, 0x7d, 0x78, 0x6b, 0x1a, 0x1b, 0x6a, 0x70,
- 0xaf, 0x7c, 0x4f, 0x45, 0xfe, 0xcd, 0x12, 0x15, 0x00, 0x01, 0x00, 0x42,
- 0xff, 0xd1, 0x04, 0x0c, 0x05, 0xac, 0x00, 0x32, 0x00, 0x00, 0x01, 0x22,
- 0x07, 0x06, 0x07, 0x23, 0x12, 0x25, 0x36, 0x33, 0x32, 0x17, 0x16, 0x15,
- 0x14, 0x07, 0x16, 0x17, 0x16, 0x15, 0x14, 0x07, 0x06, 0x23, 0x20, 0x03,
- 0x26, 0x27, 0x33, 0x16, 0x17, 0x16, 0x33, 0x32, 0x37, 0x36, 0x35, 0x34,
- 0x27, 0x26, 0x23, 0x07, 0x23, 0x35, 0x36, 0x37, 0x36, 0x35, 0x34, 0x27,
- 0x26, 0x02, 0x29, 0xd2, 0x32, 0x0f, 0x02, 0xb4, 0x07, 0x01, 0x1a, 0x4a,
- 0x5c, 0xf3, 0x75, 0x52, 0xca, 0xa3, 0x34, 0x1e, 0x8e, 0x85, 0xd8, 0xfe,
- 0xa3, 0x5f, 0x1c, 0x07, 0xb4, 0x0d, 0xa0, 0x38, 0x4c, 0xb3, 0x4d, 0x2d,
- 0xff, 0x16, 0x18, 0x4c, 0x16, 0xc4, 0x4b, 0x55, 0x6b, 0x3e, 0x05, 0x0e,
- 0xb3, 0x36, 0x4e, 0x01, 0x70, 0x50, 0x15, 0x8f, 0x65, 0x9b, 0xde, 0x4f,
- 0x38, 0x77, 0x45, 0x66, 0xd6, 0x7c, 0x73, 0x01, 0x18, 0x52, 0x6b, 0xea,
- 0x38, 0x13, 0x77, 0x46, 0x65, 0xf3, 0x14, 0x02, 0x02, 0x99, 0x03, 0x2b,
- 0x32, 0x84, 0x93, 0x40, 0x24, 0x00, 0x00, 0x02, 0x00, 0x39, 0x00, 0x00,
- 0x04, 0x29, 0x05, 0xac, 0x00, 0x0a, 0x00, 0x0d, 0x00, 0x00, 0x01, 0x21,
- 0x35, 0x01, 0x33, 0x11, 0x33, 0x15, 0x23, 0x11, 0x23, 0x19, 0x01, 0x01,
- 0x02, 0x9e, 0xfd, 0x9b, 0x02, 0x94, 0x85, 0xd7, 0xd7, 0xb4, 0xfe, 0x39,
- 0x01, 0x5c, 0xbf, 0x03, 0x91, 0xfc, 0x52, 0xa2, 0xfe, 0xa4, 0x01, 0xfe,
- 0x02, 0x7b, 0xfd, 0x85, 0x00, 0x01, 0x00, 0x48, 0xff, 0xd1, 0x04, 0x1b,
- 0x05, 0xac, 0x00, 0x26, 0x00, 0x00, 0x01, 0x15, 0x21, 0x03, 0x36, 0x37,
- 0x32, 0x17, 0x16, 0x17, 0x14, 0x07, 0x06, 0x07, 0x06, 0x23, 0x20, 0x03,
- 0x26, 0x27, 0x33, 0x16, 0x17, 0x16, 0x33, 0x32, 0x37, 0x36, 0x35, 0x34,
- 0x27, 0x26, 0x23, 0x22, 0x07, 0x06, 0x07, 0x23, 0x13, 0x03, 0xcf, 0xfd,
- 0xa4, 0x3a, 0x7c, 0x91, 0xcf, 0x82, 0x83, 0x01, 0x85, 0x82, 0xce, 0x0e,
- 0x0f, 0xfe, 0x71, 0x4d, 0x02, 0x03, 0xb4, 0x3d, 0xd5, 0x0b, 0x0c, 0xb0,
- 0x54, 0x39, 0x74, 0x51, 0x78, 0x71, 0x4d, 0x24, 0x28, 0xa6, 0x6c, 0x05,
- 0xac, 0xb2, 0xfe, 0x6a, 0x56, 0x02, 0x84, 0x86, 0xd9, 0xe0, 0x91, 0x8c,
- 0x0a, 0x01, 0x01, 0x7b, 0x06, 0x12, 0xe7, 0x0b, 0x01, 0x7c, 0x55, 0x7f,
- 0xbe, 0x5d, 0x41, 0x3b, 0x1d, 0x2f, 0x03, 0x16, 0x00, 0x02, 0x00, 0x58,
- 0xff, 0xd1, 0x04, 0x1b, 0x05, 0xac, 0x00, 0x22, 0x00, 0x32, 0x00, 0x00,
- 0x13, 0x10, 0x25, 0x36, 0x33, 0x32, 0x17, 0x16, 0x17, 0x23, 0x26, 0x27,
- 0x26, 0x23, 0x22, 0x07, 0x06, 0x07, 0x36, 0x33, 0x32, 0x17, 0x16, 0x17,
- 0x14, 0x15, 0x14, 0x07, 0x06, 0x07, 0x06, 0x23, 0x20, 0x03, 0x26, 0x25,
- 0x22, 0x07, 0x06, 0x15, 0x14, 0x17, 0x16, 0x33, 0x32, 0x37, 0x36, 0x35,
- 0x34, 0x27, 0x26, 0x58, 0x01, 0x17, 0x69, 0x88, 0xc8, 0x72, 0x4d, 0x15,
- 0xb4, 0x20, 0x76, 0x2b, 0x33, 0xc2, 0x51, 0x30, 0x01, 0x76, 0xd8, 0xbf,
- 0x7c, 0x7e, 0x04, 0x7d, 0x7b, 0xc1, 0x11, 0x12, 0xfe, 0x42, 0x26, 0x03,
- 0x01, 0xf0, 0x93, 0x55, 0x45, 0x5d, 0x53, 0x77, 0x81, 0x53, 0x4c, 0x6f,
- 0x46, 0x02, 0x96, 0x02, 0x33, 0xa5, 0x3e, 0x8d, 0x5f, 0x8f, 0x9b, 0x2f,
- 0x11, 0xdb, 0x84, 0xc8, 0xa2, 0x7c, 0x7e, 0xc7, 0x06, 0x06, 0xcd, 0x89,
- 0x86, 0x0c, 0x01, 0x02, 0x56, 0x35, 0x8b, 0x65, 0x52, 0x7a, 0x93, 0x5e,
- 0x54, 0x60, 0x59, 0x82, 0xb4, 0x53, 0x34, 0x00, 0x00, 0x01, 0x00, 0x5e,
- 0x00, 0x00, 0x04, 0x29, 0x05, 0xac, 0x00, 0x0c, 0x00, 0x00, 0x01, 0x15,
- 0x00, 0x03, 0x06, 0x07, 0x23, 0x12, 0x13, 0x12, 0x13, 0x21, 0x35, 0x04,
- 0x29, 0xfe, 0xa5, 0x94, 0x3c, 0x23, 0xc0, 0x56, 0x8b, 0x7e, 0xf5, 0xfc,
- 0xef, 0x05, 0xac, 0x98, 0xfe, 0x33, 0xfe, 0x3c, 0xba, 0xc9, 0x01, 0x7a,
- 0x01, 0x20, 0x01, 0x03, 0x01, 0x5d, 0xb2, 0x00, 0x00, 0x03, 0x00, 0x4c,
- 0xff, 0xd1, 0x04, 0x1b, 0x05, 0xac, 0x00, 0x1c, 0x00, 0x2c, 0x00, 0x3c,
- 0x00, 0x00, 0x01, 0x16, 0x15, 0x14, 0x07, 0x06, 0x07, 0x22, 0x23, 0x22,
- 0x27, 0x26, 0x27, 0x34, 0x37, 0x26, 0x27, 0x26, 0x35, 0x34, 0x36, 0x33,
- 0x32, 0x17, 0x16, 0x15, 0x14, 0x07, 0x06, 0x01, 0x22, 0x07, 0x06, 0x15,
- 0x14, 0x17, 0x16, 0x33, 0x32, 0x37, 0x36, 0x35, 0x34, 0x27, 0x26, 0x03,
- 0x22, 0x07, 0x06, 0x15, 0x14, 0x17, 0x16, 0x33, 0x32, 0x37, 0x36, 0x35,
- 0x34, 0x27, 0x26, 0x03, 0x21, 0xfa, 0x83, 0x85, 0xd5, 0x05, 0x06, 0xd7,
- 0x88, 0x85, 0x03, 0xf8, 0x7e, 0x29, 0x1e, 0xf4, 0xc0, 0xc8, 0x7a, 0x72,
- 0x3e, 0x2c, 0xfe, 0xb6, 0x8b, 0x44, 0x2d, 0x5e, 0x41, 0x5d, 0x8b, 0x45,
- 0x2c, 0x63, 0x3f, 0x5a, 0x99, 0x54, 0x42, 0x63, 0x51, 0x77, 0x9f, 0x55,
- 0x3f, 0x66, 0x51, 0x02, 0xfc, 0x77, 0xf4, 0xc2, 0x7c, 0x7e, 0x04, 0x7d,
- 0x83, 0xc2, 0xf1, 0x78, 0x4f, 0x4d, 0x3a, 0x57, 0xaa, 0xd9, 0x73, 0x6b,
- 0xa5, 0x78, 0x49, 0x34, 0x01, 0xd8, 0x59, 0x3a, 0x52, 0x7a, 0x3e, 0x2b,
- 0x58, 0x39, 0x50, 0x82, 0x3e, 0x27, 0xfd, 0xa0, 0x62, 0x4c, 0x6f, 0x8c,
- 0x51, 0x41, 0x65, 0x4b, 0x6e, 0x8e, 0x50, 0x3f, 0x00, 0x02, 0x00, 0x4e,
- 0xff, 0xd1, 0x04, 0x12, 0x05, 0xac, 0x00, 0x22, 0x00, 0x32, 0x00, 0x00,
- 0x01, 0x10, 0x05, 0x06, 0x23, 0x22, 0x27, 0x26, 0x27, 0x33, 0x16, 0x17,
- 0x16, 0x33, 0x32, 0x37, 0x36, 0x37, 0x06, 0x07, 0x06, 0x23, 0x22, 0x27,
- 0x26, 0x27, 0x34, 0x37, 0x36, 0x37, 0x36, 0x33, 0x20, 0x13, 0x16, 0x01,
- 0x22, 0x07, 0x06, 0x15, 0x14, 0x17, 0x16, 0x33, 0x32, 0x37, 0x36, 0x35,
- 0x34, 0x27, 0x26, 0x04, 0x12, 0xfe, 0xea, 0x6a, 0x8a, 0xc7, 0x72, 0x4d,
- 0x15, 0xb4, 0x1e, 0x72, 0x2d, 0x36, 0xc2, 0x51, 0x30, 0x01, 0x6e, 0x8e,
- 0x25, 0x2b, 0xc2, 0x7d, 0x7d, 0x02, 0x7d, 0x7a, 0xc1, 0x11, 0x12, 0x01,
- 0x9e, 0x40, 0x0b, 0xfe, 0x15, 0x83, 0x53, 0x4b, 0x6e, 0x47, 0x66, 0x8f,
- 0x55, 0x49, 0x5d, 0x53, 0x02, 0xe7, 0xfd, 0xd0, 0xa6, 0x40, 0x8c, 0x5f,
- 0x90, 0x97, 0x31, 0x13, 0xdb, 0x84, 0xc8, 0x84, 0x18, 0x06, 0x7e, 0x86,
- 0xc9, 0xcd, 0x89, 0x86, 0x0c, 0x01, 0xfe, 0x01, 0x5b, 0x01, 0xbc, 0x62,
- 0x58, 0x83, 0xb3, 0x53, 0x35, 0x62, 0x53, 0x7c, 0x95, 0x5e, 0x54, 0x00,
- 0x00, 0x02, 0x00, 0xe1, 0x00, 0x00, 0x01, 0xb6, 0x04, 0x31, 0x00, 0x03,
- 0x00, 0x07, 0x00, 0x00, 0x25, 0x15, 0x23, 0x35, 0x13, 0x15, 0x23, 0x35,
- 0x01, 0xb6, 0xd5, 0xd5, 0xd5, 0xd5, 0xd5, 0xd5, 0x03, 0x5c, 0xd5, 0xd5,
- 0x00, 0x02, 0x00, 0xe1, 0xfe, 0xd3, 0x01, 0xb8, 0x04, 0x31, 0x00, 0x03,
- 0x00, 0x0f, 0x00, 0x00, 0x01, 0x15, 0x23, 0x35, 0x03, 0x33, 0x15, 0x10,
- 0x23, 0x35, 0x36, 0x37, 0x36, 0x3d, 0x01, 0x23, 0x01, 0xb8, 0xd5, 0x02,
- 0xd7, 0xd7, 0x4d, 0x18, 0x16, 0x7b, 0x04, 0x31, 0xd5, 0xd5, 0xfc, 0xa4,
- 0xf6, 0xfe, 0xf4, 0x4e, 0x03, 0x2c, 0x27, 0x64, 0x25, 0x00, 0x00, 0x01,
- 0x00, 0x5c, 0xff, 0xee, 0x04, 0x46, 0x03, 0xcb, 0x00, 0x06, 0x00, 0x00,
- 0x13, 0x35, 0x01, 0x15, 0x09, 0x01, 0x15, 0x5c, 0x03, 0xea, 0xfc, 0xd9,
- 0x03, 0x27, 0x01, 0x96, 0x8d, 0x01, 0xa8, 0xa2, 0xfe, 0xb6, 0xfe, 0xb0,
- 0xa1, 0x00, 0x00, 0x02, 0x00, 0x66, 0x00, 0xe3, 0x04, 0x46, 0x02, 0xd3,
- 0x00, 0x03, 0x00, 0x07, 0x00, 0x00, 0x01, 0x15, 0x21, 0x35, 0x01, 0x15,
- 0x21, 0x35, 0x04, 0x46, 0xfc, 0x20, 0x03, 0xe0, 0xfc, 0x20, 0x02, 0xd3,
- 0x8f, 0x8f, 0xfe, 0xa0, 0x90, 0x90, 0x00, 0x01, 0x00, 0x66, 0xff, 0xee,
- 0x04, 0x50, 0x03, 0xcb, 0x00, 0x06, 0x00, 0x00, 0x01, 0x15, 0x01, 0x35,
- 0x09, 0x01, 0x35, 0x04, 0x50, 0xfc, 0x16, 0x03, 0x27, 0xfc, 0xd9, 0x02,
- 0x23, 0x8d, 0xfe, 0x58, 0xa1, 0x01, 0x4a, 0x01, 0x50, 0xa2, 0x00, 0x02,
- 0x00, 0x9e, 0x00, 0x00, 0x04, 0x12, 0x05, 0xee, 0x00, 0x23, 0x00, 0x27,
- 0x00, 0x00, 0x01, 0x14, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x1d, 0x01,
- 0x23, 0x35, 0x34, 0x37, 0x36, 0x37, 0x36, 0x37, 0x36, 0x35, 0x34, 0x27,
- 0x26, 0x23, 0x22, 0x07, 0x06, 0x15, 0x23, 0x10, 0x25, 0x36, 0x33, 0x32,
- 0x17, 0x16, 0x01, 0x15, 0x23, 0x35, 0x04, 0x12, 0x6e, 0x1a, 0x5b, 0x58,
- 0x1c, 0x17, 0xb8, 0x66, 0x14, 0x5d, 0x61, 0x1f, 0x17, 0x5f, 0x44, 0x63,
- 0xc4, 0x31, 0x13, 0xae, 0x01, 0x1f, 0x48, 0x59, 0xdc, 0x77, 0x61, 0xfe,
- 0x92, 0xb8, 0x04, 0x64, 0x99, 0x7a, 0x1c, 0x51, 0x50, 0x3a, 0x2e, 0x34,
- 0x60, 0x70, 0x78, 0x6f, 0x15, 0x58, 0x5a, 0x43, 0x33, 0x38, 0x7b, 0x41,
- 0x2e, 0xa2, 0x3f, 0x5f, 0x01, 0x7c, 0x50, 0x14, 0x80, 0x68, 0xfb, 0xcf,
- 0xd5, 0xd5, 0x00, 0x02, 0x00, 0x46, 0xfe, 0xdd, 0x07, 0x9c, 0x05, 0xee,
- 0x00, 0x51, 0x00, 0x65, 0x00, 0x00, 0x01, 0x33, 0x03, 0x06, 0x15, 0x14,
- 0x17, 0x16, 0x33, 0x32, 0x37, 0x36, 0x37, 0x36, 0x35, 0x34, 0x27, 0x26,
- 0x27, 0x26, 0x23, 0x22, 0x07, 0x06, 0x07, 0x06, 0x15, 0x14, 0x17, 0x16,
- 0x17, 0x16, 0x33, 0x32, 0x37, 0x17, 0x06, 0x23, 0x20, 0x27, 0x26, 0x27,
- 0x26, 0x35, 0x10, 0x37, 0x36, 0x37, 0x36, 0x37, 0x36, 0x33, 0x20, 0x17,
- 0x16, 0x17, 0x16, 0x15, 0x14, 0x07, 0x06, 0x07, 0x06, 0x23, 0x22, 0x27,
- 0x06, 0x07, 0x06, 0x23, 0x22, 0x27, 0x26, 0x35, 0x34, 0x37, 0x36, 0x37,
- 0x36, 0x33, 0x32, 0x17, 0x01, 0x32, 0x37, 0x36, 0x37, 0x36, 0x35, 0x34,
- 0x27, 0x26, 0x23, 0x22, 0x07, 0x06, 0x07, 0x06, 0x15, 0x14, 0x17, 0x16,
- 0x05, 0x52, 0xaa, 0xb8, 0x19, 0x2e, 0x1a, 0x1e, 0x6f, 0x62, 0x65, 0x1b,
- 0x07, 0x92, 0x8c, 0xd9, 0x6a, 0x6f, 0xfd, 0xd4, 0xc1, 0x59, 0x3a, 0x9e,
- 0x97, 0xf1, 0x69, 0x71, 0xa3, 0xe8, 0x39, 0xe6, 0xe9, 0xfe, 0xc9, 0xf6,
- 0xd9, 0x60, 0x3d, 0x8d, 0x4c, 0x6a, 0xb6, 0xfc, 0x7e, 0x7a, 0x01, 0x1e,
- 0xe9, 0xcd, 0x5b, 0x3a, 0x7b, 0x18, 0x1d, 0x9b, 0xe2, 0xc5, 0x1d, 0x75,
- 0x7f, 0x17, 0x18, 0x8d, 0x5f, 0x61, 0x78, 0x6d, 0x9e, 0x45, 0x46, 0xac,
- 0x4e, 0xfe, 0x7b, 0x79, 0x5f, 0x4e, 0x14, 0x05, 0x47, 0x33, 0x46, 0x72,
- 0x5f, 0x61, 0x14, 0x04, 0x48, 0x39, 0x04, 0x02, 0xfd, 0xc3, 0x45, 0x22,
- 0x2f, 0x1c, 0x0f, 0x6e, 0x72, 0x9f, 0x2c, 0x2c, 0xcf, 0xa9, 0xa1, 0x3e,
- 0x1e, 0x9a, 0x8d, 0xd8, 0x8d, 0x95, 0xf3, 0xb9, 0xb0, 0x3d, 0x1b, 0x41,
- 0x89, 0x56, 0xa1, 0x8e, 0xdf, 0x8c, 0x99, 0x01, 0x07, 0xee, 0x80, 0x60,
- 0xa6, 0x42, 0x21, 0x99, 0x86, 0xce, 0x82, 0x8b, 0xcc, 0xb7, 0x25, 0x21,
- 0xb6, 0x9d, 0x7f, 0x11, 0x03, 0x6a, 0x6c, 0xa1, 0xbc, 0x9f, 0x90, 0x35,
- 0x17, 0xb2, 0xfd, 0x87, 0x99, 0x7e, 0x98, 0x23, 0x1e, 0x5b, 0x36, 0x27,
- 0x6c, 0x6f, 0x9c, 0x20, 0x1f, 0x72, 0x48, 0x38, 0x00, 0x02, 0x00, 0x23,
- 0x00, 0x00, 0x05, 0x39, 0x05, 0xd5, 0x00, 0x07, 0x00, 0x0a, 0x00, 0x00,
- 0x01, 0x21, 0x03, 0x23, 0x01, 0x33, 0x01, 0x23, 0x0b, 0x02, 0x03, 0xcb,
- 0xfd, 0xc0, 0x9d, 0xcb, 0x02, 0x14, 0xf6, 0x02, 0x0c, 0xd5, 0xce, 0xe6,
- 0xf6, 0x01, 0xc1, 0xfe, 0x3f, 0x05, 0xd5, 0xfa, 0x2b, 0x02, 0x60, 0x02,
- 0xa8, 0xfd, 0x58, 0x00, 0x00, 0x03, 0x00, 0xa2, 0x00, 0x00, 0x04, 0xfc,
- 0x05, 0xd5, 0x00, 0x10, 0x00, 0x1b, 0x00, 0x26, 0x00, 0x00, 0x01, 0x14,
- 0x07, 0x06, 0x23, 0x21, 0x11, 0x21, 0x20, 0x17, 0x16, 0x15, 0x14, 0x07,
- 0x16, 0x17, 0x16, 0x01, 0x34, 0x27, 0x26, 0x23, 0x21, 0x11, 0x21, 0x32,
- 0x37, 0x36, 0x03, 0x32, 0x37, 0x36, 0x35, 0x34, 0x27, 0x26, 0x23, 0x21,
- 0x11, 0x04, 0xfc, 0x82, 0x77, 0xbf, 0xfd, 0x5e, 0x02, 0x5e, 0x01, 0x17,
- 0x6d, 0x36, 0xce, 0xbd, 0x37, 0x1c, 0xff, 0x00, 0xd0, 0x29, 0x32, 0xfe,
- 0x8f, 0x01, 0x71, 0xf7, 0x2b, 0x09, 0xcb, 0xb8, 0x3d, 0x17, 0x67, 0x42,
- 0x63, 0xfe, 0x2f, 0x01, 0xaa, 0xc7, 0x76, 0x6d, 0x05, 0xd5, 0xb4, 0x59,
- 0x6e, 0xe4, 0x62, 0x48, 0x85, 0x43, 0x02, 0x3b, 0xc9, 0x1f, 0x06, 0xfe,
- 0x25, 0x9f, 0x23, 0xfc, 0x94, 0x8c, 0x35, 0x3f, 0x92, 0x44, 0x2c, 0xfd,
- 0xfe, 0x00, 0x00, 0x01, 0x00, 0x62, 0xff, 0xd1, 0x05, 0x6a, 0x05, 0xee,
- 0x00, 0x23, 0x00, 0x00, 0x13, 0x34, 0x37, 0x12, 0x25, 0x36, 0x33, 0x20,
- 0x13, 0x16, 0x17, 0x23, 0x26, 0x27, 0x26, 0x23, 0x22, 0x07, 0x06, 0x11,
- 0x10, 0x17, 0x16, 0x33, 0x32, 0x37, 0x36, 0x37, 0x33, 0x02, 0x21, 0x20,
- 0x03, 0x26, 0x03, 0x26, 0x62, 0x65, 0x92, 0x01, 0x3a, 0x3a, 0x3f, 0x01,
- 0xa2, 0x7c, 0x15, 0x0d, 0xc3, 0x2f, 0xb2, 0x4c, 0x66, 0xde, 0x7e, 0x79,
- 0x91, 0x81, 0xd3, 0xec, 0x66, 0x36, 0x18, 0xc4, 0x43, 0xfd, 0xdd, 0xfe,
- 0x8f, 0xb1, 0x76, 0x09, 0x01, 0x02, 0xd9, 0xfc, 0xc5, 0x01, 0x1d, 0x2e,
- 0x09, 0xfe, 0x9b, 0x3c, 0x47, 0xe6, 0x3f, 0x1b, 0xad, 0xa5, 0xfe, 0xe7,
- 0xfe, 0xd9, 0xa6, 0x95, 0xb2, 0x5e, 0x98, 0xfd, 0xb0, 0x01, 0x1d, 0xbc,
- 0x01, 0x08, 0x14, 0x00, 0x00, 0x02, 0x00, 0xb6, 0x00, 0x00, 0x05, 0x56,
- 0x05, 0xd5, 0x00, 0x09, 0x00, 0x14, 0x00, 0x00, 0x33, 0x11, 0x21, 0x20,
- 0x00, 0x11, 0x10, 0x07, 0x06, 0x21, 0x25, 0x21, 0x20, 0x13, 0x36, 0x35,
- 0x10, 0x25, 0x26, 0x23, 0x21, 0xb6, 0x02, 0x40, 0x01, 0x1b, 0x01, 0x45,
- 0xaf, 0xa2, 0xfe, 0xf1, 0xfe, 0x7f, 0x01, 0x60, 0x01, 0x2f, 0x65, 0x2f,
- 0xff, 0x00, 0x55, 0x6e, 0xfe, 0xa0, 0x05, 0xd5, 0xfe, 0x72, 0xfe, 0xa5,
- 0xfe, 0x95, 0xc9, 0xb8, 0xa8, 0x01, 0x10, 0x7d, 0xb4, 0x01, 0xaf, 0x70,
- 0x25, 0x00, 0x00, 0x01, 0x00, 0xb8, 0x00, 0x00, 0x04, 0xe7, 0x05, 0xd5,
- 0x00, 0x0b, 0x00, 0x00, 0x01, 0x11, 0x21, 0x15, 0x21, 0x11, 0x21, 0x15,
- 0x21, 0x11, 0x21, 0x15, 0x01, 0x77, 0x03, 0x70, 0xfb, 0xd1, 0x04, 0x0b,
- 0xfc, 0xb4, 0x03, 0x2d, 0x02, 0xa8, 0xfe, 0x00, 0xa8, 0x05, 0xd5, 0xa8,
- 0xfe, 0x23, 0xa8, 0x00, 0x00, 0x01, 0x00, 0xb8, 0x00, 0x00, 0x04, 0xa2,
- 0x05, 0xd5, 0x00, 0x09, 0x00, 0x00, 0x01, 0x11, 0x23, 0x11, 0x21, 0x15,
- 0x21, 0x11, 0x21, 0x15, 0x01, 0x77, 0xbf, 0x03, 0xea, 0xfc, 0xd5, 0x02,
- 0xc8, 0x02, 0xa8, 0xfd, 0x58, 0x05, 0xd5, 0xa8, 0xfe, 0x23, 0xa8, 0x00,
- 0x00, 0x01, 0x00, 0x5a, 0xff, 0xd1, 0x05, 0xac, 0x05, 0xee, 0x00, 0x31,
- 0x00, 0x00, 0x01, 0x14, 0x17, 0x16, 0x05, 0x32, 0x33, 0x32, 0x37, 0x36,
- 0x37, 0x36, 0x3d, 0x01, 0x21, 0x35, 0x21, 0x11, 0x23, 0x27, 0x06, 0x07,
- 0x06, 0x23, 0x20, 0x27, 0x26, 0x03, 0x26, 0x35, 0x34, 0x37, 0x12, 0x25,
- 0x36, 0x33, 0x20, 0x17, 0x16, 0x17, 0x23, 0x26, 0x27, 0x26, 0x23, 0x22,
- 0x07, 0x06, 0x03, 0x14, 0x01, 0x19, 0x58, 0x88, 0x01, 0x28, 0x07, 0x07,
- 0xc6, 0x84, 0x81, 0x09, 0x01, 0xfe, 0x39, 0x02, 0x6f, 0x79, 0x2f, 0xbe,
- 0xfb, 0x22, 0x23, 0xfe, 0xf7, 0xb7, 0xb4, 0x2c, 0x0c, 0x61, 0x8d, 0x01,
- 0x30, 0x52, 0x5d, 0x01, 0x35, 0xaa, 0x72, 0x20, 0xc3, 0x24, 0x95, 0x6a,
- 0x8d, 0xe5, 0x8f, 0x93, 0x05, 0x02, 0xe5, 0xd1, 0xa0, 0xf5, 0x06, 0x7b,
- 0x79, 0xbc, 0x0e, 0x0d, 0x29, 0xa7, 0xfc, 0xe4, 0xc6, 0xd3, 0x17, 0x03,
- 0xab, 0xa7, 0x01, 0x17, 0x4e, 0x53, 0xea, 0xc0, 0x01, 0x19, 0x3f, 0x11,
- 0xb2, 0x76, 0xb6, 0xaa, 0x52, 0x3a, 0x9d, 0xa2, 0xfe, 0xef, 0x08, 0x00,
- 0x00, 0x01, 0x00, 0xaa, 0x00, 0x00, 0x05, 0x27, 0x05, 0xd5, 0x00, 0x0b,
- 0x00, 0x00, 0x01, 0x21, 0x11, 0x23, 0x11, 0x33, 0x11, 0x21, 0x11, 0x33,
- 0x11, 0x23, 0x04, 0x68, 0xfd, 0x00, 0xbe, 0xbe, 0x03, 0x00, 0xbf, 0xbf,
- 0x02, 0xa8, 0xfd, 0x58, 0x05, 0xd5, 0xfd, 0x7b, 0x02, 0x85, 0xfa, 0x2b,
- 0x00, 0x01, 0x00, 0xcd, 0x00, 0x00, 0x01, 0x8d, 0x05, 0xd5, 0x00, 0x03,
- 0x00, 0x00, 0x01, 0x11, 0x23, 0x11, 0x01, 0x8d, 0xc0, 0x05, 0xd5, 0xfa,
- 0x2b, 0x05, 0xd5, 0x00, 0x00, 0x01, 0x00, 0x23, 0xff, 0xd1, 0x03, 0x68,
- 0x05, 0xd5, 0x00, 0x15, 0x00, 0x00, 0x25, 0x32, 0x37, 0x36, 0x35, 0x11,
- 0x33, 0x11, 0x14, 0x07, 0x06, 0x23, 0x22, 0x27, 0x26, 0x3d, 0x01, 0x33,
- 0x15, 0x14, 0x17, 0x16, 0x01, 0xc5, 0xa7, 0x2c, 0x12, 0xbe, 0x88, 0x6f,
- 0xae, 0xd6, 0x71, 0x59, 0xc2, 0x80, 0x2a, 0x71, 0xa0, 0x42, 0x67, 0x04,
- 0x1b, 0xfb, 0xa0, 0xd6, 0x72, 0x5c, 0x83, 0x67, 0xa1, 0x83, 0x60, 0xc6,
- 0x36, 0x12, 0x00, 0x01, 0x00, 0xa2, 0x00, 0x00, 0x05, 0x44, 0x05, 0xd5,
- 0x00, 0x0b, 0x00, 0x00, 0x01, 0x11, 0x23, 0x11, 0x33, 0x11, 0x01, 0x33,
- 0x09, 0x01, 0x23, 0x01, 0x01, 0x60, 0xbe, 0xbe, 0x02, 0xe8, 0xf5, 0xfd,
- 0xa0, 0x02, 0x67, 0xe2, 0xfd, 0xf2, 0x02, 0x0a, 0xfd, 0xf6, 0x05, 0xd5,
- 0xfd, 0x0c, 0x02, 0xf4, 0xfd, 0xa0, 0xfc, 0x8b, 0x02, 0xfe, 0x00, 0x01,
- 0x00, 0xa4, 0x00, 0x00, 0x04, 0x44, 0x05, 0xd5, 0x00, 0x05, 0x00, 0x00,
- 0x01, 0x11, 0x21, 0x15, 0x21, 0x11, 0x01, 0x62, 0x02, 0xe2, 0xfc, 0x60,
- 0x05, 0xd5, 0xfa, 0xd3, 0xa8, 0x05, 0xd5, 0x00, 0x00, 0x01, 0x00, 0x9a,
- 0x00, 0x00, 0x06, 0x17, 0x05, 0xd5, 0x00, 0x0c, 0x00, 0x00, 0x21, 0x23,
- 0x01, 0x11, 0x23, 0x11, 0x21, 0x09, 0x01, 0x21, 0x11, 0x23, 0x11, 0x03,
- 0xbe, 0xc8, 0xfe, 0x58, 0xb4, 0x01, 0x08, 0x01, 0xba, 0x01, 0xb2, 0x01,
- 0x09, 0xb5, 0x04, 0xe3, 0xfb, 0x1d, 0x05, 0xd5, 0xfa, 0xec, 0x05, 0x14,
- 0xfa, 0x2b, 0x04, 0xe3, 0x00, 0x01, 0x00, 0x9c, 0x00, 0x00, 0x05, 0x2b,
- 0x05, 0xd5, 0x00, 0x09, 0x00, 0x00, 0x01, 0x11, 0x23, 0x01, 0x11, 0x23,
- 0x11, 0x33, 0x01, 0x11, 0x05, 0x2b, 0xd7, 0xfc, 0xfc, 0xb4, 0xce, 0x03,
- 0x0d, 0x05, 0xd5, 0xfa, 0x2b, 0x04, 0xba, 0xfb, 0x46, 0x05, 0xd5, 0xfb,
- 0x3b, 0x04, 0xc5, 0x00, 0x00, 0x02, 0x00, 0x4e, 0xff, 0xd1, 0x05, 0xf0,
- 0x05, 0xee, 0x00, 0x16, 0x00, 0x2c, 0x00, 0x00, 0x01, 0x10, 0x00, 0x07,
- 0x06, 0x23, 0x20, 0x27, 0x26, 0x03, 0x26, 0x35, 0x10, 0x37, 0x36, 0x25,
- 0x36, 0x33, 0x20, 0x17, 0x16, 0x13, 0x16, 0x01, 0x22, 0x07, 0x06, 0x03,
- 0x06, 0x15, 0x10, 0x17, 0x16, 0x17, 0x16, 0x33, 0x32, 0x37, 0x36, 0x37,
- 0x36, 0x35, 0x10, 0x27, 0x26, 0x05, 0xf0, 0xfe, 0xd4, 0xfc, 0x51, 0x58,
- 0xfe, 0xe0, 0xc1, 0xbd, 0x29, 0x0a, 0xa8, 0x9d, 0x01, 0x03, 0x41, 0x46,
- 0x01, 0x2d, 0xc2, 0xbf, 0x20, 0x05, 0xfd, 0x2d, 0xe2, 0x90, 0x94, 0x0a,
- 0x01, 0x8f, 0x88, 0xdd, 0x0f, 0x10, 0xde, 0x91, 0x93, 0x0f, 0x01, 0x94,
- 0x96, 0x02, 0xd3, 0xfe, 0xe0, 0xfe, 0x66, 0x36, 0x12, 0xb0, 0xac, 0x01,
- 0x20, 0x47, 0x4b, 0x01, 0x3f, 0xd3, 0xc6, 0x2c, 0x0b, 0xb9, 0xb8, 0xfe,
- 0xc7, 0x37, 0x02, 0x39, 0x9a, 0x9f, 0xfe, 0xf7, 0x12, 0x13, 0xfe, 0xf0,
- 0xa9, 0xa1, 0x0b, 0x01, 0x97, 0x98, 0xfc, 0x19, 0x1a, 0x01, 0x1e, 0xab,
- 0xa3, 0x00, 0x00, 0x02, 0x00, 0xba, 0x00, 0x00, 0x04, 0xf0, 0x05, 0xd5,
- 0x00, 0x0c, 0x00, 0x17, 0x00, 0x00, 0x01, 0x14, 0x07, 0x06, 0x23, 0x21,
- 0x11, 0x23, 0x11, 0x21, 0x20, 0x17, 0x16, 0x01, 0x21, 0x32, 0x37, 0x36,
- 0x35, 0x34, 0x27, 0x26, 0x23, 0x21, 0x04, 0xf0, 0x7e, 0x72, 0xb2, 0xfe,
- 0x2b, 0xbf, 0x02, 0x69, 0x01, 0x17, 0x73, 0x43, 0xfc, 0x89, 0x01, 0x8d,
- 0xb1, 0x4a, 0x28, 0x77, 0x46, 0x66, 0xfe, 0x73, 0x04, 0x1f, 0xc7, 0x75,
- 0x6a, 0xfd, 0x87, 0x05, 0xd5, 0xb1, 0x69, 0xfe, 0x66, 0x71, 0x3e, 0x57,
- 0x9b, 0x43, 0x28, 0x00, 0x00, 0x02, 0x00, 0x4e, 0xff, 0x87, 0x05, 0xf0,
- 0x05, 0xee, 0x00, 0x18, 0x00, 0x33, 0x00, 0x00, 0x05, 0x07, 0x27, 0x06,
- 0x23, 0x20, 0x27, 0x26, 0x03, 0x26, 0x35, 0x10, 0x37, 0x36, 0x25, 0x36,
- 0x33, 0x20, 0x17, 0x16, 0x13, 0x16, 0x15, 0x10, 0x07, 0x01, 0x17, 0x36,
- 0x11, 0x10, 0x27, 0x26, 0x27, 0x26, 0x23, 0x22, 0x07, 0x06, 0x03, 0x06,
- 0x15, 0x10, 0x17, 0x16, 0x17, 0x16, 0x33, 0x32, 0x37, 0x36, 0x37, 0x27,
- 0x05, 0xdd, 0x60, 0xd7, 0xb1, 0xd6, 0xfe, 0xe0, 0xc1, 0xbd, 0x29, 0x0a,
- 0xa8, 0x9e, 0x01, 0x04, 0x41, 0x46, 0x01, 0x1f, 0xc2, 0xbb, 0x2a, 0x0b,
- 0xd3, 0xfe, 0xbc, 0xb6, 0xa2, 0x8e, 0x87, 0xdc, 0x10, 0x11, 0xe4, 0x90,
- 0x94, 0x0a, 0x01, 0x8f, 0x89, 0xdf, 0x0d, 0x0d, 0x75, 0x6f, 0x08, 0x09,
- 0x97, 0x02, 0x77, 0xb2, 0x68, 0xb0, 0xac, 0x01, 0x20, 0x47, 0x4b, 0x01,
- 0x3f, 0xd3, 0xc6, 0x2c, 0x0b, 0xaf, 0xaa, 0xfe, 0xe3, 0x48, 0x4d, 0xfe,
- 0xa1, 0xe8, 0x01, 0x08, 0x96, 0xb6, 0x01, 0x1d, 0x01, 0x0f, 0xa8, 0xa1,
- 0x0c, 0x01, 0x9b, 0x9f, 0xfe, 0xf6, 0x11, 0x12, 0xfe, 0xee, 0xa9, 0xa1,
- 0x09, 0x01, 0x31, 0x04, 0x04, 0x7f, 0x00, 0x02, 0x00, 0xbe, 0x00, 0x00,
- 0x05, 0x6f, 0x05, 0xd5, 0x00, 0x1d, 0x00, 0x28, 0x00, 0x00, 0x01, 0x16,
- 0x17, 0x16, 0x07, 0x06, 0x17, 0x16, 0x17, 0x15, 0x23, 0x26, 0x3d, 0x01,
- 0x34, 0x27, 0x26, 0x23, 0x21, 0x11, 0x23, 0x11, 0x21, 0x20, 0x17, 0x16,
- 0x15, 0x14, 0x07, 0x06, 0x03, 0x34, 0x27, 0x26, 0x23, 0x21, 0x11, 0x21,
- 0x32, 0x37, 0x36, 0x04, 0x4a, 0x9d, 0x23, 0x0e, 0x02, 0x02, 0x14, 0x15,
- 0x32, 0xe8, 0x29, 0x7b, 0x32, 0x49, 0xfe, 0x15, 0xbf, 0x02, 0xb1, 0x01,
- 0x28, 0x6a, 0x34, 0x67, 0x32, 0x2d, 0xa6, 0x35, 0x4a, 0xfe, 0x33, 0x01,
- 0xcd, 0xdb, 0x36, 0x14, 0x02, 0xe1, 0x44, 0x91, 0x3d, 0x89, 0x81, 0x39,
- 0x3a, 0x23, 0x2f, 0x60, 0x94, 0x85, 0xc3, 0x32, 0x15, 0xfd, 0x7d, 0x05,
- 0xd5, 0xb6, 0x5a, 0x7f, 0xab, 0x62, 0x30, 0x01, 0x22, 0xc9, 0x2b, 0x0e,
- 0xfd, 0xfe, 0x86, 0x32, 0x00, 0x01, 0x00, 0x62, 0xff, 0xd1, 0x04, 0xf8,
- 0x05, 0xee, 0x00, 0x32, 0x00, 0x00, 0x25, 0x20, 0x37, 0x36, 0x35, 0x34,
- 0x27, 0x26, 0x27, 0x25, 0x24, 0x11, 0x34, 0x37, 0x36, 0x33, 0x20, 0x17,
- 0x16, 0x17, 0x23, 0x26, 0x27, 0x26, 0x23, 0x22, 0x07, 0x06, 0x15, 0x14,
- 0x17, 0x16, 0x17, 0x05, 0x16, 0x17, 0x16, 0x15, 0x14, 0x07, 0x06, 0x21,
- 0x20, 0x27, 0x26, 0x27, 0x33, 0x15, 0x14, 0x17, 0x16, 0x02, 0xbc, 0x01,
- 0x22, 0x47, 0x14, 0xa5, 0x2f, 0x3e, 0xfe, 0x8d, 0xfe, 0xdb, 0x9e, 0x8d,
- 0xe8, 0x01, 0x31, 0x8e, 0x63, 0x01, 0xb5, 0x02, 0xa5, 0x54, 0x79, 0xb2,
- 0x5c, 0x40, 0x4b, 0x37, 0x74, 0x01, 0x76, 0xd2, 0x4a, 0x22, 0x62, 0x97,
- 0xfe, 0xb1, 0xfe, 0xe4, 0x9c, 0x93, 0x03, 0xb5, 0x74, 0x6c, 0x79, 0xa8,
- 0x2f, 0x37, 0x87, 0x47, 0x14, 0x10, 0x62, 0x4c, 0x01, 0x10, 0xd7, 0x76,
- 0x6a, 0xa7, 0x74, 0xb4, 0xc1, 0x49, 0x25, 0x5e, 0x41, 0x5d, 0x62, 0x35,
- 0x27, 0x1f, 0x65, 0x39, 0x9d, 0x49, 0x57, 0x9f, 0x75, 0xb5, 0x8d, 0x86,
- 0xf7, 0x0a, 0xa7, 0x5c, 0x55, 0x00, 0x00, 0x01, 0x00, 0x2b, 0x00, 0x00,
- 0x04, 0xbe, 0x05, 0xd5, 0x00, 0x07, 0x00, 0x00, 0x01, 0x11, 0x23, 0x11,
- 0x21, 0x35, 0x21, 0x15, 0x02, 0xd5, 0xbe, 0xfe, 0x14, 0x04, 0x93, 0x05,
- 0x2d, 0xfa, 0xd3, 0x05, 0x2d, 0xa8, 0xa8, 0x00, 0x00, 0x01, 0x00, 0xae,
- 0xff, 0xd1, 0x05, 0x29, 0x05, 0xd5, 0x00, 0x15, 0x00, 0x00, 0x01, 0x33,
- 0x11, 0x14, 0x07, 0x06, 0x21, 0x20, 0x27, 0x26, 0x35, 0x11, 0x33, 0x11,
- 0x14, 0x17, 0x16, 0x33, 0x32, 0x37, 0x36, 0x35, 0x04, 0x6a, 0xbf, 0x9d,
- 0x9d, 0xfe, 0xfa, 0xfe, 0xe0, 0x9a, 0x81, 0xbf, 0xae, 0x56, 0x78, 0xd9,
- 0x66, 0x42, 0x05, 0xd5, 0xfb, 0xe7, 0xe1, 0x86, 0x84, 0x9a, 0x81, 0xd0,
- 0x04, 0x19, 0xfb, 0xe7, 0xd0, 0x4d, 0x26, 0x7b, 0x50, 0x78, 0x00, 0x01,
- 0x00, 0x3d, 0x00, 0x00, 0x05, 0x29, 0x05, 0xd5, 0x00, 0x06, 0x00, 0x00,
- 0x21, 0x23, 0x01, 0x33, 0x09, 0x01, 0x33, 0x03, 0x23, 0xcd, 0xfd, 0xe7,
- 0xcd, 0x01, 0xb7, 0x01, 0x9d, 0xcb, 0x05, 0xd5, 0xfb, 0x10, 0x04, 0xf0,
- 0x00, 0x01, 0x00, 0x2d, 0x00, 0x00, 0x07, 0x6f, 0x05, 0xd5, 0x00, 0x0c,
- 0x00, 0x00, 0x21, 0x23, 0x09, 0x01, 0x23, 0x01, 0x33, 0x09, 0x01, 0x33,
- 0x09, 0x01, 0x33, 0x05, 0xf4, 0xd1, 0xfe, 0xa8, 0xfe, 0xb2, 0xd1, 0xfe,
- 0x81, 0xd5, 0x01, 0x19, 0x01, 0x4b, 0xcd, 0x01, 0x54, 0x01, 0x13, 0xd5,
- 0x04, 0xcb, 0xfb, 0x35, 0x05, 0xd5, 0xfb, 0x44, 0x04, 0xbc, 0xfb, 0x44,
- 0x04, 0xbc, 0x00, 0x01, 0x00, 0x2d, 0x00, 0x00, 0x05, 0x31, 0x05, 0xd5,
- 0x00, 0x0b, 0x00, 0x00, 0x09, 0x01, 0x23, 0x09, 0x01, 0x23, 0x09, 0x01,
- 0x33, 0x09, 0x01, 0x33, 0x03, 0x21, 0x02, 0x10, 0xeb, 0xfe, 0x68, 0xfe,
- 0x66, 0xe7, 0x02, 0x10, 0xfe, 0x11, 0xe7, 0x01, 0x7f, 0x01, 0x81, 0xe4,
- 0x02, 0xfe, 0xfd, 0x02, 0x02, 0x6f, 0xfd, 0x91, 0x02, 0xfe, 0x02, 0xd7,
- 0xfd, 0xb6, 0x02, 0x4a, 0x00, 0x01, 0x00, 0x1b, 0x00, 0x00, 0x05, 0x4a,
- 0x05, 0xd5, 0x00, 0x08, 0x00, 0x00, 0x01, 0x11, 0x23, 0x11, 0x01, 0x33,
- 0x09, 0x01, 0x33, 0x03, 0x19, 0xbf, 0xfd, 0xc1, 0xeb, 0x01, 0xb6, 0x01,
- 0xaa, 0xe4, 0x02, 0x4a, 0xfd, 0xb6, 0x02, 0x4a, 0x03, 0x8b, 0xfd, 0x29,
- 0x02, 0xd7, 0x00, 0x01, 0x00, 0x39, 0x00, 0x00, 0x04, 0xaa, 0x05, 0xd5,
- 0x00, 0x09, 0x00, 0x00, 0x01, 0x15, 0x01, 0x21, 0x15, 0x21, 0x35, 0x01,
- 0x21, 0x35, 0x04, 0xa6, 0xfc, 0x83, 0x03, 0x81, 0xfb, 0x8f, 0x03, 0x81,
- 0xfc, 0xb9, 0x05, 0xd5, 0xac, 0xfb, 0x7f, 0xa8, 0xa8, 0x04, 0x85, 0xa8,
- 0x00, 0x01, 0x00, 0x83, 0xfe, 0x4e, 0x02, 0x00, 0x05, 0xd5, 0x00, 0x07,
- 0x00, 0x00, 0x01, 0x15, 0x23, 0x11, 0x33, 0x15, 0x21, 0x11, 0x02, 0x00,
- 0xd3, 0xd3, 0xfe, 0x83, 0x05, 0xd5, 0x93, 0xf9, 0x9f, 0x93, 0x07, 0x87,
- 0x00, 0x01, 0xff, 0xf0, 0xff, 0xd7, 0x02, 0x46, 0x05, 0xd5, 0x00, 0x03,
- 0x00, 0x00, 0x13, 0x01, 0x23, 0x01, 0x60, 0x01, 0xe6, 0x71, 0xfe, 0x1b,
- 0x05, 0xd5, 0xfa, 0x02, 0x05, 0xfe, 0x00, 0x01, 0x00, 0x2f, 0xfe, 0x4e,
- 0x01, 0xac, 0x05, 0xd5, 0x00, 0x07, 0x00, 0x00, 0x13, 0x35, 0x33, 0x11,
- 0x23, 0x35, 0x21, 0x11, 0x2f, 0xd3, 0xd3, 0x01, 0x7d, 0xfe, 0x4e, 0x93,
- 0x06, 0x61, 0x93, 0xf8, 0x79, 0x00, 0x00, 0x01, 0x00, 0x5a, 0x02, 0xa2,
- 0x03, 0x66, 0x05, 0xac, 0x00, 0x06, 0x00, 0x00, 0x01, 0x33, 0x01, 0x23,
- 0x0b, 0x01, 0x23, 0x01, 0x93, 0x96, 0x01, 0x3d, 0x8d, 0xfa, 0xf8, 0x8d,
- 0x05, 0xac, 0xfc, 0xf6, 0x02, 0x66, 0xfd, 0x9a, 0x00, 0x01, 0xff, 0xd3,
- 0xfe, 0x98, 0x04, 0xa0, 0xfe, 0xfe, 0x00, 0x03, 0x00, 0x00, 0x01, 0x15,
- 0x21, 0x35, 0x04, 0xa0, 0xfb, 0x33, 0xfe, 0xfe, 0x66, 0x66, 0x00, 0x01,
- 0x00, 0x2d, 0x04, 0xbc, 0x01, 0xd9, 0x05, 0xec, 0x00, 0x03, 0x00, 0x00,
- 0x01, 0x13, 0x23, 0x01, 0x01, 0x14, 0xc5, 0x7b, 0xfe, 0xcf, 0x05, 0xec,
- 0xfe, 0xd0, 0x01, 0x30, 0x00, 0x02, 0x00, 0x56, 0xff, 0xd1, 0x04, 0x48,
- 0x04, 0x50, 0x00, 0x31, 0x00, 0x40, 0x00, 0x00, 0x13, 0x12, 0x25, 0x36,
- 0x33, 0x20, 0x17, 0x16, 0x15, 0x11, 0x14, 0x17, 0x16, 0x33, 0x32, 0x37,
- 0x15, 0x06, 0x23, 0x22, 0x27, 0x26, 0x27, 0x06, 0x07, 0x06, 0x23, 0x22,
- 0x27, 0x26, 0x35, 0x34, 0x37, 0x36, 0x37, 0x36, 0x37, 0x36, 0x37, 0x36,
- 0x3d, 0x01, 0x34, 0x27, 0x26, 0x23, 0x22, 0x07, 0x06, 0x07, 0x13, 0x32,
- 0x37, 0x36, 0x3d, 0x01, 0x06, 0x07, 0x06, 0x07, 0x06, 0x15, 0x14, 0x17,
- 0x16, 0x85, 0x0a, 0x01, 0x43, 0x2e, 0x33, 0x01, 0x31, 0x4c, 0x17, 0x46,
- 0x0a, 0x0c, 0x12, 0x13, 0x48, 0x2d, 0x7f, 0x23, 0x0a, 0x04, 0x90, 0x94,
- 0x23, 0x26, 0xc0, 0x5e, 0x42, 0x77, 0x54, 0xc6, 0x25, 0x5e, 0x84, 0x20,
- 0x0f, 0x82, 0x30, 0x3e, 0xb7, 0x31, 0x0f, 0x05, 0xaa, 0x9b, 0x61, 0x46,
- 0x38, 0x98, 0x9c, 0x3c, 0x6d, 0x66, 0x2e, 0x02, 0xf4, 0x01, 0x30, 0x27,
- 0x05, 0xae, 0x34, 0x43, 0xfd, 0x89, 0x48, 0x0a, 0x02, 0x04, 0x81, 0x12,
- 0x5e, 0x1c, 0x24, 0x84, 0x15, 0x05, 0x74, 0x51, 0x78, 0xb0, 0x4c, 0x36,
- 0x1d, 0x06, 0x0c, 0x10, 0x2d, 0x16, 0x23, 0x2d, 0x72, 0x22, 0x0c, 0x70,
- 0x21, 0x2d, 0xfd, 0x72, 0x5d, 0x43, 0x4c, 0xc0, 0x19, 0x17, 0x17, 0x1b,
- 0x31, 0x6d, 0x70, 0x29, 0x13, 0x00, 0x00, 0x02, 0x00, 0x6f, 0xff, 0xd1,
- 0x04, 0x2f, 0x05, 0xd5, 0x00, 0x14, 0x00, 0x24, 0x00, 0x00, 0x13, 0x33,
- 0x11, 0x36, 0x37, 0x36, 0x33, 0x32, 0x17, 0x16, 0x15, 0x10, 0x07, 0x06,
- 0x23, 0x22, 0x27, 0x26, 0x27, 0x15, 0x23, 0x01, 0x22, 0x07, 0x06, 0x15,
- 0x14, 0x17, 0x16, 0x33, 0x32, 0x37, 0x36, 0x35, 0x34, 0x27, 0x26, 0x6f,
- 0xaa, 0x68, 0xb6, 0x16, 0x17, 0xdd, 0x7c, 0x72, 0x8a, 0x7e, 0xcb, 0xd5,
- 0x77, 0x04, 0x04, 0x99, 0x01, 0xd5, 0x91, 0x53, 0x47, 0x6b, 0x4d, 0x73,
- 0x90, 0x57, 0x52, 0x6e, 0x51, 0x05, 0xd5, 0xfd, 0xcb, 0x9f, 0x0f, 0x02,
- 0xa3, 0x96, 0xfa, 0xfe, 0xe8, 0xa1, 0x93, 0xac, 0x06, 0x06, 0x89, 0x03,
- 0xb0, 0x81, 0x6f, 0xb0, 0xdb, 0x72, 0x52, 0x78, 0x71, 0xb0, 0xdd, 0x73,
- 0x56, 0x00, 0x00, 0x01, 0x00, 0x3f, 0xff, 0xd1, 0x03, 0xd1, 0x04, 0x50,
- 0x00, 0x1f, 0x00, 0x00, 0x01, 0x23, 0x26, 0x27, 0x26, 0x23, 0x22, 0x07,
- 0x06, 0x15, 0x14, 0x17, 0x16, 0x33, 0x32, 0x13, 0x33, 0x06, 0x07, 0x06,
- 0x23, 0x22, 0x27, 0x26, 0x11, 0x10, 0x37, 0x36, 0x33, 0x32, 0x17, 0x16,
- 0x03, 0xc5, 0xac, 0x18, 0x83, 0x2c, 0x37, 0xa5, 0x4d, 0x37, 0x7a, 0x49,
- 0x6a, 0xdb, 0x2b, 0xac, 0x13, 0xa3, 0x69, 0x97, 0xde, 0x81, 0x7d, 0x8b,
- 0x82, 0xd1, 0xf3, 0x6d, 0x3d, 0x02, 0xc9, 0xa9, 0x30, 0x10, 0x99, 0x6c,
- 0xa7, 0xf0, 0x69, 0x3e, 0x01, 0x02, 0xf0, 0x6b, 0x45, 0x9d, 0x99, 0x00,
- 0xff, 0x01, 0x14, 0xa1, 0x95, 0xa5, 0x5c, 0x00, 0x00, 0x02, 0x00, 0x35,
- 0xff, 0xd1, 0x03, 0xf6, 0x05, 0xd5, 0x00, 0x14, 0x00, 0x24, 0x00, 0x00,
- 0x01, 0x11, 0x23, 0x35, 0x06, 0x07, 0x06, 0x23, 0x22, 0x27, 0x26, 0x11,
- 0x10, 0x37, 0x36, 0x33, 0x32, 0x17, 0x16, 0x17, 0x11, 0x01, 0x22, 0x07,
- 0x06, 0x15, 0x14, 0x17, 0x16, 0x33, 0x32, 0x37, 0x36, 0x35, 0x34, 0x27,
- 0x26, 0x03, 0xf6, 0x98, 0x62, 0x85, 0x32, 0x3d, 0xe2, 0x7e, 0x73, 0x87,
- 0x7d, 0xc9, 0xd4, 0x6e, 0x04, 0x04, 0xfe, 0xd3, 0x93, 0x57, 0x4e, 0x6b,
- 0x53, 0x7c, 0x8f, 0x53, 0x49, 0x6e, 0x4d, 0x05, 0xd5, 0xfa, 0x2b, 0x8d,
- 0x8e, 0x21, 0x0d, 0xaa, 0x9b, 0x01, 0x05, 0x01, 0x0a, 0x9c, 0x8f, 0x9a,
- 0x06, 0x06, 0x02, 0x2b, 0xfd, 0xdb, 0x7d, 0x71, 0xb2, 0xd2, 0x73, 0x5a,
- 0x7d, 0x6f, 0xaf, 0xe2, 0x72, 0x50, 0x00, 0x02, 0x00, 0x52, 0xff, 0xd1,
- 0x04, 0x1b, 0x04, 0x50, 0x00, 0x1d, 0x00, 0x28, 0x00, 0x00, 0x01, 0x21,
- 0x16, 0x17, 0x16, 0x17, 0x16, 0x17, 0x16, 0x33, 0x32, 0x37, 0x33, 0x06,
- 0x07, 0x06, 0x23, 0x22, 0x27, 0x26, 0x35, 0x10, 0x37, 0x36, 0x33, 0x32,
- 0x17, 0x16, 0x17, 0x16, 0x05, 0x21, 0x36, 0x35, 0x34, 0x27, 0x26, 0x23,
- 0x22, 0x07, 0x06, 0x04, 0x1b, 0xfc, 0xe9, 0x02, 0x28, 0x07, 0x08, 0x4f,
- 0x90, 0x11, 0x12, 0xd2, 0x47, 0xac, 0x27, 0xa3, 0x6d, 0x94, 0xec, 0x83,
- 0x78, 0x8d, 0x85, 0xd9, 0xc5, 0x83, 0x46, 0x25, 0x2b, 0xfc, 0xed, 0x02,
- 0x5a, 0x02, 0x5a, 0x55, 0x7a, 0x95, 0x56, 0x3e, 0x01, 0xdf, 0x84, 0x48,
- 0x0d, 0x0c, 0x7b, 0x0e, 0x02, 0xd7, 0xd3, 0x61, 0x41, 0xa6, 0x97, 0xfc,
- 0x01, 0x11, 0x9f, 0x96, 0x7c, 0x42, 0x5d, 0x73, 0x58, 0x05, 0x08, 0x88,
- 0x5c, 0x57, 0x74, 0x55, 0x00, 0x01, 0x00, 0x25, 0x00, 0x00, 0x02, 0x10,
- 0x05, 0xdb, 0x00, 0x15, 0x00, 0x00, 0x01, 0x15, 0x23, 0x11, 0x23, 0x11,
- 0x23, 0x35, 0x33, 0x35, 0x34, 0x37, 0x36, 0x33, 0x32, 0x17, 0x15, 0x26,
- 0x23, 0x22, 0x1d, 0x01, 0x02, 0x10, 0xb2, 0xaa, 0x8f, 0x8f, 0x72, 0x3a,
- 0x50, 0x2f, 0x31, 0x27, 0x14, 0x77, 0x04, 0x31, 0x8b, 0xfc, 0x5a, 0x03,
- 0xa6, 0x8b, 0xb6, 0x9a, 0x3c, 0x1e, 0x0a, 0x8d, 0x02, 0x6d, 0xa8, 0x00,
- 0x00, 0x02, 0x00, 0x3b, 0xfe, 0x42, 0x03, 0xe9, 0x04, 0x50, 0x00, 0x2a,
- 0x00, 0x3a, 0x00, 0x00, 0x05, 0x22, 0x27, 0x26, 0x27, 0x26, 0x35, 0x10,
- 0x37, 0x36, 0x37, 0x32, 0x33, 0x32, 0x17, 0x16, 0x17, 0x35, 0x33, 0x11,
- 0x10, 0x07, 0x06, 0x07, 0x06, 0x23, 0x22, 0x27, 0x26, 0x27, 0x33, 0x16,
- 0x17, 0x16, 0x33, 0x32, 0x37, 0x36, 0x3d, 0x01, 0x06, 0x07, 0x06, 0x03,
- 0x22, 0x07, 0x06, 0x15, 0x14, 0x17, 0x16, 0x33, 0x32, 0x37, 0x36, 0x35,
- 0x10, 0x27, 0x26, 0x01, 0xf6, 0xac, 0x79, 0x89, 0x0c, 0x01, 0x80, 0x78,
- 0xbf, 0x09, 0x09, 0xc4, 0x7e, 0x03, 0x03, 0x9d, 0x45, 0x5a, 0xf0, 0x26,
- 0x2a, 0xf3, 0x70, 0x3f, 0x0a, 0xae, 0x18, 0xa2, 0x22, 0x28, 0xbe, 0x41,
- 0x2c, 0x64, 0x73, 0x32, 0x1b, 0x99, 0x50, 0x40, 0x78, 0x49, 0x6a, 0x9b,
- 0x4d, 0x3a, 0x80, 0x44, 0x2f, 0x81, 0x91, 0xf8, 0x15, 0x16, 0x01, 0x07,
- 0xa3, 0x98, 0x08, 0xb1, 0x04, 0x05, 0x9b, 0xfc, 0x7f, 0xfe, 0xe3, 0x87,
- 0xb0, 0x16, 0x04, 0x89, 0x4c, 0x6e, 0x92, 0x1c, 0x06, 0x82, 0x58, 0xaf,
- 0x37, 0x8d, 0x24, 0x0f, 0x03, 0xe1, 0x89, 0x6d, 0xac, 0xf4, 0x6c, 0x41,
- 0x8d, 0x69, 0xa5, 0x01, 0x09, 0x68, 0x37, 0x00, 0x00, 0x01, 0x00, 0x8f,
- 0x00, 0x00, 0x03, 0xe3, 0x05, 0xd5, 0x00, 0x17, 0x00, 0x00, 0x01, 0x34,
- 0x27, 0x26, 0x23, 0x22, 0x07, 0x06, 0x15, 0x11, 0x23, 0x11, 0x33, 0x11,
- 0x36, 0x37, 0x36, 0x33, 0x32, 0x17, 0x16, 0x15, 0x11, 0x23, 0x03, 0x39,
- 0x79, 0x2f, 0x35, 0x91, 0x50, 0x42, 0xaa, 0xaa, 0x5e, 0x67, 0x3e, 0x55,
- 0xbe, 0x59, 0x3b, 0xaa, 0x02, 0xe7, 0x90, 0x30, 0x13, 0x75, 0x61, 0x94,
- 0xfd, 0xb0, 0x05, 0xd5, 0xfd, 0xc9, 0x7a, 0x23, 0x15, 0x70, 0x4a, 0x6b,
- 0xfc, 0xd5, 0x00, 0x02, 0x00, 0x87, 0x00, 0x00, 0x01, 0x33, 0x05, 0xd5,
- 0x00, 0x03, 0x00, 0x07, 0x00, 0x00, 0x01, 0x15, 0x23, 0x35, 0x13, 0x11,
- 0x23, 0x11, 0x01, 0x33, 0xac, 0xac, 0xa9, 0x05, 0xd5, 0xd7, 0xd7, 0xfe,
- 0x5c, 0xfb, 0xcf, 0x04, 0x31, 0x00, 0x00, 0x02, 0xff, 0xdb, 0xfe, 0x42,
- 0x01, 0x39, 0x05, 0xd5, 0x00, 0x03, 0x00, 0x13, 0x00, 0x00, 0x01, 0x15,
- 0x23, 0x35, 0x11, 0x33, 0x11, 0x14, 0x07, 0x06, 0x23, 0x22, 0x27, 0x35,
- 0x16, 0x33, 0x32, 0x37, 0x36, 0x35, 0x01, 0x39, 0xaa, 0xaa, 0xce, 0x28,
- 0x2f, 0x1a, 0x1f, 0x23, 0x06, 0x5d, 0x1c, 0x12, 0x05, 0xd5, 0xd7, 0xd7,
- 0xfe, 0x5c, 0xfa, 0xf0, 0xb9, 0x20, 0x06, 0x06, 0x91, 0x02, 0x2e, 0x1f,
- 0x40, 0x00, 0x00, 0x01, 0x00, 0x77, 0x00, 0x00, 0x04, 0x04, 0x05, 0xd5,
- 0x00, 0x0b, 0x00, 0x00, 0x01, 0x11, 0x01, 0x33, 0x09, 0x01, 0x23, 0x01,
- 0x07, 0x11, 0x23, 0x11, 0x01, 0x21, 0x01, 0xc6, 0xdc, 0xfe, 0x8b, 0x01,
- 0xb6, 0xd3, 0xfe, 0x96, 0xa6, 0xaa, 0x05, 0xd5, 0xfc, 0x95, 0x01, 0xc7,
- 0xfe, 0x8d, 0xfd, 0x42, 0x02, 0x46, 0xa4, 0xfe, 0x5e, 0x05, 0xd5, 0x00,
- 0x00, 0x01, 0x00, 0x8b, 0x00, 0x00, 0x01, 0x37, 0x05, 0xd5, 0x00, 0x03,
- 0x00, 0x00, 0x01, 0x11, 0x23, 0x11, 0x01, 0x37, 0xac, 0x05, 0xd5, 0xfa,
- 0x2b, 0x05, 0xd5, 0x00, 0x00, 0x01, 0x00, 0x8f, 0x00, 0x00, 0x06, 0x19,
- 0x04, 0x50, 0x00, 0x2a, 0x00, 0x00, 0x13, 0x33, 0x15, 0x36, 0x37, 0x36,
- 0x33, 0x32, 0x17, 0x16, 0x17, 0x36, 0x37, 0x36, 0x33, 0x32, 0x17, 0x16,
- 0x15, 0x11, 0x23, 0x11, 0x34, 0x27, 0x26, 0x23, 0x22, 0x07, 0x06, 0x15,
- 0x11, 0x23, 0x11, 0x34, 0x27, 0x26, 0x23, 0x22, 0x07, 0x06, 0x15, 0x11,
- 0x23, 0x8f, 0x9e, 0x5d, 0x72, 0x36, 0x45, 0x9d, 0x54, 0x1a, 0x16, 0x5e,
- 0x62, 0x3a, 0x4f, 0xd4, 0x46, 0x1e, 0xac, 0x62, 0x2b, 0x3a, 0x6c, 0x4a,
- 0x46, 0xac, 0x71, 0x25, 0x31, 0x6c, 0x4a, 0x46, 0xac, 0x04, 0x31, 0x97,
- 0x83, 0x22, 0x11, 0x5e, 0x1e, 0x28, 0x71, 0x20, 0x13, 0x95, 0x40, 0x56,
- 0xfc, 0xdb, 0x02, 0xe3, 0x8e, 0x32, 0x17, 0x56, 0x51, 0x71, 0xfd, 0x5e,
- 0x02, 0xe3, 0x9c, 0x2c, 0x0f, 0x56, 0x51, 0x71, 0xfd, 0x5e, 0x00, 0x01,
- 0x00, 0x8f, 0x00, 0x00, 0x03, 0xe5, 0x04, 0x50, 0x00, 0x17, 0x00, 0x00,
- 0x13, 0x33, 0x15, 0x36, 0x37, 0x36, 0x33, 0x32, 0x17, 0x16, 0x15, 0x11,
- 0x23, 0x11, 0x34, 0x27, 0x26, 0x23, 0x22, 0x07, 0x06, 0x15, 0x11, 0x23,
- 0x8f, 0x9e, 0x5d, 0x7a, 0x3d, 0x50, 0xb6, 0x5d, 0x41, 0xaa, 0x5c, 0x35,
- 0x4c, 0x91, 0x50, 0x42, 0xac, 0x04, 0x31, 0xb4, 0x94, 0x2a, 0x15, 0x6b,
- 0x4b, 0x6f, 0xfc, 0xd5, 0x02, 0xe7, 0x7a, 0x38, 0x21, 0x75, 0x61, 0x94,
- 0xfd, 0xb0, 0x00, 0x02, 0x00, 0x4a, 0xff, 0xd1, 0x04, 0x14, 0x04, 0x50,
- 0x00, 0x0f, 0x00, 0x1f, 0x00, 0x00, 0x01, 0x20, 0x17, 0x16, 0x15, 0x10,
- 0x07, 0x06, 0x23, 0x22, 0x27, 0x26, 0x35, 0x10, 0x37, 0x36, 0x17, 0x22,
- 0x07, 0x06, 0x15, 0x14, 0x17, 0x16, 0x33, 0x32, 0x37, 0x36, 0x35, 0x34,
- 0x27, 0x26, 0x02, 0x2d, 0x01, 0x08, 0x7f, 0x60, 0x9a, 0x7f, 0xcc, 0xf9,
- 0x81, 0x6b, 0xa0, 0x7c, 0xc9, 0x9f, 0x53, 0x41, 0x77, 0x4c, 0x70, 0x9d,
- 0x53, 0x43, 0x7e, 0x4a, 0x04, 0x50, 0xc3, 0x95, 0xf0, 0xfe, 0xde, 0x98,
- 0x7d, 0xb4, 0x95, 0xf6, 0x01, 0x2f, 0x99, 0x78, 0x9e, 0x8a, 0x6d, 0xab,
- 0xee, 0x6d, 0x46, 0x86, 0x6c, 0xa9, 0xfd, 0x6c, 0x3f, 0x00, 0x00, 0x02,
- 0x00, 0x6f, 0xfe, 0x42, 0x04, 0x2f, 0x04, 0x50, 0x00, 0x11, 0x00, 0x21,
- 0x00, 0x00, 0x13, 0x11, 0x33, 0x15, 0x36, 0x20, 0x17, 0x16, 0x11, 0x10,
- 0x07, 0x06, 0x23, 0x22, 0x27, 0x26, 0x27, 0x11, 0x01, 0x22, 0x07, 0x06,
- 0x15, 0x14, 0x17, 0x16, 0x33, 0x32, 0x37, 0x36, 0x35, 0x34, 0x27, 0x26,
- 0x6f, 0x9d, 0x7a, 0x01, 0xb8, 0x7d, 0x74, 0x88, 0x7c, 0xc7, 0xa9, 0x72,
- 0x17, 0x17, 0x01, 0x2b, 0x91, 0x53, 0x47, 0x6b, 0x4d, 0x73, 0x91, 0x57,
- 0x4f, 0x6d, 0x51, 0xfe, 0x42, 0x05, 0xef, 0xa2, 0xc1, 0xa7, 0x9d, 0xfe,
- 0xfa, 0xfe, 0xf5, 0x9c, 0x8e, 0x6d, 0x17, 0x1c, 0xfd, 0xd1, 0x05, 0x6e,
- 0x81, 0x6f, 0xb0, 0xdb, 0x72, 0x52, 0x7a, 0x70, 0xaf, 0xdc, 0x73, 0x57,
- 0x00, 0x02, 0x00, 0x35, 0xfe, 0x42, 0x03, 0xf6, 0x04, 0x50, 0x00, 0x14,
- 0x00, 0x24, 0x00, 0x00, 0x01, 0x23, 0x11, 0x06, 0x07, 0x06, 0x23, 0x22,
- 0x27, 0x26, 0x35, 0x10, 0x37, 0x36, 0x33, 0x32, 0x17, 0x16, 0x17, 0x35,
- 0x33, 0x05, 0x22, 0x07, 0x06, 0x15, 0x14, 0x17, 0x16, 0x33, 0x32, 0x37,
- 0x36, 0x35, 0x34, 0x27, 0x26, 0x03, 0xf6, 0xaa, 0x60, 0x9d, 0x25, 0x2a,
- 0xdd, 0x7c, 0x72, 0x89, 0x7f, 0xcb, 0xc3, 0x7a, 0x0d, 0x0c, 0x98, 0xfe,
- 0x2b, 0x94, 0x57, 0x4f, 0x6b, 0x53, 0x7c, 0x8f, 0x53, 0x49, 0x6d, 0x4d,
- 0xfe, 0x42, 0x02, 0x39, 0x8d, 0x17, 0x06, 0xa3, 0x96, 0xfa, 0x01, 0x15,
- 0xa2, 0x95, 0x8e, 0x0f, 0x11, 0x8f, 0x81, 0x7d, 0x71, 0xb2, 0xd2, 0x73,
- 0x5a, 0x7d, 0x6e, 0xae, 0xe3, 0x73, 0x50, 0x00, 0x00, 0x01, 0x00, 0x8d,
- 0x00, 0x00, 0x02, 0x91, 0x04, 0x50, 0x00, 0x0f, 0x00, 0x00, 0x01, 0x06,
- 0x07, 0x06, 0x15, 0x11, 0x23, 0x11, 0x33, 0x15, 0x36, 0x37, 0x36, 0x33,
- 0x32, 0x17, 0x02, 0x91, 0xb0, 0x4e, 0x5a, 0xac, 0x9e, 0x64, 0x5f, 0x2d,
- 0x35, 0x17, 0x2a, 0x03, 0x9c, 0x03, 0x49, 0x55, 0xce, 0xfd, 0xd3, 0x04,
- 0x31, 0xc2, 0xa2, 0x2b, 0x14, 0x06, 0x00, 0x01, 0x00, 0x46, 0xff, 0xd1,
- 0x03, 0xac, 0x04, 0x50, 0x00, 0x32, 0x00, 0x00, 0x13, 0x1e, 0x01, 0x33,
- 0x32, 0x37, 0x36, 0x35, 0x34, 0x27, 0x26, 0x2f, 0x01, 0x26, 0x27, 0x26,
- 0x35, 0x34, 0x37, 0x36, 0x33, 0x32, 0x17, 0x16, 0x17, 0x23, 0x26, 0x27,
- 0x26, 0x23, 0x22, 0x07, 0x06, 0x15, 0x14, 0x17, 0x16, 0x1f, 0x01, 0x16,
- 0x17, 0x16, 0x15, 0x14, 0x07, 0x06, 0x23, 0x20, 0x27, 0x26, 0x27, 0xfa,
- 0x0f, 0x7e, 0x79, 0x93, 0x42, 0x25, 0x4f, 0x22, 0x35, 0xa0, 0xd4, 0x48,
- 0x38, 0x80, 0x6f, 0xad, 0xfc, 0x5c, 0x2c, 0x01, 0xb4, 0x05, 0xa3, 0x16,
- 0x19, 0x8f, 0x3a, 0x1b, 0x65, 0x28, 0x3a, 0xa4, 0xd1, 0x3e, 0x20, 0x88,
- 0x76, 0xbc, 0xfe, 0xa4, 0x41, 0x0d, 0x02, 0x01, 0x3f, 0x72, 0x5e, 0x4a,
- 0x28, 0x36, 0x50, 0x27, 0x11, 0x0d, 0x27, 0x33, 0x52, 0x41, 0x6f, 0xa1,
- 0x5a, 0x4d, 0x9a, 0x49, 0x67, 0x96, 0x13, 0x03, 0x4d, 0x25, 0x30, 0x50,
- 0x2b, 0x10, 0x0e, 0x27, 0x32, 0x6d, 0x3a, 0x52, 0xa6, 0x5d, 0x51, 0xfc,
- 0x34, 0x3e, 0x00, 0x01, 0x00, 0x1d, 0xff, 0xd1, 0x02, 0x08, 0x05, 0x58,
- 0x00, 0x17, 0x00, 0x00, 0x01, 0x15, 0x23, 0x11, 0x14, 0x17, 0x16, 0x33,
- 0x32, 0x37, 0x15, 0x06, 0x23, 0x22, 0x27, 0x26, 0x35, 0x11, 0x23, 0x35,
- 0x33, 0x11, 0x33, 0x11, 0x02, 0x08, 0xb0, 0x1f, 0x14, 0x2b, 0x36, 0x1c,
- 0x50, 0x3b, 0x9e, 0x26, 0x0b, 0x91, 0x91, 0xaa, 0x04, 0x31, 0x8b, 0xfd,
- 0x21, 0x45, 0x11, 0x0b, 0x09, 0x90, 0x0e, 0x69, 0x1d, 0x24, 0x03, 0x2b,
- 0x8b, 0x01, 0x27, 0xfe, 0xd9, 0x00, 0x00, 0x01, 0x00, 0x85, 0xff, 0xd1,
- 0x03, 0xdb, 0x04, 0x31, 0x00, 0x17, 0x00, 0x00, 0x21, 0x23, 0x35, 0x06,
- 0x07, 0x06, 0x23, 0x22, 0x27, 0x26, 0x35, 0x11, 0x33, 0x11, 0x14, 0x17,
- 0x16, 0x33, 0x32, 0x37, 0x36, 0x35, 0x11, 0x33, 0x03, 0xdb, 0x99, 0x60,
- 0x71, 0x41, 0x55, 0xb9, 0x5c, 0x41, 0xaa, 0x5c, 0x35, 0x4c, 0x93, 0x50,
- 0x42, 0xaa, 0x96, 0x87, 0x28, 0x16, 0x6c, 0x4b, 0x6e, 0x03, 0x3b, 0xfd,
- 0x08, 0x7a, 0x38, 0x21, 0x76, 0x61, 0x94, 0x02, 0x60, 0x00, 0x00, 0x01,
- 0x00, 0x14, 0x00, 0x00, 0x03, 0xe3, 0x04, 0x31, 0x00, 0x06, 0x00, 0x00,
- 0x21, 0x23, 0x01, 0x33, 0x09, 0x01, 0x33, 0x02, 0x48, 0xbb, 0xfe, 0x87,
- 0xc1, 0x01, 0x1f, 0x01, 0x2f, 0xc0, 0x04, 0x31, 0xfc, 0x9a, 0x03, 0x66,
- 0x00, 0x01, 0x00, 0x0c, 0x00, 0x00, 0x05, 0xaa, 0x04, 0x31, 0x00, 0x0c,
- 0x00, 0x00, 0x21, 0x23, 0x0b, 0x01, 0x23, 0x01, 0x33, 0x1b, 0x01, 0x33,
- 0x1b, 0x01, 0x33, 0x04, 0x6f, 0xc3, 0xd9, 0xcf, 0xc0, 0xfe, 0xc8, 0xbd,
- 0xdb, 0xcd, 0xd1, 0xd2, 0xd5, 0xc1, 0x03, 0x4a, 0xfc, 0xb6, 0x04, 0x31,
- 0xfc, 0xbd, 0x03, 0x43, 0xfc, 0xbd, 0x03, 0x43, 0x00, 0x01, 0x00, 0x23,
- 0x00, 0x00, 0x03, 0xc9, 0x04, 0x31, 0x00, 0x0b, 0x00, 0x00, 0x09, 0x01,
- 0x23, 0x09, 0x01, 0x23, 0x09, 0x01, 0x33, 0x09, 0x01, 0x33, 0x02, 0x56,
- 0x01, 0x73, 0xc7, 0xfe, 0xf4, 0xfe, 0xef, 0xc2, 0x01, 0x7b, 0xfe, 0x99,
- 0xc3, 0x01, 0x02, 0x01, 0x02, 0xc0, 0x02, 0x2b, 0xfd, 0xd5, 0x01, 0x9c,
- 0xfe, 0x64, 0x02, 0x23, 0x02, 0x0e, 0xfe, 0x7b, 0x01, 0x85, 0x00, 0x01,
- 0x00, 0x29, 0xfe, 0x42, 0x03, 0xd3, 0x04, 0x31, 0x00, 0x11, 0x00, 0x00,
- 0x01, 0x33, 0x01, 0x06, 0x23, 0x22, 0x27, 0x35, 0x16, 0x33, 0x32, 0x37,
- 0x36, 0x3f, 0x01, 0x01, 0x33, 0x01, 0x03, 0x1b, 0xb8, 0xfe, 0x23, 0x54,
- 0xc1, 0x41, 0x31, 0x3b, 0x1f, 0x4c, 0x24, 0x0d, 0x0c, 0x41, 0xfe, 0x96,
- 0xb6, 0x01, 0x13, 0x04, 0x31, 0xfa, 0xee, 0xdd, 0x1a, 0x9a, 0x0d, 0x36,
- 0x15, 0x1e, 0xaa, 0x04, 0x35, 0xfc, 0xbd, 0x00, 0x00, 0x01, 0x00, 0x3f,
- 0x00, 0x00, 0x03, 0xa8, 0x04, 0x31, 0x00, 0x09, 0x00, 0x00, 0x01, 0x15,
- 0x01, 0x21, 0x15, 0x21, 0x35, 0x01, 0x21, 0x35, 0x03, 0x8b, 0xfd, 0x83,
- 0x02, 0x9a, 0xfc, 0x97, 0x02, 0x82, 0xfd, 0xa9, 0x04, 0x31, 0x97, 0xfc,
- 0xfc, 0x96, 0x9a, 0x03, 0x02, 0x95, 0x00, 0x01, 0x00, 0x58, 0xfe, 0x4e,
- 0x02, 0x35, 0x05, 0xd5, 0x00, 0x2a, 0x00, 0x00, 0x01, 0x15, 0x23, 0x22,
- 0x07, 0x06, 0x15, 0x11, 0x14, 0x07, 0x06, 0x07, 0x16, 0x17, 0x16, 0x15,
- 0x11, 0x14, 0x17, 0x16, 0x3b, 0x01, 0x15, 0x23, 0x22, 0x27, 0x26, 0x35,
- 0x11, 0x34, 0x27, 0x26, 0x27, 0x35, 0x36, 0x37, 0x36, 0x35, 0x11, 0x34,
- 0x37, 0x36, 0x33, 0x02, 0x35, 0x1e, 0x55, 0x19, 0x13, 0x3d, 0x25, 0x46,
- 0x8b, 0x18, 0x05, 0x25, 0x1b, 0x41, 0x1e, 0x5e, 0x8e, 0x36, 0x1b, 0x32,
- 0x23, 0x4b, 0x5e, 0x22, 0x20, 0x6f, 0x30, 0x40, 0x05, 0xd5, 0x85, 0x26,
- 0x1e, 0x45, 0xfe, 0x8d, 0xae, 0x4a, 0x2e, 0x1c, 0x41, 0xad, 0x27, 0x2e,
- 0xfe, 0x8d, 0x5b, 0x1a, 0x14, 0x85, 0x7a, 0x3d, 0x55, 0x01, 0x56, 0xa6,
- 0x3c, 0x2a, 0x0f, 0x8d, 0x13, 0x41, 0x3d, 0x8a, 0x01, 0x56, 0xb3, 0x3e,
- 0x1b, 0x00, 0x00, 0x01, 0x00, 0xcd, 0xfe, 0x4e, 0x01, 0x48, 0x05, 0xd5,
- 0x00, 0x03, 0x00, 0x00, 0x13, 0x33, 0x11, 0x23, 0xcd, 0x7b, 0x7b, 0x05,
- 0xd5, 0xf8, 0x79, 0x00, 0x00, 0x01, 0x00, 0x3b, 0xfe, 0x4e, 0x02, 0x19,
- 0x05, 0xd5, 0x00, 0x2a, 0x00, 0x00, 0x13, 0x35, 0x33, 0x32, 0x37, 0x36,
- 0x35, 0x11, 0x34, 0x37, 0x36, 0x37, 0x26, 0x27, 0x26, 0x35, 0x11, 0x34,
- 0x27, 0x26, 0x2b, 0x01, 0x35, 0x33, 0x32, 0x17, 0x16, 0x15, 0x11, 0x14,
- 0x17, 0x16, 0x17, 0x15, 0x06, 0x07, 0x06, 0x15, 0x11, 0x14, 0x07, 0x06,
- 0x23, 0x3b, 0x21, 0x56, 0x1a, 0x13, 0x79, 0x15, 0x1a, 0x8f, 0x15, 0x04,
- 0x25, 0x1c, 0x42, 0x21, 0x61, 0x92, 0x35, 0x1a, 0x33, 0x22, 0x47, 0x5d,
- 0x21, 0x1e, 0x71, 0x30, 0x40, 0xfe, 0x4e, 0x85, 0x26, 0x1d, 0x46, 0x01,
- 0x73, 0xd4, 0x53, 0x0f, 0x0b, 0x43, 0xb7, 0x22, 0x28, 0x01, 0x73, 0x5b,
- 0x1a, 0x14, 0x85, 0x7d, 0x3c, 0x53, 0xfe, 0xaa, 0xa7, 0x3c, 0x29, 0x0f,
- 0x8d, 0x14, 0x44, 0x3e, 0x85, 0xfe, 0xaa, 0xb4, 0x3e, 0x1a, 0x00, 0x01,
- 0x00, 0x9a, 0x02, 0x25, 0x04, 0x10, 0x03, 0x81, 0x00, 0x1f, 0x00, 0x00,
- 0x01, 0x22, 0x07, 0x06, 0x15, 0x23, 0x36, 0x37, 0x36, 0x33, 0x32, 0x1f,
- 0x01, 0x16, 0x33, 0x32, 0x37, 0x36, 0x3d, 0x01, 0x33, 0x15, 0x14, 0x07,
- 0x06, 0x23, 0x22, 0x2f, 0x01, 0x26, 0x27, 0x26, 0x01, 0x73, 0x5e, 0x0e,
- 0x01, 0x6c, 0x0c, 0x87, 0x22, 0x28, 0x39, 0x35, 0xf0, 0x39, 0x2d, 0x51,
- 0x12, 0x06, 0x6c, 0x59, 0x35, 0x49, 0x4f, 0x57, 0xc8, 0x28, 0x28, 0x05,
- 0x02, 0xf8, 0x95, 0x05, 0x06, 0xea, 0x32, 0x0d, 0x21, 0x8d, 0x23, 0x4d,
- 0x1b, 0x27, 0x0b, 0x21, 0x96, 0x45, 0x29, 0x35, 0x81, 0x17, 0x05, 0x01,
- 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x06,
- 0x00, 0x04, 0x00, 0x00, 0xff, 0xff, 0x00, 0xfa, 0xfe, 0x5c, 0x01, 0xa6,
- 0x04, 0x31, 0x10, 0x0f, 0x00, 0x05, 0x02, 0xa4, 0x04, 0x31, 0xc0, 0x00,
- 0x00, 0x02, 0x00, 0x6a, 0xff, 0x0a, 0x04, 0x14, 0x05, 0x06, 0x00, 0x1e,
- 0x00, 0x27, 0x00, 0x00, 0x01, 0x11, 0x36, 0x37, 0x33, 0x06, 0x07, 0x06,
- 0x07, 0x15, 0x23, 0x35, 0x26, 0x27, 0x26, 0x35, 0x10, 0x37, 0x36, 0x37,
- 0x35, 0x33, 0x15, 0x16, 0x17, 0x16, 0x17, 0x23, 0x26, 0x27, 0x26, 0x03,
- 0x11, 0x06, 0x03, 0x06, 0x15, 0x14, 0x17, 0x16, 0x02, 0x7f, 0xc6, 0x23,
- 0xac, 0x0c, 0x8f, 0x65, 0x95, 0x56, 0xe0, 0x78, 0x67, 0x96, 0x73, 0xb6,
- 0x56, 0xef, 0x62, 0x32, 0x06, 0xac, 0x0f, 0x6b, 0x2c, 0x8d, 0xe7, 0x20,
- 0x05, 0x80, 0x3b, 0x03, 0xb2, 0xfc, 0xbb, 0x15, 0xef, 0xd8, 0x71, 0x50,
- 0x07, 0xc7, 0xc9, 0x14, 0xac, 0x93, 0xe0, 0x01, 0x1a, 0xa0, 0x7b, 0x13,
- 0xb8, 0xb6, 0x11, 0xa9, 0x56, 0x77, 0x93, 0x3a, 0x18, 0xfc, 0xc3, 0x03,
- 0x3f, 0x2b, 0xfe, 0xdf, 0x2c, 0x32, 0xef, 0x69, 0x31, 0x00, 0x00, 0x01,
- 0x00, 0x35, 0xff, 0xd1, 0x04, 0x48, 0x05, 0xd5, 0x00, 0x41, 0x00, 0x00,
- 0x01, 0x14, 0x1f, 0x01, 0x16, 0x17, 0x21, 0x15, 0x21, 0x16, 0x15, 0x14,
- 0x07, 0x06, 0x07, 0x36, 0x33, 0x32, 0x17, 0x16, 0x33, 0x32, 0x37, 0x17,
- 0x06, 0x07, 0x06, 0x23, 0x22, 0x27, 0x26, 0x27, 0x26, 0x23, 0x22, 0x07,
- 0x27, 0x36, 0x37, 0x36, 0x35, 0x34, 0x27, 0x23, 0x35, 0x33, 0x26, 0x27,
- 0x26, 0x35, 0x34, 0x37, 0x36, 0x37, 0x36, 0x33, 0x32, 0x17, 0x16, 0x17,
- 0x23, 0x02, 0x21, 0x22, 0x07, 0x06, 0x01, 0x2d, 0x34, 0x3e, 0x04, 0x03,
- 0x01, 0x48, 0xfe, 0xe9, 0x1f, 0x4f, 0x35, 0x6e, 0x79, 0x81, 0x45, 0x72,
- 0x60, 0x33, 0x4f, 0x5b, 0x56, 0x67, 0x7b, 0x15, 0x16, 0x58, 0x82, 0x75,
- 0x36, 0x17, 0x16, 0x6d, 0x72, 0x62, 0xb3, 0x31, 0x1c, 0x31, 0xe2, 0xa6,
- 0x54, 0x0f, 0x09, 0x7a, 0x7a, 0xba, 0x1c, 0x1d, 0xf8, 0x74, 0x54, 0x03,
- 0xb5, 0x09, 0xfe, 0xf3, 0x9a, 0x50, 0x37, 0x04, 0x2f, 0x56, 0x5d, 0x6d,
- 0x06, 0x07, 0x71, 0x57, 0x3a, 0x5f, 0x6c, 0x49, 0x6f, 0x50, 0x23, 0x1d,
- 0x3e, 0x87, 0x65, 0x0c, 0x02, 0x2c, 0x29, 0x06, 0x03, 0x4c, 0x87, 0x9a,
- 0x6e, 0x3d, 0x43, 0x4c, 0x53, 0x71, 0x8b, 0x3a, 0x24, 0x34, 0xac, 0x7b,
- 0x7a, 0x12, 0x03, 0xa1, 0x76, 0xc4, 0x01, 0x3b, 0x61, 0x43, 0x00, 0x02,
- 0x00, 0x89, 0x01, 0x10, 0x03, 0xe9, 0x04, 0x68, 0x00, 0x1f, 0x00, 0x2f,
- 0x00, 0x00, 0x01, 0x07, 0x27, 0x06, 0x23, 0x22, 0x27, 0x07, 0x27, 0x37,
- 0x26, 0x27, 0x34, 0x35, 0x34, 0x37, 0x36, 0x37, 0x27, 0x37, 0x17, 0x36,
- 0x33, 0x32, 0x17, 0x37, 0x17, 0x07, 0x16, 0x17, 0x14, 0x07, 0x01, 0x22,
- 0x07, 0x06, 0x15, 0x14, 0x17, 0x16, 0x33, 0x32, 0x37, 0x36, 0x35, 0x34,
- 0x27, 0x26, 0x03, 0xe1, 0x77, 0x6c, 0x52, 0x7b, 0x6e, 0x52, 0x69, 0x72,
- 0x62, 0x3c, 0x06, 0x3f, 0x01, 0x02, 0x6f, 0x73, 0x71, 0x59, 0x6d, 0x77,
- 0x52, 0x79, 0x74, 0x70, 0x32, 0x03, 0x3b, 0xfe, 0xbe, 0x62, 0x41, 0x36,
- 0x4a, 0x3e, 0x53, 0x5e, 0x42, 0x39, 0x4b, 0x3d, 0x01, 0x85, 0x6e, 0x6c,
- 0x3d, 0x33, 0x69, 0x75, 0x64, 0x52, 0x6e, 0x09, 0x08, 0x71, 0x5b, 0x03,
- 0x02, 0x71, 0x6c, 0x70, 0x35, 0x39, 0x6c, 0x77, 0x70, 0x57, 0x68, 0x67,
- 0x5f, 0x01, 0x9b, 0x49, 0x3d, 0x51, 0x5f, 0x40, 0x36, 0x47, 0x3d, 0x4f,
- 0x64, 0x41, 0x34, 0x00, 0x00, 0x01, 0x00, 0x17, 0x00, 0x00, 0x04, 0x5c,
- 0x05, 0xac, 0x00, 0x16, 0x00, 0x00, 0x01, 0x15, 0x21, 0x15, 0x21, 0x15,
- 0x21, 0x11, 0x23, 0x11, 0x21, 0x35, 0x21, 0x35, 0x21, 0x35, 0x21, 0x01,
- 0x33, 0x09, 0x01, 0x33, 0x01, 0x03, 0xf6, 0xfe, 0xa4, 0x01, 0x5c, 0xfe,
- 0xa4, 0xb5, 0xfe, 0xa0, 0x01, 0x60, 0xfe, 0xa0, 0x01, 0x35, 0xfe, 0x5d,
- 0xae, 0x01, 0x7a, 0x01, 0x6f, 0xae, 0xfe, 0x65, 0x02, 0xd5, 0x68, 0x9e,
- 0x69, 0xfe, 0x9a, 0x01, 0x66, 0x69, 0x9e, 0x68, 0x02, 0xd7, 0xfd, 0x6d,
- 0x02, 0x93, 0xfd, 0x29, 0x00, 0x02, 0x00, 0xcd, 0xfe, 0x4e, 0x01, 0x48,
- 0x05, 0xd5, 0x00, 0x03, 0x00, 0x07, 0x00, 0x00, 0x13, 0x33, 0x11, 0x23,
- 0x11, 0x33, 0x11, 0x23, 0xcd, 0x7b, 0x7b, 0x7b, 0x7b, 0x05, 0xd5, 0xfc,
- 0xcb, 0xfe, 0xe3, 0xfc, 0xcb, 0x00, 0x00, 0x02, 0x00, 0x58, 0xfe, 0x4c,
- 0x04, 0x0c, 0x05, 0xd5, 0x00, 0x45, 0x00, 0x55, 0x00, 0x00, 0x05, 0x14,
- 0x17, 0x16, 0x33, 0x32, 0x37, 0x36, 0x35, 0x34, 0x27, 0x26, 0x27, 0x25,
- 0x26, 0x27, 0x26, 0x35, 0x34, 0x37, 0x36, 0x37, 0x26, 0x27, 0x26, 0x35,
- 0x34, 0x37, 0x36, 0x37, 0x32, 0x33, 0x32, 0x17, 0x16, 0x1d, 0x01, 0x23,
- 0x35, 0x34, 0x27, 0x26, 0x23, 0x22, 0x07, 0x06, 0x15, 0x14, 0x17, 0x16,
- 0x17, 0x05, 0x16, 0x17, 0x16, 0x15, 0x14, 0x07, 0x16, 0x17, 0x16, 0x15,
- 0x14, 0x07, 0x06, 0x23, 0x22, 0x27, 0x26, 0x35, 0x13, 0x05, 0x36, 0x37,
- 0x36, 0x35, 0x34, 0x27, 0x25, 0x06, 0x07, 0x06, 0x15, 0x14, 0x17, 0x16,
- 0x01, 0x4c, 0x92, 0x1d, 0x22, 0x6d, 0x36, 0x21, 0x54, 0x0d, 0x0f, 0xfe,
- 0xa3, 0x91, 0x20, 0x0b, 0x71, 0x2a, 0x3c, 0x4d, 0x0a, 0x03, 0x68, 0x6b,
- 0x9d, 0x06, 0x05, 0xac, 0x63, 0x57, 0xac, 0x54, 0x30, 0x42, 0x60, 0x34,
- 0x23, 0x3b, 0x17, 0x23, 0x01, 0x2b, 0x90, 0x2e, 0x21, 0xdf, 0x56, 0x11,
- 0x06, 0x6c, 0x6d, 0xa6, 0xc0, 0x64, 0x59, 0xe3, 0x01, 0x54, 0x7b, 0x16,
- 0x04, 0x95, 0xfe, 0xb6, 0x6b, 0x1a, 0x0c, 0x27, 0x1c, 0x1d, 0xcc, 0x26,
- 0x08, 0x49, 0x2c, 0x3c, 0x5b, 0x44, 0x0a, 0x0b, 0xef, 0x65, 0x7d, 0x2c,
- 0x34, 0x93, 0x5e, 0x22, 0x20, 0x5a, 0x4f, 0x13, 0x15, 0x89, 0x61, 0x64,
- 0x04, 0x71, 0x63, 0x97, 0x39, 0x35, 0x7a, 0x37, 0x20, 0x44, 0x2d, 0x3d,
- 0x3e, 0x34, 0x14, 0x17, 0xc1, 0x5c, 0x5c, 0x41, 0x5d, 0xec, 0x53, 0x62,
- 0x4e, 0x1e, 0x24, 0x92, 0x62, 0x64, 0x75, 0x68, 0xba, 0x01, 0xf2, 0xfc,
- 0x41, 0x69, 0x13, 0x14, 0x7e, 0x67, 0xe0, 0x47, 0x42, 0x20, 0x26, 0x48,
- 0x2f, 0x22, 0x00, 0x02, 0x00, 0x3d, 0x04, 0xe5, 0x02, 0x5e, 0x05, 0xb8,
- 0x00, 0x03, 0x00, 0x07, 0x00, 0x00, 0x01, 0x15, 0x23, 0x35, 0x21, 0x15,
- 0x23, 0x35, 0x01, 0x12, 0xd5, 0x02, 0x21, 0xd5, 0x05, 0xb8, 0xd3, 0xd3,
- 0xd3, 0xd3, 0x00, 0x03, 0xff, 0xe5, 0xff, 0xd3, 0x06, 0x02, 0x05, 0xf0,
- 0x00, 0x21, 0x00, 0x39, 0x00, 0x51, 0x00, 0x00, 0x01, 0x06, 0x07, 0x06,
- 0x23, 0x22, 0x27, 0x26, 0x35, 0x34, 0x37, 0x36, 0x33, 0x32, 0x17, 0x16,
- 0x17, 0x23, 0x26, 0x27, 0x26, 0x23, 0x22, 0x07, 0x06, 0x15, 0x14, 0x17,
- 0x16, 0x33, 0x32, 0x37, 0x36, 0x37, 0x03, 0x20, 0x17, 0x16, 0x17, 0x16,
- 0x15, 0x10, 0x07, 0x06, 0x07, 0x06, 0x23, 0x22, 0x27, 0x26, 0x27, 0x26,
- 0x35, 0x10, 0x37, 0x36, 0x37, 0x36, 0x17, 0x22, 0x07, 0x06, 0x07, 0x06,
- 0x15, 0x14, 0x17, 0x16, 0x17, 0x16, 0x33, 0x32, 0x37, 0x36, 0x37, 0x36,
- 0x35, 0x34, 0x27, 0x26, 0x27, 0x26, 0x04, 0x6a, 0x1c, 0x28, 0x5e, 0xc8,
- 0xaf, 0x6f, 0x6f, 0x79, 0x6e, 0xac, 0xd7, 0x56, 0x18, 0x0f, 0x91, 0x24,
- 0x4d, 0x24, 0x34, 0x84, 0x46, 0x36, 0x51, 0x46, 0x69, 0x96, 0x35, 0x08,
- 0x06, 0xe5, 0x01, 0x04, 0xd0, 0xbf, 0x4f, 0x2c, 0x9f, 0x92, 0xe8, 0x7b,
- 0x85, 0xf8, 0xcd, 0xbc, 0x52, 0x31, 0x9c, 0x8e, 0xe0, 0x7e, 0x87, 0xde,
- 0xaf, 0xa4, 0x39, 0x19, 0x88, 0x7e, 0xc0, 0x58, 0x5d, 0xe7, 0xb1, 0xa6,
- 0x37, 0x16, 0x8b, 0x80, 0xc5, 0x58, 0x02, 0x7f, 0x8a, 0x49, 0xaa, 0x83,
- 0x84, 0xd2, 0xe2, 0x86, 0x79, 0xc4, 0x35, 0x44, 0x89, 0x24, 0x11, 0x78,
- 0x5c, 0x8c, 0xa2, 0x64, 0x56, 0xbc, 0x1f, 0x23, 0x03, 0x71, 0x9c, 0x8e,
- 0xdf, 0x7e, 0x86, 0xfe, 0xf6, 0xd1, 0xc0, 0x4c, 0x29, 0x99, 0x8c, 0xdb,
- 0x83, 0x8b, 0x01, 0x04, 0xd0, 0xbf, 0x4f, 0x2d, 0x7f, 0x8d, 0x83, 0xcb,
- 0x58, 0x5d, 0xdf, 0xb3, 0xa5, 0x3c, 0x1c, 0x8f, 0x86, 0xcf, 0x54, 0x59,
- 0xe2, 0xb2, 0xa6, 0x3a, 0x1a, 0x00, 0x00, 0x03, 0x00, 0x4c, 0x02, 0x6d,
- 0x02, 0xaa, 0x05, 0xf0, 0x00, 0x03, 0x00, 0x2d, 0x00, 0x3c, 0x00, 0x00,
- 0x01, 0x15, 0x21, 0x35, 0x25, 0x15, 0x06, 0x23, 0x22, 0x27, 0x26, 0x27,
- 0x06, 0x23, 0x22, 0x27, 0x26, 0x35, 0x34, 0x37, 0x36, 0x37, 0x36, 0x37,
- 0x36, 0x3d, 0x01, 0x34, 0x27, 0x26, 0x23, 0x22, 0x07, 0x06, 0x07, 0x23,
- 0x36, 0x37, 0x36, 0x33, 0x32, 0x15, 0x11, 0x14, 0x33, 0x32, 0x27, 0x06,
- 0x07, 0x06, 0x07, 0x06, 0x15, 0x14, 0x17, 0x16, 0x33, 0x32, 0x37, 0x36,
- 0x35, 0x02, 0x8f, 0xfd, 0xc9, 0x02, 0x52, 0x20, 0x22, 0x50, 0x17, 0x06,
- 0x03, 0x65, 0x72, 0x81, 0x37, 0x1d, 0x4b, 0x4a, 0xac, 0x4f, 0x10, 0x06,
- 0x54, 0x18, 0x1e, 0x53, 0x1d, 0x12, 0x09, 0x79, 0x05, 0xab, 0x29, 0x30,
- 0xf9, 0x30, 0x09, 0xad, 0x25, 0x6a, 0x63, 0x20, 0x1d, 0x4e, 0x11, 0x15,
- 0x5b, 0x39, 0x27, 0x02, 0xd5, 0x68, 0x68, 0xc3, 0x5b, 0x0c, 0x38, 0x0e,
- 0x12, 0x58, 0x57, 0x2f, 0x3f, 0x6b, 0x30, 0x2f, 0x0d, 0x06, 0x1d, 0x0c,
- 0x14, 0x1b, 0x44, 0x11, 0x05, 0x27, 0x19, 0x33, 0xb2, 0x24, 0x08, 0xc1,
- 0xfe, 0x92, 0x30, 0xfa, 0x10, 0x0f, 0x0e, 0x1b, 0x1a, 0x2d, 0x4c, 0x10,
- 0x04, 0x36, 0x25, 0x2c, 0x00, 0x02, 0x00, 0xc9, 0x00, 0xd9, 0x03, 0xa4,
- 0x03, 0x81, 0x00, 0x06, 0x00, 0x0d, 0x00, 0x00, 0x13, 0x35, 0x25, 0x15,
- 0x07, 0x17, 0x15, 0x37, 0x35, 0x25, 0x15, 0x07, 0x17, 0x15, 0xc9, 0x01,
- 0x37, 0xd9, 0xd9, 0x6d, 0x01, 0x37, 0xd9, 0xd9, 0x01, 0xd1, 0xb6, 0xfa,
- 0xaa, 0xaa, 0xaa, 0xaa, 0xf8, 0xb6, 0xfa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00,
- 0x00, 0x01, 0x00, 0x52, 0x00, 0xb0, 0x04, 0x5a, 0x03, 0x00, 0x00, 0x05,
- 0x00, 0x00, 0x13, 0x21, 0x11, 0x23, 0x11, 0x21, 0x52, 0x04, 0x08, 0x8f,
- 0xfc, 0x87, 0x03, 0x00, 0xfd, 0xb0, 0x01, 0xc1, 0x00, 0x01, 0x00, 0x5e,
- 0x01, 0xec, 0x02, 0x46, 0x02, 0x7f, 0x00, 0x03, 0x00, 0x00, 0x01, 0x15,
- 0x21, 0x35, 0x02, 0x46, 0xfe, 0x18, 0x02, 0x7f, 0x93, 0x93, 0x00, 0x04,
- 0xff, 0xe5, 0xff, 0xd3, 0x06, 0x02, 0x05, 0xf0, 0x00, 0x1a, 0x00, 0x25,
- 0x00, 0x3d, 0x00, 0x55, 0x00, 0x00, 0x01, 0x16, 0x1f, 0x01, 0x16, 0x17,
- 0x15, 0x23, 0x26, 0x3f, 0x01, 0x34, 0x27, 0x26, 0x23, 0x21, 0x11, 0x23,
- 0x11, 0x21, 0x20, 0x17, 0x16, 0x15, 0x14, 0x07, 0x06, 0x25, 0x21, 0x32,
- 0x37, 0x36, 0x35, 0x34, 0x27, 0x26, 0x23, 0x21, 0x13, 0x20, 0x17, 0x16,
- 0x17, 0x16, 0x15, 0x10, 0x07, 0x06, 0x07, 0x06, 0x23, 0x22, 0x27, 0x26,
- 0x27, 0x26, 0x35, 0x10, 0x37, 0x36, 0x37, 0x36, 0x17, 0x22, 0x07, 0x06,
- 0x07, 0x06, 0x15, 0x14, 0x17, 0x16, 0x17, 0x16, 0x33, 0x32, 0x37, 0x36,
- 0x37, 0x36, 0x35, 0x34, 0x27, 0x26, 0x27, 0x26, 0x03, 0xf6, 0x55, 0x07,
- 0x01, 0x05, 0x29, 0xa2, 0x22, 0x04, 0x02, 0x45, 0x1a, 0x25, 0xfe, 0xee,
- 0x8f, 0x01, 0xa6, 0x01, 0x07, 0x17, 0x02, 0x2b, 0x17, 0xfe, 0x0b, 0x01,
- 0x08, 0x7f, 0x16, 0x05, 0x4d, 0x1f, 0x2e, 0xfe, 0xf8, 0xc7, 0x01, 0x04,
- 0xd0, 0xbf, 0x4f, 0x2c, 0x9f, 0x92, 0xe8, 0x7b, 0x85, 0xf8, 0xcd, 0xbc,
- 0x52, 0x31, 0x9c, 0x8e, 0xe0, 0x7e, 0x87, 0xde, 0xaf, 0xa4, 0x39, 0x19,
- 0x88, 0x7e, 0xc0, 0x58, 0x5d, 0xe7, 0xb1, 0xa6, 0x37, 0x16, 0x8b, 0x80,
- 0xc5, 0x58, 0x02, 0xe1, 0x37, 0x6c, 0x8d, 0x41, 0x1e, 0x33, 0x51, 0x4c,
- 0x52, 0x6b, 0x18, 0x09, 0xfe, 0x85, 0x03, 0x8f, 0xd5, 0x15, 0x18, 0x5a,
- 0x35, 0x1c, 0x1a, 0x59, 0x15, 0x1b, 0x66, 0x19, 0x0a, 0x01, 0xc3, 0x9c,
- 0x8e, 0xdf, 0x7e, 0x86, 0xfe, 0xf6, 0xd1, 0xc0, 0x4c, 0x29, 0x99, 0x8c,
- 0xdb, 0x83, 0x8b, 0x01, 0x04, 0xd0, 0xbf, 0x4f, 0x2d, 0x7f, 0x8d, 0x83,
- 0xcb, 0x58, 0x5d, 0xdf, 0xb3, 0xa5, 0x3c, 0x1c, 0x8f, 0x86, 0xcf, 0x54,
- 0x59, 0xe2, 0xb2, 0xa6, 0x3a, 0x1a, 0x00, 0x01, 0x00, 0x39, 0x05, 0x0c,
- 0x02, 0x6a, 0x05, 0x9c, 0x00, 0x03, 0x00, 0x00, 0x01, 0x15, 0x21, 0x35,
- 0x02, 0x6a, 0xfd, 0xcf, 0x05, 0x9c, 0x90, 0x90, 0x00, 0x02, 0x01, 0x35,
- 0x03, 0x10, 0x03, 0xa2, 0x05, 0x7d, 0x00, 0x0e, 0x00, 0x1e, 0x00, 0x00,
- 0x01, 0x32, 0x17, 0x16, 0x15, 0x14, 0x07, 0x06, 0x23, 0x22, 0x27, 0x26,
- 0x27, 0x34, 0x36, 0x17, 0x22, 0x07, 0x06, 0x15, 0x14, 0x17, 0x16, 0x33,
- 0x32, 0x37, 0x36, 0x35, 0x34, 0x27, 0x26, 0x02, 0x6d, 0x80, 0x5b, 0x5a,
- 0x5e, 0x5b, 0x81, 0x7c, 0x5a, 0x5b, 0x02, 0xb7, 0x81, 0x59, 0x3c, 0x2e,
- 0x44, 0x36, 0x44, 0x5f, 0x3a, 0x2c, 0x45, 0x35, 0x05, 0x7d, 0x5b, 0x5b,
- 0x7f, 0x84, 0x5b, 0x59, 0x5a, 0x60, 0x7e, 0x80, 0xb5, 0x75, 0x45, 0x36,
- 0x45, 0x59, 0x3c, 0x2e, 0x47, 0x35, 0x47, 0x5a, 0x39, 0x2d, 0x00, 0x02,
- 0x00, 0x66, 0xff, 0xe9, 0x04, 0x46, 0x04, 0xfc, 0x00, 0x0b, 0x00, 0x0f,
- 0x00, 0x00, 0x01, 0x15, 0x21, 0x11, 0x23, 0x11, 0x21, 0x35, 0x21, 0x11,
- 0x33, 0x11, 0x01, 0x15, 0x21, 0x35, 0x04, 0x46, 0xfe, 0x58, 0x90, 0xfe,
- 0x58, 0x01, 0xa8, 0x90, 0x01, 0xa8, 0xfc, 0x20, 0x03, 0x54, 0x8f, 0xfe,
- 0x58, 0x01, 0xa8, 0x8f, 0x01, 0xa8, 0xfe, 0x58, 0xfd, 0x25, 0x90, 0x90,
- 0x00, 0x01, 0x00, 0x27, 0x02, 0x46, 0x02, 0x9c, 0x05, 0xac, 0x00, 0x25,
- 0x00, 0x00, 0x01, 0x22, 0x07, 0x06, 0x07, 0x23, 0x36, 0x37, 0x36, 0x33,
- 0x32, 0x17, 0x16, 0x15, 0x14, 0x07, 0x06, 0x0f, 0x01, 0x06, 0x07, 0x06,
- 0x07, 0x21, 0x15, 0x21, 0x36, 0x37, 0x36, 0x37, 0x36, 0x3f, 0x01, 0x36,
- 0x35, 0x34, 0x27, 0x26, 0x01, 0x6d, 0x8b, 0x1e, 0x07, 0x03, 0x7f, 0x08,
- 0xc6, 0x2e, 0x3a, 0x96, 0x55, 0x40, 0xaa, 0x0d, 0x0e, 0x81, 0x59, 0x21,
- 0x10, 0x0b, 0x01, 0xd5, 0xfd, 0x91, 0x08, 0x35, 0x34, 0x8f, 0x02, 0x02,
- 0x77, 0x79, 0x43, 0x2f, 0x05, 0x3f, 0x85, 0x1c, 0x29, 0xfe, 0x2e, 0x0b,
- 0x5b, 0x44, 0x63, 0x9b, 0x5f, 0x07, 0x07, 0x42, 0x2f, 0x36, 0x1a, 0x25,
- 0x76, 0x96, 0x4e, 0x4c, 0x4d, 0x01, 0x01, 0x3f, 0x41, 0x61, 0x4e, 0x2d,
- 0x1e, 0x00, 0x00, 0x01, 0x00, 0x21, 0x02, 0x29, 0x02, 0x93, 0x05, 0xac,
- 0x00, 0x30, 0x00, 0x00, 0x01, 0x22, 0x07, 0x06, 0x15, 0x23, 0x12, 0x37,
- 0x36, 0x33, 0x32, 0x17, 0x16, 0x15, 0x14, 0x07, 0x16, 0x15, 0x14, 0x07,
- 0x06, 0x23, 0x22, 0x27, 0x26, 0x35, 0x33, 0x16, 0x17, 0x16, 0x33, 0x32,
- 0x37, 0x36, 0x35, 0x34, 0x27, 0x26, 0x27, 0x26, 0x23, 0x35, 0x32, 0x37,
- 0x36, 0x35, 0x34, 0x27, 0x26, 0x01, 0x5a, 0x7e, 0x1d, 0x0b, 0x81, 0x06,
- 0xf4, 0x16, 0x17, 0xa7, 0x4a, 0x2c, 0x75, 0x91, 0x6d, 0x53, 0x7d, 0xc8,
- 0x49, 0x24, 0x7f, 0x07, 0x61, 0x22, 0x30, 0x7d, 0x2a, 0x11, 0x3f, 0x18,
- 0x1f, 0x1f, 0x69, 0x99, 0x2b, 0x1e, 0x4d, 0x22, 0x05, 0x3f, 0x5d, 0x23,
- 0x36, 0x01, 0x0b, 0x16, 0x02, 0x65, 0x3c, 0x55, 0x78, 0x36, 0x31, 0x9c,
- 0x8d, 0x4b, 0x3a, 0x87, 0x41, 0x5b, 0x8b, 0x20, 0x0b, 0x56, 0x22, 0x2d,
- 0x51, 0x29, 0x10, 0x06, 0x04, 0x68, 0x26, 0x1b, 0x3c, 0x5a, 0x22, 0x0f,
- 0x00, 0x01, 0x00, 0xbc, 0x04, 0xbc, 0x02, 0x68, 0x05, 0xec, 0x00, 0x03,
- 0x00, 0x00, 0x01, 0x33, 0x01, 0x23, 0x01, 0x81, 0xe7, 0xfe, 0xcf, 0x7b,
- 0x05, 0xec, 0xfe, 0xd0, 0x00, 0x01, 0x00, 0x85, 0xfe, 0x3d, 0x04, 0x5a,
- 0x04, 0x31, 0x00, 0x20, 0x00, 0x00, 0x25, 0x15, 0x06, 0x23, 0x22, 0x27,
- 0x26, 0x27, 0x06, 0x23, 0x22, 0x27, 0x11, 0x23, 0x11, 0x33, 0x11, 0x14,
- 0x17, 0x16, 0x33, 0x32, 0x37, 0x36, 0x35, 0x11, 0x33, 0x11, 0x14, 0x17,
- 0x16, 0x33, 0x32, 0x04, 0x5a, 0x44, 0x31, 0x8f, 0x1a, 0x06, 0x01, 0x78,
- 0xd6, 0x6f, 0x49, 0xaa, 0xaa, 0x5a, 0x36, 0x4b, 0x93, 0x50, 0x42, 0xaa,
- 0x4f, 0x06, 0x07, 0x11, 0x64, 0x81, 0x12, 0x74, 0x18, 0x1e, 0xaa, 0x35,
- 0xfe, 0x37, 0x05, 0xf4, 0xfd, 0x08, 0x79, 0x39, 0x21, 0x76, 0x61, 0x94,
- 0x02, 0x60, 0xfc, 0x83, 0x4d, 0x06, 0x01, 0x00, 0x00, 0x01, 0x00, 0x62,
- 0xfe, 0x96, 0x04, 0x2d, 0x05, 0xd5, 0x00, 0x13, 0x00, 0x00, 0x01, 0x26,
- 0x27, 0x26, 0x35, 0x34, 0x37, 0x36, 0x37, 0x36, 0x33, 0x21, 0x15, 0x23,
- 0x11, 0x23, 0x11, 0x23, 0x11, 0x23, 0x02, 0x0a, 0xd1, 0x75, 0x62, 0x75,
- 0x6f, 0xa8, 0x1f, 0x20, 0x02, 0x00, 0x75, 0x83, 0xa8, 0x83, 0x02, 0x12,
- 0x0b, 0x98, 0x7f, 0xb5, 0xc1, 0x8b, 0x84, 0x18, 0x04, 0x83, 0xf9, 0x44,
- 0x06, 0xbc, 0xf9, 0x44, 0x00, 0x01, 0x00, 0xb2, 0x02, 0x6a, 0x01, 0xb0,
- 0x03, 0x6a, 0x00, 0x03, 0x00, 0x00, 0x01, 0x11, 0x23, 0x11, 0x01, 0xb0,
- 0xfe, 0x03, 0x6a, 0xff, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x50,
- 0xfe, 0x4a, 0x02, 0x4c, 0x00, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x13, 0x17,
- 0x16, 0x33, 0x32, 0x37, 0x36, 0x35, 0x34, 0x27, 0x26, 0x23, 0x22, 0x07,
- 0x27, 0x37, 0x33, 0x07, 0x36, 0x33, 0x32, 0x17, 0x16, 0x15, 0x14, 0x07,
- 0x06, 0x23, 0x22, 0x27, 0x26, 0x27, 0x7b, 0x6e, 0x2e, 0x2d, 0x43, 0x1e,
- 0x0d, 0x3c, 0x0f, 0x13, 0x1f, 0x21, 0x18, 0x56, 0x4e, 0x2f, 0x1a, 0x1f,
- 0x7a, 0x1f, 0x09, 0x67, 0x3d, 0x58, 0x50, 0x58, 0x22, 0x36, 0xfe, 0xe1,
- 0x32, 0x11, 0x2e, 0x15, 0x19, 0x3a, 0x0e, 0x04, 0x11, 0x0f, 0xbc, 0x73,
- 0x04, 0x54, 0x18, 0x1d, 0x6f, 0x31, 0x1e, 0x21, 0x0d, 0x17, 0x00, 0x01,
- 0x00, 0x7d, 0x02, 0x46, 0x01, 0xc7, 0x05, 0xac, 0x00, 0x0b, 0x00, 0x00,
- 0x01, 0x23, 0x35, 0x37, 0x3e, 0x01, 0x37, 0x36, 0x37, 0x33, 0x11, 0x23,
- 0x01, 0x48, 0xcb, 0x1f, 0x6c, 0x4a, 0x18, 0x03, 0x02, 0x58, 0x7f, 0x04,
- 0xa4, 0x5e, 0x02, 0x0a, 0x38, 0x56, 0x07, 0x09, 0xfc, 0x9a, 0x00, 0x03,
- 0x00, 0x52, 0x02, 0x6d, 0x02, 0x98, 0x05, 0xf0, 0x00, 0x03, 0x00, 0x13,
- 0x00, 0x23, 0x00, 0x00, 0x01, 0x15, 0x21, 0x35, 0x01, 0x32, 0x17, 0x16,
- 0x15, 0x14, 0x07, 0x06, 0x23, 0x22, 0x27, 0x26, 0x35, 0x34, 0x37, 0x36,
- 0x17, 0x22, 0x07, 0x06, 0x15, 0x14, 0x17, 0x16, 0x33, 0x32, 0x37, 0x36,
- 0x35, 0x34, 0x27, 0x26, 0x02, 0x83, 0xfd, 0xe5, 0x01, 0x0d, 0xbb, 0x45,
- 0x23, 0x79, 0x46, 0x64, 0xb1, 0x49, 0x29, 0x82, 0x43, 0x5e, 0x68, 0x2c,
- 0x18, 0x56, 0x25, 0x31, 0x65, 0x2d, 0x1a, 0x5b, 0x23, 0x02, 0xd5, 0x68,
- 0x68, 0x03, 0x1b, 0xa1, 0x51, 0x73, 0xcf, 0x58, 0x33, 0x92, 0x54, 0x7a,
- 0xde, 0x55, 0x2c, 0x6b, 0x68, 0x3a, 0x52, 0xa2, 0x3a, 0x19, 0x64, 0x3a,
- 0x53, 0xaa, 0x38, 0x16, 0x00, 0x02, 0x00, 0xc9, 0x00, 0xd9, 0x03, 0x9c,
- 0x03, 0x81, 0x00, 0x06, 0x00, 0x0d, 0x00, 0x00, 0x01, 0x15, 0x05, 0x35,
- 0x37, 0x27, 0x35, 0x05, 0x15, 0x05, 0x35, 0x37, 0x27, 0x35, 0x02, 0x04,
- 0xfe, 0xc5, 0xdd, 0xdd, 0x02, 0xd3, 0xfe, 0xc4, 0xdd, 0xdd, 0x02, 0x89,
- 0xb6, 0xfa, 0xaa, 0xaa, 0xaa, 0xaa, 0xf8, 0xb6, 0xfa, 0xaa, 0xaa, 0xaa,
- 0xaa, 0x00, 0x00, 0x04, 0x00, 0x7d, 0xff, 0xd7, 0x06, 0xcb, 0x05, 0xac,
- 0x00, 0x0b, 0x00, 0x0f, 0x00, 0x1a, 0x00, 0x1d, 0x00, 0x00, 0x01, 0x23,
- 0x35, 0x37, 0x3e, 0x01, 0x37, 0x36, 0x37, 0x33, 0x11, 0x23, 0x01, 0x33,
- 0x01, 0x23, 0x25, 0x21, 0x35, 0x01, 0x33, 0x11, 0x33, 0x15, 0x23, 0x15,
- 0x23, 0x19, 0x01, 0x01, 0x01, 0x48, 0xcb, 0x1f, 0x6c, 0x4a, 0x18, 0x03,
- 0x02, 0x58, 0x7f, 0x03, 0xdd, 0x77, 0xfc, 0x62, 0x77, 0x04, 0x3c, 0xfe,
- 0x7f, 0x01, 0xa1, 0x5f, 0x89, 0x89, 0x7f, 0xfe, 0xf7, 0x04, 0xa4, 0x5e,
- 0x02, 0x0a, 0x38, 0x56, 0x07, 0x09, 0xfc, 0x9a, 0x03, 0x66, 0xfa, 0x2b,
- 0xf6, 0x79, 0x02, 0x20, 0xfd, 0xd3, 0x6c, 0xcd, 0x01, 0x39, 0x01, 0x5d,
- 0xfe, 0xa3, 0x00, 0x03, 0x00, 0x7d, 0xff, 0xd7, 0x06, 0xc1, 0x05, 0xac,
- 0x00, 0x0b, 0x00, 0x0f, 0x00, 0x35, 0x00, 0x00, 0x01, 0x23, 0x35, 0x37,
- 0x3e, 0x01, 0x37, 0x36, 0x37, 0x33, 0x11, 0x23, 0x01, 0x33, 0x01, 0x23,
- 0x01, 0x22, 0x07, 0x06, 0x07, 0x23, 0x12, 0x37, 0x36, 0x33, 0x32, 0x17,
- 0x16, 0x15, 0x14, 0x07, 0x06, 0x0f, 0x01, 0x06, 0x07, 0x06, 0x07, 0x21,
- 0x15, 0x21, 0x36, 0x37, 0x36, 0x37, 0x36, 0x3f, 0x01, 0x36, 0x35, 0x34,
- 0x27, 0x26, 0x01, 0x48, 0xcb, 0x1f, 0x6c, 0x4a, 0x18, 0x03, 0x02, 0x58,
- 0x7f, 0x03, 0xac, 0x76, 0xfc, 0x63, 0x77, 0x04, 0x3b, 0x8f, 0x1c, 0x05,
- 0x02, 0x7f, 0x07, 0xd3, 0x2a, 0x32, 0x96, 0x55, 0x40, 0xaa, 0x0d, 0x0e,
- 0x81, 0x59, 0x21, 0x10, 0x0c, 0x01, 0xd5, 0xfd, 0x92, 0x08, 0x35, 0x34,
- 0x8d, 0x03, 0x03, 0x77, 0x78, 0x43, 0x2e, 0x04, 0xa4, 0x5e, 0x02, 0x0a,
- 0x38, 0x56, 0x07, 0x09, 0xfc, 0x9a, 0x03, 0x66, 0xfa, 0x2b, 0x03, 0x23,
- 0x8e, 0x1a, 0x23, 0x01, 0x06, 0x29, 0x08, 0x5b, 0x44, 0x63, 0x9a, 0x60,
- 0x07, 0x07, 0x41, 0x2f, 0x36, 0x1a, 0x25, 0x77, 0x97, 0x4d, 0x4d, 0x4b,
- 0x01, 0x02, 0x3f, 0x40, 0x62, 0x4e, 0x2d, 0x1f, 0x00, 0x04, 0x00, 0x21,
- 0xff, 0xd7, 0x06, 0xcb, 0x05, 0xac, 0x00, 0x30, 0x00, 0x34, 0x00, 0x3f,
- 0x00, 0x42, 0x00, 0x00, 0x01, 0x22, 0x07, 0x06, 0x15, 0x23, 0x12, 0x37,
- 0x36, 0x33, 0x32, 0x17, 0x16, 0x15, 0x14, 0x07, 0x16, 0x15, 0x14, 0x07,
- 0x06, 0x23, 0x22, 0x27, 0x26, 0x35, 0x33, 0x16, 0x17, 0x16, 0x33, 0x32,
- 0x37, 0x36, 0x35, 0x34, 0x27, 0x26, 0x27, 0x26, 0x23, 0x35, 0x32, 0x37,
- 0x36, 0x35, 0x34, 0x27, 0x26, 0x25, 0x33, 0x01, 0x23, 0x25, 0x21, 0x35,
- 0x01, 0x33, 0x11, 0x33, 0x15, 0x23, 0x15, 0x23, 0x19, 0x01, 0x01, 0x01,
- 0x5a, 0x7e, 0x1d, 0x0b, 0x81, 0x06, 0xf4, 0x16, 0x17, 0xa7, 0x4a, 0x2c,
- 0x75, 0x91, 0x6d, 0x53, 0x7d, 0xc8, 0x49, 0x24, 0x7f, 0x07, 0x61, 0x22,
- 0x30, 0x7d, 0x2a, 0x11, 0x3f, 0x18, 0x1f, 0x1f, 0x69, 0x99, 0x2b, 0x1e,
- 0x4d, 0x22, 0x03, 0xb2, 0x77, 0xfc, 0x62, 0x76, 0x04, 0x27, 0xfe, 0x7f,
- 0x01, 0xa1, 0x5f, 0x89, 0x89, 0x7f, 0xfe, 0xf7, 0x05, 0x3f, 0x5d, 0x23,
- 0x36, 0x01, 0x0b, 0x16, 0x02, 0x65, 0x3c, 0x55, 0x78, 0x36, 0x31, 0x9c,
- 0x8d, 0x4b, 0x3a, 0x87, 0x41, 0x5b, 0x8b, 0x20, 0x0b, 0x56, 0x22, 0x2d,
- 0x51, 0x29, 0x10, 0x06, 0x04, 0x68, 0x26, 0x1b, 0x3c, 0x5a, 0x22, 0x0f,
- 0x6d, 0xfa, 0x2b, 0xf6, 0x79, 0x02, 0x20, 0xfd, 0xd3, 0x6c, 0xcd, 0x01,
- 0x39, 0x01, 0x5d, 0xfe, 0xa3, 0x00, 0xff, 0xff, 0x00, 0xc5, 0xfe, 0x43,
- 0x04, 0x39, 0x04, 0x31, 0x10, 0x0f, 0x00, 0x23, 0x04, 0xd7, 0x04, 0x31,
- 0xc0, 0x00, 0xff, 0xff, 0x00, 0x23, 0x00, 0x00, 0x05, 0x39, 0x05, 0xd5,
- 0x10, 0x27, 0x00, 0xc6, 0x01, 0x58, 0x01, 0x98, 0x10, 0x06, 0x00, 0x25,
- 0x00, 0x00, 0xff, 0xff, 0x00, 0x23, 0x00, 0x00, 0x05, 0x39, 0x05, 0xd5,
- 0x10, 0x27, 0x00, 0xc5, 0x01, 0x75, 0x01, 0x98, 0x10, 0x06, 0x00, 0x25,
- 0x00, 0x00, 0xff, 0xff, 0x00, 0x23, 0x00, 0x00, 0x05, 0x39, 0x05, 0xd5,
- 0x10, 0x27, 0x00, 0xc4, 0x01, 0x60, 0x01, 0x98, 0x10, 0x06, 0x00, 0x25,
- 0x00, 0x00, 0xff, 0xff, 0x00, 0x23, 0x00, 0x00, 0x05, 0x39, 0x05, 0xd5,
- 0x10, 0x27, 0x00, 0xc8, 0x01, 0x66, 0x01, 0x81, 0x10, 0x06, 0x00, 0x25,
- 0x00, 0x00, 0xff, 0xff, 0x00, 0x23, 0x00, 0x00, 0x05, 0x39, 0x07, 0x3b,
- 0x10, 0x27, 0x00, 0x6b, 0x01, 0x64, 0x01, 0x83, 0x10, 0x06, 0x00, 0x25,
- 0x00, 0x00, 0xff, 0xff, 0x00, 0x23, 0x00, 0x00, 0x05, 0x39, 0x05, 0xd5,
- 0x10, 0x27, 0x00, 0xc7, 0x01, 0x58, 0x01, 0x98, 0x10, 0x06, 0x00, 0x25,
- 0x00, 0x00, 0x00, 0x02, 0x00, 0x17, 0x00, 0x00, 0x07, 0x9a, 0x05, 0xd5,
- 0x00, 0x0f, 0x00, 0x13, 0x00, 0x00, 0x01, 0x21, 0x03, 0x23, 0x01, 0x21,
- 0x15, 0x21, 0x11, 0x21, 0x15, 0x21, 0x11, 0x21, 0x15, 0x21, 0x19, 0x01,
- 0x23, 0x01, 0x03, 0xbe, 0xfd, 0xda, 0xaf, 0xd2, 0x02, 0x64, 0x04, 0xfa,
- 0xfd, 0x08, 0x02, 0xd1, 0xfd, 0x2f, 0x03, 0x1d, 0xfc, 0x24, 0xcc, 0xfe,
- 0xe5, 0x01, 0xb6, 0xfe, 0x4a, 0x05, 0xd5, 0xa8, 0xfe, 0x23, 0xa8, 0xfe,
- 0x00, 0xa8, 0x02, 0x5e, 0x02, 0xcf, 0xfd, 0x31, 0x00, 0x01, 0x00, 0x62,
- 0xfe, 0x4a, 0x05, 0x6a, 0x05, 0xee, 0x00, 0x46, 0x00, 0x00, 0x25, 0x32,
- 0x37, 0x36, 0x37, 0x33, 0x02, 0x05, 0x06, 0x23, 0x07, 0x36, 0x33, 0x32,
- 0x17, 0x16, 0x15, 0x14, 0x07, 0x06, 0x23, 0x22, 0x27, 0x26, 0x27, 0x37,
- 0x17, 0x16, 0x33, 0x32, 0x37, 0x36, 0x35, 0x34, 0x27, 0x26, 0x23, 0x22,
- 0x07, 0x27, 0x37, 0x26, 0x27, 0x26, 0x27, 0x26, 0x27, 0x26, 0x35, 0x34,
- 0x37, 0x12, 0x25, 0x36, 0x33, 0x20, 0x13, 0x16, 0x17, 0x23, 0x26, 0x27,
- 0x26, 0x23, 0x22, 0x07, 0x06, 0x11, 0x10, 0x17, 0x16, 0x03, 0x06, 0xdf,
- 0x66, 0x3f, 0x1c, 0xc4, 0x3f, 0xfe, 0x31, 0x29, 0x2b, 0x1a, 0x1a, 0x1f,
- 0x7a, 0x1f, 0x09, 0x65, 0x3e, 0x59, 0x53, 0x5d, 0x21, 0x2f, 0x2b, 0x68,
- 0x32, 0x2f, 0x43, 0x1e, 0x0d, 0x3c, 0x0f, 0x13, 0x1f, 0x21, 0x16, 0x3f,
- 0x9a, 0x4f, 0x21, 0x27, 0xb7, 0x49, 0x27, 0x65, 0x92, 0x01, 0x3a, 0x3a,
- 0x3f, 0x01, 0xa2, 0x7c, 0x15, 0x0d, 0xc3, 0x2d, 0xa3, 0x50, 0x71, 0xe0,
- 0x7e, 0x79, 0x91, 0x82, 0x77, 0x9d, 0x61, 0xac, 0xfd, 0xe0, 0x2c, 0x04,
- 0x44, 0x04, 0x54, 0x18, 0x1d, 0x6d, 0x32, 0x1f, 0x24, 0x0c, 0x15, 0x52,
- 0x30, 0x13, 0x2e, 0x15, 0x19, 0x3a, 0x0e, 0x04, 0x11, 0x0f, 0x8d, 0x16,
- 0x28, 0x11, 0x1b, 0x84, 0xfc, 0x86, 0x98, 0xfc, 0xc5, 0x01, 0x1d, 0x2e,
- 0x09, 0xfe, 0x9b, 0x3c, 0x47, 0xdd, 0x42, 0x21, 0xae, 0xa5, 0xfe, 0xe8,
- 0xfe, 0xd6, 0xa6, 0x94, 0xff, 0xff, 0x00, 0xb8, 0x00, 0x00, 0x04, 0xe7,
- 0x05, 0xd5, 0x10, 0x27, 0x00, 0xc6, 0x01, 0x7b, 0x01, 0x98, 0x10, 0x06,
- 0x00, 0x29, 0x00, 0x00, 0xff, 0xff, 0x00, 0xb8, 0x00, 0x00, 0x04, 0xe7,
- 0x05, 0xd5, 0x10, 0x27, 0x00, 0xc5, 0x01, 0x6d, 0x01, 0x98, 0x10, 0x06,
- 0x00, 0x29, 0x00, 0x00, 0xff, 0xff, 0x00, 0xb8, 0x00, 0x00, 0x04, 0xe7,
- 0x05, 0xd5, 0x10, 0x27, 0x00, 0xc4, 0x01, 0x73, 0x01, 0x96, 0x10, 0x06,
- 0x00, 0x29, 0x00, 0x00, 0xff, 0xff, 0x00, 0xb8, 0x00, 0x00, 0x04, 0xe7,
- 0x07, 0x3b, 0x10, 0x27, 0x00, 0x6b, 0x01, 0x71, 0x01, 0x83, 0x10, 0x06,
- 0x00, 0x29, 0x00, 0x00, 0xff, 0xff, 0x00, 0xcd, 0x00, 0x00, 0x01, 0x8d,
- 0x05, 0xd5, 0x10, 0x27, 0x00, 0xc6, 0xff, 0xd3, 0x01, 0x98, 0x10, 0x06,
- 0x00, 0x2d, 0x00, 0x00, 0xff, 0xff, 0x00, 0xcd, 0x00, 0x00, 0x01, 0x8d,
- 0x05, 0xd5, 0x10, 0x27, 0x00, 0xc5, 0xff, 0xd5, 0x01, 0x98, 0x10, 0x06,
- 0x00, 0x2d, 0x00, 0x00, 0xff, 0xff, 0x00, 0xcd, 0x00, 0x00, 0x01, 0x8d,
- 0x05, 0xd5, 0x10, 0x27, 0x00, 0xc4, 0xff, 0xd5, 0x01, 0x98, 0x10, 0x06,
- 0x00, 0x2d, 0x00, 0x00, 0xff, 0xff, 0x00, 0x1c, 0x00, 0x00, 0x02, 0x3d,
- 0x07, 0x3b, 0x10, 0x27, 0x00, 0x6b, 0xff, 0xdf, 0x01, 0x83, 0x10, 0x06,
- 0x00, 0x2d, 0x00, 0x00, 0x00, 0x02, 0x00, 0x29, 0x00, 0x00, 0x05, 0x56,
- 0x05, 0xd5, 0x00, 0x0e, 0x00, 0x1d, 0x00, 0x00, 0x13, 0x23, 0x35, 0x33,
- 0x11, 0x21, 0x20, 0x17, 0x16, 0x11, 0x10, 0x07, 0x06, 0x29, 0x01, 0x13,
- 0x11, 0x21, 0x20, 0x13, 0x36, 0x35, 0x10, 0x27, 0x26, 0x23, 0x21, 0x11,
- 0x21, 0x15, 0xb6, 0x8d, 0x8d, 0x02, 0x42, 0x01, 0x19, 0xa2, 0xa3, 0xb0,
- 0xa1, 0xfe, 0xf3, 0xfd, 0xbe, 0xbf, 0x01, 0x62, 0x01, 0x37, 0x61, 0x29,
- 0xf2, 0x58, 0x77, 0xfe, 0x9e, 0x01, 0x5e, 0x02, 0xb6, 0x89, 0x02, 0x96,
- 0xc6, 0xc7, 0xfe, 0xa4, 0xfe, 0x93, 0xc9, 0xb6, 0x02, 0xb6, 0xfd, 0xf2,
- 0x01, 0x20, 0x7a, 0xaa, 0x01, 0xa0, 0x76, 0x2b, 0xfe, 0x12, 0x89, 0x00,
- 0xff, 0xff, 0x00, 0x9c, 0x00, 0x00, 0x05, 0x2b, 0x05, 0xd5, 0x10, 0x27,
- 0x00, 0xc8, 0x01, 0x98, 0x01, 0x81, 0x10, 0x06, 0x00, 0x32, 0x00, 0x00,
- 0xff, 0xff, 0x00, 0x4e, 0xff, 0xd1, 0x05, 0xf0, 0x05, 0xee, 0x10, 0x27,
- 0x00, 0xc6, 0x01, 0xcb, 0x01, 0x98, 0x10, 0x06, 0x00, 0x33, 0x00, 0x00,
- 0xff, 0xff, 0x00, 0x4e, 0xff, 0xd1, 0x05, 0xf0, 0x05, 0xee, 0x10, 0x27,
- 0x00, 0xc5, 0x01, 0xd5, 0x01, 0x98, 0x10, 0x06, 0x00, 0x33, 0x00, 0x00,
- 0xff, 0xff, 0x00, 0x4e, 0xff, 0xd1, 0x05, 0xf0, 0x05, 0xee, 0x10, 0x27,
- 0x00, 0xc4, 0x01, 0xd1, 0x01, 0x98, 0x10, 0x06, 0x00, 0x33, 0x00, 0x00,
- 0xff, 0xff, 0x00, 0x4e, 0xff, 0xd1, 0x05, 0xf0, 0x05, 0xee, 0x10, 0x27,
- 0x00, 0xc8, 0x01, 0xd1, 0x01, 0x81, 0x10, 0x06, 0x00, 0x33, 0x00, 0x00,
- 0xff, 0xff, 0x00, 0x4e, 0xff, 0xd1, 0x05, 0xf0, 0x07, 0x3b, 0x10, 0x27,
- 0x00, 0x6b, 0x01, 0xcf, 0x01, 0x83, 0x10, 0x06, 0x00, 0x33, 0x00, 0x00,
- 0x00, 0x01, 0x00, 0xc3, 0x00, 0x46, 0x03, 0xe7, 0x03, 0x6a, 0x00, 0x0b,
- 0x00, 0x00, 0x01, 0x17, 0x09, 0x01, 0x07, 0x09, 0x01, 0x27, 0x09, 0x01,
- 0x37, 0x01, 0x03, 0x81, 0x64, 0xfe, 0xd5, 0x01, 0x2d, 0x66, 0xfe, 0xd3,
- 0xfe, 0xd5, 0x66, 0x01, 0x2d, 0xfe, 0xd5, 0x64, 0x01, 0x2b, 0x03, 0x6a,
- 0x66, 0xfe, 0xd5, 0xfe, 0xd3, 0x66, 0x01, 0x2d, 0xfe, 0xd5, 0x64, 0x01,
- 0x2d, 0x01, 0x2b, 0x64, 0xfe, 0xd7, 0x00, 0x03, 0x00, 0x3d, 0xff, 0xd1,
- 0x05, 0xf4, 0x06, 0x0a, 0x00, 0x1b, 0x00, 0x26, 0x00, 0x31, 0x00, 0x00,
- 0x3f, 0x01, 0x26, 0x11, 0x10, 0x37, 0x36, 0x25, 0x36, 0x33, 0x20, 0x17,
- 0x37, 0x17, 0x07, 0x16, 0x13, 0x16, 0x15, 0x10, 0x07, 0x06, 0x05, 0x06,
- 0x23, 0x20, 0x27, 0x07, 0x13, 0x01, 0x26, 0x23, 0x22, 0x07, 0x06, 0x03,
- 0x06, 0x15, 0x14, 0x09, 0x01, 0x16, 0x33, 0x32, 0x37, 0x36, 0x13, 0x36,
- 0x35, 0x34, 0x3d, 0xa6, 0x9b, 0xa8, 0x9e, 0x01, 0x05, 0x41, 0x45, 0x01,
- 0x17, 0xc0, 0xb2, 0x52, 0xb7, 0x92, 0x16, 0x04, 0xa8, 0x9e, 0xfe, 0xfb,
- 0x40, 0x45, 0xfe, 0xd9, 0xc7, 0x9e, 0xd7, 0x03, 0x13, 0x97, 0xc7, 0xe4,
- 0x90, 0x94, 0x0a, 0x01, 0x03, 0xb8, 0xfc, 0xe8, 0x97, 0xdc, 0xe2, 0x91,
- 0x93, 0x0b, 0x01, 0x27, 0xb6, 0xdb, 0x01, 0x29, 0x01, 0x3e, 0xd2, 0xc7,
- 0x2b, 0x0b, 0xa6, 0xc2, 0x49, 0xc7, 0xb7, 0xfe, 0xf1, 0x2b, 0x2c, 0xfe,
- 0xc2, 0xd2, 0xc6, 0x2b, 0x0b, 0xb8, 0xac, 0x01, 0x8b, 0x03, 0x5b, 0x83,
- 0x9b, 0x9e, 0xfe, 0xf8, 0x12, 0x12, 0xd4, 0x02, 0x62, 0xfc, 0xa1, 0x97,
- 0x9a, 0x9e, 0x01, 0x06, 0x13, 0x13, 0xea, 0x00, 0xff, 0xff, 0x00, 0xae,
- 0xff, 0xd1, 0x05, 0x29, 0x05, 0xd5, 0x10, 0x27, 0x00, 0xc6, 0x01, 0x98,
- 0x01, 0x98, 0x10, 0x06, 0x00, 0x39, 0x00, 0x00, 0xff, 0xff, 0x00, 0xae,
- 0xff, 0xd1, 0x05, 0x29, 0x05, 0xd5, 0x10, 0x27, 0x00, 0xc5, 0x01, 0x98,
- 0x01, 0x98, 0x10, 0x06, 0x00, 0x39, 0x00, 0x00, 0xff, 0xff, 0x00, 0xae,
- 0xff, 0xd1, 0x05, 0x29, 0x05, 0xd5, 0x10, 0x27, 0x00, 0xc4, 0x01, 0x9e,
- 0x01, 0x96, 0x10, 0x06, 0x00, 0x39, 0x00, 0x00, 0xff, 0xff, 0x00, 0xae,
- 0xff, 0xd1, 0x05, 0x29, 0x07, 0x3b, 0x10, 0x27, 0x00, 0x6b, 0x01, 0x9e,
- 0x01, 0x83, 0x10, 0x06, 0x00, 0x39, 0x00, 0x00, 0xff, 0xff, 0x00, 0x1b,
- 0x00, 0x00, 0x05, 0x4a, 0x05, 0xd5, 0x10, 0x27, 0x00, 0xc5, 0x01, 0x6a,
- 0x01, 0x98, 0x10, 0x06, 0x00, 0x3d, 0x00, 0x00, 0x00, 0x02, 0x00, 0xba,
- 0x00, 0x00, 0x04, 0xee, 0x05, 0xd5, 0x00, 0x0e, 0x00, 0x19, 0x00, 0x00,
- 0x01, 0x11, 0x23, 0x11, 0x33, 0x15, 0x21, 0x32, 0x17, 0x16, 0x15, 0x14,
- 0x07, 0x06, 0x23, 0x25, 0x21, 0x32, 0x37, 0x36, 0x35, 0x34, 0x27, 0x26,
- 0x23, 0x21, 0x01, 0x79, 0xbf, 0xbf, 0x01, 0xaa, 0xf0, 0x7b, 0x60, 0x77,
- 0x74, 0xb5, 0xfe, 0x2b, 0x01, 0x8d, 0xae, 0x47, 0x26, 0x77, 0x43, 0x61,
- 0xfe, 0x73, 0x01, 0x83, 0xfe, 0x7d, 0x05, 0xd5, 0xf6, 0x90, 0x71, 0xb1,
- 0xbd, 0x78, 0x75, 0xa8, 0x72, 0x3e, 0x56, 0x9e, 0x43, 0x25, 0x00, 0x01,
- 0x00, 0x89, 0xff, 0xe1, 0x04, 0x91, 0x05, 0xd3, 0x00, 0x31, 0x00, 0x00,
- 0x01, 0x20, 0x37, 0x36, 0x35, 0x34, 0x27, 0x26, 0x23, 0x22, 0x07, 0x06,
- 0x15, 0x11, 0x23, 0x11, 0x34, 0x37, 0x36, 0x33, 0x20, 0x17, 0x16, 0x15,
- 0x14, 0x07, 0x06, 0x07, 0x16, 0x17, 0x16, 0x15, 0x10, 0x07, 0x06, 0x23,
- 0x22, 0x27, 0x35, 0x16, 0x33, 0x20, 0x37, 0x36, 0x35, 0x34, 0x27, 0x26,
- 0x2b, 0x01, 0x02, 0x5a, 0x01, 0x0e, 0x29, 0x07, 0x71, 0x4e, 0x79, 0xd1,
- 0x39, 0x19, 0xb4, 0x8b, 0x7d, 0xd1, 0x01, 0x00, 0x85, 0x65, 0x97, 0x03,
- 0x0e, 0x71, 0x46, 0x36, 0xdf, 0x79, 0xac, 0x31, 0x3b, 0x2d, 0x2d, 0x01,
- 0x23, 0x30, 0x09, 0xec, 0x32, 0x3e, 0x21, 0x03, 0x6a, 0xac, 0x1c, 0x20,
- 0x7e, 0x3d, 0x2a, 0x87, 0x3c, 0x60, 0xfb, 0xec, 0x04, 0x42, 0xc2, 0x6d,
- 0x62, 0x7e, 0x60, 0x93, 0xbe, 0x66, 0x02, 0x09, 0x1f, 0x7a, 0x5e, 0x5d,
- 0xfe, 0xbf, 0x7b, 0x42, 0x0f, 0x99, 0x06, 0xda, 0x29, 0x30, 0xef, 0x27,
- 0x09, 0x00, 0xff, 0xff, 0x00, 0x56, 0xff, 0xd1, 0x04, 0x48, 0x04, 0x50,
- 0x10, 0x27, 0x00, 0xc6, 0x00, 0xec, 0x00, 0x00, 0x10, 0x06, 0x00, 0x45,
- 0x00, 0x00, 0xff, 0xff, 0x00, 0x56, 0xff, 0xd1, 0x04, 0x48, 0x04, 0x50,
- 0x10, 0x27, 0x00, 0xc5, 0x00, 0xec, 0xff, 0xfe, 0x10, 0x06, 0x00, 0x45,
- 0x00, 0x00, 0xff, 0xff, 0x00, 0x56, 0xff, 0xd1, 0x04, 0x48, 0x04, 0x50,
- 0x10, 0x27, 0x00, 0xc4, 0x00, 0xe5, 0x00, 0x00, 0x10, 0x06, 0x00, 0x45,
- 0x00, 0x00, 0xff, 0xff, 0x00, 0x56, 0xff, 0xd1, 0x04, 0x48, 0x04, 0x50,
- 0x10, 0x27, 0x00, 0xc8, 0x00, 0xe7, 0xff, 0xe3, 0x10, 0x06, 0x00, 0x45,
- 0x00, 0x00, 0xff, 0xff, 0x00, 0x56, 0xff, 0xd1, 0x04, 0x48, 0x05, 0x9d,
- 0x10, 0x27, 0x00, 0x6b, 0x00, 0xe5, 0xff, 0xe5, 0x10, 0x06, 0x00, 0x45,
- 0x00, 0x00, 0xff, 0xff, 0x00, 0x56, 0xff, 0xd1, 0x04, 0x48, 0x04, 0x50,
- 0x10, 0x27, 0x00, 0xc7, 0x00, 0xdd, 0x00, 0x00, 0x10, 0x06, 0x00, 0x45,
- 0x00, 0x00, 0x00, 0x03, 0x00, 0x46, 0xff, 0xd1, 0x06, 0xc3, 0x04, 0x50,
- 0x00, 0x3c, 0x00, 0x4d, 0x00, 0x56, 0x00, 0x00, 0x01, 0x16, 0x17, 0x16,
- 0x33, 0x32, 0x37, 0x33, 0x06, 0x07, 0x06, 0x23, 0x22, 0x27, 0x26, 0x2f,
- 0x01, 0x06, 0x07, 0x06, 0x23, 0x22, 0x27, 0x26, 0x35, 0x34, 0x37, 0x36,
- 0x25, 0x36, 0x33, 0x36, 0x37, 0x36, 0x3d, 0x01, 0x34, 0x27, 0x26, 0x23,
- 0x22, 0x07, 0x06, 0x07, 0x23, 0x12, 0x25, 0x36, 0x33, 0x20, 0x17, 0x36,
- 0x37, 0x36, 0x33, 0x32, 0x17, 0x16, 0x17, 0x16, 0x15, 0x01, 0x32, 0x37,
- 0x36, 0x37, 0x36, 0x3d, 0x01, 0x06, 0x07, 0x06, 0x07, 0x06, 0x15, 0x14,
- 0x17, 0x16, 0x01, 0x21, 0x34, 0x27, 0x26, 0x23, 0x22, 0x07, 0x06, 0x03,
- 0xac, 0x05, 0xa7, 0x41, 0x4e, 0xd1, 0x4a, 0xac, 0x26, 0x9f, 0x6e, 0x96,
- 0xb7, 0x77, 0x24, 0x1a, 0x21, 0xa2, 0x97, 0x3d, 0x44, 0xb3, 0x5e, 0x47,
- 0x98, 0x70, 0x01, 0x02, 0x05, 0x05, 0x7e, 0x20, 0x14, 0xa4, 0x23, 0x2a,
- 0xb7, 0x31, 0x0d, 0x05, 0xac, 0x0a, 0x01, 0x20, 0x3a, 0x46, 0x01, 0x07,
- 0x5f, 0x51, 0x96, 0x3c, 0x3f, 0xc0, 0x83, 0x48, 0x26, 0x2b, 0xfb, 0x02,
- 0x9e, 0x6a, 0x36, 0x08, 0x01, 0x43, 0x9f, 0x94, 0x37, 0x67, 0x5b, 0x30,
- 0x02, 0x2d, 0x02, 0x5a, 0x63, 0x4f, 0x75, 0x93, 0x56, 0x41, 0x01, 0xdf,
- 0xfe, 0x52, 0x20, 0xd7, 0xcf, 0x62, 0x44, 0x65, 0x1f, 0x26, 0x37, 0xa8,
- 0x29, 0x10, 0x6e, 0x53, 0x7c, 0xbc, 0x50, 0x3b, 0x17, 0x01, 0x0b, 0x27,
- 0x18, 0x2e, 0x2d, 0x82, 0x19, 0x05, 0x73, 0x20, 0x2b, 0x01, 0x1e, 0x34,
- 0x0a, 0xa8, 0x72, 0x27, 0x0f, 0x79, 0x44, 0x5e, 0x73, 0xe3, 0xfe, 0x87,
- 0x6f, 0x38, 0x2d, 0x05, 0x03, 0xce, 0x1d, 0x17, 0x16, 0x18, 0x2e, 0x6e,
- 0x69, 0x2c, 0x17, 0x02, 0x04, 0xa2, 0x5c, 0x4a, 0x72, 0x55, 0x00, 0x01,
- 0x00, 0x3f, 0xfe, 0x4a, 0x03, 0xd1, 0x04, 0x50, 0x00, 0x3e, 0x00, 0x00,
- 0x05, 0x24, 0x03, 0x26, 0x35, 0x10, 0x37, 0x36, 0x33, 0x32, 0x17, 0x16,
- 0x17, 0x23, 0x26, 0x27, 0x26, 0x23, 0x22, 0x07, 0x06, 0x15, 0x14, 0x17,
- 0x16, 0x33, 0x32, 0x13, 0x33, 0x06, 0x07, 0x06, 0x23, 0x07, 0x36, 0x33,
- 0x32, 0x17, 0x16, 0x15, 0x14, 0x07, 0x06, 0x23, 0x22, 0x27, 0x26, 0x27,
- 0x37, 0x17, 0x16, 0x33, 0x32, 0x37, 0x36, 0x35, 0x34, 0x27, 0x26, 0x23,
- 0x22, 0x07, 0x27, 0x01, 0xcd, 0xfe, 0xf2, 0x59, 0x27, 0x8b, 0x82, 0xd1,
- 0xf3, 0x6d, 0x3d, 0x0b, 0xac, 0x18, 0x83, 0x2c, 0x37, 0xa5, 0x4e, 0x36,
- 0x7a, 0x49, 0x6a, 0xda, 0x2c, 0xac, 0x0c, 0x8b, 0x72, 0xab, 0x1b, 0x1d,
- 0x1c, 0x77, 0x21, 0x0a, 0x67, 0x3d, 0x58, 0x4f, 0x53, 0x24, 0x3a, 0x2b,
- 0x69, 0x31, 0x2f, 0x42, 0x1f, 0x0e, 0x3d, 0x0f, 0x13, 0x20, 0x1f, 0x19,
- 0x2b, 0x32, 0x01, 0x05, 0x70, 0x8a, 0x01, 0x14, 0xa1, 0x95, 0xa5, 0x5c,
- 0x86, 0xa9, 0x30, 0x10, 0x9b, 0x6c, 0xa7, 0xf0, 0x69, 0x3e, 0x01, 0x04,
- 0xd3, 0x71, 0x5c, 0x44, 0x04, 0x51, 0x19, 0x1f, 0x6f, 0x31, 0x1e, 0x1e,
- 0x0c, 0x19, 0x54, 0x30, 0x13, 0x2e, 0x15, 0x19, 0x3a, 0x0e, 0x04, 0x11,
- 0x0f, 0x00, 0xff, 0xff, 0x00, 0x52, 0xff, 0xd1, 0x04, 0x1b, 0x04, 0x50,
- 0x10, 0x27, 0x00, 0xc6, 0x00, 0xf2, 0x00, 0x00, 0x10, 0x06, 0x00, 0x49,
- 0x00, 0x00, 0xff, 0xff, 0x00, 0x52, 0xff, 0xd1, 0x04, 0x1b, 0x04, 0x50,
- 0x10, 0x27, 0x00, 0xc5, 0x00, 0xf6, 0xff, 0xfe, 0x10, 0x06, 0x00, 0x49,
- 0x00, 0x00, 0xff, 0xff, 0x00, 0x52, 0xff, 0xd1, 0x04, 0x1b, 0x04, 0x50,
- 0x10, 0x27, 0x00, 0xc4, 0x00, 0xfc, 0x00, 0x02, 0x10, 0x06, 0x00, 0x49,
- 0x00, 0x00, 0xff, 0xff, 0x00, 0x52, 0xff, 0xd1, 0x04, 0x1b, 0x05, 0x9d,
- 0x10, 0x27, 0x00, 0x6b, 0x00, 0xf0, 0xff, 0xe5, 0x10, 0x06, 0x00, 0x49,
- 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x10, 0x26, 0x00, 0xc6, 0xcb, 0xfc, 0x10, 0x06, 0x00, 0xc3, 0x00, 0x00,
- 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x26,
- 0x00, 0xc5, 0xc9, 0xfe, 0x10, 0x06, 0x00, 0xc3, 0x00, 0x00, 0xff, 0xff,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x26, 0x00, 0xc4,
- 0xc9, 0x00, 0x10, 0x06, 0x00, 0xc3, 0x00, 0x00, 0xff, 0xff, 0x00, 0x06,
- 0x04, 0xca, 0x02, 0x27, 0x05, 0x9d, 0x10, 0x26, 0x00, 0x6b, 0xc9, 0xe5,
- 0x10, 0x06, 0x00, 0xc3, 0x00, 0x00, 0x00, 0x02, 0x00, 0x4a, 0xff, 0xd1,
- 0x04, 0x14, 0x05, 0xf2, 0x00, 0x24, 0x00, 0x34, 0x00, 0x00, 0x13, 0x10,
- 0x37, 0x36, 0x33, 0x32, 0x17, 0x26, 0x27, 0x26, 0x27, 0x07, 0x27, 0x37,
- 0x26, 0x27, 0x26, 0x27, 0x37, 0x16, 0x17, 0x16, 0x17, 0x37, 0x17, 0x07,
- 0x16, 0x17, 0x16, 0x11, 0x10, 0x07, 0x06, 0x23, 0x20, 0x27, 0x26, 0x01,
- 0x22, 0x07, 0x06, 0x15, 0x14, 0x17, 0x16, 0x33, 0x32, 0x37, 0x36, 0x35,
- 0x34, 0x27, 0x26, 0x4a, 0xc7, 0x6d, 0x8a, 0x33, 0x4e, 0x48, 0x64, 0x0b,
- 0x11, 0xc7, 0x4a, 0xae, 0x38, 0x64, 0x05, 0x07, 0x5a, 0x45, 0x5f, 0x19,
- 0x27, 0xc6, 0x52, 0xb8, 0x99, 0x57, 0xd0, 0xb7, 0x77, 0xb7, 0xfe, 0xf3,
- 0x7d, 0x5b, 0x01, 0xe5, 0x9f, 0x53, 0x41, 0x75, 0x4c, 0x72, 0x9d, 0x53,
- 0x43, 0x7e, 0x4a, 0x02, 0x10, 0x01, 0x5d, 0x90, 0x4f, 0x1b, 0x4a, 0x54,
- 0x09, 0x0f, 0x5c, 0x50, 0x52, 0x2b, 0x39, 0x03, 0x04, 0x5a, 0x1d, 0x3b,
- 0x10, 0x19, 0x5c, 0x4c, 0x54, 0x75, 0x6a, 0xfb, 0xfe, 0xbf, 0xfe, 0xb1,
- 0x92, 0x60, 0xc7, 0x91, 0x02, 0x89, 0x8a, 0x6d, 0xab, 0xea, 0x6e, 0x49,
- 0x86, 0x6c, 0xa9, 0xfd, 0x6c, 0x3f, 0xff, 0xff, 0x00, 0x8f, 0x00, 0x00,
- 0x03, 0xe5, 0x04, 0x50, 0x10, 0x27, 0x00, 0xc8, 0x00, 0xee, 0xff, 0xe3,
- 0x10, 0x06, 0x00, 0x52, 0x00, 0x00, 0xff, 0xff, 0x00, 0x4a, 0xff, 0xd1,
- 0x04, 0x14, 0x04, 0x50, 0x10, 0x27, 0x00, 0xc6, 0x00, 0xdf, 0x00, 0x02,
- 0x10, 0x06, 0x00, 0x53, 0x00, 0x00, 0xff, 0xff, 0x00, 0x4a, 0xff, 0xd1,
- 0x04, 0x14, 0x04, 0x50, 0x10, 0x27, 0x00, 0xc5, 0x00, 0xe1, 0x00, 0x00,
- 0x10, 0x06, 0x00, 0x53, 0x00, 0x00, 0xff, 0xff, 0x00, 0x4a, 0xff, 0xd1,
- 0x04, 0x14, 0x04, 0x50, 0x10, 0x27, 0x00, 0xc4, 0x00, 0xe1, 0x00, 0x02,
- 0x10, 0x06, 0x00, 0x53, 0x00, 0x00, 0xff, 0xff, 0x00, 0x4a, 0xff, 0xd1,
- 0x04, 0x14, 0x04, 0x50, 0x10, 0x27, 0x00, 0xc8, 0x00, 0xe1, 0xff, 0xe3,
- 0x10, 0x06, 0x00, 0x53, 0x00, 0x00, 0xff, 0xff, 0x00, 0x4a, 0xff, 0xd1,
- 0x04, 0x14, 0x05, 0x9d, 0x10, 0x27, 0x00, 0x6b, 0x00, 0xdf, 0xff, 0xe5,
- 0x10, 0x06, 0x00, 0x53, 0x00, 0x00, 0x00, 0x03, 0x00, 0x66, 0x00, 0x00,
- 0x04, 0x46, 0x03, 0xc7, 0x00, 0x03, 0x00, 0x07, 0x00, 0x0b, 0x00, 0x00,
- 0x01, 0x15, 0x21, 0x35, 0x01, 0x15, 0x23, 0x35, 0x13, 0x15, 0x23, 0x35,
- 0x04, 0x46, 0xfc, 0x20, 0x02, 0x5b, 0xd5, 0xd5, 0xd5, 0x02, 0x2b, 0x8f,
- 0x8f, 0xfe, 0xaa, 0xd5, 0xd5, 0x02, 0xf2, 0xd5, 0xd5, 0x00, 0x00, 0x03,
- 0x00, 0x25, 0xff, 0xc3, 0x04, 0x3b, 0x04, 0x50, 0x00, 0x17, 0x00, 0x20,
- 0x00, 0x2b, 0x00, 0x00, 0x01, 0x07, 0x16, 0x15, 0x10, 0x07, 0x06, 0x23,
- 0x22, 0x27, 0x07, 0x27, 0x37, 0x26, 0x35, 0x10, 0x37, 0x36, 0x33, 0x32,
- 0x17, 0x16, 0x17, 0x37, 0x03, 0x01, 0x16, 0x33, 0x32, 0x37, 0x36, 0x35,
- 0x34, 0x09, 0x01, 0x26, 0x27, 0x26, 0x23, 0x22, 0x07, 0x06, 0x15, 0x14,
- 0x04, 0x3b, 0x81, 0x5a, 0xa1, 0x7c, 0xc6, 0xd2, 0x7c, 0x7d, 0x41, 0x87,
- 0x62, 0xa1, 0x7d, 0xc7, 0xc6, 0x81, 0x07, 0x06, 0x77, 0xbd, 0xfe, 0x19,
- 0x58, 0x81, 0xa3, 0x52, 0x3e, 0xfd, 0xc5, 0x01, 0xe9, 0x49, 0x79, 0x0f,
- 0x10, 0x9f, 0x53, 0x41, 0x04, 0x17, 0x92, 0x94, 0xe1, 0xfe, 0xce, 0x98,
- 0x75, 0x7f, 0x8d, 0x39, 0x97, 0x92, 0xeb, 0x01, 0x31, 0x98, 0x77, 0x78,
- 0x07, 0x06, 0x85, 0xfe, 0xa8, 0xfd, 0xd9, 0x62, 0x8e, 0x6b, 0xa8, 0x89,
- 0xfe, 0x88, 0x02, 0x27, 0x5c, 0x0c, 0x02, 0x8a, 0x6d, 0xab, 0x8c, 0x00,
- 0xff, 0xff, 0x00, 0x85, 0xff, 0xd1, 0x03, 0xdb, 0x04, 0x31, 0x10, 0x27,
- 0x00, 0xc6, 0x00, 0xdd, 0xff, 0xfe, 0x10, 0x06, 0x00, 0x59, 0x00, 0x00,
- 0xff, 0xff, 0x00, 0x85, 0xff, 0xd1, 0x03, 0xdb, 0x04, 0x31, 0x10, 0x27,
- 0x00, 0xc5, 0x00, 0xdd, 0x00, 0x00, 0x10, 0x06, 0x00, 0x59, 0x00, 0x00,
- 0xff, 0xff, 0x00, 0x85, 0xff, 0xd1, 0x03, 0xdb, 0x04, 0x31, 0x10, 0x27,
- 0x00, 0xc4, 0x00, 0xe3, 0x00, 0x02, 0x10, 0x06, 0x00, 0x59, 0x00, 0x00,
- 0xff, 0xff, 0x00, 0x85, 0xff, 0xd1, 0x03, 0xdb, 0x05, 0x9d, 0x10, 0x27,
- 0x00, 0x6b, 0x00, 0xe1, 0xff, 0xe5, 0x10, 0x06, 0x00, 0x59, 0x00, 0x00,
- 0xff, 0xff, 0x00, 0x29, 0xfe, 0x42, 0x03, 0xd3, 0x04, 0x31, 0x10, 0x27,
- 0x00, 0xc5, 0x00, 0xa6, 0xff, 0xfe, 0x10, 0x06, 0x00, 0x5d, 0x00, 0x00,
- 0x00, 0x02, 0x00, 0x6f, 0xfe, 0x42, 0x04, 0x2d, 0x05, 0xb6, 0x00, 0x14,
- 0x00, 0x24, 0x00, 0x00, 0x13, 0x11, 0x33, 0x11, 0x36, 0x37, 0x36, 0x33,
- 0x32, 0x17, 0x16, 0x11, 0x10, 0x07, 0x06, 0x23, 0x22, 0x27, 0x26, 0x27,
- 0x11, 0x01, 0x22, 0x07, 0x06, 0x15, 0x14, 0x17, 0x16, 0x33, 0x32, 0x37,
- 0x36, 0x35, 0x34, 0x27, 0x26, 0x6f, 0xaa, 0x59, 0x9f, 0x27, 0x2a, 0xd0,
- 0x7c, 0x7f, 0x88, 0x7c, 0xc7, 0xa9, 0x72, 0x17, 0x17, 0x01, 0x2b, 0x91,
- 0x53, 0x47, 0x6b, 0x4d, 0x73, 0x91, 0x57, 0x4f, 0x6d, 0x51, 0xfe, 0x42,
- 0x07, 0x74, 0xfd, 0xf6, 0x7f, 0x1e, 0x07, 0x9d, 0xa0, 0xfe, 0xf3, 0xfe,
- 0xf5, 0x9c, 0x8e, 0x6d, 0x17, 0x1c, 0xfd, 0xd1, 0x05, 0x6e, 0x81, 0x6f,
- 0xb0, 0xdb, 0x72, 0x52, 0x7a, 0x70, 0xaf, 0xdc, 0x73, 0x57, 0xff, 0xff,
- 0x00, 0x29, 0xfe, 0x42, 0x03, 0xd3, 0x05, 0x9d, 0x10, 0x27, 0x00, 0x6b,
- 0x00, 0xb0, 0xff, 0xe5, 0x10, 0x06, 0x00, 0x5d, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x22, 0x01, 0x9e, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x66, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x10, 0x00, 0x9c, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x0c, 0x00, 0xb7, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x4a, 0x00, 0xcc, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x12, 0x01, 0x3e, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x34, 0x01, 0x5c, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x10, 0x01, 0xad, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x0d, 0x00, 0x8c, 0x01, 0xc8, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x48, 0x02, 0x9d, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x13, 0x00, 0x58, 0x03, 0x0c, 0x00, 0x01,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x33, 0x00, 0x68, 0x00, 0x01,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x08, 0x00, 0xae, 0x00, 0x01,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x06, 0x00, 0xc5, 0x00, 0x01,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x25, 0x01, 0x18, 0x00, 0x01,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x09, 0x01, 0x52, 0x00, 0x01,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x1a, 0x01, 0x92, 0x00, 0x01,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x08, 0x01, 0xbf, 0x00, 0x01,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x0d, 0x00, 0x46, 0x02, 0x56, 0x00, 0x01,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x24, 0x02, 0xe7, 0x00, 0x01,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x13, 0x00, 0x2c, 0x03, 0x66, 0x00, 0x03,
- 0x00, 0x01, 0x04, 0x09, 0x00, 0x00, 0x00, 0x66, 0x00, 0x00, 0x00, 0x03,
- 0x00, 0x01, 0x04, 0x09, 0x00, 0x01, 0x00, 0x10, 0x00, 0x9c, 0x00, 0x03,
- 0x00, 0x01, 0x04, 0x09, 0x00, 0x02, 0x00, 0x0c, 0x00, 0xb7, 0x00, 0x03,
- 0x00, 0x01, 0x04, 0x09, 0x00, 0x03, 0x00, 0x4a, 0x00, 0xcc, 0x00, 0x03,
- 0x00, 0x01, 0x04, 0x09, 0x00, 0x04, 0x00, 0x12, 0x01, 0x3e, 0x00, 0x03,
- 0x00, 0x01, 0x04, 0x09, 0x00, 0x05, 0x00, 0x34, 0x01, 0x5c, 0x00, 0x03,
- 0x00, 0x01, 0x04, 0x09, 0x00, 0x06, 0x00, 0x10, 0x01, 0xad, 0x00, 0x03,
- 0x00, 0x01, 0x04, 0x09, 0x00, 0x0d, 0x00, 0x8c, 0x01, 0xc8, 0x00, 0x03,
- 0x00, 0x01, 0x04, 0x09, 0x00, 0x0e, 0x00, 0x48, 0x02, 0x9d, 0x00, 0x03,
- 0x00, 0x01, 0x04, 0x09, 0x00, 0x13, 0x00, 0x58, 0x03, 0x0c, 0x00, 0x03,
- 0x00, 0x01, 0x04, 0x24, 0x00, 0x02, 0x00, 0x0e, 0x03, 0x93, 0x00, 0x03,
- 0x00, 0x01, 0x04, 0x24, 0x00, 0x0d, 0x00, 0x86, 0x03, 0xa3, 0x00, 0x03,
- 0x00, 0x01, 0x04, 0x24, 0x00, 0x0e, 0x00, 0x48, 0x04, 0x2b, 0x00, 0x03,
- 0x00, 0x01, 0x04, 0x24, 0x00, 0x13, 0x00, 0x54, 0x04, 0x75, 0x00, 0x43,
- 0x00, 0x6f, 0x00, 0x70, 0x00, 0x79, 0x00, 0x6c, 0x00, 0x65, 0x00, 0x66,
- 0x00, 0x74, 0x00, 0x20, 0x00, 0x32, 0x00, 0x30, 0x00, 0x30, 0x00, 0x32,
- 0x00, 0x2c, 0x00, 0x20, 0x00, 0x32, 0x00, 0x30, 0x00, 0x30, 0x00, 0x33,
- 0x00, 0x2c, 0x00, 0x20, 0x00, 0x32, 0x00, 0x30, 0x00, 0x30, 0x00, 0x35,
- 0x00, 0x20, 0x00, 0x46, 0x00, 0x72, 0x00, 0x65, 0x00, 0x65, 0x00, 0x20,
- 0x00, 0x53, 0x00, 0x6f, 0x00, 0x66, 0x00, 0x74, 0x00, 0x77, 0x00, 0x61,
- 0x00, 0x72, 0x00, 0x65, 0x00, 0x20, 0x00, 0x46, 0x00, 0x6f, 0x00, 0x75,
- 0x00, 0x6e, 0x00, 0x64, 0x00, 0x61, 0x00, 0x74, 0x00, 0x69, 0x00, 0x6f,
- 0x00, 0x6e, 0x00, 0x2e, 0x00, 0x00, 0x43, 0x6f, 0x70, 0x79, 0x6c, 0x65,
- 0x66, 0x74, 0x20, 0x32, 0x30, 0x30, 0x32, 0x2c, 0x20, 0x32, 0x30, 0x30,
- 0x33, 0x2c, 0x20, 0x32, 0x30, 0x30, 0x35, 0x20, 0x46, 0x72, 0x65, 0x65,
- 0x20, 0x53, 0x6f, 0x66, 0x74, 0x77, 0x61, 0x72, 0x65, 0x20, 0x46, 0x6f,
- 0x75, 0x6e, 0x64, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x00, 0x00, 0x46,
- 0x00, 0x72, 0x00, 0x65, 0x00, 0x65, 0x00, 0x53, 0x00, 0x61, 0x00, 0x6e,
- 0x00, 0x73, 0x00, 0x00, 0x46, 0x72, 0x65, 0x65, 0x53, 0x61, 0x6e, 0x73,
- 0x00, 0x00, 0x4d, 0x00, 0x65, 0x00, 0x64, 0x00, 0x69, 0x00, 0x75, 0x00,
- 0x6d, 0x00, 0x00, 0x4d, 0x65, 0x64, 0x69, 0x75, 0x6d, 0x00, 0x00, 0x46,
- 0x00, 0x6f, 0x00, 0x6e, 0x00, 0x74, 0x00, 0x46, 0x00, 0x6f, 0x00, 0x72,
- 0x00, 0x67, 0x00, 0x65, 0x00, 0x20, 0x00, 0x31, 0x00, 0x2e, 0x00, 0x30,
- 0x00, 0x20, 0x00, 0x3a, 0x00, 0x20, 0x00, 0x46, 0x00, 0x72, 0x00, 0x65,
- 0x00, 0x65, 0x00, 0x20, 0x00, 0x53, 0x00, 0x61, 0x00, 0x6e, 0x00, 0x73,
- 0x00, 0x20, 0x00, 0x3a, 0x00, 0x20, 0x00, 0x32, 0x00, 0x36, 0x00, 0x2d,
- 0x00, 0x31, 0x00, 0x2d, 0x00, 0x32, 0x00, 0x30, 0x00, 0x30, 0x00, 0x36,
- 0x00, 0x00, 0x46, 0x6f, 0x6e, 0x74, 0x46, 0x6f, 0x72, 0x67, 0x65, 0x20,
- 0x31, 0x2e, 0x30, 0x20, 0x3a, 0x20, 0x46, 0x72, 0x65, 0x65, 0x20, 0x53,
- 0x61, 0x6e, 0x73, 0x20, 0x3a, 0x20, 0x32, 0x36, 0x2d, 0x31, 0x2d, 0x32,
- 0x30, 0x30, 0x36, 0x00, 0x00, 0x46, 0x00, 0x72, 0x00, 0x65, 0x00, 0x65,
- 0x00, 0x20, 0x00, 0x53, 0x00, 0x61, 0x00, 0x6e, 0x00, 0x73, 0x00, 0x00,
- 0x46, 0x72, 0x65, 0x65, 0x20, 0x53, 0x61, 0x6e, 0x73, 0x00, 0x00, 0x56,
- 0x00, 0x65, 0x00, 0x72, 0x00, 0x73, 0x00, 0x69, 0x00, 0x6f, 0x00, 0x6e,
- 0x00, 0x20, 0x00, 0x24, 0x00, 0x52, 0x00, 0x65, 0x00, 0x76, 0x00, 0x69,
- 0x00, 0x73, 0x00, 0x69, 0x00, 0x6f, 0x00, 0x6e, 0x00, 0x3a, 0x00, 0x20,
- 0x00, 0x31, 0x00, 0x2e, 0x00, 0x37, 0x00, 0x36, 0x00, 0x20, 0x00, 0x24,
- 0x00, 0x20, 0x00, 0x00, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x20,
- 0x24, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x3a, 0x20, 0x31,
- 0x2e, 0x37, 0x36, 0x20, 0x24, 0x20, 0x00, 0x00, 0x46, 0x00, 0x72, 0x00,
- 0x65, 0x00, 0x65, 0x00, 0x53, 0x00, 0x61, 0x00, 0x6e, 0x00, 0x73, 0x00,
- 0x00, 0x46, 0x72, 0x65, 0x65, 0x53, 0x61, 0x6e, 0x73, 0x00, 0x00, 0x54,
- 0x00, 0x68, 0x00, 0x65, 0x00, 0x20, 0x00, 0x75, 0x00, 0x73, 0x00, 0x65,
- 0x00, 0x20, 0x00, 0x6f, 0x00, 0x66, 0x00, 0x20, 0x00, 0x74, 0x00, 0x68,
- 0x00, 0x69, 0x00, 0x73, 0x00, 0x20, 0x00, 0x66, 0x00, 0x6f, 0x00, 0x6e,
- 0x00, 0x74, 0x00, 0x20, 0x00, 0x69, 0x00, 0x73, 0x00, 0x20, 0x00, 0x67,
- 0x00, 0x72, 0x00, 0x61, 0x00, 0x6e, 0x00, 0x74, 0x00, 0x65, 0x00, 0x64,
- 0x00, 0x20, 0x00, 0x73, 0x00, 0x75, 0x00, 0x62, 0x00, 0x6a, 0x00, 0x65,
- 0x00, 0x63, 0x00, 0x74, 0x00, 0x20, 0x00, 0x74, 0x00, 0x6f, 0x00, 0x20,
- 0x00, 0x47, 0x00, 0x4e, 0x00, 0x55, 0x00, 0x20, 0x00, 0x47, 0x00, 0x65,
- 0x00, 0x6e, 0x00, 0x65, 0x00, 0x72, 0x00, 0x61, 0x00, 0x6c, 0x00, 0x20,
- 0x00, 0x50, 0x00, 0x75, 0x00, 0x62, 0x00, 0x6c, 0x00, 0x69, 0x00, 0x63,
- 0x00, 0x20, 0x00, 0x4c, 0x00, 0x69, 0x00, 0x63, 0x00, 0x65, 0x00, 0x6e,
- 0x00, 0x73, 0x00, 0x65, 0x00, 0x2e, 0x00, 0x00, 0x54, 0x68, 0x65, 0x20,
- 0x75, 0x73, 0x65, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x69, 0x73, 0x20,
- 0x66, 0x6f, 0x6e, 0x74, 0x20, 0x69, 0x73, 0x20, 0x67, 0x72, 0x61, 0x6e,
- 0x74, 0x65, 0x64, 0x20, 0x73, 0x75, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x20,
- 0x74, 0x6f, 0x20, 0x47, 0x4e, 0x55, 0x20, 0x47, 0x65, 0x6e, 0x65, 0x72,
- 0x61, 0x6c, 0x20, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x20, 0x4c, 0x69,
- 0x63, 0x65, 0x6e, 0x73, 0x65, 0x2e, 0x00, 0x00, 0x68, 0x00, 0x74, 0x00,
- 0x74, 0x00, 0x70, 0x00, 0x3a, 0x00, 0x2f, 0x00, 0x2f, 0x00, 0x77, 0x00,
- 0x77, 0x00, 0x77, 0x00, 0x2e, 0x00, 0x67, 0x00, 0x6e, 0x00, 0x75, 0x00,
- 0x2e, 0x00, 0x6f, 0x00, 0x72, 0x00, 0x67, 0x00, 0x2f, 0x00, 0x63, 0x00,
- 0x6f, 0x00, 0x70, 0x00, 0x79, 0x00, 0x6c, 0x00, 0x65, 0x00, 0x66, 0x00,
- 0x74, 0x00, 0x2f, 0x00, 0x67, 0x00, 0x70, 0x00, 0x6c, 0x00, 0x2e, 0x00,
- 0x68, 0x00, 0x74, 0x00, 0x6d, 0x00, 0x6c, 0x00, 0x00, 0x68, 0x74, 0x74,
- 0x70, 0x3a, 0x2f, 0x2f, 0x77, 0x77, 0x77, 0x2e, 0x67, 0x6e, 0x75, 0x2e,
- 0x6f, 0x72, 0x67, 0x2f, 0x63, 0x6f, 0x70, 0x79, 0x6c, 0x65, 0x66, 0x74,
- 0x2f, 0x67, 0x70, 0x6c, 0x2e, 0x68, 0x74, 0x6d, 0x6c, 0x00, 0x00, 0x54,
- 0x00, 0x68, 0x00, 0x65, 0x00, 0x20, 0x00, 0x71, 0x00, 0x75, 0x00, 0x69,
- 0x00, 0x63, 0x00, 0x6b, 0x00, 0x20, 0x00, 0x62, 0x00, 0x72, 0x00, 0x6f,
- 0x00, 0x77, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x66, 0x00, 0x6f, 0x00, 0x78,
- 0x00, 0x20, 0x00, 0x6a, 0x00, 0x75, 0x00, 0x6d, 0x00, 0x70, 0x00, 0x73,
- 0x00, 0x20, 0x00, 0x6f, 0x00, 0x76, 0x00, 0x65, 0x00, 0x72, 0x00, 0x20,
- 0x00, 0x74, 0x00, 0x68, 0x00, 0x65, 0x00, 0x20, 0x00, 0x6c, 0x00, 0x61,
- 0x00, 0x7a, 0x00, 0x79, 0x00, 0x20, 0x00, 0x64, 0x00, 0x6f, 0x00, 0x67,
- 0x00, 0x2e, 0x00, 0x00, 0x54, 0x68, 0x65, 0x20, 0x71, 0x75, 0x69, 0x63,
- 0x6b, 0x20, 0x62, 0x72, 0x6f, 0x77, 0x6e, 0x20, 0x66, 0x6f, 0x78, 0x20,
- 0x6a, 0x75, 0x6d, 0x70, 0x73, 0x20, 0x6f, 0x76, 0x65, 0x72, 0x20, 0x74,
- 0x68, 0x65, 0x20, 0x6c, 0x61, 0x7a, 0x79, 0x20, 0x64, 0x6f, 0x67, 0x2e,
- 0x00, 0x00, 0x6e, 0x00, 0x61, 0x00, 0x76, 0x00, 0x61, 0x00, 0x64, 0x00,
- 0x6e, 0x00, 0x6f, 0x00, 0x00, 0x00, 0x44, 0x00, 0x6f, 0x00, 0x76, 0x00,
- 0x6f, 0x00, 0x6c, 0x00, 0x6a, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x61, 0x00,
- 0x20, 0x00, 0x6a, 0x00, 0x65, 0x00, 0x20, 0x00, 0x75, 0x00, 0x70, 0x00,
- 0x6f, 0x00, 0x72, 0x00, 0x61, 0x00, 0x62, 0x00, 0x61, 0x00, 0x20, 0x00,
- 0x76, 0x00, 0x20, 0x00, 0x73, 0x00, 0x6b, 0x00, 0x6c, 0x00, 0x61, 0x00,
- 0x64, 0x00, 0x75, 0x00, 0x20, 0x00, 0x7a, 0x00, 0x20, 0x00, 0x6c, 0x00,
- 0x69, 0x00, 0x63, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x63, 0x00, 0x6f, 0x00,
- 0x20, 0x00, 0x47, 0x00, 0x4e, 0x00, 0x55, 0x00, 0x20, 0x00, 0x47, 0x00,
- 0x65, 0x00, 0x6e, 0x00, 0x65, 0x00, 0x72, 0x00, 0x61, 0x00, 0x6c, 0x00,
- 0x20, 0x00, 0x50, 0x00, 0x75, 0x00, 0x62, 0x00, 0x6c, 0x00, 0x69, 0x00,
- 0x63, 0x00, 0x20, 0x00, 0x4c, 0x00, 0x69, 0x00, 0x63, 0x00, 0x65, 0x00,
- 0x6e, 0x00, 0x73, 0x00, 0x65, 0x00, 0x2e, 0x00, 0x00, 0x00, 0x68, 0x00,
- 0x74, 0x00, 0x74, 0x00, 0x70, 0x00, 0x3a, 0x00, 0x2f, 0x00, 0x2f, 0x00,
- 0x77, 0x00, 0x77, 0x00, 0x77, 0x00, 0x2e, 0x00, 0x67, 0x00, 0x6e, 0x00,
- 0x75, 0x00, 0x2e, 0x00, 0x6f, 0x00, 0x72, 0x00, 0x67, 0x00, 0x2f, 0x00,
- 0x63, 0x00, 0x6f, 0x00, 0x70, 0x00, 0x79, 0x00, 0x6c, 0x00, 0x65, 0x00,
- 0x66, 0x00, 0x74, 0x00, 0x2f, 0x00, 0x67, 0x00, 0x70, 0x00, 0x6c, 0x00,
- 0x2e, 0x00, 0x68, 0x00, 0x74, 0x00, 0x6d, 0x00, 0x6c, 0x00, 0x00, 0x01,
- 0x60, 0x00, 0x65, 0x00, 0x72, 0x00, 0x69, 0x00, 0x66, 0x00, 0x20, 0x00,
- 0x62, 0x00, 0x6f, 0x00, 0x20, 0x00, 0x7a, 0x00, 0x61, 0x00, 0x20, 0x00,
- 0x76, 0x00, 0x61, 0x00, 0x6a, 0x00, 0x6f, 0x00, 0x20, 0x00, 0x73, 0x00,
- 0x70, 0x00, 0x65, 0x00, 0x74, 0x00, 0x20, 0x00, 0x6b, 0x00, 0x75, 0x00,
- 0x68, 0x00, 0x61, 0x00, 0x6c, 0x00, 0x20, 0x00, 0x64, 0x00, 0x6f, 0x00,
- 0x6d, 0x00, 0x61, 0x01, 0x0d, 0x00, 0x65, 0x00, 0x20, 0x01, 0x7e, 0x00,
- 0x67, 0x00, 0x61, 0x00, 0x6e, 0x00, 0x63, 0x00, 0x65, 0x00, 0x2e, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0xfe, 0xcb, 0x00, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0xc9, 0x00, 0x00, 0x00, 0x01, 0x00, 0x02, 0x01, 0x02, 0x00, 0x03,
- 0x00, 0x04, 0x00, 0x05, 0x00, 0x06, 0x00, 0x07, 0x00, 0x08, 0x00, 0x09,
- 0x00, 0x0a, 0x00, 0x0b, 0x00, 0x0c, 0x00, 0x0d, 0x00, 0x0e, 0x00, 0x0f,
- 0x00, 0x10, 0x00, 0x11, 0x00, 0x12, 0x00, 0x13, 0x00, 0x14, 0x00, 0x15,
- 0x00, 0x16, 0x00, 0x17, 0x00, 0x18, 0x00, 0x19, 0x00, 0x1a, 0x00, 0x1b,
- 0x00, 0x1c, 0x00, 0x1d, 0x00, 0x1e, 0x00, 0x1f, 0x00, 0x20, 0x00, 0x21,
- 0x00, 0x22, 0x00, 0x23, 0x00, 0x24, 0x00, 0x25, 0x00, 0x26, 0x00, 0x27,
- 0x00, 0x28, 0x00, 0x29, 0x00, 0x2a, 0x00, 0x2b, 0x00, 0x2c, 0x00, 0x2d,
- 0x00, 0x2e, 0x00, 0x2f, 0x00, 0x30, 0x00, 0x31, 0x00, 0x32, 0x00, 0x33,
- 0x00, 0x34, 0x00, 0x35, 0x00, 0x36, 0x00, 0x37, 0x00, 0x38, 0x00, 0x39,
- 0x00, 0x3a, 0x00, 0x3b, 0x00, 0x3c, 0x00, 0x3d, 0x00, 0x3e, 0x00, 0x3f,
- 0x00, 0x40, 0x00, 0x41, 0x00, 0x42, 0x00, 0x43, 0x00, 0x44, 0x00, 0x45,
- 0x00, 0x46, 0x00, 0x47, 0x00, 0x48, 0x00, 0x49, 0x00, 0x4a, 0x00, 0x4b,
- 0x00, 0x4c, 0x00, 0x4d, 0x00, 0x4e, 0x00, 0x4f, 0x00, 0x50, 0x00, 0x51,
- 0x00, 0x52, 0x00, 0x53, 0x00, 0x54, 0x00, 0x55, 0x00, 0x56, 0x00, 0x57,
- 0x00, 0x58, 0x00, 0x59, 0x00, 0x5a, 0x00, 0x5b, 0x00, 0x5c, 0x00, 0x5d,
- 0x00, 0x5e, 0x00, 0x5f, 0x00, 0x60, 0x00, 0x61, 0x00, 0xac, 0x00, 0xa3,
- 0x00, 0x84, 0x00, 0x85, 0x00, 0xbd, 0x00, 0x96, 0x00, 0xe8, 0x00, 0x86,
- 0x00, 0x8e, 0x00, 0x8b, 0x00, 0x9d, 0x00, 0xa9, 0x00, 0xa4, 0x01, 0x03,
- 0x00, 0x8a, 0x00, 0xda, 0x00, 0x83, 0x00, 0x93, 0x00, 0xf2, 0x00, 0xf3,
- 0x00, 0x8d, 0x00, 0x97, 0x00, 0x88, 0x00, 0xc3, 0x00, 0xde, 0x00, 0xf1,
- 0x00, 0x9e, 0x00, 0xaa, 0x00, 0xf5, 0x00, 0xf4, 0x00, 0xf6, 0x00, 0xa2,
- 0x00, 0xad, 0x00, 0xc9, 0x00, 0xc7, 0x00, 0xae, 0x00, 0x62, 0x00, 0x63,
- 0x00, 0x90, 0x00, 0x64, 0x00, 0xcb, 0x00, 0x65, 0x00, 0xc8, 0x00, 0xca,
- 0x00, 0xcf, 0x00, 0xcc, 0x00, 0xcd, 0x00, 0xce, 0x00, 0xe9, 0x00, 0x66,
- 0x00, 0xd3, 0x00, 0xd0, 0x00, 0xd1, 0x00, 0xaf, 0x00, 0x67, 0x00, 0xf0,
- 0x00, 0x91, 0x00, 0xd6, 0x00, 0xd4, 0x00, 0xd5, 0x00, 0x68, 0x00, 0xeb,
- 0x00, 0xed, 0x00, 0x89, 0x00, 0x6a, 0x00, 0x69, 0x00, 0x6b, 0x00, 0x6d,
- 0x00, 0x6c, 0x00, 0x6e, 0x00, 0xa0, 0x00, 0x6f, 0x00, 0x71, 0x00, 0x70,
- 0x00, 0x72, 0x00, 0x73, 0x00, 0x75, 0x00, 0x74, 0x00, 0x76, 0x00, 0x77,
- 0x00, 0xea, 0x00, 0x78, 0x00, 0x7a, 0x00, 0x79, 0x00, 0x7b, 0x00, 0x7d,
- 0x00, 0x7c, 0x00, 0xb8, 0x00, 0xa1, 0x00, 0x7f, 0x00, 0x7e, 0x00, 0x80,
- 0x00, 0x81, 0x00, 0xec, 0x00, 0xee, 0x00, 0xba, 0x00, 0xd7, 0x00, 0xd8,
- 0x01, 0x04, 0x01, 0x05, 0x00, 0xdd, 0x00, 0xd9, 0x06, 0x67, 0x6c, 0x79,
- 0x70, 0x68, 0x33, 0x0a, 0x73, 0x6f, 0x66, 0x74, 0x68, 0x79, 0x70, 0x68,
- 0x65, 0x6e, 0x07, 0x75, 0x6e, 0x69, 0x30, 0x32, 0x43, 0x41, 0x07, 0x75,
- 0x6e, 0x69, 0x30, 0x32, 0x43, 0x42, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01,
- 0xff, 0xff, 0x00, 0x02, 0x00, 0x01, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00,
- 0x00, 0x22, 0x00, 0x00, 0x00, 0x02, 0x00, 0x03, 0x00, 0x00, 0x00, 0x6a,
- 0x00, 0x01, 0x00, 0x6b, 0x00, 0x6b, 0x00, 0x03, 0x00, 0x6c, 0x00, 0x02,
- 0x00, 0x01, 0x00, 0x04, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x01, 0x00, 0x00, 0x00, 0x0a, 0x00, 0x8e, 0x00, 0x9c, 0x00, 0x08,
- 0x44, 0x46, 0x4c, 0x54, 0x00, 0x32, 0x61, 0x72, 0x6d, 0x6e, 0x00, 0x3c,
- 0x62, 0x65, 0x6e, 0x67, 0x00, 0x46, 0x64, 0x65, 0x76, 0x61, 0x00, 0x50,
- 0x67, 0x75, 0x6a, 0x72, 0x00, 0x5a, 0x67, 0x75, 0x72, 0x75, 0x00, 0x64,
- 0x68, 0x65, 0x62, 0x72, 0x00, 0x6e, 0x6c, 0x61, 0x74, 0x6e, 0x00, 0x78,
- 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0x00, 0x04,
- 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00,
- 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00,
- 0xff, 0xff, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff,
- 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00,
- 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0x00, 0x04,
- 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01,
- 0x63, 0x63, 0x6d, 0x70, 0x00, 0x08, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00,
- 0x00, 0x02, 0x00, 0x06, 0x00, 0x0e, 0x00, 0x06, 0x00, 0x00, 0x00, 0x01,
- 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x46, 0x00, 0x02,
- 0x00, 0x12, 0x00, 0x1a, 0x00, 0x22, 0x00, 0x22, 0x00, 0x03, 0x00, 0x00,
- 0x00, 0x2c, 0x00, 0x00, 0x00, 0x01, 0x00, 0x02, 0x00, 0x4d, 0x00, 0x4e,
- 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x01,
- 0x00, 0x4d, 0x00, 0x4e, 0x00, 0x01, 0x00, 0x01, 0x00, 0x04, 0x00, 0x00,
- 0x00, 0x01, 0x00, 0x01, 0x00, 0x02, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01,
- 0x00, 0x01, 0x00, 0x06, 0x00, 0x76, 0x00, 0x01, 0x00, 0x01, 0x00, 0x4d,
- 0x00, 0x01, 0x00, 0x00, 0x00, 0x0a, 0x00, 0x90, 0x00, 0xaa, 0x00, 0x08,
- 0x44, 0x46, 0x4c, 0x54, 0x00, 0x32, 0x61, 0x72, 0x6d, 0x6e, 0x00, 0x3e,
- 0x62, 0x65, 0x6e, 0x67, 0x00, 0x48, 0x64, 0x65, 0x76, 0x61, 0x00, 0x52,
- 0x67, 0x75, 0x6a, 0x72, 0x00, 0x5c, 0x67, 0x75, 0x72, 0x75, 0x00, 0x66,
- 0x68, 0x65, 0x62, 0x72, 0x00, 0x70, 0x6c, 0x61, 0x74, 0x6e, 0x00, 0x7a,
- 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x00, 0x01, 0x00, 0x01,
- 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0x00, 0x04,
- 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00,
- 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00,
- 0xff, 0xff, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff,
- 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00,
- 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x00, 0x01, 0x00, 0x00,
- 0x00, 0x02, 0x6b, 0x65, 0x72, 0x6e, 0x00, 0x0e, 0x6b, 0x65, 0x72, 0x6e,
- 0x00, 0x14, 0x00, 0x00, 0x00, 0x01, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01,
- 0x00, 0x00, 0x00, 0x02, 0x00, 0x06, 0x00, 0x0e, 0x00, 0x02, 0x00, 0x00,
- 0x00, 0x01, 0x00, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, 0x01, 0x00, 0x8e,
- 0x00, 0x01, 0x00, 0x7a, 0x00, 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x12,
- 0x00, 0x20, 0x00, 0x46, 0x00, 0x54, 0x00, 0x03, 0xff, 0xff, 0xff, 0x33,
- 0xff, 0xff, 0xff, 0xac, 0xff, 0xff, 0xff, 0x9a, 0x00, 0x09, 0x00, 0x25,
- 0xff, 0xf2, 0x00, 0x38, 0xff, 0x5c, 0x00, 0x3a, 0xff, 0xa2, 0x00, 0x3b,
- 0xff, 0xd9, 0x00, 0x3d, 0xff, 0x44, 0x00, 0x84, 0xff, 0xf2, 0x00, 0x87,
- 0xff, 0xf2, 0x00, 0x88, 0xff, 0xf2, 0x00, 0x89, 0xff, 0xe9, 0x00, 0x03,
- 0xff, 0xff, 0xff, 0x31, 0xff, 0xff, 0xff, 0xac, 0xff, 0xff, 0xff, 0x98,
- 0x00, 0x09, 0x00, 0x25, 0xff, 0x9a, 0x00, 0x38, 0xfe, 0xfe, 0x00, 0x3a,
- 0xff, 0x42, 0x00, 0x3b, 0xff, 0x79, 0x00, 0x3d, 0xfe, 0xf0, 0x00, 0x84,
- 0xff, 0x9a, 0x00, 0x87, 0xff, 0x9a, 0x00, 0x88, 0xff, 0x9a, 0x00, 0x89,
- 0xff, 0x91, 0x00, 0x01, 0x00, 0x04, 0x00, 0x10, 0x00, 0x11, 0x00, 0x12,
- 0x00, 0x7e, 0x00, 0x01, 0x0e, 0x92, 0x00, 0x04, 0x00, 0x00, 0x00, 0x48,
- 0x00, 0x9a, 0x01, 0x34, 0x01, 0x7a, 0x01, 0xa4, 0x01, 0xda, 0x02, 0x50,
- 0x02, 0x82, 0x02, 0x94, 0x02, 0xe6, 0x03, 0x5c, 0x03, 0xae, 0x03, 0xd8,
- 0x04, 0x2e, 0x04, 0xa4, 0x04, 0xce, 0x05, 0x8c, 0x05, 0xc2, 0x06, 0x5c,
- 0x06, 0xee, 0x07, 0x18, 0x07, 0xaa, 0x07, 0xb4, 0x07, 0xca, 0x07, 0xd8,
- 0x07, 0xe2, 0x07, 0xfc, 0x08, 0x42, 0x08, 0x5c, 0x08, 0x66, 0x08, 0x70,
- 0x08, 0xae, 0x08, 0xb4, 0x08, 0xc6, 0x08, 0xe0, 0x08, 0xfe, 0x09, 0x08,
- 0x09, 0x12, 0x09, 0xc0, 0x09, 0xca, 0x0a, 0x08, 0x0a, 0x0e, 0x0a, 0x78,
- 0x0a, 0xde, 0x0a, 0xf8, 0x0b, 0x62, 0x0b, 0x90, 0x0c, 0x02, 0x0c, 0x30,
- 0x0c, 0x5e, 0x0c, 0xd0, 0x0d, 0x46, 0x0d, 0x4c, 0x0d, 0x5a, 0x0d, 0x70,
- 0x0d, 0x7e, 0x0d, 0x8c, 0x0d, 0xa6, 0x0d, 0xac, 0x0d, 0xb2, 0x0d, 0xd0,
- 0x0d, 0xd6, 0x0d, 0xf8, 0x0e, 0x06, 0x0e, 0x14, 0x0e, 0x22, 0x0e, 0x30,
- 0x0e, 0x3e, 0x0e, 0x4c, 0x0e, 0x5a, 0x0e, 0x68, 0x0e, 0x76, 0x0e, 0x7c,
- 0x00, 0x26, 0xff, 0xff, 0xff, 0xae, 0xff, 0xff, 0xff, 0x8d, 0xff, 0xff,
- 0xff, 0x7b, 0xff, 0xff, 0xff, 0xe9, 0xff, 0xff, 0xff, 0xb6, 0x00, 0x10,
- 0x00, 0x0a, 0x00, 0x11, 0xff, 0xfa, 0x00, 0x12, 0x00, 0x0a, 0x00, 0x27,
- 0xff, 0xb6, 0x00, 0x2b, 0xff, 0xb8, 0x00, 0x33, 0xff, 0xbc, 0x00, 0x35,
- 0xff, 0xbe, 0x00, 0x38, 0xff, 0x42, 0x00, 0x39, 0xff, 0xb4, 0x00, 0x3a,
- 0xff, 0x66, 0x00, 0x3b, 0xff, 0x98, 0x00, 0x3d, 0xff, 0x35, 0x00, 0x45,
- 0xff, 0xf8, 0x00, 0x46, 0x00, 0x08, 0x00, 0x47, 0xff, 0xe9, 0x00, 0x48,
- 0xff, 0xf0, 0x00, 0x49, 0xff, 0xdf, 0x00, 0x4b, 0xff, 0xec, 0x00, 0x53,
- 0xff, 0xe5, 0x00, 0x55, 0xff, 0xf0, 0x00, 0x58, 0xff, 0xdf, 0x00, 0x59,
- 0xff, 0xe7, 0x00, 0x5a, 0xff, 0xc1, 0x00, 0x5b, 0xff, 0xd5, 0x00, 0x5d,
- 0xff, 0xba, 0x00, 0x6e, 0xff, 0xa6, 0x00, 0x8a, 0xff, 0xb6, 0x00, 0x99,
- 0xff, 0xbc, 0x00, 0x9c, 0xff, 0xb4, 0x00, 0x9d, 0xff, 0xb4, 0x00, 0x9e,
- 0xff, 0xb4, 0x00, 0x9f, 0xff, 0xb4, 0x00, 0xaa, 0xff, 0xec, 0x00, 0x11,
- 0xff, 0xff, 0xff, 0xf6, 0x00, 0x25, 0xff, 0xd5, 0x00, 0x33, 0xff, 0xf2,
- 0x00, 0x3a, 0xff, 0xac, 0x00, 0x3b, 0xff, 0xcd, 0x00, 0x3d, 0xff, 0xa6,
- 0x00, 0x84, 0xff, 0xd5, 0x00, 0x85, 0xff, 0xd5, 0x00, 0x86, 0xff, 0xd5,
- 0x00, 0x87, 0xff, 0xd5, 0x00, 0x88, 0xff, 0xd5, 0x00, 0x89, 0xff, 0xd5,
- 0x00, 0x95, 0xff, 0xf2, 0x00, 0x96, 0xff, 0xf2, 0x00, 0x97, 0xff, 0xf2,
- 0x00, 0x99, 0xff, 0xf2, 0x00, 0x9b, 0xff, 0xfe, 0x00, 0x0a, 0x00, 0x25,
- 0xff, 0xbe, 0x00, 0x2c, 0xff, 0xe7, 0x00, 0x2f, 0xff, 0xec, 0x00, 0x33,
- 0xff, 0xf0, 0x00, 0x84, 0xff, 0xbe, 0x00, 0x87, 0xff, 0xbe, 0x00, 0x88,
- 0xff, 0xbe, 0x00, 0x89, 0xff, 0xbc, 0x00, 0x96, 0xff, 0xf0, 0x00, 0x99,
- 0xff, 0xf0, 0x00, 0x0d, 0x00, 0x25, 0xff, 0xaa, 0x00, 0x2e, 0xff, 0xf6,
- 0x00, 0x38, 0xff, 0xa4, 0x00, 0x3a, 0xff, 0x98, 0x00, 0x3b, 0xff, 0xc5,
- 0x00, 0x3c, 0xff, 0x93, 0x00, 0x3d, 0xff, 0x7f, 0x00, 0x83, 0xff, 0xaa,
- 0x00, 0x84, 0xff, 0xaa, 0x00, 0x85, 0xff, 0xaa, 0x00, 0x86, 0xff, 0xaa,
- 0x00, 0x87, 0xff, 0xaa, 0x00, 0x88, 0xff, 0xaa, 0x00, 0x1d, 0xff, 0xff,
- 0xff, 0xd1, 0x00, 0x10, 0xff, 0x23, 0x00, 0x11, 0xff, 0xe3, 0x00, 0x12,
- 0xff, 0x23, 0x00, 0x25, 0xff, 0x73, 0x00, 0x2e, 0xff, 0x98, 0x00, 0x33,
- 0xff, 0xd3, 0x00, 0x45, 0xff, 0xbc, 0x00, 0x49, 0xff, 0xcf, 0x00, 0x4d,
- 0xff, 0xec, 0x00, 0x4e, 0xff, 0xe7, 0x00, 0x53, 0xff, 0xd5, 0x00, 0x56,
- 0xff, 0xb8, 0x00, 0x59, 0xff, 0xbc, 0x00, 0x83, 0xff, 0x73, 0x00, 0x84,
- 0xff, 0x73, 0x00, 0x85, 0xff, 0x73, 0x00, 0x86, 0xff, 0x73, 0x00, 0x87,
- 0xff, 0x73, 0x00, 0x88, 0xff, 0x73, 0x00, 0x99, 0xff, 0xd3, 0x00, 0xa4,
- 0xff, 0xbc, 0x00, 0xa7, 0xff, 0xbc, 0x00, 0xa8, 0xff, 0xbc, 0x00, 0xa9,
- 0xff, 0xc5, 0x00, 0xac, 0xff, 0xcf, 0x00, 0xb6, 0xff, 0xd5, 0x00, 0xb9,
- 0xff, 0xd5, 0x00, 0xbb, 0xff, 0xd5, 0x00, 0x0c, 0x00, 0x25, 0xff, 0xf4,
- 0x00, 0x38, 0xff, 0xa6, 0x00, 0x3a, 0xff, 0x9a, 0x00, 0x3b, 0xff, 0xc7,
- 0x00, 0x3d, 0xff, 0x81, 0x00, 0x83, 0xff, 0xf4, 0x00, 0x84, 0xff, 0xf4,
- 0x00, 0x85, 0xff, 0xf4, 0x00, 0x86, 0xff, 0xf4, 0x00, 0x87, 0xff, 0xf4,
- 0x00, 0x88, 0xff, 0xf4, 0x00, 0x89, 0xff, 0xfa, 0x00, 0x04, 0x00, 0x25,
- 0xff, 0xbe, 0x00, 0x87, 0xff, 0xbe, 0x00, 0x88, 0xff, 0xbe, 0x00, 0x89,
- 0xff, 0xc1, 0x00, 0x14, 0xff, 0xff, 0xff, 0xa4, 0x00, 0x11, 0xff, 0xa0,
- 0x00, 0x27, 0xff, 0x98, 0x00, 0x2b, 0xff, 0x98, 0x00, 0x33, 0xff, 0x9e,
- 0x00, 0x37, 0xff, 0xb2, 0x00, 0x38, 0x00, 0x29, 0x00, 0x45, 0xff, 0xe9,
- 0x00, 0x49, 0xff, 0xbe, 0x00, 0x53, 0xff, 0xc5, 0x00, 0x59, 0xff, 0xd9,
- 0x00, 0x5d, 0xff, 0x81, 0x00, 0x96, 0xff, 0x9e, 0x00, 0x99, 0xff, 0x9e,
- 0x00, 0xa7, 0xff, 0xe9, 0x00, 0xa8, 0xff, 0xe9, 0x00, 0xa9, 0xff, 0xf2,
- 0x00, 0xb6, 0xff, 0xc5, 0x00, 0xb9, 0xff, 0xc5, 0x00, 0xbf, 0xff, 0xd9,
- 0x00, 0x1d, 0xff, 0xff, 0xfe, 0xdf, 0xff, 0xff, 0xfe, 0xcf, 0xff, 0xff,
- 0xff, 0xd9, 0xff, 0xff, 0xff, 0xac, 0x00, 0x11, 0xff, 0x00, 0x00, 0x25,
- 0x00, 0x23, 0x00, 0x27, 0xff, 0xac, 0x00, 0x2b, 0xff, 0xaa, 0x00, 0x33,
- 0xff, 0xac, 0x00, 0x37, 0xff, 0xd9, 0x00, 0x38, 0xff, 0x29, 0x00, 0x39,
- 0xff, 0xb8, 0x00, 0x3a, 0xff, 0x29, 0x00, 0x3b, 0xff, 0x75, 0x00, 0x3d,
- 0xff, 0x08, 0x00, 0x59, 0xff, 0xf2, 0x00, 0x5d, 0xff, 0x8d, 0x00, 0x84,
- 0x00, 0x23, 0x00, 0x87, 0x00, 0x23, 0x00, 0x88, 0x00, 0x23, 0x00, 0x89,
- 0x00, 0x29, 0x00, 0x8a, 0xff, 0xb4, 0x00, 0x95, 0xff, 0xac, 0x00, 0x96,
- 0xff, 0xac, 0x00, 0x97, 0xff, 0xac, 0x00, 0x98, 0xff, 0xac, 0x00, 0x99,
- 0xff, 0xac, 0x00, 0x9f, 0xff, 0xb8, 0x00, 0xbf, 0xff, 0xf2, 0x00, 0x14,
- 0xff, 0xff, 0xff, 0xfa, 0x00, 0x10, 0xff, 0xf2, 0x00, 0x12, 0xff, 0xf2,
- 0x00, 0x25, 0xff, 0xee, 0x00, 0x27, 0xff, 0xfa, 0x00, 0x2b, 0xff, 0xfc,
- 0x00, 0x45, 0xff, 0xf6, 0x00, 0x53, 0x00, 0x04, 0x00, 0x84, 0xff, 0xee,
- 0x00, 0x87, 0xff, 0xee, 0x00, 0x88, 0xff, 0xee, 0x00, 0x89, 0xff, 0xf4,
- 0x00, 0x8a, 0xff, 0xfa, 0x00, 0xa4, 0xff, 0xf6, 0x00, 0xa7, 0xff, 0xf6,
- 0x00, 0xa8, 0xff, 0xf6, 0x00, 0xa9, 0xff, 0xfc, 0x00, 0xb6, 0x00, 0x04,
- 0x00, 0xb9, 0x00, 0x04, 0x00, 0xbb, 0x00, 0x08, 0x00, 0x0a, 0x00, 0x25,
- 0xff, 0xb8, 0x00, 0x38, 0xff, 0xaa, 0x00, 0x3a, 0xff, 0xa4, 0x00, 0x3b,
- 0xff, 0xd1, 0x00, 0x3c, 0xff, 0xa2, 0x00, 0x3d, 0xff, 0x87, 0x00, 0x84,
- 0xff, 0xb8, 0x00, 0x87, 0xff, 0xb8, 0x00, 0x88, 0xff, 0xb8, 0x00, 0x89,
- 0xff, 0xb0, 0x00, 0x15, 0xff, 0xff, 0xff, 0xc7, 0x00, 0x10, 0xfe, 0xec,
- 0x00, 0x11, 0xff, 0xae, 0x00, 0x12, 0xfe, 0xec, 0x00, 0x25, 0xff, 0x60,
- 0x00, 0x2e, 0xff, 0x60, 0x00, 0x45, 0xff, 0xc7, 0x00, 0x49, 0xff, 0xc1,
- 0x00, 0x53, 0xff, 0xc9, 0x00, 0x84, 0xff, 0x60, 0x00, 0x87, 0xff, 0x60,
- 0x00, 0x88, 0xff, 0x60, 0x00, 0x89, 0xff, 0x50, 0x00, 0xa4, 0xff, 0xc7,
- 0x00, 0xa7, 0xff, 0xc7, 0x00, 0xa8, 0xff, 0xc7, 0x00, 0xa9, 0xff, 0xcf,
- 0x00, 0xac, 0xff, 0xc1, 0x00, 0xb6, 0xff, 0xc9, 0x00, 0xb9, 0xff, 0xc9,
- 0x00, 0xbb, 0xff, 0xc9, 0x00, 0x1d, 0xff, 0xff, 0xff, 0xe9, 0xff, 0xff,
- 0xff, 0xe9, 0x00, 0x11, 0xff, 0xfc, 0x00, 0x27, 0xff, 0xdf, 0x00, 0x2b,
- 0xff, 0xe1, 0x00, 0x33, 0xff, 0xe5, 0x00, 0x38, 0xff, 0xd1, 0x00, 0x39,
- 0xff, 0xdd, 0x00, 0x3a, 0xff, 0xb0, 0x00, 0x3b, 0xff, 0xc9, 0x00, 0x3d,
- 0xff, 0xa8, 0x00, 0x45, 0xff, 0xe1, 0x00, 0x49, 0xff, 0xe7, 0x00, 0x53,
- 0xff, 0xee, 0x00, 0x59, 0xff, 0xee, 0x00, 0x5d, 0xff, 0xf0, 0x00, 0x8a,
- 0xff, 0xdf, 0x00, 0x96, 0xff, 0xe5, 0x00, 0x99, 0xff, 0xe5, 0x00, 0x9f,
- 0xff, 0xdd, 0x00, 0xa4, 0xff, 0xe1, 0x00, 0xa7, 0xff, 0xe1, 0x00, 0xa8,
- 0xff, 0xe1, 0x00, 0xa9, 0xff, 0xe7, 0x00, 0xac, 0xff, 0xe7, 0x00, 0xb6,
- 0xff, 0xee, 0x00, 0xb9, 0xff, 0xee, 0x00, 0xbd, 0xff, 0xee, 0x00, 0xbf,
- 0xff, 0xee, 0x00, 0x0a, 0x00, 0x25, 0xff, 0xd3, 0x00, 0x38, 0xff, 0xc7,
- 0x00, 0x3a, 0xff, 0xaa, 0x00, 0x3b, 0xff, 0xc7, 0x00, 0x3d, 0xff, 0x9e,
- 0x00, 0x58, 0xff, 0xfa, 0x00, 0x84, 0xff, 0xd3, 0x00, 0x87, 0xff, 0xd3,
- 0x00, 0x88, 0xff, 0xd3, 0x00, 0x89, 0xff, 0xd3, 0x00, 0x2f, 0xff, 0xff,
- 0xff, 0x10, 0xff, 0xff, 0xff, 0x85, 0xff, 0xff, 0xff, 0xcf, 0xff, 0xff,
- 0xff, 0xb8, 0x00, 0x10, 0xff, 0x33, 0x00, 0x11, 0xff, 0x62, 0x00, 0x12,
- 0xff, 0x33, 0x00, 0x1e, 0xfe, 0xf0, 0x00, 0x1f, 0xfe, 0xf8, 0x00, 0x25,
- 0xff, 0x3d, 0x00, 0x27, 0xff, 0xa6, 0x00, 0x2b, 0xff, 0xa4, 0x00, 0x2e,
- 0xff, 0x33, 0x00, 0x33, 0xff, 0xaa, 0x00, 0x37, 0xff, 0xcf, 0x00, 0x3a,
- 0x00, 0x19, 0x00, 0x3b, 0x00, 0x21, 0x00, 0x3d, 0x00, 0x29, 0x00, 0x45,
- 0xff, 0x33, 0x00, 0x47, 0xff, 0x48, 0x00, 0x49, 0xff, 0x3d, 0x00, 0x4b,
- 0xff, 0x4a, 0x00, 0x4d, 0xff, 0xfa, 0x00, 0x4e, 0xff, 0xf6, 0x00, 0x53,
- 0xff, 0x44, 0x00, 0x56, 0xff, 0x44, 0x00, 0x57, 0xff, 0x44, 0x00, 0x59,
- 0xff, 0x46, 0x00, 0x5a, 0xff, 0x3d, 0x00, 0x5b, 0xff, 0x42, 0x00, 0x5d,
- 0xff, 0x33, 0x00, 0x6e, 0xff, 0x08, 0x00, 0x83, 0xff, 0x3d, 0x00, 0x84,
- 0xff, 0x3d, 0x00, 0x85, 0xff, 0x3d, 0x00, 0x86, 0xff, 0x3d, 0x00, 0x87,
- 0xff, 0x3d, 0x00, 0x88, 0xff, 0x3d, 0x00, 0x89, 0xff, 0x39, 0x00, 0x95,
- 0xff, 0xaa, 0x00, 0x96, 0xff, 0xaa, 0x00, 0x97, 0xff, 0xaa, 0x00, 0x98,
- 0xff, 0xaa, 0x00, 0x99, 0xff, 0xaa, 0x00, 0x9b, 0xff, 0xac, 0x00, 0xa9,
- 0xff, 0x39, 0x00, 0xbb, 0xff, 0x4e, 0x00, 0x0d, 0x00, 0x10, 0xff, 0xc9,
- 0x00, 0x12, 0xff, 0xcd, 0x00, 0x25, 0xff, 0xb6, 0x00, 0x51, 0xff, 0xf8,
- 0x00, 0x52, 0xff, 0xf8, 0x00, 0x54, 0x00, 0x06, 0x00, 0x56, 0xff, 0xf8,
- 0x00, 0x84, 0xff, 0xb6, 0x00, 0x85, 0xff, 0xb6, 0x00, 0x86, 0xff, 0xb6,
- 0x00, 0x87, 0xff, 0xb6, 0x00, 0x88, 0xff, 0xb6, 0x00, 0x89, 0xff, 0xb0,
- 0x00, 0x26, 0xff, 0xff, 0xff, 0x5c, 0xff, 0xff, 0xff, 0xb8, 0xff, 0xff,
- 0xff, 0xa8, 0x00, 0x10, 0xff, 0x4a, 0x00, 0x11, 0xff, 0xb2, 0x00, 0x12,
- 0xff, 0x4a, 0x00, 0x1e, 0xff, 0x79, 0x00, 0x1f, 0xff, 0x79, 0x00, 0x25,
- 0xff, 0x6f, 0x00, 0x27, 0xff, 0xa8, 0x00, 0x2b, 0xff, 0xaa, 0x00, 0x33,
- 0xff, 0xae, 0x00, 0x37, 0xff, 0xb8, 0x00, 0x38, 0x00, 0x1f, 0x00, 0x45,
- 0xff, 0x87, 0x00, 0x49, 0xff, 0x8b, 0x00, 0x4b, 0xff, 0x9a, 0x00, 0x4d,
- 0xff, 0xf6, 0x00, 0x53, 0xff, 0x91, 0x00, 0x56, 0xff, 0xaa, 0x00, 0x59,
- 0xff, 0xac, 0x00, 0x5d, 0xff, 0xd7, 0x00, 0x6e, 0xff, 0x56, 0x00, 0x83,
- 0xff, 0x6f, 0x00, 0x84, 0xff, 0x6f, 0x00, 0x85, 0xff, 0x6f, 0x00, 0x86,
- 0xff, 0x6f, 0x00, 0x87, 0xff, 0x6f, 0x00, 0x88, 0xff, 0x6f, 0x00, 0x89,
- 0xff, 0x60, 0x00, 0x95, 0xff, 0xae, 0x00, 0x96, 0xff, 0xae, 0x00, 0x97,
- 0xff, 0xae, 0x00, 0x98, 0xff, 0xae, 0x00, 0x99, 0xff, 0xae, 0x00, 0x9b,
- 0xff, 0xbc, 0x00, 0xa9, 0xff, 0x8f, 0x00, 0xbb, 0xff, 0x9a, 0x00, 0x24,
- 0xff, 0xff, 0xff, 0x91, 0x00, 0x10, 0xff, 0x8d, 0x00, 0x11, 0xff, 0xe5,
- 0x00, 0x12, 0xff, 0x8d, 0x00, 0x1e, 0xff, 0x96, 0x00, 0x1f, 0xff, 0x93,
- 0x00, 0x25, 0xff, 0x9a, 0x00, 0x27, 0xff, 0xd1, 0x00, 0x2b, 0xff, 0xd3,
- 0x00, 0x33, 0xff, 0xd7, 0x00, 0x37, 0xff, 0xcf, 0x00, 0x38, 0x00, 0x27,
- 0x00, 0x45, 0xff, 0xb2, 0x00, 0x49, 0xff, 0xbe, 0x00, 0x4b, 0xff, 0xcd,
- 0x00, 0x4d, 0xff, 0xfe, 0x00, 0x53, 0xff, 0xc5, 0x00, 0x56, 0xff, 0xc7,
- 0x00, 0x59, 0xff, 0xc7, 0x00, 0x5d, 0xff, 0xf4, 0x00, 0x6e, 0xff, 0x89,
- 0x00, 0x83, 0xff, 0x9a, 0x00, 0x84, 0xff, 0x9a, 0x00, 0x85, 0xff, 0x9a,
- 0x00, 0x86, 0xff, 0x9a, 0x00, 0x87, 0xff, 0x9a, 0x00, 0x88, 0xff, 0x9a,
- 0x00, 0x89, 0xff, 0x8d, 0x00, 0x95, 0xff, 0xd7, 0x00, 0x96, 0xff, 0xd7,
- 0x00, 0x97, 0xff, 0xd7, 0x00, 0x98, 0xff, 0xd7, 0x00, 0x99, 0xff, 0xd7,
- 0x00, 0x9b, 0xff, 0xe5, 0x00, 0xa9, 0xff, 0xba, 0x00, 0xbb, 0xff, 0xcd,
- 0x00, 0x0a, 0x00, 0x11, 0xff, 0x98, 0x00, 0x27, 0xff, 0x9e, 0x00, 0x33,
- 0xff, 0xa4, 0x00, 0x35, 0xff, 0xa6, 0x00, 0x45, 0xff, 0xe1, 0x00, 0x49,
- 0xff, 0xb6, 0x00, 0x53, 0xff, 0xbc, 0x00, 0x59, 0xff, 0xcf, 0x00, 0x5d,
- 0xff, 0x83, 0x00, 0x99, 0xff, 0xa4, 0x00, 0x24, 0xff, 0xff, 0xff, 0x0c,
- 0x00, 0x10, 0xff, 0x1d, 0x00, 0x11, 0xff, 0x54, 0x00, 0x12, 0xff, 0x1d,
- 0x00, 0x1e, 0xff, 0x4e, 0x00, 0x1f, 0xff, 0x4c, 0x00, 0x25, 0xff, 0x3b,
- 0x00, 0x27, 0xff, 0x89, 0x00, 0x2b, 0xff, 0x89, 0x00, 0x33, 0xff, 0x8d,
- 0x00, 0x37, 0xff, 0xac, 0x00, 0x38, 0x00, 0x2f, 0x00, 0x45, 0xff, 0x4c,
- 0x00, 0x49, 0xff, 0x4a, 0x00, 0x4b, 0xff, 0x56, 0x00, 0x4d, 0x00, 0x06,
- 0x00, 0x53, 0xff, 0x50, 0x00, 0x54, 0xff, 0x91, 0x00, 0x59, 0xff, 0x7f,
- 0x00, 0x5a, 0xff, 0xb6, 0x00, 0x6e, 0xff, 0x04, 0x00, 0x83, 0xff, 0x3b,
- 0x00, 0x84, 0xff, 0x3b, 0x00, 0x85, 0xff, 0x3b, 0x00, 0x86, 0xff, 0x3b,
- 0x00, 0x87, 0xff, 0x3b, 0x00, 0x88, 0xff, 0x3b, 0x00, 0x89, 0xff, 0x2d,
- 0x00, 0x95, 0xff, 0x8d, 0x00, 0x96, 0xff, 0x8d, 0x00, 0x97, 0xff, 0x8d,
- 0x00, 0x98, 0xff, 0x8d, 0x00, 0x99, 0xff, 0x8d, 0x00, 0x9b, 0xff, 0x91,
- 0x00, 0xa9, 0xff, 0x54, 0x00, 0xbb, 0xff, 0x58, 0x00, 0x02, 0x00, 0x5a,
- 0xff, 0xbc, 0x00, 0x5d, 0xff, 0xb2, 0x00, 0x05, 0xff, 0xff, 0xff, 0xd1,
- 0x00, 0x4e, 0xff, 0xf8, 0x00, 0x5a, 0xff, 0xd5, 0x00, 0x5b, 0xff, 0xe5,
- 0x00, 0x5d, 0xff, 0xcb, 0x00, 0x03, 0x00, 0x5a, 0xff, 0xe9, 0x00, 0x5b,
- 0xff, 0xfa, 0x00, 0x5d, 0xff, 0xe1, 0x00, 0x02, 0x00, 0x4c, 0x00, 0x02,
- 0x00, 0x4f, 0x00, 0x0e, 0x00, 0x06, 0xff, 0xff, 0xff, 0xdb, 0x00, 0x58,
- 0xff, 0xec, 0x00, 0x5a, 0xff, 0xe1, 0x00, 0x5b, 0xff, 0xee, 0x00, 0x5c,
- 0xff, 0xc9, 0x00, 0x5d, 0xff, 0xd9, 0x00, 0x11, 0xff, 0xff, 0xff, 0xe7,
- 0x00, 0x45, 0xff, 0xee, 0x00, 0x49, 0xff, 0xe1, 0x00, 0x4a, 0x00, 0x2d,
- 0x00, 0x4d, 0xff, 0xfc, 0x00, 0x4e, 0xff, 0xf8, 0x00, 0x50, 0xff, 0xfa,
- 0x00, 0x53, 0xff, 0xec, 0x00, 0x58, 0x00, 0x31, 0x00, 0xa4, 0xff, 0xee,
- 0x00, 0xa7, 0xff, 0xee, 0x00, 0xa8, 0xff, 0xee, 0x00, 0xa9, 0xff, 0xf6,
- 0x00, 0xac, 0xff, 0xe1, 0x00, 0xb6, 0xff, 0xec, 0x00, 0xb9, 0xff, 0xec,
- 0x00, 0xbb, 0xff, 0xee, 0x00, 0x06, 0x00, 0x45, 0xff, 0xf6, 0x00, 0xa7,
- 0xff, 0xf6, 0x00, 0xa8, 0xff, 0xf6, 0x00, 0xa9, 0xff, 0xfe, 0x00, 0xb6,
- 0x00, 0x06, 0x00, 0xb9, 0x00, 0x06, 0x00, 0x02, 0xff, 0xff, 0xff, 0xe1,
- 0x00, 0x5d, 0xff, 0xdb, 0x00, 0x02, 0x00, 0x38, 0xff, 0xf2, 0x00, 0x4e,
- 0xff, 0xfa, 0x00, 0x0f, 0x00, 0x11, 0xff, 0xac, 0x00, 0x45, 0xff, 0xfc,
- 0x00, 0x49, 0xff, 0xd5, 0x00, 0x4b, 0xff, 0xdf, 0x00, 0x53, 0xff, 0xd9,
- 0x00, 0x57, 0xff, 0xfa, 0x00, 0x59, 0xff, 0xe9, 0x00, 0xa4, 0xff, 0xfc,
- 0x00, 0xa7, 0xff, 0xfc, 0x00, 0xa8, 0xff, 0xfc, 0x00, 0xa9, 0x00, 0x04,
- 0x00, 0xac, 0xff, 0xd5, 0x00, 0xb6, 0xff, 0xd9, 0x00, 0xb9, 0xff, 0xd9,
- 0x00, 0xbf, 0xff, 0xf4, 0x00, 0x01, 0x00, 0x5d, 0xff, 0xf6, 0x00, 0x04,
- 0x00, 0x54, 0x00, 0x0a, 0x00, 0x5a, 0xff, 0xe5, 0x00, 0x5b, 0xff, 0xf2,
- 0x00, 0x5d, 0xff, 0xdb, 0x00, 0x06, 0xff, 0xff, 0xff, 0xe3, 0x00, 0x38,
- 0xff, 0x3b, 0x00, 0x54, 0x00, 0x0a, 0x00, 0x5a, 0xff, 0xe5, 0x00, 0x5b,
- 0xff, 0xf2, 0x00, 0x5d, 0xff, 0xdb, 0x00, 0x07, 0xff, 0xff, 0xff, 0xd5,
- 0x00, 0x38, 0xff, 0x35, 0x00, 0x58, 0xff, 0xec, 0x00, 0x5a, 0xff, 0xdb,
- 0x00, 0x5b, 0xff, 0xec, 0x00, 0x5c, 0xff, 0xc9, 0x00, 0x5d, 0xff, 0xd3,
- 0x00, 0x02, 0x00, 0x58, 0xff, 0xf8, 0x00, 0x5d, 0xff, 0xdf, 0x00, 0x02,
- 0x00, 0x47, 0x00, 0x10, 0x00, 0x59, 0x00, 0x08, 0x00, 0x2b, 0xff, 0xff,
- 0x00, 0x02, 0xff, 0xff, 0xff, 0xf0, 0xff, 0xff, 0xff, 0xf4, 0x00, 0x10,
- 0xff, 0x73, 0x00, 0x11, 0xff, 0xa0, 0x00, 0x12, 0xff, 0x73, 0x00, 0x1e,
- 0xff, 0xd3, 0x00, 0x1f, 0xff, 0xd3, 0x00, 0x45, 0xff, 0xf6, 0x00, 0x47,
- 0xff, 0xf4, 0x00, 0x48, 0xff, 0xfe, 0x00, 0x49, 0xff, 0xe9, 0x00, 0x4a,
- 0x00, 0x35, 0x00, 0x4b, 0xff, 0xf8, 0x00, 0x4d, 0x00, 0x02, 0x00, 0x4f,
- 0x00, 0x0c, 0x00, 0x50, 0x00, 0x02, 0x00, 0x53, 0xff, 0xf4, 0x00, 0x54,
- 0x00, 0x10, 0x00, 0x55, 0xff, 0xfa, 0x00, 0x57, 0x00, 0x08, 0x00, 0x58,
- 0x00, 0x39, 0x00, 0x59, 0x00, 0x04, 0x00, 0x5a, 0x00, 0x3b, 0x00, 0x5b,
- 0x00, 0x3f, 0x00, 0x5c, 0x00, 0x29, 0x00, 0x5d, 0x00, 0x31, 0x00, 0x5e,
- 0x00, 0x12, 0x00, 0xa3, 0xff, 0xf6, 0x00, 0xa4, 0xff, 0xf6, 0x00, 0xa5,
- 0xff, 0xf6, 0x00, 0xa7, 0xff, 0xf6, 0x00, 0xa8, 0xff, 0xf6, 0x00, 0xa9,
- 0xff, 0xfe, 0x00, 0xaa, 0xff, 0xee, 0x00, 0xab, 0xff, 0xe9, 0x00, 0xac,
- 0xff, 0xe9, 0x00, 0xad, 0xff, 0xe9, 0x00, 0xb5, 0xff, 0xf4, 0x00, 0xb6,
- 0xff, 0xf4, 0x00, 0xb7, 0xff, 0xf4, 0x00, 0xb9, 0xff, 0xf4, 0x00, 0xbb,
- 0xff, 0xf4, 0x00, 0x02, 0xff, 0xff, 0xff, 0xd3, 0x00, 0x58, 0xff, 0xfa,
- 0x00, 0x0f, 0xff, 0xff, 0xff, 0xfe, 0x00, 0x1e, 0xff, 0xc7, 0x00, 0x1f,
- 0xff, 0xc7, 0x00, 0x37, 0xff, 0xf0, 0x00, 0x45, 0xff, 0xfe, 0x00, 0x49,
- 0xff, 0xe3, 0x00, 0x4c, 0xff, 0xfa, 0x00, 0x53, 0xff, 0xe7, 0x00, 0xa4,
- 0xff, 0xfe, 0x00, 0xa7, 0xff, 0xfe, 0x00, 0xa8, 0xff, 0xfe, 0x00, 0xa9,
- 0x00, 0x04, 0x00, 0xac, 0xff, 0xe3, 0x00, 0xb6, 0xff, 0xe7, 0x00, 0xb9,
- 0xff, 0xe7, 0x00, 0x01, 0xff, 0xff, 0xff, 0xf0, 0x00, 0x1a, 0xff, 0xff,
- 0xff, 0xdf, 0x00, 0x10, 0xff, 0x73, 0x00, 0x11, 0xff, 0xe7, 0x00, 0x12,
- 0xff, 0x73, 0x00, 0x1e, 0xff, 0xd1, 0x00, 0x1f, 0xff, 0xd1, 0x00, 0x45,
- 0xff, 0xdb, 0x00, 0x47, 0xff, 0xdf, 0x00, 0x49, 0xff, 0xd5, 0x00, 0x4b,
- 0xff, 0xe3, 0x00, 0x53, 0xff, 0xdd, 0x00, 0x57, 0xff, 0xee, 0x00, 0xa3,
- 0xff, 0xdb, 0x00, 0xa4, 0xff, 0xdb, 0x00, 0xa5, 0xff, 0xdb, 0x00, 0xa6,
- 0xff, 0xdb, 0x00, 0xa7, 0xff, 0xdb, 0x00, 0xa8, 0xff, 0xdb, 0x00, 0xa9,
- 0xff, 0xe3, 0x00, 0xab, 0xff, 0xd5, 0x00, 0xac, 0xff, 0xd5, 0x00, 0xad,
- 0xff, 0xd5, 0x00, 0xb5, 0xff, 0xdd, 0x00, 0xb6, 0xff, 0xdd, 0x00, 0xb9,
- 0xff, 0xdd, 0x00, 0xbb, 0xff, 0xdd, 0x00, 0x19, 0x00, 0x10, 0xff, 0x9a,
- 0x00, 0x11, 0xff, 0xfe, 0x00, 0x12, 0xff, 0x9a, 0x00, 0x1e, 0xff, 0xd1,
- 0x00, 0x1f, 0xff, 0xd1, 0x00, 0x45, 0xff, 0xe1, 0x00, 0x47, 0xff, 0xf2,
- 0x00, 0x49, 0xff, 0xe7, 0x00, 0x4b, 0xff, 0xf4, 0x00, 0x53, 0xff, 0xee,
- 0x00, 0x57, 0xff, 0xf6, 0x00, 0xa3, 0xff, 0xe1, 0x00, 0xa4, 0xff, 0xe1,
- 0x00, 0xa5, 0xff, 0xe1, 0x00, 0xa6, 0xff, 0xe1, 0x00, 0xa7, 0xff, 0xe1,
- 0x00, 0xa8, 0xff, 0xe1, 0x00, 0xa9, 0xff, 0xe9, 0x00, 0xab, 0xff, 0xe7,
- 0x00, 0xac, 0xff, 0xe7, 0x00, 0xad, 0xff, 0xe7, 0x00, 0xb5, 0xff, 0xee,
- 0x00, 0xb6, 0xff, 0xee, 0x00, 0xb9, 0xff, 0xee, 0x00, 0xbb, 0xff, 0xf4,
- 0x00, 0x06, 0x00, 0x45, 0xff, 0xdd, 0x00, 0x47, 0xff, 0xd1, 0x00, 0x49,
- 0xff, 0xc7, 0x00, 0x53, 0xff, 0xcd, 0x00, 0x55, 0xff, 0xd7, 0x00, 0xac,
- 0xff, 0xc7, 0x00, 0x1a, 0x00, 0x10, 0xff, 0x71, 0x00, 0x11, 0xff, 0xe3,
- 0x00, 0x12, 0xff, 0x71, 0x00, 0x1e, 0xff, 0xc9, 0x00, 0x1f, 0xff, 0xc9,
- 0x00, 0x45, 0xff, 0xd3, 0x00, 0x47, 0xff, 0xd9, 0x00, 0x49, 0xff, 0xcf,
- 0x00, 0x4b, 0xff, 0xdd, 0x00, 0x50, 0xff, 0xf8, 0x00, 0x53, 0xff, 0xd7,
- 0x00, 0x57, 0xff, 0xe7, 0x00, 0xa3, 0xff, 0xd3, 0x00, 0xa4, 0xff, 0xd3,
- 0x00, 0xa5, 0xff, 0xd3, 0x00, 0xa6, 0xff, 0xd3, 0x00, 0xa7, 0xff, 0xd3,
- 0x00, 0xa8, 0xff, 0xd3, 0x00, 0xa9, 0xff, 0xdb, 0x00, 0xab, 0xff, 0xcf,
- 0x00, 0xac, 0xff, 0xcf, 0x00, 0xad, 0xff, 0xcf, 0x00, 0xb5, 0xff, 0xd7,
- 0x00, 0xb6, 0xff, 0xd7, 0x00, 0xb9, 0xff, 0xd7, 0x00, 0xbb, 0xff, 0xd9,
- 0x00, 0x0b, 0x00, 0x10, 0x00, 0x0a, 0x00, 0x12, 0x00, 0x0a, 0x00, 0x27,
- 0xff, 0xb6, 0x00, 0x2b, 0xff, 0xb8, 0x00, 0x33, 0xff, 0xbc, 0x00, 0x35,
- 0xff, 0xbe, 0x00, 0x38, 0xff, 0x42, 0x00, 0x39, 0xff, 0xb4, 0x00, 0x3a,
- 0xff, 0x66, 0x00, 0x3b, 0xff, 0x98, 0x00, 0x3d, 0xff, 0x35, 0x00, 0x1c,
- 0xff, 0xff, 0xff, 0xae, 0xff, 0xff, 0xff, 0x7b, 0x00, 0x10, 0x00, 0x0a,
- 0x00, 0x11, 0xff, 0xfa, 0x00, 0x12, 0x00, 0x0a, 0x00, 0x27, 0xff, 0xb6,
- 0x00, 0x2b, 0xff, 0xb8, 0x00, 0x33, 0xff, 0xbc, 0x00, 0x35, 0xff, 0xbe,
- 0x00, 0x38, 0xff, 0x42, 0x00, 0x39, 0xff, 0xb4, 0x00, 0x3a, 0xff, 0x66,
- 0x00, 0x3b, 0xff, 0x98, 0x00, 0x3d, 0xff, 0x35, 0x00, 0x45, 0xff, 0xf8,
- 0x00, 0x46, 0x00, 0x08, 0x00, 0x47, 0xff, 0xe9, 0x00, 0x48, 0xff, 0xf0,
- 0x00, 0x49, 0xff, 0xdf, 0x00, 0x4b, 0xff, 0xec, 0x00, 0x53, 0xff, 0xe5,
- 0x00, 0x55, 0xff, 0xf0, 0x00, 0x58, 0xff, 0xdf, 0x00, 0x59, 0xff, 0xe7,
- 0x00, 0x5a, 0xff, 0xc1, 0x00, 0x5b, 0xff, 0xd5, 0x00, 0x5d, 0xff, 0xba,
- 0x00, 0x6e, 0xff, 0xa6, 0x00, 0x0b, 0x00, 0x10, 0x00, 0x0a, 0x00, 0x12,
- 0x00, 0x0a, 0x00, 0x27, 0xff, 0xb6, 0x00, 0x2b, 0xff, 0xb8, 0x00, 0x33,
- 0xff, 0xbc, 0x00, 0x35, 0xff, 0xbe, 0x00, 0x38, 0xff, 0x42, 0x00, 0x39,
- 0xff, 0xb4, 0x00, 0x3a, 0xff, 0x66, 0x00, 0x3b, 0xff, 0x98, 0x00, 0x3d,
- 0xff, 0x35, 0x00, 0x0b, 0x00, 0x10, 0x00, 0x0a, 0x00, 0x12, 0x00, 0x0a,
- 0x00, 0x27, 0xff, 0xb6, 0x00, 0x2b, 0xff, 0xb8, 0x00, 0x33, 0xff, 0xbc,
- 0x00, 0x35, 0xff, 0xbe, 0x00, 0x38, 0xff, 0x42, 0x00, 0x39, 0xff, 0xb4,
- 0x00, 0x3a, 0xff, 0x66, 0x00, 0x3b, 0xff, 0x98, 0x00, 0x3d, 0xff, 0x35,
- 0x00, 0x1c, 0xff, 0xff, 0xff, 0xae, 0xff, 0xff, 0xff, 0x8d, 0xff, 0xff,
- 0xff, 0x7b, 0x00, 0x10, 0x00, 0x0a, 0x00, 0x11, 0xff, 0xfa, 0x00, 0x12,
- 0x00, 0x0a, 0x00, 0x27, 0xff, 0xb6, 0x00, 0x2b, 0xff, 0xb8, 0x00, 0x33,
- 0xff, 0xbc, 0x00, 0x35, 0xff, 0xbe, 0x00, 0x38, 0xff, 0x42, 0x00, 0x39,
- 0xff, 0xb4, 0x00, 0x3a, 0xff, 0x66, 0x00, 0x3b, 0xff, 0x98, 0x00, 0x3d,
- 0xff, 0x35, 0x00, 0x45, 0xff, 0xf8, 0x00, 0x46, 0x00, 0x08, 0x00, 0x47,
- 0xff, 0xe9, 0x00, 0x48, 0xff, 0xf0, 0x00, 0x4b, 0xff, 0xec, 0x00, 0x53,
- 0xff, 0xe5, 0x00, 0x55, 0xff, 0xf0, 0x00, 0x58, 0xff, 0xdf, 0x00, 0x59,
- 0xff, 0xe7, 0x00, 0x5a, 0xff, 0xc1, 0x00, 0x5b, 0xff, 0xd5, 0x00, 0x5d,
- 0xff, 0xba, 0x00, 0x6e, 0xff, 0xa6, 0x00, 0x1d, 0xff, 0xff, 0xff, 0xae,
- 0xff, 0xff, 0xff, 0x8d, 0xff, 0xff, 0xff, 0x7b, 0x00, 0x10, 0x00, 0x0a,
- 0x00, 0x11, 0xff, 0xfa, 0x00, 0x12, 0x00, 0x0a, 0x00, 0x27, 0xff, 0xb6,
- 0x00, 0x2b, 0xff, 0xb8, 0x00, 0x33, 0xff, 0xbc, 0x00, 0x35, 0xff, 0xbe,
- 0x00, 0x38, 0xff, 0x42, 0x00, 0x39, 0xff, 0xb4, 0x00, 0x3a, 0xff, 0x66,
- 0x00, 0x3b, 0xff, 0x98, 0x00, 0x3d, 0xff, 0x35, 0x00, 0x45, 0xff, 0xf8,
- 0x00, 0x46, 0x00, 0x08, 0x00, 0x47, 0xff, 0xe9, 0x00, 0x48, 0xff, 0xf0,
- 0x00, 0x49, 0xff, 0xdf, 0x00, 0x4b, 0xff, 0xec, 0x00, 0x53, 0xff, 0xe5,
- 0x00, 0x55, 0xff, 0xf0, 0x00, 0x58, 0xff, 0xdf, 0x00, 0x59, 0xff, 0xe7,
- 0x00, 0x5a, 0xff, 0xc1, 0x00, 0x5b, 0xff, 0xd5, 0x00, 0x5d, 0xff, 0xba,
- 0x00, 0x6e, 0xff, 0xa6, 0x00, 0x01, 0x00, 0x25, 0xff, 0xc1, 0x00, 0x03,
- 0x00, 0x38, 0xff, 0xaa, 0x00, 0x3a, 0xff, 0xa4, 0x00, 0x3d, 0xff, 0x87,
- 0x00, 0x05, 0x00, 0x25, 0xff, 0xb8, 0x00, 0x38, 0xff, 0xaa, 0x00, 0x3a,
- 0xff, 0xa4, 0x00, 0x3b, 0xff, 0xd1, 0x00, 0x3d, 0xff, 0x87, 0x00, 0x03,
- 0x00, 0x38, 0xff, 0xaa, 0x00, 0x3a, 0xff, 0xa4, 0x00, 0x3d, 0xff, 0x87,
- 0x00, 0x03, 0x00, 0x38, 0xff, 0xaa, 0x00, 0x3a, 0xff, 0xa4, 0x00, 0x3d,
- 0xff, 0x87, 0x00, 0x06, 0x00, 0x25, 0xff, 0xb8, 0x00, 0x38, 0xff, 0xaa,
- 0x00, 0x3a, 0xff, 0xa4, 0x00, 0x3b, 0xff, 0xd1, 0x00, 0x3c, 0xff, 0xa2,
- 0x00, 0x3d, 0xff, 0x87, 0x00, 0x01, 0x00, 0x25, 0xff, 0xbc, 0x00, 0x01,
- 0x00, 0x25, 0xff, 0xb6, 0x00, 0x07, 0x00, 0x10, 0xff, 0xc9, 0x00, 0x12,
- 0xff, 0xcd, 0x00, 0x25, 0xff, 0xb6, 0x00, 0x51, 0xff, 0xf8, 0x00, 0x52,
- 0xff, 0xf8, 0x00, 0x54, 0x00, 0x06, 0x00, 0x56, 0xff, 0xf8, 0x00, 0x01,
- 0x00, 0x25, 0xff, 0xb6, 0x00, 0x08, 0x00, 0x10, 0xff, 0xc9, 0x00, 0x12,
- 0xff, 0xcd, 0x00, 0x25, 0xff, 0xb6, 0x00, 0x46, 0x00, 0x06, 0x00, 0x51,
- 0xff, 0xf8, 0x00, 0x52, 0xff, 0xf8, 0x00, 0x54, 0x00, 0x06, 0x00, 0x56,
- 0xff, 0xf8, 0x00, 0x03, 0x00, 0x5a, 0xff, 0xd5, 0x00, 0x5b, 0xff, 0xe5,
- 0x00, 0x5d, 0xff, 0xcb, 0x00, 0x03, 0x00, 0x5a, 0xff, 0xd5, 0x00, 0x5b,
- 0xff, 0xe5, 0x00, 0x5d, 0xff, 0xcb, 0x00, 0x03, 0x00, 0x5a, 0xff, 0xd5,
- 0x00, 0x5b, 0xff, 0xe5, 0x00, 0x5d, 0xff, 0xcb, 0x00, 0x03, 0x00, 0x5a,
- 0xff, 0xd5, 0x00, 0x5b, 0xff, 0xe5, 0x00, 0x5d, 0xff, 0xcb, 0x00, 0x03,
- 0x00, 0x5a, 0xff, 0xdf, 0x00, 0x5b, 0xff, 0xec, 0x00, 0x5d, 0xff, 0xd7,
- 0x00, 0x03, 0x00, 0x5a, 0xff, 0xe1, 0x00, 0x5b, 0xff, 0xee, 0x00, 0x5d,
- 0xff, 0xd9, 0x00, 0x03, 0x00, 0x5a, 0xff, 0xe1, 0x00, 0x5b, 0xff, 0xee,
- 0x00, 0x5d, 0xff, 0xd9, 0x00, 0x03, 0x00, 0x5a, 0xff, 0xdb, 0x00, 0x5b,
- 0xff, 0xec, 0x00, 0x5d, 0xff, 0xd3, 0x00, 0x03, 0x00, 0x5a, 0xff, 0xdb,
- 0x00, 0x5b, 0xff, 0xec, 0x00, 0x5d, 0xff, 0xd3, 0x00, 0x01, 0x00, 0x58,
- 0xff, 0xec, 0x00, 0x05, 0x00, 0x58, 0xff, 0xec, 0x00, 0x5a, 0xff, 0xdb,
- 0x00, 0x5b, 0xff, 0xec, 0x00, 0x5c, 0xff, 0xc9, 0x00, 0x5d, 0xff, 0xd3,
- 0x00, 0x02, 0x00, 0x11, 0x00, 0x25, 0x00, 0x28, 0x00, 0x00, 0x00, 0x2a,
- 0x00, 0x2b, 0x00, 0x04, 0x00, 0x2e, 0x00, 0x30, 0x00, 0x06, 0x00, 0x32,
- 0x00, 0x34, 0x00, 0x09, 0x00, 0x36, 0x00, 0x3e, 0x00, 0x0c, 0x00, 0x45,
- 0x00, 0x47, 0x00, 0x15, 0x00, 0x49, 0x00, 0x4d, 0x00, 0x18, 0x00, 0x4f,
- 0x00, 0x5d, 0x00, 0x1d, 0x00, 0x83, 0x00, 0x88, 0x00, 0x2c, 0x00, 0x8a,
- 0x00, 0x8a, 0x00, 0x32, 0x00, 0x95, 0x00, 0x99, 0x00, 0x33, 0x00, 0x9b,
- 0x00, 0x9f, 0x00, 0x38, 0x00, 0xa3, 0x00, 0xa4, 0x00, 0x3d, 0x00, 0xa7,
- 0x00, 0xa9, 0x00, 0x3f, 0x00, 0xac, 0x00, 0xad, 0x00, 0x42, 0x00, 0xb5,
- 0x00, 0xb7, 0x00, 0x44, 0x00, 0xb9, 0x00, 0xb9, 0x00, 0x47, 0x00, 0x00
-};
-unsigned int FreeSans_ttf_len = 22932;
-
-#if 0
-void writeLogo(const char *dir)
-{
- QCString fileName=(QCString)dir+"/doxygen.png";
- QFile f(fileName);
- if (f.open(IO_WriteOnly))
- f.writeBlock((char *)doxygen_png_data,doxygen_png_len);
- else
- {
- fprintf(stderr,"warning: Cannot open file %s for writing\n",fileName.data());
- }
- f.close();
-}
-
-void writeSearchButton(const char *dir)
-{
- QCString fileName=(QCString)dir+"/search.png";
- QFile f(fileName);
- if (f.open(IO_WriteOnly))
- f.writeBlock((char *)search_png,search_png_len);
- else
- {
- fprintf(stderr,"warning: Cannot open file %s for writing\n",fileName.data());
- }
- f.close();
-}
-#endif
-
-void writeDoxFont(const char *dir)
-{
- QCString fileName=(QCString)dir+"/FreeSans.ttf";
- QFile f(fileName);
- if (f.open(IO_WriteOnly))
- f.writeBlock((char *)FreeSans_ttf,FreeSans_ttf_len);
- else
- {
- fprintf(stderr,"error: Cannot open file %s for writing\n",fileName.data());
- }
- f.close();
-}
-
-void removeDoxFont(const char *dir)
-{
- QDir d(dir);
- d.remove("FreeSans.ttf");
-}
diff --git a/trunk/src/logos.h b/trunk/src/logos.h
deleted file mode 100644
index 3050819..0000000
--- a/trunk/src/logos.h
+++ /dev/null
@@ -1,27 +0,0 @@
-/******************************************************************************
- *
- *
- *
- * Copyright (C) 1997-2012 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.
- *
- */
-
-#ifndef LOGOS_H
-#define LOGOS_H
-
-extern void writeLogo(const char *dir);
-//extern void writeNullImage(const char *dir);
-extern void writeSearchButton(const char *dir);
-extern void writeDoxFont(const char *dir);
-extern void removeDoxFont(const char *dir);
-
-#endif
diff --git a/trunk/src/main.cpp b/trunk/src/main.cpp
deleted file mode 100644
index dd1ea1e..0000000
--- a/trunk/src/main.cpp
+++ /dev/null
@@ -1,41 +0,0 @@
-/******************************************************************************
- *
- *
- *
- *
- * Copyright (C) 1997-2012 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.
- *
- */
-
-#include "doxygen.h"
-
-/*! \file
- * \brief main entry point for doxygen
- *
- * This file contains main()
- */
-
-/*! Default main. The idea of separating this from the rest of doxygen,
- * is to make it possible to write your own main, with a different
- * generateOutput() function for instance.
- */
-int main(int argc,char **argv)
-{
- initDoxygen();
- readConfiguration(argc,argv);
- checkConfiguration();
- adjustConfiguration();
- parseInput();
- generateOutput();
- return 0;
-}
-
diff --git a/trunk/src/mandocvisitor.cpp b/trunk/src/mandocvisitor.cpp
deleted file mode 100644
index 06fe9df..0000000
--- a/trunk/src/mandocvisitor.cpp
+++ /dev/null
@@ -1,1010 +0,0 @@
-/******************************************************************************
- *
- *
- *
- *
- * Copyright (C) 1997-2012 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.
- *
- */
-
-#include "mandocvisitor.h"
-#include "docparser.h"
-#include "language.h"
-#include "doxygen.h"
-#include "outputgen.h"
-#include "code.h"
-#include "dot.h"
-#include "util.h"
-#include "message.h"
-#include <qfileinfo.h>
-#include "parserintf.h"
-
-ManDocVisitor::ManDocVisitor(FTextStream &t,CodeOutputInterface &ci,
- const char *langExt)
- : DocVisitor(DocVisitor_Man), m_t(t), m_ci(ci), m_insidePre(FALSE), m_hide(FALSE), m_firstCol(TRUE),
- m_indent(0), m_langExt(langExt)
-{
-}
-
- //--------------------------------------
- // visitor functions for leaf nodes
- //--------------------------------------
-
-void ManDocVisitor::visit(DocWord *w)
-{
- if (m_hide) return;
- filter(w->word());
- m_firstCol=FALSE;
-}
-
-void ManDocVisitor::visit(DocLinkedWord *w)
-{
- if (m_hide) return;
- m_t << "\\fB";
- filter(w->word());
- m_t << "\\fP";
- m_firstCol=FALSE;
-}
-
-void ManDocVisitor::visit(DocWhiteSpace *w)
-{
- if (m_hide) return;
- if (m_insidePre)
- {
- m_t << w->chars();
- m_firstCol=w->chars().at(w->chars().length()-1)=='\n';
- }
- else
- {
- m_t << " ";
- m_firstCol=FALSE;
- }
-}
-
-void ManDocVisitor::visit(DocSymbol *s)
-{
- if (m_hide) return;
- switch(s->symbol())
- {
- case DocSymbol::BSlash: m_t << "\\\\"; break;
- case DocSymbol::At: m_t << "@"; break;
- case DocSymbol::Less: m_t << "<"; break;
- case DocSymbol::Greater: m_t << ">"; break;
- case DocSymbol::Amp: m_t << "&"; break;
- case DocSymbol::Dollar: m_t << "$"; break;
- case DocSymbol::Hash: m_t << "#"; break;
- case DocSymbol::DoubleColon: m_t << "::"; break;
- case DocSymbol::Percent: m_t << "%"; break;
- case DocSymbol::Copy: m_t << "(C)"; break;
- case DocSymbol::Tm: m_t << "(TM)"; break;
- case DocSymbol::Reg: m_t << "(R)"; break;
- case DocSymbol::Apos: m_t << "'"; break;
- case DocSymbol::Quot: m_t << "\""; break;
- case DocSymbol::Lsquo: m_t << "`"; break;
- case DocSymbol::Rsquo: m_t << "'"; break;
- case DocSymbol::Ldquo: m_t << "``"; break;
- case DocSymbol::Rdquo: m_t << "''"; break;
- case DocSymbol::Ndash: m_t << "--"; break;
- case DocSymbol::Mdash: m_t << "---"; break;
- case DocSymbol::Uml: m_t << s->letter() << "\\*(4"; break;
- case DocSymbol::Acute: m_t << s->letter() << "\\*(`"; break;
- case DocSymbol::Grave: m_t << s->letter() << "\\*:"; break;
- case DocSymbol::Circ: m_t << s->letter() << "\\*^"; break;
- case DocSymbol::Slash: m_t << s->letter(); break; /* todo: implement this */
- case DocSymbol::Tilde: m_t << s->letter() << "\\*~"; break;
- case DocSymbol::Szlig: m_t << "s\\*:"; break;
- case DocSymbol::Cedil: m_t << s->letter() << "\\*,"; break;
- case DocSymbol::Ring: m_t << s->letter() << "\\*o"; break;
- case DocSymbol::Nbsp: m_t << " "; break;
- default:
- err("error: unknown symbol found\n");
- }
- m_firstCol=FALSE;
-}
-
-void ManDocVisitor::visit(DocURL *u)
-{
- if (m_hide) return;
- m_t << u->url();
- m_firstCol=FALSE;
-}
-
-void ManDocVisitor::visit(DocLineBreak *)
-{
- if (m_hide) return;
- m_t << endl << ".br" << endl;
- m_firstCol=TRUE;
-}
-
-void ManDocVisitor::visit(DocHorRuler *)
-{
- if (m_hide) return;
- if (!m_firstCol) m_t << endl;
- m_t << ".PP" << endl;
- m_firstCol=TRUE;
-}
-
-void ManDocVisitor::visit(DocStyleChange *s)
-{
- if (m_hide) return;
- switch (s->style())
- {
- case DocStyleChange::Bold:
- if (s->enable()) m_t << "\\fB"; else m_t << "\\fP";
- m_firstCol=FALSE;
- break;
- case DocStyleChange::Italic:
- if (s->enable()) m_t << "\\fI"; else m_t << "\\fP";
- m_firstCol=FALSE;
- break;
- case DocStyleChange::Code:
- if (s->enable()) m_t << "\\fC"; else m_t << "\\fP";
- m_firstCol=FALSE;
- break;
- case DocStyleChange::Subscript:
- if (s->enable()) m_t << "\\*<"; else m_t << "\\*> ";
- m_firstCol=FALSE;
- break;
- case DocStyleChange::Superscript:
- if (s->enable()) m_t << "\\*{"; else m_t << "\\*} ";
- m_firstCol=FALSE;
- break;
- case DocStyleChange::Center:
- /* not supported */
- break;
- case DocStyleChange::Small:
- /* not supported */
- break;
- case DocStyleChange::Preformatted:
- if (s->enable())
- {
- if (!m_firstCol) m_t << endl;
- m_t << ".PP" << endl;
- m_t << ".nf" << endl;
- m_insidePre=TRUE;
- }
- else
- {
- m_insidePre=FALSE;
- if (!m_firstCol) m_t << endl;
- m_t << ".fi" << endl;
- m_t << ".PP" << endl;
- m_firstCol=TRUE;
- }
- break;
- case DocStyleChange::Div: /* HTML only */ break;
- case DocStyleChange::Span: /* HTML only */ break;
- }
-}
-
-void ManDocVisitor::visit(DocVerbatim *s)
-{
- if (m_hide) return;
- switch(s->type())
- {
- case DocVerbatim::Code: // fall though
- if (!m_firstCol) m_t << endl;
- m_t << ".PP" << endl;
- m_t << ".nf" << endl;
- Doxygen::parserManager->getParser(0/*TODO*/)
- ->parseCode(m_ci,s->context(),s->text(),
- s->isExample(),s->exampleFile());
- if (!m_firstCol) m_t << endl;
- m_t << ".fi" << endl;
- m_t << ".PP" << endl;
- m_firstCol=TRUE;
- break;
- case DocVerbatim::Verbatim:
- if (!m_firstCol) m_t << endl;
- m_t << ".PP" << endl;
- m_t << ".nf" << endl;
- m_t << s->text();
- if (!m_firstCol) m_t << endl;
- m_t << ".fi" << endl;
- m_t << ".PP" << endl;
- m_firstCol=TRUE;
- break;
- case DocVerbatim::ManOnly:
- m_t << s->text();
- break;
- case DocVerbatim::HtmlOnly:
- case DocVerbatim::XmlOnly:
- case DocVerbatim::LatexOnly:
- case DocVerbatim::Dot:
- case DocVerbatim::Msc:
- /* nothing */
- break;
- }
-}
-
-void ManDocVisitor::visit(DocAnchor *)
-{
- /* no support for anchors in man pages */
-}
-
-void ManDocVisitor::visit(DocInclude *inc)
-{
- if (m_hide) return;
- switch(inc->type())
- {
- case DocInclude::IncWithLines:
- {
- if (!m_firstCol) m_t << endl;
- m_t << ".PP" << endl;
- m_t << ".nf" << endl;
- QFileInfo cfi( inc->file() );
- FileDef fd( cfi.dirPath(), cfi.fileName() );
- Doxygen::parserManager->getParser(inc->extension())
- ->parseCode(m_ci,inc->context(),
- inc->text(),
- inc->isExample(),
- inc->exampleFile(), &fd);
- if (!m_firstCol) m_t << endl;
- m_t << ".fi" << endl;
- m_t << ".PP" << endl;
- m_firstCol=TRUE;
- }
- break;
- case DocInclude::Include:
- if (!m_firstCol) m_t << endl;
- m_t << ".PP" << endl;
- m_t << ".nf" << endl;
- Doxygen::parserManager->getParser(inc->extension())
- ->parseCode(m_ci,inc->context(),
- inc->text(),inc->isExample(),
- inc->exampleFile());
- if (!m_firstCol) m_t << endl;
- m_t << ".fi" << endl;
- m_t << ".PP" << endl;
- m_firstCol=TRUE;
- break;
- case DocInclude::DontInclude:
- break;
- case DocInclude::HtmlInclude:
- break;
- case DocInclude::VerbInclude:
- if (!m_firstCol) m_t << endl;
- m_t << ".PP" << endl;
- m_t << ".nf" << endl;
- m_t << inc->text();
- if (!m_firstCol) m_t << endl;
- m_t << ".fi" << endl;
- m_t << ".PP" << endl;
- m_firstCol=TRUE;
- break;
- case DocInclude::Snippet:
- if (!m_firstCol) m_t << endl;
- m_t << ".PP" << endl;
- m_t << ".nf" << endl;
- Doxygen::parserManager->getParser(inc->extension())
- ->parseCode(m_ci,
- inc->context(),
- extractBlock(inc->text(),inc->blockId()),
- inc->isExample(),
- inc->exampleFile()
- );
- if (!m_firstCol) m_t << endl;
- m_t << ".fi" << endl;
- m_t << ".PP" << endl;
- m_firstCol=TRUE;
- break;
- }
-}
-
-void ManDocVisitor::visit(DocIncOperator *op)
-{
- //printf("DocIncOperator: type=%d first=%d, last=%d text=`%s'\n",
- // op->type(),op->isFirst(),op->isLast(),op->text().data());
- if (op->isFirst())
- {
- if (!m_hide)
- {
- if (!m_firstCol) m_t << endl;
- m_t << ".PP" << endl;
- m_t << ".nf" << endl;
- }
- pushEnabled();
- m_hide = TRUE;
- }
- if (op->type()!=DocIncOperator::Skip)
- {
- popEnabled();
- if (!m_hide)
- {
- Doxygen::parserManager->getParser(0/*TODO*/)
- ->parseCode(m_ci,op->context(),op->text(),
- op->isExample(),op->exampleFile());
- }
- pushEnabled();
- m_hide=TRUE;
- }
- if (op->isLast())
- {
- popEnabled();
- if (!m_hide)
- {
- if (!m_firstCol) m_t << endl;
- m_t << ".fi" << endl;
- m_t << ".PP" << endl;
- m_firstCol=TRUE;
- }
- }
- else
- {
- if (!m_hide) m_t << endl;
- }
-}
-
-void ManDocVisitor::visit(DocFormula *f)
-{
- if (m_hide) return;
- m_t << f->text();
-}
-
-void ManDocVisitor::visit(DocIndexEntry *)
-{
-}
-
-void ManDocVisitor::visit(DocSimpleSectSep *)
-{
-}
-
-void ManDocVisitor::visit(DocCite *cite)
-{
- if (m_hide) return;
- m_t << "\\fB";
- if (cite->file().isEmpty()) m_t << "[";
- filter(cite->text());
- if (cite->file().isEmpty()) m_t << "]";
- m_t << "\\fP";
-}
-
-
-//--------------------------------------
-// visitor functions for compound nodes
-//--------------------------------------
-
-void ManDocVisitor::visitPre(DocAutoList *)
-{
- if (m_hide) return;
- m_indent+=2;
-}
-
-void ManDocVisitor::visitPost(DocAutoList *)
-{
- if (m_hide) return;
- m_indent-=2;
- m_t << ".PP" << endl;
-}
-
-void ManDocVisitor::visitPre(DocAutoListItem *li)
-{
- if (m_hide) return;
- QCString ws;
- ws.fill(' ',m_indent-2);
- if (!m_firstCol) m_t << endl;
- m_t << ".IP \"" << ws;
- if (((DocAutoList *)li->parent())->isEnumList())
- {
- m_t << li->itemNumber() << ".\" " << m_indent+2;
- }
- else // bullet list
- {
- m_t << "\\(bu\" " << m_indent;
- }
- m_t << endl;
- m_firstCol=TRUE;
-}
-
-void ManDocVisitor::visitPost(DocAutoListItem *)
-{
- if (m_hide) return;
- m_t << endl;
- m_firstCol=TRUE;
-}
-
-void ManDocVisitor::visitPre(DocPara *)
-{
-}
-
-void ManDocVisitor::visitPost(DocPara *p)
-{
- if (m_hide) return;
- if (!p->isLast() && // omit <p> for last paragraph
- !(p->parent() && // and for parameter sections
- p->parent()->kind()==DocNode::Kind_ParamSect
- )
- )
- {
- if (!m_firstCol) m_t << endl;
- m_t << ".PP" << endl;
- m_firstCol=TRUE;
- }
-}
-
-void ManDocVisitor::visitPre(DocRoot *)
-{
-}
-
-void ManDocVisitor::visitPost(DocRoot *)
-{
-}
-
-void ManDocVisitor::visitPre(DocSimpleSect *s)
-{
- if (m_hide) return;
- if (!m_firstCol)
- {
- m_t << endl;
- m_t << ".PP" << endl;
- }
- m_t << "\\fB";
- switch(s->type())
- {
- case DocSimpleSect::See:
- m_t << theTranslator->trSeeAlso(); break;
- case DocSimpleSect::Return:
- m_t << theTranslator->trReturns(); break;
- case DocSimpleSect::Author:
- m_t << theTranslator->trAuthor(TRUE,TRUE); break;
- case DocSimpleSect::Authors:
- m_t << theTranslator->trAuthor(TRUE,FALSE); break;
- case DocSimpleSect::Version:
- m_t << theTranslator->trVersion(); break;
- case DocSimpleSect::Since:
- m_t << theTranslator->trSince(); break;
- case DocSimpleSect::Date:
- m_t << theTranslator->trDate(); break;
- case DocSimpleSect::Note:
- m_t << theTranslator->trNote(); break;
- case DocSimpleSect::Warning:
- m_t << theTranslator->trWarning(); break;
- case DocSimpleSect::Pre:
- m_t << theTranslator->trPrecondition(); break;
- case DocSimpleSect::Post:
- m_t << theTranslator->trPostcondition(); break;
- case DocSimpleSect::Copyright:
- m_t << theTranslator->trCopyright(); break;
- case DocSimpleSect::Invar:
- m_t << theTranslator->trInvariant(); break;
- case DocSimpleSect::Remark:
- m_t << theTranslator->trRemarks(); break;
- case DocSimpleSect::Attention:
- m_t << theTranslator->trAttention(); break;
- case DocSimpleSect::User: break;
- case DocSimpleSect::Rcs: break;
- case DocSimpleSect::Unknown: break;
- }
-
- // special case 1: user defined title
- if (s->type()!=DocSimpleSect::User && s->type()!=DocSimpleSect::Rcs)
- {
- m_t << ":\\fP" << endl;
- m_t << ".RS 4" << endl;
- }
-}
-
-void ManDocVisitor::visitPost(DocSimpleSect *)
-{
- if (m_hide) return;
- if (!m_firstCol) m_t << endl;
- m_t << ".RE" << endl;
- m_t << ".PP" << endl;
- m_firstCol=TRUE;
-}
-
-void ManDocVisitor::visitPre(DocTitle *)
-{
-}
-
-void ManDocVisitor::visitPost(DocTitle *)
-{
- if (m_hide) return;
- m_t << "\\fP" << endl;
- m_t << ".RS 4" << endl;
-}
-
-void ManDocVisitor::visitPre(DocSimpleList *)
-{
- if (m_hide) return;
- m_indent+=2;
- if (!m_firstCol) m_t << endl;
- m_t << ".PD 0" << endl;
-}
-
-void ManDocVisitor::visitPost(DocSimpleList *)
-{
- if (m_hide) return;
- m_indent-=2;
- m_t << ".PP" << endl;
-}
-
-void ManDocVisitor::visitPre(DocSimpleListItem *)
-{
- if (m_hide) return;
- QCString ws;
- ws.fill(' ',m_indent-2);
- if (!m_firstCol) m_t << endl;
- m_t << ".IP \"" << ws << "\\(bu\" " << m_indent << endl;
- m_firstCol=TRUE;
-}
-
-void ManDocVisitor::visitPost(DocSimpleListItem *)
-{
- if (m_hide) return;
- m_t << endl;
- m_firstCol=TRUE;
-}
-
-void ManDocVisitor::visitPre(DocSection *s)
-{
- if (m_hide) return;
- if (!m_firstCol) m_t << endl;
- if (s->level()==1) m_t << ".SH"; else m_t << ".SS";
- m_t << " \"";
- filter(s->title());
- m_t << "\"" << endl;
- if (s->level()==1) m_t << ".PP" << endl;
- m_firstCol=TRUE;
-}
-
-void ManDocVisitor::visitPost(DocSection *)
-{
-}
-
-void ManDocVisitor::visitPre(DocHtmlList *)
-{
- if (m_hide) return;
- m_indent+=2;
- if (!m_firstCol) m_t << endl;
- m_t << ".PD 0" << endl;
-}
-
-void ManDocVisitor::visitPost(DocHtmlList *)
-{
- if (m_hide) return;
- m_indent-=2;
- if (!m_firstCol) m_t << endl;
- m_t << ".PP" << endl;
-}
-
-void ManDocVisitor::visitPre(DocHtmlListItem *li)
-{
- if (m_hide) return;
- QCString ws;
- ws.fill(' ',m_indent-2);
- if (!m_firstCol) m_t << endl;
- m_t << ".IP \"" << ws;
- if (((DocHtmlList *)li->parent())->type()==DocHtmlList::Ordered)
- {
- m_t << li->itemNumber() << ".\" " << m_indent+2;
- }
- else // bullet list
- {
- m_t << "\\(bu\" " << m_indent;
- }
- m_t << endl;
- m_firstCol=TRUE;
-}
-
-void ManDocVisitor::visitPost(DocHtmlListItem *)
-{
- if (m_hide) return;
- m_t << endl;
- m_firstCol=TRUE;
-}
-
-//void ManDocVisitor::visitPre(DocHtmlPre *)
-//{
-// if (!m_firstCol) m_t << endl;
-// m_t << ".PP" << endl;
-// m_t << ".nf" << endl;
-// m_insidePre=TRUE;
-//}
-//
-//void ManDocVisitor::visitPost(DocHtmlPre *)
-//{
-// m_insidePre=FALSE;
-// if (!m_firstCol) m_t << endl;
-// m_t << ".fi" << endl;
-// m_t << ".PP" << endl;
-// m_firstCol=TRUE;
-//}
-
-void ManDocVisitor::visitPre(DocHtmlDescList *)
-{
-}
-
-void ManDocVisitor::visitPost(DocHtmlDescList *)
-{
- if (m_hide) return;
- if (!m_firstCol) m_t << endl;
- m_t << ".PP" << endl;
- m_firstCol=TRUE;
-}
-
-void ManDocVisitor::visitPre(DocHtmlDescTitle *)
-{
- if (m_hide) return;
- if (!m_firstCol) m_t << endl;
- m_t << ".IP \"\\fB";
- m_firstCol=FALSE;
-}
-
-void ManDocVisitor::visitPost(DocHtmlDescTitle *)
-{
- if (m_hide) return;
- m_t << "\\fP\" 1c" << endl;
- m_firstCol=TRUE;
-}
-
-void ManDocVisitor::visitPre(DocHtmlDescData *)
-{
-}
-
-void ManDocVisitor::visitPost(DocHtmlDescData *)
-{
-}
-
-void ManDocVisitor::visitPre(DocHtmlTable *)
-{
-}
-
-void ManDocVisitor::visitPost(DocHtmlTable *)
-{
-}
-
-void ManDocVisitor::visitPre(DocHtmlCaption *)
-{
-}
-
-void ManDocVisitor::visitPost(DocHtmlCaption *)
-{
-}
-
-void ManDocVisitor::visitPre(DocHtmlRow *)
-{
-}
-
-void ManDocVisitor::visitPost(DocHtmlRow *)
-{
-}
-
-void ManDocVisitor::visitPre(DocHtmlCell *)
-{
-}
-
-void ManDocVisitor::visitPost(DocHtmlCell *)
-{
-}
-
-void ManDocVisitor::visitPre(DocInternal *)
-{
- if (m_hide) return;
- //if (!m_firstCol) m_t << endl;
- //m_t << ".PP" << endl;
- //m_t << "\\fB" << theTranslator->trForInternalUseOnly() << "\\fP" << endl;
- //m_t << ".RS 4" << endl;
-}
-
-void ManDocVisitor::visitPost(DocInternal *)
-{
- if (m_hide) return;
- //if (!m_firstCol) m_t << endl;
- //m_t << ".RE" << endl;
- //m_t << ".PP" << endl;
- //m_firstCol=TRUE;
-}
-
-void ManDocVisitor::visitPre(DocHRef *)
-{
- if (m_hide) return;
- m_t << "\\fC";
-}
-
-void ManDocVisitor::visitPost(DocHRef *)
-{
- if (m_hide) return;
- m_t << "\\fP";
-}
-
-void ManDocVisitor::visitPre(DocHtmlHeader *header)
-{
- if (m_hide) return;
- if (!m_firstCol) m_t << endl;
- if (header->level()==1) m_t << ".SH"; else m_t << ".SS";
- m_t << " \"";
-}
-
-void ManDocVisitor::visitPost(DocHtmlHeader *header)
-{
- if (m_hide) return;
- m_t << "\"" << endl;
- if (header->level()==1) m_t << ".PP" << endl;
- m_firstCol=TRUE;
-}
-
-void ManDocVisitor::visitPre(DocImage *)
-{
-}
-
-void ManDocVisitor::visitPost(DocImage *)
-{
-}
-
-void ManDocVisitor::visitPre(DocDotFile *)
-{
-}
-
-void ManDocVisitor::visitPost(DocDotFile *)
-{
-}
-void ManDocVisitor::visitPre(DocMscFile *)
-{
-}
-
-void ManDocVisitor::visitPost(DocMscFile *)
-{
-}
-
-
-void ManDocVisitor::visitPre(DocLink *)
-{
- if (m_hide) return;
- m_t << "\\fB";
-}
-
-void ManDocVisitor::visitPost(DocLink *)
-{
- if (m_hide) return;
- m_t << "\\fP";
-}
-
-void ManDocVisitor::visitPre(DocRef *ref)
-{
- if (m_hide) return;
- m_t << "\\fB";
- if (!ref->hasLinkText()) filter(ref->targetTitle());
-}
-
-void ManDocVisitor::visitPost(DocRef *)
-{
- if (m_hide) return;
- m_t << "\\fP";
-}
-
-void ManDocVisitor::visitPre(DocSecRefItem *)
-{
- if (m_hide) return;
- QCString ws;
- ws.fill(' ',m_indent-2);
- if (!m_firstCol) m_t << endl;
- m_t << ".IP \"" << ws << "\\(bu\" " << m_indent << endl;
- m_firstCol=TRUE;
-}
-
-void ManDocVisitor::visitPost(DocSecRefItem *)
-{
- if (m_hide) return;
- m_t << endl;
- m_firstCol=TRUE;
-}
-
-void ManDocVisitor::visitPre(DocSecRefList *)
-{
- if (m_hide) return;
- m_indent+=2;
-}
-
-void ManDocVisitor::visitPost(DocSecRefList *)
-{
- if (m_hide) return;
- m_indent-=2;
- if (!m_firstCol) m_t << endl;
- m_t << ".PP" << endl;
-}
-
-//void ManDocVisitor::visitPre(DocLanguage *l)
-//{
-// QString langId = Config_getEnum("OUTPUT_LANGUAGE");
-// if (l->id().lower()!=langId.lower())
-// {
-// pushEnabled();
-// m_hide = TRUE;
-// }
-//}
-//
-//void ManDocVisitor::visitPost(DocLanguage *l)
-//{
-// QString langId = Config_getEnum("OUTPUT_LANGUAGE");
-// if (l->id().lower()!=langId.lower())
-// {
-// popEnabled();
-// }
-//}
-
-void ManDocVisitor::visitPre(DocParamSect *s)
-{
- if (m_hide) return;
- if (!m_firstCol)
- {
- m_t << endl;
- m_t << ".PP" << endl;
- }
- m_t << "\\fB";
- switch(s->type())
- {
- case DocParamSect::Param:
- m_t << theTranslator->trParameters(); break;
- case DocParamSect::RetVal:
- m_t << theTranslator->trReturnValues(); break;
- case DocParamSect::Exception:
- m_t << theTranslator->trExceptions(); break;
- case DocParamSect::TemplateParam:
- /* TODO: add this
- m_t << theTranslator->trTemplateParam(); break;
- */
- m_t << "Template Parameters"; break;
- default:
- ASSERT(0);
- }
- m_t << ":\\fP" << endl;
- m_t << ".RS 4" << endl;
-}
-
-void ManDocVisitor::visitPost(DocParamSect *)
-{
- if (m_hide) return;
- if (!m_firstCol) m_t << endl;
- m_t << ".RE" << endl;
- m_t << ".PP" << endl;
- m_firstCol=TRUE;
-}
-
-void ManDocVisitor::visitPre(DocParamList *pl)
-{
- if (m_hide) return;
- m_t << "\\fI";
- //QStrListIterator li(pl->parameters());
- //const char *s;
- QListIterator<DocNode> li(pl->parameters());
- DocNode *param;
- bool first=TRUE;
- for (li.toFirst();(param=li.current());++li)
- {
- if (!first) m_t << ","; else first=FALSE;
- if (param->kind()==DocNode::Kind_Word)
- {
- visit((DocWord*)param);
- }
- else if (param->kind()==DocNode::Kind_LinkedWord)
- {
- visit((DocLinkedWord*)param);
- }
- }
- m_t << "\\fP ";
-}
-
-void ManDocVisitor::visitPost(DocParamList *pl)
-{
- if (m_hide) return;
- if (!pl->isLast())
- {
- if (!m_firstCol) m_t << endl;
- m_t << ".br" << endl;
- }
-}
-
-void ManDocVisitor::visitPre(DocXRefItem *x)
-{
- if (m_hide) return;
- if (!m_firstCol)
- {
- m_t << endl;
- m_t << ".PP" << endl;
- }
- m_t << "\\fB";
- filter(x->title());
- m_t << "\\fP" << endl;
- m_t << ".RS 4" << endl;
-}
-
-void ManDocVisitor::visitPost(DocXRefItem *)
-{
- if (m_hide) return;
- if (!m_firstCol) m_t << endl;
- m_t << ".RE" << endl;
- m_t << ".PP" << endl;
- m_firstCol=TRUE;
-}
-
-void ManDocVisitor::visitPre(DocInternalRef *)
-{
- if (m_hide) return;
- m_t << "\\fB";
-}
-
-void ManDocVisitor::visitPost(DocInternalRef *)
-{
- if (m_hide) return;
- m_t << "\\fP";
-}
-
-void ManDocVisitor::visitPre(DocCopy *)
-{
-}
-
-void ManDocVisitor::visitPost(DocCopy *)
-{
-}
-
-void ManDocVisitor::visitPre(DocText *)
-{
-}
-
-void ManDocVisitor::visitPost(DocText *)
-{
-}
-
-void ManDocVisitor::visitPre(DocHtmlBlockQuote *)
-{
- if (m_hide) return;
- if (!m_firstCol)
- {
- m_t << endl;
- m_t << ".PP" << endl;
- }
- m_t << ".RS 4" << endl; // TODO: add support for nested block quotes
-}
-
-void ManDocVisitor::visitPost(DocHtmlBlockQuote *)
-{
- if (m_hide) return;
- if (!m_firstCol) m_t << endl;
- m_t << ".RE" << endl;
- m_t << ".PP" << endl;
- m_firstCol=TRUE;
-}
-
-
-void ManDocVisitor::filter(const char *str)
-{
- if (str)
- {
- const char *p=str;
- char c=0;
- while ((c=*p++))
- {
- switch(c)
- {
- case '.': m_t << "\\&."; break; // see bug652277
- case '\\': m_t << "\\\\"; break;
- case '"': c = '\''; // fall through
- default: m_t << c; break;
- }
- }
- }
-}
-
-void ManDocVisitor::pushEnabled()
-{
- m_enabled.push(new bool(m_hide));
-}
-
-void ManDocVisitor::popEnabled()
-{
- bool *v=m_enabled.pop();
- ASSERT(v!=0);
- m_hide = *v;
- delete v;
-}
-
diff --git a/trunk/src/mandocvisitor.h b/trunk/src/mandocvisitor.h
deleted file mode 100644
index acd0663..0000000
--- a/trunk/src/mandocvisitor.h
+++ /dev/null
@@ -1,160 +0,0 @@
-/******************************************************************************
- *
- *
- *
- *
- * Copyright (C) 1997-2012 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.
- *
- */
-
-#ifndef _MANDOCVISITOR_H
-#define _MANDOCVISITOR_H
-
-#include "docvisitor.h"
-#include <qstack.h>
-#include <qcstring.h>
-
-class FTextStream;
-class CodeOutputInterface;
-
-/*! @brief Concrete visitor implementation for LaTeX output. */
-class ManDocVisitor : public DocVisitor
-{
- public:
- ManDocVisitor(FTextStream &t,CodeOutputInterface &ci,const char *langExt);
-
- //--------------------------------------
- // visitor functions for leaf nodes
- //--------------------------------------
-
- void visit(DocWord *);
- void visit(DocLinkedWord *);
- void visit(DocWhiteSpace *);
- void visit(DocSymbol *);
- void visit(DocURL *);
- void visit(DocLineBreak *);
- void visit(DocHorRuler *);
- void visit(DocStyleChange *);
- void visit(DocVerbatim *);
- void visit(DocAnchor *);
- void visit(DocInclude *);
- void visit(DocIncOperator *);
- void visit(DocFormula *);
- void visit(DocIndexEntry *);
- void visit(DocSimpleSectSep *);
- void visit(DocCite *);
-
- //--------------------------------------
- // visitor functions for compound nodes
- //--------------------------------------
-
- void visitPre(DocAutoList *);
- void visitPost(DocAutoList *);
- void visitPre(DocAutoListItem *);
- void visitPost(DocAutoListItem *);
- void visitPre(DocPara *);
- void visitPost(DocPara *);
- void visitPre(DocRoot *);
- void visitPost(DocRoot *);
- void visitPre(DocSimpleSect *);
- void visitPost(DocSimpleSect *);
- void visitPre(DocTitle *);
- void visitPost(DocTitle *);
- void visitPre(DocSimpleList *);
- void visitPost(DocSimpleList *);
- void visitPre(DocSimpleListItem *);
- void visitPost(DocSimpleListItem *);
- void visitPre(DocSection *s);
- void visitPost(DocSection *);
- void visitPre(DocHtmlList *s);
- void visitPost(DocHtmlList *s);
- void visitPre(DocHtmlListItem *);
- void visitPost(DocHtmlListItem *);
- //void visitPre(DocHtmlPre *);
- //void visitPost(DocHtmlPre *);
- void visitPre(DocHtmlDescList *);
- void visitPost(DocHtmlDescList *);
- void visitPre(DocHtmlDescTitle *);
- void visitPost(DocHtmlDescTitle *);
- void visitPre(DocHtmlDescData *);
- void visitPost(DocHtmlDescData *);
- void visitPre(DocHtmlTable *t);
- void visitPost(DocHtmlTable *t);
- void visitPre(DocHtmlCaption *);
- void visitPost(DocHtmlCaption *);
- void visitPre(DocHtmlRow *);
- void visitPost(DocHtmlRow *) ;
- void visitPre(DocHtmlCell *);
- void visitPost(DocHtmlCell *);
- void visitPre(DocInternal *);
- void visitPost(DocInternal *);
- void visitPre(DocHRef *);
- void visitPost(DocHRef *);
- void visitPre(DocHtmlHeader *);
- void visitPost(DocHtmlHeader *) ;
- void visitPre(DocImage *);
- void visitPost(DocImage *);
- void visitPre(DocDotFile *);
- void visitPost(DocDotFile *);
- void visitPre(DocMscFile *);
- void visitPost(DocMscFile *);
- void visitPre(DocLink *lnk);
- void visitPost(DocLink *);
- void visitPre(DocRef *ref);
- void visitPost(DocRef *);
- void visitPre(DocSecRefItem *);
- void visitPost(DocSecRefItem *);
- void visitPre(DocSecRefList *);
- void visitPost(DocSecRefList *);
- //void visitPre(DocLanguage *);
- //void visitPost(DocLanguage *);
- void visitPre(DocParamSect *);
- void visitPost(DocParamSect *);
- void visitPre(DocParamList *);
- void visitPost(DocParamList *);
- void visitPre(DocXRefItem *);
- void visitPost(DocXRefItem *);
- void visitPre(DocInternalRef *);
- void visitPost(DocInternalRef *);
- void visitPre(DocCopy *);
- void visitPost(DocCopy *);
- void visitPre(DocText *);
- void visitPost(DocText *);
- void visitPre(DocHtmlBlockQuote *);
- void visitPost(DocHtmlBlockQuote *);
-
- private:
-
- //--------------------------------------
- // helper functions
- //--------------------------------------
-
- void filter(const char *str);
-
- void pushEnabled();
- void popEnabled();
-
- //--------------------------------------
- // state variables
- //--------------------------------------
-
- FTextStream &m_t;
- CodeOutputInterface &m_ci;
- bool m_insidePre;
- bool m_hide;
- bool m_firstCol;
- int m_indent;
- QStack<bool> m_enabled;
- QCString m_langExt;
-};
-
-#endif
diff --git a/trunk/src/mangen.cpp b/trunk/src/mangen.cpp
deleted file mode 100644
index fb2898c..0000000
--- a/trunk/src/mangen.cpp
+++ /dev/null
@@ -1,787 +0,0 @@
-/******************************************************************************
- *
- *
- *
- * Copyright (C) 1997-2012 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.
- *
- */
-
-/* http://www.cubic.org/source/archive/fileform/txt/man/ has some
- nice introductions to groff and man pages. */
-
-#include <stdlib.h>
-
-#include "qtbc.h"
-#include <qdir.h>
-#include "message.h"
-#include "mangen.h"
-#include "config.h"
-#include "util.h"
-#include "doxygen.h"
-#include <string.h>
-#include "docparser.h"
-#include "mandocvisitor.h"
-#include "language.h"
-
-static QCString getExtension()
-{
- QCString ext = Config_getString("MAN_EXTENSION");
- if( ext.length() >= 2 &&
- ext.data()[0] == '.')
- {
- ext = ext.mid(1, ext.length()-1);
- }
- else
- {
- ext = "3";
- }
- return ext;
-}
-
-ManGenerator::ManGenerator() : OutputGenerator()
-{
- dir=Config_getString("MAN_OUTPUT")+"/man" + getExtension();
- firstCol=TRUE;
- paragraph=FALSE;
- col=0;
- upperCase=FALSE;
- insideTabbing=FALSE;
- inHeader=FALSE;
-}
-
-ManGenerator::~ManGenerator()
-{
-}
-
-//void ManGenerator::append(const OutputGenerator *g)
-//{
-// QCString r=g->getContents();
-// if (upperCase)
-// t << r.upper();
-// else
-// t << r;
-// if (!r.isEmpty())
-// firstCol = r.at(r.length()-1)=='\n';
-// else
-// firstCol = ((ManGenerator *)g)->firstCol;
-// col+=((ManGenerator *)g)->col;
-// inHeader=((ManGenerator *)g)->inHeader;
-// paragraph=FALSE;
-//}
-
-void ManGenerator::init()
-{
- QCString ext = getExtension();
- QCString &manOutput = Config_getString("MAN_OUTPUT");
-
- QDir d(manOutput);
- if (!d.exists() && !d.mkdir(manOutput))
- {
- err("Could not create output directory %s\n",manOutput.data());
- exit(1);
- }
- d.setPath(manOutput+"/man"+ext);
- if (!d.exists() && !d.mkdir(manOutput+"/man"+ext))
- {
- err("Could not create output directory %s/man%s\n",manOutput.data(),ext.data());
- exit(1);
- }
- createSubDirs(d);
-}
-
-static QCString buildFileName(const char *name)
-{
- QCString fileName;
- if (name==0) return "noname";
-
- const char *p=name;
- char c;
- while ((c=*p++))
- {
- switch (c)
- {
- case ':':
- fileName+="_";
- if (*p==':') p++;
- break;
- case '<':
- case '>':
- case '&':
- case '*':
- case '!':
- case '^':
- case '~':
- case '%':
- case '+':
- case '/':
- fileName+="_";
- break;
- default:
- fileName+=c;
- }
- }
-
- QCString &manExtension = Config_getString("MAN_EXTENSION");
- if (convertToQCString(fileName.right(2))!=manExtension)
- {
- fileName+=manExtension;
- }
-
- return fileName;
-}
-
-void ManGenerator::startFile(const char *,const char *manName,const char *)
-{
- startPlainFile( buildFileName( manName ) );
- firstCol=TRUE;
-}
-
-void ManGenerator::endFile()
-{
- t << endl;
- endPlainFile();
-}
-
-void ManGenerator::endTitleHead(const char *,const char *name)
-{
- t << ".TH \"" << name << "\" " << getExtension() << " \""
- << dateToString(FALSE) << "\" \"";
- if (!Config_getString("PROJECT_NUMBER").isEmpty())
- t << "Version " << Config_getString("PROJECT_NUMBER") << "\" \"";
- if (Config_getString("PROJECT_NAME").isEmpty())
- t << "Doxygen";
- else
- t << Config_getString("PROJECT_NAME");
- t << "\" \\\" -*- nroff -*-" << endl;
- t << ".ad l" << endl;
- t << ".nh" << endl;
- t << ".SH NAME" << endl;
- t << name << " \\- ";
- firstCol=FALSE;
- inHeader=TRUE;
-}
-
-void ManGenerator::newParagraph()
-{
- if (!paragraph)
- {
- if (!firstCol) t << endl;
- t << ".PP" << endl;
- firstCol=TRUE;
- }
- paragraph=TRUE;
-}
-
-void ManGenerator::startParagraph()
-{
- if (!paragraph)
- {
- if (!firstCol) t << endl;
- t << ".PP" << endl;
- firstCol=TRUE;
- }
- paragraph=TRUE;
-}
-
-void ManGenerator::endParagraph()
-{
-}
-
-void ManGenerator::writeString(const char *text)
-{
- docify(text);
-}
-
-void ManGenerator::startIndexItem(const char *,const char *)
-{
-}
-
-void ManGenerator::endIndexItem(const char *,const char *)
-{
-}
-
-void ManGenerator::writeStartAnnoItem(const char *,const char *,
- const char *,const char *)
-{
-}
-
-void ManGenerator::writeObjectLink(const char *,const char *,
- const char *, const char *name)
-{
- startBold(); docify(name); endBold();
-}
-
-void ManGenerator::writeCodeLink(const char *,const char *,
- const char *, const char *name,
- const char *)
-{
- docify(name);
-}
-
-void ManGenerator::startHtmlLink(const char *)
-{
-}
-
-void ManGenerator::endHtmlLink()
-{
-}
-
-//void ManGenerator::writeMailLink(const char *url)
-//{
-// docify(url);
-//}
-
-void ManGenerator::startGroupHeader(int)
-{
- if (!firstCol) t << endl;
- t << ".SH \"";
- upperCase=TRUE;
- firstCol=FALSE;
-}
-
-void ManGenerator::endGroupHeader(int)
-{
- t << "\"\n.PP " << endl;
- firstCol=TRUE;
- paragraph=TRUE;
- upperCase=FALSE;
-}
-
-void ManGenerator::startMemberHeader(const char *)
-{
- if (!firstCol) t << endl;
- t << ".SS \"";
-}
-
-void ManGenerator::endMemberHeader()
-{
- t << "\"\n";
- firstCol=TRUE;
- paragraph=FALSE;
-}
-
-void ManGenerator::docify(const char *str)
-{
- if (str)
- {
- const char *p=str;
- char c=0;
- while ((c=*p++))
- {
- switch(c)
- {
- case '.': t << "\\&."; break; // see bug652277
- case '\\': t << "\\\\"; col++; break;
- case '\n': t << "\n"; col=0; break;
- case '\"': c = '\''; // no break!
- default: t << c; col++; break;
- }
- }
- firstCol=(c=='\n');
- //printf("%s",str);fflush(stdout);
- }
- paragraph=FALSE;
-}
-
-void ManGenerator::codify(const char *str)
-{
- //static char spaces[]=" ";
- if (str)
- {
- const char *p=str;
- char c;
- int spacesToNextTabStop;
- while (*p)
- {
- c=*p++;
- switch(c)
- {
- case '.': t << "\\&."; break; // see bug652277
- case '\t': spacesToNextTabStop =
- Config_getInt("TAB_SIZE") - (col%Config_getInt("TAB_SIZE"));
- t << Doxygen::spaces.left(spacesToNextTabStop);
- col+=spacesToNextTabStop;
- break;
- case '\n': t << "\n"; firstCol=TRUE; col=0; break;
- case '\\': t << "\\"; col++; break;
- case '\"': c = '\''; // no break!
- default: t << c; firstCol=FALSE; col++; break;
- }
- }
- //printf("%s",str);fflush(stdout);
- }
- paragraph=FALSE;
-}
-
-void ManGenerator::writeChar(char c)
-{
- firstCol=(c=='\n');
- if (firstCol) col=0; else col++;
- switch (c)
- {
- case '\\': t << "\\\\"; break;
- case '\"': c = '\''; // no break!
- default: t << c; break;
- }
- //printf("%c",c);fflush(stdout);
- paragraph=FALSE;
-}
-
-void ManGenerator::startDescList(SectionTypes)
-{
- if (!firstCol)
- { t << endl << ".PP" << endl;
- firstCol=TRUE; paragraph=TRUE;
- col=0;
- }
- paragraph=FALSE;
- startBold();
-}
-
-void ManGenerator::startTitle()
-{
- if (!firstCol) t << endl;
- t << ".SH \"";
- firstCol=FALSE;
- paragraph=FALSE;
-}
-
-void ManGenerator::endTitle()
-{
- t << "\"";
-}
-
-void ManGenerator::startItemListItem()
-{
- if (!firstCol) t << endl;
- t << ".TP" << endl;
- firstCol=TRUE;
- paragraph=FALSE;
- col=0;
-}
-
-void ManGenerator::endItemListItem()
-{
-}
-
-void ManGenerator::startCodeFragment()
-{
- newParagraph();
- t << ".nf" << endl;
- firstCol=TRUE;
- paragraph=FALSE;
-}
-
-void ManGenerator::endCodeFragment()
-{
- if (!firstCol) t << endl;
- t << ".fi" << endl;
- firstCol=TRUE;
- paragraph=FALSE;
- col=0;
-}
-
-void ManGenerator::startMemberDoc(const char *,const char *,const char *,const char *,bool)
-{
- if (!firstCol) t << endl;
- t << ".SS \"";
- firstCol=FALSE;
- paragraph=FALSE;
-}
-
-void ManGenerator::startDoxyAnchor(const char *,const char *manName,
- const char *, const char *name,
- const char *)
-{
- // something to be done?
- if( !Config_getBool("MAN_LINKS") )
- {
- return; // no
- }
-
- // the name of the link file is derived from the name of the anchor:
- // - truncate after an (optional) ::
- QCString baseName = name;
- int i=baseName.findRev("::");
- if (i!=-1) baseName=baseName.right(baseName.length()-i-2);
-
- //printf("Converting man link '%s'->'%s'->'%s'\n",
- // name,baseName.data(),buildFileName(baseName).data());
-
- // - remove dangerous characters and append suffix, then add dir prefix
- QCString fileName=dir+"/"+buildFileName( baseName );
- QFile linkfile( fileName );
- // - only create file if it doesn't exist already
- if ( !linkfile.open( IO_ReadOnly ) )
- {
- if ( linkfile.open( IO_WriteOnly ) )
- {
- FTextStream linkstream;
- linkstream.setDevice(&linkfile);
- //linkstream.setEncoding(QTextStream::UnicodeUTF8);
- linkstream << ".so man" << getExtension() << "/" << buildFileName( manName ) << endl;
- }
- }
- linkfile.close();
-}
-
-void ManGenerator::endMemberDoc(bool)
-{
- t << "\"\n";
-}
-
-void ManGenerator::startSubsection()
-{
- if (!firstCol) t << endl;
- t << ".SS \"";
- firstCol=FALSE;
- paragraph=FALSE;
-}
-
-void ManGenerator::endSubsection()
-{
- t << "\"";
-}
-
-
-void ManGenerator::startSubsubsection()
-{
- if (!firstCol) t << endl;
- t << "\n.SS \"";
- firstCol=FALSE;
- paragraph=FALSE;
-}
-
-void ManGenerator::endSubsubsection()
-{
- t << "\"";
-}
-
-void ManGenerator::writeSynopsis()
-{
- if (!firstCol) t << endl;
- t << ".SH SYNOPSIS\n.br\n.PP\n";
- firstCol=TRUE;
- paragraph=FALSE;
-}
-
-void ManGenerator::startDescItem()
-{
- if (!firstCol) t << endl;
- t << ".IP \"";
- firstCol=FALSE;
-}
-
-//void ManGenerator::endDescTitle()
-//{
-// endBold();
-// paragraph=TRUE;
-//}
-
-void ManGenerator::startDescForItem()
-{
- if (!firstCol) t << endl;
- if (!paragraph) t << ".in -1c" << endl;
- t << ".in +1c" << endl;
- firstCol=TRUE;
- paragraph=FALSE;
- col=0;
-}
-
-void ManGenerator::endDescForItem()
-{
-}
-
-void ManGenerator::endDescItem()
-{
- t << "\" 1c" << endl;
- firstCol=TRUE;
-}
-
-void ManGenerator::startAnonTypeScope(int indentLevel)
-{
- if (indentLevel==0)
- {
- insideTabbing=TRUE;
- }
-}
-
-void ManGenerator::endAnonTypeScope(int indentLevel)
-{
- if (indentLevel==0)
- {
- insideTabbing=FALSE;
- }
-}
-
-
-void ManGenerator::startMemberItem(const char *,int)
-{
- if (firstCol && !insideTabbing) t << ".in +1c\n";
- t << "\n.ti -1c\n.RI \"";
- firstCol=FALSE;
-}
-
-void ManGenerator::endMemberItem()
-{
- t << "\"\n.br";
-}
-
-void ManGenerator::startMemberList()
-{
- if (!insideTabbing)
- {
- t << "\n.in +1c"; firstCol=FALSE;
- }
-}
-
-void ManGenerator::endMemberList()
-{
- if (!insideTabbing)
- {
- t << "\n.in -1c"; firstCol=FALSE;
- }
-}
-
-void ManGenerator::startMemberGroupHeader(bool)
-{
- t << "\n.PP\n.RI \"\\fB";
-}
-
-void ManGenerator::endMemberGroupHeader()
-{
- t << "\\fP\"\n.br\n";
- firstCol=TRUE;
-}
-
-void ManGenerator::startMemberGroupDocs()
-{
-}
-
-void ManGenerator::endMemberGroupDocs()
-{
- t << "\n.PP";
-}
-
-void ManGenerator::startMemberGroup()
-{
- t << "\n.in +1c";
-}
-
-void ManGenerator::endMemberGroup(bool)
-{
- t << "\n.in -1c";
- firstCol=FALSE;
-}
-
-void ManGenerator::startSection(const char *,const char *,SectionInfo::SectionType type)
-{
- if( !inHeader )
- {
- switch(type)
- {
- case SectionInfo::Page: startGroupHeader(FALSE); break;
- case SectionInfo::Section: startGroupHeader(FALSE); break;
- case SectionInfo::Subsection: startMemberHeader(0); break;
- case SectionInfo::Subsubsection: startMemberHeader(0); break;
- case SectionInfo::Paragraph: startMemberHeader(0); break;
- default: ASSERT(0); break;
- }
- }
-}
-
-void ManGenerator::endSection(const char *,SectionInfo::SectionType type)
-{
- if( !inHeader )
- {
- switch(type)
- {
- case SectionInfo::Page: endGroupHeader(0); break;
- case SectionInfo::Section: endGroupHeader(0); break;
- case SectionInfo::Subsection: endMemberHeader(); break;
- case SectionInfo::Subsubsection: endMemberHeader(); break;
- case SectionInfo::Paragraph: endMemberHeader(); break;
- default: ASSERT(0); break;
- }
- }
- else
- {
- t << "\n";
- firstCol=TRUE;
- paragraph=FALSE;
- inHeader=FALSE;
- }
-}
-
-void ManGenerator::startSimpleSect(SectionTypes,const char *,
- const char *,const char *title)
-{
- if (!firstCol)
- { t << endl << ".PP" << endl;
- firstCol=TRUE; paragraph=TRUE;
- col=0;
- }
- paragraph=FALSE;
- startBold();
- docify(title);
- endBold();
- paragraph=TRUE;
-}
-
-void ManGenerator::endSimpleSect()
-{
-}
-
-void ManGenerator::startParamList(ParamListTypes,const char *title)
-{
- if (!firstCol)
- { t << endl << ".PP" << endl;
- firstCol=TRUE; paragraph=TRUE;
- col=0;
- }
- paragraph=FALSE;
- startBold();
- docify(title);
- endBold();
- paragraph=TRUE;
-}
-
-void ManGenerator::endParamList()
-{
-}
-
-void ManGenerator::printDoc(DocNode *n,const char *langExt)
-{
- ManDocVisitor *visitor = new ManDocVisitor(t,*this,langExt);
- n->accept(visitor);
- delete visitor;
- firstCol=FALSE;
- paragraph = FALSE;
-}
-
-void ManGenerator::startConstraintList(const char *header)
-{
- if (!firstCol)
- { t << endl << ".PP" << endl;
- firstCol=TRUE; paragraph=TRUE;
- col=0;
- }
- paragraph=FALSE;
- startBold();
- docify(header);
- endBold();
- paragraph=TRUE;
-}
-
-void ManGenerator::startConstraintParam()
-{
- startItemListItem();
- startEmphasis();
-}
-
-void ManGenerator::endConstraintParam()
-{
- endEmphasis();
- endItemListItem();
- t << " : ";
-}
-
-void ManGenerator::startConstraintType()
-{
- startEmphasis();
-}
-
-void ManGenerator::endConstraintType()
-{
- endEmphasis();
-}
-
-void ManGenerator::startConstraintDocs()
-{
-}
-
-void ManGenerator::endConstraintDocs()
-{
- t << endl; firstCol=TRUE;
-}
-
-void ManGenerator::endConstraintList()
-{
-}
-
-
-void ManGenerator::startInlineHeader()
-{
- if (!firstCol)
- {
- t << endl << ".PP" << endl << ".in -1c" << endl;
- }
- t << ".RI \"\\fB";
-}
-
-void ManGenerator::endInlineHeader()
-{
- t << "\\fP\"" << endl << ".in +1c" << endl;
- firstCol = FALSE;
-}
-
-void ManGenerator::startMemberDocSimple()
-{
- if (!firstCol)
- {
- t << endl << ".PP" << endl;
- }
- t << "\\fB";
- docify(theTranslator->trCompoundMembers());
- t << ":\\fP" << endl;
- t << ".RS 4" << endl;
-}
-
-void ManGenerator::endMemberDocSimple()
-{
- if (!firstCol) t << endl;
- t << ".RE" << endl;
- t << ".PP" << endl;
- firstCol=TRUE;
-}
-
-void ManGenerator::startInlineMemberType()
-{
-}
-
-void ManGenerator::endInlineMemberType()
-{
- t << " ";
-}
-
-void ManGenerator::startInlineMemberName()
-{
- t << "\\fI";
-}
-
-void ManGenerator::endInlineMemberName()
-{
- t << "\\fP ";
-}
-
-void ManGenerator::startInlineMemberDoc()
-{
-}
-
-void ManGenerator::endInlineMemberDoc()
-{
- if (!firstCol) t << endl;
- t << ".br" << endl;
- t << ".PP" << endl;
- firstCol=TRUE;
-}
-
diff --git a/trunk/src/mangen.h b/trunk/src/mangen.h
deleted file mode 100644
index 5c8a863..0000000
--- a/trunk/src/mangen.h
+++ /dev/null
@@ -1,262 +0,0 @@
-/******************************************************************************
- *
- *
- *
- * Copyright (C) 1997-2012 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.
- *
- */
-
-#ifndef MANGEN_H
-#define MANGEN_H
-
-#include "outputgen.h"
-
-class QFile;
-
-class ManGenerator : public OutputGenerator
-{
- public:
- ManGenerator();
- ~ManGenerator();
-
- //OutputGenerator *copy() { return new ManGenerator; }
- //OutputGenerator *clone() { return new ManGenerator(*this); }
- //void append(const OutputGenerator *o);
- void enable()
- { if (genStack->top()) active=*genStack->top(); else active=TRUE; }
- void disable() { active=FALSE; }
- void enableIf(OutputType o) { if (o==Man) enable(); }
- void disableIf(OutputType o) { if (o==Man) disable(); }
- void disableIfNot(OutputType o) { if (o!=Man) disable(); }
- bool isEnabled(OutputType o) { return (o==Man && active); }
- OutputGenerator *get(OutputType o) { return (o==Man) ? this : 0; }
-
- void printDoc(DocNode *,const char *);
-
- static void init();
- void startFile(const char *name,const char *manName,const char *title);
- void writeSearchInfo() {}
- void writeFooter() {}
- void endFile();
- void clearBuffer();
-
- void startIndexSection(IndexSections) {}
- void endIndexSection(IndexSections) {}
- void writePageLink(const char *,bool) {}
- void startProjectNumber() {}
- void endProjectNumber() {}
- void writeStyleInfo(int) {}
- void startTitleHead(const char *) {}
- void endTitleHead(const char *,const char *);
- void startTitle();
- void endTitle();
-
- void newParagraph();
- void startParagraph();
- void endParagraph();
- void writeString(const char *text);
- void startIndexListItem() {}
- void endIndexListItem() {}
- void startIndexList() {}
- void endIndexList() { newParagraph(); }
- void startIndexKey() {}
- void endIndexKey() {}
- void startIndexValue(bool) {}
- void endIndexValue(const char *,bool) {}
- void startItemList() {}
- void endItemList() { newParagraph(); }
- void startIndexItem(const char *ref,const char *file);
- void endIndexItem(const char *ref,const char *file);
- void docify(const char *text);
- void codify(const char *text);
- void writeObjectLink(const char *ref,const char *file,
- const char *anchor,const char *name);
- void writeCodeLink(const char *ref,const char *file,
- const char *anchor,const char *name,
- const char *tooltip);
- void startTextLink(const char *,const char *) {}
- void endTextLink() {}
- void startHtmlLink(const char *url);
- void endHtmlLink();
- void startTypewriter() { t << "\\fC"; firstCol=FALSE; }
- void endTypewriter() { t << "\\fP"; firstCol=FALSE; }
- void startGroupHeader(int);
- void endGroupHeader(int);
- void startMemberSections() {}
- void endMemberSections() {}
- void startHeaderSection() {}
- void endHeaderSection() {}
- void startMemberHeader(const char *);
- void endMemberHeader();
- void insertMemberAlign(bool) {}
- void startMemberSubtitle() {}
- void endMemberSubtitle() {}
- //void writeListItem();
- void startItemListItem();
- void endItemListItem();
- void startMemberDocList() {}
- void endMemberDocList() {}
- void startMemberList();
- void endMemberList();
- void startInlineHeader();
- void endInlineHeader();
- void startAnonTypeScope(int);
- void endAnonTypeScope(int);
- void startMemberItem(const char *,int);
- void endMemberItem();
- void startMemberTemplateParams() {}
- void endMemberTemplateParams(const char *) {}
-
- void startMemberGroupHeader(bool);
- void endMemberGroupHeader();
- void startMemberGroupDocs();
- void endMemberGroupDocs();
- void startMemberGroup();
- void endMemberGroup(bool);
-
- void writeRuler() {}
- void writeAnchor(const char *,const char *) {}
- void startCodeFragment();
- void endCodeFragment();
- void writeLineNumber(const char *,const char *,const char *,int l) { t << l << " "; }
- void startCodeLine() {}
- void endCodeLine() { codify("\n"); col=0; }
- void startEmphasis() { t << "\\fI"; firstCol=FALSE; }
- void endEmphasis() { t << "\\fP"; firstCol=FALSE; }
- void startBold() { t << "\\fB"; firstCol=FALSE; }
- void endBold() { t << "\\fP"; firstCol=FALSE; }
- void startDescription() {}
- void endDescription() {}
- void startDescItem();
- void endDescItem();
- void lineBreak(const char *) { t << "\n.br" << endl; }
- void writeChar(char c);
- void startMemberDoc(const char *,const char *,const char *,const char *,bool);
- void endMemberDoc(bool);
- void startDoxyAnchor(const char *,const char *,const char *,const char *,const char *);
- void endDoxyAnchor(const char *,const char *) {}
- void startCodeAnchor(const char *) {}
- void endCodeAnchor() {}
- void writeLatexSpacing() {}
- void writeStartAnnoItem(const char *type,const char *file,
- const char *path,const char *name);
- void writeEndAnnoItem(const char *) { t << endl; firstCol=TRUE; }
- void startSubsection();
- void endSubsection();
- void startSubsubsection();
- void endSubsubsection();
- void startCenter() {}
- void endCenter() {}
- void startSmall() {}
- void endSmall() {}
- void startMemberDescription(const char *) { t << "\n.RI \"\\fI"; firstCol=FALSE; }
- void endMemberDescription() { t << "\\fP\""; firstCol=FALSE; }
- void startDescList(SectionTypes);
- void endDescList() {}
- void startSimpleSect(SectionTypes,const char *,const char *,const char *);
- void endSimpleSect();
- void startParamList(ParamListTypes,const char *title);
- void endParamList();
- //void writeDescItem();
- void startDescForItem();
- void endDescForItem();
- void startSection(const char *,const char *,SectionInfo::SectionType);
- void endSection(const char *,SectionInfo::SectionType);
- void addIndexItem(const char *,const char *) {}
- void startIndent() {}
- void endIndent() {}
- void writeSynopsis();
- void startClassDiagram() {}
- void endClassDiagram(const ClassDiagram &,const char *,const char *) {}
- void startPageRef() {}
- void endPageRef(const char *,const char *) {}
- void startQuickIndices() {}
- void endQuickIndices() {}
- void writeSplitBar(const char *) {}
- void writeLogo() {}
- void writeQuickLinks(bool,HighlightedItem,const char *) {}
- void startContents() {}
- void endContents() {}
- void writeNonBreakableSpace(int n) { int i; for (i=0;i<n;i++) t << " "; }
-
- void startDescTable() {}
- void endDescTable() {}
- void startDescTableTitle() { startItemListItem(); startBold(); startEmphasis(); endItemListItem(); }
- void endDescTableTitle() { endEmphasis(); endBold(); }
- void startDescTableData() { t << endl; firstCol=TRUE; }
- void endDescTableData() {}
-
- void startDotGraph() {}
- void endDotGraph(const DotClassGraph &) {}
- void startInclDepGraph() {}
- void endInclDepGraph(const DotInclDepGraph &) {}
- void startGroupCollaboration() {}
- void endGroupCollaboration(const DotGroupCollaboration &) {}
- void startCallGraph() {}
- void endCallGraph(const DotCallGraph &) {}
- void startDirDepGraph() {}
- void endDirDepGraph(const DotDirDeps &) {}
- void writeGraphicalHierarchy(const DotGfxHierarchyTable &) {}
-
- void startTextBlock(bool) {}
- void endTextBlock(bool) {}
- void lastIndexPage() {}
-
- void startMemberDocPrefixItem() {}
- void endMemberDocPrefixItem() {}
- void startMemberDocName(bool) {}
- void endMemberDocName() {}
- void startParameterType(bool,const char *) {}
- void endParameterType() {}
- void startParameterName(bool) {}
- void endParameterName(bool,bool,bool) {}
- void startParameterList(bool) {}
- void endParameterList() {}
-
- void startFontClass(const char *) {}
- void endFontClass() {}
-
- void startConstraintList(const char *);
- void startConstraintParam();
- void endConstraintParam();
- void startConstraintType();
- void endConstraintType();
- void startConstraintDocs();
- void endConstraintDocs();
- void endConstraintList();
-
- void startMemberDocSimple();
- void endMemberDocSimple();
- void startInlineMemberType();
- void endInlineMemberType();
- void startInlineMemberName();
- void endInlineMemberName();
- void startInlineMemberDoc();
- void endInlineMemberDoc();
-
-
- void writeCodeAnchor(const char *) {}
- void linkableSymbol(int,const char *,Definition *,Definition *) {}
-
- private:
- bool firstCol;
- bool paragraph;
- int col;
- bool upperCase;
- bool insideTabbing;
- bool inHeader;
-
- ManGenerator(const ManGenerator &g);
- ManGenerator &operator=(const ManGenerator &g);
-};
-
-#endif
diff --git a/trunk/src/markdown.cpp b/trunk/src/markdown.cpp
deleted file mode 100644
index 4f182dc..0000000
--- a/trunk/src/markdown.cpp
+++ /dev/null
@@ -1,2237 +0,0 @@
-/******************************************************************************
- *
- * Copyright (C) 1997-2012 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.
- *
- */
-
-/* Note: part of the code below is inspired by libupskirt written by
- * Natacha Porté. Original copyright message follows:
- *
- * Copyright (c) 2008, Natacha Porté
- *
- * Permission to use, copy, modify, and distribute this software for any
- * purpose with or without fee is hereby granted, provided that the above
- * copyright notice and this permission notice appear in all copies.
- *
- * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
- * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
- * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
- * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
- * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
- * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
- * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
- */
-
-#include <stdio.h>
-#include <qglobal.h>
-#include <qregexp.h>
-#include <qfileinfo.h>
-#include <qdict.h>
-
-#include "markdown.h"
-#include "growbuf.h"
-#include "debug.h"
-#include "util.h"
-#include "doxygen.h"
-#include "commentscan.h"
-#include "entry.h"
-
-//-----------
-
-// is character at position i in data part of an identifier?
-#define isIdChar(i) \
- ((data[i]>='a' && data[i]<='z') || \
- (data[i]>='A' && data[i]<='Z') || \
- (data[i]>='0' && data[i]<='9')) \
-
-// is character at position i in data allowed before an emphasis section
-#define isOpenEmphChar(i) \
- (data[i]=='\n' || data[i]==' ' || data[i]=='\'' || data[i]=='<' || \
- data[i]=='{' || data[i]=='(' || data[i]=='[' || data[i]==',' || \
- data[i]==':' || data[i]==';')
-
-// is character at position i in data an escape that prevents ending an emphasis section
-// so for example *bla (*.txt) is cool*
-#define ignoreCloseEmphChar(i) \
- (data[i]=='(' || data[i]=='{' || data[i]=='[' || data[i]=='<' || \
- data[i]=='=' || data[i]=='+' || data[i]=='-' || data[i]=='\\' || \
- data[i]=='@')
-
-//----------
-
-struct LinkRef
-{
- LinkRef(const QCString &l,const QCString &t) : link(l), title(t) {}
- QCString link;
- QCString title;
-};
-
-typedef int (*action_t)(GrowBuf &out,const char *data,int offset,int size);
-
-enum Alignment { AlignNone, AlignLeft, AlignCenter, AlignRight };
-
-
-//----------
-
-static QDict<LinkRef> g_linkRefs(257);
-static action_t g_actions[256];
-static Entry *g_current;
-static QCString g_fileName;
-//static QDict<void> g_htmlBlockTags(17);
-
-//----------
-
-const int codeBlockIndent = 4;
-
-static void processInline(GrowBuf &out,const char *data,int size);
-
-// escape characters that have a special meaning later on.
-static QCString escapeSpecialChars(const QCString &s)
-{
- if (s.isEmpty()) return "";
- GrowBuf growBuf;
- const char *p=s;
- char c;
- while ((c=*p++))
- {
- switch (c)
- {
- case '<': growBuf.addStr("\\<"); break;
- case '>': growBuf.addStr("\\>"); break;
- case '\\': growBuf.addStr("\\\\"); break;
- case '@': growBuf.addStr("\\@"); break;
- default: growBuf.addChar(c); break;
- }
- }
- growBuf.addChar(0);
- return growBuf.get();
-}
-
-static void convertStringFragment(QCString &result,const char *data,int size)
-{
- if (size<0) size=0;
- result.resize(size+1);
- memcpy(result.data(),data,size);
- result.at(size)='\0';
-}
-
-/** helper function to convert presence of left and/or right alignment markers
- * to a alignment value
- */
-static Alignment markersToAlignment(bool leftMarker,bool rightMarker)
-{
- //printf("markerToAlignment(%d,%d)\n",leftMarker,rightMarker);
- if (leftMarker && rightMarker)
- {
- return AlignCenter;
- }
- else if (leftMarker)
- {
- return AlignLeft;
- }
- else if (rightMarker)
- {
- return AlignRight;
- }
- else
- {
- return AlignNone;
- }
-}
-
-
-// Check if data contains a block command. If so returned the command
-// that ends the block. If not an empty string is returned.
-// Note When offset>0 character position -1 will be inspected.
-//
-// Checks for and skip the following block commands:
-// {@code .. { .. } .. }
-// \dot .. \enddot
-// \code .. \endcode
-// \msc .. \endmsc
-// \f$..\f$
-// \f[..\f]
-// \f{..\f}
-// \verbatim..\endverbatim
-// \latexonly..\endlatexonly
-// \htmlonly..\endhtmlonly
-// \xmlonly..\endxmlonly
-// \rtfonly..\endrtfonly
-// \manonly..\endmanonly
-static QCString isBlockCommand(const char *data,int offset,int size)
-{
- bool openBracket = offset>0 && data[-1]=='{';
- bool isEscaped = offset>0 && (data[-1]=='\\' || data[-1]=='@');
- if (isEscaped) return QCString();
-
- int end=1;
- while (end<size && (data[end]>='a' && data[end]<='z')) end++;
- if (end==1) return QCString();
- QCString blockName;
- convertStringFragment(blockName,data+1,end-1);
- if (blockName=="code" && openBracket)
- {
- return "}";
- }
- else if (blockName=="dot" ||
- blockName=="code" ||
- blockName=="msc" ||
- blockName=="verbatim" ||
- blockName=="latexonly" ||
- blockName=="htmlonly" ||
- blockName=="xmlonly" ||
- blockName=="rtfonly" ||
- blockName=="manonly"
- )
- {
- return "end"+blockName;
- }
- else if (blockName=="f" && end<size)
- {
- if (data[end]=='$')
- {
- return "f$";
- }
- else if (data[end]=='[')
- {
- return "f]";
- }
- else if (data[end]=='}')
- {
- return "f}";
- }
- }
- return QCString();
-}
-
-/** looks for the next emph char, skipping other constructs, and
- * stopping when either it is found, or we are at the end of a paragraph.
- */
-static int findEmphasisChar(const char *data, int size, char c)
-{
- int i = 1;
-
- while (i<size)
- {
- while (i<size && data[i]!=c && data[i]!='`' &&
- data[i]!='\\' && data[i]!='@' &&
- data[i]!='\n') i++;
- //printf("findEmphasisChar: data=[%s] i=%d c=%c\n",data,i,data[i]);
-
- // not counting escaped chars or characters that are unlikely
- // to appear as the end of the emphasis char
- if (i>0 && ignoreCloseEmphChar(i-1))
- {
- i++;
- continue;
- }
- else if (data[i] == c)
- {
- if (i<size-1 && isIdChar(i+1)) // to prevent touching some_underscore_identifier
- {
- i++;
- continue;
- }
- return i; // found it
- }
-
-
- // skipping a code span
- if (data[i]=='`')
- {
- int snb=0;
- while (i<size && data[i]=='`') snb++,i++;
-
- // find same pattern to end the span
- int enb=0;
- while (i<size && enb<snb)
- {
- if (data[i]=='`') enb++;
- if (snb==1 && data[i]=='\'') break; // ` ended by '
- i++;
- }
- }
- else if (data[i]=='@' || data[i]=='\\')
- { // skip over blocks that should not be processed
- QCString endBlockName = isBlockCommand(data+i,i,size-i);
- if (!endBlockName.isEmpty())
- {
- i++;
- int l = endBlockName.length();
- while (i<size-l-1)
- {
- if ((data[i]=='\\' || data[i]=='@') && // command
- data[i-1]!='\\' && data[i-1]!='@') // not escaped
- {
- if (strncmp(&data[i+1],endBlockName,l)==0)
- {
- break;
- }
- }
- i++;
- }
- }
- else
- {
- i++;
- }
- }
- else if (data[i]=='\n') // end * or _ at paragraph boundary
- {
- i++;
- while (i<size && data[i]==' ') i++;
- if (i>=size || data[i]=='\n') return 0; // empty line -> paragraph
- }
- else // should not get here!
- {
- i++;
- }
-
- }
- return 0;
-}
-
-/** process single emphasis */
-static int processEmphasis1(GrowBuf &out, const char *data, int size, char c)
-{
- int i = 0, len;
-
- /* skipping one symbol if coming from emph3 */
- if (size>1 && data[0]==c && data[1]==c) { i=1; }
-
- while (i<size)
- {
- len = findEmphasisChar(data+i, size-i, c);
- if (len==0) return 0;
- i+=len;
- if (i>=size) return 0;
-
- if (i+1<size && data[i+1]==c)
- {
- i++;
- continue;
- }
- if (data[i]==c && data[i-1]!=' ' && data[i-1]!='\n')
- {
- out.addStr("<em>");
- processInline(out,data,i);
- out.addStr("</em>");
- return i+1;
- }
- }
- return 0;
-}
-
-/** process double emphasis */
-static int processEmphasis2(GrowBuf &out, const char *data, int size, char c)
-{
- int i = 0, len;
-
- while (i<size)
- {
- len = findEmphasisChar(data+i, size-i, c);
- if (len==0)
- {
- return 0;
- }
- i += len;
- if (i+1<size && data[i]==c && data[i+1]==c && i && data[i-1]!=' ' &&
- data[i-1]!='\n'
- )
- {
- out.addStr("<strong>");
- processInline(out,data,i);
- out.addStr("</strong>");
- return i + 2;
- }
- i++;
- }
- return 0;
-}
-
-/** Parsing single emphase.
- * Finds the first closing tag, and delegates to the other emph
- */
-static int processEmphasis3(GrowBuf &out, const char *data, int size, char c)
-{
- int i = 0, len;
-
- while (i<size)
- {
- len = findEmphasisChar(data+i, size-i, c);
- if (len==0)
- {
- return 0;
- }
- i+=len;
-
- /* skip whitespace preceded symbols */
- if (data[i]!=c || data[i-1]==' ' || data[i-1]=='\n')
- {
- continue;
- }
-
- if (i+2<size && data[i+1]==c && data[i+2]==c)
- {
- out.addStr("<em><strong>");
- processInline(out,data,i);
- out.addStr("</strong></em>");
- return i+3;
- }
- else if (i+1<size && data[i+1]==c)
- {
- // double symbol found, handing over to emph1
- len = processEmphasis1(out, data-2, size+2, c);
- if (len==0)
- {
- return 0;
- }
- else
- {
- return len - 2;
- }
- }
- else
- {
- // single symbol found, handing over to emph2
- len = processEmphasis2(out, data-1, size+1, c);
- if (len==0)
- {
- return 0;
- }
- else
- {
- return len - 1;
- }
- }
- }
- return 0;
-}
-
-static int processHtmlTag(GrowBuf &out,const char *data,int offset,int size)
-{
- if (offset>0 && data[-1]=='\\') return 0; // escaped <
-
- // find the end of the html tag
- int i=1;
- int l=0;
- // compute length of the tag name
- while (i<size && isIdChar(i)) i++,l++;
- QCString tagName;
- convertStringFragment(tagName,data+1,i-1);
- if (tagName.lower()=="pre") // found <pre> tag
- {
- bool insideStr=FALSE;
- while (i<size-6)
- {
- char c=data[i];
- if (!insideStr && c=='<') // potential start of html tag
- {
- if (data[i+1]=='/' &&
- tolower(data[i+2])=='p' && tolower(data[i+3])=='r' &&
- tolower(data[i+4])=='e' && tolower(data[i+5])=='>')
- { // found </pre> tag, copy from start to end of tag
- out.addStr(data,i+6);
- //printf("found <pre>..</pre> [%d..%d]\n",0,i+6);
- return i+6;
- }
- }
- else if (insideStr && c=='"')
- {
- if (data[i-1]!='\\') insideStr=FALSE;
- }
- else if (c=='"')
- {
- insideStr=TRUE;
- }
- i++;
- }
- }
- else // some other html tag
- {
- if (l>0 && i<size)
- {
- if (data[i]=='/' && i<size-1 && data[i+1]=='>') // <bla/>
- {
- //printf("Found htmlTag={%s}\n",QCString(data).left(i+2).data());
- out.addStr(data,i+2);
- return i+2;
- }
- else if (data[i]=='>') // <bla>
- {
- //printf("Found htmlTag={%s}\n",QCString(data).left(i+1).data());
- out.addStr(data,i+1);
- return i+1;
- }
- else if (data[i]==' ') // <bla attr=...
- {
- i++;
- bool insideAttr=FALSE;
- while (i<size)
- {
- if (!insideAttr && data[i]=='"')
- {
- insideAttr=TRUE;
- }
- else if (data[i]=='"' && data[i-1]!='\\')
- {
- insideAttr=FALSE;
- }
- else if (!insideAttr && data[i]=='>') // found end of tag
- {
- //printf("Found htmlTag={%s}\n",QCString(data).left(i+1).data());
- out.addStr(data,i+1);
- return i+1;
- }
- i++;
- }
- }
- }
- }
- //printf("Not a valid html tag\n");
- return 0;
-}
-
-static int processEmphasis(GrowBuf &out,const char *data,int offset,int size)
-{
- if ((offset>0 && !isOpenEmphChar(-1)) || // invalid char before * or _
- (size>1 && data[0]!=data[1] && !isIdChar(1)) || // invalid char after * or _
- (size>2 && data[0]==data[1] && !isIdChar(2))) // invalid char after ** or __
- {
- return 0;
- }
-
-#if 0
- if (offset>0 && size>1 && (isIdChar(-1) || data[-1]==data[0]))
- {
- if (isIdChar(1) || data[-1]==data[0])
- {
- // avoid processing interal * and _ as cmd_id, or 4*10 as emphasis,
- // also x**2,y*2 should not be processed
- return 0;
- }
- else if (size>2 && data[0]==data[1] && isIdChar(2))
- {
- // avoid processing interal ** and __ such as cmd__id__bla,
- // or 4**10,5**10 as emphasis
- return 0;
- }
- }
-#endif
- char c = data[0];
- int ret;
- if (size>2 && data[1]!=c) // _bla or *bla
- {
- // whitespace cannot follow an opening emphasis
- if (data[1]==' ' || data[1]=='\n' ||
- (ret = processEmphasis1(out, data+1, size-1, c)) == 0)
- {
- return 0;
- }
- return ret+1;
- }
- if (size>3 && data[1]==c && data[2]!=c) // __bla or **bla
- {
- if (data[2]==' ' || data[2]=='\n' ||
- (ret = processEmphasis2(out, data+2, size-2, c)) == 0)
- {
- return 0;
- }
- return ret+2;
- }
- if (size>4 && data[1]==c && data[2]==c && data[3]!=c) // ___bla or ***bla
- {
- if (data[3]==' ' || data[3]=='\n' ||
- (ret = processEmphasis3(out, data+3, size-3, c)) == 0)
- {
- return 0;
- }
- return ret+3;
- }
- return 0;
-}
-
-static int processLink(GrowBuf &out,const char *data,int,int size)
-{
- QCString content;
- QCString link;
- QCString title;
- int contentStart,contentEnd,linkStart,titleStart,titleEnd;
- bool isImageLink = FALSE;
- bool isToc = FALSE;
- int i=1;
- if (data[0]=='!')
- {
- isImageLink = TRUE;
- if (size<2 || data[1]!='[')
- {
- return 0;
- }
- i++;
- }
- contentStart=i;
- int level=1;
- int nl=0;
- // find the matching ]
- while (i<size)
- {
- if (data[i-1]=='\\') // skip escaped characters
- {
- }
- else if (data[i]=='[')
- {
- level++;
- }
- else if (data[i]==']')
- {
- level--;
- if (level<=0) break;
- }
- else if (data[i]=='\n')
- {
- nl++;
- if (nl>1) return 0; // only allow one newline in the content
- }
- i++;
- }
- if (i>=size) return 0; // premature end of comment -> no link
- contentEnd=i;
- convertStringFragment(content,data+contentStart,contentEnd-contentStart);
- //printf("processLink: content={%s}\n",content.data());
- if (!isImageLink && content.isEmpty()) return 0; // no link text
- i++; // skip over ]
-
- // skip whitespace
- while (i<size && data[i]==' ') i++;
- if (i<size && data[i]=='\n') // one newline allowed here
- {
- i++;
- // skip more whitespace
- while (i<size && data[i]==' ') i++;
- }
-
- bool explicitTitle=FALSE;
- if (i<size && data[i]=='(') // inline link
- {
- i++;
- while (i<size && data[i]==' ') i++;
- if (i<size && data[i]=='<') i++;
- linkStart=i;
- nl=0;
- while (i<size && data[i]!='\'' && data[i]!='"' && data[i]!=')')
- {
- if (data[i]=='\n')
- {
- nl++;
- if (nl>1) return 0;
- }
- i++;
- }
- if (i>=size || data[i]=='\n') return 0;
- convertStringFragment(link,data+linkStart,i-linkStart);
- link = link.stripWhiteSpace();
- //printf("processLink: link={%s}\n",link.data());
- if (link.isEmpty()) return 0;
- if (link.at(link.length()-1)=='>') link=link.left(link.length()-1);
-
- // optional title
- if (data[i]=='\'' || data[i]=='"')
- {
- char c = data[i];
- i++;
- titleStart=i;
- nl=0;
- while (i<size && data[i]!=')')
- {
- if (data[i]=='\n')
- {
- if (nl>1) return 0;
- nl++;
- }
- i++;
- }
- if (i>=size)
- {
- return 0;
- }
- titleEnd = i-1;
- // search back for closing marker
- while (titleEnd>titleStart && data[titleEnd]==' ') titleEnd--;
- if (data[titleEnd]==c) // found it
- {
- convertStringFragment(title,data+titleStart,titleEnd-titleStart);
- //printf("processLink: title={%s}\n",title.data());
- }
- else
- {
- return 0;
- }
- }
- i++;
- }
- else if (i<size && data[i]=='[') // reference link
- {
- i++;
- linkStart=i;
- nl=0;
- // find matching ]
- while (i<size && data[i]!=']')
- {
- if (data[i]=='\n')
- {
- nl++;
- if (nl>1) return 0;
- }
- i++;
- }
- if (i>=size) return 0;
- // extract link
- convertStringFragment(link,data+linkStart,i-linkStart);
- //printf("processLink: link={%s}\n",link.data());
- link = link.stripWhiteSpace();
- if (link.isEmpty()) // shortcut link
- {
- link=content;
- }
- // lookup reference
- LinkRef *lr = g_linkRefs.find(link.lower());
- if (lr) // found it
- {
- link = lr->link;
- title = lr->title;
- //printf("processLink: ref: link={%s} title={%s}\n",link.data(),title.data());
- }
- else // reference not found!
- {
- //printf("processLink: ref {%s} do not exist\n",link.lower().data());
- return 0;
- }
- i++;
- }
- else if (i<size && data[i]!=':' && !content.isEmpty()) // minimal link ref notation [some id]
- {
- LinkRef *lr = g_linkRefs.find(content.lower());
- //printf("processLink: minimal link {%s} lr=%p",content.data(),lr);
- if (lr) // found it
- {
- link = lr->link;
- title = lr->title;
- explicitTitle=TRUE;
- i=contentEnd;
- }
- else if (content=="TOC")
- {
- isToc=TRUE;
- i=contentEnd;
- }
- else
- {
- return 0;
- }
- i++;
- }
- else
- {
- return 0;
- }
- static QRegExp re("^[@\\]ref ");
- if (isToc) // special case for [TOC]
- {
- if (g_current) g_current->stat=TRUE;
- }
- else if (isImageLink)
- {
- if (link.find("@ref ")!=-1 || link.find("\\ref ")!=-1)
- // assume doxygen symbol link
- {
- out.addStr("@image html ");
- out.addStr(link.mid(5));
- if (!explicitTitle && !content.isEmpty())
- {
- out.addStr(" \"");
- out.addStr(content);
- out.addStr("\"");
- }
- else if ((content.isEmpty() || explicitTitle) && !title.isEmpty())
- {
- out.addStr(" \"");
- out.addStr(title);
- out.addStr("\"");
- }
- }
- else
- {
- out.addStr("<img src=\"");
- out.addStr(link);
- out.addStr("\" alt=\"");
- out.addStr(content);
- out.addStr("\"");
- if (!title.isEmpty())
- {
- out.addStr(" title=\"");
- out.addStr(substitute(title.simplifyWhiteSpace(),"\"","&quot;"));
- out.addStr("\"");
- }
- out.addStr("/>");
- }
- }
- else
- {
- if (link.find("@ref ")!=-1 || link.find("\\ref ")!=-1)
- // assume doxygen symbol link
- {
- out.addStr(link);
- out.addStr(" \"");
- if (explicitTitle && !title.isEmpty())
- {
- out.addStr(title);
- }
- else
- {
- out.addStr(content);
- }
- out.addStr("\"");
- }
- else if (link.find('/')!=-1 || link.find('.')!=-1 || link.find('#')!=-1)
- { // file/url link
- out.addStr("<a href=\"");
- out.addStr(link);
- out.addStr("\"");
- if (!title.isEmpty())
- {
- out.addStr(" title=\"");
- out.addStr(substitute(title.simplifyWhiteSpace(),"\"","&quot;"));
- out.addStr("\"");
- }
- out.addStr(">");
- out.addStr(content.simplifyWhiteSpace());
- out.addStr("</a>");
- }
- else // avoid link to e.g. F[x](y)
- {
- //printf("no link for '%s'\n",link.data());
- return 0;
- }
- }
- return i;
-}
-
-/** '`' parsing a code span (assuming codespan != 0) */
-static int processCodeSpan(GrowBuf &out, const char *data, int /*offset*/, int size)
-{
- int end, nb = 0, i, f_begin, f_end;
-
- /* counting the number of backticks in the delimiter */
- while (nb<size && data[nb]=='`')
- {
- nb++;
- }
-
- /* finding the next delimiter */
- i = 0;
- int nl=0;
- for (end=nb; end<size && i<nb && nl<2; end++)
- {
- if (data[end]=='`')
- {
- i++;
- }
- else if (data[end]=='\n')
- {
- i=0;
- nl++;
- }
- else
- {
- i=0;
- }
- }
- if (i < nb && end >= size)
- {
- return 0; // no matching delimiter
- }
- if (nl==2) // too many newlines inside the span
- {
- return 0;
- }
-
- // trimming outside whitespaces
- f_begin = nb;
- while (f_begin < end && data[f_begin]==' ')
- {
- f_begin++;
- }
- f_end = end - nb;
- while (f_end > nb && data[f_end-1]==' ')
- {
- f_end--;
- }
-
- if (nb==1) // check for closing ' followed by space within f_begin..f_end
- {
- i=f_begin;
- while (i<f_end-1)
- {
- if (data[i]=='\'' && !isIdChar(i+1)) // reject `some word' and not `it's cool`
- {
- return 0;
- }
- i++;
- }
- }
- //printf("found code span '%s'\n",QCString(data+f_begin).left(f_end-f_begin).data());
-
- /* real code span */
- if (f_begin < f_end)
- {
- QCString codeFragment;
- convertStringFragment(codeFragment,data+f_begin,f_end-f_begin);
- out.addStr("<tt>");
- //out.addStr(convertToHtml(codeFragment,TRUE));
- out.addStr(escapeSpecialChars(codeFragment));
- out.addStr("</tt>");
- }
- return end;
-}
-
-
-static int processSpecialCommand(GrowBuf &out, const char *data, int offset, int size)
-{
- int i=1;
- QCString endBlockName = isBlockCommand(data,offset,size);
- if (!endBlockName.isEmpty())
- {
- int l = endBlockName.length();
- while (i<size-l-1)
- {
- if ((data[i]=='\\' || data[i]=='@') && // command
- data[i-1]!='\\' && data[i-1]!='@') // not escaped
- {
- if (strncmp(&data[i+1],endBlockName,l)==0)
- {
- //printf("found end at %d\n",i);
- out.addStr(data,i+1+l);
- return i+1+l;
- }
- }
- i++;
- }
- }
- if (size>1 && data[0]=='\\')
- {
- char c=data[1];
- if (c=='[' || c==']' || c=='*' || c=='+' || c=='-' ||
- c=='!' || c=='(' || c==')' || c=='.' || c=='`' || c=='_')
- {
- out.addStr(&data[1],1);
- return 2;
- }
- }
- return 0;
-}
-
-static void processInline(GrowBuf &out,const char *data,int size)
-{
- int i=0, end=0;
- action_t action = 0;
- while (i<size)
- {
- while (end<size && ((action=g_actions[(uchar)data[end]])==0)) end++;
- out.addStr(data+i,end-i);
- if (end>=size) break;
- i=end;
- end = action(out,data+i,i,size-i);
- if (!end)
- {
- end=i+1;
- }
- else
- {
- i+=end;
- end=i;
- }
- }
-}
-
-/** returns whether the line is a setext-style hdr underline */
-static int isHeaderline(const char *data, int size)
-{
- int i = 0;
- while (i<size && data[i]==' ') i++;
-
- // test of level 1 header
- if (data[i]=='=')
- {
- while (i<size && data[i]=='=') i++;
- while (i<size && data[i]==' ') i++;
- return (i>=size || data[i]=='\n') ? 1 : 0;
- }
- // test of level 2 header
- if (data[i]=='-')
- {
- while (i<size && data[i]=='-') i++;
- while (i<size && data[i]==' ') i++;
- return (i>=size || data[i]=='\n') ? 2 : 0;
- }
- return 0;
-}
-
-/** returns TRUE if this line starts a block quote */
-static bool isBlockQuote(const char *data,int size,int indent)
-{
- int i = 0;
- while (i<size && data[i]==' ') i++;
- if (i<indent+codeBlockIndent) // could be a quotation
- {
- // count >'s and skip spaces
- int level=0;
- while (i<size && (data[i]=='>' || data[i]==' '))
- {
- if (data[i]=='>') level++;
- i++;
- }
- // last characters should be a space or newline,
- // so a line starting with >= does not match
- return level>0 && i<size && ((data[i-1]==' ') || data[i]=='\n');
- }
- else // too much indentation -> code block
- {
- return FALSE;
- }
- //return i<size && data[i]=='>' && i<indent+codeBlockIndent;
-}
-
-/** returns end of the link ref if this is indeed a link reference. */
-static int isLinkRef(const char *data,int size,
- QCString &refid,QCString &link,QCString &title)
-{
- //printf("isLinkRef data={%s}\n",data);
- // format: start with [some text]:
- int i = 0;
- while (i<size && data[i]==' ') i++;
- if (i>=size || data[i]!='[') return 0;
- i++;
- int refIdStart=i;
- while (i<size && data[i]!='\n' && data[i]!=']') i++;
- if (i>=size || data[i]!=']') return 0;
- convertStringFragment(refid,data+refIdStart,i-refIdStart);
- if (refid.isEmpty()) return 0;
- //printf(" isLinkRef: found refid='%s'\n",refid.data());
- i++;
- if (i>=size || data[i]!=':') return 0;
- i++;
-
- // format: whitespace* \n? whitespace* (<url> | url)
- while (i<size && data[i]==' ') i++;
- if (i<size && data[i]=='\n')
- {
- i++;
- while (i<size && data[i]==' ') i++;
- }
- if (i>=size) return 0;
-
- if (i<size && data[i]=='<') i++;
- int linkStart=i;
- while (i<size && data[i]!=' ' && data[i]!='\n') i++;
- int linkEnd=i;
- if (i<size && data[i]=='>') i++;
- if (linkStart==linkEnd) return 0; // empty link
- convertStringFragment(link,data+linkStart,linkEnd-linkStart);
- //printf(" isLinkRef: found link='%s'\n",link.data());
- if (link=="@ref" || link=="\\ref")
- {
- int argStart=i;
- while (i<size && data[i]!='\n' && data[i]!='"') i++;
- QCString refArg;
- convertStringFragment(refArg,data+argStart,i-argStart);
- link+=refArg;
- }
-
- title.resize(0);
-
- // format: (whitespace* \n? whitespace* ( 'title' | "title" | (title) ))?
- int eol=0;
- while (i<size && data[i]==' ') i++;
- if (i<size && data[i]=='\n')
- {
- i++;
- eol=i;
- while (i<size && data[i]==' ') i++;
- }
- if (i>=size)
- {
- //printf("end of isLinkRef while looking for title! i=%d\n",i);
- return i; // end of buffer while looking for the optional title
- }
-
- char c = data[i];
- if (c=='\'' || c=='"' || c=='(') // optional title present?
- {
- //printf(" start of title found! char='%c'\n",c);
- i++;
- if (c=='(') c=')'; // replace c by end character
- int titleStart=i;
- // search for end of the line
- while (i<size && data[i]!='\n') i++;
-
- // search back to matching character
- int end=i-1;
- while (end>titleStart && data[end]!=c) end--;
- if (end>titleStart)
- {
- convertStringFragment(title,data+titleStart,end-titleStart);
- }
- //printf(" title found: '%s'\n",title.data());
- }
- while (i<size && data[i]==' ') i++;
- //printf("end of isLinkRef: i=%d size=%d data[i]='%c' eol=%d\n",
- // i,size,data[i],eol);
- if (i>=size) return i; // end of buffer while ref id was found
- else if (data[i]=='\n') return i+1; // end of line while ref id was found
- else if (eol) return eol; // no optional title found
- return 0; // invalid link ref
-}
-
-static int isHRuler(const char *data,int size)
-{
- int i=0;
- if (size>0 && data[size-1]=='\n') size--; // ignore newline character
- while (i<size && data[i]==' ') i++;
- if (i>=size) return 0; // empty line
- char c=data[i];
- if (c!='*' && c!='-' && c!='_')
- {
- return 0; // not a hrule character
- }
- int n=0;
- while (i<size)
- {
- if (data[i]==c)
- {
- n++; // count rule character
- }
- else if (data[i]!=' ')
- {
- return 0; // line contains non hruler characters
- }
- i++;
- }
- return n>=3; // at least 3 characters needed for a hruler
-}
-
-static QCString extractTitleId(QCString &title)
-{
- //static QRegExp r1("^[a-z_A-Z][a-z_A-Z0-9\\-]*:");
- static QRegExp r2("\\{#[a-z_A-Z][a-z_A-Z0-9\\-]*\\}$");
- int l=0;
- int i = r2.match(title,0,&l);
- if (i!=-1) // found {#id} style id
- {
- QCString id = title.mid(i+2,l-3);
- title = title.left(i)+title.mid(i+l);
- //printf("found id='%s' title='%s'\n",id.data(),title.data());
- return id;
- }
- //i = r1.match(title,0,&l);
- //if (i!=-1) // found id: style id
- //{
- // QCString id = title.mid(i,l-1);
- // title = title.left(i)+title.mid(i+l);
- // //printf("found id='%s' title='%s'\n",id.data(),title.data());
- // return id;
- //}
- //printf("no id found in title '%s'\n",title.data());
- return "";
-}
-
-
-static int isAtxHeader(const char *data,int size,
- QCString &header,QCString &id)
-{
- int i = 0, end;
- int level = 0, blanks=0;
-
- // find start of header text and determine heading level
- while (i<size && data[i]==' ') i++;
- if (i>=size || data[i]!='#')
- {
- return 0;
- }
- while (i<size && level<6 && data[i]=='#') i++,level++;
- while (i<size && data[i]==' ') i++,blanks++;
- if (level==1 && blanks==0)
- {
- return 0; // special case to prevent #someid seen as a header (see bug 671395)
- }
-
- // find end of header text
- end=i;
- while (end<size && data[end]!='\n') end++;
- while (end>i && (data[end-1]=='#' || data[end-1]==' ')) end--;
-
- // store result
- convertStringFragment(header,data+i,end-i);
- id = extractTitleId(header);
- if (!id.isEmpty()) // strip #'s between title and id
- {
- i=header.length()-1;
- while (i>=0 && (header.at(i)=='#' || header.at(i)==' ')) i--;
- header=header.left(i+1);
- }
-
- return level;
-}
-
-static int isEmptyLine(const char *data,int size)
-{
- int i=0;
- while (i<size)
- {
- if (data[i]=='\n') return TRUE;
- if (data[i]!=' ') return FALSE;
- i++;
- }
- return TRUE;
-}
-
-#define isLiTag(i) \
- (data[(i)]=='<' && \
- (data[(i)+1]=='l' || data[(i)+1]=='L') && \
- (data[(i)+2]=='i' || data[(i)+2]=='I') && \
- (data[(i)+3]=='>'))
-
-// compute the indent from the start of the input, excluding list markers
-// such as -, -#, *, +, 1., and <li>
-static int computeIndentExcludingListMarkers(const char *data,int size)
-{
- int i=0;
- int indent=0;
- bool isDigit=FALSE;
- bool isLi=FALSE;
- bool listMarkerSkipped=FALSE;
- while (i<size &&
- (data[i]==' ' || // space
- (!listMarkerSkipped && // first list marker
- (data[i]=='+' || data[i]=='-' || data[i]=='*' || // unordered list char
- (data[i]=='#' && i>0 && data[i-1]=='-') || // -# item
- (isDigit=(data[i]>='1' && data[i]<='9')) || // ordered list marker?
- (isLi=(i<size-3 && isLiTag(i))) // <li> tag
- )
- )
- )
- )
- {
- if (isDigit) // skip over ordered list marker '10. '
- {
- int j=i+1;
- while (j<size && ((data[j]>='0' && data[j]<='9') || data[j]=='.'))
- {
- if (data[j]=='.') // should be end of the list marker
- {
- if (j<size-1 && data[j+1]==' ') // valid list marker
- {
- listMarkerSkipped=TRUE;
- indent+=j+1-i;
- i=j+1;
- break;
- }
- else // not a list marker
- {
- break;
- }
- }
- j++;
- }
- }
- else if (isLi)
- {
- i+=3; // skip over <li>
- indent+=3;
- listMarkerSkipped=TRUE;
- }
- else if (data[i]=='-' && i<size-2 && data[i+1]=='#' && data[i+2]==' ')
- { // case "-# "
- listMarkerSkipped=TRUE; // only a single list marker is accepted
- i++; // skip over #
- indent++;
- }
- else if (data[i]!=' ' && i<size-1 && data[i+1]==' ')
- { // case "- " or "+ " or "* "
- listMarkerSkipped=TRUE; // only a single list marker is accepted
- }
- if (data[i]!=' ' && !listMarkerSkipped)
- { // end of indent
- break;
- }
- indent++,i++;
- }
- //printf("{%s}->%d\n",QCString(data).left(size).data(),indent);
- return indent;
-}
-
-static bool isFencedCodeBlock(const char *data,int size,int refIndent,
- QCString &lang,int &start,int &end,int &offset)
-{
- // rules: at least 3 ~~~, end of the block same amount of ~~~'s, otherwise
- // return FALSE
- int i=0;
- int indent=0;
- int startTildes=0;
- while (i<size && data[i]==' ') indent++,i++;
- if (indent>=refIndent+4) return FALSE; // part of code block
- while (i<size && data[i]=='~') startTildes++,i++;
- if (startTildes<3) return FALSE; // not enough tildes
- if (i<size && data[i]=='{') i++; // skip over optional {
- int startLang=i;
- while (i<size && (data[i]!='\n' && data[i]!='}' && data[i]!=' ')) i++;
- convertStringFragment(lang,data+startLang,i-startLang);
- while (i<size && data[i]!='\n') i++; // proceed to the end of the line
- start=i;
- while (i<size)
- {
- if (data[i]=='~')
- {
- end=i-1;
- int endTildes=0;
- while (i<size && data[i]=='~') endTildes++,i++;
- while (i<size && data[i]==' ') i++;
- if (i==size || data[i]=='\n')
- {
- offset=i;
- return endTildes==startTildes;
- }
- }
- i++;
- }
- return FALSE;
-}
-
-static bool isCodeBlock(const char *data,int offset,int size,int &indent)
-{
- //printf("<isCodeBlock(offset=%d,size=%d,indent=%d)\n",offset,size,indent);
- // determine the indent of this line
- int i=0;
- int indent0=0;
- while (i<size && data[i]==' ') indent0++,i++;
-
- if (indent0<codeBlockIndent)
- {
- //printf(">isCodeBlock: line is not indented enough %d<4\n",indent0);
- return FALSE;
- }
-
- i=offset;
- int nl=0;
- int nl_pos[3];
- // search back 3 lines and remember the start of lines -1 and -2
- while (i>0 && nl<3)
- {
- if (data[i-offset-1]=='\n') nl_pos[nl++]=i-offset;
- i--;
- }
-
- // if there are only 2 preceding lines, then line -2 starts at -offset
- if (i==0 && nl==2) nl_pos[nl++]=-offset;
- //printf(" nl=%d\n",nl);
-
- if (nl==3) // we have at least 2 preceding lines
- {
- //printf(" positions: nl_pos=[%d,%d,%d] line[-2]='%s' line[-1]='%s'\n",
- // nl_pos[0],nl_pos[1],nl_pos[2],
- // QCString(data+nl_pos[1]).left(nl_pos[0]-nl_pos[1]-1).data(),
- // QCString(data+nl_pos[2]).left(nl_pos[1]-nl_pos[2]-1).data());
-
- // check that line -1 is empty
- if (!isEmptyLine(data+nl_pos[1],nl_pos[0]-nl_pos[1]-1))
- {
- return FALSE;
- }
-
- // determine the indent of line -2
- indent=computeIndentExcludingListMarkers(data+nl_pos[2],nl_pos[1]-nl_pos[2]);
-
- //printf(">isCodeBlock local_indent %d>=%d+4=%d\n",
- // indent0,indent2,indent0>=indent2+4);
- // if the difference is >4 spaces -> code block
- return indent0>=indent+codeBlockIndent;
- }
- else // not enough lines to determine the relative indent, use global indent
- {
- // check that line -1 is empty
- if (nl==1 && !isEmptyLine(data-offset,offset-1))
- {
- return FALSE;
- }
- //printf(">isCodeBlock global indent %d>=%d+4=%d\n",
- // indent0,indent,indent0>=indent+4);
- return indent0>=indent+codeBlockIndent;
- }
-}
-
-/** Finds the location of the table's contains in the string \a data.
- * Only one line will be inspected.
- * @param[in] data pointer to the string buffer.
- * @param[in] size the size of the buffer.
- * @param[out] start offset of the first character of the table content
- * @param[out] end offset of the last character of the table content
- * @param[out] columns number of table columns found
- * @returns The offset until the next line in the buffer.
- */
-int findTableColumns(const char *data,int size,int &start,int &end,int &columns)
-{
- int i=0;
- int eol;
- // find start character of the table line
- while (i<size && data[i]==' ') i++;
- if (i<size && data[i]=='|') i++; // leading | does not count
- start = i;
-
- // find end character of the table line
- while (i<size && data[i]!='\n') i++;
- eol=i+1;
- i--;
- while (i>0 && data[i]==' ') i--;
- if (i>0 && data[i]=='|') i--; // trailing | does not count
- end = i;
-
- // count columns between start and end
- columns=1;
- if (end>start)
- {
- i=start;
- while (i<=end)
- {
- if (data[i]=='|' && (i==0 || data[i-1]!='\\')) columns++;
- i++;
- }
- }
- //printf("findTableColumns(start=%d,end=%d,columns=%d) eol=%d\n",
- // start,end,columns,eol);
- return eol;
-}
-
-/** Returns TRUE iff data points to the start of a table block */
-static bool isTableBlock(const char *data,int size)
-{
- int cc0,start,end;
-
- // the first line should have at least two columns separated by '|'
- int i = findTableColumns(data,size,start,end,cc0);
- if (i>=size || cc0<2)
- {
- //printf("isTableBlock: no |'s in the header\n");
- return FALSE;
- }
-
- int cc1;
- int ret = findTableColumns(data+i,size-i,start,end,cc1);
- int j=i+start;
- // separator line should consist of |, - and : and spaces only
- while (j<=end+i)
- {
- if (data[j]!=':' && data[j]!='-' && data[j]!='|' && data[j]!=' ')
- {
- //printf("isTableBlock: invalid character '%c'\n",data[j]);
- return FALSE; // invalid characters in table separator
- }
- j++;
- }
- if (cc1!=cc0) // number of columns should be same as previous line
- {
- return FALSE;
- }
-
- i+=ret; // goto next line
- int cc2;
- ret = findTableColumns(data+i,size-i,start,end,cc2);
-
- //printf("isTableBlock: %d\n",cc1==cc2);
- return cc1==cc2;
-}
-
-static int writeTableBlock(GrowBuf &out,const char *data,int size)
-{
- int i=0,j,k;
- int columns,start,end,cc;
-
- i = findTableColumns(data,size,start,end,columns);
-
- out.addStr("<table>");
-
- // write table header, in range [start..end]
- out.addStr("<tr>");
-
- int headerStart = start;
- int headerEnd = end;
-
- // read cell alignments
- int ret = findTableColumns(data+i,size-i,start,end,cc);
- k=0;
- Alignment *columnAlignment = new Alignment[columns];
-
- bool leftMarker=FALSE,rightMarker=FALSE;
- bool startFound=FALSE;
- j=start+i;
- while (j<=end+i)
- {
- if (!startFound)
- {
- if (data[j]==':') { leftMarker=TRUE; startFound=TRUE; }
- if (data[j]=='-') startFound=TRUE;
- //printf(" data[%d]=%c startFound=%d\n",j,data[j],startFound);
- }
- if (data[j]=='-') rightMarker=FALSE;
- else if (data[j]==':') rightMarker=TRUE;
- if (j<=end+i && (data[j]=='|' && (j==0 || data[j-1]!='\\')))
- {
- if (k<columns)
- {
- columnAlignment[k] = markersToAlignment(leftMarker,rightMarker);
- //printf("column[%d] alignment=%d\n",k,columnAlignment[k]);
- leftMarker=FALSE;
- rightMarker=FALSE;
- startFound=FALSE;
- }
- k++;
- }
- j++;
- }
- if (k<columns)
- {
- columnAlignment[k] = markersToAlignment(leftMarker,rightMarker);
- //printf("column[%d] alignment=%d\n",k,columnAlignment[k]);
- }
- // proceed to next line
- i+=ret;
-
- int m=headerStart;
- for (k=0;k<columns;k++)
- {
- out.addStr("<th");
- switch (columnAlignment[k])
- {
- case AlignLeft: out.addStr(" align=left"); break;
- case AlignRight: out.addStr(" align=right"); break;
- case AlignCenter: out.addStr(" align=center"); break;
- case AlignNone: break;
- }
- out.addStr(">");
- while (m<=headerEnd && (data[m]!='|' || (m>0 && data[m-1]=='\\')))
- {
- out.addChar(data[m++]);
- }
- m++;
- }
-
- // write table cells
- while (i<size)
- {
- int ret = findTableColumns(data+i,size-i,start,end,cc);
- //printf("findTableColumns cc=%d\n",cc);
- if (cc!=columns) break; // end of table
-
- out.addStr("<tr>");
- j=start+i;
- int columnStart=j;
- k=0;
- while (j<=end+i)
- {
- if (j==columnStart)
- {
- out.addStr("<td");
- switch (columnAlignment[k])
- {
- case AlignLeft: out.addStr(" align=left"); break;
- case AlignRight: out.addStr(" align=right"); break;
- case AlignCenter: out.addStr(" align=center"); break;
- case AlignNone: break;
- }
- out.addStr(">");
- }
- if (j<=end+i && (data[j]=='|' && (j==0 || data[j-1]!='\\')))
- {
- columnStart=j+1;
- k++;
- }
- else
- {
- out.addChar(data[j]);
- }
- j++;
- }
- out.addChar('\n');
-
- // proceed to next line
- i+=ret;
- }
-
- out.addStr("</table>\n");
-
- delete[] columnAlignment;
- return i;
-}
-
-
-void writeOneLineHeaderOrRuler(GrowBuf &out,const char *data,int size)
-{
- int level;
- QCString header;
- QCString id;
- if (isHRuler(data,size))
- {
- out.addStr("<hr>\n");
- }
- else if ((level=isAtxHeader(data,size,header,id)))
- {
- QCString hTag;
- if (level<5 && !id.isEmpty())
- {
- SectionInfo::SectionType type = SectionInfo::Anchor;
- switch(level)
- {
- case 1: out.addStr("@section ");
- type=SectionInfo::Section;
- break;
- case 2: out.addStr("@subsection ");
- type=SectionInfo::Subsection;
- break;
- case 3: out.addStr("@subsubsection ");
- type=SectionInfo::Subsubsection;
- break;
- default: out.addStr("@paragraph ");
- type=SectionInfo::Paragraph;
- break;
- }
- out.addStr(id);
- out.addStr(" ");
- out.addStr(header);
- SectionInfo *si = new SectionInfo(g_fileName,id,header,type,level);
- if (g_current)
- {
- g_current->anchors->append(si);
- }
- Doxygen::sectionDict.append(header,si);
- }
- else
- {
- if (!id.isEmpty())
- {
- out.addStr("\\anchor "+id+"\n");
- }
- hTag.sprintf("h%d",level);
- out.addStr("<"+hTag+">");
- out.addStr(header);
- out.addStr("</"+hTag+">\n");
- }
- }
- else // nothing interesting -> just output the line
- {
- out.addStr(data,size);
- }
-}
-
-static int writeBlockQuote(GrowBuf &out,const char *data,int size)
-{
- int l;
- int i=0;
- int curLevel=0;
- int end=0;
- while (i<size)
- {
- // find end of this line
- end=i+1;
- while (end<size && data[end-1]!='\n') end++;
- int j=i;
- int level=0;
- int indent=i;
- // compute the quoting level
- while (j<end && (data[j]==' ' || data[j]=='>'))
- {
- if (data[j]=='>') { level++; indent=j+1; }
- else if (j>0 && data[j-1]=='>') indent=j+1;
- j++;
- }
- if (j>0 && data[j-1]=='>') // disqualify last > if not followed by space
- {
- indent--;
- j--;
- }
- if (level>curLevel) // quote level increased => add start markers
- {
- for (l=curLevel;l<level;l++)
- {
- out.addStr("<blockquote>\n");
- }
- }
- else if (level<curLevel) // quote level descreased => add end markers
- {
- for (l=level;l<curLevel;l++)
- {
- out.addStr("\n</blockquote>\n");
- }
- }
- curLevel=level;
- if (level==0) break; // end of quote block
- // copy line without quotation marks
- out.addStr(data+indent,end-indent);
- // proceed with next line
- i=end;
- }
- // end of comment within blockquote => add end markers
- for (l=0;l<curLevel;l++)
- {
- out.addStr("\n</blockquote>\n");
- }
- return i;
-}
-
-static int writeCodeBlock(GrowBuf &out,const char *data,int size,int refIndent)
-{
- int i=0,end;
- //printf("writeCodeBlock: data={%s}\n",QCString(data).left(size).data());
- out.addStr("@verbatim\n");
- while (i<size)
- {
- // find end of this line
- end=i+1;
- while (end<size && data[end-1]!='\n') end++;
- int j=i;
- int indent=0;
- while (j<end && data[j]==' ') j++,indent++;
- //printf("j=%d end=%d indent=%d refIndent=%d data={%s}\n",j,end,indent,refIndent,QCString(data+i).left(end-i-1).data());
- if (j==end-1) // empty line
- {
- // add empty line
- out.addStr("\n");
- i=end;
- }
- else if (indent>=refIndent+codeBlockIndent) // enough indent to contine the code block
- {
- // add code line minus the indent
- out.addStr(data+i+refIndent+codeBlockIndent,end-i-refIndent-codeBlockIndent);
- i=end;
- }
- else // end of code block
- {
- break;
- }
- }
- out.addStr("@endverbatim\n");
- //printf("i=%d\n",i);
- return i;
-}
-
-// start searching for the end of the line start at offset \a i
-// keeping track of possible blocks that need to to skipped.
-static void findEndOfLine(GrowBuf &out,const char *data,int size,
- int &pi,int&i,int &end)
-{
- // find end of the line
- int nb=0;
- end=i+1;
- while (end<size && data[end-1]!='\n')
- {
- // while looking for the end of the line we might encounter a block
- // that needs to be passed unprocessed.
- if ((data[end-1]=='\\' || data[end-1]=='@') && // command
- (end<=1 || (data[end-2]!='\\' && data[end-2]!='@')) // not escaped
- )
- {
- QCString endBlockName = isBlockCommand(data+end-1,end-1,size-(end-1));
- if (!endBlockName.isEmpty())
- {
- int l = endBlockName.length();
- for (;end<size-l;end++) // search for end of block marker
- {
- if ((data[end]=='\\' || data[end]=='@') &&
- data[end-1]!='\\' && data[end-1]!='@'
- )
- {
- if (strncmp(&data[end+1],endBlockName,l)==0)
- {
- if (pi!=-1) // output previous line if available
- {
- //printf("feol out={%s}\n",QCString(data+pi).left(i-pi).data());
- out.addStr(data+pi,i-pi);
- }
- // found end marker, skip over this block
- //printf("feol.block out={%s}\n",QCString(data+i).left(end+l+1-i).data());
- out.addStr(data+i,end+l+1-i);
- pi=-1;
- i=end+l+1; // continue after block
- end=i+1;
- break;
- }
- }
- }
- }
- else
- {
- end++;
- }
- }
- else if (nb==0 && data[end-1]=='<' && end<size-6 &&
- (end<=1 || (data[end-2]!='\\' && data[end-2]!='@'))
- )
- {
- if (tolower(data[end])=='p' && tolower(data[end+1])=='r' &&
- tolower(data[end+2])=='e' && data[end+3]=='>') // <pre> tag
- {
- if (pi!=-1) // output previous line if available
- {
- out.addStr(data+pi,i-pi);
- }
- // output part until <pre>
- out.addStr(data+i,end-1-i);
- // output part until </pre>
- i = end-1 + processHtmlTag(out,data+end-1,end-1,size-end+1);
- pi=-1;
- end = i+1;
- break;
- }
- else
- {
- end++;
- }
- }
- else if (nb==0 && data[end-1]=='`')
- {
- while (end<size && data[end-1]=='`') end++,nb++;
- }
- else if (nb>0 && data[end-1]=='`')
- {
- int enb=0;
- while (end<size && data[end-1]=='`') end++,enb++;
- if (enb==nb) nb=0;
- }
- else
- {
- end++;
- }
- }
- //printf("findEndOfLine pi=%d i=%d end=%d {%s}\n",pi,i,end,QCString(data+i).left(end-i).data());
-}
-
-static QCString processQuotations(const QCString &s,int refIndent)
-{
- GrowBuf out;
- const char *data = s.data();
- int size = s.length();
- int i=0,end=0,pi=-1;
- while (i<size)
- {
- findEndOfLine(out,data,size,pi,i,end);
- // line is now found at [i..end)
-
- if (pi!=-1)
- {
- if (isBlockQuote(data+pi,i-pi,refIndent))
- {
- i = pi+writeBlockQuote(out,data+pi,size-pi);
- pi=-1;
- end=i+1;
- continue;
- }
- else
- {
- //printf("quote out={%s}\n",QCString(data+pi).left(i-pi).data());
- out.addStr(data+pi,i-pi);
- }
- }
- pi=i;
- i=end;
- }
- if (pi!=-1 && pi<size) // deal with the last line
- {
- if (isBlockQuote(data+pi,size-pi,refIndent))
- {
- writeBlockQuote(out,data+pi,size-pi);
- }
- else
- {
- out.addStr(data+pi,size-pi);
- }
- }
- out.addChar(0);
-
- //printf("Process quotations\n---- input ----\n%s\n---- output ----\n%s\n------------\n",
- // s.data(),out.get());
-
- return out.get();
-}
-
-static QCString processBlocks(const QCString &s,int indent)
-{
- GrowBuf out;
- const char *data = s.data();
- int size = s.length();
- int i=0,end=0,pi=-1,ref,level;
- QCString id,link,title;
- int blockIndent = indent;
-
- // get indent for the first line
- end = i+1;
- int sp=0;
- while (end<size && data[end-1]!='\n')
- {
- if (data[end-1]==' ') sp++;
- end++;
- }
-
- // special case when the documentation starts with a code block
- // since the first line is skipped when looking for a code block later on.
- if (end>codeBlockIndent && isCodeBlock(data,0,end,blockIndent))
- {
- i=writeCodeBlock(out,data,size,blockIndent);
- end=i+1;
- pi=-1;
- }
-
- // process each line
- while (i<size)
- {
- findEndOfLine(out,data,size,pi,i,end);
- // line is now found at [i..end)
-
- //printf("findEndOfLine: pi=%d i=%d end=%d\n",pi,i,end);
-
- if (pi!=-1)
- {
- int blockStart,blockEnd,blockOffset;
- QCString lang;
- blockIndent = indent;
- //printf("isHeaderLine(%s)=%d\n",QCString(data+i).left(size-i).data(),level);
- if ((level=isHeaderline(data+i,size-i))>0)
- {
- //printf("Found header at %d-%d\n",i,end);
- while (pi<size && data[pi]==' ') pi++;
- QCString header,id;
- convertStringFragment(header,data+pi,i-pi-1);
- id = extractTitleId(header);
- if (!header.isEmpty())
- {
- if (!id.isEmpty())
- {
- out.addStr(level==1?"@section ":"@subsection ");
- out.addStr(id);
- out.addStr(" ");
- out.addStr(header);
- SectionInfo *si = new SectionInfo(g_fileName,id,header,
- level==1 ? SectionInfo::Section : SectionInfo::Subsection,level);
- if (g_current)
- {
- g_current->anchors->append(si);
- }
- Doxygen::sectionDict.append(header,si);
- }
- else
- {
- out.addStr(level==1?"<h1>":"<h2>");
- out.addStr(header);
- out.addStr(level==1?"</h1>\n":"</h2>\n");
- }
- }
- else
- {
- out.addStr("<hr>\n");
- }
- pi=-1;
- i=end;
- end=i+1;
- continue;
- }
- else if ((ref=isLinkRef(data+pi,size-pi,id,link,title)))
- {
- //printf("found link ref: id='%s' link='%s' title='%s'\n",
- // id.data(),link.data(),title.data());
- g_linkRefs.insert(id.lower(),new LinkRef(link,title));
- i=ref+pi;
- pi=-1;
- end=i+1;
- }
- else if (isFencedCodeBlock(data+pi,size-pi,indent,lang,blockStart,blockEnd,blockOffset))
- {
- //printf("Found FencedCodeBlock lang='%s' start=%d end=%d code={%s}\n",
- // lang.data(),blockStart,blockEnd,QCString(data+pi+blockStart).left(blockEnd-blockStart).data());
- if (!lang.isEmpty() && lang.at(0)=='.') lang=lang.mid(1);
- if (lang.isEmpty()) out.addStr("@verbatim"); else out.addStr("@code");
- if (!lang.isEmpty())
- {
- out.addStr("{"+lang+"}");
- }
- out.addStr(data+pi+blockStart,blockEnd-blockStart);
- out.addStr("\n");
- if (lang.isEmpty()) out.addStr("@endverbatim"); else out.addStr("@endcode");
- i=pi+blockOffset;
- pi=-1;
- end=i+1;
- continue;
- }
- else if (isCodeBlock(data+i,i,end-i,blockIndent))
- {
- // skip previous line (it is empty anyway)
- i+=writeCodeBlock(out,data+i,size-i,blockIndent);
- pi=-1;
- end=i+1;
- continue;
- }
- else if (isTableBlock(data+pi,size-pi))
- {
- i=pi+writeTableBlock(out,data+pi,size-pi);
- pi=-1;
- end=i+1;
- continue;
- }
- else
- {
- writeOneLineHeaderOrRuler(out,data+pi,i-pi);
- }
- }
- pi=i;
- i=end;
- }
- //printf("last line %d size=%d\n",i,size);
- if (pi!=-1 && pi<size) // deal with the last line
- {
- if (isLinkRef(data+pi,size-pi,id,link,title))
- {
- //printf("found link ref: id='%s' link='%s' title='%s'\n",
- // id.data(),link.data(),title.data());
- g_linkRefs.insert(id,new LinkRef(link,title));
- }
- else
- {
- writeOneLineHeaderOrRuler(out,data+pi,size-pi);
- }
- }
-
- out.addChar(0);
- return out.get();
-}
-
-static QCString extractPageTitle(QCString &docs,QCString &id)
-{
- // first first non-empty line
- QCString title;
- const char *data = docs.data();
- int i=0;
- int size=docs.size();
- while (i<size && (data[i]==' ' || data[i]=='\n')) i++;
- if (i>=size) return "";
- int end1=i+1;
- while (end1<size && data[end1-1]!='\n') end1++;
- //printf("i=%d end1=%d size=%d line='%s'\n",i,end1,size,docs.mid(i,end1-i).data());
- // first line from i..end1
- if (end1<size)
- {
- // second line form end1..end2
- int end2=end1+1;
- while (end2<size && data[end2-1]!='\n') end2++;
- if (isHeaderline(data+end1,size-end1))
- {
- convertStringFragment(title,data+i,end1-i-1);
- docs=docs.mid(end2);
- id = extractTitleId(title);
- //printf("extractPageTitle(title='%s' docs='%s' id='%s')\n",title.data(),docs.data(),id.data());
- return title;
- }
- }
- if (i<end1 && isAtxHeader(data+i,end1-i,title,id)>0)
- {
- docs=docs.mid(end1);
- }
- id = extractTitleId(title);
- //printf("extractPageTitle(title='%s' docs='%s' id='%s')\n",title.data(),docs.data(),id.data());
- return title;
-}
-
-static QCString detab(const QCString &s,int &refIndent)
-{
- static int tabSize = Config_getInt("TAB_SIZE");
- GrowBuf out;
- int size = s.length();
- const char *data = s.data();
- int i=0;
- int col=0;
- const int maxIndent=1000000; // value representing infinity
- int minIndent=maxIndent;
- while (i<size)
- {
- char c = data[i++];
- switch(c)
- {
- case '\t': // expand tab
- {
- int stop = tabSize - (col%tabSize);
- col+=stop;
- while (stop--) out.addChar(' ');
- }
- break;
- case '\n': // reset colomn counter
- out.addChar(c);
- col=0;
- break;
- case ' ': // increment column counter
- out.addChar(c);
- col++;
- break;
- default: // non-whitespace => update minIndent
- out.addChar(c);
- if (col<minIndent) minIndent=col;
- col++;
- }
- }
- if (minIndent!=maxIndent) refIndent=minIndent; else refIndent=0;
- out.addChar(0);
- return out.get();
-}
-
-//---------------------------------------------------------------------------
-
-QCString processMarkdown(const QCString &fileName,Entry *e,const QCString &input)
-{
- g_linkRefs.setAutoDelete(TRUE);
- g_linkRefs.clear();
- g_current = e;
- g_fileName = fileName;
- static GrowBuf out;
- if (input.isEmpty()) return input;
- out.clear();
- int refIndent;
- // for replace tabs by spaces
- QCString s = detab(input,refIndent);
- // then process quotation blocks (as these may contain other blocks)
- s = processQuotations(s,refIndent);
- //printf("======== Quotations =========\n---- output -----\n%s\n---------\n",s.data());
- // then process block items (headers, rules, and code blocks, references)
- s = processBlocks(s,refIndent);
- //printf("======== Blocks =========\n---- output -----\n%s\n---------\n",s.data());
- int size=s.length();
- g_actions['_']=processEmphasis;
- g_actions['*']=processEmphasis;
- g_actions['`']=processCodeSpan;
- g_actions['\\']=processSpecialCommand;
- g_actions['@']=processSpecialCommand;
- g_actions['[']=processLink;
- g_actions['!']=processLink;
- g_actions['<']=processHtmlTag;
- // finally process the inline markup (links, emphasis and code spans)
- processInline(out,s,size);
- out.addChar(0);
- Debug::print(Debug::Markdown,0,"======== Markdown =========\n---- input ------- \n%s\n---- output -----\n%s\n---------\n",input.data(),out.get());
- return out.get();
-}
-
-//---------------------------------------------------------------------------
-
-void MarkdownFileParser::parseInput(const char *fileName,
- const char *fileBuf,
- Entry *root)
-{
- Entry *current = new Entry;
- current->lang = SrcLangExt_Markdown;
- QCString docs = fileBuf;
- QCString id;
- QCString title=extractPageTitle(docs,id).stripWhiteSpace();
- QCString baseName = substitute(QFileInfo(fileName).baseName().utf8()," ","_");
- if (id.isEmpty()) id = "md_"+baseName;
- if (title.isEmpty()) title = baseName;
- if (id=="mainpage" || id=="index")
- {
- docs.prepend("@mainpage "+title+"\n");
- }
- else
- {
- docs.prepend("@page "+id+" "+title+"\n");
- }
- int lineNr=1;
- int position=0;
-
- // even without markdown support enabled, we still
- // parse markdown files as such
- bool markdownEnabled = Doxygen::markdownSupport;
- Doxygen::markdownSupport = TRUE;
-
- bool needsEntry;
- Protection prot;
- while (parseCommentBlock(
- this,
- current,
- docs,
- fileName,
- lineNr,
- FALSE, // isBrief
- FALSE, // javadoc autobrief
- FALSE, // inBodyDocs
- prot, // protection
- position,
- needsEntry))
- {
- if (needsEntry)
- {
- QCString docFile = current->docFile;
- root->addSubEntry(current);
- current = new Entry;
- current->lang = SrcLangExt_Markdown;
- current->docFile = docFile;
- current->docLine = lineNr;
- }
- }
- if (needsEntry)
- {
- root->addSubEntry(current);
- }
-
- // restore setting
- Doxygen::markdownSupport = markdownEnabled;
-}
-
-void MarkdownFileParser::parseCode(CodeOutputInterface &codeOutIntf,
- const char *scopeName,
- const QCString &input,
- bool isExampleBlock,
- const char *exampleName,
- FileDef *fileDef,
- int startLine,
- int endLine,
- bool inlineFragment,
- MemberDef *memberDef,
- bool showLineNumbers
- )
-{
- ParserInterface *pIntf = Doxygen::parserManager->getParser("*.cpp");
- if (pIntf!=this)
- {
- pIntf->parseCode(
- codeOutIntf,scopeName,input,isExampleBlock,exampleName,
- fileDef,startLine,endLine,inlineFragment,memberDef,showLineNumbers);
- }
-}
-
-void MarkdownFileParser::resetCodeParserState()
-{
- ParserInterface *pIntf = Doxygen::parserManager->getParser("*.cpp");
- if (pIntf!=this)
- {
- pIntf->resetCodeParserState();
- }
-}
-
-void MarkdownFileParser::parsePrototype(const char *text)
-{
- ParserInterface *pIntf = Doxygen::parserManager->getParser("*.cpp");
- if (pIntf!=this)
- {
- pIntf->parsePrototype(text);
- }
-}
-
diff --git a/trunk/src/markdown.h b/trunk/src/markdown.h
deleted file mode 100644
index bff1100..0000000
--- a/trunk/src/markdown.h
+++ /dev/null
@@ -1,54 +0,0 @@
-/******************************************************************************
- *
- * Copyright (C) 1997-2012 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.
- *
- */
-
-#ifndef MARKDOWN_H
-#define MARKDOWN_H
-
-#include <qcstring.h>
-#include "parserintf.h"
-
-class Entry;
-
-/** processes string \a s and converts markdown into doxygen/html commands. */
-QCString processMarkdown(const QCString &fileName,Entry *e,const QCString &s);
-
-class MarkdownFileParser : public ParserInterface
-{
- public:
- virtual ~MarkdownFileParser() {}
- void parseInput(const char *fileName,
- const char *fileBuf,
- Entry *root);
- bool needsPreprocessing(const QCString &) { return FALSE; }
- void parseCode(CodeOutputInterface &codeOutIntf,
- const char *scopeName,
- const QCString &input,
- bool isExampleBlock,
- const char *exampleName=0,
- FileDef *fileDef=0,
- int startLine=-1,
- int endLine=-1,
- bool inlineFragment=FALSE,
- MemberDef *memberDef=0,
- bool showLineNumbers=TRUE
- );
- void resetCodeParserState();
- void parsePrototype(const char *text);
-};
-
-
-
-
-#endif
diff --git a/trunk/src/marshal.cpp b/trunk/src/marshal.cpp
deleted file mode 100644
index 3ef97b8..0000000
--- a/trunk/src/marshal.cpp
+++ /dev/null
@@ -1,830 +0,0 @@
-#include <qfile.h>
-#include <assert.h>
-
-#include "sortdict.h"
-#include "marshal.h"
-#include "entry.h"
-#include "section.h"
-#include "memberlist.h"
-#include "definition.h"
-#include "groupdef.h"
-#include "example.h"
-#include "arguments.h"
-
-#define HEADER ('D'<<24)+('O'<<16)+('X'<<8)+'!'
-
-void marshalInt(StorageIntf *s,int v)
-{
- uchar b[4];
- b[0]=((uint)v)>>24;
- b[1]=(((uint)v)>>16)&0xff;
- b[2]=(((uint)v)>>8)&0xff;
- b[3]=v&0xff;
- s->write((const char *)b,4);
-}
-
-void marshalUInt(StorageIntf *s,uint v)
-{
- uchar b[4];
- b[0]=v>>24;
- b[1]=(v>>16)&0xff;
- b[2]=(v>>8)&0xff;
- b[3]=v&0xff;
- s->write((const char *)b,4);
-}
-
-void marshalBool(StorageIntf *s,bool b)
-{
- char c = b;
- s->write(&c,sizeof(char));
-}
-
-void marshalQCString(StorageIntf *s,const QCString &str)
-{
- uint l=str.length();
- marshalUInt(s,l);
- if (l>0) s->write(str.data(),l);
-}
-
-void marshalQGString(StorageIntf *s,const QGString &str)
-{
- uint l=str.length();
- marshalUInt(s,l);
- if (l>0) s->write(str.data(),l);
-}
-
-void marshalArgumentList(StorageIntf *s,ArgumentList *argList)
-{
- if (argList==0)
- {
- marshalUInt(s,NULL_LIST); // null pointer representation
- }
- else
- {
- marshalUInt(s,argList->count());
- if (argList->count()>0)
- {
- ArgumentListIterator ali(*argList);
- Argument *a;
- for (ali.toFirst();(a=ali.current());++ali)
- {
- marshalQCString(s,a->attrib);
- marshalQCString(s,a->type);
- marshalQCString(s,a->canType);
- marshalQCString(s,a->name);
- marshalQCString(s,a->array);
- marshalQCString(s,a->defval);
- marshalQCString(s,a->docs);
- }
- }
- marshalBool(s,argList->constSpecifier);
- marshalBool(s,argList->volatileSpecifier);
- marshalBool(s,argList->pureSpecifier);
- }
-}
-
-void marshalArgumentLists(StorageIntf *s,QList<ArgumentList> *argLists)
-{
- if (argLists==0)
- {
- marshalUInt(s,NULL_LIST); // null pointer representation
- }
- else
- {
- marshalUInt(s,argLists->count());
- QListIterator<ArgumentList> ali(*argLists);
- ArgumentList *al;
- for (ali.toFirst();(al=ali.current());++ali)
- {
- marshalArgumentList(s,al);
- }
- }
-}
-
-void marshalBaseInfoList(StorageIntf *s, QList<BaseInfo> *baseList)
-{
- if (baseList==0)
- {
- marshalUInt(s,NULL_LIST); // null pointer representation
- }
- else
- {
- marshalUInt(s,baseList->count());
- QListIterator<BaseInfo> bli(*baseList);
- BaseInfo *bi;
- for (bli.toFirst();(bi=bli.current());++bli)
- {
- marshalQCString(s,bi->name);
- marshalInt(s,(int)bi->prot);
- marshalInt(s,(int)bi->virt);
- }
- }
-}
-
-void marshalGroupingList(StorageIntf *s, QList<Grouping> *groups)
-{
- if (groups==0)
- {
- marshalUInt(s,NULL_LIST); // null pointer representation
- }
- else
- {
- marshalUInt(s,groups->count());
- QListIterator<Grouping> gli(*groups);
- Grouping *g;
- for (gli.toFirst();(g=gli.current());++gli)
- {
- marshalQCString(s,g->groupname);
- marshalInt(s,(int)g->pri);
- }
- }
-}
-
-void marshalSectionInfoList(StorageIntf *s, QList<SectionInfo> *anchors)
-{
- if (anchors==0)
- {
- marshalUInt(s,NULL_LIST); // null pointer representation
- }
- else
- {
- marshalUInt(s,anchors->count());
- QListIterator<SectionInfo> sli(*anchors);
- SectionInfo *si;
- for (sli.toFirst();(si=sli.current());++sli)
- {
- marshalQCString(s,si->label);
- marshalQCString(s,si->title);
- marshalQCString(s,si->ref);
- marshalInt(s,(int)si->type);
- marshalQCString(s,si->fileName);
- marshalInt(s,si->level);
- }
- }
-}
-
-void marshalItemInfoList(StorageIntf *s, QList<ListItemInfo> *sli)
-{
- if (sli==0)
- {
- marshalUInt(s,NULL_LIST); // null pointer representation
- }
- else
- {
- marshalUInt(s,sli->count());
- QListIterator<ListItemInfo> liii(*sli);
- ListItemInfo *lii;
- for (liii.toFirst();(lii=liii.current());++liii)
- {
- marshalQCString(s,lii->type);
- marshalInt(s,lii->itemId);
- }
- }
-}
-
-void marshalObjPointer(StorageIntf *s,void *obj)
-{
- char *b = (char *)&obj;
- s->write(b,sizeof(void *));
-}
-
-void marshalSectionDict(StorageIntf *s,SectionDict *sections)
-{
- if (sections==0)
- {
- marshalUInt(s,NULL_LIST); // null pointer representation
- }
- else
- {
- marshalUInt(s,sections->count());
- SDict<SectionInfo>::IteratorDict sli(*sections);
- SectionInfo *si;
- for (sli.toFirst();(si=sli.current());++sli)
- {
- marshalQCString(s,sli.currentKey());
- marshalObjPointer(s,si);
- }
- }
-}
-
-void marshalMemberSDict(StorageIntf *s,MemberSDict *memberSDict)
-{
- if (memberSDict==0)
- {
- marshalUInt(s,NULL_LIST); // null pointer representation
- }
- else
- {
- marshalUInt(s,memberSDict->count());
- //printf(" marshalMemberSDict: items=%d\n",memberSDict->count());
- SDict<MemberDef>::IteratorDict mdi(*memberSDict);
- MemberDef *md;
- int count=0;
- for (mdi.toFirst();(md=mdi.current());++mdi)
- {
- //printf(" marshalMemberSDict: %d: key=%s value=%p\n",count,mdi.currentKey().data(),md);
- marshalQCString(s,mdi.currentKey());
- marshalObjPointer(s,md);
- count++;
- }
- assert(count==memberSDict->count());
- }
-}
-
-void marshalDocInfo(StorageIntf *s,DocInfo *docInfo)
-{
- if (docInfo==0)
- {
- marshalUInt(s,NULL_LIST); // null pointer representation
- }
- else
- {
- marshalUInt(s,1);
- marshalQCString(s,docInfo->doc);
- marshalInt(s,docInfo->line);
- marshalQCString(s,docInfo->file);
- }
-}
-
-void marshalBriefInfo(StorageIntf *s,BriefInfo *briefInfo)
-{
- if (briefInfo==0)
- {
- marshalUInt(s,NULL_LIST); // null pointer representation
- }
- else
- {
- marshalUInt(s,1);
- marshalQCString(s,briefInfo->doc);
- marshalQCString(s,briefInfo->tooltip);
- marshalInt(s,briefInfo->line);
- marshalQCString(s,briefInfo->file);
- }
-}
-
-void marshalBodyInfo(StorageIntf *s,BodyInfo *bodyInfo)
-{
- if (bodyInfo==0)
- {
- marshalUInt(s,NULL_LIST); // null pointer representation
- }
- else
- {
- marshalUInt(s,1);
- marshalInt(s,bodyInfo->startLine);
- marshalInt(s,bodyInfo->endLine);
- marshalObjPointer(s,bodyInfo->fileDef);
- }
-}
-
-void marshalGroupList(StorageIntf *s,GroupList *groupList)
-{
- if (groupList==0)
- {
- marshalUInt(s,NULL_LIST); // null pointer representation
- }
- else
- {
- marshalUInt(s,groupList->count());
- QListIterator<GroupDef> gli(*groupList);
- GroupDef *gd=0;
- for (gli.toFirst();(gd=gli.current());++gli)
- {
- marshalObjPointer(s,gd);
- }
- }
-}
-
-void marshalMemberList(StorageIntf *s,MemberList *ml)
-{
- if (ml==0)
- {
- marshalUInt(s,NULL_LIST); // null pointer representation
- }
- else
- {
- marshalUInt(s,ml->count());
- MemberListIterator mli(*ml);
- MemberDef *md;
- uint count=0;
- for (mli.toFirst();(md=mli.current());++mli)
- {
- marshalObjPointer(s,md);
- count++;
- }
- assert(count==ml->count());
-
- ml->marshal(s);
- }
-}
-
-void marshalExampleSDict(StorageIntf *s,ExampleSDict *ed)
-{
- if (ed==0)
- {
- marshalUInt(s,NULL_LIST); // null pointer representation
- }
- else
- {
- marshalUInt(s,ed->count());
- //printf(" marshalMemberSDict: items=%d\n",memberSDict->count());
- SDict<Example>::IteratorDict edi(*ed);
- Example *e;
- for (edi.toFirst();(e=edi.current());++edi)
- {
- //printf(" marshalMemberSDict: %d: key=%s value=%p\n",count,mdi.currentKey().data(),md);
- marshalQCString(s,edi.currentKey());
- marshalQCString(s,e->anchor);
- marshalQCString(s,e->name);
- marshalQCString(s,e->file);
- }
- }
-}
-
-void marshalMemberLists(StorageIntf *s,SDict<MemberList> *mls)
-{
- if (mls==0)
- {
- marshalUInt(s,NULL_LIST); // null pointer representation
- }
- else
- {
- marshalUInt(s,mls->count());
- //printf(" marshalMemberSDict: items=%d\n",memberSDict->count());
- SDict<MemberList>::IteratorDict mli(*mls);
- MemberList *ml;
- for (mli.toFirst();(ml=mli.current());++mli)
- {
- //printf(" marshalMemberSDict: %d: key=%s value=%p\n",count,mdi.currentKey().data(),md);
- marshalQCString(s,mli.currentKey());
- marshalObjPointer(s,ml); // assume we are not owner of the list
- }
- }
-}
-
-void marshalEntry(StorageIntf *s,Entry *e)
-{
- marshalUInt(s,HEADER);
- marshalQCString(s,e->name);
- marshalQCString(s,e->type);
- marshalInt(s,e->section);
- marshalInt(s,(int)e->protection);
- marshalInt(s,(int)e->mtype);
- marshalInt(s,e->spec);
- marshalInt(s,e->initLines);
- marshalBool(s,e->stat);
- marshalBool(s,e->explicitExternal);
- marshalBool(s,e->proto);
- marshalBool(s,e->subGrouping);
- marshalBool(s,e->callGraph);
- marshalBool(s,e->callerGraph);
- marshalInt(s,(int)e->virt);
- marshalQCString(s,e->args);
- marshalQCString(s,e->bitfields);
- marshalArgumentList(s,e->argList);
- marshalArgumentLists(s,e->tArgLists);
- marshalQGString(s,e->program);
- marshalQGString(s,e->initializer);
- marshalQCString(s,e->includeFile);
- marshalQCString(s,e->includeName);
- marshalQCString(s,e->doc);
- marshalInt(s,e->docLine);
- marshalQCString(s,e->docFile);
- marshalQCString(s,e->brief);
- marshalInt(s,e->briefLine);
- marshalQCString(s,e->briefFile);
- marshalQCString(s,e->inbodyDocs);
- marshalInt(s,e->inbodyLine);
- marshalQCString(s,e->inbodyFile);
- marshalQCString(s,e->relates);
- marshalInt(s,e->relatesType);
- marshalQCString(s,e->read);
- marshalQCString(s,e->write);
- marshalQCString(s,e->inside);
- marshalQCString(s,e->exception);
- marshalArgumentList(s,e->typeConstr);
- marshalInt(s,e->bodyLine);
- marshalInt(s,e->endBodyLine);
- marshalInt(s,e->mGrpId);
- marshalBaseInfoList(s,e->extends);
- marshalGroupingList(s,e->groups);
- marshalSectionInfoList(s,e->anchors);
- marshalQCString(s,e->fileName);
- marshalInt(s,e->startLine);
- marshalItemInfoList(s,e->sli);
- marshalInt(s,(int)e->lang);
- marshalBool(s,e->hidden);
- marshalBool(s,e->artificial);
- marshalInt(s,(int)e->groupDocType);
-}
-
-void marshalEntryTree(StorageIntf *s,Entry *e)
-{
- marshalEntry(s,e);
- marshalUInt(s,e->children()->count());
- QListIterator<Entry> eli(*e->children());
- Entry *child;
- for (eli.toFirst();(child=eli.current());++eli)
- {
- marshalEntryTree(s,child);
- }
-}
-
-//------------------------------------------------------------------
-
-int unmarshalInt(StorageIntf *s)
-{
- uchar b[4];
- s->read((char *)b,4);
- int result=(int)((((uint)b[0])<<24)+((uint)b[1]<<16)+((uint)b[2]<<8)+(uint)b[3]);
- //printf("unmarshalInt: %x %x %x %x: %x offset=%llx\n",b[0],b[1],b[2],b[3],result,f.pos());
- return result;
-}
-
-uint unmarshalUInt(StorageIntf *s)
-{
- uchar b[4];
- s->read((char *)b,4);
- uint result=(((uint)b[0])<<24)+((uint)b[1]<<16)+((uint)b[2]<<8)+(uint)b[3];
- //printf("unmarshalUInt: %x %x %x %x: %x offset=%llx\n",b[0],b[1],b[2],b[3],result,f.pos());
- return result;
-}
-
-bool unmarshalBool(StorageIntf *s)
-{
- char result;
- s->read(&result,sizeof(result));
- //printf("unmarshalBool: %x offset=%llx\n",result,f.pos());
- return result;
-}
-
-QCString unmarshalQCString(StorageIntf *s)
-{
- uint len = unmarshalUInt(s);
- //printf("unmarshalQCString: len=%d offset=%llx\n",len,f.pos());
- QCString result(len+1);
- result.at(len)='\0';
- if (len>0)
- {
- s->read(result.data(),len);
- }
- //printf("unmarshalQCString: result=%s\n",result.data());
- return result;
-}
-
-QGString unmarshalQGString(StorageIntf *s)
-{
- uint len = unmarshalUInt(s);
- //printf("unmarshalQCString: len=%d offset=%llx\n",len,f.pos());
- QGString result(len+1);
- result.at(len)='\0';
- if (len>0)
- {
- s->read(result.data(),len);
- }
- //printf("unmarshalQCString: result=%s\n",result.data());
- return result;
-}
-
-ArgumentList *unmarshalArgumentList(StorageIntf *s)
-{
- uint i;
- uint count = unmarshalUInt(s);
- if (count==NULL_LIST) return 0; // null list
- ArgumentList *result = new ArgumentList;
- assert(count<1000000);
- //printf("unmarshalArgumentList: %d\n",count);
- for (i=0;i<count;i++)
- {
- Argument *a = new Argument;
- a->attrib = unmarshalQCString(s);
- a->type = unmarshalQCString(s);
- a->canType = unmarshalQCString(s);
- a->name = unmarshalQCString(s);
- a->array = unmarshalQCString(s);
- a->defval = unmarshalQCString(s);
- a->docs = unmarshalQCString(s);
- result->append(a);
- }
- result->constSpecifier = unmarshalBool(s);
- result->volatileSpecifier = unmarshalBool(s);
- result->pureSpecifier = unmarshalBool(s);
- return result;
-}
-
-QList<ArgumentList> *unmarshalArgumentLists(StorageIntf *s)
-{
- uint i;
- uint count = unmarshalUInt(s);
- if (count==NULL_LIST) return 0; // null list
- QList<ArgumentList> *result = new QList<ArgumentList>;
- result->setAutoDelete(TRUE);
- assert(count<1000000);
- //printf("unmarshalArgumentLists: %d\n",count);
- for (i=0;i<count;i++)
- {
- result->append(unmarshalArgumentList(s));
- }
- return result;
-}
-
-QList<BaseInfo> *unmarshalBaseInfoList(StorageIntf *s)
-{
- uint i;
- uint count = unmarshalUInt(s);
- if (count==NULL_LIST) return 0; // null list
- QList<BaseInfo> *result = new QList<BaseInfo>;
- result->setAutoDelete(TRUE);
- assert(count<1000000);
- for (i=0;i<count;i++)
- {
- QCString name = unmarshalQCString(s);
- Protection prot = (Protection)unmarshalInt(s);
- Specifier virt = (Specifier)unmarshalInt(s);
- result->append(new BaseInfo(name,prot,virt));
- }
- return result;
-}
-
-QList<Grouping> *unmarshalGroupingList(StorageIntf *s)
-{
- uint i;
- uint count = unmarshalUInt(s);
- if (count==NULL_LIST) return 0; // null list
- QList<Grouping> *result = new QList<Grouping>;
- result->setAutoDelete(TRUE);
- assert(count<1000000);
- for (i=0;i<count;i++)
- {
- QCString name = unmarshalQCString(s);
- Grouping::GroupPri_t prio = (Grouping::GroupPri_t)unmarshalInt(s);
- result->append(new Grouping(name,prio));
- }
- return result;
-}
-
-QList<SectionInfo> *unmarshalSectionInfoList(StorageIntf *s)
-{
- uint i;
- uint count = unmarshalUInt(s);
- if (count==NULL_LIST) return 0; // null list
- QList<SectionInfo> *result = new QList<SectionInfo>;
- result->setAutoDelete(TRUE);
- assert(count<1000000);
- for (i=0;i<count;i++)
- {
- QCString label = unmarshalQCString(s);
- QCString title = unmarshalQCString(s);
- QCString ref = unmarshalQCString(s);
- SectionInfo::SectionType type = (SectionInfo::SectionType)unmarshalInt(s);
- QCString fileName = unmarshalQCString(s);
- int level = unmarshalInt(s);
- result->append(new SectionInfo(fileName,label,title,type,level,ref));
- }
- return result;
-}
-
-QList<ListItemInfo> *unmarshalItemInfoList(StorageIntf *s)
-{
- uint i;
- uint count = unmarshalUInt(s);
- if (count==NULL_LIST) return 0; // null list
- QList<ListItemInfo> *result = new QList<ListItemInfo>;
- result->setAutoDelete(TRUE);
- assert(count<1000000);
- for (i=0;i<count;i++)
- {
- ListItemInfo *lii = new ListItemInfo;
- lii->type = unmarshalQCString(s);
- lii->itemId = unmarshalInt(s);
- result->append(lii);
- }
- return result;
-}
-
-void *unmarshalObjPointer(StorageIntf *s)
-{
- void *result;
- s->read((char *)&result,sizeof(void*));
- return result;
-}
-
-SectionDict *unmarshalSectionDict(StorageIntf *s)
-{
- uint i;
- uint count = unmarshalUInt(s);
- //printf("unmarshalSectionDict count=%d\n",count);
- if (count==NULL_LIST) return 0; // null list
- SectionDict *result = new SectionDict(17);
- assert(count<1000000);
- for (i=0;i<count;i++)
- {
- QCString key = unmarshalQCString(s);
- SectionInfo *si = (SectionInfo *)unmarshalObjPointer(s);
- //printf(" unmarshalSectionDict i=%d key=%s si=%s\n",count,key.data(),si->label.data());
- result->append(key,si);
- }
- return result;
-}
-
-MemberSDict *unmarshalMemberSDict(StorageIntf *s)
-{
- uint i;
- uint count = unmarshalUInt(s);
- //printf("--- unmarshalMemberSDict count=%d\n",count);
- if (count==NULL_LIST)
- {
- //printf("--- end unmarshalMemberSDict\n");
- return 0; // null list
- }
- MemberSDict *result = new MemberSDict;
- assert(count<1000000);
- //printf("Reading %d key-value pairs\n",count);
- for (i=0;i<count;i++)
- {
- //printf(" unmarshaling pair %d\n",i);
- QCString key = unmarshalQCString(s);
- //printf(" unmarshaling key %s\n",key.data());
- MemberDef *md = (MemberDef *)unmarshalObjPointer(s);
- //printf(" unmarshalMemberSDict i=%d key=%s md=%p\n",i,key.data(),md);
- result->append(key,md);
- }
-
- //printf("--- end unmarshalMemberSDict\n");
- return result;
-}
-
-DocInfo *unmarshalDocInfo(StorageIntf *s)
-{
- uint count = unmarshalUInt(s);
- if (count==NULL_LIST) return 0;
- DocInfo *result = new DocInfo;
- result->doc = unmarshalQCString(s);
- result->line = unmarshalInt(s);
- result->file = unmarshalQCString(s);
- return result;
-}
-
-BriefInfo *unmarshalBriefInfo(StorageIntf *s)
-{
- uint count = unmarshalUInt(s);
- if (count==NULL_LIST) return 0;
- BriefInfo *result = new BriefInfo;
- result->doc = unmarshalQCString(s);
- result->tooltip = unmarshalQCString(s);
- result->line = unmarshalInt(s);
- result->file = unmarshalQCString(s);
- return result;
-}
-
-BodyInfo *unmarshalBodyInfo(StorageIntf *s)
-{
- uint count = unmarshalUInt(s);
- if (count==NULL_LIST) return 0;
- BodyInfo *result = new BodyInfo;
- result->startLine = unmarshalInt(s);
- result->endLine = unmarshalInt(s);
- result->fileDef = (FileDef*)unmarshalObjPointer(s);
- return result;
-}
-
-GroupList *unmarshalGroupList(StorageIntf *s)
-{
- uint i;
- uint count = unmarshalUInt(s);
- if (count==NULL_LIST) return 0; // null list
- assert(count<1000000);
- GroupList *result = new GroupList;
- for (i=0;i<count;i++)
- {
- GroupDef *gd = (GroupDef *)unmarshalObjPointer(s);
- result->append(gd);
- }
- return result;
-}
-
-MemberList *unmarshalMemberList(StorageIntf *s)
-{
- uint i;
- uint count = unmarshalUInt(s);
- if (count==NULL_LIST) return 0;
- MemberList *result = new MemberList;
- assert(count<1000000);
- for (i=0;i<count;i++)
- {
- MemberDef *md = (MemberDef*)unmarshalObjPointer(s);
- result->append(md);
- }
- result->unmarshal(s);
- return result;
-}
-
-ExampleSDict *unmarshalExampleSDict(StorageIntf *s)
-{
- uint i;
- uint count = unmarshalUInt(s);
- if (count==NULL_LIST) return 0;
- ExampleSDict *result = new ExampleSDict;
- assert(count<1000000);
- for (i=0;i<count;i++)
- {
- QCString key = unmarshalQCString(s);
- Example *e = new Example;
- e->anchor = unmarshalQCString(s);
- e->name = unmarshalQCString(s);
- e->file = unmarshalQCString(s);
- result->inSort(key,e);
- }
- return result;
-}
-
-SDict<MemberList> *unmarshalMemberLists(StorageIntf *s)
-{
- uint i;
- uint count = unmarshalUInt(s);
- if (count==NULL_LIST) return 0;
- SDict<MemberList> *result = new SDict<MemberList>(7);
- assert(count<1000000);
- for (i=0;i<count;i++)
- {
- QCString key = unmarshalQCString(s);
- MemberList *ml = (MemberList *)unmarshalObjPointer(s);
- result->append(key,ml);
- }
- return result;
-}
-
-Entry * unmarshalEntry(StorageIntf *s)
-{
- Entry *e = new Entry;
- uint header=unmarshalUInt(s);
- ASSERT(header==HEADER);
- e->name = unmarshalQCString(s);
- e->type = unmarshalQCString(s);
- e->section = unmarshalInt(s);
- e->protection = (Protection)unmarshalInt(s);
- e->mtype = (MethodTypes)unmarshalInt(s);
- e->spec = unmarshalInt(s);
- e->initLines = unmarshalInt(s);
- e->stat = unmarshalBool(s);
- e->explicitExternal = unmarshalBool(s);
- e->proto = unmarshalBool(s);
- e->subGrouping = unmarshalBool(s);
- e->callGraph = unmarshalBool(s);
- e->callerGraph = unmarshalBool(s);
- e->virt = (Specifier)unmarshalInt(s);
- e->args = unmarshalQCString(s);
- e->bitfields = unmarshalQCString(s);
- delete e->argList;
- e->argList = unmarshalArgumentList(s);
- e->tArgLists = unmarshalArgumentLists(s);
- e->program = unmarshalQGString(s);
- e->initializer = unmarshalQGString(s);
- e->includeFile = unmarshalQCString(s);
- e->includeName = unmarshalQCString(s);
- e->doc = unmarshalQCString(s);
- e->docLine = unmarshalInt(s);
- e->docFile = unmarshalQCString(s);
- e->brief = unmarshalQCString(s);
- e->briefLine = unmarshalInt(s);
- e->briefFile = unmarshalQCString(s);
- e->inbodyDocs = unmarshalQCString(s);
- e->inbodyLine = unmarshalInt(s);
- e->inbodyFile = unmarshalQCString(s);
- e->relates = unmarshalQCString(s);
- e->relatesType = (RelatesType)unmarshalInt(s);
- e->read = unmarshalQCString(s);
- e->write = unmarshalQCString(s);
- e->inside = unmarshalQCString(s);
- e->exception = unmarshalQCString(s);
- e->typeConstr = unmarshalArgumentList(s);
- e->bodyLine = unmarshalInt(s);
- e->endBodyLine = unmarshalInt(s);
- e->mGrpId = unmarshalInt(s);
- delete e->extends;
- e->extends = unmarshalBaseInfoList(s);
- delete e->groups;
- e->groups = unmarshalGroupingList(s);
- delete e->anchors;
- e->anchors = unmarshalSectionInfoList(s);
- e->fileName = unmarshalQCString(s);
- e->startLine = unmarshalInt(s);
- e->sli = unmarshalItemInfoList(s);
- e->lang = (SrcLangExt)unmarshalInt(s);
- e->hidden = unmarshalBool(s);
- e->artificial = unmarshalBool(s);
- e->groupDocType = (Entry::GroupDocType)unmarshalInt(s);
- return e;
-}
-
-Entry * unmarshalEntryTree(StorageIntf *s)
-{
- Entry *e = unmarshalEntry(s);
- uint count = unmarshalUInt(s);
- uint i;
- for (i=0;i<count;i++)
- {
- e->addSubEntry(unmarshalEntryTree(s));
- }
- return e;
-}
diff --git a/trunk/src/marshal.h b/trunk/src/marshal.h
deleted file mode 100644
index 0360dca..0000000
--- a/trunk/src/marshal.h
+++ /dev/null
@@ -1,95 +0,0 @@
-/******************************************************************************
- *
- * Copyright (C) 1997-2012 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.
- *
- */
-
-#ifndef MARSHAL_H
-#define MARSHAL_H
-
-#include <qlist.h>
-#include <qfile.h>
-#include "sortdict.h"
-#include "store.h"
-
-class ArgumentList;
-struct BaseInfo;
-struct Grouping;
-struct SectionInfo;
-struct ListItemInfo;
-class QCString;
-class QGString;
-class SectionDict;
-class MemberSDict;
-class GroupList;
-struct BodyInfo;
-struct DocInfo;
-struct BriefInfo;
-class MemberList;
-class ExampleSDict;
-class Entry;
-
-#define NULL_LIST 0xffffffff
-
-//----- marshaling function: datatype -> byte stream --------------------
-
-void marshalInt(StorageIntf *s,int v);
-void marshalUInt(StorageIntf *s,uint v);
-void marshalBool(StorageIntf *s,bool b);
-void marshalQCString(StorageIntf *s,const QCString &str);
-void marshalQGString(StorageIntf *s,const QGString &str);
-void marshalArgumentList(StorageIntf *s,ArgumentList *argList);
-void marshalArgumentLists(StorageIntf *s,QList<ArgumentList> *argLists);
-void marshalBaseInfoList(StorageIntf *s, QList<BaseInfo> *baseList);
-void marshalGroupingList(StorageIntf *s, QList<Grouping> *groups);
-void marshalSectionInfoList(StorageIntf *s, QList<SectionInfo> *anchors);
-void marshalItemInfoList(StorageIntf *s, QList<ListItemInfo> *sli);
-void marshalObjPointer(StorageIntf *s,void *obj);
-void marshalSectionDict(StorageIntf *s,SectionDict *sections);
-void marshalMemberSDict(StorageIntf *s,MemberSDict *memberSDict);
-void marshalDocInfo(StorageIntf *s,DocInfo *docInfo);
-void marshalBriefInfo(StorageIntf *s,BriefInfo *briefInfo);
-void marshalBodyInfo(StorageIntf *s,BodyInfo *bodyInfo);
-void marshalGroupList(StorageIntf *s,GroupList *groupList);
-void marshalMemberList(StorageIntf *s,MemberList *ml);
-void marshalExampleSDict(StorageIntf *s,ExampleSDict *ed);
-void marshalMemberLists(StorageIntf *s,SDict<MemberList> *mls);
-void marshalEntry(StorageIntf *s,Entry *e);
-void marshalEntryTree(StorageIntf *s,Entry *e);
-
-//----- unmarshaling function: byte stream -> datatype ------------------
-
-int unmarshalInt(StorageIntf *s);
-uint unmarshalUInt(StorageIntf *s);
-bool unmarshalBool(StorageIntf *s);
-QCString unmarshalQCString(StorageIntf *s);
-QGString unmarshalQGString(StorageIntf *s);
-ArgumentList * unmarshalArgumentList(StorageIntf *s);
-QList<ArgumentList> *unmarshalArgumentLists(StorageIntf *s);
-QList<BaseInfo> * unmarshalBaseInfoList(StorageIntf *s);
-QList<Grouping> * unmarshalGroupingList(StorageIntf *s);
-QList<SectionInfo> * unmarshalSectionInfoList(StorageIntf *s);
-QList<ListItemInfo> *unmarshalItemInfoList(StorageIntf *s);
-void * unmarshalObjPointer(StorageIntf *s);
-SectionDict * unmarshalSectionDict(StorageIntf *s);
-MemberSDict * unmarshalMemberSDict(StorageIntf *s);
-DocInfo * unmarshalDocInfo(StorageIntf *s);
-BriefInfo * unmarshalBriefInfo(StorageIntf *s);
-BodyInfo * unmarshalBodyInfo(StorageIntf *s);
-GroupList * unmarshalGroupList(StorageIntf *s);
-MemberList * unmarshalMemberList(StorageIntf *s);
-ExampleSDict * unmarshalExampleSDict(StorageIntf *s);
-SDict<MemberList> * unmarshalMemberLists(StorageIntf *s);
-Entry * unmarshalEntry(StorageIntf *s);
-Entry * unmarshalEntryTree(StorageIntf *s);
-
-#endif
diff --git a/trunk/src/memberdef.cpp b/trunk/src/memberdef.cpp
deleted file mode 100644
index 8ea32e0..0000000
--- a/trunk/src/memberdef.cpp
+++ /dev/null
@@ -1,4507 +0,0 @@
-/******************************************************************************
- *
- *
- *
- * Copyright (C) 1997-2012 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.
- *
- */
-
-#include <stdio.h>
-#include <qglobal.h>
-#include <qregexp.h>
-#include <assert.h>
-#include "md5.h"
-#include "memberdef.h"
-#include "membername.h"
-#include "doxygen.h"
-#include "util.h"
-#include "code.h"
-#include "message.h"
-#include "htmlhelp.h"
-#include "language.h"
-#include "outputlist.h"
-#include "example.h"
-#include "membergroup.h"
-#include "groupdef.h"
-#include "defargs.h"
-#include "docparser.h"
-#include "dot.h"
-#include "searchindex.h"
-#include "parserintf.h"
-#include "marshal.h"
-#include "objcache.h"
-#include "vhdlscanner.h"
-#include "vhdldocgen.h"
-#include "arguments.h"
-
-#define START_MARKER 0x4D454D5B // MEM[
-#define END_MARKER 0x4D454D5D // MEM]
-
-#if defined(_OS_WIN32_)
-#define snprintf _snprintf
-#endif
-
-// Put this macro at the start of any method of MemberDef that can directly
-// or indirectly access other MemberDefs. It prevents that the content
-// pointed to by m_impl gets flushed to disk in the middle of the method call!
-#define KEEP_RESIDENT_DURING_CALL makeResident();LockingPtr<MemberDef> lock(this,this)
-
-//-----------------------------------------------------------------------------
-
-int MemberDef::s_indentLevel = 0;
-
-//-----------------------------------------------------------------------------
-
-static QCString addTemplateNames(const QCString &s,const QCString &n,const QCString &t)
-{
- QCString result;
- QCString clRealName=n;
- int p=0,i;
- if ((i=clRealName.find('<'))!=-1)
- {
- clRealName=clRealName.left(i); // strip template specialization
- }
- if ((i=clRealName.findRev("::"))!=-1)
- {
- clRealName=clRealName.right(clRealName.length()-i-2);
- }
- while ((i=s.find(clRealName,p))!=-1)
- {
- result+=s.mid(p,i-p);
- uint j=clRealName.length()+i;
- if (s.length()==j || (s.at(j)!='<' && !isId(s.at(j))))
- { // add template names
- //printf("Adding %s+%s\n",clRealName.data(),t.data());
- result+=clRealName+t;
- }
- else
- { // template names already present
- //printf("Adding %s\n",clRealName.data());
- result+=clRealName;
- }
- p=i+clRealName.length();
- }
- result+=s.right(s.length()-p);
- //printf("addTemplateNames(%s,%s,%s)=%s\n",s.data(),n.data(),t.data(),result.data());
- return result;
-}
-
-static bool writeDefArgumentList(OutputList &ol,ClassDef *cd,
- const QCString & /*scopeName*/,MemberDef *md)
-{
- LockingPtr<ArgumentList> defArgList=(md->isDocsForDefinition()) ?
- md->argumentList() : md->declArgumentList();
- //printf("writeDefArgumentList `%s' isDocsForDefinition()=%d\n",md->name().data(),md->isDocsForDefinition());
- if (defArgList==0 || md->isProperty())
- {
- return FALSE; // member has no function like argument list
- }
- if (!md->isDefine()) ol.docify(" ");
-
- // simple argument list for tcl
- if (md->getLanguage()==SrcLangExt_Tcl)
- {
- Argument *a=defArgList->first();
- ol.startParameterName(FALSE);
- while (a)
- {
- if (a->defval.isEmpty())
- {
- ol.docify(a->name+" ");
- }
- else
- {
- ol.docify("?"+a->name+"? ");
- }
- a=defArgList->next();
- }
- ol.endParameterName(FALSE,FALSE,FALSE);
- ol.endMemberDocName();
- return TRUE;
- }
-
- //printf("writeDefArgList(%d)\n",defArgList->count());
- ol.pushGeneratorState();
- //ol.disableAllBut(OutputGenerator::Html);
- bool htmlOn = ol.isEnabled(OutputGenerator::Html);
- bool latexOn = ol.isEnabled(OutputGenerator::Latex);
- {
- // html and latex
- if (htmlOn) ol.enable(OutputGenerator::Html);
- if (latexOn) ol.enable(OutputGenerator::Latex);
-
- ol.endMemberDocName();
- ol.startParameterList(!md->isObjCMethod());
- }
- ol.enableAll();
- ol.disable(OutputGenerator::Html);
- ol.disable(OutputGenerator::Latex);
- {
- // other formats
- if (!md->isObjCMethod()) ol.docify("("); // start argument list
- ol.endMemberDocName();
- }
- ol.popGeneratorState();
- //printf("===> name=%s isDefine=%d\n",md->name().data(),md->isDefine());
-
- Argument *a=defArgList->first();
- QCString cName;
- if (cd)
- {
- cName=cd->name();
- int il=cName.find('<');
- int ir=cName.findRev('>');
- if (il!=-1 && ir!=-1 && ir>il)
- {
- cName=cName.mid(il,ir-il+1);
- //printf("1. cName=%s\n",cName.data());
- }
- else if (cd->templateArguments())
- {
- cName=tempArgListToString(cd->templateArguments());
- //printf("2. cName=%s\n",cName.data());
- }
- else // no template specifier
- {
- cName.resize(0);
- }
- }
- //printf("~~~ %s cName=%s\n",md->name().data(),cName.data());
-
- bool first=TRUE;
- bool paramTypeStarted=FALSE;
- bool isDefine = md->isDefine();
- while (a)
- {
- if (isDefine || first)
- {
- ol.startParameterType(first,0);
- paramTypeStarted=TRUE;
- if (isDefine)
- {
- ol.endParameterType();
- ol.startParameterName(TRUE);
- }
- }
- QRegExp re(")("),res("(.*\\*");
- int vp=a->type.find(re);
- int wp=a->type.find(res);
-
- // use the following to put the function pointer type before the name
- bool hasFuncPtrType=FALSE;
-
- if (!a->attrib.isEmpty() && !md->isObjCMethod()) // argument has an IDL attribute
- {
- ol.docify(a->attrib+" ");
- }
- if (hasFuncPtrType) // argument type is a function pointer
- {
- //printf("a->type=`%s' a->name=`%s'\n",a->type.data(),a->name.data());
- QCString n=a->type.left(vp);
- if (hasFuncPtrType) n=a->type.left(wp);
- if (md->isObjCMethod()) { n.prepend("("); n.append(")"); }
- if (!cName.isEmpty()) n=addTemplateNames(n,cd->name(),cName);
- linkifyText(TextGeneratorOLImpl(ol),cd,md->getBodyDef(),md->name(),n);
- }
- else // non-function pointer type
- {
- QCString n=a->type;
- if (md->isObjCMethod()) { n.prepend("("); n.append(")"); }
- if (a->type!="...")
- {
- if (!cName.isEmpty()) n=addTemplateNames(n,cd->name(),cName);
- linkifyText(TextGeneratorOLImpl(ol),cd,md->getBodyDef(),md->name(),n);
- }
- }
- if (!isDefine)
- {
- if (paramTypeStarted)
- {
- ol.endParameterType();
- paramTypeStarted=FALSE;
- }
- ol.startParameterName(defArgList->count()<2);
- }
- if (hasFuncPtrType)
- {
- ol.docify(a->type.mid(wp,vp-wp));
- }
- if (!a->name.isEmpty() || (a->name.isEmpty() && a->type=="...")) // argument has a name
- {
- //if (!hasFuncPtrType)
- //{
- // ol.docify(" ");
- //}
- ol.disable(OutputGenerator::Man);
- ol.disable(OutputGenerator::Latex);
- ol.startEmphasis();
- ol.enable(OutputGenerator::Man);
- if (latexOn) ol.enable(OutputGenerator::Latex);
- if (a->name.isEmpty()) ol.docify(a->type); else ol.docify(a->name);
- ol.disable(OutputGenerator::Man);
- ol.disable(OutputGenerator::Latex);
- ol.endEmphasis();
- ol.enable(OutputGenerator::Man);
- if (latexOn) ol.enable(OutputGenerator::Latex);
- }
- if (!a->array.isEmpty())
- {
- ol.docify(a->array);
- }
- if (hasFuncPtrType) // write the part of the argument type
- // that comes after the name
- {
- linkifyText(TextGeneratorOLImpl(ol),cd,md->getBodyDef(),
- md->name(),a->type.right(a->type.length()-vp));
- }
- if (!a->defval.isEmpty()) // write the default value
- {
- QCString n=a->defval;
- if (!cName.isEmpty()) n=addTemplateNames(n,cd->name(),cName);
- ol.docify(" = ");
-
- ol.startTypewriter();
- linkifyText(TextGeneratorOLImpl(ol),cd,md->getBodyDef(),md->name(),n,FALSE,TRUE,TRUE);
- ol.endTypewriter();
-
- }
- a=defArgList->next();
- if (a)
- {
- if (!md->isObjCMethod()) ol.docify(", "); // there are more arguments
- if (!isDefine)
- {
- QCString key;
- if (md->isObjCMethod() && a->attrib.length()>=2)
- {
- //printf("Found parameter keyword %s\n",a->attrib.data());
- // strip [ and ]
- key=a->attrib.mid(1,a->attrib.length()-2);
- if (key!=",") key+=":"; // for normal keywords add colon
- }
- ol.endParameterName(FALSE,FALSE,!md->isObjCMethod());
- if (paramTypeStarted)
- {
- ol.endParameterType();
- }
- ol.startParameterType(FALSE,key);
- paramTypeStarted=TRUE;
- }
- else // isDefine
- {
- ol.endParameterName(FALSE,FALSE,TRUE);
- }
- }
- first=FALSE;
- }
- ol.pushGeneratorState();
- ol.disable(OutputGenerator::Html);
- ol.disable(OutputGenerator::Latex);
- if (!md->isObjCMethod()) ol.docify(")"); // end argument list
- ol.enableAll();
- if (htmlOn) ol.enable(OutputGenerator::Html);
- if (latexOn) ol.enable(OutputGenerator::Latex);
- if (first) ol.startParameterName(defArgList->count()<2);
- ol.endParameterName(TRUE,defArgList->count()<2,!md->isObjCMethod());
- ol.popGeneratorState();
- if (md->extraTypeChars())
- {
- ol.docify(md->extraTypeChars());
- }
- if (defArgList->constSpecifier)
- {
- ol.docify(" const");
- }
- if (defArgList->volatileSpecifier)
- {
- ol.docify(" volatile");
- }
- return TRUE;
-}
-
-static void writeTemplatePrefix(OutputList &ol,ArgumentList *al)
-{
- ol.docify("template<");
- Argument *a=al->first();
- while (a)
- {
- ol.docify(a->type);
- ol.docify(" ");
- ol.docify(a->name);
- if (a->defval.length()!=0)
- {
- ol.docify(" = ");
- ol.docify(a->defval);
- }
- a=al->next();
- if (a) ol.docify(", ");
- }
- ol.docify("> ");
-}
-
-QCString extractDirection(QCString &docs)
-{
- QRegExp re("\\[[^\\]]+\\]"); // [...]
- int l=0;
- if (re.match(docs,0,&l)==0)
- {
- int inPos = docs.find("in", 1,FALSE);
- int outPos = docs.find("out",1,FALSE);
- bool input = inPos!=-1 && inPos<l;
- bool output = outPos!=-1 && outPos<l;
- if (input || output) // in,out attributes
- {
- docs = docs.mid(l); // strip attributes
- if (input && output) return "[in,out]";
- else if (input) return "[in]";
- else if (output) return "[out]";
- }
- }
- return QCString();
-}
-
-//-----------------------------------------------------------------------------
-//-----------------------------------------------------------------------------
-//-----------------------------------------------------------------------------
-
-class MemberDefImpl
-{
- public:
- MemberDefImpl();
- ~MemberDefImpl();
- void init(Definition *def,const char *t,const char *a,const char *e,
- Protection p,Specifier v,bool s,Relationship r,
- MemberDef::MemberType mt,const ArgumentList *tal,
- const ArgumentList *al
- );
-
- ClassDef *classDef; // member of or related to
- FileDef *fileDef; // member of file definition
- NamespaceDef *nspace; // the namespace this member is in.
-
- MemberDef *enumScope; // the enclosing scope, if this is an enum field
- MemberDef *annEnumType; // the anonymous enum that is the type of this member
- MemberList *enumFields; // enumeration fields
-
- MemberDef *redefines; // the members that this member redefines
- MemberList *redefinedBy; // the list of members that redefine this one
-
- MemberDef *memDef; // member definition for this declaration
- MemberDef *memDec; // member declaration for this definition
- ClassDef *relatedAlso; // points to class marked by relatedAlso
-
- ExampleSDict *exampleSDict; // a dictionary of all examples for quick access
-
- QCString type; // return type
- QCString args; // function arguments/variable array specifiers
- QCString def; // member definition in code (fully qualified name)
- QCString anc; // HTML anchor name
- Specifier virt; // normal/virtual/pure virtual
- Protection prot; // protection type [Public/Protected/Private]
- QCString decl; // member declaration in class
-
- QCString bitfields; // struct member bitfields
- QCString read; // property read accessor
- QCString write; // property write accessor
- QCString exception; // exceptions that can be thrown
- QCString initializer; // initializer
- QCString extraTypeChars; // extra type info found after the argument list
- int initLines; // number of lines in the initializer
-
- int memSpec; // The specifiers present for this member
- MemberDef::MemberType mtype; // returns the kind of member
- int maxInitLines; // when the initializer will be displayed
- int userInitLines; // result of explicit \hideinitializer or \showinitializer
- MemberDef *annMemb;
-
- ArgumentList *defArgList; // argument list of this member definition
- ArgumentList *declArgList; // argument list of this member declaration
-
- ArgumentList *tArgList; // template argument list of function template
- ArgumentList *typeConstraints; // type constraints for template parameters
- MemberDef *templateMaster;
- QList<ArgumentList> *defTmpArgLists; // lists of template argument lists
- // (for template functions in nested template classes)
-
- ClassDef *cachedAnonymousType; // if the member has an anonymous compound
- // as its type then this is computed by
- // getClassDefOfAnonymousType() and
- // cached here.
- SDict<MemberList> *classSectionSDict; // not accessible
-
- MemberDef *groupAlias; // Member containing the definition
- int grpId; // group id
- MemberGroup *memberGroup; // group's member definition
- GroupDef *group; // group in which this member is in
- Grouping::GroupPri_t grouppri; // priority of this definition
- QCString groupFileName; // file where this grouping was defined
- int groupStartLine; // line " " " " "
- MemberDef *groupMember;
-
- bool isTypedefValCached;
- ClassDef *cachedTypedefValue;
- QCString cachedTypedefTemplSpec;
- QCString cachedResolvedType;
-
- // inbody documentation
- //int inbodyLine;
- //QCString inbodyFile;
- //QCString inbodyDocs;
-
- // documentation inheritance
- MemberDef *docProvider;
-
- // to store the output file base from tag files
- QCString explicitOutputFileBase;
-
- // objective-c
- bool implOnly; // function found in implementation but not
- // in the interface
- bool hasDocumentedParams;
- bool hasDocumentedReturnType;
- bool isDMember;
- Relationship related; // relationship of this to the class
- bool stat; // is it a static function?
- bool proto; // is it a prototype;
- bool docEnumValues; // is an enum with documented enum values.
- bool annScope; // member is part of an annoymous scope
- bool annUsed;
- bool hasCallGraph;
- bool hasCallerGraph;
- bool explExt; // member was explicitly declared external
- bool tspec; // member is a template specialization
- bool groupHasDocs; // true if the entry that caused the grouping was documented
- bool docsForDefinition; // TRUE => documentation block is put before
- // definition.
- // FALSE => block is put before declaration.
- ClassDef *category;
-};
-
-MemberDefImpl::MemberDefImpl() :
- enumFields(0),
- redefinedBy(0),
- exampleSDict(0),
- defArgList(0),
- declArgList(0),
- tArgList(0),
- typeConstraints(0),
- defTmpArgLists(0),
- classSectionSDict(0),
- category(0)
-{
-}
-
-MemberDefImpl::~MemberDefImpl()
-{
- delete redefinedBy;
- delete exampleSDict;
- delete enumFields;
- delete defArgList;
- delete tArgList;
- delete typeConstraints;
- delete defTmpArgLists;
- delete classSectionSDict;
- delete declArgList;
-}
-
-void MemberDefImpl::init(Definition *def,
- const char *t,const char *a,const char *e,
- Protection p,Specifier v,bool s,Relationship r,
- MemberDef::MemberType mt,const ArgumentList *tal,
- const ArgumentList *al
- )
-{
- classDef=0;
- fileDef=0;
- redefines=0;
- relatedAlso=0;
- redefinedBy=0;
- nspace=0;
- memDef=0;
- memDec=0;
- group=0;
- grpId=-1;
- exampleSDict=0;
- enumFields=0;
- enumScope=0;
- defTmpArgLists=0;
- hasCallGraph = FALSE;
- hasCallerGraph = FALSE;
- initLines=0;
- type=t;
- if (mt==MemberDef::Typedef) type.stripPrefix("typedef ");
- // type.stripPrefix("struct ");
- // type.stripPrefix("class " );
- // type.stripPrefix("union " );
- type=removeRedundantWhiteSpace(type);
- args=a;
- args=removeRedundantWhiteSpace(args);
- if (type.isEmpty()) decl=def->name()+args; else decl=type+" "+def->name()+args;
-
- memberGroup=0;
- virt=v;
- prot=p;
- related=r;
- stat=s;
- mtype=mt;
- exception=e;
- proto=FALSE;
- annScope=FALSE;
- memSpec=0;
- annMemb=0;
- annUsed=FALSE;
- annEnumType=0;
- groupAlias=0;
- explExt=FALSE;
- tspec=FALSE;
- cachedAnonymousType=0;
- maxInitLines=Config_getInt("MAX_INITIALIZER_LINES");
- userInitLines=-1;
- docEnumValues=FALSE;
- // copy function template arguments (if any)
- if (tal)
- {
- tArgList = new ArgumentList;
- tArgList->setAutoDelete(TRUE);
- ArgumentListIterator ali(*tal);
- Argument *a;
- for (;(a=ali.current());++ali)
- {
- tArgList->append(new Argument(*a));
- }
- }
- else
- {
- tArgList=0;
- }
- //printf("new member al=%p\n",al);
- // copy function definition arguments (if any)
- if (al)
- {
- defArgList = new ArgumentList;
- defArgList->setAutoDelete(TRUE);
- ArgumentListIterator ali(*al);
- Argument *a;
- for (;(a=ali.current());++ali)
- {
- //printf("copy argument %s (doc=%s)\n",a->name.data(),a->docs.data());
- defArgList->append(new Argument(*a));
- }
- defArgList->constSpecifier = al->constSpecifier;
- defArgList->volatileSpecifier = al->volatileSpecifier;
- defArgList->pureSpecifier = al->pureSpecifier;
- //printf("defArgList(%p)->constSpecifier=%d\n",defArgList,defArgList->constSpecifier);
- }
- else
- {
- defArgList=0;
- }
- // convert function declaration arguments (if any)
- if (!args.isEmpty())
- {
- declArgList = new ArgumentList;
- stringToArgumentList(args,declArgList,&extraTypeChars);
- //printf("setDeclArgList %s to %s const=%d\n",args.data(),
- // argListToString(declArgList).data(),declArgList->constSpecifier);
- }
- else
- {
- declArgList = 0;
- }
- templateMaster = 0;
- classSectionSDict = 0;
- docsForDefinition = TRUE;
- isTypedefValCached = FALSE;
- cachedTypedefValue = 0;
- //inbodyLine = -1;
- implOnly=FALSE;
- groupMember = 0;
- hasDocumentedParams = FALSE;
- hasDocumentedReturnType = FALSE;
- docProvider = 0;
- isDMember = def->getDefFileName().right(2).lower()==".d";
-}
-
-
-//-----------------------------------------------------------------------------
-//-----------------------------------------------------------------------------
-//-----------------------------------------------------------------------------
-
-/*! Creates a new member definition.
- *
- * \param df File containing the definition of this member.
- * \param dl Line at which the member definition was found.
- * \param t A string representing the type of the member.
- * \param na A string representing the name of the member.
- * \param a A string representing the arguments of the member.
- * \param e A string representing the throw clause of the members.
- * \param p The protection context of the member, possible values are:
- * \c Public, \c Protected, \c Private.
- * \param v The degree of `virtualness' of the member, possible values are:
- * \c Normal, \c Virtual, \c Pure.
- * \param s A boolean that is true iff the member is static.
- * \param r The relationship between the class and the member.
- * \param mt The kind of member. See #MemberDef::MemberType for a list of
- * all types.
- * \param tal The template arguments of this member.
- * \param al The arguments of this member. This is a structured form of
- * the string past as argument \a a.
- */
-
-MemberDef::MemberDef(const char *df,int dl,
- const char *t,const char *na,const char *a,const char *e,
- Protection p,Specifier v,bool s,Relationship r,MemberType mt,
- const ArgumentList *tal,const ArgumentList *al
- ) : Definition(df,dl,removeRedundantWhiteSpace(na))
-{
- //printf("MemberDef::MemberDef(%s)\n",na);
- m_storagePos=-1;
- m_cacheHandle=-1;
- m_impl = new MemberDefImpl;
- m_impl->init(this,t,a,e,p,v,s,r,mt,tal,al);
- m_flushPending = FALSE;
- m_isLinkableCached = 0;
- m_isConstructorCached = 0;
- m_isDestructorCached = 0;
-}
-
-void MemberDef::moveTo(Definition *scope)
-{
- setOuterScope(scope);
- if (scope->definitionType()==Definition::TypeClass)
- {
- m_impl->classDef = (ClassDef*)scope;
- }
- else if (scope->definitionType()==Definition::TypeFile)
- {
- m_impl->fileDef = (FileDef*)scope;
- }
- else if (scope->definitionType()==Definition::TypeNamespace)
- {
- m_impl->nspace = (NamespaceDef*)scope;
- }
- m_isLinkableCached = 0;
- m_isConstructorCached = 0;
-}
-
-
-/*! Destroys the member definition. */
-MemberDef::~MemberDef()
-{
- delete m_impl;
- //printf("%p: ~MemberDef()\n",this);
- m_impl=0;
- if (m_cacheHandle!=-1)
- {
- Doxygen::symbolCache->del(m_cacheHandle);
- m_cacheHandle=-1;
- }
-}
-
-void MemberDef::setReimplements(MemberDef *md)
-{
- makeResident();
- //if (redefines==0) redefines = new MemberList;
- //if (redefines->find(md)==-1) redefines->inSort(md);
-
- m_impl->redefines = md;
-}
-
-void MemberDef::insertReimplementedBy(MemberDef *md)
-{
- makeResident();
- if (m_impl->templateMaster)
- {
- m_impl->templateMaster->insertReimplementedBy(md);
- }
- if (m_impl->redefinedBy==0) m_impl->redefinedBy = new MemberList(MemberList::redefinedBy);
- if (m_impl->redefinedBy->findRef(md)==-1)
- {
- m_impl->redefinedBy->inSort(md);
- }
-}
-
-MemberDef *MemberDef::reimplements() const
-{
- makeResident();
- return m_impl->redefines;
-}
-
-LockingPtr<MemberList> MemberDef::reimplementedBy() const
-{
- makeResident();
- return LockingPtr<MemberList>(this,m_impl->redefinedBy);
-}
-
-void MemberDef::insertEnumField(MemberDef *md)
-{
- makeResident();
- if (m_impl->enumFields==0) m_impl->enumFields=new MemberList(MemberList::enumFields);
- m_impl->enumFields->append(md);
-}
-
-bool MemberDef::addExample(const char *anchor,const char *nameStr,
- const char *file)
-{
- makeResident();
- //printf("%s::addExample(%s,%s,%s)\n",name().data(),anchor,nameStr,file);
- if (m_impl->exampleSDict==0) m_impl->exampleSDict = new ExampleSDict;
- if (m_impl->exampleSDict->find(nameStr)==0)
- {
- //printf("Add reference to example %s to member %s\n",nameStr,name.data());
- Example *e=new Example;
- e->anchor=anchor;
- e->name=nameStr;
- e->file=file;
- m_impl->exampleSDict->inSort(nameStr,e);
- return TRUE;
- }
- return FALSE;
-}
-
-bool MemberDef::hasExamples()
-{
- makeResident();
- if (m_impl->exampleSDict==0)
- return FALSE;
- else
- return m_impl->exampleSDict->count()>0;
-}
-
-QCString MemberDef::getOutputFileBase() const
-{
- makeResident();
- static bool separateMemberPages = Config_getBool("SEPARATE_MEMBER_PAGES");
- QCString baseName;
- //printf("Member: %s: templateMaster=%p group=%p classDef=%p nspace=%p fileDef=%p\n",
- // name().data(),m_impl->templateMaster,m_impl->group,m_impl->classDef,
- // m_impl->nspace,m_impl->fileDef);
- if (!m_impl->explicitOutputFileBase.isEmpty())
- {
- return m_impl->explicitOutputFileBase;
- }
- else if (m_impl->templateMaster)
- {
- return m_impl->templateMaster->getOutputFileBase();
- }
- else if (m_impl->group)
- {
- baseName=m_impl->group->getOutputFileBase();
- }
- else if (m_impl->classDef)
- {
- baseName=m_impl->classDef->getOutputFileBase();
- }
- else if (m_impl->nspace)
- {
- baseName=m_impl->nspace->getOutputFileBase();
- }
- else if (m_impl->fileDef)
- {
- baseName=m_impl->fileDef->getOutputFileBase();
- }
-
- if (baseName.isEmpty())
- {
- warn(getDefFileName(),getDefLine(),
- "warning: Internal inconsistency: member %s does not belong to any"
- " container!",qPrint(name())
- );
- return "dummy";
- }
- else if (separateMemberPages)
- {
- if (getEnumScope()) // enum value, which is part of enum's documentation
- {
- baseName+="_"+getEnumScope()->anchor();
- }
- else
- {
- baseName+="_"+anchor();
- }
- }
- return baseName;
-}
-
-QCString MemberDef::getReference() const
-{
- makeResident();
- QCString ref = Definition::getReference();
- if (!ref.isEmpty())
- {
- return ref;
- }
- if (m_impl->templateMaster)
- {
- return m_impl->templateMaster->getReference();
- }
- else if (m_impl->group)
- {
- return m_impl->group->getReference();
- }
- else if (m_impl->classDef)
- {
- return m_impl->classDef->getReference();
- }
- else if (m_impl->nspace)
- {
- return m_impl->nspace->getReference();
- }
- else if (m_impl->fileDef)
- {
- return m_impl->fileDef->getReference();
- }
- return "";
-}
-
-QCString MemberDef::anchor() const
-{
- KEEP_RESIDENT_DURING_CALL;
- QCString result=m_impl->anc;
- if (m_impl->groupAlias) return m_impl->groupAlias->anchor();
- if (m_impl->templateMaster) return m_impl->templateMaster->anchor();
- if (m_impl->enumScope && m_impl->enumScope!=this) // avoid recursion for C#'s public enum E { E, F }
- {
- result.prepend(m_impl->enumScope->anchor());
- }
- if (m_impl->group)
- {
- if (m_impl->groupMember)
- {
- result=m_impl->groupMember->anchor();
- }
- else if (getReference().isEmpty())
- {
- result.prepend("g");
- }
- }
- return result;
-}
-
-void MemberDef::_computeLinkableInProject()
-{
- KEEP_RESIDENT_DURING_CALL;
- static bool extractStatic = Config_getBool("EXTRACT_STATIC");
- m_isLinkableCached = 2; // linkable
- //printf("MemberDef::isLinkableInProject(name=%s)\n",name().data());
- if (isHidden())
- {
- //printf("is hidden\n");
- m_isLinkableCached = 1;
- return;
- }
- if (m_impl->templateMaster)
- {
- //printf("has template master\n");
- m_isLinkableCached = m_impl->templateMaster->isLinkableInProject() ? 2 : 1;
- }
- if (name().isEmpty() || name().at(0)=='@')
- {
- //printf("name invalid\n");
- m_isLinkableCached = 1; // not a valid or a dummy name
- return;
- }
- if (!hasDocumentation() && !isReference())
- {
- //printf("no docs or reference\n");
- m_isLinkableCached = 1; // no documentation
- return;
- }
- if (m_impl->group && !m_impl->group->isLinkableInProject())
- {
- //printf("group but group not linkable!\n");
- m_isLinkableCached = 1; // group but group not linkable
- return;
- }
- if (!m_impl->group && m_impl->classDef && !m_impl->classDef->isLinkableInProject())
- {
- //printf("in a class but class not linkable!\n");
- m_isLinkableCached = 1; // in class but class not linkable
- return;
- }
- if (!m_impl->group && m_impl->nspace && !m_impl->related && !m_impl->nspace->isLinkableInProject())
- {
- //printf("in a namespace but namespace not linkable!\n");
- m_isLinkableCached = 1; // in namespace but namespace not linkable
- return;
- }
- if (!m_impl->group && !m_impl->nspace &&
- !m_impl->related && !m_impl->classDef &&
- m_impl->fileDef && !m_impl->fileDef->isLinkableInProject())
- {
- //printf("in a file but file not linkable!\n");
- m_isLinkableCached = 1; // in file (and not in namespace) but file not linkable
- return;
- }
- if (!protectionLevelVisible(m_impl->prot) && m_impl->mtype!=Friend)
- {
- //printf("private and invisible!\n");
- m_isLinkableCached = 1; // hidden due to protection
- return;
- }
- if (m_impl->stat && m_impl->classDef==0 && !extractStatic)
- {
- //printf("static and invisible!\n");
- m_isLinkableCached = 1; // hidden due to staticness
- return;
- }
- //printf("linkable!\n");
- return; // linkable!
-}
-
-void MemberDef::setDocumentation(const char *d,const char *docFile,int docLine,bool stripWhiteSpace)
-{
- makeResident();
- Definition::setDocumentation(d,docFile,docLine,stripWhiteSpace);
- m_isLinkableCached = 0;
-}
-
-void MemberDef::setBriefDescription(const char *b,const char *briefFile,int briefLine)
-{
- makeResident();
- Definition::setBriefDescription(b,briefFile,briefLine);
- m_isLinkableCached = 0;
-}
-
-void MemberDef::setInbodyDocumentation(const char *d,const char *inbodyFile,int inbodyLine)
-{
- makeResident();
- Definition::setInbodyDocumentation(d,inbodyFile,inbodyLine);
- m_isLinkableCached = 0;
-}
-
-void MemberDef::setHidden(bool b)
-{
- makeResident();
- Definition::setHidden(b);
- m_isLinkableCached = 0;
-}
-
-bool MemberDef::isLinkableInProject() const
-{
- if (m_isLinkableCached==0)
- {
- MemberDef *that = (MemberDef*)this;
- that->_computeLinkableInProject();
- }
- ASSERT(m_isLinkableCached>0);
- return m_isLinkableCached==2;
-}
-
-bool MemberDef::isLinkable() const
-{
- makeResident();
- if (m_impl->templateMaster)
- {
- return m_impl->templateMaster->isLinkable();
- }
- else
- {
- return isLinkableInProject() || isReference();
- }
-}
-
-
-void MemberDef::setDefinitionTemplateParameterLists(QList<ArgumentList> *lists)
-{
- if (lists)
- {
- makeResident();
- if (m_impl->defTmpArgLists) delete m_impl->defTmpArgLists;
- m_impl->defTmpArgLists = copyArgumentLists(lists);
- }
-}
-
-void MemberDef::writeLink(OutputList &ol,ClassDef *,NamespaceDef *,
- FileDef *fd,GroupDef *gd,bool onlyText)
-{
- KEEP_RESIDENT_DURING_CALL;
- SrcLangExt lang = getLanguage();
- //static bool optimizeOutputJava = Config_getBool("OPTIMIZE_OUTPUT_JAVA");
- static bool hideScopeNames = Config_getBool("HIDE_SCOPE_NAMES");
- QCString sep = getLanguageSpecificSeparator(lang,TRUE);
- QCString n = name();
- if (!hideScopeNames)
- {
- if (m_impl->classDef && gd && !isRelated())
- {
- n.prepend(m_impl->classDef->displayName()+sep);
- }
- else if (m_impl->nspace && (gd || fd))
- {
- n.prepend(m_impl->nspace->displayName()+sep);
- }
- }
-
- if (isObjCMethod())
- {
- if (isStatic()) ol.docify("+ "); else ol.docify("- ");
- }
- if (!onlyText && isLinkable()) // write link
- {
- if (m_impl->mtype==EnumValue && getGroupDef()==0 && // enum value is not grouped
- getEnumScope() && getEnumScope()->getGroupDef()) // but its container is
- {
- GroupDef *enumValGroup = getEnumScope()->getGroupDef();
- ol.writeObjectLink(enumValGroup->getReference(),
- enumValGroup->getOutputFileBase(),
- anchor(),n);
- }
- else
- {
- ol.writeObjectLink(getReference(),getOutputFileBase(),anchor(),n);
- }
- }
- else // write only text
- {
- ol.startBold();
- ol.docify(n);
- ol.endBold();
- }
-}
-
-/*! If this member has an anonymous class/struct/union as its type, then
- * this method will return the ClassDef that describes this return type.
- */
-ClassDef *MemberDef::getClassDefOfAnonymousType()
-{
- // split KEEP_RESIDENT_DURING_CALL for performance
- makeResident();
- if (m_impl->cachedAnonymousType) return m_impl->cachedAnonymousType;
- LockingPtr<MemberDef> lock(this,this); // since this memberDef can access
- // other memberDefs prevent it from
- // being flushed to disk halfway
-
- QCString cname;
- if (getClassDef()!=0)
- {
- cname=getClassDef()->name().copy();
- }
- else if (getNamespaceDef()!=0)
- {
- cname=getNamespaceDef()->name().copy();
- }
- QCString ltype(m_impl->type);
- // strip `static' keyword from ltype
- //if (ltype.left(7)=="static ") ltype=ltype.right(ltype.length()-7);
- // strip `friend' keyword from ltype
- ltype.stripPrefix("friend ");
- static QRegExp r("@[0-9]+");
- int l,i=r.match(ltype,0,&l);
- //printf("ltype=`%s' i=%d\n",ltype.data(),i);
- // search for the last anonymous scope in the member type
- ClassDef *annoClassDef=0;
- if (i!=-1) // found anonymous scope in type
- {
- int il=i-1,ir=i+l;
- // extract anonymous scope
- while (il>=0 && (isId(ltype.at(il)) || ltype.at(il)==':' || ltype.at(il)=='@')) il--;
- if (il>0) il++; else if (il<0) il=0;
- while (ir<(int)ltype.length() && (isId(ltype.at(ir)) || ltype.at(ir)==':' || ltype.at(ir)=='@')) ir++;
-
- QCString annName = ltype.mid(il,ir-il);
-
- // if inside a class or namespace try to prepend the scope name
- if (!cname.isEmpty() && annName.left(cname.length()+2)!=cname+"::")
- {
- QCString ts=stripAnonymousNamespaceScope(cname+"::"+annName);
- //printf("Member::writeDeclaration: Trying %s\n",ts.data());
- annoClassDef=getClass(ts);
- }
- // if not found yet, try without scope name
- if (annoClassDef==0)
- {
- QCString ts=stripAnonymousNamespaceScope(annName);
- //printf("Member::writeDeclaration: Trying %s\n",ts.data());
- annoClassDef=getClass(ts);
- }
- }
- m_impl->cachedAnonymousType = annoClassDef;
- return annoClassDef;
-}
-
-/*! This methods returns TRUE iff the brief section (also known as
- * declaration section) is visible in the documentation.
- */
-bool MemberDef::isBriefSectionVisible() const
-{
- static bool extractStatic = Config_getBool("EXTRACT_STATIC");
- static bool hideUndocMembers = Config_getBool("HIDE_UNDOC_MEMBERS");
- static bool briefMemberDesc = Config_getBool("BRIEF_MEMBER_DESC");
- static bool repeatBrief = Config_getBool("REPEAT_BRIEF");
- static bool hideFriendCompounds = Config_getBool("HIDE_FRIEND_COMPOUNDS");
-
- //printf("Member %s grpId=%d docs=%s file=%s args=%s\n",
- // name().data(),
- // 0,"", //grpId,grpId==-1?"<none>":Doxygen::memberDocDict[grpId]->data(),
- // "", //getFileDef()->name().data(),
- // argsString());
-
- KEEP_RESIDENT_DURING_CALL;
-
- MemberGroupInfo *info = Doxygen::memGrpInfoDict[m_impl->grpId];
- //printf("name=%s m_impl->grpId=%d info=%p\n",name().data(),m_impl->grpId,info);
- //QCString *pMemGrp = Doxygen::memberDocDict[grpId];
- bool hasDocs = hasDocumentation() ||
- // part of a documented member group
- (m_impl->grpId!=-1 && info && !(info->doc.isEmpty() && info->header.isEmpty()));
-
- // only include static members with file/namespace scope if
- // explicitly enabled in the config file
- bool visibleIfStatic = !(getClassDef()==0 &&
- isStatic() &&
- !extractStatic
- );
-
- // only include members is the are documented or
- // HIDE_UNDOC_MEMBERS is NO in the config file
- bool visibleIfDocumented = (!hideUndocMembers ||
- hasDocs ||
- isDocumentedFriendClass()
- );
-
- // hide members with no detailed description and brief descriptions
- // explicitly disabled.
- bool visibleIfEnabled = !(hideUndocMembers &&
- documentation().isEmpty() &&
- !briefMemberDesc &&
- !repeatBrief
- );
-
- // Hide friend (class|struct|union) declarations if HIDE_FRIEND_COMPOUNDS is true
- bool visibleIfFriendCompound = !(hideFriendCompounds &&
- isFriend() &&
- (m_impl->type=="friend class" ||
- m_impl->type=="friend struct" ||
- m_impl->type=="friend union"
- )
- );
-
- // only include members that are non-private unless EXTRACT_PRIVATE is
- // set to YES or the member is part of a group
- bool visibleIfPrivate = (protectionLevelVisible(protection()) ||
- m_impl->mtype==Friend
- );
-
- // hide member if it overrides a member in a superclass and has no
- // documentation of its own
- //bool visibleIfDocVirtual = !reimplements() ||
- // !Config_getBool("INHERIT_DOCS") ||
- // hasDocs;
-
- // true if this member is a constructor or destructor
- bool cOrDTor = isConstructor() || isDestructor();
-
- // hide default constructors or destructors (no args) without
- // documentation
- bool visibleIfNotDefaultCDTor = !(cOrDTor &&
- m_impl->defArgList &&
- (m_impl->defArgList->isEmpty() ||
- m_impl->defArgList->first()->type == "void"
- ) &&
- !hasDocs
- );
-
-
- //printf("visibleIfStatic=%d visibleIfDocumented=%d visibleIfEnabled=%d "
- // "visibleIfPrivate=%d visibltIfNotDefaultCDTor=%d "
- // "visibleIfFriendCompound=%d !annScope=%d\n",
- // visibleIfStatic,visibleIfDocumented,
- // visibleIfEnabled,visibleIfPrivate,visibleIfNotDefaultCDTor,
- // visibleIfFriendCompound,!m_impl->annScope);
-
- bool visible = visibleIfStatic && visibleIfDocumented &&
- visibleIfEnabled && visibleIfPrivate &&
- /*visibleIfDocVirtual &&*/ visibleIfNotDefaultCDTor &&
- visibleIfFriendCompound &&
- !m_impl->annScope && !isHidden();
- //printf("MemberDef::isBriefSectionVisible() %d\n",visible);
- return visible;
-}
-
-
-void MemberDef::writeDeclaration(OutputList &ol,
- ClassDef *cd,NamespaceDef *nd,FileDef *fd,GroupDef *gd,
- bool inGroup
- )
-{
- //printf("%s MemberDef::writeDeclaration() inGroup=%d\n",name().data(),inGroup);
-
- // hide enum value, since they appear already as part of the enum, unless they
- // are explicitly grouped.
- KEEP_RESIDENT_DURING_CALL;
- if (!inGroup && m_impl->mtype==EnumValue) return;
-
- // hide members whose brief section should not be visible
- //if (!isBriefSectionVisible()) return;
-
- Definition *d=0;
- ASSERT (cd!=0 || nd!=0 || fd!=0 || gd!=0); // member should belong to something
- if (cd) d=cd; else if (nd) d=nd; else if (fd) d=fd; else d=gd;
-
- // write tag file information of this member
- if (!Config_getString("GENERATE_TAGFILE").isEmpty() && !isReference())
- {
- Doxygen::tagFile << " <member kind=\"";
- switch (m_impl->mtype)
- {
- case Define: Doxygen::tagFile << "define"; break;
- case EnumValue: Doxygen::tagFile << "enumvalue"; break;
- case Property: Doxygen::tagFile << "property"; break;
- case Event: Doxygen::tagFile << "event"; break;
- case Variable: Doxygen::tagFile << "variable"; break;
- case Typedef: Doxygen::tagFile << "typedef"; break;
- case Enumeration: Doxygen::tagFile << "enumeration"; break;
- case Function: Doxygen::tagFile << "function"; break;
- case Signal: Doxygen::tagFile << "signal"; break;
- //case Prototype: Doxygen::tagFile << "prototype"; break;
- case Friend: Doxygen::tagFile << "friend"; break;
- case DCOP: Doxygen::tagFile << "dcop"; break;
- case Slot: Doxygen::tagFile << "slot"; break;
- }
- if (m_impl->prot!=Public)
- {
- Doxygen::tagFile << "\" protection=\"";
- if (m_impl->prot==Protected) Doxygen::tagFile << "protected";
- else if (m_impl->prot==Package) Doxygen::tagFile << "package";
- else /* Private */ Doxygen::tagFile << "private";
- }
- if (m_impl->virt!=Normal)
- {
- Doxygen::tagFile << "\" virtualness=\"";
- if (m_impl->virt==Virtual) Doxygen::tagFile << "virtual";
- else /* Pure */ Doxygen::tagFile << "pure";
- }
- if (isStatic())
- {
- Doxygen::tagFile << "\" static=\"yes";
- }
- Doxygen::tagFile << "\">" << endl;
- Doxygen::tagFile << " <type>" << convertToXML(typeString()) << "</type>" << endl;
- Doxygen::tagFile << " <name>" << convertToXML(name()) << "</name>" << endl;
- Doxygen::tagFile << " <anchorfile>" << convertToXML(getOutputFileBase()+Doxygen::htmlFileExtension) << "</anchorfile>" << endl;
- Doxygen::tagFile << " <anchor>" << convertToXML(anchor()) << "</anchor>" << endl;
- Doxygen::tagFile << " <arglist>" << convertToXML(argsString()) << "</arglist>" << endl;
- writeDocAnchorsToTagFile();
- Doxygen::tagFile << " </member>" << endl;
- }
-
- // write search index info
- if (Doxygen::searchIndex && isLinkableInProject())
- {
- Doxygen::searchIndex->setCurrentDoc(qualifiedName(),getOutputFileBase(),anchor());
- Doxygen::searchIndex->addWord(localName(),TRUE);
- Doxygen::searchIndex->addWord(qualifiedName(),FALSE);
- }
-
- QCString cname = d->name();
- QCString cdname = d->displayName();
- QCString cfname = getOutputFileBase();
- //QCString osname = cname;
- // in case of class members that are put in a group the name of the outerscope
- // differs from the cname.
- //if (getOuterScope()) osname=getOuterScope()->name();
-
- //HtmlHelp *htmlHelp=0;
- //bool hasHtmlHelp = Config_getBool("GENERATE_HTML") && Config_getBool("GENERATE_HTMLHELP");
- //if (hasHtmlHelp) htmlHelp = HtmlHelp::getInstance();
-
- // search for the last anonymous scope in the member type
- ClassDef *annoClassDef=getClassDefOfAnonymousType();
-
- // start a new member declaration
- bool isAnonymous = annoClassDef || m_impl->annMemb || m_impl->annEnumType;
- ///printf("startMemberItem for %s\n",name().data());
- ol.startMemberItem( anchor(), isAnonymous ? 1 : m_impl->tArgList ? 3 : 0);
-
- // If there is no detailed description we need to write the anchor here.
- bool detailsVisible = isDetailedSectionLinkable();
- if (!detailsVisible && !m_impl->annMemb)
- {
- QCString doxyName=name().copy();
- if (!cname.isEmpty())
- {
- doxyName.prepend(cdname+getLanguageSpecificSeparator(getLanguage()));
- }
- QCString doxyArgs=argsString();
- ol.startDoxyAnchor(cfname,cname,anchor(),doxyName,doxyArgs);
-
- ol.pushGeneratorState();
- ol.disable(OutputGenerator::Man);
- ol.disable(OutputGenerator::Latex);
- ol.docify("\n");
- ol.popGeneratorState();
- }
-
- if (annoClassDef || m_impl->annMemb)
- {
- int j;
- for (j=0;j<s_indentLevel;j++)
- {
- ol.writeNonBreakableSpace(3);
- }
- }
-
- // *** write template lists
- if (m_impl->tArgList)
- {
- if (!isAnonymous) ol.startMemberTemplateParams();
- writeTemplatePrefix(ol,m_impl->tArgList);
- if (!isAnonymous) ol.endMemberTemplateParams(anchor());
- }
-
- // *** write type
- QCString ltype(m_impl->type);
- if (m_impl->mtype==Typedef) ltype.prepend("typedef ");
- // strip `friend' keyword from ltype
- ltype.stripPrefix("friend ");
- static QRegExp r("@[0-9]+");
-
- bool endAnonScopeNeeded=FALSE;
- int l,i=r.match(ltype,0,&l);
- if (i!=-1) // member has an anonymous type
- {
- //printf("annoClassDef=%p annMemb=%p scopeName=`%s' anonymous=`%s'\n",
- // annoClassDef,annMemb,cname.data(),ltype.mid(i,l).data());
-
- if (annoClassDef) // type is an anonymous compound
- {
- int ir=i+l;
- //printf("<<<<<<<<<<<<<<\n");
- ol.startAnonTypeScope(s_indentLevel++);
- annoClassDef->writeDeclaration(ol,m_impl->annMemb,inGroup);
- //printf(">>>>>>>>>>>>>> startMemberItem(2)\n");
- ol.startMemberItem(anchor(),2);
- int j;
- for (j=0;j< s_indentLevel-1;j++)
- {
- ol.writeNonBreakableSpace(3);
- }
- QCString varName=ltype.right(ltype.length()-ir).stripWhiteSpace();
- //printf(">>>>>> indDepth=%d ltype=`%s' varName=`%s'\n",indDepth,ltype.data(),varName.data());
- ol.docify("}");
- if (varName.isEmpty() && (name().isEmpty() || name().at(0)=='@'))
- {
- ol.docify(";");
- }
- endAnonScopeNeeded=TRUE;
- }
- else
- {
- if (getAnonymousEnumType()) // type is an anonymous enum
- {
- linkifyText(TextGeneratorOLImpl(ol), // out
- d, // scope
- getBodyDef(), // fileScope
- name(), //
- ltype.left(i), // text
- TRUE // autoBreak
- );
- getAnonymousEnumType()->writeEnumDeclaration(ol,cd,nd,fd,gd);
- //ol+=*getAnonymousEnumType()->enumDecl();
- linkifyText(TextGeneratorOLImpl(ol),d,m_impl->fileDef,name(),ltype.right(ltype.length()-i-l),TRUE);
- }
- else
- {
- ltype = ltype.left(i) + " { ... } " + removeAnonymousScopes(ltype.right(ltype.length()-i-l));
- linkifyText(TextGeneratorOLImpl(ol), // out
- d, // scope
- getBodyDef(), // fileScope
- name(), //
- ltype, // text
- TRUE // autoBreak
- );
- }
- }
- }
- else if (ltype=="@") // rename type from enum values
- {
- ltype="";
- }
- else
- {
- if (isObjCMethod())
- {
- ltype.prepend("(");
- ltype.append(")");
- }
- linkifyText(TextGeneratorOLImpl(ol), // out
- d, // scope
- getBodyDef(), // fileScope
- name(), //
- ltype, // text
- TRUE // autoBreak
- );
- }
- bool htmlOn = ol.isEnabled(OutputGenerator::Html);
- if (htmlOn && Config_getBool("HTML_ALIGN_MEMBERS") && !ltype.isEmpty())
- {
- ol.disable(OutputGenerator::Html);
- }
- if (!ltype.isEmpty()) ol.docify(" ");
- if (htmlOn)
- {
- ol.enable(OutputGenerator::Html);
- }
-
- if (m_impl->annMemb)
- {
- ol.pushGeneratorState();
- ol.disableAllBut(OutputGenerator::Html);
- ol.writeNonBreakableSpace(3);
- ol.popGeneratorState();
- }
- else
- {
- ol.insertMemberAlign(m_impl->tArgList!=0);
- }
-
- // *** write name
- if (!name().isEmpty() && name().at(0)!='@') // hide anonymous stuff
- {
- //printf("Member name=`%s gd=%p md->groupDef=%p inGroup=%d isLinkable()=%d\n",name().data(),gd,getGroupDef(),inGroup,isLinkable());
- if (!(name().isEmpty() || name().at(0)=='@') && // name valid
- (hasDocumentation() || isReference()) && // has docs
- !(m_impl->prot==Private && !Config_getBool("EXTRACT_PRIVATE") && m_impl->mtype!=Friend) && // hidden due to protection
- !(isStatic() && m_impl->classDef==0 && !Config_getBool("EXTRACT_STATIC")) // hidden due to static-ness
- )
- {
- if (m_impl->annMemb)
- {
- //printf("anchor=%s ann_anchor=%s\n",anchor(),annMemb->anchor());
- m_impl->annMemb->writeLink(ol,
- m_impl->annMemb->getClassDef(),
- m_impl->annMemb->getNamespaceDef(),
- m_impl->annMemb->getFileDef(),
- m_impl->annMemb->getGroupDef()
- );
- m_impl->annMemb->setAnonymousUsed();
- setAnonymousUsed();
- }
- else
- {
- //printf("writeLink %s->%d\n",name.data(),hasDocumentation());
- ClassDef *rcd = cd;
- if (isReference() && m_impl->classDef) rcd = m_impl->classDef;
- writeLink(ol,rcd,nd,fd,gd);
- }
- }
- else if (isDocumentedFriendClass())
- // if the member is an undocumented friend declaration for some class,
- // then maybe we can link to the class
- {
- writeLink(ol,getClass(name()),0,0,0);
- }
- else
- // there is a brief member description and brief member
- // descriptions are enabled or there is no detailed description.
- {
- if (m_impl->annMemb)
- {
- m_impl->annMemb->setAnonymousUsed();
- setAnonymousUsed();
- }
- ClassDef *rcd = cd;
- if (isReference() && m_impl->classDef) rcd = m_impl->classDef;
- writeLink(ol,rcd,nd,fd,gd,TRUE);
- }
- }
-
- // add to index
- if (isEnumerate() && name().at(0)=='@')
- {
- // don't add to index
- }
- else // index member
- {
- //static bool separateMemPages = Config_getBool("SEPARATE_MEMBER_PAGES");
- //QCString cfname = getOutputFileBase();
- //QCString cfiname = d->getOutputFileBase();
- //Doxygen::indexList.addIndexItem(
- // cname, // level1
- // name(), // level2
- // separateMemPages ? cfname : cfiname, // contRef
- // cfname, // memRef
- // anchor(), // anchor
- // this); // memberdef
- Doxygen::indexList.addIndexItem(d,this);
- }
-
- // *** write arguments
- if (argsString() && !isObjCMethod())
- {
- if (!isDefine()) ol.writeString(" ");
- linkifyText(TextGeneratorOLImpl(ol), // out
- d, // scope
- getBodyDef(), // fileScope
- name(), //
- argsString(), // text
- m_impl->annMemb, // autoBreak
- TRUE, // external
- FALSE, // keepSpaces
- s_indentLevel
- );
- }
-
- // *** write exceptions
- if (excpString())
- {
- ol.writeString(" ");
- ol.docify(excpString());
- }
-
- // *** write bitfields
- if (!m_impl->bitfields.isEmpty()) // add bitfields
- {
- linkifyText(TextGeneratorOLImpl(ol),d,getBodyDef(),name(),m_impl->bitfields.simplifyWhiteSpace());
- }
- else if (hasOneLineInitializer()
- //!init.isEmpty() && initLines==0 && // one line initializer
- //((maxInitLines>0 && userInitLines==-1) || userInitLines>0) // enabled by default or explicitly
- ) // add initializer
- {
- if (!isDefine())
- {
- ol.writeString(" = ");
- linkifyText(TextGeneratorOLImpl(ol),d,getBodyDef(),name(),m_impl->initializer.simplifyWhiteSpace());
- }
- else
- {
- ol.writeNonBreakableSpace(3);
- linkifyText(TextGeneratorOLImpl(ol),d,getBodyDef(),name(),m_impl->initializer);
- }
- }
-
- if (isObjCMethod() && isImplementation())
- {
- ol.startTypewriter();
- ol.docify(" [implementation]");
- ol.endTypewriter();
- }
-
- if (isProperty() && (isSettable() || isGettable()))
- {
- ol.writeLatexSpacing();
- ol.startTypewriter();
- ol.docify(" [");
- QStrList sl;
- if (isGettable()) sl.append("get");
- if (isSettable()) sl.append("set");
- const char *s=sl.first();
- while (s)
- {
- ol.docify(s);
- s=sl.next();
- if (s) ol.docify(", ");
- }
- ol.docify("]");
- ol.endTypewriter();
- }
-
- if (isEvent() && (isAddable() || isRemovable() || isRaisable()))
- {
- ol.writeLatexSpacing();
- ol.startTypewriter();
- ol.docify(" [");
- QStrList sl;
- if (isAddable()) sl.append("add");
- if (isRemovable()) sl.append("remove");
- if (isRaisable()) sl.append("raise");
- const char *s=sl.first();
- while (s)
- {
- ol.docify(s);
- s=sl.next();
- if (s) ol.docify(", ");
- }
- ol.docify("]");
- ol.endTypewriter();
- }
-
- if (!detailsVisible && !m_impl->annMemb)
- {
- ol.endDoxyAnchor(cfname,anchor());
- }
-
- //printf("endMember %s annoClassDef=%p annEnumType=%p\n",
- // name().data(),annoClassDef,annEnumType);
- ol.endMemberItem();
- if (endAnonScopeNeeded)
- {
- ol.endAnonTypeScope(--s_indentLevel);
- }
-
- // write brief description
- if (!briefDescription().isEmpty() &&
- Config_getBool("BRIEF_MEMBER_DESC")
- /* && !annMemb */
- )
- {
- ol.startMemberDescription(anchor());
- ol.parseDoc(briefFile(),briefLine(),
- getOuterScope()?getOuterScope():d,this,briefDescription(),
- TRUE,FALSE,0,TRUE,FALSE);
- if (detailsVisible)
- {
- ol.pushGeneratorState();
- ol.disableAllBut(OutputGenerator::Html);
- //ol.endEmphasis();
- ol.docify(" ");
- if (m_impl->group!=0 && gd==0) // forward link to the group
- {
- ol.startTextLink(getOutputFileBase(),anchor());
- }
- else // local link
- {
- ol.startTextLink(0,anchor());
- }
- ol.endTextLink();
- //ol.startEmphasis();
- ol.popGeneratorState();
- }
- // for RTF we need to add an extra empty paragraph
- ol.pushGeneratorState();
- ol.disableAllBut(OutputGenerator::RTF);
- ol.startParagraph();
- ol.endParagraph();
- ol.popGeneratorState();
- ol.endMemberDescription();
- }
- warnIfUndocumented();
-}
-
-bool MemberDef::isDetailedSectionLinkable() const
-{
- static bool extractAll = Config_getBool("EXTRACT_ALL");
- static bool alwaysDetailedSec = Config_getBool("ALWAYS_DETAILED_SEC");
- static bool repeatBrief = Config_getBool("REPEAT_BRIEF");
- static bool briefMemberDesc = Config_getBool("BRIEF_MEMBER_DESC");
- static bool hideUndocMembers = Config_getBool("HIDE_UNDOC_MEMBERS");
- static bool extractStatic = Config_getBool("EXTRACT_STATIC");
-
- KEEP_RESIDENT_DURING_CALL;
-
- // the member has details documentation for any of the following reasons
- bool docFilter =
- // treat everything as documented
- extractAll ||
- // has detailed docs
- !documentation().isEmpty() ||
- // has inbody docs
- !inbodyDocumentation().isEmpty() ||
- // is an enum with values that are documented
- (m_impl->mtype==Enumeration && m_impl->docEnumValues) ||
- // is documented enum value
- (m_impl->mtype==EnumValue && !briefDescription().isEmpty()) ||
- // has brief description that is part of the detailed description
- (!briefDescription().isEmpty() && // has brief docs
- (alwaysDetailedSec && // they are visible in
- (repeatBrief || // detailed section or
- !briefMemberDesc // they are explicitly not
- ) // shown in brief section
- )
- ) ||
- // has a multi-line initialization block
- //(initLines>0 && initLines<maxInitLines) ||
- (hasMultiLineInitializer() && !hideUndocMembers) ||
- // has one or more documented arguments
- (m_impl->defArgList!=0 && m_impl->defArgList->hasDocumentation()) ||
- // has user comments
- Doxygen::userComments
- ;
-
- // this is not a global static or global statics should be extracted
- bool staticFilter = getClassDef()!=0 || !isStatic() || extractStatic;
-
- // only include members that are non-private unless EXTRACT_PRIVATE is
- // set to YES or the member is part of a group
- bool privateFilter = protectionLevelVisible(protection()) || m_impl->mtype==Friend;
-
- // member is part of an anonymous scope that is the type of
- // another member in the list.
- //
- //bool inAnonymousScope = !briefDescription().isEmpty() && annUsed;
-
- // hide friend (class|struct|union) member if HIDE_FRIEND_COMPOUNDS
- // is true
- bool friendCompoundFilter = !(Config_getBool("HIDE_FRIEND_COMPOUNDS") &&
- isFriend() &&
- (m_impl->type=="friend class" ||
- m_impl->type=="friend struct" ||
- m_impl->type=="friend union"
- )
- );
-
-
- bool result = ((docFilter && staticFilter && privateFilter && friendCompoundFilter && !isHidden()));
- //printf("%s::isDetailedSectionLinkable: %d\n",name().data(),result);
- return result;
-}
-
-bool MemberDef::isDetailedSectionVisible(bool inGroup,bool inFile) const
-{
- static bool separateMemPages = Config_getBool("SEPARATE_MEMBER_PAGES");
- static bool inlineSimpleStructs = Config_getBool("INLINE_SIMPLE_STRUCTS");
- static bool hideUndocMembers = Config_getBool("HIDE_UNDOC_MEMBERS");
- bool groupFilter = getGroupDef()==0 || inGroup || separateMemPages;
- bool fileFilter = getNamespaceDef()==0 || !inFile;
- bool simpleFilter = !hideUndocMembers && inlineSimpleStructs &&
- getClassDef()!=0 && getClassDef()->isSimple();
-
- bool visible = isDetailedSectionLinkable() && groupFilter && fileFilter &&
- !isReference();
- bool result = visible || simpleFilter;
- //printf("%s::isDetailedSectionVisble: %d groupFilter=%d fileFilter=%d\n",
- // name().data(),result,groupFilter,fileFilter);
- return result;
-}
-
-/*! Writes the "detailed documentation" section of this member to
- * all active output formats.
- */
-void MemberDef::writeDocumentation(MemberList *ml,OutputList &ol,
- const char *scName,
- Definition *container,
- bool inGroup,
- bool showEnumValues,
- bool showInline
- )
-{
- // if this member is in a group find the real scope name.
- bool hasParameterList = FALSE;
- bool inFile = container->definitionType()==Definition::TypeFile;
- bool hasDocs = isDetailedSectionVisible(inGroup,inFile);
-
- //printf("MemberDef::writeDocumentation(): name=`%s' hasDocs=`%d' containerType=%d inGroup=%d\n",
- // name().data(),hasDocs,container->definitionType(),inGroup);
-
- if ( !hasDocs ) return;
- if (isEnumValue() && !showEnumValues) return;
-
- KEEP_RESIDENT_DURING_CALL;
-
- SrcLangExt lang = getLanguage();
- //printf("member=%s lang=%d\n",name().data(),lang);
- bool optVhdl = lang==SrcLangExt_VHDL;
- QCString sep = getLanguageSpecificSeparator(lang,TRUE);
-
- QCString scopeName = scName;
- QCString memAnchor = anchor();
- QCString ciname = container->name();
- if (container->definitionType()==TypeGroup)
- {
- if (getClassDef()) scopeName=getClassDef()->displayName();
- else if (getNamespaceDef()) scopeName=getNamespaceDef()->displayName();
- else if (getFileDef()) scopeName=getFileDef()->displayName();
- ciname = ((GroupDef *)container)->groupTitle();
- }
- else if (container->definitionType()==TypeFile && getNamespaceDef())
- { // member is in a namespace, but is written as part of the file documentation
- // as well, so we need to make sure its label is unique.
- memAnchor.prepend("file_");
- }
-
- QCString cname = container->name();
- QCString cfname = getOutputFileBase();
- QCString cfiname = container->getOutputFileBase();
-
- // get member name
- QCString doxyName=name();
- // prepend scope if there is any. TODO: make this optional for C only docs
- if (!scopeName.isEmpty())
- {
- doxyName.prepend(scopeName+sep);
- }
- QCString doxyArgs=argsString();
-
- QCString ldef = definition();
- QCString title = name();
- //printf("member `%s' def=`%s'\n",name().data(),ldef.data());
- if (isEnumerate())
- {
- if (title.at(0)=='@')
- {
- ldef = title = "anonymous enum";
- }
- else
- {
- ldef.prepend("enum ");
- }
- }
- else if (isEnumValue())
- {
- if (ldef.at(0)=='@')
- {
- ldef=ldef.mid(2);
- }
- }
- int i=0,l;
- static QRegExp r("@[0-9]+");
-
- //----------------------------------------
-
- ol.pushGeneratorState();
-
-
- if ((isVariable() || isTypedef()) && (i=r.match(ldef,0,&l))!=-1)
- {
- // find enum type and insert it in the definition
- MemberListIterator vmli(*ml);
- MemberDef *vmd;
- bool found=FALSE;
- for ( ; (vmd=vmli.current()) && !found ; ++vmli)
- {
- if (vmd->isEnumerate() && ldef.mid(i,l)==vmd->name())
- {
- ol.startDoxyAnchor(cfname,cname,memAnchor,doxyName,doxyArgs);
- ol.startMemberDoc(ciname,name(),memAnchor,name(),showInline);
- linkifyText(TextGeneratorOLImpl(ol),container,getBodyDef(),name(),ldef.left(i));
- vmd->writeEnumDeclaration(ol,getClassDef(),getNamespaceDef(),getFileDef(),getGroupDef());
- linkifyText(TextGeneratorOLImpl(ol),container,getBodyDef(),name(),ldef.right(ldef.length()-i-l));
-
- found=TRUE;
- }
- }
- if (!found) // anonymous compound
- {
- //printf("Anonymous compound `%s'\n",cname.data());
- ol.startDoxyAnchor(cfname,cname,memAnchor,doxyName,doxyArgs);
- ol.startMemberDoc(ciname,name(),memAnchor,name(),showInline);
- // search for the last anonymous compound name in the definition
- int si=ldef.find(' '),pi,ei=i+l;
- if (si==-1) si=0;
- while ((pi=r.match(ldef,i+l,&l))!=-1)
- {
- i=pi;
- ei=i+l;
- }
- // first si characters of ldef contain compound type name
- ol.startMemberDocName(isObjCMethod());
- ol.docify(ldef.left(si));
- ol.docify(" { ... } ");
- // last ei characters of ldef contain pointer/reference specifiers
- int ni=ldef.find("::",si);
- if (ni>=ei) ei=ni+2;
- linkifyText(TextGeneratorOLImpl(ol),container,getBodyDef(),name(),ldef.right(ldef.length()-ei));
- }
- }
- else // not an enum value
- {
- ol.startDoxyAnchor(cfname,cname,memAnchor,doxyName,doxyArgs);
- ol.startMemberDoc(ciname,name(),memAnchor,title,showInline);
-
- ClassDef *cd=getClassDef();
- if (!Config_getBool("HIDE_SCOPE_NAMES"))
- {
- bool first=TRUE;
- if (m_impl->defTmpArgLists)
- // definition has explicit template parameter declarations
- {
- QListIterator<ArgumentList> ali(*m_impl->defTmpArgLists);
- ArgumentList *tal;
- for (ali.toFirst();(tal=ali.current());++ali)
- {
- if (tal->count()>0)
- {
- if (!first) ol.docify(" ");
- ol.startMemberDocPrefixItem();
- writeTemplatePrefix(ol,tal);
- ol.endMemberDocPrefixItem();
- }
- }
- }
- else // definition gets it template parameters from its class
- // (since no definition was found)
- {
- if (cd && !isTemplateSpecialization())
- {
- QList<ArgumentList> tempParamLists;
- cd->getTemplateParameterLists(tempParamLists);
- //printf("#tempParamLists=%d\n",tempParamLists.count());
- QListIterator<ArgumentList> ali(tempParamLists);
- ArgumentList *tal;
- for (ali.toFirst();(tal=ali.current());++ali)
- {
- if (tal->count()>0)
- {
- if (!first) ol.docify(" ");
- ol.startMemberDocPrefixItem();
- writeTemplatePrefix(ol,tal);
- ol.endMemberDocPrefixItem();
- }
- }
- }
- if (m_impl->tArgList) // function template prefix
- {
- ol.startMemberDocPrefixItem();
- writeTemplatePrefix(ol,m_impl->tArgList);
- ol.endMemberDocPrefixItem();
- }
- }
- }
-
- ol.startMemberDocName(isObjCMethod());
- if (cd && cd->isObjectiveC())
- {
- // strip scope name
- int ep = ldef.find("::");
- if (ep!=-1)
- {
- int sp=ldef.findRev(' ',ep);
- if (sp!=-1)
- {
- ldef=ldef.left(sp+1)+ldef.mid(ep+2);
- }
- }
- // strip keywords
- int dp = ldef.find(':');
- if (dp!=-1)
- {
- ldef=ldef.left(dp+1);
- }
- int l=ldef.length();
- //printf("start >%s<\n",ldef.data());
- int i=l-1;
- while (i>=0 && (isId(ldef.at(i)) || ldef.at(i)==':')) i--;
- while (i>=0 && isspace((uchar)ldef.at(i))) i--;
- if (i>0)
- {
- // insert braches around the type
- QCString tmp("("+ldef.left(i+1)+")"+ldef.mid(i+1));
- ldef=tmp;
- }
- //printf("end >%s< i=%d\n",ldef.data(),i);
- if (isStatic()) ldef.prepend("+ "); else ldef.prepend("- ");
- }
-
- if (optVhdl)
- {
- VhdlDocGen::writeVHDLTypeDocumentation(this,container,ol);
- }
- else
- {
- linkifyText(TextGeneratorOLImpl(ol),container,getBodyDef(),name(),substitute(ldef,"::",sep));
- hasParameterList=writeDefArgumentList(ol,cd,scopeName,this);
- }
-
- if (hasOneLineInitializer()) // add initializer
- {
- if (!isDefine())
- {
- ol.docify(" = ");
- linkifyText(TextGeneratorOLImpl(ol),container,getBodyDef(),name(),m_impl->initializer.simplifyWhiteSpace());
- }
- else
- {
- ol.writeNonBreakableSpace(3);
- linkifyText(TextGeneratorOLImpl(ol),container,getBodyDef(),name(),m_impl->initializer);
- }
- }
- if (excpString()) // add exception list
- {
- ol.docify(" ");
- linkifyText(TextGeneratorOLImpl(ol),container,getBodyDef(),name(),excpString());
- }
- }
-
- Specifier lvirt=virtualness();
-
- if ((!isObjCMethod() || isOptional() || isRequired()) &&
- (protection()!=Public || lvirt!=Normal ||
- isFriend() || isRelated() ||
- (isInline() && Config_getBool("INLINE_INFO")) ||
- isSignal() || isSlot() ||
- isStatic() ||
- (m_impl->classDef && m_impl->classDef!=container && container->definitionType()==TypeClass) ||
- (m_impl->memSpec & ~Entry::Inline)!=0
- )
- )
- {
- // write the member specifier list
- ol.writeLatexSpacing();
- ol.startTypewriter();
- ol.docify(" [");
- QStrList sl;
- if (optVhdl)
- {
- sl.append(VhdlDocGen::trTypeString(getMemberSpecifiers()));
- }
- else
- {
- if (isFriend()) sl.append("friend");
- else if (isRelated()) sl.append("related");
- else
- {
- if (Config_getBool("INLINE_INFO") && isInline()) sl.append("inline");
- if (isExplicit()) sl.append("explicit");
- if (isMutable()) sl.append("mutable");
- if (isStatic()) sl.append("static");
- if (isGettable()) sl.append("get");
- if (isSettable()) sl.append("set");
- if (isAddable()) sl.append("add");
- if (isRemovable()) sl.append("remove");
- if (isRaisable()) sl.append("raise");
- if (isReadable()) sl.append("read");
- if (isWritable()) sl.append("write");
- if (isFinal()) sl.append("final");
- if (isAbstract()) sl.append("abstract");
- if (isOverride()) sl.append("override");
- if (isInitonly()) sl.append("initonly");
- if (isSealed()) sl.append("sealed");
- if (isNew()) sl.append("new");
- if (isOptional()) sl.append("optional");
- if (isRequired()) sl.append("required");
- if (isAssign()) sl.append("assign");
- else if (isCopy()) sl.append("copy");
- else if (isRetain()) sl.append("retain");
-
- if (!isObjCMethod())
- {
- if (protection()==Protected) sl.append("protected");
- else if (protection()==Private) sl.append("private");
- else if (protection()==Package) sl.append("package");
-
- if (lvirt==Virtual) sl.append("virtual");
- else if (lvirt==Pure) sl.append("pure virtual");
- if (isSignal()) sl.append("signal");
- if (isSlot()) sl.append("slot");
- }
- }
- if (m_impl->classDef &&
- container->definitionType()==TypeClass &&
- m_impl->classDef!=container &&
- !isRelated()
- )
- {
- sl.append("inherited");
- }
- }
- const char *s=sl.first();
- while (s)
- {
- ol.docify(s);
- s=sl.next();
- if (s) ol.docify(", ");
- }
- ol.docify("]");
- ol.endTypewriter();
- }
- else if (isObjCMethod() && isImplementation())
- {
- ol.writeLatexSpacing();
- ol.startTypewriter();
- ol.docify(" [implementation]");
- ol.endTypewriter();
- }
- if (hasParameterList)
- {
- ol.endParameterList();
- ol.endMemberDoc(TRUE);
- }
- else
- {
- ol.endMemberDocName();
- ol.endMemberDoc(FALSE);
- }
- ol.endDoxyAnchor(cfname,memAnchor);
- ol.startIndent();
-
- // FIXME:PARA
- //ol.pushGeneratorState();
- //ol.disable(OutputGenerator::RTF);
- //ol.newParagraph();
- //ol.popGeneratorState();
-
- /* write multi-line initializer (if any) */
- if (hasMultiLineInitializer()
- //initLines>0 && ((initLines<maxInitLines && userInitLines==-1) // implicitly enabled
- // || initLines<userInitLines // explicitly enabled
- // )
- )
- {
- //printf("md=%s initLines=%d init=`%s'\n",name().data(),initLines,init.data());
- ol.startBold();
- if (m_impl->mtype==Define)
- ol.parseText(theTranslator->trDefineValue());
- else
- ol.parseText(theTranslator->trInitialValue());
- ol.endBold();
- ParserInterface *pIntf = Doxygen::parserManager->getParser(getDefFileExtension());
- pIntf->resetCodeParserState();
- ol.startCodeFragment();
- pIntf->parseCode(ol,scopeName,m_impl->initializer,FALSE,0,getFileDef(),
- -1,-1,TRUE,this,FALSE);
- ol.endCodeFragment();
- }
-
- QCString brief = briefDescription();
- QCString detailed = documentation();
- LockingPtr<ArgumentList> docArgList = LockingPtr<ArgumentList>(this,m_impl->defArgList);
- if (m_impl->templateMaster)
- {
- brief = m_impl->templateMaster->briefDescription();
- detailed = m_impl->templateMaster->documentation();
- docArgList = m_impl->templateMaster->argumentList();
- }
-
- /* write brief description */
- if (!brief.isEmpty() &&
- (Config_getBool("REPEAT_BRIEF") ||
- !Config_getBool("BRIEF_MEMBER_DESC")
- )
- )
- {
- ol.startParagraph();
- ol.parseDoc(briefFile(),briefLine(),
- getOuterScope()?getOuterScope():container,this,
- brief,FALSE,FALSE,0,TRUE,FALSE);
- ol.endParagraph();
- }
-
- /* write detailed description */
- if (!detailed.isEmpty() ||
- !inbodyDocumentation().isEmpty())
- {
- // write vhdl inline code with or without option INLINE_SOURCE
- if (optVhdl && VhdlDocGen::isMisc(this))
- {
- VhdlDocGen::writeSource(this,ol,cname);
- return;
- }
- else
- {
- ol.parseDoc(docFile(),docLine(),getOuterScope()?getOuterScope():container,this,detailed+"\n",TRUE,FALSE);
- }
-
- if (!inbodyDocumentation().isEmpty())
- {
- ol.parseDoc(inbodyFile(),inbodyLine(),
- getOuterScope()?getOuterScope():container,this,
- inbodyDocumentation()+"\n",TRUE,FALSE);
- }
- }
- else if (!brief.isEmpty() && (Config_getBool("REPEAT_BRIEF") ||
- !Config_getBool("BRIEF_MEMBER_DESC")))
- {
- if (!inbodyDocumentation().isEmpty())
- {
- ol.parseDoc(inbodyFile(),inbodyLine(),getOuterScope()?getOuterScope():container,this,inbodyDocumentation()+"\n",TRUE,FALSE);
- }
- }
-
-
- //printf("***** defArgList=%p name=%s docs=%s hasDocs=%d\n",
- // defArgList,
- // defArgList?defArgList->hasDocumentation():-1);
- if (docArgList!=0 && docArgList->hasDocumentation())
- {
- QCString paramDocs;
- ArgumentListIterator ali(*docArgList);
- Argument *a;
- // convert the parameter documentation into a list of @param commands
- for (ali.toFirst();(a=ali.current());++ali)
- {
- if (a->hasDocumentation())
- {
- QCString direction = extractDirection(a->docs);
- paramDocs+="@param"+direction+" "+a->name+" "+a->docs;
- }
- }
- // feed the result to the documentation parser
- ol.parseDoc(
- docFile(),docLine(),
- getOuterScope()?getOuterScope():container,
- this, // memberDef
- paramDocs, // docStr
- TRUE, // indexWords
- FALSE // isExample
- );
-
- }
-
- // For enum, we also write the documented enum values
- if (isEnumerate())
- {
- bool first=TRUE;
- LockingPtr<MemberList> fmdl=enumFieldList();
- //printf("** %s: enum values=%d\n",name().data(),fmdl!=0 ? fmdl->count() : 0);
- if (fmdl!=0)
- {
- MemberDef *fmd=fmdl->first();
- while (fmd)
- {
- //printf("Enum %p: isLinkable()=%d\n",fmd,fmd->isLinkable());
- if (fmd->isLinkable())
- {
- if (first)
- {
- ol.startSimpleSect(BaseOutputDocInterface::EnumValues,0,0,theTranslator->trEnumerationValues()+": ");
- ol.startDescForItem();
- ol.startDescTable();
- }
-
- ol.addIndexItem(fmd->name(),ciname);
- ol.addIndexItem(ciname,fmd->name());
-
- //Doxygen::indexList.addIndexItem(
- // ciname, // level1
- // fmd->name(), // level2
- // separateMemPages ? cfname : cfiname, // contRef
- // cfname, // memRef
- // fmd->anchor(), // anchor
- // fmd); // memberdef
- Doxygen::indexList.addIndexItem(container,fmd);
-
- //ol.writeListItem();
- ol.startDescTableTitle(); // this enables emphasis!
- ol.startDoxyAnchor(cfname,cname,fmd->anchor(),fmd->name(),fmd->argsString());
- first=FALSE;
- //ol.startEmphasis();
- ol.docify(fmd->name());
- //ol.endEmphasis();
- ol.disableAllBut(OutputGenerator::Man);
- ol.writeString(" ");
- ol.enableAll();
- ol.endDoxyAnchor(cfname,fmd->anchor());
- ol.endDescTableTitle();
- //ol.newParagraph();
- ol.startDescTableData();
-
- if (!fmd->briefDescription().isEmpty())
- {
- ol.parseDoc(fmd->briefFile(),fmd->briefLine(),getOuterScope()?getOuterScope():container,fmd,fmd->briefDescription(),TRUE,FALSE);
- }
- // FIXME:PARA
- //if (!fmd->briefDescription().isEmpty() &&
- // !fmd->documentation().isEmpty())
- //{
- // ol.newParagraph();
- //}
- if (!fmd->documentation().isEmpty())
- {
- ol.parseDoc(fmd->docFile(),fmd->docLine(),getOuterScope()?getOuterScope():container,fmd,fmd->documentation()+"\n",TRUE,FALSE);
- }
- ol.endDescTableData();
- }
- fmd=fmdl->next();
- }
- }
- if (!first)
- {
- //ol.endItemList();
- ol.endDescTable();
- ol.endDescForItem();
- ol.endSimpleSect();
- ol.writeChar('\n');
- }
- }
-
- MemberDef *bmd=reimplements();
- ClassDef *bcd=0;
- if (bmd && (bcd=bmd->getClassDef()))
- {
- // write class that contains a member that is reimplemented by this one
- if (bcd->isLinkable())
- {
- ol.startParagraph();
- QCString reimplFromLine;
- if (bmd->virtualness()!=Pure && bcd->compoundType()!=ClassDef::Interface)
- {
- reimplFromLine = theTranslator->trReimplementedFromList(1);
- }
- else
- {
- reimplFromLine = theTranslator->trImplementedFromList(1);
- }
- int markerPos = reimplFromLine.find("@0");
- if (markerPos!=-1) // should always pass this.
- {
- ol.parseText(reimplFromLine.left(markerPos)); //text left from marker
- if (bmd->isLinkable()) // replace marker with link
- {
- //Definition *bd=bmd->group;
- //if (bd==0) bd=bcd;
- ol.writeObjectLink(bmd->getReference(),bmd->getOutputFileBase(),
- bmd->anchor(),bcd->displayName());
-
- //ol.writeObjectLink(bcd->getReference(),bcd->getOutputFileBase(),
- // bmd->anchor(),bcd->name());
- if ( bmd->isLinkableInProject() )
- {
- writePageRef(ol,bmd->getOutputFileBase(),bmd->anchor());
- }
- }
- else
- {
- ol.writeObjectLink(bcd->getReference(),bcd->getOutputFileBase(),
- 0,bcd->displayName());
- if (bcd->isLinkableInProject()/* && !Config_getBool("PDF_HYPERLINKS")*/ )
- {
- writePageRef(ol,bcd->getOutputFileBase(),bcd->anchor());
- }
- }
- ol.parseText(reimplFromLine.right(
- reimplFromLine.length()-markerPos-2)); // text right from marker
-
- }
- else
- {
- err("error: translation error: no marker in trReimplementsFromList()\n");
- }
- ol.endParagraph();
- }
-
- //ol.writeString(".");
- }
-
- LockingPtr<MemberList> bml=reimplementedBy();
- if (bml!=0)
- {
- MemberListIterator mli(*bml);
- MemberDef *bmd=0;
- uint count=0;
- ClassDef *bcd=0;
- for (mli.toFirst();(bmd=mli.current()) && (bcd=bmd->getClassDef());++mli)
- {
- // count the members that directly inherit from md and for
- // which the member and class are visible in the docs.
- if ( bmd->isLinkable() && bcd->isLinkable() )
- {
- count++;
- }
- }
- if (count>0)
- {
- mli.toFirst();
- // write the list of classes that overwrite this member
- ol.startParagraph();
-
- QCString reimplInLine;
- if (m_impl->virt==Pure || (m_impl->classDef && m_impl->classDef->compoundType()==ClassDef::Interface))
- {
- reimplInLine = theTranslator->trImplementedInList(count);
- }
- else
- {
- reimplInLine = theTranslator->trReimplementedInList(count);
- }
- static QRegExp marker("@[0-9]+");
- int index=0,newIndex,matchLen;
- // now replace all markers in reimplInLine with links to the classes
- while ((newIndex=marker.match(reimplInLine,index,&matchLen))!=-1)
- {
- ol.parseText(reimplInLine.mid(index,newIndex-index));
- bool ok;
- uint entryIndex = reimplInLine.mid(newIndex+1,matchLen-1).toUInt(&ok);
- //bmd=bml->at(entryIndex);
-
- count=0;
- // find the entryIndex-th documented entry in the inheritance list.
- for (mli.toLast();(bmd=mli.current()) && (bcd=bmd->getClassDef());--mli)
- {
- if ( bmd->isLinkable() && bcd->isLinkable())
- {
- if (count==entryIndex) break;
- count++;
- }
- }
-
- if (ok && bcd && bmd) // write link for marker
- {
- //ol.writeObjectLink(bcd->getReference(),bcd->getOutputFileBase(),
- // bmd->anchor(),bcd->name());
- ol.writeObjectLink(bmd->getReference(),bmd->getOutputFileBase(),
- bmd->anchor(),bcd->displayName());
-
- if (bmd->isLinkableInProject() )
- {
- writePageRef(ol,bmd->getOutputFileBase(),bmd->anchor());
- }
- }
- ++mli;
- index=newIndex+matchLen;
- }
- ol.parseText(reimplInLine.right(reimplInLine.length()-index));
- ol.endParagraph();
- }
- }
-
- // write the list of examples that use this member
- if (hasExamples())
- {
- ol.startSimpleSect(BaseOutputDocInterface::Examples,0,0,theTranslator->trExamples()+": ");
- ol.startDescForItem();
- writeExample(ol,m_impl->exampleSDict);
- ol.endDescForItem();
- ol.endSimpleSect();
- }
-
- if (m_impl->typeConstraints)
- {
- writeTypeConstraints(ol,this,m_impl->typeConstraints);
- }
-
- // write reference to the source
- writeSourceDef(ol,cname);
- writeSourceRefs(ol,cname);
- writeSourceReffedBy(ol,cname);
- writeInlineCode(ol,cname);
-
- // write call graph
- if ((m_impl->hasCallGraph || Config_getBool("CALL_GRAPH"))
- && (isFunction() || isSlot() || isSignal()) && Config_getBool("HAVE_DOT")
- )
- {
- DotCallGraph callGraph(this,FALSE);
- if (!callGraph.isTrivial() && !callGraph.isTooBig())
- {
- msg("Generating call graph for function %s\n",qPrint(qualifiedName()));
- ol.disable(OutputGenerator::Man);
- ol.startParagraph();
- ol.startCallGraph();
- ol.parseText(theTranslator->trCallGraph());
- ol.endCallGraph(callGraph);
- ol.endParagraph();
- ol.enableAll();
- }
- }
- if ((m_impl->hasCallerGraph || Config_getBool("CALLER_GRAPH"))
- && (isFunction() || isSlot() || isSignal()) && Config_getBool("HAVE_DOT")
- )
- {
- DotCallGraph callerGraph(this, TRUE);
- if (!callerGraph.isTrivial() && !callerGraph.isTooBig())
- {
- msg("Generating caller graph for function %s\n",qPrint(qualifiedName()));
- ol.disable(OutputGenerator::Man);
- ol.startParagraph();
- ol.startCallGraph();
- ol.parseText(theTranslator->trCallerGraph());
- ol.endCallGraph(callerGraph);
- ol.endParagraph();
- ol.enableAll();
- }
- }
-
- if (Doxygen::userComments)
- {
- ol.pushGeneratorState();
- ol.disableAllBut(OutputGenerator::Html);
- QCString cmd = "<? $root=$_SERVER['DOCUMENT_ROOT']; "
- "passthru(\"$root/doxynotes --lookup "+
- getOutputFileBase()+":"+anchor()+"\") ?>";
- ol.writeString(cmd);
- ol.popGeneratorState();
- }
-
- ol.endIndent();
-
- // enable LaTeX again
- //if (Config_getBool("EXTRACT_ALL") && !hasDocs) ol.enable(OutputGenerator::Latex);
- ol.popGeneratorState();
-
- //------------------------------------------------
-
- if (!Config_getBool("EXTRACT_ALL") &&
- Config_getBool("WARN_IF_UNDOCUMENTED") &&
- Config_getBool("WARN_NO_PARAMDOC") &&
- !Doxygen::suppressDocWarnings)
- {
- if (!hasDocumentedParams())
- {
- warn_doc_error(docFile(),docLine(),
- "warning: parameters of member %s are not (all) documented",
- qPrint(qualifiedName()));
- }
- if (!hasDocumentedReturnType() && isFunction() && hasDocumentation())
- {
- warn_doc_error(docFile(),docLine(),
- "warning: return type of member %s is not documented",
- qPrint(qualifiedName()));
- }
- }
-}
-
-// strip scope and field name from the type
-// example: "struct N::S.v.c" will become "struct v"
-static QCString simplifyTypeForTable(const QCString &s)
-{
- QCString ts=removeAnonymousScopes(s);
- if (ts.right(2)=="::") ts = ts.left(ts.length()-2);
- static QRegExp re("[A-Z_a-z0-9]+::");
- int i,l;
- while ((i=re.match(ts,0,&l))!=-1)
- {
- ts=ts.left(i)+ts.mid(i+l);
- }
- i=ts.findRev('.');
- if (i!=-1) ts = ts.left(i);
- i=ts.findRev('.');
- if (i!=-1) ts = ts.right(ts.length()-i-1);
- //printf("simplifyTypeForTable(%s)->%s\n",s.data(),ts.data());
- return ts;
-}
-
-void MemberDef::writeMemberDocSimple(OutputList &ol, Definition *container)
-{
- KEEP_RESIDENT_DURING_CALL;
-
- Definition *scope = getOuterScope();
- QCString doxyName = name();
- QCString doxyArgs = argsString();
- QCString memAnchor = anchor();
- QCString cfname = getOutputFileBase();
- QCString cname;
- if (scope) cname = scope->name();
- if (doxyName.at(0)=='@')
- {
- doxyName="__unnamed__";
- }
-
- ol.startInlineMemberType();
- ol.startDoxyAnchor(cfname,cname,memAnchor,doxyName,doxyArgs);
-
- QCString ts = simplifyTypeForTable(m_impl->type);
-
- linkifyText(TextGeneratorOLImpl(ol), // out
- scope, // scope
- getBodyDef(), // fileScope
- doxyName, //
- ts, // text
- TRUE // autoBreak
- );
- ol.endDoxyAnchor(cfname,memAnchor);
- ol.endInlineMemberType();
-
- ol.startInlineMemberName();
- ol.docify(doxyName);
- if (!m_impl->bitfields.isEmpty()) // add bitfields
- {
- linkifyText(TextGeneratorOLImpl(ol),getOuterScope(),getBodyDef(),name(),m_impl->bitfields.simplifyWhiteSpace());
- }
- ol.endInlineMemberName();
-
- ol.startInlineMemberDoc();
-
- QCString brief = briefDescription();
- QCString detailed = documentation();
-
- /* write brief description */
- if (!brief.isEmpty() &&
- (Config_getBool("REPEAT_BRIEF") ||
- !Config_getBool("BRIEF_MEMBER_DESC")
- )
- )
- {
- ol.parseDoc(briefFile(),briefLine(),
- getOuterScope()?getOuterScope():container,this,
- brief,FALSE,FALSE,0,TRUE,FALSE);
- }
-
- /* write detailed description */
- if (!detailed.isEmpty())
- {
- ol.parseDoc(docFile(),docLine(),
- getOuterScope()?getOuterScope():container,this,
- detailed+"\n",FALSE,FALSE,0,TRUE,FALSE);
-
- }
-
- ol.endInlineMemberDoc();
-}
-
-QCString MemberDef::memberTypeName() const
-{
- makeResident();
- switch (m_impl->mtype)
- {
- case Define: return "define";
- case Function: return "function";
- case Variable: return "variable";
- case Typedef: return "typedef";
- case Enumeration: return "enumeration";
- case EnumValue: return "enumvalue";
- case Signal: return "signal";
- case Slot: return "slot";
- case Friend: return "friend";
- case DCOP: return "dcop";
- case Property: return "property";
- case Event: return "event";
- default: return "unknown";
- }
-}
-
-void MemberDef::warnIfUndocumented()
-{
- makeResident();
- if (m_impl->memberGroup) return;
- ClassDef *cd = getClassDef();
- NamespaceDef *nd = getNamespaceDef();
- FileDef *fd = getFileDef();
- GroupDef *gd = getGroupDef();
- Definition *d=0;
- const char *t=0;
- if (cd)
- t="class", d=cd;
- else if (nd)
- t="namespace", d=nd;
- else if (gd)
- t="group", d=gd;
- else
- t="file", d=fd;
- static bool extractAll = Config_getBool("EXTRACT_ALL");
-
- //printf("warnIfUndoc: d->isLinkable()=%d isLinkable()=%d "
- // "isDocumentedFriendClass()=%d name()=%s prot=%d\n",
- // d->isLinkable(),isLinkable(),isDocumentedFriendClass(),
- // name().data(),prot);
- if ((!hasUserDocumentation() && !extractAll) &&
- !isFriendClass() &&
- name().find('@')==-1 && d->name().find('@')==-1 &&
- protectionLevelVisible(m_impl->prot)
- )
- {
- warn_undoc(getDefFileName(),getDefLine(),"warning: Member %s%s (%s) of %s %s is not documented.",
- qPrint(name()),qPrint(argsString()),qPrint(memberTypeName()),t,qPrint(d->name()));
- }
-}
-
-
-
-bool MemberDef::isFriendClass() const
-{
- makeResident();
- return (isFriend() &&
- (m_impl->type=="friend class" || m_impl->type=="friend struct" ||
- m_impl->type=="friend union"));
-}
-
-bool MemberDef::isDocumentedFriendClass() const
-{
- makeResident();
- ClassDef *fcd=0;
- QCString baseName=name();
- int i=baseName.find('<');
- if (i!=-1) baseName=baseName.left(i);
- return (isFriendClass() &&
- (fcd=getClass(baseName)) && fcd->isLinkable());
-}
-
-bool MemberDef::hasDocumentation() const
-{
- makeResident();
- return Definition::hasDocumentation() ||
- (m_impl->mtype==Enumeration && m_impl->docEnumValues) || // has enum values
- (m_impl->defArgList!=0 && m_impl->defArgList->hasDocumentation()); // has doc arguments
-}
-
-#if 0
-bool MemberDef::hasUserDocumentation() const
-{
- bool hasDocs = Definition::hasUserDocumentation();
- return hasDocs;
-}
-#endif
-
-
-void MemberDef::setMemberGroup(MemberGroup *grp)
-{
- makeResident();
- m_impl->memberGroup = grp;
-}
-
-bool MemberDef::visibleMemberGroup(bool hideNoHeader)
-{
- makeResident();
- return m_impl->memberGroup!=0 &&
- (!hideNoHeader || m_impl->memberGroup->header()!="[NOHEADER]");
-}
-
-QCString MemberDef::getScopeString() const
-{
- makeResident();
- QCString result;
- if (getClassDef()) result=getClassDef()->displayName();
- else if (getNamespaceDef()) result=getNamespaceDef()->displayName();
- return result;
-}
-
-#if 0
-static QCString escapeAnchor(const QCString &anchor)
-{
- QCString result;
- int l = anchor.length(),i;
- for (i=0;i<l;i++)
- {
- char c = anchor.at(i);
- if ((c>='a' && c<='z') || (c>='A' && c<='Z'))
- {
- result+=c;
- }
- else
- {
- static char hexStr[]="0123456789ABCDEF";
- char escChar[]={ '_', 0, 0, 0 };
- escChar[1]=hexStr[c>>4];
- escChar[2]=hexStr[c&0xf];
- result+=escChar;
- }
- }
- return result;
-}
-#endif
-
-void MemberDef::setAnchor(const char *a)
-{
- makeResident();
- //anc=a;
- a=a;
- QCString memAnchor = name();
- if (!m_impl->args.isEmpty()) memAnchor+=m_impl->args;
-
- memAnchor.prepend(definition()); // actually the method name is now included
- // twice, which is silly, but we keep it this way for backward
- // compatibility.
-
- // include number of template arguments as well,
- // to distinguish between two template
- // specializations that only differ in the template parameters.
- if (m_impl->tArgList)
- {
- char buf[20];
- snprintf(buf,20,"%d:",m_impl->tArgList->count());
- buf[19]='\0';
- memAnchor.prepend(buf);
- }
-
- // convert to md5 hash
- uchar md5_sig[16];
- QCString sigStr(33);
- MD5Buffer((const unsigned char *)memAnchor.data(),memAnchor.length(),md5_sig);
- //printf("memAnchor=%s\n",memAnchor.data());
- MD5SigToString(md5_sig,sigStr.data(),33);
- m_impl->anc = "a"+sigStr;
-}
-
-void MemberDef::setGroupDef(GroupDef *gd,Grouping::GroupPri_t pri,
- const QCString &fileName,int startLine,
- bool hasDocs,MemberDef *member)
-{
- //printf("%s MemberDef::setGroupDef(%s)\n",name().data(),gd->name().data());
- makeResident();
- m_impl->group=gd;
- m_impl->grouppri=pri;
- m_impl->groupFileName=fileName;
- m_impl->groupStartLine=startLine;
- m_impl->groupHasDocs=hasDocs;
- m_impl->groupMember=member;
- m_isLinkableCached = 0;
-}
-
-void MemberDef::setEnumScope(MemberDef *md)
-{
- makeResident();
- m_impl->enumScope=md;
- if (md->getGroupDef())
- {
- m_impl->group=md->getGroupDef();
- m_impl->grouppri=md->getGroupPri();
- m_impl->groupFileName=md->getGroupFileName();
- m_impl->groupStartLine=md->getGroupStartLine();
- m_impl->groupHasDocs=md->getGroupHasDocs();
- m_isLinkableCached = 0;
- }
-}
-
-void MemberDef::setMemberClass(ClassDef *cd)
-{
- makeResident();
- m_impl->classDef=cd;
- m_isLinkableCached = 0;
- m_isConstructorCached = 0;
- setOuterScope(cd);
-}
-
-void MemberDef::setNamespace(NamespaceDef *nd)
-{
- makeResident();
- m_impl->nspace=nd;
- setOuterScope(nd);
-}
-
-MemberDef *MemberDef::createTemplateInstanceMember(
- ArgumentList *formalArgs,ArgumentList *actualArgs)
-{
- KEEP_RESIDENT_DURING_CALL;
- //printf(" Member %s %s %s\n",typeString(),name().data(),argsString());
- ArgumentList *actualArgList = 0;
- if (m_impl->defArgList)
- {
- actualArgList = new ArgumentList;
- ArgumentListIterator ali(*m_impl->defArgList);
- Argument *arg;
- for (;(arg=ali.current());++ali)
- {
- Argument *actArg = new Argument(*arg);
- actArg->type = substituteTemplateArgumentsInString(actArg->type,formalArgs,actualArgs);
- actualArgList->append(actArg);
- }
- actualArgList->constSpecifier = m_impl->defArgList->constSpecifier;
- actualArgList->volatileSpecifier = m_impl->defArgList->volatileSpecifier;
- actualArgList->pureSpecifier = m_impl->defArgList->pureSpecifier;
- }
-
- QCString methodName=name();
- if (methodName.left(9)=="operator ") // conversion operator
- {
- methodName=substituteTemplateArgumentsInString(methodName,formalArgs,actualArgs);
- }
-
- MemberDef *imd = new MemberDef(
- getDefFileName(),getDefLine(),
- substituteTemplateArgumentsInString(m_impl->type,formalArgs,actualArgs),
- methodName,
- substituteTemplateArgumentsInString(m_impl->args,formalArgs,actualArgs),
- m_impl->exception, m_impl->prot,
- m_impl->virt, m_impl->stat, m_impl->related, m_impl->mtype, 0, 0
- );
- imd->setArgumentList(actualArgList);
- imd->setDefinition(substituteTemplateArgumentsInString(m_impl->def,formalArgs,actualArgs));
- imd->setBodyDef(getBodyDef());
- imd->setBodySegment(getStartBodyLine(),getEndBodyLine());
- //imd->setBodyMember(this);
-
- // TODO: init other member variables (if needed).
- // TODO: reimplemented info
- return imd;
-}
-
-bool MemberDef::hasOneLineInitializer() const
-{
- makeResident();
- //printf("%s: init=%s, initLines=%d maxInitLines=%d userInitLines=%d\n",
- // name().data(),m_impl->initializer.data(),m_impl->initLines,
- // m_impl->maxInitLines,m_impl->userInitLines);
- return !m_impl->initializer.isEmpty() && m_impl->initLines==0 && // one line initializer
- ((m_impl->maxInitLines>0 && m_impl->userInitLines==-1) || m_impl->userInitLines>0); // enabled by default or explicitly
-}
-
-bool MemberDef::hasMultiLineInitializer() const
-{
- makeResident();
- //printf("initLines=%d userInitLines=%d maxInitLines=%d\n",
- // initLines,userInitLines,maxInitLines);
- return m_impl->initLines>0 &&
- ((m_impl->initLines<m_impl->maxInitLines && m_impl->userInitLines==-1) // implicitly enabled
- || m_impl->initLines<m_impl->userInitLines // explicitly enabled
- );
-}
-
-void MemberDef::setInitializer(const char *initializer)
-{
- makeResident();
- m_impl->initializer=initializer;
- int p=m_impl->initializer.length()-1;
- while (p>=0 && isspace((uchar)m_impl->initializer.at(p))) p--;
- m_impl->initializer=m_impl->initializer.left(p+1);
- m_impl->initLines=m_impl->initializer.contains('\n');
-}
-
-void MemberDef::addListReference(Definition *)
-{
- KEEP_RESIDENT_DURING_CALL;
- static bool optimizeOutputForC = Config_getBool("OPTIMIZE_OUTPUT_FOR_C");
- //static bool hideScopeNames = Config_getBool("HIDE_SCOPE_NAMES");
- //static bool optimizeOutputJava = Config_getBool("OPTIMIZE_OUTPUT_JAVA");
- //static bool fortranOpt = Config_getBool("OPTIMIZE_FOR_FORTRAN");
- SrcLangExt lang = getLanguage();
- visited=TRUE;
- if (!isLinkableInProject()) return;
- QCString memLabel;
- if (optimizeOutputForC)
- {
- memLabel=theTranslator->trGlobal(TRUE,TRUE);
- }
- else if (lang==SrcLangExt_Fortran)
- {
- memLabel=theTranslator->trSubprogram(TRUE,TRUE);
- }
- else
- {
- memLabel=theTranslator->trMember(TRUE,TRUE);
- }
- QCString memName = name();
- Definition *pd=getOuterScope();
- QCString pdName = pd->definitionType()==Definition::TypeClass ?
- ((ClassDef*)pd)->displayName() : pd->name();
- QCString sep = getLanguageSpecificSeparator(lang,TRUE);
- QCString memArgs;
- if (!isRelated()
- /* && commented out as a result of bug 597016
- (
- (!hideScopeNames && // there is a scope
- pd && pd!=Doxygen::globalScope) // and we can show it
- ||
- (pd=getClassDef()) // it's a class so we
- // show the scope anyway
- )
- */
- )
- {
- if (isObjCMethod())
- {
- memName = "[" + pd->name() + " " + name() + "]";
- }
- else
- {
- if (pd!=Doxygen::globalScope) memName.prepend(pdName+sep);
- memArgs = argsString();
- }
- }
- LockingPtr< QList<ListItemInfo> > xrefItems = xrefListItems();
- if (xrefItems!=0)
- {
- addRefItem(xrefItems.pointer(),
- qualifiedName()+argsString(), // argsString is needed for overloaded functions (see bug 609624)
- memLabel,
- getOutputFileBase()+"#"+anchor(),memName,memArgs);
- }
-}
-
-MemberList *MemberDef::getSectionList(Definition *d) const
-{
- makeResident();
- char key[20];
- sprintf(key,"%p",d);
- return (d!=0 && m_impl->classSectionSDict) ? m_impl->classSectionSDict->find(key) : 0;
-}
-
-void MemberDef::setSectionList(Definition *d, MemberList *sl)
-{
- makeResident();
- //printf("MemberDef::setSectionList(%p,%p) name=%s\n",d,sl,name().data());
- char key[20];
- sprintf(key,"%p",d);
- if (m_impl->classSectionSDict==0)
- {
- m_impl->classSectionSDict = new SDict<MemberList>(7);
- }
- m_impl->classSectionSDict->append(key,sl);
-}
-
-Specifier MemberDef::virtualness(int count) const
-{
- KEEP_RESIDENT_DURING_CALL;
- if (count>25)
- {
- warn(getDefFileName(),getDefLine(),
- "warning: Internal inconsistency: recursion detected in overload relation for member %s!"
- ,qPrint(name())
- );
- return Normal;
- }
- makeResident();
- Specifier v = m_impl->virt;
- MemberDef *rmd = reimplements();
- while (rmd && v==Normal)
- {
- v = rmd->virtualness(count+1)==Normal ? Normal : Virtual;
- rmd = rmd->reimplements();
- }
- return v;
-}
-
-void MemberDef::_computeIsConstructor()
-{
- KEEP_RESIDENT_DURING_CALL;
- m_isConstructorCached=1; // FALSE
- if (m_impl->classDef)
- {
- if (m_impl->isDMember) // for D
- {
- m_isConstructorCached = name()=="this" ? 2 : 1;
- return;
- }
- else if (getLanguage()==SrcLangExt_PHP) // for PHP
- {
- m_isConstructorCached = name()=="__construct" ? 2 : 1;
- return;
- }
- else if (name()=="__init__" &&
- getLanguage()==SrcLangExt_Python) // for Python
- {
- m_isConstructorCached = 2; // TRUE
- return;
- }
- else if (getLanguage()==SrcLangExt_Tcl) // for Tcl
- {
- m_isConstructorCached = name()=="constructor" ? 2 : 1;
- return;
- }
- else // for other languages
- {
- QCString locName = m_impl->classDef->localName();
- int i=locName.find('<');
- if (i==-1) // not a template class
- {
- m_isConstructorCached = name()==locName ? 2 : 1;
- }
- else
- {
- m_isConstructorCached = name()==locName.left(i) ? 2 : 1;
- }
- return;
- }
- }
-}
-
-bool MemberDef::isConstructor() const
-{
- if (m_isConstructorCached==0)
- {
- MemberDef *that = (MemberDef*)this;
- that->_computeIsConstructor();
- }
- ASSERT(m_isConstructorCached>0);
- return m_isConstructorCached==2;
-
-}
-
-void MemberDef::_computeIsDestructor()
-{
- KEEP_RESIDENT_DURING_CALL;
- bool isDestructor;
- if (m_impl->isDMember) // for D
- {
- isDestructor = name()=="~this";
- }
- else if (getLanguage()==SrcLangExt_PHP) // for PHP
- {
- isDestructor = name()=="__destruct";
- }
- else if (getLanguage()==SrcLangExt_Tcl) // for Tcl
- {
- isDestructor = name()=="destructor";
- }
- else if (name()=="__del__" &&
- getLanguage()==SrcLangExt_Python) // for Python
- {
- isDestructor=TRUE;
- }
- else // other languages
- {
- isDestructor =
- (name().find('~')!=-1 || name().find('!')!=-1) // The ! is for C++/CLI
- && name().find("operator")==-1;
- }
- m_isDestructorCached = isDestructor ? 2 : 1;
-}
-
-bool MemberDef::isDestructor() const
-{
- if (m_isDestructorCached==0)
- {
- MemberDef *that=(MemberDef*)this;
- that->_computeIsDestructor();
- }
- ASSERT(m_isDestructorCached>0);
- return m_isDestructorCached==2;
-}
-
-void MemberDef::writeEnumDeclaration(OutputList &typeDecl,
- ClassDef *cd,NamespaceDef *nd,FileDef *fd,GroupDef *gd)
-{
- KEEP_RESIDENT_DURING_CALL;
-
- int enumMemCount=0;
-
- QList<MemberDef> *fmdl=m_impl->enumFields;
- uint numVisibleEnumValues=0;
- if (fmdl)
- {
- MemberDef *fmd=fmdl->first();
- while (fmd)
- {
- if (fmd->isBriefSectionVisible()) numVisibleEnumValues++;
- fmd=fmdl->next();
- }
- }
- if (numVisibleEnumValues==0 && !isBriefSectionVisible())
- {
- return;
- }
-
- QCString n = name();
- int i=n.findRev("::");
- if (i!=-1) n=n.right(n.length()-i-2); // strip scope (TODO: is this needed?)
- if (n[0]!='@') // not an anonymous enum
- {
- if (isLinkableInProject() || hasDocumentedEnumValues())
- {
- if (!Config_getString("GENERATE_TAGFILE").isEmpty() && !isReference())
- {
- Doxygen::tagFile << " <member kind=\"enumeration\">" << endl;
- Doxygen::tagFile << " <name>" << convertToXML(name()) << "</name>" << endl;
- Doxygen::tagFile << " <anchorfile>" << convertToXML(getOutputFileBase()+Doxygen::htmlFileExtension) << "</anchorfile>" << endl;
- Doxygen::tagFile << " <anchor>" << convertToXML(anchor()) << "</anchor>" << endl;
- Doxygen::tagFile << " <arglist>" << convertToXML(argsString()) << "</arglist>" << endl;
- Doxygen::tagFile << " </member>" << endl;
- }
- writeLink(typeDecl,cd,nd,fd,gd);
- }
- else
- {
- typeDecl.startBold();
- typeDecl.docify(n);
- typeDecl.endBold();
- }
- typeDecl.writeChar(' ');
- }
-
- uint enumValuesPerLine = (uint)Config_getInt("ENUM_VALUES_PER_LINE");
- if (numVisibleEnumValues>0 && enumValuesPerLine>0)
- {
- typeDecl.docify("{ ");
- if (fmdl)
- {
- MemberDef *fmd=fmdl->first();
- bool fmdVisible = fmd->isBriefSectionVisible();
- while (fmd)
- {
- if (fmdVisible)
- {
- /* in html we start a new line after a number of items */
- if (numVisibleEnumValues>enumValuesPerLine
- && (enumMemCount%enumValuesPerLine)==0
- )
- {
- typeDecl.pushGeneratorState();
- typeDecl.disableAllBut(OutputGenerator::Html);
- typeDecl.enable(OutputGenerator::Latex);
- typeDecl.lineBreak();
- typeDecl.disable(OutputGenerator::Latex);
- typeDecl.writeString("&#160;&#160;");
- typeDecl.popGeneratorState();
- }
-
- if (fmd->hasDocumentation()) // enum value has docs
- {
- if (!Config_getString("GENERATE_TAGFILE").isEmpty() && !fmd->isReference())
- {
- Doxygen::tagFile << " <member kind=\"enumvalue\">" << endl;
- Doxygen::tagFile << " <name>" << convertToXML(fmd->name()) << "</name>" << endl;
- Doxygen::tagFile << " <anchorfile>" << convertToXML(getOutputFileBase()+Doxygen::htmlFileExtension) << "</anchorfile>" << endl;
- Doxygen::tagFile << " <anchor>" << convertToXML(fmd->anchor()) << "</anchor>" << endl;
- Doxygen::tagFile << " <arglist>" << convertToXML(fmd->argsString()) << "</arglist>" << endl;
- Doxygen::tagFile << " </member>" << endl;
- }
- fmd->writeLink(typeDecl,cd,nd,fd,gd);
- }
- else // no docs for this enum value
- {
- typeDecl.startBold();
- typeDecl.docify(fmd->name());
- typeDecl.endBold();
- }
- if (fmd->hasOneLineInitializer()) // enum value has initializer
- {
- typeDecl.writeString(" = ");
- typeDecl.parseText(fmd->initializer());
- }
- }
-
- bool prevVisible = fmdVisible;
- fmd=fmdl->next();
- if (fmd && (fmdVisible=fmd->isBriefSectionVisible()))
- {
- typeDecl.writeString(", ");
- }
- if (prevVisible)
- {
- typeDecl.disable(OutputGenerator::Man);
- typeDecl.writeString("\n"); // to prevent too long lines in LaTeX
- typeDecl.enable(OutputGenerator::Man);
- enumMemCount++;
- }
- }
- if (numVisibleEnumValues>enumValuesPerLine)
- {
- typeDecl.pushGeneratorState();
- typeDecl.disableAllBut(OutputGenerator::Html);
- typeDecl.lineBreak();
- typeDecl.popGeneratorState();
- }
- }
- typeDecl.docify(" }");
- }
-}
-
-void MemberDef::setArgumentList(ArgumentList *al)
-{
- makeResident();
- if (m_impl->defArgList) delete m_impl->defArgList;
- m_impl->defArgList = al;
-}
-
-void MemberDef::setDeclArgumentList(ArgumentList *al)
-{
- makeResident();
- if (m_impl->declArgList) delete m_impl->declArgList;
- m_impl->declArgList = al;
-}
-
-void MemberDef::setTypeConstraints(ArgumentList *al)
-{
- if (al==0) return;
- makeResident();
- if (m_impl->typeConstraints) delete m_impl->typeConstraints;
- m_impl->typeConstraints = new ArgumentList;
- m_impl->typeConstraints->setAutoDelete(TRUE);
- ArgumentListIterator ali(*al);
- Argument *a;
- for (;(a=ali.current());++ali)
- {
- m_impl->typeConstraints->append(new Argument(*a));
- }
-}
-
-void MemberDef::setType(const char *t)
-{
- makeResident();
- m_impl->type = t;
-}
-
-void MemberDef::findSectionsInDocumentation()
-{
- makeResident();
- docFindSections(documentation(),this,0,docFile());
-}
-
-void MemberDef::enableCallGraph(bool e)
-{
- makeResident();
- m_impl->hasCallGraph=e;
- if (e) Doxygen::parseSourcesNeeded = TRUE;
-}
-
-void MemberDef::enableCallerGraph(bool e)
-{
- makeResident();
- m_impl->hasCallerGraph=e;
- if (e) Doxygen::parseSourcesNeeded = TRUE;
-}
-
-#if 0
-bool MemberDef::protectionVisible() const
-{
- makeResident();
- return m_impl->prot==Public ||
- (m_impl->prot==Private && Config_getBool("EXTRACT_PRIVATE")) ||
- (m_impl->prot==Protected && Config_getBool("EXTRACT_PROTECTED")) ||
- (m_impl->prot==Package && Config_getBool("EXTRACT_PACKAGE"));
-}
-#endif
-
-#if 0
-void MemberDef::setInbodyDocumentation(const char *docs,
- const char *docFile,int docLine)
-{
- makeResident();
- m_impl->inbodyDocs = docs;
- m_impl->inbodyDocs = m_impl->inbodyDocs.stripWhiteSpace();
- m_impl->inbodyLine = docLine;
- m_impl->inbodyFile = docFile;
-}
-#endif
-
-bool MemberDef::isObjCMethod() const
-{
- makeResident();
- if (m_impl->classDef && m_impl->classDef->isObjectiveC() && isFunction()) return TRUE;
- return FALSE;
-}
-
-bool MemberDef::isObjCProperty() const
-{
- makeResident();
- if (m_impl->classDef && m_impl->classDef->isObjectiveC() && isProperty()) return TRUE;
- return FALSE;
-}
-
-QCString MemberDef::qualifiedName() const
-{
- makeResident();
- if (isObjCMethod())
- {
- QCString qm;
- if (isStatic()) qm="+"; else qm="-";
- qm+="[";
- qm+=m_impl->classDef->name()+" ";
- qm+=name();
- qm+="]";
- return qm;
- }
- else
- {
- return Definition::qualifiedName();
- }
-}
-
-void MemberDef::setTagInfo(TagInfo *ti)
-{
- if (ti)
- {
- makeResident();
- //printf("%s: Setting tag name=%s anchor=%s\n",name().data(),ti->tagName.data(),ti->anchor.data());
- m_impl->anc=ti->anchor;
- setReference(ti->tagName);
- m_impl->explicitOutputFileBase = stripExtension(ti->fileName);
- }
-}
-
-QCString MemberDef::objCMethodName(bool localLink,bool showStatic) const
-{
- makeResident();
- QCString qm;
- if (showStatic)
- {
- if (isStatic()) qm="+ "; else qm="- ";
- }
- qm+=name();
- if (!localLink) // link to method of same class
- {
- qm+=" (";
- qm+=m_impl->classDef->name();
- qm+=")";
- }
- return qm;
-}
-
-const char *MemberDef::declaration() const
-{
- makeResident();
- return m_impl->decl;
-}
-
-const char *MemberDef::definition() const
-{
- makeResident();
- return m_impl->def;
-}
-
-const char *MemberDef::extraTypeChars() const
-{
- makeResident();
- return m_impl->extraTypeChars;
-}
-
-const char *MemberDef::typeString() const
-{
- makeResident();
- return m_impl->type;
-}
-
-const char *MemberDef::argsString() const
-{
- makeResident();
- return m_impl->args;
-}
-
-const char *MemberDef::excpString() const
-{
- makeResident();
- return m_impl->exception;
-}
-
-const char *MemberDef::bitfieldString() const
-{
- makeResident();
- return m_impl->bitfields;
-}
-
-const QCString &MemberDef::initializer() const
-{
- makeResident();
- return m_impl->initializer;
-}
-
-int MemberDef::initializerLines() const
-{
- makeResident();
- return m_impl->initLines;
-}
-
-int MemberDef::getMemberSpecifiers() const
-{
- makeResident();
- return m_impl->memSpec;
-}
-
-ClassDef *MemberDef::getClassDef() const
-{
- makeResident();
- return m_impl->classDef;
-}
-
-FileDef *MemberDef::getFileDef() const
-{
- makeResident();
- return m_impl->fileDef;
-}
-
-NamespaceDef* MemberDef::getNamespaceDef() const
-{
- makeResident();
- return m_impl->nspace;
-}
-
-const char *MemberDef::getReadAccessor() const
-{
- makeResident();
- return m_impl->read;
-}
-
-const char *MemberDef::getWriteAccessor() const
-{
- makeResident();
- return m_impl->write;
-}
-
-GroupDef *MemberDef::getGroupDef() const
-{
- makeResident();
- return m_impl->group;
-}
-
-Grouping::GroupPri_t MemberDef::getGroupPri() const
-{
- makeResident();
- return m_impl->grouppri;
-}
-
-const char *MemberDef::getGroupFileName() const
-{
- makeResident();
- return m_impl->groupFileName;
-}
-
-int MemberDef::getGroupStartLine() const
-{
- makeResident();
- return m_impl->groupStartLine;
-}
-
-bool MemberDef::getGroupHasDocs() const
-{
- makeResident();
- return m_impl->groupHasDocs;
-}
-
-Protection MemberDef::protection() const
-{
- makeResident();
- return m_impl->prot;
-}
-
-MemberDef::MemberType MemberDef::memberType() const
-{
- makeResident();
- return m_impl->mtype;
-}
-
-bool MemberDef::isSignal() const
-{
- makeResident();
- return m_impl->mtype==Signal;
-}
-
-bool MemberDef::isSlot() const
-{
- makeResident();
- return m_impl->mtype==Slot;
-}
-
-bool MemberDef::isVariable() const
-{
- makeResident();
- return m_impl->mtype==Variable;
-}
-
-bool MemberDef::isEnumerate() const
-{
- makeResident();
- return m_impl->mtype==Enumeration;
-}
-
-bool MemberDef::isEnumValue() const
-{
- makeResident();
- return m_impl->mtype==EnumValue;
-}
-
-bool MemberDef::isTypedef() const
-{
- makeResident();
- return m_impl->mtype==Typedef;
-}
-
-bool MemberDef::isFunction() const
-{
- makeResident();
- return m_impl->mtype==Function;
-}
-
-bool MemberDef::isFunctionPtr() const
-{
- makeResident();
- return m_impl->mtype==Variable && QCString(argsString()).find(")(")!=-1;
-}
-
-bool MemberDef::isDefine() const
-{
- makeResident();
- return m_impl->mtype==Define;
-}
-
-bool MemberDef::isFriend() const
-{
- makeResident();
- return m_impl->mtype==Friend;
-}
-
-bool MemberDef::isDCOP() const
-{
- makeResident();
- return m_impl->mtype==DCOP;
-}
-
-bool MemberDef::isProperty() const
-{
- makeResident();
- return m_impl->mtype==Property;
-}
-
-bool MemberDef::isEvent() const
-{
- makeResident();
- return m_impl->mtype==Event;
-}
-
-bool MemberDef::isRelated() const
-{
- makeResident();
- return m_impl->related == Related;
-}
-
-bool MemberDef::isForeign() const
-{
- makeResident();
- return m_impl->related == Foreign;
-}
-
-bool MemberDef::isStatic() const
-{
- makeResident();
- return m_impl->stat;
-}
-
-bool MemberDef::isInline() const
-{
- makeResident();
- return (m_impl->memSpec&Entry::Inline)!=0;
-}
-
-bool MemberDef::isExplicit() const
-{
- makeResident();
- return (m_impl->memSpec&Entry::Explicit)!=0;
-}
-
-bool MemberDef::isMutable() const
-{
- makeResident();
- return (m_impl->memSpec&Entry::Mutable)!=0;
-}
-
-bool MemberDef::isGettable() const
-{
- makeResident();
- return (m_impl->memSpec&Entry::Gettable)!=0;
-}
-
-bool MemberDef::isSettable() const
-{
- makeResident();
- return (m_impl->memSpec&Entry::Settable)!=0;
-}
-
-bool MemberDef::isAddable() const
-{
- makeResident();
- return (m_impl->memSpec&Entry::Addable)!=0;
-}
-
-bool MemberDef::isRemovable() const
-{
- makeResident();
- return (m_impl->memSpec&Entry::Removable)!=0;
-}
-
-bool MemberDef::isRaisable() const
-{
- makeResident();
- return (m_impl->memSpec&Entry::Raisable)!=0;
-}
-
-bool MemberDef::isReadable() const
-{
- makeResident();
- return (m_impl->memSpec&Entry::Readable)!=0;
-}
-
-bool MemberDef::isWritable() const
-{
- makeResident();
- return (m_impl->memSpec&Entry::Writable)!=0;
-}
-
-bool MemberDef::isFinal() const
-{
- makeResident();
- return (m_impl->memSpec&Entry::Final)!=0;
-}
-
-bool MemberDef::isNew() const
-{
- makeResident();
- return (m_impl->memSpec&Entry::New)!=0;
-}
-
-bool MemberDef::isSealed() const
-{
- makeResident();
- return (m_impl->memSpec&Entry::Sealed)!=0;
-}
-
-bool MemberDef::isOverride() const
-{
- makeResident();
- return (m_impl->memSpec&Entry::Override)!=0;
-}
-
-bool MemberDef::isInitonly() const
-{
- makeResident();
- return (m_impl->memSpec&Entry::Initonly)!=0;
-}
-
-bool MemberDef::isAbstract() const
-{
- makeResident();
- return (m_impl->memSpec&Entry::Abstract)!=0;
-}
-
-bool MemberDef::isOptional() const
-{
- makeResident();
- return (m_impl->memSpec&Entry::Optional)!=0;
-}
-
-bool MemberDef::isRequired() const
-{
- makeResident();
- return (m_impl->memSpec&Entry::Required)!=0;
-}
-
-bool MemberDef::isNonAtomic() const
-{
- makeResident();
- return (m_impl->memSpec&Entry::NonAtomic)!=0;
-}
-
-bool MemberDef::isCopy() const
-{
- makeResident();
- return (m_impl->memSpec&Entry::Copy)!=0;
-}
-
-bool MemberDef::isAssign() const
-{
- makeResident();
- return (m_impl->memSpec&Entry::Assign)!=0;
-}
-
-bool MemberDef::isRetain() const
-{
- makeResident();
- return (m_impl->memSpec&Entry::Retain)!=0;
-}
-
-
-bool MemberDef::isImplementation() const
-{
- makeResident();
- return m_impl->implOnly;
-}
-
-bool MemberDef::isExternal() const
-{
- makeResident();
- return m_impl->explExt;
-}
-
-bool MemberDef::isTemplateSpecialization() const
-{
- makeResident();
- return m_impl->tspec;
-}
-
-bool MemberDef::hasDocumentedParams() const
-{
- makeResident();
- return m_impl->hasDocumentedParams;
-}
-
-bool MemberDef::hasDocumentedReturnType() const
-{
- makeResident();
- return m_impl->hasDocumentedReturnType;
-}
-
-ClassDef *MemberDef::relatedAlso() const
-{
- makeResident();
- return m_impl->relatedAlso;
-}
-
-bool MemberDef::hasDocumentedEnumValues() const
-{
- makeResident();
- return m_impl->docEnumValues;
-}
-
-MemberDef *MemberDef::getAnonymousEnumType() const
-{
- makeResident();
- return m_impl->annEnumType;
-}
-
-bool MemberDef::isDocsForDefinition() const
-{
- makeResident();
- return m_impl->docsForDefinition;
-}
-
-MemberDef *MemberDef::getEnumScope() const
-{
- makeResident();
- return m_impl->enumScope;
-}
-
-LockingPtr<MemberList> MemberDef::enumFieldList() const
-{
- makeResident();
- return LockingPtr<MemberList>(this,m_impl->enumFields);
-}
-
-LockingPtr<ExampleSDict> MemberDef::getExamples() const
-{
- makeResident();
- return LockingPtr<ExampleSDict>(this,m_impl->exampleSDict);
-}
-
-bool MemberDef::isPrototype() const
-{
- makeResident();
- return m_impl->proto;
-}
-
-LockingPtr<ArgumentList> MemberDef::argumentList() const
-{
- makeResident();
- return LockingPtr<ArgumentList>(this,m_impl->defArgList);
-}
-
-LockingPtr<ArgumentList> MemberDef::declArgumentList() const
-{
- makeResident();
- return LockingPtr<ArgumentList>(this,m_impl->declArgList);
-}
-
-LockingPtr<ArgumentList> MemberDef::templateArguments() const
-{
- makeResident();
- return LockingPtr<ArgumentList>(this,m_impl->tArgList);
-}
-
-LockingPtr< QList<ArgumentList> > MemberDef::definitionTemplateParameterLists() const
-{
- makeResident();
- return LockingPtr< QList<ArgumentList> >(this,m_impl->defTmpArgLists);
-}
-
-int MemberDef::getMemberGroupId() const
-{
- makeResident();
- return m_impl->grpId;
-}
-
-MemberGroup *MemberDef::getMemberGroup() const
-{
- makeResident();
- return m_impl->memberGroup;
-}
-
-bool MemberDef::fromAnonymousScope() const
-{
- makeResident();
- return m_impl->annScope;
-}
-
-bool MemberDef::anonymousDeclShown() const
-{
- makeResident();
- return m_impl->annUsed;
-}
-
-void MemberDef::setAnonymousUsed()
-{
- makeResident();
- m_impl->annUsed = TRUE;
-}
-
-bool MemberDef::hasCallGraph() const
-{
- makeResident();
- return m_impl->hasCallGraph;
-}
-
-bool MemberDef::hasCallerGraph() const
-{
- makeResident();
- return m_impl->hasCallerGraph;
-}
-
-MemberDef *MemberDef::templateMaster() const
-{
- makeResident();
- return m_impl->templateMaster;
-}
-
-bool MemberDef::isTypedefValCached() const
-{
- makeResident();
- return m_impl->isTypedefValCached;
-}
-
-ClassDef *MemberDef::getCachedTypedefVal() const
-{
- makeResident();
- return m_impl->cachedTypedefValue;
-}
-
-QCString MemberDef::getCachedTypedefTemplSpec() const
-{
- makeResident();
- return m_impl->cachedTypedefTemplSpec;
-}
-
-QCString MemberDef::getCachedResolvedTypedef() const
-{
- makeResident();
- //printf("MemberDef::getCachedResolvedTypedef()=%s m_impl=%p\n",m_impl->cachedResolvedType.data(),m_impl);
- return m_impl->cachedResolvedType;
-}
-
-MemberDef *MemberDef::memberDefinition() const
-{
- makeResident();
- return m_impl->memDef;
-}
-
-MemberDef *MemberDef::memberDeclaration() const
-{
- makeResident();
- return m_impl->memDec;
-}
-
-MemberDef *MemberDef::inheritsDocsFrom() const
-{
- makeResident();
- return m_impl->docProvider;
-}
-
-MemberDef *MemberDef::getGroupAlias() const
-{
- makeResident();
- return m_impl->groupAlias;
-}
-
-void MemberDef::setMemberType(MemberType t)
-{
- makeResident();
- m_impl->mtype=t;
- m_isLinkableCached = 0;
-}
-
-void MemberDef::setDefinition(const char *d)
-{
- makeResident();
- m_impl->def=d;
-}
-
-void MemberDef::setFileDef(FileDef *fd)
-{
- makeResident();
- m_impl->fileDef=fd;
- m_isLinkableCached = 0;
- m_isConstructorCached = 0;
- m_isDestructorCached = 0;
-}
-
-void MemberDef::setProtection(Protection p)
-{
- makeResident();
- m_impl->prot=p;
- m_isLinkableCached = 0;
-}
-
-void MemberDef::setMemberSpecifiers(int s)
-{
- makeResident();
- m_impl->memSpec=s;
-}
-
-void MemberDef::mergeMemberSpecifiers(int s)
-{
- makeResident();
- m_impl->memSpec|=s;
-}
-
-void MemberDef::setBitfields(const char *s)
-{
- makeResident();
- m_impl->bitfields = s;
-}
-
-void MemberDef::setMaxInitLines(int lines)
-{
- if (lines!=-1)
- {
- makeResident();
- m_impl->userInitLines=lines;
- }
-}
-
-void MemberDef::setExplicitExternal(bool b)
-{
- makeResident();
- m_impl->explExt=b;
-}
-
-void MemberDef::setReadAccessor(const char *r)
-{
- makeResident();
- m_impl->read=r;
-}
-
-void MemberDef::setWriteAccessor(const char *w)
-{
- makeResident();
- m_impl->write=w;
-}
-
-void MemberDef::setTemplateSpecialization(bool b)
-{
- makeResident();
- m_impl->tspec=b;
-}
-
-void MemberDef::makeRelated()
-{
- makeResident();
- m_impl->related = Related;
- m_isLinkableCached = 0;
-}
-
-void MemberDef::makeForeign()
-{
- makeResident();
- m_impl->related = Foreign;
- m_isLinkableCached = 0;
-}
-
-void MemberDef::setHasDocumentedParams(bool b)
-{
- makeResident();
- m_impl->hasDocumentedParams = b;
-}
-
-void MemberDef::setHasDocumentedReturnType(bool b)
-{
- makeResident();
- m_impl->hasDocumentedReturnType = b;
-}
-
-void MemberDef::setInheritsDocsFrom(MemberDef *md)
-{
- makeResident();
- m_impl->docProvider = md;
-}
-
-void MemberDef::setArgsString(const char *as)
-{
- makeResident();
- m_impl->args = as;
-}
-
-void MemberDef::setRelatedAlso(ClassDef *cd)
-{
- makeResident();
- m_impl->relatedAlso=cd;
-}
-
-void MemberDef::setEnumClassScope(ClassDef *cd)
-{
- makeResident();
- m_impl->classDef = cd;
- m_isLinkableCached = 0;
- m_isConstructorCached = 0;
-}
-
-void MemberDef::setDocumentedEnumValues(bool value)
-{
- makeResident();
- m_impl->docEnumValues=value;
-}
-
-void MemberDef::setAnonymousEnumType(MemberDef *md)
-{
- makeResident();
- m_impl->annEnumType = md;
-}
-
-void MemberDef::setPrototype(bool p)
-{
- makeResident();
- m_impl->proto=p;
-}
-
-void MemberDef::setMemberGroupId(int id)
-{
- makeResident();
- m_impl->grpId=id;
-}
-
-void MemberDef::makeImplementationDetail()
-{
- makeResident();
- m_impl->implOnly=TRUE;
-}
-
-void MemberDef::setFromAnonymousScope(bool b)
-{
- makeResident();
- m_impl->annScope=b;
-}
-
-void MemberDef::setFromAnonymousMember(MemberDef *m)
-{
- makeResident();
- m_impl->annMemb=m;
-}
-
-void MemberDef::setTemplateMaster(MemberDef *mt)
-{
- makeResident();
- m_impl->templateMaster=mt;
- m_isLinkableCached = 0;
-}
-
-void MemberDef::setDocsForDefinition(bool b)
-{
- makeResident();
- m_impl->docsForDefinition = b;
-}
-
-void MemberDef::setGroupAlias(MemberDef *md)
-{
- makeResident();
- m_impl->groupAlias = md;
-}
-
-void MemberDef::invalidateTypedefValCache()
-{
- makeResident();
- m_impl->isTypedefValCached=FALSE;
-}
-
-void MemberDef::setMemberDefinition(MemberDef *md)
-{
- makeResident();
- m_impl->memDef=md;
-}
-
-void MemberDef::setMemberDeclaration(MemberDef *md)
-{
- makeResident();
- m_impl->memDec=md;
-}
-
-ClassDef *MemberDef::category() const
-{
- makeResident();
- return m_impl->category;
-}
-
-void MemberDef::setCategory(ClassDef *def)
-{
- makeResident();
- m_impl->category = def;
-}
-
-
-void MemberDef::cacheTypedefVal(ClassDef*val, const QCString & templSpec, const QCString &resolvedType)
-{
- makeResident();
- m_impl->isTypedefValCached=TRUE;
- m_impl->cachedTypedefValue=val;
- m_impl->cachedTypedefTemplSpec=templSpec;
- m_impl->cachedResolvedType=resolvedType;
- //printf("MemberDef::cacheTypedefVal=%s m_impl=%p\n",m_impl->cachedResolvedType.data(),m_impl);
-}
-
-void MemberDef::copyArgumentNames(MemberDef *bmd)
-{
- makeResident();
- {
- LockingPtr<ArgumentList> arguments = bmd->argumentList();
- if (m_impl->defArgList && arguments!=0)
- {
- ArgumentListIterator aliDst(*m_impl->defArgList);
- ArgumentListIterator aliSrc(*arguments);
- Argument *argDst, *argSrc;
- for (;(argDst=aliDst.current()) && (argSrc=aliSrc.current());++aliDst,++aliSrc)
- {
- argDst->name = argSrc->name;
- }
- }
- }
- {
- LockingPtr<ArgumentList> arguments = bmd->declArgumentList();
- if (m_impl->declArgList && arguments!=0)
- {
- ArgumentListIterator aliDst(*m_impl->declArgList);
- ArgumentListIterator aliSrc(*arguments);
- Argument *argDst, *argSrc;
- for (;(argDst=aliDst.current()) && (argSrc=aliSrc.current());++aliDst,++aliSrc)
- {
- argDst->name = argSrc->name;
- }
- }
- }
-}
-
-static void invalidateCachedTypesInArgumentList(ArgumentList *al)
-{
- if (al)
- {
- ArgumentListIterator ali(*al);
- Argument *a;
- for (ali.toFirst();(a=ali.current());++ali)
- {
- a->canType.resize(0);
- }
- }
-}
-
-void MemberDef::invalidateCachedArgumentTypes()
-{
- makeResident();
- invalidateCachedTypesInArgumentList(m_impl->defArgList);
- invalidateCachedTypesInArgumentList(m_impl->declArgList);
-}
-
-
-//-----------------------------------------------------------------
-
-void MemberDef::flushToDisk() const
-{
- if (isLocked()) return;
- MemberDef *that = (MemberDef*)this;
- that->m_storagePos = Doxygen::symbolStorage->alloc();
- //printf("%p: MemberDef::flushToDisk() m_impl=%p\n",this,m_impl);
- // write the definition base class member variables to disk
- Definition::flushToDisk();
-
- //printf("%p: flushing specific part\n",this);
-
- // write the memberdef member variables to disk
- marshalUInt(Doxygen::symbolStorage,START_MARKER);
- marshalObjPointer (Doxygen::symbolStorage,m_impl->classDef);
- marshalObjPointer (Doxygen::symbolStorage,m_impl->fileDef);
- marshalObjPointer (Doxygen::symbolStorage,m_impl->nspace);
- marshalObjPointer (Doxygen::symbolStorage,m_impl->enumScope);
- marshalObjPointer (Doxygen::symbolStorage,m_impl->annEnumType);
- marshalMemberList (Doxygen::symbolStorage,m_impl->enumFields);
- marshalObjPointer (Doxygen::symbolStorage,m_impl->redefines);
- marshalMemberList (Doxygen::symbolStorage,m_impl->redefinedBy);
- marshalObjPointer (Doxygen::symbolStorage,m_impl->memDef);
- marshalObjPointer (Doxygen::symbolStorage,m_impl->memDec);
- marshalObjPointer (Doxygen::symbolStorage,m_impl->relatedAlso);
- marshalExampleSDict (Doxygen::symbolStorage,m_impl->exampleSDict);
- marshalQCString (Doxygen::symbolStorage,m_impl->type);
- marshalQCString (Doxygen::symbolStorage,m_impl->args);
- marshalQCString (Doxygen::symbolStorage,m_impl->def);
- marshalQCString (Doxygen::symbolStorage,m_impl->anc);
- marshalInt (Doxygen::symbolStorage,(int)m_impl->virt);
- marshalInt (Doxygen::symbolStorage,(int)m_impl->prot);
- marshalQCString (Doxygen::symbolStorage,m_impl->decl);
- marshalQCString (Doxygen::symbolStorage,m_impl->bitfields);
- marshalQCString (Doxygen::symbolStorage,m_impl->read);
- marshalQCString (Doxygen::symbolStorage,m_impl->write);
- marshalQCString (Doxygen::symbolStorage,m_impl->exception);
- marshalQCString (Doxygen::symbolStorage,m_impl->initializer);
- marshalQCString (Doxygen::symbolStorage,m_impl->extraTypeChars);
- marshalInt (Doxygen::symbolStorage,m_impl->initLines);
- marshalInt (Doxygen::symbolStorage,m_impl->memSpec);
- marshalInt (Doxygen::symbolStorage,(int)m_impl->mtype);
- marshalInt (Doxygen::symbolStorage,m_impl->maxInitLines);
- marshalInt (Doxygen::symbolStorage,m_impl->userInitLines);
- marshalObjPointer (Doxygen::symbolStorage,m_impl->annMemb);
- marshalArgumentList (Doxygen::symbolStorage,m_impl->defArgList);
- marshalArgumentList (Doxygen::symbolStorage,m_impl->declArgList);
- marshalArgumentList (Doxygen::symbolStorage,m_impl->tArgList);
- marshalArgumentList (Doxygen::symbolStorage,m_impl->typeConstraints);
- marshalObjPointer (Doxygen::symbolStorage,m_impl->templateMaster);
- marshalArgumentLists(Doxygen::symbolStorage,m_impl->defTmpArgLists);
- marshalObjPointer (Doxygen::symbolStorage,m_impl->cachedAnonymousType);
- marshalMemberLists (Doxygen::symbolStorage,m_impl->classSectionSDict);
- marshalObjPointer (Doxygen::symbolStorage,m_impl->groupAlias);
- marshalInt (Doxygen::symbolStorage,m_impl->grpId);
- marshalObjPointer (Doxygen::symbolStorage,m_impl->memberGroup);
- marshalObjPointer (Doxygen::symbolStorage,m_impl->group);
- marshalInt (Doxygen::symbolStorage,(int)m_impl->grouppri);
- marshalQCString (Doxygen::symbolStorage,m_impl->groupFileName);
- marshalInt (Doxygen::symbolStorage,m_impl->groupStartLine);
- marshalObjPointer (Doxygen::symbolStorage,m_impl->groupMember);
- marshalBool (Doxygen::symbolStorage,m_impl->isTypedefValCached);
- marshalObjPointer (Doxygen::symbolStorage,m_impl->cachedTypedefValue);
- marshalQCString (Doxygen::symbolStorage,m_impl->cachedTypedefTemplSpec);
- marshalQCString (Doxygen::symbolStorage,m_impl->cachedResolvedType);
- marshalObjPointer (Doxygen::symbolStorage,m_impl->docProvider);
- marshalQCString (Doxygen::symbolStorage,m_impl->explicitOutputFileBase);
- marshalBool (Doxygen::symbolStorage,m_impl->implOnly);
- marshalBool (Doxygen::symbolStorage,m_impl->hasDocumentedParams);
- marshalBool (Doxygen::symbolStorage,m_impl->hasDocumentedReturnType);
- marshalBool (Doxygen::symbolStorage,m_impl->isDMember);
- marshalInt (Doxygen::symbolStorage,(int)m_impl->related);
- marshalBool (Doxygen::symbolStorage,m_impl->stat);
- marshalBool (Doxygen::symbolStorage,m_impl->proto);
- marshalBool (Doxygen::symbolStorage,m_impl->docEnumValues);
- marshalBool (Doxygen::symbolStorage,m_impl->annScope);
- marshalBool (Doxygen::symbolStorage,m_impl->annUsed);
- marshalBool (Doxygen::symbolStorage,m_impl->hasCallGraph);
- marshalBool (Doxygen::symbolStorage,m_impl->hasCallerGraph);
- marshalBool (Doxygen::symbolStorage,m_impl->explExt);
- marshalBool (Doxygen::symbolStorage,m_impl->tspec);
- marshalBool (Doxygen::symbolStorage,m_impl->groupHasDocs);
- marshalBool (Doxygen::symbolStorage,m_impl->docsForDefinition);
- marshalObjPointer (Doxygen::symbolStorage,m_impl->category);
- marshalUInt(Doxygen::symbolStorage,END_MARKER);
-
- // function doesn't modify the object conceptually but compiler doesn't know this.
- delete that->m_impl;
- that->m_impl=0;
- that->m_flushPending=FALSE;
-}
-
-void MemberDef::loadFromDisk() const
-{
- MemberDef *that = (MemberDef *)this;
- if (isLocked())
- {
- //printf("%p: loadFromDisk() locked: so still in memory\n",this);
- assert(m_impl!=0);
- return;
- }
- assert(m_impl==0);
-
- Doxygen::symbolStorage->seek(m_storagePos);
- Definition::loadFromDisk();
-
- //printf("%p: loading specific part\n",this);
-
- that->m_impl = new MemberDefImpl;
- //printf("%p: MemberDef::loadFromDisk(): m_impl=%p\n",this,m_impl);
-
- uint marker = unmarshalUInt(Doxygen::symbolStorage);
- assert(marker==START_MARKER);
- m_impl->classDef = (ClassDef*)unmarshalObjPointer (Doxygen::symbolStorage);
- m_impl->fileDef = (FileDef*)unmarshalObjPointer (Doxygen::symbolStorage);
- m_impl->nspace = (NamespaceDef*)unmarshalObjPointer (Doxygen::symbolStorage);
- m_impl->enumScope = (MemberDef*)unmarshalObjPointer (Doxygen::symbolStorage);
- m_impl->annEnumType = (MemberDef*)unmarshalObjPointer (Doxygen::symbolStorage);
- m_impl->enumFields = unmarshalMemberList (Doxygen::symbolStorage);
- m_impl->redefines = (MemberDef*)unmarshalObjPointer (Doxygen::symbolStorage);
- m_impl->redefinedBy = unmarshalMemberList (Doxygen::symbolStorage);
- m_impl->memDef = (MemberDef*)unmarshalObjPointer (Doxygen::symbolStorage);
- m_impl->memDec = (MemberDef*)unmarshalObjPointer (Doxygen::symbolStorage);
- m_impl->relatedAlso = (ClassDef*)unmarshalObjPointer (Doxygen::symbolStorage);
- m_impl->exampleSDict = unmarshalExampleSDict (Doxygen::symbolStorage);
- m_impl->type = unmarshalQCString (Doxygen::symbolStorage);
- m_impl->args = unmarshalQCString (Doxygen::symbolStorage);
- m_impl->def = unmarshalQCString (Doxygen::symbolStorage);
- m_impl->anc = unmarshalQCString (Doxygen::symbolStorage);
- m_impl->virt = (Specifier)unmarshalInt (Doxygen::symbolStorage);
- m_impl->prot = (Protection)unmarshalInt(Doxygen::symbolStorage);
- m_impl->decl = unmarshalQCString (Doxygen::symbolStorage);
- m_impl->bitfields = unmarshalQCString (Doxygen::symbolStorage);
- m_impl->read = unmarshalQCString (Doxygen::symbolStorage);
- m_impl->write = unmarshalQCString (Doxygen::symbolStorage);
- m_impl->exception = unmarshalQCString (Doxygen::symbolStorage);
- m_impl->initializer = unmarshalQCString (Doxygen::symbolStorage);
- m_impl->extraTypeChars = unmarshalQCString (Doxygen::symbolStorage);
- m_impl->initLines = unmarshalInt (Doxygen::symbolStorage);
- m_impl->memSpec = unmarshalInt (Doxygen::symbolStorage);
- m_impl->mtype = (MemberDef::MemberType)unmarshalInt (Doxygen::symbolStorage);
- m_impl->maxInitLines = unmarshalInt (Doxygen::symbolStorage);
- m_impl->userInitLines = unmarshalInt (Doxygen::symbolStorage);
- m_impl->annMemb = (MemberDef*)unmarshalObjPointer (Doxygen::symbolStorage);
- m_impl->defArgList = unmarshalArgumentList (Doxygen::symbolStorage);
- m_impl->declArgList = unmarshalArgumentList (Doxygen::symbolStorage);
- m_impl->tArgList = unmarshalArgumentList (Doxygen::symbolStorage);
- m_impl->typeConstraints = unmarshalArgumentList (Doxygen::symbolStorage);
- m_impl->templateMaster = (MemberDef*)unmarshalObjPointer (Doxygen::symbolStorage);
- m_impl->defTmpArgLists = unmarshalArgumentLists(Doxygen::symbolStorage);
- m_impl->cachedAnonymousType = (ClassDef*)unmarshalObjPointer (Doxygen::symbolStorage);
- m_impl->classSectionSDict = unmarshalMemberLists (Doxygen::symbolStorage);
- m_impl->groupAlias = (MemberDef*)unmarshalObjPointer (Doxygen::symbolStorage);
- m_impl->grpId = unmarshalInt (Doxygen::symbolStorage);
- m_impl->memberGroup = (MemberGroup*)unmarshalObjPointer (Doxygen::symbolStorage);
- m_impl->group = (GroupDef*)unmarshalObjPointer (Doxygen::symbolStorage);
- m_impl->grouppri = (Grouping::GroupPri_t)unmarshalInt (Doxygen::symbolStorage);
- m_impl->groupFileName = unmarshalQCString (Doxygen::symbolStorage);
- m_impl->groupStartLine = unmarshalInt (Doxygen::symbolStorage);
- m_impl->groupMember = (MemberDef*)unmarshalObjPointer (Doxygen::symbolStorage);
- m_impl->isTypedefValCached = unmarshalBool (Doxygen::symbolStorage);
- m_impl->cachedTypedefValue = (ClassDef*)unmarshalObjPointer (Doxygen::symbolStorage);
- m_impl->cachedTypedefTemplSpec = unmarshalQCString (Doxygen::symbolStorage);
- m_impl->cachedResolvedType = unmarshalQCString (Doxygen::symbolStorage);
- m_impl->docProvider = (MemberDef*)unmarshalObjPointer (Doxygen::symbolStorage);
- m_impl->explicitOutputFileBase = unmarshalQCString (Doxygen::symbolStorage);
- m_impl->implOnly = unmarshalBool (Doxygen::symbolStorage);
- m_impl->hasDocumentedParams = unmarshalBool (Doxygen::symbolStorage);
- m_impl->hasDocumentedReturnType = unmarshalBool (Doxygen::symbolStorage);
- m_impl->isDMember = unmarshalBool (Doxygen::symbolStorage);
- m_impl->related = (Relationship)unmarshalInt(Doxygen::symbolStorage);
- m_impl->stat = unmarshalBool (Doxygen::symbolStorage);
- m_impl->proto = unmarshalBool (Doxygen::symbolStorage);
- m_impl->docEnumValues = unmarshalBool (Doxygen::symbolStorage);
- m_impl->annScope = unmarshalBool (Doxygen::symbolStorage);
- m_impl->annUsed = unmarshalBool (Doxygen::symbolStorage);
- m_impl->hasCallGraph = unmarshalBool (Doxygen::symbolStorage);
- m_impl->hasCallerGraph = unmarshalBool (Doxygen::symbolStorage);
- m_impl->explExt = unmarshalBool (Doxygen::symbolStorage);
- m_impl->tspec = unmarshalBool (Doxygen::symbolStorage);
- m_impl->groupHasDocs = unmarshalBool (Doxygen::symbolStorage);
- m_impl->docsForDefinition = unmarshalBool (Doxygen::symbolStorage);
- m_impl->category = (ClassDef*)unmarshalObjPointer (Doxygen::symbolStorage);
- marker = unmarshalUInt(Doxygen::symbolStorage);
- assert(marker==END_MARKER);
-
- //printf("%p: MemberDef::loadFromDisk(): sorting\n",this);
-}
-
-void MemberDef::makeResident() const
-{
- if (Doxygen::symbolCache==0) return;
- if (m_cacheHandle==-1) // not yet in cache
- {
- MemberDef *victim = 0;
- MemberDef *that = (MemberDef*)this; // fake method constness
- that->m_cacheHandle = Doxygen::symbolCache->add(that,(void **)&victim);
- //printf("adding %s to cache, handle=%d\n",m_impl->name.data(),that->m_cacheHandle);
- if (victim) // cache was full, victim was the least recently used item and has to go
- {
- //printf("%p: makeResident(): cache full %p::saveToDisk(): m_impl=%p\n",this,victim,victim->m_impl);
- victim->m_cacheHandle=-1; // invalidate cache handle
- victim->saveToDisk(); // store the item on disk
- }
- else // cache not yet full
- {
- //printf("Adding %s to cache, handle=%d\n",m_impl->name.data(),m_cacheHandle);
- }
- if (m_storagePos!=-1) // already been written to disk
- {
- if (isLocked()) // locked in memory
- {
- assert(m_impl!=0);
- that->m_flushPending=FALSE; // no need to flush anymore
- }
- else // not locked in memory
- {
- assert(m_impl==0);
- loadFromDisk();
- }
- }
- }
- else // already cached, make this object the most recently used.
- {
- assert(m_impl!=0);
- //printf("Touching symbol %s\n",m_impl->name.data());
- Doxygen::symbolCache->use(m_cacheHandle);
- }
-}
-
-void MemberDef::saveToDisk() const
-{
- assert(m_impl!=0);
- MemberDef *that = (MemberDef *)this;
- //printf("%p: saveToDisk(): m_impl=%p\n",this,m_impl);
- if (isLocked()) // cannot flush the item as it is locked
- {
- that->m_flushPending=TRUE; // flush when unlocked
- }
- else // ready to flush the item to disk
- {
- //printf("Adding %s to cache, handle=%d by replacing %s\n",
- // m_impl->name.data(),m_cacheHandle,victim->m_impl->name.data());
- if (m_storagePos!=-1)
- // if victim was stored on disk already and is not locked
- {
- // free the storage space occupied by the old store item
- Doxygen::symbolStorage->release(m_storagePos); // free up space for others
- }
- // write a the new (possibly modified) instance to disk
- flushToDisk();
- // end to write sequence (unless nothing was written due to the lock)
- Doxygen::symbolStorage->end();
- }
-}
-
-void MemberDef::lock() const
-{
-}
-
-void MemberDef::unlock() const
-{
- if (m_flushPending && !isLocked())
- {
- //printf("%p: flush after unlock\n",this);
- // write a the new (possibly modified) instance to disk
- flushToDisk();
- // end to write sequence (unless nothing was written due to the lock)
- Doxygen::symbolStorage->end();
- }
-}
-
diff --git a/trunk/src/memberdef.h b/trunk/src/memberdef.h
deleted file mode 100644
index 2e85d47..0000000
--- a/trunk/src/memberdef.h
+++ /dev/null
@@ -1,399 +0,0 @@
-/******************************************************************************
- *
- *
- *
- * Copyright (C) 1997-2012 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.
- *
- */
-
-#ifndef MEMBERDEF_H
-#define MEMBERDEF_H
-
-#include "qtbc.h"
-#include <qlist.h>
-#include <qdict.h>
-#include <qstack.h>
-
-#include "types.h"
-#include "definition.h"
-#include "sortdict.h"
-
-class ClassDef;
-class NamespaceDef;
-class GroupDef;
-class FileDef;
-class MemberList;
-class MemberGroup;
-class ExampleSDict;
-class OutputList;
-class GroupDef;
-class QTextStream;
-class ArgumentList;
-class MemberDefImpl;
-
-struct SourceReference
-{
- FileDef *fd;
- QCString anchor;
-};
-
-class MemberDef : public Definition
-{
- public:
-
- enum MemberType {
- Define,
- Function,
- Variable,
- Typedef,
- Enumeration,
- EnumValue,
- Signal,
- Slot,
- Friend,
- DCOP,
- Property,
- Event
- };
-
- MemberDef(const char *defFileName,int defLine,
- const char *type,const char *name,const char *args,
- const char *excp,Protection prot,Specifier virt,bool stat,
- Relationship related,MemberType t,const ArgumentList *tal,
- const ArgumentList *al);
- ~MemberDef();
- DefType definitionType() const { return TypeMember; }
- // move this member into a different scope
- void moveTo(Definition *);
-
- //-----------------------------------------------------------------------------------
- // ---- getters -----
- //-----------------------------------------------------------------------------------
-
- // link id
- QCString getOutputFileBase() const;
- QCString getReference() const;
- QCString anchor() const;
-
- const char *declaration() const;
- const char *definition() const;
- const char *typeString() const;
- const char *argsString() const;
- const char *excpString() const;
- const char *bitfieldString() const;
- const char *extraTypeChars() const;
- const QCString &initializer() const;
- int initializerLines() const;
- int getMemberSpecifiers() const;
- MemberList *getSectionList(Definition *d) const;
-
- // scope query members
- ClassDef *getClassDef() const;
- FileDef *getFileDef() const;
- NamespaceDef* getNamespaceDef() const;
-
- // grabbing the property read/write accessor names
- const char *getReadAccessor() const;
- const char *getWriteAccessor() const;
-
- // querying the grouping definition
- GroupDef *getGroupDef() const;
- Grouping::GroupPri_t getGroupPri() const;
- const char *getGroupFileName() const;
- int getGroupStartLine() const;
- bool getGroupHasDocs() const;
- QCString qualifiedName() const;
- QCString objCMethodName(bool localLink,bool showStatic) const;
-
- // direct kind info
- Protection protection() const;
- Specifier virtualness(int count=0) const;
- MemberType memberType() const;
- QCString memberTypeName() const;
-
- // getter methods
- bool isSignal() const;
- bool isSlot() const;
- bool isVariable() const;
- bool isEnumerate() const;
- bool isEnumValue() const;
- bool isTypedef() const;
- bool isFunction() const;
- bool isFunctionPtr() const;
- bool isDefine() const;
- bool isFriend() const;
- bool isDCOP() const;
- bool isProperty() const;
- bool isEvent() const;
- bool isRelated() const;
- bool isForeign() const;
- bool isStatic() const;
- bool isInline() const;
- bool isExplicit() const;
- bool isMutable() const;
- bool isGettable() const;
- bool isSettable() const;
- bool isReadable() const;
- bool isWritable() const;
- bool isAddable() const;
- bool isRemovable() const;
- bool isRaisable() const;
- bool isFinal() const;
- bool isAbstract() const;
- bool isOverride() const;
- bool isInitonly() const;
- bool isOptional() const;
- bool isRequired() const;
- bool isNonAtomic() const;
- bool isCopy() const;
- bool isAssign() const;
- bool isRetain() const;
- bool isNew() const;
- bool isSealed() const;
- bool isImplementation() const;
- bool isExternal() const;
- bool isTemplateSpecialization() const;
- bool hasDocumentedParams() const;
- bool hasDocumentedReturnType() const;
- bool isObjCMethod() const;
- bool isObjCProperty() const;
- bool isConstructor() const;
- bool isDestructor() const;
- bool hasOneLineInitializer() const;
- bool hasMultiLineInitializer() const;
- bool protectionVisible() const;
-
- // output info
- bool isLinkableInProject() const;
- bool isLinkable() const;
- bool hasDocumentation() const; // overrides hasDocumentation in definition.h
- //bool hasUserDocumentation() const; // overrides hasUserDocumentation
- bool isBriefSectionVisible() const;
- bool isDetailedSectionVisible(bool inGroup,bool inFile) const;
- bool isDetailedSectionLinkable() const;
- bool isFriendClass() const;
- bool isDocumentedFriendClass() const;
-
- MemberDef *reimplements() const;
- LockingPtr<MemberList> reimplementedBy() const;
-
- //int inbodyLine() const;
- //QCString inbodyFile() const;
- //const QCString &inbodyDocumentation() const;
-
- ClassDef *relatedAlso() const;
-
- bool hasDocumentedEnumValues() const;
- MemberDef *getAnonymousEnumType() const;
- bool isDocsForDefinition() const;
- MemberDef *getEnumScope() const;
- LockingPtr<MemberList> enumFieldList() const;
-
- bool hasExamples();
- LockingPtr<ExampleSDict> getExamples() const;
- bool isPrototype() const;
-
- // argument related members
- LockingPtr<ArgumentList> argumentList() const;
- LockingPtr<ArgumentList> declArgumentList() const;
- LockingPtr<ArgumentList> templateArguments() const;
- LockingPtr< QList<ArgumentList> > definitionTemplateParameterLists() const;
-
- // member group related members
- int getMemberGroupId() const;
- MemberGroup *getMemberGroup() const;
-
- bool fromAnonymousScope() const;
- bool anonymousDeclShown() const;
-
- // callgraph related members
- bool hasCallGraph() const;
- bool hasCallerGraph() const;
- bool visibleMemberGroup(bool hideNoHeader);
-
- MemberDef *templateMaster() const;
- QCString getScopeString() const;
- ClassDef *getClassDefOfAnonymousType();
-
- // cached typedef functions
- bool isTypedefValCached() const;
- ClassDef *getCachedTypedefVal() const;
- QCString getCachedTypedefTemplSpec() const;
- QCString getCachedResolvedTypedef() const;
-
- MemberDef *memberDefinition() const;
- MemberDef *memberDeclaration() const;
- MemberDef *inheritsDocsFrom() const;
- MemberDef *getGroupAlias() const;
-
- ClassDef *category() const;
-
- QCString displayName() const { return Definition::name(); }
-
- //-----------------------------------------------------------------------------------
- // ---- setters -----
- //-----------------------------------------------------------------------------------
-
- // set functions
- void setMemberType(MemberType t);
- void setDefinition(const char *d);
- void setFileDef(FileDef *fd);
- void setAnchor(const char *a);
- void setProtection(Protection p);
- void setMemberSpecifiers(int s);
- void mergeMemberSpecifiers(int s);
- void setInitializer(const char *i);
- void setBitfields(const char *s);
- void setMaxInitLines(int lines);
- void setMemberClass(ClassDef *cd);
- void setSectionList(Definition *d,MemberList *sl);
- void setGroupDef(GroupDef *gd,Grouping::GroupPri_t pri,
- const QCString &fileName,int startLine,bool hasDocs,
- MemberDef *member=0);
- void setExplicitExternal(bool b);
- void setReadAccessor(const char *r);
- void setWriteAccessor(const char *w);
- void setTemplateSpecialization(bool b);
-
- void makeRelated();
- void makeForeign();
- void setHasDocumentedParams(bool b);
- void setHasDocumentedReturnType(bool b);
- void setInheritsDocsFrom(MemberDef *md);
- void setTagInfo(TagInfo *i);
- void setArgsString(const char *as);
-
- // relation to other members
- void setReimplements(MemberDef *md);
- void insertReimplementedBy(MemberDef *md);
-
- // in-body documentation
- //void setInbodyDocumentation(const char *docs,const char *file,int line);
-
- void setRelatedAlso(ClassDef *cd);
-
- // enumeration specific members
- void insertEnumField(MemberDef *md);
- void setEnumScope(MemberDef *md);
- void setEnumClassScope(ClassDef *cd);
- void setDocumentedEnumValues(bool value);
- void setAnonymousEnumType(MemberDef *md);
-
- // example related members
- bool addExample(const char *anchor,const char *name,const char *file);
-
- // prototype related members
- void setPrototype(bool p);
-
- // argument related members
- void setArgumentList(ArgumentList *al);
- void setDeclArgumentList(ArgumentList *al);
- void setDefinitionTemplateParameterLists(QList<ArgumentList> *lists);
- void setTypeConstraints(ArgumentList *al);
- void setType(const char *t);
-
- // namespace related members
- void setNamespace(NamespaceDef *nd);
-
- // member group related members
- void setMemberGroup(MemberGroup *grp);
- void setMemberGroupId(int id);
- void makeImplementationDetail();
-
- // anonymous scope members
- void setFromAnonymousScope(bool b);
- void setFromAnonymousMember(MemberDef *m);
-
- void enableCallGraph(bool e);
- void enableCallerGraph(bool e);
-
- void setTemplateMaster(MemberDef *mt);
- void addListReference(Definition *d);
- void setDocsForDefinition(bool b);
- void setGroupAlias(MemberDef *md);
-
- void cacheTypedefVal(ClassDef *val,const QCString &templSpec,const QCString &resolvedType);
- void invalidateTypedefValCache();
-
- void invalidateCachedArgumentTypes();
-
- // declaration <-> definition relation
- void setMemberDefinition(MemberDef *md);
- void setMemberDeclaration(MemberDef *md);
-
- void setAnonymousUsed();
- void copyArgumentNames(MemberDef *bmd);
-
- void setCategory(ClassDef *);
-
- void setDocumentation(const char *d,const char *docFile,int docLine,bool stripWhiteSpace=TRUE);
- void setBriefDescription(const char *b,const char *briefFile,int briefLine);
- void setInbodyDocumentation(const char *d,const char *inbodyFile,int inbodyLine);
-
- void setHidden(bool b);
-
- //-----------------------------------------------------------------------------------
- // --- actions ----
- //-----------------------------------------------------------------------------------
-
- // output generation
- void writeDeclaration(OutputList &ol,
- ClassDef *cd,NamespaceDef *nd,FileDef *fd,GroupDef *gd,
- bool inGroup);
- void writeDocumentation(MemberList *ml,OutputList &ol,
- const char *scopeName,Definition *container,
- bool inGroup,bool showEnumValues=FALSE,bool
- showInline=FALSE);
- void writeMemberDocSimple(OutputList &ol,Definition *container);
- void warnIfUndocumented();
-
- MemberDef *createTemplateInstanceMember(ArgumentList *formalArgs,
- ArgumentList *actualArgs);
-
- void writeEnumDeclaration(OutputList &typeDecl,
- ClassDef *cd,NamespaceDef *nd,FileDef *fd,GroupDef *gd);
-
- void findSectionsInDocumentation();
-
- bool visited;
-
- protected:
- void flushToDisk() const;
- void loadFromDisk() const;
- private:
- void lock() const;
- void unlock() const;
- void saveToDisk() const;
- void makeResident() const;
- void _computeLinkableInProject();
- void _computeIsConstructor();
- void _computeIsDestructor();
-
- static int s_indentLevel;
- // disable copying of member defs
- MemberDef(const MemberDef &);
- MemberDef &operator=(const MemberDef &);
-
- void writeLink(OutputList &ol,
- ClassDef *cd,NamespaceDef *nd,FileDef *fd,GroupDef *gd,
- bool onlyText=FALSE);
-
- MemberDefImpl *m_impl;
- int m_cacheHandle;
- off_t m_storagePos; // location where the item is stored in file (if impl==0)
- bool m_flushPending;
- uchar m_isLinkableCached; // 0 = not cached, 1=FALSE, 2=TRUE
- uchar m_isConstructorCached; // 0 = not cached, 1=FALSE, 2=TRUE
- uchar m_isDestructorCached; // 0 = not cached, 1=FALSE, 2=TRUE
-};
-
-#endif
diff --git a/trunk/src/membergroup.cpp b/trunk/src/membergroup.cpp
deleted file mode 100644
index 6f9cbe7..0000000
--- a/trunk/src/membergroup.cpp
+++ /dev/null
@@ -1,365 +0,0 @@
-/******************************************************************************
- *
- *
- *
- * Copyright (C) 1997-2012 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.
- *
- */
-
-#include "qtbc.h"
-#include "membergroup.h"
-#include "memberlist.h"
-#include "outputlist.h"
-#include "util.h"
-#include "classdef.h"
-#include "namespacedef.h"
-#include "filedef.h"
-#include "language.h"
-#include "groupdef.h"
-#include "doxygen.h"
-#include "docparser.h"
-#include "marshal.h"
-#include "entry.h"
-#include "md5.h"
-
-//static QCString idToName(int id)
-//{
-// QCString result;
-// result.sprintf("mgroup_%d",id);
-// return result;
-//}
-
-MemberGroup::MemberGroup()
-{
-}
-
-MemberGroup::MemberGroup(Definition *parent,
- int id,const char *hdr,const char *d,const char *docFile)
-{
- //printf("New member group id=%d header=%s desc=%s\n",id,hdr,d);
- memberList = new MemberList(MemberList::memberGroup);
- grpId = id;
- grpHeader = hdr;
- doc = d;
- scope = 0;
- inSameSection = TRUE;
- inDeclSection = 0;
- m_numDecMembers = -1;
- m_numDocMembers = -1;
- m_parent = parent;
- m_docFile = docFile;
- m_xrefListItems = 0;
- //printf("Member group docs=`%s'\n",doc.data());
-}
-
-MemberGroup::~MemberGroup()
-{
- delete memberList;
-}
-
-void MemberGroup::insertMember(MemberDef *md)
-{
- //printf("MemberGroup::insertMember m_parent=%s memberList=%p count=%d"
- // " member section list: %p: md=%p:%s\n",
- // m_parent ? m_parent->name().data() : "<null>",
- // memberList->first() ? memberList->first()->getSectionList(m_parent) : 0,
- // memberList->count(),
- // md->getSectionList(m_parent),
- // md,md->name().data());
-
- MemberDef *firstMd = memberList->first();
- if (inSameSection && memberList->count()>0 &&
- firstMd->getSectionList(m_parent)!=md->getSectionList(m_parent))
- {
- inSameSection=FALSE;
- }
- else if (inDeclSection==0)
- {
- inDeclSection = md->getSectionList(m_parent);
- //printf("inDeclSection=%p type=%d\n",inDeclSection,inDeclSection->listType());
- }
- memberList->append(md);
-
- // copy the group of the first member in the memberGroup
- GroupDef *gd;
- if (firstMd && (gd=firstMd->getGroupDef()))
- {
- md->setGroupDef(gd, firstMd->getGroupPri(),
- firstMd->getGroupFileName(), firstMd->getGroupStartLine(),
- firstMd->getGroupHasDocs());
- gd->insertMember(md);
- }
-}
-
-
-void MemberGroup::setAnchors(ClassDef *context)
-{
- ::setAnchors(context,'z',memberList,grpId);
-}
-
-void MemberGroup::writeDeclarations(OutputList &ol,
- ClassDef *cd,NamespaceDef *nd,FileDef *fd,GroupDef *gd,
- bool showInline)
-{
- //printf("MemberGroup::writeDeclarations() %s\n",grpHeader.data());
- QCString ldoc = doc;
- if (!ldoc.isEmpty()) ldoc.prepend("<a name=\""+anchor()+"\" id=\""+anchor()+"\"></a>");
- memberList->writeDeclarations(ol,cd,nd,fd,gd,grpHeader,ldoc,FALSE,showInline);
-}
-
-void MemberGroup::writePlainDeclarations(OutputList &ol,
- ClassDef *cd,NamespaceDef *nd,FileDef *fd,GroupDef *gd
- )
-{
- //printf("MemberGroup::writePlainDeclarations() memberList->count()=%d\n",memberList->count());
- memberList->writePlainDeclarations(ol,cd,nd,fd,gd);
-}
-
-void MemberGroup::writeDocumentation(OutputList &ol,const char *scopeName,
- Definition *container,bool showEnumValues,bool showInline)
-{
- memberList->writeDocumentation(ol,scopeName,container,0,showEnumValues,showInline);
-}
-
-void MemberGroup::writeDocumentationPage(OutputList &ol,const char *scopeName,
- Definition *container)
-{
- memberList->writeDocumentationPage(ol,scopeName,container);
-}
-
-/*! Add this group as a subsection of the declaration section, instead
- * of rendering it in its own section
- */
-void MemberGroup::addToDeclarationSection()
-{
- if (inDeclSection)
- {
- //printf("Adding group %p to list %p (type=%d)\n",this,
- // inDeclSection,inDeclSection->listType());
- inDeclSection->addMemberGroup(this);
- }
-}
-
-int MemberGroup::countDecMembers(GroupDef *gd)
-{
- if (m_numDecMembers==-1) /* number of member not cached */
- {
- memberList->countDecMembers(gd);
- m_numDecMembers = memberList->numDecMembers();
- }
- return m_numDecMembers;
-}
-
-int MemberGroup::countDocMembers()
-{
- if (m_numDocMembers==-1)
- {
- memberList->countDocMembers();
- m_numDocMembers = memberList->numDocMembers();
- }
- return m_numDocMembers;
-}
-
-void MemberGroup::distributeMemberGroupDocumentation()
-{
- //printf("MemberGroup::distributeMemberGroupDocumentation() %s\n",grpHeader.data());
- MemberDef *md=memberList->first();
- while (md)
- {
- //printf("checking md=%s\n",md->name().data());
- // find the first member of the group with documentation
- if (!md->documentation().isEmpty() ||
- !md->briefDescription().isEmpty() ||
- !md->inbodyDocumentation().isEmpty()
- )
- {
- //printf("found it!\n");
- break;
- }
- md=memberList->next();
- }
- if (md) // distribute docs of md to other members of the list
- {
- //printf("Member %s has documentation!\n",md->name().data());
- MemberDef *omd=memberList->first();
- while (omd)
- {
- if (md!=omd && omd->documentation().isEmpty() &&
- omd->briefDescription().isEmpty() &&
- omd->inbodyDocumentation().isEmpty()
- )
- {
- //printf("Copying documentation to member %s\n",omd->name().data());
- omd->setBriefDescription(md->briefDescription(),md->briefFile(),md->briefLine());
- omd->setDocumentation(md->documentation(),md->docFile(),md->docLine());
- omd->setInbodyDocumentation(md->inbodyDocumentation(),md->inbodyFile(),md->inbodyLine());
- }
- omd=memberList->next();
- }
- }
-}
-
-int MemberGroup::varCount() const
-{
- return memberList->varCount();
-}
-
-int MemberGroup::funcCount() const
-{
- return memberList->funcCount();
-}
-
-int MemberGroup::enumCount() const
-{
- return memberList->enumCount();
-}
-
-int MemberGroup::enumValueCount() const
-{
- return memberList->enumValueCount();
-}
-
-int MemberGroup::typedefCount() const
-{
- return memberList->typedefCount();
-}
-
-int MemberGroup::protoCount() const
-{
- return memberList->protoCount();
-}
-
-int MemberGroup::defineCount() const
-{
- return memberList->defineCount();
-}
-
-int MemberGroup::friendCount() const
-{
- return memberList->friendCount();
-}
-
-int MemberGroup::numDecMembers() const
-{
- return memberList->numDecMembers();
-}
-
-int MemberGroup::numDocMembers() const
-{
- return memberList->numDocMembers();
-}
-
-void MemberGroup::setInGroup(bool b)
-{
- memberList->setInGroup(b);
-}
-
-QCString MemberGroup::anchor() const
-{
- uchar md5_sig[16];
- QCString sigStr(33);
- QCString locHeader = grpHeader;
- if (locHeader.isEmpty()) locHeader="[NOHEADER]";
- MD5Buffer((const unsigned char *)locHeader.data(),locHeader.length(),md5_sig);
- MD5SigToString(md5_sig,sigStr.data(),33);
- return "amgrp"+sigStr;
-}
-
-void MemberGroup::addListReferences(Definition *def)
-{
- memberList->addListReferences(def);
- if (m_xrefListItems && def)
- {
- QCString name = def->getOutputFileBase()+"#"+anchor();
- addRefItem(m_xrefListItems,
- name,
- theTranslator->trGroup(TRUE,TRUE),
- name,
- grpHeader,0);
- }
-}
-
-void MemberGroup::findSectionsInDocumentation()
-{
- docFindSections(doc,0,this,m_docFile);
- memberList->findSectionsInDocumentation();
-}
-
-void MemberGroup::marshal(StorageIntf *s)
-{
- marshalMemberList(s,memberList);
- marshalObjPointer(s,inDeclSection); // reference only
- marshalInt(s,grpId);
- marshalQCString(s,grpHeader);
- marshalQCString(s,fileName);
- marshalObjPointer(s,scope);
- marshalQCString(s,doc);
- marshalBool(s,inSameSection);
- marshalInt(s,m_numDecMembers);
- marshalInt(s,m_numDocMembers);
- marshalObjPointer(s,m_parent);
- marshalQCString(s,m_docFile);
- marshalItemInfoList (Doxygen::symbolStorage,m_xrefListItems);
-}
-
-void MemberGroup::unmarshal(StorageIntf *s)
-{
- memberList = unmarshalMemberList(s);
- inDeclSection = (MemberList *)unmarshalObjPointer(s);
- grpId = unmarshalInt(s);
- grpHeader = unmarshalQCString(s);
- fileName = unmarshalQCString(s);
- scope = (Definition *)unmarshalObjPointer(s);
- doc = unmarshalQCString(s);
- inSameSection = unmarshalBool(s);
- m_numDecMembers = unmarshalInt(s);
- m_numDocMembers = unmarshalInt(s);
- m_parent = (Definition *)unmarshalObjPointer(s);
- m_docFile = unmarshalQCString(s);
- m_xrefListItems = unmarshalItemInfoList (Doxygen::symbolStorage);
-}
-
-void MemberGroup::setRefItems(const QList<ListItemInfo> *sli)
-{
- if (sli)
- {
- // deep copy the list
- if (m_xrefListItems==0)
- {
- m_xrefListItems=new QList<ListItemInfo>;
- m_xrefListItems->setAutoDelete(TRUE);
- }
- QListIterator<ListItemInfo> slii(*sli);
- ListItemInfo *lii;
- for (slii.toFirst();(lii=slii.current());++slii)
- {
- m_xrefListItems->append(new ListItemInfo(*lii));
- }
- }
-}
-//--------------------------------------------------------------------------
-
-void MemberGroupInfo::setRefItems(const QList<ListItemInfo> *sli)
-{
- if (!sli) return;
- if (m_sli==0)
- {
- m_sli = new QList<ListItemInfo>;
- m_sli->setAutoDelete(TRUE);
- }
- QListIterator<ListItemInfo> slii(*sli);
- ListItemInfo *ili;
- for (slii.toFirst();(ili=slii.current());++slii)
- {
- m_sli->append(new ListItemInfo(*ili));
- }
-}
diff --git a/trunk/src/membergroup.h b/trunk/src/membergroup.h
deleted file mode 100644
index 12d1383..0000000
--- a/trunk/src/membergroup.h
+++ /dev/null
@@ -1,153 +0,0 @@
-/******************************************************************************
- *
- *
- *
- * Copyright (C) 1997-2012 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.
- *
- */
-
-#ifndef MEMBERGROUP_H
-#define MEMBERGROUP_H
-
-#include "qtbc.h"
-#include <qlist.h>
-#include <qfile.h>
-#include "sortdict.h"
-
-#define DOX_NOGROUP -1
-
-class MemberDef;
-class ClassDef;
-class NamespaceDef;
-class FileDef;
-class MemberList;
-class GroupDef;
-class OutputList;
-class Definition;
-class StorageIntf;
-struct ListItemInfo;
-
-class MemberGroup
-{
- public:
- MemberGroup();
- MemberGroup(Definition *parent,int id,const char *header,
- const char *docs,const char *docFile);
- ~MemberGroup();
- QCString header() const { return grpHeader; }
- int groupId() const { return grpId; }
- void insertMember(MemberDef *md);
- void setAnchors(ClassDef *);
- void writePlainDeclarations(OutputList &ol,
- ClassDef *cd,NamespaceDef *nd,FileDef *fd,GroupDef *gd);
- void writeDeclarations(OutputList &ol,
- ClassDef *cd,NamespaceDef *nd,FileDef *fd,GroupDef *gd,
- bool showInline=FALSE);
-
- void writeDocumentation(OutputList &ol,const char *scopeName,
- Definition *container,bool showEnumValues,bool showInline);
- void writeDocumentationPage(OutputList &ol,const char *scopeName,
- Definition *container);
- QCString documentation() { return doc; }
- bool allMembersInSameSection() { return inSameSection; }
- void addToDeclarationSection();
- int countDecMembers(GroupDef *gd=0);
- int countDocMembers();
- void distributeMemberGroupDocumentation();
- void findSectionsInDocumentation();
- int varCount() const;
- int funcCount() const;
- int enumCount() const;
- int enumValueCount() const;
- int typedefCount() const;
- int protoCount() const;
- int defineCount() const;
- int friendCount() const;
- int numDecMembers() const;
- int numDocMembers() const;
- void setInGroup(bool b);
- void addListReferences(Definition *d);
- void setRefItems(const QList<ListItemInfo> *sli);
- MemberList *members() const { return memberList; }
- Definition *parent() const { return m_parent; }
- QCString anchor() const;
-
- void marshal(StorageIntf *s);
- void unmarshal(StorageIntf *s);
-
- private:
- MemberList *memberList; // list of all members in the group
- MemberList *inDeclSection;
- int grpId;
- QCString grpHeader;
- QCString fileName; // base name of the generated file
- Definition *scope;
- QCString doc;
- bool inSameSection;
- int m_numDecMembers;
- int m_numDocMembers;
- Definition *m_parent;
- QCString m_docFile;
- QList<ListItemInfo> *m_xrefListItems;
-};
-
-class MemberGroupList : public QList<MemberGroup>
-{
-};
-
-class MemberGroupListIterator : public QListIterator<MemberGroup>
-{
- public:
- MemberGroupListIterator(const MemberGroupList &l) :
- QListIterator<MemberGroup>(l) {}
-};
-
-class MemberGroupSDict : public SIntDict<MemberGroup>
-{
- public:
- MemberGroupSDict(int size=17) : SIntDict<MemberGroup>(size) {}
- ~MemberGroupSDict() {}
- int compareItems(GCI item1,GCI item2)
- {
- return ((MemberGroup *)item1)->groupId() - ((MemberGroup*)item2)->groupId();
- }
-};
-
-
-struct MemberGroupInfo
-{
- MemberGroupInfo() : m_sli(0) {}
- ~MemberGroupInfo() { delete m_sli; m_sli=0; }
- void setRefItems(const QList<ListItemInfo> *sli);
- QCString header;
- QCString doc;
- QCString docFile;
- QCString compoundName;
- QList<ListItemInfo> *m_sli;
-};
-
-//class MemberGroupDict : public QIntDict<MemberGroup>
-//{
-// public:
-// MemberGroupDict(int size) : QIntDict<MemberGroup>(size) {}
-// ~MemberGroupDict() {}
-//};
-
-//class MemberGroupDictIterator : public QIntDictIterator<MemberGroup>
-//{
-// public:
-// MemberGroupDictIterator(const MemberGroupDict &d) :
-// QIntDictIterator<MemberGroup>(d) {}
-// ~MemberGroupDictIterator() {}
-//};
-
-#endif
diff --git a/trunk/src/memberlist.cpp b/trunk/src/memberlist.cpp
deleted file mode 100644
index 8cfad19..0000000
--- a/trunk/src/memberlist.cpp
+++ /dev/null
@@ -1,831 +0,0 @@
-/******************************************************************************
- *
- *
- *
- * Copyright (C) 1997-2012 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.
- *
- */
-
-#include <qregexp.h>
-
-#include "memberlist.h"
-#include "classdef.h"
-#include "message.h"
-#include "util.h"
-#include "language.h"
-#include "doxygen.h"
-#include "outputlist.h"
-#include "groupdef.h"
-#include "marshal.h"
-#include "vhdldocgen.h"
-
-MemberList::MemberList()
-{
-}
-
-MemberList::MemberList(ListType lt) : m_listType(lt)
-{
- memberGroupList=0;
- m_numDecMembers=-1; // special value indicating that value needs to be computed
- m_numDocMembers=-1; // special value indicating that value needs to be computed
- m_inGroup=FALSE;
- m_inFile=FALSE;
- m_needsSorting=FALSE;
-}
-
-MemberList::~MemberList()
-{
- delete memberGroupList;
-}
-
-int MemberList::compareItems(GCI item1, GCI item2)
-{
- static bool sortConstructorsFirst = Config_getBool("SORT_MEMBERS_CTORS_1ST");
- MemberDef *c1=(MemberDef *)item1;
- MemberDef *c2=(MemberDef *)item2;
- if (sortConstructorsFirst) {
- int ord1 = c1->isConstructor() ? 2 : (c1->isDestructor() ? 1 : 0);
- int ord2 = c2->isConstructor() ? 2 : (c2->isDestructor() ? 1 : 0);
- if (ord1 > ord2)
- return -1;
- else if (ord2 > ord1)
- return 1;
- }
- int cmp = stricmp(c1->name(),c2->name());
- return cmp!=0 ? cmp : c1->getDefLine()-c2->getDefLine();
-}
-
-/*! Count the number of members in this list that are visible in
- * the declaration part of a compound's documentation page.
- */
-void MemberList::countDecMembers(bool countEnumValues,GroupDef *gd)
-{
- if (m_numDecMembers!=-1) return;
-
- //printf("----- countDecMembers count=%d ----\n",count());
- m_varCnt=m_funcCnt=m_enumCnt=m_enumValCnt=0;
- m_typeCnt=m_protoCnt=m_defCnt=m_friendCnt=0;
- m_numDecMembers=0;
- QListIterator<MemberDef> mli(*this);
- MemberDef *md;
- for (mli.toFirst();(md=mli.current());++mli)
- {
- //printf("MemberList::countDecMembers(md=%s,%d)\n",md->name().data(),md->isBriefSectionVisible());
- if (md->isBriefSectionVisible())
- {
- switch(md->memberType())
- {
- case MemberDef::Variable: // fall through
- case MemberDef::Event: // fall through
- case MemberDef::Property: m_varCnt++,m_numDecMembers++;
- break;
- case MemberDef::Function: // fall through
- case MemberDef::Signal: // fall through
- case MemberDef::DCOP: // fall through
- case MemberDef::Slot: if (!md->isRelated() || md->getClassDef())
- m_funcCnt++,m_numDecMembers++;
- break;
- case MemberDef::Enumeration: m_enumCnt++,m_numDecMembers++; break;
- case MemberDef::EnumValue: if (countEnumValues)
- m_enumValCnt++,m_numDecMembers++;
- break;
- case MemberDef::Typedef: m_typeCnt++,m_numDecMembers++; break;
- //case MemberDef::Prototype: m_protoCnt++,m_numDecMembers++; break;
- case MemberDef::Define: if (Config_getBool("EXTRACT_ALL") ||
- md->argsString() ||
- !md->initializer().isEmpty() ||
- md->hasDocumentation()
- ) m_defCnt++,m_numDecMembers++;
- break;
- case MemberDef::Friend: m_friendCnt++,m_numDecMembers++;
- break;
- default:
- err("Error: Unknown member type found for member `%s'\n!",md->name().data());
- }
- }
- }
- if (memberGroupList)
- {
- MemberGroupListIterator mgli(*memberGroupList);
- MemberGroup *mg;
- for (;(mg=mgli.current());++mgli)
- {
- mg->countDecMembers(gd);
- m_varCnt+=mg->varCount();
- m_funcCnt+=mg->funcCount();
- m_enumCnt+=mg->enumCount();
- m_enumValCnt+=mg->enumValueCount();
- m_typeCnt+=mg->typedefCount();
- m_protoCnt+=mg->protoCount();
- m_defCnt+=mg->defineCount();
- m_friendCnt+=mg->friendCount();
- m_numDecMembers+=mg->numDecMembers();
- }
- }
- //printf("----- end countDecMembers ----\n");
-
- //printf("MemberList::countDecMembers()=%d\n",m_numDecMembers);
-}
-
-void MemberList::countDocMembers(bool countEnumValues)
-{
- if (m_numDocMembers!=-1) return; // used cached value
- m_numDocMembers=0;
- QListIterator<MemberDef> mli(*this);
- MemberDef *md;
- for (mli.toFirst();(md=mli.current());++mli)
- {
- if (md->isDetailedSectionVisible(m_inGroup,m_inFile))
- {
- // do not count enum values, since they do not produce entries of their own
- if (countEnumValues || md->memberType()!=MemberDef::EnumValue)
- m_numDocMembers++;
- }
- }
- if (memberGroupList)
- {
- MemberGroupListIterator mgli(*memberGroupList);
- MemberGroup *mg;
- for (;(mg=mgli.current());++mgli)
- {
- mg->countDocMembers();
- m_numDocMembers+=mg->numDocMembers();
- }
- }
- //printf("MemberList::countDocMembers()=%d memberGroupList=%p\n",m_numDocMembers,memberGroupList);
-}
-
-bool MemberList::insert(uint index,const MemberDef *md)
-{
- return QList<MemberDef>::insert(index,md);
-}
-
-void MemberList::inSort(const MemberDef *md)
-{
- QList<MemberDef>::inSort(md);
-}
-
-void MemberList::append(const MemberDef *md)
-{
- QList<MemberDef>::append(md);
-}
-
-MemberListIterator::MemberListIterator(const QList<MemberDef> &l) :
- QListIterator<MemberDef>(l)
-{
-}
-
-bool MemberList::declVisible() const
-{
- MemberListIterator mli(*this);
- MemberDef *md;
- for ( ; (md=mli.current()); ++mli )
- {
- if (md->isBriefSectionVisible())
- {
- switch (md->memberType())
- {
- case MemberDef::Define: // fall through
- case MemberDef::Typedef: // fall through
- case MemberDef::Variable: // fall through
- case MemberDef::Function: // fall through
- case MemberDef::Signal: // fall through
- case MemberDef::Slot: // fall through
- case MemberDef::DCOP: // fall through
- case MemberDef::Property: // fall through
- case MemberDef::Event:
- return TRUE;
- case MemberDef::Enumeration:
- {
- int enumVars=0;
- MemberListIterator vmli(*this);
- MemberDef *vmd;
- QCString name(md->name());
- int i=name.findRev("::");
- if (i!=-1) name=name.right(name.length()-i-2); // strip scope (TODO: is this needed?)
- if (name[0]=='@') // anonymous enum => append variables
- {
- for ( ; (vmd=vmli.current()) ; ++vmli)
- {
- QCString vtype=vmd->typeString();
- if ((vtype.find(name))!=-1)
- {
- enumVars++;
- }
- }
- }
- // if this is an anonymous enum and there are variables of this
- // enum type (i.e. enumVars>0), then we do not show the enum here.
- if (enumVars==0) // show enum here
- {
- return TRUE;
- }
- }
- break;
- case MemberDef::Friend:
- return TRUE;
- case MemberDef::EnumValue:
- {
- if (m_inGroup)
- {
- return TRUE;
- }
- }
- break;
- }
- }
- }
- return FALSE;
-}
-
-void MemberList::writePlainDeclarations(OutputList &ol,
- ClassDef *cd,NamespaceDef *nd,FileDef *fd,GroupDef *gd
- )
-{
- //printf("----- writePlainDeclaration() ----\n");
- countDecMembers();
- if (numDecMembers()==0)
- {
- //printf(" --> no members!\n");
- return; // no members in this list
- }
- //printf(" --> writePlainDeclaration() numDecMembers()=%d\n",
- // numDecMembers());
-
- ol.pushGeneratorState();
-
- bool first=TRUE;
- MemberDef *md;
- MemberListIterator mli(*this);
- for ( ; (md=mli.current()); ++mli )
- {
- //printf(">>> Member `%s' type=%d visible=%d\n",
- // md->name().data(),md->memberType(),md->isBriefSectionVisible());
- if (md->isBriefSectionVisible())
- {
- switch(md->memberType())
- {
- case MemberDef::Define: // fall through
- //case MemberDef::Prototype: // fall through
- case MemberDef::Typedef: // fall through
- case MemberDef::Variable: // fall through
- case MemberDef::Function: // fall through
- case MemberDef::Signal: // fall through
- case MemberDef::Slot: // fall through
- case MemberDef::DCOP: // fall through
- case MemberDef::Property: // fall through
- case MemberDef::Event:
- {
- if (first) ol.startMemberList(),first=FALSE;
- md->writeDeclaration(ol,cd,nd,fd,gd,m_inGroup);
- break;
- }
- case MemberDef::Enumeration:
- {
- int enumVars=0;
- MemberListIterator vmli(*this);
- MemberDef *vmd;
- QCString name(md->name());
- int i=name.findRev("::");
- if (i!=-1) name=name.right(name.length()-i-2); // strip scope (TODO: is this needed?)
- if (name[0]=='@') // anonymous enum => append variables
- {
- for ( ; (vmd=vmli.current()) ; ++vmli)
- {
- QCString vtype=vmd->typeString();
- if ((vtype.find(name))!=-1)
- {
- enumVars++;
- vmd->setAnonymousEnumType(md);
- }
- }
- }
- // if this is an anonymous enum and there are variables of this
- // enum type (i.e. enumVars>0), then we do not show the enum here.
- if (enumVars==0) // show enum here
- {
- //printf("Enum!!\n");
- if (first)
- {
- ol.startMemberList();
- first=FALSE;
- }
- ol.startMemberItem(md->anchor(),0);
- ol.writeString("enum ");
- ol.insertMemberAlign();
- md->writeEnumDeclaration(ol,cd,nd,fd,gd);
- ol.endMemberItem();
- if (!md->briefDescription().isEmpty() && Config_getBool("BRIEF_MEMBER_DESC"))
- {
- ol.startMemberDescription(md->anchor());
- ol.parseDoc(
- md->briefFile(),md->briefLine(),
- cd,md,
- md->briefDescription(),
- TRUE,FALSE,0,TRUE,FALSE
- );
- if (md->isDetailedSectionLinkable())
- {
- ol.disableAllBut(OutputGenerator::Html);
- ol.docify(" ");
- ol.startTextLink(md->getOutputFileBase(),
- md->anchor());
- ol.parseText(theTranslator->trMore());
- ol.endTextLink();
- ol.enableAll();
- }
- ol.endMemberDescription();
- }
- }
- md->warnIfUndocumented();
- break;
- }
- case MemberDef::Friend:
- {
- if (first)
- {
- ol.startMemberList();
- first=FALSE;
- }
- md->writeDeclaration(ol,cd,nd,fd,gd,m_inGroup);
- break;
- }
- case MemberDef::EnumValue:
- {
- if (m_inGroup)
- {
- //printf("EnumValue!\n");
- if (first) ol.startMemberList(),first=FALSE;
- md->writeDeclaration(ol,cd,nd,fd,gd,m_inGroup);
- }
- }
- break;
- }
- }
- }
-
- // handle members that are inside anonymous compounds and for which
- // no variables of the anonymous compound type exist.
- if (cd)
- {
- MemberListIterator mli(*this);
- for ( ; (md=mli.current()) ; ++mli )
- {
- if (md->fromAnonymousScope() && !md->anonymousDeclShown())
- {
- md->setFromAnonymousScope(FALSE);
- //printf("anonymous compound members\n");
- if (md->isBriefSectionVisible())
- {
- if (first)
- {
- ol.startMemberList();
- first=FALSE;
- }
- md->writeDeclaration(ol,cd,nd,fd,gd,m_inGroup);
- }
- md->setFromAnonymousScope(TRUE);
- }
- }
- }
-
- if (!first)
- {
- ol.endMemberList();
- }
-
- ol.popGeneratorState();
- //printf("----- end writePlainDeclaration() ----\n");
-}
-
-void MemberList::writeDeclarations(OutputList &ol,
- ClassDef *cd,NamespaceDef *nd,FileDef *fd,GroupDef *gd,
- const char *title,const char *subtitle, bool showEnumValues,
- bool showInline)
-{
- //printf("----- writeDeclaration() this=%p ----\n",this);
- static bool optimizeVhdl = Config_getBool("OPTIMIZE_OUTPUT_VHDL");
-
- countDecMembers(showEnumValues,gd); // count members shown in this section
- Definition *ctx = cd;
- if (ctx==0 && nd) ctx = nd;
- if (ctx==0 && gd) ctx = gd;
- if (ctx==0 && fd) ctx = fd;
-
- if (numDecMembers()==0) return;
- //printf("%p: MemberList::writeDeclaration(title=`%s',subtitle=`%s')=%d\n",
- // this,title,subtitle,numDecMembers());
- if (title)
- {
- if (showInline)
- {
- ol.startInlineHeader();
- }
- else
- {
- ol.startMemberHeader(listTypeAsString());
- }
- ol.parseText(title);
- if (showInline)
- {
- ol.endInlineHeader();
- }
- else
- {
- ol.endMemberHeader();
- }
- }
- if (subtitle)
- {
- QCString st=subtitle;
- st = st.stripWhiteSpace();
- if (!st.isEmpty())
- {
- ol.startMemberSubtitle();
- ol.parseDoc("[generated]",-1,ctx,0,subtitle,FALSE,FALSE,0,FALSE,FALSE);
- ol.endMemberSubtitle();
- }
- }
-
- // TODO: Two things need to be worked out for proper VHDL output:
- // 1. Signals and types under the group need to be
- // formatted to associate them with the group somehow
- // indentation, or at the very least, extra space after
- // the group is done
- // 2. This might need to be repeated below for memberGroupLists
- if (optimizeVhdl) // use specific declarations function
- {
- VhdlDocGen::writeVhdlDeclarations(this,ol,0,cd,0,0);
- }
- else
- {
- writePlainDeclarations(ol,cd,nd,fd,gd);
- }
-
- //printf("memberGroupList=%p\n",memberGroupList);
- if (memberGroupList)
- {
- MemberGroupListIterator mgli(*memberGroupList);
- MemberGroup *mg;
- while ((mg=mgli.current()))
- {
- bool hasHeader=!mg->header().isEmpty() && mg->header()!="[NOHEADER]";
- //printf("mg->header=%s hasHeader=%d\n",mg->header().data(),hasHeader);
- ol.startMemberGroupHeader(hasHeader);
- if (hasHeader)
- {
- ol.parseText(mg->header());
- }
- ol.endMemberGroupHeader();
- if (!mg->documentation().isEmpty())
- {
- //printf("Member group has docs!\n");
- ol.startMemberGroupDocs();
- ol.parseDoc("[generated]",-1,ctx,0,mg->documentation()+"\n",FALSE,FALSE);
- ol.endMemberGroupDocs();
- }
- ol.startMemberGroup();
- //printf("--- mg->writePlainDeclarations ---\n");
- mg->writePlainDeclarations(ol,cd,nd,fd,gd);
- ol.endMemberGroup(hasHeader);
- ++mgli;
- }
- }
- //printf("----- end writeDeclaration() ----\n");
-
-}
-
-void MemberList::writeDocumentation(OutputList &ol,
- const char *scopeName, Definition *container,
- const char *title,bool showEnumValues,bool showInline)
-{
- //printf("MemberList::writeDocumentation()\n");
-
- countDocMembers(showEnumValues);
- if (numDocMembers()==0) return;
-
- if (title)
- {
- ol.writeRuler();
- ol.startGroupHeader(showInline ? 2 : 0);
- ol.parseText(title);
- ol.endGroupHeader(showInline ? 2 : 0);
- }
- ol.startMemberDocList();
-
- MemberListIterator mli(*this);
- MemberDef *md;
- for ( ; (md=mli.current()) ; ++mli)
- {
- md->writeDocumentation(this,ol,scopeName,container,
- m_inGroup,showEnumValues,showInline);
- }
- if (memberGroupList)
- {
- //printf("MemberList::writeDocumentation() -- member groups\n");
- MemberGroupListIterator mgli(*memberGroupList);
- MemberGroup *mg;
- for (;(mg=mgli.current());++mgli)
- {
- mg->writeDocumentation(ol,scopeName,container,showEnumValues,showInline);
- }
- }
- ol.endMemberDocList();
-}
-
-// members in a table
-void MemberList::writeSimpleDocumentation(OutputList &ol,
- Definition *container)
-{
- countDocMembers(FALSE);
- //printf("MemberList count=%d\n",numDocMembers());
- if (numDocMembers()==0) return;
-
- ol.startMemberDocSimple();
- MemberListIterator mli(*this);
- MemberDef *md;
- for ( ; (md=mli.current()) ; ++mli)
- {
- md->writeMemberDocSimple(ol,container);
- }
- ol.endMemberDocSimple();
-}
-
-// separate member pages
-void MemberList::writeDocumentationPage(OutputList &ol,
- const char *scopeName, Definition *container)
-{
- static bool generateTreeView = Config_getBool("GENERATE_TREEVIEW");
- MemberListIterator mli(*this);
- MemberDef *md;
- for ( ; (md=mli.current()) ; ++mli)
- {
- QCString diskName=md->getOutputFileBase();
- QCString title=md->qualifiedName();
- startFile(ol,diskName,md->name(),title,HLI_None,!generateTreeView,
- container->getOutputFileBase());
- if (!generateTreeView)
- {
- container->writeNavigationPath(ol);
- ol.endQuickIndices();
- }
- ol.startContents();
-
-
- if (generateTreeView)
- {
- md->writeDocumentation(this,ol,scopeName,container,m_inGroup);
- ol.endContents();
- endFileWithNavPath(container,ol);
- }
- else
- {
- ol.writeString("<table cellspacing=\"0\" cellpadding=\"0\" border=\"0\">\n"
- " <tr>\n"
- " <td valign=\"top\">\n");
-
- container->writeQuickMemberLinks(ol,md);
-
- ol.writeString(" </td>\n");
- ol.writeString(" <td valign=\"top\" class=\"mempage\">\n");
-
- md->writeDocumentation(this,ol,scopeName,container,m_inGroup);
-
- ol.writeString(" </td>\n");
- ol.writeString(" </tr>\n");
- ol.writeString("</table>\n");
-
- endFile(ol);
- }
- }
- if (memberGroupList)
- {
- //printf("MemberList::writeDocumentation() -- member groups\n");
- MemberGroupListIterator mgli(*memberGroupList);
- MemberGroup *mg;
- for (;(mg=mgli.current());++mgli)
- {
- mg->writeDocumentationPage(ol,scopeName,container);
- }
- }
-}
-
-void MemberList::addMemberGroup(MemberGroup *mg)
-{
- if (memberGroupList==0)
- {
- memberGroupList=new MemberGroupList;
- }
- //printf("addMemberGroup: this=%p mg=%p\n",this,mg);
- memberGroupList->append(mg);
-}
-
-void MemberList::addListReferences(Definition *def)
-{
- MemberListIterator mli(*this);
- MemberDef *md;
- for ( ; (md=mli.current()) ; ++mli)
- {
- if (md->getGroupDef()==0 || def->definitionType()==Definition::TypeGroup)
- {
- md->addListReference(def);
- LockingPtr<MemberList> enumFields = md->enumFieldList();
- if (md->memberType()==MemberDef::Enumeration && enumFields!=0)
- {
- //printf(" Adding enum values!\n");
- MemberListIterator vmli(*enumFields);
- MemberDef *vmd;
- for ( ; (vmd=vmli.current()) ; ++vmli)
- {
- //printf(" adding %s\n",vmd->name().data());
- vmd->addListReference(def);
- }
- }
- }
- }
- if (memberGroupList)
- {
- MemberGroupListIterator mgli(*memberGroupList);
- MemberGroup *mg;
- for (;(mg=mgli.current());++mgli)
- {
- mg->addListReferences(def);
- }
- }
-}
-
-void MemberList::findSectionsInDocumentation()
-{
- MemberListIterator mli(*this);
- MemberDef *md;
- for ( ; (md=mli.current()) ; ++mli)
- {
- md->findSectionsInDocumentation();
- }
- if (memberGroupList)
- {
- MemberGroupListIterator mgli(*memberGroupList);
- MemberGroup *mg;
- for (;(mg=mgli.current());++mgli)
- {
- mg->findSectionsInDocumentation();
- }
- }
-}
-
-void MemberList::marshal(StorageIntf *s)
-{
- marshalInt(s,(int)m_listType);
- marshalInt(s,m_varCnt);
- marshalInt(s,m_funcCnt);
- marshalInt(s,m_enumCnt);
- marshalInt(s,m_enumValCnt);
- marshalInt(s,m_typeCnt);
- marshalInt(s,m_protoCnt);
- marshalInt(s,m_defCnt);
- marshalInt(s,m_friendCnt);
- marshalInt(s,m_numDecMembers);
- marshalInt(s,m_numDocMembers);
- marshalBool(s,m_inGroup);
- marshalBool(s,m_inFile);
- marshalBool(s,m_needsSorting);
- if (memberGroupList==0)
- {
- marshalUInt(s,NULL_LIST); // null pointer representation
- }
- else
- {
- marshalUInt(s,memberGroupList->count());
- QListIterator<MemberGroup> mgi(*memberGroupList);
- MemberGroup *mg=0;
- for (mgi.toFirst();(mg=mgi.current());++mgi)
- {
- mg->marshal(s);
- }
- }
-}
-
-void MemberList::unmarshal(StorageIntf *s)
-{
- m_listType = (MemberList::ListType)unmarshalInt(s);
- m_varCnt = unmarshalInt(s);
- m_funcCnt = unmarshalInt(s);
- m_enumCnt = unmarshalInt(s);
- m_enumValCnt = unmarshalInt(s);
- m_typeCnt = unmarshalInt(s);
- m_protoCnt = unmarshalInt(s);
- m_defCnt = unmarshalInt(s);
- m_friendCnt = unmarshalInt(s);
- m_numDecMembers = unmarshalInt(s);
- m_numDocMembers = unmarshalInt(s);
- m_inGroup = unmarshalBool(s);
- m_inFile = unmarshalBool(s);
- m_needsSorting = unmarshalBool(s);
- uint i,count = unmarshalUInt(s);
- if (count==NULL_LIST) // empty list
- {
- memberGroupList = 0;
- }
- else // add member groups
- {
- memberGroupList = new MemberGroupList;
- for (i=0;i<count;i++)
- {
- MemberGroup *mg = new MemberGroup;
- mg->unmarshal(s);
- memberGroupList->append(mg);
- }
- }
-}
-
-QCString MemberList::listTypeAsString() const
-{
- switch(m_listType)
- {
- case pubMethods: return "pub-methods";
- case proMethods: return "pro-methods";
- case pacMethods: return "pac-methods";
- case priMethods: return "pri-methods";
- case pubStaticMethods: return "pub-static-methods";
- case proStaticMethods: return "pro-static-methods";
- case pacStaticMethods: return "pac-static-methods";
- case priStaticMethods: return "pri-static-methods";
- case pubSlots: return "pub-slots";
- case proSlots: return "pro-slots";
- case priSlots: return "pri-slots";
- case pubAttribs: return "pub-attribs";
- case proAttribs: return "pro-attribs";
- case pacAttribs: return "pac-attribs";
- case priAttribs: return "pri-attribs";
- case pubStaticAttribs: return "pub-static-attribs";
- case proStaticAttribs: return "pro-static-attribs";
- case pacStaticAttribs: return "pac-static-attribs";
- case priStaticAttribs: return "pri-static-attribs";
- case pubTypes: return "pub-types";
- case proTypes: return "pro-types";
- case pacTypes: return "pac-types";
- case priTypes: return "pri-types";
- case related: return "related";
- case signals: return "signals";
- case friends: return "friends";
- case dcopMethods: return "dcop-methods";
- case properties: return "properties";
- case events: return "events";
- case decDefineMembers: return "define-members";
- case decProtoMembers: return "proto-members";
- case decTypedefMembers: return "typedef-members";
- case decEnumMembers: return "enum-members";
- case decFuncMembers: return "func-members";
- case decVarMembers: return "var-members";
- case decEnumValMembers: return "enumval-members";
- case decPubSlotMembers: return "pub-slot-members";
- case decProSlotMembers: return "pro-slot-members";
- case decPriSlotMembers: return "pri-slot-members";
- case decSignalMembers: return "signal-members";
- case decEventMembers: return "event-members";
- case decFriendMembers: return "friend-members";
- case decPropMembers: return "prop-members";
- case enumFields: return "enum-fields";
- case memberGroup: return "member-group";
- default: break;
- }
- return "";
-}
-
-void MemberList::setNeedsSorting(bool b)
-{
- m_needsSorting = b;
-}
-
-//--------------------------------------------------------------------------
-
-int MemberSDict::compareItems(GCI item1, GCI item2)
-{
- // NOTE: this function can be triggered from unmarshalMemberSDict
- // so it may not result in called to MemberDef::makeResident().
- // As a result, the data returned by MemberDef::name() and
- // MemberDef::getDefLine() will always be kept in memory.
- MemberDef *c1=(MemberDef *)item1;
- MemberDef *c2=(MemberDef *)item2;
- //printf("MemberSDict::compareItems(%s,%s)\n",c1->name().data(),c2->name().data());
- int cmp = stricmp(c1->name(),c2->name());
- if (cmp)
- {
- return cmp;
- }
- else
- {
- return c1->getDefLine()-c2->getDefLine();
- }
-}
-
-
diff --git a/trunk/src/memberlist.h b/trunk/src/memberlist.h
deleted file mode 100644
index e832ad5..0000000
--- a/trunk/src/memberlist.h
+++ /dev/null
@@ -1,202 +0,0 @@
-/******************************************************************************
- *
- *
- *
- * Copyright (C) 1997-2012 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.
- *
- */
-
-#ifndef MEMBERLIST_H
-#define MEMBERLIST_H
-
-#include <qlist.h>
-#include "memberdef.h"
-#include "sortdict.h"
-
-class GroupDef;
-class MemberGroup;
-class MemberGroupList;
-class StorageIntf;
-
-class MemberList : public QList<MemberDef>
-{
- public:
- enum ListType
- {
- privateLists = 0x0800,
- detailedLists = 0x1000,
- declarationLists = 0x2000,
- documentationLists = 0x4000,
-
- pubMethods = 0,
- proMethods = 1,
- pacMethods = 2,
- priMethods = 3 + privateLists,
- pubStaticMethods = 4,
- proStaticMethods = 5,
- pacStaticMethods = 6,
- priStaticMethods = 7 + privateLists,
- pubSlots = 8,
- proSlots = 9,
- priSlots = 10 + privateLists,
- pubAttribs = 11,
- proAttribs = 12,
- pacAttribs = 13,
- priAttribs = 14 + privateLists,
- pubStaticAttribs = 15,
- proStaticAttribs = 16,
- pacStaticAttribs = 17,
- priStaticAttribs = 18 + privateLists,
- pubTypes = 19,
- proTypes = 20,
- pacTypes = 21,
- priTypes = 22 + privateLists,
- related = 23,
- signals = 24,
- friends = 25,
- dcopMethods = 26,
- properties = 27,
- events = 28,
-
- typedefMembers = 29 + detailedLists,
- enumMembers = 30 + detailedLists,
- enumValMembers = 31 + detailedLists,
- functionMembers = 32 + detailedLists,
- relatedMembers = 33 + detailedLists,
- variableMembers = 34 + detailedLists,
- propertyMembers = 35 + detailedLists,
- eventMembers = 36 + detailedLists,
- constructors = 37 + detailedLists,
-
- allMembersList = 38,
-
- decDefineMembers = 39 + declarationLists,
- decProtoMembers = 40 + declarationLists,
- decTypedefMembers = 41 + declarationLists,
- decEnumMembers = 42 + declarationLists,
- decFuncMembers = 43 + declarationLists,
- decVarMembers = 44 + declarationLists,
- decEnumValMembers = 45 + declarationLists,
- decPubSlotMembers = 46 + declarationLists,
- decProSlotMembers = 47 + declarationLists,
- decPriSlotMembers = 48 + declarationLists,
- decSignalMembers = 49 + declarationLists,
- decEventMembers = 50 + declarationLists,
- decFriendMembers = 51 + declarationLists,
- decPropMembers = 52 + declarationLists,
-
- docDefineMembers = 53 + documentationLists,
- docProtoMembers = 54 + documentationLists,
- docTypedefMembers = 55 + documentationLists,
- docEnumMembers = 56 + documentationLists,
- docFuncMembers = 57 + documentationLists,
- docVarMembers = 58 + documentationLists,
- docEnumValMembers = 59 + documentationLists,
- docPubSlotMembers = 60 + documentationLists,
- docProSlotMembers = 61 + documentationLists,
- docPriSlotMembers = 62 + documentationLists,
- docSignalMembers = 63 + documentationLists,
- docEventMembers = 64 + documentationLists,
- docFriendMembers = 65 + documentationLists,
- docPropMembers = 66 + documentationLists,
-
- redefinedBy = 67,
- enumFields = 68,
- memberGroup = 69
- };
-
- MemberList();
- MemberList(ListType lt);
- ~MemberList();
- ListType listType() const { return m_listType; }
- QCString listTypeAsString() const;
- bool insert(uint index,const MemberDef *md);
- void inSort(const MemberDef *md);
- void append(const MemberDef *md);
- int compareItems(GCI item1,GCI item2);
- int varCount() const { ASSERT(m_numDecMembers!=-1); return m_varCnt; }
- int funcCount() const { ASSERT(m_numDecMembers!=-1); return m_funcCnt; }
- int enumCount() const { ASSERT(m_numDecMembers!=-1); return m_enumCnt; }
- int enumValueCount() const { ASSERT(m_numDecMembers!=-1); return m_enumValCnt; }
- int typedefCount() const { ASSERT(m_numDecMembers!=-1); return m_typeCnt; }
- int protoCount() const { ASSERT(m_numDecMembers!=-1); return m_protoCnt; }
- int defineCount() const { ASSERT(m_numDecMembers!=-1); return m_defCnt; }
- int friendCount() const { ASSERT(m_numDecMembers!=-1); return m_friendCnt; }
- int numDecMembers() const { ASSERT(m_numDecMembers!=-1); return m_numDecMembers; }
- int numDocMembers() const { ASSERT(m_numDocMembers!=-1); return m_numDocMembers; }
- bool needsSorting() const { return m_needsSorting; }
- void countDecMembers(bool countEnumValues=FALSE,GroupDef *gd=0);
- void countDocMembers(bool countEnumValues=FALSE);
- void writePlainDeclarations(OutputList &ol,
- ClassDef *cd,NamespaceDef *nd,FileDef *fd,GroupDef *gd);
- void writeDeclarations(OutputList &ol,
- ClassDef *cd,NamespaceDef *nd,FileDef *fd,GroupDef *gd,
- const char *title,const char *subtitle,bool showEnumValues=FALSE,bool showInline=FALSE);
- void writeDocumentation(OutputList &ol,const char *scopeName,
- Definition *container,const char *title,bool showEnumValues=FALSE,bool showInline=FALSE);
- void writeSimpleDocumentation(OutputList &ol,Definition *container);
- void writeDocumentationPage(OutputList &ol,
- const char *scopeName, Definition *container);
- bool declVisible() const;
- void addMemberGroup(MemberGroup *mg);
- void setInGroup(bool inGroup) { m_inGroup=inGroup; }
- void setInFile(bool inFile) { m_inFile=inFile; }
- void addListReferences(Definition *def);
- void findSectionsInDocumentation();
- void setNeedsSorting(bool b);
- MemberGroupList *getMemberGroupList() const { return memberGroupList; }
-
- void marshal(StorageIntf *s);
- void unmarshal(StorageIntf *s);
-
- private:
- int m_varCnt;
- int m_funcCnt;
- int m_enumCnt;
- int m_enumValCnt;
- int m_typeCnt;
- int m_protoCnt;
- int m_defCnt;
- int m_friendCnt;
- int m_numDecMembers; // number of members in the brief part of the memberlist
- int m_numDocMembers; // number of members in the detailed part of the memberlist
- MemberGroupList *memberGroupList;
- bool m_inGroup; // is this list part of a group definition
- bool m_inFile; // is this list part of a file definition
- ListType m_listType;
- bool m_needsSorting;
-};
-
-class MemberListIterator : public QListIterator<MemberDef>
-{
- public:
- MemberListIterator(const QList<MemberDef> &list);
- virtual ~MemberListIterator() {}
-};
-
-class MemberDict : public QDict<MemberDef>
-{
- public:
- MemberDict(int size) : QDict<MemberDef>(size) {}
- virtual ~MemberDict() {}
-};
-
-class MemberSDict : public SDict<MemberDef>
-{
- public:
- MemberSDict(int size=17) : SDict<MemberDef>(size) {}
- virtual ~MemberSDict() {}
- int compareItems(GCI item1,GCI item2);
-};
-
-
-#endif
diff --git a/trunk/src/membername.cpp b/trunk/src/membername.cpp
deleted file mode 100644
index 506313e..0000000
--- a/trunk/src/membername.cpp
+++ /dev/null
@@ -1,83 +0,0 @@
-/******************************************************************************
- *
- *
- *
- * Copyright (C) 1997-2012 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.
- *
- */
-
-#include "membername.h"
-#include "classdef.h"
-#include "util.h"
-#include "filedef.h"
-
-MemberName::MemberName(const char *n) : QList<MemberDef>()
-{
- name=n;
- setAutoDelete(TRUE);
-}
-
-MemberName::~MemberName()
-{
-}
-
-int MemberName::compareItems(GCI item1, GCI item2)
-{
- MemberDef *m1=(MemberDef *)item1;
- MemberDef *m2=(MemberDef *)item2;
- ClassDef *c1=m1->getClassDef();
- ClassDef *c2=m2->getClassDef();
- FileDef *f1=m1->getFileDef();
- FileDef *f2=m2->getFileDef();
- if (c1 && c2)
- return strcmp(c1->name(),c2->name());
- else if (f1 && f2)
- return strcmp(f1->name(),f2->name());
- else
- return 0;
-}
-
-MemberNameInfo::MemberNameInfo(const char *n) : QList<MemberInfo>()
-{
- name=n;
- setAutoDelete(TRUE);
-}
-
-int MemberNameInfo::compareItems(GCI item1, GCI item2)
-{
- MemberInfo *m1=(MemberInfo *)item1;
- MemberInfo *m2=(MemberInfo *)item2;
- ClassDef *c1=m1->memberDef->getClassDef();
- ClassDef *c2=m2->memberDef->getClassDef();
- FileDef *f1=m1->memberDef->getFileDef();
- FileDef *f2=m2->memberDef->getFileDef();
- if (c1 && c2)
- return strcmp(c1->name(),c2->name());
- else if (f1 && f2)
- return strcmp(f1->name(),f2->name());
- else
- return 0;
-}
-MemberNameIterator::MemberNameIterator(const MemberName &mnlist) :
- QListIterator<MemberDef>(mnlist)
-{
-}
-
-int MemberNameSDict::compareItems(GCI item1, GCI item2)
-{
- MemberName *n1=(MemberName *)item1;
- MemberName *n2=(MemberName *)item2;
- return stricmp(n1->memberName()+getPrefixIndex(n1->memberName()),
- n2->memberName()+getPrefixIndex(n2->memberName())
- );
-}
-
diff --git a/trunk/src/membername.h b/trunk/src/membername.h
deleted file mode 100644
index e5fbaa3..0000000
--- a/trunk/src/membername.h
+++ /dev/null
@@ -1,98 +0,0 @@
-/******************************************************************************
- *
- *
- *
- * Copyright (C) 1997-2012 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.
- *
- */
-
-#ifndef MEMBERNAME_H
-#define MEMBERNAME_H
-
-#include <qlist.h>
-#include "memberdef.h"
-#include "sortdict.h"
-
-class MemberName : public QList<MemberDef>
-{
- public:
- MemberName(const char *name);
- ~MemberName();
- const char *memberName() const { return name; }
-
- int compareItems(GCI item1,GCI item2);
- private:
- QCString name;
-};
-
-class MemberNameIterator : public QListIterator<MemberDef>
-{
- public:
- MemberNameIterator( const MemberName &list);
-};
-
-class MemberNameSDict : public SDict<MemberName>
-{
- public:
- MemberNameSDict(int size) : SDict<MemberName>(size) {}
- ~MemberNameSDict() {}
-
- int compareItems(GCI item1,GCI item2);
-};
-
-struct MemberInfo
-{
- MemberInfo(MemberDef *md,Protection p,Specifier v,bool inh) :
- memberDef(md), prot(p), virt(v), inherited(inh), ambigClass(0) {}
- ~MemberInfo() {}
- MemberDef *memberDef;
- Protection prot;
- Specifier virt;
- bool inherited;
- QCString scopePath;
- QCString ambiguityResolutionScope;
- ClassDef *ambigClass;
-};
-
-class MemberNameInfo : public QList<MemberInfo>
-{
- public:
- MemberNameInfo(const char *name);
- ~MemberNameInfo() {}
- const char *memberName() const { return name; }
- int compareItems(GCI item1,GCI item2);
- private:
- QCString name;
-};
-
-class MemberNameInfoIterator : public QListIterator<MemberInfo>
-{
- public:
- MemberNameInfoIterator(const MemberNameInfo &mnii)
- : QListIterator<MemberInfo>(mnii) {}
-};
-
-
-class MemberNameInfoSDict : public SDict<MemberNameInfo>
-{
- public:
- MemberNameInfoSDict(int size) : SDict<MemberNameInfo>(size) {}
- ~MemberNameInfoSDict() {}
- int compareItems(GCI item1,GCI item2)
- { return stricmp(
- ((MemberNameInfo *)item1)->memberName(),
- ((MemberNameInfo *)item2)->memberName()
- );
- }
-};
-
-#endif
diff --git a/trunk/src/message.cpp b/trunk/src/message.cpp
deleted file mode 100644
index 5a452cc..0000000
--- a/trunk/src/message.cpp
+++ /dev/null
@@ -1,196 +0,0 @@
-/******************************************************************************
- *
- *
- *
- * Copyright (C) 1997-2012 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.
- *
- */
-
-#include <stdarg.h>
-#include <stdio.h>
-#include <qdatetime.h>
-#include "config.h"
-#include "util.h"
-#include "debug.h"
-#include "doxygen.h"
-#include "portable.h"
-
-static QCString outputFormat;
-//static int warnFormatOrder; // 1 = $file,$line,$text
-// // 2 = $text,$line,$file
-// // 3 = $line,$text,$file
-// // 4 = $file,$text,$line
-// // 5 = $text,$file,$line
-// // 6 = $line,$file,$text
-
-static FILE *warnFile = stderr;
-
-void initWarningFormat()
-{
-// int filePos = Config_getString("WARN_FORMAT").find("$file");
-// int linePos = Config_getString("WARN_FORMAT").find("$line");
-// int textPos = Config_getString("WARN_FORMAT").find("$text");
-//
-// // sort items on position (there are 6 cases)
-// warnFormatOrder = 1;
-// if (filePos>linePos && filePos>textPos)
-// {
-// if (linePos>textPos) // $text,$line,$file
-// {
-// warnFormatOrder = 2;
-// }
-// else // $line,$text,$file
-// {
-// warnFormatOrder = 3;
-// }
-// }
-// else if (filePos<linePos && filePos<textPos)
-// {
-// if (linePos>textPos) // $file,$text,$line
-// {
-// warnFormatOrder = 4;
-// }
-// }
-// else if (filePos<linePos && filePos>textPos) // $text,$file,$line
-// {
-// warnFormatOrder = 5;
-// }
-// else // $line,$file,$text
-// {
-// warnFormatOrder = 6;
-// }
-// outputFormat =
-// substitute(
-// substitute(
-// substitute(
-// Config_getString("WARN_FORMAT"),
-// "$file","%s"
-// ),
-// "$text","%s"
-// ),
-// "$line","%d"
-// )+'\n';
-
- // replace(QRegExp("\\$file"),"%s").
- // replace(QRegExp("\\$text"),"%s").
- // replace(QRegExp("\\$line"),"%d")+
- // '\n';
-
- outputFormat = Config_getString("WARN_FORMAT");
-
- if (!Config_getString("WARN_LOGFILE").isEmpty())
- {
- warnFile = portable_fopen(Config_getString("WARN_LOGFILE"),"w");
- }
- if (!warnFile) // point it to something valid, because warn() relies on it
- {
- warnFile = stderr;
- }
-}
-
-
-void msg(const char *fmt, ...)
-{
- if (!Config_getBool("QUIET"))
- {
- if (Debug::isFlagSet(Debug::Time))
- {
- printf("%.3f sec: ",((double)Doxygen::runningTime.elapsed())/1000.0);
- }
- va_list args;
- va_start(args, fmt);
- vfprintf(stdout, fmt, args);
- va_end(args);
- }
-}
-
-static void format_warn(const char *file,int line,const char *text)
-{
- QCString fileSubst = file==0 ? "<unknown>" : file;
- QCString lineSubst; lineSubst.setNum(line);
- QCString textSubst = text;
- QCString versionSubst;
- if (file) // get version from file name
- {
- bool ambig;
- FileDef *fd=findFileDef(Doxygen::inputNameDict,file,ambig);
- if (fd)
- {
- versionSubst = fd->getVersion();
- }
- }
- // substitute markers by actual values
- QCString msgText =
- substitute(
- substitute(
- substitute(
- substitute(
- outputFormat,
- "$file",fileSubst
- ),
- "$text",textSubst
- ),
- "$line",lineSubst
- ),
- "$version",versionSubst
- )+'\n';
-
- // print resulting message
- fwrite(msgText.data(),1,msgText.length(),warnFile);
-}
-
-static void do_warn(const char *tag, const char *file, int line, const char *fmt, va_list args)
-{
- if (!Config_getBool(tag)) return; // warning type disabled
- char text[4096];
- vsnprintf(text, 4096, fmt, args);
- text[4095]='\0';
- format_warn(file,line,text);
-}
-
-void warn(const char *file,int line,const char *fmt, ...)
-{
- va_list args;
- va_start(args, fmt);
- do_warn("WARNINGS", file, line, fmt, args);
- va_end(args);
-}
-
-void warn_simple(const char *file,int line,const char *text)
-{
- if (!Config_getBool("WARNINGS")) return; // warning type disabled
- format_warn(file,line,text);
-}
-
-void warn_undoc(const char *file,int line,const char *fmt, ...)
-{
- va_list args;
- va_start(args, fmt);
- do_warn("WARN_IF_UNDOCUMENTED", file, line, fmt, args);
- va_end(args);
-}
-
-void warn_doc_error(const char *file,int line,const char *fmt, ...)
-{
- va_list args;
- va_start(args, fmt);
- do_warn("WARN_IF_DOC_ERROR", file, line, fmt, args);
- va_end(args);
-}
-
-void err(const char *fmt, ...)
-{
- va_list args;
- va_start(args, fmt);
- vfprintf(warnFile, fmt, args);
- va_end(args);
-}
diff --git a/trunk/src/message.h b/trunk/src/message.h
deleted file mode 100644
index 46b736c..0000000
--- a/trunk/src/message.h
+++ /dev/null
@@ -1,31 +0,0 @@
-/******************************************************************************
- *
- *
- *
- * Copyright (C) 1997-2012 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.
- *
- */
-
-#ifndef MESSAGE_H
-#define MESSAGE_H
-
-#include <stdio.h>
-
-extern void msg(const char *fmt, ...);
-extern void warn(const char *file,int line,const char *fmt, ...);
-extern void warn_simple(const char *file,int line,const char *text);
-extern void warn_undoc(const char *file,int line,const char *fmt, ...);
-extern void warn_doc_error(const char *file,int line,const char *fmt, ...);
-extern void err(const char *fmt, ...);
-void initWarningFormat();
-
-#endif
diff --git a/trunk/src/msc.cpp b/trunk/src/msc.cpp
deleted file mode 100644
index 51875ba..0000000
--- a/trunk/src/msc.cpp
+++ /dev/null
@@ -1,198 +0,0 @@
-/******************************************************************************
- *
- *
- *
- * Copyright (C) 1997-2012 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.
- *
- */
-
-#include "msc.h"
-#include "portable.h"
-#include "config.h"
-#include "message.h"
-#include "docparser.h"
-#include "doxygen.h"
-
-#include <qdir.h>
-
-static const int maxCmdLine = 40960;
-
-static bool convertMapFile(QTextStream &t,const char *mapName,const QCString relPath,
- const QCString &context)
-{
- QFile f(mapName);
- if (!f.open(IO_ReadOnly))
- {
- err("error: failed to open map file %s for inclusion in the docs!\n"
- "If you installed Graphviz/dot after a previous failing run, \n"
- "try deleting the output directory and rerun doxygen.\n",mapName);
- return FALSE;
- }
- const int maxLineLen=1024;
- char buf[maxLineLen];
- char url[maxLineLen];
- char ref[maxLineLen];
- int x1,y1,x2,y2;
- while (!f.atEnd())
- {
- bool isRef = FALSE;
- int numBytes = f.readLine(buf,maxLineLen);
- buf[numBytes-1]='\0';
- //printf("ReadLine `%s'\n",buf);
- if (strncmp(buf,"rect",4)==0)
- {
- // obtain the url and the coordinates in the order used by graphviz-1.5
- sscanf(buf,"rect %s %d,%d %d,%d",url,&x1,&y1,&x2,&y2);
-
- if ( strcmp(url,"\\ref") == 0 )
- {
- isRef = TRUE;
- sscanf(buf,"rect %s %s %d,%d %d,%d",ref,url,&x1,&y1,&x2,&y2);
- }
-
- // sanity checks
- if (y2<y1) { int temp=y2; y2=y1; y1=temp; }
- if (x2<x1) { int temp=x2; x2=x1; x1=temp; }
-
- t << "<area href=\"";
-
- if ( isRef )
- {
- // handle doxygen \ref tag URL reference
- DocRef *df = new DocRef( (DocNode*) 0, url, context );
- t << externalRef(relPath,df->ref(),TRUE);
- if (!df->file().isEmpty()) t << df->file() << Doxygen::htmlFileExtension;
- if (!df->anchor().isEmpty()) t << "#" << df->anchor();
- }
- else
- {
- t << url;
- }
- t << "\" shape=\"rect\" coords=\""
- << x1 << "," << y1 << "," << x2 << "," << y2 << "\""
- << " alt=\"\"/>" << endl;
- }
- }
-
- return TRUE;
-}
-
-void writeMscGraphFromFile(const char *inFile,const char *outDir,
- const char *outFile,MscOutputFormat format)
-{
- QCString absOutFile = outDir;
- absOutFile+=portable_pathSeparator();
- absOutFile+=outFile;
-
- // chdir to the output dir, so dot can find the font file.
- QCString oldDir = convertToQCString(QDir::currentDirPath());
- // go to the html output directory (i.e. path)
- QDir::setCurrent(outDir);
- //printf("Going to dir %s\n",QDir::currentDirPath().data());
- QCString mscExe = Config_getString("MSCGEN_PATH")+"mscgen"+portable_commandExtension();
- QCString mscArgs;
- QCString extension;
- if (format==MSC_BITMAP)
- {
- mscArgs+="-T png";
- extension=".png";
- }
- else if (format==MSC_EPS)
- {
- mscArgs+="-T eps";
- extension=".eps";
- }
- mscArgs+=" -i \"";
- mscArgs+=inFile;
-
- mscArgs+="\" -o \"";
- mscArgs+=outFile;
- mscArgs+=extension+"\"";
- int exitCode;
-// printf("*** running: %s %s outDir:%s %s\n",mscExe.data(),mscArgs.data(),outDir,outFile);
- portable_sysTimerStart();
- if ((exitCode=portable_system(mscExe,mscArgs,FALSE))!=0)
- {
- portable_sysTimerStop();
- goto error;
- }
- portable_sysTimerStop();
- if ( (format==MSC_EPS) && (Config_getBool("USE_PDFLATEX")) )
- {
- QCString epstopdfArgs(maxCmdLine);
- epstopdfArgs.sprintf("\"%s.eps\" --outfile=\"%s.pdf\"",
- outFile,outFile);
- portable_sysTimerStart();
- if (portable_system("epstopdf",epstopdfArgs)!=0)
- {
- err("error: Problems running epstopdf. Check your TeX installation!\n");
- }
- portable_sysTimerStop();
- }
-
-error:
- QDir::setCurrent(oldDir);
-}
-
-QCString getMscImageMapFromFile(const QCString& inFile, const QCString& outDir,
- const QCString& relPath,const QCString& context)
-{
- QCString outFile = inFile + ".map";
-
-
- //printf("*** running:getMscImageMapFromFile \n");
- // chdir to the output dir, so dot can find the font file.
- QCString oldDir = convertToQCString(QDir::currentDirPath());
- // go to the html output directory (i.e. path)
- QDir::setCurrent(outDir);
- //printf("Going to dir %s\n",QDir::currentDirPath().data());
-
- QCString mscExe = Config_getString("MSCGEN_PATH")+"mscgen"+portable_commandExtension();
- QCString mscArgs = "-T ismap -i \"";
- mscArgs+=inFile;
- QFileInfo fi(inFile);
- mscArgs+="\" -o \"";
- mscArgs+=outFile + "\"";
-
- int exitCode;
- portable_sysTimerStart();
- if ((exitCode=portable_system(mscExe,mscArgs,FALSE))!=0)
- {
- portable_sysTimerStop();
- QDir::setCurrent(oldDir);
- return "";
- }
- portable_sysTimerStop();
-
- QString result;
- QTextOStream tmpout(&result);
- convertMapFile(tmpout, outFile, relPath, context);
- QDir().remove(outFile);
-
- QDir::setCurrent(oldDir);
- return result.data();
-}
-
-void writeMscImageMapFromFile(FTextStream &t,const QCString &inFile,
- const QCString &outDir,
- const QCString &relPath,
- const QCString &baseName,
- const QCString &context)
-{
- QCString mapName = baseName+".map";
- QCString mapFile = inFile+".map";
- t << "<img src=\"" << relPath << baseName << ".png\" alt=\""
- << baseName << "\" border=\"0\" usemap=\"#" << mapName << "\"/>" << endl;
- QCString imap = getMscImageMapFromFile(inFile,outDir,relPath,context);
- t << "<map name=\"" << mapName << "\" id=\"" << mapName << "\">" << imap << "</map>" << endl;
-}
-
diff --git a/trunk/src/msc.h b/trunk/src/msc.h
deleted file mode 100644
index f1fc78b..0000000
--- a/trunk/src/msc.h
+++ /dev/null
@@ -1,38 +0,0 @@
-/******************************************************************************
- *
- *
- *
- * Copyright (C) 1997-2012 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.
- *
- */
-
-#ifndef _MSC_H
-#define _MSC_H
-
-#include "qtbc.h"
-
-class FTextStream;
-
-enum MscOutputFormat { MSC_BITMAP , MSC_EPS };
-
-void writeMscGraphFromFile(const char *inFile,const char *outDir,
- const char *outFile,MscOutputFormat format);
-
-QCString getMscImageMapFromFile(const QCString& inFile, const QCString& outDir,
- const QCString& relPath,const QCString& context);
-
-void writeMscImageMapFromFile(FTextStream &t,const QCString &inFile,
- const QCString &outDir, const QCString &relPath,
- const QCString &baseName, const QCString &context);
-
-#endif
-
diff --git a/trunk/src/namespacedef.cpp b/trunk/src/namespacedef.cpp
deleted file mode 100644
index 4d53a12..0000000
--- a/trunk/src/namespacedef.cpp
+++ /dev/null
@@ -1,992 +0,0 @@
-/******************************************************************************
- *
- *
- *
- * Copyright (C) 1997-2012 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.
- *
- */
-
-#include "qtbc.h"
-#include "namespacedef.h"
-#include "outputlist.h"
-#include "util.h"
-#include "language.h"
-#include "classdef.h"
-#include "classlist.h"
-#include "memberlist.h"
-#include "doxygen.h"
-#include "message.h"
-#include "docparser.h"
-#include "searchindex.h"
-#include "vhdldocgen.h"
-#include "layout.h"
-
-//------------------------------------------------------------------
-
-NamespaceDef::NamespaceDef(const char *df,int dl,
- const char *name,const char *lref,
- const char *fName) :
- Definition(df,dl,name)
-{
- if (fName)
- {
- fileName = stripExtension(fName);
- }
- else
- {
- fileName="namespace";
- fileName+=name;
- }
- classSDict = new ClassSDict(17);
- namespaceSDict = new NamespaceSDict(17);
- m_innerCompounds = new SDict<Definition>(17);
- usingDirList = 0;
- usingDeclList = 0;
- m_allMembersDict = 0;
- setReference(lref);
- memberGroupSDict = new MemberGroupSDict;
- memberGroupSDict->setAutoDelete(TRUE);
- visited=FALSE;
- m_subGrouping=Config_getBool("SUBGROUPING");
-}
-
-NamespaceDef::~NamespaceDef()
-{
- delete classSDict;
- delete namespaceSDict;
- delete m_innerCompounds;
- delete usingDirList;
- delete usingDeclList;
- delete memberGroupSDict;
-}
-
-void NamespaceDef::distributeMemberGroupDocumentation()
-{
- MemberGroupSDict::Iterator mgli(*memberGroupSDict);
- MemberGroup *mg;
- for (;(mg=mgli.current());++mgli)
- {
- mg->distributeMemberGroupDocumentation();
- }
-}
-
-void NamespaceDef::findSectionsInDocumentation()
-{
- docFindSections(documentation(),this,0,docFile());
- MemberGroupSDict::Iterator mgli(*memberGroupSDict);
- MemberGroup *mg;
- for (;(mg=mgli.current());++mgli)
- {
- mg->findSectionsInDocumentation();
- }
- QListIterator<MemberList> mli(m_memberLists);
- MemberList *ml;
- for (mli.toFirst();(ml=mli.current());++mli)
- {
- if (ml->listType()&MemberList::declarationLists)
- {
- ml->findSectionsInDocumentation();
- }
- }
-}
-
-void NamespaceDef::insertUsedFile(const char *f)
-{
- if (files.find(f)==-1)
- {
- if (Config_getBool("SORT_MEMBER_DOCS"))
- files.inSort(f);
- else
- files.append(f);
- }
-}
-
-void NamespaceDef::addInnerCompound(Definition *d)
-{
- m_innerCompounds->append(d->localName(),d);
- if (d->definitionType()==Definition::TypeNamespace)
- {
- insertNamespace((NamespaceDef *)d);
- }
- else if (d->definitionType()==Definition::TypeClass)
- {
- insertClass((ClassDef *)d);
- }
-}
-
-void NamespaceDef::insertClass(ClassDef *cd)
-{
- if (classSDict->find(cd->name())==0)
- {
- if (Config_getBool("SORT_BRIEF_DOCS"))
- classSDict->inSort(cd->name(),cd);
- else
- classSDict->append(cd->name(),cd);
- }
-}
-
-void NamespaceDef::insertNamespace(NamespaceDef *nd)
-{
- if (namespaceSDict->find(nd->name())==0)
- {
- if (Config_getBool("SORT_MEMBER_DOCS"))
- namespaceSDict->inSort(nd->name(),nd);
- else
- namespaceSDict->append(nd->name(),nd);
- }
-}
-
-
-void NamespaceDef::addMembersToMemberGroup()
-{
- QListIterator<MemberList> mli(m_memberLists);
- MemberList *ml;
- for (mli.toFirst();(ml=mli.current());++mli)
- {
- if (ml->listType()&MemberList::declarationLists)
- {
- ::addMembersToMemberGroup(ml,&memberGroupSDict,this);
- }
- }
-
- // add members inside sections to their groups
- if (memberGroupSDict)
- {
- MemberGroupSDict::Iterator mgli(*memberGroupSDict);
- MemberGroup *mg;
- for (;(mg=mgli.current());++mgli)
- {
- if (mg->allMembersInSameSection() && m_subGrouping)
- {
- //printf("----> addToDeclarationSection(%s)\n",mg->header().data());
- mg->addToDeclarationSection();
- }
- }
- }
-}
-
-void NamespaceDef::insertMember(MemberDef *md)
-{
- if (md->isHidden()) return;
- MemberList *allMemberList = getMemberList(MemberList::allMembersList);
- if (allMemberList==0)
- {
- allMemberList = new MemberList(MemberList::allMembersList);
- m_memberLists.append(allMemberList);
- }
- allMemberList->append(md);
- if (m_allMembersDict==0)
- {
- m_allMembersDict = new MemberSDict;
- }
- //printf("%s::m_allMembersDict->append(%s)\n",name().data(),md->localName().data());
- m_allMembersDict->append(md->localName(),md);
- //::addNamespaceMemberNameToIndex(md);
- //static bool sortBriefDocs=Config_getBool("SORT_BRIEF_DOCS");
- switch(md->memberType())
- {
- case MemberDef::Variable:
- addMemberToList(MemberList::decVarMembers,md);
- addMemberToList(MemberList::docVarMembers,md);
- break;
- case MemberDef::Function:
- addMemberToList(MemberList::decFuncMembers,md);
- addMemberToList(MemberList::docFuncMembers,md);
- break;
- case MemberDef::Typedef:
- addMemberToList(MemberList::decTypedefMembers,md);
- addMemberToList(MemberList::docTypedefMembers,md);
- break;
- case MemberDef::Enumeration:
- addMemberToList(MemberList::decEnumMembers,md);
- addMemberToList(MemberList::docEnumMembers,md);
- break;
- case MemberDef::EnumValue:
- break;
- case MemberDef::Define:
- addMemberToList(MemberList::decDefineMembers,md);
- addMemberToList(MemberList::docDefineMembers,md);
- break;
- default:
- err("NamespaceDef::insertMembers(): "
- "member `%s' with class scope `%s' inserted in namespace scope `%s'!\n",
- md->name().data(),
- md->getClassDef() ? md->getClassDef()->name().data() : "",
- name().data());
- }
-}
-
-void NamespaceDef::computeAnchors()
-{
- MemberList *allMemberList = getMemberList(MemberList::allMembersList);
- if (allMemberList) setAnchors(0,'a',allMemberList);
-}
-
-void NamespaceDef::writeDetailedDescription(OutputList &ol,const QCString &title)
-{
- if ((!briefDescription().isEmpty() && Config_getBool("REPEAT_BRIEF")) ||
- !documentation().isEmpty()
- )
- {
- ol.writeRuler();
- ol.pushGeneratorState();
- ol.disableAllBut(OutputGenerator::Html);
- ol.writeAnchor(0,"details");
- ol.popGeneratorState();
- ol.startGroupHeader();
- ol.parseText(title);
- ol.endGroupHeader();
-
- ol.startTextBlock();
- if (!briefDescription().isEmpty() && Config_getBool("REPEAT_BRIEF"))
- {
- ol.parseDoc(briefFile(),briefLine(),this,0,briefDescription(),FALSE,FALSE);
- }
- if (!briefDescription().isEmpty() && Config_getBool("REPEAT_BRIEF") &&
- !documentation().isEmpty())
- {
- ol.pushGeneratorState();
- ol.disable(OutputGenerator::Man);
- ol.disable(OutputGenerator::RTF);
- //ol.newParagraph(); // FIXME:PARA
- ol.enableAll();
- ol.disableAllBut(OutputGenerator::Man);
- ol.writeString("\n\n");
- ol.popGeneratorState();
- }
- if (!documentation().isEmpty())
- {
- ol.parseDoc(docFile(),docLine(),this,0,documentation()+"\n",TRUE,FALSE);
- }
- ol.endTextBlock();
- }
-}
-
-void NamespaceDef::writeBriefDescription(OutputList &ol)
-{
- if (!briefDescription().isEmpty() && Config_getBool("BRIEF_MEMBER_DESC"))
- {
- ol.startParagraph();
- ol.parseDoc(briefFile(),briefLine(),this,0,
- briefDescription(),TRUE,FALSE,0,TRUE,FALSE);
- ol.pushGeneratorState();
- ol.disable(OutputGenerator::RTF);
- ol.writeString(" \n");
- ol.enable(OutputGenerator::RTF);
-
- if (Config_getBool("REPEAT_BRIEF") ||
- !documentation().isEmpty()
- )
- {
- ol.disableAllBut(OutputGenerator::Html);
- ol.startTextLink(0,"details");
- ol.parseText(theTranslator->trMore());
- ol.endTextLink();
- }
- ol.popGeneratorState();
- ol.endParagraph();
-
- // FIXME:PARA
- //ol.pushGeneratorState();
- //ol.disable(OutputGenerator::RTF);
- //ol.newParagraph();
- //ol.popGeneratorState();
- }
- ol.writeSynopsis();
-}
-
-void NamespaceDef::startMemberDeclarations(OutputList &ol)
-{
- ol.startMemberSections();
-}
-
-void NamespaceDef::endMemberDeclarations(OutputList &ol)
-{
- ol.endMemberSections();
-}
-
-void NamespaceDef::startMemberDocumentation(OutputList &ol)
-{
- if (Config_getBool("SEPARATE_MEMBER_PAGES"))
- {
- ol.disable(OutputGenerator::Html);
- Doxygen::suppressDocWarnings = TRUE;
- }
-}
-
-void NamespaceDef::endMemberDocumentation(OutputList &ol)
-{
- if (Config_getBool("SEPARATE_MEMBER_PAGES"))
- {
- ol.enable(OutputGenerator::Html);
- Doxygen::suppressDocWarnings = FALSE;
- }
-}
-
-void NamespaceDef::writeClassDeclarations(OutputList &ol,const QCString &title)
-{
- if (classSDict) classSDict->writeDeclaration(ol,0,title,TRUE);
-}
-
-void NamespaceDef::writeInlineClasses(OutputList &ol)
-{
- if (classSDict) classSDict->writeDocumentation(ol,this);
-}
-
-void NamespaceDef::writeNamespaceDeclarations(OutputList &ol,const QCString &title)
-{
- if (namespaceSDict) namespaceSDict->writeDeclaration(ol,title,TRUE);
-}
-
-void NamespaceDef::writeMemberGroups(OutputList &ol)
-{
- /* write user defined member groups */
- if (memberGroupSDict)
- {
- memberGroupSDict->sort();
- MemberGroupSDict::Iterator mgli(*memberGroupSDict);
- MemberGroup *mg;
- for (;(mg=mgli.current());++mgli)
- {
- if ((!mg->allMembersInSameSection() || !m_subGrouping)
- && mg->header()!="[NOHEADER]")
- {
- mg->writeDeclarations(ol,0,this,0,0);
- }
- }
- }
-}
-
-void NamespaceDef::writeAuthorSection(OutputList &ol)
-{
- // write Author section (Man only)
- ol.pushGeneratorState();
- ol.disableAllBut(OutputGenerator::Man);
- ol.startGroupHeader();
- ol.parseText(theTranslator->trAuthor(TRUE,TRUE));
- ol.endGroupHeader();
- ol.parseText(theTranslator->trGeneratedAutomatically(Config_getString("PROJECT_NAME")));
- ol.popGeneratorState();
-}
-
-void NamespaceDef::writeSummaryLinks(OutputList &ol)
-{
- ol.pushGeneratorState();
- ol.disableAllBut(OutputGenerator::Html);
- QListIterator<LayoutDocEntry> eli(
- LayoutDocManager::instance().docEntries(LayoutDocManager::Namespace));
- LayoutDocEntry *lde;
- bool first=TRUE;
- for (eli.toFirst();(lde=eli.current());++eli)
- {
- if ((lde->kind()==LayoutDocEntry::NamespaceClasses && classSDict && classSDict->declVisible()) ||
- (lde->kind()==LayoutDocEntry::NamespaceNestedNamespaces && namespaceSDict && namespaceSDict->declVisible())
- )
- {
- LayoutDocEntrySection *ls = (LayoutDocEntrySection*)lde;
- QCString label = lde->kind()==LayoutDocEntry::NamespaceClasses ? "nested-classes" : "namespaces";
- writeSummaryLink(ol,label,ls->title,first);
- }
- else if (lde->kind()== LayoutDocEntry::MemberDecl)
- {
- LayoutDocEntryMemberDecl *lmd = (LayoutDocEntryMemberDecl*)lde;
- MemberList * ml = getMemberList(lmd->type);
- if (ml && ml->declVisible())
- {
- writeSummaryLink(ol,ml->listTypeAsString(),lmd->title,first);
- }
- }
- }
- if (!first)
- {
- ol.writeString(" </div>\n");
- }
- ol.popGeneratorState();
-}
-
-void NamespaceDef::writeDocumentation(OutputList &ol)
-{
- static bool generateTreeView = Config_getBool("GENERATE_TREEVIEW");
- //static bool outputJava = Config_getBool("OPTIMIZE_OUTPUT_JAVA");
- //static bool fortranOpt = Config_getBool("OPTIMIZE_FOR_FORTRAN");
- SrcLangExt lang = getLanguage();
-
- QCString pageTitle;
- if (lang==SrcLangExt_Java || lang==SrcLangExt_CSharp)
- {
- pageTitle = theTranslator->trPackage(displayName());
- }
- else if (lang==SrcLangExt_Fortran)
- {
- pageTitle = theTranslator->trModuleReference(displayName());
- }
- else
- {
- pageTitle = theTranslator->trNamespaceReference(displayName());
- }
- startFile(ol,getOutputFileBase(),name(),pageTitle,HLI_NamespaceVisible,!generateTreeView);
-
- if (!generateTreeView)
- {
- if (getOuterScope()!=Doxygen::globalScope)
- {
- writeNavigationPath(ol);
- }
- ol.endQuickIndices();
- }
-
- startTitle(ol,getOutputFileBase(),this);
- ol.parseText(pageTitle);
- addGroupListToTitle(ol,this);
- endTitle(ol,getOutputFileBase(),displayName());
- ol.startContents();
-
- if (Doxygen::searchIndex)
- {
- Doxygen::searchIndex->setCurrentDoc(pageTitle,getOutputFileBase());
- Doxygen::searchIndex->addWord(localName(),TRUE);
- }
-
- bool generateTagFile = !Config_getString("GENERATE_TAGFILE").isEmpty();
- if (generateTagFile)
- {
- Doxygen::tagFile << " <compound kind=\"namespace\">" << endl;
- Doxygen::tagFile << " <name>" << convertToXML(name()) << "</name>" << endl;
- Doxygen::tagFile << " <filename>" << convertToXML(getOutputFileBase()) << Doxygen::htmlFileExtension << "</filename>" << endl;
- }
-
- Doxygen::indexList.addIndexItem(this,0);
-
- //---------------------------------------- start flexible part -------------------------------
-
- QListIterator<LayoutDocEntry> eli(
- LayoutDocManager::instance().docEntries(LayoutDocManager::Namespace));
- LayoutDocEntry *lde;
- for (eli.toFirst();(lde=eli.current());++eli)
- {
- switch (lde->kind())
- {
- case LayoutDocEntry::BriefDesc:
- writeBriefDescription(ol);
- break;
- case LayoutDocEntry::MemberDeclStart:
- startMemberDeclarations(ol);
- break;
- case LayoutDocEntry::NamespaceClasses:
- {
- LayoutDocEntrySection *ls = (LayoutDocEntrySection*)lde;
- writeClassDeclarations(ol,ls->title);
- }
- break;
- case LayoutDocEntry::NamespaceNestedNamespaces:
- {
- LayoutDocEntrySection *ls = (LayoutDocEntrySection*)lde;
- writeNamespaceDeclarations(ol,ls->title);
- }
- break;
- case LayoutDocEntry::MemberGroups:
- writeMemberGroups(ol);
- break;
- case LayoutDocEntry::MemberDecl:
- {
- LayoutDocEntryMemberDecl *lmd = (LayoutDocEntryMemberDecl*)lde;
- writeMemberDeclarations(ol,lmd->type,lmd->title);
- }
- break;
- case LayoutDocEntry::MemberDeclEnd:
- endMemberDeclarations(ol);
- break;
- case LayoutDocEntry::DetailedDesc:
- {
- LayoutDocEntrySection *ls = (LayoutDocEntrySection*)lde;
- writeDetailedDescription(ol,ls->title);
- }
- break;
- case LayoutDocEntry::MemberDefStart:
- startMemberDocumentation(ol);
- break;
- case LayoutDocEntry::NamespaceInlineClasses:
- writeInlineClasses(ol);
- break;
- case LayoutDocEntry::MemberDef:
- {
- LayoutDocEntryMemberDef *lmd = (LayoutDocEntryMemberDef*)lde;
- writeMemberDocumentation(ol,lmd->type,lmd->title);
- }
- break;
- case LayoutDocEntry::MemberDefEnd:
- endMemberDocumentation(ol);
- break;
- case LayoutDocEntry::AuthorSection:
- writeAuthorSection(ol);
- break;
- case LayoutDocEntry::ClassIncludes:
- case LayoutDocEntry::ClassInheritanceGraph:
- case LayoutDocEntry::ClassNestedClasses:
- case LayoutDocEntry::ClassCollaborationGraph:
- case LayoutDocEntry::ClassAllMembersLink:
- case LayoutDocEntry::ClassUsedFiles:
- case LayoutDocEntry::ClassInlineClasses:
- case LayoutDocEntry::FileClasses:
- case LayoutDocEntry::FileNamespaces:
- case LayoutDocEntry::FileIncludes:
- case LayoutDocEntry::FileIncludeGraph:
- case LayoutDocEntry::FileIncludedByGraph:
- case LayoutDocEntry::FileSourceLink:
- case LayoutDocEntry::FileInlineClasses:
- case LayoutDocEntry::GroupClasses:
- case LayoutDocEntry::GroupInlineClasses:
- case LayoutDocEntry::GroupNamespaces:
- case LayoutDocEntry::GroupDirs:
- case LayoutDocEntry::GroupNestedGroups:
- case LayoutDocEntry::GroupFiles:
- case LayoutDocEntry::GroupGraph:
- case LayoutDocEntry::GroupPageDocs:
- case LayoutDocEntry::DirSubDirs:
- case LayoutDocEntry::DirFiles:
- case LayoutDocEntry::DirGraph:
- err("Internal inconsistency: member %d should not be part of "
- "LayoutDocManager::Namespace entry list\n",lde->kind());
- break;
- }
- }
-
- //---------------------------------------- end flexible part -------------------------------
-
- ol.endContents();
-
- endFileWithNavPath(this,ol);
-
- if (generateTagFile)
- {
- writeDocAnchorsToTagFile();
- Doxygen::tagFile << " </compound>" << endl;
- }
-
- if (Config_getBool("SEPARATE_MEMBER_PAGES"))
- {
- MemberList *allMemberList = getMemberList(MemberList::allMembersList);
- if (allMemberList) allMemberList->sort();
- writeMemberPages(ol);
- }
-}
-
-void NamespaceDef::writeMemberPages(OutputList &ol)
-{
- ol.pushGeneratorState();
- ol.disableAllBut(OutputGenerator::Html);
-
- QListIterator<MemberList> mli(m_memberLists);
- MemberList *ml;
- for (mli.toFirst();(ml=mli.current());++mli)
- {
- if (ml->listType()&MemberList::documentationLists)
- {
- ml->writeDocumentationPage(ol,displayName(),this);
- }
- }
- ol.popGeneratorState();
-}
-
-void NamespaceDef::writeQuickMemberLinks(OutputList &ol,MemberDef *currentMd) const
-{
- static bool createSubDirs=Config_getBool("CREATE_SUBDIRS");
-
- ol.writeString(" <div class=\"navtab\">\n");
- ol.writeString(" <table>\n");
-
- MemberList *allMemberList = getMemberList(MemberList::allMembersList);
- if (allMemberList)
- {
- MemberListIterator mli(*allMemberList);
- MemberDef *md;
- for (mli.toFirst();(md=mli.current());++mli)
- {
- if (md->getNamespaceDef()==this && md->isLinkable())
- {
- ol.writeString(" <tr><td class=\"navtab\">");
- if (md->isLinkableInProject())
- {
- if (md==currentMd) // selected item => highlight
- {
- ol.writeString("<a class=\"qindexHL\" ");
- }
- else
- {
- ol.writeString("<a class=\"qindex\" ");
- }
- ol.writeString("href=\"");
- if (createSubDirs) ol.writeString("../../");
- ol.writeString(md->getOutputFileBase()+Doxygen::htmlFileExtension+"#"+md->anchor());
- ol.writeString("\">");
- ol.writeString(convertToHtml(md->localName()));
- ol.writeString("</a>");
- }
- ol.writeString("</td></tr>\n");
- }
- }
- }
-
- ol.writeString(" </table>\n");
- ol.writeString(" </div>\n");
-}
-
-int NamespaceDef::countMembers()
-{
- MemberList *allMemberList = getMemberList(MemberList::allMembersList);
- if (allMemberList) allMemberList->countDocMembers();
- return (allMemberList ? allMemberList->numDocMembers() : 0)+classSDict->count();
-}
-
-void NamespaceDef::addUsingDirective(NamespaceDef *nd)
-{
- if (usingDirList==0)
- {
- usingDirList = new NamespaceSDict;
- }
- if (usingDirList->find(nd->qualifiedName())==0)
- {
- usingDirList->append(nd->qualifiedName(),nd);
- }
- //printf("%p: NamespaceDef::addUsingDirective: %s:%d\n",this,name().data(),usingDirList->count());
-}
-
-NamespaceSDict *NamespaceDef::getUsedNamespaces() const
-{
- //printf("%p: NamespaceDef::getUsedNamespace: %s:%d\n",this,name().data(),usingDirList?usingDirList->count():0);
- return usingDirList;
-}
-
-void NamespaceDef::addUsingDeclaration(Definition *d)
-{
- if (usingDeclList==0)
- {
- usingDeclList = new SDict<Definition>(17);
- }
- if (usingDeclList->find(d->qualifiedName())==0)
- {
- usingDeclList->append(d->qualifiedName(),d);
- }
-}
-
-QCString NamespaceDef::getOutputFileBase() const
-{
- if (isReference())
- {
- return fileName;
- }
- else
- {
- return convertNameToFile(fileName);
- }
-}
-
-Definition *NamespaceDef::findInnerCompound(const char *n)
-{
- if (n==0) return 0;
- Definition *d = m_innerCompounds->find(n);
- if (d==0)
- {
- if (usingDirList)
- {
- d = usingDirList->find(n);
- }
- if (d==0 && usingDeclList)
- {
- d = usingDeclList->find(n);
- }
- }
- return d;
-}
-
-void NamespaceDef::addListReferences()
-{
- //bool fortranOpt = Config_getBool("OPTIMIZE_FOR_FORTRAN");
- {
- LockingPtr< QList<ListItemInfo> > xrefItems = xrefListItems();
- addRefItem(xrefItems.pointer(),
- qualifiedName(),
- getLanguage()==SrcLangExt_Fortran ?
- theTranslator->trModule(TRUE,TRUE) :
- theTranslator->trNamespace(TRUE,TRUE),
- getOutputFileBase(),displayName(),
- 0
- );
- }
- MemberGroupSDict::Iterator mgli(*memberGroupSDict);
- MemberGroup *mg;
- for (;(mg=mgli.current());++mgli)
- {
- mg->addListReferences(this);
- }
- QListIterator<MemberList> mli(m_memberLists);
- MemberList *ml;
- for (mli.toFirst();(ml=mli.current());++mli)
- {
- if (ml->listType()&MemberList::documentationLists)
- {
- ml->addListReferences(this);
- }
- }
-}
-
-QCString NamespaceDef::displayName() const
-{
- QCString result=name();
- SrcLangExt lang = getLanguage();
- QCString sep = getLanguageSpecificSeparator(lang);
- if (sep!="::")
- {
- result = substitute(result,"::",sep);
- }
- //printf("NamespaceDef::displayName() %s->%s lang=%d\n",name().data(),result.data(),lang);
- return result;
-}
-
-void NamespaceDef::combineUsingRelations()
-{
- if (visited) return; // already done
- visited=TRUE;
- if (usingDirList)
- {
- NamespaceSDict::Iterator nli(*usingDirList);
- NamespaceDef *nd;
- for (nli.toFirst();(nd=nli.current());++nli)
- {
- nd->combineUsingRelations();
- }
- for (nli.toFirst();(nd=nli.current());++nli)
- {
- // add used namespaces of namespace nd to this namespace
- if (nd->getUsedNamespaces())
- {
- NamespaceSDict::Iterator unli(*nd->getUsedNamespaces());
- NamespaceDef *und;
- for (unli.toFirst();(und=unli.current());++unli)
- {
- //printf("Adding namespace %s to the using list of %s\n",und->qualifiedName().data(),qualifiedName().data());
- addUsingDirective(und);
- }
- }
- // add used classes of namespace nd to this namespace
- if (nd->getUsedClasses())
- {
- SDict<Definition>::Iterator cli(*nd->getUsedClasses());
- Definition *ucd;
- for (cli.toFirst();(ucd=cli.current());++cli)
- {
- //printf("Adding class %s to the using list of %s\n",cd->qualifiedName().data(),qualifiedName().data());
- addUsingDeclaration(ucd);
- }
- }
- }
- }
-}
-
-bool NamespaceSDict::declVisible() const
-{
- SDict<NamespaceDef>::Iterator ni(*this);
- NamespaceDef *nd;
- for (ni.toFirst();(nd=ni.current());++ni)
- {
- if (nd->isLinkable())
- {
- return TRUE;
- }
- }
- return FALSE;
-}
-
-void NamespaceSDict::writeDeclaration(OutputList &ol,const char *title,bool localName)
-{
-
-
- if (count()==0) return; // no namespaces in the list
-
- if (Config_getBool("OPTIMIZE_OUTPUT_VHDL")) return;
-
-
- SDict<NamespaceDef>::Iterator ni(*this);
- NamespaceDef *nd;
- bool found=FALSE;
- for (ni.toFirst();(nd=ni.current()) && !found;++ni)
- {
- if (nd->isLinkable()) found=TRUE;
- }
- if (!found) return; // no linkable namespaces in the list
-
- // write list of namespaces
- ol.startMemberHeader("namespaces");
- //bool javaOpt = Config_getBool("OPTIMIZE_OUTPUT_JAVA");
- //bool fortranOpt = Config_getBool("OPTIMIZE_FOR_FORTRAN");
- ol.parseText(title);
- ol.endMemberHeader();
- ol.startMemberList();
- for (ni.toFirst();(nd=ni.current());++ni)
- {
- if (nd->isLinkable())
- {
- SrcLangExt lang = nd->getLanguage();
- ol.startMemberItem(nd->getOutputFileBase(),0);
- if (lang==SrcLangExt_Java || lang==SrcLangExt_CSharp)
- {
- ol.docify("package ");
- }
- else if (lang==SrcLangExt_Fortran)
- {
- ol.docify("module ");
- }
- else
- {
- ol.docify("namespace ");
- }
- ol.insertMemberAlign();
- QCString name;
- if (localName)
- {
- name = nd->localName();
- }
- else
- {
- name = nd->displayName();
- }
- ol.writeObjectLink(nd->getReference(),nd->getOutputFileBase(),0,name);
- if (!Config_getString("GENERATE_TAGFILE").isEmpty() && !nd->isReference())
- {
- Doxygen::tagFile << " <namespace>" << convertToXML(nd->name()) << "</namespace>" << endl;
- }
- ol.endMemberItem();
- if (!nd->briefDescription().isEmpty() && Config_getBool("BRIEF_MEMBER_DESC"))
- {
- ol.startMemberDescription(nd->getOutputFileBase());
- ol.parseDoc(nd->briefFile(),nd->briefLine(),nd,0,nd->briefDescription(),FALSE,FALSE,0,TRUE);
- ol.endMemberDescription();
- }
- }
- }
- ol.endMemberList();
-}
-
-MemberList *NamespaceDef::createMemberList(MemberList::ListType lt)
-{
- m_memberLists.setAutoDelete(TRUE);
- QListIterator<MemberList> mli(m_memberLists);
- MemberList *ml;
- for (mli.toFirst();(ml=mli.current());++mli)
- {
- if (ml->listType()==lt)
- {
- return ml;
- }
- }
- // not found, create a new member list
- ml = new MemberList(lt);
- m_memberLists.append(ml);
- return ml;
-}
-
-void NamespaceDef::addMemberToList(MemberList::ListType lt,MemberDef *md)
-{
- static bool sortBriefDocs = Config_getBool("SORT_BRIEF_DOCS");
- static bool sortMemberDocs = Config_getBool("SORT_MEMBER_DOCS");
- MemberList *ml = createMemberList(lt);
- ml->setNeedsSorting(
- ((ml->listType()&MemberList::declarationLists) && sortBriefDocs) ||
- ((ml->listType()&MemberList::documentationLists) && sortMemberDocs));
- ml->append(md);
-
-#if 0
- if (ml->needsSorting())
- ml->inSort(md);
- else
- ml->append(md);
-#endif
-
- if (ml->listType()&MemberList::declarationLists) md->setSectionList(this,ml);
-}
-
-void NamespaceDef::sortMemberLists()
-{
- MemberList *ml = m_memberLists.first();
- while (ml)
- {
- if (ml->needsSorting()) { ml->sort(); ml->setNeedsSorting(FALSE); }
- ml = m_memberLists.next();
- }
-}
-
-
-
-MemberList *NamespaceDef::getMemberList(MemberList::ListType lt) const
-{
- NamespaceDef *that = (NamespaceDef*)this;
- MemberList *ml = that->m_memberLists.first();
- while (ml)
- {
- if (ml->listType()==lt)
- {
- return ml;
- }
- ml = that->m_memberLists.next();
- }
- return 0;
-}
-
-void NamespaceDef::writeMemberDeclarations(OutputList &ol,MemberList::ListType lt,const QCString &title)
-{
- MemberList * ml = getMemberList(lt);
- if (ml) ml->writeDeclarations(ol,0,this,0,0,title,0);
-}
-
-void NamespaceDef::writeMemberDocumentation(OutputList &ol,MemberList::ListType lt,const QCString &title)
-{
- MemberList * ml = getMemberList(lt);
- if (ml) ml->writeDocumentation(ol,displayName(),this,title);
-}
-
-
-bool NamespaceDef::isLinkableInProject() const
-{
- int i = name().findRev("::");
- if (i==-1) i=0; else i+=2;
- static bool extractAnonNs = Config_getBool("EXTRACT_ANON_NSPACES");
- static bool showNamespaces = Config_getBool("SHOW_NAMESPACES");
- if (extractAnonNs && // extract anonymous ns
- name().mid(i,20)=="anonymous_namespace{" && // correct prefix
- showNamespaces) // not disabled by config
- {
- return TRUE;
- }
- return !name().isEmpty() && name().at(i)!='@' && // not anonymous
- (hasDocumentation() || getLanguage()==SrcLangExt_CSharp) && // documented
- !isReference() && // not an external reference
- !isHidden() && // not hidden
- !isArtificial() && // or artificial
- showNamespaces; // not disabled by config
-}
-
-bool NamespaceDef::isLinkable() const
-{
- return isLinkableInProject() || isReference();
-}
-
-MemberDef * NamespaceDef::getMemberByName(const QCString &n) const
-{
- MemberDef *md = 0;
- if (m_allMembersDict && !n.isEmpty())
- {
- md = m_allMembersDict->find(n);
- //printf("%s::m_allMembersDict->find(%s)=%p\n",name().data(),n.data(),md);
- }
- return md;
-}
-
diff --git a/trunk/src/namespacedef.h b/trunk/src/namespacedef.h
deleted file mode 100644
index f1db108..0000000
--- a/trunk/src/namespacedef.h
+++ /dev/null
@@ -1,168 +0,0 @@
-/******************************************************************************
- *
- *
- *
- * Copyright (C) 1997-2012 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.
- *
- */
-
-#ifndef NAMESPACEDEF_H
-#define NAMESPACEDEF_H
-
-#include "qtbc.h"
-#include <qstrlist.h>
-#include <qdict.h>
-#include "sortdict.h"
-#include "definition.h"
-#include "memberlist.h"
-
-class ClassDef;
-class ClassList;
-class OutputList;
-class ClassSDict;
-class MemberDef;
-class NamespaceList;
-class MemberGroupSDict;
-class NamespaceSDict;
-
-class NamespaceDef : public Definition
-{
- public:
- NamespaceDef(const char *defFileName,int defLine,
- const char *name,const char *ref=0,
- const char *refFile=0);
- ~NamespaceDef();
- DefType definitionType() const { return TypeNamespace; }
- QCString getOutputFileBase() const;
- QCString anchor() const { return QCString(); }
- void insertUsedFile(const char *fname);
-
- void writeDocumentation(OutputList &ol);
- void writeMemberPages(OutputList &ol);
- void writeQuickMemberLinks(OutputList &ol,MemberDef *currentMd) const;
-
- void insertClass(ClassDef *cd);
- void insertNamespace(NamespaceDef *nd);
- void insertMember(MemberDef *md);
-
- void computeAnchors();
- int countMembers();
- void addUsingDirective(NamespaceDef *nd);
- NamespaceSDict *getUsedNamespaces() const;
- void addUsingDeclaration(Definition *def);
- SDict<Definition> *getUsedClasses() const { return usingDeclList; }
- void combineUsingRelations();
- QCString displayName() const;
-
- bool isLinkableInProject() const;
- bool isLinkable() const;
- void addMembersToMemberGroup();
- void distributeMemberGroupDocumentation();
- void findSectionsInDocumentation();
- void sortMemberLists();
-
- virtual Definition *findInnerCompound(const char *name);
- void addInnerCompound(Definition *d);
- void addListReferences();
-
- MemberList *getMemberList(MemberList::ListType lt) const;
- const QList<MemberList> &getMemberLists() const { return m_memberLists; }
- MemberDef *getMemberByName(const QCString &) const;
-
- /*! Returns the user defined member groups */
- MemberGroupSDict *getMemberGroupSDict() const { return memberGroupSDict; }
-
- /*! Returns the classes contained in this namespace */
- ClassSDict *getClassSDict() const { return classSDict; }
-
- /*! Returns the namespaces contained in this namespace */
- NamespaceSDict *getNamespaceSDict() const { return namespaceSDict; }
-
- bool visited;
-
- private:
- MemberList *createMemberList(MemberList::ListType lt);
- void addMemberToList(MemberList::ListType lt,MemberDef *md);
- void writeMemberDeclarations(OutputList &ol,MemberList::ListType lt,const QCString &title);
- void writeMemberDocumentation(OutputList &ol,MemberList::ListType lt,const QCString &title);
- void writeDetailedDescription(OutputList &ol,const QCString &title);
- void writeBriefDescription(OutputList &ol);
- void startMemberDeclarations(OutputList &ol);
- void endMemberDeclarations(OutputList &ol);
- void writeClassDeclarations(OutputList &ol,const QCString &title);
- void writeInlineClasses(OutputList &ol);
- void writeNamespaceDeclarations(OutputList &ol,const QCString &title);
- void writeMemberGroups(OutputList &ol);
- void writeAuthorSection(OutputList &ol);
- void startMemberDocumentation(OutputList &ol);
- void endMemberDocumentation(OutputList &ol);
- void writeSummaryLinks(OutputList &ol);
-
- QCString fileName;
- QStrList files;
-
- NamespaceSDict *usingDirList;
- SDict<Definition> *usingDeclList;
- SDict<Definition> *m_innerCompounds;
-
- MemberSDict *m_allMembersDict;
- QList<MemberList> m_memberLists;
- MemberGroupSDict *memberGroupSDict;
- ClassSDict *classSDict;
- NamespaceSDict *namespaceSDict;
- bool m_subGrouping;
-};
-
-class NamespaceList : public QList<NamespaceDef>
-{
- public:
- ~NamespaceList() {}
- int compareItems(GCI item1,GCI item2)
- {
- return stricmp(((NamespaceDef *)item1)->name(),
- ((NamespaceDef *)item2)->name()
- );
- }
-};
-
-class NamespaceListIterator : public QListIterator<NamespaceDef>
-{
- public:
- NamespaceListIterator(const NamespaceList &l) :
- QListIterator<NamespaceDef>(l) {}
-};
-
-class NamespaceDict : public QDict<NamespaceDef>
-{
- public:
- NamespaceDict(int size) : QDict<NamespaceDef>(size) {}
- ~NamespaceDict() {}
-};
-
-class NamespaceSDict : public SDict<NamespaceDef>
-{
- public:
- NamespaceSDict(int size=17) : SDict<NamespaceDef>(size) {}
- ~NamespaceSDict() {}
- int compareItems(GCI item1,GCI item2)
- {
- return stricmp(((NamespaceDef *)item1)->name(),
- ((NamespaceDef *)item2)->name()
- );
- }
- void writeDeclaration(OutputList &ol,const char *title,bool localName=FALSE);
- bool declVisible() const;
-};
-
-
-
-#endif
diff --git a/trunk/src/navtree.css b/trunk/src/navtree.css
deleted file mode 100644
index 2166b6f..0000000
--- a/trunk/src/navtree.css
+++ /dev/null
@@ -1,127 +0,0 @@
-#nav-tree .children_ul {
- margin:0;
- padding:4px;
-}
-
-#nav-tree ul {
- list-style:none outside none;
- margin:0px;
- padding:0px;
-}
-
-#nav-tree li {
- white-space:nowrap;
- margin:0px;
- padding:0px;
-}
-
-#nav-tree .plus {
- margin:0px;
-}
-
-#nav-tree .selected {
- background-image: url('tab_a.png');
- background-repeat:repeat-x;
- color: #fff;
- text-shadow: 0px 1px 1px rgba(0, 0, 0, 1.0);
-}
-
-#nav-tree img {
- margin:0px;
- padding:0px;
- border:0px;
- vertical-align: middle;
-}
-
-#nav-tree a {
- text-decoration:none;
- padding:0px;
- margin:0px;
- outline:none;
-}
-
-#nav-tree .label {
- margin:0px;
- padding:0px;
-}
-
-#nav-tree .label a {
- padding:2px;
-}
-
-#nav-tree .selected a {
- text-decoration:none;
- padding:2px;
- margin:0px;
- color:#fff;
-}
-
-#nav-tree .children_ul {
- margin:0px;
- padding:0px;
-}
-
-#nav-tree .item {
- margin:0px;
- padding:0px;
-}
-
-#nav-tree {
- padding: 0px 0px;
- background-color: #FAFAFF;
- font-size:14px;
- overflow:auto;
-}
-
-#doc-content {
- overflow:auto;
- display:block;
- padding:0px;
- margin:0px;
-}
-
-#side-nav {
- padding:0 6px 0 0;
- margin: 0px;
- display:block;
- position: absolute;
- left: 0px;
- width: 300px;
-}
-
-.ui-resizable .ui-resizable-handle {
- display:block;
-}
-
-.ui-resizable-e {
- background:url("ftv2splitbar.png") repeat scroll right center transparent;
- cursor:e-resize;
- height:100%;
- right:0;
- top:0;
- width:6px;
-}
-
-.ui-resizable-handle {
- display:none;
- font-size:0.1px;
- position:absolute;
- z-index:1;
-}
-
-#nav-tree-contents {
- margin: 6px 0px 0px 0px;
-}
-
-#nav-tree {
- background-image:url('nav_h.png');
- background-repeat:repeat-x;
- background-color: ##FA;
-}
-
-@media print
-{
- #nav-tree { display: none; }
- div.ui-resizable-handle { display: none; position: relative; }
-}
-
diff --git a/trunk/src/navtree.js b/trunk/src/navtree.js
deleted file mode 100644
index cff8c10..0000000
--- a/trunk/src/navtree.js
+++ /dev/null
@@ -1,355 +0,0 @@
-function getData(varName)
-{
- var i = varName.lastIndexOf('/');
- var n = i>=0 ? varName.substring(i+1) : varName;
- return eval(n);
-}
-
-function stripPath(uri)
-{
- return uri.substring(uri.lastIndexOf('/')+1);
-}
-
-function getScript(scriptName,func,show)
-{
- var head = document.getElementsByTagName("head")[0];
- var script = document.createElement('script');
- script.id = scriptName;
- script.type = 'text/javascript';
- script.onload = func;
- script.src = scriptName+'.js';
- script.onreadystatechange = function() {
- if (script.readyState=='complete' || script.readyState=='loaded') {
- func(); if (show) showRoot();
- }
- };
- head.appendChild(script);
-}
-
-function createIndent(o,domNode,node,level)
-{
- if (node.parentNode && node.parentNode.parentNode) {
- createIndent(o,domNode,node.parentNode,level+1);
- }
- var imgNode = document.createElement("img");
- imgNode.width = 16;
- imgNode.height = 22;
- if (level==0 && node.childrenData) {
- node.plus_img = imgNode;
- node.expandToggle = document.createElement("a");
- node.expandToggle.href = "javascript:void(0)";
- node.expandToggle.onclick = function() {
- if (node.expanded) {
- $(node.getChildrenUL()).slideUp("fast");
- if (node.isLast) {
- node.plus_img.src = node.relpath+"ftv2plastnode.png";
- } else {
- node.plus_img.src = node.relpath+"ftv2pnode.png";
- }
- node.expanded = false;
- } else {
- expandNode(o, node, false, false);
- }
- }
- node.expandToggle.appendChild(imgNode);
- domNode.appendChild(node.expandToggle);
- } else {
- domNode.appendChild(imgNode);
- }
- if (level==0) {
- if (node.isLast) {
- if (node.childrenData) {
- imgNode.src = node.relpath+"ftv2plastnode.png";
- } else {
- imgNode.src = node.relpath+"ftv2lastnode.png";
- domNode.appendChild(imgNode);
- }
- } else {
- if (node.childrenData) {
- imgNode.src = node.relpath+"ftv2pnode.png";
- } else {
- imgNode.src = node.relpath+"ftv2node.png";
- domNode.appendChild(imgNode);
- }
- }
- } else {
- if (node.isLast) {
- imgNode.src = node.relpath+"ftv2blank.png";
- } else {
- imgNode.src = node.relpath+"ftv2vertline.png";
- }
- }
- imgNode.border = "0";
-}
-
-function newNode(o, po, text, link, childrenData, lastNode)
-{
- var node = new Object();
- node.children = Array();
- node.childrenData = childrenData;
- node.depth = po.depth + 1;
- node.relpath = po.relpath;
- node.isLast = lastNode;
-
- node.li = document.createElement("li");
- po.getChildrenUL().appendChild(node.li);
- node.parentNode = po;
-
- node.itemDiv = document.createElement("div");
- node.itemDiv.className = "item";
-
- node.labelSpan = document.createElement("span");
- node.labelSpan.className = "label";
-
- createIndent(o,node.itemDiv,node,0);
- node.itemDiv.appendChild(node.labelSpan);
- node.li.appendChild(node.itemDiv);
-
- var a = document.createElement("a");
- node.labelSpan.appendChild(a);
- node.label = document.createTextNode(text);
- node.expanded = false;
- a.appendChild(node.label);
- if (link) {
- var url;
- if (link.substring(0,1)=='^') {
- url = link.substring(1);
- link = url;
- } else {
- url = node.relpath+link;
- }
- a.className = stripPath(link.replace('#',':'));
- if (link.indexOf('#')!=-1) {
- var aname = '#'+link.split('#')[1];
- var srcPage = stripPath($(location).attr('pathname'));
- var targetPage = stripPath(link.split('#')[0]);
- a.href = srcPage!=targetPage ? url : '#';
- a.onclick = function(){
- if (!$(a).parent().parent().hasClass('selected'))
- {
- $('.item').removeClass('selected');
- $('.item').removeAttr('id');
- $(a).parent().parent().addClass('selected');
- $(a).parent().parent().attr('id','selected');
- }
- var pos, anchor = $(aname), docContent = $('#doc-content');
- if (anchor.parent().attr('class')=='memItemLeft') {
- pos = anchor.parent().position().top;
- } else {
- pos = anchor.position().top;
- }
- var dist = Math.abs(Math.min(
- pos-docContent.offset().top,
- docContent[0].scrollHeight-
- docContent.height()-docContent.scrollTop()));
- docContent.animate({
- scrollTop: pos + docContent.scrollTop() - docContent.offset().top
- },Math.max(50,Math.min(500,dist)),function(){
- window.location.replace(aname);
- });
- };
- } else {
- a.href = url;
- }
- } else {
- if (childrenData != null)
- {
- a.className = "nolink";
- a.href = "javascript:void(0)";
- a.onclick = node.expandToggle.onclick;
- }
- }
-
- node.childrenUL = null;
- node.getChildrenUL = function() {
- if (!node.childrenUL) {
- node.childrenUL = document.createElement("ul");
- node.childrenUL.className = "children_ul";
- node.childrenUL.style.display = "none";
- node.li.appendChild(node.childrenUL);
- }
- return node.childrenUL;
- };
-
- return node;
-}
-
-function showRoot()
-{
- var headerHeight = $("#top").height();
- var footerHeight = $("#nav-path").height();
- var windowHeight = $(window).height() - headerHeight - footerHeight;
- (function (){ // retry until we can scroll to the selected item
- try {
- navtree.scrollTo('#selected',0,{offset:-windowHeight/2});
- } catch (err) {
- setTimeout(arguments.callee, 0);
- }
- })();
-}
-
-function expandNode(o, node, imm, showRoot)
-{
- if (node.childrenData && !node.expanded) {
- if (typeof(node.childrenData)==='string') {
- var varName = node.childrenData;
- getScript(node.relpath+varName,function(){
- node.childrenData = getData(varName);
- expandNode(o, node, imm, showRoot);
- }, showRoot);
- } else {
- if (!node.childrenVisited) {
- getNode(o, node);
- } if (imm) {
- $(node.getChildrenUL()).show();
- } else {
- $(node.getChildrenUL()).slideDown("fast");
- }
- if (node.isLast) {
- node.plus_img.src = node.relpath+"ftv2mlastnode.png";
- } else {
- node.plus_img.src = node.relpath+"ftv2mnode.png";
- }
- node.expanded = true;
- }
- }
-}
-
-function highlightAnchor()
-{
- var anchor = $($(location).attr('hash'));
- if (anchor.parent().attr('class')=='memItemLeft'){
- var rows = $('.memberdecls tr[class$=\""'+
- window.location.hash.substring(1)+'"\"]').children();
- rows.effect('highlight',{},1500);
- } else if (anchor.parent().is(":header")) {
- anchor.parent().effect('highlight',{},1500);
- } else {
- var targetDiv = anchor.next();
- $(targetDiv).children('.memproto,.memdoc').effect("highlight",{},1500);
- }
-}
-
-function showNode(o, node, index)
-{
- if (node.childrenData /*&& !node.expanded*/) {
- if (typeof(node.childrenData)==='string') {
- var varName = node.childrenData;
- getScript(node.relpath+varName,function(){
- node.childrenData = getData(varName);
- showNode(o,node,index);
- },true);
- } else {
- if (!node.childrenVisited) {
- getNode(o, node);
- }
- $(node.getChildrenUL()).show();
- if (node.isLast) {
- node.plus_img.src = node.relpath+"ftv2mlastnode.png";
- } else {
- node.plus_img.src = node.relpath+"ftv2mnode.png";
- }
- node.expanded = true;
- var n = node.children[o.breadcrumbs[index]];
- if (index+1<o.breadcrumbs.length) {
- showNode(o,n,index+1);
- } else {
- if (typeof(n.childrenData)==='string') {
- var varName = n.childrenData;
- getScript(n.relpath+varName,function(){
- n.childrenData = getData(varName);
- node.expanded=false;
- showNode(o,node,index); // retry with child node expanded
- },true);
- } else {
- if (o.toroot=="index.html" || n.childrenData) {
- expandNode(o, n, true, true);
- }
- var a;
- if ($(location).attr('hash')) {
- var link=stripPath($(location).attr('pathname'))+':'+
- $(location).attr('hash').substring(1);
- a=$('.item a[class$=\""'+link+'"\"]');
- }
- if (a && a.length) {
- a.parent().parent().addClass('selected');
- a.parent().parent().attr('id','selected');
- highlightAnchor();
- } else {
- $(n.itemDiv).addClass('selected');
- $(n.itemDiv).attr('id','selected');
- }
- showRoot();
- }
- }
- }
- }
-}
-
-function getNode(o, po)
-{
- po.childrenVisited = true;
- var l = po.childrenData.length-1;
- for (var i in po.childrenData) {
- var nodeData = po.childrenData[i];
- po.children[i] = newNode(o, po, nodeData[0], nodeData[1], nodeData[2],
- i==l);
- }
-}
-
-function navTo(o,root,hash,relpath)
-{
- getScript(relpath+"navtreeindex",function(){
- var navTreeIndex = eval('NAVTREEINDEX');
- if (navTreeIndex) {
- var nti = navTreeIndex[root+hash];
- o.breadcrumbs = nti ? nti : navTreeIndex[root];
- if (o.breadcrumbs==null) o.breadcrumbs = navTreeIndex["index.html"];
- o.breadcrumbs.unshift(0);
- showNode(o, o.node, 0);
- }
- },true);
-}
-
-function initNavTree(toroot,relpath)
-{
- var o = new Object();
- o.toroot = toroot;
- o.node = new Object();
- o.node.li = document.getElementById("nav-tree-contents");
- o.node.childrenData = NAVTREE;
- o.node.children = new Array();
- o.node.childrenUL = document.createElement("ul");
- o.node.getChildrenUL = function() { return o.node.childrenUL; };
- o.node.li.appendChild(o.node.childrenUL);
- o.node.depth = 0;
- o.node.relpath = relpath;
- o.node.expanded = false;
- o.node.isLast = true;
- o.node.plus_img = document.createElement("img");
- o.node.plus_img.src = relpath+"ftv2pnode.png";
- o.node.plus_img.width = 16;
- o.node.plus_img.height = 22;
-
- navTo(o,toroot,window.location.hash,relpath);
-
- $(window).bind('hashchange', function(){
- if (window.location.hash && window.location.hash.length>1){
- var a;
- if ($(location).attr('hash')){
- var clslink=stripPath($(location).attr('pathname'))+':'+
- $(location).attr('hash').substring(1);
- a=$('.item a[class$=\""'+clslink+'"\"]');
- }
- if (a==null || !$(a).parent().parent().hasClass('selected')){
- $('.item').removeClass('selected');
- $('.item').removeAttr('id');
- }
- var link=stripPath($(location).attr('pathname'));
- navTo(o,link,$(location).attr('hash'),relpath);
- }
- })
-
- $(window).load(showRoot);
-}
-
diff --git a/trunk/src/navtree_css.h b/trunk/src/navtree_css.h
deleted file mode 100644
index 82955e2..0000000
--- a/trunk/src/navtree_css.h
+++ /dev/null
@@ -1,127 +0,0 @@
-"#nav-tree .children_ul {\n"
-" margin:0;\n"
-" padding:4px;\n"
-"}\n"
-"\n"
-"#nav-tree ul {\n"
-" list-style:none outside none;\n"
-" margin:0px;\n"
-" padding:0px;\n"
-"}\n"
-"\n"
-"#nav-tree li {\n"
-" white-space:nowrap;\n"
-" margin:0px;\n"
-" padding:0px;\n"
-"}\n"
-"\n"
-"#nav-tree .plus {\n"
-" margin:0px;\n"
-"}\n"
-"\n"
-"#nav-tree .selected {\n"
-" background-image: url('tab_a.png');\n"
-" background-repeat:repeat-x;\n"
-" color: #fff;\n"
-" text-shadow: 0px 1px 1px rgba(0, 0, 0, 1.0);\n"
-"}\n"
-"\n"
-"#nav-tree img {\n"
-" margin:0px;\n"
-" padding:0px;\n"
-" border:0px;\n"
-" vertical-align: middle;\n"
-"}\n"
-"\n"
-"#nav-tree a {\n"
-" text-decoration:none;\n"
-" padding:0px;\n"
-" margin:0px;\n"
-" outline:none;\n"
-"}\n"
-"\n"
-"#nav-tree .label {\n"
-" margin:0px;\n"
-" padding:0px;\n"
-"}\n"
-"\n"
-"#nav-tree .label a {\n"
-" padding:2px;\n"
-"}\n"
-"\n"
-"#nav-tree .selected a {\n"
-" text-decoration:none;\n"
-" padding:2px;\n"
-" margin:0px;\n"
-" color:#fff;\n"
-"}\n"
-"\n"
-"#nav-tree .children_ul {\n"
-" margin:0px;\n"
-" padding:0px;\n"
-"}\n"
-"\n"
-"#nav-tree .item {\n"
-" margin:0px;\n"
-" padding:0px;\n"
-"}\n"
-"\n"
-"#nav-tree {\n"
-" padding: 0px 0px;\n"
-" background-color: #FAFAFF; \n"
-" font-size:14px;\n"
-" overflow:auto;\n"
-"}\n"
-"\n"
-"#doc-content {\n"
-" overflow:auto;\n"
-" display:block;\n"
-" padding:0px;\n"
-" margin:0px;\n"
-"}\n"
-"\n"
-"#side-nav {\n"
-" padding:0 6px 0 0;\n"
-" margin: 0px;\n"
-" display:block;\n"
-" position: absolute;\n"
-" left: 0px;\n"
-" width: 300px;\n"
-"}\n"
-"\n"
-".ui-resizable .ui-resizable-handle {\n"
-" display:block;\n"
-"}\n"
-"\n"
-".ui-resizable-e {\n"
-" background:url(\"ftv2splitbar.png\") repeat scroll right center transparent;\n"
-" cursor:e-resize;\n"
-" height:100%;\n"
-" right:0;\n"
-" top:0;\n"
-" width:6px;\n"
-"}\n"
-"\n"
-".ui-resizable-handle {\n"
-" display:none;\n"
-" font-size:0.1px;\n"
-" position:absolute;\n"
-" z-index:1;\n"
-"}\n"
-"\n"
-"#nav-tree-contents {\n"
-" margin: 6px 0px 0px 0px;\n"
-"}\n"
-"\n"
-"#nav-tree {\n"
-" background-image:url('nav_h.png');\n"
-" background-repeat:repeat-x;\n"
-" background-color: ##FA;\n"
-"}\n"
-"\n"
-"@media print\n"
-"{\n"
-" #nav-tree { display: none; }\n"
-" div.ui-resizable-handle { display: none; position: relative; }\n"
-"}\n"
-"\n"
diff --git a/trunk/src/navtree_js.h b/trunk/src/navtree_js.h
deleted file mode 100644
index 3eccef6..0000000
--- a/trunk/src/navtree_js.h
+++ /dev/null
@@ -1,355 +0,0 @@
-"function getData(varName)\n"
-"{\n"
-" var i = varName.lastIndexOf('/');\n"
-" var n = i>=0 ? varName.substring(i+1) : varName;\n"
-" return eval(n);\n"
-"}\n"
-"\n"
-"function stripPath(uri)\n"
-"{\n"
-" return uri.substring(uri.lastIndexOf('/')+1);\n"
-"}\n"
-"\n"
-"function getScript(scriptName,func,show)\n"
-"{\n"
-" var head = document.getElementsByTagName(\"head\")[0]; \n"
-" var script = document.createElement('script');\n"
-" script.id = scriptName;\n"
-" script.type = 'text/javascript';\n"
-" script.onload = func; \n"
-" script.src = scriptName+'.js'; \n"
-" script.onreadystatechange = function() {\n"
-" if (script.readyState=='complete' || script.readyState=='loaded') { \n"
-" func(); if (show) showRoot(); \n"
-" }\n"
-" };\n"
-" head.appendChild(script); \n"
-"}\n"
-"\n"
-"function createIndent(o,domNode,node,level)\n"
-"{\n"
-" if (node.parentNode && node.parentNode.parentNode) {\n"
-" createIndent(o,domNode,node.parentNode,level+1);\n"
-" }\n"
-" var imgNode = document.createElement(\"img\");\n"
-" imgNode.width = 16;\n"
-" imgNode.height = 22;\n"
-" if (level==0 && node.childrenData) {\n"
-" node.plus_img = imgNode;\n"
-" node.expandToggle = document.createElement(\"a\");\n"
-" node.expandToggle.href = \"javascript:void(0)\";\n"
-" node.expandToggle.onclick = function() {\n"
-" if (node.expanded) {\n"
-" $(node.getChildrenUL()).slideUp(\"fast\");\n"
-" if (node.isLast) {\n"
-" node.plus_img.src = node.relpath+\"ftv2plastnode.png\";\n"
-" } else {\n"
-" node.plus_img.src = node.relpath+\"ftv2pnode.png\";\n"
-" }\n"
-" node.expanded = false;\n"
-" } else {\n"
-" expandNode(o, node, false, false);\n"
-" }\n"
-" }\n"
-" node.expandToggle.appendChild(imgNode);\n"
-" domNode.appendChild(node.expandToggle);\n"
-" } else {\n"
-" domNode.appendChild(imgNode);\n"
-" }\n"
-" if (level==0) {\n"
-" if (node.isLast) {\n"
-" if (node.childrenData) {\n"
-" imgNode.src = node.relpath+\"ftv2plastnode.png\";\n"
-" } else {\n"
-" imgNode.src = node.relpath+\"ftv2lastnode.png\";\n"
-" domNode.appendChild(imgNode);\n"
-" }\n"
-" } else {\n"
-" if (node.childrenData) {\n"
-" imgNode.src = node.relpath+\"ftv2pnode.png\";\n"
-" } else {\n"
-" imgNode.src = node.relpath+\"ftv2node.png\";\n"
-" domNode.appendChild(imgNode);\n"
-" }\n"
-" }\n"
-" } else {\n"
-" if (node.isLast) {\n"
-" imgNode.src = node.relpath+\"ftv2blank.png\";\n"
-" } else {\n"
-" imgNode.src = node.relpath+\"ftv2vertline.png\";\n"
-" }\n"
-" }\n"
-" imgNode.border = \"0\";\n"
-"}\n"
-"\n"
-"function newNode(o, po, text, link, childrenData, lastNode)\n"
-"{\n"
-" var node = new Object();\n"
-" node.children = Array();\n"
-" node.childrenData = childrenData;\n"
-" node.depth = po.depth + 1;\n"
-" node.relpath = po.relpath;\n"
-" node.isLast = lastNode;\n"
-"\n"
-" node.li = document.createElement(\"li\");\n"
-" po.getChildrenUL().appendChild(node.li);\n"
-" node.parentNode = po;\n"
-"\n"
-" node.itemDiv = document.createElement(\"div\");\n"
-" node.itemDiv.className = \"item\";\n"
-"\n"
-" node.labelSpan = document.createElement(\"span\");\n"
-" node.labelSpan.className = \"label\";\n"
-"\n"
-" createIndent(o,node.itemDiv,node,0);\n"
-" node.itemDiv.appendChild(node.labelSpan);\n"
-" node.li.appendChild(node.itemDiv);\n"
-"\n"
-" var a = document.createElement(\"a\");\n"
-" node.labelSpan.appendChild(a);\n"
-" node.label = document.createTextNode(text);\n"
-" node.expanded = false;\n"
-" a.appendChild(node.label);\n"
-" if (link) {\n"
-" var url;\n"
-" if (link.substring(0,1)=='^') {\n"
-" url = link.substring(1);\n"
-" link = url;\n"
-" } else {\n"
-" url = node.relpath+link;\n"
-" }\n"
-" a.className = stripPath(link.replace('#',':'));\n"
-" if (link.indexOf('#')!=-1) {\n"
-" var aname = '#'+link.split('#')[1];\n"
-" var srcPage = stripPath($(location).attr('pathname'));\n"
-" var targetPage = stripPath(link.split('#')[0]);\n"
-" a.href = srcPage!=targetPage ? url : '#';\n"
-" a.onclick = function(){\n"
-" if (!$(a).parent().parent().hasClass('selected'))\n"
-" {\n"
-" $('.item').removeClass('selected');\n"
-" $('.item').removeAttr('id');\n"
-" $(a).parent().parent().addClass('selected');\n"
-" $(a).parent().parent().attr('id','selected');\n"
-" }\n"
-" var pos, anchor = $(aname), docContent = $('#doc-content');\n"
-" if (anchor.parent().attr('class')=='memItemLeft') {\n"
-" pos = anchor.parent().position().top;\n"
-" } else {\n"
-" pos = anchor.position().top;\n"
-" }\n"
-" var dist = Math.abs(Math.min(\n"
-" pos-docContent.offset().top,\n"
-" docContent[0].scrollHeight-\n"
-" docContent.height()-docContent.scrollTop()));\n"
-" docContent.animate({\n"
-" scrollTop: pos + docContent.scrollTop() - docContent.offset().top\n"
-" },Math.max(50,Math.min(500,dist)),function(){\n"
-" window.location.replace(aname);\n"
-" });\n"
-" };\n"
-" } else {\n"
-" a.href = url;\n"
-" }\n"
-" } else {\n"
-" if (childrenData != null) \n"
-" {\n"
-" a.className = \"nolink\";\n"
-" a.href = \"javascript:void(0)\";\n"
-" a.onclick = node.expandToggle.onclick;\n"
-" }\n"
-" }\n"
-"\n"
-" node.childrenUL = null;\n"
-" node.getChildrenUL = function() {\n"
-" if (!node.childrenUL) {\n"
-" node.childrenUL = document.createElement(\"ul\");\n"
-" node.childrenUL.className = \"children_ul\";\n"
-" node.childrenUL.style.display = \"none\";\n"
-" node.li.appendChild(node.childrenUL);\n"
-" }\n"
-" return node.childrenUL;\n"
-" };\n"
-"\n"
-" return node;\n"
-"}\n"
-"\n"
-"function showRoot()\n"
-"{\n"
-" var headerHeight = $(\"#top\").height();\n"
-" var footerHeight = $(\"#nav-path\").height();\n"
-" var windowHeight = $(window).height() - headerHeight - footerHeight;\n"
-" (function (){ // retry until we can scroll to the selected item\n"
-" try {\n"
-" navtree.scrollTo('#selected',0,{offset:-windowHeight/2});\n"
-" } catch (err) {\n"
-" setTimeout(arguments.callee, 0);\n"
-" }\n"
-" })();\n"
-"}\n"
-"\n"
-"function expandNode(o, node, imm, showRoot)\n"
-"{\n"
-" if (node.childrenData && !node.expanded) {\n"
-" if (typeof(node.childrenData)==='string') {\n"
-" var varName = node.childrenData;\n"
-" getScript(node.relpath+varName,function(){\n"
-" node.childrenData = getData(varName);\n"
-" expandNode(o, node, imm, showRoot);\n"
-" }, showRoot);\n"
-" } else {\n"
-" if (!node.childrenVisited) {\n"
-" getNode(o, node);\n"
-" } if (imm) {\n"
-" $(node.getChildrenUL()).show();\n"
-" } else {\n"
-" $(node.getChildrenUL()).slideDown(\"fast\");\n"
-" }\n"
-" if (node.isLast) {\n"
-" node.plus_img.src = node.relpath+\"ftv2mlastnode.png\";\n"
-" } else {\n"
-" node.plus_img.src = node.relpath+\"ftv2mnode.png\";\n"
-" }\n"
-" node.expanded = true;\n"
-" }\n"
-" }\n"
-"}\n"
-"\n"
-"function highlightAnchor()\n"
-"{\n"
-" var anchor = $($(location).attr('hash'));\n"
-" if (anchor.parent().attr('class')=='memItemLeft'){\n"
-" var rows = $('.memberdecls tr[class$=\\\"\"'+\n"
-" window.location.hash.substring(1)+'\"\\\"]').children();\n"
-" rows.effect('highlight',{},1500);\n"
-" } else if (anchor.parent().is(\":header\")) {\n"
-" anchor.parent().effect('highlight',{},1500);\n"
-" } else {\n"
-" var targetDiv = anchor.next();\n"
-" $(targetDiv).children('.memproto,.memdoc').effect(\"highlight\",{},1500);\n"
-" }\n"
-"}\n"
-"\n"
-"function showNode(o, node, index)\n"
-"{\n"
-" if (node.childrenData /*&& !node.expanded*/) {\n"
-" if (typeof(node.childrenData)==='string') {\n"
-" var varName = node.childrenData;\n"
-" getScript(node.relpath+varName,function(){\n"
-" node.childrenData = getData(varName);\n"
-" showNode(o,node,index);\n"
-" },true);\n"
-" } else {\n"
-" if (!node.childrenVisited) {\n"
-" getNode(o, node);\n"
-" }\n"
-" $(node.getChildrenUL()).show();\n"
-" if (node.isLast) {\n"
-" node.plus_img.src = node.relpath+\"ftv2mlastnode.png\";\n"
-" } else {\n"
-" node.plus_img.src = node.relpath+\"ftv2mnode.png\";\n"
-" }\n"
-" node.expanded = true;\n"
-" var n = node.children[o.breadcrumbs[index]];\n"
-" if (index+1<o.breadcrumbs.length) {\n"
-" showNode(o,n,index+1);\n"
-" } else {\n"
-" if (typeof(n.childrenData)==='string') {\n"
-" var varName = n.childrenData;\n"
-" getScript(n.relpath+varName,function(){\n"
-" n.childrenData = getData(varName);\n"
-" node.expanded=false;\n"
-" showNode(o,node,index); // retry with child node expanded\n"
-" },true);\n"
-" } else {\n"
-" if (o.toroot==\"index.html\" || n.childrenData) {\n"
-" expandNode(o, n, true, true);\n"
-" }\n"
-" var a;\n"
-" if ($(location).attr('hash')) {\n"
-" var link=stripPath($(location).attr('pathname'))+':'+\n"
-" $(location).attr('hash').substring(1);\n"
-" a=$('.item a[class$=\\\"\"'+link+'\"\\\"]');\n"
-" }\n"
-" if (a && a.length) {\n"
-" a.parent().parent().addClass('selected');\n"
-" a.parent().parent().attr('id','selected');\n"
-" highlightAnchor();\n"
-" } else {\n"
-" $(n.itemDiv).addClass('selected');\n"
-" $(n.itemDiv).attr('id','selected');\n"
-" }\n"
-" showRoot();\n"
-" }\n"
-" }\n"
-" }\n"
-" }\n"
-"}\n"
-"\n"
-"function getNode(o, po)\n"
-"{\n"
-" po.childrenVisited = true;\n"
-" var l = po.childrenData.length-1;\n"
-" for (var i in po.childrenData) {\n"
-" var nodeData = po.childrenData[i];\n"
-" po.children[i] = newNode(o, po, nodeData[0], nodeData[1], nodeData[2],\n"
-" i==l);\n"
-" }\n"
-"}\n"
-"\n"
-"function navTo(o,root,hash,relpath)\n"
-"{\n"
-" getScript(relpath+\"navtreeindex\",function(){\n"
-" var navTreeIndex = eval('NAVTREEINDEX');\n"
-" if (navTreeIndex) {\n"
-" var nti = navTreeIndex[root+hash];\n"
-" o.breadcrumbs = nti ? nti : navTreeIndex[root];\n"
-" if (o.breadcrumbs==null) o.breadcrumbs = navTreeIndex[\"index.html\"];\n"
-" o.breadcrumbs.unshift(0);\n"
-" showNode(o, o.node, 0);\n"
-" }\n"
-" },true);\n"
-"}\n"
-"\n"
-"function initNavTree(toroot,relpath)\n"
-"{\n"
-" var o = new Object();\n"
-" o.toroot = toroot;\n"
-" o.node = new Object();\n"
-" o.node.li = document.getElementById(\"nav-tree-contents\");\n"
-" o.node.childrenData = NAVTREE;\n"
-" o.node.children = new Array();\n"
-" o.node.childrenUL = document.createElement(\"ul\");\n"
-" o.node.getChildrenUL = function() { return o.node.childrenUL; };\n"
-" o.node.li.appendChild(o.node.childrenUL);\n"
-" o.node.depth = 0;\n"
-" o.node.relpath = relpath;\n"
-" o.node.expanded = false;\n"
-" o.node.isLast = true;\n"
-" o.node.plus_img = document.createElement(\"img\");\n"
-" o.node.plus_img.src = relpath+\"ftv2pnode.png\";\n"
-" o.node.plus_img.width = 16;\n"
-" o.node.plus_img.height = 22;\n"
-"\n"
-" navTo(o,toroot,window.location.hash,relpath);\n"
-"\n"
-" $(window).bind('hashchange', function(){\n"
-" if (window.location.hash && window.location.hash.length>1){\n"
-" var a;\n"
-" if ($(location).attr('hash')){\n"
-" var clslink=stripPath($(location).attr('pathname'))+':'+\n"
-" $(location).attr('hash').substring(1);\n"
-" a=$('.item a[class$=\\\"\"'+clslink+'\"\\\"]');\n"
-" }\n"
-" if (a==null || !$(a).parent().parent().hasClass('selected')){\n"
-" $('.item').removeClass('selected');\n"
-" $('.item').removeAttr('id');\n"
-" }\n"
-" var link=stripPath($(location).attr('pathname'));\n"
-" navTo(o,link,$(location).attr('hash'),relpath);\n"
-" }\n"
-" })\n"
-"\n"
-" $(window).load(showRoot);\n"
-"}\n"
-"\n"
diff --git a/trunk/src/objcache.cpp b/trunk/src/objcache.cpp
deleted file mode 100644
index a08d649..0000000
--- a/trunk/src/objcache.cpp
+++ /dev/null
@@ -1,326 +0,0 @@
-/******************************************************************************
- *
- *
- *
- * Copyright (C) 1997-2012 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.
- *
- */
-
-#include <stdio.h>
-#include <assert.h>
-#include <qglobal.h>
-#include "objcache.h"
-
-//----------------------------------------------------------------------
-
-ObjCache::ObjCache(unsigned int logSize)
- : m_head(-1), m_tail(-1), //m_numEntries(0),
- m_size(1<<logSize), m_count(0), m_freeHashNodes(0), m_freeCacheNodes(0),
- m_lastHandle(-1)
-{
- int i;
- m_cache = new CacheNode[m_size];
- m_hash = new HashNode[m_size];
- // add all items to list of free buckets
- for (i=0;i<m_size-1;i++)
- {
- m_hash[i].nextHash = i+1;
- m_cache[i].next = i+1;
- }
- m_misses = 0;
- m_hits = 0;
-}
-
-ObjCache::~ObjCache()
-{
- delete[] m_cache;
- delete[] m_hash;
-}
-
-int ObjCache::add(void *obj,void **victim)
-{
- *victim=0;
-
- HashNode *hnode = hashFind(obj);
- //printf("hnode=%p\n",hnode);
- if (hnode) // move object to the front of the LRU list, since it is used
- // most recently
- {
- //printf("moveToFront=%d\n",hnode->index);
- moveToFront(hnode->index);
- m_hits++;
- }
- else // object not in the cache.
- {
- void *lruObj=0;
- if (m_freeCacheNodes!=-1) // cache not full -> add element to the cache
- {
- // remove element from free list
- int index = m_freeCacheNodes;
- m_freeCacheNodes = m_cache[index].next;
-
- // add to head of the list
- if (m_tail==-1)
- {
- m_tail = index;
- }
- m_cache[index].prev = -1;
- m_cache[index].next = m_head;
- if (m_head!=-1)
- {
- m_cache[m_head].prev = index;
- }
- m_head = index;
- m_count++;
- }
- else // cache full -> replace element in the cache
- {
- //printf("Cache full!\n");
- lruObj = m_cache[m_tail].obj;
- hashRemove(lruObj);
- moveToFront(m_tail); // m_tail indexes the emptied element, which becomes m_head
- }
- //printf("numEntries=%d size=%d\n",m_numEntries,m_size);
- m_cache[m_head].obj = obj;
- hnode = hashInsert(obj);
- hnode->index = m_head;
- *victim = lruObj;
- m_misses++;
- }
- return m_head;
-}
-
-void ObjCache::del(int index)
-{
- assert(index!=-1);
- assert(m_cache[index].obj!=0);
- hashRemove(m_cache[index].obj);
- moveToFront(index);
- m_head = m_cache[index].next;
- if (m_head==-1)
- m_tail=-1;
- else
- m_cache[m_head].prev=-1;
- m_cache[index].obj=0;
- m_cache[index].prev=-1;
- m_cache[index].next = m_freeCacheNodes;
- m_freeCacheNodes = index;
- m_count--;
-}
-
-#ifdef CACHE_DEBUG
-#define cache_debug_printf printf
-void ObjCache::printLRU()
-{
- cache_debug_printf("MRU->LRU: ");
- int index = m_head;
- while (index!=-1)
- {
- cache_debug_printf("%d=%p ",index,m_cache[index].obj);
- index = m_cache[index].next;
- }
- cache_debug_printf("\n");
-
- cache_debug_printf("LRU->MRU: ");
- index = m_tail;
- while (index!=-1)
- {
- cache_debug_printf("%d=%p ",index,m_cache[index].obj);
- index = m_cache[index].prev;
- }
- cache_debug_printf("\n");
-}
-#endif
-
-#ifdef CACHE_STATS
-#define cache_stats_printf printf
-void ObjCache::printStats()
-{
- cache_stats_printf("ObjCache: hits=%d misses=%d hit ratio=%f\n",m_hits,m_misses,m_hits*100.0/(m_hits+m_misses));
-}
-#endif
-
-void ObjCache::moveToFront(int index)
-{
- int prev,next;
- if (m_head!=index)
- {
- next = m_cache[index].next;
- prev = m_cache[index].prev;
-
- // de-chain node at index
- m_cache[prev].next = next;
- if (next!=-1) m_cache[next].prev = prev; else m_tail = prev;
-
- // add to head
- m_cache[index].prev = -1;
- m_cache[index].next = m_head;
- m_cache[m_head].prev = index;
- m_head = index;
- }
-}
-
-unsigned int ObjCache::hash(void *addr)
-{
- static bool isPtr64 = sizeof(addr)==8;
- if (isPtr64)
- {
- uint64 key = (uint64)addr;
- // Thomas Wang's 64 bit Mix Function
- key += ~(key << 32);
- key ^= (key >> 22);
- key += ~(key << 13);
- key ^= (key >> 8);
- key += (key << 3);
- key ^= (key >> 15);
- key += ~(key << 27);
- key ^= (key >> 31);
- return key & (m_size-1);
- }
- else
- {
- // Thomas Wang's 32 bit Mix Function
- unsigned long key = (unsigned long)addr;
- key += ~(key << 15);
- key ^= (key >> 10);
- key += (key << 3);
- key ^= (key >> 6);
- key += ~(key << 11);
- key ^= (key >> 16);
- return key & (m_size-1);
- }
-}
-
-ObjCache::HashNode *ObjCache::hashFind(void *obj)
-{
- HashNode *node = 0;
- int index = m_hash[hash(obj)].head;
- //printf("hashFind: obj=%p index=%d\n",obj,index);
- while (index!=-1 &&
- m_hash[index].obj!=obj
- ) // search for right object in the list
- {
- index = m_hash[index].nextHash;
- }
- // found the obj at index, so it is in the cache!
- if (index!=-1)
- {
- node = &m_hash[index];
- }
- return node;
-}
-
-ObjCache::HashNode *ObjCache::hashInsert(void *obj)
-{
- int index = hash(obj);
- //printf("Inserting %p index=%d\n",obj,index);
-
- // remove element from empty list
- int newElement = m_freeHashNodes;
- assert(newElement!=-1);
- m_freeHashNodes = m_hash[m_freeHashNodes].nextHash;
-
- if (m_hash[index].head!=-1) // hash collision -> goto end of the list
- {
- index = m_hash[index].head;
- while (m_hash[index].nextHash!=-1)
- {
- index = m_hash[index].nextHash;
- }
- // add to end of the list
- m_hash[index].nextHash = newElement;
- }
- else // first element in the hash list
- {
- m_hash[index].head = newElement;
- }
- // add to the end of the list
- m_hash[newElement].nextHash = -1;
- m_hash[newElement].obj = obj;
- return &m_hash[newElement];
-}
-
-void ObjCache::hashRemove(void *obj)
-{
- int index = hash(obj);
-
- // find element
- int curIndex = m_hash[index].head;
- int prevIndex=-1;
- while (m_hash[curIndex].obj!=obj)
- {
- prevIndex = curIndex;
- curIndex = m_hash[curIndex].nextHash;
- }
-
- if (prevIndex==-1) // remove from start
- {
- m_hash[index].head = m_hash[curIndex].nextHash;
- }
- else // remove in the middle
- {
- m_hash[prevIndex].nextHash = m_hash[curIndex].nextHash;
- }
-
- // add curIndex element to empty list
- m_hash[curIndex].nextHash = m_freeHashNodes;
- m_hash[curIndex].index = -1;
- m_hash[curIndex].obj = 0;
- m_freeHashNodes = curIndex;
-}
-
-#ifdef CACHE_TEST
-int main()
-{
- int i;
- struct obj
- {
- obj() : handle(-1) {}
- int handle;
- };
- obj *objs = new obj[100];
- ObjCache c(3);
- for (i=0;i<32;i++)
- {
- int objId=(i%3)+(i>>2)*4;
- printf("------- use(%d=%p)--------\n",objId,&objs[objId]);
-#ifdef CACHE_DEBUG
- c.printLRU();
-#endif
- obj *victim=0;
- if (objs[objId].handle==-1)
- {
- objs[objId].handle = c.add(&objs[objId],(void**)&victim);
- if (victim) victim->handle=-1;
- }
- else
- {
- c.use(objs[objId].handle);
- }
- printf("i=%d objId=%d using %p victim=%p\n",i,objId,&objs[objId],victim);
- }
- for (i=0;i<100;i++)
- {
- if (objs[i].handle!=-1)
- {
- printf("------ del objId=%d handle=%d ------\n",i,objs[i].handle);
- c.del(objs[i].handle);
- objs[i].handle=-1;
-#ifdef CACHE_DEBUG
- c.printLRU();
-#endif
- }
- }
- c.printStats();
- return 0;
-}
-#endif
diff --git a/trunk/src/objcache.h b/trunk/src/objcache.h
deleted file mode 100644
index 71e7178..0000000
--- a/trunk/src/objcache.h
+++ /dev/null
@@ -1,127 +0,0 @@
-/******************************************************************************
- *
- *
- *
- * Copyright (C) 1997-2012 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.
- *
- */
-
-#ifndef OBJCACHE_H
-#define OBJCACHE_H
-
-//#define CACHE_TEST
-//#define CACHE_DEBUG
-#define CACHE_STATS
-
-/** @brief Cache for objects.
- *
- * This cache is used to decide which objects should remain in
- * memory. It uses a least recently used policy (LRU) to decide
- * which object should make room for a new object when the cache
- * is full. An object should be added using add(), and then use()
- * should be called when the object is used.
- */
-class ObjCache
-{
- private:
- struct CacheNode
- {
- CacheNode() : next(-1), prev(-1), obj(0) {}
- int next;
- int prev;
- void *obj;
- };
- struct HashNode
- {
- HashNode() : head(-1), nextHash(-1), index(-1), obj(0) {}
- int head;
- int nextHash;
- int index;
- void *obj;
- };
-
- public:
- /*! Creates the cache. The number of elements in the cache is 2 to
- * the power of \a logSize.
- */
- ObjCache(unsigned int logSize);
-
- /*! Deletes the cache and free all internal data-structures used. */
- ~ObjCache();
-
- /*! Adds \a obj to the cache. When victim is not null, this object is
- * removed from the cache to make room for \a obj.
- * Returns a handle to the object, which can be used by the use()
- * function, each time the object is used.
- */
- int add(void *obj,void **victim);
-
- /*! Indicates that this object is used. This will move the object
- * to the front of the internal LRU list to make sure it is removed last.
- * The parameter \a handle is returned when called add().
- */
- void use(int handle)
- {
- if (handle==m_lastHandle) return;
- m_lastHandle = handle;
- m_hits++;
- moveToFront(handle);
- }
-
- /*! Removes the item identified by \a handle from the cache.
- * @see add()
- */
- void del(int handle);
-
- /*! Debug function. Prints the LRU list */
- void printLRU();
- /*! Print miss/hits statistics */
- void printStats();
-
- /*! total size of the cache */
- int size() const { return m_size; }
-
- /*! number of elements in the cache */
- int count() const { return m_count; }
-
- int hits() const
- {
- return m_hits;
- }
- int misses() const
- {
- return m_misses;
- }
-
-
- private:
- void moveToFront(int index);
- unsigned int hash(void *addr);
- HashNode *hashFind(void *obj);
- HashNode *hashInsert(void *obj);
- void hashRemove(void *obj);
-
- CacheNode *m_cache;
- HashNode *m_hash;
- int m_head;
- int m_tail;
- int m_size;
- int m_count;
- int m_freeHashNodes;
- int m_freeCacheNodes;
- int m_lastHandle;
- int m_misses;
- int m_hits;
-};
-
-#endif // OBJCACHE_H
-
diff --git a/trunk/src/outputgen.cpp b/trunk/src/outputgen.cpp
deleted file mode 100644
index 74ba116..0000000
--- a/trunk/src/outputgen.cpp
+++ /dev/null
@@ -1,82 +0,0 @@
-/******************************************************************************
- *
- *
- *
- * Copyright (C) 1997-2012 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.
- *
- */
-
-#include <stdlib.h>
-
-#include "qtbc.h"
-#include "outputgen.h"
-#include "message.h"
-#include "portable.h"
-
-OutputGenerator::OutputGenerator()
-{
- //printf("OutputGenerator::OutputGenerator()\n");
- file=0;
- active=TRUE;
- genStack = new QStack<bool>;
- genStack->setAutoDelete(TRUE);
-}
-
-OutputGenerator::~OutputGenerator()
-{
- //printf("OutputGenerator::~OutputGenerator()\n");
- delete file;
- delete genStack;
-}
-
-void OutputGenerator::startPlainFile(const char *name)
-{
- //printf("startPlainFile(%s)\n",name);
- fileName=dir+"/"+name;
- file = new QFile(fileName);
- if (!file)
- {
- err("Could not create file object for %s\n",fileName.data());
- exit(1);
- }
- if (!file->open(IO_WriteOnly))
- {
- err("Could not open file %s for writing\n",fileName.data());
- exit(1);
- }
- t.setDevice(file);
-}
-
-void OutputGenerator::endPlainFile()
-{
- t.unsetDevice();
- delete file;
- file=0;
- fileName.resize(0);
-}
-
-void OutputGenerator::pushGeneratorState()
-{
- genStack->push(new bool(isEnabled()));
- //printf("%p:pushGeneratorState(%d) enabled=%d\n",this,genStack->count(),isEnabled());
-}
-
-void OutputGenerator::popGeneratorState()
-{
- //printf("%p:popGeneratorState(%d) enabled=%d\n",this,genStack->count(),isEnabled());
- bool *lb = genStack->pop();
- ASSERT(lb!=0);
- if (lb==0) return; // for some robustness against superfluous \endhtmlonly commands.
- if (*lb) enable(); else disable();
- delete lb;
-}
-
diff --git a/trunk/src/outputgen.h b/trunk/src/outputgen.h
deleted file mode 100644
index 58d1384..0000000
--- a/trunk/src/outputgen.h
+++ /dev/null
@@ -1,494 +0,0 @@
-/******************************************************************************
- *
- *
- *
- * Copyright (C) 1997-2012 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.
- *
- */
-
-#ifndef OUTPUTGEN_H
-#define OUTPUTGEN_H
-
-#include "qtbc.h"
-#include "ftextstream.h"
-#include <qbuffer.h>
-#include <qfile.h>
-#include <qstack.h>
-#include "index.h"
-#include "section.h"
-
-class ClassDiagram;
-class DotClassGraph;
-class DotInclDepGraph;
-class DotCallGraph;
-class DotDirDeps;
-class DotGfxHierarchyTable;
-class DotGroupCollaboration;
-class DocNode;
-class MemberDef;
-class GroupDef;
-class Definition;
-
-/*! \brief Output interface for code parser.
- */
-class CodeOutputInterface
-{
- public:
- virtual ~CodeOutputInterface() {}
- /*! Writes an ASCII string to the output. This function should keep
- * spaces visible, should break lines at a newline and should convert
- * tabs to the right number of spaces.
- */
- virtual void codify(const char *s) = 0;
-
- /*! Writes a link to an object in a code fragment.
- * \param ref If this is non-zero, the object is to be found in
- * an external documentation file.
- * \param file The file in which the object is located.
- * \param anchor The anchor uniquely identifying the object within
- * the file.
- * \param name The text to display as a placeholder for the link.
- * \param tooltip The tooltip to display when the mouse is on the link.
- */
- virtual void writeCodeLink(const char *ref,const char *file,
- const char *anchor,const char *name,
- const char *tooltip) = 0;
-
- virtual void writeLineNumber(const char *ref,const char *file,
- const char *anchor,int lineNumber) = 0;
- virtual void startCodeLine() = 0;
- virtual void endCodeLine() = 0;
- virtual void startCodeAnchor(const char *label) = 0;
- virtual void endCodeAnchor() = 0;
- virtual void startFontClass(const char *) = 0;
- virtual void endFontClass() = 0;
- virtual void writeCodeAnchor(const char *name) = 0;
- virtual void linkableSymbol(int line,const char *symName,
- Definition *symDef,Definition *context) = 0;
-};
-
-/*! \brief Base Interface used for generating output outside of the
- * comment blocks.
- *
- * This abstract class is used by output generation functions
- * to generate the output for a specific format,
- * or a list of formats (see OutputList). This interface
- * contains functions that generate fragments of the output.
- */
-class BaseOutputDocInterface : public CodeOutputInterface
-{
- public:
- virtual ~BaseOutputDocInterface() {}
- enum ParamListTypes { Param, RetVal, Exception };
- enum SectionTypes { /*See, Return, Author, Version,
- Since, Date, Bug, Note,
- Warning, Par, Deprecated, Pre,
- Post, Invar, Remark, Attention,
- Todo, Test, RCS, */ EnumValues,
- Examples
- };
-
- virtual void parseDoc(const char *,int, const char *,MemberDef *,
- const QCString &,bool) {}
- virtual void parseText(const QCString &) {}
-
- /*! Start of a bullet list: e.g. \c \<ul\> in html. startItemListItem() is
- * Used for the bullet items.
- */
- virtual void startItemList() = 0;
-
- /*! Writes a list item for a bullet or enumerated
- * list: e.g. \c \<li\> in html
- */
- virtual void startItemListItem() = 0;
-
- /*! Writes a list item for a bullet or enumerated
- * list: e.g. \c \</li\> in html
- */
- virtual void endItemListItem() = 0;
-
- /*! Ends a bullet list: e.g. \c \</ul\> in html */
- virtual void endItemList() = 0;
-
- /*! Writes an ASCII string to the output. Converts characters that have
- * A special meaning, like \c & in html.
- */
- virtual void docify(const char *s) = 0;
-
- /*! Writes a single ASCII character to the output. Converts characters
- * that have a special meaning.
- */
- virtual void writeChar(char c) = 0;
-
- /*! Writes an ASCII string to the output, \e without converting
- * special characters.
- */
- virtual void writeString(const char *text) = 0;
-
- /*! Starts a new paragraph */
- //virtual void newParagraph() = 0;
-
- /*! Starts a new paragraph */
- virtual void startParagraph() = 0;
- /*! Ends a paragraph */
- virtual void endParagraph() = 0;
-
- /*! Writes a link to an object in the documentation.
- * \param ref If this is non-zero, the object is to be found in
- * an external documentation file.
- * \param file The file in which the object is located.
- * \param anchor The anchor uniquely identifying the object within
- * the file.
- * \param name The text to display as a placeholder for the link.
- */
- virtual void writeObjectLink(const char *ref,const char *file,
- const char *anchor, const char *name) = 0;
-
-
- /*! Starts a (link to an) URL found in the documentation.
- * \param url The URL to link to.
- */
- virtual void startHtmlLink(const char *url) = 0;
-
- /*! Ends a link started by startHtmlLink().
- */
- virtual void endHtmlLink() = 0;
-
-
- /*! Changes the text font to bold face. The bold section ends with
- * endBold()
- */
- virtual void startBold() = 0;
-
- /*! End a section of text displayed in bold face. */
- virtual void endBold() = 0;
-
- /*! Changes the text font to fixed size. The section ends with
- * endTypewriter()
- */
- virtual void startTypewriter() = 0;
-
- /*! End a section of text displayed in typewriter style. */
- virtual void endTypewriter() = 0;
-
- /*! Changes the text font to italic. The italic section ends with
- * endEmphasis()
- */
- virtual void startEmphasis() = 0;
-
- /*! Ends a section of text displayed in italic. */
- virtual void endEmphasis() = 0;
-
- /*! Starts a source code fragment. The fragment will be
- * fed to the code parser (see code.h) for syntax highlighting
- * and cross-referencing. The fragment ends by a call to
- * endCodeFragment()
- */
- virtual void startCodeFragment() = 0;
-
- /*! Ends a source code fragment
- */
- virtual void endCodeFragment() = 0;
-
-
-
-
- /*! Writes a horizontal ruler to the output */
- virtual void writeRuler() = 0;
-
- /*! Starts a description list: e.g. \c \<dl\> in HTML
- * Items are surrounded by startDescItem() and endDescItem()
- */
- virtual void startDescription() = 0;
-
- /*! Ends a description list: e.g. \c \</dl\> in HTML */
- virtual void endDescription() = 0;
-
- /*! Starts an item of a description list: e.g. \c \<dt\> in HTML. */
- virtual void startDescItem() = 0;
-
- virtual void startDescForItem() = 0;
- virtual void endDescForItem() = 0;
-
- /*! Ends an item of a description list and starts the
- * description itself: e.g. \c \</dt\> in HTML.
- */
- virtual void endDescItem() = 0;
-
- virtual void startCenter() = 0;
- virtual void endCenter() = 0;
- virtual void startSmall() = 0;
- virtual void endSmall() = 0;
-
- virtual void startSimpleSect(SectionTypes t,const char *file,
- const char *anchor,const char *title) = 0;
- virtual void endSimpleSect() = 0;
- virtual void startParamList(ParamListTypes t,const char *title) = 0;
- virtual void endParamList() = 0;
-
- //virtual void writeDescItem() = 0;
- virtual void startTitle() = 0;
- virtual void endTitle() = 0;
-
- virtual void writeAnchor(const char *fileName,const char *name) = 0;
- virtual void startSection(const char *,const char *,SectionInfo::SectionType) = 0;
- virtual void endSection(const char *,SectionInfo::SectionType) = 0;
-
- virtual void lineBreak(const char *style) = 0;
- virtual void addIndexItem(const char *s1,const char *s2) = 0;
-
- virtual void writeNonBreakableSpace(int) = 0;
- virtual void startDescTable() = 0;
- virtual void endDescTable() = 0;
- virtual void startDescTableTitle() = 0;
- virtual void endDescTableTitle() = 0;
- virtual void startDescTableData() = 0;
- virtual void endDescTableData() = 0;
- virtual void startTextLink(const char *file,const char *anchor) = 0;
- virtual void endTextLink() = 0;
- virtual void startPageRef() = 0;
- virtual void endPageRef(const char *,const char *) = 0;
- virtual void startSubsection() = 0;
- virtual void endSubsection() = 0;
- virtual void startSubsubsection() = 0;
- virtual void endSubsubsection() = 0;
-};
-
-/*! \brief Abstract output generator.
- *
- * Subclass this class to add support for a new output format
- */
-class OutputGenerator : public BaseOutputDocInterface
-{
- public:
- enum OutputType { Html, Latex, Man, RTF, XML, DEF, Perl };
-
- OutputGenerator();
- virtual ~OutputGenerator();
-
- ///////////////////////////////////////////////////////////////
- // generic generator methods
- ///////////////////////////////////////////////////////////////
- virtual void enable() = 0;
- virtual void disable() = 0;
- virtual void enableIf(OutputType o) = 0;
- virtual void disableIf(OutputType o) = 0;
- virtual void disableIfNot(OutputType o) = 0;
- virtual bool isEnabled(OutputType o) = 0;
- virtual OutputGenerator *get(OutputType o) = 0;
- void startPlainFile(const char *name);
- void endPlainFile();
- //QCString getContents() const;
- bool isEnabled() const { return active; }
- void pushGeneratorState();
- void popGeneratorState();
- //void setEncoding(const QCString &enc) { encoding = enc; }
- //virtual void postProcess(QByteArray &) { }
-
- virtual void printDoc(DocNode *,const char *langExt) = 0;
-
- ///////////////////////////////////////////////////////////////
- // structural output interface
- ///////////////////////////////////////////////////////////////
- virtual void startFile(const char *name,const char *manName,
- const char *title) = 0;
- virtual void writeSearchInfo() = 0;
- virtual void writeFooter() = 0;
- virtual void endFile() = 0;
- virtual void startIndexSection(IndexSections) = 0;
- virtual void endIndexSection(IndexSections) = 0;
- virtual void writePageLink(const char *,bool) = 0;
- virtual void startProjectNumber() = 0;
- virtual void endProjectNumber() = 0;
- virtual void writeStyleInfo(int part) = 0;
- virtual void startTitleHead(const char *) = 0;
- virtual void endTitleHead(const char *fileName,const char *name) = 0;
- virtual void startIndexListItem() = 0;
- virtual void endIndexListItem() = 0;
- virtual void startIndexList() = 0;
- virtual void endIndexList() = 0;
- virtual void startIndexKey() = 0;
- virtual void endIndexKey() = 0;
- virtual void startIndexValue(bool) = 0;
- virtual void endIndexValue(const char *,bool) = 0;
- virtual void startIndexItem(const char *ref,const char *file) = 0;
- virtual void endIndexItem(const char *ref,const char *file) = 0;
- virtual void startGroupHeader(int) = 0;
- virtual void endGroupHeader(int) = 0;
- virtual void startMemberSections() = 0;
- virtual void endMemberSections() = 0;
- virtual void startHeaderSection() = 0;
- virtual void endHeaderSection() = 0;
- virtual void startMemberHeader(const char *anchor) = 0;
- virtual void endMemberHeader() = 0;
- virtual void startMemberSubtitle() = 0;
- virtual void endMemberSubtitle() = 0;
- virtual void startMemberDocList() = 0;
- virtual void endMemberDocList() = 0;
- virtual void startMemberList() = 0;
- virtual void endMemberList() = 0;
- virtual void startInlineHeader() = 0;
- virtual void endInlineHeader() = 0;
- virtual void startAnonTypeScope(int) = 0;
- virtual void endAnonTypeScope(int) = 0;
- virtual void startMemberItem(const char *,int) = 0;
- virtual void endMemberItem() = 0;
- virtual void startMemberTemplateParams() = 0;
- virtual void endMemberTemplateParams(const char *) = 0;
- virtual void startMemberGroupHeader(bool) = 0;
- virtual void endMemberGroupHeader() = 0;
- virtual void startMemberGroupDocs() = 0;
- virtual void endMemberGroupDocs() = 0;
- virtual void startMemberGroup() = 0;
- virtual void endMemberGroup(bool) = 0;
- virtual void insertMemberAlign(bool) = 0;
- virtual void startMemberDoc(const char *,const char *,
- const char *,const char *,bool) = 0;
- virtual void endMemberDoc(bool) = 0;
- virtual void startDoxyAnchor(const char *fName,const char *manName,
- const char *anchor,const char *name,
- const char *args) = 0;
- virtual void endDoxyAnchor(const char *fileName,const char *anchor) = 0;
- virtual void writeLatexSpacing() = 0;
- virtual void writeStartAnnoItem(const char *type,const char *file,
- const char *path,const char *name) = 0;
- virtual void writeEndAnnoItem(const char *name) = 0;
- virtual void startMemberDescription(const char *anchor) = 0;
- virtual void endMemberDescription() = 0;
- virtual void startIndent() = 0;
- virtual void endIndent() = 0;
- virtual void writeSynopsis() = 0;
- virtual void startClassDiagram() = 0;
- virtual void endClassDiagram(const ClassDiagram &,const char *,const char *) = 0;
- virtual void startDotGraph() = 0;
- virtual void endDotGraph(const DotClassGraph &g) = 0;
- virtual void startInclDepGraph() = 0;
- virtual void endInclDepGraph(const DotInclDepGraph &g) = 0;
- virtual void startGroupCollaboration() = 0;
- virtual void endGroupCollaboration(const DotGroupCollaboration &g) = 0;
- virtual void startCallGraph() = 0;
- virtual void endCallGraph(const DotCallGraph &g) = 0;
- virtual void startDirDepGraph() = 0;
- virtual void endDirDepGraph(const DotDirDeps &g) = 0;
- virtual void writeGraphicalHierarchy(const DotGfxHierarchyTable &g) = 0;
- virtual void startQuickIndices() = 0;
- virtual void endQuickIndices() = 0;
- virtual void writeSplitBar(const char *) = 0;
- virtual void writeLogo() = 0;
- virtual void writeQuickLinks(bool compact,HighlightedItem hli,const char *file) = 0;
- virtual void startContents() = 0;
- virtual void endContents() = 0;
- virtual void startTextBlock(bool) = 0;
- virtual void endTextBlock(bool) = 0;
- virtual void lastIndexPage() = 0;
- virtual void startMemberDocPrefixItem() = 0;
- virtual void endMemberDocPrefixItem() = 0;
- virtual void startMemberDocName(bool) = 0;
- virtual void endMemberDocName() = 0;
- virtual void startParameterType(bool,const char *key) = 0;
- virtual void endParameterType() = 0;
- virtual void startParameterName(bool) = 0;
- virtual void endParameterName(bool,bool,bool) = 0;
- virtual void startParameterList(bool) = 0;
- virtual void endParameterList() = 0;
-
- virtual void startConstraintList(const char *) = 0;
- virtual void startConstraintParam() = 0;
- virtual void endConstraintParam() = 0;
- virtual void startConstraintType() = 0;
- virtual void endConstraintType() = 0;
- virtual void startConstraintDocs() = 0;
- virtual void endConstraintDocs() = 0;
- virtual void endConstraintList() = 0;
-
- virtual void startMemberDocSimple() = 0;
- virtual void endMemberDocSimple() = 0;
- virtual void startInlineMemberType() = 0;
- virtual void endInlineMemberType() = 0;
- virtual void startInlineMemberName() = 0;
- virtual void endInlineMemberName() = 0;
- virtual void startInlineMemberDoc() = 0;
- virtual void endInlineMemberDoc() = 0;
-
- protected:
- FTextStream t;
- QFile *file;
- QCString fileName;
- QCString dir;
- bool active;
- QStack<bool> *genStack;
-
- private:
- OutputGenerator(const OutputGenerator &o);
- OutputGenerator &operator=(const OutputGenerator &o);
-};
-
-/*! \brief Interface used for generating documentation.
- *
- * This abstract class is used by several functions
- * to generate the output for a specific format.
- * This interface contains some state saving and changing
- * functions for dealing with format specific output.
- */
-class OutputDocInterface : public BaseOutputDocInterface
-{
- public:
- virtual ~OutputDocInterface() {}
-
- /*! Create a new output generator. This can later by appended
- * to the current one using append().
- */
- //virtual OutputDocInterface *clone() = 0;
-
- /*! Disables all output formats except format \a o
- * (useful for OutputList only)
- */
- virtual void disableAllBut(OutputGenerator::OutputType o) = 0;
-
- /*! Enables all output formats as far as they have been enabled in
- * the config file. (useful for OutputList only)
- */
- virtual void enableAll() = 0;
-
- /*! Disables all output formats (useful for OutputList only) */
- virtual void disableAll()= 0;
-
- /*! Disables a specific output format (useful for OutputList only) */
- virtual void disable(OutputGenerator::OutputType o) = 0;
-
- /*! Enables a specific output format (useful for OutputList only) */
- virtual void enable(OutputGenerator::OutputType o) = 0;
-
- /*! Check whether a specific output format is currenly enabled
- * (useful for OutputList only)
- */
- virtual bool isEnabled(OutputGenerator::OutputType o) = 0;
-
- /*! Appends the output generated by generator \a g to this
- * generator.
- */
- //virtual void append(const OutputDocInterface *g) = 0;
-
- /*! Pushes the state of the current generator (or list of
- * generators) on a stack.
- */
- virtual void pushGeneratorState() = 0;
-
- /*! Pops the state of the current generator (or list of
- * generators) on a stack. Should be preceded by a call
- * the pushGeneratorState().
- */
- virtual void popGeneratorState() = 0;
-};
-
-
-#endif
diff --git a/trunk/src/outputlist.cpp b/trunk/src/outputlist.cpp
deleted file mode 100644
index cb1bba1..0000000
--- a/trunk/src/outputlist.cpp
+++ /dev/null
@@ -1,316 +0,0 @@
-/******************************************************************************
- *
- *
- *
- * Copyright (C) 1997-2012 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.
- *
- */
-
-/*! \file
- * This class represents a list of output generators that work in "parallel".
- * The class only knows about the abstract base class OutputGenerators.
- * All output is produced by calling a method of this class, which forwards
- * the call to all output generators.
- */
-
-#include "outputlist.h"
-#include "outputgen.h"
-#include "config.h"
-#include "message.h"
-#include "definition.h"
-
-#include "docparser.h"
-
-OutputList::OutputList(bool)
-{
- //printf("OutputList::OutputList()\n");
- outputs = new QList<OutputGenerator>;
- outputs->setAutoDelete(TRUE);
-}
-
-OutputList::~OutputList()
-{
- //printf("OutputList::~OutputList()\n");
- delete outputs;
-}
-
-void OutputList::add(const OutputGenerator *og)
-{
- if (og) outputs->append(og);
-}
-
-void OutputList::disableAllBut(OutputGenerator::OutputType o)
-{
- OutputGenerator *og=outputs->first();
- while (og)
- {
- og->disableIfNot(o);
- og=outputs->next();
- }
-}
-
-void OutputList::enableAll()
-{
- OutputGenerator *og=outputs->first();
- while (og)
- {
- og->enable();
- og=outputs->next();
- }
-}
-
-void OutputList::disableAll()
-{
- OutputGenerator *og=outputs->first();
- while (og)
- {
- og->disable();
- og=outputs->next();
- }
-}
-
-void OutputList::disable(OutputGenerator::OutputType o)
-{
- OutputGenerator *og=outputs->first();
- while (og)
- {
- og->disableIf(o);
- og=outputs->next();
- }
-}
-
-void OutputList::enable(OutputGenerator::OutputType o)
-{
- OutputGenerator *og=outputs->first();
- while (og)
- {
- og->enableIf(o);
- og=outputs->next();
- }
-}
-
-bool OutputList::isEnabled(OutputGenerator::OutputType o)
-{
- bool result=FALSE;
- OutputGenerator *og=outputs->first();
- while (og)
- {
- result=result || og->isEnabled(o);
- og=outputs->next();
- }
- return result;
-}
-
-void OutputList::pushGeneratorState()
-{
- OutputGenerator *og=outputs->first();
- while (og)
- {
- og->pushGeneratorState();
- og=outputs->next();
- }
-}
-
-void OutputList::popGeneratorState()
-{
- OutputGenerator *og=outputs->first();
- while (og)
- {
- og->popGeneratorState();
- og=outputs->next();
- }
-}
-
-void OutputList::parseDoc(const char *fileName,int startLine,
- Definition *ctx,MemberDef * md,
- const QCString &docStr,bool indexWords,
- bool isExample,const char *exampleName,
- bool singleLine,bool linkFromIndex)
-{
- int count=0;
- if (docStr.isEmpty()) return;
-
- OutputGenerator *og=outputs->first();
- while (og)
- {
- if (og->isEnabled()) count++;
- og=outputs->next();
- }
- if (count==0) return; // no output formats enabled.
-
- DocNode *root=0;
- if (docStr.at(docStr.length()-1)=='\n')
- {
- root = validatingParseDoc(fileName,startLine,
- ctx,md,docStr,indexWords,isExample,exampleName,
- singleLine,linkFromIndex);
- }
- else
- {
- root = validatingParseDoc(fileName,startLine,
- ctx,md,docStr+"\n",indexWords,isExample,exampleName,
- singleLine,linkFromIndex);
- }
-
- og=outputs->first();
- while (og)
- {
- //printf("og->printDoc(extension=%s)\n",
- // ctx?ctx->getDefFileExtension().data():"<null>");
- if (og->isEnabled()) og->printDoc(root,ctx?ctx->getDefFileExtension():QCString(""));
- og=outputs->next();
- }
-
- delete root;
-}
-
-void OutputList::parseText(const QCString &textStr)
-{
- int count=0;
- OutputGenerator *og=outputs->first();
- while (og)
- {
- if (og->isEnabled()) count++;
- og=outputs->next();
- }
- if (count==0) return; // no output formats enabled.
-
- DocNode *root = validatingParseText(textStr);
-
- og=outputs->first();
- while (og)
- {
- if (og->isEnabled()) og->printDoc(root,0);
- og=outputs->next();
- }
-
- delete root;
-}
-
-
-//--------------------------------------------------------------------------
-// Create some overloaded definitions of the forall function.
-// Using template functions here would have made it a little less
-// portable (I guess).
-
-// zero arguments
-void OutputList::forall(void (OutputGenerator::*func)())
-{
- OutputGenerator *og=outputs->first();
- while (og)
- {
- if (og->isEnabled()) (og->*func)();
- og=outputs->next();
- }
-}
-
-// one argument
-#define FORALL1(a1,p1) \
-void OutputList::forall(void (OutputGenerator::*func)(a1),a1) \
-{ \
- OutputGenerator *og=outputs->first(); \
- while (og) \
- { \
- if (og->isEnabled()) (og->*func)(p1); \
- og=outputs->next(); \
- } \
-}
-
-// two arguments
-#define FORALL2(a1,a2,p1,p2) \
-void OutputList::forall(void (OutputGenerator::*func)(a1,a2),a1,a2) \
-{ \
- OutputGenerator *og=outputs->first(); \
- while (og) \
- { \
- if (og->isEnabled()) (og->*func)(p1,p2); \
- og=outputs->next(); \
- } \
-}
-
-// three arguments
-#define FORALL3(a1,a2,a3,p1,p2,p3) \
-void OutputList::forall(void (OutputGenerator::*func)(a1,a2,a3),a1,a2,a3) \
-{ \
- OutputGenerator *og=outputs->first(); \
- while (og) \
- { \
- if (og->isEnabled()) (og->*func)(p1,p2,p3); \
- og=outputs->next(); \
- } \
-}
-
-// four arguments
-#define FORALL4(a1,a2,a3,a4,p1,p2,p3,p4) \
-void OutputList::forall(void (OutputGenerator::*func)(a1,a2,a3,a4),a1,a2,a3,a4) \
-{ \
- OutputGenerator *og=outputs->first(); \
- while (og) \
- { \
- if (og->isEnabled()) (og->*func)(p1,p2,p3,p4); \
- og=outputs->next(); \
- } \
-}
-
-// five arguments
-#define FORALL5(a1,a2,a3,a4,a5,p1,p2,p3,p4,p5) \
-void OutputList::forall(void (OutputGenerator::*func)(a1,a2,a3,a4,a5),a1,a2,a3,a4,a5) \
-{ \
- OutputGenerator *og=outputs->first(); \
- while (og) \
- { \
- if (og->isEnabled()) (og->*func)(p1,p2,p3,p4,p5); \
- og=outputs->next(); \
- } \
-}
-
-// now instantiate only the ones we need.
-
-FORALL1(const char *a1,a1)
-FORALL1(char a1,a1)
-FORALL1(int a1,a1)
-FORALL1(const DotClassGraph &a1,a1)
-FORALL1(const DotInclDepGraph &a1,a1)
-FORALL1(const DotCallGraph &a1,a1)
-FORALL1(const DotDirDeps &a1,a1)
-FORALL1(const DotGfxHierarchyTable &a1,a1)
-FORALL1(const DotGroupCollaboration &a1,a1)
-FORALL1(SectionTypes a1,a1)
-#if defined(HAS_BOOL_TYPE) || defined(Q_HAS_BOOL_TYPE)
-FORALL1(bool a1,a1)
-FORALL2(bool a1,int a2,a1,a2)
-FORALL2(bool a1,bool a2,a1,a2)
-FORALL2(const char *a1,bool a2,a1,a2)
-FORALL4(const char *a1,const char *a2,const char *a3,bool a4,a1,a2,a3,a4)
-#endif
-FORALL2(int a1,bool a2,a1,a2)
-FORALL2(bool a1,const char *a2,a1,a2)
-FORALL2(ParamListTypes a1,const char *a2,a1,a2)
-FORALL1(IndexSections a1,a1)
-FORALL2(const char *a1,const char *a2,a1,a2)
-FORALL2(const char *a1,int a2,a1,a2)
-FORALL2(const char *a1,SectionInfo::SectionType a2,a1,a2)
-FORALL3(bool a1,HighlightedItem a2,const char *a3,a1,a2,a3)
-FORALL3(bool a1,bool a2,bool a3,a1,a2,a3)
-FORALL3(const ClassDiagram &a1,const char *a2,const char *a3,a1,a2,a3)
-FORALL3(const char *a1,const char *a2,const char *a3,a1,a2,a3)
-FORALL3(const char *a1,const char *a2,bool a3,a1,a2,a3)
-FORALL3(const char *a1,const char *a2,SectionInfo::SectionType a3,a1,a2,a3)
-FORALL3(uchar a1,uchar a2,uchar a3,a1,a2,a3)
-FORALL4(SectionTypes a1,const char *a2,const char *a3,const char *a4,a1,a2,a3,a4)
-FORALL4(const char *a1,const char *a2,const char *a3,const char *a4,a1,a2,a3,a4)
-FORALL4(const char *a1,const char *a2,const char *a3,int a4,a1,a2,a3,a4)
-FORALL5(const char *a1,const char *a2,const char *a3,const char *a4,const char *a5,a1,a2,a3,a4,a5)
-FORALL5(const char *a1,const char *a2,const char *a3,const char *a4,bool a5,a1,a2,a3,a4,a5)
-
-
-//--------------------------------------------------------------------------
diff --git a/trunk/src/outputlist.h b/trunk/src/outputlist.h
deleted file mode 100644
index 1b5b8ec..0000000
--- a/trunk/src/outputlist.h
+++ /dev/null
@@ -1,518 +0,0 @@
-/******************************************************************************
- *
- *
- *
- * Copyright (C) 1997-2012 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.
- *
- */
-
-#ifndef OUTPUTLIST_H
-#define OUTPUTLIST_H
-
-#include "qtbc.h"
-#include <qlist.h>
-#include "index.h" // for IndexSections
-#include "outputgen.h"
-
-#define FORALLPROTO1(arg1) \
- void forall(void (OutputGenerator::*func)(arg1),arg1)
-#define FORALLPROTO2(arg1,arg2) \
- void forall(void (OutputGenerator::*func)(arg1,arg2),arg1,arg2)
-#define FORALLPROTO3(arg1,arg2,arg3) \
- void forall(void (OutputGenerator::*func)(arg1,arg2,arg3),arg1,arg2,arg3)
-#define FORALLPROTO4(arg1,arg2,arg3,arg4) \
- void forall(void (OutputGenerator::*func)(arg1,arg2,arg3,arg4),arg1,arg2,arg3,arg4)
-#define FORALLPROTO5(arg1,arg2,arg3,arg4,arg5) \
- void forall(void (OutputGenerator::*func)(arg1,arg2,arg3,arg4,arg5),arg1,arg2,arg3,arg4,arg5)
-
-class ClassDiagram;
-class DotClassGraph;
-class DotDirDeps;
-class DotInclDepGraph;
-class DotGfxHierarchyTable;
-class SectionDict;
-class DotGroupCollaboration;
-
-class OutputList : public OutputDocInterface
-{
- public:
- OutputList(bool);
- virtual ~OutputList();
-
- void add(const OutputGenerator *);
-
- void disableAllBut(OutputGenerator::OutputType o);
- void enableAll();
- void disableAll();
- void disable(OutputGenerator::OutputType o);
- void enable(OutputGenerator::OutputType o);
- bool isEnabled(OutputGenerator::OutputType o);
- void pushGeneratorState();
- void popGeneratorState();
-
-
- //////////////////////////////////////////////////
- // OutputDocInterface implementation
- //////////////////////////////////////////////////
-
- void parseDoc(const char *fileName,int startLine,
- Definition *ctx,MemberDef *md,const QCString &docStr,
- bool indexWords,bool isExample,const char *exampleName=0,
- bool singleLine=FALSE,bool linkFromIndex=FALSE);
- void parseText(const QCString &textStr);
-
-
- void startIndexSection(IndexSections is)
- { forall(&OutputGenerator::startIndexSection,is); }
- void endIndexSection(IndexSections is)
- { forall(&OutputGenerator::endIndexSection,is); }
- void writePageLink(const char *name,bool first)
- { forall(&OutputGenerator::writePageLink,name,first); }
- void startProjectNumber()
- { forall(&OutputGenerator::startProjectNumber); }
- void endProjectNumber()
- { forall(&OutputGenerator::endProjectNumber); }
- void writeStyleInfo(int part)
- { forall(&OutputGenerator::writeStyleInfo,part); }
- void startFile(const char *name,const char *manName,const char *title)
- { forall(&OutputGenerator::startFile,name,manName,title); }
- void writeSearchInfo()
- { forall(&OutputGenerator::writeSearchInfo); }
- void writeFooter()
- { forall(&OutputGenerator::writeFooter); }
- void endFile()
- { forall(&OutputGenerator::endFile); }
- void startTitleHead(const char *fileName)
- { forall(&OutputGenerator::startTitleHead,fileName); }
- void endTitleHead(const char *fileName,const char *name)
- { forall(&OutputGenerator::endTitleHead,fileName,name); }
- void startTitle()
- { forall(&OutputGenerator::startTitle); }
- void endTitle()
- { forall(&OutputGenerator::endTitle); }
- //void newParagraph()
- //{ forall(&OutputGenerator::newParagraph); }
- void startParagraph()
- { forall(&OutputGenerator::startParagraph); }
- void endParagraph()
- { forall(&OutputGenerator::endParagraph); }
- void writeString(const char *text)
- { forall(&OutputGenerator::writeString,text); }
- void startIndexListItem()
- { forall(&OutputGenerator::startIndexListItem); }
- void endIndexListItem()
- { forall(&OutputGenerator::endIndexListItem); }
- void startIndexList()
- { forall(&OutputGenerator::startIndexList); }
- void endIndexList()
- { forall(&OutputGenerator::endIndexList); }
- void startIndexKey()
- { forall(&OutputGenerator::startIndexKey); }
- void endIndexKey()
- { forall(&OutputGenerator::endIndexKey); }
- void startIndexValue(bool b)
- { forall(&OutputGenerator::startIndexValue,b); }
- void endIndexValue(const char *name,bool b)
- { forall(&OutputGenerator::endIndexValue,name,b); }
- void startItemList()
- { forall(&OutputGenerator::startItemList); }
- void endItemList()
- { forall(&OutputGenerator::endItemList); }
- void startIndexItem(const char *ref,const char *file)
- { forall(&OutputGenerator::startIndexItem,ref,file); }
- void endIndexItem(const char *ref,const char *file)
- { forall(&OutputGenerator::endIndexItem,ref,file); }
- void docify(const char *s)
- { forall(&OutputGenerator::docify,s); }
- void codify(const char *s)
- { forall(&OutputGenerator::codify,s); }
- void writeObjectLink(const char *ref,const char *file,
- const char *anchor, const char *name)
- { forall(&OutputGenerator::writeObjectLink,ref,file,anchor,name); }
- void writeCodeLink(const char *ref,const char *file,
- const char *anchor,const char *name,
- const char *tooltip)
- { forall(&OutputGenerator::writeCodeLink,ref,file,anchor,name,tooltip); }
- void startTextLink(const char *file,const char *anchor)
- { forall(&OutputGenerator::startTextLink,file,anchor); }
- void endTextLink()
- { forall(&OutputGenerator::endTextLink); }
- void startHtmlLink(const char *url)
- { forall(&OutputGenerator::startHtmlLink,url); }
- void endHtmlLink()
- { forall(&OutputGenerator::endHtmlLink); }
- void writeStartAnnoItem(const char *type,const char *file,
- const char *path,const char *name)
- { forall(&OutputGenerator::writeStartAnnoItem,type,file,path,name); }
- void writeEndAnnoItem(const char *name)
- { forall(&OutputGenerator::writeEndAnnoItem,name); }
- void startTypewriter()
- { forall(&OutputGenerator::startTypewriter); }
- void endTypewriter()
- { forall(&OutputGenerator::endTypewriter); }
- void startGroupHeader(int extraLevels=0)
- { forall(&OutputGenerator::startGroupHeader,extraLevels); }
- void endGroupHeader(int extraLevels=0)
- { forall(&OutputGenerator::endGroupHeader,extraLevels); }
- //void writeListItem()
- //{ forall(&OutputGenerator::writeListItem); }
- void startItemListItem()
- { forall(&OutputGenerator::startItemListItem); }
- void endItemListItem()
- { forall(&OutputGenerator::endItemListItem); }
- void startMemberSections()
- { forall(&OutputGenerator::startMemberSections); }
- void endMemberSections()
- { forall(&OutputGenerator::endMemberSections); }
- void startHeaderSection()
- { forall(&OutputGenerator::startHeaderSection); }
- void endHeaderSection()
- { forall(&OutputGenerator::endHeaderSection); }
- void startMemberHeader(const char *anchor)
- { forall(&OutputGenerator::startMemberHeader,anchor); }
- void endMemberHeader()
- { forall(&OutputGenerator::endMemberHeader); }
- void startMemberSubtitle()
- { forall(&OutputGenerator::startMemberSubtitle); }
- void endMemberSubtitle()
- { forall(&OutputGenerator::endMemberSubtitle); }
- void startMemberDocList()
- { forall(&OutputGenerator::startMemberDocList); }
- void endMemberDocList()
- { forall(&OutputGenerator::endMemberDocList); }
- void startMemberList()
- { forall(&OutputGenerator::startMemberList); }
- void endMemberList()
- { forall(&OutputGenerator::endMemberList); }
- void startInlineHeader()
- { forall(&OutputGenerator::startInlineHeader); }
- void endInlineHeader()
- { forall(&OutputGenerator::endInlineHeader); }
- void startAnonTypeScope(int i1)
- { forall(&OutputGenerator::startAnonTypeScope,i1); }
- void endAnonTypeScope(int i1)
- { forall(&OutputGenerator::endAnonTypeScope,i1); }
- void startMemberItem(const char *anchor,int i1)
- { forall(&OutputGenerator::startMemberItem,anchor,i1); }
- void endMemberItem()
- { forall(&OutputGenerator::endMemberItem); }
- void startMemberTemplateParams()
- { forall(&OutputGenerator::startMemberTemplateParams); }
- void endMemberTemplateParams(const char *anchor)
- { forall(&OutputGenerator::endMemberTemplateParams,anchor); }
- void startMemberGroupHeader(bool b)
- { forall(&OutputGenerator::startMemberGroupHeader,b); }
- void endMemberGroupHeader()
- { forall(&OutputGenerator::endMemberGroupHeader); }
- void startMemberGroupDocs()
- { forall(&OutputGenerator::startMemberGroupDocs); }
- void endMemberGroupDocs()
- { forall(&OutputGenerator::endMemberGroupDocs); }
- void startMemberGroup()
- { forall(&OutputGenerator::startMemberGroup); }
- void endMemberGroup(bool last)
- { forall(&OutputGenerator::endMemberGroup,last); }
- void insertMemberAlign(bool templ=FALSE)
- { forall(&OutputGenerator::insertMemberAlign,templ); }
- void writeRuler()
- { forall(&OutputGenerator::writeRuler); }
- void writeAnchor(const char *fileName,const char *name)
- { forall(&OutputGenerator::writeAnchor,fileName,name); }
- void startCodeFragment()
- { forall(&OutputGenerator::startCodeFragment); }
- void endCodeFragment()
- { forall(&OutputGenerator::endCodeFragment); }
- void startCodeLine()
- { forall(&OutputGenerator::startCodeLine); }
- void endCodeLine()
- { forall(&OutputGenerator::endCodeLine); }
- void writeLineNumber(const char *ref,const char *file,const char *anchor,
- int lineNumber)
- { forall(&OutputGenerator::writeLineNumber,ref,file,anchor,lineNumber); }
- void startEmphasis()
- { forall(&OutputGenerator::startEmphasis); }
- void endEmphasis()
- { forall(&OutputGenerator::endEmphasis); }
- void writeChar(char c)
- { forall(&OutputGenerator::writeChar,c); }
- void startMemberDoc(const char *clName,const char *memName,
- const char *anchor,const char *title,bool showInline)
- { forall(&OutputGenerator::startMemberDoc,clName,memName,anchor,title,showInline); }
- void endMemberDoc(bool hasArgs)
- { forall(&OutputGenerator::endMemberDoc,hasArgs); }
- void startDoxyAnchor(const char *fName,const char *manName,
- const char *anchor, const char *name,
- const char *args)
- { forall(&OutputGenerator::startDoxyAnchor,fName,manName,anchor,name,args); }
- void endDoxyAnchor(const char *fn,const char *anchor)
- { forall(&OutputGenerator::endDoxyAnchor,fn,anchor); }
- void startCodeAnchor(const char *label)
- { forall(&OutputGenerator::startCodeAnchor,label); }
- void endCodeAnchor()
- { forall(&OutputGenerator::endCodeAnchor); }
- void writeLatexSpacing()
- { forall(&OutputGenerator::writeLatexSpacing); }
- void startDescription()
- { forall(&OutputGenerator::startDescription); }
- void endDescription()
- { forall(&OutputGenerator::endDescription); }
- void startDescItem()
- { forall(&OutputGenerator::startDescItem); }
- void endDescItem()
- { forall(&OutputGenerator::endDescItem); }
- void startDescForItem()
- { forall(&OutputGenerator::startDescForItem); }
- void endDescForItem()
- { forall(&OutputGenerator::endDescForItem); }
- void startSubsection()
- { forall(&OutputGenerator::startSubsection); }
- void endSubsection()
- { forall(&OutputGenerator::endSubsection); }
- void startSubsubsection()
- { forall(&OutputGenerator::startSubsubsection); }
- void endSubsubsection()
- { forall(&OutputGenerator::endSubsubsection); }
- void startCenter()
- { forall(&OutputGenerator::startCenter); }
- void endCenter()
- { forall(&OutputGenerator::endCenter); }
- void startSmall()
- { forall(&OutputGenerator::startSmall); }
- void endSmall()
- { forall(&OutputGenerator::endSmall); }
- void lineBreak(const char *style=0)
- { forall(&OutputGenerator::lineBreak,style); }
- void startBold()
- { forall(&OutputGenerator::startBold); }
- void endBold()
- { forall(&OutputGenerator::endBold); }
- void startMemberDescription(const char *anchor)
- { forall(&OutputGenerator::startMemberDescription,anchor); }
- void endMemberDescription()
- { forall(&OutputGenerator::endMemberDescription); }
- void startSimpleSect(SectionTypes t,const char *file,const char *anchor,
- const char *title)
- { forall(&OutputGenerator::startSimpleSect,t,file,anchor,title); }
- void endSimpleSect()
- { forall(&OutputGenerator::endSimpleSect); }
- void startParamList(ParamListTypes t,const char *title)
- { forall(&OutputGenerator::startParamList,t,title); }
- void endParamList()
- { forall(&OutputGenerator::endParamList); }
- //void writeDescItem()
- //{ forall(&OutputGenerator::writeDescItem); }
- void startIndent()
- { forall(&OutputGenerator::startIndent); }
- void endIndent()
- { forall(&OutputGenerator::endIndent); }
- void startSection(const char *lab,const char *title,SectionInfo::SectionType t)
- { forall(&OutputGenerator::startSection,lab,title,t); }
- void endSection(const char *lab,SectionInfo::SectionType t)
- { forall(&OutputGenerator::endSection,lab,t); }
- void addIndexItem(const char *s1,const char *s2)
- { forall(&OutputGenerator::addIndexItem,s1,s2); }
- void writeSynopsis()
- { forall(&OutputGenerator::writeSynopsis); }
- void startClassDiagram()
- { forall(&OutputGenerator::startClassDiagram); }
- void endClassDiagram(const ClassDiagram &d,const char *f,const char *n)
- { forall(&OutputGenerator::endClassDiagram,d,f,n); }
- void startPageRef()
- { forall(&OutputGenerator::startPageRef); }
- void endPageRef(const char *c,const char *a)
- { forall(&OutputGenerator::endPageRef,c,a); }
- void startQuickIndices()
- { forall(&OutputGenerator::startQuickIndices); }
- void endQuickIndices()
- { forall(&OutputGenerator::endQuickIndices); }
- void writeSplitBar(const char *name)
- { forall(&OutputGenerator::writeSplitBar,name); }
- void writeLogo()
- { forall(&OutputGenerator::writeLogo); }
- void writeQuickLinks(bool compact,HighlightedItem hli,const char *file)
- { forall(&OutputGenerator::writeQuickLinks,compact,hli,file); }
- void startContents()
- { forall(&OutputGenerator::startContents); }
- void endContents()
- { forall(&OutputGenerator::endContents); }
- void writeNonBreakableSpace(int num)
- { forall(&OutputGenerator::writeNonBreakableSpace,num); }
- void startDescTable()
- { forall(&OutputGenerator::startDescTable); }
- void endDescTable()
- { forall(&OutputGenerator::endDescTable); }
- void startDescTableTitle()
- { forall(&OutputGenerator::startDescTableTitle); }
- void endDescTableTitle()
- { forall(&OutputGenerator::endDescTableTitle); }
- void startDescTableData()
- { forall(&OutputGenerator::startDescTableData); }
- void endDescTableData()
- { forall(&OutputGenerator::endDescTableData); }
- void startDotGraph()
- { forall(&OutputGenerator::startDotGraph); }
- void endDotGraph(const DotClassGraph &g)
- { forall(&OutputGenerator::endDotGraph,g); }
- void startInclDepGraph()
- { forall(&OutputGenerator::startInclDepGraph); }
- void endInclDepGraph(const DotInclDepGraph &g)
- { forall(&OutputGenerator::endInclDepGraph,g); }
- void startCallGraph()
- { forall(&OutputGenerator::startCallGraph); }
- void endCallGraph(const DotCallGraph &g)
- { forall(&OutputGenerator::endCallGraph,g); }
- void startDirDepGraph()
- { forall(&OutputGenerator::startDirDepGraph); }
- void endDirDepGraph(const DotDirDeps &g)
- { forall(&OutputGenerator::endDirDepGraph,g); }
- void startGroupCollaboration()
- { forall(&OutputGenerator::startGroupCollaboration); }
- void endGroupCollaboration(const DotGroupCollaboration &g)
- { forall(&OutputGenerator::endGroupCollaboration,g); }
- void writeGraphicalHierarchy(const DotGfxHierarchyTable &g)
- { forall(&OutputGenerator::writeGraphicalHierarchy,g); }
- void startTextBlock(bool dense=FALSE)
- { forall(&OutputGenerator::startTextBlock,dense); }
- void endTextBlock(bool paraBreak=FALSE)
- { forall(&OutputGenerator::endTextBlock,paraBreak); }
- void lastIndexPage()
- { forall(&OutputGenerator::lastIndexPage); }
- void startMemberDocPrefixItem()
- { forall(&OutputGenerator::startMemberDocPrefixItem); }
- void endMemberDocPrefixItem()
- { forall(&OutputGenerator::endMemberDocPrefixItem); }
- void startMemberDocName(bool align)
- { forall(&OutputGenerator::startMemberDocName,align); }
- void endMemberDocName()
- { forall(&OutputGenerator::endMemberDocName); }
- void startParameterType(bool first,const char *key)
- { forall(&OutputGenerator::startParameterType,first,key); }
- void endParameterType()
- { forall(&OutputGenerator::endParameterType); }
- void startParameterName(bool one)
- { forall(&OutputGenerator::startParameterName,one); }
- void endParameterName(bool last,bool one,bool bracket)
- { forall(&OutputGenerator::endParameterName,last,one,bracket); }
- void startParameterList(bool openBracket)
- { forall(&OutputGenerator::startParameterList,openBracket); }
- void endParameterList()
- { forall(&OutputGenerator::endParameterList); }
-
- void startConstraintList(const char *header)
- { forall(&OutputGenerator::startConstraintList,header); }
- void startConstraintParam()
- { forall(&OutputGenerator::startConstraintParam); }
- void endConstraintParam()
- { forall(&OutputGenerator::endConstraintParam); }
- void startConstraintType()
- { forall(&OutputGenerator::startConstraintType); }
- void endConstraintType()
- { forall(&OutputGenerator::endConstraintType); }
- void startConstraintDocs()
- { forall(&OutputGenerator::startConstraintDocs); }
- void endConstraintDocs()
- { forall(&OutputGenerator::endConstraintDocs); }
- void endConstraintList()
- { forall(&OutputGenerator::endConstraintList); }
-
- void startMemberDocSimple()
- { forall(&OutputGenerator::startMemberDocSimple); }
- void endMemberDocSimple()
- { forall(&OutputGenerator::endMemberDocSimple); }
- void startInlineMemberType()
- { forall(&OutputGenerator::startInlineMemberType); }
- void endInlineMemberType()
- { forall(&OutputGenerator::endInlineMemberType); }
- void startInlineMemberName()
- { forall(&OutputGenerator::startInlineMemberName); }
- void endInlineMemberName()
- { forall(&OutputGenerator::endInlineMemberName); }
- void startInlineMemberDoc()
- { forall(&OutputGenerator::startInlineMemberDoc); }
- void endInlineMemberDoc()
- { forall(&OutputGenerator::endInlineMemberDoc); }
-
- void startFontClass(const char *c)
- { forall(&OutputGenerator::startFontClass,c); }
- void endFontClass()
- { forall(&OutputGenerator::endFontClass); }
- void writeCodeAnchor(const char *name)
- { forall(&OutputGenerator::writeCodeAnchor,name); }
- void startPlainFile(const char *name)
- {
- OutputGenerator *og=outputs->first();
- while (og)
- {
- if (og->isEnabled()) (og->startPlainFile)(name);
- og=outputs->next();
- }
- }
- void endPlainFile()
- {
- OutputGenerator *og=outputs->first();
- while (og)
- {
- if (og->isEnabled()) (og->endPlainFile)();
- og=outputs->next();
- }
- }
- void linkableSymbol(int,const char *,Definition *,Definition *) {}
-
-
-
- private:
- void debug();
- void clear();
-
- void forall(void (OutputGenerator::*func)());
- FORALLPROTO1(const char *);
- FORALLPROTO1(char);
- FORALLPROTO1(IndexSections);
- FORALLPROTO1(int);
- FORALLPROTO1(const DotClassGraph &);
- FORALLPROTO1(const DotInclDepGraph &);
- FORALLPROTO1(const DotCallGraph &);
- FORALLPROTO1(const DotGroupCollaboration &);
- FORALLPROTO1(const DotDirDeps &);
- FORALLPROTO1(const DotGfxHierarchyTable &);
- FORALLPROTO1(SectionTypes);
-#if defined(HAS_BOOL_TYPE) || defined(Q_HAS_BOOL_TYPE)
- FORALLPROTO1(bool);
- FORALLPROTO2(bool,int);
- FORALLPROTO2(bool,bool);
- FORALLPROTO2(const char *,bool);
- FORALLPROTO4(const char *,const char *,const char *,int);
-#endif
- FORALLPROTO2(int,bool);
- FORALLPROTO2(bool,const char *);
- FORALLPROTO2(ParamListTypes,const char *);
- FORALLPROTO2(const char *,const char *);
- FORALLPROTO2(const char *,int);
- FORALLPROTO2(const char *,SectionInfo::SectionType);
- FORALLPROTO3(bool,HighlightedItem,const char *);
- FORALLPROTO3(bool,bool,bool);
- FORALLPROTO3(const char *,const char *,bool);
- FORALLPROTO3(const char *,const char *,SectionInfo::SectionType);
- FORALLPROTO3(uchar,uchar,uchar);
- FORALLPROTO3(const char *,const char *,const char *);
- FORALLPROTO3(const ClassDiagram &,const char *,const char *);
- FORALLPROTO4(SectionTypes,const char *,const char *,const char *);
- FORALLPROTO4(const char *,const char *,const char *,const char *);
- FORALLPROTO4(const char *,const char *,const char *,bool);
- FORALLPROTO5(const char *,const char *,const char *,const char *,const char *);
- FORALLPROTO5(const char *,const char *,const char *,const char *,bool);
-
- OutputList(const OutputList &ol);
- QList<OutputGenerator> *outputs;
-};
-
-#endif
diff --git a/trunk/src/pagedef.cpp b/trunk/src/pagedef.cpp
deleted file mode 100644
index 7d7ac01..0000000
--- a/trunk/src/pagedef.cpp
+++ /dev/null
@@ -1,283 +0,0 @@
-#include "pagedef.h"
-#include "groupdef.h"
-#include "docparser.h"
-#include "config.h"
-#include "util.h"
-#include "outputlist.h"
-#include "doxygen.h"
-#include "language.h"
-#include <qregexp.h>
-
-
-PageDef::PageDef(const char *f,int l,const char *n,
- const char *d,const char *t)
- : Definition(f,l,n), m_title(t)
-{
- setDocumentation(d,f,l);
- m_subPageDict = new PageSDict(7);
- m_pageScope = 0;
- m_nestingLevel = 0;
- m_showToc = FALSE;
-}
-
-PageDef::~PageDef()
-{
- delete m_subPageDict;
-}
-
-void PageDef::findSectionsInDocumentation()
-{
- docFindSections(documentation(),this,0,docFile());
-}
-
-GroupDef *PageDef::getGroupDef() const
-{
- LockingPtr<GroupList> groups = partOfGroups();
- return groups!=0 ? groups->getFirst() : 0;
-}
-
-QCString PageDef::getOutputFileBase() const
-{
- if (getGroupDef())
- return getGroupDef()->getOutputFileBase();
- else
- return m_fileName;
-}
-
-void PageDef::addInnerCompound(Definition *def)
-{
- if (def->definitionType()==Definition::TypePage)
- {
- PageDef *pd = (PageDef*)def;
- m_subPageDict->append(pd->name(),pd);
- def->setOuterScope(this);
- if (this==Doxygen::mainPage)
- {
- pd->setNestingLevel(m_nestingLevel);
- }
- else
- {
- pd->setNestingLevel(m_nestingLevel+1);
- }
- }
-}
-
-bool PageDef::hasParentPage() const
-{
- return getOuterScope() &&
- getOuterScope()->definitionType()==Definition::TypePage;
-}
-
-void PageDef::writeDocumentation(OutputList &ol)
-{
- static bool generateTreeView = Config_getBool("GENERATE_TREEVIEW");
-
- //outputList->disable(OutputGenerator::Man);
- QCString pageName;
- pageName=escapeCharsInString(name(),FALSE,TRUE);
-
- //printf("PageDef::writeDocumentation: %s\n",getOutputFileBase().data());
-
- ol.pushGeneratorState();
- //1.{
-
- if (m_nestingLevel>0
- //&& // a sub page
- //(Doxygen::mainPage==0 || getOuterScope()!=Doxygen::mainPage) // and not a subpage of the mainpage
- )
- {
- // do not generate sub page output for RTF and LaTeX, as these are
- // part of their parent page
- ol.disableAll();
- ol.enable(OutputGenerator::Man);
- ol.enable(OutputGenerator::Html);
- }
-
- startFile(ol,getOutputFileBase(),pageName,title(),HLI_Pages,!generateTreeView);
-
- if (!generateTreeView)
- {
- if (getOuterScope()!=Doxygen::globalScope && !Config_getBool("DISABLE_INDEX"))
- {
- getOuterScope()->writeNavigationPath(ol);
- }
- ol.endQuickIndices();
- }
- SectionInfo *si=Doxygen::sectionDict.find(name());
-
- // save old generator state and write title only to Man generator
- ol.pushGeneratorState();
- //2.{
- ol.disableAllBut(OutputGenerator::Man);
- ol.startTitleHead(pageName);
- ol.endTitleHead(pageName, pageName);
- if (si)
- {
- ol.parseDoc(docFile(),docLine(),this,0,si->title,TRUE,FALSE,0,TRUE,FALSE);
- ol.endSection(si->label,si->type);
- }
- ol.popGeneratorState();
- //2.}
-
- // for Latex the section is already generated as a chapter in the index!
- ol.pushGeneratorState();
- //2.{
- ol.disable(OutputGenerator::Latex);
- ol.disable(OutputGenerator::RTF);
- ol.disable(OutputGenerator::Man);
- if (!title().isEmpty() && !name().isEmpty() && si!=0)
- {
- //ol.startSection(si->label,si->title,si->type);
- startTitle(ol,getOutputFileBase(),this);
- ol.parseDoc(docFile(),docLine(),this,0,si->title,TRUE,FALSE,0,TRUE,FALSE);
- //stringToSearchIndex(getOutputFileBase(),
- // theTranslator->trPage(TRUE,TRUE)+" "+si->title,
- // si->title);
- //ol.endSection(si->label,si->type);
- endTitle(ol,getOutputFileBase(),name());
- }
- ol.startContents();
- ol.popGeneratorState();
- //2.}
-
- if (m_showToc && hasSections())
- {
- writeToc(ol);
- }
-
- writePageDocumentation(ol);
-
- if (generateTreeView && getOuterScope()!=Doxygen::globalScope && !Config_getBool("DISABLE_INDEX"))
- {
- ol.endContents();
- endFileWithNavPath(getOuterScope(),ol);
- }
- else
- {
- endFile(ol);
- }
-
- ol.popGeneratorState();
- //1.}
-
- if (!Config_getString("GENERATE_TAGFILE").isEmpty())
- {
- bool found=FALSE;
- QDictIterator<RefList> rli(*Doxygen::xrefLists);
- RefList *rl;
- for (rli.toFirst();(rl=rli.current());++rli)
- {
- if (rl->listName()==name())
- {
- found=TRUE;
- break;
- }
- }
- if (!found) // not one of the generated related pages
- {
- Doxygen::tagFile << " <compound kind=\"page\">" << endl;
- Doxygen::tagFile << " <name>" << name() << "</name>" << endl;
- Doxygen::tagFile << " <title>" << convertToXML(title()) << "</title>" << endl;
- Doxygen::tagFile << " <filename>" << getOutputFileBase() << "</filename>" << endl;
- writeDocAnchorsToTagFile();
- Doxygen::tagFile << " </compound>" << endl;
- }
- }
-
- Doxygen::indexList.addIndexItem(this,0,filterTitle(title()));
-}
-
-void PageDef::writePageDocumentation(OutputList &ol)
-{
-
- bool markdownEnabled = Doxygen::markdownSupport;
- if (getLanguage()==SrcLangExt_Markdown)
- {
- Doxygen::markdownSupport = TRUE;
- }
-
- ol.startTextBlock();
- ol.parseDoc(
- docFile(), // fileName
- docLine(), // startLine
- this, // context
- 0, // memberdef
- documentation()+inbodyDocumentation(), // docStr
- TRUE, // index words
- FALSE // not an example
- );
- ol.endTextBlock();
-
- Doxygen::markdownSupport = markdownEnabled;
-
- if (hasSubPages())
- {
- // for printed documentation we write subpages as section's of the
- // parent page.
- ol.pushGeneratorState();
- ol.disableAll();
- ol.enable(OutputGenerator::Latex);
- ol.enable(OutputGenerator::RTF);
-
- PageSDict::Iterator pdi(*m_subPageDict);
- PageDef *subPage=pdi.toFirst();
- for (pdi.toFirst();(subPage=pdi.current());++pdi)
- {
- SectionInfo::SectionType sectionType = SectionInfo::Paragraph;
- switch (m_nestingLevel)
- {
- case 0: sectionType = SectionInfo::Page; break;
- case 1: sectionType = SectionInfo::Section; break;
- case 2: sectionType = SectionInfo::Subsection; break;
- case 3: sectionType = SectionInfo::Subsubsection; break;
- default: sectionType = SectionInfo::Paragraph; break;
- }
- QCString title = subPage->title();
- if (title.isEmpty()) title = subPage->name();
- ol.startSection(subPage->name(),title,sectionType);
- ol.parseText(title);
- ol.endSection(subPage->name(),sectionType);
- Doxygen::subpageNestingLevel++;
- subPage->writePageDocumentation(ol);
- Doxygen::subpageNestingLevel--;
- }
-
- ol.popGeneratorState();
- }
-}
-
-bool PageDef::visibleInIndex() const
-{
- return // not part of a group
- !getGroupDef() &&
- // not an externally defined page
- (!isReference() || Config_getBool("ALLEXTERNALS")) &&
- // not a subpage
- (getOuterScope()==0 ||
- getOuterScope()->definitionType()!=Definition::TypePage
- );
-}
-
-bool PageDef::documentedPage() const
-{
- return // not part of a group
- !getGroupDef() &&
- // not an externally defined page
- !isReference();
-}
-
-bool PageDef::hasSubPages() const
-{
- return m_subPageDict->count()>0;
-}
-
-void PageDef::setNestingLevel(int l)
-{
- m_nestingLevel = l;
-}
-
-void PageDef::setShowToc(bool b)
-{
- m_showToc = b;
-}
-
diff --git a/trunk/src/pagedef.h b/trunk/src/pagedef.h
deleted file mode 100644
index 54aab2e..0000000
--- a/trunk/src/pagedef.h
+++ /dev/null
@@ -1,86 +0,0 @@
-/******************************************************************************
- *
- *
- *
- * Copyright (C) 1997-2012 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.
- *
- */
-
-#include "definition.h"
-#include "sortdict.h"
-
-class PageSDict;
-class OutputList;
-
-class PageDef : public Definition
-{
- public:
- PageDef(const char *f,int l,const char *n,const char *d,const char *t);
- ~PageDef();
-
- // setters
- void setFileName(const char *name) { m_fileName = name; }
- void setShowToc(bool b);
-
- // getters
- DefType definitionType() const { return TypePage; }
- bool isLinkableInProject() const
- {
- return /*hasDocumentation() &&*/ !isReference();
- }
- bool isLinkable() const
- {
- return isLinkableInProject() || isReference();
- }
-
- // functions to get a uniform interface with Definitions
- QCString getOutputFileBase() const;
- QCString anchor() const { return QCString(); }
- void findSectionsInDocumentation();
- QCString title() const { return m_title; }
- GroupDef * getGroupDef() const;
- PageSDict * getSubPages() const { return m_subPageDict; }
- void addInnerCompound(Definition *d);
- bool visibleInIndex() const;
- bool documentedPage() const;
- bool hasSubPages() const;
- bool hasParentPage() const;
- bool showToc() const { return m_showToc; }
- void setPageScope(Definition *d){ m_pageScope = d; }
- Definition *getPageScope() const { return m_pageScope; }
- QCString displayName() const { return !m_title.isEmpty() ? m_title : Definition::name(); }
-
- void writeDocumentation(OutputList &ol);
-
- private:
- void setNestingLevel(int l);
- void writePageDocumentation(OutputList &ol);
- QCString m_fileName;
- QCString m_title;
- GroupDef *m_inGroup;
- PageSDict *m_subPageDict; // list of pages in the group
- Definition *m_pageScope;
- int m_nestingLevel;
- bool m_showToc;
-};
-
-class PageSDict : public SDict<PageDef>
-{
- public:
- PageSDict(int size) : SDict<PageDef>(size) {}
- virtual ~PageSDict() {}
- int compareItems(GCI i1,GCI i2)
- {
- return stricmp(((PageDef *)i1)->name(),((PageDef *)i2)->name());
- }
-};
-
diff --git a/trunk/src/parserintf.h b/trunk/src/parserintf.h
deleted file mode 100644
index db22088..0000000
--- a/trunk/src/parserintf.h
+++ /dev/null
@@ -1,171 +0,0 @@
-/******************************************************************************
- *
- *
- *
- * Copyright (C) 1997-2012 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.
- *
- */
-
-#ifndef PARSERINTF_H
-#define PARSERINTF_H
-
-#include <qdict.h>
-
-class Entry;
-class FileDef;
-class CodeOutputInterface;
-class MemberDef;
-
-/** \brief Abstract interface for programming language parsers.
- *
- * By implementing the methods of this interface one can add
- * a new language parser to doxygen. The parser can make use of the
- * comment block parser to parse the contents of special comment blocks.
- */
-class ParserInterface
-{
- public:
- virtual ~ParserInterface() {}
- /** Parses a single input file with the goal to build an Entry tree.
- * @param[in] fileName The full name of the file.
- * @param[in] fileBuf The contents of the file (zero terminated).
- * @param[in,out] root The root of the tree of Entry *nodes
- * representing the information extracted from the file.
- */
- virtual void parseInput(const char *fileName,
- const char *fileBuf,
- Entry *root) = 0;
-
- /** Returns TRUE if the language identified by \a extension needs
- * the C preprocessor to be run before feed the result to the input
- * parser.
- * @see parseInput()
- */
- virtual bool needsPreprocessing(const QCString &extension) = 0;
-
- /** Parses a source file or fragment with the goal to produce
- * highlighted and cross-referenced output.
- * @param[in] codeOutIntf Abstract interface for writing the result.
- * @param[in] scopeName Name of scope to which the code belongs.
- * @param[in] input Actual code in the form of a string
- * @param[in] isExampleBlock TRUE iff the code is part of an example.
- * @param[in] exampleName Name of the example.
- * @param[in] fileDef File definition to which the code
- * is associated.
- * @param[in] startLine Starting line in case of a code fragment.
- * @param[in] endLine Ending line of the code fragment.
- * @param[in] inlineFragment Code fragment that is to be shown inline
- * as part of the documentation.
- * @param[in] memberDef Member definition to which the code
- * is associated (non null in case of an inline fragment
- * for a member).
- * @param[in] showLineNumbers if set to TRUE and also fileDef is not 0,
- * line numbers will be added to the source fragement
- */
- virtual void parseCode(CodeOutputInterface &codeOutIntf,
- const char *scopeName,
- const QCString &input,
- bool isExampleBlock,
- const char *exampleName=0,
- FileDef *fileDef=0,
- int startLine=-1,
- int endLine=-1,
- bool inlineFragment=FALSE,
- MemberDef *memberDef=0,
- bool showLineNumbers=TRUE
- ) = 0;
-
- /** Resets the state of the code parser.
- * Since multiple code fragments can together form a single example, an
- * explicit function is used to reset the code parser state.
- * @see parseCode()
- */
- virtual void resetCodeParserState() = 0;
-
- /** Callback function called by the comment block scanner.
- * It provides a string \a text containing the prototype of a function
- * or variable. The parser should parse this and store the information
- * in the Entry node that corresponds with the node for which the
- * comment block parser was invoked.
- */
- virtual void parsePrototype(const char *text) = 0;
-
-};
-
-//-----------------------------------------------------------------------------
-
-/** \brief Manages programming language parsers.
- *
- * This class manages the language parsers in the system. One can
- * register parsers, and obtain a parser given a file extension.
- */
-class ParserManager
-{
- public:
- /** Creates the parser manager object.
- */
- ParserManager()
- : m_defaultParser(0) { m_parsers.setAutoDelete(TRUE); }
-
- /** Registers an additional parser.
- * @param[in] name A symbolic name of the parser, i.e. "c",
- * "python", "fortran", "vhdl", ...
- * @param[in] parser The parser that is to be used for the
- * given name.
- * @param[in] defParser Use this parser as the default parser, used
- * for unregistered file extensions.
- */
- void registerParser(const char *name,ParserInterface *parser,bool defParser=FALSE)
- {
- if (defParser && m_defaultParser==0) m_defaultParser=parser;
- m_parsers.insert(name,parser);
- }
-
- /** Registers a file \a extension with a parser with name \a parserName.
- * Returns TRUE if the extension was successfully registered.
- */
- bool registerExtension(const char *extension, const char *parserName)
- {
- if (parserName==0 || extension==0) return FALSE;
- ParserInterface *intf = m_parsers.find(parserName);
- if (intf==0) return FALSE;
- if (m_extensions.find(extension)!=0) // extension already exists
- {
- m_extensions.remove(extension); // remove it
- }
- m_extensions.insert(extension,intf); // add new mapping
- return TRUE;
- }
-
- /** Gets the interface to the parser associated with given \a extension.
- * If there is no parser explicitly registered for the supplied extension,
- * the interface to the default parser will be returned.
- */
- ParserInterface *getParser(const char *extension)
- {
- if (extension==0) return m_defaultParser;
- QCString ext = QCString(extension).lower();
- ParserInterface *intf = m_extensions.find(ext);
- if (intf==0 && ext.length()>4)
- {
- intf = m_extensions.find(ext.left(4));
- }
- return intf ? intf : m_defaultParser;
- }
-
- private:
- QDict<ParserInterface> m_parsers;
- QDict<ParserInterface> m_extensions;
- ParserInterface *m_defaultParser;
-};
-
-#endif
diff --git a/trunk/src/perlmodgen.cpp b/trunk/src/perlmodgen.cpp
deleted file mode 100644
index 054cc56..0000000
--- a/trunk/src/perlmodgen.cpp
+++ /dev/null
@@ -1,2930 +0,0 @@
-/******************************************************************************
- *
- *
- *
- *
- * Copyright (C) 1997-2012 by Dimitri van Heesch.
- * Authors: Dimitri van Heesch, Miguel Lobo.
- *
- * 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.
- *
- */
-
-#include <stdlib.h>
-
-#include "perlmodgen.h"
-#include "docparser.h"
-#include "message.h"
-#include "doxygen.h"
-#include "pagedef.h"
-
-#include <qdir.h>
-#include <qstack.h>
-#include <qdict.h>
-#include <qfile.h>
-#include "ftextstream.h"
-#include "arguments.h"
-
-#define PERLOUTPUT_MAX_INDENTATION 40
-
-class PerlModOutputStream
-{
-public:
-
- QCString m_s;
- FTextStream *m_t;
-
- PerlModOutputStream(FTextStream *t = 0) : m_t(t) { }
-
- void add(char c);
- void add(const char *s);
- void add(QCString &s);
- void add(int n);
- void add(unsigned int n);
-};
-
-void PerlModOutputStream::add(char c)
-{
- if (m_t != 0)
- (*m_t) << c;
- else
- m_s += c;
-}
-
-void PerlModOutputStream::add(const char *s)
-{
- if (m_t != 0)
- (*m_t) << s;
- else
- m_s += s;
-}
-
-void PerlModOutputStream::add(QCString &s)
-{
- if (m_t != 0)
- (*m_t) << s;
- else
- m_s += s;
-}
-
-void PerlModOutputStream::add(int n)
-{
- if (m_t != 0)
- (*m_t) << n;
- else
- m_s += n;
-}
-
-void PerlModOutputStream::add(unsigned int n)
-{
- if (m_t != 0)
- (*m_t) << n;
- else
- m_s += n;
-}
-
-class PerlModOutput
-{
-public:
-
- bool m_pretty;
-
- inline PerlModOutput(bool pretty)
- : m_pretty(pretty), m_stream(0), m_indentation(false), m_blockstart(true)
- {
- m_spaces[0] = 0;
- }
-
- virtual ~PerlModOutput() { }
-
- inline void setPerlModOutputStream(PerlModOutputStream *os) { m_stream = os; }
-
- inline PerlModOutput &openSave() { iopenSave(); return *this; }
- inline PerlModOutput &closeSave(QCString &s) { icloseSave(s); return *this; }
-
- inline PerlModOutput &continueBlock()
- {
- if (m_blockstart)
- m_blockstart = false;
- else
- m_stream->add(',');
- indent();
- return *this;
- }
-
- inline PerlModOutput &add(char c) { m_stream->add(c); return *this; }
- inline PerlModOutput &add(const char *s) { m_stream->add(s); return *this; }
- inline PerlModOutput &add(QCString &s) { m_stream->add(s); return *this; }
- inline PerlModOutput &add(int n) { m_stream->add(n); return *this; }
- inline PerlModOutput &add(unsigned int n) { m_stream->add(n); return *this; }
-
- PerlModOutput &addQuoted(const char *s) { iaddQuoted(s); return *this; }
-
- inline PerlModOutput &indent()
- {
- if (m_pretty) {
- m_stream->add('\n');
- m_stream->add(m_spaces);
- }
- return *this;
- }
-
- inline PerlModOutput &open(char c, const char *s = 0) { iopen(c, s); return *this; }
- inline PerlModOutput &close(char c = 0) { iclose(c); return *this; }
-
- inline PerlModOutput &addField(const char *s) { iaddField(s); return *this; }
- inline PerlModOutput &addFieldQuotedChar(const char *field, char content)
- {
- iaddFieldQuotedChar(field, content); return *this;
- }
- inline PerlModOutput &addFieldQuotedString(const char *field, const char *content)
- {
- iaddFieldQuotedString(field, content); return *this;
- }
- inline PerlModOutput &addFieldBoolean(const char *field, bool content)
- {
- return addFieldQuotedString(field, content ? "yes" : "no");
- }
- inline PerlModOutput &openList(const char *s = 0) { open('[', s); return *this; }
- inline PerlModOutput &closeList() { close(']'); return *this; }
- inline PerlModOutput &openHash(const char *s = 0 ) { open('{', s); return *this; }
- inline PerlModOutput &closeHash() { close('}'); return *this; }
-
-protected:
-
- void iopenSave();
- void icloseSave(QCString &);
-
- void incIndent();
- void decIndent();
-
- void iaddQuoted(const char *);
- void iaddFieldQuotedChar(const char *, char);
- void iaddFieldQuotedString(const char *, const char *);
- void iaddField(const char *);
-
- void iopen(char, const char *);
- void iclose(char);
-
-private:
-
- PerlModOutputStream *m_stream;
- int m_indentation;
- bool m_blockstart;
-
- QStack<PerlModOutputStream> m_saved;
- char m_spaces[PERLOUTPUT_MAX_INDENTATION * 2 + 2];
-};
-
-void PerlModOutput::iopenSave()
-{
- m_saved.push(m_stream);
- m_stream = new PerlModOutputStream();
-}
-
-void PerlModOutput::icloseSave(QCString &s)
-{
- s = m_stream->m_s;
- delete m_stream;
- m_stream = m_saved.pop();
-}
-
-void PerlModOutput::incIndent()
-{
- if (m_indentation < PERLOUTPUT_MAX_INDENTATION)
- {
- char *s = &m_spaces[m_indentation * 2];
- *s++ = ' '; *s++ = ' '; *s = 0;
- }
- m_indentation++;
-}
-
-void PerlModOutput::decIndent()
-{
- m_indentation--;
- if (m_indentation < PERLOUTPUT_MAX_INDENTATION)
- m_spaces[m_indentation * 2] = 0;
-}
-
-void PerlModOutput::iaddQuoted(const char *s)
-{
- char c;
- while ((c = *s++) != 0) {
- if ((c == '\'') || (c == '\\'))
- m_stream->add('\\');
- m_stream->add(c);
- }
-}
-
-void PerlModOutput::iaddField(const char *s)
-{
- continueBlock();
- m_stream->add(s);
- m_stream->add(m_pretty ? " => " : "=>");
-}
-
-void PerlModOutput::iaddFieldQuotedChar(const char *field, char content)
-{
- iaddField(field);
- m_stream->add('\'');
- if ((content == '\'') || (content == '\\'))
- m_stream->add('\\');
- m_stream->add(content);
- m_stream->add('\'');
-}
-
-void PerlModOutput::iaddFieldQuotedString(const char *field, const char *content)
-{
- if (content == 0)
- return;
- iaddField(field);
- m_stream->add('\'');
- iaddQuoted(content);
- m_stream->add('\'');
-}
-
-void PerlModOutput::iopen(char c, const char *s)
-{
- if (s != 0)
- iaddField(s);
- else
- continueBlock();
- m_stream->add(c);
- incIndent();
- m_blockstart = true;
-}
-
-void PerlModOutput::iclose(char c)
-{
- decIndent();
- indent();
- if (c != 0)
- m_stream->add(c);
- m_blockstart = false;
-}
-
-/*! @brief Concrete visitor implementation for PerlMod output. */
-class PerlModDocVisitor : public DocVisitor
-{
-public:
- PerlModDocVisitor(PerlModOutput &);
- virtual ~PerlModDocVisitor() { }
-
- void finish();
-
- //--------------------------------------
- // visitor functions for leaf nodes
- //--------------------------------------
-
- void visit(DocWord *);
- void visit(DocLinkedWord *);
- void visit(DocWhiteSpace *);
- void visit(DocSymbol *);
- void visit(DocURL *);
- void visit(DocLineBreak *);
- void visit(DocHorRuler *);
- void visit(DocStyleChange *);
- void visit(DocVerbatim *);
- void visit(DocAnchor *);
- void visit(DocInclude *);
- void visit(DocIncOperator *);
- void visit(DocFormula *);
- void visit(DocIndexEntry *);
- void visit(DocSimpleSectSep *);
- void visit(DocCite *);
-
- //--------------------------------------
- // visitor functions for compound nodes
- //--------------------------------------
-
- void visitPre(DocAutoList *);
- void visitPost(DocAutoList *);
- void visitPre(DocAutoListItem *);
- void visitPost(DocAutoListItem *);
- void visitPre(DocPara *) ;
- void visitPost(DocPara *);
- void visitPre(DocRoot *);
- void visitPost(DocRoot *);
- void visitPre(DocSimpleSect *);
- void visitPost(DocSimpleSect *);
- void visitPre(DocTitle *);
- void visitPost(DocTitle *);
- void visitPre(DocSimpleList *);
- void visitPost(DocSimpleList *);
- void visitPre(DocSimpleListItem *);
- void visitPost(DocSimpleListItem *);
- void visitPre(DocSection *);
- void visitPost(DocSection *);
- void visitPre(DocHtmlList *);
- void visitPost(DocHtmlList *) ;
- void visitPre(DocHtmlListItem *);
- void visitPost(DocHtmlListItem *);
- //void visitPre(DocHtmlPre *);
- //void visitPost(DocHtmlPre *);
- void visitPre(DocHtmlDescList *);
- void visitPost(DocHtmlDescList *);
- void visitPre(DocHtmlDescTitle *);
- void visitPost(DocHtmlDescTitle *);
- void visitPre(DocHtmlDescData *);
- void visitPost(DocHtmlDescData *);
- void visitPre(DocHtmlTable *);
- void visitPost(DocHtmlTable *);
- void visitPre(DocHtmlRow *);
- void visitPost(DocHtmlRow *) ;
- void visitPre(DocHtmlCell *);
- void visitPost(DocHtmlCell *);
- void visitPre(DocHtmlCaption *);
- void visitPost(DocHtmlCaption *);
- void visitPre(DocInternal *);
- void visitPost(DocInternal *);
- void visitPre(DocHRef *);
- void visitPost(DocHRef *);
- void visitPre(DocHtmlHeader *);
- void visitPost(DocHtmlHeader *);
- void visitPre(DocImage *);
- void visitPost(DocImage *);
- void visitPre(DocDotFile *);
- void visitPost(DocDotFile *);
- void visitPre(DocMscFile *);
- void visitPost(DocMscFile *);
- void visitPre(DocLink *);
- void visitPost(DocLink *);
- void visitPre(DocRef *);
- void visitPost(DocRef *);
- void visitPre(DocSecRefItem *);
- void visitPost(DocSecRefItem *);
- void visitPre(DocSecRefList *);
- void visitPost(DocSecRefList *);
- //void visitPre(DocLanguage *);
- //void visitPost(DocLanguage *);
- void visitPre(DocParamSect *);
- void visitPost(DocParamSect *);
- void visitPre(DocParamList *);
- void visitPost(DocParamList *);
- void visitPre(DocXRefItem *);
- void visitPost(DocXRefItem *);
- void visitPre(DocInternalRef *);
- void visitPost(DocInternalRef *);
- void visitPre(DocCopy *);
- void visitPost(DocCopy *);
- void visitPre(DocText *);
- void visitPost(DocText *);
- void visitPre(DocHtmlBlockQuote *);
- void visitPost(DocHtmlBlockQuote *);
-
-private:
-
- //--------------------------------------
- // helper functions
- //--------------------------------------
-
- void addLink(const QCString &ref, const QCString &file,
- const QCString &anchor);
-
- void enterText();
- void leaveText();
-
- void openItem(const char *);
- void closeItem();
- void singleItem(const char *);
- void openSubBlock(const char * = 0);
- void closeSubBlock();
- void openOther();
- void closeOther();
-
- //--------------------------------------
- // state variables
- //--------------------------------------
-
- PerlModOutput &m_output;
- bool m_textmode;
- bool m_textblockstart;
- QCString m_other;
-};
-
-PerlModDocVisitor::PerlModDocVisitor(PerlModOutput &output)
- : DocVisitor(DocVisitor_Other), m_output(output), m_textmode(false)
-{
- m_output.openList("doc");
-}
-
-void PerlModDocVisitor::finish()
-{
- leaveText();
- m_output.closeList()
- .add(m_other);
-}
-
-void PerlModDocVisitor::addLink(const QCString &,const QCString &file,const QCString &anchor)
-{
- QCString link = file;
- if (!anchor.isEmpty())
- (link += "_1") += anchor;
- m_output.addFieldQuotedString("link", link);
-}
-
-void PerlModDocVisitor::openItem(const char *name)
-{
- leaveText();
- m_output.openHash().addFieldQuotedString("type", name);
-}
-
-void PerlModDocVisitor::closeItem()
-{
- leaveText();
- m_output.closeHash();
-}
-
-void PerlModDocVisitor::enterText()
-{
- if (m_textmode)
- return;
- openItem("text");
- m_output.addField("content").add('\'');
- m_textmode = true;
-}
-
-void PerlModDocVisitor::leaveText()
-{
- if (!m_textmode)
- return;
- m_textmode = false;
- m_output
- .add('\'')
- .closeHash();
-}
-
-void PerlModDocVisitor::singleItem(const char *name)
-{
- openItem(name);
- closeItem();
-}
-
-void PerlModDocVisitor::openSubBlock(const char *s)
-{
- leaveText();
- m_output.openList(s);
- m_textblockstart = true;
-}
-
-void PerlModDocVisitor::closeSubBlock()
-{
- leaveText();
- m_output.closeList();
-}
-
-void PerlModDocVisitor::openOther()
-{
- // Using a secondary text stream will corrupt the perl file. Instead of
- // printing doc => [ data => [] ], it will print doc => [] data => [].
- /*
- leaveText();
- m_output.openSave();
- */
-}
-
-void PerlModDocVisitor::closeOther()
-{
- // Using a secondary text stream will corrupt the perl file. Instead of
- // printing doc => [ data => [] ], it will print doc => [] data => [].
- /*
- QCString other;
- leaveText();
- m_output.closeSave(other);
- m_other += other;
- */
-}
-
-void PerlModDocVisitor::visit(DocWord *w)
-{
- enterText();
- m_output.addQuoted(w->word());
-}
-
-void PerlModDocVisitor::visit(DocLinkedWord *w)
-{
- openItem("url");
- addLink(w->ref(), w->file(), w->anchor());
- m_output.addFieldQuotedString("content", w->word());
- closeItem();
-}
-
-void PerlModDocVisitor::visit(DocWhiteSpace *)
-{
- enterText();
- m_output.add(' ');
-}
-
-void PerlModDocVisitor::visit(DocSymbol *sy)
-{
- char c = 0;
- const char *s = 0;
- const char *accent = 0;
- const char *symbol = 0;
- switch(sy->symbol())
- {
- case DocSymbol::At: c = '@'; break;
- case DocSymbol::Less: c = '<'; break;
- case DocSymbol::Greater: c = '>'; break;
- case DocSymbol::Amp: c = '&'; break;
- case DocSymbol::Dollar: c = '$'; break;
- case DocSymbol::Hash: c = '#'; break;
- case DocSymbol::DoubleColon: s = "::"; break;
- case DocSymbol::Percent: c = '%'; break;
- case DocSymbol::Quot: c = '"'; break;
- case DocSymbol::Lsquo: s = "\\\'"; break;
- case DocSymbol::Rsquo: s = "\\\'"; break;
- case DocSymbol::Ldquo: c = '"'; break;
- case DocSymbol::Rdquo: c = '"'; break;
- case DocSymbol::Ndash: c = '-'; break;
- case DocSymbol::Mdash: s = "--"; break;
- case DocSymbol::Nbsp: c = ' '; break;
- case DocSymbol::Uml: accent = "umlaut"; break;
- case DocSymbol::Acute: accent = "acute"; break;
- case DocSymbol::Grave: accent = "grave"; break;
- case DocSymbol::Circ: accent = "circ"; break;
- case DocSymbol::Slash: accent = "slash"; break;
- case DocSymbol::Tilde: accent = "tilde"; break;
- case DocSymbol::Cedil: accent = "cedilla"; break;
- case DocSymbol::Ring: accent = "ring"; break;
- case DocSymbol::BSlash: s = "\\\\"; break;
- case DocSymbol::Copy: symbol = "copyright"; break;
- case DocSymbol::Tm: symbol = "trademark"; break;
- case DocSymbol::Reg: symbol = "registered"; break;
- case DocSymbol::Szlig: symbol = "szlig"; break;
- case DocSymbol::Apos: s = "\\\'"; break;
- case DocSymbol::Aelig: symbol = "aelig"; break;
- case DocSymbol::AElig: symbol = "AElig"; break;
- case DocSymbol::Unknown: err("error: unknown symbol found\n");
- break;
- }
- if (c != 0)
- {
- enterText();
- m_output.add(c);
- }
- else if (s != 0)
- {
- enterText();
- m_output.add(s);
- }
- else if (symbol != 0)
- {
- leaveText();
- openItem("symbol");
- m_output.addFieldQuotedString("symbol", symbol);
- closeItem();
- }
- else if (accent != 0)
- {
- leaveText();
- openItem("accent");
- m_output
- .addFieldQuotedString("accent", accent)
- .addFieldQuotedChar("letter", sy->letter());
- closeItem();
- }
-}
-
-void PerlModDocVisitor::visit(DocURL *u)
-{
- openItem("url");
- m_output.addFieldQuotedString("content", u->url());
- closeItem();
-}
-
-void PerlModDocVisitor::visit(DocLineBreak *) { singleItem("linebreak"); }
-void PerlModDocVisitor::visit(DocHorRuler *) { singleItem("hruler"); }
-
-void PerlModDocVisitor::visit(DocStyleChange *s)
-{
- const char *style = 0;
- switch (s->style())
- {
- case DocStyleChange::Bold: style = "bold"; break;
- case DocStyleChange::Italic: style = "italic"; break;
- case DocStyleChange::Code: style = "code"; break;
- case DocStyleChange::Subscript: style = "subscript"; break;
- case DocStyleChange::Superscript: style = "superscript"; break;
- case DocStyleChange::Center: style = "center"; break;
- case DocStyleChange::Small: style = "small"; break;
- case DocStyleChange::Preformatted: style = "preformatted"; break;
- case DocStyleChange::Div: style = "div"; break;
- case DocStyleChange::Span: style = "span"; break;
-
- }
- openItem("style");
- m_output.addFieldQuotedString("style", style)
- .addFieldBoolean("enable", s->enable());
- closeItem();
-}
-
-void PerlModDocVisitor::visit(DocVerbatim *s)
-{
- const char *type = 0;
- switch(s->type())
- {
- case DocVerbatim::Code:
-#if 0
- m_output.add("<programlisting>");
- parseCode(m_ci,s->context(),s->text(),FALSE,0);
- m_output.add("</programlisting>");
-#endif
- return;
- case DocVerbatim::Verbatim: type = "preformatted"; break;
- case DocVerbatim::HtmlOnly: type = "htmlonly"; break;
- case DocVerbatim::ManOnly: type = "manonly"; break;
- case DocVerbatim::LatexOnly: type = "latexonly"; break;
- case DocVerbatim::XmlOnly: type = "xmlonly"; break;
- case DocVerbatim::Dot: type = "dot"; break;
- case DocVerbatim::Msc: type = "msc"; break;
- }
- openItem(type);
- m_output.addFieldQuotedString("content", s->text());
- closeItem();
-}
-
-void PerlModDocVisitor::visit(DocAnchor *anc)
-{
- QCString anchor = anc->file() + "_1" + anc->anchor();
- openItem("anchor");
- m_output.addFieldQuotedString("id", anchor);
- closeItem();
-}
-
-void PerlModDocVisitor::visit(DocInclude *inc)
-{
- const char *type = 0;
- switch(inc->type())
- {
- case DocInclude::IncWithLines:
- #if 0
- {
- m_t << "<div class=\"fragment\"><pre>";
- QFileInfo cfi( inc->file() );
- FileDef fd( cfi.dirPath(), cfi.fileName() );
- parseCode(m_ci,inc->context(),inc->text().latin1(),inc->isExample(),inc->exampleFile(), &fd);
- m_t << "</pre></div>";
- }
- break;
- #endif
- return;
- case DocInclude::Include:
-#if 0
- m_output.add("<programlisting>");
- parseCode(m_ci,inc->context(),inc->text(),FALSE,0);
- m_output.add("</programlisting>");
-#endif
- return;
- case DocInclude::DontInclude: return;
- case DocInclude::HtmlInclude: type = "htmlonly"; break;
- case DocInclude::VerbInclude: type = "preformatted"; break;
- case DocInclude::Snippet: return;
- }
- openItem(type);
- m_output.addFieldQuotedString("content", inc->text());
- closeItem();
-}
-
-void PerlModDocVisitor::visit(DocIncOperator *)
-{
-#if 0
- //printf("DocIncOperator: type=%d first=%d, last=%d text=`%s'\n",
- // op->type(),op->isFirst(),op->isLast(),op->text().data());
- if (op->isFirst())
- {
- m_output.add("<programlisting>");
- }
- if (op->type()!=DocIncOperator::Skip)
- {
- parseCode(m_ci,op->context(),op->text(),FALSE,0);
- }
- if (op->isLast())
- {
- m_output.add("</programlisting>");
- }
- else
- {
- m_output.add('\n');
- }
-#endif
-}
-
-void PerlModDocVisitor::visit(DocFormula *f)
-{
- openItem("formula");
- QCString id;
- id += f->id();
- m_output.addFieldQuotedString("id", id).addFieldQuotedString("content", f->text());
- closeItem();
-}
-
-void PerlModDocVisitor::visit(DocIndexEntry *)
-{
-#if 0
- m_output.add("<indexentry>"
- "<primaryie>");
- m_output.addQuoted(ie->entry());
- m_output.add("</primaryie>"
- "<secondaryie></secondaryie>"
- "</indexentry>");
-#endif
-}
-
-void PerlModDocVisitor::visit(DocSimpleSectSep *)
-{
-}
-
-void PerlModDocVisitor::visit(DocCite *cite)
-{
- openItem("cite");
- m_output.addFieldQuotedString("text", cite->text());
- closeItem();
-}
-
-
-//--------------------------------------
-// visitor functions for compound nodes
-//--------------------------------------
-
-void PerlModDocVisitor::visitPre(DocAutoList *l)
-{
- openItem("list");
- m_output.addFieldQuotedString("style", l->isEnumList() ? "ordered" : "itemized");
- openSubBlock("content");
-}
-
-void PerlModDocVisitor::visitPost(DocAutoList *)
-{
- closeSubBlock();
- closeItem();
-}
-
-void PerlModDocVisitor::visitPre(DocAutoListItem *)
-{
- openSubBlock();
-}
-
-void PerlModDocVisitor::visitPost(DocAutoListItem *)
-{
- closeSubBlock();
-}
-
-void PerlModDocVisitor::visitPre(DocPara *)
-{
- if (m_textblockstart)
- m_textblockstart = false;
- else
- singleItem("parbreak");
- /*
- openItem("para");
- openSubBlock("content");
- */
-}
-
-void PerlModDocVisitor::visitPost(DocPara *)
-{
- /*
- closeSubBlock();
- closeItem();
- */
-}
-
-void PerlModDocVisitor::visitPre(DocRoot *)
-{
-}
-
-void PerlModDocVisitor::visitPost(DocRoot *)
-{
-}
-
-void PerlModDocVisitor::visitPre(DocSimpleSect *s)
-{
- const char *type = 0;
- switch (s->type())
- {
- case DocSimpleSect::See: type = "see"; break;
- case DocSimpleSect::Return: type = "return"; break;
- case DocSimpleSect::Author: type = "author"; break;
- case DocSimpleSect::Authors: type = "authors"; break;
- case DocSimpleSect::Version: type = "version"; break;
- case DocSimpleSect::Since: type = "since"; break;
- case DocSimpleSect::Date: type = "date"; break;
- case DocSimpleSect::Note: type = "note"; break;
- case DocSimpleSect::Warning: type = "warning"; break;
- case DocSimpleSect::Pre: type = "pre"; break;
- case DocSimpleSect::Post: type = "post"; break;
- case DocSimpleSect::Copyright: type = "copyright"; break;
- case DocSimpleSect::Invar: type = "invariant"; break;
- case DocSimpleSect::Remark: type = "remark"; break;
- case DocSimpleSect::Attention: type = "attention"; break;
- case DocSimpleSect::User: type = "par"; break;
- case DocSimpleSect::Rcs: type = "rcs"; break;
- case DocSimpleSect::Unknown:
- err("error: unknown simple section found\n");
- break;
- }
- leaveText();
- m_output.openHash();
- openOther();
- openSubBlock(type);
-}
-
-void PerlModDocVisitor::visitPost(DocSimpleSect *)
-{
- closeSubBlock();
- closeOther();
- m_output.closeHash();
-}
-
-void PerlModDocVisitor::visitPre(DocTitle *)
-{
- openItem("title");
- openSubBlock("content");
-}
-
-void PerlModDocVisitor::visitPost(DocTitle *)
-{
- closeSubBlock();
- closeItem();
-}
-
-void PerlModDocVisitor::visitPre(DocSimpleList *)
-{
- openItem("list");
- m_output.addFieldQuotedString("style", "itemized");
- openSubBlock("content");
-}
-
-void PerlModDocVisitor::visitPost(DocSimpleList *)
-{
- closeSubBlock();
- closeItem();
-}
-
-void PerlModDocVisitor::visitPre(DocSimpleListItem *) { openSubBlock(); }
-void PerlModDocVisitor::visitPost(DocSimpleListItem *) { closeSubBlock(); }
-
-void PerlModDocVisitor::visitPre(DocSection *s)
-{
- QCString sect = QCString().sprintf("sect%d",s->level());
- openItem(sect);
- openSubBlock("content");
-}
-
-void PerlModDocVisitor::visitPost(DocSection *)
-{
- closeSubBlock();
- closeItem();
-}
-
-void PerlModDocVisitor::visitPre(DocHtmlList *l)
-{
- openItem("list");
- m_output.addFieldQuotedString("style", (l->type() == DocHtmlList::Ordered) ? "ordered" : "itemized");
- openSubBlock("content");
-}
-
-void PerlModDocVisitor::visitPost(DocHtmlList *)
-{
- closeSubBlock();
- closeItem();
-}
-
-void PerlModDocVisitor::visitPre(DocHtmlListItem *) { openSubBlock(); }
-void PerlModDocVisitor::visitPost(DocHtmlListItem *) { closeSubBlock(); }
-
-//void PerlModDocVisitor::visitPre(DocHtmlPre *)
-//{
-// openItem("preformatted");
-// openSubBlock("content");
-// //m_insidePre=TRUE;
-//}
-
-//void PerlModDocVisitor::visitPost(DocHtmlPre *)
-//{
-// //m_insidePre=FALSE;
-// closeSubBlock();
-// closeItem();
-//}
-
-void PerlModDocVisitor::visitPre(DocHtmlDescList *)
-{
-#if 0
- m_output.add("<variablelist>\n");
-#endif
-}
-
-void PerlModDocVisitor::visitPost(DocHtmlDescList *)
-{
-#if 0
- m_output.add("</variablelist>\n");
-#endif
-}
-
-void PerlModDocVisitor::visitPre(DocHtmlDescTitle *)
-{
-#if 0
- m_output.add("<varlistentry><term>");
-#endif
-}
-
-void PerlModDocVisitor::visitPost(DocHtmlDescTitle *)
-{
-#if 0
- m_output.add("</term></varlistentry>\n");
-#endif
-}
-
-void PerlModDocVisitor::visitPre(DocHtmlDescData *)
-{
-#if 0
- m_output.add("<listitem>");
-#endif
-}
-
-void PerlModDocVisitor::visitPost(DocHtmlDescData *)
-{
-#if 0
- m_output.add("</listitem>\n");
-#endif
-}
-
-void PerlModDocVisitor::visitPre(DocHtmlTable *)
-{
-#if 0
- m_output.add("<table rows=\""); m_output.add(t->numRows());
- m_output.add("\" cols=\""); m_output.add(t->numCols()); m_output.add("\">");
-#endif
-}
-
-void PerlModDocVisitor::visitPost(DocHtmlTable *)
-{
-#if 0
- m_output.add("</table>\n");
-#endif
-}
-
-void PerlModDocVisitor::visitPre(DocHtmlRow *)
-{
-#if 0
- m_output.add("<row>\n");
-#endif
-}
-
-void PerlModDocVisitor::visitPost(DocHtmlRow *)
-{
-#if 0
- m_output.add("</row>\n");
-#endif
-}
-
-void PerlModDocVisitor::visitPre(DocHtmlCell *)
-{
-#if 0
- if (c->isHeading()) m_output.add("<entry thead=\"yes\">"); else m_output.add("<entry thead=\"no\">");
-#endif
-}
-
-void PerlModDocVisitor::visitPost(DocHtmlCell *)
-{
-#if 0
- m_output.add("</entry>");
-#endif
-}
-
-void PerlModDocVisitor::visitPre(DocHtmlCaption *)
-{
-#if 0
- m_output.add("<caption>");
-#endif
-}
-
-void PerlModDocVisitor::visitPost(DocHtmlCaption *)
-{
-#if 0
- m_output.add("</caption>\n");
-#endif
-}
-
-void PerlModDocVisitor::visitPre(DocInternal *)
-{
-#if 0
- m_output.add("<internal>");
-#endif
-}
-
-void PerlModDocVisitor::visitPost(DocInternal *)
-{
-#if 0
- m_output.add("</internal>");
-#endif
-}
-
-void PerlModDocVisitor::visitPre(DocHRef *)
-{
-#if 0
- m_output.add("<ulink url=\""); m_output.add(href->url()); m_output.add("\">");
-#endif
-}
-
-void PerlModDocVisitor::visitPost(DocHRef *)
-{
-#if 0
- m_output.add("</ulink>");
-#endif
-}
-
-void PerlModDocVisitor::visitPre(DocHtmlHeader *)
-{
-#if 0
- m_output.add("<sect"); m_output.add(header->level()); m_output.add(">");
-#endif
-}
-
-void PerlModDocVisitor::visitPost(DocHtmlHeader *)
-{
-#if 0
- m_output.add("</sect"); m_output.add(header->level()); m_output.add(">\n");
-#endif
-}
-
-void PerlModDocVisitor::visitPre(DocImage *)
-{
-#if 0
- m_output.add("<image type=\"");
- switch(img->type())
- {
- case DocImage::Html: m_output.add("html"); break;
- case DocImage::Latex: m_output.add("latex"); break;
- case DocImage::Rtf: m_output.add("rtf"); break;
- }
- m_output.add("\"");
-
- QCString baseName=img->name();
- int i;
- if ((i=baseName.findRev('/'))!=-1 || (i=baseName.findRev('\\'))!=-1)
- {
- baseName=baseName.right(baseName.length()-i-1);
- }
- m_output.add(" name=\""); m_output.add(baseName); m_output.add("\"");
- if (!img->width().isEmpty())
- {
- m_output.add(" width=\"");
- m_output.addQuoted(img->width());
- m_output.add("\"");
- }
- else if (!img->height().isEmpty())
- {
- m_output.add(" height=\"");
- m_output.addQuoted(img->height());
- m_output.add("\"");
- }
- m_output.add(">");
-#endif
-}
-
-void PerlModDocVisitor::visitPost(DocImage *)
-{
-#if 0
- m_output.add("</image>");
-#endif
-}
-
-void PerlModDocVisitor::visitPre(DocDotFile *)
-{
-#if 0
- m_output.add("<dotfile name=\""); m_output.add(df->file()); m_output.add("\">");
-#endif
-}
-
-void PerlModDocVisitor::visitPost(DocDotFile *)
-{
-#if 0
- m_output.add("</dotfile>");
-#endif
-}
-void PerlModDocVisitor::visitPre(DocMscFile *)
-{
-#if 0
- m_output.add("<mscfile name=\""); m_output.add(df->file()); m_output.add("\">");
-#endif
-}
-
-void PerlModDocVisitor::visitPost(DocMscFile *)
-{
-#if 0
- m_output.add("<mscfile>");
-#endif
-}
-
-
-void PerlModDocVisitor::visitPre(DocLink *lnk)
-{
- openItem("link");
- addLink(lnk->ref(), lnk->file(), lnk->anchor());
-}
-
-void PerlModDocVisitor::visitPost(DocLink *)
-{
- closeItem();
-}
-
-void PerlModDocVisitor::visitPre(DocRef *ref)
-{
- openItem("ref");
- if (!ref->hasLinkText())
- m_output.addFieldQuotedString("text", ref->targetTitle());
- openSubBlock("content");
-}
-
-void PerlModDocVisitor::visitPost(DocRef *)
-{
- closeSubBlock();
- closeItem();
-}
-
-void PerlModDocVisitor::visitPre(DocSecRefItem *)
-{
-#if 0
- m_output.add("<tocitem id=\""); m_output.add(ref->file()); m_output.add("_1"); m_output.add(ref->anchor()); m_output.add("\">");
-#endif
-}
-
-void PerlModDocVisitor::visitPost(DocSecRefItem *)
-{
-#if 0
- m_output.add("</tocitem>");
-#endif
-}
-
-void PerlModDocVisitor::visitPre(DocSecRefList *)
-{
-#if 0
- m_output.add("<toclist>");
-#endif
-}
-
-void PerlModDocVisitor::visitPost(DocSecRefList *)
-{
-#if 0
- m_output.add("</toclist>");
-#endif
-}
-
-//void PerlModDocVisitor::visitPre(DocLanguage *l)
-//{
-// openItem("language");
-// m_output.addFieldQuotedString("id", l->id());
-//}
-//
-//void PerlModDocVisitor::visitPost(DocLanguage *)
-//{
-// closeItem();
-//}
-
-void PerlModDocVisitor::visitPre(DocParamSect *s)
-{
- leaveText();
- const char *type = 0;
- switch(s->type())
- {
- case DocParamSect::Param: type = "params"; break;
- case DocParamSect::RetVal: type = "retvals"; break;
- case DocParamSect::Exception: type = "exceptions"; break;
- case DocParamSect::TemplateParam: type = "templateparam"; break;
- case DocParamSect::Unknown:
- err("error: unknown parameter section found\n");
- break;
- }
- openOther();
- openSubBlock(type);
-}
-
-void PerlModDocVisitor::visitPost(DocParamSect *)
-{
- closeSubBlock();
- closeOther();
-}
-
-void PerlModDocVisitor::visitPre(DocParamList *pl)
-{
- leaveText();
- m_output.openHash()
- .openList("parameters");
- //QStrListIterator li(pl->parameters());
- //const char *s;
- QListIterator<DocNode> li(pl->parameters());
- DocNode *param;
- for (li.toFirst();(param=li.current());++li)
- {
- QCString s;
- if (param->kind()==DocNode::Kind_Word)
- {
- s = ((DocWord*)param)->word();
- }
- else if (param->kind()==DocNode::Kind_LinkedWord)
- {
- s = ((DocLinkedWord*)param)->word();
- }
- m_output.openHash()
- .addFieldQuotedString("name", s)
- .closeHash();
- }
- m_output.closeList()
- .openList("doc");
-}
-
-void PerlModDocVisitor::visitPost(DocParamList *)
-{
- leaveText();
- m_output.closeList()
- .closeHash();
-}
-
-void PerlModDocVisitor::visitPre(DocXRefItem *)
-{
-#if 0
- m_output.add("<xrefsect id=\"");
- m_output.add(x->file()); m_output.add("_1"); m_output.add(x->anchor());
- m_output.add("\">");
- m_output.add("<xreftitle>");
- m_output.addQuoted(x->title());
- m_output.add("</xreftitle>");
- m_output.add("<xrefdescription>");
-#endif
- openItem("xrefitem");
- openSubBlock("content");
-}
-
-void PerlModDocVisitor::visitPost(DocXRefItem *)
-{
- closeSubBlock();
- closeItem();
-#if 0
- m_output.add("</xrefdescription>");
- m_output.add("</xrefsect>");
-#endif
-}
-
-void PerlModDocVisitor::visitPre(DocInternalRef *ref)
-{
- openItem("ref");
- addLink(0,ref->file(),ref->anchor());
- openSubBlock("content");
-}
-
-void PerlModDocVisitor::visitPost(DocInternalRef *)
-{
- closeSubBlock();
- closeItem();
-}
-
-void PerlModDocVisitor::visitPre(DocCopy *)
-{
-}
-
-void PerlModDocVisitor::visitPost(DocCopy *)
-{
-}
-
-void PerlModDocVisitor::visitPre(DocText *)
-{
-}
-
-void PerlModDocVisitor::visitPost(DocText *)
-{
-}
-
-void PerlModDocVisitor::visitPre(DocHtmlBlockQuote *)
-{
- openItem("blockquote");
- openSubBlock("content");
-}
-
-void PerlModDocVisitor::visitPost(DocHtmlBlockQuote *)
-{
- closeSubBlock();
- closeItem();
-}
-
-static void addTemplateArgumentList(ArgumentList *al,PerlModOutput &output,const char *)
-{
- QCString indentStr;
- if (!al)
- return;
- output.openList("template_parameters");
- ArgumentListIterator ali(*al);
- Argument *a;
- for (ali.toFirst();(a=ali.current());++ali)
- {
- output.openHash();
- if (!a->type.isEmpty())
- output.addFieldQuotedString("type", a->type);
- if (!a->name.isEmpty())
- output.addFieldQuotedString("declaration_name", a->name)
- .addFieldQuotedString("definition_name", a->name);
- if (!a->defval.isEmpty())
- output.addFieldQuotedString("default", a->defval);
- output.closeHash();
- }
- output.closeList();
-}
-
-#if 0
-static void addMemberTemplateLists(MemberDef *md,PerlModOutput &output)
-{
- ClassDef *cd = md->getClassDef();
- const char *cname = cd ? cd->name().data() : 0;
- if (md->templateArguments()) // function template prefix
- addTemplateArgumentList(md->templateArguments(),output,cname);
-}
-#endif
-
-static void addTemplateList(ClassDef *cd,PerlModOutput &output)
-{
- addTemplateArgumentList(cd->templateArguments(),output,cd->name());
-}
-
-static void addPerlModDocBlock(PerlModOutput &output,
- const char *name,
- const QCString &fileName,
- int lineNr,
- Definition *scope,
- MemberDef *md,
- const QCString &text)
-{
- QCString stext = text.stripWhiteSpace();
- if (stext.isEmpty())
- output.addField(name).add("{}");
- else {
- DocNode *root = validatingParseDoc(fileName,lineNr,scope,md,stext,FALSE,0);
- output.openHash(name);
- PerlModDocVisitor *visitor = new PerlModDocVisitor(output);
- root->accept(visitor);
- visitor->finish();
- output.closeHash();
- delete visitor;
- delete root;
- }
-}
-
-static const char *getProtectionName(Protection prot)
-{
- switch (prot)
- {
- case Public: return "public";
- case Protected: return "protected";
- case Private: return "private";
- case Package: return "package";
- }
- return 0;
-}
-
-static const char *getVirtualnessName(Specifier virt)
-{
- switch(virt)
- {
- case Normal: return "non_virtual";
- case Virtual: return "virtual";
- case Pure: return "pure_virtual";
- }
- return 0;
-}
-
-static QCString pathDoxyfile;
-static QCString pathDoxyExec;
-
-void setPerlModDoxyfile(const QCString &qs)
-{
- pathDoxyfile = qs;
- pathDoxyExec = QDir::currentDirPath();
-}
-
-class PerlModGenerator
-{
-public:
-
- PerlModOutput m_output;
-
- QCString pathDoxyStructurePM;
- QCString pathDoxyDocsTex;
- QCString pathDoxyFormatTex;
- QCString pathDoxyLatexTex;
- QCString pathDoxyLatexDVI;
- QCString pathDoxyLatexPDF;
- QCString pathDoxyStructureTex;
- QCString pathDoxyDocsPM;
- QCString pathDoxyLatexPL;
- QCString pathDoxyLatexStructurePL;
- QCString pathDoxyRules;
- QCString pathMakefile;
-
- inline PerlModGenerator(bool pretty) : m_output(pretty) { }
-
- void generatePerlModForMember(MemberDef *md, Definition *);
- void generatePerlModSection(Definition *d, MemberList *ml,
- const char *name, const char *header=0);
- void addListOfAllMembers(ClassDef *cd);
- void generatePerlModForClass(ClassDef *cd);
- void generatePerlModForNamespace(NamespaceDef *nd);
- void generatePerlModForFile(FileDef *fd);
- void generatePerlModForGroup(GroupDef *gd);
- void generatePerlModForPage(PageDef *pi);
-
- bool createOutputFile(QFile &f, const char *s);
- bool createOutputDir(QDir &perlModDir);
- bool generateDoxyLatexTex();
- bool generateDoxyFormatTex();
- bool generateDoxyStructurePM();
- bool generateDoxyLatexPL();
- bool generateDoxyLatexStructurePL();
- bool generateDoxyRules();
- bool generateMakefile();
- bool generatePerlModOutput();
-
- void generate();
-};
-
-void PerlModGenerator::generatePerlModForMember(MemberDef *md,Definition *)
-{
- // + declaration/definition arg lists
- // + reimplements
- // + reimplementedBy
- // + exceptions
- // + const/volatile specifiers
- // - examples
- // - source definition
- // - source references
- // - source referenced by
- // - body code
- // - template arguments
- // (templateArguments(), definitionTemplateParameterLists())
-
- QCString memType;
- bool isFunc=FALSE;
- switch (md->memberType())
- {
- case MemberDef::Define: memType="define"; break;
- case MemberDef::EnumValue: memType="enumvalue"; break;
- case MemberDef::Property: memType="property"; break;
- case MemberDef::Variable: memType="variable"; break;
- case MemberDef::Typedef: memType="typedef"; break;
- case MemberDef::Enumeration: memType="enum"; break;
- case MemberDef::Function: memType="function"; isFunc=TRUE; break;
- case MemberDef::Signal: memType="signal"; isFunc=TRUE; break;
- //case MemberDef::Prototype: memType="prototype"; isFunc=TRUE; break;
- case MemberDef::Friend: memType="friend"; isFunc=TRUE; break;
- case MemberDef::DCOP: memType="dcop"; isFunc=TRUE; break;
- case MemberDef::Slot: memType="slot"; isFunc=TRUE; break;
- case MemberDef::Event: memType="event"; break;
- }
-
- m_output.openHash()
- .addFieldQuotedString("kind", memType)
- .addFieldQuotedString("name", md->name())
- .addFieldQuotedString("virtualness", getVirtualnessName(md->virtualness()))
- .addFieldQuotedString("protection", getProtectionName(md->protection()))
- .addFieldBoolean("static", md->isStatic());
-
- addPerlModDocBlock(m_output,"brief",md->getDefFileName(),md->getDefLine(),md->getOuterScope(),md,md->briefDescription());
- addPerlModDocBlock(m_output,"detailed",md->getDefFileName(),md->getDefLine(),md->getOuterScope(),md,md->documentation());
- if (md->memberType()!=MemberDef::Define &&
- md->memberType()!=MemberDef::Enumeration)
- m_output.addFieldQuotedString("type", md->typeString());
-
- LockingPtr<ArgumentList> al = md->argumentList();
- if (isFunc) //function
- {
- m_output.addFieldBoolean("const", al!=0 && al->constSpecifier)
- .addFieldBoolean("volatile", al!=0 && al->volatileSpecifier);
-
- m_output.openList("parameters");
- LockingPtr<ArgumentList> declAl = md->declArgumentList();
- LockingPtr<ArgumentList> defAl = md->argumentList();
- if (declAl!=0 && declAl->count()>0)
- {
- ArgumentListIterator declAli(*declAl);
- ArgumentListIterator defAli(*defAl);
- Argument *a;
- for (declAli.toFirst();(a=declAli.current());++declAli)
- {
- Argument *defArg = defAli.current();
- m_output.openHash();
-
- if (!a->name.isEmpty())
- m_output.addFieldQuotedString("declaration_name", a->name);
-
- if (defArg && !defArg->name.isEmpty() && defArg->name!=a->name)
- m_output.addFieldQuotedString("definition_name", defArg->name);
-
- if (!a->type.isEmpty())
- m_output.addFieldQuotedString("type", a->type);
-
- if (!a->array.isEmpty())
- m_output.addFieldQuotedString("array", a->array);
-
- if (!a->defval.isEmpty())
- m_output.addFieldQuotedString("default_value", a->defval);
-
- if (!a->attrib.isEmpty())
- m_output.addFieldQuotedString("attributes", a->attrib);
-
- m_output.closeHash();
- if (defArg) ++defAli;
- }
- }
- m_output.closeList();
- }
- else if (md->memberType()==MemberDef::Define &&
- md->argsString()!=0) // define
- {
- m_output.openList("parameters");
- ArgumentListIterator ali(*al);
- Argument *a;
- for (ali.toFirst();(a=ali.current());++ali)
- {
- m_output.openHash()
- .addFieldQuotedString("name", a->type)
- .closeHash();
- }
- m_output.closeList();
- }
- else if (md->argsString()!=0)
- {
- m_output.addFieldQuotedString("arguments", md->argsString());
- }
-
- if (!md->initializer().isEmpty())
- m_output.addFieldQuotedString("initializer", md->initializer());
-
- if (md->excpString())
- m_output.addFieldQuotedString("exceptions", md->excpString());
-
- if (md->memberType()==MemberDef::Enumeration) // enum
- {
- LockingPtr<MemberList> enumFields = md->enumFieldList();
- if (enumFields!=0)
- {
- m_output.openList("values");
- MemberListIterator emli(*enumFields);
- MemberDef *emd;
- for (emli.toFirst();(emd=emli.current());++emli)
- {
- m_output.openHash()
- .addFieldQuotedString("name", emd->name());
-
- if (!emd->initializer().isEmpty())
- m_output.addFieldQuotedString("initializer", emd->initializer());
-
- addPerlModDocBlock(m_output,"brief",emd->getDefFileName(),emd->getDefLine(),emd->getOuterScope(),emd,emd->briefDescription());
-
- addPerlModDocBlock(m_output,"detailed",emd->getDefFileName(),emd->getDefLine(),emd->getOuterScope(),emd,emd->documentation());
-
- m_output.closeHash();
- }
- m_output.closeList();
- }
- }
-
- MemberDef *rmd = md->reimplements();
- if (rmd)
- m_output.openHash("reimplements")
- .addFieldQuotedString("name", rmd->name())
- .closeHash();
-
- LockingPtr<MemberList> rbml = md->reimplementedBy();
- if (rbml!=0)
- {
- MemberListIterator mli(*rbml);
- m_output.openList("reimplemented_by");
- for (mli.toFirst();(rmd=mli.current());++mli)
- m_output.openHash()
- .addFieldQuotedString("name", rmd->name())
- .closeHash();
- m_output.closeList();
- }
-
- m_output.closeHash();
-}
-
-void PerlModGenerator::generatePerlModSection(Definition *d,
- MemberList *ml,const char *name,const char *header)
-{
- if (ml==0) return; // empty list
-
- m_output.openHash(name);
-
- if (header)
- m_output.addFieldQuotedString("header", header);
-
- m_output.openList("members");
- MemberListIterator mli(*ml);
- MemberDef *md;
- for (mli.toFirst();(md=mli.current());++mli)
- {
- generatePerlModForMember(md,d);
- }
- m_output.closeList()
- .closeHash();
-}
-
-void PerlModGenerator::addListOfAllMembers(ClassDef *cd)
-{
- m_output.openList("all_members");
- if (cd->memberNameInfoSDict())
- {
- MemberNameInfoSDict::Iterator mnii(*cd->memberNameInfoSDict());
- MemberNameInfo *mni;
- for (mnii.toFirst();(mni=mnii.current());++mnii)
- {
- MemberNameInfoIterator mii(*mni);
- MemberInfo *mi;
- for (mii.toFirst();(mi=mii.current());++mii)
- {
- MemberDef *md=mi->memberDef;
- ClassDef *cd=md->getClassDef();
- Definition *d=md->getGroupDef();
- if (d==0) d = cd;
-
- m_output.openHash()
- .addFieldQuotedString("name", md->name())
- .addFieldQuotedString("virtualness", getVirtualnessName(md->virtualness()))
- .addFieldQuotedString("protection", getProtectionName(mi->prot));
-
- if (!mi->ambiguityResolutionScope.isEmpty())
- m_output.addFieldQuotedString("ambiguity_scope", mi->ambiguityResolutionScope);
-
- m_output.addFieldQuotedString("scope", cd->name())
- .closeHash();
- }
- }
- }
- m_output.closeList();
-}
-
-void PerlModGenerator::generatePerlModForClass(ClassDef *cd)
-{
- // + brief description
- // + detailed description
- // + template argument list(s)
- // - include file
- // + member groups
- // + inheritance diagram
- // + list of direct super classes
- // + list of direct sub classes
- // + list of inner classes
- // + collaboration diagram
- // + list of all members
- // + user defined member sections
- // + standard member sections
- // + detailed member documentation
- // - examples using the class
-
- if (cd->isReference()) return; // skip external references.
- if (cd->name().find('@')!=-1) return; // skip anonymous compounds.
- if (cd->templateMaster()!=0) return; // skip generated template instances.
-
- m_output.openHash()
- .addFieldQuotedString("name", cd->name());
-
- if (cd->baseClasses())
- {
- m_output.openList("base");
- BaseClassListIterator bcli(*cd->baseClasses());
- BaseClassDef *bcd;
- for (bcli.toFirst();(bcd=bcli.current());++bcli)
- m_output.openHash()
- .addFieldQuotedString("name", bcd->classDef->displayName())
- .addFieldQuotedString("virtualness", getVirtualnessName(bcd->virt))
- .addFieldQuotedString("protection", getProtectionName(bcd->prot))
- .closeHash();
- m_output.closeList();
- }
-
- if (cd->subClasses())
- {
- m_output.openList("derived");
- BaseClassListIterator bcli(*cd->subClasses());
- BaseClassDef *bcd;
- for (bcli.toFirst();(bcd=bcli.current());++bcli)
- m_output.openHash()
- .addFieldQuotedString("name", bcd->classDef->displayName())
- .addFieldQuotedString("virtualness", getVirtualnessName(bcd->virt))
- .addFieldQuotedString("protection", getProtectionName(bcd->prot))
- .closeHash();
- m_output.closeList();
- }
-
- ClassSDict *cl = cd->getClassSDict();
- if (cl)
- {
- m_output.openList("inner");
- ClassSDict::Iterator cli(*cl);
- ClassDef *cd;
- for (cli.toFirst();(cd=cli.current());++cli)
- m_output.openHash()
- .addFieldQuotedString("name", cd->name())
- .closeHash();
- m_output.closeList();
- }
-
- IncludeInfo *ii=cd->includeInfo();
- if (ii)
- {
- QCString nm = ii->includeName;
- if (nm.isEmpty() && ii->fileDef) nm = ii->fileDef->docName();
- if (!nm.isEmpty())
- {
- m_output.openHash("includes");
-#if 0
- if (ii->fileDef && !ii->fileDef->isReference()) // TODO: support external references
- t << " id=\"" << ii->fileDef->getOutputFileBase() << "\"";
-#endif
- m_output.addFieldBoolean("local", ii->local)
- .addFieldQuotedString("name", nm)
- .closeHash();
- }
- }
-
- addTemplateList(cd,m_output);
- addListOfAllMembers(cd);
- if (cd->getMemberGroupSDict())
- {
- MemberGroupSDict::Iterator mgli(*cd->getMemberGroupSDict());
- MemberGroup *mg;
- for (;(mg=mgli.current());++mgli)
- generatePerlModSection(cd,mg->members(),"user_defined",mg->header());
- }
-
- generatePerlModSection(cd,cd->getMemberList(MemberList::pubTypes),"public_typedefs");
- generatePerlModSection(cd,cd->getMemberList(MemberList::pubMethods),"public_methods");
- generatePerlModSection(cd,cd->getMemberList(MemberList::pubAttribs),"public_members");
- generatePerlModSection(cd,cd->getMemberList(MemberList::pubSlots),"public_slots");
- generatePerlModSection(cd,cd->getMemberList(MemberList::signals),"signals");
- generatePerlModSection(cd,cd->getMemberList(MemberList::dcopMethods),"dcop_methods");
- generatePerlModSection(cd,cd->getMemberList(MemberList::properties),"properties");
- generatePerlModSection(cd,cd->getMemberList(MemberList::pubStaticMethods),"public_static_methods");
- generatePerlModSection(cd,cd->getMemberList(MemberList::pubStaticAttribs),"public_static_members");
- generatePerlModSection(cd,cd->getMemberList(MemberList::proTypes),"protected_typedefs");
- generatePerlModSection(cd,cd->getMemberList(MemberList::proMethods),"protected_methods");
- generatePerlModSection(cd,cd->getMemberList(MemberList::proAttribs),"protected_members");
- generatePerlModSection(cd,cd->getMemberList(MemberList::proSlots),"protected_slots");
- generatePerlModSection(cd,cd->getMemberList(MemberList::proStaticMethods),"protected_static_methods");
- generatePerlModSection(cd,cd->getMemberList(MemberList::proStaticAttribs),"protected_static_members");
- generatePerlModSection(cd,cd->getMemberList(MemberList::priTypes),"private_typedefs");
- generatePerlModSection(cd,cd->getMemberList(MemberList::priMethods),"private_methods");
- generatePerlModSection(cd,cd->getMemberList(MemberList::priAttribs),"private_members");
- generatePerlModSection(cd,cd->getMemberList(MemberList::priSlots),"private_slots");
- generatePerlModSection(cd,cd->getMemberList(MemberList::priStaticMethods),"private_static_methods");
- generatePerlModSection(cd,cd->getMemberList(MemberList::priStaticAttribs),"private_static_members");
- generatePerlModSection(cd,cd->getMemberList(MemberList::friends),"friend_methods");
- generatePerlModSection(cd,cd->getMemberList(MemberList::related),"related_methods");
-
- addPerlModDocBlock(m_output,"brief",cd->getDefFileName(),cd->getDefLine(),cd,0,cd->briefDescription());
- addPerlModDocBlock(m_output,"detailed",cd->getDefFileName(),cd->getDefLine(),cd,0,cd->documentation());
-
-#if 0
- DotClassGraph inheritanceGraph(cd,DotClassGraph::Inheritance);
- if (!inheritanceGraph.isTrivial())
- {
- t << " <inheritancegraph>" << endl;
- inheritanceGraph.writePerlMod(t);
- t << " </inheritancegraph>" << endl;
- }
- DotClassGraph collaborationGraph(cd,DotClassGraph::Implementation);
- if (!collaborationGraph.isTrivial())
- {
- t << " <collaborationgraph>" << endl;
- collaborationGraph.writePerlMod(t);
- t << " </collaborationgraph>" << endl;
- }
- t << " <location file=\""
- << cd->getDefFileName() << "\" line=\""
- << cd->getDefLine() << "\"";
- if (cd->getStartBodyLine()!=-1)
- {
- t << " bodystart=\"" << cd->getStartBodyLine() << "\" bodyend=\""
- << cd->getEndBodyLine() << "\"";
- }
- t << "/>" << endl;
-#endif
-
- m_output.closeHash();
-}
-
-void PerlModGenerator::generatePerlModForNamespace(NamespaceDef *nd)
-{
- // + contained class definitions
- // + contained namespace definitions
- // + member groups
- // + normal members
- // + brief desc
- // + detailed desc
- // + location
- // - files containing (parts of) the namespace definition
-
- if (nd->isReference()) return; // skip external references
-
- m_output.openHash()
- .addFieldQuotedString("name", nd->name());
-
- ClassSDict *cl = nd->getClassSDict();
- if (cl)
- {
- m_output.openList("classes");
- ClassSDict::Iterator cli(*cl);
- ClassDef *cd;
- for (cli.toFirst();(cd=cli.current());++cli)
- m_output.openHash()
- .addFieldQuotedString("name", cd->name())
- .closeHash();
- m_output.closeList();
- }
-
- NamespaceSDict *nl = nd->getNamespaceSDict();
- if (nl)
- {
- m_output.openList("namespaces");
- NamespaceSDict::Iterator nli(*nl);
- NamespaceDef *nd;
- for (nli.toFirst();(nd=nli.current());++nli)
- m_output.openHash()
- .addFieldQuotedString("name", nd->name())
- .closeHash();
- m_output.closeList();
- }
-
- if (nd->getMemberGroupSDict())
- {
- MemberGroupSDict::Iterator mgli(*nd->getMemberGroupSDict());
- MemberGroup *mg;
- for (;(mg=mgli.current());++mgli)
- generatePerlModSection(nd,mg->members(),"user-defined",mg->header());
- }
-
- generatePerlModSection(nd,nd->getMemberList(MemberList::decDefineMembers),"defines");
- generatePerlModSection(nd,nd->getMemberList(MemberList::decProtoMembers),"prototypes");
- generatePerlModSection(nd,nd->getMemberList(MemberList::decTypedefMembers),"typedefs");
- generatePerlModSection(nd,nd->getMemberList(MemberList::decEnumMembers),"enums");
- generatePerlModSection(nd,nd->getMemberList(MemberList::decFuncMembers),"functions");
- generatePerlModSection(nd,nd->getMemberList(MemberList::decVarMembers),"variables");
-
- addPerlModDocBlock(m_output,"brief",nd->getDefFileName(),nd->getDefLine(),0,0,nd->briefDescription());
- addPerlModDocBlock(m_output,"detailed",nd->getDefFileName(),nd->getDefLine(),0,0,nd->documentation());
-
- m_output.closeHash();
-}
-
-void PerlModGenerator::generatePerlModForFile(FileDef *fd)
-{
- // + includes files
- // + includedby files
- // - include graph
- // - included by graph
- // - contained class definitions
- // - contained namespace definitions
- // - member groups
- // + normal members
- // + brief desc
- // + detailed desc
- // - source code
- // - location
- // - number of lines
-
- if (fd->isReference()) return;
-
- m_output.openHash()
- .addFieldQuotedString("name", fd->name());
-
- IncludeInfo *inc;
- m_output.openList("includes");
- if (fd->includeFileList())
- {
- QListIterator<IncludeInfo> ili1(*fd->includeFileList());
- for (ili1.toFirst();(inc=ili1.current());++ili1)
- {
- m_output.openHash()
- .addFieldQuotedString("name", inc->includeName);
- if (inc->fileDef && !inc->fileDef->isReference())
- {
- m_output.addFieldQuotedString("ref", inc->fileDef->getOutputFileBase());
- }
- m_output.closeHash();
- }
- }
- m_output.closeList();
-
- m_output.openList("included_by");
- if (fd->includedByFileList())
- {
- QListIterator<IncludeInfo> ili2(*fd->includedByFileList());
- for (ili2.toFirst();(inc=ili2.current());++ili2)
- {
- m_output.openHash()
- .addFieldQuotedString("name", inc->includeName);
- if (inc->fileDef && !inc->fileDef->isReference())
- {
- m_output.addFieldQuotedString("ref", inc->fileDef->getOutputFileBase());
- }
- m_output.closeHash();
- }
- }
- m_output.closeList();
-
- generatePerlModSection(fd,fd->getMemberList(MemberList::decDefineMembers),"defines");
- generatePerlModSection(fd,fd->getMemberList(MemberList::decProtoMembers),"prototypes");
- generatePerlModSection(fd,fd->getMemberList(MemberList::decTypedefMembers),"typedefs");
- generatePerlModSection(fd,fd->getMemberList(MemberList::decEnumMembers),"enums");
- generatePerlModSection(fd,fd->getMemberList(MemberList::decFuncMembers),"functions");
- generatePerlModSection(fd,fd->getMemberList(MemberList::decVarMembers),"variables");
-
- addPerlModDocBlock(m_output,"brief",fd->getDefFileName(),fd->getDefLine(),0,0,fd->briefDescription());
- addPerlModDocBlock(m_output,"detailed",fd->getDefFileName(),fd->getDefLine(),0,0,fd->documentation());
-
- m_output.closeHash();
-}
-
-void PerlModGenerator::generatePerlModForGroup(GroupDef *gd)
-{
- // + members
- // + member groups
- // + files
- // + classes
- // + namespaces
- // - packages
- // + pages
- // + child groups
- // - examples
- // + brief description
- // + detailed description
-
- if (gd->isReference()) return; // skip external references
-
- m_output.openHash()
- .addFieldQuotedString("name", gd->name())
- .addFieldQuotedString("title", gd->groupTitle());
-
- FileList *fl = gd->getFiles();
- if (fl)
- {
- m_output.openList("files");
- QListIterator<FileDef> fli(*fl);
- FileDef *fd = fl->first();
- for (fli.toFirst();(fd=fli.current());++fli)
- m_output.openHash()
- .addFieldQuotedString("name", fd->name())
- .closeHash();
- m_output.closeList();
- }
-
- ClassSDict *cl = gd->getClasses();
- if (cl)
- {
- m_output.openList("classes");
- ClassSDict::Iterator cli(*cl);
- ClassDef *cd;
- for (cli.toFirst();(cd=cli.current());++cli)
- m_output.openHash()
- .addFieldQuotedString("name", cd->name())
- .closeHash();
- m_output.closeList();
- }
-
- NamespaceSDict *nl = gd->getNamespaces();
- if (nl)
- {
- m_output.openList("namespaces");
- NamespaceSDict::Iterator nli(*nl);
- NamespaceDef *nd;
- for (nli.toFirst();(nd=nli.current());++nli)
- m_output.openHash()
- .addFieldQuotedString("name", nd->name())
- .closeHash();
- m_output.closeList();
- }
-
- PageSDict *pl = gd->getPages();
- if (pl)
- {
- m_output.openList("pages");
- PageSDict::Iterator pli(*pl);
- PageDef *pd;
- for (pli.toFirst();(pd=pli.current());++pli)
- m_output.openHash()
- .addFieldQuotedString("title", pd->title())
- .closeHash();
- m_output.closeList();
- }
-
- GroupList *gl = gd->getSubGroups();
- if (gl)
- {
- m_output.openList("groups");
- GroupListIterator gli(*gl);
- GroupDef *sgd;
- for (gli.toFirst();(sgd=gli.current());++gli)
- m_output.openHash()
- .addFieldQuotedString("title", sgd->groupTitle())
- .closeHash();
- m_output.closeList();
- }
-
- if (gd->getMemberGroupSDict())
- {
- MemberGroupSDict::Iterator mgli(*gd->getMemberGroupSDict());
- MemberGroup *mg;
- for (;(mg=mgli.current());++mgli)
- generatePerlModSection(gd,mg->members(),"user-defined",mg->header());
- }
-
- generatePerlModSection(gd,gd->getMemberList(MemberList::decDefineMembers),"defines");
- generatePerlModSection(gd,gd->getMemberList(MemberList::decProtoMembers),"prototypes");
- generatePerlModSection(gd,gd->getMemberList(MemberList::decTypedefMembers),"typedefs");
- generatePerlModSection(gd,gd->getMemberList(MemberList::decEnumMembers),"enums");
- generatePerlModSection(gd,gd->getMemberList(MemberList::decFuncMembers),"functions");
- generatePerlModSection(gd,gd->getMemberList(MemberList::decVarMembers),"variables");
-
- addPerlModDocBlock(m_output,"brief",gd->getDefFileName(),gd->getDefLine(),0,0,gd->briefDescription());
- addPerlModDocBlock(m_output,"detailed",gd->getDefFileName(),gd->getDefLine(),0,0,gd->documentation());
-
- m_output.closeHash();
-}
-
-void PerlModGenerator::generatePerlModForPage(PageDef *pd)
-{
- // + name
- // + title
- // + documentation
-
- if (pd->isReference()) return;
-
- m_output.openHash()
- .addFieldQuotedString("name", pd->name());
-
- SectionInfo *si = Doxygen::sectionDict.find(pd->name());
- if (si)
- m_output.addFieldQuotedString("title", si->title);
-
- addPerlModDocBlock(m_output,"detailed",pd->docFile(),pd->docLine(),0,0,pd->documentation());
- m_output.closeHash();
-}
-
-bool PerlModGenerator::generatePerlModOutput()
-{
- QFile outputFile;
- if (!createOutputFile(outputFile, pathDoxyDocsPM))
- return false;
-
- FTextStream outputTextStream(&outputFile);
- PerlModOutputStream outputStream(&outputTextStream);
- m_output.setPerlModOutputStream(&outputStream);
- m_output.add("$doxydocs=").openHash();
-
- m_output.openList("classes");
- ClassSDict::Iterator cli(*Doxygen::classSDict);
- ClassDef *cd;
- for (cli.toFirst();(cd=cli.current());++cli)
- generatePerlModForClass(cd);
- m_output.closeList();
-
- m_output.openList("namespaces");
- NamespaceSDict::Iterator nli(*Doxygen::namespaceSDict);
- NamespaceDef *nd;
- for (nli.toFirst();(nd=nli.current());++nli)
- generatePerlModForNamespace(nd);
- m_output.closeList();
-
- m_output.openList("files");
- FileNameListIterator fnli(*Doxygen::inputNameList);
- FileName *fn;
- for (;(fn=fnli.current());++fnli)
- {
- FileNameIterator fni(*fn);
- FileDef *fd;
- for (;(fd=fni.current());++fni)
- generatePerlModForFile(fd);
- }
- m_output.closeList();
-
- m_output.openList("groups");
- GroupSDict::Iterator gli(*Doxygen::groupSDict);
- GroupDef *gd;
- for (;(gd=gli.current());++gli)
- {
- generatePerlModForGroup(gd);
- }
- m_output.closeList();
-
- m_output.openList("pages");
- PageSDict::Iterator pdi(*Doxygen::pageSDict);
- PageDef *pd=0;
- for (pdi.toFirst();(pd=pdi.current());++pdi)
- {
- generatePerlModForPage(pd);
- }
- if (Doxygen::mainPage)
- {
- generatePerlModForPage(Doxygen::mainPage);
- }
- m_output.closeList();
-
- m_output.closeHash().add(";\n1;\n");
- return true;
-}
-
-bool PerlModGenerator::createOutputFile(QFile &f, const char *s)
-{
- f.setName(s);
- if (!f.open(IO_WriteOnly))
- {
- err("Cannot open file %s for writing!\n", s);
- return false;
- }
- return true;
-}
-
-bool PerlModGenerator::createOutputDir(QDir &perlModDir)
-{
- QCString outputDirectory = Config_getString("OUTPUT_DIRECTORY");
- if (outputDirectory.isEmpty())
- {
- outputDirectory=QDir::currentDirPath();
- }
- else
- {
- QDir dir(outputDirectory);
- if (!dir.exists())
- {
- dir.setPath(QDir::currentDirPath());
- if (!dir.mkdir(outputDirectory))
- {
- err("error: tag OUTPUT_DIRECTORY: Output directory `%s' does not "
- "exist and cannot be created\n",outputDirectory.data());
- exit(1);
- }
- else if (!Config_getBool("QUIET"))
- {
- err("notice: Output directory `%s' does not exist. "
- "I have created it for you.\n", outputDirectory.data());
- }
- dir.cd(outputDirectory);
- }
- outputDirectory=dir.absPath();
- }
-
- QDir dir(outputDirectory);
- if (!dir.exists())
- {
- dir.setPath(QDir::currentDirPath());
- if (!dir.mkdir(outputDirectory))
- {
- err("Cannot create directory %s\n",outputDirectory.data());
- return false;
- }
- }
-
- perlModDir.setPath(outputDirectory+"/perlmod");
- if (!perlModDir.exists() && !perlModDir.mkdir(outputDirectory+"/perlmod"))
- {
- err("Could not create perlmod directory in %s\n",outputDirectory.data());
- return false;
- }
- return true;
-}
-
-bool PerlModGenerator::generateDoxyStructurePM()
-{
- QFile doxyModelPM;
- if (!createOutputFile(doxyModelPM, pathDoxyStructurePM))
- return false;
-
- FTextStream doxyModelPMStream(&doxyModelPM);
- doxyModelPMStream <<
- "sub memberlist($) {\n"
- " my $prefix = $_[0];\n"
- " return\n"
- "\t[ \"hash\", $prefix . \"s\",\n"
- "\t {\n"
- "\t members =>\n"
- "\t [ \"list\", $prefix . \"List\",\n"
- "\t\t[ \"hash\", $prefix,\n"
- "\t\t {\n"
- "\t\t kind => [ \"string\", $prefix . \"Kind\" ],\n"
- "\t\t name => [ \"string\", $prefix . \"Name\" ],\n"
- "\t\t static => [ \"string\", $prefix . \"Static\" ],\n"
- "\t\t virtualness => [ \"string\", $prefix . \"Virtualness\" ],\n"
- "\t\t protection => [ \"string\", $prefix . \"Protection\" ],\n"
- "\t\t type => [ \"string\", $prefix . \"Type\" ],\n"
- "\t\t parameters =>\n"
- "\t\t [ \"list\", $prefix . \"Params\",\n"
- "\t\t\t[ \"hash\", $prefix . \"Param\",\n"
- "\t\t\t {\n"
- "\t\t\t declaration_name => [ \"string\", $prefix . \"ParamName\" ],\n"
- "\t\t\t type => [ \"string\", $prefix . \"ParamType\" ],\n"
- "\t\t\t },\n"
- "\t\t\t],\n"
- "\t\t ],\n"
- "\t\t detailed =>\n"
- "\t\t [ \"hash\", $prefix . \"Detailed\",\n"
- "\t\t\t{\n"
- "\t\t\t doc => [ \"doc\", $prefix . \"DetailedDoc\" ],\n"
- "\t\t\t return => [ \"doc\", $prefix . \"Return\" ],\n"
- "\t\t\t see => [ \"doc\", $prefix . \"See\" ],\n"
- "\t\t\t params =>\n"
- "\t\t\t [ \"list\", $prefix . \"PDBlocks\",\n"
- "\t\t\t [ \"hash\", $prefix . \"PDBlock\",\n"
- "\t\t\t\t{\n"
- "\t\t\t\t parameters =>\n"
- "\t\t\t\t [ \"list\", $prefix . \"PDParams\",\n"
- "\t\t\t\t [ \"hash\", $prefix . \"PDParam\",\n"
- "\t\t\t\t\t{\n"
- "\t\t\t\t\t name => [ \"string\", $prefix . \"PDParamName\" ],\n"
- "\t\t\t\t\t},\n"
- "\t\t\t\t ],\n"
- "\t\t\t\t ],\n"
- "\t\t\t\t doc => [ \"doc\", $prefix . \"PDDoc\" ],\n"
- "\t\t\t\t},\n"
- "\t\t\t ],\n"
- "\t\t\t ],\n"
- "\t\t\t},\n"
- "\t\t ],\n"
- "\t\t },\n"
- "\t\t],\n"
- "\t ],\n"
- "\t },\n"
- "\t];\n"
- "}\n"
- "\n"
- "$doxystructure =\n"
- " [ \"hash\", \"Root\",\n"
- " {\n"
- "\tfiles =>\n"
- "\t [ \"list\", \"Files\",\n"
- "\t [ \"hash\", \"File\",\n"
- "\t {\n"
- "\t\tname => [ \"string\", \"FileName\" ],\n"
- "\t\ttypedefs => memberlist(\"FileTypedef\"),\n"
- "\t\tvariables => memberlist(\"FileVariable\"),\n"
- "\t\tfunctions => memberlist(\"FileFunction\"),\n"
- "\t\tdetailed =>\n"
- "\t\t [ \"hash\", \"FileDetailed\",\n"
- "\t\t {\n"
- "\t\t doc => [ \"doc\", \"FileDetailedDoc\" ],\n"
- "\t\t },\n"
- "\t\t ],\n"
- "\t },\n"
- "\t ],\n"
- "\t ],\n"
- "\tpages =>\n"
- "\t [ \"list\", \"Pages\",\n"
- "\t [ \"hash\", \"Page\",\n"
- "\t {\n"
- "\t\tname => [ \"string\", \"PageName\" ],\n"
- "\t\tdetailed =>\n"
- "\t\t [ \"hash\", \"PageDetailed\",\n"
- "\t\t {\n"
- "\t\t doc => [ \"doc\", \"PageDetailedDoc\" ],\n"
- "\t\t },\n"
- "\t\t ],\n"
- "\t },\n"
- "\t ],\n"
- "\t ],\n"
- "\tclasses =>\n"
- "\t [ \"list\", \"Classes\",\n"
- "\t [ \"hash\", \"Class\",\n"
- "\t {\n"
- "\t\tname => [ \"string\", \"ClassName\" ],\n"
- "\t\tpublic_typedefs => memberlist(\"ClassPublicTypedef\"),\n"
- "\t\tpublic_methods => memberlist(\"ClassPublicMethod\"),\n"
- "\t\tpublic_members => memberlist(\"ClassPublicMember\"),\n"
- "\t\tprotected_typedefs => memberlist(\"ClassProtectedTypedef\"),\n"
- "\t\tprotected_methods => memberlist(\"ClassProtectedMethod\"),\n"
- "\t\tprotected_members => memberlist(\"ClassProtectedMember\"),\n"
- "\t\tprivate_typedefs => memberlist(\"ClassPrivateTypedef\"),\n"
- "\t\tprivate_methods => memberlist(\"ClassPrivateMethod\"),\n"
- "\t\tprivate_members => memberlist(\"ClassPrivateMember\"),\n"
- "\t\tdetailed =>\n"
- "\t\t [ \"hash\", \"ClassDetailed\",\n"
- "\t\t {\n"
- "\t\t doc => [ \"doc\", \"ClassDetailedDoc\" ],\n"
- "\t\t },\n"
- "\t\t ],\n"
- "\t },\n"
- "\t ],\n"
- "\t ],\n"
- "\tgroups =>\n"
- "\t [ \"list\", \"Groups\",\n"
- "\t [ \"hash\", \"Group\",\n"
- "\t {\n"
- "\t\tname => [ \"string\", \"GroupName\" ],\n"
- "\t\ttitle => [ \"string\", \"GroupTitle\" ],\n"
- "\t\tfiles =>\n"
- "\t\t [ \"list\", \"Files\",\n"
- "\t\t [ \"hash\", \"File\",\n"
- "\t\t {\n"
- "\t\t name => [ \"string\", \"Filename\" ]\n"
- "\t\t }\n"
- "\t\t ],\n"
- "\t\t ],\n"
- "\t\tclasses =>\n"
- "\t\t [ \"list\", \"Classes\",\n"
- "\t\t [ \"hash\", \"Class\",\n"
- "\t\t {\n"
- "\t\t name => [ \"string\", \"Classname\" ]\n"
- "\t\t }\n"
- "\t\t ],\n"
- "\t\t ],\n"
- "\t\tnamespaces =>\n"
- "\t\t [ \"list\", \"Namespaces\",\n"
- "\t\t [ \"hash\", \"Namespace\",\n"
- "\t\t {\n"
- "\t\t name => [ \"string\", \"NamespaceName\" ]\n"
- "\t\t }\n"
- "\t\t ],\n"
- "\t\t ],\n"
- "\t\tpages =>\n"
- "\t\t [ \"list\", \"Pages\",\n"
- "\t\t [ \"hash\", \"Page\","
- "\t\t {\n"
- "\t\t title => [ \"string\", \"PageName\" ]\n"
- "\t\t }\n"
- "\t\t ],\n"
- "\t\t ],\n"
- "\t\tgroups =>\n"
- "\t\t [ \"list\", \"Groups\",\n"
- "\t\t [ \"hash\", \"Group\",\n"
- "\t\t {\n"
- "\t\t title => [ \"string\", \"GroupName\" ]\n"
- "\t\t }\n"
- "\t\t ],\n"
- "\t\t ],\n"
- "\t\tfunctions => memberlist(\"GroupFunction\"),\n"
- "\t\tdetailed =>\n"
- "\t\t [ \"hash\", \"GroupDetailed\",\n"
- "\t\t {\n"
- "\t\t doc => [ \"doc\", \"GroupDetailedDoc\" ],\n"
- "\t\t },\n"
- "\t\t ],\n"
- "\t }\n"
- "\t ],\n"
- "\t ],\n"
- " },\n"
- " ];\n"
- "\n"
- "1;\n";
-
- return true;
-}
-
-bool PerlModGenerator::generateDoxyRules()
-{
- QFile doxyRules;
- if (!createOutputFile(doxyRules, pathDoxyRules))
- return false;
-
- bool perlmodLatex = Config_getBool("PERLMOD_LATEX");
- QCString prefix = Config_getString("PERLMOD_MAKEVAR_PREFIX");
-
- FTextStream doxyRulesStream(&doxyRules);
- doxyRulesStream <<
- prefix << "DOXY_EXEC_PATH = " << pathDoxyExec << "\n" <<
- prefix << "DOXYFILE = " << pathDoxyfile << "\n" <<
- prefix << "DOXYDOCS_PM = " << pathDoxyDocsPM << "\n" <<
- prefix << "DOXYSTRUCTURE_PM = " << pathDoxyStructurePM << "\n" <<
- prefix << "DOXYRULES = " << pathDoxyRules << "\n";
- if (perlmodLatex)
- doxyRulesStream <<
- prefix << "DOXYLATEX_PL = " << pathDoxyLatexPL << "\n" <<
- prefix << "DOXYLATEXSTRUCTURE_PL = " << pathDoxyLatexStructurePL << "\n" <<
- prefix << "DOXYSTRUCTURE_TEX = " << pathDoxyStructureTex << "\n" <<
- prefix << "DOXYDOCS_TEX = " << pathDoxyDocsTex << "\n" <<
- prefix << "DOXYFORMAT_TEX = " << pathDoxyFormatTex << "\n" <<
- prefix << "DOXYLATEX_TEX = " << pathDoxyLatexTex << "\n" <<
- prefix << "DOXYLATEX_DVI = " << pathDoxyLatexDVI << "\n" <<
- prefix << "DOXYLATEX_PDF = " << pathDoxyLatexPDF << "\n";
-
- doxyRulesStream <<
- "\n"
- ".PHONY: clean-perlmod\n"
- "clean-perlmod::\n"
- "\trm -f $(" << prefix << "DOXYSTRUCTURE_PM) \\\n"
- "\t$(" << prefix << "DOXYDOCS_PM)";
- if (perlmodLatex)
- doxyRulesStream <<
- " \\\n"
- "\t$(" << prefix << "DOXYLATEX_PL) \\\n"
- "\t$(" << prefix << "DOXYLATEXSTRUCTURE_PL) \\\n"
- "\t$(" << prefix << "DOXYDOCS_TEX) \\\n"
- "\t$(" << prefix << "DOXYSTRUCTURE_TEX) \\\n"
- "\t$(" << prefix << "DOXYFORMAT_TEX) \\\n"
- "\t$(" << prefix << "DOXYLATEX_TEX) \\\n"
- "\t$(" << prefix << "DOXYLATEX_PDF) \\\n"
- "\t$(" << prefix << "DOXYLATEX_DVI) \\\n"
- "\t$(addprefix $(" << prefix << "DOXYLATEX_TEX:tex=),out aux log)";
- doxyRulesStream << "\n\n";
-
- doxyRulesStream <<
- "$(" << prefix << "DOXYRULES) \\\n"
- "$(" << prefix << "DOXYMAKEFILE) \\\n"
- "$(" << prefix << "DOXYSTRUCTURE_PM) \\\n"
- "$(" << prefix << "DOXYDOCS_PM)";
- if (perlmodLatex) {
- doxyRulesStream <<
- " \\\n"
- "$(" << prefix << "DOXYLATEX_PL) \\\n"
- "$(" << prefix << "DOXYLATEXSTRUCTURE_PL) \\\n"
- "$(" << prefix << "DOXYFORMAT_TEX) \\\n"
- "$(" << prefix << "DOXYLATEX_TEX)";
- }
- doxyRulesStream <<
- ": \\\n"
- "\t$(" << prefix << "DOXYFILE)\n"
- "\tcd $(" << prefix << "DOXY_EXEC_PATH) ; doxygen \"$<\"\n";
-
- if (perlmodLatex) {
- doxyRulesStream <<
- "\n"
- "$(" << prefix << "DOXYDOCS_TEX): \\\n"
- "$(" << prefix << "DOXYLATEX_PL) \\\n"
- "$(" << prefix << "DOXYDOCS_PM)\n"
- "\tperl -I\"$(<D)\" \"$<\" >\"$@\"\n"
- "\n"
- "$(" << prefix << "DOXYSTRUCTURE_TEX): \\\n"
- "$(" << prefix << "DOXYLATEXSTRUCTURE_PL) \\\n"
- "$(" << prefix << "DOXYSTRUCTURE_PM)\n"
- "\tperl -I\"$(<D)\" \"$<\" >\"$@\"\n"
- "\n"
- "$(" << prefix << "DOXYLATEX_PDF) \\\n"
- "$(" << prefix << "DOXYLATEX_DVI): \\\n"
- "$(" << prefix << "DOXYLATEX_TEX) \\\n"
- "$(" << prefix << "DOXYFORMAT_TEX) \\\n"
- "$(" << prefix << "DOXYSTRUCTURE_TEX) \\\n"
- "$(" << prefix << "DOXYDOCS_TEX)\n"
- "\n"
- "$(" << prefix << "DOXYLATEX_PDF): \\\n"
- "$(" << prefix << "DOXYLATEX_TEX)\n"
- "\tpdflatex -interaction=nonstopmode \"$<\"\n"
- "\n"
- "$(" << prefix << "DOXYLATEX_DVI): \\\n"
- "$(" << prefix << "DOXYLATEX_TEX)\n"
- "\tlatex -interaction=nonstopmode \"$<\"\n";
- }
-
- return true;
-}
-
-bool PerlModGenerator::generateMakefile()
-{
- QFile makefile;
- if (!createOutputFile(makefile, pathMakefile))
- return false;
-
- bool perlmodLatex = Config_getBool("PERLMOD_LATEX");
- QCString prefix = Config_getString("PERLMOD_MAKEVAR_PREFIX");
-
- FTextStream makefileStream(&makefile);
- makefileStream <<
- ".PHONY: default clean" << (perlmodLatex ? " pdf" : "") << "\n"
- "default: " << (perlmodLatex ? "pdf" : "clean") << "\n"
- "\n"
- "include " << pathDoxyRules << "\n"
- "\n"
- "clean: clean-perlmod\n";
-
- if (perlmodLatex) {
- makefileStream <<
- "pdf: $(" << prefix << "DOXYLATEX_PDF)\n"
- "dvi: $(" << prefix << "DOXYLATEX_DVI)\n";
- }
-
- return true;
-}
-
-bool PerlModGenerator::generateDoxyLatexStructurePL()
-{
- QFile doxyLatexStructurePL;
- if (!createOutputFile(doxyLatexStructurePL, pathDoxyLatexStructurePL))
- return false;
-
- FTextStream doxyLatexStructurePLStream(&doxyLatexStructurePL);
- doxyLatexStructurePLStream <<
- "use DoxyStructure;\n"
- "\n"
- "sub process($) {\n"
- "\tmy $node = $_[0];\n"
- "\tmy ($type, $name) = @$node[0, 1];\n"
- "\tmy $command;\n"
- "\tif ($type eq \"string\") { $command = \"String\" }\n"
- "\telsif ($type eq \"doc\") { $command = \"Doc\" }\n"
- "\telsif ($type eq \"hash\") {\n"
- "\t\t$command = \"Hash\";\n"
- "\t\tfor my $subnode (values %{$$node[2]}) {\n"
- "\t\t\tprocess($subnode);\n"
- "\t\t}\n"
- "\t}\n"
- "\telsif ($type eq \"list\") {\n"
- "\t\t$command = \"List\";\n"
- "\t\tprocess($$node[2]);\n"
- "\t}\n"
- "\tprint \"\\\\\" . $command . \"Node{\" . $name . \"}%\\n\";\n"
- "}\n"
- "\n"
- "process($doxystructure);\n";
-
- return true;
-}
-
-bool PerlModGenerator::generateDoxyLatexPL()
-{
- QFile doxyLatexPL;
- if (!createOutputFile(doxyLatexPL, pathDoxyLatexPL))
- return false;
-
- FTextStream doxyLatexPLStream(&doxyLatexPL);
- doxyLatexPLStream <<
- "use DoxyStructure;\n"
- "use DoxyDocs;\n"
- "\n"
- "sub latex_quote($) {\n"
- "\tmy $text = $_[0];\n"
- "\t$text =~ s/\\\\/\\\\textbackslash /g;\n"
- "\t$text =~ s/\\|/\\\\textbar /g;\n"
- "\t$text =~ s/</\\\\textless /g;\n"
- "\t$text =~ s/>/\\\\textgreater /g;\n"
- "\t$text =~ s/~/\\\\textasciitilde /g;\n"
- "\t$text =~ s/\\^/\\\\textasciicircum /g;\n"
- "\t$text =~ s/[\\$&%#_{}]/\\\\$&/g;\n"
- "\tprint $text;\n"
- "}\n"
- "\n"
- "sub generate_doc($) {\n"
- "\tmy $doc = $_[0];\n"
- "\tfor my $item (@$doc) {\n"
- "\t\tmy $type = $$item{type};\n"
- "\t\tif ($type eq \"text\") {\n"
- "\t\t\tlatex_quote($$item{content});\n"
- "\t\t} elsif ($type eq \"parbreak\") {\n"
- "\t\t\tprint \"\\n\\n\";\n"
- "\t\t} elsif ($type eq \"style\") {\n"
- "\t\t\tmy $style = $$item{style};\n"
- "\t\t\tif ($$item{enable} eq \"yes\") {\n"
- "\t\t\t\tif ($style eq \"bold\") { print '\\bfseries'; }\n"
- "\t\t\t\tif ($style eq \"italic\") { print '\\itshape'; }\n"
- "\t\t\t\tif ($style eq \"code\") { print '\\ttfamily'; }\n"
- "\t\t\t} else {\n"
- "\t\t\t\tif ($style eq \"bold\") { print '\\mdseries'; }\n"
- "\t\t\t\tif ($style eq \"italic\") { print '\\upshape'; }\n"
- "\t\t\t\tif ($style eq \"code\") { print '\\rmfamily'; }\n"
- "\t\t\t}\n"
- "\t\t\tprint '{}';\n"
- "\t\t} elsif ($type eq \"symbol\") {\n"
- "\t\t\tmy $symbol = $$item{symbol};\n"
- "\t\t\tif ($symbol eq \"copyright\") { print '\\copyright'; }\n"
- "\t\t\telsif ($symbol eq \"szlig\") { print '\\ss'; }\n"
- "\t\t\tprint '{}';\n"
- "\t\t} elsif ($type eq \"accent\") {\n"
- "\t\t\tmy ($accent) = $$item{accent};\n"
- "\t\t\tif ($accent eq \"umlaut\") { print '\\\"'; }\n"
- "\t\t\telsif ($accent eq \"acute\") { print '\\\\\\''; }\n"
- "\t\t\telsif ($accent eq \"grave\") { print '\\`'; }\n"
- "\t\t\telsif ($accent eq \"circ\") { print '\\^'; }\n"
- "\t\t\telsif ($accent eq \"tilde\") { print '\\~'; }\n"
- "\t\t\telsif ($accent eq \"cedilla\") { print '\\c'; }\n"
- "\t\t\telsif ($accent eq \"ring\") { print '\\r'; }\n"
- "\t\t\tprint \"{\" . $$item{letter} . \"}\"; \n"
- "\t\t} elsif ($type eq \"list\") {\n"
- "\t\t\tmy $env = ($$item{style} eq \"ordered\") ? \"enumerate\" : \"itemize\";\n"
- "\t\t\tprint \"\\n\\\\begin{\" . $env .\"}\";\n"
- "\t\t \tfor my $subitem (@{$$item{content}}) {\n"
- "\t\t\t\tprint \"\\n\\\\item \";\n"
- "\t\t\t\tgenerate_doc($subitem);\n"
- "\t\t \t}\n"
- "\t\t\tprint \"\\n\\\\end{\" . $env .\"}\";\n"
- "\t\t} elsif ($type eq \"url\") {\n"
- "\t\t\tlatex_quote($$item{content});\n"
- "\t\t}\n"
- "\t}\n"
- "}\n"
- "\n"
- "sub generate($$) {\n"
- "\tmy ($item, $node) = @_;\n"
- "\tmy ($type, $name) = @$node[0, 1];\n"
- "\tif ($type eq \"string\") {\n"
- "\t\tprint \"\\\\\" . $name . \"{\";\n"
- "\t\tlatex_quote($item);\n"
- "\t\tprint \"}\";\n"
- "\t} elsif ($type eq \"doc\") {\n"
- "\t\tif (@$item) {\n"
- "\t\t\tprint \"\\\\\" . $name . \"{\";\n"
- "\t\t\tgenerate_doc($item);\n"
- "\t\t\tprint \"}%\\n\";\n"
- "\t\t} else {\n"
- "#\t\t\tprint \"\\\\\" . $name . \"Empty%\\n\";\n"
- "\t\t}\n"
- "\t} elsif ($type eq \"hash\") {\n"
- "\t\tmy ($key, $value);\n"
- "\t\twhile (($key, $subnode) = each %{$$node[2]}) {\n"
- "\t\t\tmy $subname = $$subnode[1];\n"
- "\t\t\tprint \"\\\\Defcs{field\" . $subname . \"}{\";\n"
- "\t\t\tif ($$item{$key}) {\n"
- "\t\t\t\tgenerate($$item{$key}, $subnode);\n"
- "\t\t\t} else {\n"
- "#\t\t\t\t\tprint \"\\\\\" . $subname . \"Empty%\\n\";\n"
- "\t\t\t}\n"
- "\t\t\tprint \"}%\\n\";\n"
- "\t\t}\n"
- "\t\tprint \"\\\\\" . $name . \"%\\n\";\n"
- "\t} elsif ($type eq \"list\") {\n"
- "\t\tmy $index = 0;\n"
- "\t\tif (@$item) {\n"
- "\t\t\tprint \"\\\\\" . $name . \"{%\\n\";\n"
- "\t\t\tfor my $subitem (@$item) {\n"
- "\t\t\t\tif ($index) {\n"
- "\t\t\t\t\tprint \"\\\\\" . $name . \"Sep%\\n\";\n"
- "\t\t\t\t}\n"
- "\t\t\t\tgenerate($subitem, $$node[2]);\n"
- "\t\t\t\t$index++;\n"
- "\t\t\t}\n"
- "\t\t\tprint \"}%\\n\";\n"
- "\t\t} else {\n"
- "#\t\t\tprint \"\\\\\" . $name . \"Empty%\\n\";\n"
- "\t\t}\n"
- "\t}\n"
- "}\n"
- "\n"
- "generate($doxydocs, $doxystructure);\n";
-
- return true;
-}
-
-bool PerlModGenerator::generateDoxyFormatTex()
-{
- QFile doxyFormatTex;
- if (!createOutputFile(doxyFormatTex, pathDoxyFormatTex))
- return false;
-
- FTextStream doxyFormatTexStream(&doxyFormatTex);
- doxyFormatTexStream <<
- "\\def\\Defcs#1{\\long\\expandafter\\def\\csname#1\\endcsname}\n"
- "\\Defcs{Empty}{}\n"
- "\\def\\IfEmpty#1{\\expandafter\\ifx\\csname#1\\endcsname\\Empty}\n"
- "\n"
- "\\def\\StringNode#1{\\Defcs{#1}##1{##1}}\n"
- "\\def\\DocNode#1{\\Defcs{#1}##1{##1}}\n"
- "\\def\\ListNode#1{\\Defcs{#1}##1{##1}\\Defcs{#1Sep}{}}\n"
- "\\def\\HashNode#1{\\Defcs{#1}{}}\n"
- "\n"
- "\\input{" << pathDoxyStructureTex << "}\n"
- "\n"
- "\\newbox\\BoxA\n"
- "\\dimendef\\DimenA=151\\relax\n"
- "\\dimendef\\DimenB=152\\relax\n"
- "\\countdef\\ZoneDepth=151\\relax\n"
- "\n"
- "\\def\\Cs#1{\\csname#1\\endcsname}\n"
- "\\def\\Letcs#1{\\expandafter\\let\\csname#1\\endcsname}\n"
- "\\def\\Heading#1{\\vskip 4mm\\relax\\textbf{#1}}\n"
- "\\def\\See#1{\\begin{flushleft}\\Heading{See also: }#1\\end{flushleft}}\n"
- "\n"
- "\\def\\Frame#1{\\vskip 3mm\\relax\\fbox{ \\vbox{\\hsize0.95\\hsize\\vskip 1mm\\relax\n"
- "\\raggedright#1\\vskip 0.5mm\\relax} }}\n"
- "\n"
- "\\def\\Zone#1#2#3{%\n"
- "\\Defcs{Test#1}{#2}%\n"
- "\\Defcs{Emit#1}{#3}%\n"
- "\\Defcs{#1}{%\n"
- "\\advance\\ZoneDepth1\\relax\n"
- "\\Letcs{Mode\\number\\ZoneDepth}0\\relax\n"
- "\\Letcs{Present\\number\\ZoneDepth}0\\relax\n"
- "\\Cs{Test#1}\n"
- "\\expandafter\\if\\Cs{Present\\number\\ZoneDepth}1%\n"
- "\\advance\\ZoneDepth-1\\relax\n"
- "\\Letcs{Present\\number\\ZoneDepth}1\\relax\n"
- "\\expandafter\\if\\Cs{Mode\\number\\ZoneDepth}1%\n"
- "\\advance\\ZoneDepth1\\relax\n"
- "\\Letcs{Mode\\number\\ZoneDepth}1\\relax\n"
- "\\Cs{Emit#1}\n"
- "\\advance\\ZoneDepth-1\\relax\\fi\n"
- "\\advance\\ZoneDepth1\\relax\\fi\n"
- "\\advance\\ZoneDepth-1\\relax}}\n"
- "\n"
- "\\def\\Member#1#2{%\n"
- "\\Defcs{Test#1}{\\Cs{field#1Detailed}\n"
- "\\IfEmpty{field#1DetailedDoc}\\else\\Letcs{Present#1}1\\fi}\n"
- "\\Defcs{#1}{\\Letcs{Present#1}0\\relax\n"
- "\\Cs{Test#1}\\if1\\Cs{Present#1}\\Letcs{Present\\number\\ZoneDepth}1\\relax\n"
- "\\if1\\Cs{Mode\\number\\ZoneDepth}#2\\fi\\fi}}\n"
- "\n"
- "\\def\\TypedefMemberList#1#2{%\n"
- "\\Defcs{#1DetailedDoc}##1{\\vskip 5.5mm\\relax##1}%\n"
- "\\Defcs{#1Name}##1{\\textbf{##1}}%\n"
- "\\Defcs{#1See}##1{\\See{##1}}%\n"
- "%\n"
- "\\Zone{#1s}{\\Cs{field#1List}}{\\subsubsection{#2}\\Cs{field#1List}}%\n"
- "\\Member{#1}{\\Frame{typedef \\Cs{field#1Type} \\Cs{field#1Name}}%\n"
- "\\Cs{field#1DetailedDoc}\\Cs{field#1See}\\vskip 5mm\\relax}}%\n"
- "\n"
- "\\def\\VariableMemberList#1#2{%\n"
- "\\Defcs{#1DetailedDoc}##1{\\vskip 5.5mm\\relax##1}%\n"
- "\\Defcs{#1Name}##1{\\textbf{##1}}%\n"
- "\\Defcs{#1See}##1{\\See{##1}}%\n"
- "%\n"
- "\\Zone{#1s}{\\Cs{field#1List}}{\\subsubsection{#2}\\Cs{field#1List}}%\n"
- "\\Member{#1}{\\Frame{\\Cs{field#1Type}{} \\Cs{field#1Name}}%\n"
- "\\Cs{field#1DetailedDoc}\\Cs{field#1See}\\vskip 5mm\\relax}}%\n"
- "\n"
- "\\def\\FunctionMemberList#1#2{%\n"
- "\\Defcs{#1PDParamName}##1{\\textit{##1}}%\n"
- "\\Defcs{#1PDParam}{\\Cs{field#1PDParamName}}%\n"
- "\\Defcs{#1PDParamsSep}{, }%\n"
- "\\Defcs{#1PDBlocksSep}{\\vskip 2mm\\relax}%\n"
- "%\n"
- "\\Defcs{#1PDBlocks}##1{%\n"
- "\\Heading{Parameters:}\\vskip 1.5mm\\relax\n"
- "\\DimenA0pt\\relax\n"
- "\\Defcs{#1PDBlock}{\\setbox\\BoxA\\hbox{\\Cs{field#1PDParams}}%\n"
- "\\ifdim\\DimenA<\\wd\\BoxA\\DimenA\\wd\\BoxA\\fi}%\n"
- "##1%\n"
- "\\advance\\DimenA3mm\\relax\n"
- "\\DimenB\\hsize\\advance\\DimenB-\\DimenA\\relax\n"
- "\\Defcs{#1PDBlock}{\\hbox to\\hsize{\\vtop{\\hsize\\DimenA\\relax\n"
- "\\Cs{field#1PDParams}}\\hfill\n"
- "\\vtop{\\hsize\\DimenB\\relax\\Cs{field#1PDDoc}}}}%\n"
- "##1}\n"
- "\n"
- "\\Defcs{#1ParamName}##1{\\textit{##1}}\n"
- "\\Defcs{#1Param}{\\Cs{field#1ParamType}{} \\Cs{field#1ParamName}}\n"
- "\\Defcs{#1ParamsSep}{, }\n"
- "\n"
- "\\Defcs{#1Name}##1{\\textbf{##1}}\n"
- "\\Defcs{#1See}##1{\\See{##1}}\n"
- "\\Defcs{#1Return}##1{\\Heading{Returns: }##1}\n"
- "\\Defcs{field#1Title}{\\Frame{\\Cs{field#1Type}{} \\Cs{field#1Name}(\\Cs{field#1Params})}}%\n"
- "%\n"
- "\\Zone{#1s}{\\Cs{field#1List}}{\\subsubsection{#2}\\Cs{field#1List}}%\n"
- "\\Member{#1}{%\n"
- "\\Cs{field#1Title}\\vskip 6mm\\relax\\Cs{field#1DetailedDoc}\n"
- "\\Cs{field#1Return}\\Cs{field#1PDBlocks}\\Cs{field#1See}\\vskip 5mm\\relax}}\n"
- "\n"
- "\\def\\FileDetailed{\\fieldFileDetailedDoc\\par}\n"
- "\\def\\ClassDetailed{\\fieldClassDetailedDoc\\par}\n"
- "\n"
- "\\def\\FileSubzones{\\fieldFileTypedefs\\fieldFileVariables\\fieldFileFunctions}\n"
- "\n"
- "\\def\\ClassSubzones{%\n"
- "\\fieldClassPublicTypedefs\\fieldClassPublicMembers\\fieldClassPublicMethods\n"
- "\\fieldClassProtectedTypedefs\\fieldClassProtectedMembers\\fieldClassProtectedMethods\n"
- "\\fieldClassPrivateTypedefs\\fieldClassPrivateMembers\\fieldClassPrivateMethods}\n"
- "\n"
- "\\Member{Page}{\\subsection{\\fieldPageName}\\fieldPageDetailedDoc}\n"
- "\n"
- "\\TypedefMemberList{FileTypedef}{Typedefs}\n"
- "\\VariableMemberList{FileVariable}{Variables}\n"
- "\\FunctionMemberList{FileFunction}{Functions}\n"
- "\\Zone{File}{\\FileSubzones}{\\subsection{\\fieldFileName}\\fieldFileDetailed\\FileSubzones}\n"
- "\n"
- "\\TypedefMemberList{ClassPublicTypedef}{Public Typedefs}\n"
- "\\TypedefMemberList{ClassProtectedTypedef}{Protected Typedefs}\n"
- "\\TypedefMemberList{ClassPrivateTypedef}{Private Typedefs}\n"
- "\\VariableMemberList{ClassPublicMember}{Public Members}\n"
- "\\VariableMemberList{ClassProtectedMember}{Protected Members}\n"
- "\\VariableMemberList{ClassPrivateMember}{Private Members}\n"
- "\\FunctionMemberList{ClassPublicMethod}{Public Methods}\n"
- "\\FunctionMemberList{ClassProtectedMethod}{Protected Methods}\n"
- "\\FunctionMemberList{ClassPrivateMethod}{Private Methods}\n"
- "\\Zone{Class}{\\ClassSubzones}{\\subsection{\\fieldClassName}\\fieldClassDetailed\\ClassSubzones}\n"
- "\n"
- "\\Zone{AllPages}{\\fieldPages}{\\section{Pages}\\fieldPages}\n"
- "\\Zone{AllFiles}{\\fieldFiles}{\\section{Files}\\fieldFiles}\n"
- "\\Zone{AllClasses}{\\fieldClasses}{\\section{Classes}\\fieldClasses}\n"
- "\n"
- "\\newlength{\\oldparskip}\n"
- "\\newlength{\\oldparindent}\n"
- "\\newlength{\\oldfboxrule}\n"
- "\n"
- "\\ZoneDepth0\\relax\n"
- "\\Letcs{Mode0}1\\relax\n"
- "\n"
- "\\def\\EmitDoxyDocs{%\n"
- "\\setlength{\\oldparskip}{\\parskip}\n"
- "\\setlength{\\oldparindent}{\\parindent}\n"
- "\\setlength{\\oldfboxrule}{\\fboxrule}\n"
- "\\setlength{\\parskip}{0cm}\n"
- "\\setlength{\\parindent}{0cm}\n"
- "\\setlength{\\fboxrule}{1pt}\n"
- "\\AllPages\\AllFiles\\AllClasses\n"
- "\\setlength{\\parskip}{\\oldparskip}\n"
- "\\setlength{\\parindent}{\\oldparindent}\n"
- "\\setlength{\\fboxrule}{\\oldfboxrule}}\n";
-
- return true;
-}
-
-bool PerlModGenerator::generateDoxyLatexTex()
-{
- QFile doxyLatexTex;
- if (!createOutputFile(doxyLatexTex, pathDoxyLatexTex))
- return false;
-
- FTextStream doxyLatexTexStream(&doxyLatexTex);
- doxyLatexTexStream <<
- "\\documentclass[a4paper,12pt]{article}\n"
- "\\usepackage[latin1]{inputenc}\n"
- "\\usepackage[none]{hyphenat}\n"
- "\\usepackage[T1]{fontenc}\n"
- "\\usepackage{hyperref}\n"
- "\\usepackage{times}\n"
- "\n"
- "\\input{doxyformat}\n"
- "\n"
- "\\begin{document}\n"
- "\\input{" << pathDoxyDocsTex << "}\n"
- "\\sloppy\n"
- "\\EmitDoxyDocs\n"
- "\\end{document}\n";
-
- return true;
-}
-
-void PerlModGenerator::generate()
-{
- // + classes
- // + namespaces
- // + files
- // - packages
- // + groups
- // + related pages
- // - examples
-
- QDir perlModDir;
- if (!createOutputDir(perlModDir))
- return;
-
- bool perlmodLatex = Config_getBool("PERLMOD_LATEX");
-
- pathDoxyDocsPM = perlModDir.absPath() + "/DoxyDocs.pm";
- pathDoxyStructurePM = perlModDir.absPath() + "/DoxyStructure.pm";
- pathMakefile = perlModDir.absPath() + "/Makefile";
- pathDoxyRules = perlModDir.absPath() + "/doxyrules.make";
-
- if (perlmodLatex) {
- pathDoxyStructureTex = perlModDir.absPath() + "/doxystructure.tex";
- pathDoxyFormatTex = perlModDir.absPath() + "/doxyformat.tex";
- pathDoxyLatexTex = perlModDir.absPath() + "/doxylatex.tex";
- pathDoxyLatexDVI = perlModDir.absPath() + "/doxylatex.dvi";
- pathDoxyLatexPDF = perlModDir.absPath() + "/doxylatex.pdf";
- pathDoxyDocsTex = perlModDir.absPath() + "/doxydocs.tex";
- pathDoxyLatexPL = perlModDir.absPath() + "/doxylatex.pl";
- pathDoxyLatexStructurePL = perlModDir.absPath() + "/doxylatex-structure.pl";
- }
-
- if (!(generatePerlModOutput()
- && generateDoxyStructurePM()
- && generateMakefile()
- && generateDoxyRules()))
- return;
-
- if (perlmodLatex) {
- if (!(generateDoxyLatexStructurePL()
- && generateDoxyLatexPL()
- && generateDoxyLatexTex()
- && generateDoxyFormatTex()))
- return;
- }
-}
-
-void generatePerlMod()
-{
- PerlModGenerator pmg(Config_getBool("PERLMOD_PRETTY"));
- pmg.generate();
-}
-
-// Local Variables:
-// c-basic-offset: 2
-// End:
-
-/* This elisp function for XEmacs makes Control-Z transform
- the text in the region into a valid C string.
-
- (global-set-key '(control z) (lambda () (interactive)
- (save-excursion
- (if (< (mark) (point)) (exchange-point-and-mark))
- (let ((start (point)) (replacers
- '(("\\\\" "\\\\\\\\")
- ("\"" "\\\\\"")
- ("\t" "\\\\t")
- ("^.*$" "\"\\&\\\\n\""))))
- (while replacers
- (while (re-search-forward (caar replacers) (mark) t)
- (replace-match (cadar replacers) t))
- (goto-char start)
- (setq replacers (cdr replacers)))))))
-*/
diff --git a/trunk/src/perlmodgen.h b/trunk/src/perlmodgen.h
deleted file mode 100644
index 4307d9b..0000000
--- a/trunk/src/perlmodgen.h
+++ /dev/null
@@ -1,23 +0,0 @@
-/******************************************************************************
- *
- *
- *
- * Copyright (C) 1997-2012 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.
- *
- */
-
-#ifndef PERLMODGEN_H
-#define PERLMODGEN_H
-
-class QCString;
-
-extern void setPerlModDoxyfile(const QCString &);
-extern void generatePerlMod();
-
-#endif
diff --git a/trunk/src/portable.cpp b/trunk/src/portable.cpp
deleted file mode 100644
index f2d1166..0000000
--- a/trunk/src/portable.cpp
+++ /dev/null
@@ -1,410 +0,0 @@
-#include <stdlib.h>
-#include <ctype.h>
-#if defined(_WIN32) && !defined(__CYGWIN__)
-#undef UNICODE
-#define _WIN32_DCOM
-#include <windows.h>
-#else
-#include <unistd.h>
-#include <stdlib.h>
-#include <sys/types.h>
-#include <sys/wait.h>
-#include <errno.h>
-extern char **environ;
-#endif
-
-#include <qglobal.h>
-#include <qdatetime.h>
-
-#if defined(_MSC_VER) || defined(__BORLANDC__)
-#define popen _popen
-#define pclose _pclose
-#endif
-
-#include "portable.h"
-#ifndef NODEBUG
-#include "debug.h"
-#endif
-//#include "doxygen.h"
-
-static double g_sysElapsedTime;
-static QTime g_time;
-
-int portable_system(const char *command,const char *args,bool commandHasConsole)
-{
-
- if (command==0) return 1;
-
- QCString fullCmd=command;
- fullCmd=fullCmd.stripWhiteSpace();
- if (fullCmd.at(0)!='"' && fullCmd.find(' ')!=-1)
- {
- // add quotes around command as it contains spaces and is not quoted already
- fullCmd="\""+fullCmd+"\"";
- }
- fullCmd += " ";
- fullCmd += args;
-#ifndef NODEBUG
- Debug::print(Debug::ExtCmd,0,"Executing external command `%s`\n",fullCmd.data());
-#endif
-
-#if !defined(_WIN32) || defined(__CYGWIN__)
- commandHasConsole=commandHasConsole;
- /*! taken from the system() manpage on my Linux box */
- int pid,status=0;
-
-#ifdef _OS_SOLARIS // for Solaris we use vfork since it is more memory efficient
-
- // on Solaris fork() duplicates the memory usage
- // so we use vfork instead
-
- // spawn shell
- if ((pid=vfork())<0)
- {
- status=-1;
- }
- else if (pid==0)
- {
- execl("/bin/sh","sh","-c",fullCmd.data(),(char*)0);
- _exit(127);
- }
- else
- {
- while (waitpid(pid,&status,0 )<0)
- {
- if (errno!=EINTR)
- {
- status=-1;
- break;
- }
- }
- }
- return status;
-
-#else // Other Unices just use fork
-
- pid = fork();
- if (pid==-1) return -1;
- if (pid==0)
- {
- const char * argv[4];
- argv[0] = "sh";
- argv[1] = "-c";
- argv[2] = fullCmd.data();
- argv[3] = 0;
- execve("/bin/sh",(char * const *)argv,environ);
- exit(127);
- }
- for (;;)
- {
- if (waitpid(pid,&status,0)==-1)
- {
- if (errno!=EINTR) return -1;
- }
- else
- {
- if (WIFEXITED(status))
- {
- return WEXITSTATUS(status);
- }
- else
- {
- return status;
- }
- }
- }
-#endif // !_OS_SOLARIS
-
-#else // Win32 specific
- if (commandHasConsole)
- {
- return system(fullCmd);
- }
- else
- {
- // Because ShellExecuteEx can delegate execution to Shell extensions
- // (data sources, context menu handlers, verb implementations) that
- // are activated using Component Object Model (COM), COM should be
- // initialized before ShellExecuteEx is called. Some Shell extensions
- // require the COM single-threaded apartment (STA) type.
- // For that case COM is initialized as follows
- CoInitializeEx(NULL, COINIT_APARTMENTTHREADED | COINIT_DISABLE_OLE1DDE);
-
- // gswin32 is a GUI api which will pop up a window and run
- // asynchronously. To prevent both, we use ShellExecuteEx and
- // WaitForSingleObject (thanks to Robert Golias for the code)
-
- SHELLEXECUTEINFO sInfo = {
- sizeof(SHELLEXECUTEINFO), /* structure size */
- SEE_MASK_NOCLOSEPROCESS | SEE_MASK_FLAG_NO_UI, /* tell us the process
- * handle so we can wait till it's done |
- * do not display msg box if error
- */
- NULL, /* window handle */
- NULL, /* action to perform: open */
- command, /* file to execute */
- args, /* argument list */
- NULL, /* use current working dir */
- SW_HIDE, /* minimize on start-up */
- 0, /* application instance handle */
- NULL, /* ignored: id list */
- NULL, /* ignored: class name */
- NULL, /* ignored: key class */
- 0, /* ignored: hot key */
- NULL, /* ignored: icon */
- NULL /* resulting application handle */
- };
- if (!ShellExecuteEx(&sInfo))
- {
- return -1;
- }
- else if (sInfo.hProcess) /* executable was launched, wait for it to finish */
- {
- WaitForSingleObject(sInfo.hProcess,INFINITE);
- CloseHandle(sInfo.hProcess);
- }
- }
- return 0;
-#endif
-
-}
-
-uint portable_pid()
-{
- uint pid;
-#if !defined(_WIN32) || defined(__CYGWIN__)
- pid = (uint)getpid();
-#else
- pid = (uint)GetCurrentProcessId();
-#endif
- return pid;
-}
-
-static char **last_environ;
-
-void portable_setenv(const char *name,const char *value)
-{
- if (value==0) value="";
-#if defined(_WIN32) && !defined(__CYGWIN__)
- SetEnvironmentVariable(name,value);
-#else
- register char **ep = 0;
- register size_t size;
- const size_t namelen=strlen(name);
- const size_t vallen=strlen(value) + 1;
-
- size = 0;
- if (environ!=0)
- {
- for (ep = environ; *ep; ++ep)
- {
- if (!strncmp (*ep, name, namelen) && (*ep)[namelen] == '=')
- break;
- else
- ++size;
- }
- }
-
- if (environ==0 || *ep==0) /* add new string */
- {
- char **new_environ;
- if (environ == last_environ && environ!=0)
- {
- // We allocated this space; we can extend it.
- new_environ = (char **) realloc (last_environ, (size + 2) * sizeof (char *));
- }
- else
- {
- new_environ = (char **) malloc ((size + 2) * sizeof (char *));
- }
-
- if (new_environ==0) // no more memory
- {
- return;
- }
-
- new_environ[size] = (char *)malloc (namelen + 1 + vallen);
- if (new_environ[size]==0)
- {
- free (new_environ);
- return;
- }
-
- if (environ != last_environ)
- {
- memcpy ((char *) new_environ, environ, size * sizeof (char *));
- }
-
- memcpy(new_environ[size], name, namelen);
- new_environ[size][namelen] = '=';
- memcpy(&new_environ[size][namelen + 1], value, vallen);
- new_environ[size + 1] = 0;
- last_environ = environ = new_environ;
- }
- else /* replace existing string */
- {
- size_t len = strlen (*ep);
- if (len + 1 < namelen + 1 + vallen)
- {
- /* The existing string is too short; malloc a new one. */
- char *newString = (char *)malloc(namelen + 1 + vallen);
- if (newString==0)
- {
- return;
- }
- *ep = newString;
- }
- memcpy(*ep, name, namelen);
- (*ep)[namelen] = '=';
- memcpy(&(*ep)[namelen + 1], value, vallen);
- }
-
-#endif
-}
-
-void portable_unsetenv(const char *variable)
-{
-#if defined(_WIN32) && !defined(__CYGWIN__)
- SetEnvironmentVariable(variable,0);
-#else
- /* Some systems don't have unsetenv(), so we do it ourselves */
- size_t len;
- char **ep;
-
- if (variable == NULL || *variable == '\0' || strchr (variable, '=') != NULL)
- {
- return; // not properly formatted
- }
-
- len = strlen(variable);
-
- ep = environ;
- while (*ep != NULL)
- {
- if (!strncmp(*ep, variable, len) && (*ep)[len]=='=')
- {
- /* Found it. Remove this pointer by moving later ones back. */
- char **dp = ep;
- do dp[0] = dp[1]; while (*dp++);
- /* Continue the loop in case NAME appears again. */
- }
- else
- {
- ++ep;
- }
- }
-#endif
-}
-
-const char *portable_getenv(const char *variable)
-{
- return getenv(variable);
-}
-
-portable_off_t portable_fseek(FILE *f,portable_off_t offset, int whence)
-{
-#if defined(_WIN32) && !defined(__CYGWIN__)
- return _fseeki64(f,offset,whence);
-#else
- return fseeko(f,offset,whence);
-#endif
-}
-
-portable_off_t portable_ftell(FILE *f)
-{
-#if defined(_WIN32) && !defined(__CYGWIN__)
- return _ftelli64(f);
-#else
- return ftello(f);
-#endif
-}
-
-FILE *portable_fopen(const char *fileName,const char *mode)
-{
-#if defined(_WIN32) && !defined(__CYGWIN__)
- QString fn(fileName);
- QString m(mode);
- return _wfopen((wchar_t*)fn.ucs2(),(wchar_t*)m.ucs2());
-#else
- return fopen(fileName,mode);
-#endif
-}
-
-char portable_pathSeparator()
-{
-#if defined(_WIN32) && !defined(__CYGWIN__)
- return '\\';
-#else
- return '/';
-#endif
-}
-
-char portable_pathListSeparator()
-{
-#if defined(_WIN32) && !defined(__CYGWIN__)
- return ';';
-#else
- return ':';
-#endif
-}
-
-const char *portable_ghostScriptCommand()
-{
-#if defined(_WIN32) && !defined(__CYGWIN__)
- return "gswin32c.exe";
-#else
- return "gs";
-#endif
-}
-
-const char *portable_commandExtension()
-{
-#if defined(_WIN32) && !defined(__CYGWIN__)
- return ".exe";
-#else
- return "";
-#endif
-}
-
-bool portable_fileSystemIsCaseSensitive()
-{
-#if defined(_WIN32) || defined(macintosh) || defined(__MACOSX__) || defined(__APPLE__)
- return FALSE;
-#else
- return TRUE;
-#endif
-}
-
-FILE * portable_popen(const char *name,const char *type)
-{
- return popen(name,type);
-}
-
-int portable_pclose(FILE *stream)
-{
- return pclose(stream);
-}
-
-void portable_sysTimerStart()
-{
- g_time.start();
-}
-
-void portable_sysTimerStop()
-{
- g_sysElapsedTime+=((double)g_time.elapsed())/1000.0;
-}
-
-double portable_getSysElapsedTime()
-{
- return g_sysElapsedTime;
-}
-
-void portable_sleep(int ms)
-{
-#if defined(_WIN32) && !defined(__CYGWIN__)
- Sleep(ms);
-#else
- usleep(1000*ms);
-#endif
-}
diff --git a/trunk/src/portable.h b/trunk/src/portable.h
deleted file mode 100644
index f698e32..0000000
--- a/trunk/src/portable.h
+++ /dev/null
@@ -1,47 +0,0 @@
-#ifndef PORTABLE_H
-#define PORTABLE_H
-
-#include <sys/types.h>
-#include <stdio.h>
-#include <qglobal.h>
-
-#if defined(_WIN32)
-typedef __int64 portable_off_t;
-#else
-typedef off_t portable_off_t;
-#endif
-
-/** @file
- * @brief Portable versions of functions that are platform dependent.
- */
-
-int portable_system(const char *command,const char *args,bool commandHasConsole=TRUE);
-uint portable_pid();
-const char * portable_getenv(const char *variable);
-void portable_setenv(const char *variable,const char *value);
-void portable_unsetenv(const char *variable);
-portable_off_t portable_fseek(FILE *f,portable_off_t offset, int whence);
-portable_off_t portable_ftell(FILE *f);
-FILE * portable_fopen(const char *fileName,const char *mode);
-char portable_pathSeparator();
-char portable_pathListSeparator();
-const char * portable_ghostScriptCommand();
-const char * portable_commandExtension();
-bool portable_fileSystemIsCaseSensitive();
-FILE * portable_popen(const char *name,const char *type);
-int portable_pclose(FILE *stream);
-void portable_sysTimerStart();
-void portable_sysTimerStop();
-double portable_getSysElapsedTime();
-void portable_sleep(int ms);
-
-extern "C" {
- void * portable_iconv_open(const char* tocode, const char* fromcode);
- size_t portable_iconv (void *cd, const char** inbuf, size_t *inbytesleft,
- char* * outbuf, size_t *outbytesleft);
- int portable_iconv_close (void *cd);
-}
-
-
-#endif
-
diff --git a/trunk/src/portable_c.c b/trunk/src/portable_c.c
deleted file mode 100644
index ab33639..0000000
--- a/trunk/src/portable_c.c
+++ /dev/null
@@ -1,24 +0,0 @@
-#include <iconv.h>
-
-// These functions are implemented in a C file, because there are different
-// versions of the iconv() prototype, some with a const pointer and some
-// without. In C this is just a warning, but in C++ breaks the compilation.
-// Looking at the LIBICONV_VERSION is not enough, since for MACOSX the
-// const and non-const version exist with the same version of the file.
-
-void * portable_iconv_open(const char* tocode, const char* fromcode)
-{
- return iconv_open(tocode,fromcode);
-}
-
-size_t portable_iconv (void *cd, const char** inbuf, size_t *inbytesleft,
- char** outbuf, size_t *outbytesleft)
-{
- return iconv((iconv_t)cd,inbuf,inbytesleft,outbuf,outbytesleft);
-}
-
-int portable_iconv_close (void *cd)
-{
- return iconv_close((iconv_t)cd);
-}
-
diff --git a/trunk/src/pre.h b/trunk/src/pre.h
deleted file mode 100644
index 18c57c8..0000000
--- a/trunk/src/pre.h
+++ /dev/null
@@ -1,33 +0,0 @@
-/******************************************************************************
- *
- *
- *
- * Copyright (C) 1997-2012 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.
- *
- */
-
-#ifndef PRE_H
-#define PRE_H
-
-#include "qtbc.h"
-#include <stdio.h>
-#include "define.h"
-
-class BufStr;
-
-void initPreprocessor();
-void cleanUpPreprocessor();
-void addSearchDir(const char *dir);
-void preprocessFile(const char *fileName,BufStr &input,BufStr &output);
-void preFreeScanner();
-
-#endif
diff --git a/trunk/src/pre.l b/trunk/src/pre.l
deleted file mode 100644
index d0acd41..0000000
--- a/trunk/src/pre.l
+++ /dev/null
@@ -1,3051 +0,0 @@
-/******************************************************************************
- *
- *
- *
- * Copyright (C) 1997-2012 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.
- *
- */
-
-%{
-
-/*
- * includes
- */
-
-#include <stdio.h>
-#include <assert.h>
-#include <ctype.h>
-#include <errno.h>
-
-#include "qtbc.h"
-#include <qarray.h>
-#include <qstack.h>
-#include <qfile.h>
-#include <qstrlist.h>
-#include <qdict.h>
-#include <qregexp.h>
-#include <qfileinfo.h>
-#include <qdir.h>
-
-#include "pre.h"
-#include "constexp.h"
-#include "define.h"
-#include "doxygen.h"
-#include "message.h"
-#include "util.h"
-#include "defargs.h"
-#include "debug.h"
-#include "bufstr.h"
-#include "portable.h"
-#include "bufstr.h"
-#include "arguments.h"
-#include "entry.h"
-
-#define YY_NEVER_INTERACTIVE 1
-
-
-struct FileState
-{
- FileState(int size) : fileBuf(size),
- oldFileBuf(0), oldFileBufPos(0) {}
- int lineNr;
- BufStr fileBuf;
- BufStr *oldFileBuf;
- int oldFileBufPos;
- YY_BUFFER_STATE bufState;
- QCString fileName;
-};
-
-/** @brief Singleton that manages the defines available while
- * proprocessing files.
- */
-class DefineManager
-{
- /** Local class used to hold the defines for a single file */
- class DefinesPerFile
- {
- public:
- /** Creates an empty container for defines */
- DefinesPerFile() : m_defines(257), m_includedFiles(17)
- {
- m_defines.setAutoDelete(TRUE);
- }
- /** Destroys the object */
- virtual ~DefinesPerFile()
- {
- }
- /** Adds a define in the context of a file. Will replace
- * an existing define with the same name (redefinition)
- * @param def The Define object to add.
- */
- void addDefine(Define *def)
- {
- Define *d = m_defines.find(def->name);
- if (d!=0) // redefine
- {
- m_defines.remove(d->name);
- }
- m_defines.insert(def->name,def);
- }
- /** Adds an include file for this file
- * @param fileName The name of the include file
- */
- void addInclude(const char *fileName)
- {
- m_includedFiles.insert(fileName,(void*)0x8);
- }
- void collectDefines(DefineDict *dict,QDict<void> &includeStack);
- private:
- DefineDict m_defines;
- QDict<void> m_includedFiles;
- };
-
- public:
- friend class DefinesPerFile;
- /** Returns a reference to the singleton */
- static DefineManager &instance()
- {
- if (theInstance==0) theInstance = new DefineManager;
- return *theInstance;
- }
- /** Deletes the singleton */
- static void deleteInstance()
- {
- delete theInstance;
- theInstance = 0;
- }
- /** Starts a context in which defines are collected.
- * Called at the start of a new file that is preprocessed.
- * @param fileName the name of the file to process.
- */
- void startContext(const char *fileName)
- {
- //printf("DefineManager::startContext()\n");
- m_contextDefines.clear();
- if (fileName==0) return;
- DefinesPerFile *dpf = m_fileMap.find(fileName);
- if (dpf==0)
- {
- //printf("New file!\n");
- dpf = new DefinesPerFile;
- m_fileMap.insert(fileName,dpf);
- }
- }
- /** Ends the context started with startContext() freeing any
- * defines collected within in this context.
- */
- void endContext()
- {
- //printf("DefineManager::endContext()\n");
- m_contextDefines.clear();
- }
- /** Add an included file to the current context.
- * If the file has been pre-processed already, all defines are added
- * to the context.
- * @param fileName The name of the include file to add to the context.
- */
- void addFileToContext(const char *fileName)
- {
- if (fileName==0) return;
- //printf("DefineManager::addFileToContext(%s)\n",fileName);
- DefinesPerFile *dpf = m_fileMap.find(fileName);
- if (dpf==0)
- {
- //printf("New file!\n");
- dpf = new DefinesPerFile;
- m_fileMap.insert(fileName,dpf);
- }
- else
- {
- //printf("existing file!\n");
- QDict<void> includeStack(17);
- dpf->collectDefines(&m_contextDefines,includeStack);
- }
- }
-
- /** Add a define to the manager object.
- * @param fileName The file in which the define was found
- * @param def The Define object to add.
- */
- void addDefine(const char *fileName,Define *def)
- {
- if (fileName==0) return;
- //printf("DefineManager::addDefine(%s,%s)\n",fileName,def->name.data());
- Define *d = m_contextDefines.find(def->name);
- if (d!=0) // redefine
- {
- m_contextDefines.remove(d->name);
- }
- m_contextDefines.insert(def->name,def);
-
- DefinesPerFile *dpf = m_fileMap.find(fileName);
- if (dpf==0)
- {
- dpf = new DefinesPerFile;
- }
- dpf->addDefine(def);
- }
-
- /** Add an include relation to the manager object.
- * @param fromFileName file name in which the include was found.
- * @param toFileName file name that is included.
- */
- void addInclude(const char *fromFileName,const char *toFileName)
- {
- //printf("DefineManager::addInclude(%s,%s)\n",fromFileName,toFileName);
- if (fromFileName==0 || toFileName==0) return;
- DefinesPerFile *dpf = m_fileMap.find(fromFileName);
- if (dpf==0)
- {
- dpf = new DefinesPerFile;
- }
- dpf->addInclude(toFileName);
- }
- /** Returns a Define object given its name or 0 if the Define does
- * not exist.
- */
- Define *isDefined(const char *name) const
- {
- return m_contextDefines.find(name);
- }
- /** Returns a reference to the defines found in the current context. */
- const DefineDict &defineContext() const
- {
- return m_contextDefines;
- }
- private:
- static DefineManager *theInstance;
-
- /** Helper function to collect all define for a given file */
- void collectDefinesForFile(const char *fileName,DefineDict *dict)
- {
- if (fileName==0) return;
- DefinesPerFile *dpf = m_fileMap.find(fileName);
- if (dpf)
- {
- QDict<void> includeStack(17);
- dpf->collectDefines(dict,includeStack);
- }
- }
-
- /** Helper function to return the DefinesPerFile object for a given file name. */
- DefinesPerFile *find(const char *fileName) const
- {
- if (fileName==0) return 0;
- return m_fileMap.find(fileName);
- }
-
- /** Creates a new DefineManager object */
- DefineManager() : m_fileMap(1009), m_contextDefines(1009)
- {
- m_fileMap.setAutoDelete(TRUE);
- }
-
- /** Destroys the object */
- virtual ~DefineManager()
- {
- }
-
- QDict<DefinesPerFile> m_fileMap;
- DefineDict m_contextDefines;
-};
-
-/** Singleton instance */
-DefineManager *DefineManager::theInstance = 0;
-
-/** Collects all defines for a file and all files that the file includes.
- * This function will recursively call itself for each file.
- * @param dict The dictionary to fill with the defines. A redefine will
- * replace a previous definition.
- * @param includeStack The stack of includes, used to stop recursion in
- * case there is a cyclic include dependency.
- */
-void DefineManager::DefinesPerFile::collectDefines(
- DefineDict *dict,QDict<void> &includeStack)
-{
- //printf("DefinesPerFile::collectDefines #defines=%d\n",m_defines.count());
- {
- QDictIterator<void> di(m_includedFiles);
- for (di.toFirst();(di.current());++di)
- {
- QCString incFile = di.currentKey();
- DefinesPerFile *dpf = DefineManager::instance().find(incFile);
- if (dpf && includeStack.find(incFile)==0)
- {
- //printf(" processing include %s\n",incFile.data());
- includeStack.insert(incFile,(void*)0x8);
- dpf->collectDefines(dict,includeStack);
- }
- }
- }
- {
- QDictIterator<Define> di(m_defines);
- Define *def;
- for (di.toFirst();(def=di.current());++di)
- {
- Define *d = dict->find(def->name);
- if (d!=0) // redefine
- {
- dict->remove(d->name);
- }
- dict->insert(def->name,def);
- //printf(" adding define %s\n",def->name.data());
- }
- }
-}
-
-/* -----------------------------------------------------------------
- *
- * scanner's state
- */
-
-static int g_yyLineNr = 1;
-static QCString g_yyFileName;
-static FileDef *g_yyFileDef;
-static FileDef *g_inputFileDef;
-static int g_ifcount = 0;
-static QStrList *g_pathList = 0;
-static QStack<FileState> g_includeStack;
-static QDict<int> *g_argDict;
-static int g_defArgs = -1;
-static QCString g_defName;
-static QCString g_defText;
-static QCString g_defLitText;
-static QCString g_defArgsStr;
-static QCString g_defExtraSpacing;
-static bool g_defVarArgs;
-static int g_level;
-static int g_lastCContext;
-static int g_lastCPPContext;
-static QArray<int> g_levelGuard;
-static BufStr *g_inputBuf;
-static int g_inputBufPos;
-static BufStr *g_outputBuf;
-static int g_roundCount;
-static bool g_quoteArg;
-static DefineDict *g_expandedDict;
-static int g_findDefArgContext;
-static bool g_expectGuard;
-static QCString g_guardName;
-static QCString g_lastGuardName;
-static QCString g_incName;
-static QCString g_guardExpr;
-static int g_curlyCount;
-static bool g_nospaces; // add extra spaces during macro expansion
-
-static bool g_macroExpansion; // from the configuration
-static bool g_expandOnlyPredef; // from the configuration
-static int g_commentCount;
-static bool g_insideComment;
-static bool g_isImported;
-static QCString g_blockName;
-static int g_condCtx;
-static bool g_skip;
-static QStack<bool> g_condStack;
-static bool g_insideCS; // C# has simpler preprocessor
-static bool g_isSource;
-
-static bool g_lexInit = FALSE;
-
-//DefineDict* getGlobalDefineDict()
-//{
-// return g_globalDefineDict;
-//}
-
-static void setFileName(const char *name)
-{
- bool ambig;
- QFileInfo fi(name);
- g_yyFileName=convertToQCString(fi.absFilePath());
- g_yyFileDef=findFileDef(Doxygen::inputNameDict,g_yyFileName,ambig);
- if (g_yyFileDef==0) // if this is not an input file check if it is an
- // include file
- {
- g_yyFileDef=findFileDef(Doxygen::includeNameDict,g_yyFileName,ambig);
- }
- //printf("setFileName(%s) g_yyFileName=%s g_yyFileDef=%p\n",
- // name,g_yyFileName.data(),g_yyFileDef);
- if (g_yyFileDef && g_yyFileDef->isReference()) g_yyFileDef=0;
- g_insideCS = getLanguageFromFileName(g_yyFileName)==SrcLangExt_CSharp;
- g_isSource = guessSection(g_yyFileName);
-}
-
-static void incrLevel()
-{
- g_level++;
- g_levelGuard.resize(g_level);
- g_levelGuard[g_level-1]=FALSE;
- //printf("%s line %d: incrLevel %d\n",g_yyFileName.data(),g_yyLineNr,g_level);
-}
-
-static void decrLevel()
-{
- //printf("%s line %d: decrLevel %d\n",g_yyFileName.data(),g_yyLineNr,g_level);
- if (g_level > 0)
- {
- g_level--;
- g_levelGuard.resize(g_level);
- }
- else
- {
- warn(g_yyFileName,g_yyLineNr,"warning: More #endif's than #if's found.\n");
- }
-}
-
-static bool otherCaseDone()
-{
- if (g_level==0)
- {
- warn(g_yyFileName,g_yyLineNr,"warning: Found an #else without a preceding #if.\n");
- return TRUE;
- }
- else
- {
- return g_levelGuard[g_level-1];
- }
-}
-
-static void setCaseDone(bool value)
-{
- g_levelGuard[g_level-1]=value;
-}
-
-#if 0
-static bool macroIsAccessible(Define *def)
-{
- //printf("macroIsAccessible(%s) input=%s def=%s\n",
- // def->name.data(),g_inputFileDef?g_inputFileDef->name().data():"<none>",
- // def->fileDef ? def->fileDef->name().data() : "<none>");
- if (def && def->isPredefined) // predefined macro -> globally accessible
- {
- //printf("%s: predefined macro %s\n",g_inputFileDef->name().data(),def->name.data());
- return TRUE;
- }
- if (def && def->fileDef==g_inputFileDef)
- {
- //printf("%s: macro %s defined in this file at line %d now at %d\n",
- // g_inputFileDef->name().data(),def->name.data(),def->lineNr,g_yyLineNr);
- return def->lineNr<=g_yyLineNr;
- }
- if (g_inputFileDef && def && def->fileDef) // check if g_inputFileDef actually includes def->fileDef
- {
- QDict<FileDef> includedFiles(257);
- bool b = g_inputFileDef->includes(def->fileDef,&includedFiles);
- //printf("%s: Checking for accessibility of define '%s' (defined in %s): result=%d\n",
- // g_inputFileDef->name().data(),def->name.data(),def->fileDef->name().data(),b);
- return b;
- }
- if (g_inputFileDef && def && !def->fileName.isEmpty())
- {
- bool b = g_inputFileDef->includesByName(def->fileName);
- //printf("%s: Checking for accessibility of define '%s' (defined in %s): result=%d\n",
- // g_inputFileDef->name().data(),def->name.data(),def->fileName.data(),b);
- return b;
- }
- //printf("not accessible!\n");
- return FALSE;
-}
-
-static Define *isDefined(const char *name)
-{
- Define *def=0;
- if (name)
- {
- def=g_globalDefineDict->find(name);
- if (def && def->undef) def=0;
- if (def && !macroIsAccessible(def)) def=0;
- }
- //printf("isDefined(%s)=%p\n",name,def);
- return def;
-}
-#endif
-
-
-static QDict<void> g_allIncludes(10009);
-
-static FileState *checkAndOpenFile(const QCString &fileName,bool &alreadyIncluded)
-{
- alreadyIncluded = FALSE;
- FileState *fs = 0;
- //printf("checkAndOpenFile(%s)\n",fileName.data());
- QFileInfo fi(fileName);
- if (fi.exists() && fi.isFile())
- {
- static QStrList &exclPatterns = Config_getList("EXCLUDE_PATTERNS");
- if (patternMatch(fi,&exclPatterns)) return 0;
-
- QCString absName = convertToQCString(fi.absFilePath());
-
- // global guard
- if (g_curlyCount==0) // not #include inside { ... }
- {
- if (g_allIncludes.find(absName)!=0)
- {
- alreadyIncluded = TRUE;
- //printf(" already included 1\n");
- return 0; // already done
- }
- g_allIncludes.insert(absName,(void *)0x8);
- }
- // check include stack for absName
-
- QStack<FileState> tmpStack;
- g_includeStack.setAutoDelete(FALSE);
- while ((fs=g_includeStack.pop()))
- {
- if (fs->fileName==absName) alreadyIncluded=TRUE;
- tmpStack.push(fs);
- }
- while ((fs=tmpStack.pop()))
- {
- g_includeStack.push(fs);
- }
- g_includeStack.setAutoDelete(TRUE);
-
- if (alreadyIncluded)
- {
- //printf(" already included 2\n");
- return 0;
- }
- //printf("#include %s\n",absName.data());
-
- fs = new FileState(fi.size()+4096);
- alreadyIncluded = FALSE;
- if (!readInputFile(absName,fs->fileBuf))
- { // error
- //printf(" error reading\n");
- delete fs;
- fs=0;
- }
- else
- {
- fs->oldFileBuf = g_inputBuf;
- fs->oldFileBufPos = g_inputBufPos;
- }
- }
- return fs;
-}
-
-static FileState *findFile(const char *fileName,bool localInclude,bool &alreadyIncluded)
-{
- //printf("** findFile(%s,%d) g_yyFileName=%s\n",fileName,localInclude,g_yyFileName.data());
- if (localInclude && !g_yyFileName.isEmpty())
- {
- QFileInfo fi(g_yyFileName);
- if (fi.exists())
- {
- QCString absName = QCString(fi.dirPath(TRUE).data())+"/"+fileName;
- FileState *fs = checkAndOpenFile(absName,alreadyIncluded);
- if (fs)
- {
- setFileName(absName);
- g_yyLineNr=1;
- return fs;
- }
- else if (alreadyIncluded)
- {
- return 0;
- }
- }
- }
- if (g_pathList==0)
- {
- return 0;
- }
- char *s=g_pathList->first();
- while (s)
- {
- QCString absName = (QCString)s+"/"+fileName;
- //printf(" Looking for %s in %s\n",fileName,s);
- FileState *fs = checkAndOpenFile(absName,alreadyIncluded);
- if (fs)
- {
- setFileName(absName);
- g_yyLineNr=1;
- //printf(" -> found it\n");
- return fs;
- }
- else if (alreadyIncluded)
- {
- return 0;
- }
-
- s=g_pathList->next();
- }
- return 0;
-}
-
-static QCString extractTrailingComment(const char *s)
-{
- if (s==0) return "";
- int i=strlen(s)-1;
- while (i>=0)
- {
- char c=s[i];
- switch (c)
- {
- case '/':
- {
- i--;
- if (i>=0 && s[i]=='*') // end of a comment block
- {
- i--;
- while (i>0 && !(s[i-1]=='/' && s[i]=='*')) i--;
- if (i==0)
- {
- i++;
- }
- // only /*!< or /**< are treated as a comment for the macro name,
- // otherwise the comment is treated as part of the macro definition
- return ((s[i+1]=='*' || s[i+1]=='!') && s[i+2]=='<') ? &s[i-1] : "";
- }
- else
- {
- return "";
- }
- }
- break;
- // whitespace or line-continuation
- case ' ':
- case '\t':
- case '\r':
- case '\n':
- case '\\':
- break;
- default:
- return "";
- }
- i--;
- }
- return "";
-}
-
-static int getNextChar(const QCString &expr,QCString *rest,uint &pos);
-static int getCurrentChar(const QCString &expr,QCString *rest,uint pos);
-static void unputChar(const QCString &expr,QCString *rest,uint &pos,char c);
-static void expandExpression(QCString &expr,QCString *rest,int pos);
-
-static QCString stringize(const QCString &s)
-{
- QCString result;
- uint i=0;
- bool inString=FALSE;
- bool inChar=FALSE;
- char c,pc;
- while (i<s.length())
- {
- if (!inString && !inChar)
- {
- while (i<s.length() && !inString && !inChar)
- {
- c=s.at(i++);
- if (c=='"')
- {
- result+="\\\"";
- inString=TRUE;
- }
- else if (c=='\'')
- {
- result+=c;
- inChar=TRUE;
- }
- else
- {
- result+=c;
- }
- }
- }
- else if (inChar)
- {
- while (i<s.length() && inChar)
- {
- c=s.at(i++);
- if (c=='\'')
- {
- result+='\'';
- inChar=FALSE;
- }
- else if (c=='\\')
- {
- result+="\\\\";
- }
- else
- {
- result+=c;
- }
- }
- }
- else
- {
- pc=0;
- while (i<s.length() && inString)
- {
- char c=s.at(i++);
- if (c=='"')
- {
- result+="\\\"";
- inString= pc=='\\';
- }
- else if (c=='\\')
- result+="\\\\";
- else
- result+=c;
- pc=c;
- }
- }
- }
- //printf("stringize `%s'->`%s'\n",s.data(),result.data());
- return result;
-}
-
-/*! Execute all ## operators in expr.
- * If the macro name before or after the operator contains a no-rescan
- * marker (@-) then this is removed (before the concatenated macro name
- * may be expanded again.
- */
-static void processConcatOperators(QCString &expr)
-{
- //printf("processConcatOperators: in=`%s'\n",expr.data());
- QRegExp r("[ \\t\\n]*##[ \\t\\n]*");
- int l,n,i=0;
- if (expr.isEmpty()) return;
- while ((n=r.match(expr,i,&l))!=-1)
- {
- //printf("Match: `%s'\n",expr.data()+i);
- if (n+l+1<(int)expr.length() && expr.at(n+l)=='@' && expr.at(n+l+1)=='-')
- {
- // remove no-rescan marker after ID
- l+=2;
- }
- //printf("found `%s'\n",expr.mid(n,l).data());
- // remove the ## operator and the surrounding whitespace
- expr=expr.left(n)+expr.right(expr.length()-n-l);
- int k=n-1;
- while (k>=0 && isId(expr.at(k))) k--;
- if (k>0 && expr.at(k)=='-' && expr.at(k-1)=='@')
- {
- // remove no-rescan marker before ID
- expr=expr.left(k-1)+expr.right(expr.length()-k-1);
- n-=2;
- }
- i=n;
- }
- //printf("processConcatOperators: out=`%s'\n",expr.data());
-}
-
-static void yyunput (int c,char *buf_ptr );
-static void returnCharToStream(char c)
-{
- unput(c);
-}
-
-static inline void addTillEndOfString(const QCString &expr,QCString *rest,
- uint &pos,char term,QCString &arg)
-{
- int cc;
- while ((cc=getNextChar(expr,rest,pos))!=EOF)
- {
- if (cc=='\\') arg+=(char)cc,cc=getNextChar(expr,rest,pos);
- else if (cc==term) return;
- arg+=(char)cc;
- }
-}
-
-/*! replaces the function macro \a def whose argument list starts at
- * \a pos in expression \a expr.
- * Notice that this routine may scan beyond the \a expr string if needed.
- * In that case the characters will be read from the input file.
- * The replacement string will be returned in \a result and the
- * length of the (unexpanded) argument list is stored in \a len.
- */
-static bool replaceFunctionMacro(const QCString &expr,QCString *rest,int pos,int &len,const Define *def,QCString &result)
-{
- //printf("replaceFunctionMacro(expr=%s,rest=%s,pos=%d,def=%s) level=%d\n",expr.data(),rest ? rest->data() : 0,pos,def->name.data(),g_level);
- uint j=pos;
- len=0;
- result.resize(0);
- int cc;
- while ((cc=getCurrentChar(expr,rest,j))!=EOF && isspace(cc))
- {
- len++;
- getNextChar(expr,rest,j);
- }
- if (cc!='(')
- {
- unputChar(expr,rest,j,' ');
- return FALSE;
- }
- getNextChar(expr,rest,j); // eat the `(' character
-
- QDict<QCString> argTable; // list of arguments
- argTable.setAutoDelete(TRUE);
- QCString arg;
- int argCount=0;
- bool done=FALSE;
-
- // PHASE 1: read the macro arguments
- if (def->nargs==0)
- {
- while ((cc=getNextChar(expr,rest,j))!=EOF)
- {
- char c = (char)cc;
- if (c==')') break;
- }
- }
- else
- {
- while (!done && (argCount<def->nargs || def->varArgs) &&
- ((cc=getNextChar(expr,rest,j))!=EOF)
- )
- {
- char c=(char)cc;
- if (c=='(') // argument is a function => search for matching )
- {
- int level=1;
- arg+=c;
- //char term='\0';
- while ((cc=getNextChar(expr,rest,j))!=EOF)
- {
- char c=(char)cc;
- //printf("processing %c: term=%c (%d)\n",c,term,term);
- if (c=='\'' || c=='\"') // skip ('s and )'s inside strings
- {
- arg+=c;
- addTillEndOfString(expr,rest,j,c,arg);
- }
- if (c==')')
- {
- level--;
- arg+=c;
- if (level==0) break;
- }
- else if (c=='(')
- {
- level++;
- arg+=c;
- }
- else
- arg+=c;
- }
- }
- else if (c==')' || c==',') // last or next argument found
- {
- if (c==',' && argCount==def->nargs-1 && def->varArgs)
- {
- arg=arg.stripWhiteSpace();
- arg+=',';
- }
- else
- {
- QCString argKey;
- argKey.sprintf("@%d",argCount++); // key name
- arg=arg.stripWhiteSpace();
- // add argument to the lookup table
- argTable.insert(argKey, new QCString(arg));
- arg.resize(0);
- if (c==')') // end of the argument list
- {
- done=TRUE;
- }
- }
- }
- else if (c=='\"') // append literal strings
- {
- arg+=c;
- bool found=FALSE;
- while (!found && (cc=getNextChar(expr,rest,j))!=EOF)
- {
- found = cc=='"';
- if (cc=='\\')
- {
- c=(char)cc;
- arg+=c;
- if ((cc=getNextChar(expr,rest,j))==EOF) break;
- }
- c=(char)cc;
- arg+=c;
- }
- }
- else if (c=='\'') // append literal characters
- {
- arg+=c;
- bool found=FALSE;
- while (!found && (cc=getNextChar(expr,rest,j))!=EOF)
- {
- found = cc=='\'';
- if (cc=='\\')
- {
- c=(char)cc;
- arg+=c;
- if ((cc=getNextChar(expr,rest,j))==EOF) break;
- }
- c=(char)cc;
- arg+=c;
- }
- }
- else // append other characters
- {
- arg+=c;
- }
- }
- }
-
- // PHASE 2: apply the macro function
- if (argCount==def->nargs ||
- (argCount>def->nargs && def->varArgs)) // matching parameters lists
- {
- uint k=0;
- // substitution of all formal arguments
- QCString resExpr;
- const QCString d=def->definition.stripWhiteSpace();
- //printf("Macro definition: %s\n",d.data());
- bool inString=FALSE;
- while (k<d.length())
- {
- if (d.at(k)=='@') // maybe a marker, otherwise an escaped @
- {
- if (d.at(k+1)=='@') // escaped @ => copy it (is unescaped later)
- {
- k+=2;
- resExpr+="@@"; // we unescape these later
- }
- else if (d.at(k+1)=='-') // no-rescan marker
- {
- k+=2;
- resExpr+="@-";
- }
- else // argument marker => read the argument number
- {
- QCString key="@";
- QCString *subst=0;
- bool hash=FALSE;
- int l=k-1;
- // search for ## backward
- if (l>=0 && d.at(l)=='"') l--;
- while (l>=0 && d.at(l)==' ') l--;
- if (l>0 && d.at(l)=='#' && d.at(l-1)=='#') hash=TRUE;
- k++;
- // scan the number
- while (k<d.length() && d.at(k)>='0' && d.at(k)<='9') key+=d.at(k++);
- if (!hash)
- {
- // search for ## forward
- l=k;
- if (l<(int)d.length() && d.at(l)=='"') l++;
- while (l<(int)d.length() && d.at(l)==' ') l++;
- if (l<(int)d.length()-1 && d.at(l)=='#' && d.at(l+1)=='#') hash=TRUE;
- }
- //printf("request key %s result %s\n",key.data(),argTable[key]->data());
- if (key.length()>1 && (subst=argTable[key]))
- {
- QCString substArg=*subst;
- //printf("substArg=`%s'\n",substArg.data());
- // only if no ## operator is before or after the argument
- // marker we do macro expansion.
- if (!hash) expandExpression(substArg,0,0);
- if (inString)
- {
- //printf("`%s'=stringize(`%s')\n",stringize(*subst).data(),subst->data());
-
- // if the marker is inside a string (because a # was put
- // before the macro name) we must escape " and \ characters
- resExpr+=stringize(substArg);
- }
- else
- {
- if (hash && substArg.isEmpty())
- {
- resExpr+="@E"; // empty argument will be remove later on
- }
- else if (g_nospaces)
- {
- resExpr+=substArg;
- }
- else
- {
- resExpr+=" "+substArg+" ";
- }
- }
- }
- }
- }
- else // no marker, just copy
- {
- if (!inString && d.at(k)=='\"')
- {
- inString=TRUE; // entering a literal string
- }
- else if (inString && d.at(k)=='\"' && (d.at(k-1)!='\\' || d.at(k-2)=='\\'))
- {
- inString=FALSE; // leaving a literal string
- }
- resExpr+=d.at(k++);
- }
- }
- len=j-pos;
- result=resExpr;
- //printf("result after substitution `%s' expr=`%s'\n",
- // result.data(),expr.mid(pos,len).data());
- return TRUE;
- }
- return FALSE;
-}
-
-
-/*! returns the next identifier in string \a expr by starting at position \a p.
- * The position of the identifier is returned (or -1 if nothing is found)
- * and \a l is its length. Any quoted strings are skipping during the search.
- */
-static int getNextId(const QCString &expr,int p,int *l)
-{
- int n;
- while (p<(int)expr.length())
- {
- char c=expr.at(p++);
- if (isdigit(c)) // skip number
- {
- while (p<(int)expr.length() && isId(expr.at(p))) p++;
- }
- else if (isalpha(c) || c=='_') // read id
- {
- n=p-1;
- while (p<(int)expr.length() && isId(expr.at(p))) p++;
- *l=p-n;
- return n;
- }
- else if (c=='"') // skip string
- {
- char ppc=0,pc=c;
- if (p<(int)expr.length()) c=expr.at(p);
- while (p<(int)expr.length() && (c!='"' || (pc=='\\' && ppc!='\\')))
- // continue as long as no " is found, but ignoring \", but not \\"
- {
- ppc=pc;
- pc=c;
- c=expr.at(p);
- p++;
- }
- if (p<(int)expr.length()) ++p; // skip closing quote
- }
- else if (c=='/') // skip C Comment
- {
- //printf("Found C comment at p=%d\n",p);
- char pc=c;
- if (p<(int)expr.length())
- {
- c=expr.at(p);
- if (c=='*') // Start of C comment
- {
- p++;
- while (p<(int)expr.length() && !(pc=='*' && c=='/'))
- {
- pc=c;
- c=expr.at(p++);
- }
- }
- }
- //printf("Found end of C comment at p=%d\n",p);
- }
- }
- return -1;
-}
-
-/*! preforms recursive macro expansion on the string \a expr
- * starting at position \a pos.
- * May read additional characters from the input while re-scanning!
- * If \a expandAll is \c TRUE then all macros in the expression are
- * expanded, otherwise only the first is expanded.
- */
-static void expandExpression(QCString &expr,QCString *rest,int pos)
-{
- //printf("expandExpression(%s,%s)\n",expr.data(),rest ? rest->data() : 0);
- QCString macroName;
- QCString expMacro;
- bool definedTest=FALSE;
- int i=pos,l,p,len;
- while ((p=getNextId(expr,i,&l))!=-1) // search for an macro name
- {
- bool replaced=FALSE;
- macroName=expr.mid(p,l);
- //printf("macroName=%s\n",macroName.data());
- if (p<2 || !(expr.at(p-2)=='@' && expr.at(p-1)=='-')) // no-rescan marker?
- {
- if (g_expandedDict->find(macroName)==0) // expand macro
- {
- Define *def=DefineManager::instance().isDefined(macroName);
- if (definedTest) // macro name was found after defined
- {
- if (def) expMacro = " 1 "; else expMacro = " 0 ";
- replaced=TRUE;
- len=l;
- definedTest=FALSE;
- }
- else if (def && def->nargs==-1) // simple macro
- {
- // substitute the definition of the macro
- //printf("macro `%s'->`%s'\n",macroName.data(),def->definition.data());
- if (g_nospaces)
- {
- expMacro=def->definition.stripWhiteSpace();
- }
- else
- {
- expMacro=" "+def->definition.stripWhiteSpace()+" ";
- }
- //expMacro=def->definition.stripWhiteSpace();
- replaced=TRUE;
- len=l;
- //printf("simple macro expansion=`%s'->`%s'\n",macroName.data(),expMacro.data());
- }
- else if (def && def->nargs>=0) // function macro
- {
- replaced=replaceFunctionMacro(expr,rest,p+l,len,def,expMacro);
- len+=l;
- }
- else if (macroName=="defined")
- {
- //printf("found defined inside macro definition '%s'\n",expr.right(expr.length()-p).data());
- definedTest=TRUE;
- }
-
- if (replaced) // expand the macro and rescan the expression
- {
-
- //printf("replacing `%s'->`%s'\n",expr.mid(p,len).data(),expMacro.data());
- QCString resultExpr=expMacro;
- QCString restExpr=expr.right(expr.length()-len-p);
- processConcatOperators(resultExpr);
- if (def && !def->nonRecursive)
- {
- g_expandedDict->insert(macroName,def);
- expandExpression(resultExpr,&restExpr,0);
- g_expandedDict->remove(macroName);
- }
- expr=expr.left(p)+resultExpr+restExpr;
- i=p;
- //printf("new expression: %s\n",expr.data());
- }
- else // move to the next macro name
- {
- //printf("moving to the next macro old=%d new=%d\n",i,p+l);
- i=p+l;
- }
- }
- else // move to the next macro name
- {
- expr=expr.left(p)+"@-"+expr.right(expr.length()-p);
- //printf("macro already expanded, moving to the next macro expr=%s\n",expr.data());
- i=p+l+2;
- //i=p+l;
- }
- }
- else // no re-scan marker found, skip the macro name
- {
- //printf("skipping marked macro\n");
- i=p+l;
- }
- }
-}
-
-/*! replaces all occurrences of @@@@ in \a s by @@
- * and removes all occurrences of @@E.
- * All identifiers found are replaced by 0L
- */
-QCString removeIdsAndMarkers(const char *s)
-{
- //printf("removeIdsAndMarkers(%s)\n",s);
- const char *p=s;
- char c;
- bool inNum=FALSE;
- QCString result;
- if (p)
- {
- while ((c=*p))
- {
- if (c=='@') // replace @@ with @ and remove @E
- {
- if (*(p+1)=='@')
- {
- result+=c;
- }
- else if (*(p+1)=='E')
- {
- // skip
- }
- p+=2;
- }
- else if (isdigit(c)) // number
- {
- result+=c;
- p++;
- inNum=TRUE;
- }
- else if (c=='d' && !inNum) // identifier starting with a `d'
- {
- if (strncmp(p,"defined ",8)==0 || strncmp(p,"defined(",8)==0)
- // defined keyword
- {
- p+=7; // skip defined
- }
- else
- {
- result+="0L";
- p++;
- while ((c=*p) && isId(c)) p++;
- }
- }
- else if ((isalpha(c) || c=='_') && !inNum) // replace identifier with 0L
- {
- result+="0L";
- p++;
- while ((c=*p) && isId(c)) p++;
- if (*p=='(') // undefined function macro
- {
- p++;
- int count=1;
- while ((c=*p++))
- {
- if (c=='(') count++;
- else if (c==')')
- {
- count--;
- if (count==0) break;
- }
- else if (c=='/')
- {
- char pc=c;
- c=*++p;
- if (c=='*') // start of C comment
- {
- while (*p && !(pc=='*' && c=='/')) // search end of comment
- {
- pc=c;
- c=*++p;
- }
- p++;
- }
- }
- }
- }
- }
- else if (c=='/') // skip C comments
- {
- char pc=c;
- c=*++p;
- if (c=='*') // start of C comment
- {
- while (*p && !(pc=='*' && c=='/')) // search end of comment
- {
- pc=c;
- c=*++p;
- }
- p++;
- }
- else // oops, not comment but division
- {
- result+=pc;
- goto nextChar;
- }
- }
- else
- {
-nextChar:
- result+=c;
- char lc=tolower(c);
- if (!isId(lc) && lc!='.' /*&& lc!='-' && lc!='+'*/) inNum=FALSE;
- p++;
- }
- }
- }
- //printf("removeIdsAndMarkers(%s)=%s\n",s,result.data());
- return result;
-}
-
-/*! replaces all occurrences of @@ in \a s by @
- * \par assumption:
- * \a s only contains pairs of @@'s
- */
-QCString removeMarkers(const char *s)
-{
- const char *p=s;
- char c;
- QCString result;
- if (p)
- {
- while ((c=*p))
- {
- switch(c)
- {
- case '@': // replace @@ with @
- {
- if (*(p+1)=='@')
- {
- result+=c;
- }
- p+=2;
- }
- break;
- case '/': // skip C comments
- {
- result+=c;
- char pc=c;
- c=*++p;
- if (c=='*') // start of C comment
- {
- while (*p && !(pc=='*' && c=='/')) // search end of comment
- {
- if (*p=='@' && *(p+1)=='@')
- result+=c,p++;
- else
- result+=c;
- pc=c;
- c=*++p;
- }
- if (*p) result+=c,p++;
- }
- }
- break;
- case '"': // skip string literals
- {
- result+=c;
- char pc=c;
- c=*++p;
- while (*p && (c!='"' || pc=='\\')) // no end quote
- {
- result+=c;
- c=*++p;
- }
- if (*p) result+=c,p++;
- }
- break;
- case '\'': // skip char literals
- {
- result+=c;
- char pc=c;
- c=*++p;
- while (*p && (c!='\'' || pc=='\\')) // no end quote
- {
- result+=c;
- c=*++p;
- }
- if (*p) result+=c,p++;
- }
- break;
- default:
- {
- result+=c;
- p++;
- }
- break;
- }
- }
- }
- //printf("RemoveMarkers(%s)=%s\n",s,result.data());
- return result;
-}
-
-/*! compute the value of the expression in string \a expr.
- * If needed the function may read additional characters from the input.
- */
-
-bool computeExpression(const QCString &expr)
-{
- QCString e=expr;
- expandExpression(e,0,0);
- //printf("after expansion `%s'\n",e.data());
- e = removeIdsAndMarkers(e);
- if (e.isEmpty()) return FALSE;
- //printf("parsing `%s'\n",e.data());
- return parseCppExpression(g_yyFileName,g_yyLineNr,e);
-}
-
-/*! expands the macro definition in \a name
- * If needed the function may read additional characters from the input
- */
-
-QCString expandMacro(const QCString &name)
-{
- QCString n=name;
- expandExpression(n,0,0);
- n=removeMarkers(n);
- //printf("expandMacro `%s'->`%s'\n",name.data(),n.data());
- return n;
-}
-
-Define *newDefine()
-{
- Define *def=new Define;
- def->name = g_defName;
- def->definition = g_defText.stripWhiteSpace();
- def->nargs = g_defArgs;
- def->fileName = g_yyFileName;
- def->fileDef = g_yyFileDef;
- def->lineNr = g_yyLineNr;
- def->varArgs = g_defVarArgs;
- //printf("newDefine: %s %s file: %s\n",def->name.data(),def->definition.data(),
- // def->fileDef ? def->fileDef->name().data() : def->fileName.data());
- //printf("newDefine: `%s'->`%s'\n",def->name.data(),def->definition.data());
- if (!def->name.isEmpty() && Doxygen::expandAsDefinedDict[def->name])
- {
- def->isPredefined=TRUE;
- }
- return def;
-}
-
-void addDefine()
-{
- if (g_skip) return; // do not add this define as it is inside a
- // conditional section (cond command) that is disabled.
- if (!Doxygen::gatherDefines) return;
-
- //printf("addDefine %s %s\n",g_defName.data(),g_defArgsStr.data());
- //ArgumentList *al = new ArgumentList;
- //stringToArgumentList(g_defArgsStr,al);
- MemberDef *md=new MemberDef(
- g_yyFileName,g_yyLineNr,
- "#define",g_defName,g_defArgsStr,0,
- Public,Normal,FALSE,Member,MemberDef::Define,0,0);
- if (!g_defArgsStr.isEmpty())
- {
- ArgumentList *argList = new ArgumentList;
- //printf("addDefine() g_defName=`%s' g_defArgsStr=`%s'\n",g_defName.data(),g_defArgsStr.data());
- stringToArgumentList(g_defArgsStr,argList);
- md->setArgumentList(argList);
- }
- //printf("Setting initializer for `%s' to `%s'\n",g_defName.data(),g_defText.data());
- int l=g_defLitText.find('\n');
- if (l>0 && g_defLitText.left(l).stripWhiteSpace()=="\\")
- {
- // strip first line if it only contains a slash
- g_defLitText = g_defLitText.right(g_defLitText.length()-l-1);
- }
- else if (l>0)
- {
- // align the items on the first line with the items on the second line
- int k=l+1;
- const char *p=g_defLitText.data()+k;
- char c;
- while ((c=*p++) && (c==' ' || c=='\t')) k++;
- g_defLitText=g_defLitText.mid(l+1,k-l-1)+g_defLitText.stripWhiteSpace();
- }
- md->setInitializer(g_defLitText.stripWhiteSpace());
-
- //printf("pre.l: md->setFileDef(%p)\n",g_inputFileDef);
- md->setFileDef(g_inputFileDef);
- md->setDefinition("#define "+g_defName);
-
- MemberName *mn=Doxygen::functionNameSDict->find(g_defName);
- if (mn==0)
- {
- mn = new MemberName(g_defName);
- Doxygen::functionNameSDict->append(g_defName,mn);
- }
- mn->append(md);
- if (g_yyFileDef)
- {
- g_yyFileDef->insertMember(md);
- }
-
- //Define *d;
- //if ((d=defineDict[g_defName])==0) defineDict.insert(g_defName,newDefine());
-}
-
-static inline void outputChar(char c)
-{
- if (g_includeStack.isEmpty() || g_curlyCount>0) g_outputBuf->addChar(c);
-}
-
-static inline void outputArray(const char *a,int len)
-{
- if (g_includeStack.isEmpty() || g_curlyCount>0) g_outputBuf->addArray(a,len);
-}
-
-static void readIncludeFile(const QCString &inc)
-{
- static bool searchIncludes = Config_getBool("SEARCH_INCLUDES");
- if (!searchIncludes) return; // do not read include files
- uint i=0;
-
- // find the start of the include file name
- while (i<inc.length() &&
- (inc.at(i)==' ' || inc.at(i)=='"' || inc.at(i)=='<')
- ) i++;
- uint s=i;
-
- // was it a local include?
- bool localInclude = s>0 && inc.at(s-1)=='"';
-
- // find the end of the include file name
- while (i<inc.length() && inc.at(i)!='"' && inc.at(i)!='>') i++;
-
- if (s<inc.length() && i>s) // valid include file name found
- {
- // extract include path+name
- QCString incFileName=inc.mid(s,i-s).stripWhiteSpace();
-
- QCString dosExt = incFileName.right(4);
- if (dosExt==".exe" || dosExt==".dll" || dosExt==".tlb")
- {
- // skip imported binary files (e.g. M$ type libraries)
- return;
- }
-
- QCString oldFileName = g_yyFileName;
- FileDef *oldFileDef = g_yyFileDef;
- int oldLineNr = g_yyLineNr;
- //printf("Searching for `%s'\n",incFileName.data());
-
- // absIncFileName avoids difficulties for incFileName starting with "../" (bug 641336)
- QCString absIncFileName = incFileName;
- {
- static bool searchIncludes = Config_getBool("SEARCH_INCLUDES");
- QFileInfo fi(g_yyFileName);
- if (fi.exists())
- {
- QCString absName = QCString(fi.dirPath(TRUE).data())+"/"+incFileName;
- QFileInfo fi2(absName);
- if (fi2.exists())
- {
- absIncFileName=fi2.absFilePath();
- }
- else if (searchIncludes) // search in INCLUDE_PATH as well
- {
- QStrList &includePath = Config_getList("INCLUDE_PATH");
- char *s=includePath.first();
- while (s)
- {
- QFileInfo fi(s);
- if (fi.exists() && fi.isDir())
- {
- QCString absName = QCString(fi.absFilePath())+"/"+incFileName;
- //printf("trying absName=%s\n",absName.data());
- QFileInfo fi2(absName);
- if (fi2.exists())
- {
- absIncFileName=fi2.absFilePath();
- break;
- }
- //printf( "absIncFileName = %s\n", absIncFileName.data() );
- }
- s=includePath.next();
- }
- }
- //printf( "absIncFileName = %s\n", absIncFileName.data() );
- }
- }
- DefineManager::instance().addInclude(g_yyFileName,absIncFileName);
- DefineManager::instance().addFileToContext(absIncFileName);
-
- // findFile will overwrite g_yyFileDef if found
- FileState *fs;
- bool alreadyIncluded = FALSE;
- //printf("calling findFile(%s)\n",incFileName.data());
- if ((fs=findFile(incFileName,localInclude,alreadyIncluded))) // see if the include file can be found
- {
- //printf("Found include file!\n");
- if (Debug::isFlagSet(Debug::Preprocessor))
- {
- for (i=0;i<g_includeStack.count();i++)
- {
- Debug::print(Debug::Preprocessor,0," ");
- }
- //msg("#include %s: parsing...\n",incFileName.data());
- }
- if (oldFileDef)
- {
- // add include dependency to the file in which the #include was found
- bool ambig;
- // change to absolute name for bug 641336
- FileDef *incFd = findFileDef(Doxygen::inputNameDict,absIncFileName,ambig);
- oldFileDef->addIncludeDependency(ambig ? 0 : incFd,incFileName,localInclude,g_isImported,FALSE);
- // add included by dependency
- if (g_yyFileDef)
- {
- //printf("Adding include dependency %s->%s\n",oldFileDef->name().data(),incFileName.data());
- g_yyFileDef->addIncludedByDependency(oldFileDef,oldFileDef->docName(),localInclude,g_isImported);
- }
- }
- else if (g_inputFileDef)
- {
- g_inputFileDef->addIncludeDependency(0,absIncFileName,localInclude,g_isImported,TRUE);
- }
- fs->bufState = YY_CURRENT_BUFFER;
- fs->lineNr = oldLineNr;
- fs->fileName = oldFileName;
- // push the state on the stack
- g_includeStack.push(fs);
- // set the scanner to the include file
-
- // Deal with file changes due to
- // #include's within { .. } blocks
- QCString lineStr(g_yyFileName.length()+20);
- lineStr.sprintf("# 1 \"%s\" 1\n",g_yyFileName.data());
- outputArray(lineStr.data(),lineStr.length());
-
- //fprintf(stderr,"Switching to include file %s\n",incFileName.data());
- g_expectGuard=TRUE;
- g_inputBuf = &fs->fileBuf;
- g_inputBufPos=0;
- yy_switch_to_buffer(yy_create_buffer(0, YY_BUF_SIZE));
- }
- else
- {
- //printf(" calling findFile(%s) alreadyInc=%d\n",incFileName.data(),alreadyIncluded);
- if (oldFileDef)
- {
- bool ambig;
- //QCString absPath = incFileName;
- //if (QDir::isRelativePath(incFileName))
- //{
- // absPath = QDir::cleanDirPath(oldFileDef->getPath()+"/"+incFileName);
- // //printf("%s + %s -> resolved path %s\n",oldFileDef->getPath().data(),incFileName.data(),absPath.data());
- //}
-
- // change to absolute name for bug 641336
- FileDef *fd = findFileDef(Doxygen::inputNameDict,absIncFileName,ambig);
- //printf("%s::findFileDef(%s)=%p\n",oldFileDef->name().data(),incFileName.data(),fd);
- // add include dependency to the file in which the #include was found
- oldFileDef->addIncludeDependency(ambig ? 0 : fd,incFileName,localInclude,g_isImported,FALSE);
- // add included by dependency
- if (fd)
- {
- //printf("Adding include dependency (2) %s->%s ambig=%d\n",oldFileDef->name().data(),fd->name().data(),ambig);
- fd->addIncludedByDependency(oldFileDef,oldFileDef->docName(),localInclude,g_isImported);
- }
- }
- else if (g_inputFileDef)
- {
- g_inputFileDef->addIncludeDependency(0,absIncFileName,localInclude,g_isImported,TRUE);
- }
- if (Debug::isFlagSet(Debug::Preprocessor))
- {
- if (alreadyIncluded)
- {
- Debug::print(Debug::Preprocessor,0,"#include %s: already included! skipping...\n",incFileName.data());
- }
- else
- {
- Debug::print(Debug::Preprocessor,0,"#include %s: not found! skipping...\n",incFileName.data());
- }
- //printf("error: include file %s not found\n",yytext);
- }
- if (g_curlyCount>0 && !alreadyIncluded) // failed to find #include inside { ... }
- {
- warn(g_yyFileName,g_yyLineNr,"Warning: include file %s not found, perhaps you forgot to add its directory to INCLUDE_PATH?",incFileName.data());
- }
- }
- }
-}
-
-/* ----------------------------------------------------------------- */
-
-static void startCondSection(const char *sectId)
-{
- g_condStack.push(new bool(g_skip));
- if (Config_getList("ENABLED_SECTIONS").find(sectId)==-1)
- {
- g_skip=TRUE;
- }
-}
-
-static void endCondSection()
-{
- if (g_condStack.isEmpty())
- {
- g_skip=FALSE;
- }
- else
- {
- bool *ctx = g_condStack.pop();
- g_skip=*ctx;
- }
-}
-
-static void forceEndCondSection()
-{
- while (!g_condStack.isEmpty())
- {
- g_condStack.pop();
- }
- g_skip=FALSE;
-}
-
-static QCString escapeAt(const char *text)
-{
- QCString result;
- if (text)
- {
- char c;
- const char *p=text;
- while ((c=*p++))
- {
- if (c=='@') result+="@@"; else result+=c;
- }
- }
- return result;
-}
-
-static char resolveTrigraph(char c)
-{
- switch (c)
- {
- case '=': return '#';
- case '/': return '\\';
- case '\'': return '^';
- case '(': return '[';
- case ')': return ']';
- case '!': return '|';
- case '<': return '{';
- case '>': return '}';
- case '-': return '~';
- }
- return '?';
-}
-
-/* ----------------------------------------------------------------- */
-
-#undef YY_INPUT
-#define YY_INPUT(buf,result,max_size) result=yyread(buf,max_size);
-
-static int yyread(char *buf,int max_size)
-{
- int bytesInBuf = g_inputBuf->curPos()-g_inputBufPos;
- int bytesToCopy = QMIN(max_size,bytesInBuf);
- memcpy(buf,g_inputBuf->data()+g_inputBufPos,bytesToCopy);
- g_inputBufPos+=bytesToCopy;
- return bytesToCopy;
-}
-
-/* ----------------------------------------------------------------- */
-
-%}
-
-ID [a-z_A-Z][a-z_A-Z0-9]*
-B [ \t]
-BN [ \t\r\n]
-CHARLIT (("'"\\[0-7]{1,3}"'")|("'"\\."'")|("'"[^'\\\n]{1,4}"'"))
-
-%option noyywrap
-
-%x Start
-%x Command
-%x SkipCommand
-%x SkipLine
-%x SkipString
-%x CopyLine
-%x CopyString
-%x Include
-%x IncludeID
-%x EndImport
-%x DefName
-%x DefineArg
-%x DefineText
-%x SkipCPPBlock
-%x Ifdef
-%x Ifndef
-%x SkipCComment
-%x CopyCComment
-%x SkipVerbatim
-%x SkipCPPComment
-%x RemoveCComment
-%x RemoveCPPComment
-%x Guard
-%x DefinedExpr1
-%x DefinedExpr2
-%x SkipDoubleQuote
-%x SkipSingleQuote
-%x UndefName
-%x IgnoreLine
-%x FindDefineArgs
-%x ReadString
-%x CondLine
-
-%%
-
-<*>\x06
-<*>\x00
-<*>\r
-<*>"??"[=/'()!<>-] { // Trigraph
- unput(resolveTrigraph(yytext[2]));
- }
-<Start>^{B}*"#" { BEGIN(Command); }
-<Start>^{B}*/[^#] {
- outputArray(yytext,yyleng);
- BEGIN(CopyLine);
- }
-<Start>^{B}*[_A-Z][_A-Z0-9]*{B}*"("[^\)\n]*")"/{BN}{1,10}*[:{] { // constructors?
- int i;
- for (i=yyleng-1;i>=0;i--)
- {
- unput(yytext[i]);
- }
- BEGIN(CopyLine);
- }
-<Start>^{B}*[_A-Z][_A-Z0-9]*{B}*"("[^\(\)\n]*"("[^\)\n]*")"[^\)\n]*")"{B}*\n | // function list macro with one (...) argument, e.g. for K_GLOBAL_STATIC_WITH_ARGS
-<Start>^{B}*[_A-Z][_A-Z0-9]*{B}*"("[^\)\n]*")"{B}*\n { // function like macro
- static bool skipFuncMacros = Config_getBool("SKIP_FUNCTION_MACROS");
- QCString name(yytext);
- name=name.left(name.find('(')).stripWhiteSpace();
-
- Define *def=0;
- if (skipFuncMacros &&
- name!="Q_PROPERTY" &&
- !(
- (g_includeStack.isEmpty() || g_curlyCount>0) &&
- g_macroExpansion &&
- (def=DefineManager::instance().isDefined(name)) &&
- /*macroIsAccessible(def) &&*/
- (!g_expandOnlyPredef || def->isPredefined)
- )
- )
- {
- outputChar('\n');
- g_yyLineNr++;
- }
- else // don't skip
- {
- int i;
- for (i=yyleng-1;i>=0;i--)
- {
- unput(yytext[i]);
- }
- BEGIN(CopyLine);
- }
- }
-<CopyLine>"extern"{BN}{0,80}"\"C\""*{BN}{0,80}"{" {
- QCString text=yytext;
- g_yyLineNr+=text.contains('\n');
- outputArray(yytext,yyleng);
- }
-<CopyLine>"{" { // count brackets inside the main file
- if (g_includeStack.isEmpty())
- {
- g_curlyCount++;
- }
- outputChar(*yytext);
- }
-<CopyLine>"}" { // count brackets inside the main file
- if (g_includeStack.isEmpty() && g_curlyCount>0)
- {
- g_curlyCount--;
- }
- outputChar(*yytext);
- }
-<CopyLine>"'"\\[0-7]{1,3}"'" {
- outputArray(yytext,yyleng);
- }
-<CopyLine>"'"\\."'" {
- outputArray(yytext,yyleng);
- }
-<CopyLine>"'"."'" {
- outputArray(yytext,yyleng);
- }
-<CopyLine>\" {
- outputChar(*yytext);
- BEGIN( CopyString );
- }
-<CopyString>[^\"\\\r\n]+ {
- outputArray(yytext,yyleng);
- }
-<CopyString>\\. {
- outputArray(yytext,yyleng);
- }
-<CopyString>\" {
- outputChar(*yytext);
- BEGIN( CopyLine );
- }
-<CopyLine>{ID}/{BN}{0,80}"(" {
- g_expectGuard = FALSE;
- Define *def=0;
- //def=g_globalDefineDict->find(yytext);
- //def=DefineManager::instance().isDefined(yytext);
- //printf("Search for define %s found=%d g_includeStack.isEmpty()=%d "
- // "g_curlyCount=%d g_macroExpansion=%d g_expandOnlyPredef=%d "
- // "isPreDefined=%d\n",yytext,def ? 1 : 0,
- // g_includeStack.isEmpty(),g_curlyCount,g_macroExpansion,g_expandOnlyPredef,
- // def ? def->isPredefined : -1
- // );
- if ((g_includeStack.isEmpty() || g_curlyCount>0) &&
- g_macroExpansion &&
- (def=DefineManager::instance().isDefined(yytext)) &&
- /*(def->isPredefined || macroIsAccessible(def)) && */
- (!g_expandOnlyPredef || def->isPredefined)
- )
- {
- //printf("Found it! #args=%d\n",def->nargs);
- g_roundCount=0;
- g_defArgsStr=yytext;
- if (def->nargs==-1) // no function macro
- {
- QCString result = def->isPredefined ? def->definition : expandMacro(g_defArgsStr);
- outputArray(result,result.length());
- }
- else // zero or more arguments
- {
- g_findDefArgContext = CopyLine;
- BEGIN(FindDefineArgs);
- }
- }
- else
- {
- outputArray(yytext,yyleng);
- }
- }
-<CopyLine>{ID} {
- Define *def=0;
- if ((g_includeStack.isEmpty() || g_curlyCount>0) &&
- g_macroExpansion &&
- (def=DefineManager::instance().isDefined(yytext)) &&
- def->nargs==-1 &&
- /*(def->isPredefined || macroIsAccessible(def)) &&*/
- (!g_expandOnlyPredef || def->isPredefined)
- )
- {
- QCString result=def->isPredefined ? def->definition : expandMacro(yytext);
- outputArray(result,result.length());
- }
- else
- {
- outputArray(yytext,yyleng);
- }
- }
-<CopyLine>"\\"\r?/\n { // strip line continuation characters
- }
-<CopyLine>. {
- outputChar(*yytext);
- }
-<CopyLine>\n {
- outputChar('\n');
- BEGIN(Start);
- g_yyLineNr++;
- }
-<FindDefineArgs>"(" {
- g_defArgsStr+='(';
- g_roundCount++;
- }
-<FindDefineArgs>")" {
- g_defArgsStr+=')';
- g_roundCount--;
- if (g_roundCount==0)
- {
- QCString result=expandMacro(g_defArgsStr);
- //printf("g_defArgsStr=`%s'->`%s'\n",g_defArgsStr.data(),result.data());
- if (g_findDefArgContext==CopyLine)
- {
- outputArray(result,result.length());
- BEGIN(g_findDefArgContext);
- }
- else // g_findDefArgContext==IncludeID
- {
- readIncludeFile(result);
- g_nospaces=FALSE;
- BEGIN(Start);
- }
- }
- }
- /*
-<FindDefineArgs>")"{B}*"(" {
- g_defArgsStr+=yytext;
- }
- */
-<FindDefineArgs>{CHARLIT} {
- g_defArgsStr+=yytext;
- }
-<FindDefineArgs>\" {
- g_defArgsStr+=*yytext;
- BEGIN(ReadString);
- }
-<FindDefineArgs>\n {
- g_yyLineNr++;
- outputChar('\n');
- }
-<FindDefineArgs>"@" {
- g_defArgsStr+="@@";
- }
-<FindDefineArgs>. {
- g_defArgsStr+=*yytext;
- }
-<ReadString>"\"" {
- g_defArgsStr+=*yytext;
- BEGIN(FindDefineArgs);
- }
-<ReadString>"//"|"/*" {
- g_defArgsStr+=yytext;
- }
-<ReadString>\\. {
- g_defArgsStr+=yytext;
- }
-<ReadString>. {
- g_defArgsStr+=*yytext;
- }
-<Command>("include"|"import"){B}+/{ID} {
- g_isImported = yytext[1]=='m';
- if (g_macroExpansion)
- BEGIN(IncludeID);
- }
-<Command>("include"|"import"){B}*[<"] {
- g_isImported = yytext[1]=='m';
- char c[2];
- c[0]=yytext[yyleng-1];c[1]='\0';
- g_incName=c;
- BEGIN(Include);
- }
-<Command>("cmake")?"define"{B}+ {
- //printf("!!!DefName\n");
- BEGIN(DefName);
- }
-<Command>"ifdef"/{B}*"(" {
- incrLevel();
- g_guardExpr.resize(0);
- BEGIN(DefinedExpr2);
- }
-<Command>"ifdef"/{B}+ {
- //printf("Pre.l: ifdef\n");
- incrLevel();
- g_guardExpr.resize(0);
- BEGIN(DefinedExpr1);
- }
-<Command>"ifndef"/{B}*"(" {
- incrLevel();
- g_guardExpr="! ";
- BEGIN(DefinedExpr2);
- }
-<Command>"ifndef"/{B}+ {
- incrLevel();
- g_guardExpr="! ";
- BEGIN(DefinedExpr1);
- }
-<Command>"if"/[ \t(!] {
- incrLevel();
- g_guardExpr.resize(0);
- BEGIN(Guard);
- }
-<Command>("elif"|"else"{B}*"if")/[ \t(!] {
- if (!otherCaseDone())
- {
- g_guardExpr.resize(0);
- BEGIN(Guard);
- }
- else
- {
- g_ifcount=0;
- BEGIN(SkipCPPBlock);
- }
- }
-<Command>"else"/[^a-z_A-Z0-9] {
- //printf("else g_levelGuard[%d]=%d\n",g_level-1,g_levelGuard[g_level-1]);
- if (otherCaseDone())
- {
- g_ifcount=0;
- BEGIN(SkipCPPBlock);
- }
- else
- {
- setCaseDone(TRUE);
- //g_levelGuard[g_level-1]=TRUE;
- }
- }
-<Command>"undef"{B}+ {
- BEGIN(UndefName);
- }
-<Command>("elif"|"else"{B}*"if")/[ \t(!] {
- if (!otherCaseDone())
- {
- g_guardExpr.resize(0);
- BEGIN(Guard);
- }
- }
-<Command>"endif"/[^a-z_A-Z0-9] {
- //printf("Pre.l: #endif\n");
- decrLevel();
- }
-<Command,IgnoreLine>\n {
- outputChar('\n');
- BEGIN(Start);
- g_yyLineNr++;
- }
-<Command>"pragma"{B}+"once" {
- g_expectGuard = FALSE;
- }
-<Command>{ID} { // unknown directive
- BEGIN(IgnoreLine);
- }
-<IgnoreLine>\\[\r]?\n {
- outputChar('\n');
- g_yyLineNr++;
- }
-<IgnoreLine>.
-<Command>.
-<UndefName>{ID} {
- Define *def;
- if ((def=DefineManager::instance().isDefined(yytext))
- /*&& !def->isPredefined*/
- && !def->nonRecursive
- )
- {
- //printf("undefining %s\n",yytext);
- def->undef=TRUE;
- }
- BEGIN(Start);
- }
-<Guard>\\[\r]?\n {
- outputChar('\n');
- g_guardExpr+=' ';
- g_yyLineNr++;
- }
-<Guard>"defined"/{B}*"(" {
- BEGIN(DefinedExpr2);
- }
-<Guard>"defined"/{B}+ {
- BEGIN(DefinedExpr1);
- }
-<Guard>{ID} { g_guardExpr+=yytext; }
-<Guard>. { g_guardExpr+=*yytext; }
-<Guard>\n {
- unput(*yytext);
- //printf("Guard: `%s'\n",
- // g_guardExpr.data());
- bool guard=computeExpression(g_guardExpr);
- setCaseDone(guard);
- //printf("if g_levelGuard[%d]=%d\n",g_level-1,g_levelGuard[g_level-1]);
- if (guard)
- {
- BEGIN(Start);
- }
- else
- {
- g_ifcount=0;
- BEGIN(SkipCPPBlock);
- }
- }
-<DefinedExpr1,DefinedExpr2>\\\n { g_yyLineNr++; outputChar('\n'); }
-<DefinedExpr1>{ID} {
- if (DefineManager::instance().isDefined(yytext) || g_guardName==yytext)
- g_guardExpr+=" 1L ";
- else
- g_guardExpr+=" 0L ";
- g_lastGuardName=yytext;
- BEGIN(Guard);
- }
-<DefinedExpr2>{ID} {
- if (DefineManager::instance().isDefined(yytext) || g_guardName==yytext)
- g_guardExpr+=" 1L ";
- else
- g_guardExpr+=" 0L ";
- g_lastGuardName=yytext;
- }
-<DefinedExpr1,DefinedExpr2>\n { // should not happen, handle anyway
- g_yyLineNr++;
- g_ifcount=0;
- BEGIN(SkipCPPBlock);
- }
-<DefinedExpr2>")" {
- BEGIN(Guard);
- }
-<DefinedExpr1,DefinedExpr2>.
-<SkipCPPBlock>^{B}*"#" { BEGIN(SkipCommand); }
-<SkipCPPBlock>^{B}*/[^#] { BEGIN(SkipLine); }
-<SkipCPPBlock>\n { g_yyLineNr++; outputChar('\n'); }
-<SkipCPPBlock>.
-<SkipCommand>"if"(("n")?("def"))?/[ \t(!] {
- incrLevel();
- g_ifcount++;
- //printf("#if... depth=%d\n",g_ifcount);
- }
-<SkipCommand>"else" {
- //printf("Else! g_ifcount=%d otherCaseDone=%d\n",g_ifcount,otherCaseDone());
- if (g_ifcount==0 && !otherCaseDone())
- {
- setCaseDone(TRUE);
- //outputChar('\n');
- BEGIN(Start);
- }
- }
-<SkipCommand>("elif"|"else"{B}*"if")/[ \t(!] {
- if (g_ifcount==0)
- {
- if (!otherCaseDone())
- {
- g_guardExpr.resize(0);
- g_lastGuardName.resize(0);
- BEGIN(Guard);
- }
- else
- {
- BEGIN(SkipCPPBlock);
- }
- }
- }
-<SkipCommand>"endif" {
- g_expectGuard = FALSE;
- decrLevel();
- if (--g_ifcount<0)
- {
- //outputChar('\n');
- BEGIN(Start);
- }
- }
-<SkipCommand>\n {
- outputChar('\n');
- g_yyLineNr++;
- BEGIN(SkipCPPBlock);
- }
-<SkipCommand>{ID} { // unknown directive
- BEGIN(SkipLine);
- }
-<SkipCommand>.
-<SkipLine>[^'"/\n]+
-<SkipLine>{CHARLIT} { }
-<SkipLine>\" {
- BEGIN(SkipString);
- }
-<SkipLine>.
-<SkipString>"//"/[^\n]* {
- }
-<SkipLine,SkipCommand,SkipCPPBlock>"//"[^\n]* {
- g_lastCPPContext=YY_START;
- BEGIN(RemoveCPPComment);
- }
-<SkipString>"/*"/[^\n]* {
- }
-<SkipLine,SkipCommand,SkipCPPBlock>"/*"/[^\n]* {
- g_lastCContext=YY_START;
- BEGIN(RemoveCComment);
- }
-<SkipLine>\n {
- outputChar('\n');
- g_yyLineNr++;
- BEGIN(SkipCPPBlock);
- }
-<SkipString>[^"\\\n]+ { }
-<SkipString>\\. { }
-<SkipString>\" {
- BEGIN(SkipLine);
- }
-<SkipString>. { }
-<IncludeID>{ID}{B}*/"(" {
- g_nospaces=TRUE;
- g_roundCount=0;
- g_defArgsStr=yytext;
- g_findDefArgContext = IncludeID;
- BEGIN(FindDefineArgs);
- }
-<IncludeID>{ID} {
- g_nospaces=TRUE;
- readIncludeFile(expandMacro(yytext));
- BEGIN(Start);
- }
-<Include>[^\">\n]+[\">] {
- g_incName+=yytext;
- readIncludeFile(g_incName);
- if (g_isImported)
- {
- BEGIN(EndImport);
- }
- else
- {
- BEGIN(Start);
- }
- }
-<EndImport>[^\\\n]*/\n {
- BEGIN(Start);
- }
-<EndImport>\\[\r]?"\n" {
- outputChar('\n');
- g_yyLineNr++;
- }
-<EndImport>. {
- }
-<DefName>{ID}/("\\\n")*"(" { // define with argument
- //printf("Define() `%s'\n",yytext);
- g_argDict = new QDict<int>(31);
- g_argDict->setAutoDelete(TRUE);
- g_defArgs = 0;
- g_defArgsStr.resize(0);
- g_defText.resize(0);
- g_defLitText.resize(0);
- g_defName = yytext;
- g_defVarArgs = FALSE;
- g_defExtraSpacing.resize(0);
- BEGIN(DefineArg);
- }
-<DefName>{ID}{B}+"1"/[ \r\t\n] { // special case: define with 1 -> can be "guard"
- //printf("Define `%s'\n",yytext);
- g_argDict = 0;
- g_defArgs = -1;
- g_defArgsStr.resize(0);
- g_defName = yytext;
- g_defName = g_defName.left(g_defName.length()-1).stripWhiteSpace();
- g_defVarArgs = FALSE;
- //printf("Guard check: %s!=%s || %d\n",
- // g_defName.data(),g_lastGuardName.data(),g_expectGuard);
- if ( g_defName!=g_lastGuardName || !g_expectGuard)
- { // define may appear in the output
- QCString tmp=(QCString)"#define "+g_defName;
- outputArray(tmp.data(),tmp.length());
- g_quoteArg=FALSE;
- g_insideComment=FALSE;
- g_lastGuardName.resize(0);
- g_defText="1";
- g_defLitText="1";
- BEGIN(DefineText);
- }
- else // define is a guard => hide
- {
- //printf("Found a guard %s\n",yytext);
- g_defText.resize(0);
- g_defLitText.resize(0);
- BEGIN(Start);
- }
- g_expectGuard=FALSE;
- }
-<DefName>{ID}/{B}*"\n" { // empty define
- g_argDict = 0;
- g_defArgs = -1;
- g_defName = yytext;
- g_defArgsStr.resize(0);
- g_defText.resize(0);
- g_defLitText.resize(0);
- g_defVarArgs = FALSE;
- //printf("Guard check: %s!=%s || %d\n",
- // g_defName.data(),g_lastGuardName.data(),g_expectGuard);
- if ( g_defName!=g_lastGuardName || !g_expectGuard)
- { // define may appear in the output
- QCString tmp=(QCString)"#define "+g_defName;
- outputArray(tmp.data(),tmp.length());
- g_quoteArg=FALSE;
- g_insideComment=FALSE;
- if (g_insideCS) g_defText="1"; // for C#, use "1" as define text
- BEGIN(DefineText);
- }
- else // define is a guard => hide
- {
- //printf("Found a guard %s\n",yytext);
- g_guardName = yytext;
- g_lastGuardName.resize(0);
- BEGIN(Start);
- }
- g_expectGuard=FALSE;
- }
-<DefName>{ID}/{B}* { // define with content
- //printf("Define `%s'\n",yytext);
- g_argDict = 0;
- g_defArgs = -1;
- g_defArgsStr.resize(0);
- g_defText.resize(0);
- g_defLitText.resize(0);
- g_defName = yytext;
- g_defVarArgs = FALSE;
- QCString tmp=(QCString)"#define "+g_defName+g_defArgsStr;
- outputArray(tmp.data(),tmp.length());
- g_quoteArg=FALSE;
- g_insideComment=FALSE;
- BEGIN(DefineText);
- }
-<DefineArg>"\\\n" {
- g_defExtraSpacing+="\n";
- g_yyLineNr++;
- }
-<DefineArg>","{B}* { g_defArgsStr+=yytext; }
-<DefineArg>"("{B}* { g_defArgsStr+=yytext; }
-<DefineArg>{B}*")"{B}* {
- g_defArgsStr+=yytext;
- QCString tmp=(QCString)"#define "+g_defName+g_defArgsStr+g_defExtraSpacing;
- outputArray(tmp.data(),tmp.length());
- g_quoteArg=FALSE;
- g_insideComment=FALSE;
- BEGIN(DefineText);
- }
-<DefineArg>"..." { // Variadic macro
- g_defVarArgs = TRUE;
- g_defArgsStr+=yytext;
- g_argDict->insert("__VA_ARGS__",new int(g_defArgs));
- g_defArgs++;
- }
-<DefineArg>{ID}{B}*("..."?) {
- //printf("Define addArg(%s)\n",yytext);
- QCString argName=yytext;
- g_defVarArgs = yytext[yyleng-1]=='.';
- if (g_defVarArgs) // strip ellipsis
- {
- argName=argName.left(argName.length()-3);
- }
- argName = argName.stripWhiteSpace();
- g_defArgsStr+=yytext;
- g_argDict->insert(argName,new int(g_defArgs));
- g_defArgs++;
- }
- /*
-<DefineText>"/ **"|"/ *!" {
- g_defText+=yytext;
- g_defLitText+=yytext;
- g_insideComment=TRUE;
- }
-<DefineText>"* /" {
- g_defText+=yytext;
- g_defLitText+=yytext;
- g_insideComment=FALSE;
- }
- */
-<DefineText>"/*"[!*]? {
- g_defText+=yytext;
- g_defLitText+=yytext;
- g_lastCContext=YY_START;
- g_commentCount=1;
- BEGIN(CopyCComment);
- }
-<DefineText>"//"[!/]? {
- outputArray(yytext,yyleng);
- g_lastCPPContext=YY_START;
- g_defLitText+=' ';
- BEGIN(SkipCPPComment);
- }
-<SkipCComment>[/]?"*/" {
- if (yytext[0]=='/') outputChar('/');
- outputChar('*');outputChar('/');
- if (--g_commentCount<=0)
- {
- if (g_lastCContext==Start)
- // small hack to make sure that ^... rule will
- // match when going to Start... Example: "/*...*/ some stuff..."
- {
- YY_CURRENT_BUFFER->yy_at_bol=1;
- }
- BEGIN(g_lastCContext);
- }
- }
-<SkipCComment>"//"("/")* {
- outputArray(yytext,yyleng);
- }
-<SkipCComment>"/*" {
- outputChar('/');outputChar('*');
- //g_commentCount++;
- }
-<SkipCComment>[\\@][\\@]("f{"|"f$"|"f[") {
- outputArray(yytext,yyleng);
- }
-<SkipCComment>[\\@][\\@]("verbatim"|"latexonly"|"htmlonly"|"xmlonly"|"rtfonly"|"manonly"|"dot"|"code"){BN}+ {
- outputArray(yytext,yyleng);
- g_yyLineNr+=QCString(yytext).contains('\n');
- }
-<SkipCComment>[\\@]("verbatim"|"latexonly"|"htmlonly"|"xmlonly"|"rtfonly"|"manonly"|"dot"|"code"){BN}+ {
- outputArray(yytext,yyleng);
- g_yyLineNr+=QCString(yytext).contains('\n');
- if (yytext[1]=='f')
- {
- g_blockName="f";
- }
- else
- {
- g_blockName=QCString(&yytext[1]).stripWhiteSpace();
- }
- BEGIN(SkipVerbatim);
- }
-<SkipCComment,SkipCPPComment>[\\@]"cond"[ \t]+ { // conditional section
- g_condCtx = YY_START;
- outputArray(yytext,yyleng);
- BEGIN(CondLine);
- }
-<CondLine>[a-z_A-Z][a-z_A-Z0-9.\-]* {
- startCondSection(yytext);
- outputArray(yytext,yyleng);
- BEGIN(g_condCtx);
- }
-<SkipCComment,SkipCPPComment>[\\@]"cond"[ \t\r]*/\n {
- g_condCtx = YY_START;
- outputArray(yytext,yyleng);
- }
-<CondLine>. {
- unput(*yytext);
- startCondSection(" ");
- BEGIN(g_condCtx);
- }
-<SkipCComment,SkipCPPComment>[\\@]"endcond"/[^a-z_A-Z0-9] {
- outputArray(yytext,yyleng);
- endCondSection();
- }
-<SkipVerbatim>[\\@]("endverbatim"|"endlatexonly"|"endhtmlonly"|"endxmlonly"|"endrtfonly"|"endmanonly"|"enddot"|"endcode"|"f$"|"f]"|"f}") { /* end of verbatim block */
- outputArray(yytext,yyleng);
- if (yytext[1]=='f' && g_blockName=="f")
- {
- BEGIN(SkipCComment);
- }
- else if (&yytext[4]==g_blockName)
- {
- BEGIN(SkipCComment);
- }
- }
-<SkipVerbatim>"*/"|"/*" {
- outputArray(yytext,yyleng);
- }
-<SkipCComment,SkipVerbatim>[^*\\@\x06\n\/]+ {
- outputArray(yytext,yyleng);
- }
-<SkipCComment,SkipVerbatim>\n {
- g_yyLineNr++;
- outputChar('\n');
- }
-<SkipCComment,SkipVerbatim>. {
- outputChar(*yytext);
- }
-<CopyCComment>[^*a-z_A-Z\n]+ {
- g_defLitText+=yytext;
- g_defText+=escapeAt(yytext);
- }
-<CopyCComment>"*/" {
- g_defLitText+=yytext;
- g_defText+=yytext;
- BEGIN(g_lastCContext);
- }
-<CopyCComment>\n {
- g_yyLineNr++;
- g_defLitText+=yytext;
- g_defText+=' ';
- }
-<RemoveCComment>"*/"{B}*"#" { // see bug 594021 for a usecase for this rule
- if (g_lastCContext==SkipCPPBlock)
- {
- BEGIN(SkipCommand);
- }
- else
- {
- REJECT;
- }
- }
-<RemoveCComment>"*/" { BEGIN(g_lastCContext); }
-<RemoveCComment>"//"
-<RemoveCComment>"/*"
-<RemoveCComment>[^*\x06\n]+
-<RemoveCComment>\n { g_yyLineNr++; outputChar('\n'); }
-<RemoveCComment>.
-<SkipCPPComment>[^\n\/\\@]+ {
- outputArray(yytext,yyleng);
- }
-<SkipCPPComment,RemoveCPPComment>\n {
- unput(*yytext);
- BEGIN(g_lastCPPContext);
- }
-<SkipCPPComment>"/*" {
- outputChar('/');outputChar('*');
- }
-<SkipCPPComment>"//" {
- outputChar('/');outputChar('/');
- }
-<SkipCPPComment>[^\x06\@\\\n]+ {
- outputArray(yytext,yyleng);
- }
-<SkipCPPComment>. {
- outputChar(*yytext);
- }
-<RemoveCPPComment>"/*"
-<RemoveCPPComment>"//"
-<RemoveCPPComment>[^\x06\n]+
-<RemoveCPPComment>.
-<DefineText>"#" {
- g_quoteArg=TRUE;
- g_defLitText+=yytext;
- }
-<DefineText,CopyCComment>{ID} {
- g_defLitText+=yytext;
- if (g_quoteArg)
- {
- g_defText+="\"";
- }
- if (g_defArgs>0)
- {
- int *n;
- if ((n=(*g_argDict)[yytext]))
- {
- //if (!g_quoteArg) g_defText+=' ';
- g_defText+='@';
- QCString numStr;
- numStr.sprintf("%d",*n);
- g_defText+=numStr;
- //if (!g_quoteArg) g_defText+=' ';
- }
- else
- {
- g_defText+=yytext;
- }
- }
- else
- {
- g_defText+=yytext;
- }
- if (g_quoteArg)
- {
- g_defText+="\"";
- }
- g_quoteArg=FALSE;
- }
-<CopyCComment>. {
- g_defLitText+=yytext;
- g_defText+=yytext;
- }
-<DefineText>\\[\r]?\n {
- g_defLitText+=yytext;
- outputChar('\n');
- g_defText += ' '; g_yyLineNr++;
- }
-<DefineText>\n {
- QCString comment=extractTrailingComment(g_defLitText);
- g_defLitText+=yytext;
- if (!comment.isEmpty())
- {
- outputArray(comment,comment.length());
- g_defLitText=g_defLitText.left(g_defLitText.length()-comment.length()-1);
- }
- outputChar('\n');
- Define *def=0;
- //printf("Define name=`%s' text=`%s' litTexti=`%s'\n",g_defName.data(),g_defText.data(),g_defLitText.data());
- if (g_includeStack.isEmpty() || g_curlyCount>0)
- {
- addDefine();
- }
- def=DefineManager::instance().isDefined(g_defName);
- if (def==0) // new define
- {
- //printf("new define '%s'!\n",g_defName.data());
- Define *nd = newDefine();
- DefineManager::instance().addDefine(g_yyFileName,nd);
-
- // also add it to the local file list if it is a source file
- //if (g_isSource && g_includeStack.isEmpty())
- //{
- // g_fileDefineDict->insert(g_defName,nd);
- //}
- }
- else if (def /*&& macroIsAccessible(def)*/)
- // name already exists
- {
- //printf("existing define!\n");
- //printf("define found\n");
- if (def->undef) // undefined name
- {
- def->undef = FALSE;
- def->name = g_defName;
- def->definition = g_defText.stripWhiteSpace();
- def->nargs = g_defArgs;
- def->fileName = g_yyFileName.copy();
- def->lineNr = g_yyLineNr;
- }
- else
- {
- //printf("error: define %s is defined more than once!\n",g_defName.data());
- }
- }
- delete g_argDict; g_argDict=0;
- g_yyLineNr++;
- g_lastGuardName.resize(0);
- BEGIN(Start);
- }
-<DefineText>{B}* { g_defText += ' '; g_defLitText+=yytext; }
-<DefineText>{B}*"##"{B}* { g_defText += "##"; g_defLitText+=yytext; }
-<DefineText>"@" { g_defText += "@@"; g_defLitText+=yytext; }
-<DefineText>\" {
- g_defText += *yytext;
- g_defLitText+=yytext;
- if (!g_insideComment)
- {
- BEGIN(SkipDoubleQuote);
- }
- }
-<DefineText>\' { g_defText += *yytext;
- g_defLitText+=yytext;
- if (!g_insideComment)
- {
- BEGIN(SkipSingleQuote);
- }
- }
-<SkipDoubleQuote>"//"[/]? { g_defText += yytext; g_defLitText+=yytext; }
-<SkipDoubleQuote>"/*" { g_defText += yytext; g_defLitText+=yytext; }
-<SkipDoubleQuote>\" {
- g_defText += *yytext; g_defLitText+=yytext;
- BEGIN(DefineText);
- }
-<SkipSingleQuote,SkipDoubleQuote>\\. {
- g_defText += yytext; g_defLitText+=yytext;
- }
-<SkipSingleQuote>\' {
- g_defText += *yytext; g_defLitText+=yytext;
- BEGIN(DefineText);
- }
-<SkipDoubleQuote>. { g_defText += *yytext; g_defLitText+=yytext; }
-<SkipSingleQuote>. { g_defText += *yytext; g_defLitText+=yytext; }
-<DefineText>. { g_defText += *yytext; g_defLitText+=yytext; }
-<<EOF>> {
- //fprintf(stderr,"End of include file\n");
- //printf("Include stack depth=%d\n",g_includeStack.count());
- if (g_includeStack.isEmpty())
- {
- //fprintf(stderr,"Terminating scanner!\n");
- yyterminate();
- }
- else
- {
- FileState *fs=g_includeStack.pop();
- //fileDefineCache->merge(g_yyFileName,fs->fileName);
- YY_BUFFER_STATE oldBuf = YY_CURRENT_BUFFER;
- yy_switch_to_buffer( fs->bufState );
- yy_delete_buffer( oldBuf );
- g_yyLineNr = fs->lineNr;
- //preYYin = fs->oldYYin;
- g_inputBuf = fs->oldFileBuf;
- g_inputBufPos = fs->oldFileBufPos;
- setFileName(fs->fileName);
- //fprintf(stderr,"######## FileName %s\n",g_yyFileName.data());
-
- // Deal with file changes due to
- // #include's within { .. } blocks
- QCString lineStr(15+g_yyFileName.length());
- lineStr.sprintf("# %d \"%s\" 2",g_yyLineNr,g_yyFileName.data());
- outputArray(lineStr.data(),lineStr.length());
-
- delete fs; fs=0;
- }
- }
-<*>"/*"/"*/" |
-<*>"/*"[*]? {
- outputArray(yytext,yyleng);
- g_lastCContext=YY_START;
- g_commentCount=1;
- if (yyleng==3) g_lastGuardName.resize(0); // reset guard in case the #define is documented!
- BEGIN(SkipCComment);
- }
-<*>"//"[/]? {
- outputArray(yytext,yyleng);
- g_lastCPPContext=YY_START;
- if (yyleng==3) g_lastGuardName.resize(0); // reset guard in case the #define is documented!
- BEGIN(SkipCPPComment);
- }
-<*>\n {
- outputChar('\n');
- g_yyLineNr++;
- }
-<*>. {
- g_expectGuard = FALSE;
- outputChar(*yytext);
- }
-
-%%
-
-/*@ ----------------------------------------------------------------------------
- */
-
-static int getNextChar(const QCString &expr,QCString *rest,uint &pos)
-{
- //printf("getNextChar(%s,%s,%d)\n",expr.data(),rest ? rest->data() : 0,pos);
- if (pos<expr.length())
- {
- //printf("%c=expr()\n",expr.at(pos));
- return expr.at(pos++);
- }
- else if (rest && !rest->isEmpty())
- {
- int cc=rest->at(0);
- *rest=rest->right(rest->length()-1);
- //printf("%c=rest\n",cc);
- return cc;
- }
- else
- {
- int cc=yyinput();
- //printf("%c=yyinput()\n",cc);
- return cc;
- }
-}
-
-static int getCurrentChar(const QCString &expr,QCString *rest,uint pos)
-{
- //printf("getCurrentChar(%s,%s,%d)\n",expr.data(),rest ? rest->data() : 0,pos);
- if (pos<expr.length())
- {
- //printf("%c=expr()\n",expr.at(pos));
- return expr.at(pos);
- }
- else if (rest && !rest->isEmpty())
- {
- int cc=rest->at(0);
- //printf("%c=rest\n",cc);
- return cc;
- }
- else
- {
- int cc=yyinput();
- returnCharToStream(cc);
- //unput((char)cc);
- //printf("%c=yyinput()\n",cc);
- return cc;
- }
-}
-
-static void unputChar(const QCString &expr,QCString *rest,uint &pos,char c)
-{
- //printf("unputChar(%s,%s,%d,%c)\n",expr.data(),rest ? rest->data() : 0,pos,c);
- if (pos<expr.length())
- {
- pos++;
- }
- else if (rest)
- {
- //printf("Prepending to rest!\n");
- char cs[2];cs[0]=c;cs[1]='\0';
- rest->prepend(cs);
- }
- else
- {
- //unput(c);
- returnCharToStream(c);
- }
- //printf("result: unputChar(%s,%s,%d,%c)\n",expr.data(),rest ? rest->data() : 0,pos,c);
-}
-
-void addSearchDir(const char *dir)
-{
- QFileInfo fi(dir);
- if (fi.isDir()) g_pathList->append(fi.absFilePath());
-}
-
-void initPreprocessor()
-{
- g_pathList = new QStrList;
- addSearchDir(".");
- g_expandedDict = new DefineDict(17);
-}
-
-void cleanUpPreprocessor()
-{
- delete g_expandedDict; g_expandedDict=0;
- delete g_pathList; g_pathList=0;
- DefineManager::deleteInstance();
-}
-
-
-void preprocessFile(const char *fileName,BufStr &input,BufStr &output)
-{
- uint orgOffset=output.curPos();
- //printf("##########################\n%s\n####################\n",
- // input.data());
-
- g_macroExpansion = Config_getBool("MACRO_EXPANSION");
- g_expandOnlyPredef = Config_getBool("EXPAND_ONLY_PREDEF");
- g_curlyCount=0;
- g_nospaces=FALSE;
- g_inputBuf=&input;
- g_inputBufPos=0;
- g_outputBuf=&output;
- g_includeStack.setAutoDelete(TRUE);
- g_includeStack.clear();
- g_expandedDict->setAutoDelete(FALSE);
- g_expandedDict->clear();
- g_condStack.clear();
- g_condStack.setAutoDelete(TRUE);
- //g_fileDefineDict->clear();
-
- setFileName(fileName);
- g_inputFileDef = g_yyFileDef;
- DefineManager::instance().startContext(g_yyFileName);
-
- static bool firstTime=TRUE;
- if (firstTime)
- {
- // add predefined macros
- char *defStr;
- QStrList &predefList = Config_getList("PREDEFINED");
- QStrListIterator sli(predefList);
- for (sli.toFirst();(defStr=sli.current());++sli)
- {
- QCString ds = defStr;
- int i_equals=ds.find('=');
- int i_obrace=ds.find('(');
- int i_cbrace=ds.find(')');
- bool nonRecursive = i_equals>0 && ds.at(i_equals-1)==':';
-
- if (i_obrace==0) continue; // no define name
-
- if (i_obrace<i_equals && i_cbrace<i_equals &&
- i_obrace!=-1 && i_cbrace!=-1 &&
- i_obrace<i_cbrace
- ) // predefined function macro definition
- {
- //printf("predefined function macro '%s'\n",defStr);
- QRegExp reId("[a-z_A-Z][a-z_A-Z0-9]*"); // regexp matching an id
- QDict<int> argDict(17);
- argDict.setAutoDelete(TRUE);
- int i=i_obrace+1,p,l,count=0;
- // gather the formal arguments in a dictionary
- while (i<i_cbrace && (p=reId.match(ds,i,&l)))
- {
- argDict.insert(ds.mid(p,l),new int(count++));
- i=p+l;
- }
- // strip definition part
- QCString tmp=ds.right(ds.length()-i_equals-1);
- QCString definition;
- i=0;
- // substitute all occurrences of formal arguments by their
- // corresponding markers
- while ((p=reId.match(tmp,i,&l))!=-1)
- {
- if (p>i) definition+=tmp.mid(i,p-i);
- int *argIndex;
- if ((argIndex=argDict[tmp.mid(p,l)])!=0)
- {
- QCString marker;
- marker.sprintf(" @%d ",*argIndex);
- definition+=marker;
- }
- else
- {
- definition+=tmp.mid(p,l);
- }
- i=p+l;
- }
- if (i<(int)tmp.length()) definition+=tmp.mid(i,tmp.length()-i);
-
- // add define definition to the dictionary of defines for this file
- QCString dname = ds.left(i_obrace);
- if (!dname.isEmpty())
- {
- Define *def = new Define;
- def->name = dname;
- def->definition = definition;
- def->nargs = count;
- def->isPredefined = TRUE;
- def->nonRecursive = nonRecursive;
- def->fileDef = g_yyFileDef;
- def->fileName = fileName;
- DefineManager::instance().addDefine(g_yyFileName,def);
- }
-
- //printf("#define `%s' `%s' #nargs=%d\n",
- // def->name.data(),def->definition.data(),def->nargs);
- }
- else if ((i_obrace==-1 || i_obrace>i_equals) &&
- (i_cbrace==-1 || i_cbrace>i_equals) &&
- !ds.isEmpty() && (int)ds.length()>i_equals
- ) // predefined non-function macro definition
- {
- //printf("predefined normal macro '%s'\n",defStr);
- Define *def = new Define;
- if (i_equals==-1) // simple define without argument
- {
- def->name = ds;
- def->definition = "1"; // substitute occurrences by 1 (true)
- }
- else // simple define with argument
- {
- int ine=i_equals - (nonRecursive ? 1 : 0);
- def->name = ds.left(ine);
- def->definition = ds.right(ds.length()-i_equals-1);
- }
- if (!def->name.isEmpty())
- {
- def->nargs = -1;
- def->isPredefined = TRUE;
- def->nonRecursive = nonRecursive;
- def->fileDef = g_yyFileDef;
- def->fileName = fileName;
- DefineManager::instance().addDefine(g_yyFileName,def);
- }
- else
- {
- delete def;
- }
-
- //printf("#define `%s' `%s' #nargs=%d\n",
- // def->name.data(),def->definition.data(),def->nargs);
- }
- }
- //firstTime=FALSE;
- }
-
- g_yyLineNr = 1;
- g_level = 0;
- g_ifcount = 0;
-
- BEGIN( Start );
-
- g_expectGuard = guessSection(fileName)==Entry::HEADER_SEC;
- g_guardName.resize(0);
- g_lastGuardName.resize(0);
- g_guardExpr.resize(0);
-
- preYYlex();
- g_lexInit=TRUE;
-
- // make sure we don't extend a \cond with missing \endcond over multiple files (see bug 624829)
- forceEndCondSection();
-
- // remove locally defined macros so they can be redefined in another source file
- //if (g_fileDefineDict->count()>0)
- //{
- // QDictIterator<Define> di(*g_fileDefineDict);
- // Define *d;
- // for (di.toFirst();(d=di.current());++di)
- // {
- // g_globalDefineDict->remove(di.currentKey());
- // }
- // g_fileDefineDict->clear();
- //}
-
- if (Debug::isFlagSet(Debug::Preprocessor))
- {
- char *orgPos=output.data()+orgOffset;
- char *newPos=output.data()+output.curPos();
- Debug::print(Debug::Preprocessor,0,"Preprocessor output (size: %d bytes):\n",newPos-orgPos);
- int line=1;
- Debug::print(Debug::Preprocessor,0,"---------\n00001 ");
- while (orgPos<newPos)
- {
- putchar(*orgPos);
- if (*orgPos=='\n') Debug::print(Debug::Preprocessor,0,"%05d ",++line);
- orgPos++;
- }
- Debug::print(Debug::Preprocessor,0,"\n---------\n");
- if (DefineManager::instance().defineContext().count()>0)
- {
- Debug::print(Debug::Preprocessor,0,"Macros accessible in this file:\n");
- Debug::print(Debug::Preprocessor,0,"---------\n");
- QDictIterator<Define> di(DefineManager::instance().defineContext());
- Define *def;
- for (di.toFirst();(def=di.current());++di)
- {
- Debug::print(Debug::Preprocessor,0,"%s ",def->name.data());
- }
- Debug::print(Debug::Preprocessor,0,"\n---------\n");
- }
- else
- {
- Debug::print(Debug::Preprocessor,0,"No macros accessible in this file.\n");
- }
- }
- DefineManager::instance().endContext();
-}
-
-void preFreeScanner()
-{
-#if defined(YY_FLEX_SUBMINOR_VERSION)
- if (g_lexInit)
- {
- preYYlex_destroy();
- }
-#endif
-}
-
-#if !defined(YY_FLEX_SUBMINOR_VERSION)
-extern "C" { // some bogus code to keep the compiler happy
-// int preYYwrap() { return 1 ; }
- void preYYdummy() { yy_flex_realloc(0,0); }
-}
-#endif
-
diff --git a/trunk/src/printdocvisitor.h b/trunk/src/printdocvisitor.h
deleted file mode 100644
index cd9ba7b..0000000
--- a/trunk/src/printdocvisitor.h
+++ /dev/null
@@ -1,712 +0,0 @@
-/******************************************************************************
- *
- *
- *
- *
- * Copyright (C) 1997-2012 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.
- *
- */
-
-#ifndef _PRINTDOCVISITOR_H
-#define _PRINTDOCVISITOR_H
-
-#include "docvisitor.h"
-
-/*! Concrete visitor implementation for pretty printing */
-class PrintDocVisitor : public DocVisitor
-{
- public:
- PrintDocVisitor() : DocVisitor(DocVisitor_Other), m_indent(0),
- m_needsEnter(FALSE), m_insidePre(FALSE) {}
-
- //--------------------------------------
-
- void visit(DocWord *w)
- {
- indent_leaf();
- printf("%s",w->word().data());
- }
- void visit(DocLinkedWord *w)
- {
- indent_leaf();
- printf("%s",w->word().data());
- }
- void visit(DocWhiteSpace *w)
- {
- indent_leaf();
- if (m_insidePre)
- {
- printf("%s",w->chars().data());
- }
- else
- {
- printf(" ");
- }
- }
- void visit(DocSymbol *s)
- {
- indent_leaf();
- switch(s->symbol())
- {
- case DocSymbol::BSlash: printf("\\"); break;
- case DocSymbol::At: printf("@"); break;
- case DocSymbol::Less: printf("<"); break;
- case DocSymbol::Greater: printf(">"); break;
- case DocSymbol::Amp: printf("&"); break;
- case DocSymbol::Dollar: printf("$"); break;
- case DocSymbol::Hash: printf("#"); break;
- case DocSymbol::Percent: printf("%%"); break;
- case DocSymbol::Copy: printf("&copy;"); break;
- case DocSymbol::Apos: printf("'"); break;
- case DocSymbol::Quot: printf("\""); break;
- case DocSymbol::Lsquo: printf("&lsquo;"); break;
- case DocSymbol::Rsquo: printf("&rsquo;"); break;
- case DocSymbol::Ldquo: printf("&ldquo;"); break;
- case DocSymbol::Rdquo: printf("&rdquo;"); break;
- case DocSymbol::Ndash: printf("&ndash;"); break;
- case DocSymbol::Mdash: printf("&mdash;"); break;
- case DocSymbol::Uml: printf("&%cuml;",s->letter()); break;
- case DocSymbol::Acute: printf("&%cacute;",s->letter()); break;
- case DocSymbol::Grave: printf("&%cgrave;",s->letter()); break;
- case DocSymbol::Circ: printf("&%ccirc;",s->letter()); break;
- case DocSymbol::Tilde: printf("&%ctilde;",s->letter()); break;
- case DocSymbol::Szlig: printf("&szlig;"); break;
- case DocSymbol::Cedil: printf("&%ccedul;",s->letter()); break;
- case DocSymbol::Ring: printf("&%cring;",s->letter()); break;
- case DocSymbol::Nbsp: printf("&nbsp;"); break;
- case DocSymbol::Aelig: printf("&aelig;"); break;
- case DocSymbol::AElig: printf("&AElig;"); break;
- default:
- printf("Error: unknown symbol found\n");
- }
- }
- void visit(DocURL *u)
- {
- indent_leaf();
- printf("%s",u->url().data());
- }
- void visit(DocLineBreak *)
- {
- indent_leaf();
- printf("<br/>");
- }
- void visit(DocHorRuler *)
- {
- indent_leaf();
- printf("<hr>");
- }
- void visit(DocStyleChange *s)
- {
- indent_leaf();
- switch (s->style())
- {
- case DocStyleChange::Bold:
- if (s->enable()) printf("<bold>"); else printf("</bold>");
- break;
- case DocStyleChange::Italic:
- if (s->enable()) printf("<italic>"); else printf("</italic>");
- break;
- case DocStyleChange::Code:
- if (s->enable()) printf("<code>"); else printf("</code>");
- break;
- case DocStyleChange::Subscript:
- if (s->enable()) printf("<sub>"); else printf("</sub>");
- break;
- case DocStyleChange::Superscript:
- if (s->enable()) printf("<sup>"); else printf("</sup>");
- break;
- case DocStyleChange::Center:
- if (s->enable()) printf("<center>"); else printf("</center>");
- break;
- case DocStyleChange::Small:
- if (s->enable()) printf("<small>"); else printf("</small>");
- break;
- case DocStyleChange::Preformatted:
- if (s->enable()) printf("<pre>"); else printf("</pre>");
- break;
- case DocStyleChange::Div:
- if (s->enable()) printf("<div>"); else printf("</div>");
- break;
- case DocStyleChange::Span:
- if (s->enable()) printf("<span>"); else printf("</span>");
- break;
- }
- }
- void visit(DocVerbatim *s)
- {
- indent_leaf();
- switch(s->type())
- {
- case DocVerbatim::Code: printf("<code>"); break;
- case DocVerbatim::Verbatim: printf("<verbatim>"); break;
- case DocVerbatim::HtmlOnly: printf("<htmlonly>"); break;
- case DocVerbatim::ManOnly: printf("<manonly>"); break;
- case DocVerbatim::LatexOnly: printf("<latexonly>"); break;
- case DocVerbatim::XmlOnly: printf("<xmlonly>"); break;
- case DocVerbatim::Dot: printf("<dot>"); break;
- case DocVerbatim::Msc: printf("<msc>"); break;
- }
- printf("%s",s->text().data());
- switch(s->type())
- {
- case DocVerbatim::Code: printf("</code>"); break;
- case DocVerbatim::Verbatim: printf("</verbatim>"); break;
- case DocVerbatim::HtmlOnly: printf("</htmlonly>"); break;
- case DocVerbatim::ManOnly: printf("</manonly>"); break;
- case DocVerbatim::LatexOnly: printf("</latexonly>"); break;
- case DocVerbatim::XmlOnly: printf("</xmlonly>"); break;
- case DocVerbatim::Dot: printf("</dot>"); break;
- case DocVerbatim::Msc: printf("</msc>"); break;
- }
- }
- void visit(DocAnchor *a)
- {
- indent_leaf();
- printf("<anchor name=\"%s\"/>",a->anchor().data());
- }
- void visit(DocInclude *inc)
- {
- indent_leaf();
- printf("<include file=\"%s\" type=\"",inc->file().data());
- switch(inc->type())
- {
- case DocInclude::Include: printf("include"); break;
- case DocInclude::IncWithLines: printf("incwithlines"); break;
- case DocInclude::DontInclude: printf("dontinclude"); break;
- case DocInclude::HtmlInclude: printf("htmlinclude"); break;
- case DocInclude::VerbInclude: printf("verbinclude"); break;
- case DocInclude::Snippet: printf("snippet"); break;
- }
- printf("\"/>");
- }
- void visit(DocIncOperator *op)
- {
- indent_leaf();
- printf("<incoperator pattern=\"%s\" type=\"",op->pattern().data());
- switch(op->type())
- {
- case DocIncOperator::Line: printf("line"); break;
- case DocIncOperator::Skip: printf("skip"); break;
- case DocIncOperator::SkipLine: printf("skipline"); break;
- case DocIncOperator::Until: printf("until"); break;
- }
- printf("\"/>");
- }
- void visit(DocFormula *f)
- {
- indent_leaf();
- printf("<formula name=%s test=%s/>",f->name().data(),f->text().data());
- }
- void visit(DocIndexEntry *i)
- {
- indent_leaf();
- printf("<indexentry>%s</indexentry\n",i->entry().data());
- }
- void visit(DocSimpleSectSep *)
- {
- indent_leaf();
- printf("<simplesectsep/>");
- }
- void visit(DocCite *cite)
- {
- indent_leaf();
- printf("<cite ref=\"%s\" file=\"%s\" "
- "anchor=\"%s\" text=\"%s\""
- "/>\n",
- cite->ref().data(),cite->file().data(),cite->anchor().data(),
- cite->text().data());
- }
-
- //--------------------------------------
-
- void visitPre(DocAutoList *l)
- {
- indent_pre();
- if (l->isEnumList())
- {
- printf("<ol>\n");
- }
- else
- {
- printf("<ul>\n");
- }
- }
- void visitPost(DocAutoList *l)
- {
- indent_post();
- if (l->isEnumList())
- {
- printf("</ol>\n");
- }
- else
- {
- printf("</ul>\n");
- }
- }
- void visitPre(DocAutoListItem *)
- {
- indent_pre();
- printf("<li>\n");
- }
- void visitPost(DocAutoListItem *)
- {
- indent_post();
- printf("</li>\n");
- }
- void visitPre(DocPara *)
- {
- indent_pre();
- printf("<para>\n");
- }
- void visitPost(DocPara *)
- {
- indent_post();
- printf("</para>\n");
- }
- void visitPre(DocRoot *)
- {
- indent_pre();
- printf("<root>\n");
- }
- void visitPost(DocRoot *)
- {
- indent_post();
- printf("</root>\n");
- }
- void visitPre(DocSimpleSect *s)
- {
- indent_pre();
- printf("<simplesect type=");
- switch(s->type())
- {
- case DocSimpleSect::See: printf("see"); break;
- case DocSimpleSect::Return: printf("return"); break;
- case DocSimpleSect::Author: printf("author"); break;
- case DocSimpleSect::Authors: printf("authors"); break;
- case DocSimpleSect::Version: printf("version"); break;
- case DocSimpleSect::Since: printf("since"); break;
- case DocSimpleSect::Date: printf("date"); break;
- case DocSimpleSect::Note: printf("note"); break;
- case DocSimpleSect::Warning: printf("warning"); break;
- case DocSimpleSect::Pre: printf("pre"); break;
- case DocSimpleSect::Post: printf("post"); break;
- case DocSimpleSect::Copyright: printf("copyright"); break;
- case DocSimpleSect::Invar: printf("invar"); break;
- case DocSimpleSect::Remark: printf("remark"); break;
- case DocSimpleSect::Attention: printf("attention"); break;
- case DocSimpleSect::User: printf("user"); break;
- case DocSimpleSect::Rcs: printf("rcs"); break;
- case DocSimpleSect::Unknown: printf("unknown"); break;
- }
- printf(">\n");
- }
- void visitPost(DocSimpleSect *)
- {
- indent_post();
- printf("</simplesect>\n");
- }
- void visitPre(DocTitle *)
- {
- indent_pre();
- printf("<title>\n");
- }
- void visitPost(DocTitle *)
- {
- indent_post();
- printf("</title>\n");
- }
- void visitPre(DocSimpleList *)
- {
- indent_pre();
- printf("<ul>\n");
- }
- void visitPost(DocSimpleList *)
- {
- indent_post();
- printf("</ul>\n");
- }
- void visitPre(DocSimpleListItem *)
- {
- indent_pre();
- printf("<li>\n");
- }
- void visitPost(DocSimpleListItem *)
- {
- indent_post();
- printf("</li>\n");
- }
- void visitPre(DocSection *s)
- {
- indent_pre();
- printf("<sect%d>\n",s->level());
- }
- void visitPost(DocSection *s)
- {
- indent_post();
- printf("</sect%d>\n",s->level());
- }
- void visitPre(DocHtmlList *s)
- {
- indent_pre();
- if (s->type()==DocHtmlList::Ordered) printf("<ol>\n"); else printf("<ul>\n");
- }
- void visitPost(DocHtmlList *s)
- {
- indent_post();
- if (s->type()==DocHtmlList::Ordered) printf("</ol>\n"); else printf("</ul>\n");
- }
- void visitPre(DocHtmlListItem *)
- {
- indent_pre();
- printf("<li>\n");
- }
- void visitPost(DocHtmlListItem *)
- {
- indent_post();
- printf("</li>\n");
- }
- //void visitPre(DocHtmlPre *)
- //{
- // indent_pre();
- // printf("<pre>\n");
- // m_insidePre=TRUE;
- //}
- //void visitPost(DocHtmlPre *)
- //{
- // m_insidePre=FALSE;
- // indent_post();
- // printf("</pre>\n");
- //}
- void visitPre(DocHtmlDescList *)
- {
- indent_pre();
- printf("<dl>\n");
- }
- void visitPost(DocHtmlDescList *)
- {
- indent_post();
- printf("</dl>\n");
- }
- void visitPre(DocHtmlDescTitle *)
- {
- indent_pre();
- printf("<dt>\n");
- }
- void visitPost(DocHtmlDescTitle *)
- {
- indent_post();
- printf("</dt>\n");
- }
- void visitPre(DocHtmlDescData *)
- {
- indent_pre();
- printf("<dd>\n");
- }
- void visitPost(DocHtmlDescData *)
- {
- indent_post();
- printf("</dd>\n");
- }
- void visitPre(DocHtmlTable *t)
- {
- indent_pre();
- printf("<table rows=\"%d\" cols=\"%d\">\n",
- t->numRows(),t->numColumns());
- }
- void visitPost(DocHtmlTable *)
- {
- indent_post();
- printf("</table>\n");
- }
- void visitPre(DocHtmlRow *)
- {
- indent_pre();
- printf("<tr>\n");
- }
- void visitPost(DocHtmlRow *)
- {
- indent_post();
- printf("</tr>\n");
- }
- void visitPre(DocHtmlCell *c)
- {
- indent_pre();
- printf("<t%c>\n",c->isHeading()?'h':'d');
- }
- void visitPost(DocHtmlCell *c)
- {
- indent_post();
- printf("</t%c>\n",c->isHeading()?'h':'d');
- }
- void visitPre(DocHtmlCaption *)
- {
- indent_pre();
- printf("<caption>\n");
- }
- void visitPost(DocHtmlCaption *)
- {
- indent_post();
- printf("</caption>\n");
- }
- void visitPre(DocInternal *)
- {
- indent_pre();
- printf("<internal>\n");
- }
- void visitPost(DocInternal *)
- {
- indent_post();
- printf("</internal>\n");
- }
- void visitPre(DocHRef *href)
- {
- indent_pre();
- printf("<a url=\"%s\">\n",href->url().data());
- }
- void visitPost(DocHRef *)
- {
- indent_post();
- printf("</a>\n");
- }
- void visitPre(DocHtmlHeader *header)
- {
- indent_pre();
- printf("<h%d>\n",header->level());
- }
- void visitPost(DocHtmlHeader *header)
- {
- indent_post();
- printf("</h%d>\n",header->level());
- }
- void visitPre(DocImage *img)
- {
- indent_pre();
- printf("<image src=\"%s\" type=\"",img->name().data());
- switch(img->type())
- {
- case DocImage::Html: printf("html"); break;
- case DocImage::Latex: printf("latex"); break;
- case DocImage::Rtf: printf("rtf"); break;
- }
- printf("\" width=%s height=%s>\n",img->width().data(),img->height().data());
- }
- void visitPost(DocImage *)
- {
- indent_post();
- printf("</image>\n");
- }
- void visitPre(DocDotFile *df)
- {
- indent_pre();
- printf("<dotfile src=\"%s\">\n",df->name().data());
- }
- void visitPost(DocDotFile *)
- {
- indent_post();
- printf("</dotfile>\n");
- }
- void visitPre(DocMscFile *df)
- {
- indent_pre();
- printf("<mscfile src=\"%s\">\n",df->name().data());
- }
- void visitPost(DocMscFile *)
- {
- indent_post();
- printf("</mscfile>\n");
- }
- void visitPre(DocLink *lnk)
- {
- indent_pre();
- printf("<link ref=\"%s\" file=\"%s\" anchor=\"%s\">\n",
- lnk->ref().data(),lnk->file().data(),lnk->anchor().data());
- }
- void visitPost(DocLink *)
- {
- indent_post();
- printf("</link>\n");
- }
- void visitPre(DocRef *ref)
- {
- indent_pre();
- printf("<ref ref=\"%s\" file=\"%s\" "
- "anchor=\"%s\" targetTitle=\"%s\""
- " hasLinkText=\"%s\" refToAnchor=\"%s\" refToSection=\"%s\">\n",
- ref->ref().data(),ref->file().data(),ref->anchor().data(),
- ref->targetTitle().data(),ref->hasLinkText()?"yes":"no",
- ref->refToAnchor()?"yes":"no", ref->refToSection()?"yes":"no");
- }
- void visitPost(DocRef *)
- {
- indent_post();
- printf("</ref>\n");
- }
- void visitPre(DocSecRefItem *ref)
- {
- indent_pre();
- printf("<secrefitem target=\"%s\">\n",ref->target().data());
- }
- void visitPost(DocSecRefItem *)
- {
- indent_post();
- printf("</secrefitem>\n");
- }
- void visitPre(DocSecRefList *)
- {
- indent_pre();
- printf("<secreflist>\n");
- }
- void visitPost(DocSecRefList *)
- {
- indent_post();
- printf("</secreflist>\n");
- }
- //void visitPre(DocLanguage *l)
- //{
- // indent_pre();
- // printf("<language id=%s>\n",l->id().data());
- //}
- //void visitPost(DocLanguage *)
- //{
- // indent_post();
- // printf("</language>\n");
- //}
- void visitPre(DocParamList *pl)
- {
- indent_pre();
- //QStrListIterator sli(pl->parameters());
- QListIterator<DocNode> sli(pl->parameters());
- //const char *s;
- DocNode *param;
- printf("<parameters>");
- for (sli.toFirst();(param=sli.current());++sli)
- {
- printf("<param>");
- if (param->kind()==DocNode::Kind_Word)
- {
- visit((DocWord*)param);
- }
- else if (param->kind()==DocNode::Kind_LinkedWord)
- {
- visit((DocLinkedWord*)param);
- }
- printf("</param>");
- }
- printf("\n");
- }
- void visitPost(DocParamList *)
- {
- indent_post();
- printf("</parameters>\n");
- }
- void visitPre(DocParamSect *ps)
- {
- indent_pre();
- printf("<paramsect type=");
- switch (ps->type())
- {
- case DocParamSect::Param: printf("param"); break;
- case DocParamSect::RetVal: printf("retval"); break;
- case DocParamSect::Exception: printf("exception"); break;
- case DocParamSect::TemplateParam: printf("templateparam"); break;
- case DocParamSect::Unknown: printf("unknown"); break;
- }
- printf(">\n");
- }
- void visitPost(DocParamSect *)
- {
- indent_post();
- printf("</paramsect>\n");
- }
- void visitPre(DocXRefItem *x)
- {
- indent_pre();
- printf("<xrefitem file=\"%s\" anchor=\"%s\" title=\"%s\"/>\n",
- x->file().data(),x->anchor().data(),x->title().data());
- }
- void visitPost(DocXRefItem *)
- {
- indent_post();
- printf("<xrefitem/>\n");
- }
- void visitPre(DocInternalRef *r)
- {
- indent_pre();
- printf("<internalref file=%s anchor=%s>\n",r->file().data(),r->anchor().data());
- }
- void visitPost(DocInternalRef *)
- {
- indent_post();
- printf("</internalref>\n");
- }
- void visitPre(DocCopy *c)
- {
- indent_pre();
- printf("<copy link=\"%s\">\n",c->link().data());
- }
- void visitPost(DocCopy *)
- {
- indent_post();
- printf("</copy>\n");
- }
- void visitPre(DocText *)
- {
- indent_pre();
- printf("<text>\n");
- }
- void visitPost(DocText *)
- {
- indent_post();
- printf("</text>\n");
- }
- void visitPre(DocHtmlBlockQuote *)
- {
- indent_pre();
- printf("<blockquote>\n");
- }
- void visitPost(DocHtmlBlockQuote *)
- {
- indent_post();
- printf("</blockquote>\n");
- }
-
- private:
- // helper functions
- void indent()
- {
- if (m_needsEnter) printf("\n");
- for (int i=0;i<m_indent;i++) printf(".");
- m_needsEnter=FALSE;
- }
- void indent_leaf()
- {
- if (!m_needsEnter) indent();
- m_needsEnter=TRUE;
- }
- void indent_pre()
- {
- indent();
- m_indent++;
- }
- void indent_post()
- {
- m_indent--;
- indent();
- }
-
- // member variables
- int m_indent;
- bool m_needsEnter;
- bool m_insidePre;
-};
-
-#endif
diff --git a/trunk/src/pycode.h b/trunk/src/pycode.h
deleted file mode 100644
index 895c88e..0000000
--- a/trunk/src/pycode.h
+++ /dev/null
@@ -1,41 +0,0 @@
-/******************************************************************************
- *
- *
- *
- * Copyright (C) 1997-2012 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.
- *
- */
-/* This code is based on the work done by the MoxyPyDoxy team
- * (Linda Leong, Mike Rivera, Kim Truong, and Gabriel Estrada)
- * in Spring 2005 as part of CS 179E: Compiler Design Project
- * at the University of California, Riverside; the course was
- * taught by Peter H. Froehlich <phf@acm.org>.
- */
-
-
-#ifndef PYCODE_H
-#define PYCODE_H
-
-#include "qtbc.h"
-#include <stdio.h>
-
-class CodeOutputInterface;
-class FileDef;
-class MemberDef;
-
-extern void parsePythonCode(CodeOutputInterface &,const char *,const QCString &,
- bool ,const char *,FileDef *fd=0,
- int startLine=-1,int endLine=-1,bool inlineFragment=FALSE,
- MemberDef *memberDef=0,bool showLineNumbers=TRUE);
-extern void resetPythonCodeParserState();
-
-#endif
diff --git a/trunk/src/pycode.l b/trunk/src/pycode.l
deleted file mode 100644
index e24c8f9..0000000
--- a/trunk/src/pycode.l
+++ /dev/null
@@ -1,1486 +0,0 @@
-/******************************************************************************
- *
- *
- *
- * Copyright (C) 1997-2012 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.
- *
- */
-/* This code is based on the work done by the MoxyPyDoxy team
- * (Linda Leong, Mike Rivera, Kim Truong, and Gabriel Estrada)
- * in Spring 2005 as part of CS 179E: Compiler Design Project
- * at the University of California, Riverside; the course was
- * taught by Peter H. Froehlich <phf@acm.org>.
- */
-
-
-%{
-
-#include <stdio.h>
-#include <qvaluestack.h>
-
-#include "pycode.h"
-#include "message.h"
-
-#include "scanner.h"
-#include "entry.h"
-#include "doxygen.h"
-#include "outputlist.h"
-#include "util.h"
-#include "membername.h"
-#include "searchindex.h"
-
-#define YY_NEVER_INTERACTIVE 1
-
-static ClassSDict g_codeClassSDict(17);
-static QCString g_curClassName;
-static QStrList g_curClassBases;
-
-
-static CodeOutputInterface * g_code;
-static const char * g_inputString; //!< the code fragment as text
-static int g_inputPosition; //!< read offset during parsing
-static const char * g_currentFontClass;
-static bool g_needsTermination;
-static int g_inputLines; //!< number of line in the code fragment
-static int g_yyLineNr; //!< current line number
-static FileDef * g_sourceFileDef;
-static Definition * g_currentDefinition;
-static MemberDef * g_currentMemberDef;
-static bool g_includeCodeFragment;
-static QCString g_realScope;
-//static bool g_insideBody;
-static int g_bodyCurlyCount;
-static bool g_searchingForBody;
-static QCString g_classScope;
-static int g_paramParens;
-//static int g_anchorCount;
-
-static bool g_exampleBlock;
-static QCString g_exampleName;
-static QCString g_exampleFile;
-
-static QCString g_type;
-static QCString g_name;
-
-static bool g_doubleStringIsDoc;
-static bool g_doubleQuote;
-static bool g_noSuiteFound;
-static int g_stringContext;
-
-static QValueStack<uint> g_indents; //!< Tracks indentation levels for scoping in python
-
-static void endFontClass();
-static void adjustScopesAndSuites(unsigned indentLength);
-
-
-/*! Represents a stack of variable to class mappings as found in the
- * code. Each scope is enclosed in pushScope() and popScope() calls.
- * Variables are added by calling addVariables() and one can search
- * for variable using findVariable().
- */
-class PyVariableContext
-{
- public:
- static const ClassDef *dummyContext;
- class Scope : public SDict<ClassDef>
- {
- public:
- Scope() : SDict<ClassDef>(17) {}
- };
-
- PyVariableContext()
- {
- m_scopes.setAutoDelete(TRUE);
- }
-
- virtual ~PyVariableContext()
- {
- }
-
- void pushScope()
- {
- m_scopes.append(new Scope);
- }
-
- void popScope()
- {
- if (m_scopes.count()>0)
- {
- m_scopes.remove(m_scopes.count()-1);
- }
- }
-
- void clear()
- {
- m_scopes.clear();
- m_globalScope.clear();
- }
-
- void clearExceptGlobal()
- {
- m_scopes.clear();
- }
-
- void addVariable(const QCString &type,const QCString &name);
- ClassDef *findVariable(const QCString &name);
-
- private:
- Scope m_globalScope;
- QList<Scope> m_scopes;
-};
-
-void PyVariableContext::addVariable(const QCString &type,const QCString &name)
-{
- //printf("PyVariableContext::addVariable(%s,%s)\n",type.data(),name.data());
- QCString ltype = type.simplifyWhiteSpace();
- QCString lname = name.simplifyWhiteSpace();
-
- Scope *scope = m_scopes.count()==0 ? &m_globalScope : m_scopes.getLast();
- ClassDef *varType;
- if (
- (varType=g_codeClassSDict[ltype]) || // look for class definitions inside the code block
- (varType=getResolvedClass(g_currentDefinition,g_sourceFileDef,ltype)) // look for global class definitions
- )
- {
- scope->append(lname,varType); // add it to a list
- }
- else
- {
- if (m_scopes.count()>0) // for local variables add a dummy entry so the name
- // is hidden to avoid FALSE links to global variables with the same name
- // TODO: make this work for namespaces as well!
- {
- scope->append(lname,dummyContext);
- }
- }
-}
-
-ClassDef *PyVariableContext::findVariable(const QCString &name)
-{
- if (name.isEmpty()) return 0;
- ClassDef *result = 0;
- QListIterator<Scope> sli(m_scopes);
- Scope *scope;
- // search from inner to outer scope
- for (sli.toLast();(scope=sli.current());--sli)
- {
- result = scope->find(name);
- if (result)
- {
- return result;
- }
- }
- // nothing found -> also try the global scope
- result=m_globalScope.find(name);
- return result;
-}
-
-static PyVariableContext g_theVarContext;
-const ClassDef *PyVariableContext::dummyContext = (ClassDef*)0x8;
-
-class PyCallContext
-{
- public:
- struct Ctx
- {
- Ctx() : name(g_name), type(g_type), cd(0) {}
- QCString name;
- QCString type;
- ClassDef *cd;
- };
-
- PyCallContext()
- {
- m_classList.append(new Ctx);
- m_classList.setAutoDelete(TRUE);
- }
-
- virtual ~PyCallContext() {}
-
- void setClass(ClassDef *cd)
- {
- Ctx *ctx = m_classList.getLast();
- if (ctx)
- {
- ctx->cd=cd;
- }
- }
- void pushScope()
- {
- m_classList.append(new Ctx);
- }
-
- void popScope()
- {
- if (m_classList.count()>1)
- {
- Ctx *ctx = m_classList.getLast();
- if (ctx)
- {
- g_name = ctx->name;
- g_type = ctx->type;
- }
- m_classList.removeLast();
- }
- else
- {
- }
- }
-
- void clear()
- {
- m_classList.clear();
- m_classList.append(new Ctx);
- }
-
- ClassDef *getClass() const
- {
- Ctx *ctx = m_classList.getLast();
-
- if (ctx)
- return ctx->cd;
- else
- return 0;
- }
-
- private:
- QList<Ctx> m_classList;
-};
-
-static PyCallContext g_theCallContext;
-
-
-/*! counts the number of lines in the input */
-static int countLines()
-{
- const char *p=g_inputString;
- char c;
- int count=1;
- while ((c=*p))
- {
- p++ ;
- if (c=='\n') count++;
- }
- if (p>g_inputString && *(p-1)!='\n')
- { // last line does not end with a \n, so we add an extra
- // line and explicitly terminate the line after parsing.
- count++,
- g_needsTermination=TRUE;
- }
- return count;
-}
-
-static void setCurrentDoc(const QCString &name,const QCString &base,const QCString &anchor="")
-{
- if (Doxygen::searchIndex)
- {
- Doxygen::searchIndex->setCurrentDoc(name,base,anchor);
- }
-}
-
-static void addToSearchIndex(const char *text)
-{
- if (Doxygen::searchIndex)
- {
- Doxygen::searchIndex->addWord(text,FALSE);
- }
-}
-
-
-static ClassDef *stripClassName(const char *s,Definition *d=g_currentDefinition)
-{
- int pos=0;
- QCString type = s;
- QCString className;
- QCString templSpec;
- while (extractClassNameFromType(type,pos,className,templSpec)!=-1)
- {
- QCString clName=className+templSpec;
-
- ClassDef *cd=0;
- if (!g_classScope.isEmpty())
- {
- cd=getResolvedClass(d,g_sourceFileDef,g_classScope+"::"+clName);
- }
- if (cd==0)
- {
- cd=getResolvedClass(d,g_sourceFileDef,clName);
- }
- if (cd)
- {
- return cd;
- }
- }
-
- return 0;
-}
-
-
-
-/*! start a new line of code, inserting a line number if g_sourceFileDef
- * is TRUE. If a definition starts at the current line, then the line
- * number is linked to the documentation of that definition.
- */
-static void startCodeLine()
-{
- //if (g_currentFontClass) { g_code->endFontClass(); }
- if (g_sourceFileDef)
- {
- //QCString lineNumber,lineAnchor;
- //lineNumber.sprintf("%05d",g_yyLineNr);
- //lineAnchor.sprintf("l%05d",g_yyLineNr);
-
- Definition *d = g_sourceFileDef->getSourceDefinition(g_yyLineNr);
- //printf("startCodeLine %d d=%p\n",g_yyLineNr,d);
- //g_code->startLineNumber();
- if (!g_includeCodeFragment && d && d->isLinkableInProject())
- {
- g_currentDefinition = d;
- g_currentMemberDef = g_sourceFileDef->getSourceMember(g_yyLineNr);
- //g_insideBody = FALSE;
- g_searchingForBody = TRUE;
- g_realScope = d->name().copy();
- g_classScope = d->name().copy();
- //printf("Real scope: `%s'\n",g_realScope.data());
- g_bodyCurlyCount = 0;
- QCString lineAnchor;
- lineAnchor.sprintf("l%05d",g_yyLineNr);
- if (g_currentMemberDef)
- {
- g_code->writeLineNumber(g_currentMemberDef->getReference(),
- g_currentMemberDef->getOutputFileBase(),
- g_currentMemberDef->anchor(),g_yyLineNr);
- setCurrentDoc(
- g_currentMemberDef->qualifiedName(),
- g_sourceFileDef->getSourceFileBase(),
- lineAnchor);
- }
- else
- {
- g_code->writeLineNumber(d->getReference(),
- d->getOutputFileBase(),
- 0,g_yyLineNr);
- setCurrentDoc(
- d->qualifiedName(),
- g_sourceFileDef->getSourceFileBase(),
- lineAnchor);
- }
- }
- else
- {
- //g_code->codify(lineNumber);
- g_code->writeLineNumber(0,0,0,g_yyLineNr);
- }
- //g_code->endLineNumber();
- }
- g_code->startCodeLine();
- if (g_currentFontClass)
- {
- g_code->startFontClass(g_currentFontClass);
- }
-}
-
-static void codify(const char* text)
-{
- g_code->codify(text);
-}
-
-static void endCodeLine()
-{
- endFontClass();
- g_code->endCodeLine();
-}
-
-static void nextCodeLine()
-{
- const char *fc = g_currentFontClass;
- endCodeLine();
- if (g_yyLineNr<g_inputLines)
- {
- g_currentFontClass = fc;
- startCodeLine();
- }
-}
-
-
-/*! writes a link to a fragment \a text that may span multiple lines, inserting
- * line numbers for each line. If \a text contains newlines, the link will be
- * split into multiple links with the same destination, one for each line.
- */
-static void writeMultiLineCodeLink(CodeOutputInterface &ol,
- const char *ref,const char *file,
- const char *anchor,const char *text,
- const char *tooltip)
-{
- bool done=FALSE;
- char *p=(char *)text;
- while (!done)
- {
- char *sp=p;
- char c;
- while ((c=*p++) && c!='\n') { }
- if (c=='\n')
- {
- g_yyLineNr++;
- *(p-1)='\0';
- //printf("writeCodeLink(%s,%s,%s,%s)\n",ref,file,anchor,sp);
- ol.writeCodeLink(ref,file,anchor,sp,tooltip);
- nextCodeLine();
- }
- else
- {
- //printf("writeCodeLink(%s,%s,%s,%s)\n",ref,file,anchor,sp);
- ol.writeCodeLink(ref,file,anchor,sp,tooltip);
- done=TRUE;
- }
- }
-}
-
-
-static void codifyLines(char *text)
-{
- //printf("codifyLines(%d,\"%s\")\n",g_yyLineNr,text);
- char *p=text,*sp=p;
- char c;
- bool done=FALSE;
- while (!done)
- {
- sp=p;
- while ((c=*p++) && c!='\n') { }
- if (c=='\n')
- {
- g_yyLineNr++;
- *(p-1)='\0';
- g_code->codify(sp);
- nextCodeLine();
- }
- else
- {
- g_code->codify(sp);
- done=TRUE;
- }
- }
-}
-
-static void addDocCrossReference(MemberDef *src,MemberDef *dst)
-{
- static bool referencedByRelation = Config_getBool("REFERENCED_BY_RELATION");
- static bool callerGraph = Config_getBool("CALLER_GRAPH");
- static bool referencesRelation = Config_getBool("REFERENCES_RELATION");
- static bool callGraph = Config_getBool("CALL_GRAPH");
- if (dst->isTypedef() || dst->isEnumerate()) return; // don't add types
- //printf("addDocCrossReference src=%s,dst=%s\n",src->name().data(),dst->name().data());
- if ((referencedByRelation || callerGraph) && (src->isFunction() || src->isSlot()))
- {
- dst->addSourceReferencedBy(src);
- }
- if ((referencesRelation || callGraph) && (src->isFunction() || src->isSlot()))
- {
- src->addSourceReferences(dst);
- }
-}
-
-
-
-static bool getLinkInScope(const QCString &c, // scope
- const QCString &m, // member
- const char *memberText, // exact text
- CodeOutputInterface &ol,
- const char *text
- )
-{
- MemberDef *md;
- ClassDef *cd;
- FileDef *fd;
- NamespaceDef *nd;
- GroupDef *gd;
- //printf("Trying `%s'::`%s'\n",c.data(),m.data());
- if (getDefs(c,m,"()",md,cd,fd,nd,gd,FALSE,g_sourceFileDef) &&
- md->isLinkable())
- {
- //Definition *d=0;
- //if (cd) d=cd; else if (nd) d=nd; else if (fd) d=fd; else d=gd;
-
- Definition *d = md->getOuterScope()==Doxygen::globalScope ?
- md->getBodyDef() : md->getOuterScope();
- //printf("Found! d=%s\n",d?d->name().data():"<none>");
- if (md->getGroupDef()) d = md->getGroupDef();
- if (d && d->isLinkable())
- {
- g_theCallContext.setClass(stripClassName(md->typeString(),md->getOuterScope()));
- //printf("g_currentDefinition=%p g_currentMemberDef=%p\n",
- // g_currentDefinition,g_currentMemberDef);
-
- if (g_currentDefinition && g_currentMemberDef &&
- md!=g_currentMemberDef)
- {
- addDocCrossReference(g_currentMemberDef,md);
- }
- //printf("d->getReference()=`%s' d->getOutputBase()=`%s' name=`%s' member name=`%s'\n",d->getReference().data(),d->getOutputFileBase().data(),d->name().data(),md->name().data());
-
- writeMultiLineCodeLink(ol,md->getReference(),
- md->getOutputFileBase(),
- md->anchor(),
- text ? text : memberText,
- md->briefDescriptionAsTooltip());
- addToSearchIndex(text ? text : memberText);
- return TRUE;
- }
- }
- return FALSE;
-}
-
-static bool getLink(const char *className,
- const char *memberName,
- CodeOutputInterface &ol,
- const char *text=0)
-{
- QCString m=removeRedundantWhiteSpace(memberName);
- QCString c=className;
- if (!getLinkInScope(c,m,memberName,ol,text))
- {
- if (!g_curClassName.isEmpty())
- {
- if (!c.isEmpty()) c.prepend("::");
- c.prepend(g_curClassName);
- return getLinkInScope(c,m,memberName,ol,text);
- }
- return FALSE;
- }
- return TRUE;
-}
-
-
-/*
- For a given string in the source code,
- finds its class or global id and links to it.
-*/
-static void generateClassOrGlobalLink(CodeOutputInterface &ol,char *clName,
- bool typeOnly=FALSE)
-{
- QCString className=clName;
-
- // Don't do anything for empty text
- if (className.isEmpty()) return;
-
- //fprintf(stderr,"generateClassOrGlobalLink(className=%s)\n",className.data());
-
- ClassDef *cd=0,*lcd=0; /** Class def that we may find */
- MemberDef *md=0; /** Member def that we may find */
- //bool isLocal=FALSE;
-
- if ((lcd=g_theVarContext.findVariable(className))==0) // not a local variable
- {
- Definition *d = g_currentDefinition;
- QCString scope = substitute(className,".","::");
-
- cd = getResolvedClass(d,g_sourceFileDef,substitute(className,".","::"),&md);
-
- //fprintf(stderr,"d=%s g_sourceFileDef=%s\n",
- // d?d->displayName().data():"<null>",
- // g_currentDefinition?g_currentDefinition->displayName().data():"<null>");
- //fprintf(stderr,"is found as a type %s\n",cd?cd->name().data():"<null>");
-
- if (cd==0 && md==0) // also see if it is variable or enum or enum value
- {
- NamespaceDef *nd = getResolvedNamespace(scope);
- if (nd)
- {
- writeMultiLineCodeLink(ol,nd->getReference(),nd->getOutputFileBase(),nd->anchor(),clName,nd->briefDescriptionAsTooltip());
- addToSearchIndex(className);
- return;
- }
- else if (getLink(g_classScope,clName,ol,clName))
- {
- return;
- }
- }
- }
- else
- {
- if (lcd!=PyVariableContext::dummyContext)
- {
- g_theCallContext.setClass(lcd);
- }
- //isLocal=TRUE;
- //fprintf(stderr,"is a local variable cd=%p!\n",cd);
- }
-
- if (cd && cd->isLinkable()) // is it a linkable class
- {
- writeMultiLineCodeLink(ol,cd->getReference(),cd->getOutputFileBase(),cd->anchor(),clName,cd->briefDescriptionAsTooltip());
- addToSearchIndex(className);
- if (md)
- {
- Definition *d = md->getOuterScope()==Doxygen::globalScope ?
- md->getBodyDef() : md->getOuterScope();
- if (md->getGroupDef()) d = md->getGroupDef();
- if (d && d->isLinkable() && md->isLinkable() && g_currentMemberDef)
- {
- addDocCrossReference(g_currentMemberDef,md);
- }
- }
- }
- else // not a class, maybe a global member
- {
- int scopeEnd = className.findRev(".");
- if (scopeEnd!=-1 && !typeOnly) // name with explicit scope
- {
- QCString scope = substitute(className.left(scopeEnd),".","::");
- QCString locName = className.right(className.length()-scopeEnd-1);
- ClassDef *mcd = getClass(scope);
- //fprintf(stderr,"scope=%s locName=%s mcd=%p\n",scope.data(),locName.data(),mcd);
- if (mcd)
- {
- MemberDef *md = mcd->getMemberByName(locName);
- if (md)
- {
- g_theCallContext.setClass(stripClassName(md->typeString(),md->getOuterScope()));
- writeMultiLineCodeLink(ol,md->getReference(),md->getOutputFileBase(),md->anchor(),clName,md->briefDescriptionAsTooltip());
- addToSearchIndex(className);
- Definition *d = md->getOuterScope()==Doxygen::globalScope ?
- md->getBodyDef() : md->getOuterScope();
- if (md->getGroupDef()) d = md->getGroupDef();
- if (d && d->isLinkable() && md->isLinkable() && g_currentMemberDef)
- {
- addDocCrossReference(g_currentMemberDef,md);
- }
- return;
- }
- }
- else // check namespace as well
- {
- NamespaceDef *mnd = getResolvedNamespace(scope);
- if (mnd)
- {
- MemberDef *md=mnd->getMemberByName(locName);
- if (md)
- {
- //printf("name=%s scope=%s\n",locName.data(),scope.data());
- g_theCallContext.setClass(stripClassName(md->typeString(),md->getOuterScope()));
- writeMultiLineCodeLink(ol,md->getReference(),md->getOutputFileBase(),md->anchor(),clName,md->briefDescriptionAsTooltip());
- addToSearchIndex(className);
- Definition *d = md->getOuterScope()==Doxygen::globalScope ?
- md->getBodyDef() : md->getOuterScope();
- if (md->getGroupDef()) d = md->getGroupDef();
- if (d && d->isLinkable() && md->isLinkable() && g_currentMemberDef)
- {
- addDocCrossReference(g_currentMemberDef,md);
- }
- return;
- }
- }
- }
- }
-
- // nothing found, just write out the word
- codifyLines(clName);
- addToSearchIndex(clName);
- }
-}
-
-/*
- As of June 1, this function seems to work
- for file members, but scopes are not
- being correctly tracked for classes
- so it doesn't work for classes yet.
-
-*/
-static void generateFunctionLink(CodeOutputInterface &ol,char *funcName)
-{
- //CodeClassDef *ccd=0;
- ClassDef *ccd=0;
- QCString locScope=g_classScope.copy();
- QCString locFunc=removeRedundantWhiteSpace(funcName);
- //fprintf(stdout,"*** locScope=%s locFunc=%s\n",locScope.data(),locFunc.data());
- int i=locFunc.findRev("::");
- if (i>0)
- {
- locScope=locFunc.left(i);
- locFunc=locFunc.right(locFunc.length()-i-2).stripWhiteSpace();
- }
- //printf("generateFunctionLink(%s) classScope=`%s'\n",locFunc.data(),locScope.data());
- if (!locScope.isEmpty() && (ccd=g_codeClassSDict[locScope]))
- {
- //printf("using classScope %s\n",g_classScope.data());
- if (ccd->baseClasses())
- {
- BaseClassListIterator bcli(*ccd->baseClasses());
- for ( ; bcli.current() ; ++bcli)
- {
- if (getLink(bcli.current()->classDef->name(),locFunc,ol,funcName))
- {
- return;
- }
- }
- }
- }
- if (!getLink(locScope,locFunc,ol,funcName))
- {
- generateClassOrGlobalLink(ol,funcName);
- }
- return;
-}
-
-static bool findMemberLink(CodeOutputInterface &ol,Definition *sym,const char *symName)
-{
- //printf("sym %s outerScope=%s equal=%d\n",
- // sym->name().data(),sym->getOuterScope()->name().data(),
- // sym->getOuterScope()==g_currentDefinition);
-
- if (sym->getOuterScope() &&
- sym->getOuterScope()->definitionType()==Definition::TypeClass &&
- g_currentDefinition->definitionType()==Definition::TypeClass)
- {
- ClassDef *cd = (ClassDef*)sym->getOuterScope();
- ClassDef *thisCd = (ClassDef *)g_currentDefinition;
- QCString anchor=sym->anchor();
- if (sym->definitionType()==Definition::TypeMember)
- {
- if (g_currentMemberDef)
- {
- addDocCrossReference(g_currentMemberDef,(MemberDef*)sym);
- }
- }
- //fprintf(stderr,"cd=%s thisCd=%s\n",cd?cd->name().data():"<none>",thisCd?thisCd->name().data():"<none>");
-
- // TODO: find the nearest base class in case cd is a base class of
- // thisCd
- if (cd==thisCd || (thisCd && thisCd->isBaseClass(cd,TRUE)))
- {
- writeMultiLineCodeLink(ol,sym->getReference(),
- sym->getOutputFileBase(),
- anchor,
- symName,
- sym->briefDescriptionAsTooltip());
- return TRUE;
- }
- }
- return FALSE;
-}
-
-static void findMemberLink(CodeOutputInterface &ol,char *symName)
-{
- //printf("Member reference: %s scope=%s member=%s\n",
- // yytext,
- // g_currentDefinition?g_currentDefinition->name().data():"<none>",
- // g_currentMemberDef?g_currentMemberDef->name().data():"<none>"
- // );
- if (g_currentDefinition)
- {
- DefinitionIntf *di = Doxygen::symbolMap->find(symName);
- if (di)
- {
- if (di->definitionType()==DefinitionIntf::TypeSymbolList) // multiple symbols
- {
- DefinitionListIterator dli(*(DefinitionList*)di);
- Definition *sym;
- for (dli.toFirst();(sym=dli.current());++dli)
- {
- if (findMemberLink(ol,sym,symName)) return;
- }
- }
- else // single symbol
- {
- if (findMemberLink(ol,(Definition*)di,symName)) return;
- }
- }
- }
- //printf("sym %s not found\n",&yytext[5]);
- codify(symName);
-}
-
-static void startFontClass(const char *s)
-{
- endFontClass();
- g_code->startFontClass(s);
- g_currentFontClass=s;
-}
-
-static void endFontClass()
-{
- if (g_currentFontClass)
- {
- g_code->endFontClass();
- g_currentFontClass=0;
- }
-}
-
-#undef YY_INPUT
-#define YY_INPUT(buf,result,max_size) result=yyread(buf,max_size);
-
-static int yyread(char *buf,int max_size)
-{
- int c=0;
- while( c < max_size && g_inputString[g_inputPosition] )
- {
- *buf = g_inputString[g_inputPosition++] ;
- c++; buf++;
- }
- return c;
-}
-
-%}
-
-
-BB [ \t]+
-B [ \t]*
-NEWLINE \n
-
-DIGIT [0-9]
-LETTER [A-Za-z]
-NONEMPTY [A-Za-z0-9_]
-EXPCHAR [#(){}\[\],:.%/\\=`*~|&<>!;+-]
-NONEMPTYEXP [^ \t\n:]
-PARAMNONEMPTY [^ \t\n():]
-IDENTIFIER ({LETTER}|"_")({LETTER}|{DIGIT}|"_")*
-BORDER ([^A-Za-z0-9])
-
-POUNDCOMMENT "#".*
-
-TRISINGLEQUOTE "'''"
-TRIDOUBLEQUOTE "\"\"\""
-LONGSTRINGCHAR [^\\"']
-ESCAPESEQ ("\\")(.)
-LONGSTRINGITEM ({LONGSTRINGCHAR}|{ESCAPESEQ})
-SMALLQUOTE ("\"\""|"\""|"'"|"''")
-LONGSTRINGBLOCK ({LONGSTRINGITEM}+|{SMALLQUOTE})
-
-SHORTSTRING ("'"{SHORTSTRINGITEM}*"'"|'"'{SHORTSTRINGITEM}*'"')
-SHORTSTRINGITEM ({SHORTSTRINGCHAR}|{ESCAPESEQ})
-SHORTSTRINGCHAR [^\\\n"]
-STRINGLITERAL {STRINGPREFIX}?( {SHORTSTRING} | {LONGSTRING})
-STRINGPREFIX ("r"|"u"|"ur"|"R"|"U"|"UR"|"Ur"|"uR")
-KEYWORD ("lambda"|"import"|"class"|"assert"|"as"|"from"|"global"|"def"|"True"|"False")
-FLOWKW ("or"|"and"|"is"|"not"|"print"|"for"|"in"|"if"|"try"|"except"|"yield"|"raise"|"break"|"continue"|"pass"|"if"|"return"|"while"|"elif"|"else"|"finally")
-QUOTES ("\""[^"]*"\"")
-SINGLEQUOTES ("'"[^']*"'")
-
-LONGINTEGER {INTEGER}("l"|"L")
-INTEGER ({DECIMALINTEGER}|{OCTINTEGER}|{HEXINTEGER})
-DECIMALINTEGER ({NONZERODIGIT}{DIGIT}*|"0")
-OCTINTEGER "0"{OCTDIGIT}+
-HEXINTEGER "0"("x"|"X"){HEXDIGIT}+
-NONZERODIGIT [1-9]
-OCTDIGIT [0-7]
-HEXDIGIT ({DIGIT}|[a-f]|[A-F])
-FLOATNUMBER ({POINTFLOAT}|{EXPONENTFLOAT})
-POINTFLOAT ({INTPART}?{FRACTION}|{INTPART}".")
-EXPONENTFLOAT ({INTPART}|{POINTFLOAT}){EXPONENT}
-INTPART {DIGIT}+
-FRACTION "."{DIGIT}+
-EXPONENT ("e"|"E")("+"|"-")?{DIGIT}+
-IMAGNUMBER ({FLOATNUMBER}|{INTPART})("j"|"J")
-ATOM ({IDENTIFIER}|{LITERAL}|{ENCLOSURE})
-ENCLOSURE ({PARENTH_FORM}|{LIST_DISPLAY}|{DICT_DISPLAY}|{STRING_CONVERSION})
-LITERAL ({STRINGLITERAL}|{INTEGER}|{LONGINTEGER}|{FLOATNUMBER}|{IMAGNUMBER})
-PARENTH_FORM "("{EXPRESSION_LIST}?")"
-TEST ({AND_TEST}("or"{AND_TEST})*|{LAMBDA_FORM})
-TESTLIST {TEST}( ","{TEST})*","?
-LIST_DISPLAY "["{LISTMAKER}?"]"
-LISTMAKER {EXPRESSION}({LIST_FOR}|(","{EXPRESSION})*","?)
-LIST_ITER ({LIST_FOR}|{LIST_IF})
-LIST_FOR "for"{EXPRESSION_LIST}"in"{TESTLIST}{LIST_ITER}?
-LIST_IF "if"{TEST}{LIST_ITER}?
-DICT_DISPLAY "\{"{KEY_DATUM_LIST}?"\}"
-KEY_DATUM_LIST {KEY_DATUM}(","{KEY_DATUM})*","?
-KEY_DATUM {EXPRESSION}":"{EXPRESSION}
-STRING_CONVERSION "`"{EXPRESSION_LIST}"`"
-PRIMARY ({ATOM}|{ATTRIBUTEREF}|{SUBSCRIPTION}|{SLICING}|{CALL})
-ATTRIBUTEREF {PRIMARY}"."{IDENTIFIER}
-SUBSCRIPTION {PRIMARY}"["{EXPRESSION_LIST}"]"
-SLICING ({SIMPLE_SLICING}|{EXTENDED_SLICING})
-SIMPLE_SLICING {PRIMARY}"["{SHORT_SLICE}"]"
-EXTENDED_SLICING {PRIMARY}"["{SLICE_LIST}"]"
-SLICE_LIST {SLICE_ITEM}(","{SLICE_ITEM})*","?
-SLICE_ITEM ({EXPRESSION}|{PROPER_SLICE}|{ELLIPSIS})
-PROPER_SLICE ({SHORT_SLICE}|{LONG_SLICE})
-SHORT_SLICE {LOWER_BOUND}?":"{UPPER_BOUND}?
-LONG_SLICE {SHORT_SLICE}":"{STRIDE}?
-LOWER_BOUND {EXPRESSION}
-UPPER_BOUND {EXPRESSION}
-STRIDE {EXPRESSION}
-ELLIPSIS "..."
-CALL {PRIMARY}"("({ARGUMENT_LIST}","?)?")"
-ARGUMENT_LIST ({POSITIONAL_ARGUMENTS}(","{KEYWORD_ARGUMENTS})?(",""*"{EXPRESSION})?(",""**"{EXPRESSION})?|{KEYWORD_ARGUMENTS}(",""*"{EXPRESSION})?(",""**"{EXPRESSION})?|"*"{EXPRESSION}(",""**"{EXPRESSION})?|"**"{EXPRESSION})
-POSITIONAL_ARGUMENTS {EXPRESSION}(","{EXPRESSION})*
-KEYWORD_ARGUMENTS {KEYWORD_ITEM}(","{KEYWORD_ITEM})*
-KEYWORD_ITEM {IDENTIFIER}"="{EXPRESSION}
-POWER {PRIMARY}("**"{U_EXPR})?
-U_EXPR ({POWER}|"-"{U_EXPR}|"+"{U_EXPR}|"\~"{U_EXPR})
-M_EXPR ({U_EXPR}|{M_EXPR}"*"{U_EXPR}|{M_EXPR}"//"{U_EXPR}|{M_EXPR}"/"{U_EXPR}|{M_EXPR}"\%"{U_EXPR})
-A_EXPR ({M_EXPR}|{A_EXPR}"+"{M_EXPR}|{A_EXPR}"-"{M_EXPR}
-SHIFT_EXPR ({A_EXPR}|{SHIFT_EXPR}("<<"|">>"){A_EXPR})
-AND_EXPR ({SHIFT_EXPR}|{AND_EXPR}"\;SPMamp;"{SHIFT_EXPR}
-XOR_EXPR ({AND_EXPR}|{XOR_EXPR}"\textasciicircum"{AND_EXPR})
-OR_EXPR ({XOR_EXPR}|{OR_EXPR}"|"{ XOR_EXPR})
-
-COMPARISON {OR_EXPR}({COMP_OPERATOR}{OR_EXPR})*
-COMP_OPERATOR ("<"|">"|"=="|">="|"<="|"<>"|"!="|"is""not"?|"not"?"in")
-EXPRESSION ({OR_TEST}|{LAMBDA_FORM})
-OR_TEST ({AND_TEST}|{OR_TEST}"or"{AND_TEST})
-AND_TEST ({NOT_TEST}|{AND_TEST}"and"{NOT_TEST})
-NOT_TEST ({COMPARISON}|"not"{NOT_TEST})
-LAMBDA_FORM "lambda"{PARAMETER_LIST}?":"{EXPRESSION}
-EXPRESSION_LIST {EXPRESSION}(","{EXPRESSION})*","?
-SIMPLE_STMT ({EXPRESSION_STMT}|{ASSERT_STMT}|{ASSIGNMENT_STMT}|{AUGMENTED_ASSIGNMENT_STMT}|{PASS_STMT}|{DEL_STMT}|{PRINT_STMT}|{RETURN_STMT}|{YIELD_STMT}|{RAISE_STMT}|{BREAK_STMT}|{CONTINUE_STMT}|{IMPORT_STMT}|{GLOBAL_STMT}|{EXEC_STMT})
-EXPRESSION_STMT {EXPRESSION_LIST}
-ASSERT_STMT "assert"{EXPRESSION}(","{EXPRESSION})?
-ASSIGNMENT_STMT ({TARGET_LIST}"=")+{EXPRESSION_LIST}
-TARGET_LIST {TARGET}(","{TARGET})*","?
-TARGET ({IDENTIFIER}|"("{TARGET_LIST}")"|"["{TARGET_LIST}"]"|{ATTRIBUTEREF}|{SUBSCRIPTION}|{SLICING})
-
-
-%option noyywrap
-%option nounput
-
-%x Body
-
-%x FunctionDec
-%x FunctionParams
-
-%x ClassDec
-%x ClassInheritance
-
-%x Suite
-%x SuiteCaptureIndent
-%x SuiteStart
-%x SuiteMaintain
-%x SuiteContinuing
-
-%x LongString
-
-%x SingleQuoteString
-%x DoubleQuoteString
-%x TripleString
-
-%%
-
-<Body,Suite>{
- "def"{BB} {
- startFontClass("keyword");
- codify(yytext);
- endFontClass();
- BEGIN( FunctionDec );
- }
-
- "class"{BB} {
- startFontClass("keyword");
- codify(yytext);
- endFontClass();
- BEGIN( ClassDec );
- }
- "None" {
- startFontClass("keywordtype");
- codify(yytext);
- endFontClass();
- }
- "self."{IDENTIFIER}/"(" {
- codify("self.");
- findMemberLink(*g_code,&yytext[5]);
- }
- "self."{IDENTIFIER} {
- codify("self.");
- findMemberLink(*g_code,&yytext[5]);
- }
-}
-
-<ClassDec>{IDENTIFIER} {
-
- generateClassOrGlobalLink(*g_code,yytext);
- // codify(yytext);
- g_curClassName = yytext;
- g_curClassBases.clear();
- BEGIN( ClassInheritance );
- }
-
-<ClassInheritance>{
- ({BB}|[(,)]) {
- codify(yytext);
- }
-
- ({IDENTIFIER}".")*{IDENTIFIER} {
- // The parser
- // is assuming
- // that ALL identifiers
- // in this state
- // are base classes;
- // it doesn't check to see
- // that the first parenthesis
- // has been seen.
-
- // This is bad - it should
- // probably be more strict
- // about what to accept.
-
- g_curClassBases.inSort(yytext);
- generateClassOrGlobalLink(*g_code,yytext);
- // codify(yytext);
- }
-
- ":" {
- codify(yytext);
-
- // Assume this will
- // be a one-line suite;
- // found counter-example
- // in SuiteStart.
-
- // Push a class scope
-
- ClassDef *classDefToAdd = new ClassDef("<code>",1,g_curClassName,ClassDef::Class,0,0,FALSE);
- g_codeClassSDict.append(g_curClassName,classDefToAdd);
- char *s=g_curClassBases.first();
- while (s)
- {
- ClassDef *baseDefToAdd;
- baseDefToAdd=g_codeClassSDict[s];
-
- // Try to find class in global
- // scope
- if (baseDefToAdd==0)
- {
- baseDefToAdd=getResolvedClass(g_currentDefinition,g_sourceFileDef,s);
- }
-
- if (baseDefToAdd && baseDefToAdd!=classDefToAdd)
- {
- classDefToAdd->insertBaseClass(baseDefToAdd,s,Public,Normal);
- }
-
- s=g_curClassBases.next();
- }
-
- // Reset class-parsing variables.
- g_curClassName.resize(0);
- g_curClassBases.clear();
-
- g_noSuiteFound = TRUE;
- BEGIN( SuiteStart );
- }
-}
-
-
-<FunctionDec>{
- {IDENTIFIER} {
- generateFunctionLink(*g_code,yytext);
- }
-
- {B}"(" {
- codify(yytext);
- BEGIN( FunctionParams );
- }
-}
-
-<FunctionParams>{
- ({BB}|",") {
- // Parses delimiters
- codify(yytext);
- }
-
- ({IDENTIFIER}|{PARAMNONEMPTY}+) {
- codify(yytext);
- }
-
- ")" {
- codify(yytext);
- }
-
- ":" {
- codify(yytext);
-
- // Assume this will
- // be a one-line suite;
- // found counter-example
- // in SuiteStart.
- g_noSuiteFound = TRUE;
- BEGIN( SuiteStart );
- }
-}
-
-<Body,Suite>{
-
- {KEYWORD} {
- // Position-sensitive rules!
- // Must come AFTER keyword-triggered rules
- // Must come BEFORE identifier NONEMPTY-like rules
- // to syntax highlight.
-
- startFontClass("keyword");
- codify(yytext);
- endFontClass();
- }
-
- {FLOWKW} {
- startFontClass("keywordflow");
- codify(yytext);
- endFontClass();
- }
- ({IDENTIFIER}".")*{IDENTIFIER}/"(" {
- generateClassOrGlobalLink(*g_code,yytext);
- }
- ({IDENTIFIER}".")+{IDENTIFIER} {
- generateClassOrGlobalLink(*g_code,yytext,TRUE);
- }
- {IDENTIFIER} { codify(yytext); }
-
-}
-
-
-
-<SuiteStart>{
-
- {BB} {
- codify(yytext);
- }
- "pass" {
- startFontClass("keyword");
- codifyLines(yytext);
- endFontClass();
- BEGIN(Body);
- }
- {KEYWORD} {
- startFontClass("keyword");
- codifyLines(yytext);
- endFontClass();
-
- // No indentation necesary
- g_noSuiteFound = FALSE;
- }
-
- {FLOWKW} {
- startFontClass("keywordflow");
- codifyLines(yytext);
- endFontClass();
-
- // No indentation necesary
- g_noSuiteFound = FALSE;
- }
- {IDENTIFIER} {
- codify(yytext);
- }
-
-
- {POUNDCOMMENT} {
- // This eats EVERYTHING
- // except the newline
- startFontClass("comment");
- codifyLines(yytext);
- endFontClass();
- }
-
- {NEWLINE} {
- codifyLines(yytext);
- if ( g_noSuiteFound )
- {
- // printf("New suite to capture! [%d]\n", g_yyLineNr);
- BEGIN ( SuiteCaptureIndent );
- }
- }
-}
-
-<SuiteCaptureIndent>{
- "\n"|({BB}"\n") {
- // Blankline - ignore, keep looking for indentation.
- codifyLines(yytext);
- }
-
- {BB} {
- // This state lasts momentarily,
- // to check the indentation
- // level that is about to be
- // used.
- codifyLines(yytext);
- g_indents.push(yyleng);
- // printf("Captured indent of %d [line %d]\n", yyleng, g_yyLineNr);
- BEGIN( Suite );
- }
-}
-
-<SuiteMaintain>{
-
- {BB}/({NONEMPTY}|{EXPCHAR}) {
- // This implements poor
- // indendation-tracking;
- // should be improved.
- // (translate tabs to space, etc)
- codifyLines(yytext);
- adjustScopesAndSuites(yyleng);
- }
-
- "\n"|({BB}"\n") {
- // If this ever succeeds,
- // it means that this is
- // a blank line, and
- // can be ignored.
- codifyLines(yytext);
- }
-
- ""/({NONEMPTY}|{EXPCHAR}) {
- // Default rule; matches
- // the empty string, assuming
- // real text starts here.
- // Just go straight to Body.
- adjustScopesAndSuites(0);
- }
-}
-
-
-<Suite>{NEWLINE} {
- codifyLines(yytext);
- BEGIN( SuiteMaintain );
- }
-<Body>{IDENTIFIER} {
- codify(yytext);
- }
-<Body>{NEWLINE} {
- codifyLines(yytext);
- }
-
-<SingleQuoteString>{ // Single quoted string like 'That\'s a """nice""" string!'
- \\{B}\n { // line continuation
- codifyLines(yytext);
- }
- \\. { // espaced char
- codify(yytext);
- }
- {STRINGPREFIX}?{TRIDOUBLEQUOTE} { // tripple double quotes
- codify(yytext);
- }
- "'" { // end of the string
- codify(yytext);
- endFontClass();
- BEGIN(g_stringContext);
- }
- [^"'\n\\]+ { // normal chars
- codify(yytext);
- }
- . { // normal char
- codify(yytext);
- }
-}
-
-<DoubleQuoteString>{ // Double quoted string like "That's \"a '''nice'''\" string!"
- \\{B}\n { // line continuation
- codifyLines(yytext);
- }
- \\. { // espaced char
- codify(yytext);
- }
- {STRINGPREFIX}?{TRISINGLEQUOTE} { // tripple single quotes
- codify(yytext);
- }
- "\"" { // end of the string
- codify(yytext);
- endFontClass();
- BEGIN(g_stringContext);
- }
- [^"'\n\\]+ { // normal chars
- codify(yytext);
- }
- . { // normal char
- codify(yytext);
- }
-}
-
-<TripleString>{
- {TRIDOUBLEQUOTE} |
- {TRISINGLEQUOTE} {
- codify(yytext);
- if (g_doubleQuote==(yytext[0]=='"'))
- {
- endFontClass();
- BEGIN(g_stringContext);
- }
- }
- {LONGSTRINGBLOCK} {
- codifyLines(yytext);
- }
- \n {
- codifyLines(yytext);
- }
- . {
- codify(yytext);
- }
-}
-
- /*
-<*>({NONEMPTY}|{EXPCHAR}|{BB}) { // This should go one character at a time.
- codify(yytext);
- // printf("[pycode] '%s' [ state %d ] [line %d] no match\n",
- // yytext, YY_START, g_yyLineNr);
-
- //endFontClass();
- BEGIN(Body);
- }
- */
-
-<*>{STRINGPREFIX}?{TRISINGLEQUOTE} |
-<*>{STRINGPREFIX}?{TRIDOUBLEQUOTE} {
- startFontClass("stringliteral");
- g_stringContext=YY_START;
- g_doubleQuote=yytext[yyleng-1]=='"';
- codify(yytext);
- BEGIN(TripleString);
- }
-<*>{STRINGPREFIX}?"'" { // single quoted string
- startFontClass("stringliteral");
- g_stringContext=YY_START;
- codify(yytext);
- BEGIN(SingleQuoteString);
- }
-<*>{STRINGPREFIX}?"\"" { // double quoted string
- startFontClass("stringliteral");
- g_stringContext=YY_START;
- codify(yytext);
- BEGIN(DoubleQuoteString);
- }
-<*>{POUNDCOMMENT} {
- if (YY_START==SingleQuoteString ||
- YY_START==DoubleQuoteString ||
- YY_START==TripleString
- )
- {
- REJECT;
- }
- // This eats EVERYTHING
- // except the newline
- startFontClass("comment");
- codifyLines(yytext);
- endFontClass();
- }
-<*>{NEWLINE} {
- codifyLines(yytext);
- //printf("[pycode] %d NEWLINE [line %d] no match\n",
- // YY_START, g_yyLineNr);
-
- //endFontClass();
- BEGIN(Body);
- }
-
-<*>[ \t]+ {
- codify(yytext);
- BEGIN(Body);
- }
-<*>. {
- codify(yytext);
- // printf("[pycode] '%s' [ state %d ] [line %d] no match\n",
- // yytext, YY_START, g_yyLineNr);
-
- //endFontClass();
- BEGIN(Body);
- }
-
-%%
-
-/*@ ----------------------------------------------------------------------------
- */
-
-void resetPythonCodeParserState()
-{
- g_currentDefinition = 0;
- g_currentMemberDef = 0;
- g_doubleStringIsDoc = FALSE;
- g_paramParens = 0;
- g_indents.clear();
- BEGIN( Body );
-}
-
-/*!
- Examines current stack of white-space indentations;
- re-syncs the parser with the correct scope.
-*/
-static void adjustScopesAndSuites(unsigned indentLength)
-{
- // States to pop
- if (!g_indents.isEmpty() && indentLength < g_indents.top())
- {
- while (!g_indents.isEmpty() && indentLength < g_indents.top())
- {
- // printf("Exited scope indent of [%d]\n", g_indents.top());
- g_indents.pop(); // Pop the old suite's indentation
-
- g_currentMemberDef=0;
- if (g_currentDefinition)
- g_currentDefinition=g_currentDefinition->getOuterScope();
- }
- }
-
- // Are there any remaining indentation levels for suites?
- if (!g_indents.isEmpty())
- {
- BEGIN( Suite );
- }
- else
- {
- BEGIN( Body );
- }
-}
-
-void parsePythonCode(CodeOutputInterface &od,const char * /*className*/,
- const QCString &s,bool exBlock, const char *exName,
- FileDef *fd,int startLine,int endLine,bool /*inlineFragment*/,
- MemberDef *,bool)
-{
-
- //printf("***parseCode()\n");
-
- //--------------------------------------
- if (s.isEmpty()) return;
- g_code = &od;
- g_inputString = s;
- g_inputPosition = 0;
- g_currentFontClass = 0;
- g_needsTermination = FALSE;
- if (endLine!=-1)
- g_inputLines = endLine+1;
- else
- g_inputLines = countLines();
-
- if (startLine!=-1)
- g_yyLineNr = startLine;
- else
- g_yyLineNr = 1;
-
- g_exampleBlock = exBlock;
- g_exampleName = exName;
- g_sourceFileDef = fd;
-
-
- // Starts line 1 on the output
- startCodeLine();
-
- pycodeYYrestart( pycodeYYin );
-
- pycodeYYlex();
-
- if (!g_indents.isEmpty())
- {
- // printf("Exited pysourceparser in inconsistent state!\n");
- }
-
- if (g_needsTermination)
- {
- endCodeLine();
- }
- return;
-}
-
-
-#if !defined(YY_FLEX_SUBMINOR_VERSION)
-extern "C" { // some bogus code to keep the compiler happy
- void pycodeYYdummy() { yy_flex_realloc(0,0); }
-}
-#elif YY_FLEX_SUBMINOR_VERSION<33
-#error "You seem to be using a version of flex newer than 2.5.4. These are currently incompatible with 2.5.4, and do NOT work with doxygen! Please use version 2.5.4 or expect things to be parsed wrongly! A bug report has been submitted (#732132)."
-#endif
-
diff --git a/trunk/src/pyscanner.h b/trunk/src/pyscanner.h
deleted file mode 100644
index 3bb4b21..0000000
--- a/trunk/src/pyscanner.h
+++ /dev/null
@@ -1,60 +0,0 @@
-/******************************************************************************
- *
- *
- *
- * Copyright (C) 1997-2012 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.
- *
- */
-/* This code is based on the work done by the MoxyPyDoxy team
- * (Linda Leong, Mike Rivera, Kim Truong, and Gabriel Estrada)
- * in Spring 2005 as part of CS 179E: Compiler Design Project
- * at the University of California, Riverside; the course was
- * taught by Peter H. Froehlich <phf@acm.org>.
- */
-
-
-#ifndef PYSCANNER_H
-#define PYSCANNER_H
-
-#include "parserintf.h"
-
-/** \brief Python Language parser using state-based lexical scanning.
- *
- * This is the Python language parser for doxygen.
- */
-class PythonLanguageScanner : public ParserInterface
-{
- public:
- virtual ~PythonLanguageScanner() {}
- void parseInput(const char * fileName,
- const char *fileBuf,
- Entry *root);
- bool needsPreprocessing(const QCString &extension);
- void parseCode(CodeOutputInterface &codeOutIntf,
- const char *scopeName,
- const QCString &input,
- bool isExampleBlock,
- const char *exampleName=0,
- FileDef *fileDef=0,
- int startLine=-1,
- int endLine=-1,
- bool inlineFragment=FALSE,
- MemberDef *memberDef=0,
- bool showLineNumbers=TRUE
- );
- void resetCodeParserState();
- void parsePrototype(const char *text);
-};
-
-void pyscanFreeScanner();
-
-#endif
diff --git a/trunk/src/pyscanner.l b/trunk/src/pyscanner.l
deleted file mode 100644
index 7c571d6..0000000
--- a/trunk/src/pyscanner.l
+++ /dev/null
@@ -1,1727 +0,0 @@
-/******************************************************************************
- *
- *
- *
- * Copyright (C) 1997-2012 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.
- *
- */
-/* This code is based on the work done by the MoxyPyDoxy team
- * (Linda Leong, Mike Rivera, Kim Truong, and Gabriel Estrada)
- * in Spring 2005 as part of CS 179E: Compiler Design Project
- * at the University of California, Riverside; the course was
- * taught by Peter H. Froehlich <phf@acm.org>.
- */
-
-
-%{
-
-/*
- * includes
- */
-#include <stdio.h>
-#include <stdlib.h>
-#include <assert.h>
-#include <ctype.h>
-
-#include "qtbc.h"
-#include <qarray.h>
-#include <qstack.h>
-#include <qregexp.h>
-#include <unistd.h>
-#include <qfile.h>
-#include <qfileinfo.h>
-
-#include "pyscanner.h"
-#include "entry.h"
-#include "message.h"
-#include "config.h"
-#include "doxygen.h"
-#include "util.h"
-#include "defargs.h"
-#include "language.h"
-#include "commentscan.h"
-#include "pycode.h"
-#include "arguments.h"
-
-#define YY_NEVER_INTERACTIVE 1
-
-/* -----------------------------------------------------------------
- *
- * statics
- */
-
-
-static ParserInterface *g_thisParser;
-static const char * inputString;
-static int inputPosition;
-static QFile inputFile;
-
-static Protection protection;
-
-static Entry* current_root = 0 ;
-static Entry* current = 0 ;
-static Entry* previous = 0 ;
-static Entry* bodyEntry = 0 ;
-static int yyLineNr = 1 ;
-static QCString yyFileName;
-static MethodTypes mtype;
-static bool gstat;
-static Specifier virt;
-
-static int docBlockContext;
-static QCString docBlock;
-static QCString docBlockName;
-static bool docBlockInBody;
-static bool docBlockJavaStyle;
-static bool docBrief;
-static bool docBlockSpecial;
-
-static bool g_doubleQuote;
-static bool g_specialBlock;
-static int g_stringContext;
-static QGString * g_copyString;
-static int g_indent = 0;
-static int g_curIndent = 0;
-
-static QDict<QCString> g_packageNameCache(257);
-static QCString g_packageScope;
-
-static char g_atomStart;
-static char g_atomEnd;
-static int g_atomCount;
-
-//static bool g_insideConstructor;
-
-static QCString g_moduleScope;
-static QCString g_packageName;
-
-//static bool g_hideClassDocs;
-
-static QCString g_defVal;
-static int g_braceCount;
-
-static bool g_lexInit = FALSE;
-static bool g_packageCommentAllowed;
-
-//-----------------------------------------------------------------------------
-
-
-static void initParser()
-{
- protection = Public;
- mtype = Method;
- gstat = FALSE;
- virt = Normal;
- previous = 0;
- g_packageCommentAllowed = TRUE;
- g_packageNameCache.setAutoDelete(TRUE);
-}
-
-static void initEntry()
-{
- //current->python = TRUE;
- current->protection = protection ;
- current->mtype = mtype;
- current->virt = virt;
- current->stat = gstat;
- current->lang = SrcLangExt_Python;
- current->setParent(current_root);
- initGroupInfo(current);
- gstat = FALSE;
-}
-
-static void newEntry()
-{
- previous = current;
- current_root->addSubEntry(current);
- current = new Entry ;
- initEntry();
-}
-
-static void newVariable()
-{
- if (!current->name.isEmpty() && current->name.at(0)=='_') // mark as private
- {
- current->protection=Private;
- }
- if (current_root->section&Entry::COMPOUND_MASK) // mark as class variable
- {
- current->stat = TRUE;
- }
- newEntry();
-}
-
-static void newFunction()
-{
- if (current->name.left(2)=="__" && current->name.right(2)=="__")
- {
- // special method name, see
- // http://docs.python.org/ref/specialnames.html
- current->protection=Public;
- }
- else if (current->name.at(0)=='_')
- {
- current->protection=Private;
- }
-}
-
-static inline int computeIndent(const char *s)
-{
- int col=0;
- static int tabSize=Config_getInt("TAB_SIZE");
- const char *p=s;
- char c;
- while ((c=*p++))
- {
- if (c==' ') col++;
- else if (c=='\t') col+=tabSize-(col%tabSize);
- else break;
- }
- return col;
-}
-
-static QCString findPackageScopeFromPath(const QCString &path)
-{
- QCString *pScope = g_packageNameCache.find(path);
- if (pScope)
- {
- return *pScope;
- }
- QFileInfo pf(path+"/__init__.py"); // found package initialization file
- if (pf.exists())
- {
- int i=path.findRev('/');
- if (i!=-1)
- {
- QCString scope = findPackageScopeFromPath(path.left(i));
- if (!scope.isEmpty())
- {
- scope+="::";
- }
- scope+=path.mid(i+1);
- g_packageNameCache.insert(path,new QCString(scope));
- return scope;
- }
- }
- return "";
-}
-
-static QCString findPackageScope(const char *fileName)
-{
- if (fileName==0) return "";
- QFileInfo fi(fileName);
- return findPackageScopeFromPath(fi.dirPath(TRUE).data());
-}
-
-//-----------------------------------------------------------------------------
-
-static void lineCount()
-{
- //fprintf(stderr,"yyLineNr=%d\n",yyLineNr);
- for (const char *p = yytext; *p; ++p)
- {
- yyLineNr += (*p == '\n') ;
- }
-}
-
-static void incLineNr()
-{
- //fprintf(stderr,"yyLineNr=%d\n",yyLineNr);
- yyLineNr++;
-}
-
-#if 0
-// Appends the current-name to current-type;
-// Destroys current-name.
-// Destroys current->args and current->argList
-static void addType( Entry* current )
-{
- uint tl=current->type.length();
- if ( tl>0 && !current->name.isEmpty() && current->type.at(tl-1)!='.')
- {
- current->type += ' ' ;
- }
- current->type += current->name ;
- current->name.resize(0) ;
- tl=current->type.length();
- if ( tl>0 && !current->args.isEmpty() && current->type.at(tl-1)!='.')
- {
- current->type += ' ' ;
- }
- current->type += current->args ;
- current->args.resize(0) ;
- current->argList->clear();
-}
-
-static QCString stripQuotes(const char *s)
-{
- QCString name;
- if (s==0 || *s==0) return name;
- name=s;
- if (name.at(0)=='"' && name.at(name.length()-1)=='"')
- {
- name=name.mid(1,name.length()-2);
- }
- return name;
-}
-#endif
-//-----------------------------------------------------------------
-
-//-----------------------------------------------------------------
-static void startCommentBlock(bool brief)
-{
- if (brief)
- {
- current->briefFile = yyFileName;
- current->briefLine = yyLineNr;
- }
- else
- {
- current->docFile = yyFileName;
- current->docLine = yyLineNr;
- }
-}
-
-/*
-static void appendDocBlock() {
- previous = current;
- current_root->addSubEntry(current);
- current = new Entry;
- initEntry();
-}
-*/
-
-static void handleCommentBlock(const QCString &doc,bool brief)
-{
- //printf("handleCommentBlock(doc=[%s] brief=%d docBlockInBody=%d docBlockJavaStyle=%d\n",
- // doc.data(),brief,docBlockInBody,docBlockJavaStyle);
-
- // TODO: Fix me
- docBlockInBody=FALSE;
-
- if (docBlockInBody && previous && !previous->doc.isEmpty())
- {
- previous->doc=previous->doc.stripWhiteSpace()+"\n\n";
- }
-
- int position = 0;
- bool needsEntry;
- int lineNr = brief ? current->briefLine : current->docLine;
- while (parseCommentBlock(
- g_thisParser,
- (docBlockInBody && previous) ? previous : current,
- doc, // text
- yyFileName, // file
- lineNr,
- docBlockInBody ? FALSE : brief,
- docBlockJavaStyle, // javadoc style // or FALSE,
- docBlockInBody,
- protection,
- position,
- needsEntry)
- ) // need to start a new entry
- {
- if (needsEntry)
- {
- newEntry();
- }
- }
- if (needsEntry)
- {
- newEntry();
- }
-
-}
-
-static void endOfDef(int correction=0)
-{
- //printf("endOfDef at=%d\n",yyLineNr);
- if (bodyEntry)
- {
- bodyEntry->endBodyLine = yyLineNr-correction;
- bodyEntry = 0;
- }
- newEntry();
- //g_insideConstructor = FALSE;
-}
-
-static inline void addToString(const char *s)
-{
- if (g_copyString) (*g_copyString)+=s;
-}
-
-static void initTriDoubleQuoteBlock()
-{
- docBlockContext = YY_START;
- docBlockInBody = FALSE;
- docBlockJavaStyle = TRUE;
- docBlockSpecial = yytext[3]=='!';
- docBlock.resize(0);
- g_doubleQuote = TRUE;
- startCommentBlock(FALSE);
-}
-
-static void initTriSingleQuoteBlock()
-{
- docBlockContext = YY_START;
- docBlockInBody = FALSE;
- docBlockJavaStyle = TRUE;
- docBlockSpecial = yytext[3]=='!';
- docBlock.resize(0);
- g_doubleQuote = FALSE;
- startCommentBlock(FALSE);
-}
-
-static void initSpecialBlock()
-{
- docBlockContext = YY_START;
- docBlockInBody = FALSE;
- docBlockJavaStyle = TRUE;
- docBrief = TRUE;
- docBlock.resize(0);
- startCommentBlock(TRUE);
-}
-
-static void searchFoundDef()
-{
- current->fileName = yyFileName;
- current->startLine = yyLineNr;
- current->bodyLine = yyLineNr;
- current->section = Entry::FUNCTION_SEC;
- current->protection = protection = Public;
- current->lang = SrcLangExt_Python;
- current->virt = Normal;
- current->stat = gstat;
- current->mtype = mtype = Method;
- current->type.resize(0);
- current->name.resize(0);
- current->args.resize(0);
- current->argList->clear();
- g_packageCommentAllowed = FALSE;
- gstat=FALSE;
- //printf("searchFoundDef at=%d\n",yyLineNr);
-}
-
-static void searchFoundClass()
-{
- current->section = Entry::CLASS_SEC;
- current->argList->clear();
- current->type += "class" ;
- current->fileName = yyFileName;
- current->startLine = yyLineNr;
- current->bodyLine = yyLineNr;
- g_packageCommentAllowed = FALSE;
-}
-
-//-----------------------------------------------------------------------------
-/* ----------------------------------------------------------------- */
-#undef YY_INPUT
-#define YY_INPUT(buf,result,max_size) result=yyread(buf,max_size);
-
-static int yyread(char *buf,int max_size)
-{
- int c=0;
- while ( c < max_size && inputString[inputPosition] )
- {
- *buf = inputString[inputPosition++] ;
- //printf("%d (%c)\n",*buf,*buf);
- c++; buf++;
- }
- return c;
-}
-
-%}
-
- /* start command character */
-
-
-
-BB [ \t]+
-B [ \t]*
-NEWLINE \n
-BN [ \t\n]
-
-DIGIT [0-9]
-
-HEXNUMBER "0"[xX][0-9a-fA-F]+[lL]?
-OCTNUMBER "0"[0-7]+[lL]?
-NUMBER {DIGIT}+[lLjJ]?
-INTNUMBER {HEXNUMBER}|{OCTNUMBER}|{NUMBER}
-FLOATNUMBER {DIGIT}+"."{DIGIT}+([eE][+\-]?{DIGIT}+)?[jJ]?
-LETTER [A-Za-z]
-NONEMPTY [A-Za-z0-9_]
-EXPCHAR [#(){}\[\],:.%/\\=`*~|&<>!;+-]
-NONEMPTYEXP [^ \t\n:]
-PARAMNONEMPTY [^ \t\n():]
-IDENTIFIER ({LETTER}|"_")({LETTER}|{DIGIT}|"_")*
-SCOPE {IDENTIFIER}("."{IDENTIFIER})*
-BORDER ([^A-Za-z0-9])
-
-TRISINGLEQUOTE "'''"(!)?
-TRIDOUBLEQUOTE "\"\"\""(!)?
-LONGSTRINGCHAR [^\\"']
-ESCAPESEQ ("\\")(.)
-LONGSTRINGITEM ({LONGSTRINGCHAR}|{ESCAPESEQ})
-SMALLQUOTE ("\"\""|"\""|"'"|"''")
-LONGSTRINGBLOCK ({LONGSTRINGITEM}+|{SMALLQUOTE})
-
-SHORTSTRING ("'"{SHORTSTRINGITEM}*"'"|'"'{SHORTSTRINGITEM}*'"')
-SHORTSTRINGITEM ({SHORTSTRINGCHAR}|{ESCAPESEQ})
-SHORTSTRINGCHAR [^\\\n"]
-STRINGLITERAL {STRINGPREFIX}?( {SHORTSTRING} | {LONGSTRING})
-STRINGPREFIX ("r"|"u"|"ur"|"R"|"U"|"UR"|"Ur"|"uR")
-KEYWORD ("lambda"|"import"|"class"|"assert"|"as"|"from"|"global"|"def"|"True"|"False")
-FLOWKW ("or"|"and"|"is"|"not"|"print"|"for"|"in"|"if"|"try"|"except"|"yield"|"raise"|"break"|"continue"|"pass"|"if"|"return"|"while"|"elif"|"else"|"finally")
-POUNDCOMMENT "#"[^#\n][^\n]*
-
-STARTDOCSYMS "##"
-
-%option noyywrap
-
- /* Main start state */
-
-%x Search
-%x SearchMemVars
-
- /* Mid-comment states */
-
- /* %x FuncDoubleComment */
- /* %x ClassDoubleComment */
-%x TryClassDocString
-%x TripleComment
-%x SpecialComment
-
- /* Function states */
-
-%x FunctionDec
-%x FunctionParams
-%x FunctionBody
-%x FunctionParamDefVal
-
- /* Class states */
-
-%x ClassDec
-%x ClassInheritance
-%x ClassCaptureIndent
-%x ClassBody
-
- /* Variable states */
-%x VariableDec
-%x VariableEnd
-%x VariableAtom
-
- /* String states */
-
-%x SingleQuoteString
-%x DoubleQuoteString
-%x TripleString
-
- /* import */
-%x FromMod
-%x FromModItem
-%x Import
-
-%%
-
- /* ------------ Function recognition rules -------------- */
-
-<Search>{
-
- ^{B}"def"{BB} { // start of a function/method definition with indent
- //fprintf(stderr,"Found def at %d\n",yyLineNr);
- g_indent=computeIndent(yytext);
- searchFoundDef();
- BEGIN( FunctionDec );
- }
- "def"{BB} { // start of a function/method definition
- searchFoundDef();
- BEGIN( FunctionDec );
- }
-
- ^{B}"class"{BB} { // start of a class definition with indent
- //fprintf(stderr,"Found class at %d\n",yyLineNr);
- g_indent=computeIndent(yytext);
- searchFoundClass();
- BEGIN( ClassDec ) ;
- }
- "class"{BB} { // start of a class definition
- searchFoundClass();
- BEGIN( ClassDec ) ;
- }
- ^{B}"from"{BB} |
- "from"{BB} { // start of an from import
- g_packageCommentAllowed = FALSE;
- BEGIN( FromMod );
- }
-
- ^{B}"import"{BB} |
- "import"{BB} { // start of an import statement
- g_packageCommentAllowed = FALSE;
- BEGIN( Import );
- }
- ^{B}{IDENTIFIER}/{B}"="{B}"property" { // property
- current->section = Entry::VARIABLE_SEC;
- current->mtype = Property;
- current->name = QCString(yytext).stripWhiteSpace();
- current->fileName = yyFileName;
- current->startLine = yyLineNr;
- current->bodyLine = yyLineNr;
- g_packageCommentAllowed = FALSE;
- BEGIN(VariableDec);
- }
- ^{B}{IDENTIFIER}/{B}"="[^=] { // variable
- g_indent=computeIndent(yytext);
- current->section = Entry::VARIABLE_SEC;
- current->name = QCString(yytext).stripWhiteSpace();
- current->fileName = yyFileName;
- current->startLine = yyLineNr;
- current->bodyLine = yyLineNr;
- g_packageCommentAllowed = FALSE;
- BEGIN(VariableDec);
- }
- "'" { // start of a single quoted string
- g_stringContext=YY_START;
- g_copyString=0;
- g_packageCommentAllowed = FALSE;
- BEGIN( SingleQuoteString );
- }
- "\"" { // start of a double quoted string
- g_stringContext=YY_START;
- g_copyString=0;
- g_packageCommentAllowed = FALSE;
- BEGIN( DoubleQuoteString );
- }
- "@staticmethod" {
- gstat=TRUE;
- }
- {POUNDCOMMENT} { // normal comment
- g_packageCommentAllowed = FALSE;
- }
- {IDENTIFIER} { // some other identifier
- g_packageCommentAllowed = FALSE;
- }
- ^{BB} {
- g_curIndent=computeIndent(yytext);
- }
-
- {NEWLINE}+ { // new line
- lineCount();
- }
-
- {TRIDOUBLEQUOTE} { // start of a comment block
- initTriDoubleQuoteBlock();
- BEGIN(TripleComment);
- }
-
- {TRISINGLEQUOTE} { // start of a comment block
- initTriSingleQuoteBlock();
- BEGIN(TripleComment);
- }
-
- {STARTDOCSYMS}/[^#] { // start of a special comment
- g_curIndent=computeIndent(yytext);
- g_packageCommentAllowed = FALSE;
- initSpecialBlock();
- BEGIN(SpecialComment);
- }
- [^\n] { // any other character...
- // This is the major default
- // that should catch everything
- // else in Body.
- }
-}
-
-<FromMod>{
- {IDENTIFIER}({B}"."{B}{IDENTIFIER})* { // from package import
- g_packageName=yytext;
- }
- "import"{B} {
- BEGIN(FromModItem);
- }
- \n {
- incLineNr();
- BEGIN(Search);
- }
- {B} {
- }
- . {
- unput(*yytext);
- BEGIN(Search);
- }
-}
-
-<FromModItem>{
- "*" { // import all
- QCString item=g_packageName;
- current->name=removeRedundantWhiteSpace(substitute(item,".","::"));
- current->fileName = yyFileName;
- //printf("Adding using directive: found:%s:%d name=%s\n",yyFileName.data(),yyLineNr,current->name.data());
- current->section=Entry::USINGDIR_SEC;
- current_root->addSubEntry(current);
- current = new Entry ;
- initEntry();
- BEGIN(Search);
- }
- {IDENTIFIER}/{B}","{B} {
- QCString item=g_packageName+"."+yytext;
- current->name=removeRedundantWhiteSpace(substitute(item,".","::"));
- current->fileName = yyFileName;
- //printf("Adding using declaration: found:%s:%d name=%s\n",yyFileName.data(),yyLineNr,current->name.data());
- current->section=Entry::USINGDECL_SEC;
- current_root->addSubEntry(current);
- current = new Entry ;
- initEntry();
- }
- {IDENTIFIER} {
- QCString item=g_packageName+"."+yytext;
- current->name=removeRedundantWhiteSpace(substitute(item,".","::"));
- current->fileName = yyFileName;
- //printf("Adding using declaration: found:%s:%d name=%s\n",yyFileName.data(),yyLineNr,current->name.data());
- current->section=Entry::USINGDECL_SEC;
- current_root->addSubEntry(current);
- current = new Entry ;
- initEntry();
- BEGIN(Search);
- }
- \n {
- incLineNr();
- BEGIN(Search);
- }
- {B} {
- }
- "," {
- }
- . {
- unput(*yytext);
- BEGIN(Search);
- }
-}
-
-<Import>{
- {IDENTIFIER}({B}"."{B}{IDENTIFIER})* {
- current->name=removeRedundantWhiteSpace(substitute(yytext,".","::"));
- current->fileName = yyFileName;
- //printf("Adding using declaration: found:%s:%d name=%s\n",yyFileName.data(),yyLineNr,current->name.data());
- current->section=Entry::USINGDECL_SEC;
- current_root->addSubEntry(current);
- current = new Entry ;
- initEntry();
- BEGIN(Search);
- }
- \n {
- incLineNr();
- BEGIN(Search);
- }
- {B} {
- }
- . {
- unput(*yytext);
- BEGIN(Search);
- }
-}
-
-<SearchMemVars>{
- "self."{IDENTIFIER}/{B}"=" {
- //fprintf(stderr,"Found member variable %s in %s at %d\n",&yytext[5],current_root->name.data(),yyLineNr);
- current->name=&yytext[5];
- current->section=Entry::VARIABLE_SEC;
- current->fileName = yyFileName;
- current->startLine = yyLineNr;
- current->bodyLine = yyLineNr;
- current->type.resize(0);
- if (current->name.at(0)=='_') // mark as private
- {
- current->protection=Private;
- }
- else
- {
- current->protection=Public;
- }
- newEntry();
- }
- {TRIDOUBLEQUOTE} { // start of a comment block
- initTriDoubleQuoteBlock();
- BEGIN(TripleComment);
- }
-
- {TRISINGLEQUOTE} { // start of a comment block
- initTriSingleQuoteBlock();
- BEGIN(TripleComment);
- }
-
- {STARTDOCSYMS}/[^#] { // start of a special comment
- initSpecialBlock();
- BEGIN(SpecialComment);
- }
- {POUNDCOMMENT} { // #
- }
- "'" { // start of a single quoted string
- g_stringContext=YY_START;
- g_copyString=0;
- BEGIN( SingleQuoteString );
- }
- "\"" { // start of a double quoted string
- g_stringContext=YY_START;
- g_copyString=0;
- BEGIN( DoubleQuoteString );
- }
- \n { incLineNr(); }
- {IDENTIFIER} // identifiers
- [^'"\.#a-z_A-Z\n]+ // other uninteresting stuff
- . // anything else
-}
-
-<FunctionBody>{
- \n{B}/{IDENTIFIER}{BB} {
- //fprintf(stderr,"indent %d<=%d\n",computeIndent(&yytext[1]),g_indent);
- if (computeIndent(&yytext[1])<=g_indent)
- {
- int i;
- for (i=yyleng-1;i>=0;i--)
- {
- unput(yytext[i]);
- }
- endOfDef();
- //YY_CURRENT_BUFFER->yy_at_bol=TRUE;
- BEGIN(Search);
- }
- else
- {
- incLineNr();
- current->program+=yytext;
- }
- }
- \n{B}/"##" {
- if (computeIndent(&yytext[1])<=g_indent)
- {
- int i;
- for (i=yyleng-1;i>=0;i--)
- {
- unput(yytext[i]);
- }
- endOfDef();
- //YY_CURRENT_BUFFER->yy_at_bol=TRUE;
- BEGIN(Search);
- }
- else
- {
- incLineNr();
- current->program+=yytext;
- }
- }
- <<EOF>> {
- endOfDef();
- yyterminate();
- }
- ^{BB}/\n { // skip empty line
- current->program+=yytext;
- }
- ^{BB} { // something at indent >0
- current->program+=yytext;
- g_curIndent = computeIndent(yytext);
- if (g_curIndent<=g_indent)
- // jumped out of the function
- {
- endOfDef(1);
- BEGIN(Search);
- }
- }
- "'" { // start of a single quoted string
- current->program+=yytext;
- g_stringContext=YY_START;
- g_specialBlock = FALSE;
- g_copyString=&current->program;
- BEGIN( SingleQuoteString );
- }
- "\"" { // start of a double quoted string
- current->program+=yytext;
- g_stringContext=YY_START;
- g_specialBlock = FALSE;
- g_copyString=&current->program;
- BEGIN( DoubleQuoteString );
- }
- [^ \t\n#'".]+ { // non-special stuff
- current->program+=yytext;
- g_specialBlock = FALSE;
- }
- ^{POUNDCOMMENT} { // normal comment
- current->program+=yytext;
- }
- "#".* { // comment half way
- current->program+=yytext;
- }
- {NEWLINE} {
- incLineNr();
- current->program+=yytext;
- }
- . { // any character
- current->program+=*yytext;
- g_specialBlock = FALSE;
- }
-
- {TRIDOUBLEQUOTE} { // start of a comment block
- current->program+=yytext;
- initTriDoubleQuoteBlock();
- BEGIN(TripleComment);
- }
-
- {TRISINGLEQUOTE} { // start of a comment block
- current->program+=yytext;
- initTriSingleQuoteBlock();
- BEGIN(TripleComment);
- }
-
- {STARTDOCSYMS}/[^#] { // start of a special comment
- initSpecialBlock();
- BEGIN(SpecialComment);
- }
-
-}
-
-<FunctionDec>{
-
- {IDENTIFIER} {
- //found function name
- if (current->type.isEmpty())
- {
- current->type = "def";
- }
- current->name = yytext;
- current->name = current->name.stripWhiteSpace();
- newFunction();
- }
- {B}":" { // function without arguments
- g_specialBlock = TRUE; // expecting a docstring
- bodyEntry = current;
- current->bodyLine = yyLineNr;
- BEGIN( FunctionBody );
- }
-
- {B}"(" {
- BEGIN( FunctionParams );
- }
-}
-
-<FunctionParams>{
- ({BB}|",") {
- }
-
- {IDENTIFIER} { // Name of parameter
- lineCount();
- Argument *a = new Argument;
- current->argList->append(a);
- current->argList->getLast()->name = QCString(yytext).stripWhiteSpace();
- current->argList->getLast()->type = "";
- }
- "=" { // default value
- // TODO: this rule is too simple, need to be able to
- // match things like =")" as well!
- QCString defVal=&yytext[1];
- g_defVal.resize(0);
- g_braceCount=0;
- BEGIN(FunctionParamDefVal);
- }
-
- ")" { // end of parameter list
- }
-
- ":"{B} {
- g_specialBlock = TRUE; // expecting a docstring
- bodyEntry = current;
- current->bodyLine = yyLineNr;
- BEGIN( FunctionBody );
- }
- {POUNDCOMMENT} { // a comment
- }
- {PARAMNONEMPTY} { // Default rule inside arguments.
- }
-
-}
-
-<FunctionParamDefVal>{
- "(" { // internal opening brace
- g_braceCount++;
- g_defVal+=*yytext;
- }
- "," |
- ")" {
- if (g_braceCount==0) // end of default argument
- {
- if (current->argList->getLast())
- {
- current->argList->getLast()->defval=g_defVal.stripWhiteSpace();
- }
- BEGIN(FunctionParams);
- }
- else // continue
- {
- g_braceCount--;
- g_defVal+=*yytext;
- }
- }
- . {
- g_defVal+=*yytext;
- }
- \n {
- g_defVal+=*yytext;
- incLineNr();
- }
-}
-
-
-<ClassBody>{
- \n/{IDENTIFIER}{BB} { // new def at indent 0
- incLineNr();
- endOfDef();
- //g_hideClassDocs = FALSE;
- //YY_CURRENT_BUFFER->yy_at_bol=TRUE;
- BEGIN(Search);
- }
- \n/"##"[^#] { // start of a special comment at indent 0
- incLineNr();
- endOfDef();
- //g_hideClassDocs = FALSE;
- //YY_CURRENT_BUFFER->yy_at_bol=TRUE;
- BEGIN(Search);
- }
- ^{BB}/\n { // skip empty line
- current->program+=yytext;
- }
- <<EOF>> {
- endOfDef();
- yyterminate();
- }
- ^{BB} { // something at indent >0
- g_curIndent=computeIndent(yytext);
- //fprintf(stderr,"g_curIndent=%d g_indent=%d\n",g_curIndent,g_indent);
- if (g_curIndent<=g_indent)
- // jumped out of the class/method
- {
- endOfDef(1);
- g_indent=g_curIndent;
- // make sure the next rule matches ^...
- //YY_CURRENT_BUFFER->yy_at_bol=TRUE;
- //g_hideClassDocs = FALSE;
- BEGIN(Search);
- }
- else
- {
- current->program+=yytext;
- }
- }
- "'" { // start of a single quoted string
- current->program+=*yytext;
- g_stringContext=YY_START;
- g_specialBlock = FALSE;
- g_copyString=&current->program;
- BEGIN( SingleQuoteString );
- }
- "\"" { // start of a double quoted string
- current->program+=*yytext;
- g_stringContext=YY_START;
- g_specialBlock = FALSE;
- g_copyString=&current->program;
- BEGIN( DoubleQuoteString );
- }
- [^ \t\n#'"]+ { // non-special stuff
- current->program+=yytext;
- g_specialBlock = FALSE;
- //g_hideClassDocs = FALSE;
- }
- {NEWLINE} {
- current->program+=*yytext;
- incLineNr();
- }
- {POUNDCOMMENT} { // normal comment
- current->program+=yytext;
- }
- . { // any character
- g_specialBlock = FALSE;
- current->program+=*yytext;
- }
- {TRIDOUBLEQUOTE} { // start of a comment block
- //if (!g_hideClassDocs)
- current->program+=yytext;
- initTriDoubleQuoteBlock();
- BEGIN(TripleComment);
- }
-
- {TRISINGLEQUOTE} { // start of a comment block
- //if (!g_hideClassDocs)
- current->program+=yytext;
- initTriSingleQuoteBlock();
- BEGIN(TripleComment);
- }
-}
-
-<ClassDec>{IDENTIFIER} {
- if (current->type.isEmpty())
- {
- current->type = "class";
- }
-
- current->section = Entry::CLASS_SEC;
- current->name = yytext;
-
- // prepend scope in case of nested classes
- if (current_root->section&Entry::SCOPE_MASK)
- {
- //printf("*** Prepending scope %s to class %s\n",current_root->name.data(),current->name.data());
- current->name.prepend(current_root->name+"::");
- }
-
- current->name = current->name.stripWhiteSpace();
- current->fileName = yyFileName;
- docBlockContext = YY_START;
- docBlockInBody = FALSE;
- docBlockJavaStyle = FALSE;
- docBlock.resize(0);
-
- BEGIN(ClassInheritance);
- }
-
-<ClassInheritance>{
- ({BB}|[\(,\)]) { // syntactic sugar for the list
- }
-
- ":" { // begin of the class definition
- g_specialBlock = TRUE; // expecting a docstring
- current->bodyLine = yyLineNr;
- current->program.resize(0);
- BEGIN(ClassCaptureIndent);
- }
-
- {SCOPE} {
- current->extends->append(
- new BaseInfo(substitute(yytext,".","::"),Public,Normal)
- );
- //Has base class-do stuff
- }
-}
-
-
-<ClassCaptureIndent>{
- "\n"|({BB}"\n") {
- // Blankline - ignore, keep looking for indentation.
- lineCount();
- current->program+=yytext;
- }
-
- {TRIDOUBLEQUOTE} { // start of a comment block
- initTriDoubleQuoteBlock();
- current->program+=yytext;
- BEGIN(TripleComment);
- }
-
- {TRISINGLEQUOTE} { // start of a comment block
- initTriSingleQuoteBlock();
- current->program+=yytext;
- BEGIN(TripleComment);
- }
-
- ^{BB} {
- current->program+=yytext;
- //current->startLine = yyLineNr;
- g_curIndent=computeIndent(yytext);
- bodyEntry = current;
- //fprintf(stderr,"setting indent %d\n",g_curIndent);
- //printf("current->program=[%s]\n",current->program.data());
- //g_hideClassDocs = TRUE;
- BEGIN(ClassBody);
- }
-
- ""/({NONEMPTY}|{EXPCHAR}) {
-
- // Just pushback an empty class, and
- // resume parsing the body.
- newEntry();
- current->program+=yytext;
-
- // printf("Failed to find indent - skipping!");
- BEGIN( Search );
- }
-}
-
-
-<VariableDec>{
- "=" { // the assignment operator
- //printf("====== VariableDec at line %d\n",yyLineNr);
- }
- {B} { // spaces
- }
- {INTNUMBER} { // integer value
- current->type = "int";
- current->initializer = yytext;
- BEGIN(VariableEnd);
- }
- {FLOATNUMBER} { // floating point value
- current->type = "float";
- current->initializer = yytext;
- BEGIN(VariableEnd);
- }
- {STRINGPREFIX}?"'" { // string
- current->type = "string";
- current->initializer = yytext;
- g_copyString=&current->initializer;
- g_stringContext=VariableEnd;
- BEGIN( SingleQuoteString );
- }
- {STRINGPREFIX}?"\"" { // string
- current->type = "string";
- current->initializer = yytext;
- g_copyString=&current->initializer;
- g_stringContext=VariableEnd;
- BEGIN( DoubleQuoteString );
- }
- {TRIDOUBLEQUOTE} { // start of a comment block
- current->type = "string";
- current->initializer = yytext;
- g_doubleQuote=TRUE;
- g_copyString=&current->initializer;
- g_stringContext=VariableEnd;
- BEGIN(TripleString);
- }
-
- {TRISINGLEQUOTE} { // start of a comment block
- current->type = "string";
- current->initializer = yytext;
- g_doubleQuote=FALSE;
- g_copyString=&current->initializer;
- g_stringContext=VariableEnd;
- BEGIN(TripleString);
- }
- "(" { // tuple
- if (current->mtype!=Property)
- {
- current->type = "tuple";
- }
- current->initializer+=*yytext;
- g_atomStart='(';
- g_atomEnd=')';
- g_atomCount=1;
- BEGIN( VariableAtom );
- }
- "[" { // list
- current->type = "list";
- current->initializer+=*yytext;
- g_atomStart='[';
- g_atomEnd=']';
- g_atomCount=1;
- BEGIN( VariableAtom );
- }
- "{" { // dictionary
- current->type = "dictionary";
- current->initializer+=*yytext;
- g_atomStart='{';
- g_atomEnd='}';
- g_atomCount=1;
- BEGIN( VariableAtom );
- }
- "#".* { // comment
- BEGIN( VariableEnd );
- }
- {IDENTIFIER} {
- current->initializer+=yytext;
- }
- . {
- current->initializer+=*yytext;
- }
- \n {
- unput('\n');
- BEGIN( VariableEnd );
- }
-}
-
-<VariableAtom>{
- [\(\[\{] {
- current->initializer+=*yytext;
- if (g_atomStart==*yytext)
- {
- g_atomCount++;
- }
- }
- [\)\]\}] {
- current->initializer+=*yytext;
- if (g_atomEnd==*yytext)
- {
- g_atomCount--;
- }
- if (g_atomCount==0)
- {
- BEGIN(VariableEnd);
- }
- }
- "\"" {
- g_stringContext=YY_START;
- current->initializer+="\"";
- g_copyString=&current->initializer;
- BEGIN( DoubleQuoteString );
- }
- {IDENTIFIER} {
- current->initializer+=yytext;
- }
- . {
- current->initializer+=*yytext;
- }
- \n {
- current->initializer+=*yytext;
- incLineNr();
- }
-
-}
-
-<VariableEnd>{
- \n {
- incLineNr();
- newVariable();
- BEGIN(Search);
- }
- . {
- unput(*yytext);
- newVariable();
- BEGIN(Search);
- }
- <<EOF>> { yyterminate();
- newEntry();
- }
-}
-
-<TripleComment>{
- {TRIDOUBLEQUOTE} |
- {TRISINGLEQUOTE} {
- // printf("Expected module block %d special=%d\n",g_expectModuleDocs,g_specialBlock);
- if (g_doubleQuote==(yytext[0]=='"'))
- {
- if (g_specialBlock) // expecting a docstring
- {
- QCString actualDoc=docBlock;
- if (!docBlockSpecial) // legacy unformatted docstring
- {
- actualDoc.prepend("\\verbatim ");
- actualDoc.append("\\endverbatim ");
- }
- //printf("-------> current=%p bodyEntry=%p\n",current,bodyEntry);
- handleCommentBlock(actualDoc, FALSE);
- }
- else if (g_packageCommentAllowed) // expecting module docs
- {
- QCString actualDoc=docBlock;
- if (!docBlockSpecial) // legacy unformatted docstring
- {
- actualDoc.prepend("\\verbatim ");
- actualDoc.append("\\endverbatim ");
- }
- actualDoc.prepend("\\namespace "+g_moduleScope+"\\_linebr ");
- handleCommentBlock(actualDoc, FALSE);
- }
- if ((docBlockContext==ClassBody /*&& !g_hideClassDocs*/) ||
- docBlockContext==FunctionBody)
- {
- current->program+=docBlock;
- current->program+=yytext;
- }
- //if (g_hideClassDocs)
- //{
- // current->startLine = yyLineNr;
- //}
- //g_hideClassDocs=FALSE;
- BEGIN(docBlockContext);
- }
- else
- {
- docBlock += yytext;
- }
- g_packageCommentAllowed = FALSE;
- }
-
-
- ^{BB} { // leading whitespace
- int indent = computeIndent(yytext);
- if (indent>=g_curIndent)
- { // strip g_curIndent amount of whitespace
- int i;
- for (i=0;i<indent-g_curIndent;i++) docBlock+=' ';
- //fprintf(stderr,"stripping indent %d\n",g_curIndent);
- }
- else
- {
- //fprintf(stderr,"not stripping: %d<%d\n",indent,g_curIndent);
- docBlock += yytext;
- }
- }
- [^"'\n \t]+ {
- docBlock += yytext;
- }
- \n {
- incLineNr();
- docBlock += yytext;
- }
- . {
- docBlock += yytext;
- }
-}
-
-<SpecialComment>{
- ^{B}"#"("#")* { // skip leading hashes
- }
- \n/{B}"#" { // continuation of the comment on the next line
- docBlock+='\n';
- docBrief = FALSE;
- startCommentBlock(FALSE);
- incLineNr();
- }
- [^#\n]+ { // any other stuff
- docBlock+=yytext;
- }
- \n { // new line that ends the comment
- handleCommentBlock(docBlock, docBrief);
- incLineNr();
- BEGIN(docBlockContext);
- }
- . { // anything we missed
- docBlock+=*yytext;
- }
-}
-
-<SingleQuoteString>{
- \\{B}\n { // line continuation
- addToString(yytext);
- incLineNr();
- }
- \\. { // espaced char
- addToString(yytext);
- }
- "\"\"\"" { // tripple double quotes
- addToString(yytext);
- }
- "'" { // end of the string
- addToString(yytext);
- BEGIN(g_stringContext);
- }
- [^"'\n\\]+ { // normal chars
- addToString(yytext);
- }
- . { // normal char
- addToString(yytext);
- }
-}
-
-<DoubleQuoteString>{
- \\{B}\n { // line continuation
- addToString(yytext);
- incLineNr();
- }
- \\. { // espaced char
- addToString(yytext);
- }
- "'''" { // tripple single quotes
- addToString(yytext);
- }
- "\"" { // end of the string
- addToString(yytext);
- BEGIN(g_stringContext);
- }
- [^"'\n\\]+ { // normal chars
- addToString(yytext);
- }
- . { // normal char
- addToString(yytext);
- }
-}
-
-<TripleString>{
- {TRIDOUBLEQUOTE} |
- {TRISINGLEQUOTE} {
- *g_copyString += yytext;
- if (g_doubleQuote==(yytext[0]=='"'))
- {
- BEGIN(g_stringContext);
- }
- }
-
-
- ({LONGSTRINGBLOCK}) {
- lineCount();
- *g_copyString += yytext;
- }
- \n {
- incLineNr();
- *g_copyString += yytext;
- }
- . {
- *g_copyString += *yytext;
- }
-}
-
- /* ------------ End rules -------------- */
-
- /*
-<*>({NONEMPTY}|{EXPCHAR}|{BB}) { // This should go one character at a time.
- // printf("[pyscanner] '%s' [ state %d ] [line %d] no match\n",
- // yytext, YY_START, yyLineNr);
-
- }
- */
-
-<*>{NEWLINE} {
- //printf("[pyscanner] %d NEWLINE [line %d] no match\n",
- // YY_START, yyLineNr);
-
- lineCount();
- }
-
-<*>. {
- //printf("[pyscanner] '%s' [ state %d ] [line %d] no match\n",
- // yytext, YY_START, yyLineNr);
-
- }
-
-
-%%
-
-//----------------------------------------------------------------------------
-
-static void parseCompounds(Entry *rt)
-{
- //printf("parseCompounds(%s)\n",rt->name.data());
- EntryListIterator eli(*rt->children());
- Entry *ce;
- for (;(ce=eli.current());++eli)
- {
- if (!ce->program.isEmpty())
- {
- //printf("-- %s ---------\n%s\n---------------\n",
- // ce->name.data(),ce->program.data());
- // init scanner state
- inputString = ce->program;
- inputPosition = 0;
- pyscanYYrestart( pyscanYYin ) ;
- if (ce->section&Entry::COMPOUND_MASK)
- {
- current_root = ce ;
- BEGIN( Search );
- }
- else if (ce->parent())
- {
- current_root = ce->parent();
- //printf("Searching for member variables in %s parent=%s\n",
- // ce->name.data(),ce->parent->name.data());
- BEGIN( SearchMemVars );
- }
- yyFileName = ce->fileName;
- yyLineNr = ce->bodyLine ;
- if (current) delete current;
- current = new Entry;
- initEntry();
-
- groupEnterCompound(yyFileName,yyLineNr,ce->name);
-
- pyscanYYlex() ;
- g_lexInit=TRUE;
- delete current; current=0;
- ce->program.resize(0);
-
- groupLeaveCompound(yyFileName,yyLineNr,ce->name);
-
- }
- parseCompounds(ce);
- }
-}
-
-//----------------------------------------------------------------------------
-
-
-static void parseMain(const char *fileName,const char *fileBuf,Entry *rt)
-{
- initParser();
-
- inputString = fileBuf;
- inputPosition = 0;
-
- protection = Public;
- mtype = Method;
- gstat = FALSE;
- virt = Normal;
- current_root = rt;
- g_specialBlock = FALSE;
-
-
- inputFile.setName(fileName);
- if (inputFile.open(IO_ReadOnly))
- {
- yyLineNr= 1 ;
- yyFileName = fileName;
- //setContext();
- msg("Parsing file %s...\n",yyFileName.data());
-
- QFileInfo fi(fileName);
- g_moduleScope = findPackageScope(fileName);
- QString baseName=fi.baseName();
- if (baseName!="__init__") // package initializer file is not a package itself
- {
- if (!g_moduleScope.isEmpty())
- {
- g_moduleScope+="::";
- }
- g_moduleScope+=baseName;
- }
-
- current = new Entry;
- initEntry();
- current->name = g_moduleScope;
- current->section = Entry::NAMESPACE_SEC;
- current->type = "namespace";
- current->fileName = yyFileName;
- current->startLine = yyLineNr;
- current->bodyLine = yyLineNr;
-
- rt->addSubEntry(current);
-
- current_root = current ;
- initParser();
- current = new Entry;
-
- groupEnterFile(yyFileName,yyLineNr);
-
- current->reset();
- initEntry();
- pyscanYYrestart( pyscanYYin );
- BEGIN( Search );
- pyscanYYlex();
- g_lexInit=TRUE;
-
- groupLeaveFile(yyFileName,yyLineNr);
-
- current_root->program.resize(0);
- delete current; current=0;
-
- parseCompounds(current_root);
-
- inputFile.close();
- }
-
-}
-
-//----------------------------------------------------------------------------
-
-static void parsePrototype(const QCString &text)
-{
- //printf("**** parsePrototype(%s) begin\n",text.data());
- if (text.isEmpty())
- {
- warn(yyFileName,yyLineNr,"Empty prototype found!");
- return;
- }
-
- g_specialBlock = FALSE;
- g_packageCommentAllowed = FALSE;
-
- const char *orgInputString;
- int orgInputPosition;
- YY_BUFFER_STATE orgState;
-
- // save scanner state
- orgState = YY_CURRENT_BUFFER;
- yy_switch_to_buffer(yy_create_buffer(pyscanYYin, YY_BUF_SIZE));
- orgInputString = inputString;
- orgInputPosition = inputPosition;
-
- // set new string
- inputString = text;
- inputPosition = 0;
- pyscanYYrestart( pyscanYYin );
-
- BEGIN( FunctionDec );
-
- pyscanYYlex();
- g_lexInit=TRUE;
-
- current->name = current->name.stripWhiteSpace();
- if (current->section == Entry::MEMBERDOC_SEC && current->args.isEmpty())
- current->section = Entry::VARIABLEDOC_SEC;
-
- // restore original scanner state
-
- YY_BUFFER_STATE tmpBuf = YY_CURRENT_BUFFER;
- yy_switch_to_buffer(orgState);
- yy_delete_buffer(tmpBuf);
-
- inputString = orgInputString;
- inputPosition = orgInputPosition;
-
- //printf("**** parsePrototype end\n");
-}
-
-void pyscanFreeScanner()
-{
-#if defined(YY_FLEX_SUBMINOR_VERSION)
- if (g_lexInit)
- {
- pyscanYYlex_destroy();
- }
-#endif
-}
-
-//----------------------------------------------------------------------------
-
-void PythonLanguageScanner::parseInput(const char *fileName,const char *fileBuf,Entry *root)
-{
- g_thisParser = this;
- ::parseMain(fileName,fileBuf,root);
-
- // May print the AST for debugging purposes
- // printAST(global_root);
-}
-
-bool PythonLanguageScanner::needsPreprocessing(const QCString &)
-{
- return FALSE;
-}
-
-void PythonLanguageScanner::parseCode(CodeOutputInterface &codeOutIntf,
- const char *scopeName,
- const QCString &input,
- bool isExampleBlock,
- const char *exampleName,
- FileDef *fileDef,
- int startLine,
- int endLine,
- bool inlineFragment,
- MemberDef *memberDef,
- bool showLineNumbers
- )
-{
- ::parsePythonCode(codeOutIntf,scopeName,input,isExampleBlock,exampleName,
- fileDef,startLine,endLine,inlineFragment,memberDef,
- showLineNumbers);
-}
-
-void PythonLanguageScanner::parsePrototype(const char *text)
-{
- ::parsePrototype(text);
-
-}
-
-void PythonLanguageScanner::resetCodeParserState()
-{
- ::resetPythonCodeParserState();
-}
-
-//----------------------------------------------------------------------------
-
-#if !defined(YY_FLEX_SUBMINOR_VERSION)
-//----------------------------------------------------------------------------
-extern "C" { // some bogus code to keep the compiler happy
- void pyscannerYYdummy() { yy_flex_realloc(0,0); }
-}
-#endif
-
diff --git a/trunk/src/qhp.cpp b/trunk/src/qhp.cpp
deleted file mode 100644
index bba308a..0000000
--- a/trunk/src/qhp.cpp
+++ /dev/null
@@ -1,340 +0,0 @@
-/*
- * Copyright (C) 2008 by Sebastian Pipping.
- * Copyright (C) 2008 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.
- *
- * Sebastian Pipping <sebastian@pipping.org>
- */
-
-#include "qhp.h"
-#include "qhpxmlwriter.h"
-#include "message.h"
-#include "config.h"
-#include "memberdef.h"
-#include "groupdef.h"
-#include "filedef.h"
-
-#include <qstringlist.h>
-#include <string.h>
-
-static QCString makeFileName(const char * withoutExtension)
-{
- if (!withoutExtension) return QCString();
- return QCString(withoutExtension)+".html";
-}
-
-static QCString makeRef(const char * withoutExtension, const char * anchor)
-{
- //printf("QHP::makeRef(%s,%s)\n",withoutExtension,anchor);
- if (!withoutExtension) return QCString();
- QCString result = makeFileName(withoutExtension);
- if (!anchor) return result;
- return result+"#"+anchor;
-}
-
-Qhp::Qhp() : m_prevSectionLevel(0), m_sectionLevel(0)
-{
- m_doc.setIndentLevel(0);
- m_toc.setIndentLevel(2);
- m_index.setIndentLevel(2);
- m_files.setIndentLevel(2);
-}
-
-Qhp::~Qhp()
-{
- clearPrevSection();
-}
-
-void Qhp::initialize()
-{
- /*
- <QtHelpProject version="1.0">
- <namespace>mycompany.com.myapplication.1_0</namespace>
- <virtualFolder>doc</virtualFolder>
- <customFilter name="My Application 1.0">
- <filterAttribute>myapp</filterAttribute>
- <filterAttribute>1.0</filterAttribute>
- </customFilter>
- <filterSection>
- <filterAttribute>myapp</filterAttribute>
- <filterAttribute>1.0</filterAttribute>
- ..
- */
- QCString nameSpace = Config_getString("QHP_NAMESPACE");
- QCString virtualFolder = Config_getString("QHP_VIRTUAL_FOLDER");
-
- const char * rootAttributes[] =
- { "version", "1.0", 0 };
-
- m_doc.open("QtHelpProject", rootAttributes);
- m_doc.openCloseContent("namespace", nameSpace);
- m_doc.openCloseContent("virtualFolder", virtualFolder);
-
- // Add custom filter
- QCString filterName = Config_getString("QHP_CUST_FILTER_NAME");
- if (!filterName.isEmpty())
- {
- const char * tagAttributes[] =
- { "name", filterName, 0 };
- m_doc.open("customFilter", tagAttributes);
-
- QStringList customFilterAttributes = QStringList::split(QChar(' '), Config_getString("QHP_CUST_FILTER_ATTRS"));
- for (int i = 0; i < (int)customFilterAttributes.count(); i++)
- {
- m_doc.openCloseContent("filterAttribute", customFilterAttributes[i]);
- }
- m_doc.close("customFilter");
- }
-
- m_doc.open("filterSection");
-
- // Add section attributes
- QStringList sectionFilterAttributes = QStringList::split(QChar(' '),
- Config_getString("QHP_SECT_FILTER_ATTRS"));
- if (!sectionFilterAttributes.contains(QString("doxygen")))
- {
- sectionFilterAttributes << "doxygen";
- }
- for (int i = 0; i < (int)sectionFilterAttributes.count(); i++)
- {
- m_doc.openCloseContent("filterAttribute", sectionFilterAttributes[i]);
- }
-
- m_toc.open("toc");
-
- // Add extra root node
- QCString fullProjectname = getFullProjectName();
- const char * const attributes[] =
- { "title", fullProjectname,
- "ref", "index.html",
- NULL
- };
- m_toc.open("section", attributes);
- m_prevSectionLevel = 1;
- m_sectionLevel = 1;
-
- m_index.open("keywords");
- m_files.open("files");
-}
-
-void Qhp::finalize()
-{
- // Finish TOC
- handlePrevSection();
- for (int i = m_prevSectionLevel; i > 0; i--)
- {
- m_toc.close("section");
- }
- m_toc.close("toc");
- m_doc.insert(m_toc);
-
- // Finish index
- m_index.close("keywords");
- m_doc.insert(m_index);
-
- // Finish files
- m_files.close("files");
- m_doc.insert(m_files);
-
- m_doc.close("filterSection");
- m_doc.close("QtHelpProject");
-
- QCString fileName = Config_getString("HTML_OUTPUT") + "/" + getQhpFileName();
- QFile file(fileName);
- if (!file.open(IO_WriteOnly))
- {
- err("Could not open file %s for writing\n", fileName.data());
- exit(1);
- }
- m_doc.dumpTo(file);
-}
-
-void Qhp::incContentsDepth()
-{
- m_sectionLevel++;
-}
-
-void Qhp::decContentsDepth()
-{
- if (m_sectionLevel <= 0)
- {
- return;
- }
- m_sectionLevel--;
-}
-
-void Qhp::addContentsItem(bool /*isDir*/, const char * name,
- const char * /*ref*/, const char * file,
- const char * /*anchor*/,bool /* separateIndex */,
- bool /* addToNavIndex */)
-{
- // Backup difference before modification
- int diff = m_prevSectionLevel - m_sectionLevel;
-
- handlePrevSection();
- setPrevSection(name, file, m_sectionLevel);
-
- // Close sections as needed
- for (; diff > 0; diff--)
- {
- m_toc.close("section");
- }
-}
-
-void Qhp::addIndexItem(Definition *context,MemberDef *md,
- const char *word)
-{
- (void)word;
- //printf("addIndexItem(%s %s %s\n",
- // context?context->name().data():"<none>",
- // md?md->name().data():"<none>",
- // word);
-
- if (md) // member
- {
- static bool separateMemberPages = Config_getBool("SEPARATE_MEMBER_PAGES");
- if (context==0) // global member
- {
- if (md->getGroupDef())
- context = md->getGroupDef();
- else if (md->getFileDef())
- context = md->getFileDef();
- }
- if (context==0) return; // should not happen
- QCString cfname = md->getOutputFileBase();
- QCString cfiname = context->getOutputFileBase();
- QCString level1 = context->name();
- QCString level2 = word ? QCString(word) : md->name();
- QCString contRef = separateMemberPages ? cfname : cfiname;
- QCString anchor = md->anchor();
-
- QCString ref;
-
- // <keyword name="foo" id="MyApplication::foo" ref="doc.html#foo"/>
- ref = makeRef(contRef, anchor);
- QCString id = level1+"::"+level2;
- const char * attributes[] =
- {
- "name", level2,
- "id", id,
- "ref", ref,
- 0
- };
- m_index.openClose("keyword", attributes);
- }
- else if (context) // container
- {
- // <keyword name="Foo" id="Foo" ref="doc.html"/>
- QCString contRef = context->getOutputFileBase();
- QCString level1 = word ? QCString(word) : context->name();
- QCString ref = makeFileName(contRef);
- const char * attributes[] =
- {
- "name", level1,
- "id", level1,
- "ref", ref,
- 0
- };
- m_index.openClose("keyword", attributes);
- }
-}
-
-void Qhp::addIndexFile(const char * name)
-{
- addFile(name);
-}
-
-QCString Qhp::getQhpFileName()
-{
- return "index.qhp";
-}
-
-QCString Qhp::getFullProjectName()
-{
- QCString projectName = Config_getString("PROJECT_NAME");
- QCString versionText = Config_getString("PROJECT_NUMBER");
- if (projectName.isEmpty()) projectName="Root";
- return projectName + (versionText.isEmpty()
- ? QCString("")
- : QCString(" ") + versionText);
-}
-
-void Qhp::handlePrevSection()
-{
- /*
- <toc>
- <section title="My Application Manual" ref="index.html">
- <section title="Chapter 1" ref="doc.html#chapter1"/>
- <section title="Chapter 2" ref="doc.html#chapter2"/>
- <section title="Chapter 3" ref="doc.html#chapter3"/>
- </section>
- </toc>
- */
-
- if (m_prevSectionTitle.isNull())
- {
- return;
- }
-
- // We skip "Main Page" as our extra root is pointing to that
- if (!((m_prevSectionLevel==1) && (m_prevSectionTitle=="Main Page")))
- {
- QCString finalRef = makeFileName(m_prevSectionRef);
-
- const char * const attributes[] =
- { "title", m_prevSectionTitle,
- "ref", finalRef,
- NULL
- };
-
- if (m_prevSectionLevel < m_sectionLevel)
- {
- // Section with children
- m_toc.open("section", attributes);
- }
- else
- {
- // Section without children
- m_toc.openClose("section", attributes);
- }
- }
-
- clearPrevSection();
-}
-
-void Qhp::setPrevSection(const char * title, const char * ref, int level)
-{
- m_prevSectionTitle = title;
- m_prevSectionRef = ref;
- m_prevSectionLevel = level;
-}
-
-void Qhp::clearPrevSection()
-{
- m_prevSectionTitle.resize(0);
- m_prevSectionRef.resize(0);
-}
-
-void Qhp::addFile(const char * fileName)
-{
- m_files.openCloseContent("file", fileName);
-}
-
-void Qhp::addImageFile(const char *fileName)
-{
- addFile(fileName);
-}
-
-void Qhp::addStyleSheetFile(const char *fileName)
-{
- addFile(fileName);
-}
-
diff --git a/trunk/src/qhp.h b/trunk/src/qhp.h
deleted file mode 100644
index 8185803..0000000
--- a/trunk/src/qhp.h
+++ /dev/null
@@ -1,69 +0,0 @@
-/*
- * Copyright (C) 2008 by Sebastian Pipping.
- * Copyright (C) 2008 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.
- *
- * Sebastian Pipping <sebastian@pipping.org>
- */
-
-#ifndef DOXYGEN_QHP_H
-#define DOXYGEN_QHP_H
-
-#include "index.h"
-#include "qhpxmlwriter.h"
-
-class Qhp : public IndexIntf
-{
- public:
- Qhp();
- ~Qhp();
-
- // BEGIN IndexIntf
- void initialize();
- void finalize();
- void incContentsDepth();
- void decContentsDepth();
- void addContentsItem(bool isDir, const char * name, const char * ref,
- const char * file, const char * anchor,
- bool separateIndex,bool addToNavIndex);
- void addIndexItem(Definition *context,MemberDef *md,const char *title);
- void addIndexFile(const char * name);
- void addImageFile(const char * name);
- void addStyleSheetFile(const char * name);
- // END IndexIntf
-
- static QCString getQhpFileName();
-
- private:
- void handlePrevSection();
- void clearPrevSection();
- void setPrevSection(const char * title, const char * ref, int level);
- void addFile(const char * fileName);
-
- static QCString getFullProjectName();
-
- QhpXmlWriter m_doc;
- QhpXmlWriter m_toc;
- QhpXmlWriter m_index;
- QhpXmlWriter m_files;
-
- QCString m_prevSectionTitle;
- QCString m_prevSectionRef;
-
- int m_prevSectionLevel;
- int m_sectionLevel;
-
- //QCString m_prevIdName;
- //QCString m_prevIdRef;
-};
-
-#endif // DOXYGEN_QHP_H
-
diff --git a/trunk/src/qhpxmlwriter.cpp b/trunk/src/qhpxmlwriter.cpp
deleted file mode 100644
index 93bb8cd..0000000
--- a/trunk/src/qhpxmlwriter.cpp
+++ /dev/null
@@ -1,151 +0,0 @@
-/*
- * Copyright (C) 2008 by Sebastian Pipping.
- * Copyright (C) 2008 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.
- *
- * Sebastian Pipping <sebastian@pipping.org>
- */
-
-#include "qhpxmlwriter.h"
-#include "util.h"
-
-#include <qfile.h>
-
-QhpXmlWriter::QhpXmlWriter()
- : m_out(&m_backend), m_indentLevel(0),
- m_curLineIndented(false), m_compress(false)
-{
-}
-
-QhpXmlWriter::~QhpXmlWriter()
-{
-}
-
-void QhpXmlWriter::setIndentLevel(int level)
-{
- m_indentLevel = level;
-}
-
-void QhpXmlWriter::setCompressionEnabled(bool enabled)
-{
- m_compress = enabled;
-}
-
-void QhpXmlWriter::insert(QhpXmlWriter const & source)
-{
- m_out << source.m_backend.data();
-}
-
-void QhpXmlWriter::dumpTo(QFile & file)
-{
- file.writeBlock(m_backend.data(), m_backend.length());
-}
-
-void QhpXmlWriter::open(char const * elementName,
- char const * const * attributes)
-{
- indent();
- openPure(elementName, attributes);
- newLine();
- m_indentLevel++;
-}
-
-void QhpXmlWriter::openClose(char const * elementName,
- char const * const * attributes)
-{
- indent();
- openClosePure(elementName, attributes);
- newLine();
-}
-
-void QhpXmlWriter::openCloseContent(char const * elementName,
- char const * content)
-{
- indent();
- openPure(elementName);
- m_out << convertToXML(content);
- closePure(elementName);
- newLine();
-}
-
-void QhpXmlWriter::close(char const * elementName)
-{
- m_indentLevel--;
- indent();
- closePure(elementName);
- newLine();
-}
-
-void QhpXmlWriter::indent()
-{
- if (m_curLineIndented)
- {
- return;
- }
- for (int i = 0; i < m_indentLevel; i++)
- {
- m_out << " ";
- }
- m_curLineIndented = true;
-}
-
-void QhpXmlWriter::newLine()
-{
- if (!m_compress)
- {
- m_out << "\n";
- m_curLineIndented = false;
- }
-}
-
-void QhpXmlWriter::openPureHelper(char const * elementName,
- char const * const * attributes, bool close)
-{
- m_out << "<" << elementName;
- if (attributes)
- {
- for (char const * const * walker = attributes;
- walker[0]; walker += 2)
- {
- char const * const key = walker[0];
- char const * const value = walker[1];
- if (!value)
- {
- continue;
- }
- m_out << " " << key << "=\"" << convertToXML(value) << "\"";
- }
- }
-
- if (close)
- {
- m_out << " /";
- }
- m_out << ">";
-}
-
-void QhpXmlWriter::openPure(char const * elementName,
- char const * const * attributes)
-{
- openPureHelper(elementName, attributes, false);
-}
-
-void QhpXmlWriter::openClosePure(char const * elementName,
- char const * const * attributes)
-{
- openPureHelper(elementName, attributes, true);
-}
-
-void QhpXmlWriter::closePure(char const * elementName)
-{
- m_out << "</" << elementName << ">";
-}
-
diff --git a/trunk/src/qhpxmlwriter.h b/trunk/src/qhpxmlwriter.h
deleted file mode 100644
index c88eebd..0000000
--- a/trunk/src/qhpxmlwriter.h
+++ /dev/null
@@ -1,63 +0,0 @@
-/*
- * Copyright (C) 2008 by Sebastian Pipping.
- * Copyright (C) 2008 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.
- *
- * Sebastian Pipping <sebastian@pipping.org>
- */
-
-#ifndef QHPXMLWRITER_H
-#define QHPXMLWRITER_H
-
-#include <qstring.h>
-#include "ftextstream.h"
-
-class QFile;
-
-class QhpXmlWriter
-{
- public:
- QhpXmlWriter();
- ~QhpXmlWriter();
-
- void setIndentLevel(int level);
- void setCompressionEnabled(bool enabled);
- void insert(QhpXmlWriter const & source);
- void dumpTo(QFile & file);
- void open(char const * elementName,
- char const * const * attributes = 0);
- void openClose(char const * elementName,
- char const * const * attributes = 0);
- void openCloseContent(char const * elementName, char const * content);
- void close(char const * elementName);
-
- static char * dupEscaped(const char * source);
-
- private:
- void indent();
- void newLine();
- void openPureHelper(char const * elementName,
- char const * const * attributes, bool close);
- void openPure(char const * elementName,
- char const * const * attributes = 0);
- void openClosePure(char const * elementName,
- char const * const * attributes = 0);
- void closePure(char const * elementName);
-
- QGString m_backend;
- FTextStream m_out;
- int m_indentLevel;
- bool m_curLineIndented;
- bool m_compress;
-
-};
-
-#endif // QHPXMLWRITER_H
diff --git a/trunk/src/qtbc.h b/trunk/src/qtbc.h
deleted file mode 100644
index 5c3ceef..0000000
--- a/trunk/src/qtbc.h
+++ /dev/null
@@ -1,45 +0,0 @@
-/******************************************************************************
- *
- *
- *
- * Copyright (C) 1997-2012 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.
- *
- */
-
-#ifndef QTBC_H
-#define QTBC_H
-
-/*! This file contains some hacks to make Doxygen work with
- * Qt version 2.00 and Qt version 1.xx
- */
-
-#include <qglobal.h>
-
-#if QT_VERSION >= 200
-
-#include <locale.h>
-
-#define GCI QCollection::Item
-
-#include <qcstring.h>
-#include <qstring.h>
-inline QCString convertToQCString(const QString &s) { return s.utf8(); }
-
-#else /* QT_VERSION < 200 */
-
-#include <qstring.h>
-#define QCString QString
-inline QCString convertToQCString(const QCString &s) { return s; }
-
-#endif
-
-#endif
diff --git a/trunk/src/reflist.cpp b/trunk/src/reflist.cpp
deleted file mode 100644
index 8f103d7..0000000
--- a/trunk/src/reflist.cpp
+++ /dev/null
@@ -1,171 +0,0 @@
-/******************************************************************************
- *
- *
- *
- *
- * Copyright (C) 1997-2012 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.
- *
- */
-
-#include <stdio.h>
-#include "reflist.h"
-#include "util.h"
-#include "ftextstream.h"
-
-/*! Create a list of items that are cross referenced with documentation blocks
- * @param listName String representing the name of the list.
- * @param pageTitle String representing the title of the list page.
- * @param secTitle String representing the title of the section.
- */
-RefList::RefList(const char *listName,
- const char *pageTitle,
- const char *secTitle
- )
-{
- m_itemList = 0;
- m_dict = 0;
- m_dictIterator = 0;
- m_id = 0;
- m_listName = listName;
- m_pageTitle = pageTitle;
- m_secTitle = secTitle;
-}
-
-/*! Destroy the todo list. Currently not called! */
-RefList::~RefList()
-{
- delete m_dictIterator;
- delete m_dict;
- delete m_itemList;
-}
-
-/*! Adds a new item to the list.
- * \returns A unique id for this item.
- */
-int RefList::addRefItem()
-{
- if (m_dict==0)
- {
- m_dict = new QIntDict<RefItem>(1009);
- m_dict->setAutoDelete(TRUE);
- m_dictIterator = new QIntDictIterator<RefItem>(*m_dict);
- }
- RefItem *item = new RefItem;
- m_id++;
- m_dict->insert(m_id,item);
- return m_id;
-}
-
-/*! Returns an item given it's id that is obtained with addRefItem()
- * \param itemId item's identifier.
- * \returns A pointer to the todo item's structure.
- */
-RefItem *RefList::getRefItem(int itemId)
-{
- return m_dict ? m_dict->find(itemId) : 0;
-}
-
-/*! Returns the first item in the dictionary or 0 if
- * non is available.
- * Items are not sorted.
- */
-RefItem *RefList::getFirstRefItem()
-{
- return m_dictIterator ? m_dictIterator->toFirst() : 0;
-}
-
-/*! Returns the next item in the dictionary or 0 if
- * we are at the end of the list.
- * Items are not sorted.
- */
-RefItem *RefList::getNextRefItem()
-{
- return m_dictIterator ? m_dictIterator->operator++() : 0;
-}
-
-/*! Returns the name of the list as set in the constructor. */
-QCString RefList::listName() const
-{
- return m_listName;
-}
-
-QCString RefList::pageTitle() const
-{
- return m_pageTitle;
-}
-
-QCString RefList::sectionTitle() const
-{
- return m_secTitle;
-}
-
-void RefList::insertIntoList(const char *key,RefItem *item)
-{
- if (m_itemList==0)
- {
- m_itemList = new SortedRefItems(1009);
- }
- RefItem *ri = m_itemList->find(key);
- if (ri==0)
- {
- m_itemList->append(key,item);
- }
- else // item already added to the list (i.e. multiple item for the same
- // entity)
- {
- if (ri!=item)
- {
- ri->extraItems.append(item);
- }
- }
-}
-
-
-void RefList::generatePage()
-{
- if (m_itemList==0) return;
- m_itemList->sort();
- SDict<RefItem>::Iterator it(*m_itemList);
- RefItem *item;
- QCString doc;
- doc += "<dl class=\"reflist\">";
- for (it.toFirst();(item=it.current());++it)
- {
- doc += " <dt>";
- doc += "\\anchor ";
- doc += item->listAnchor;
- doc += "\n";
- doc += item->prefix;
- doc += " \\_internalref ";
- doc += item->name;
- doc += " \"";
- doc += item->title;
- doc += "\" ";
- // write declaration in case a function with arguments
- if (!item->args.isEmpty())
- {
- doc += item->args;
- }
- doc += "</dt><dd> ";
- doc += item->text;
- QListIterator<RefItem> li(item->extraItems);
- RefItem *extraItem;
- for (li.toFirst();(extraItem=li.current());++li)
- {
- doc += "<p>" + extraItem->text;
- }
- doc += "</dd>";
- }
- doc += "</dl>\n";
- addRelatedPage(m_listName,m_pageTitle,doc,0,m_listName,1,0,0,0);
-}
-
diff --git a/trunk/src/reflist.h b/trunk/src/reflist.h
deleted file mode 100644
index 90c95c8..0000000
--- a/trunk/src/reflist.h
+++ /dev/null
@@ -1,94 +0,0 @@
-/******************************************************************************
- *
- *
- *
- *
- * Copyright (C) 1997-2012 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.
- *
- */
-
-#ifndef _REFLIST_H
-#define _REFLIST_H
-
-#include "qtbc.h"
-#include <qintdict.h>
-#include <qlist.h>
-#include "sortdict.h"
-
-/*! This struct represents an item in the list of references. */
-struct RefItem
-{
- RefItem() /*: written(FALSE)*/ {}
- QCString text; //!< text of the item.
- QCString listAnchor; //!< anchor in the list
-
- QCString prefix; //!< type prefix for the name
- QCString name; //!< name of the entity containing the reference
- QCString title; //!< display name of the entity
- QCString args; //!< optional arguments for the entity (if function)
- //bool written;
- QList<RefItem> extraItems; //!< more items belonging to the same entity
-};
-
-/*! List of items sorted by title */
-class SortedRefItems : public SDict<RefItem>
-{
- public:
- SortedRefItems(int size=17) : SDict<RefItem>(size) {}
- virtual ~SortedRefItems() {}
- int compareItems(GCI item1,GCI item2)
- {
- RefItem *r1 = (RefItem*)item1;
- RefItem *r2 = (RefItem*)item2;
- return stricmp(r1->title,r2->title);
- }
-};
-
-/*! @brief List of cross-referenced items
- *
- * This class represents a list of items that are put
- * at a certain point in the documentation by some special command
- * and are collected in a list. The items cross-reference the
- * documentation and the list.
- *
- * Examples are the todo list, the test list and the bug list,
- * introduced by the \\todo, \\test, and \\bug commands respectively.
- */
-class RefList
-{
- public:
- int addRefItem();
- RefItem *getRefItem(int todoItemId);
- RefItem *getFirstRefItem();
- RefItem *getNextRefItem();
- QCString listName() const;
- QCString pageTitle() const;
- QCString sectionTitle() const;
-
- RefList(const char *listName,
- const char *pageTitle,const char *secTitle
- );
- ~RefList();
- void insertIntoList(const char *key,RefItem *item);
- void generatePage();
-
- private:
- int m_id;
- QCString m_listName;
- QCString m_pageTitle;
- QCString m_secTitle;
- SortedRefItems *m_itemList;
- QIntDict<RefItem> *m_dict;
- QIntDictIterator<RefItem> *m_dictIterator;
-};
-
-#endif
diff --git a/trunk/src/resize.js b/trunk/src/resize.js
deleted file mode 100644
index 04fa95c..0000000
--- a/trunk/src/resize.js
+++ /dev/null
@@ -1,81 +0,0 @@
-var cookie_namespace = 'doxygen';
-var sidenav,navtree,content,header;
-
-function readCookie(cookie)
-{
- var myCookie = cookie_namespace+"_"+cookie+"=";
- if (document.cookie)
- {
- var index = document.cookie.indexOf(myCookie);
- if (index != -1)
- {
- var valStart = index + myCookie.length;
- var valEnd = document.cookie.indexOf(";", valStart);
- if (valEnd == -1)
- {
- valEnd = document.cookie.length;
- }
- var val = document.cookie.substring(valStart, valEnd);
- return val;
- }
- }
- return 0;
-}
-
-function writeCookie(cookie, val, expiration)
-{
- if (val==undefined) return;
- if (expiration == null)
- {
- var date = new Date();
- date.setTime(date.getTime()+(10*365*24*60*60*1000)); // default expiration is one week
- expiration = date.toGMTString();
- }
- document.cookie = cookie_namespace + "_" + cookie + "=" + val + "; expires=" + expiration+"; path=/";
-}
-
-function resizeWidth()
-{
- var windowWidth = $(window).width() + "px";
- var sidenavWidth = $(sidenav).width();
- content.css({marginLeft:parseInt(sidenavWidth)+6+"px"}); //account for 6px-wide handle-bar
- writeCookie('width',sidenavWidth, null);
-}
-
-function restoreWidth(navWidth)
-{
- var windowWidth = $(window).width() + "px";
- content.css({marginLeft:parseInt(navWidth)+6+"px"});
- sidenav.css({width:navWidth + "px"});
-}
-
-function resizeHeight()
-{
- var headerHeight = header.height();
- var footerHeight = footer.height();
- var windowHeight = $(window).height() - headerHeight - footerHeight;
- content.css({height:windowHeight + "px"});
- navtree.css({height:windowHeight + "px"});
- sidenav.css({height:windowHeight + "px",top: headerHeight+"px"});
-}
-
-function initResizable()
-{
- header = $("#top");
- sidenav = $("#side-nav");
- content = $("#doc-content");
- navtree = $("#nav-tree");
- footer = $("#nav-path");
- $(".side-nav-resizable").resizable({resize: function(e, ui) { resizeWidth(); } });
- $(window).resize(function() { resizeHeight(); });
- var width = readCookie('width');
- if (width) { restoreWidth(width); } else { resizeWidth(); }
- resizeHeight();
- var url = location.href;
- var i=url.indexOf("#");
- if (i>=0) window.location.hash=url.substr(i);
- var _preventDefault = function(evt) { evt.preventDefault(); };
- $("#splitbar").bind("dragstart", _preventDefault).bind("selectstart", _preventDefault);
-}
-
-
diff --git a/trunk/src/resize_js.h b/trunk/src/resize_js.h
deleted file mode 100644
index 7e627cc..0000000
--- a/trunk/src/resize_js.h
+++ /dev/null
@@ -1,81 +0,0 @@
-"var cookie_namespace = 'doxygen'; \n"
-"var sidenav,navtree,content,header;\n"
-"\n"
-"function readCookie(cookie) \n"
-"{\n"
-" var myCookie = cookie_namespace+\"_\"+cookie+\"=\";\n"
-" if (document.cookie) \n"
-" {\n"
-" var index = document.cookie.indexOf(myCookie);\n"
-" if (index != -1) \n"
-" {\n"
-" var valStart = index + myCookie.length;\n"
-" var valEnd = document.cookie.indexOf(\";\", valStart);\n"
-" if (valEnd == -1) \n"
-" {\n"
-" valEnd = document.cookie.length;\n"
-" }\n"
-" var val = document.cookie.substring(valStart, valEnd);\n"
-" return val;\n"
-" }\n"
-" }\n"
-" return 0;\n"
-"}\n"
-"\n"
-"function writeCookie(cookie, val, expiration) \n"
-"{\n"
-" if (val==undefined) return;\n"
-" if (expiration == null) \n"
-" {\n"
-" var date = new Date();\n"
-" date.setTime(date.getTime()+(10*365*24*60*60*1000)); // default expiration is one week\n"
-" expiration = date.toGMTString();\n"
-" }\n"
-" document.cookie = cookie_namespace + \"_\" + cookie + \"=\" + val + \"; expires=\" + expiration+\"; path=/\";\n"
-"}\n"
-" \n"
-"function resizeWidth() \n"
-"{\n"
-" var windowWidth = $(window).width() + \"px\";\n"
-" var sidenavWidth = $(sidenav).width();\n"
-" content.css({marginLeft:parseInt(sidenavWidth)+6+\"px\"}); //account for 6px-wide handle-bar\n"
-" writeCookie('width',sidenavWidth, null);\n"
-"}\n"
-"\n"
-"function restoreWidth(navWidth)\n"
-"{\n"
-" var windowWidth = $(window).width() + \"px\";\n"
-" content.css({marginLeft:parseInt(navWidth)+6+\"px\"});\n"
-" sidenav.css({width:navWidth + \"px\"});\n"
-"}\n"
-"\n"
-"function resizeHeight() \n"
-"{\n"
-" var headerHeight = header.height();\n"
-" var footerHeight = footer.height();\n"
-" var windowHeight = $(window).height() - headerHeight - footerHeight;\n"
-" content.css({height:windowHeight + \"px\"});\n"
-" navtree.css({height:windowHeight + \"px\"});\n"
-" sidenav.css({height:windowHeight + \"px\",top: headerHeight+\"px\"});\n"
-"}\n"
-"\n"
-"function initResizable()\n"
-"{\n"
-" header = $(\"#top\");\n"
-" sidenav = $(\"#side-nav\");\n"
-" content = $(\"#doc-content\");\n"
-" navtree = $(\"#nav-tree\");\n"
-" footer = $(\"#nav-path\");\n"
-" $(\".side-nav-resizable\").resizable({resize: function(e, ui) { resizeWidth(); } });\n"
-" $(window).resize(function() { resizeHeight(); });\n"
-" var width = readCookie('width');\n"
-" if (width) { restoreWidth(width); } else { resizeWidth(); }\n"
-" resizeHeight();\n"
-" var url = location.href;\n"
-" var i=url.indexOf(\"#\");\n"
-" if (i>=0) window.location.hash=url.substr(i);\n"
-" var _preventDefault = function(evt) { evt.preventDefault(); };\n"
-" $(\"#splitbar\").bind(\"dragstart\", _preventDefault).bind(\"selectstart\", _preventDefault);\n"
-"}\n"
-"\n"
-"\n"
diff --git a/trunk/src/rtfdocvisitor.cpp b/trunk/src/rtfdocvisitor.cpp
deleted file mode 100644
index 4cde286..0000000
--- a/trunk/src/rtfdocvisitor.cpp
+++ /dev/null
@@ -1,1750 +0,0 @@
-/******************************************************************************
- *
- *
- *
- *
- * Copyright (C) 1997-2012 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.
- *
- */
-
-#include "rtfdocvisitor.h"
-#include "docparser.h"
-#include "language.h"
-#include "doxygen.h"
-#include "outputgen.h"
-#include "dot.h"
-#include "msc.h"
-#include "util.h"
-#include "rtfstyle.h"
-#include "message.h"
-#include <qfileinfo.h>
-#include "parserintf.h"
-#include "msc.h"
-
-
-//#define DBG_RTF(x) m_t << x
-#define DBG_RTF(x) do {} while(0)
-
-static QCString align(DocHtmlCell *cell)
-{
- HtmlAttribList attrs = cell->attribs();
- uint i;
- for (i=0; i<attrs.count(); ++i)
- {
- if (attrs.at(i)->name.lower()=="align")
- {
- if (attrs.at(i)->value.lower()=="center")
- return "\\qc ";
- else if (attrs.at(i)->value.lower()=="right")
- return "\\qr ";
- else return "";
- }
- }
- return "";
-}
-
-RTFDocVisitor::RTFDocVisitor(FTextStream &t,CodeOutputInterface &ci,
- const char *langExt)
- : DocVisitor(DocVisitor_RTF), m_t(t), m_ci(ci), m_insidePre(FALSE),
- m_hide(FALSE), m_indentLevel(0), m_lastIsPara(FALSE), m_langExt(langExt)
-{
-}
-
-QCString RTFDocVisitor::getStyle(const char *name)
-{
- QCString n;
- n.sprintf("%s%d",name,m_indentLevel);
- StyleData *sd = rtf_Style[n];
- ASSERT(sd!=0);
- return sd->reference;
-}
-
-void RTFDocVisitor::incIndentLevel()
-{
- if (m_indentLevel<rtf_maxIndentLevels-1) m_indentLevel++;
-}
-
-void RTFDocVisitor::decIndentLevel()
-{
- if (m_indentLevel>0) m_indentLevel--;
-}
-
- //--------------------------------------
- // visitor functions for leaf nodes
- //--------------------------------------
-
-void RTFDocVisitor::visit(DocWord *w)
-{
- if (m_hide) return;
- DBG_RTF("{\\comment RTFDocVisitor::visit(DocWord)}\n");
- filter(w->word());
- m_lastIsPara=FALSE;
-}
-
-void RTFDocVisitor::visit(DocLinkedWord *w)
-{
- if (m_hide) return;
- DBG_RTF("{\\comment RTFDocVisitor::visit(DocLinkedWord)}\n");
- startLink(w->ref(),w->file(),w->anchor());
- filter(w->word());
- endLink(w->ref());
- m_lastIsPara=FALSE;
-}
-
-void RTFDocVisitor::visit(DocWhiteSpace *w)
-{
- if (m_hide) return;
- DBG_RTF("{\\comment RTFDocVisitor::visit(DocWhiteSpace)}\n");
- if (m_insidePre)
- {
- m_t << w->chars();
- }
- else
- {
- m_t << " ";
- }
- m_lastIsPara=FALSE;
-}
-
-void RTFDocVisitor::visit(DocSymbol *s)
-{
- if (m_hide) return;
- DBG_RTF("{\\comment RTFDocVisitor::visit(DocSymbol)}\n");
- switch(s->symbol())
- {
- case DocSymbol::BSlash: m_t << "\\\\"; break;
- case DocSymbol::At: m_t << "@"; break;
- case DocSymbol::Less: m_t << "<"; break;
- case DocSymbol::Greater: m_t << ">"; break;
- case DocSymbol::Amp: m_t << "&"; break;
- case DocSymbol::Dollar: m_t << "$"; break;
- case DocSymbol::Hash: m_t << "#"; break;
- case DocSymbol::DoubleColon: m_t << "::"; break;
- case DocSymbol::Percent: m_t << "%"; break;
- case DocSymbol::Copy: m_t << "(C)"; break;
- case DocSymbol::Tm: m_t << "(TM)"; break;
- case DocSymbol::Reg: m_t << "(R)"; break;
- case DocSymbol::Apos: m_t << "'"; break;
- case DocSymbol::Quot: m_t << "\""; break;
- case DocSymbol::Lsquo: m_t << "`"; break;
- case DocSymbol::Rsquo: m_t << "'"; break;
- case DocSymbol::Ldquo: m_t << "\""; break;
- case DocSymbol::Rdquo: m_t << "\""; break;
- case DocSymbol::Ndash: m_t << "-"; break;
- case DocSymbol::Mdash: m_t << "--"; break;
- case DocSymbol::Uml: switch(s->letter())
- {
- case 'A' : m_t << '\304'; break;
- case 'E' : m_t << '\313'; break;
- case 'I' : m_t << '\317'; break;
- case 'O' : m_t << '\326'; break;
- case 'U' : m_t << '\334'; break;
- case 'Y' : m_t << 'Y'; break;
- case 'a' : m_t << '\344'; break;
- case 'e' : m_t << '\353'; break;
- case 'i' : m_t << '\357'; break;
- case 'o' : m_t << '\366'; break;
- case 'u' : m_t << '\374'; break;
- case 'y' : m_t << '\377'; break;
- default: m_t << '?'; break;
- }
- break;
- case DocSymbol::Acute: switch(s->letter())
- {
- case 'A' : m_t << '\301'; break;
- case 'E' : m_t << '\311'; break;
- case 'I' : m_t << '\315'; break;
- case 'O' : m_t << '\323'; break;
- case 'U' : m_t << '\332'; break;
- case 'Y' : m_t << '\335'; break;
- case 'a' : m_t << '\341'; break;
- case 'e' : m_t << '\351'; break;
- case 'i' : m_t << '\355'; break;
- case 'o' : m_t << '\363'; break;
- case 'u' : m_t << '\372'; break;
- case 'y' : m_t << '\375'; break;
- default: m_t << '?'; break;
- }
- break;
- case DocSymbol::Grave: switch(s->letter())
- {
- case 'A' : m_t << '\300'; break;
- case 'E' : m_t << '\310'; break;
- case 'I' : m_t << '\314'; break;
- case 'O' : m_t << '\322'; break;
- case 'U' : m_t << '\331'; break;
- case 'a' : m_t << '\340'; break;
- case 'e' : m_t << '\350'; break;
- case 'i' : m_t << '\354'; break;
- case 'o' : m_t << '\362'; break;
- case 'u' : m_t << '\371'; break;
- default: m_t << '?'; break;
- }
- break;
- case DocSymbol::Circ: switch(s->letter())
- {
- case 'A' : m_t << '\302'; break;
- case 'E' : m_t << '\312'; break;
- case 'I' : m_t << '\316'; break;
- case 'O' : m_t << '\324'; break;
- case 'U' : m_t << '\333'; break;
- case 'a' : m_t << '\342'; break;
- case 'e' : m_t << '\352'; break;
- case 'i' : m_t << '\356'; break;
- case 'o' : m_t << '\364'; break;
- case 'u' : m_t << '\373'; break;
- default: m_t << '?'; break;
- }
- break;
- case DocSymbol::Tilde: switch(s->letter())
- {
- case 'A' : m_t << '\303'; break;
- case 'N' : m_t << '\321'; break;
- case 'O' : m_t << '\325'; break;
- case 'a' : m_t << '\343'; break;
- case 'n' : m_t << '\361'; break;
- case 'o' : m_t << '\365'; break;
- default: m_t << '?'; break;
- }
- break;
- case DocSymbol::Cedil: switch(s->letter())
- {
- case 'C' : m_t << '\307'; break;
- case 'c' : m_t << '\347'; break;
- default: m_t << '?'; break;
- }
- break;
- case DocSymbol::Slash: switch(s->letter())
- {
- case 'O' : m_t << '\330'; break;
- case 'o' : m_t << '\370'; break;
- default: m_t << '?'; break;
- }
- break;
- case DocSymbol::Ring: switch(s->letter())
- {
- case 'A' : m_t << '\305'; break;
- case 'a' : m_t << '\345'; break;
- default: m_t << '?'; break;
- }
- break;
- case DocSymbol::Szlig: m_t << "\337"; break;
- case DocSymbol::Nbsp: m_t << "\\~ "; break;
- case DocSymbol::Aelig: m_t << "\346"; break;
- case DocSymbol::AElig: m_t << "\306"; break;
- default:
- err("error: unknown symbol found\n");
- }
- m_lastIsPara=FALSE;
-}
-
-void RTFDocVisitor::visit(DocURL *u)
-{
- if (m_hide) return;
- DBG_RTF("{\\comment RTFDocVisitor::visit(DocURL)}\n");
- if (Config_getBool("RTF_HYPERLINKS"))
- {
- m_t << "{\\field "
- "{\\*\\fldinst "
- "{ HYPERLINK \\\\l \"";
- if (u->isEmail()) m_t << "mailto:";
- m_t << u->url();
- m_t << "\" }"
- "{}";
- m_t << "}"
- "{\\fldrslt "
- "{\\cs37\\ul\\cf2 ";
- filter(u->url());
- m_t << "}"
- "}"
- "}" << endl;
- }
- else
- {
- m_t << "{\\f2 ";
- filter(u->url());
- m_t << "}";
- }
- m_lastIsPara=FALSE;
-}
-
-void RTFDocVisitor::visit(DocLineBreak *)
-{
- if (m_hide) return;
- DBG_RTF("{\\comment RTFDocVisitor::visit(DocLineBreak)}\n");
- m_t << "\\par";
- m_lastIsPara=TRUE;
-}
-
-void RTFDocVisitor::visit(DocHorRuler *)
-{
- if (m_hide) return;
- DBG_RTF("{\\comment RTFDocVisitor::visit(DocHorRuler)}\n");
- m_t << "{\\pard\\widctlpar\\brdrb\\brdrs\\brdrw5\\brsp20 \\adjustright \\par}" << endl;
- m_lastIsPara=TRUE;
-}
-
-void RTFDocVisitor::visit(DocStyleChange *s)
-{
- if (m_hide) return;
- m_lastIsPara=FALSE;
- DBG_RTF("{\\comment RTFDocVisitor::visit(DocStyleChange)}\n");
- switch (s->style())
- {
- case DocStyleChange::Bold:
- if (s->enable()) m_t << "{\\b "; else m_t << "} ";
- break;
- case DocStyleChange::Italic:
- if (s->enable()) m_t << "{\\i "; else m_t << "} ";
- break;
- case DocStyleChange::Code:
- if (s->enable()) m_t << "{\\f2 "; else m_t << "} ";
- break;
- case DocStyleChange::Subscript:
- if (s->enable()) m_t << "{\\sub "; else m_t << "} ";
- break;
- case DocStyleChange::Superscript:
- if (s->enable()) m_t << "{\\super "; else m_t << "} ";
- break;
- case DocStyleChange::Center:
- if (s->enable()) m_t << "{\\qc "; else m_t << "} ";
- break;
- case DocStyleChange::Small:
- if (s->enable()) m_t << "{\\sub "; else m_t << "} ";
- break;
- case DocStyleChange::Preformatted:
- if (s->enable())
- {
- m_t << "{" << endl;
- m_t << "\\par" << endl;
- m_t << rtf_Style_Reset << getStyle("CodeExample");
- m_insidePre=TRUE;
- }
- else
- {
- m_insidePre=FALSE;
- m_t << "\\par";
- m_t << "}" << endl;
- }
- m_lastIsPara=TRUE;
- break;
- case DocStyleChange::Div: /* HTML only */ break;
- case DocStyleChange::Span: /* HTML only */ break;
- }
-}
-
-void RTFDocVisitor::visit(DocVerbatim *s)
-{
- if (m_hide) return;
- DBG_RTF("{\\comment RTFDocVisitor::visit(DocVerbatim)}\n");
- QCString lang = m_langExt;
- if (!s->language().isEmpty()) // explicit language setting
- {
- lang = s->language();
- }
- switch(s->type())
- {
- case DocVerbatim::Code: // fall though
- m_t << "{" << endl;
- m_t << "\\par" << endl;
- m_t << rtf_Style_Reset << getStyle("CodeExample");
- Doxygen::parserManager->getParser(lang)
- ->parseCode(m_ci,s->context(),s->text(),
- s->isExample(),s->exampleFile());
- //m_t << "\\par" << endl;
- m_t << "}" << endl;
- break;
- case DocVerbatim::Verbatim:
- m_t << "{" << endl;
- m_t << "\\par" << endl;
- m_t << rtf_Style_Reset << getStyle("CodeExample");
- filter(s->text(),TRUE);
- //m_t << "\\par" << endl;
- m_t << "}" << endl;
- break;
- case DocVerbatim::HtmlOnly:
- case DocVerbatim::LatexOnly:
- case DocVerbatim::XmlOnly:
- case DocVerbatim::ManOnly:
- /* nothing */
- break;
- case DocVerbatim::Dot:
- {
- static int dotindex = 1;
- QCString fileName(4096);
-
- fileName.sprintf("%s%d%s",
- (Config_getString("RTF_OUTPUT")+"/inline_dotgraph_").data(),
- dotindex++,
- ".dot"
- );
- QFile file(fileName);
- if (!file.open(IO_WriteOnly))
- {
- err("Could not open file %s for writing\n",fileName.data());
- }
- file.writeBlock( s->text(), s->text().length() );
- file.close();
- m_t << "\\par{\\qc "; // center picture
- writeDotFile(fileName);
- m_t << "} ";
- if (Config_getBool("DOT_CLEANUP")) file.remove();
- }
- break;
- case DocVerbatim::Msc:
- {
- static int mscindex = 1;
- QCString baseName(4096);
-
- baseName.sprintf("%s%d",
- (Config_getString("RTF_OUTPUT")+"/inline_mscgraph_").data(),
- mscindex++
- );
- QFile file(baseName+".msc");
- if (!file.open(IO_WriteOnly))
- {
- err("Could not open file %s for writing\n",baseName.data());
- }
- QCString text = "msc {";
- text+=s->text();
- text+="}";
- file.writeBlock( text, text.length() );
- file.close();
- m_t << "\\par{\\qc "; // center picture
- writeMscFile(baseName);
- m_t << "} ";
- if (Config_getBool("DOT_CLEANUP")) file.remove();
- }
- break;
- }
- m_lastIsPara=FALSE;
-}
-
-void RTFDocVisitor::visit(DocAnchor *anc)
-{
- if (m_hide) return;
- DBG_RTF("{\\comment RTFDocVisitor::visit(DocAnchor)}\n");
- QCString anchor;
- if (!anc->file().isEmpty())
- {
- anchor+=anc->file();
- }
- if (!anc->file().isEmpty() && !anc->anchor().isEmpty())
- {
- anchor+="_";
- }
- if (!anc->anchor().isEmpty())
- {
- anchor+=anc->anchor();
- }
- m_t << "{\\bkmkstart " << rtfFormatBmkStr(anchor) << "}" << endl;
- m_t << "{\\bkmkend " << rtfFormatBmkStr(anchor) << "}" << endl;
- m_lastIsPara=FALSE;
-}
-
-void RTFDocVisitor::visit(DocInclude *inc)
-{
- if (m_hide) return;
- DBG_RTF("{\\comment RTFDocVisitor::visit(DocInclude)}\n");
- switch(inc->type())
- {
- case DocInclude::IncWithLines:
- {
- m_t << "{" << endl;
- m_t << "\\par" << endl;
- m_t << rtf_Style_Reset << getStyle("CodeExample");
- QFileInfo cfi( inc->file() );
- FileDef fd( cfi.dirPath(), cfi.fileName() );
- Doxygen::parserManager->getParser(inc->extension())
- ->parseCode(m_ci,inc->context(),
- inc->text(),
- inc->isExample(),
- inc->exampleFile(), &fd);
- m_t << "\\par";
- m_t << "}" << endl;
- }
- break;
- case DocInclude::Include:
- m_t << "{" << endl;
- m_t << "\\par" << endl;
- m_t << rtf_Style_Reset << getStyle("CodeExample");
- Doxygen::parserManager->getParser(inc->extension())
- ->parseCode(m_ci,inc->context(),
- inc->text(),inc->isExample(),
- inc->exampleFile());
- m_t << "\\par";
- m_t << "}" << endl;
- break;
- case DocInclude::DontInclude:
- break;
- case DocInclude::HtmlInclude:
- break;
- case DocInclude::VerbInclude:
- m_t << "{" << endl;
- m_t << "\\par" << endl;
- m_t << rtf_Style_Reset << getStyle("CodeExample");
- filter(inc->text());
- m_t << "\\par";
- m_t << "}" << endl;
- break;
- case DocInclude::Snippet:
- m_t << "{" << endl;
- if (!m_lastIsPara) m_t << "\\par" << endl;
- m_t << rtf_Style_Reset << getStyle("CodeExample");
- Doxygen::parserManager->getParser(inc->extension())
- ->parseCode(m_ci,
- inc->context(),
- extractBlock(inc->text(),inc->blockId()),
- inc->isExample(),
- inc->exampleFile()
- );
- m_t << "}";
- break;
- }
- m_lastIsPara=TRUE;
-}
-
-void RTFDocVisitor::visit(DocIncOperator *op)
-{
- //printf("DocIncOperator: type=%d first=%d, last=%d text=`%s'\n",
- // op->type(),op->isFirst(),op->isLast(),op->text().data());
- DBG_RTF("{\\comment RTFDocVisitor::visit(DocIncOperator)}\n");
- if (op->isFirst())
- {
- if (!m_hide)
- {
- m_t << "{" << endl;
- m_t << "\\par" << endl;
- m_t << rtf_Style_Reset << getStyle("CodeExample");
- }
- pushEnabled();
- m_hide = TRUE;
- }
- if (op->type()!=DocIncOperator::Skip)
- {
- popEnabled();
- if (!m_hide)
- {
- Doxygen::parserManager->getParser(m_langExt)
- ->parseCode(m_ci,op->context(),op->text(),
- op->isExample(),op->exampleFile());
- }
- pushEnabled();
- m_hide=TRUE;
- }
- if (op->isLast())
- {
- popEnabled();
- if (!m_hide)
- {
- m_t << "\\par";
- m_t << "}" << endl;
- }
- m_lastIsPara=TRUE;
- }
- else
- {
- if (!m_hide) m_t << endl;
- m_lastIsPara=FALSE;
- }
-}
-
-void RTFDocVisitor::visit(DocFormula *f)
-{
- if (m_hide) return;
- // TODO: do something sensible here, like including a bitmap
- DBG_RTF("{\\comment RTFDocVisitor::visit(DocFormula)}\n");
- m_t << f->text();
- m_lastIsPara=FALSE;
-}
-
-void RTFDocVisitor::visit(DocIndexEntry *i)
-{
- if (m_hide) return;
- DBG_RTF("{\\comment RTFDocVisitor::visit(DocIndexEntry)}\n");
- m_t << "{\\xe \\v " << i->entry() << "}" << endl;
- m_lastIsPara=FALSE;
-}
-
-void RTFDocVisitor::visit(DocSimpleSectSep *)
-{
-}
-
-void RTFDocVisitor::visit(DocCite *cite)
-{
- if (m_hide) return;
- DBG_RTF("{\\comment RTFDocVisitor::visitPre(DocCite)}\n");
- if (!cite->file().isEmpty())
- {
- startLink(cite->ref(),cite->file(),cite->anchor());
- }
- else
- {
- m_t << "{\\b ";
- }
- filter(cite->text());
- if (!cite->file().isEmpty())
- {
- endLink(cite->ref());
- }
- else
- {
- m_t << "}";
- }
-}
-
-
-//--------------------------------------
-// visitor functions for compound nodes
-//--------------------------------------
-
-void RTFDocVisitor::visitPre(DocAutoList *l)
-{
- if (m_hide) return;
- DBG_RTF("{\\comment RTFDocVisitor::visitPre(DocAutoList)}\n");
- m_t << "{" << endl;
- rtf_listItemInfo[m_indentLevel].isEnum = l->isEnumList();
- rtf_listItemInfo[m_indentLevel].number = 1;
- m_lastIsPara=FALSE;
-}
-
-void RTFDocVisitor::visitPost(DocAutoList *)
-{
- if (m_hide) return;
- DBG_RTF("{\\comment RTFDocVisitor::visitPost(DocAutoList)}\n");
- m_t << "\\par";
- m_t << "}" << endl;
- m_lastIsPara=TRUE;
-}
-
-void RTFDocVisitor::visitPre(DocAutoListItem *)
-{
- if (m_hide) return;
- DBG_RTF("{\\comment RTFDocVisitor::visitPre(DocAutoListItem)}\n");
- if (!m_lastIsPara) m_t << "\\par" << endl;
- m_t << rtf_Style_Reset;
- if (rtf_listItemInfo[m_indentLevel].isEnum)
- {
- m_t << getStyle("ListEnum") << endl;
- m_t << rtf_listItemInfo[m_indentLevel].number << ".\\tab ";
- rtf_listItemInfo[m_indentLevel].number++;
- }
- else
- {
- m_t << getStyle("ListBullet") << endl;
- }
- incIndentLevel();
- m_lastIsPara=FALSE;
-}
-
-void RTFDocVisitor::visitPost(DocAutoListItem *)
-{
- decIndentLevel();
- DBG_RTF("{\\comment RTFDocVisitor::visitPost(DocAutoListItem)}\n");
-}
-
-void RTFDocVisitor::visitPre(DocPara *)
-{
- DBG_RTF("{\\comment RTFDocVisitor::visitPost(DocPara)}\n");
-}
-
-void RTFDocVisitor::visitPost(DocPara *p)
-{
- if (m_hide) return;
- DBG_RTF("{\\comment RTFDocVisitor::visitPost(DocPara)}\n");
- if (!m_lastIsPara &&
- !p->isLast() && // omit <p> for last paragraph
- !(p->parent() && // and for parameters & sections
- p->parent()->kind()==DocNode::Kind_ParamSect
- )
- )
- {
- m_t << "\\par" << endl;
- m_lastIsPara=TRUE;
- }
-}
-
-void RTFDocVisitor::visitPre(DocRoot *r)
-{
- if (m_hide) return;
- DBG_RTF("{\\comment RTFDocVisitor::visitPre(DocRoot)}\n");
- if (r->indent()) incIndentLevel();
- m_t << "{" << rtf_Style["BodyText"]->reference << endl;
-}
-
-void RTFDocVisitor::visitPost(DocRoot *r)
-{
- if (m_hide) return;
- DBG_RTF("{\\comment RTFDocVisitor::visitPost(DocRoot)}\n");
- if (!m_lastIsPara && !r->singleLine()) m_t << "\\par" << endl;
- m_t << "}";
- m_lastIsPara=TRUE;
- if (r->indent()) decIndentLevel();
-}
-
-void RTFDocVisitor::visitPre(DocSimpleSect *s)
-{
- if (m_hide) return;
- DBG_RTF("{\\comment RTFDocVisitor::visitPre(DocSimpleSect)}\n");
- if (!m_lastIsPara) m_t << "\\par" << endl;
- m_t << "{"; // start desc
- //m_t << "{\\b "; // start bold
- m_t << "{" << rtf_Style["Heading5"]->reference << endl;
- switch(s->type())
- {
- case DocSimpleSect::See:
- m_t << theTranslator->trSeeAlso(); break;
- case DocSimpleSect::Return:
- m_t << theTranslator->trReturns(); break;
- case DocSimpleSect::Author:
- m_t << theTranslator->trAuthor(TRUE,TRUE); break;
- case DocSimpleSect::Authors:
- m_t << theTranslator->trAuthor(TRUE,FALSE); break;
- case DocSimpleSect::Version:
- m_t << theTranslator->trVersion(); break;
- case DocSimpleSect::Since:
- m_t << theTranslator->trSince(); break;
- case DocSimpleSect::Date:
- m_t << theTranslator->trDate(); break;
- case DocSimpleSect::Note:
- m_t << theTranslator->trNote(); break;
- case DocSimpleSect::Warning:
- m_t << theTranslator->trWarning(); break;
- case DocSimpleSect::Pre:
- m_t << theTranslator->trPrecondition(); break;
- case DocSimpleSect::Post:
- m_t << theTranslator->trPostcondition(); break;
- case DocSimpleSect::Copyright:
- m_t << theTranslator->trCopyright(); break;
- case DocSimpleSect::Invar:
- m_t << theTranslator->trInvariant(); break;
- case DocSimpleSect::Remark:
- m_t << theTranslator->trRemarks(); break;
- case DocSimpleSect::Attention:
- m_t << theTranslator->trAttention(); break;
- case DocSimpleSect::User: break;
- case DocSimpleSect::Rcs: break;
- case DocSimpleSect::Unknown: break;
- }
-
- // special case 1: user defined title
- if (s->type()!=DocSimpleSect::User && s->type()!=DocSimpleSect::Rcs)
- {
- m_t << ":";
- m_t << "\\par";
- m_t << "}"; // end bold
- incIndentLevel();
- m_t << rtf_Style_Reset << getStyle("DescContinue");
- }
- m_lastIsPara=FALSE;
-}
-
-void RTFDocVisitor::visitPost(DocSimpleSect *)
-{
- if (m_hide) return;
- DBG_RTF("{\\comment RTFDocVisitor::visitPost(DocSimpleSect)}\n");
- if (!m_lastIsPara) m_t << "\\par" << endl;
- decIndentLevel();
- m_t << "}"; // end desc
- m_lastIsPara=TRUE;
-}
-
-void RTFDocVisitor::visitPre(DocTitle *)
-{
- DBG_RTF("{\\comment RTFDocVisitor::visitPre(DocTitle)}\n");
-}
-
-void RTFDocVisitor::visitPost(DocTitle *)
-{
- if (m_hide) return;
- DBG_RTF("{\\comment RTFDocVisitor::visitPost(DocTitle)}\n");
- m_t << "\\par" << endl;
- m_t << "}"; // end bold
- incIndentLevel();
- m_t << rtf_Style_Reset << getStyle("DescContinue");
- m_lastIsPara=FALSE;
-}
-
-void RTFDocVisitor::visitPre(DocSimpleList *)
-{
- if (m_hide) return;
- DBG_RTF("{\\comment RTFDocVisitor::visitPre(DocSimpleSect)}\n");
- m_t << "{" << endl;
- rtf_listItemInfo[m_indentLevel].isEnum = FALSE;
- m_lastIsPara=FALSE;
-}
-
-void RTFDocVisitor::visitPost(DocSimpleList *)
-{
- if (m_hide) return;
- DBG_RTF("{\\comment RTFDocVisitor::visitPost(DocSimpleSect)}\n");
- if (!m_lastIsPara) m_t << "\\par" << endl;
- m_t << "}" << endl;
- m_lastIsPara=TRUE;
-}
-
-void RTFDocVisitor::visitPre(DocSimpleListItem *)
-{
- if (m_hide) return;
- DBG_RTF("{\\comment RTFDocVisitor::visitPre(DocSimpleListItem)}\n");
- m_t << "\\par" << rtf_Style_Reset << getStyle("ListBullet") << endl;
- m_lastIsPara=FALSE;
- incIndentLevel();
-}
-
-void RTFDocVisitor::visitPost(DocSimpleListItem *)
-{
- decIndentLevel();
- DBG_RTF("{\\comment RTFDocVisitor::visitPost(DocSimpleListItem)}\n");
-}
-
-void RTFDocVisitor::visitPre(DocSection *s)
-{
- if (m_hide) return;
- DBG_RTF("{\\comment RTFDocVisitor::visitPre(DocSection)}\n");
- if (!m_lastIsPara) m_t << "\\par" << endl;
- m_t << "{\\bkmkstart " << rtfFormatBmkStr(s->file()+"_"+s->anchor()) << "}" << endl;
- m_t << "{\\bkmkend " << rtfFormatBmkStr(s->file()+"_"+s->anchor()) << "}" << endl;
- m_t << "{{" // start section
- << rtf_Style_Reset;
- QCString heading;
- int level = QMIN(s->level()+1,4);
- heading.sprintf("Heading%d",level);
- // set style
- m_t << rtf_Style[heading]->reference << endl;
- // make table of contents entry
- filter(s->title());
- m_t << endl << "\\par" << "}" << endl;
- m_t << "{\\tc\\tcl" << level << " \\v ";
- filter(s->title());
- m_t << "}" << endl;
- m_lastIsPara=TRUE;
-}
-
-void RTFDocVisitor::visitPost(DocSection *)
-{
- if (m_hide) return;
- DBG_RTF("{\\comment RTFDocVisitor::visitPost(DocSection)}\n");
- m_t << "\\par}" << endl; // end section
- m_lastIsPara=TRUE;
-}
-
-void RTFDocVisitor::visitPre(DocHtmlList *l)
-{
- if (m_hide) return;
- DBG_RTF("{\\comment RTFDocVisitor::visitPre(DocHtmlList)}\n");
- m_t << "{" << endl;
- rtf_listItemInfo[m_indentLevel].isEnum = l->type()==DocHtmlList::Ordered;
- rtf_listItemInfo[m_indentLevel].number = 1;
- m_lastIsPara=FALSE;
-}
-
-void RTFDocVisitor::visitPost(DocHtmlList *)
-{
- if (m_hide) return;
- DBG_RTF("{\\comment RTFDocVisitor::visitPost(DocHtmlList)}\n");
- m_t << "\\par" << "}" << endl;
- m_lastIsPara=TRUE;
-}
-
-void RTFDocVisitor::visitPre(DocHtmlListItem *)
-{
- if (m_hide) return;
- DBG_RTF("{\\comment RTFDocVisitor::visitPre(DocHtmlListItem)}\n");
- m_t << "\\par" << endl;
- m_t << rtf_Style_Reset;
- if (rtf_listItemInfo[m_indentLevel].isEnum)
- {
- m_t << getStyle("ListEnum") << endl;
- m_t << rtf_listItemInfo[m_indentLevel].number << ".\\tab ";
- rtf_listItemInfo[m_indentLevel].number++;
- }
- else
- {
- m_t << getStyle("ListBullet") << endl;
- }
- incIndentLevel();
- m_lastIsPara=FALSE;
-}
-
-void RTFDocVisitor::visitPost(DocHtmlListItem *)
-{
- decIndentLevel();
- DBG_RTF("{\\comment RTFDocVisitor::visitPost(DocHtmlListItem)}\n");
-}
-
-void RTFDocVisitor::visitPre(DocHtmlDescList *)
-{
- if (m_hide) return;
- DBG_RTF("{\\comment RTFDocVisitor::visitPre(DocHtmlDescList)}\n");
- //m_t << "{" << endl;
- //m_t << rtf_Style_Reset << getStyle("ListContinue");
- //m_lastIsPara=FALSE;
-}
-
-void RTFDocVisitor::visitPost(DocHtmlDescList *)
-{
- if (m_hide) return;
- DBG_RTF("{\\comment RTFDocVisitor::visitPost(DocHtmlDescList)}\n");
- //m_t << "}" << endl;
- //m_t << "\\par" << endl;
- //m_lastIsPara=TRUE;
-}
-
-void RTFDocVisitor::visitPre(DocHtmlDescTitle *)
-{
- if (m_hide) return;
- DBG_RTF("{\\comment RTFDocVisitor::visitPre(DocHtmlDescTitle)}\n");
- //m_t << "\\par" << endl;
- //m_t << "{\\b ";
- m_t << "{" << rtf_Style["Heading5"]->reference << endl;
- m_lastIsPara=FALSE;
-}
-
-void RTFDocVisitor::visitPost(DocHtmlDescTitle *)
-{
- if (m_hide) return;
- DBG_RTF("{\\comment RTFDocVisitor::visitPost(DocHtmlDescTitle)}\n");
- m_t << "\\par" << endl;
- m_t << "}" << endl;
- m_lastIsPara=TRUE;
-}
-
-void RTFDocVisitor::visitPre(DocHtmlDescData *)
-{
- if (m_hide) return;
- DBG_RTF("{\\comment RTFDocVisitor::visitPre(DocHtmlDescData)}\n");
- incIndentLevel();
- m_t << "{" << rtf_Style_Reset << getStyle("DescContinue");
-}
-
-void RTFDocVisitor::visitPost(DocHtmlDescData *)
-{
- if (m_hide) return;
- DBG_RTF("{\\comment RTFDocVisitor::visitPost(DocHtmlDescData)}\n");
- m_t << "\\par";
- m_t << "}" << endl;
- decIndentLevel();
- m_lastIsPara=TRUE;
-}
-
-void RTFDocVisitor::visitPre(DocHtmlTable *)
-{
- if (m_hide) return;
- DBG_RTF("{\\comment RTFDocVisitor::visitPre(DocHtmlTable)}\n");
- if (!m_lastIsPara) m_t << "\\par" << endl;
- m_lastIsPara=TRUE;
-}
-
-void RTFDocVisitor::visitPost(DocHtmlTable *)
-{
- if (m_hide) return;
- DBG_RTF("{\\comment RTFDocVisitor::visitPost(DocHtmlTable)}\n");
- m_t << "\\pard\\plain" << endl;
- m_t << "\\par" << endl;
- m_lastIsPara=TRUE;
-}
-
-void RTFDocVisitor::visitPre(DocHtmlCaption *)
-{
- DBG_RTF("{\\comment RTFDocVisitor::visitPre(DocHtmlCaption)}\n");
-}
-
-void RTFDocVisitor::visitPost(DocHtmlCaption *)
-{
- DBG_RTF("{\\comment RTFDocVisitor::visitPost(DocHtmlCaption)}\n");
-}
-
-void RTFDocVisitor::visitPre(DocHtmlRow *r)
-{
- if (m_hide) return;
- DBG_RTF("{\\comment RTFDocVisitor::visitPre(DocHtmlRow)}\n");
- uint i,columnWidth=r->numCells()>0 ? rtf_pageWidth/r->numCells() : 10;
- m_t << "\\trowd \\trgaph108\\trleft-108"
- "\\trbrdrt\\brdrs\\brdrw10 "
- "\\trbrdrl\\brdrs\\brdrw10 "
- "\\trbrdrb\\brdrs\\brdrw10 "
- "\\trbrdrr\\brdrs\\brdrw10 "
- "\\trbrdrh\\brdrs\\brdrw10 "
- "\\trbrdrv\\brdrs\\brdrw10 "<< endl;
- for (i=0;i<r->numCells();i++)
- {
- if (r->isHeading())
- {
- m_t << "\\clcbpat16"; // set cell shading to light grey (color 16 in the clut)
- }
- m_t << "\\clvertalt\\clbrdrt\\brdrs\\brdrw10 "
- "\\clbrdrl\\brdrs\\brdrw10 "
- "\\clbrdrb\\brdrs\\brdrw10 "
- "\\clbrdrr \\brdrs\\brdrw10 "
- "\\cltxlrtb "
- "\\cellx" << ((i+1)*columnWidth) << endl;
- }
- m_t << "\\pard \\widctlpar\\intbl\\adjustright" << endl;
- m_lastIsPara=FALSE;
-}
-
-void RTFDocVisitor::visitPost(DocHtmlRow *)
-{
- if (m_hide) return;
- DBG_RTF("{\\comment RTFDocVisitor::visitPost(DocHtmlRow)}\n");
- m_t << endl;
- m_t << "\\pard \\widctlpar\\intbl\\adjustright" << endl;
- m_t << "{\\row }" << endl;
- m_lastIsPara=FALSE;
-}
-
-void RTFDocVisitor::visitPre(DocHtmlCell *c)
-{
- if (m_hide) return;
- DBG_RTF("{\\comment RTFDocVisitor::visitPre(DocHtmlCell)}\n");
- m_t << "{" << align(c);
- m_lastIsPara=FALSE;
-}
-
-void RTFDocVisitor::visitPost(DocHtmlCell *)
-{
- if (m_hide) return;
- DBG_RTF("{\\comment RTFDocVisitor::visitPost(DocHtmlCell)}\n");
- m_t << "\\cell }";
- m_lastIsPara=FALSE;
-}
-
-void RTFDocVisitor::visitPre(DocInternal *)
-{
- if (m_hide) return;
- //DBG_RTF("{\\comment RTFDocVisitor::visitPre(DocInternal)}\n");
- //m_t << "{"; // start desc
- //m_t << "{\\b "; // start bold
- //m_t << theTranslator->trForInternalUseOnly();
- //m_t << "}"; // end bold
- //m_t << "\\par" << endl;
- //incIndentLevel();
- //m_t << rtf_Style_Reset << getStyle("DescContinue");
- //m_lastIsPara=FALSE;
-}
-
-void RTFDocVisitor::visitPost(DocInternal *)
-{
- if (m_hide) return;
- //DBG_RTF("{\\comment RTFDocVisitor::visitPost(DocInternal)}\n");
- //m_t << "\\par";
- //decIndentLevel();
- //m_t << "}"; // end desc
- //m_lastIsPara=TRUE;
-}
-
-void RTFDocVisitor::visitPre(DocHRef *href)
-{
- if (m_hide) return;
- DBG_RTF("{\\comment RTFDocVisitor::visitPre(DocHRef)}\n");
- if (Config_getBool("RTF_HYPERLINKS"))
- {
- m_t << "{\\field "
- "{\\*\\fldinst "
- "{ HYPERLINK \\\\l \"" << href->url() << "\" "
- "}{}"
- "}"
- "{\\fldrslt "
- "{\\cs37\\ul\\cf2 ";
-
- }
- else
- {
- m_t << "{\\f2 ";
- }
- m_lastIsPara=FALSE;
-}
-
-void RTFDocVisitor::visitPost(DocHRef *)
-{
- if (m_hide) return;
- DBG_RTF("{\\comment RTFDocVisitor::visitPost(DocHRef)}\n");
- if (Config_getBool("RTF_HYPERLINKS"))
- {
- m_t << "}"
- "}"
- "}";
- }
- else
- {
- m_t << "}";
- }
- m_lastIsPara=FALSE;
-}
-
-void RTFDocVisitor::visitPre(DocHtmlHeader *header)
-{
- if (m_hide) return;
- DBG_RTF("{\\comment RTFDocVisitor::visitPre(DocHtmlHeader)}\n");
- m_t << "{" // start section
- << rtf_Style_Reset;
- QCString heading;
- int level = QMIN(header->level()+2,4);
- heading.sprintf("Heading%d",level);
- // set style
- m_t << rtf_Style[heading]->reference;
- // make table of contents entry
- m_t << "{\\tc\\tcl \\v " << level << "}";
- m_lastIsPara=FALSE;
-
-}
-
-void RTFDocVisitor::visitPost(DocHtmlHeader *)
-{
- if (m_hide) return;
- DBG_RTF("{\\comment RTFDocVisitor::visitPost(DocHtmlHeader)}\n");
- m_t << "\\par";
- m_t << "}" << endl; // end section
- m_lastIsPara=TRUE;
-}
-
-void RTFDocVisitor::visitPre(DocImage *img)
-{
- DBG_RTF("{\\comment RTFDocVisitor::visitPre(DocImage)}\n");
- if (img->type()==DocImage::Rtf)
- {
- m_t << "\\par" << endl;
- m_t << "{" << endl;
- m_t << rtf_Style_Reset << endl;
- m_t << "\\par\\pard \\qc {\\field\\flddirty {\\*\\fldinst INCLUDEPICTURE \"";
- m_t << img->name();
- m_t << "\" \\\\d \\\\*MERGEFORMAT}{\\fldrslt IMAGE}}\\par" << endl;
- m_t << "}" << endl;
- m_lastIsPara=TRUE;
- }
- else // other format -> skip
- {
- }
- // hide caption since it is not supported at the moment
- pushEnabled();
- m_hide=TRUE;
-}
-
-void RTFDocVisitor::visitPost(DocImage *)
-{
- DBG_RTF("{\\comment RTFDocVisitor::visitPost(DocImage)}\n");
- popEnabled();
-}
-
-void RTFDocVisitor::visitPre(DocDotFile *df)
-{
- DBG_RTF("{\\comment RTFDocVisitor::visitPre(DocDotFile)}\n");
- writeDotFile(df->file());
-
- // hide caption since it is not supported at the moment
- pushEnabled();
- m_hide=TRUE;
-}
-
-void RTFDocVisitor::visitPost(DocDotFile *)
-{
- DBG_RTF("{\\comment RTFDocVisitor::visitPost(DocDotFile)}\n");
- popEnabled();
-}
-void RTFDocVisitor::visitPre(DocMscFile *df)
-{
- DBG_RTF("{\\comment RTFDocVisitor::visitPre(DocMscFile)}\n");
- writeMscFile(df->file());
-
- // hide caption since it is not supported at the moment
- pushEnabled();
- m_hide=TRUE;
-}
-
-void RTFDocVisitor::visitPost(DocMscFile *)
-{
- DBG_RTF("{\\comment RTFDocVisitor::visitPost(DocMscFile)}\n");
- popEnabled();
-}
-
-void RTFDocVisitor::visitPre(DocLink *lnk)
-{
- if (m_hide) return;
- DBG_RTF("{\\comment RTFDocVisitor::visitPre(DocLink)}\n");
- startLink(lnk->ref(),lnk->file(),lnk->anchor());
-}
-
-void RTFDocVisitor::visitPost(DocLink *lnk)
-{
- if (m_hide) return;
- DBG_RTF("{\\comment RTFDocVisitor::visitPost(DocLink)}\n");
- endLink(lnk->ref());
-}
-
-void RTFDocVisitor::visitPre(DocRef *ref)
-{
- if (m_hide) return;
- DBG_RTF("{\\comment RTFDocVisitor::visitPre(DocRef)}\n");
- // when ref->isSubPage()==TRUE we use ref->file() for HTML and
- // ref->anchor() for LaTeX/RTF
- if (ref->isSubPage())
- {
- startLink(ref->ref(),0,ref->anchor());
- }
- else
- {
- if (!ref->file().isEmpty()) startLink(ref->ref(),ref->file(),ref->anchor());
- }
- if (!ref->hasLinkText()) filter(ref->targetTitle());
-}
-
-void RTFDocVisitor::visitPost(DocRef *ref)
-{
- if (m_hide) return;
- DBG_RTF("{\\comment RTFDocVisitor::visitPost(DocRef)}\n");
- if (!ref->file().isEmpty()) endLink(ref->ref());
- //m_t << " ";
-}
-
-
-void RTFDocVisitor::visitPre(DocSecRefItem *)
-{
- DBG_RTF("{\\comment RTFDocVisitor::visitPre(DocSecRefItem)}\n");
-}
-
-void RTFDocVisitor::visitPost(DocSecRefItem *)
-{
- DBG_RTF("{\\comment RTFDocVisitor::visitPost(DocSecRefItem)}\n");
-}
-
-void RTFDocVisitor::visitPre(DocSecRefList *)
-{
- if (m_hide) return;
- DBG_RTF("{\\comment RTFDocVisitor::visitPre(DocSecRefList)}\n");
- m_t << "{" << endl;
- incIndentLevel();
- m_t << rtf_Style_Reset << getStyle("LatexTOC") << endl;
- m_t << "\\par" << endl;
- m_lastIsPara=TRUE;
-}
-
-void RTFDocVisitor::visitPost(DocSecRefList *)
-{
- if (m_hide) return;
- DBG_RTF("{\\comment RTFDocVisitor::visitPost(DocSecRefList)}\n");
- decIndentLevel();
- m_t << "\\par";
- m_t << "}" << endl;
- m_lastIsPara=TRUE;
-}
-
-//void RTFDocVisitor::visitPre(DocLanguage *l)
-//{
-// DBG_RTF("{\\comment RTFDocVisitor::visitPre(DocLanguage)}\n");
-// QCString langId = Config_getEnum("OUTPUT_LANGUAGE");
-// if (l->id().lower()!=langId.lower())
-// {
-// pushEnabled();
-// m_hide = TRUE;
-// }
-//}
-//
-//void RTFDocVisitor::visitPost(DocLanguage *l)
-//{
-// DBG_RTF("{\\comment RTFDocVisitor::visitPost(DocLanguage)}\n");
-// QCString langId = Config_getEnum("OUTPUT_LANGUAGE");
-// if (l->id().lower()!=langId.lower())
-// {
-// popEnabled();
-// }
-//}
-
-void RTFDocVisitor::visitPre(DocParamSect *s)
-{
- if (m_hide) return;
- DBG_RTF("{\\comment RTFDocVisitor::visitPre(DocParamSect)}\n");
- m_t << "{"; // start param list
- if (!m_lastIsPara) m_t << "\\par" << endl;
- //m_t << "{\\b "; // start bold
- m_t << "{" << rtf_Style["Heading5"]->reference << endl;
- switch(s->type())
- {
- case DocParamSect::Param:
- m_t << theTranslator->trParameters(); break;
- case DocParamSect::RetVal:
- m_t << theTranslator->trReturnValues(); break;
- case DocParamSect::Exception:
- m_t << theTranslator->trExceptions(); break;
- case DocParamSect::TemplateParam:
- /* TODO: add this
- m_t << theTranslator->trTemplateParam(); break;
- */
- m_t << "Template Parameters"; break;
- default:
- ASSERT(0);
- }
- m_t << ":";
- m_t << "\\par";
- m_t << "}" << endl;
- bool useTable = s->type()==DocParamSect::Param ||
- s->type()==DocParamSect::RetVal ||
- s->type()==DocParamSect::Exception ||
- s->type()==DocParamSect::TemplateParam;
- if (!useTable)
- {
- incIndentLevel();
- }
- m_t << rtf_Style_Reset << getStyle("DescContinue");
- m_lastIsPara=TRUE;
-}
-
-void RTFDocVisitor::visitPost(DocParamSect *s)
-{
- if (m_hide) return;
- DBG_RTF("{\\comment RTFDocVisitor::visitPost(DocParamSect)}\n");
- //m_t << "\\par" << endl;
- bool useTable = s->type()==DocParamSect::Param ||
- s->type()==DocParamSect::RetVal ||
- s->type()==DocParamSect::Exception ||
- s->type()==DocParamSect::TemplateParam;
- if (!useTable)
- {
- decIndentLevel();
- }
- m_t << "}" << endl;
-}
-
-void RTFDocVisitor::visitPre(DocParamList *pl)
-{
- static int columnPos[4][5] =
- { { 2, 25, 100, 100, 100 }, // no inout, no type
- { 3, 14, 35, 100, 100 }, // inout, no type
- { 3, 25, 50, 100, 100 }, // no inout, type
- { 4, 14, 35, 55, 100 }, // inout, type
- };
- int config=0;
- if (m_hide) return;
- DBG_RTF("{\\comment RTFDocVisitor::visitPre(DocParamList)}\n");
-
- DocParamSect::Type parentType = DocParamSect::Unknown;
- DocParamSect *sect = 0;
- if (pl->parent() && pl->parent()->kind()==DocNode::Kind_ParamSect)
- {
- parentType = ((DocParamSect*)pl->parent())->type();
- sect=(DocParamSect*)pl->parent();
- }
- bool useTable = parentType==DocParamSect::Param ||
- parentType==DocParamSect::RetVal ||
- parentType==DocParamSect::Exception ||
- parentType==DocParamSect::TemplateParam;
- if (sect && sect->hasInOutSpecifier()) config+=1;
- if (sect && sect->hasTypeSpecifier()) config+=2;
- if (useTable)
- {
- int i;
- m_t << "\\trowd \\trgaph108\\trleft426\\tblind426"
- "\\trbrdrt\\brdrs\\brdrw10\\brdrcf15 "
- "\\trbrdrl\\brdrs\\brdrw10\\brdrcf15 "
- "\\trbrdrb\\brdrs\\brdrw10\\brdrcf15 "
- "\\trbrdrr\\brdrs\\brdrw10\\brdrcf15 "
- "\\trbrdrh\\brdrs\\brdrw10\\brdrcf15 "
- "\\trbrdrv\\brdrs\\brdrw10\\brdrcf15 "<< endl;
- for (i=0;i<columnPos[config][0];i++)
- {
- m_t << "\\clvertalt\\clbrdrt\\brdrs\\brdrw10\\brdrcf15 "
- "\\clbrdrl\\brdrs\\brdrw10\\brdrcf15 "
- "\\clbrdrb\\brdrs\\brdrw10\\brdrcf15 "
- "\\clbrdrr \\brdrs\\brdrw10\\brdrcf15 "
- "\\cltxlrtb "
- "\\cellx" << (rtf_pageWidth*columnPos[config][i+1]/100) << endl;
- }
- m_t << "\\pard \\widctlpar\\intbl\\adjustright" << endl;
- }
-
- if (sect && sect->hasInOutSpecifier())
- {
- if (useTable)
- {
- m_t << "{";
- }
-
- // Put in the direction: in/out/in,out if specified.
- if (pl->direction()!=DocParamSect::Unspecified)
- {
- if (pl->direction()==DocParamSect::In)
- {
- m_t << "in";
- }
- else if (pl->direction()==DocParamSect::Out)
- {
- m_t << "out";
- }
- else if (pl->direction()==DocParamSect::InOut)
- {
- m_t << "in,out";
- }
- }
-
- if (useTable)
- {
- m_t << "\\cell }";
- }
- }
-
- if (sect && sect->hasTypeSpecifier())
- {
- if (useTable)
- {
- m_t << "{";
- }
- QListIterator<DocNode> li(pl->paramTypes());
- DocNode *type;
- bool first=TRUE;
- for (li.toFirst();(type=li.current());++li)
- {
- if (!first) m_t << " | "; else first=FALSE;
- if (type->kind()==DocNode::Kind_Word)
- {
- visit((DocWord*)type);
- }
- else if (type->kind()==DocNode::Kind_LinkedWord)
- {
- visit((DocLinkedWord*)type);
- }
- }
- if (useTable)
- {
- m_t << "\\cell }";
- }
- }
-
-
- if (useTable)
- {
- m_t << "{";
- }
-
- m_t << "{\\i ";
- //QStrListIterator li(pl->parameters());
- //const char *s;
- QListIterator<DocNode> li(pl->parameters());
- DocNode *param;
- bool first=TRUE;
- for (li.toFirst();(param=li.current());++li)
- {
- if (!first) m_t << ","; else first=FALSE;
- if (param->kind()==DocNode::Kind_Word)
- {
- visit((DocWord*)param);
- }
- else if (param->kind()==DocNode::Kind_LinkedWord)
- {
- visit((DocLinkedWord*)param);
- }
- }
- m_t << "} ";
-
- if (useTable)
- {
- m_t << "\\cell }{";
- }
- m_lastIsPara=TRUE;
-}
-
-void RTFDocVisitor::visitPost(DocParamList *pl)
-{
- if (m_hide) return;
- DBG_RTF("{\\comment RTFDocVisitor::visitPost(DocParamList)}\n");
-
- DocParamSect::Type parentType = DocParamSect::Unknown;
- //DocParamSect *sect = 0;
- if (pl->parent() && pl->parent()->kind()==DocNode::Kind_ParamSect)
- {
- parentType = ((DocParamSect*)pl->parent())->type();
- //sect=(DocParamSect*)pl->parent();
- }
- bool useTable = parentType==DocParamSect::Param ||
- parentType==DocParamSect::RetVal ||
- parentType==DocParamSect::Exception ||
- parentType==DocParamSect::TemplateParam;
- if (useTable)
- {
- m_t << "\\cell }" << endl;
- //m_t << "\\pard \\widctlpar\\intbl\\adjustright" << endl;
- m_t << "{\\row }" << endl;
- }
- else
- {
- m_t << "\\par" << endl;
- }
-
- m_lastIsPara=TRUE;
-}
-
-void RTFDocVisitor::visitPre(DocXRefItem *x)
-{
- if (m_hide) return;
- bool anonymousEnum = x->file()=="@";
- DBG_RTF("{\\comment RTFDocVisitor::visitPre(DocXRefItem)}\n");
- m_t << "{"; // start param list
- //m_t << "{\\b "; // start bold
- m_t << "{" << rtf_Style["Heading5"]->reference << endl;
- if (Config_getBool("RTF_HYPERLINKS") && !anonymousEnum)
- {
- QCString refName;
- if (!x->file().isEmpty())
- {
- refName+=x->file();
- }
- if (!x->file().isEmpty() && !x->anchor().isEmpty())
- {
- refName+="_";
- }
- if (!x->anchor().isEmpty())
- {
- refName+=x->anchor();
- }
-
- m_t << "{\\field "
- "{\\*\\fldinst "
- "{ HYPERLINK \\\\l \"" << refName << "\" "
- "}{}"
- "}"
- "{\\fldrslt "
- "{\\cs37\\ul\\cf2 ";
- filter(x->title());
- m_t << "}"
- "}"
- "}";
- }
- else
- {
- filter(x->title());
- }
- m_t << ":";
- m_t << "\\par";
- m_t << "}"; // end bold
- incIndentLevel();
- m_t << rtf_Style_Reset << getStyle("DescContinue");
- m_lastIsPara=FALSE;
-}
-
-void RTFDocVisitor::visitPost(DocXRefItem *)
-{
- if (m_hide) return;
- DBG_RTF("{\\comment RTFDocVisitor::visitPost(DocXRefItem)}\n");
- m_t << "\\par" << endl;
- decIndentLevel();
- m_t << "}" << endl; // end xref item
- m_lastIsPara=TRUE;
-}
-
-void RTFDocVisitor::visitPre(DocInternalRef *ref)
-{
- if (m_hide) return;
- DBG_RTF("{\\comment RTFDocVisitor::visitPre(DocInternalRef)}\n");
- startLink("",ref->file(),ref->anchor());
-}
-
-void RTFDocVisitor::visitPost(DocInternalRef *)
-{
- if (m_hide) return;
- DBG_RTF("{\\comment RTFDocVisitor::visitPost(DocInternalRef)}\n");
- endLink("");
- m_t << " ";
-}
-
-void RTFDocVisitor::visitPre(DocCopy *)
-{
- if (m_hide) return;
- DBG_RTF("{\\comment RTFDocVisitor::visitPre(DocCopy)}\n");
-}
-
-void RTFDocVisitor::visitPost(DocCopy *)
-{
- if (m_hide) return;
- DBG_RTF("{\\comment RTFDocVisitor::visitPost(DocCopy)}\n");
-}
-
-void RTFDocVisitor::visitPre(DocText *)
-{
- if (m_hide) return;
- DBG_RTF("{\\comment RTFDocVisitor::visitPre(DocText)}\n");
-}
-
-void RTFDocVisitor::visitPost(DocText *)
-{
- if (m_hide) return;
- DBG_RTF("{\\comment RTFDocVisitor::visitPost(DocText)}\n");
-}
-
-void RTFDocVisitor::visitPre(DocHtmlBlockQuote *)
-{
- if (m_hide) return;
- DBG_RTF("{\\comment RTFDocVisitor::visitPre(DocHtmlBlockQuote)}\n");
- if (!m_lastIsPara) m_t << "\\par" << endl;
- m_t << "{"; // start desc
- incIndentLevel();
- m_t << rtf_Style_Reset << getStyle("DescContinue");
-}
-
-void RTFDocVisitor::visitPost(DocHtmlBlockQuote *)
-{
- if (m_hide) return;
- DBG_RTF("{\\comment RTFDocVisitor::visitPost(DocHtmlBlockQuote)}\n");
- if (!m_lastIsPara) m_t << "\\par" << endl;
- decIndentLevel();
- m_t << "}"; // end desc
- m_lastIsPara=TRUE;
-}
-
-
-//static char* getMultiByte(int c)
-//{
-// static char s[10];
-// sprintf(s,"\\'%X",c);
-// return s;
-//}
-
-void RTFDocVisitor::filter(const char *str,bool verbatim)
-{
- if (str)
- {
- const unsigned char *p=(const unsigned char *)str;
- unsigned char c;
- unsigned char pc='\0';
- while (*p)
- {
- //static bool MultiByte = FALSE;
- c=*p++;
-
- //if ( MultiByte )
- //{
- // m_t << getMultiByte( c );
- // MultiByte = FALSE;
- // continue;
- //}
- //if ( c >= 0x80 )
- //{
- // MultiByte = TRUE;
- // m_t << getMultiByte( c );
- // continue;
- //}
-
- switch (c)
- {
- case '{': m_t << "\\{"; break;
- case '}': m_t << "\\}"; break;
- case '\\': m_t << "\\\\"; break;
- case '\n': if (verbatim)
- {
- m_t << "\\par" << endl;
- }
- else
- {
- m_t << '\n';
- }
- break;
- default: m_t << (char)c;
- }
- pc = c;
- }
- }
-}
-
-void RTFDocVisitor::startLink(const QCString &ref,const QCString &file,const QCString &anchor)
-{
- if (ref.isEmpty() && Config_getBool("RTF_HYPERLINKS"))
- {
- QCString refName;
- if (!file.isEmpty())
- {
- refName+=file;
- }
- if (!file.isEmpty() && anchor)
- {
- refName+='_';
- }
- if (anchor)
- {
- refName+=anchor;
- }
-
- m_t << "{\\field {\\*\\fldinst { HYPERLINK \\\\l \"";
- m_t << rtfFormatBmkStr(refName);
- m_t << "\" }{}";
- m_t << "}{\\fldrslt {\\cs37\\ul\\cf2 ";
- }
- else
- {
- m_t << "{\\b ";
- }
- m_lastIsPara=FALSE;
-}
-
-void RTFDocVisitor::endLink(const QCString &ref)
-{
- if (ref.isEmpty() && Config_getBool("RTF_HYPERLINKS"))
- {
- m_t << "}}}";
- }
- else
- {
- m_t << "}";
- }
- m_lastIsPara=FALSE;
-}
-
-void RTFDocVisitor::pushEnabled()
-{
- m_enabled.push(new bool(m_hide));
-}
-
-void RTFDocVisitor::popEnabled()
-{
- bool *v=m_enabled.pop();
- ASSERT(v!=0);
- m_hide = *v;
- delete v;
-}
-
-void RTFDocVisitor::writeDotFile(const QCString &fileName)
-{
- QCString baseName=fileName;
- int i;
- if ((i=baseName.findRev('/'))!=-1)
- {
- baseName=baseName.right(baseName.length()-i-1);
- }
- QCString outDir = Config_getString("RTF_OUTPUT");
- writeDotGraphFromFile(fileName,outDir,baseName,BITMAP);
- if (!m_lastIsPara) m_t << "\\par" << endl;
- m_t << "{" << endl;
- m_t << rtf_Style_Reset;
- m_t << "\\pard \\qc {\\field\\flddirty {\\*\\fldinst INCLUDEPICTURE \"";
- m_t << baseName << "." << Config_getEnum("DOT_IMAGE_FORMAT");
- m_t << "\" \\\\d \\\\*MERGEFORMAT}{\\fldrslt IMAGE}}\\par" << endl;
- m_t << "}" << endl;
- m_lastIsPara=TRUE;
-}
-
-void RTFDocVisitor::writeMscFile(const QCString &fileName)
-{
- QCString baseName=fileName;
- int i;
- if ((i=baseName.findRev('/'))!=-1)
- {
- baseName=baseName.right(baseName.length()-i-1);
- }
- QCString outDir = Config_getString("RTF_OUTPUT");
- writeMscGraphFromFile(fileName+".msc",outDir,baseName,MSC_BITMAP);
- if (!m_lastIsPara) m_t << "\\par" << endl;
- m_t << "{" << endl;
- m_t << rtf_Style_Reset;
- m_t << "\\pard \\qc {\\field\\flddirty {\\*\\fldinst INCLUDEPICTURE \"";
- m_t << baseName << ".png";
- m_t << "\" \\\\d \\\\*MERGEFORMAT}{\\fldrslt IMAGE}}\\par" << endl;
- m_t << "}" << endl;
- m_lastIsPara=TRUE;
-}
-
diff --git a/trunk/src/rtfdocvisitor.h b/trunk/src/rtfdocvisitor.h
deleted file mode 100644
index 2e35b3b..0000000
--- a/trunk/src/rtfdocvisitor.h
+++ /dev/null
@@ -1,166 +0,0 @@
-/******************************************************************************
- *
- *
- *
- *
- * Copyright (C) 1997-2012 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.
- *
- */
-
-#ifndef _RTFDOCVISITOR_H
-#define _RTFDOCVISITOR_H
-
-#include "docvisitor.h"
-#include <qstack.h>
-#include <qcstring.h>
-
-class FTextStream;
-class CodeOutputInterface;
-
-/*! @brief Concrete visitor implementation for RTF output. */
-class RTFDocVisitor : public DocVisitor
-{
- public:
- RTFDocVisitor(FTextStream &t,CodeOutputInterface &ci,const char *langExt);
-
- //--------------------------------------
- // visitor functions for leaf nodes
- //--------------------------------------
-
- void visit(DocWord *);
- void visit(DocLinkedWord *);
- void visit(DocWhiteSpace *);
- void visit(DocSymbol *);
- void visit(DocURL *);
- void visit(DocLineBreak *);
- void visit(DocHorRuler *);
- void visit(DocStyleChange *);
- void visit(DocVerbatim *);
- void visit(DocAnchor *);
- void visit(DocInclude *);
- void visit(DocIncOperator *);
- void visit(DocFormula *);
- void visit(DocIndexEntry *);
- void visit(DocSimpleSectSep *);
- void visit(DocCite *);
-
- //--------------------------------------
- // visitor functions for compound nodes
- //--------------------------------------
-
- void visitPre(DocAutoList *);
- void visitPost(DocAutoList *);
- void visitPre(DocAutoListItem *);
- void visitPost(DocAutoListItem *);
- void visitPre(DocPara *);
- void visitPost(DocPara *);
- void visitPre(DocRoot *);
- void visitPost(DocRoot *);
- void visitPre(DocSimpleSect *);
- void visitPost(DocSimpleSect *);
- void visitPre(DocTitle *);
- void visitPost(DocTitle *);
- void visitPre(DocSimpleList *);
- void visitPost(DocSimpleList *);
- void visitPre(DocSimpleListItem *);
- void visitPost(DocSimpleListItem *);
- void visitPre(DocSection *s);
- void visitPost(DocSection *);
- void visitPre(DocHtmlList *s);
- void visitPost(DocHtmlList *s);
- void visitPre(DocHtmlListItem *);
- void visitPost(DocHtmlListItem *);
- //void visitPre(DocHtmlPre *);
- //void visitPost(DocHtmlPre *);
- void visitPre(DocHtmlDescList *);
- void visitPost(DocHtmlDescList *);
- void visitPre(DocHtmlDescTitle *);
- void visitPost(DocHtmlDescTitle *);
- void visitPre(DocHtmlDescData *);
- void visitPost(DocHtmlDescData *);
- void visitPre(DocHtmlTable *t);
- void visitPost(DocHtmlTable *t);
- void visitPre(DocHtmlCaption *);
- void visitPost(DocHtmlCaption *);
- void visitPre(DocHtmlRow *);
- void visitPost(DocHtmlRow *) ;
- void visitPre(DocHtmlCell *);
- void visitPost(DocHtmlCell *);
- void visitPre(DocInternal *);
- void visitPost(DocInternal *);
- void visitPre(DocHRef *);
- void visitPost(DocHRef *);
- void visitPre(DocHtmlHeader *);
- void visitPost(DocHtmlHeader *) ;
- void visitPre(DocImage *);
- void visitPost(DocImage *);
- void visitPre(DocDotFile *);
- void visitPost(DocDotFile *);
- void visitPre(DocMscFile *);
- void visitPost(DocMscFile *);
- void visitPre(DocLink *);
- void visitPost(DocLink *);
- void visitPre(DocRef *ref);
- void visitPost(DocRef *);
- void visitPre(DocSecRefItem *);
- void visitPost(DocSecRefItem *);
- void visitPre(DocSecRefList *);
- void visitPost(DocSecRefList *);
- void visitPre(DocParamSect *);
- void visitPost(DocParamSect *);
- void visitPre(DocParamList *);
- void visitPost(DocParamList *);
- void visitPre(DocXRefItem *);
- void visitPost(DocXRefItem *);
- void visitPre(DocInternalRef *);
- void visitPost(DocInternalRef *);
- void visitPre(DocCopy *);
- void visitPost(DocCopy *);
- void visitPre(DocText *);
- void visitPost(DocText *);
- void visitPre(DocHtmlBlockQuote *);
- void visitPost(DocHtmlBlockQuote *);
-
- private:
-
- //--------------------------------------
- // helper functions
- //--------------------------------------
-
- void filter(const char *str,bool verbatim=FALSE);
- void startLink(const QCString &ref,const QCString &file,
- const QCString &anchor);
- void endLink(const QCString &ref);
- QCString getStyle(const char *name);
- void incIndentLevel();
- void decIndentLevel();
-
- void pushEnabled();
- void popEnabled();
- void writeDotFile(const QCString &fileName);
- void writeMscFile(const QCString &fileName);
-
- //--------------------------------------
- // state variables
- //--------------------------------------
-
- FTextStream &m_t;
- CodeOutputInterface &m_ci;
- bool m_insidePre;
- bool m_hide;
- int m_indentLevel;
- QStack<bool> m_enabled;
- bool m_lastIsPara;
- QCString m_langExt;
-};
-
-#endif
diff --git a/trunk/src/rtfgen.cpp b/trunk/src/rtfgen.cpp
deleted file mode 100644
index 90d6e4c..0000000
--- a/trunk/src/rtfgen.cpp
+++ /dev/null
@@ -1,2931 +0,0 @@
-/******************************************************************************
- *
- *
- *
- * Copyright (C) 1997-2012 by Parker Waechter & Dimitri van Heesch.
- *
- * Style sheet additions by Alexander Bartolich
- *
- * 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.
- *
- */
-
-#include <stdlib.h>
-
-#include "qtbc.h"
-#include <qdir.h>
-#include <qregexp.h>
-
-#include "rtfgen.h"
-#include "config.h"
-#include "message.h"
-#include "doxygen.h"
-#include "util.h"
-#include "diagram.h"
-#include "language.h"
-#include "dot.h"
-#include "version.h"
-#include "pagedef.h"
-#include "rtfstyle.h"
-#include "rtfdocvisitor.h"
-#include "docparser.h"
-#include "dirdef.h"
-#include "vhdldocgen.h"
-#include "portable.h"
-
-//#define DBG_RTF(x) x;
-#define DBG_RTF(x)
-
-static QCString dateToRTFDateString()
-{
- const QDateTime &d = QDateTime::currentDateTime();
- QCString result;
- result.sprintf("\\yr%d\\mo%d\\dy%d\\hr%d\\min%d\\sec%d",
- d.date().year(), d.date().month(), d.date().day(),
- d.time().hour(),d.time().minute(),d.time().second());
- return result;
-}
-
-RTFGenerator::RTFGenerator() : OutputGenerator()
-{
- dir=Config_getString("RTF_OUTPUT");
- col=0;
- //insideTabbing=FALSE;
- m_listLevel = 0;
- m_bstartedBody = FALSE;
- m_omitParagraph = FALSE;
- m_numCols = 0;
-}
-
-RTFGenerator::~RTFGenerator()
-{
-}
-
-//void RTFGenerator::append(const OutputGenerator *g)
-//{
-// t << g->getContents();
-// col+=((RTFGenerator *)g)->col;
-// //insideTabbing=insideTabbing || ((RTFGenerator *)g)->insideTabbing;
-// m_listLevel=((RTFGenerator *)g)->m_listLevel;
-// m_omitParagraph=((RTFGenerator *)g)->m_omitParagraph;
-// //printf("RTFGenerator::append(%s) insideTabbing=%s\n", g->getContents().data(),
-// // insideTabbing ? "TRUE" : "FALSE" );
-//}
-
-//OutputGenerator *RTFGenerator::copy()
-//{
-// RTFGenerator *result = new RTFGenerator;
-// //result->insideTabbing=insideTabbing;
-// result->m_listLevel=m_listLevel;
-// result->m_omitParagraph=m_omitParagraph;
-// return result;
-//}
-
-void RTFGenerator::writeStyleSheetFile(QFile &file)
-{
- QTextStream t(&file);
- t << "# Generated by doxygen " << versionString << "\n\n";
- t << "# This file describes styles used for generating RTF output.\n";
- t << "# All text after a hash (#) is considered a comment and will be ignored.\n";
- t << "# Remove a hash to activate a line.\n\n";
-
- int i;
- for ( i=0 ; rtf_Style_Default[i].reference!=0 ; i++ )
- {
- t << "# " << rtf_Style_Default[i].name << " = "
- << rtf_Style_Default[i].reference
- << rtf_Style_Default[i].definition << endl;
- }
-}
-
-void RTFGenerator::writeExtensionsFile(QFile &file)
-{
- QTextStream t(&file);
- t << "# Generated by doxygen " << versionString << "\n\n";
- t << "# This file describes extensions used for generating RTF output.\n";
- t << "# All text after a hash (#) is considered a comment and will be ignored.\n";
- t << "# Remove a hash to activate a line.\n\n";
-
- t << "# Overrides the project title.\n";
-
- t << "#Title = \n\n";
-
- t << "# Name of the company that produced this document.\n";
- t << "#Company = \n\n";
-
- t << "# Filename of a company or project logo.\n";
- t << "#LogoFilename = \n\n";
-
- t << "# Author of the document.\n";
- t << "#Author = \n\n";
-
- t << "# Type of document (e.g. Design Specification, User Manual, etc.).\n";
- t << "#DocumentType = \n\n";
-
- t << "# Document tracking number.\n";
- t << "#DocumentId = \n\n";
-
- t << "# Name of the author's manager.\n";
- t << "# This field is not displayed in the document itself, but it is \n";
- t << "# available in the information block of the rtf file. In Microsoft \n";
- t << "# Word, it is available under File:Properties.\n";
- t << "#Manager = \n\n";
-
- t << "# Subject of the document.\n";
- t << "# This field is not displayed in the document itself, but it is \n";
- t << "# available in the information block of the rtf file. In Microsoft \n";
- t << "# Word, it is available under File:Properties.\n";
- t << "#Subject = \n\n";
-
- t << "# Comments regarding the document.\n";
- t << "# This field is not displayed in the document itself, but it is \n";
- t << "# available in the information block of the rtf file. In Microsoft \n";
- t << "# Word, it is available under File:Properties.\n";
- t << "#Comments = \n\n";
-
- t << "# Keywords associated with the document.\n";
- t << "# This field is not displayed in the document itself, but it is \n";
- t << "# available in the information block of the rtf file. In Microsoft \n";
- t << "# Word, it is available under File:Properties.\n";
- t << "#Keywords = \n\n";
-}
-
-
-void RTFGenerator::init()
-{
- QCString dir=Config_getString("RTF_OUTPUT");
- QDir d(dir);
- if (!d.exists() && !d.mkdir(dir))
- {
- err("Could not create output directory %s\n",dir.data());
- exit(1);
- }
- rtf_Style.setAutoDelete(TRUE);
-
- // first duplicate strings of rtf_Style_Default
- const struct Rtf_Style_Default* def = rtf_Style_Default;
- while(def->reference != 0)
- {
- if (def->definition == 0)
- err("Internal error: rtf_Style_Default[%s] has no definition.\n", def->name);
- StyleData* styleData = new StyleData(def->reference, def->definition);
- rtf_Style.insert(def->name, styleData);
- def++;
- }
-
- // overwrite some (or all) definitions from file
- QCString &rtfStyleSheetFile = Config_getString("RTF_STYLESHEET_FILE");
- if (!rtfStyleSheetFile.isEmpty())
- {
- loadStylesheet(rtfStyleSheetFile, rtf_Style);
- }
-
- // If user has defined an extension file, load its contents.
- QCString &rtfExtensionsFile = Config_getString("RTF_EXTENSIONS_FILE");
- if (!rtfExtensionsFile.isEmpty())
- {
- loadExtensions(rtfExtensionsFile);
- }
-
- createSubDirs(d);
-}
-
-static QCString makeIndexName(const char *s,int i)
-{
- QCString result=s;
- result+=(char)(i+'0');
- return result;
-}
-
-void RTFGenerator::beginRTFDocument()
-{
- /* all the included RTF files should begin with the
- * same header
- */
- t <<"{\\rtf1\\ansi\\ansicpg" << theTranslator->trRTFansicp();
- t <<"\\uc1 \\deff0\\deflang1033\\deflangfe1033\n";
-
- DBG_RTF(t <<"{\\comment Begining font list}\n")
- t <<"{\\fonttbl ";
- t <<"{\\f0\\froman\\fcharset" << theTranslator->trRTFCharSet();
- t <<"\\fprq2{\\*\\panose 02020603050405020304}Times New Roman;}\n";
- t <<"{\\f1\\fswiss\\fcharset" << theTranslator->trRTFCharSet();
- t <<"\\fprq2{\\*\\panose 020b0604020202020204}Arial;}\n";
- t <<"{\\f2\\fmodern\\fcharset" << theTranslator->trRTFCharSet();
- t <<"\\fprq1{\\*\\panose 02070309020205020404}Courier New;}\n";
- t <<"{\\f3\\froman\\fcharset2\\fprq2{\\*\\panose 05050102010706020507}Symbol;}\n";
- t <<"}\n";
- DBG_RTF(t <<"{\\comment begin colors}\n")
- t <<"{\\colortbl;";
- t <<"\\red0\\green0\\blue0;";
- t <<"\\red0\\green0\\blue255;";
- t <<"\\red0\\green255\\blue255;";
- t <<"\\red0\\green255\\blue0;";
- t <<"\\red255\\green0\\blue255;";
- t <<"\\red255\\green0\\blue0;";
- t <<"\\red255\\green255\\blue0;";
- t <<"\\red255\\green255\\blue255;";
- t <<"\\red0\\green0\\blue128;";
- t <<"\\red0\\green128\\blue128;";
- t <<"\\red0\\green128\\blue0;";
- t <<"\\red128\\green0\\blue128;";
- t <<"\\red128\\green0\\blue0;";
- t <<"\\red128\\green128\\blue0;";
- t <<"\\red128\\green128\\blue128;";
- t <<"\\red192\\green192\\blue192;}" << endl;
-
- DBG_RTF(t <<"{\\comment Beginning style list}\n")
- t <<"{\\stylesheet\n";
- t <<"{\\widctlpar\\adjustright \\fs20\\cgrid \\snext0 Normal;}\n";
-
- // sort styles ascending by \s-number via an intermediate QArray
- QArray<const StyleData*> array(128);
- array.fill(0);
- QDictIterator<StyleData> iter(rtf_Style);
- const StyleData* style;
- for(; (style = iter.current()); ++iter)
- {
- unsigned index = style->index;
- unsigned size = array.size();
- if (index >= size)
- {
- // +1 to add at least one element, then align up to multiple of 8
- array.resize((index + 1 + 7) & ~7);
- array.fill(0, size);
- ASSERT(index < array.size());
- }
- if (array.at(index) != 0)
- {
- QCString key(convertToQCString(iter.currentKey()));
- msg("Style '%s' redefines \\s%d.\n", key.data(), index);
- }
- array.at(index) = style;
- }
-
- // write array elements
- unsigned size = array.size();
- for(unsigned i = 0; i < size; i++)
- {
- const StyleData* style = array.at(i);
- if (style != 0)
- t <<"{" << style->reference << style->definition << ";}\n";
- }
-
- t <<"}" << endl;
- // this comment is needed for postprocessing!
- t <<"{\\comment begin body}" << endl;
-
-}
-
-void RTFGenerator::beginRTFChapter()
-{
- t <<"\n";
- DBG_RTF(t << "{\\comment BeginRTFChapter}\n")
- t << rtf_Style_Reset;
-
- // if we are compact, no extra page breaks...
- if (Config_getBool("COMPACT_RTF"))
- {
- // t <<"\\sect\\sectd\\sbknone\n";
- t <<"\\sect\\sbknone\n";
- rtfwriteRuler_thick();
- }
- else
- t <<"\\sect\\sbkpage\n";
- //t <<"\\sect\\sectd\\sbkpage\n";
-
- t << rtf_Style["Heading1"]->reference << "\n";
-}
-
-void RTFGenerator::beginRTFSection()
-{
- t <<"\n";
- DBG_RTF(t << "{\\comment BeginRTFSection}\n")
- t << rtf_Style_Reset;
-
- // if we are compact, no extra page breaks...
- if (Config_getBool("COMPACT_RTF"))
- {
- // t <<"\\sect\\sectd\\sbknone\n";
- t <<"\\sect\\sbknone\n";
- rtfwriteRuler_emboss();
- }
- else
- t <<"\\sect\\sbkpage\n";
- //t <<"\\sect\\sectd\\sbkpage\n";
-
- t << rtf_Style["Heading2"]->reference << "\n";
-}
-
-void RTFGenerator::startFile(const char *name,const char *,const char *)
-{
- //setEncoding(QCString().sprintf("CP%s",theTranslator->trRTFansicp()));
- QCString fileName=name;
- relPath = relativePathToRoot(fileName);
-
- if (fileName.right(4)!=".rtf" ) fileName+=".rtf";
- startPlainFile(fileName);
- beginRTFDocument();
-}
-
-void RTFGenerator::endFile()
-{
- DBG_RTF(t << "{\\comment endFile}\n")
- t << "}";
-
- endPlainFile();
-}
-
-void RTFGenerator::startProjectNumber()
-{
- DBG_RTF(t <<"{\\comment startProjectNumber }" << endl)
- t << " ";
-}
-
-void RTFGenerator::endProjectNumber()
-{
- DBG_RTF(t <<"{\\comment endProjectNumber }" << endl)
-}
-
-void RTFGenerator::startIndexSection(IndexSections is)
-{
- //QCString paperName;
-
- m_listLevel = 0;
-
- switch (is)
- {
- case isTitlePageStart:
- // basic RTFstart
- // get readyfor author etc
-
- t << "{\\info \n";
- t << "{\\title {\\comment ";
- break;
- case isTitlePageAuthor:
- t << "}\n";
- if (rtf_subject) t << "{\\subject " << rtf_subject << "}\n";
- if (rtf_comments) t << "{\\comment " << rtf_comments << "}\n";
- if (rtf_company) t << "{\\company " << rtf_company << "}\n";
- if (rtf_author) t << "{\\author " << rtf_author << "}\n";
- if (rtf_manager) t << "{\\manager " << rtf_manager << "}\n";
- if (rtf_documentType) t << "{\\category " << rtf_documentType << "}\n";
- if (rtf_keywords) t << "{\\keywords " << rtf_keywords << "}\n";
- t << "{\\comment ";
- break;
- case isMainPage:
- //Introduction
- beginRTFChapter();
- break;
- //case isPackageIndex:
- // //Package Index
- // beginRTFChapter();
- // break;
- case isModuleIndex:
- //Module Index
- beginRTFChapter();
- break;
- case isDirIndex:
- //Directory Index
- beginRTFChapter();
- break;
- case isNamespaceIndex:
- //Namespace Index
- beginRTFChapter();
- break;
- case isClassHierarchyIndex:
- //Hierarchical Index
- DBG_RTF(t << "{\\comment start classhierarchy}\n")
- beginRTFChapter();
- break;
- case isCompoundIndex:
- //Annotated Compound Index
- beginRTFChapter();
- break;
- case isFileIndex:
- //Annotated File Index
- beginRTFChapter();
- break;
- case isPageIndex:
- //Related Page Index
- beginRTFChapter();
- break;
- case isModuleDocumentation:
- {
- //Module Documentation
- GroupSDict::Iterator gli(*Doxygen::groupSDict);
- GroupDef *gd;
- bool found=FALSE;
- for (gli.toFirst();(gd=gli.current()) && !found;++gli)
- {
- if (!gd->isReference())
- {
- beginRTFChapter();
- found=TRUE;
- }
- }
- }
- break;
- case isDirDocumentation:
- {
- //Directory Documentation
- SDict<DirDef>::Iterator dli(*Doxygen::directories);
- DirDef *dd;
- bool found=FALSE;
- for (dli.toFirst();(dd=dli.current()) && !found;++dli)
- {
- if (dd->isLinkableInProject())
- {
- beginRTFChapter();
- found=TRUE;
- }
- }
- }
- break;
- case isNamespaceDocumentation:
- {
- // Namespace Documentation
- NamespaceSDict::Iterator nli(*Doxygen::namespaceSDict);
- NamespaceDef *nd;
- bool found=FALSE;
- for (nli.toFirst();(nd=nli.current()) && !found;++nli)
- {
- if (nd->isLinkableInProject())
- {
- beginRTFChapter();
- found=TRUE;
- }
- }
- }
- break;
- case isClassDocumentation:
- {
- //Compound Documentation
- ClassSDict::Iterator cli(*Doxygen::classSDict);
- ClassDef *cd=0;
- bool found=FALSE;
- for (cli.toFirst();(cd=cli.current()) && !found;++cli)
- {
- if (cd->isLinkableInProject() &&
- cd->templateMaster()==0 &&
- !cd->isEmbeddedInOuterScope()
- )
- {
- beginRTFChapter();
- found=TRUE;
- }
- }
- }
- break;
- case isFileDocumentation:
- {
- //File Documentation
- bool isFirst=TRUE;
- FileName *fn=Doxygen::inputNameList->first();
- while (fn)
- {
- FileDef *fd=fn->first();
- while (fd)
- {
- if (fd->isLinkableInProject())
- {
- if (isFirst)
- {
- beginRTFChapter();
- isFirst=FALSE;
- break;
- }
- }
- fd=fn->next();
- }
- fn=Doxygen::inputNameList->next();
- }
- }
- break;
- case isExampleDocumentation:
- {
- //Example Documentation
- beginRTFChapter();
- }
- break;
- case isPageDocumentation:
- {
- //Page Documentation
- beginRTFChapter();
- }
- break;
- case isPageDocumentation2:
- {
- t << "{\\tc \\v ";
- }
- break;
- case isEndIndex:
- break;
- }
-}
-
-void RTFGenerator::endIndexSection(IndexSections is)
-{
- bool fortranOpt = Config_getBool("OPTIMIZE_FOR_FORTRAN");
- bool vhdlOpt = Config_getBool("OPTIMIZE_OUTPUT_VHDL");
- switch (is)
- {
- case isTitlePageStart:
- if (rtf_title)
- // User has overridden document title in extensions file
- t << "}" << rtf_title;
- else
- t << "}" << Config_getString("PROJECT_NAME");
- break;
- case isTitlePageAuthor:
- {
- t << "Doxgyen. }\n";
- t << "{\\creatim " << dateToRTFDateString() << "}\n}";
- DBG_RTF(t << "{\\comment end of infoblock}\n");
- // setup for this section
- t << rtf_Style_Reset <<"\n";
- t <<"\\sectd\\pgnlcrm\n";
- t <<"{\\footer "<<rtf_Style["Footer"]->reference << "{\\chpgn}}\n";
- // the title entry
- DBG_RTF(t << "{\\comment begin title page}\n")
-
-
- t << rtf_Style_Reset << rtf_Style["SubTitle"]->reference << endl; // set to title style
-
- t << "\\vertalc\\qc\\par\\par\\par\\par\\par\\par\\par\n";
- if (rtf_logoFilename)
- {
- t << "{\\field\\flddirty {\\*\\fldinst INCLUDEPICTURE \"" << rtf_logoFilename;
- t << "\" \\\\d \\\\*MERGEFORMAT} {\\fldrslt IMAGE }}\\par\\par\n";
- }
- if (rtf_company)
- {
- t << rtf_company << "\\par\\par\n";
- }
-
- t << rtf_Style_Reset << rtf_Style["Title"]->reference << endl; // set to title style
- t << "{\\field\\fldedit {\\*\\fldinst TITLE \\\\*MERGEFORMAT}{\\fldrslt TITLE}}\\par" << endl;
-
- t << rtf_Style_Reset << rtf_Style["SubTitle"]->reference << endl; // set to title style
- t << "\\par\n";
- if (rtf_documentType)
- {
- t << rtf_documentType << "\\par\n";
- }
- if (rtf_documentId)
- {
- t << rtf_documentId << "\\par\n";
- }
- t << "\\par\\par\\par\\par\\par\\par\\par\\par\\par\\par\\par\\par\n";
-
- t << rtf_Style_Reset << rtf_Style["SubTitle"]->reference << endl; // set to subtitle style
- t << "{\\field\\fldedit {\\*\\fldinst AUTHOR \\\\*MERGEFORMAT}{\\fldrslt AUTHOR}}\\par" << endl;
- t << "Version " << Config_getString("PROJECT_NUMBER") << "\\par";
- t << "{\\field\\fldedit {\\*\\fldinst CREATEDATE \\\\*MERGEFORMAT}"
- "{\\fldrslt CREATEDATE}}\\par"<<endl;
- t << "\\page\\page";
- DBG_RTF(t << "{\\comment End title page}" << endl)
-
- // table of contents section
- DBG_RTF(t << "{\\comment Table of contents}\n")
- t << "\\vertalt\n";
- t << rtf_Style_Reset << endl;
- t << rtf_Style["Heading1"]->reference;
- t << theTranslator->trRTFTableOfContents() << "\\par"<< endl;
- t << rtf_Style_Reset << "\\par" << endl;
- t << "{\\field\\fldedit {\\*\\fldinst TOC \\\\f \\\\*MERGEFORMAT}{\\fldrslt Table of contents}}\\par\n";
- t << rtf_Style_Reset << endl;
- }
- break;
- case isMainPage:
- t << "\\par " << rtf_Style_Reset << endl;
- if (!Doxygen::mainPage || Doxygen::mainPage->title().isEmpty())
- {
- t << "{\\tc \\v " << theTranslator->trMainPage() << "}"<< endl;
- }
- else
- {
- t << "{\\tc \\v " << substitute(Doxygen::mainPage->title(),"%","") << "}"<< endl;
- }
- t << "{\\field\\fldedit{\\*\\fldinst INCLUDETEXT \"";
- //if (Config_getBool("GENERATE_TREEVIEW")) t << "main"; else t << "index";
- t << "index";
- t << ".rtf\" \\\\*MERGEFORMAT}{\\fldrslt includedstuff}}\n";
- break;
- //case isPackageIndex:
- // t << "\\par " << rtf_Style_Reset << endl;
- // t << "{\\tc \\v " << theTranslator->trPackageList() << "}"<< endl;
- // t << "{\\field\\fldedit{\\*\\fldinst INCLUDETEXT \"packages.rtf\" \\\\*MERGEFORMAT}{\\fldrslt includedstuff}}\n";
- // break;
- case isModuleIndex:
- t << "\\par " << rtf_Style_Reset << endl;
- t << "{\\tc \\v " << theTranslator->trModuleIndex() << "}"<< endl;
- t << "{\\field\\fldedit{\\*\\fldinst INCLUDETEXT \"modules.rtf\" \\\\*MERGEFORMAT}{\\fldrslt includedstuff}}\n";
- break;
- case isDirIndex:
- t << "\\par " << rtf_Style_Reset << endl;
- t << "{\\tc \\v " << theTranslator->trDirIndex() << "}"<< endl;
- t << "{\\field\\fldedit{\\*\\fldinst INCLUDETEXT \"dirs.rtf\" \\\\*MERGEFORMAT}{\\fldrslt includedstuff}}\n";
- break;
- case isNamespaceIndex:
- t << "\\par " << rtf_Style_Reset << endl;
- if (fortranOpt)
- {
- t << "{\\tc \\v " << theTranslator->trModulesIndex() << "}" << endl;
- }
- else
- {
- t << "{\\tc \\v " << theTranslator->trNamespaceIndex() << "}" << endl;
- }
-
- t << "{\\field\\fldedit{\\*\\fldinst INCLUDETEXT \"namespaces.rtf\" \\\\*MERGEFORMAT}{\\fldrslt includedstuff}}\n";
- break;
- case isClassHierarchyIndex:
- t << "\\par " << rtf_Style_Reset << endl;
- t << "{\\tc \\v " << theTranslator->trHierarchicalIndex() << "}"<< endl;
- t << "{\\field\\fldedit{\\*\\fldinst INCLUDETEXT \"hierarchy.rtf\" \\\\*MERGEFORMAT}{\\fldrslt includedstuff}}\n";
- break;
- case isCompoundIndex:
- t << "\\par " << rtf_Style_Reset << endl;
- if (fortranOpt)
- {
- t << "{\\tc \\v " << theTranslator->trCompoundIndexFortran() << "}"<< endl;
- }
- else if (vhdlOpt)
- {
- t << "{\\tc \\v " << VhdlDocGen::trDesignUnitIndex() << "}"<< endl;
- }
- else
- {
- t << "{\\tc \\v " << theTranslator->trCompoundIndex() << "}"<< endl;
- }
- t << "{\\field\\fldedit{\\*\\fldinst INCLUDETEXT \"annotated.rtf\" \\\\*MERGEFORMAT}{\\fldrslt includedstuff}}\n";
- break;
- case isFileIndex:
- t << "\\par " << rtf_Style_Reset << endl;
- t << "{\\tc \\v " << theTranslator->trFileIndex() << "}"<< endl;
- t << "{\\field\\fldedit{\\*\\fldinst INCLUDETEXT \"files.rtf\" \\\\*MERGEFORMAT}{\\fldrslt includedstuff}}\n";
- break;
- case isPageIndex:
- t << "\\par " << rtf_Style_Reset << endl;
- t << "{\\tc \\v " << theTranslator->trPageIndex() << "}"<< endl;
- t << "{\\field\\fldedit{\\*\\fldinst INCLUDETEXT \"pages.rtf\" \\\\*MERGEFORMAT}{\\fldrslt includedstuff}}\n";
- break;
- case isModuleDocumentation:
- {
- GroupSDict::Iterator gli(*Doxygen::groupSDict);
- GroupDef *gd;
- t << "{\\tc \\v " << theTranslator->trModuleDocumentation() << "}"<< endl;
- for (gli.toFirst();(gd=gli.current());++gli)
- {
- if (!gd->isReference())
- {
- t << "\\par " << rtf_Style_Reset << endl;
- t << "{\\field\\fldedit{\\*\\fldinst INCLUDETEXT \"";
- t << gd->getOutputFileBase();
- t << ".rtf\" \\\\*MERGEFORMAT}{\\fldrslt includedstuff}}\n";
- }
- }
- }
- break;
- case isDirDocumentation:
- {
- SDict<DirDef>::Iterator dli(*Doxygen::directories);
- DirDef *dd;
- t << "{\\tc \\v " << theTranslator->trDirDocumentation() << "}"<< endl;
- for (dli.toFirst();(dd=dli.current());++dli)
- {
- if (dd->isLinkableInProject())
- {
- t << "\\par " << rtf_Style_Reset << endl;
- t << "{\\field\\fldedit{\\*\\fldinst INCLUDETEXT \"";
- t << dd->getOutputFileBase();
- t << ".rtf\" \\\\*MERGEFORMAT}{\\fldrslt includedstuff}}\n";
- }
- }
- }
- break;
- case isNamespaceDocumentation:
- {
- NamespaceSDict::Iterator nli(*Doxygen::namespaceSDict);
- NamespaceDef *nd;
- bool found=FALSE;
- for (nli.toFirst();(nd=nli.current()) && !found;++nli)
- {
- if (nd->isLinkableInProject())
- {
- t << "\\par " << rtf_Style_Reset << endl;
- t << "{\\field\\fldedit{\\*\\fldinst INCLUDETEXT \"";
- t << nd->getOutputFileBase();
- t << ".rtf\" \\\\*MERGEFORMAT}{\\fldrslt includedstuff}}\n";
- found=TRUE;
- }
- }
- while ((nd=nli.current()))
- {
- if (nd->isLinkableInProject())
- {
- t << "\\par " << rtf_Style_Reset << endl;
- beginRTFSection();
- t << "{\\field\\fldedit{\\*\\fldinst INCLUDETEXT \"";
- t << nd->getOutputFileBase();
- t << ".rtf\" \\\\*MERGEFORMAT}{\\fldrslt includedstuff}}\n";
- }
- ++nli;
- }
- }
- break;
- case isClassDocumentation:
- {
- ClassSDict::Iterator cli(*Doxygen::classSDict);
- ClassDef *cd=0;
- bool found=FALSE;
- if (fortranOpt)
- {
- t << "{\\tc \\v " << theTranslator->trTypeDocumentation() << "}"<< endl;
- }
- else
- {
- t << "{\\tc \\v " << theTranslator->trClassDocumentation() << "}"<< endl;
- }
- for (cli.toFirst();(cd=cli.current()) && !found;++cli)
- {
- if (cd->isLinkableInProject() &&
- cd->templateMaster()==0 &&
- !cd->isEmbeddedInOuterScope()
- )
- {
- t << "\\par " << rtf_Style_Reset << endl;
- t << "{\\field\\fldedit{\\*\\fldinst INCLUDETEXT \"";
- t << cd->getOutputFileBase();
- t << ".rtf\" \\\\*MERGEFORMAT}{\\fldrslt includedstuff}}\n";
- found=TRUE;
- }
- }
- for (;(cd=cli.current());++cli)
- {
- if (cd->isLinkableInProject() &&
- cd->templateMaster()==0 &&
- !cd->isEmbeddedInOuterScope()
- )
- {
- t << "\\par " << rtf_Style_Reset << endl;
- beginRTFSection();
- t << "{\\field\\fldedit{\\*\\fldinst INCLUDETEXT \"";
- t << cd->getOutputFileBase();
- t << ".rtf\" \\\\*MERGEFORMAT}{\\fldrslt includedstuff}}\n";
- }
- }
- }
- break;
- case isFileDocumentation:
- {
- bool isFirst=TRUE;
- FileName *fn=Doxygen::inputNameList->first();
-
- t << "{\\tc \\v " << theTranslator->trFileDocumentation() << "}"<< endl;
- while (fn)
- {
- FileDef *fd=fn->first();
- while (fd)
- {
- if (fd->isLinkableInProject())
- {
- if (isFirst)
- {
- t << "\\par " << rtf_Style_Reset << endl;
- t << "{\\field\\fldedit{\\*\\fldinst INCLUDETEXT \"";
- t << fd->getOutputFileBase();
- t << ".rtf\" \\\\*MERGEFORMAT}{\\fldrslt includedstuff}}\n";
- isFirst=FALSE;
- }
- else
- {
- t << "\\par " << rtf_Style_Reset << endl;
- beginRTFSection();
- t << "{\\field\\fldedit{\\*\\fldinst INCLUDETEXT \"";
- t << fd->getOutputFileBase();
- t << ".rtf\" \\\\*MERGEFORMAT}{\\fldrslt includedstuff}}\n";
- }
- }
- fd=fn->next();
- }
- fn=Doxygen::inputNameList->next();
- }
- }
- break;
- case isExampleDocumentation:
- {
- //t << "}\n";
- t << "{\\tc \\v " << theTranslator->trExampleDocumentation() << "}"<< endl;
- PageSDict::Iterator pdi(*Doxygen::exampleSDict);
- PageDef *pd=pdi.toFirst();
- if (pd)
- {
- t << "\\par " << rtf_Style_Reset << endl;
- t << "{\\field\\fldedit{\\*\\fldinst INCLUDETEXT \"";
- t << pd->getOutputFileBase();
- t << ".rtf\" \\\\*MERGEFORMAT}{\\fldrslt includedstuff}}\n";
- }
- for (++pdi;(pd=pdi.current());++pdi)
- {
- t << "\\par " << rtf_Style_Reset << endl;
- beginRTFSection();
- t << "{\\field\\fldedit{\\*\\fldinst INCLUDETEXT \"";
- t << pd->getOutputFileBase();
- t << ".rtf\" \\\\*MERGEFORMAT}{\\fldrslt includedstuff}}\n";
- }
- }
- break;
- case isPageDocumentation:
- {
-//#error "fix me in the same way as the latex index..."
- //t << "{\\tc \\v " << theTranslator->trPageDocumentation() << "}"<< endl;
- //t << "}"<< endl;
- //PageSDict::Iterator pdi(*Doxygen::pageSDict);
- //PageDef *pd=pdi.toFirst();
- //bool first=TRUE;
- //for (pdi.toFirst();(pd=pdi.current());++pdi)
- //{
- // if (!pd->getGroupDef() && !pd->isReference())
- // {
- // if (first) t << "\\par " << rtf_Style_Reset << endl;
- // t << "{\\field\\fldedit{\\*\\fldinst INCLUDETEXT \"";
- // t << pd->getOutputFileBase();
- // t << ".rtf\" \\\\*MERGEFORMAT}{\\fldrslt includedstuff}}\n";
- // first=FALSE;
- // }
- //}
- }
- break;
- case isPageDocumentation2:
- {
- t << "}";
- t << "\\par " << rtf_Style_Reset << endl;
- }
- break;
- case isEndIndex:
- beginRTFChapter();
- t << rtf_Style["Heading1"]->reference;
- t << theTranslator->trRTFGeneralIndex() << "\\par "<< endl;
- t << rtf_Style_Reset << endl;
- t << "{\\tc \\v " << theTranslator->trRTFGeneralIndex() << "}" << endl;
- t << "{\\field\\fldedit {\\*\\fldinst INDEX \\\\c2 \\\\*MERGEFORMAT}{\\fldrslt INDEX}}\n";
-
- break;
- }
-}
-
-void RTFGenerator::writePageLink(const char *name,bool first)
-{
- if (first) t << "\\par " << rtf_Style_Reset << endl;
- t << "{\\field\\fldedit{\\*\\fldinst INCLUDETEXT \"";
- t << name;
- t << ".rtf\" \\\\*MERGEFORMAT}{\\fldrslt includedstuff}}\n";
-}
-
-void RTFGenerator::lastIndexPage()
-{
- DBG_RTF(t <<"{\\comment Beginning Body of RTF Document}\n")
- // end page and setup for rest of document
- t <<"\\sect \\sbkpage \\pgndec \\pgnrestart\n";
- t <<"\\sect \\sectd \\sbknone\n";
-
- // set new footer with arabic numbers
- t <<"{\\footer "<< rtf_Style["Footer"]->reference << "{\\chpgn}}\n";
- //t << rtf_Style["Heading1"]->reference << "\n";
-
-}
-
-void RTFGenerator::writeStyleInfo(int)
-{
-}
-
-void RTFGenerator::lineBreak(const char *)
-{
- DBG_RTF(t << "{\\comment (lineBreak)}" << endl)
- t << "\\par" << endl;
- m_omitParagraph = TRUE;
-}
-
-void RTFGenerator::writeString(const char *text)
-{
- t << text;
-}
-
-void RTFGenerator::startIndexList()
-{
- DBG_RTF(t << "{\\comment (startIndexList)}" << endl)
- t << "{" << endl;
- t << "\\par" << endl;
- incrementIndentLevel();
- t << rtf_Style_Reset << rtf_LCList_DepthStyle() << endl;
- m_omitParagraph = TRUE;
-}
-
-void RTFGenerator::endIndexList()
-{
- DBG_RTF(t << "{\\comment (endIndexList)}" << endl)
- if (!m_omitParagraph)
- {
- t << "\\par";
- m_omitParagraph = TRUE;
- }
- t << "}";
- decrementIndentLevel();
-}
-
-/*! start bullet list */
-void RTFGenerator::startItemList()
-{
- newParagraph();
- DBG_RTF(t << "{\\comment (startItemList level=" << m_listLevel << ") }" << endl)
- t << "{";
- incrementIndentLevel();
- rtf_listItemInfo[m_listLevel].isEnum = FALSE;
-}
-
-/*! end bullet list */
-void RTFGenerator::endItemList()
-{
- newParagraph();
- DBG_RTF(t << "{\\comment (endItemList level=" << m_listLevel << ")}" << endl)
- t << "}";
- decrementIndentLevel();
- m_omitParagraph = TRUE;
-}
-
-///*! start enumeration list */
-//void RTFGenerator::startEnumList() // starts an enumeration list
-//{
-// DBG_RTF(t << "{\\comment (startEnumList)}" << endl)
-// t << "{" << endl;
-// incrementIndentLevel();
-// rtf_listItemInfo[m_listLevel].isEnum = TRUE;
-// rtf_listItemInfo[m_listLevel].number = 1;
-//}
-//
-///*! end enumeration list */
-//void RTFGenerator::endEnumList()
-//{
-// newParagraph();
-// DBG_RTF(t << "{\\comment (endEnumList)}" << endl)
-// t << "}";
-// decrementIndentLevel();
-// m_omitParagraph = TRUE;
-//}
-
-/*! write bullet or enum item */
-void RTFGenerator::startItemListItem()
-{
- DBG_RTF(t << "{\\comment (startItemListItem)}" << endl)
- newParagraph();
- t << rtf_Style_Reset;
- if (rtf_listItemInfo[m_listLevel].isEnum)
- {
- t << rtf_EList_DepthStyle() << endl;
- t << rtf_listItemInfo[m_listLevel].number << ".\\tab ";
- rtf_listItemInfo[m_listLevel].number++;
- }
- else
- {
- t << rtf_BList_DepthStyle() << endl;
- }
- m_omitParagraph = TRUE;
-}
-
-void RTFGenerator::endItemListItem()
-{
- DBG_RTF(t << "{\\comment (endItemListItem)}" << endl)
-}
-
-void RTFGenerator::startIndexItem(const char *,const char *)
-{
- DBG_RTF(t << "{\\comment (startIndexItem)}" << endl)
-
- if (!m_omitParagraph)
- {
- t << "\\par" << endl;
- m_omitParagraph = TRUE;
- }
-}
-
-void RTFGenerator::endIndexItem(const char *ref,const char *fn)
-{
- DBG_RTF(t << "{\\comment (endIndexItem)}" << endl)
- if (!ref && fn)
- {
- t << "\\tab ";
- writeRTFReference(fn);
- t << endl;
- }
- else
- {
- t << endl;
- }
- m_omitParagraph = TRUE;
-}
-
-//void RTFGenerator::writeIndexFileItem(const char *,const char *text)
-//{
-// t << "\\item\\contentsline{section}{";
-// docify(text);
-// t << "}{\\pageref{" << text << "}}" << endl;
-//}
-
-void RTFGenerator::startHtmlLink(const char *url)
-{
-
- if (Config_getBool("RTF_HYPERLINKS"))
- {
- t << "{\\field {\\*\\fldinst { HYPERLINK \\\\l \"";
- t << url;
- t << "\" }{}";
- t << "}{\\fldrslt {\\cs37\\ul\\cf2 ";
- }
- else
- {
- startTypewriter();
- }
-}
-
-void RTFGenerator::endHtmlLink()
-{
- if (Config_getBool("RTF_HYPERLINKS"))
- {
- t << "}}}" << endl;
- }
- else
- {
- endTypewriter();
- }
-}
-
-//void RTFGenerator::writeMailLink(const char *url)
-//{
-// startTypewriter();
-// docify(url);
-// endTypewriter();
-//}
-
-void RTFGenerator::writeStartAnnoItem(const char *,const char *f,
- const char *path,const char *name)
-{
- DBG_RTF(t << "{\\comment (writeStartAnnoItem)}" << endl)
- t << "{\\b ";
- if (path) docify(path);
- if (f && Config_getBool("RTF_HYPERLINKS"))
- {
- t << "{\\field {\\*\\fldinst { HYPERLINK \\\\l \"";
- t << rtfFormatBmkStr(f);
- t << "\" }{}";
- t << "}{\\fldrslt {\\cs37\\ul\\cf2 ";
-
- docify(name);
-
- t << "}}}" << endl;
- }
- else
- {
- docify(name);
- }
- t << "} ";
-}
-
-void RTFGenerator::writeEndAnnoItem(const char *name)
-{
- DBG_RTF(t << "{\\comment (writeEndAnnoItem)}" << endl)
- if (name)
- {
- t << "\\tab ";
- writeRTFReference(name);
- t << endl;
- }
- else
- {
- t << endl;
- }
- newParagraph();
-}
-
-void RTFGenerator::startIndexKey()
-{
- DBG_RTF(t << "{\\comment (startIndexKey)}" << endl)
- t << "{\\b ";
-}
-
-void RTFGenerator::endIndexKey()
-{
- DBG_RTF(t << "{\\comment (endIndexKey)}" << endl)
-}
-
-void RTFGenerator::startIndexValue(bool hasBrief)
-{
- DBG_RTF(t << "{\\comment (startIndexValue)}" << endl)
- t << " ";
- if (hasBrief) t << "(";
-}
-
-void RTFGenerator::endIndexValue(const char *name,bool hasBrief)
-{
- DBG_RTF(t << "{\\comment (endIndexValue)}" << endl)
- if (hasBrief) t << ")";
- t << "} ";
- if (name)
- {
- t << "\\tab ";
- writeRTFReference(name);
- t << endl;
- }
- else
- {
- t << endl;
- }
- m_omitParagraph=FALSE;
- newParagraph();
-}
-
-void RTFGenerator::startSubsection()
-{
- //beginRTFSubSection();
- t <<"\n";
- DBG_RTF(t << "{\\comment Begin SubSection}\n")
- t << rtf_Style_Reset;
- t << rtf_Style["Heading3"]->reference << "\n";
-}
-
-void RTFGenerator::endSubsection()
-{
- newParagraph();
- t << rtf_Style_Reset << endl;
-}
-
-void RTFGenerator::startSubsubsection()
-{
- //beginRTFSubSubSection();
- t << "\n";
- DBG_RTF(t << "{\\comment Begin SubSubSection}\n")
- t << "{" << endl;
- t << rtf_Style_Reset << rtf_Style["Heading4"]->reference << "\n";
-}
-
-void RTFGenerator::endSubsubsection()
-{
- newParagraph();
- t << "}" << endl;
-}
-
-
-//void RTFGenerator::writeClassLink(const char *,const char *,
-// const char *,const char *name)
-//{
-// t << "{\\bf ";
-// docify(name);
-// t << "}";
-//}
-
-//void RTFGenerator::startTable(bool,int colNumbers)
-//{
-// DBG_RTF(t << "{\\comment startTable}\n";)
-// m_numCols=colNumbers;
-// t << "\\par\n";
-//}
-//
-//void RTFGenerator::endTable(bool hasCaption)
-//{
-// DBG_RTF(t << "{\\comment endTable}\n";)
-// if (!hasCaption)
-// t << "\n\\pard \\widctlpar\\intbl\\adjustright\n{\\row }\n";
-// t << "\\pard\n" << endl;
-//}
-//
-//void RTFGenerator::startCaption()
-//{
-// DBG_RTF(t << "{\\comment startCaption}\n";)
-// endTableRow();
-// t << "\\trowd \\trgaph108\\trleft-108\\trbrdrt\\brdrs\\brdrw10 \\trbrdrl\\brdrs\\brdrw10 \\trbrdrb\\brdrs\\brdrw10 \\trbrdrr\\brdrs\\brdrw10 \\trbrdrh\\brdrs\\brdrw10 \\trbrdrv\\brdrs\\brdrw10" << endl;
-// t << "\\clvertalt\\clbrdrt\\brdrs\\brdrw10 \\clbrdrl\\brdrs\\brdrw10 \\clbrdrb\\brdrs\\brdrw10 \\clbrdrr \\brdrs\\brdrw10 \\cltxlrtb \\cellx"<<rtf_pageWidth<<"\\pard \\qc\\nowidctlpar\\widctlpar\\intbl\\adjustright " << endl;
-// nextTableColumn();
-//}
-//
-//void RTFGenerator::endCaption()
-//{
-// DBG_RTF(t << "{\\comment endCaption}\n";)
-// endTableColumn();
-// endTableRow();
-//}
-//
-//void RTFGenerator::nextTableRow()
-//{
-// DBG_RTF(t << "{\\comment nextTableRow}\n";)
-// ASSERT(m_numCols>0 && m_numCols<25);
-// uint columnWidth=rtf_pageWidth/m_numCols;
-// t << "\\trowd \\trgaph108\\trleft-108\\trbrdrt\\brdrs\\brdrw10 "
-// "\\trbrdrl\\brdrs\\brdrw10 \\trbrdrb\\brdrs\\brdrw10 "
-// "\\trbrdrr\\brdrs\\brdrw10 \\trbrdrh\\brdrs\\brdrw10 "
-// "\\trbrdrv\\brdrs\\brdrw10 "<<endl;
-// for (int i=0;i<m_numCols;i++)
-// {
-// t << "\\clvertalt\\clbrdrt\\brdrs\\brdrw10 \\clbrdrl\\brdrs\\brdrw10 "
-// "\\clbrdrb\\brdrs\\brdrw10 \\clbrdrr \\brdrs\\brdrw10 \\cltxlrtb "
-// "\\cellx" << (i*columnWidth) << endl;
-// }
-// t << "\\pard \\widctlpar\\intbl\\adjustright\n{";
-//}
-//
-//void RTFGenerator::endTableRow()
-//{
-// DBG_RTF(t << "{\\comment endTableRow}\n";)
-// t << "\n\\pard \\widctlpar\\intbl\\adjustright\n{\\row }\n";
-//}
-//
-//void RTFGenerator::nextTableColumn()
-//{
-// DBG_RTF(t << "{\\comment nextTableColumn}\n";)
-// t << "{ ";
-//}
-//
-//void RTFGenerator::endTableColumn()
-//{
-// DBG_RTF(t << "{\\comment endTableColumn}\n";)
-// t << " \\cell }";
-//}
-//
-void RTFGenerator::startTextLink(const char *f,const char *anchor)
-{
- if (Config_getBool("RTF_HYPERLINKS"))
- {
- QCString ref;
- if (f)
- {
- ref+=f;
- }
- if (anchor)
- {
- ref+='_';
- ref+=anchor;
- }
-
- t << "{\\field {\\*\\fldinst { HYPERLINK \\\\l \"";
- t << rtfFormatBmkStr(ref);
- t << "\" }{}";
- t << "}{\\fldrslt {\\cs37\\ul\\cf2 ";
- }
-}
-
-void RTFGenerator::endTextLink()
-{
- if (Config_getBool("RTF_HYPERLINKS"))
- {
- t << "}}}" << endl;
- }
-}
-
-void RTFGenerator::writeObjectLink(const char *ref, const char *f,
- const char *anchor, const char *text)
-{
- if (!ref && Config_getBool("RTF_HYPERLINKS"))
- {
- QCString refName;
- if (f)
- {
- refName+=f;
- }
- if (anchor)
- {
- refName+='_';
- refName+=anchor;
- }
-
- t << "{\\field {\\*\\fldinst { HYPERLINK \\\\l \"";
- t << rtfFormatBmkStr(refName);
- t << "\" }{}";
- t << "}{\\fldrslt {\\cs37\\ul\\cf2 ";
-
- docify(text);
-
- t << "}}}" << endl;
- }
- else
- {
- startBold();
- docify(text);
- endBold();
- }
-}
-
-void RTFGenerator::startPageRef()
-{
- t << " (";
- startEmphasis();
-}
-
-void RTFGenerator::endPageRef(const char *clname, const char *anchor)
-{
- QCString ref;
- if (clname)
- {
- ref+=clname;
- }
- if (anchor)
- {
- ref+='_';
- ref+=anchor;
- }
- writeRTFReference(ref);
- endEmphasis();
- t << ")";
-}
-
-void RTFGenerator::writeCodeLink(const char *ref,const char *f,
- const char *anchor,const char *name,
- const char *)
-{
- if (!ref && Config_getBool("RTF_HYPERLINKS"))
- {
- QCString refName;
- if (f)
- {
- refName+=f;
- }
- if (anchor)
- {
- refName+='_';
- refName+=anchor;
- }
-
- t << "{\\field {\\*\\fldinst { HYPERLINK \\\\l \"";
- t << rtfFormatBmkStr(refName);
- t << "\" }{}";
- t << "}{\\fldrslt {\\cs37\\ul\\cf2 ";
-
- codify(name);
-
- t << "}}}" << endl;
- }
- else
- {
- codify(name);
- }
-}
-
-void RTFGenerator::startTitleHead(const char *)
-{
- DBG_RTF(t <<"{\\comment startTitleHead}" << endl)
-
- // beginRTFSection();
- t << rtf_Style_Reset << rtf_Style["Heading2"]->reference << endl;
-}
-
-void RTFGenerator::endTitleHead(const char *fileName,const char *name)
-{
- DBG_RTF(t <<"{\\comment endTitleHead}" << endl)
- t << "\\par " << rtf_Style_Reset << endl;
- if (name)
- {
- // make table of contents entry
- t << "{\\tc\\tcl2 \\v ";
- docify(name);
- t << "}" << endl;
-
- // make an index entry
- addIndexItem(name,0);
-
- //if (name)
- //{
- // writeAnchor(0,name);
- //}
- //
- //if (Config_getBool("RTF_HYPERLINKS") && fileName)
- //{
- writeAnchor(fileName,0);
- //}
- }
-}
-
-void RTFGenerator::startTitle()
-{
- DBG_RTF(t <<"{\\comment startTitle}" << endl)
- if (Config_getBool("COMPACT_RTF"))
- beginRTFSection();
- else
- beginRTFChapter();
-}
-
-void RTFGenerator::startGroupHeader(int extraIndent)
-{
- DBG_RTF(t <<"{\\comment startGroupHeader}" << endl)
- //newParagraph();
- t << rtf_Style_Reset;
- if (extraIndent==2)
- {
- t << rtf_Style["Heading5"]->reference;
- }
- else if (extraIndent==1)
- {
- t << rtf_Style["Heading4"]->reference;
- }
- else // extraIndent==0
- {
- t << rtf_Style["Heading3"]->reference;
- }
- t << endl;
-}
-
-void RTFGenerator::endGroupHeader(int)
-{
- DBG_RTF(t <<"{\\comment endGroupHeader}" << endl)
- t << "\\par" << endl;
- t << rtf_Style_Reset << endl;
-}
-
-void RTFGenerator::startMemberDoc(const char *clname,
- const char *memname,
- const char *,
- const char *,
- bool showInline)
-{
- DBG_RTF(t << "{\\comment startMemberDoc}" << endl)
- if (memname && memname[0]!='@')
- {
- addIndexItem(memname,clname);
- addIndexItem(clname,memname);
- }
- t << rtf_Style_Reset << rtf_Style[showInline ? "Heading5" : "Heading4"]->reference;
- //styleStack.push(rtf_Style_Heading4);
- t << "{" << endl;
- //printf("RTFGenerator::startMemberDoc() `%s'\n",rtf_Style["Heading4"]->reference);
- startBold();
- t << endl;
-}
-
-void RTFGenerator::endMemberDoc(bool)
-{
- DBG_RTF(t << "{\\comment endMemberDoc}" << endl)
- //const char *style = styleStack.pop();
- //printf("RTFGenerator::endMemberDoc() `%s'\n",style);
- //ASSERT(style==rtf_Style["Heading4"]->reference);
- endBold();
- t << "}" << endl;
- newParagraph();
-}
-
-void RTFGenerator::startDoxyAnchor(const char *,const char *,
- const char *,const char *,
- const char *
- )
-{
- DBG_RTF(t << "{\\comment startDoxyAnchor}" << endl)
-}
-
-void RTFGenerator::endDoxyAnchor(const char *fName,const char *anchor)
-{
- QCString ref;
- if (fName)
- {
- ref+=fName;
- }
- if (anchor)
- {
- ref+='_';
- ref+=anchor;
- }
-
- DBG_RTF(t << "{\\comment endDoxyAnchor}" << endl)
- t << "{\\bkmkstart ";
- t << rtfFormatBmkStr(ref);
- t << "}" << endl;
- t << "{\\bkmkend ";
- t << rtfFormatBmkStr(ref);
- t << "}" << endl;
-}
-
-
-//void RTFGenerator::writeLatexLabel(const char *clName,const char *anchor)
-//{
-// writeDoxyAnchor(0,clName,anchor,0);
-//}
-
-void RTFGenerator::addIndexItem(const char *s1,const char *s2)
-{
- if (s1)
- {
- t << "{\\xe \\v ";
- docify(s1);
- if (s2)
- {
- t << "\\:";
- docify(s2);
- }
- t << "}" << endl;
- }
-}
-
-void RTFGenerator::startIndent()
-{
- incrementIndentLevel();
- DBG_RTF(t << "{\\comment (startIndent) }" << endl)
- t << "{" << endl;
- t << rtf_Style_Reset << rtf_CList_DepthStyle() << endl;
-}
-
-void RTFGenerator::endIndent()
-{
- t << "}" << endl;
- decrementIndentLevel();
-}
-
-
-void RTFGenerator::startDescription()
-{
- DBG_RTF(t << "{\\comment (startDescription)}" << endl)
- t << "{" << endl;
- t << rtf_Style_Reset << rtf_DList_DepthStyle();
-}
-
-void RTFGenerator::endDescription()
-{
- DBG_RTF(t << "{\\comment (endDescription)}" << endl)
- newParagraph();
- t << "}";
-}
-
-void RTFGenerator::startDescItem()
-{
- newParagraph();
- DBG_RTF(t << "{\\comment (startDescItem)}" << endl)
- t << "{\\b ";
-}
-
-void RTFGenerator::endDescItem()
-{
- DBG_RTF(t << "{\\comment (endDescItem)}" << endl)
- t << "}" << endl;
- newParagraph();
-}
-
-void RTFGenerator::startMemberDescription(const char *)
-{
- DBG_RTF(t << "{\\comment (startMemberDescription)}" << endl)
- t << "{" << endl;
- incrementIndentLevel();
- t << rtf_Style_Reset << rtf_CList_DepthStyle();
- startEmphasis();
-}
-
-void RTFGenerator::endMemberDescription()
-{
- DBG_RTF(t << "{\\comment (endMemberDescription)}" << endl)
- endEmphasis();
- newParagraph();
- decrementIndentLevel();
- //t << "\\par";
- t << "}" << endl;
- //m_omitParagraph = TRUE;
-}
-
-void RTFGenerator::startDescList(SectionTypes)
-{
- DBG_RTF(t << "{\\comment (startDescList)}" << endl)
- t << "{"; // ends at endDescList
- t << "{"; // ends at endDescTitle
- startBold();
- newParagraph();
-}
-
-//void RTFGenerator::endDescTitle()
-//{
-// DBG_RTF(t << "{\\comment (endDescTitle) }" << endl)
-// endBold();
-// t << "}";
-// newParagraph();
-// incrementIndentLevel();
-// t << rtf_Style_Reset << rtf_DList_DepthStyle();
-//}
-
-void RTFGenerator::startDescForItem()
-{
- DBG_RTF(t << "{\\comment (startDescForItem) }" << endl)
-}
-
-void RTFGenerator::endDescForItem()
-{
- DBG_RTF(t << "{\\comment (endDescForItem) }" << endl)
-}
-
-//void RTFGenerator::endDescList()
-//{
-// DBG_RTF(t << "{\\comment (endDescList)}" << endl)
-// newParagraph();
-// decrementIndentLevel();
-// m_omitParagraph = TRUE;
-// t << "}";
-//}
-
-
-void RTFGenerator::startSection(const char *,const char *title,SectionInfo::SectionType type)
-{
- DBG_RTF(t << "{\\comment (startSection)}" << endl)
- t << "{";
- t<< rtf_Style_Reset;
- int num=4;
- switch(type)
- {
- case SectionInfo::Page: num=2; break;
- case SectionInfo::Section: num=3; break;
- case SectionInfo::Subsection: num=4; break;
- case SectionInfo::Subsubsection: num=4; break;
- case SectionInfo::Paragraph: num=4; break;
- default: ASSERT(0); break;
- }
- QCString heading;
- heading.sprintf("Heading%d",num);
- // set style
- t << rtf_Style[heading]->reference;
- // make table of contents entry
- t << "{\\tc\\tcl" << num << " \\v ";
- docify(title);
- t << "}" << endl;
-}
-
-void RTFGenerator::endSection(const char *lab,SectionInfo::SectionType)
-{
- DBG_RTF(t << "{\\comment (endSection)}" << endl)
- // make bookmark
- m_omitParagraph=FALSE;
- newParagraph();
- writeAnchor(0,lab);
- t << "}";
-}
-
-//void RTFGenerator::writeSectionRef(const char *ref,const char *,
-// const char *lab,const char *title)
-//{
-// if (ref)
-// {
-// docify(title);
-// }
-// else
-// {
-// startBold();
-// docify(title);
-// endBold();
-// t << " (";
-// docify(theTranslator->trPageAbbreviation());
-// writeRTFReference(lab);
-// t << ")" << endl;
-// }
-//}
-//
-//void RTFGenerator::writeSectionRefItem(const char *,const char *lab,
-// const char *title)
-//{
-// docify(title);
-// t << "\\tab";
-// writeRTFReference(lab);
-// t << endl;
-//}
-//
-//void RTFGenerator::writeSectionRefAnchor(const char *name,const char *lab,
-// const char *title)
-//{
-// writeSectionRef(name,lab,title);
-//}
-
-//char* RTFGenerator::getMultiByte(int c)
-//{
-// static char s[10];
-//
-// sprintf(s,"\\'%X",c);
-// return s;
-//}
-
-void RTFGenerator::docify(const char *str)
-{
- if (str)
- {
- const unsigned char *p=(const unsigned char *)str;
- unsigned char c;
- //unsigned char pc='\0';
- while (*p)
- {
- //static bool MultiByte = FALSE;
- c=*p++;
-
-#if 0
- if ( MultiByte )
- {
- t << getMultiByte( c );
- MultiByte = FALSE;
- continue;
- }
- if ( c >= 0x80 )
- {
- MultiByte = TRUE;
- t << getMultiByte( c );
- continue;
- }
-#endif
-
- switch (c)
- {
- case '{': t << "\\{"; break;
- case '}': t << "\\}"; break;
- case '\\': t << "\\\\"; break;
- default:
- {
- // see if we can insert an hyphenation hint
- //if (isupper(c) && islower(pc) && !insideTabbing) t << "\\-";
- t << (char)c;
- }
- }
- //pc = c;
- m_omitParagraph = FALSE;
- }
- }
-}
-
-void RTFGenerator::codify(const char *str)
-{
- // note that RTF does not have a "verbatim", so "\n" means
- // nothing... add a "newParagraph()";
- //static char spaces[]=" ";
- if (str)
- {
- const unsigned char *p=(const unsigned char *)str;
- unsigned char c;
- int spacesToNextTabStop;
-
- while (*p)
- {
- //static bool MultiByte = FALSE;
-
- c=*p++;
-
-#if 0
- if( MultiByte )
- {
- t << getMultiByte( c );
- MultiByte = FALSE;
- continue;
- }
- if( c >= 0x80 )
- {
- MultiByte = TRUE;
- t << getMultiByte( c );
- continue;
- }
-#endif
-
- switch(c)
- {
- case '\t': spacesToNextTabStop = Config_getInt("TAB_SIZE") - (col%Config_getInt("TAB_SIZE"));
- t << Doxygen::spaces.left(spacesToNextTabStop);
- col+=spacesToNextTabStop;
- break;
- case '\n': newParagraph();
- t << '\n'; col=0;
- break;
- case '{': t << "\\{"; col++; break;
- case '}': t << "\\}"; col++; break;
- case '\\': t << "\\\\"; col++; break;
- default: t << (char)c; col++; break;
- }
- }
- }
-}
-
-void RTFGenerator::writeChar(char c)
-{
- char cs[2];
- cs[0]=c;
- cs[1]=0;
- docify(cs);
-}
-
-void RTFGenerator::startClassDiagram()
-{
- DBG_RTF(t <<"{\\comment startClassDiagram }" << endl)
-}
-
-void RTFGenerator::endClassDiagram(const ClassDiagram &d,
- const char *fileName,const char *)
-{
- newParagraph();
-
- // create a png file
- d.writeImage(t,dir,relPath,fileName,FALSE);
-
- // display the file
- t << "{" << endl;
- t << rtf_Style_Reset << endl;
- t << "\\par\\pard \\qc {\\field\\flddirty {\\*\\fldinst INCLUDEPICTURE \"";
- t << fileName << ".png\"";
- t << " \\\\d \\\\*MERGEFORMAT}{\\fldrslt IMAGE}}\\par" << endl;
- t << "}" << endl;
-}
-
-//void RTFGenerator::writeFormula(const char *,const char *text)
-//{
-// t << text;
-//}
-
-void RTFGenerator::startMemberItem(const char *,int)
-{
- DBG_RTF(t <<"{\\comment startMemberItem }" << endl)
- t << rtf_Style_Reset << rtf_BList_DepthStyle() << endl; // set style to apropriate depth
-}
-
-void RTFGenerator::endMemberItem()
-{
- DBG_RTF(t <<"{\\comment endMemberItem }" << endl)
- newParagraph();
-}
-
-void RTFGenerator::writeAnchor(const char *fileName,const char *name)
-{
- QCString anchor;
- if (fileName)
- {
- anchor+=fileName;
- }
- if (fileName && name)
- {
- anchor+='_';
- }
- if (name)
- {
- anchor+=name;
- }
-
- DBG_RTF(t <<"{\\comment writeAnchor (" << anchor << ")}" << endl)
- t << "{\\bkmkstart " << rtfFormatBmkStr(anchor) << "}" << endl;
- t << "{\\bkmkend " << rtfFormatBmkStr(anchor) << "}" << endl;
-}
-
-void RTFGenerator::writeRTFReference(const char *label)
-{
- t << "{\\field\\fldedit {\\*\\fldinst PAGEREF ";
- t << rtfFormatBmkStr(label);
- t << " \\\\*MERGEFORMAT}{\\fldrslt pagenum}}";
-}
-
-void RTFGenerator::startCodeFragment()
-{
- DBG_RTF(t << "{\\comment (startCodeFragment) }" << endl)
- t << "{" << endl;
- //newParagraph();
- t << rtf_Style_Reset << rtf_Code_DepthStyle();
- //styleStack.push(rtf_Style_CodeExample);
-}
-
-void RTFGenerator::endCodeFragment()
-{
- //newParagraph();
- //styleStack.pop();
- //printf("RTFGenerator::endCodeFrament() top=%s\n",styleStack.top());
- //t << rtf_Style_Reset << styleStack.top() << endl;
- DBG_RTF(t << "{\\comment (endCodeFragment) }" << endl)
- t << "}" << endl;
- m_omitParagraph = TRUE;
-}
-
-void RTFGenerator::writeNonBreakableSpace(int)
-{
- t << "\\~ ";
-}
-
-
-void RTFGenerator::startMemberList()
-{
- t << endl;
- DBG_RTF(t << "{\\comment (startMemberList) }" << endl)
- t << "{" << endl;
-#ifdef DELETEDCODE
- if (!insideTabbing)
- t << "\\begin{CompactItemize}" << endl;
-#endif
-}
-
-void RTFGenerator::endMemberList()
-{
- DBG_RTF(t << "{\\comment (endMemberList) }" << endl)
- t << "}" << endl;
-#ifdef DELETEDCODE
- if (!insideTabbing)
- t << "\\end{CompactItemize}" << endl;
-#endif
-}
-
-//void RTFGenerator::startImage(const char *name,const char *,bool)
-//{
-// newParagraph();
-// t << "{" << endl;
-// t << rtf_Style_Reset << endl;
-// t << "\\par\\pard \\qc {\\field\\flddirty {\\*\\fldinst INCLUDEPICTURE ";
-// t << name;
-// t << " \\\\d \\\\*MERGEFORMAT}{\\fldrslt IMAGE}}\\par" << endl;
-// t << "}" << endl;
-//}
-//
-//void RTFGenerator::endImage(bool)
-//{
-// // not yet implemented
-//}
-//
-//void RTFGenerator::startDotFile(const char *name,bool)
-//{
-// QCString baseName=name;
-// int i;
-// if ((i=baseName.findRev('/'))!=-1 || (i=baseName.findRev('\\'))!=-1)
-// {
-// baseName=baseName.right(baseName.length()-i-1);
-// }
-// QCString outDir = Config_getString("RTF_OUTPUT");
-// writeDotGraphFromFile(name,outDir,baseName,BITMAP);
-// newParagraph();
-// t << "{" << endl;
-// t << rtf_Style_Reset << endl;
-// t << "\\par\\pard \\qc {\\field\\flddirty {\\*\\fldinst INCLUDEPICTURE ";
-// t << outDir << "\\" << baseName;
-// t << " \\\\d \\\\*MERGEFORMAT}{\\fldrslt IMAGE}}\\par" << endl;
-// t << "}" << endl;
-//}
-//
-//void RTFGenerator::endDotFile(bool)
-//{
-// // not yet implemented
-//}
-//
-void RTFGenerator::startDescTable()
-{
- DBG_RTF(t << "{\\comment (startDescTable) }" << endl)
- //t << "{" << endl;
- //incrementIndentLevel();
- //t << rtf_Style_Reset << rtf_CList_DepthStyle();
-}
-
-void RTFGenerator::endDescTable()
-{
- //decrementIndentLevel();
- DBG_RTF(t << "{\\comment (endDescTable)}" << endl)
- //t << "}" << endl;
- //t << rtf_Style_Reset << styleStack.top();
-}
-
-void RTFGenerator::startDescTableTitle()
-{
- //t << rtf_BList_DepthStyle() << endl;
- DBG_RTF(t << "{\\comment (startDescTableTitle) }" << endl)
- startBold();
- startEmphasis();
-}
-
-void RTFGenerator::endDescTableTitle()
-{
- DBG_RTF(t << "{\\comment (endDescTableTitle) }" << endl)
- endEmphasis();
- endBold();
- t << " ";
-}
-
-void RTFGenerator::startDescTableData()
-{
- DBG_RTF(t << "{\\comment (startDescTableData) }" << endl)
- m_omitParagraph = FALSE;
-}
-
-void RTFGenerator::endDescTableData()
-{
- DBG_RTF(t << "{\\comment (endDescTableData) }" << endl)
- newParagraph();
- m_omitParagraph = TRUE;
-}
-
-// a style for list formatted as a "bulleted list"
-
-void RTFGenerator::incrementIndentLevel()
-{
- m_listLevel++;
- if (m_listLevel>rtf_maxIndentLevels-1)
- {
- err("error: Maximum indent level (%d) exceeded while generating RTF output!\n",rtf_maxIndentLevels);
- m_listLevel=rtf_maxIndentLevels-1;
- }
-}
-
-void RTFGenerator::decrementIndentLevel()
-{
- m_listLevel--;
- if (m_listLevel<0)
- {
- err("error: Negative indent level while generating RTF output!\n");
- m_listLevel=0;
- }
-}
-
-// a style for list formatted with "list continue" style
-const char * RTFGenerator::rtf_CList_DepthStyle()
-{
- QCString n=makeIndexName("ListContinue",m_listLevel);
- return rtf_Style[n]->reference;
-}
-
-// a style for list formatted as a "latext style" table of contents
-const char * RTFGenerator::rtf_LCList_DepthStyle()
-{
- QCString n=makeIndexName("LatexTOC",m_listLevel);
- return rtf_Style[n]->reference;
-}
-
-// a style for list formatted as a "bullet" style
-const char * RTFGenerator::rtf_BList_DepthStyle()
-{
- QCString n=makeIndexName("ListBullet",m_listLevel);
- return rtf_Style[n]->reference;
-}
-
-// a style for list formatted as a "enumeration" style
-const char * RTFGenerator::rtf_EList_DepthStyle()
-{
- QCString n=makeIndexName("ListEnum",m_listLevel);
- return rtf_Style[n]->reference;
-}
-
-const char * RTFGenerator::rtf_DList_DepthStyle()
-{
- QCString n=makeIndexName("DescContinue",m_listLevel);
- return rtf_Style[n]->reference;
-}
-
-const char * RTFGenerator::rtf_Code_DepthStyle()
-{
- QCString n=makeIndexName("CodeExample",m_listLevel);
- return rtf_Style[n]->reference;
-}
-
-void RTFGenerator::startTextBlock(bool dense)
-{
- DBG_RTF(t << "{\\comment startTextBlock}" << endl)
- t << "{" << endl;
- t << rtf_Style_Reset;
- if (dense) // no spacing between "paragraphs"
- {
- t << rtf_Style["DenseText"]->reference;
- }
- else // some spacing
- {
- t << rtf_Style["BodyText"]->reference;
- }
-}
-
-void RTFGenerator::endTextBlock(bool /*paraBreak*/)
-{
- newParagraph();
- DBG_RTF(t << "{\\comment endTextBlock}" << endl)
- t << "}" << endl;
- //m_omitParagraph = TRUE;
-}
-
-void RTFGenerator::newParagraph()
-{
- if (!m_omitParagraph)
- {
- DBG_RTF(t << "{\\comment (newParagraph)}" << endl)
- t << "\\par" << endl;
- }
- m_omitParagraph = FALSE;
-}
-
-void RTFGenerator::startParagraph()
-{
- DBG_RTF(t << "{\\comment startParagraph}" << endl)
- newParagraph();
- t << "{" << endl;
-}
-
-void RTFGenerator::endParagraph()
-{
- DBG_RTF(t << "{\\comment endParagraph}" << endl)
- t << "}\\par" << endl;
- m_omitParagraph = TRUE;
-}
-
-void RTFGenerator::startMemberSubtitle()
-{
- DBG_RTF(t << "{\\comment startMemberSubtitle}" << endl)
- t << "{" << endl;
- t << rtf_Style_Reset << rtf_CList_DepthStyle() << endl;
-}
-
-void RTFGenerator::endMemberSubtitle()
-{
- DBG_RTF(t << "{\\comment endMemberSubtitle}" << endl)
- newParagraph();
- t << "}" << endl;
-}
-
-//void RTFGenerator::writeUmlaut(char c)
-//{
-// switch(c)
-// {
-// case 'A' : t << '\304'; break;
-// case 'E' : t << '\313'; break;
-// case 'I' : t << '\317'; break;
-// case 'O' : t << '\326'; break;
-// case 'U' : t << '\334'; break;
-// case 'Y' : t << 'Y'; break;
-// case 'a' : t << '\344'; break;
-// case 'e' : t << '\353'; break;
-// case 'i' : t << '\357'; break;
-// case 'o' : t << '\366'; break;
-// case 'u' : t << '\374'; break;
-// case 'y' : t << '\377'; break;
-// default: t << '?'; break;
-// }
-//}
-//
-//void RTFGenerator::writeAcute(char c)
-//{
-// switch(c)
-// {
-// case 'A' : t << '\301'; break;
-// case 'E' : t << '\311'; break;
-// case 'I' : t << '\315'; break;
-// case 'O' : t << '\323'; break;
-// case 'U' : t << '\332'; break;
-// case 'Y' : t << '\335'; break;
-// case 'a' : t << '\341'; break;
-// case 'e' : t << '\351'; break;
-// case 'i' : t << '\355'; break;
-// case 'o' : t << '\363'; break;
-// case 'u' : t << '\372'; break;
-// case 'y' : t << '\375'; break;
-// default: t << '?'; break;
-// }
-//}
-//
-//void RTFGenerator::writeGrave(char c)
-//{
-// switch(c)
-// {
-// case 'A' : t << '\300'; break;
-// case 'E' : t << '\310'; break;
-// case 'I' : t << '\314'; break;
-// case 'O' : t << '\322'; break;
-// case 'U' : t << '\331'; break;
-// case 'a' : t << '\340'; break;
-// case 'e' : t << '\350'; break;
-// case 'i' : t << '\354'; break;
-// case 'o' : t << '\362'; break;
-// case 'u' : t << '\371'; break;
-// default: t << '?'; break;
-// }
-//}
-//
-//void RTFGenerator::writeCirc(char c)
-//{
-// switch(c)
-// {
-// case 'A' : t << '\302'; break;
-// case 'E' : t << '\312'; break;
-// case 'I' : t << '\316'; break;
-// case 'O' : t << '\324'; break;
-// case 'U' : t << '\333'; break;
-// case 'a' : t << '\342'; break;
-// case 'e' : t << '\352'; break;
-// case 'i' : t << '\356'; break;
-// case 'o' : t << '\364'; break;
-// case 'u' : t << '\373'; break;
-// default: t << '?'; break;
-// }
-//}
-//
-//void RTFGenerator::writeTilde(char c)
-//{
-// switch(c)
-// {
-// case 'A' : t << '\303'; break;
-// case 'N' : t << '\321'; break;
-// case 'O' : t << '\325'; break;
-// case 'a' : t << '\343'; break;
-// case 'n' : t << '\361'; break;
-// case 'o' : t << '\365'; break;
-// default: t << '?'; break;
-// }
-//}
-//
-//void RTFGenerator::writeRing(char c)
-//{
-// switch(c)
-// {
-// case 'A' : t << '\305'; break;
-// case 'a' : t << '\345'; break;
-// default: t << '?'; break;
-// }
-//}
-//
-//void RTFGenerator::writeCCedil(char c)
-//{
-// switch(c)
-// {
-// case 'C' : t << '\307'; break;
-// case 'c' : t << '\347'; break;
-// default: t << '?'; break;
-// }
-//}
-//
-
-bool isLeadBytes(int c)
-{
- bool result;
-
- QCString codePage = theTranslator->trRTFansicp();
-
- if (codePage == "932") // cp932 (Japanese Shift-JIS)
- {
- result = (0x81<=c && c<=0x9f) || (0xe0<=c && c<=0xfc);
- }
- else if (codePage == "936") // cp936 (Simplified Chinese GBK)
- {
- result = 0x81<=c && c<=0xFE;
- }
- else if (codePage == "949") // cp949 (Korean)
- {
- result = 0x81<=c && c<=0xFE;
- }
- else if (codePage == "950") // cp950 (Traditional Chinese Big5)
- {
- result = 0x81<=c && c<=0xFE;
- }
- else // for SBCS Codepages (cp1252,1251 etc...)
- {
- result = false;
- }
-
- return result;
-}
-
-
-// note: function is not reentrant!
-static void encodeForOutput(FTextStream &t,const QCString &s)
-{
- QCString encoding;
- bool converted=FALSE;
- int l = s.length();
- static QByteArray enc;
- if (l*4>(int)enc.size()) enc.resize(l*4); // worst case
- encoding.sprintf("CP%s",theTranslator->trRTFansicp().data());
- if (!encoding.isEmpty())
- {
- // convert from UTF-8 back to the output encoding
- void *cd = portable_iconv_open(encoding,"UTF-8");
- if (cd!=(void *)(-1))
- {
- size_t iLeft=l;
- size_t oLeft=enc.size();
- const char *inputPtr = s.data();
- char *outputPtr = enc.data();
- if (!portable_iconv(cd, &inputPtr, &iLeft, &outputPtr, &oLeft))
- {
- enc.resize(enc.size()-oLeft);
- converted=TRUE;
- }
- portable_iconv_close(cd);
- }
- }
- if (!converted) // if we did not convert anything, copy as is.
- {
- memcpy(enc.data(),s.data(),l);
- enc.resize(l);
- }
- uint i;
- bool multiByte = FALSE;
-
- for (i=0;i<enc.size();i++)
- {
- uchar c = (uchar)enc.at(i);
-
- if (c>=0x80 || multiByte)
- {
- char esc[10];
- sprintf(esc,"\\'%X",c); // escape sequence for SBCS and DBCS(1st&2nd bytes).
- t << esc;
-
- if (!multiByte)
- {
- multiByte = isLeadBytes(c); // It may be DBCS Codepages.
- }
- else
- {
- multiByte = FALSE; // end of Double Bytes Character.
- }
- }
- else
- {
- t << (char)c;
- }
- }
-}
-
-/**
- * VERY brittle routine inline RTF's included by other RTF's.
- * it is recursive and ugly.
- */
-static bool preProcessFile(QDir &d,QCString &infName, FTextStream &t, bool bIncludeHeader=TRUE)
-{
- QFile f(infName);
- if (!f.open(IO_ReadOnly))
- {
- err("error: problems opening rtf file %s for reading\n",infName.data());
- return FALSE;
- }
-
- const int maxLineLength = 10240;
- static QCString lineBuf(maxLineLength);
-
- // scan until find end of header
- // this is EXTREEEEEEEMLY brittle. It works on OUR rtf
- // files because the first line before the body
- // ALWAYS contains "{\comment begin body}"
- do
- {
- if (f.readLine(lineBuf.data(),maxLineLength)==-1)
- {
- err("ERROR - read error in %s before end of RTF header!\n",infName.data());
- return FALSE;
- }
- if (bIncludeHeader) encodeForOutput(t,lineBuf);
- } while (lineBuf.find("\\comment begin body")==-1);
-
-
- while (f.readLine(lineBuf.data(),maxLineLength)!=-1)
- {
- int pos;
- if ((pos=lineBuf.find("INCLUDETEXT"))!=-1)
- {
- int startNamePos = lineBuf.find('"',pos)+1;
- int endNamePos = lineBuf.find('"',startNamePos);
- QCString fileName = lineBuf.mid(startNamePos,endNamePos-startNamePos);
- DBG_RTF(t << "{\\comment begin include " << fileName << "}" << endl)
- if (!preProcessFile(d,fileName,t,FALSE)) return FALSE;
- DBG_RTF(t << "{\\comment end include " << fileName << "}" << endl)
- }
- else // no INCLUDETEXT on this line
- {
- // elaborate hoopla to skip the final "}" if we didn't include the
- // headers
- if (!f.atEnd() || bIncludeHeader)
- {
- encodeForOutput(t,lineBuf);
- }
- else // last line of included file
- {
- // null terminate at the last '}'
- //char *str = strrchr(buffer,'}');
- int pos = lineBuf.findRev('}');
-
- if (pos != -1)
- lineBuf.at(pos) = '\0';
- else
- err("Strange, the last char was not a '}'\n");
- encodeForOutput(t,lineBuf);
- }
- }
- }
- f.close();
- // remove temporary file
- d.remove(infName);
- return TRUE;
-}
-
-void RTFGenerator::startDotGraph()
-{
- DBG_RTF(t << "{\\comment (startDotGraph)}" << endl)
-}
-
-void RTFGenerator::endDotGraph(const DotClassGraph &g)
-{
- newParagraph();
-
- QCString fileName =
- g.writeGraph(t,BITMAP,Config_getString("RTF_OUTPUT"),fileName,relPath,TRUE,FALSE);
-
- // display the file
- t << "{" << endl;
- t << rtf_Style_Reset << endl;
- t << "\\par\\pard \\qc {\\field\\flddirty {\\*\\fldinst INCLUDEPICTURE \"";
- t << fileName << "." << Config_getEnum("DOT_IMAGE_FORMAT");
- t << "\" \\\\d \\\\*MERGEFORMAT}{\\fldrslt IMAGE}}\\par" << endl;
- t << "}" << endl;
- newParagraph();
- DBG_RTF(t << "{\\comment (endDotGraph)}" << endl)
-}
-
-void RTFGenerator::startInclDepGraph()
-{
- DBG_RTF(t << "{\\comment (startInclDepGraph)}" << endl)
-}
-
-void RTFGenerator::endInclDepGraph(const DotInclDepGraph &g)
-{
- newParagraph();
-
- QCString fn = g.writeGraph(t,BITMAP,Config_getString("RTF_OUTPUT"),
- fileName,relPath,FALSE);
-
- // display the file
- t << "{" << endl;
- t << rtf_Style_Reset << endl;
- t << "\\par\\pard \\qc {\\field\\flddirty {\\*\\fldinst INCLUDEPICTURE \"";
- t << fn << "." << Config_getEnum("DOT_IMAGE_FORMAT");
- t << "\" \\\\d \\\\*MERGEFORMAT}{\\fldrslt IMAGE}}\\par" << endl;
- t << "}" << endl;
- DBG_RTF(t << "{\\comment (endInclDepGraph)}" << endl)
-}
-
-void RTFGenerator::startGroupCollaboration()
-{
-}
-
-void RTFGenerator::endGroupCollaboration(const DotGroupCollaboration &)
-{
-}
-
-void RTFGenerator::startCallGraph()
-{
- DBG_RTF(t << "{\\comment (startCallGraph)}" << endl)
-}
-
-void RTFGenerator::endCallGraph(const DotCallGraph &g)
-{
- newParagraph();
-
- QCString fn = g.writeGraph(t,BITMAP,Config_getString("RTF_OUTPUT"),
- fileName,relPath,FALSE);
-
- // display the file
- t << "{" << endl;
- t << rtf_Style_Reset << endl;
- t << "\\par\\pard \\qc {\\field\\flddirty {\\*\\fldinst INCLUDEPICTURE \"";
- t << fn << "." << Config_getEnum("DOT_IMAGE_FORMAT");
- t << "\" \\\\d \\\\*MERGEFORMAT}{\\fldrslt IMAGE}}\\par" << endl;
- t << "}" << endl;
- DBG_RTF(t << "{\\comment (endCallGraph)}" << endl)
-}
-
-void RTFGenerator::startDirDepGraph()
-{
- DBG_RTF(t << "{\\comment (startDirDepGraph)}" << endl)
-}
-
-void RTFGenerator::endDirDepGraph(const DotDirDeps &g)
-{
- newParagraph();
-
- QCString fileName = g.writeGraph(t,BITMAP,Config_getString("RTF_OUTPUT"),
- fileName,relPath,FALSE);
-
- // display the file
- t << "{" << endl;
- t << rtf_Style_Reset << endl;
- t << "\\par\\pard \\qc {\\field\\flddirty {\\*\\fldinst INCLUDEPICTURE \"";
- t << fileName << "." << Config_getEnum("DOT_IMAGE_FORMAT");
- t << "\" \\\\d \\\\*MERGEFORMAT}{\\fldrslt IMAGE}}\\par" << endl;
- t << "}" << endl;
- DBG_RTF(t << "{\\comment (endDirDepGraph)}" << endl)
-}
-
-/** Tests the integrity of the result by counting brackets.
- *
- */
-void testRTFOutput(const char *name)
-{
- int bcount=0;
- int line=1;
- int c;
- QFile f(name);
- if (f.open(IO_ReadOnly))
- {
- while ((c=f.getch())!=-1)
- {
- if (c=='\\') // escape char
- {
- c=f.getch();
- if (c==-1) break;
- }
- else if (c=='{') // open bracket
- {
- bcount++;
- }
- else if (c=='}') // close bracket
- {
- bcount--;
- if (bcount<0)
- {
- goto err;
- break;
- }
- }
- else if (c=='\n') // newline
- {
- line++;
- }
- }
- }
- if (bcount==0) return; // file is OK.
-err:
- err("error: RTF integrity test failed at line %d of %s due to a bracket mismatch.\n",line,name);
- err(" Please try to create a small code example that produces this error \n"
- " and send that to dimitri@stack.nl.\n");
-}
-
-/**
- * This is an API to a VERY brittle RTF preprocessor that combines nested
- * RTF files. This version replaces the infile with the new file
- */
-bool RTFGenerator::preProcessFileInplace(const char *path,const char *name)
-{
- QDir d(path);
- // store the original directory
- if (!d.exists())
- {
- err("error: Output dir %s does not exist!\n",path);
- return FALSE;
- }
- QCString oldDir = convertToQCString(QDir::currentDirPath());
-
- // go to the html output directory (i.e. path)
- QDir::setCurrent(d.absPath());
- QDir thisDir;
-
- QCString combinedName = (QCString)path+"/combined.rtf";
- QCString mainRTFName = (QCString)path+"/"+name;
-
- QFile outf(combinedName);
- if (!outf.open(IO_WriteOnly))
- {
- err("Failed to open %s for writing!\n",combinedName.data());
- return FALSE;
- }
- FTextStream outt(&outf);
-
- if (!preProcessFile(thisDir,mainRTFName,outt))
- {
- // it failed, remove the temp file
- outf.close();
- thisDir.remove(combinedName);
- QDir::setCurrent(oldDir);
- return FALSE;
- }
-
- // everything worked, move the files
- outf.close();
- thisDir.remove(mainRTFName);
- thisDir.rename(combinedName,mainRTFName);
-
- testRTFOutput(mainRTFName);
-
- QDir::setCurrent(oldDir);
- return TRUE;
-}
-
-void RTFGenerator::startMemberGroupHeader(bool hasHeader)
-{
- DBG_RTF(t << "{\\comment startMemberGroupHeader}" << endl)
- t << "{" << endl;
- if (hasHeader) incrementIndentLevel();
- t << rtf_Style_Reset << rtf_Style["GroupHeader"]->reference;
-}
-
-void RTFGenerator::endMemberGroupHeader()
-{
- DBG_RTF(t << "{\\comment endMemberGroupHeader}" << endl)
- newParagraph();
- t << rtf_Style_Reset << rtf_CList_DepthStyle();
-}
-
-void RTFGenerator::startMemberGroupDocs()
-{
- DBG_RTF(t << "{\\comment startMemberGroupDocs}" << endl)
- startEmphasis();
-}
-
-void RTFGenerator::endMemberGroupDocs()
-{
- DBG_RTF(t << "{\\comment endMemberGroupDocs}" << endl)
- endEmphasis();
- newParagraph();
-}
-
-void RTFGenerator::startMemberGroup()
-{
- DBG_RTF(t << "{\\comment startMemberGroup}" << endl)
- t << rtf_Style_Reset << rtf_BList_DepthStyle() << endl;
-}
-
-void RTFGenerator::endMemberGroup(bool hasHeader)
-{
- DBG_RTF(t << "{\\comment endMemberGroup}" << endl)
- if (hasHeader) decrementIndentLevel();
- t << "}";
-}
-
-void RTFGenerator::startSimpleSect(SectionTypes,const char *file,const char *anchor,const char *title)
-{
- DBG_RTF(t << "{\\comment (startSimpleSect)}" << endl)
- t << "{"; // ends at endDescList
- t << "{"; // ends at endDescTitle
- startBold();
- newParagraph();
- if (file)
- {
- writeObjectLink(0,file,anchor,title);
- }
- else
- {
- docify(title);
- }
- endBold();
- t << "}";
- newParagraph();
- incrementIndentLevel();
- t << rtf_Style_Reset << rtf_DList_DepthStyle();
-}
-
-void RTFGenerator::endSimpleSect()
-{
- DBG_RTF(t << "{\\comment (endSimpleSect)}" << endl)
- newParagraph();
- decrementIndentLevel();
- m_omitParagraph = TRUE;
- t << "}";
-}
-
-void RTFGenerator::startParamList(ParamListTypes,const char *title)
-{
- DBG_RTF(t << "{\\comment (startParamList)}" << endl)
- t << "{"; // ends at endParamList
- t << "{"; // ends at endDescTitle
- startBold();
- newParagraph();
- docify(title);
- endBold();
- t << "}";
- newParagraph();
- incrementIndentLevel();
- t << rtf_Style_Reset << rtf_DList_DepthStyle();
-}
-
-void RTFGenerator::endParamList()
-{
- DBG_RTF(t << "{\\comment (endParamList)}" << endl)
- newParagraph();
- decrementIndentLevel();
- m_omitParagraph = TRUE;
- t << "}";
-}
-
-void RTFGenerator::startParameterType(bool first,const char *key)
-{
- DBG_RTF(t << "{\\comment (startParameterType)}" << endl)
- if (!first && key)
- {
- t << " " << key << " ";
- }
-}
-
-void RTFGenerator::endParameterType()
-{
- DBG_RTF(t << "{\\comment (endParameterType)}" << endl)
- t << " ";
-}
-
-void RTFGenerator::printDoc(DocNode *n,const char *langExt)
-{
- RTFDocVisitor *visitor = new RTFDocVisitor(t,*this,langExt);
- n->accept(visitor);
- delete visitor;
- m_omitParagraph = TRUE;
-}
-
-void RTFGenerator::rtfwriteRuler_doubleline()
-{
- DBG_RTF(t << "{\\comment (rtfwriteRuler_doubleline)}" << endl)
- t << "{\\pard\\widctlpar\\brdrb\\brdrdb\\brdrw15\\brsp20 \\adjustright \\par}" << endl;
-}
-
-void RTFGenerator::rtfwriteRuler_emboss()
-{
- DBG_RTF(t << "{\\comment (rtfwriteRuler_emboss)}" << endl)
- t << "{\\pard\\widctlpar\\brdrb\\brdremboss\\brdrw15\\brsp20 \\adjustright \\par}" << endl;
-}
-
-void RTFGenerator::rtfwriteRuler_thick()
-{
- DBG_RTF(t << "{\\comment (rtfwriteRuler_thick)}" << endl)
- t << "{\\pard\\widctlpar\\brdrb\\brdrs\\brdrw75\\brsp20 \\adjustright \\par}" << endl;
-}
-
-void RTFGenerator::rtfwriteRuler_thin()
-{
- DBG_RTF(t << "{\\comment (rtfwriteRuler_thin)}" << endl)
- t << "{\\pard\\widctlpar\\brdrb\\brdrs\\brdrw5\\brsp20 \\adjustright \\par}" << endl;
-}
-
-#if 0
-void RTFGenerator::postProcess(QByteArray &a)
-{
- QByteArray enc(a.size()*4); // worst case
- int off=0;
- uint i;
- bool mbFlag=FALSE;
- for (i=0;i<a.size();i++)
- {
- unsigned char c = (unsigned char)a.at(i);
-
- // treat characters > 0x80 as multibyte characters, except when they
- // are control characters
- if (c>0x80 || (mbFlag && c!='\\' && c!='{' && c!='}'))
- {
- char s[10];
- sprintf(s,"\\'%X",c);
- qstrcpy(enc.data()+off,s);
- off+=qstrlen(s);
- mbFlag=c>0x80;
- }
- else
- {
- enc.at(off++)=c;
- }
- }
- enc.resize(off);
- a = enc;
-}
-#endif
-
-void RTFGenerator::startConstraintList(const char *header)
-{
- DBG_RTF(t << "{\\comment (startConstraintList)}" << endl)
- t << "{"; // ends at endConstraintList
- t << "{";
- startBold();
- newParagraph();
- docify(header);
- endBold();
- t << "}";
- newParagraph();
- incrementIndentLevel();
- t << rtf_Style_Reset << rtf_DList_DepthStyle();
-}
-
-void RTFGenerator::startConstraintParam()
-{
- DBG_RTF(t << "{\\comment (startConstraintParam)}" << endl)
- startEmphasis();
-}
-
-void RTFGenerator::endConstraintParam()
-{
- DBG_RTF(t << "{\\comment (endConstraintParam)}" << endl)
- endEmphasis();
- t << " : ";
-}
-
-void RTFGenerator::startConstraintType()
-{
- DBG_RTF(t << "{\\comment (startConstraintType)}" << endl)
- startEmphasis();
-}
-
-void RTFGenerator::endConstraintType()
-{
- DBG_RTF(t << "{\\comment (endConstraintType)}" << endl)
- endEmphasis();
- t << " ";
-}
-
-void RTFGenerator::startConstraintDocs()
-{
- DBG_RTF(t << "{\\comment (startConstraintDocs)}" << endl)
-}
-
-void RTFGenerator::endConstraintDocs()
-{
- DBG_RTF(t << "{\\comment (endConstraintDocs)}" << endl)
- newParagraph();
-}
-
-void RTFGenerator::endConstraintList()
-{
- DBG_RTF(t << "{\\comment (endConstraintList)}" << endl)
- newParagraph();
- decrementIndentLevel();
- m_omitParagraph = TRUE;
- t << "}";
-}
-
-void RTFGenerator::startIndexListItem()
-{
- DBG_RTF(t << "{\\comment (startIndexListItem)}" << endl)
-}
-
-void RTFGenerator::endIndexListItem()
-{
- DBG_RTF(t << "{\\comment (endIndexListItem)}" << endl)
- t << "\\par" << endl;
-}
-
-void RTFGenerator::startInlineHeader()
-{
- DBG_RTF(t << "{\\comment (startInlineHeader)}" << endl)
- t << "{" << endl;
- t << rtf_Style_Reset << rtf_Style["Heading5"]->reference;
- startBold();
-}
-
-void RTFGenerator::endInlineHeader()
-{
- DBG_RTF(t << "{\\comment (endInlineHeader)}" << endl)
- endBold();
- t << "\\par";
- t << "}" << endl;
-}
-
-void RTFGenerator::startMemberDocSimple()
-{
- DBG_RTF(t << "{\\comment (startMemberDocSimple)}" << endl)
- t << "{\\par" << endl;
- t << "{" << rtf_Style["Heading5"]->reference << endl;
- t << theTranslator->trCompoundMembers() << ":\\par}" << endl;
- t << rtf_Style_Reset << rtf_DList_DepthStyle();
- t << "\\trowd \\trgaph108\\trleft426\\tblind426"
- "\\trbrdrt\\brdrs\\brdrw10\\brdrcf15 "
- "\\trbrdrl\\brdrs\\brdrw10\\brdrcf15 "
- "\\trbrdrb\\brdrs\\brdrw10\\brdrcf15 "
- "\\trbrdrr\\brdrs\\brdrw10\\brdrcf15 "
- "\\trbrdrh\\brdrs\\brdrw10\\brdrcf15 "
- "\\trbrdrv\\brdrs\\brdrw10\\brdrcf15 "<< endl;
- int i,columnPos[3] = { 25, 50, 100 };
- for (i=0;i<3;i++)
- {
- t << "\\clvertalt\\clbrdrt\\brdrs\\brdrw10\\brdrcf15 "
- "\\clbrdrl\\brdrs\\brdrw10\\brdrcf15 "
- "\\clbrdrb\\brdrs\\brdrw10\\brdrcf15 "
- "\\clbrdrr \\brdrs\\brdrw10\\brdrcf15 "
- "\\cltxlrtb "
- "\\cellx" << (rtf_pageWidth*columnPos[i]/100) << endl;
- }
- t << "\\pard \\widctlpar\\intbl\\adjustright" << endl;
-}
-
-void RTFGenerator::endMemberDocSimple()
-{
- DBG_RTF(t << "{\\comment (endMemberDocSimple)}" << endl)
- t << "}" << endl;
-}
-
-void RTFGenerator::startInlineMemberType()
-{
- DBG_RTF(t << "{\\comment (startInlineMemberType)}" << endl)
- t << "{\\qr ";
-}
-
-void RTFGenerator::endInlineMemberType()
-{
- DBG_RTF(t << "{\\comment (endInlineMemberType)}" << endl)
- t << "\\cell }";
-}
-
-void RTFGenerator::startInlineMemberName()
-{
- DBG_RTF(t << "{\\comment (startInlineMemberName)}" << endl)
- t << "{";
-}
-
-void RTFGenerator::endInlineMemberName()
-{
- DBG_RTF(t << "{\\comment (endInlineMemberName)}" << endl)
- t << "\\cell }";
-}
-
-void RTFGenerator::startInlineMemberDoc()
-{
- DBG_RTF(t << "{\\comment (startInlineMemberDoc)}" << endl)
- t << "{";
-}
-
-void RTFGenerator::endInlineMemberDoc()
-{
- DBG_RTF(t << "{\\comment (endInlineMemberDoc)}" << endl)
- t << "\\cell }{\\row }" << endl;
-}
-
-
diff --git a/trunk/src/rtfgen.h b/trunk/src/rtfgen.h
deleted file mode 100644
index c9dec0b..0000000
--- a/trunk/src/rtfgen.h
+++ /dev/null
@@ -1,284 +0,0 @@
-/******************************************************************************
- *
- *
- *
- * Copyright (C) 1997-2012 by Parker Waechter & 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.
- *
- */
-
-#ifndef RTFGEN_H
-#define RTFGEN_H
-
-#include "outputgen.h"
-
-class QFile;
-
-class RTFGenerator : public OutputGenerator
-{
- public:
- RTFGenerator();
- ~RTFGenerator();
- static void init();
- static void writeStyleSheetFile(QFile &f);
- static void writeExtensionsFile(QFile &file);
-
- void enable()
- { if (genStack->top()) active=*genStack->top(); else active=TRUE; }
- void disable() { active=FALSE; }
- void enableIf(OutputType o) { if (o==RTF) enable(); }
- void disableIf(OutputType o) { if (o==RTF) disable(); }
- void disableIfNot(OutputType o) { if (o!=RTF) disable(); }
- bool isEnabled(OutputType o) { return (o==RTF && active); }
- OutputGenerator *get(OutputType o) { return (o==RTF) ? this : 0; }
-
- void printDoc(DocNode *,const char *);
-
- void startFile(const char *name,const char *manName,const char *title);
- void writeSearchInfo() {}
- void writeFooter() {}
- void endFile();
- void clearBuffer();
- //void postProcess(QByteArray &);
-
- void startIndexSection(IndexSections);
- void endIndexSection(IndexSections);
- void writePageLink(const char *,bool);
- void startProjectNumber();
- void endProjectNumber();
- void writeStyleInfo(int part);
- void startTitleHead(const char *);
- void startTitle();
- void endTitleHead(const char *,const char *name);
- void endTitle() {}
-
- void newParagraph();
- void startParagraph();
- void endParagraph();
- void writeString(const char *text);
- void startIndexListItem();
- void endIndexListItem();
- void startIndexList();
- void endIndexList();
- void startIndexKey();
- void endIndexKey();
- void startIndexValue(bool);
- void endIndexValue(const char *,bool);
- void startItemList();
- void endItemList();
- void startIndexItem(const char *ref,const char *file);
- void endIndexItem(const char *ref,const char *file);
- void docify(const char *text);
- void codify(const char *text);
- void writeObjectLink(const char *ref,const char *file,
- const char *anchor,const char *name);
- void writeCodeLink(const char *ref, const char *file,
- const char *anchor,const char *name,
- const char *tooltip);
- void startTextLink(const char *f,const char *anchor);
- void endTextLink();
- void startHtmlLink(const char *url);
- void endHtmlLink();
- void startTypewriter() { t << "{\\f2 "; }
- void endTypewriter() { t << "}"; }
- void startGroupHeader(int);
- void endGroupHeader(int);
- //void writeListItem();
- void startItemListItem();
- void endItemListItem();
-
- void startMemberSections() {}
- void endMemberSections() {}
- void startHeaderSection() {}
- void endHeaderSection() {}
- void startMemberHeader(const char *) { startGroupHeader(FALSE); }
- void endMemberHeader() { endGroupHeader(FALSE); }
- void startMemberSubtitle();
- void endMemberSubtitle();
- void startMemberDocList() {}
- void endMemberDocList() {}
- void startMemberList();
- void endMemberList();
- void startInlineHeader();
- void endInlineHeader();
- void startAnonTypeScope(int) {}
- void endAnonTypeScope(int) {}
- void startMemberItem(const char *,int);
- void endMemberItem();
- void startMemberTemplateParams() {}
- void endMemberTemplateParams(const char *) {}
- void insertMemberAlign(bool) {}
-
- void writeRuler() { rtfwriteRuler_thin(); }
-
- void writeAnchor(const char *fileName,const char *name);
- void startCodeFragment();
- void endCodeFragment();
- void writeLineNumber(const char *,const char *,const char *,int l) { t << l << " "; }
- void startCodeLine() { col=0; }
- void endCodeLine() { lineBreak(); }
- void startEmphasis() { t << "{\\i "; }
- void endEmphasis() { t << "}"; }
- void startBold() { t << "{\\b "; }
- void endBold() { t << "}"; }
- void startDescription();
- void endDescription();
- void startDescItem();
- void endDescItem();
- void lineBreak(const char *style=0);
- void startMemberDoc(const char *,const char *,const char *,const char *,bool);
- void endMemberDoc(bool);
- void startDoxyAnchor(const char *,const char *,const char *,const char *,const char *);
- void endDoxyAnchor(const char *,const char *);
- void startCodeAnchor(const char *) {};
- void endCodeAnchor() {};
- void writeChar(char c);
- void writeLatexSpacing() {};//{ t << "\\hspace{0.3cm}"; }
- void writeStartAnnoItem(const char *type,const char *file,
- const char *path,const char *name);
- void writeEndAnnoItem(const char *name);
- void startSubsection();
- void endSubsection();
- void startSubsubsection();
- void endSubsubsection();
- void startCenter() { t << "{\\qc" << endl; }
- void endCenter() { t << "}"; }
- void startSmall() { t << "{\\sub "; }
- void endSmall() { t << "}"; }
-
- void startMemberDescription(const char *);
- void endMemberDescription();
- void startDescList(SectionTypes);
- void startSimpleSect(SectionTypes,const char *,const char *,const char *);
- void endSimpleSect();
- void startParamList(ParamListTypes,const char *);
- void endParamList();
- //void writeDescItem();
- void startDescForItem();
- void endDescForItem();
- void startSection(const char *,const char *,SectionInfo::SectionType);
- void endSection(const char *,SectionInfo::SectionType);
- void addIndexItem(const char *,const char *);
- void startIndent();
- void endIndent();
- void writeSynopsis() {}
- void startClassDiagram();
- void endClassDiagram(const ClassDiagram &,const char *filename,const char *name);
- void startPageRef();
- void endPageRef(const char *,const char *);
- void startQuickIndices() {}
- void endQuickIndices() {}
- void writeSplitBar(const char *) {}
- void writeLogo() {}
- void writeQuickLinks(bool,HighlightedItem,const char *) {}
- void startContents() {}
- void endContents() {}
- void writeNonBreakableSpace(int);
-
- void startDescTable();
- void endDescTable();
- void startDescTableTitle();
- void endDescTableTitle();
- void startDescTableData();
- void endDescTableData();
-
- void startDotGraph();
- void endDotGraph(const DotClassGraph &);
- void startInclDepGraph();
- void endInclDepGraph(const DotInclDepGraph &);
- void startGroupCollaboration();
- void endGroupCollaboration(const DotGroupCollaboration &g);
- void startCallGraph();
- void endCallGraph(const DotCallGraph &);
- void startDirDepGraph();
- void endDirDepGraph(const DotDirDeps &g);
- void writeGraphicalHierarchy(const DotGfxHierarchyTable &) {}
-
- void startMemberGroupHeader(bool);
- void endMemberGroupHeader();
- void startMemberGroupDocs();
- void endMemberGroupDocs();
- void startMemberGroup();
- void endMemberGroup(bool);
-
- void startTextBlock(bool dense);
- void endTextBlock(bool);
- void lastIndexPage();
-
- void startMemberDocPrefixItem() {}
- void endMemberDocPrefixItem() {}
- void startMemberDocName(bool) {}
- void endMemberDocName() {}
- void startParameterType(bool,const char *);
- void endParameterType();
- void startParameterName(bool) {}
- void endParameterName(bool,bool,bool) {}
- void startParameterList(bool) {}
- void endParameterList() {}
-
- void startConstraintList(const char *);
- void startConstraintParam();
- void endConstraintParam();
- void startConstraintType();
- void endConstraintType();
- void startConstraintDocs();
- void endConstraintDocs();
- void endConstraintList();
-
- void startMemberDocSimple();
- void endMemberDocSimple();
- void startInlineMemberType();
- void endInlineMemberType();
- void startInlineMemberName();
- void endInlineMemberName();
- void startInlineMemberDoc();
- void endInlineMemberDoc();
-
- void startFontClass(const char *) {}
- void endFontClass() {}
-
- void writeCodeAnchor(const char *) {}
- void linkableSymbol(int,const char *,Definition *,Definition *) {}
-
- static bool preProcessFileInplace(const char *path,const char *name);
-
- private:
- RTFGenerator(const RTFGenerator &);
- RTFGenerator &operator=(const RTFGenerator &);
-
- const char *rtf_BList_DepthStyle();
- const char *rtf_CList_DepthStyle();
- const char *rtf_EList_DepthStyle();
- const char *rtf_LCList_DepthStyle();
- const char *rtf_DList_DepthStyle();
- const char *rtf_Code_DepthStyle();
- void incrementIndentLevel();
- void decrementIndentLevel();
- int col;
-
- bool m_bstartedBody; // has startbody been called yet?
- int m_listLevel; // // RTF does not really have a addative indent...manually set list level.
- bool m_omitParagraph; // should a the next paragraph command be ignored?
- int m_numCols; // number of columns in a table
- QCString relPath;
-
- void beginRTFDocument();
- void beginRTFChapter();
- void beginRTFSection();
- void rtfwriteRuler_doubleline();
- void rtfwriteRuler_emboss();
- void rtfwriteRuler_thick();
- void rtfwriteRuler_thin();
- void writeRTFReference(const char *label);
- //char *getMultiByte(int c);
-};
-
-#endif
diff --git a/trunk/src/rtfstyle.cpp b/trunk/src/rtfstyle.cpp
deleted file mode 100644
index 716cf2a..0000000
--- a/trunk/src/rtfstyle.cpp
+++ /dev/null
@@ -1,518 +0,0 @@
-/******************************************************************************
- *
- *
- *
- *
- * Copyright (C) 1997-2012 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.
- *
- */
-
-#include "rtfstyle.h"
-
-#include <qfile.h>
-#include <qtextstream.h>
-#include <stdlib.h>
-
-#include "message.h"
-
-
-RTFListItemInfo rtf_listItemInfo[rtf_maxIndentLevels];
-
-QCString rtf_title;
-QCString rtf_subject;
-QCString rtf_comments;
-QCString rtf_company;
-QCString rtf_logoFilename;
-QCString rtf_author;
-QCString rtf_manager;
-QCString rtf_documentType;
-QCString rtf_documentId;
-QCString rtf_keywords;
-
-char rtf_Style_Reset[] = "\\pard\\plain ";
-
-Rtf_Style_Default rtf_Style_Default[] =
-{
- { "Heading1",
- "\\s1\\sb240\\sa60\\keepn\\widctlpar\\adjustright \\b\\f1\\fs36\\kerning36\\cgrid ",
- "\\sbasedon0 \\snext0 heading 1"
- },
- { "Heading2",
- "\\s2\\sb240\\sa60\\keepn\\widctlpar\\adjustright \\b\\f1\\fs28\\kerning28\\cgrid ",
- "\\sbasedon0 \\snext0 heading 2"
- },
- { "Heading3",
- "\\s3\\sb240\\sa60\\keepn\\widctlpar\\adjustright \\b\\f1\\cgrid ",
- "\\sbasedon0 \\snext0 heading 3"
- },
- { "Heading4",
- "\\s4\\sb240\\sa60\\keepn\\widctlpar\\adjustright \\b\\f1\\fs20\\cgrid ",
- "\\sbasedon0 \\snext0 heading 4;}{\\*\\cs10 \\additive Default Paragraph Font"
- },
- { "Heading5",
- "\\s5\\sb90\\sa30\\keepn\\widctlpar\\adjustright \\b\\f1\\fs20\\cgrid ",
- "\\sbasedon0 \\snext0 heading 5;}{\\*\\cs10 \\additive Default Paragraph Font"
- },
- { "Title",
- "\\s15\\qc\\sb240\\sa60\\widctlpar\\outlinelevel0\\adjustright \\b\\f1\\fs32\\kerning28\\cgrid ",
- "\\sbasedon0 \\snext15 Title"
- },
- { "SubTitle",
- "\\s16\\qc\\sa60\\widctlpar\\outlinelevel1\\adjustright \\f1\\cgrid ",
- "\\sbasedon0 \\snext16 Subtitle"
- },
- { "BodyText",
- "\\s17\\sa60\\sb30\\widctlpar\\qj \\fs22\\cgrid ",
- "\\sbasedon0 \\snext17 BodyText"
- },
- { "DenseText",
- "\\s18\\widctlpar\\fs22\\cgrid ",
- "\\sbasedon0 \\snext18 DenseText"
- },
- { "Header",
- "\\s28\\widctlpar\\tqc\\tx4320\\tqr\\tx8640\\adjustright \\fs20\\cgrid ",
- "\\sbasedon0 \\snext28 header"
- },
- { "Footer",
- "\\s29\\widctlpar\\tqc\\tx4320\\tqr\\tx8640\\qr\\adjustright \\fs20\\cgrid ",
- "\\sbasedon0 \\snext29 footer"
- },
- { "GroupHeader",
- "\\s30\\li360\\sa60\\sb120\\keepn\\widctlpar\\adjustright \\b\\f1\\fs20\\cgrid ",
- "\\sbasedon0 \\snext30 GroupHeader"
- },
- { "CodeExample0",
- "\\s40\\li0\\widctlpar\\adjustright \\shading1000\\cbpat8 \\f2\\fs16\\cgrid ",
- "\\sbasedon0 \\snext41 Code Example 0"
- },
- { "CodeExample1",
- "\\s41\\li360\\widctlpar\\adjustright \\shading1000\\cbpat8 \\f2\\fs16\\cgrid ",
- "\\sbasedon0 \\snext42 Code Example 1"
- },
- { "CodeExample2",
- "\\s42\\li720\\widctlpar\\adjustright \\shading1000\\cbpat8 \\f2\\fs16\\cgrid ",
- "\\sbasedon0 \\snext43 Code Example 2"
- },
- { "CodeExample3",
- "\\s43\\li1080\\widctlpar\\adjustright \\shading1000\\cbpat8 \\f2\\fs16\\cgrid ",
- "\\sbasedon0 \\snext44 Code Example 3"
- },
- { "CodeExample4",
- "\\s44\\li1440\\widctlpar\\adjustright \\shading1000\\cbpat8 \\f2\\fs16\\cgrid ",
- "\\sbasedon0 \\snext45 Code Example 4"
- },
- { "CodeExample5",
- "\\s45\\li1800\\widctlpar\\adjustright \\shading1000\\cbpat8 \\f2\\fs16\\cgrid ",
- "\\sbasedon0 \\snext46 Code Example 5"
- },
- { "CodeExample6",
- "\\s46\\li2160\\widctlpar\\adjustright \\shading1000\\cbpat8 \\f2\\fs16\\cgrid ",
- "\\sbasedon0 \\snext47 Code Example 6"
- },
- { "CodeExample7",
- "\\s47\\li2520\\widctlpar\\adjustright \\shading1000\\cbpat8 \\f2\\fs16\\cgrid ",
- "\\sbasedon0 \\snext48 Code Example 7"
- },
- { "CodeExample8",
- "\\s48\\li2880\\widctlpar\\adjustright \\shading1000\\cbpat8 \\f2\\fs16\\cgrid ",
- "\\sbasedon0 \\snext49 Code Example 8"
- },
- { "CodeExample9",
- "\\s49\\li3240\\widctlpar\\adjustright \\shading1000\\cbpat8 \\f2\\fs16\\cgrid ",
- "\\sbasedon0 \\snext49 Code Example 9"
- },
- { "ListContinue0",
- "\\s50\\li0\\sa60\\sb30\\qj\\widctlpar\\qj\\adjustright \\fs20\\cgrid ",
- "\\sbasedon0 \\snext51 List Continue 0"
- },
- { "ListContinue1",
- "\\s51\\li360\\sa60\\sb30\\qj\\widctlpar\\qj\\adjustright \\fs20\\cgrid ",
- "\\sbasedon0 \\snext52 List Continue 1"
- },
- { "ListContinue2",
- "\\s52\\li720\\sa60\\sb30\\qj\\widctlpar\\qj\\adjustright \\fs20\\cgrid ",
- "\\sbasedon0 \\snext53 List Continue 2"
- },
- { "ListContinue3",
- "\\s53\\li1080\\sa60\\sb30\\qj\\widctlpar\\qj\\adjustright \\fs20\\cgrid ",
- "\\sbasedon0 \\snext54 List Continue 3"
- },
- { "ListContinue4",
- "\\s54\\li1440\\sa60\\sb30\\qj\\widctlpar\\qj\\adjustright \\fs20\\cgrid ",
- "\\sbasedon0 \\snext55 List Continue 4"
- },
- { "ListContinue5",
- "\\s55\\li1800\\sa60\\sb30\\qj\\widctlpar\\qj\\adjustright \\fs20\\cgrid ",
- "\\sbasedon0 \\snext56 List Continue 5"
- },
- { "ListContinue6",
- "\\s56\\li2160\\sa60\\sb30\\qj\\widctlpar\\qj\\adjustright \\fs20\\cgrid ",
- "\\sbasedon0 \\snext57 List Continue 6"
- },
- { "ListContinue7",
- "\\s57\\li2520\\sa60\\sb30\\qj\\widctlpar\\qj\\adjustright \\fs20\\cgrid ",
- "\\sbasedon0 \\snext58 List Continue 7"
- },
- { "ListContinue8",
- "\\s58\\li2880\\sa60\\sb30\\qj\\widctlpar\\qj\\adjustright \\fs20\\cgrid ",
- "\\sbasedon0 \\snext59 List Continue 8"
- },
- { "ListContinue9",
- "\\s59\\li3240\\sa60\\sb30\\qj\\widctlpar\\qj\\adjustright \\fs20\\cgrid ",
- "\\sbasedon0 \\snext59 List Continue 9"
- },
- { "DescContinue0",
- "\\s60\\li0\\widctlpar\\ql\\adjustright \\fs20\\cgrid ",
- "\\sbasedon0 \\snext61 DescContinue 0"
- },
- { "DescContinue1",
- "\\s61\\li360\\widctlpar\\ql\\adjustright \\fs20\\cgrid ",
- "\\sbasedon0 \\snext62 DescContinue 1"
- },
- { "DescContinue2",
- "\\s62\\li720\\widctlpar\\ql\\adjustright \\fs20\\cgrid ",
- "\\sbasedon0 \\snext63 DescContinue 2"
- },
- { "DescContinue3",
- "\\s63\\li1080\\widctlpar\\ql\\adjustright \\fs20\\cgrid ",
- "\\sbasedon0 \\snext64 DescContinue 3"
- },
- { "DescContinue4",
- "\\s64\\li1440\\widctlpar\\ql\\adjustright \\fs20\\cgrid ",
- "\\sbasedon0 \\snext65 DescContinue 4"
- },
- { "DescContinue5",
- "\\s65\\li1800\\widctlpar\\ql\\adjustright \\fs20\\cgrid ",
- "\\sbasedon0 \\snext66 DescContinue 5"
- },
- { "DescContinue6",
- "\\s66\\li2160\\widctlpar\\ql\\adjustright \\fs20\\cgrid ",
- "\\sbasedon0 \\snext67 DescContinue 6"
- },
- { "DescContinue7",
- "\\s67\\li2520\\widctlpar\\ql\\adjustright \\fs20\\cgrid ",
- "\\sbasedon0 \\snext68 DescContinue 7"
- },
- { "DescContinue8",
- "\\s68\\li2880\\widctlpar\\ql\\adjustright \\fs20\\cgrid ",
- "\\sbasedon0 \\snext69 DescContinue 8"
- },
- { "DescContinue9",
- "\\s69\\li3240\\widctlpar\\ql\\adjustright \\fs20\\cgrid ",
- "\\sbasedon0 \\snext69 DescContinue 9"
- },
- { "LatexTOC0",
- "\\s70\\li0\\sa30\\sb30\\widctlpar\\tqr\\tldot\\tx8640\\adjustright \\fs20\\cgrid ",
- "\\sbasedon0 \\snext81 LatexTOC 0"
- },
- { "LatexTOC1",
- "\\s71\\li360\\sa27\\sb27\\widctlpar\\tqr\\tldot\\tx8640\\adjustright \\fs20\\cgrid ",
- "\\sbasedon0 \\snext82 LatexTOC 1"
- },
- { "LatexTOC2",
- "\\s72\\li720\\sa24\\sb24\\widctlpar\\tqr\\tldot\\tx8640\\adjustright \\fs20\\cgrid ",
- "\\sbasedon0 \\snext83 LatexTOC 2"
- },
- { "LatexTOC3",
- "\\s73\\li1080\\sa21\\sb21\\widctlpar\\tqr\\tldot\\tx8640\\adjustright \\fs20\\cgrid ",
- "\\sbasedon0 \\snext84 LatexTOC 3"
- },
- { "LatexTOC4",
- "\\s74\\li1440\\sa18\\sb18\\widctlpar\\tqr\\tldot\\tx8640\\adjustright \\fs20\\cgrid ",
- "\\sbasedon0 \\snext85 LatexTOC 4"
- },
- { "LatexTOC5",
- "\\s75\\li1800\\sa15\\sb15\\widctlpar\\tqr\\tldot\\tx8640\\adjustright \\fs20\\cgrid ",
- "\\sbasedon0 \\snext86 LatexTOC 5"
- },
- { "LatexTOC6",
- "\\s76\\li2160\\sa12\\sb12\\widctlpar\\tqr\\tldot\\tx8640\\adjustright \\fs20\\cgrid ",
- "\\sbasedon0 \\snext87 LatexTOC 6"
- },
- { "LatexTOC7",
- "\\s77\\li2520\\sa9\\sb9\\widctlpar\\tqr\\tldot\\tx8640\\adjustright \\fs20\\cgrid ",
- "\\sbasedon0 \\snext88 LatexTOC 7"
- },
- { "LatexTOC8",
- "\\s78\\li2880\\sa6\\sb6\\widctlpar\\tqr\\tldot\\tx8640\\adjustright \\fs20\\cgrid ",
- "\\sbasedon0 \\snext89 LatexTOC 8"
- },
- { "LatexTOC9",
- "\\s79\\li3240\\sa3\\sb3\\widctlpar\\tqr\\tldot\\tx8640\\adjustright \\fs20\\cgrid ",
- "\\sbasedon0 \\snext89 LatexTOC 9"
- },
- { "ListBullet0",
- "\\s80\\fi-360\\li360\\widctlpar\\jclisttab\\tx360{\\*\\pn \\pnlvlbody\\ilvl0\\ls1\\pnrnot0\\pndec }\\ls1\\adjustright \\fs20\\cgrid ",
- "\\sbasedon0 \\snext81 \\sautoupd List Bullet 0"
- },
- { "ListBullet1",
- "\\s81\\fi-360\\li720\\widctlpar\\jclisttab\\tx720{\\*\\pn \\pnlvlbody\\ilvl0\\ls2\\pnrnot0\\pndec }\\ls2\\adjustright \\fs20\\cgrid ",
- "\\sbasedon0 \\snext82 \\sautoupd List Bullet 1"
- },
- { "ListBullet2",
- "\\s82\\fi-360\\li1080\\widctlpar\\jclisttab\\tx1080{\\*\\pn \\pnlvlbody\\ilvl0\\ls3\\pnrnot0\\pndec }\\ls3\\adjustright \\fs20\\cgrid ",
- "\\sbasedon0 \\snext83 \\sautoupd List Bullet 2"
- },
- { "ListBullet3",
- "\\s83\\fi-360\\li1440\\widctlpar\\jclisttab\\tx1440{\\*\\pn \\pnlvlbody\\ilvl0\\ls4\\pnrnot0\\pndec }\\ls4\\adjustright \\fs20\\cgrid ",
- "\\sbasedon0 \\snext84 \\sautoupd List Bullet 3"
- },
- { "ListBullet4",
- "\\s84\\fi-360\\li1800\\widctlpar\\jclisttab\\tx1800{\\*\\pn \\pnlvlbody\\ilvl0\\ls5\\pnrnot0\\pndec }\\ls5\\adjustright \\fs20\\cgrid ",
- "\\sbasedon0 \\snext85 \\sautoupd List Bullet 4"
- },
- { "ListBullet5",
- "\\s85\\fi-360\\li2160\\widctlpar\\jclisttab\\tx2160{\\*\\pn \\pnlvlbody\\ilvl0\\ls6\\pnrnot0\\pndec }\\ls6\\adjustright \\fs20\\cgrid ",
- "\\sbasedon0 \\snext86 \\sautoupd List Bullet 5"
- },
- { "ListBullet6",
- "\\s86\\fi-360\\li2520\\widctlpar\\jclisttab\\tx2520{\\*\\pn \\pnlvlbody\\ilvl0\\ls7\\pnrnot0\\pndec }\\ls7\\adjustright \\fs20\\cgrid ",
- "\\sbasedon0 \\snext87 \\sautoupd List Bullet 6"
- },
- { "ListBullet7",
- "\\s87\\fi-360\\li2880\\widctlpar\\jclisttab\\tx2880{\\*\\pn \\pnlvlbody\\ilvl0\\ls8\\pnrnot0\\pndec }\\ls8\\adjustright \\fs20\\cgrid ",
- "\\sbasedon0 \\snext88 \\sautoupd List Bullet 7"
- },
- { "ListBullet8",
- "\\s88\\fi-360\\li3240\\widctlpar\\jclisttab\\tx3240{\\*\\pn \\pnlvlbody\\ilvl0\\ls9\\pnrnot0\\pndec }\\ls9\\adjustright \\fs20\\cgrid ",
- "\\sbasedon0 \\snext89 \\sautoupd List Bullet 8"
- },
- { "ListBullet9",
- "\\s89\\fi-360\\li3600\\widctlpar\\jclisttab\\tx3600{\\*\\pn \\pnlvlbody\\ilvl0\\ls10\\pnrnot0\\pndec }\\ls10\\adjustright \\fs20\\cgrid ",
- "\\sbasedon0 \\snext89 \\sautoupd List Bullet 9"
- },
- { "ListEnum0",
- "\\s90\\fi-360\\li360\\widctlpar\\fs20\\cgrid ",
- "\\sbasedon0 \\snext91 \\sautoupd List Enum 0"
- },
- { "ListEnum1",
- "\\s91\\fi-360\\li720\\widctlpar\\fs20\\cgrid ",
- "\\sbasedon0 \\snext92 \\sautoupd List Enum 1"
- },
- { "ListEnum2",
- "\\s92\\fi-360\\li1080\\widctlpar\\fs20\\cgrid ",
- "\\sbasedon0 \\snext93 \\sautoupd List Enum 2"
- },
- { "ListEnum3",
- "\\s93\\fi-360\\li1440\\widctlpar\\fs20\\cgrid ",
- "\\sbasedon0 \\snext94 \\sautoupd List Enum 3"
- },
- { "ListEnum4",
- "\\s94\\fi-360\\li1800\\widctlpar\\fs20\\cgrid ",
- "\\sbasedon0 \\snext95 \\sautoupd List Enum 4"
- },
- { "ListEnum5",
- "\\s95\\fi-360\\li2160\\widctlpar\\fs20\\cgrid ",
- "\\sbasedon0 \\snext96 \\sautoupd List Enum 5"
- },
- { "ListEnum6",
- "\\s96\\fi-360\\li2520\\widctlpar\\fs20\\cgrid ",
- "\\sbasedon0 \\snext96 \\sautoupd List Enum 5"
- },
- { "ListEnum7",
- "\\s97\\fi-360\\li2880\\widctlpar\\fs20\\cgrid ",
- "\\sbasedon0 \\snext98 \\sautoupd List Enum 7"
- },
- { "ListEnum8",
- "\\s98\\fi-360\\li3240\\widctlpar\\fs20\\cgrid ",
- "\\sbasedon0 \\snext99 \\sautoupd List Enum 8"
- },
- { "ListEnum9",
- "\\s99\\fi-360\\li3600\\widctlpar\\fs20\\cgrid ",
- "\\sbasedon0 \\snext99 \\sautoupd List Enum 9"
- },
- { 0,
- 0,
- 0
- }
-};
-
-const QRegExp StyleData::s_clause("\\\\s[0-9]+\\s*");
-
-StyleData::StyleData(const char* reference, const char* definition)
-{
- int start = s_clause.match(reference); ASSERT(start >= 0);
- reference += start;
- index = (int)atol(reference + 2); ASSERT(index > 0);
-
- ASSERT(reference != 0);
- size_t size = 1 + strlen(reference);
- memcpy(this->reference = new char[size], reference, size);
-
- ASSERT(definition != 0);
- size = 1 + strlen(definition);
- memcpy(this->definition = new char[size], definition, size);
-}
-
-StyleData::~StyleData()
-{
- delete[] reference;
- delete[] definition;
-}
-
-bool StyleData::setStyle(const char* s, const char* styleName)
-{
- static const QRegExp subgroup("^{[^}]*}\\s*");
- static const QRegExp any_clause("^\\\\[a-z][a-z0-9-]*\\s*");
-
- int len = 0; // length of a particular RTF formatting control
- int ref_len = 0; // length of the whole formatting section of a style
- int start = s_clause.match(s, 0, &len);
- if (start < 0)
- {
- err("Style sheet '%s' contains no '\\s' clause.\n{%s}\n", styleName, s);
- return FALSE;
- }
- s += start;
- index = (int)atol(s + 2); ASSERT(index > 0);
-
- // search for the end of pure formatting codes
- const char* end = s + len;
- ref_len = len;
- bool haveNewDefinition = TRUE;
- for(;;)
- {
- if (*end == '{')
- {
- // subgroups are used for \\additive
- if (0 != subgroup.match(end, 0, &len))
- break;
- else
- {
- end += len;
- ref_len += len;
- }
- }
- else if (*end == '\\')
- {
- if (0 == strncmp(end, "\\snext", 6))
- break;
- if (0 == strncmp(end, "\\sbasedon", 9))
- break;
- if (0 != any_clause.match(end, 0, &len))
- break;
- end += len;
- ref_len += len;
- }
- else if (*end == 0)
- { // no style-definition part, keep default value
- haveNewDefinition = FALSE;
- break;
- }
- else // plain name without leading \\snext
- break;
- }
- delete[] reference;
- reference = new char[ref_len + 1];
- memcpy(reference, s, ref_len);
- reference[ref_len] = 0;
- if (haveNewDefinition)
- {
- delete[] definition;
- size_t size = 1 + strlen(end);
- definition = new char[size];
- memcpy(definition, end, size);
- }
- return TRUE;
-}
-
-void loadStylesheet(const char *name, QDict<StyleData>& dict)
-{
- QFile file(name);
- if (!file.open(IO_ReadOnly))
- {
- err("Can't open RTF style sheet file %s. Using defaults.\n",name);
- return;
- }
- msg("Loading RTF style sheet %s...\n",name);
-
- static const QRegExp separator("[ \t]*=[ \t]*");
- uint lineNr=1;
- QTextStream t(&file);
- t.setEncoding(QTextStream::UnicodeUTF8);
-
- while (!t.eof())
- {
- QCString s(4096); // string buffer of max line length
- s = t.readLine().stripWhiteSpace();
- if (s.isEmpty() || s.at(0)=='#') continue; // skip blanks & comments
- int sepLength;
- int sepStart = separator.match(s,0,&sepLength);
- if (sepStart<=0) // no valid assignment statement
- {
- warn(name,lineNr,"Assignment of style sheet name expected!\n");
- continue;
- }
- QCString key=s.left(sepStart);
- if (dict[key]==0) // not a valid style sheet name
- {
- warn(name,lineNr,"Invalid style sheet name %s ignored.\n",key.data());
- continue;
- }
- StyleData* styleData = dict.find(key);
- if (styleData == 0)
- {
- warn(name,lineNr,"Unknown style sheet name %s ignored.\n",key.data());
- continue;
- }
- s+=" "; // add command separator
- styleData->setStyle(s.data() + sepStart + sepLength, key.data());
- lineNr++;
- }
-}
-
-QDict<StyleData> rtf_Style(257);
-
-void loadExtensions(const char *name)
-{
- QFile file(name);
- if (!file.open(IO_ReadOnly))
- {
- err("Can't open RTF extensions file %s. Using defaults.\n",name);
- return;
- }
- msg("Loading RTF extensions %s...\n",name);
-
- static const QRegExp separator("[ \t]*=[ \t]*");
- uint lineNr=1;
- QTextStream t(&file);
- t.setEncoding(QTextStream::UnicodeUTF8);
-
- while (!t.eof())
- {
- QCString s(4096); // string buffer of max line length
- s = t.readLine().stripWhiteSpace();
- if (s.length()==0 || s.at(0)=='#') continue; // skip blanks & comments
- int sepLength;
- int sepStart = separator.match(s,0,&sepLength);
- if (sepStart<=0) // no valid assignment statement
- {
- warn(name,lineNr,"Assignment of extension field expected!\n");
- continue;
- }
- QCString key=s.left(sepStart);
- QCString data=s.data() + sepStart + sepLength;
-
- if (key == "Title") rtf_title = data.data();
- if (key == "Subject") rtf_subject = data.data();
- if (key == "Comments") rtf_comments = data.data();
- if (key == "Company") rtf_company = data.data();
- if (key == "LogoFilename") rtf_logoFilename = data.data();
- if (key == "Author") rtf_author = data.data();
- if (key == "Manager") rtf_manager = data.data();
- if (key == "DocumentType") rtf_documentType = data.data();
- if (key == "DocumentId") rtf_documentId = data.data();
- if (key == "Keywords") rtf_keywords = data.data();
- lineNr++;
- }
-}
-
diff --git a/trunk/src/rtfstyle.h b/trunk/src/rtfstyle.h
deleted file mode 100644
index 3dd4897..0000000
--- a/trunk/src/rtfstyle.h
+++ /dev/null
@@ -1,83 +0,0 @@
-/******************************************************************************
- *
- *
- *
- *
- * Copyright (C) 1997-2012 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.
- *
- */
-
-#ifndef RTFSTYLE_H
-#define RTFSTYLE_H
-
-#include "qtbc.h"
-#include <qregexp.h>
-#include <qdict.h>
-
-// used for table column width calculation
-const int rtf_pageWidth = 8748;
-
-extern QCString rtf_title;
-extern QCString rtf_subject;
-extern QCString rtf_comments;
-extern QCString rtf_company;
-extern QCString rtf_logoFilename;
-extern QCString rtf_author;
-extern QCString rtf_manager;
-extern QCString rtf_documentType;
-extern QCString rtf_documentId;
-extern QCString rtf_keywords;
-
-struct RTFListItemInfo
-{
- bool isEnum;
- int number;
-};
-
-const int rtf_maxIndentLevels = 10;
-
-extern RTFListItemInfo rtf_listItemInfo[rtf_maxIndentLevels];
-
-struct Rtf_Style_Default
-{
- const char *name;
- const char *reference;
- const char *definition;
-};
-
-extern char rtf_Style_Reset[];
-extern Rtf_Style_Default rtf_Style_Default[];
-
-struct StyleData
-{
- // elements of this type are stored in dictionary Rtf_Style
- //
- // to define a tag in the header reference + definition is required
- // to use a tag in the body of the document only reference is required
-
- unsigned index; // index in style-sheet, i.e. number in s-clause
- char* reference; // everything required to apply the style
- char* definition; // aditional tags like \snext and style name
-
- StyleData(const char* reference, const char* definition);
- ~StyleData();
- bool setStyle(const char* s, const char* styleName);
-
- static const QRegExp s_clause;
-};
-
-extern QDict<StyleData> rtf_Style;
-
-void loadExtensions(const char *name);
-void loadStylesheet(const char *name, QDict<StyleData>& dict);
-
-#endif
diff --git a/trunk/src/scanner.h b/trunk/src/scanner.h
deleted file mode 100644
index 70dad99..0000000
--- a/trunk/src/scanner.h
+++ /dev/null
@@ -1,55 +0,0 @@
-/******************************************************************************
- *
- *
- *
- * Copyright (C) 1997-2012 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.
- *
- */
-
-#ifndef SCANNER_H
-#define SCANNER_H
-
-#include "parserintf.h"
-
-/** \brief C-like language parser using state-based lexical scanning.
- *
- * This is the language parser for doxygen. It is somewhat fuzzy and
- * supports C++ and various languages that are closely related to C++,
- * such as C, C#, Objective-C, Java, PHP, and IDL.
- */
-class CLanguageScanner : public ParserInterface
-{
- public:
- virtual ~CLanguageScanner() {}
- void parseInput(const char *fileName,
- const char *fileBuf,
- Entry *root);
- bool needsPreprocessing(const QCString &extension);
- void parseCode(CodeOutputInterface &codeOutIntf,
- const char *scopeName,
- const QCString &input,
- bool isExampleBlock,
- const char *exampleName=0,
- FileDef *fileDef=0,
- int startLine=-1,
- int endLine=-1,
- bool inlineFragment=FALSE,
- MemberDef *memberDef=0,
- bool showLineNumbers=TRUE
- );
- void resetCodeParserState();
- void parsePrototype(const char *text);
-};
-
-void scanFreeScanner();
-
-#endif
diff --git a/trunk/src/scanner.l b/trunk/src/scanner.l
deleted file mode 100644
index 7bf8f2b..0000000
--- a/trunk/src/scanner.l
+++ /dev/null
@@ -1,6154 +0,0 @@
-/*****************************************************************************
- *
- *
- *
- * Copyright (C) 1997-2012 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.
- *
- */
-
-%{
-
-/*
- * includes
- */
-#include <stdio.h>
-#include <stdlib.h>
-#include <assert.h>
-#include <ctype.h>
-
-#include "qtbc.h"
-#include <qarray.h>
-#include <qstack.h>
-#include <qregexp.h>
-#include <unistd.h>
-#include <qfile.h>
-
-#include "scanner.h"
-#include "entry.h"
-#include "message.h"
-#include "config.h"
-#include "doxygen.h"
-#include "util.h"
-#include "defargs.h"
-#include "language.h"
-#include "commentscan.h"
-#include "code.h"
-#include "arguments.h"
-
-#define YY_NEVER_INTERACTIVE 1
-
-/* -----------------------------------------------------------------
- *
- * statics
- */
-static ParserInterface *g_thisParser;
-static const char * inputString;
-static int inputPosition;
-static QFile inputFile;
-static int lastContext;
-static int lastCContext;
-static int lastDocContext;
-static int lastCPPContext;
-static int lastSkipSharpContext;
-static int lastSkipRoundContext;
-static int lastStringContext;
-static int lastCurlyContext;
-static int lastRoundContext;
-static int lastSquareContext;
-static int lastInitializerContext;
-static int lastClassTemplSpecContext;
-static int lastPreLineCtrlContext;
-static int lastSkipVerbStringContext;
-static int lastCommentInArgContext;
-static int lastCSConstraint;
-static int lastHereDocContext;
-static int lastDefineContext;
-static Protection protection;
-static Protection baseProt;
-static int sharpCount = 0 ;
-static int roundCount = 0 ;
-static int curlyCount = 0 ;
-static int squareCount = 0 ;
-static int padCount = 0 ;
-static QCString slString;
-static Entry* current_root = 0 ;
-static Entry* global_root = 0 ;
-static Entry* current = 0 ;
-static Entry* previous = 0 ;
-static Entry* tempEntry = 0 ;
-static Entry* firstTypedefEntry = 0 ;
-static Entry* memspecEntry = 0 ;
-static int yyLineNr = 1 ;
-static int anonCount = 0 ;
-static int anonNSCount = 0 ;
-static QCString yyFileName;
-static MethodTypes mtype;
-static bool gstat;
-static bool removeSlashes;
-static Specifier virt;
-static Specifier baseVirt;
-static QCString msType,msName,msArgs;
-static bool isTypedef;
-static int tmpDocType;
-static QCString sectionLabel;
-static QCString sectionTitle;
-static QCString funcPtrType;
-static QCString templateStr;
-static QCString aliasName;
-static QCString baseName;
-static QCString* specName;
-static QCString formulaText;
-static QCString formulaEnd;
-static bool useOverrideCommands = FALSE;
-
-static SrcLangExt language;
-static bool insideIDL = FALSE; //!< processing IDL code?
-static bool insideJava = FALSE; //!< processing Java code?
-static bool insideCS = FALSE; //!< processing C# code?
-static bool insideD = FALSE; //!< processing D code?
-static bool insidePHP = FALSE; //!< processing PHP code?
-static bool insideObjC = FALSE; //!< processing Objective C code?
-static bool insideCli = FALSE; //!< processing C++/CLI code?
-static bool insideJS = FALSE; //!< processing JavaScript code?
-
-static bool insideCppQuote = FALSE;
-static bool insideProtocolList = FALSE;
-
-static int argRoundCount;
-static int argSharpCount;
-static int currentArgumentContext;
-static int lastCopyArgStringContext;
-static int lastCopyArgContext;
-static QCString *copyArgString;
-static QCString fullArgString;
-
-static ArgumentList *currentArgumentList;
-static char lastCopyArgChar;
-
-static QCString *pCopyQuotedString;
-static QCString *pCopyRoundString;
-static QCString *pCopyCurlyString;
-
-static QGString *pCopyCurlyGString;
-static QGString *pCopyRoundGString;
-static QGString *pCopyQuotedGString;
-static QGString *pCopyHereDocGString;
-static QGString *pSkipVerbString;
-static QStack<Grouping> autoGroupStack;
-
-static bool insideFormula;
-static bool insideTryBlock=FALSE;
-static bool insideCode;
-static bool needsSemi;
-
-//static int depthIf;
-static int initBracketCount;
-static QCString memberGroupRelates;
-static QCString memberGroupInside;
-static QCString xrefItemKey;
-static QCString xrefItemTitle;
-static QCString xrefListTitle;
-
-static QCString g_skipBlockName;
-static QCString oldStyleArgType;
-static QCString docBackup;
-static QCString briefBackup;
-static bool g_inputFromFile;
-
-static int docBlockContext;
-static QGString docBlock;
-static QCString docBlockName;
-static bool docBlockInBody;
-static bool docBlockAutoBrief;
-static char docBlockTerm;
-
-static QCString idlAttr;
-static QCString idlProp;
-
-static bool g_lexInit = FALSE;
-static bool externC;
-
-static QCString g_hereDocId;
-
-//-----------------------------------------------------------------------------
-
-// forward declarations
-//static void handleGroupStartCommand(const char *header);
-//static void handleGroupEndCommand();
-
-//-----------------------------------------------------------------------------
-
-static void initParser()
-{
- sectionLabel.resize(0);
- sectionTitle.resize(0);
- baseName.resize(0);
- formulaText.resize(0);
- protection = Public;
- baseProt = Public;
- sharpCount = 0;
- roundCount = 0;
- curlyCount = 0;
- mtype = Method;
- gstat = FALSE;
- virt = Normal;
- baseVirt = Normal;
- isTypedef = FALSE;
- autoGroupStack.clear();
- insideTryBlock = FALSE;
- autoGroupStack.setAutoDelete(TRUE);
- insideFormula = FALSE;
- insideCode=FALSE;
- insideCli=Config_getBool("CPP_CLI_SUPPORT");
- previous = 0;
-}
-
-static void initEntry()
-{
- if (insideJava)
- {
- protection = (current_root->spec & (Entry::Interface|Entry::Enum)) ? Public : Package;
- }
- current->protection = protection ;
- current->mtype = mtype;
- current->virt = virt;
- current->stat = gstat;
- current->lang = language;
- //printf("*** initEntry() language=%d\n",language);
- //if (!autoGroupStack.isEmpty())
- //{
- // //printf("Appending group %s\n",autoGroupStack.top()->groupname.data());
- // current->groups->append(new Grouping(*autoGroupStack.top()));
- //}
- initGroupInfo(current);
- isTypedef=FALSE;
-}
-
-
-//-----------------------------------------------------------------------------
-
-///// remove any automatic grouping and add new one (if given)
-//static void setCurrentGroup( QCString *newgroup, Grouping::GroupPri_t pri )
-//{
-// /* remove auto group name from current entry and discard it */
-// Grouping *g = current->groups->first();
-// int i=0;
-// while (g)
-// {
-// if (g->pri <= Grouping::GROUPING_AUTO_DEF)
-// {
-// current->groups->remove(i);
-// i--;
-// }
-// g=current->groups->next();
-// i++;
-// }
-//
-// /* use new group name instead? */
-// if ( newgroup )
-// {
-// current->groups->append(new Grouping(*newgroup, pri));
-// }
-//}
-//
-//static int newMemberGroupId()
-//{
-// static int curGroupId=0;
-// return curGroupId++;
-//}
-//
-// forward declarations
-//static void startGroupInDoc();
-//static void endGroup();
-
-//-----------------------------------------------------------------------------
-
-static void lineCount()
-{
- for( const char* c = yytext ; *c ; ++c )
- yyLineNr += (*c == '\n') ;
-}
-
-static void addType( Entry* current )
-{
- uint tl=current->type.length();
- if( tl>0 && !current->name.isEmpty() && current->type.at(tl-1)!='.')
- {
- current->type += ' ' ;
- }
- current->type += current->name ;
- current->name.resize(0) ;
- tl=current->type.length();
- if( tl>0 && !current->args.isEmpty() && current->type.at(tl-1)!='.')
- {
- current->type += ' ' ;
- }
- current->type += current->args ;
- current->args.resize(0) ;
- current->argList->clear();
-}
-
-
-static QCString stripQuotes(const char *s)
-{
- QCString name;
- if (s==0 || *s==0) return name;
- name=s;
- if (name.at(0)=='"' && name.at(name.length()-1)=='"')
- {
- name=name.mid(1,name.length()-2);
- }
- return name;
-}
-
-//-----------------------------------------------------------------
-
-static void startCommentBlock(bool);
-static void handleCommentBlock(const QCString &doc,bool brief);
-static void handleParametersCommentBlocks(ArgumentList *al);
-
-//-----------------------------------------------------------------
-
-static bool nameIsOperator(QCString &name)
-{
- int i=name.find("operator");
- if (i==-1) return FALSE;
- if (i==0 && !isId(name.at(8))) return TRUE; // case operator ::X
- if (i>0 && !isId(name.at(i-1)) && !isId(name.at(i+8))) return TRUE; // case X::operator
- return FALSE; // case TEXToperatorTEXT
-}
-
-//-----------------------------------------------------------------------------
-
-static void setContext()
-{
- QCString fileName = yyFileName;
- language = getLanguageFromFileName(fileName);
- insideIDL = language==SrcLangExt_IDL;
- insideJava = language==SrcLangExt_Java;
- insideCS = language==SrcLangExt_CSharp;
- insideD = language==SrcLangExt_D;
- insidePHP = language==SrcLangExt_PHP;
- insideObjC = language==SrcLangExt_ObjC;
- insideJS = language==SrcLangExt_JS;
- if ( insidePHP )
- {
- useOverrideCommands = TRUE;
- }
- //printf("setContext(%s) insideIDL=%d insideJava=%d insideCS=%d "
- // "insideD=%d insidePHP=%d insideObjC=%d\n",
- // yyFileName.data(),insideIDL,insideJava,insideCS,insideD,insidePHP,insideObjC
- // );
-}
-
-//-----------------------------------------------------------------------------
-
-static void prependScope()
-{
- if (current_root->section & Entry::SCOPE_MASK)
- {
- //printf("--- prependScope %s to %s\n",current_root->name.data(),current->name.data());
- current->name.prepend(current_root->name+"::");
- if (current_root->tArgLists)
- {
- if (current->tArgLists==0)
- {
- current->tArgLists = new QList<ArgumentList>;
- current->tArgLists->setAutoDelete(TRUE);
- }
- //printf("prependScope #=%d #current=%d\n",current_root->tArgLists->count(),current->tArgLists->count());
- QListIterator<ArgumentList> talsi(*current_root->tArgLists);
- ArgumentList *srcAl=0;
- for (talsi.toLast();(srcAl=talsi.current());--talsi)
- {
- ArgumentList *dstAl = new ArgumentList;
- QListIterator<Argument> tali(*srcAl);
- Argument *a;
- for (;(a=tali.current());++tali)
- {
- dstAl->append(new Argument(*a));
- //printf("appending argument %s %s\n",a->type.data(),a->name.data());
- }
- current->tArgLists->insert(0,dstAl);
- }
- }
- }
-}
-
-//-----------------------------------------------------------------------------
-
-/*! Returns TRUE iff the current entry could be a K&R style C function */
-static bool checkForKnRstyleC()
-{
- if (((QCString)yyFileName).right(2).lower()!=".c") return FALSE; // must be a C file
- if (!current->argList) return FALSE; // must have arguments
- ArgumentListIterator ali(*current->argList);
- Argument *a;
- for (ali.toFirst();(a=ali.current());++ali)
- {
- // in K&R style argument do not have a type, but doxygen expects a type
- // so it will think the argument has no name
- if (a->type.isEmpty() || !a->name.isEmpty()) return FALSE;
- }
- return TRUE;
-}
-
-//-----------------------------------------------------------------------------
-
-static void splitKnRArg(QCString &oldStyleArgPtr,QCString &oldStyleArgName)
-{
- int si = current->args.length();
- if (oldStyleArgType.isEmpty()) // new argument
- {
- static QRegExp re("([^)]*)");
- int bi1 = current->args.findRev(re);
- int bi2 = bi1!=-1 ? current->args.findRev(re,bi1-1) : -1;
- char c;
- if (bi1!=-1 && bi2!=-1) // found something like "int (*func)(int arg)"
- {
- int s=bi2+1;
- oldStyleArgType = current->args.left(s);
- int i=s;
- while (i<si && ((c=current->args.at(i))=='*' || isspace((uchar)c))) i++;
- oldStyleArgType += current->args.mid(s,i-s);
- s=i;
- while (i<si && isId(current->args.at(i))) i++;
- oldStyleArgName = current->args.mid(s,i-s);
- oldStyleArgType+=current->args.mid(i);
- }
- else if (bi1!=-1) // redundant braces like in "int (*var)"
- {
- int s=bi1;
- oldStyleArgType = current->args.left(s);
- s++;
- int i=s+1;
- while (i<si && ((c=current->args.at(i))=='*' || isspace((uchar)c))) i++;
- oldStyleArgType += current->args.mid(s,i-s);
- s=i;
- while (i<si && isId(current->args.at(i))) i++;
- oldStyleArgName = current->args.mid(s,i-s);
- }
- else // normal "int *var"
- {
- int l=si,i=l-1,j;
- char c;
- // look for start of name in "type *name"
- while (i>=0 && isId(current->args.at(i))) i--;
- j=i+1;
- // look for start of *'s
- while (i>=0 && ((c=current->args.at(i))=='*' || isspace((uchar)c))) i--;
- i++;
- if (i!=l)
- {
- oldStyleArgType=current->args.left(i);
- oldStyleArgPtr=current->args.mid(i,j-i);
- oldStyleArgName=current->args.mid(j).stripWhiteSpace();
- }
- else
- {
- oldStyleArgName=current->args.copy().stripWhiteSpace();
- }
- }
- }
- else // continuation like *arg2 in "int *args,*arg2"
- {
- int l=si,j=0;
- char c;
- while (j<l && ((c=current->args.at(j))=='*' || isspace((uchar)c))) j++;
- if (j>0)
- {
- oldStyleArgPtr=current->args.left(j);
- oldStyleArgName=current->args.mid(j).stripWhiteSpace();
- }
- else
- {
- oldStyleArgName=current->args.copy().stripWhiteSpace();
- }
- }
- //fprintf(stderr,"type=%s ptr=%s name=%s\n",oldStyleArgType.data(),oldStyleArgPtr.data(),oldStyleArgName.data());
-}
-
-//-----------------------------------------------------------------------------
-
-/*! Update the argument \a name with additional \a type info. For K&R style
- * function the type is found \e after the argument list, so this routine
- * in needed to fix up.
- */
-static void addKnRArgInfo(const QCString &type,const QCString &name,
- const QCString &brief,const QCString &docs)
-{
- if (current->argList==0) return;
- ArgumentListIterator ali(*current->argList);
- Argument *a;
- for (ali.toFirst();(a=ali.current());++ali)
- {
- if (a->type==name)
- {
- a->type=type.stripWhiteSpace();
- if (a->type.left(9)=="register ") // strip keyword
- {
- a->type=a->type.mid(9);
- }
- a->name=name.stripWhiteSpace();
- if (!brief.isEmpty() && !docs.isEmpty())
- {
- a->docs=brief+"\n\n"+docs;
- }
- else if (!brief.isEmpty())
- {
- a->docs=brief;
- }
- else
- {
- a->docs=docs;
- }
- }
- }
-}
-
-//-----------------------------------------------------------------------------
-
-
-void fixArgumentListForJavaScript(ArgumentList *al)
-{
- if (al==0) return;
- ArgumentListIterator ali(*al);
- Argument *a;
- for (ali.toFirst();(a=ali.current());++ali)
- {
- if (!a->type.isEmpty() && a->name.isEmpty())
- { // a->type is actually the (typeless) parameter name, so move it
- a->name=a->type;
- a->type.resize(0);
- }
- }
-}
-
-/* ----------------------------------------------------------------- */
-#undef YY_INPUT
-#define YY_INPUT(buf,result,max_size) result=yyread(buf,max_size);
-
-static int yyread(char *buf,int max_size)
-{
- int c=0;
- if (g_inputFromFile)
- {
- c = inputFile.readBlock(buf,max_size);
- if (c==-1) yy_fatal_error("input in flex scanner failed");
- }
- else
- {
- while( c < max_size && inputString[inputPosition] )
- {
- *buf = inputString[inputPosition++] ;
- //printf("%d (%c)\n",*buf,*buf);
- c++; buf++;
- }
- }
- return c;
-}
-
-%}
-
- /* start command character */
-CMD ("\\"|"@")
-SECTIONCMD {CMD}("image"|"author"|"internal"|"version"|"date"|"deprecated"|"param"|"exception"|"return"[s]?|"retval"|"bug"|"warning"|"par"|"sa"|"see"|"pre"|"post"|"invariant"|"note"|"remark"[s]?|"todo"|"test"|"xrefitem"|"ingroup"|"callgraph"|"callergraph"|"latexonly"|"htmlonly"|"xmlonly"|"manonly"|"{"|"verbatim"|"dotfile"|"dot"|"defgroup"|"addtogroup"|"weakgroup"|"class"|"namespace"|"union"|"struct"|"fn"|"var"|"details"|"typedef"|"def"|"overload")|("<"{PRE}">")
-BN [ \t\n\r]
-BL [ \t\r]*"\n"
-B [ \t]
-BS ^(({B}*"//")?)(({B}*"*"+)?){B}*
-FILESCHAR [a-z_A-Z0-9\x80-\xFF\\:\\\/\-\+]
-FILEECHAR [a-z_A-Z0-9\x80-\xFF\-\+]
-FILE ({FILESCHAR}*{FILEECHAR}+("."{FILESCHAR}*{FILEECHAR}+)*)|("\""[^\n\"]+"\"")
-ID "$"?[a-z_A-Z\x80-\xFF][a-z_A-Z0-9\x80-\xFF]*
-SCOPEID {ID}({ID}*{BN}*"::"{BN}*)*({ID}?)
-SCOPENAME "$"?(({ID}?{BN}*"::"{BN}*)*)(((~|!){BN}*)?{ID})
-PHPSCOPENAME ({ID}"\\")+{ID}
-TSCOPE {ID}("<"[a-z_A-Z0-9 \t\*\&,:]*">")?
-CSSCOPENAME (({ID}?{BN}*"."{BN}*)*)((~{BN}*)?{ID})
-PRE [pP][rR][eE]
-CODE [cC][oO][dD][eE]
-CHARLIT (("'"\\[0-7]{1,3}"'")|("'"\\."'")|("'"[^'\\\n]{1,4}"'"))
-PHPKW ("require"|"require_once"|"include"|"include_once"|"echo")[^a-zA-Z0-9_;]
-IDLATTR ("["[^\]]*"]"){BN}*
-TYPEDEFPREFIX (("typedef"{BN}+)?)((("volatile"|"const"){BN}+)?)
-
-%option noyywrap
-
- /* language parsing states */
-
-%x Define
-%x DefineEnd
-%x CompoundName
-%x ClassVar
-%x CSConstraintName
-%x CSConstraintType
-%x CSIndexer
-%x ClassCategory
-%x ClassTemplSpec
-%x CliPropertyType
-%x CliPropertyIndex
-%x CliOverride
-%x Bases
-%x BasesProt
-%x NextSemi
-%x BitFields
-%x FindMembers
-%x FindMembersPHP
-%x FindMemberName
-%x FindFields
-%x FindFieldArg
-%x Function
-%x FuncRound
-%x ExcpRound
-%x ExcpList
-%x FuncQual
-%x Operator
-%x Array
-%x ReadBody
-%x ReadNSBody
-%x ReadBodyIntf
-%x Using
-%x UsingDirective
-%x SkipCurly
-%x SkipCurlyCpp
-%x SkipCurlyEndDoc
-%x SkipString
-%x SkipPHPString
-%x SkipInits
-%x SkipCPP
-%x SkipCPPBlock
-%x SkipComment
-%x SkipCxxComment
-%x SkipCurlyBlock
-%x SkipRoundBlock
-%x Sharp
-%x SkipSharp
-%x SkipRound
-%x SkipSquare
-%x SkipRemainder
-%x TypedefName
-%x TryFunctionBlock
-%x TryFunctionBlockEnd
-%x Comment
-%x PackageName
-%x JavaImport
-%x PHPUse
-%x PHPUseAs
-%x CSAccessorDecl
-%x CSGeneric
-%x PreLineCtrl
-%x DefinePHP
-%x DefinePHPEnd
-%x OldStyleArgs
-%x SkipVerbString
-%x ObjCMethod
-%x ObjCReturnType
-%x ObjCParams
-%x ObjCParamType
-%x ObjCProtocolList
-%x ObjCPropAttr
-%x ObjCSkipStatement
-%x QtPropType
-%x QtPropName
-%x QtPropAttr
-%x QtPropRead
-%x QtPropWrite
-%x ReadInitializer
-%x GetCallType
-%x CppQuote
-%x EndCppQuote
-%x MemberSpec
-%x MemberSpecSkip
-%x EndTemplate
-%x FuncPtr
-%x FuncPtrOperator
-%x EndFuncPtr
-%x ReadFuncArgType
-%x ReadTempArgs
-%x IDLUnionCase
-%x NSAliasName
-%x NSAliasArg
-%x CopyString
-%x CopyPHPString
-%x CopyGString
-%x CopyPHPGString
-%x CopyRound
-%x CopyCurly
-%x GCopyRound
-%x GCopyCurly
-%x SkipUnionSwitch
-%x Specialization
-%x FuncPtrInit
-%x FuncFunc
-%x FuncFuncEnd
-%x FuncFuncType
-%x FuncFuncArray
-%x CopyArgString
-%x CopyArgPHPString
-%x CopyArgRound
-%x CopyArgSharp
-%x CopyArgComment
-%x CopyArgCommentLine
-%x CopyArgVerbatim
-%x HereDoc
-%x HereDocEnd
-%x CopyHereDoc
-%x CopyHereDocEnd
-
-%x IDLAttribute
-%x IDLProp
-%x IDLPropName
-
- /** Prototype scanner states */
-
-%x Prototype
-%x PrototypePtr
-%x PrototypeQual
-%x PrototypeExc
-%x PrototypeSkipLine
-
- /** comment parsing states */
-
-%x DocLine
-%x DocBlock
-%x DocCopyBlock
-
-%%
-
-<NextSemi>"{" {
- curlyCount=0;
- needsSemi = TRUE;
- BEGIN(SkipCurlyBlock);
- }
-<NextSemi>"(" {
- roundCount=0;
- BEGIN(SkipRoundBlock);
- }
-<SkipRoundBlock>"(" {
- ++roundCount;
- }
-<SkipRoundBlock>")" {
- if (roundCount )
- --roundCount ;
- else
- BEGIN( NextSemi ) ;
- }
-<SkipCurlyBlock>"{" {
- ++curlyCount ;
- }
-<SkipCurlyBlock>"}" {
- if( curlyCount )
- {
- --curlyCount ;
- }
- else if (needsSemi)
- {
- BEGIN( NextSemi );
- }
- else
- {
- BEGIN( FindMembers );
- }
- }
-<NextSemi>\' {
- if (insidePHP)
- {
- lastStringContext=NextSemi;
- BEGIN(SkipPHPString);
- }
- }
-<NextSemi>{CHARLIT} { if (insidePHP) REJECT; }
-<NextSemi>\" {
- lastStringContext=NextSemi;
- BEGIN(SkipString);
- }
-<NextSemi>[;,] {
- unput(*yytext);
- BEGIN( FindMembers );
- }
-<BitFields>[;,] {
- unput(*yytext);
- BEGIN( FindMembers );
- }
-<FindMembers>"<?php" { // PHP code with unsupported extension?
- insidePHP = TRUE;
- }
-<FindMembersPHP>"<?"("php"?) { // PHP code start
- BEGIN( FindMembers );
- }
-<FindMembersPHP>"<script"{BN}+"language"{BN}*"="{BN}*['"]?"php"['"]?{BN}*">" { // PHP code start
- lineCount() ;
- BEGIN( FindMembers );
- }
-<FindMembersPHP>[^\n<]+ { // Non-PHP code text, ignore
- }
-<FindMembersPHP>\n { // Non-PHP code text, ignore
- yyLineNr++;
- }
-<FindMembersPHP>. { // Non-PHP code text, ignore
- }
-<FindMembers>"?>"|"</script>" { // PHP code end
- if (insidePHP)
- BEGIN( FindMembersPHP );
- else
- REJECT;
- }
-<FindMembers>{PHPKW} { if (insidePHP)
- BEGIN( NextSemi );
- else
- REJECT;
- }
-<FindMembers>"%{"[^\n]* { // Mozilla XPIDL lang-specific block
- if (!insideIDL)
- REJECT;
- }
-<FindMembers>"%}" { // Mozilla XPIDL lang-specific block end
- if (!insideIDL)
- REJECT;
- }
-<FindMembers>{B}*("properties"){BN}*":"{BN}* { // IDL or Borland C++ builder property
- current->mtype = mtype = Property;
- current->protection = protection = Public ;
- current->type.resize(0);
- current->name.resize(0);
- current->args.resize(0);
- current->argList->clear();
- lineCount() ;
- }
-
-<FindMembers>{B}*"k_dcop"{BN}*":"{BN}* { current->mtype = mtype = DCOP;
- current->protection = protection = Public ;
- current->type.resize(0);
- current->name.resize(0);
- current->args.resize(0);
- current->argList->clear();
- lineCount() ;
- }
-
-<FindMembers>{B}*("signals"|"Q_SIGNALS"){BN}*":"{BN}* { current->mtype = mtype = Signal;
-
- current->protection = protection = Public ;
- current->type.resize(0);
- current->name.resize(0);
- current->args.resize(0);
- current->argList->clear();
- lineCount() ;
- }
-
-<FindMembers>{B}*"public"{BN}*("slots"|"Q_SLOTS"){BN}*":"{BN}* {
- current->protection = protection = Public ;
- current->mtype = mtype = Slot;
- current->type.resize(0);
- current->name.resize(0);
- current->args.resize(0);
- current->argList->clear();
- lineCount();
- }
-
-<FindMembers>{B}*"protected"{BN}*("slots"|"Q_SLOTS"){BN}*":"{BN}* {
- current->protection = protection = Protected ;
- current->mtype = mtype = Slot;
- current->type.resize(0);
- current->name.resize(0);
- current->args.resize(0);
- current->argList->clear();
- lineCount();
- }
-
-<FindMembers>{B}*"private"{BN}*("slots"|"Q_SLOTS"){BN}*":"{BN}* {
- current->protection = protection = Private ;
- current->mtype = mtype = Slot;
- current->type.resize(0);
- current->name.resize(0);
- current->args.resize(0);
- current->argList->clear();
- lineCount();
- }
-<FindMembers>{B}*("public"|"methods"|"__published"){BN}*":"{BN}* {
- current->protection = protection = Public ;
- current->mtype = mtype = Method;
- current->type.resize(0);
- current->name.resize(0);
- current->args.resize(0);
- current->argList->clear();
- lineCount() ;
- }
-<FindMembers>{B}*"internal"{BN}*":"{BN}* { // for now treat C++/CLI's internal as package...
- if (insideCli)
- {
- current->protection = protection = Package ;
- current->mtype = mtype = Method;
- current->type.resize(0);
- current->name.resize(0);
- current->args.resize(0);
- current->argList->clear();
- lineCount() ;
- }
- else
- {
- REJECT;
- }
- }
-<FindMembers>{B}*"protected"{BN}*":"{BN}* {
- current->protection = protection = Protected ;
- current->mtype = mtype = Method;
- current->type.resize(0);
- current->name.resize(0);
- current->args.resize(0);
- current->argList->clear();
- lineCount() ;
- }
-<FindMembers>{B}*"private"{BN}*":"{BN}* {
- current->protection = protection = Private ;
- current->mtype = mtype = Method;
- current->type.resize(0);
- current->name.resize(0);
- current->args.resize(0);
- current->argList->clear();
- lineCount() ;
- }
-<FindMembers>{B}*"event"{BN}+ {
- if (insideCli)
- {
- // C++/CLI event
- lineCount() ;
- current->mtype = mtype = Event;
- current->bodyLine = yyLineNr;
- curlyCount=0;
- BEGIN( CliPropertyType );
- }
- else if (insideCS)
- {
- lineCount() ;
- current->mtype = Event;
- current->bodyLine = yyLineNr;
- }
- else
- {
- REJECT;
- }
- }
-<FindMembers>{B}*"property"{BN}+ {
- if (insideCli)
- {
- // C++/CLI property
- lineCount() ;
- current->mtype = mtype = Property;
- current->bodyLine = yyLineNr;
- curlyCount=0;
- BEGIN( CliPropertyType );
- }
- else
- {
- REJECT;
- }
- }
-<CliPropertyType>{ID} {
- addType( current );
- current->name = yytext;
- }
-<CliPropertyType>"[" { // C++/CLI indexed property
- current->name += yytext;
- BEGIN( CliPropertyIndex );
- }
-<CliPropertyType>"{" {
- curlyCount=0;
- //printf("event: '%s' '%s'\n",current->type.data(),current->name.data());
- BEGIN( CSAccessorDecl );
- }
-<CliPropertyType>";" {
- unput(*yytext);
- BEGIN( FindMembers );
- }
-<CliPropertyType>\n {
- yyLineNr++;
- }
-<CliPropertyType>{B}* {
- }
-<CliPropertyType>. {
- addType( current );
- current->type += yytext;
- }
-<CliPropertyIndex>"]" {
- BEGIN( CliPropertyType );
- current->name+=yytext;
- }
-<CliPropertyIndex>. {
- current->name+=yytext;
- }
- /*
-<FindMembers>{B}*"property"{BN}+ {
- if (!current->type.isEmpty())
- {
- REJECT;
- }
- else
- {
- current->mtype = mtype = Property;
- lineCount();
- }
- }
- */
-<FindMembers>{B}*"@private"{BN}+ {
- current->protection = protection = Private ;
- current->mtype = mtype = Method;
- current->type.resize(0);
- current->name.resize(0);
- current->args.resize(0);
- current->argList->clear();
- lineCount() ;
- }
-<FindMembers>{B}*"@protected"{BN}+ {
- current->protection = protection = Protected ;
- current->mtype = mtype = Method;
- current->type.resize(0);
- current->name.resize(0);
- current->args.resize(0);
- current->argList->clear();
- lineCount() ;
- }
-<FindMembers>{B}*"@public"{BN}+ {
- current->protection = protection = Public ;
- current->mtype = mtype = Method;
- current->type.resize(0);
- current->name.resize(0);
- current->args.resize(0);
- current->argList->clear();
- lineCount() ;
- }
-<FindMembers>[\-+]{BN}* {
- if (!insideObjC)
- {
- REJECT;
- }
- else
- {
- lineCount();
- current->fileName = yyFileName;
- current->startLine = yyLineNr;
- current->bodyLine = yyLineNr;
- current->section = Entry::FUNCTION_SEC;
- current->protection = protection = Public ;
- language = current->lang = SrcLangExt_ObjC;
- insideObjC = TRUE;
- current->virt = Virtual;
- current->stat=yytext[0]=='+';
- current->mtype = mtype = Method;
- current->type.resize(0);
- current->name.resize(0);
- current->args.resize(0);
- current->argList->clear();
- BEGIN( ObjCMethod );
- }
- }
-<ObjCMethod>"(" { // start of method's return type
- BEGIN( ObjCReturnType );
- }
-<ObjCMethod>{ID} { // found method name
- if (current->type.isEmpty())
- {
- current->type = "id";
- }
- current->name = yytext;
- }
-<ObjCMethod>":"{B}* { // start of parameter list
- current->name += ':';
- Argument *a = new Argument;
- current->argList->append(a);
- BEGIN( ObjCParams );
- }
-<ObjCReturnType>[^)]* { // TODO: check if nested braches are possible.
- current->type = yytext;
- }
-<ObjCReturnType>")" {
- BEGIN( ObjCMethod );
- }
-<ObjCParams>({ID})?":" { // Keyword of parameter
- QCString keyw = yytext;
- keyw=keyw.left(keyw.length()-1); // strip :
- if (keyw.isEmpty())
- {
- current->name += " :";
- }
- else
- {
- current->name += keyw+":";
- }
- if (current->argList->getLast()->type.isEmpty())
- {
- current->argList->getLast()->type="id";
- }
- Argument *a = new Argument;
- a->attrib=(QCString)"["+keyw+"]";
- current->argList->append(a);
- }
-<ObjCParams>{ID}{BN}* { // name of parameter
- lineCount();
- current->argList->getLast()->name=QCString(yytext).stripWhiteSpace();
- }
-<ObjCParams>","{BN}*"..." { // name of parameter
- lineCount();
- // do we want the comma as part of the name?
- //current->name += ",";
- Argument *a = new Argument;
- a->attrib="[,]";
- a->type="...";
- current->argList->append(a);
- }
- /*
-<ObjCParams>":" {
- current->name += ':';
- }
- */
-<ObjCParams>"(" {
- BEGIN( ObjCParamType );
- }
-<ObjCParamType>[^)]* {
- current->argList->getLast()->type=QCString(yytext).stripWhiteSpace();
- }
-<ObjCParamType>")"/{B}* {
- BEGIN( ObjCParams );
- }
-<ObjCMethod,ObjCParams>";" { // end of method declaration
- if (current->argList->getLast() && current->argList->getLast()->type.isEmpty())
- {
- current->argList->getLast()->type="id";
- }
- current->args = argListToString(current->argList);
- //printf("argList=%s\n",current->args.data());
- unput(';');
- BEGIN( Function );
- }
-<ObjCMethod,ObjCParams>(";"{BN}+)?"{" { // start of a method body
- lineCount();
- //printf("Type=%s Name=%s args=%s\n",
- // current->type.data(),current->name.data(),argListToString(current->argList).data()
- // );
- if (current->argList->getLast() && current->argList->getLast()->type.isEmpty())
- {
- current->argList->getLast()->type="id";
- }
- current->args = argListToString(current->argList);
- unput('{');
- BEGIN( Function );
- }
-<FindMembers>{BN}{1,80} {
- lineCount();
- }
-<FindMembers>"@"({ID}".")*{ID}{BN}*"(" {
- if (insideJava) // Java annotation
- {
- lineCount();
- lastSkipRoundContext = YY_START;
- roundCount=1;
- BEGIN( SkipRound );
- }
- else if (strncmp(yytext,"@property",9)==0) // ObjC 2.0 property
- {
- current->mtype = mtype = Property;
- current->spec|=Entry::Readable | Entry::Writable | Entry::Assign;
- current->protection = Public ;
- unput('(');
- BEGIN( ObjCPropAttr );
- }
- else
- {
- REJECT;
- }
- }
-<ObjCPropAttr>"getter="{ID} {
- current->read = yytext+7;
- }
-<ObjCPropAttr>"setter="{ID} {
- current->write = yytext+7;
- }
-<ObjCPropAttr>"readonly" {
- current->spec&=~Entry::Writable;
- }
-<ObjCPropAttr>"readwrite" { // default
- }
-<ObjCPropAttr>"assign" { // default
- }
-<ObjCPropAttr>"retain" {
- current->spec&=~Entry::Assign;
- current->spec|=Entry::Retain;
- }
-<ObjCPropAttr>"copy" {
- current->spec&=~Entry::Assign;
- current->spec|=Entry::Copy;
- }
-<ObjCPropAttr>"nonatmic" {
- current->spec|=Entry::NonAtomic;
- }
-<ObjCPropAttr>")" {
- BEGIN(FindMembers);
- }
-<FindMembers>"@"{ID} {
- if (insideJava) // Java annotation
- {
- // skip annotation
- }
- else if (strcmp(yytext,"@property")==0) // ObjC 2.0 property
- {
- current->mtype = mtype = Property;
- current->spec|=Entry::Writable | Entry::Readable | Entry::Assign;
- current->protection = Public ;
- }
- else if (strcmp(yytext,"@synthesize")==0)
- {
- BEGIN( ObjCSkipStatement );
- }
- else if (strcmp(yytext,"@dynamic")==0)
- {
- BEGIN( ObjCSkipStatement );
- }
- else
- {
- REJECT;
- }
- }
-<ObjCSkipStatement>";" {
- BEGIN(FindMembers);
- }
-<PackageName>{ID}(("."|"\\"){ID})* {
- isTypedef=FALSE;
- //printf("Found namespace %s lang=%d\n",yytext,current->lang);
- current->name = yytext;
- current->name = substitute(current->name,".","::");
- current->name = substitute(current->name,"\\","::");
- current->section = Entry::NAMESPACE_SEC;
- current->type = "namespace" ;
- current->fileName = yyFileName;
- current->startLine = yyLineNr;
- current->bodyLine = yyLineNr;
- lineCount();
- }
-<PackageName>";" {
- current_root->addSubEntry(current);
- current_root = current ;
- current = new Entry ;
- initEntry();
- BEGIN(FindMembers);
- }
-<PackageName>"{" {
- curlyCount=0;
- BEGIN( ReadNSBody );
- }
-<FindMembers>{B}*"initonly"{BN}+ {
- current->type += " initonly ";
- if (insideCli) current->spec |= Entry::Initonly;
- lineCount();
- }
-<FindMembers>{B}*"static"{BN}+ { current->type += " static ";
- current->stat = TRUE;
- lineCount();
- }
-<FindMembers>{B}*"extern"{BN}+ {
- current->stat = FALSE;
- current->explicitExternal = TRUE;
- lineCount();
- }
-<FindMembers>{B}*"virtual"{BN}+ { current->type += " virtual ";
- current->virt = Virtual;
- lineCount();
- }
-<FindMembers>{B}*"abstract"{BN}+ {
- if (!insidePHP)
- {
- current->type += " abstract ";
- current->virt = Pure;
- }
- else
- {
- current->spec|=Entry::Abstract;
- }
- lineCount();
- }
-<FindMembers>{B}*"inline"{BN}+ { current->spec|=Entry::Inline;
- lineCount();
- }
-<FindMembers>{B}*"mutable"{BN}+ { current->spec|=Entry::Mutable;
- lineCount();
- }
-<FindMembers>{B}*"explicit"{BN}+ { current->spec|=Entry::Explicit;
- lineCount();
- }
-<FindMembers>{B}*"@required"{BN}+ { // Objective C 2.0 protocol required section
- current->spec=(current->spec & ~Entry::Optional) | Entry::Required;
- lineCount();
- }
-<FindMembers>{B}*"@optional"{BN}+ { // Objective C 2.0 protocol optional section
- current->spec=(current->spec & ~Entry::Required) | Entry::Optional;
- lineCount();
- }
- /*
-<FindMembers>{B}*"import"{BN}+ { // IDL import keyword
- BEGIN( NextSemi );
- }
- */
-<FindMembers>{B}*"typename"{BN}+ { lineCount(); }
-<FindMembers>{B}*"namespace"{BN}*/[^a-z_A-Z0-9] {
- isTypedef=FALSE;
- current->section = Entry::NAMESPACE_SEC;
- current->type = "namespace" ;
- current->fileName = yyFileName;
- current->startLine = yyLineNr;
- current->bodyLine = yyLineNr;
- lineCount();
- if (insidePHP)
- {
- BEGIN( PackageName );
- }
- else
- {
- BEGIN( CompoundName );
- }
- }
-<FindMembers>{B}*"module"{BN}+ {
- lineCount();
- if (insideIDL)
- {
- isTypedef=FALSE;
- current->section = Entry::NAMESPACE_SEC;
- current->type = "module" ;
- current->fileName = yyFileName;
- current->startLine = yyLineNr;
- current->bodyLine = yyLineNr;
- BEGIN( CompoundName );
- }
- else if (insideD)
- {
- lineCount();
- BEGIN(PackageName);
- }
- else
- {
- addType( current ) ;
- current->name = QCString(yytext).stripWhiteSpace();
- }
- }
-<FindMembers>{B}*"library"{BN}+ {
- lineCount();
- if (insideIDL)
- {
- isTypedef=FALSE;
- current->section = Entry::NAMESPACE_SEC;
- current->type = "library" ;
- current->fileName = yyFileName;
- current->startLine = yyLineNr;
- current->bodyLine = yyLineNr;
- BEGIN( CompoundName );
- }
- else
- {
- addType( current ) ;
- current->name = QCString(yytext).stripWhiteSpace();
- }
- }
-<FindMembers>{B}*((("disp")?"interface")|"valuetype"){BN}+ { // M$/Corba IDL/Java interface
- lineCount();
- if (insideIDL || insideJava || insideCS || insideD || insidePHP)
- {
- isTypedef=FALSE;
- current->section = Entry::CLASS_SEC;
- current->spec = Entry::Interface;
- addType( current ) ;
- current->type += " interface" ;
- current->fileName = yyFileName;
- current->startLine = yyLineNr;
- current->bodyLine = yyLineNr;
- BEGIN( CompoundName );
- }
- else
- {
- addType( current ) ;
- current->name = QCString(yytext).stripWhiteSpace();
- }
- }
-<FindMembers>{B}*"@implementation"{BN}+ { // Objective-C class implementation
- lineCount();
- isTypedef=FALSE;
- current->section = Entry::OBJCIMPL_SEC;
- language = current->lang = SrcLangExt_ObjC;
- insideObjC = TRUE;
- current->protection = protection = Public ;
- addType( current ) ;
- current->type += " implementation" ;
- current->fileName = yyFileName;
- current->startLine = yyLineNr;
- current->bodyLine = yyLineNr;
- BEGIN( CompoundName );
- }
-<FindMembers>{B}*"@interface"{BN}+ { // Objective-C class interface, or Java attribute
- lineCount();
- isTypedef=FALSE;
- current->section = Entry::CLASS_SEC;
- current->spec = Entry::Interface;
- if (!insideJava)
- {
- language = current->lang = SrcLangExt_ObjC;
- insideObjC = TRUE;
- }
- current->protection = protection = Public ;
- addType( current ) ;
- current->type += " interface" ;
- current->fileName = yyFileName;
- current->startLine = yyLineNr;
- current->bodyLine = yyLineNr;
- BEGIN( CompoundName );
- }
-<FindMembers>{B}*"@protocol"{BN}+ { // Objective-C protocol definition
- lineCount();
- isTypedef=FALSE;
- current->section = Entry::CLASS_SEC;
- current->spec = Entry::Protocol;
- language = current->lang = SrcLangExt_ObjC;
- insideObjC = TRUE;
- current->protection = protection = Public ;
- addType( current ) ;
- current->type += " protocol" ;
- current->fileName = yyFileName;
- current->startLine = yyLineNr;
- current->bodyLine = yyLineNr;
- BEGIN( CompoundName );
- }
-<FindMembers>{B}*"exception"{BN}+ { // Corba IDL exception
- isTypedef=FALSE;
- current->section = Entry::CLASS_SEC;
- current->spec = Entry::Exception;
- addType( current ) ;
- current->type += " exception" ;
- current->fileName = yyFileName;
- current->startLine = yyLineNr;
- current->bodyLine = yyLineNr;
- lineCount();
- BEGIN( CompoundName );
- }
-<FindMembers>"@class" | // for Objective C class declarations
-<FindMembers>{B}*{TYPEDEFPREFIX}"class{" |
-<FindMembers>{B}*{TYPEDEFPREFIX}"class"{BN}+ {
- isTypedef=((QCString)yytext).find("typedef")!=-1;
- current->section = Entry::CLASS_SEC;
- addType( current ) ;
- current->type += " class" ;
- current->fileName = yyFileName;
- current->startLine = yyLineNr;
- current->bodyLine = yyLineNr;
- if (yytext[0]=='@')
- {
- language = current->lang = SrcLangExt_ObjC;
- insideObjC = TRUE;
- }
- lineCount() ;
- if (yytext[yyleng-1]=='{') unput('{');
- if (insidePHP && current->spec&Entry::Abstract)
- {
- // convert Abstract to AbstractClass
- current->spec=(current->spec&~Entry::Abstract)|Entry::AbstractClass;
- }
- BEGIN( CompoundName ) ;
- }
-<FindMembers>{B}*"value class{" | // C++/CLI extension
-<FindMembers>{B}*"value class"{BN}+ {
- isTypedef=FALSE;
- current->section = Entry::CLASS_SEC;
- current->spec = Entry::Value;
- addType( current ) ;
- current->type += " value class" ;
- current->fileName = yyFileName;
- current->startLine = yyLineNr;
- current->bodyLine = yyLineNr;
- lineCount() ;
- if (yytext[yyleng-1]=='{') unput('{');
- BEGIN( CompoundName ) ;
- }
-<FindMembers>{B}*"ref class{" | // C++/CLI extension
-<FindMembers>{B}*"ref class"{BN}+ {
- isTypedef=FALSE;
- current->section = Entry::CLASS_SEC;
- current->spec = Entry::Ref;
- addType( current ) ;
- current->type += " ref class" ;
- current->fileName = yyFileName;
- current->startLine = yyLineNr;
- current->bodyLine = yyLineNr;
- lineCount() ;
- if (yytext[yyleng-1]=='{') unput('{');
- BEGIN( CompoundName ) ;
- }
-<FindMembers>{B}*"interface class{" | // C++/CLI extension
-<FindMembers>{B}*"interface class"{BN}+ {
- isTypedef=FALSE;
- current->section = Entry::CLASS_SEC;
- current->spec = Entry::Interface;
- addType( current ) ;
- current->type += " interface class" ;
- current->fileName = yyFileName;
- current->startLine = yyLineNr;
- current->bodyLine = yyLineNr;
- lineCount() ;
- if (yytext[yyleng-1]=='{') unput('{');
- BEGIN( CompoundName ) ;
- }
-<FindMembers>{B}*"coclass"{BN}+ {
- if (insideIDL)
- {
- isTypedef=FALSE;
- current->section = Entry::CLASS_SEC;
- addType( current ) ;
- current->type += " coclass" ;
- current->fileName = yyFileName;
- current->startLine = yyLineNr;
- current->bodyLine = yyLineNr;
- lineCount() ;
- BEGIN( CompoundName ) ;
- }
- else
- {
- addType(current);
- current->name = yytext;
- current->name = current->name.stripWhiteSpace();
- lineCount();
- }
- }
-<FindMembers>{B}*{TYPEDEFPREFIX}"struct{" |
-<FindMembers>{B}*{TYPEDEFPREFIX}"struct"/{BN}+ {
- isTypedef=((QCString)yytext).find("typedef")!=-1;
- current->section = Entry::CLASS_SEC ;
- current->spec = Entry::Struct;
- // bug 582676: can be a struct nested in an interface so keep insideObjC state
- //current->objc = insideObjC = FALSE;
- addType( current ) ;
- current->type += " struct" ;
- current->fileName = yyFileName;
- current->startLine = yyLineNr;
- current->bodyLine = yyLineNr;
- lineCount() ;
- if (yytext[yyleng-1]=='{') unput('{');
- BEGIN( CompoundName ) ;
- }
-<FindMembers>{B}*"value struct{" | // C++/CLI extension
-<FindMembers>{B}*"value struct"{BN}+ {
- isTypedef=FALSE;
- current->section = Entry::CLASS_SEC;
- current->spec = Entry::Struct | Entry::Value;
- addType( current ) ;
- current->type += " value struct" ;
- current->fileName = yyFileName;
- current->startLine = yyLineNr;
- current->bodyLine = yyLineNr;
- lineCount() ;
- if (yytext[yyleng-1]=='{') unput('{');
- BEGIN( CompoundName ) ;
- }
-<FindMembers>{B}*"ref struct{" | // C++/CLI extension
-<FindMembers>{B}*"ref struct"{BN}+ {
- isTypedef=FALSE;
- current->section = Entry::CLASS_SEC;
- current->spec = Entry::Struct | Entry::Ref;
- addType( current ) ;
- current->type += " ref struct" ;
- current->fileName = yyFileName;
- current->startLine = yyLineNr;
- current->bodyLine = yyLineNr;
- lineCount() ;
- if (yytext[yyleng-1]=='{') unput('{');
- BEGIN( CompoundName ) ;
- }
-<FindMembers>{B}*"interface struct{" | // C++/CLI extension
-<FindMembers>{B}*"interface struct"{BN}+ {
- isTypedef=FALSE;
- current->section = Entry::CLASS_SEC;
- current->spec = Entry::Struct | Entry::Interface;
- addType( current ) ;
- current->type += " interface struct";
- current->fileName = yyFileName;
- current->startLine = yyLineNr;
- current->bodyLine = yyLineNr;
- lineCount() ;
- if (yytext[yyleng-1]=='{') unput('{');
- BEGIN( CompoundName ) ;
- }
-<FindMembers>{B}*{TYPEDEFPREFIX}"union{" |
-<FindMembers>{B}*{TYPEDEFPREFIX}"union"{BN}+ {
- isTypedef=((QCString)yytext).find("typedef")!=-1;
- current->section = Entry::CLASS_SEC;
- current->spec = Entry::Union;
- // bug 582676: can be a struct nested in an interface so keep insideObjC state
- //current->objc = insideObjC = FALSE;
- addType( current ) ;
- current->type += " union" ;
- current->fileName = yyFileName;
- current->startLine = yyLineNr;
- current->bodyLine = yyLineNr;
- lineCount() ;
- if (yytext[yyleng-1]=='{') unput('{');
- BEGIN( CompoundName ) ;
- }
-<FindMembers>{B}*{TYPEDEFPREFIX}{IDLATTR}?"enum"({BN}+("class"|"struct"))?"{" |
-<FindMembers>{B}*{TYPEDEFPREFIX}{IDLATTR}?"enum"({BN}+("class"|"struct"))?{BN}+ { // for IDL: typedef [something] enum
- isTypedef=((QCString)yytext).find("typedef")!=-1;
- if (insideJava)
- {
- current->section = Entry::CLASS_SEC;
- current->spec = Entry::Enum;
- }
- else
- {
- current->section = Entry::ENUM_SEC ;
- }
- addType( current ) ;
- current->type += " enum" ;
- current->fileName = yyFileName;
- current->startLine = yyLineNr;
- current->bodyLine = yyLineNr;
- lineCount() ;
- if (yytext[yyleng-1]=='{') unput('{');
- BEGIN( CompoundName ) ;
- }
-<Operator>"("{BN}*")"({BN}*"<"[^>]*">"){BN}*/"(" { // A::operator()<int>(int arg)
- lineCount();
- current->name += "()";
- BEGIN( FindMembers );
- }
-<Operator>"("{BN}*")"{BN}*/"(" {
- lineCount();
- current->name += yytext ;
- current->name = current->name.simplifyWhiteSpace();
- BEGIN( FindMembers ) ;
- }
-<Operator>";" { // can occur when importing members
- unput(';');
- BEGIN( FindMembers ) ;
- }
-<Operator>[^(] {
- lineCount();
- current->name += *yytext ;
- }
-<Operator>"<>" { /* skip guided templ specifiers */ }
-<Operator>"(" {
- current->name = current->name.simplifyWhiteSpace();
- unput(*yytext);
- BEGIN( FindMembers ) ;
- }
-<FindMembers>("template"|"generic")({BN}*)"<"/[>]? { // generic is a C++/CLI extension
- lineCount();
- if (current->tArgLists==0)
- {
- current->tArgLists = new QList<ArgumentList>;
- current->tArgLists->setAutoDelete(TRUE);
- }
- ArgumentList *al = new ArgumentList;
- //current->spec |= (yytext[0]=='g') ? Entry::Generic : Entry::Template;
- current->tArgLists->append(al);
- currentArgumentList = al;
- templateStr="<";
- fullArgString = templateStr;
- copyArgString = &templateStr;
- currentArgumentContext = FindMembers;
- BEGIN( ReadTempArgs );
- }
-<FindMembers>"namespace"{BN}+/{ID}{BN}*"=" { // namespace alias
- lineCount();
- BEGIN( NSAliasName );
- }
-<NSAliasName>{ID} {
- aliasName = yytext;
- BEGIN( NSAliasArg );
- }
-<NSAliasArg>({ID}"::")*{ID} {
- //printf("Inserting namespace alias %s::%s->%s\n",current_root->name.data(),aliasName.data(),yytext);
- //if (current_root->name.isEmpty())
- //{
- // TODO: namespace aliases are now treated as global entities
- // while they should be aware of the scope they are in
- Doxygen::namespaceAliasDict.insert(aliasName,new QCString(yytext));
- //}
- //else
- //{
- // Doxygen::namespaceAliasDict.insert(current_root->name+"::"+aliasName,
- // new QCString(current_root->name+"::"+yytext));
- //}
- }
-<NSAliasArg>";" {
- BEGIN( FindMembers );
- }
-<PHPUse>({ID}{BN}*"\\"{BN}*)*{ID}/{BN}+"as" {
- lineCount();
- aliasName=yytext;
- BEGIN(PHPUseAs);
- }
-<PHPUse>({ID}{BN}*"\\"{BN}*)*{ID} {
- lineCount();
- current->name=removeRedundantWhiteSpace(substitute(yytext,"\\","::"));
- //printf("PHP: adding use relation: %s\n",current->name.data());
- current->fileName = yyFileName;
- current->section=Entry::USINGDIR_SEC;
- current_root->addSubEntry(current);
- current = new Entry;
- initEntry();
- aliasName.resize(0);
- }
-<PHPUseAs>{BN}+"as"{BN}+ {
- lineCount();
- }
-<PHPUseAs>{ID} {
- //printf("PHP: adding use as relation: %s->%s\n",yytext,aliasName.data());
- Doxygen::namespaceAliasDict.insert(yytext,
- new QCString(removeRedundantWhiteSpace(
- substitute(aliasName,"\\","::"))));
- aliasName.resize(0);
- }
-<PHPUse,PHPUseAs>[,;] {
- /*
- if (!aliasName.isEmpty())
- {
- int i=aliasName.findRev('\\');
- if (i!=-1)
- {
- QCString an = removeRedundantWhiteSpace(
- substitute(aliasName,"\\","::"));
- printf("PHP: adding use relation: %s->%s\n",aliasName.mid(i+1).data(),an.data());
- Doxygen::namespaceAliasDict.insert(aliasName.mid(i+1),
- new QCString(an));
- current->name = an;
- current->fileName = yyFileName;
- current->section=Entry::USINGDECL_SEC;
- current_root->addSubEntry(current);
- current = new Entry ;
- initEntry();
- }
- else if (i==0)
- {
- }
- }
- */
- if (*yytext==',')
- {
- BEGIN(PHPUse);
- }
- else
- {
- BEGIN(FindMembers);
- }
- }
-<JavaImport>({ID}{BN}*"."{BN}*)+"*" { // package import => add as a using directive
- lineCount();
- QCString scope=yytext;
- current->name=removeRedundantWhiteSpace(substitute(scope.left(scope.length()-1),".","::"));
- current->fileName = yyFileName;
- current->section=Entry::USINGDIR_SEC;
- current_root->addSubEntry(current);
- current = new Entry;
- initEntry();
- BEGIN(Using);
- }
-<JavaImport>({ID}{BN}*"."{BN}*)+{ID} { // class import => add as a using declaration
- lineCount();
- QCString scope=yytext;
- current->name=removeRedundantWhiteSpace(substitute(scope,".","::"));
- current->fileName = yyFileName;
- if (insideD)
- {
- current->section=Entry::USINGDIR_SEC;
- }
- else
- {
- //printf("import name = %s -> %s\n",yytext,current->name.data());
- current->section=Entry::USINGDECL_SEC;
- }
- current_root->addSubEntry(current);
- current = new Entry ;
- initEntry();
- BEGIN(Using);
- }
-<FindMembers>"using"{BN}+ {
- current->startLine=yyLineNr;
- lineCount();
- BEGIN(Using);
- }
-<Using>"namespace"{BN}+ { lineCount(); BEGIN(UsingDirective); }
-<Using>{ID}{BN}*({BN}*("::"|"."){BN}*{ID})* {
- lineCount();
- current->name=yytext;
- current->fileName = yyFileName;
- current->section=Entry::USINGDECL_SEC;
- current_root->addSubEntry(current);
- current = new Entry ;
- if (insideCS) /* Hack: in C# a using declaration and
- directive have the same syntax, so we
- also add it as a using directive here
- */
- {
- current->name=yytext;
- current->fileName = yyFileName;
- current->startLine = yyLineNr;
- current->section=Entry::USINGDIR_SEC;
- current_root->addSubEntry(current);
- current = new Entry ;
- }
- initEntry();
- BEGIN(Using);
- }
-<UsingDirective>{SCOPENAME} { current->name=removeRedundantWhiteSpace(yytext);
- current->fileName = yyFileName;
- current->section=Entry::USINGDIR_SEC;
- current_root->addSubEntry(current);
- current = new Entry ;
- initEntry();
- BEGIN(Using);
- }
-<Using>";" { BEGIN(FindMembers); }
-<FindMembers>{SCOPENAME}{BN}*"<>" { // guided template decl
- QCString n=yytext;
- addType( current );
- current->name=n.left(n.length()-2);
- }
-<FindMembers>{SCOPENAME}{BN}*/"<" { // Note: this could be a return type!
- roundCount=0;
- sharpCount=0;
- lineCount();
- addType( current );
- current->name=yytext;
- current->name=current->name.stripWhiteSpace();
- //current->scopeSpec.resize(0);
- // currentTemplateSpec = &current->scopeSpec;
- if (nameIsOperator(current->name))
- BEGIN( Operator );
- else
- BEGIN( EndTemplate );
- }
-<FindMemberName>{SCOPENAME}{BN}*/"<" {
- sharpCount=0;
- roundCount=0;
- lineCount();
- current->name+=((QCString)yytext).stripWhiteSpace();
- //current->memberSpec.resize(0);
- // currentTemplateSpec = &current->memberSpec;
- if (nameIsOperator(current->name))
- BEGIN( Operator );
- else
- BEGIN( EndTemplate );
- }
-<EndTemplate>"<<<" {
- if (!insidePHP)
- {
- REJECT;
- }
- else
- {
- lastHereDocContext = YY_START;
- BEGIN(HereDoc);
- }
- }
-<ClassTemplSpec,EndTemplate>"<<" {
- current->name+=yytext;
- // *currentTemplateSpec+=yytext;
- }
-<EndTemplate>"<" {
- current->name+='<';
- // *currentTemplateSpec+='<';
- sharpCount++;
- }
-<ClassTemplSpec,EndTemplate>">>" {
- if (insideJava || insideCS || insideCli || roundCount==0)
- {
- unput('>');
- unput(' ');
- unput('>');
- }
- else
- {
- current->name+=yytext;
- }
- // *currentTemplateSpec+=yytext;
- }
-<EndTemplate>">" {
- current->name+='>';
- // *currentTemplateSpec+='>';
- if (--sharpCount<=0)
- {
- //printf("Found %s\n",current->name.data());
- BEGIN(FindMembers);
- }
- }
-<EndTemplate>">"{BN}*"(" {
- lineCount();
- current->name+='>';
- // *currentTemplateSpec+='>';
- if (--sharpCount<=0)
- {
- current->bodyLine = yyLineNr;
- current->args = "(";
- currentArgumentContext = FuncQual;
- fullArgString = current->args.copy();
- copyArgString = &current->args;
- //printf("Found %s\n",current->name.data());
- BEGIN( ReadFuncArgType ) ;
- }
- }
-<EndTemplate>">"{BN}*/"("({BN}*{ID}{BN}*"::")*({BN}*"*"{BN}*)+ { // function pointer returning a template instance
- lineCount();
- current->name+='>';
- BEGIN(FindMembers);
- }
-<EndTemplate>">"{BN}*/"::" {
- lineCount();
- current->name+='>';
- // *currentTemplateSpec+='>';
- if (--sharpCount<=0)
- {
- BEGIN(FindMemberName);
- }
- }
-<ClassTemplSpec,EndTemplate>"(" { current->name+=*yytext;
- roundCount++;
- }
-<ClassTemplSpec,EndTemplate>")" { current->name+=*yytext;
- if (roundCount>0) roundCount--;
- }
-<EndTemplate>. {
- current->name+=*yytext;
- // *currentTemplateSpec+=*yytext;
- }
-<FindMembers>"define"{BN}*"("{BN}*["'] {
- if (insidePHP)
- {
- current->bodyLine = yyLineNr;
- BEGIN( DefinePHP );
- }
- else
- REJECT;
- }
-<CopyHereDoc>{ID} { // PHP heredoc
- g_hereDocId = yytext;
- *pCopyHereDocGString += yytext;
- BEGIN(CopyHereDocEnd);
- }
-<CopyHereDoc>"'"{ID}/"'" { // PHP nowdoc
- g_hereDocId = &yytext[1];
- *pCopyHereDocGString += yytext;
- BEGIN(CopyHereDocEnd);
- }
-<HereDoc>{ID} { // PHP heredoc
- g_hereDocId = yytext;
- BEGIN(HereDocEnd);
- }
-<HereDoc>"'"{ID}/"'" { // PHP nowdoc
- g_hereDocId = &yytext[1];
- BEGIN(HereDocEnd);
- }
-<HereDocEnd>^{ID} { // id at start of the line could mark the end of the block
- if (g_hereDocId==yytext) // it is the end marker
- {
- BEGIN(lastHereDocContext);
- }
- }
-<HereDocEnd>. { }
-<CopyHereDocEnd>^{ID} { // id at start of the line could mark the end of the block
- *pCopyHereDocGString += yytext;
- if (g_hereDocId==yytext) // it is the end marker
- {
- BEGIN(lastHereDocContext);
- }
- }
-<CopyHereDocEnd>\n {
- *pCopyHereDocGString += yytext;
- }
-<CopyHereDocEnd>. {
- *pCopyHereDocGString += yytext;
- }
-<FindMembers>"Q_OBJECT" { // Qt object macro
- }
-<FindMembers>"Q_PROPERTY" { // Qt property declaration
- current->protection = protection = Public ;
- current->mtype = mtype = Property;
- current->type.resize(0);
- BEGIN(QtPropType);
- }
-<QtPropType>"(" { // start of property arguments
- }
-<QtPropAttr>")" { // end of property arguments
- unput(';');
- BEGIN(FindMembers);
- }
-<QtPropType>"const"|"volatile" {
- current->type+=yytext;
- }
-<QtPropType>{B}+ {
- current->type+=yytext;
- }
-<QtPropType>({TSCOPE}"::")*{TSCOPE} {
- current->type+=yytext;
- BEGIN(QtPropName);
- }
-<QtPropName>{ID} {
- current->name=yytext;
- BEGIN(QtPropAttr);
- }
-<QtPropAttr>"READ" {
- current->spec |= Entry::Readable;
- BEGIN(QtPropRead);
- }
-<QtPropAttr>"WRITE" {
- current->spec |= Entry::Writable;
- BEGIN(QtPropWrite);
- }
-<QtPropAttr>"RESET"{B}+{ID} { // reset method => not supported yet
- }
-<QtPropAttr>"SCRIPTABLE"{B}+{ID} { // scriptable property => not supported yet
- }
-<QtPropAttr>"DESIGNABLE"{B}+{ID} { // designable property => not supported yet
- }
-<QtPropRead>{ID} {
- current->read = yytext;
- BEGIN(QtPropAttr);
- }
-<QtPropWrite>{ID} {
- current->write = yytext;
- BEGIN(QtPropAttr);
- }
-<FindMembers>"friend"{BN}+("class"|"union"|"struct"){BN}+ {
- current->name=yytext;
- BEGIN(FindMembers);
- }
-<FindMembers,FindMemberName>{SCOPENAME} {
- lineCount();
- if (insideIDL && yyleng==9 && strcmp(yytext,"cpp_quote")==0)
- {
- BEGIN(CppQuote);
- }
- else if ((insideIDL || insideJava || insideD) && yyleng==6 && strcmp(yytext,"import")==0)
- {
- if (insideIDL)
- BEGIN(NextSemi);
- else // insideJava or insideD
- BEGIN(JavaImport);
- }
- else if (insidePHP && strcmp(yytext,"use")==0)
- {
- BEGIN(PHPUse);
- }
- else if (insideJava && strcmp(yytext,"package")==0)
- {
- lineCount();
- BEGIN(PackageName);
- }
- else if (insideIDL && strcmp(yytext,"case")==0)
- {
- BEGIN(IDLUnionCase);
- }
- else if (insideTryBlock && strcmp(yytext,"catch")==0)
- {
- insideTryBlock=FALSE;
- BEGIN(TryFunctionBlock);
- }
- else if (insideJS && strcmp(yytext,"var")==0)
- { // javascript variable
- current->type="var";
- }
- else if (insideJS && strcmp(yytext,"function")==0)
- { // javascript function
- current->type="function";
- }
- else if (insideCS && strcmp(yytext,"this")==0)
- {
- // C# indexer
- addType( current ) ;
- current->name="this";
- BEGIN(CSIndexer);
- }
- else
- {
- if (YY_START==FindMembers)
- {
- addType( current ) ;
- }
- bool javaLike = insideJava || insideCS || insideD || insidePHP || insideJS;
- if (javaLike && strcmp(yytext,"public")==0)
- {
- current->protection = Public;
- }
- else if (javaLike && strcmp(yytext,"protected")==0)
- {
- current->protection = Protected;
- }
- else if (javaLike && strcmp(yytext,"internal")==0)
- {
- current->protection = Package;
- }
- else if (javaLike && strcmp(yytext,"private")==0)
- {
- current->protection = Private;
- }
- else if (javaLike && strcmp(yytext,"static")==0)
- {
- if (YY_START==FindMembers)
- current->name = yytext;
- else
- current->name += yytext;
- current->stat = TRUE;
- }
- else
- {
- if (YY_START==FindMembers)
- current->name = yytext;
- else
- current->name += yytext;
- if (current->name.left(7)=="static ")
- {
- current->stat = TRUE;
- current->name= current->name.mid(7);
- }
- else if (current->name.left(7)=="inline ")
- {
- if (current->type.isEmpty())
- {
- current->type="inline";
- }
- else
- {
- current->type+="inline ";
- }
- current->name= current->name.mid(7);
- }
- else if (current->name.left(6)=="const ")
- {
- if (current->type.isEmpty())
- {
- current->type="const";
- }
- else
- {
- current->type+="const ";
- }
- current->name=current->name.mid(6);
- }
- }
- QCString tmp=yytext;
- if (nameIsOperator(tmp))
- {
- BEGIN( Operator );
- }
- else
- {
- BEGIN(FindMembers);
- }
- }
- }
-<CSIndexer>"["[^\n\]]*"]" {
- current->name+=removeRedundantWhiteSpace(yytext);
- BEGIN(FindMembers);
- }
-<FindMembers>[0-9]{ID} { // some number where we did not expect one
- }
-<FindMembers>"." {
- if (insideJava || insideCS || insideD)
- {
- current->name+=".";
- }
- }
-<FindMembers>"::" {
- current->name+=yytext;
- }
-<CppQuote>"("{B}*"\"" {
- insideCppQuote=TRUE;
- BEGIN(FindMembers);
- }
-<IDLUnionCase>"::"
-<IDLUnionCase>":" { BEGIN(FindMembers); }
-<IDLUnionCase>\n { yyLineNr++; }
-<IDLUnionCase>.
-<TryFunctionBlock>\n { yyLineNr++; }
-<TryFunctionBlock>"{" {
- curlyCount=0;
- lastCurlyContext = TryFunctionBlockEnd ;
- BEGIN( SkipCurly );
- }
-<TryFunctionBlock>.
-<TryFunctionBlockEnd>{BN}*"catch" { lineCount(); BEGIN(TryFunctionBlock); // {BN}* added to fix bug 611193
- }
-<TryFunctionBlockEnd>\n { unput(*yytext); // rule added to fix bug id 601138
- BEGIN( FindMembers );
- }
-<TryFunctionBlockEnd>. { unput(*yytext);
- BEGIN( FindMembers );
- }
-<EndCppQuote>")" {
- insideCppQuote=FALSE;
- BEGIN(FindMembers);
- }
-<FindMembers,FindFields>{B}*"#" { if (insidePHP)
- REJECT;
- lastCPPContext = YY_START;
- BEGIN( SkipCPP ) ;
- }
-<FindMembers,FindFields>{B}*"#"{B}*("cmake")?"define" {
- if (insidePHP)
- REJECT;
- current->bodyLine = yyLineNr;
- lastDefineContext = YY_START;
- BEGIN( Define );
- }
-<FindMembers,ReadBody,ReadNSBody,ReadBodyIntf,SkipCurly,SkipCurlyCpp>{B}*"#"{B}+[0-9]+{B}+/"\"" { /* line control directive */
- yyLineNr = atoi(&yytext[1]);
- //printf("setting line number to %d\n",yyLineNr);
- lastPreLineCtrlContext = YY_START;
- if (YY_START==ReadBody ||
- YY_START==ReadNSBody ||
- YY_START==ReadBodyIntf)
- {
- current->program+=yytext;
- }
- BEGIN( PreLineCtrl );
- }
-<PreLineCtrl>"\""[^\n\"]*"\"" {
- yyFileName = stripQuotes(yytext);
- if (lastPreLineCtrlContext==ReadBody ||
- lastPreLineCtrlContext==ReadNSBody ||
- lastPreLineCtrlContext==ReadBodyIntf)
- {
- current->program+=yytext;
- }
- }
-<PreLineCtrl>. {
- if (lastPreLineCtrlContext==ReadBody ||
- lastPreLineCtrlContext==ReadNSBody ||
- lastPreLineCtrlContext==ReadBodyIntf)
- {
- current->program+=yytext;
- }
- }
-<PreLineCtrl>\n {
- if (lastPreLineCtrlContext==ReadBody ||
- lastPreLineCtrlContext==ReadNSBody ||
- lastPreLineCtrlContext==ReadBodyIntf)
- {
- current->program+=yytext;
- }
- yyLineNr++;
- BEGIN( lastPreLineCtrlContext );
- }
-<SkipCPP>.
-<SkipCPP>\\[\r]*"\n"[\r]* { yyLineNr++ ; }
-<SkipCPP>[\r]*\n[\r]* { yyLineNr++ ;
- BEGIN( lastCPPContext) ;
- }
-<Define>{ID}{B}*"(" {
- current->name = yytext;
- current->name = current->name.left(current->name.length()-1).stripWhiteSpace();
- current->args = "(";
- current->bodyLine = yyLineNr;
- currentArgumentContext = DefineEnd;
- fullArgString=current->args.copy();
- copyArgString=&current->args;
- BEGIN( ReadFuncArgType ) ;
- }
- /*
-<DefineArg>")" {
- //printf("Define with args\n");
- current->args += ')';
- BEGIN( DefineEnd );
- }
-<DefineArg>. {
- current->args += *yytext;
- }
- */
-<Define>{ID} {
- //printf("Define `%s' without args\n",yytext);
- current->bodyLine = yyLineNr;
- current->name = yytext;
- BEGIN(DefineEnd);
- }
-<DefineEnd>\n {
- //printf("End define: doc=%s docFile=%s docLine=%d\n",current->doc.data(),current->docFile.data(),current->docLine);
- yyLineNr++;
- current->fileName = yyFileName;
- current->startLine = yyLineNr;
- current->type.resize(0);
- current->args = current->args.simplifyWhiteSpace();
- current->name = current->name.stripWhiteSpace();
- current->section = Entry::DEFINE_SEC;
- current_root->addSubEntry(current);
- current = new Entry ;
- initEntry();
- BEGIN(lastDefineContext);
- }
-<DefinePHPEnd>";" {
- //printf("End define\n");
- current->fileName = yyFileName;
- current->startLine = yyLineNr;
- current->type.resize(0);
- current->args = current->args.simplifyWhiteSpace();
- current->name = current->name.stripWhiteSpace();
- current->section = Entry::ENUM_SEC; //HACK!
- current_root->addSubEntry(current);
- current = new Entry ;
- initEntry();
- BEGIN(FindMembers);
- }
-<DefinePHPEnd>.
-<DefineEnd>\\[\r]?\n {
- yyLineNr++;
- }
-<DefineEnd>\" {
- if (insideIDL && insideCppQuote)
- {
- BEGIN(EndCppQuote);
- }
- else
- {
- lastStringContext=DefineEnd;
- BEGIN(SkipString);
- }
- }
-<DefineEnd>.
-<DefinePHP>{ID}["']{BN}*","{BN}* {
- current->name = yytext;
- current->name = current->name.stripWhiteSpace();
- current->name = current->name.left(current->name.length()-1).stripWhiteSpace();
- current->name = current->name.left(current->name.length()-1);
- current->args = "(";
- current->bodyLine = yyLineNr;
- lastRoundContext = DefinePHPEnd;
- pCopyRoundString = &current->args;
- roundCount = 0;
- BEGIN( CopyRound );
- }
-
-<FindMembers>[\^%] { // ^ and % are C++/CLI extensions
- if (insideCli)
- {
- addType( current );
- current->name = yytext ;
- }
- else
- {
- REJECT;
- }
- }
-<FindMembers>[*&]+ {
- current->name += yytext ;
- addType( current );
- }
-<FindMembers,MemberSpec,Function,NextSemi,BitFields,ReadInitializer,OldStyleArgs>";"{BN}*("/**"|"//!"|"/*!"|"///")"<" {
- lineCount();
- if (current->bodyLine==-1)
- {
- current->bodyLine=yyLineNr;
- }
- docBlockContext = YY_START;
- docBlockInBody = FALSE;
- docBlockAutoBrief = ( yytext[yyleng-2]=='*' && Config_getBool("JAVADOC_AUTOBRIEF") ) ||
- ( yytext[yyleng-2]=='!' && Config_getBool("QT_AUTOBRIEF") );
- docBlock.resize(0);
- docBlockTerm = ';';
- if (yytext[yyleng-3]=='/')
- {
- startCommentBlock(TRUE);
- BEGIN( DocLine );
- }
- else
- {
- startCommentBlock(FALSE);
- BEGIN( DocBlock );
- }
- }
-<MemberSpec,FindFields,FindMembers,NextSemi,BitFields,ReadInitializer,OldStyleArgs>","{BN}*("/**"|"//!"|"/*!"|"///")"<" {
- lineCount();
- docBlockContext = YY_START;
- docBlockInBody = FALSE;
- docBlockAutoBrief = ( yytext[yyleng-2]=='*' && Config_getBool("JAVADOC_AUTOBRIEF") ) ||
- ( yytext[yyleng-2]=='!' && Config_getBool("QT_AUTOBRIEF") );
- docBlock.resize(0);
- docBlockTerm = ',';
- if (yytext[yyleng-3]=='/')
- {
- startCommentBlock(TRUE);
- BEGIN( DocLine );
- }
- else
- {
- startCommentBlock(FALSE);
- BEGIN( DocBlock );
- }
- }
-<DefineEnd,FindFields,FindFieldArg,ReadInitializer,OldStyleArgs>{BN}*("/**"|"//!"|"/*!"|"///")"<" {
- lineCount();
- if (current->bodyLine==-1)
- {
- current->bodyLine=yyLineNr;
- }
- docBlockContext = YY_START;
- docBlockInBody = FALSE;
- docBlockAutoBrief = ( yytext[yyleng-2]=='*' && Config_getBool("JAVADOC_AUTOBRIEF") ) ||
- ( yytext[yyleng-2]=='!' && Config_getBool("QT_AUTOBRIEF") );
- docBlock.resize(0);
- docBlockTerm = 0;
- if (yytext[yyleng-3]=='/')
- {
- startCommentBlock(TRUE);
- BEGIN( DocLine );
- }
- else
- {
- startCommentBlock(FALSE);
- BEGIN( DocBlock );
- }
- }
-
-<FindMembers,FindFields>("//"([!/]?){B}*{CMD}"{")|("/*"([!*]?){B}*{CMD}"{") {
- //handleGroupStartCommand(current->name);
- if (previous && previous->section==Entry::GROUPDOC_SEC)
- {
- // link open command to the group defined in the previous entry
- openGroup(previous,yyFileName,yyLineNr);
- }
- else
- {
- // link open command to the current entry
- openGroup(current,yyFileName,yyLineNr);
- }
- //current = tmp;
- initEntry();
- if (yytext[1]=='/')
- {
- if (yytext[2]=='!' || yytext[2]=='/')
- {
- docBlockContext = YY_START;
- docBlockInBody = FALSE;
- docBlockAutoBrief = FALSE;
- docBlock.resize(0);
- docBlockTerm = 0;
- startCommentBlock(TRUE);
- BEGIN(DocLine);
- }
- else
- {
- lastCContext=YY_START;
- BEGIN(SkipCxxComment);
- }
- }
- else
- {
- if (yytext[2]=='!' || yytext[2]=='*')
- {
- docBlockContext = YY_START;
- docBlockInBody = FALSE;
- docBlock.resize(0);
- docBlockAutoBrief = ( yytext[yyleng-2]=='*' && Config_getBool("JAVADOC_AUTOBRIEF") ) ||
- ( yytext[yyleng-2]=='!' && Config_getBool("QT_AUTOBRIEF") );
- docBlockTerm = 0;
- startCommentBlock(FALSE);
- BEGIN(DocBlock);
- }
- else
- {
- lastCContext=YY_START;
- BEGIN(SkipComment);
- }
- }
- }
-<FindMembers,FindFields,ReadInitializer>"//"([!/]?){B}*{CMD}"}".*|"/*"([!*]?){B}*{CMD}"}"[^*]*"*/" {
- closeGroup(current,yyFileName,yyLineNr);
- }
-<FindMembers>"=" { // in PHP code this could also be due to "<?="
- current->bodyLine = yyLineNr;
- lastInitializerContext = YY_START;
- initBracketCount=0;
- BEGIN(ReadInitializer);
- }
- /* Read initializer rules */
-<ReadInitializer>"(" {
- lastRoundContext=YY_START;
- pCopyRoundGString=&current->initializer;
- roundCount=0;
- current->initializer+=*yytext;
- BEGIN(GCopyRound);
- }
-<ReadInitializer>"{" {
- lastCurlyContext=YY_START;
- pCopyCurlyGString=&current->initializer;
- curlyCount=0;
- current->initializer+=*yytext;
- BEGIN(GCopyCurly);
- }
-<ReadInitializer>[;,] {
- //printf(">> initializer `%s' <<\n",current->initializer.data());
- if (*yytext==';' && (current_root->spec&Entry::Enum))
- {
- current->fileName = yyFileName;
- current->startLine = yyLineNr;
- current->args = current->args.simplifyWhiteSpace();
- current->name = current->name.stripWhiteSpace();
- current->section = Entry::VARIABLE_SEC;
- current_root->addSubEntry(current);
- current = new Entry;
- initEntry();
- BEGIN(FindMembers);
- }
- else if (*yytext==';' || (lastInitializerContext==FindFields && initBracketCount==0)) // initBracketCount==0 was added for bug 665778
- {
- unput(*yytext);
- BEGIN(lastInitializerContext);
- }
- else if (*yytext==',' && initBracketCount==0) // for "int a=0,b=0"
- {
- unput(*yytext);
- BEGIN(lastInitializerContext);
- }
- else
- {
- current->initializer+=*yytext;
- }
- }
-<ReadInitializer>\" {
- if (insideIDL && insideCppQuote)
- {
- BEGIN(EndCppQuote);
- }
- else
- {
- lastStringContext=YY_START;
- current->initializer=yytext;
- pCopyQuotedGString=&current->initializer;
- BEGIN(CopyGString);
- }
- }
-<ReadInitializer>"->" {
- current->initializer+=yytext;
- }
-<ReadInitializer>"<<" {
- current->initializer+=yytext;
- }
-<ReadInitializer>">>" {
- current->initializer+=yytext;
- }
-<ReadInitializer>[<\[{(] {
- initBracketCount++;
- current->initializer+=*yytext;
- }
-<ReadInitializer>[>\]})] {
- initBracketCount--;
- current->initializer+=*yytext;
- }
-<ReadInitializer>\' {
- if (insidePHP)
- {
- current->initializer+=yytext;
- pCopyQuotedGString = &current->initializer;
- lastStringContext=YY_START;
- BEGIN(CopyPHPGString);
- }
- else
- {
- current->initializer+=yytext;
- }
- }
-<ReadInitializer>{CHARLIT} {
- if (insidePHP)
- {
- REJECT;
- }
- else
- {
- current->initializer+=yytext;
- }
- }
-<ReadInitializer>\n {
- current->initializer+=*yytext;
- yyLineNr++;
- }
-<ReadInitializer>"@\"" {
- //printf("insideCS=%d\n",insideCS);
- current->initializer+=yytext;
- if (!insideCS && !insideObjC)
- {
- REJECT;
- }
- else
- {
- // C#/ObjC verbatim string
- lastSkipVerbStringContext=YY_START;
- pSkipVerbString=&current->initializer;
- BEGIN(SkipVerbString);
- }
- }
-<SkipVerbString>[^\n"]+ {
- *pSkipVerbString+=yytext;
- }
-<SkipVerbString>"\"\"" { // quote escape
- *pSkipVerbString+=yytext;
- }
-<SkipVerbString>"\"" {
- *pSkipVerbString+=*yytext;
- BEGIN(lastSkipVerbStringContext);
- }
-<SkipVerbString>\n {
- *pSkipVerbString+=*yytext;
- yyLineNr++;
- }
-<SkipVerbString>. {
- *pSkipVerbString+=*yytext;
- }
-<ReadInitializer>"?>" {
- if (insidePHP)
- BEGIN( FindMembersPHP );
- else
- current->initializer+=yytext;
- }
-<ReadInitializer>. {
- current->initializer+=*yytext;
- }
-
- /* generic quoted string copy rules */
-<CopyString,CopyPHPString>\\. {
- *pCopyQuotedString+=yytext;
- }
-<CopyString>\" {
- *pCopyQuotedString+=*yytext;
- BEGIN( lastStringContext );
- }
-<CopyPHPString>\' {
- *pCopyQuotedString+=*yytext;
- BEGIN( lastStringContext );
- }
-<CopyString,CopyPHPString>"/*"|"*/"|"//" {
- *pCopyQuotedString+=yytext;
- }
-<CopyString,CopyPHPString>\n {
- *pCopyQuotedString+=*yytext;
- yyLineNr++;
- }
-<CopyString,CopyPHPString>. {
- *pCopyQuotedString+=*yytext;
- }
-
- /* generic quoted growable string copy rules */
-<CopyGString,CopyPHPGString>\\. {
- *pCopyQuotedGString+=yytext;
- }
-<CopyGString>\" {
- *pCopyQuotedGString+=*yytext;
- BEGIN( lastStringContext );
- }
-<CopyPHPGString>\' {
- *pCopyQuotedGString+=*yytext;
- BEGIN( lastStringContext );
- }
-<CopyGString,CopyPHPGString>"/*"|"*/"|"//" {
- *pCopyQuotedGString+=yytext;
- }
-<CopyGString,CopyPHPGString>\n {
- *pCopyQuotedGString+=*yytext;
- yyLineNr++;
- }
-<CopyGString,CopyPHPGString>. {
- *pCopyQuotedGString+=*yytext;
- }
-
- /* generic round bracket list copy rules */
-<CopyRound>\" {
- *pCopyRoundString+=*yytext;
- pCopyQuotedString=pCopyRoundString;
- lastStringContext=YY_START;
- BEGIN(CopyString);
- }
-<CopyRound>"(" {
- *pCopyRoundString+=*yytext;
- roundCount++;
- }
-<CopyRound>")" {
- *pCopyRoundString+=*yytext;
- if (--roundCount<0)
- BEGIN(lastRoundContext);
- }
-<CopyRound>\n {
- yyLineNr++;
- *pCopyRoundString+=*yytext;
- }
-<CopyRound>\' {
- if (insidePHP)
- {
- current->initializer+=yytext;
- pCopyQuotedString = pCopyRoundString;
- lastStringContext=YY_START;
- BEGIN(CopyPHPString);
- }
- else
- {
- *pCopyRoundString+=yytext;
- }
- }
-<CopyRound>{CHARLIT} {
- if (insidePHP)
- {
- REJECT;
- }
- else
- {
- *pCopyRoundString+=yytext;
- }
- }
-<CopyRound>[^"'()\n]+ {
- *pCopyRoundString+=yytext;
- }
-<CopyRound>. {
- *pCopyRoundString+=*yytext;
- }
-
- /* generic round bracket list copy rules for growable strings */
-<GCopyRound>\" {
- *pCopyRoundGString+=*yytext;
- pCopyQuotedGString=pCopyRoundGString;
- lastStringContext=YY_START;
- BEGIN(CopyGString);
- }
-<GCopyRound>"(" {
- *pCopyRoundGString+=*yytext;
- roundCount++;
- }
-<GCopyRound>")" {
- *pCopyRoundGString+=*yytext;
- if (--roundCount<0)
- BEGIN(lastRoundContext);
- }
-<GCopyRound>\n {
- yyLineNr++;
- *pCopyRoundGString+=*yytext;
- }
-<GCopyRound>\' {
- if (insidePHP)
- {
- current->initializer+=yytext;
- pCopyQuotedGString = pCopyRoundGString;
- lastStringContext=YY_START;
- BEGIN(CopyPHPGString);
- }
- else
- {
- *pCopyRoundGString+=yytext;
- }
- }
-<GCopyRound>{CHARLIT} {
- if (insidePHP)
- {
- REJECT;
- }
- else
- {
- *pCopyRoundGString+=yytext;
- }
- }
-<GCopyRound>[^"'()\n/]+ {
- *pCopyRoundGString+=yytext;
- }
-<GCopyRound>. {
- *pCopyRoundGString+=*yytext;
- }
-
- /* generic curly bracket list copy rules */
-<CopyCurly>\" {
- *pCopyCurlyString+=*yytext;
- pCopyQuotedString=pCopyCurlyString;
- lastStringContext=YY_START;
- BEGIN(CopyString);
- }
-<CopyCurly>\' {
- *pCopyCurlyString+=*yytext;
- if (insidePHP)
- {
- pCopyQuotedString=pCopyCurlyString;
- lastStringContext=YY_START;
- BEGIN(CopyPHPString);
- }
- }
-<CopyCurly>"{" {
- *pCopyCurlyString+=*yytext;
- curlyCount++;
- }
-<CopyCurly>"}" {
- *pCopyCurlyString+=*yytext;
- if (--curlyCount<0)
- BEGIN(lastCurlyContext);
- }
-<CopyCurly>{CHARLIT} { if (insidePHP)
- {
- REJECT;
- }
- else
- {
- *pCopyCurlyString+=yytext;
- }
- }
-<CopyCurly>[^"'{}\/\n]+ {
- *pCopyCurlyString+=yytext;
- }
-<CopyCurly>"/" { *pCopyCurlyString+=yytext; }
-<CopyCurly>\n {
- yyLineNr++;
- *pCopyCurlyString+=*yytext;
- }
-<CopyCurly>. {
- *pCopyCurlyString+=*yytext;
- }
-
- /* generic curly bracket list copy rules for growable strings */
-<GCopyCurly>^"#"{B}+[0-9]+{B}+"\""[^\"\n]+"\""{B}+"1"{B}*\n? { // start of included file marker
- }
-<GCopyCurly>^"#"{B}+[0-9]+{B}+"\""[^\"\n]+"\""{B}+"2"{B}*\n? { // end of included file marker
- QCString line = QCString(yytext);
- int s = line.find(' ');
- int e = line.find('"',s);
- yyLineNr = line.mid(s,e-s).toInt();
- if (yytext[yyleng-1]=='\n')
- {
- yyLineNr++;
- }
- }
-<GCopyCurly>\" {
- *pCopyCurlyGString+=*yytext;
- pCopyQuotedGString=pCopyCurlyGString;
- lastStringContext=YY_START;
- BEGIN(CopyGString);
- }
-<GCopyCurly>\' {
- *pCopyCurlyGString+=*yytext;
- if (insidePHP)
- {
- pCopyQuotedGString=pCopyCurlyGString;
- lastStringContext=YY_START;
- BEGIN(CopyPHPGString);
- }
- }
-<GCopyCurly>"{" {
- *pCopyCurlyGString+=*yytext;
- curlyCount++;
- }
-<GCopyCurly>"}" {
- *pCopyCurlyGString+=*yytext;
- if (--curlyCount<0)
- BEGIN(lastCurlyContext);
- }
-<GCopyCurly>{CHARLIT} { if (insidePHP)
- {
- REJECT;
- }
- else
- {
- *pCopyCurlyGString+=yytext;
- }
- }
-<GCopyCurly>[^"'{}\/\n]+ {
- *pCopyCurlyGString+=yytext;
- }
-<GCopyCurly>"/" { *pCopyCurlyGString+=yytext; }
-<GCopyCurly>\n {
- yyLineNr++;
- *pCopyCurlyGString+=*yytext;
- }
-<GCopyCurly>. {
- *pCopyCurlyGString+=*yytext;
- }
-
- /* ---------------------- */
-
-
-<FindMembers>":" {
- if (current->type.isEmpty()) // anonymous padding field, e.g. "int :7;"
- {
- addType(current);
- current->name.sprintf("__pad%d__",padCount++);
- }
- BEGIN(BitFields);
- current->bitfields+=":";
- }
-<BitFields>. {
- current->bitfields+=*yytext;
- }
-<FindMembers>[;,] {
- QCString oldType = current->type.copy();
- if (current->bodyLine==-1)
- {
- current->bodyLine = yyLineNr;
- }
- if ( insidePHP && current->type.left(3) == "var" )
- {
- current->type = current->type.mid(3);
- }
- if (isTypedef && current->type.left(8)!="typedef ")
- {
- current->type.prepend("typedef ");
- }
- bool needNewCurrent=FALSE;
- if (!current->name.isEmpty() && current->section!=Entry::ENUM_SEC)
- {
- current->type=current->type.simplifyWhiteSpace();
- current->args=removeRedundantWhiteSpace(current->args);
- current->name=current->name.stripWhiteSpace();
- if (current->section==Entry::CLASS_SEC) // remove spec for "struct Bla bla;"
- {
- current->spec = 0;
- }
- current->section = Entry::VARIABLE_SEC ;
- current->fileName = yyFileName;
- current->startLine = yyLineNr;
- current_root->addSubEntry( current ) ;
- needNewCurrent=TRUE;
- }
- if ( *yytext == ',')
- {
- bool stat = current->stat;
- if (needNewCurrent)
- {
- current = new Entry(*current);
- initEntry();
- }
- current->stat = stat; // the static attribute holds for all variables
- current->name.resize(0);
- current->args.resize(0);
- current->brief.resize(0);
- current->doc.resize(0);
- current->initializer.resize(0);
- current->bitfields.resize(0);
- int i=oldType.length();
- while (i>0 && (oldType[i-1]=='*' || oldType[i-1]=='&' || oldType[i-1]==' ')) i--;
- current->type = oldType.left(i);
- }
- else
- {
- if (needNewCurrent)
- {
- current = new Entry ;
- }
- else if (current->groups)
- {
- current->groups->clear();
- }
- initEntry();
- }
- }
-
-<FindMembers>"[" {
- if (!insideCS &&
- (current->name.isEmpty() ||
- current->name=="typedef"
- )
- ) // IDL function property
- {
- squareCount=1;
- lastSquareContext = YY_START;
- idlAttr.resize(0);
- idlProp.resize(0);
- current->mtype = mtype;
- BEGIN( IDLAttribute );
- }
- else if (insideCS &&
- current->name.isEmpty())
- {
- squareCount=1;
- lastSquareContext = YY_START;
- // Skip the C# attribute
- // for this member
- current->args.resize(0);
- BEGIN( SkipSquare );
- }
- else
- {
- current->args += yytext ;
- squareCount=1;
- BEGIN( Array ) ;
- }
- }
-<IDLAttribute>"]" {
- // end of IDL function attribute
- if (--squareCount<=0)
- {
- lineCount();
- if (current->mtype == Property)
- BEGIN( IDLPropName );
- else
- BEGIN( lastSquareContext );
- }
- }
-<IDLAttribute>"propput" {
- if (Config_getBool("IDL_PROPERTY_SUPPORT"))
- {
- current->mtype = Property;
- }
- current->spec |= Entry::Settable;
- }
-<IDLAttribute>"propget" {
- if (Config_getBool("IDL_PROPERTY_SUPPORT"))
- {
- current->mtype = Property;
- }
- current->spec |= Entry::Gettable;
- }
-<IDLAttribute>. {
- }
-<IDLPropName>{BN}*{ID}{BN}* {
- // return type (probably HRESULT) - skip it
- }
-<IDLPropName>{ID}{BN}*"(" {
- current->name = yytext;
- current->name = current->name.left(current->name.length()-1).stripWhiteSpace();
- current->startLine = yyLineNr;
- BEGIN( IDLProp );
- }
-<IDLProp>{BN}*"["[^\]]*"]"{BN}* { // attribute of a parameter
- idlAttr = yytext;
- idlAttr=idlAttr.stripWhiteSpace();
- }
-<IDLProp>{ID} { // property type
- idlProp = yytext;
- }
-<IDLProp>{BN}*{ID}{BN}*"," { // Rare: Another parameter ([propput] HRESULT Item(int index, [in] Type theRealProperty);)
- if (!current->args)
- current->args = "(";
- else
- current->args += ", ";
- current->args += idlAttr;
- current->args += " ";
- current->args += idlProp; // prop was actually type of extra parameter
- current->args += " ";
- current->args += yytext;
- current->args = current->args.left(current->args.length() - 1); // strip comma
- idlProp.resize(0);
- idlAttr.resize(0);
- BEGIN( IDLProp );
- }
-<IDLProp>{BN}*{ID}{BN}*")"{BN}* {
- // the parameter name for the property - just skip.
- }
-<IDLProp>";" {
- current->fileName = yyFileName;
- current->type = idlProp;
- current->args = current->args.simplifyWhiteSpace();
- if (current->args)
- current->args += ")";
- current->name = current->name.stripWhiteSpace();
- current->section = Entry::VARIABLE_SEC;
- current_root->addSubEntry(current);
- current = new Entry;
- initEntry();
- BEGIN( FindMembers );
- }
-<IDLProp>. { // spaces, *, or other stuff
- //idlProp+=yytext;
- }
-<Array>"]" { current->args += *yytext ;
- if (--squareCount<=0)
- BEGIN( FindMembers ) ;
- }
-<FuncFuncArray>"]" { current->args += *yytext ;
- if (--squareCount<=0)
- BEGIN( Function ) ;
- }
-<Array,FuncFuncArray>"[" { current->args += *yytext ;
- squareCount++;
- }
-<Array,FuncFuncArray>. { current->args += *yytext ; }
-<SkipSquare>"[" { squareCount++; }
-<SkipSquare>"]" {
- if (--squareCount<=0)
- BEGIN( lastSquareContext );
- }
-<SkipSquare>\" {
- lastStringContext=YY_START;
- BEGIN( SkipString );
- }
-<SkipSquare>[^\n\[\]\"]+
-<FindMembers>"<" { addType( current ) ;
- current->type += yytext ;
- BEGIN( Sharp ) ;
- }
-<Sharp>">" { current->type += *yytext ;
- if (--sharpCount<=0)
- BEGIN( FindMembers ) ;
- }
-<Sharp>"<" { current->type += *yytext ;
- sharpCount++;
- }
-<Sharp>{BN}+ {
- lineCount();
- }
-<Sharp>. { current->type += *yytext ; }
-<FindFields>{ID} {
- current->bodyLine = yyLineNr;
- current->name = yytext;
- }
-<FindFields>"(" {
- // Java enum initializer
- unput('(');
- lastInitializerContext = YY_START;
- initBracketCount=0;
- BEGIN(ReadInitializer);
- }
-<FindFields>"=" {
- lastInitializerContext = YY_START;
- initBracketCount=0;
- BEGIN(ReadInitializer);
- }
-<FindFields>";" {
- if (insideJava) // last enum field in Java class
- {
- if (!current->name.isEmpty())
- {
- current->fileName = yyFileName;
- current->startLine = yyLineNr;
- current->type = "@"; // enum marker
- current->args = current->args.simplifyWhiteSpace();
- current->name = current->name.stripWhiteSpace();
- current->section = Entry::VARIABLE_SEC;
- current_root->addSubEntry(current);
- current = new Entry ;
- initEntry();
- }
-
- BEGIN( FindMembers );
- }
- else
- {
- REJECT;
- }
- }
-<SkipRemainder>\n {
- yyLineNr++;
- }
-<SkipRemainder>[^\n]*
-<FindFields>"," {
- //printf("adding `%s' `%s' `%s' to enum `%s' (mGrpId=%d)\n",
- // current->type.data(), current->name.data(),
- // current->args.data(), current_root->name.data(),current->mGrpId);
- if (!current->name.isEmpty())
- {
- current->fileName = yyFileName;
- current->startLine = yyLineNr;
- if (!(current_root->spec&Entry::Enum))
- {
- current->type = "@"; // enum marker
- }
- current->args = current->args.simplifyWhiteSpace();
- current->name = current->name.stripWhiteSpace();
- current->section = Entry::VARIABLE_SEC;
- // add to the scope of the enum
- current_root->addSubEntry(current);
- if (!insideCS && !insideJava) // for C# and Java 1.5+ enum values always have to be explicitly qualified
- {
- current = new Entry(*current);
- // add to the scope surrounding the enum (copy!)
- current_root->parent()->addSubEntry(current);
- }
- current = new Entry ;
- initEntry();
- }
- else // probably a redundant ,
- {
- current->reset();
- initEntry();
- }
- }
-<FindFields>"[" { // attribute list in IDL
- squareCount=1;
- lastSquareContext = YY_START;
- BEGIN(SkipSquare);
- }
- /*
-<FindFieldArg>"," { unput(*yytext); BEGIN(FindFields); }
- */
-<ReadBody,ReadNSBody,ReadBodyIntf>[^\r\n\#{}"@'/<]* { current->program += yytext ; }
-<ReadBody,ReadNSBody,ReadBodyIntf>"//".* { current->program += yytext ; }
-<ReadBody,ReadNSBody,ReadBodyIntf>"#".* { if (!insidePHP)
- REJECT;
- // append PHP comment.
- current->program += yytext ;
- }
-<ReadBody,ReadNSBody,ReadBodyIntf>@\" { current->program += yytext ;
- pSkipVerbString = &current->program;
- lastSkipVerbStringContext=YY_START;
- BEGIN( SkipVerbString );
- }
-<ReadBody,ReadNSBody,ReadBodyIntf>"<<<" { if (insidePHP)
- {
- current->program += yytext ;
- pCopyHereDocGString = &current->program;
- lastHereDocContext=YY_START;
- BEGIN( CopyHereDoc );
- }
- else
- {
- REJECT;
- }
- }
-<ReadBody,ReadNSBody,ReadBodyIntf>\" { current->program += yytext ;
- pCopyQuotedGString = &current->program;
- lastStringContext=YY_START;
- BEGIN( CopyGString );
- }
-<ReadBody,ReadNSBody,ReadBodyIntf>"/*"{B}* { current->program += yytext ;
- lastContext = YY_START ;
- BEGIN( Comment ) ;
- }
-<ReadBody,ReadNSBody,ReadBodyIntf>"/*"{BL} { current->program += yytext ;
- ++yyLineNr ;
- lastContext = YY_START ;
- BEGIN( Comment ) ;
- }
-<ReadBody,ReadNSBody,ReadBodyIntf>"'" {
- if (!insidePHP)
- {
- current->program += yytext;
- }
- else
- { // begin of single quoted string
- current->program += yytext;
- pCopyQuotedGString = &current->program;
- lastStringContext=YY_START;
- BEGIN(CopyPHPGString);
- }
- }
-<ReadBody,ReadNSBody,ReadBodyIntf>{CHARLIT} {
- if (insidePHP)
- {
- REJECT; // for PHP code single quotes
- // are used for strings of arbitrary length
- }
- else
- {
- current->program += yytext;
- }
- }
-<ReadBody,ReadNSBody,ReadBodyIntf>"{" { current->program += yytext ;
- ++curlyCount ;
- }
-<ReadBodyIntf>"}" {
- current->program += yytext ;
- --curlyCount ;
- }
-<ReadBody,ReadNSBody>"}" { //err("ReadBody count=%d\n",curlyCount);
- if ( curlyCount>0 )
- {
- current->program += yytext ;
- --curlyCount ;
- }
- else
- {
- current->endBodyLine = yyLineNr;
- QCString &cn = current->name;
- QCString rn = current_root->name.copy();
- //printf("cn=`%s' rn=`%s' isTypedef=%d\n",cn.data(),rn.data(),isTypedef);
- if (!cn.isEmpty() && !rn.isEmpty())
- {
- prependScope();
- }
- if (isTypedef && cn.isEmpty())
- {
- //printf("Typedef Name\n");
- BEGIN( TypedefName );
- }
- else
- {
- if ((current->section == Entry::ENUM_SEC) || (current->spec&Entry::Enum))
- {
- current->program+=','; // add field terminator
- }
- // add compound definition to the tree
- current->args=removeRedundantWhiteSpace(current->args);
- // was: current->args.simplifyWhiteSpace();
- current->type = current->type.simplifyWhiteSpace();
- current->name = current->name.stripWhiteSpace();
- //printf("adding `%s' `%s' `%s' brief=%s insideObjC=%d %x\n",current->type.data(),current->name.data(),current->args.data(),current->brief.data(),insideObjC,current->section);
- if (insideObjC &&
- ((current->spec&Entry::Interface) || (current->spec==Entry::Category))
- ) // method definition follows
- {
- BEGIN( ReadBodyIntf ) ;
- }
- else
- {
- current_root->addSubEntry( current ) ;
- memspecEntry = current;
- current = new Entry(*current);
- if (current->section==Entry::NAMESPACE_SEC ||
- (current->spec==Entry::Interface) ||
- insideJava || insidePHP || insideCS || insideD || insideJS
- )
- { // namespaces and interfaces and java classes ends with a closing bracket without semicolon
- current->reset();
- initEntry();
- memspecEntry = 0;
- BEGIN( FindMembers ) ;
- }
- else
- {
- if (!isTypedef && cn.find('@')==-1) // not typedef or unnamed struct
- {
- // enabled the next two lines for bug 623424
- current->doc.resize(0);
- current->brief.resize(0);
- }
- BEGIN( MemberSpec ) ;
- }
- }
- }
- }
- }
-<ReadBody>"}"{BN}+"typedef"{BN}+ { //err("ReadBody count=%d\n",curlyCount);
- lineCount();
- if ( curlyCount>0 )
- {
- current->program += yytext ;
- --curlyCount ;
- }
- else
- {
- isTypedef = TRUE;
- current->endBodyLine = yyLineNr;
- QCString &cn = current->name;
- QCString rn = current_root->name.copy();
- if (!cn.isEmpty() && !rn.isEmpty())
- {
- prependScope();
- }
- BEGIN( TypedefName );
- }
- }
-<TypedefName>("const"|"volatile"){BN} { // late "const" or "volatile" keyword
- lineCount();
- current->type.prepend(yytext);
- }
-<TypedefName>{ID} {
- if ((current->section == Entry::ENUM_SEC) || (current->spec&Entry::Enum))
- {
- current->program+=","; // add field terminator
- }
- current->name=yytext;
- prependScope();
- current->args = current->args.simplifyWhiteSpace();
- current->type = current->type.simplifyWhiteSpace();
- //printf("Adding compound %s %s %s\n",current->type.data(),current->name.data(),current->args.data());
- current_root->addSubEntry( current ) ;
- if (!firstTypedefEntry)
- {
- firstTypedefEntry = current;
- }
- current = new Entry;
- initEntry();
- isTypedef=TRUE; // to undo reset by initEntry()
- BEGIN(MemberSpecSkip);
- }
-<TypedefName>";" { /* typedef of anonymous type */
- current->name.sprintf("@%d",anonCount++);
- if ((current->section == Entry::ENUM_SEC) || (current->spec&Entry::Enum))
- {
- current->program+=','; // add field terminator
- }
- // add compound definition to the tree
- current->args = current->args.simplifyWhiteSpace();
- current->type = current->type.simplifyWhiteSpace();
- current_root->addSubEntry( current ) ;
- memspecEntry = current;
- current = new Entry(*current);
- initEntry();
- unput(';');
- BEGIN( MemberSpec ) ;
- }
-<MemberSpec>([*&]*{BN}*)*{ID}{BN}*("["[^\]\n]*"]")* { // the [] part could be improved.
- lineCount();
- int i=0,l=yyleng,j;
- while (i<l && (!isId(yytext[i]))) i++;
- msName = QCString(yytext).right(l-i).stripWhiteSpace();
- j=msName.find("[");
- if (j!=-1)
- {
- msArgs=msName.right(msName.length()-j);
- msName=msName.left(j);
- }
- msType=QCString(yytext).left(i);
-
- // handle *pName in: typedef { ... } name, *pName;
- if (firstTypedefEntry)
- {
- if (firstTypedefEntry->spec&Entry::Struct)
- {
- msType.prepend("struct "+firstTypedefEntry->name);
- }
- else if (firstTypedefEntry->spec&Entry::Union)
- {
- msType.prepend("union "+firstTypedefEntry->name);
- }
- else if (firstTypedefEntry->section==Entry::ENUM_SEC)
- {
- msType.prepend("enum "+firstTypedefEntry->name);
- }
- else
- {
- msType.prepend(firstTypedefEntry->name);
- }
- }
- }
-<MemberSpec>"(" { // function with struct return type
- addType(current);
- current->name = msName;
- current->spec = 0;
- unput('(');
- BEGIN(FindMembers);
- }
-<MemberSpec>[,;] {
- if (msName.isEmpty() && !current->name.isEmpty())
- {
- // see if the compound does not have a name or is inside another
- // anonymous compound. If so we insert a
- // special `anonymous' variable.
- //Entry *p=current_root;
- Entry *p=current;
- while (p)
- {
- // only look for class scopes, not namespace scopes
- if ((p->section & Entry::COMPOUND_MASK) && !p->name.isEmpty())
- {
- //printf("Trying scope `%s'\n",p->name.data());
- int i=p->name.findRev("::");
- int pi = (i==-1) ? 0 : i+2;
- if (p->name.at(pi)=='@')
- {
- // anonymous compound inside -> insert dummy variable name
- //printf("Adding anonymous variable for scope %s\n",p->name.data());
- msName.sprintf("@%d",anonCount++);
- break;
- }
- }
- //p=p->parent;
- if (p==current) p=current_root; else p=p->parent();
- }
- }
- //printf("msName=%s current->name=%s\n",msName.data(),current->name.data());
- if (!msName.isEmpty()
- /*&& msName!=current->name*/) // skip typedef T {} T;, removed due to bug608493
- {
- static bool typedefHidesStruct = Config_getBool("TYPEDEF_HIDES_STRUCT");
- // case 1: typedef struct _S { ... } S_t;
- // -> omit typedef and use S_t as the struct name
- if (typedefHidesStruct &&
- isTypedef &&
- ((current->spec&(Entry::Struct|Entry::Union)) ||
- current->section==Entry::ENUM_SEC )&&
- msType.stripWhiteSpace().isEmpty() &&
- memspecEntry)
- {
- memspecEntry->name=msName;
- }
- else // case 2: create a typedef field
- {
- Entry *varEntry=new Entry;
- varEntry->lang = language;
- varEntry->protection = current->protection ;
- varEntry->mtype = current->mtype;
- varEntry->virt = current->virt;
- varEntry->stat = current->stat;
- varEntry->section = Entry::VARIABLE_SEC;
- varEntry->name = msName.stripWhiteSpace();
- varEntry->type = current->type.simplifyWhiteSpace()+" ";
- varEntry->args = msArgs;
- if (isTypedef)
- {
- varEntry->type.prepend("typedef ");
- // //printf("current->name = %s %s\n",current->name.data(),msName.data());
- }
- if (typedefHidesStruct &&
- isTypedef &&
- (current->spec&(Entry::Struct|Entry::Union)) &&
- memspecEntry
- ) // case 1: use S_t as type for pS_t in "typedef struct _S {} S_t, *pS_t;"
- {
- varEntry->type+=memspecEntry->name+msType;
- }
- else // case 2: use _S as type for for pS_t
- {
- varEntry->type+=current->name+msType;
- }
- varEntry->fileName = yyFileName;
- varEntry->startLine = yyLineNr;
- varEntry->doc = current->doc.copy();
- varEntry->brief = current->brief.copy();
- varEntry->mGrpId = current->mGrpId;
-
- // deep copy group list
- QListIterator<Grouping> gli(*current->groups);
- Grouping *g;
- for (;(g=gli.current());++gli)
- {
- varEntry->groups->append(new Grouping(*g));
- }
- if (current->sli) // copy special list items
- {
- QListIterator<ListItemInfo> li(*current->sli);
- ListItemInfo *lii;
- for (li.toFirst();(lii=li.current());++li)
- {
- varEntry->addSpecialListItem(lii->type,lii->itemId);
- }
- }
-
- //printf("Add: type=`%s',name=`%s',args=`%s' brief=%s doc=%s\n",
- // varEntry->type.data(),varEntry->name.data(),
- // varEntry->args.data(),varEntry->brief.data(),varEntry->doc.data());
- current_root->addSubEntry(varEntry);
- }
- }
- if (*yytext==';') // end of a struct/class ...
- {
- if (!isTypedef && msName.isEmpty() && memspecEntry && (current->section&Entry::COMPOUND_MASK))
- { // case where a class/struct has a doc block after it
- if (!current->doc.isEmpty())
- {
- memspecEntry->doc += current->doc;
- }
- if (!current->brief.isEmpty())
- {
- memspecEntry->brief += current->brief;
- }
- }
- msType.resize(0);
- msName.resize(0);
- msArgs.resize(0);
- isTypedef=FALSE;
- firstTypedefEntry=0;
- memspecEntry=0;
- current->reset();
- initEntry();
- BEGIN( FindMembers );
- }
- else
- {
- current->doc.resize(0);
- current->brief.resize(0);
- }
-
- }
-<MemberSpec>"=" {
- lastInitializerContext=YY_START;
- initBracketCount=0;
- BEGIN(ReadInitializer);
- /* BEGIN(MemberSpecSkip); */
- }
- /*
-<MemberSpecSkip>"{" {
- curlyCount=0;
- lastCurlyContext = MemberSpecSkip;
- previous = current;
- BEGIN(SkipCurly);
- }
- */
-<MemberSpecSkip>"," { BEGIN(MemberSpec); }
-<MemberSpecSkip>";" { unput(';'); BEGIN(MemberSpec); }
-<ReadBody,ReadNSBody,ReadBodyIntf>{BN}{1,80} { current->program += yytext ;
- lineCount() ;
- }
-<ReadBodyIntf>"@end"/[^a-z_A-Z0-9] { // end of Objective C block
- current_root->addSubEntry( current ) ;
- current=new Entry;
- initEntry();
- insideObjC=FALSE;
- BEGIN( FindMembers );
- }
-<ReadBody,ReadNSBody,ReadBodyIntf>. { current->program += yytext ; }
-
-<FindMembers>"("/{BN}*"::"*{BN}*({TSCOPE}{BN}*"::")*{TSCOPE}{BN}*")"{BN}*"(" | /* typedef void (A<int>::func_t)(args...) */
-<FindMembers>("("({BN}*"::"*{BN}*{TSCOPE}{BN}*"::")*({BN}*[*&\^]{BN}*)+)+ { /* typedef void (A::*ptr_t)(args...) or int (*func(int))[], the ^ is for Obj-C blocks */
- if (insidePHP) // reference parameter
- {
- REJECT
- }
- else
- {
- current->bodyLine = yyLineNr;
- lineCount();
- addType(current);
- funcPtrType=yytext;
- roundCount=0;
- //current->type += yytext;
- BEGIN( FuncPtr );
- }
- }
-<FuncPtr>{SCOPENAME} {
- current->name = yytext;
- if (nameIsOperator(current->name))
- {
- BEGIN( FuncPtrOperator );
- }
- else
- {
- if (current->name=="const" || current->name=="volatile")
- {
- funcPtrType += current->name;
- }
- else
- {
- BEGIN( EndFuncPtr );
- }
- }
- }
-<FuncPtr>. {
- //printf("error: FuncPtr `%c' unexpected at line %d of %s\n",*yytext,yyLineNr,yyFileName);
- }
-<FuncPtrOperator>"("{BN}*")"{BN}*/"(" {
- current->name += yytext;
- current->name = current->name.simplifyWhiteSpace();
- lineCount();
- }
-<FuncPtrOperator>\n {
- yyLineNr++;
- current->name += *yytext;
- }
-<FuncPtrOperator>"(" {
- unput(*yytext);
- BEGIN( EndFuncPtr );
- }
-<FuncPtrOperator>. {
- current->name += *yytext;
- }
-<EndFuncPtr>")"{BN}*/";" { // a variable with extra braces
- lineCount();
- current->type+=funcPtrType.data()+1;
- BEGIN(FindMembers);
- }
-<EndFuncPtr>")"{BN}*/"(" { // a function pointer
- lineCount();
- current->type+=funcPtrType+")";
- BEGIN(FindMembers);
- }
-<EndFuncPtr>")"{BN}*/"[" { // an array of variables
- lineCount();
- current->type+=funcPtrType.data();
- current->args += ")";
- BEGIN(FindMembers);
- }
-<EndFuncPtr>"(" { // a function returning a function or
- // a function returning a pointer to an array
- current->args += *yytext ;
- //roundCount=0;
- //BEGIN( FuncFunc );
- current->bodyLine = yyLineNr;
- currentArgumentContext = FuncFuncEnd;
- fullArgString=current->args.copy();
- copyArgString=&current->args;
- BEGIN( ReadFuncArgType ) ;
- }
-<EndFuncPtr>"["[^\n\]]*"]" {
- funcPtrType+=yytext;
- }
-<EndFuncPtr>")" {
- BEGIN(FindMembers);
- }
-<FuncFunc>"(" {
- current->args += *yytext ;
- ++roundCount;
- }
-<FuncFunc>")" {
- current->args += *yytext ;
- if ( roundCount )
- --roundCount;
- else
- {
- BEGIN(FuncFuncEnd);
- }
- }
-<FuncFuncEnd>")"{BN}*"(" {
- lineCount();
- current->type+=funcPtrType+")(";
- BEGIN(FuncFuncType);
- }
-<FuncFuncEnd>")"{BN}*/[;{] {
- lineCount();
- current->type+=funcPtrType.data()+1;
- BEGIN(Function);
- }
-<FuncFuncEnd>")"{BN}*/"[" { // function returning a pointer to an array
- lineCount();
- current->type+=funcPtrType;
- current->args+=")";
- BEGIN(FuncFuncArray);
- }
-<FuncFuncEnd>. {
- current->args += *yytext;
- }
-<FuncFuncType>"(" {
- current->type += *yytext;
- roundCount++;
- }
-<FuncFuncType>")" {
- current->type += *yytext;
- if (roundCount)
- --roundCount;
- else
- BEGIN(Function);
- }
-<FuncFuncType>{BN}*","{BN}* { lineCount() ; current->type += ", " ; }
-<FuncFuncType>{BN}+ { lineCount() ; current->type += ' ' ; }
-<FuncFuncType>. {
- current->type += *yytext;
- }
-<FindMembers>"("/{BN}*{ID}{BN}*"*"{BN}*{ID}*")(" { // for catching typedef void (__stdcall *f)() like definitions
- if (current->type.left(7)=="typedef" && current->bodyLine==-1)
- // the bodyLine check is to prevent this guard to be true more than once
- {
- current->bodyLine = yyLineNr;
- BEGIN( GetCallType );
- }
- else if (!current->name.isEmpty()) // normal function
- {
- current->args = yytext;
- current->bodyLine = yyLineNr;
- currentArgumentContext = FuncQual;
- fullArgString=current->args.copy();
- copyArgString=&current->args;
- BEGIN( ReadFuncArgType ) ;
- //printf(">>> Read function arguments!\n");
- }
- }
-<GetCallType>{BN}*{ID}{BN}*"*" {
- lineCount();
- addType(current);
- funcPtrType="(";
- funcPtrType+=yytext;
- roundCount=0;
- BEGIN( FuncPtr );
- }
-<FindMembers>"(" {
- if (!current->name.isEmpty())
- {
- current->args = yytext;
- current->bodyLine = yyLineNr;
- currentArgumentContext = FuncQual;
- fullArgString=current->args.copy();
- copyArgString=&current->args;
- BEGIN( ReadFuncArgType ) ;
- //printf(">>> Read function arguments current->argList->count()=%d\n",current->argList->count());
- }
- }
- /*
-<FindMembers>"("{BN}*("void"{BN}*)?")" {
- lineCount();
- current->args = "()";
- BEGIN( FuncQual );
- }
- */
-
- /*- Function argument reading rules ---------------------------------------*/
-
-<ReadFuncArgType>[^ \/\r\t\n\)\(\"\'#]+ { *copyArgString+=yytext;
- fullArgString+=yytext;
- }
-<CopyArgString,CopyArgPHPString>[^\n\\\"\']+ { *copyArgString+=yytext;
- fullArgString+=yytext;
- }
-<CopyArgRound>[^\/\n\)\(\"\']+ {
- *copyArgString+=yytext;
- fullArgString+=yytext;
- }
-<ReadFuncArgType,ReadTempArgs>{BN}* {
- *copyArgString+=" ";
- fullArgString+=" ";
- lineCount();
- }
-<ReadFuncArgType,CopyArgRound,CopyArgSharp,ReadTempArgs>\" {
- *copyArgString+=*yytext;
- fullArgString+=*yytext;
- lastCopyArgStringContext = YY_START;
- BEGIN( CopyArgString );
- }
-<ReadFuncArgType,ReadTempArgs>"(" {
- *copyArgString+=*yytext;
- fullArgString+=*yytext;
- argRoundCount=0;
- lastCopyArgContext = YY_START;
- BEGIN( CopyArgRound );
- }
-<ReadFuncArgType>")" {
- *copyArgString+=*yytext;
- fullArgString+=*yytext;
- stringToArgumentList(fullArgString,current->argList);
- if (insideJS)
- {
- fixArgumentListForJavaScript(current->argList);
- }
- handleParametersCommentBlocks(current->argList);
-
- /* remember the current documentation block, since
- we could overwrite it with the documentation of
- a function argument, which we then have to correct later
- on
- */
- docBackup = current->doc;
- briefBackup = current->brief;
-
- BEGIN( currentArgumentContext );
- }
- /* a special comment */
-<ReadFuncArgType,ReadTempArgs>("/*"[*!]|"//"[/!])("<"?) {
- if (currentArgumentContext==DefineEnd)
- {
- // for defines we interpret a comment
- // as documentation for the define
- int i;for (i=yyleng-1;i>=0;i--)
- {
- unput(yytext[i]);
- }
- stringToArgumentList(fullArgString,current->argList);
- handleParametersCommentBlocks(current->argList);
- BEGIN( currentArgumentContext );
- }
- else // not a define
- {
- // for functions we interpret a comment
- // as documentation for the argument
- fullArgString+=yytext;
- lastCopyArgChar=0;
- lastCommentInArgContext=YY_START;
- if (yytext[1]=='/')
- BEGIN( CopyArgCommentLine );
- else
- BEGIN( CopyArgComment );
- }
- }
- /* a non-special comment */
-<ReadFuncArgType,ReadTempArgs>"/**/" { /* empty comment */ }
-<ReadFuncArgType,ReadTempArgs>"/*" {
- lastCContext = YY_START;
- BEGIN( SkipComment );
- }
-<ReadFuncArgType,ReadTempArgs>"//" {
- lastCContext = YY_START;
- BEGIN( SkipCxxComment );
- }
- /*
-<ReadFuncArgType,ReadTempArgs>"'#" { if (insidePHP)
- REJECT;
- *copyArgString+=yytext;
- fullArgString+=yytext;
- }
-<ReadFuncArgType,ReadTempArgs>"#" {
- if (!insidePHP)
- REJECT;
- lastCContext = YY_START;
- BEGIN( SkipCxxComment );
- }
- */
- /* `)' followed by a special comment */
-<ReadFuncArgType>")"{BN}*("/*"[*!]|"//"[/!])"<" {
- lineCount();
- if (currentArgumentContext==DefineEnd)
- {
- // for defines we interpret a comment
- // as documentation for the define
- int i;for (i=yyleng-1;i>0;i--)
- {
- unput(yytext[i]);
- }
- *copyArgString+=*yytext;
- fullArgString+=*yytext;
- stringToArgumentList(fullArgString,current->argList);
- handleParametersCommentBlocks(current->argList);
- BEGIN( currentArgumentContext );
- }
- else
- {
- // for functions we interpret a comment
- // as documentation for the last argument
- lastCopyArgChar=*yytext;
- QCString text=&yytext[1];
- text=text.stripWhiteSpace();
- lastCommentInArgContext=YY_START;
- fullArgString+=text;
- if (text.find("//")!=-1)
- BEGIN( CopyArgCommentLine );
- else
- BEGIN( CopyArgComment );
- }
- }
-<CopyArgComment>^{B}*"*"+/{BN}+
-<CopyArgComment>[^\n\\\@\*]+ { fullArgString+=yytext; }
-<CopyArgComment>"*/" { fullArgString+=yytext;
- if (lastCopyArgChar!=0)
- unput(lastCopyArgChar);
- BEGIN( lastCommentInArgContext );
- }
-<CopyArgCommentLine>\n { fullArgString+=yytext;
- yyLineNr++;
- if (lastCopyArgChar!=0)
- unput(lastCopyArgChar);
- BEGIN( lastCommentInArgContext );
- }
-<CopyArgCommentLine>{CMD}("verbatim"|"latexonly"|"htmlonly"|"xmlonly"|"manonly"|"dot"|"code")/[^a-z_A-Z0-9] { // verbatim command (which could contain nested comments!)
- docBlockName=&yytext[1];
- fullArgString+=yytext;
- BEGIN(CopyArgVerbatim);
- }
-<CopyArgCommentLine>{CMD}("f$"|"f["|"f{") {
- docBlockName=&yytext[1];
- if (docBlockName.at(1)=='[')
- {
- docBlockName.at(1)='}';
- }
- if (docBlockName.at(1)=='{')
- {
- docBlockName.at(1)='}';
- }
- fullArgString+=yytext;
- BEGIN(CopyArgVerbatim);
- }
-<CopyArgVerbatim>[\\@]("endverbatim"|"endlatexonly"|"endhtmlonly"|"endxmlonly"|"endmanonly"|"enddot"|"endcode"|"f$"|"f]"|"f}")/[^a-z_A-Z0-9] { // end of verbatim block
- fullArgString+=yytext;
- if (yytext[1]=='f') // end of formula
- {
- BEGIN(CopyArgCommentLine);
- }
- if (&yytext[4]==docBlockName)
- {
- BEGIN(CopyArgCommentLine);
- }
- }
-<CopyArgCommentLine>[^\\\@\n]+ { fullArgString+=yytext; }
-<CopyArgCommentLine>. { fullArgString+=*yytext; }
-<CopyArgComment,CopyArgVerbatim>\n { fullArgString+=*yytext; yyLineNr++; }
-<CopyArgComment,CopyArgVerbatim>. { fullArgString+=*yytext; }
-<CopyArgComment>{CMD}("brief"|"short"){B}+ {
- warn(yyFileName,yyLineNr,
- "warning: Ignoring %cbrief command inside argument documentation",*yytext
- );
- fullArgString+=' ';
- }
-<ReadTempArgs>"<" {
- *copyArgString+=*yytext;
- fullArgString+=*yytext;
- argSharpCount=1;
- BEGIN( CopyArgSharp );
- }
-<ReadTempArgs>">" {
- *copyArgString+=*yytext;
- fullArgString+=*yytext;
- //printf("end template list %s\n",copyArgString->data());
- stringToArgumentList(fullArgString,currentArgumentList);
- BEGIN( currentArgumentContext );
- }
-<CopyArgRound>"(" {
- argRoundCount++;
- *copyArgString+=*yytext;
- fullArgString+=*yytext;
- }
-<CopyArgRound>")" {
- *copyArgString+=*yytext;
- fullArgString+=*yytext;
- if (argRoundCount>0)
- argRoundCount--;
- else
- BEGIN( lastCopyArgContext );
- }
-<CopyArgSharp>"<" {
- argSharpCount++;
- //printf("argSharpCount++=%d copy\n",argSharpCount);
- *copyArgString+=*yytext;
- fullArgString+=*yytext;
- }
-<CopyArgSharp>">" {
- *copyArgString+=*yytext;
- fullArgString+=*yytext;
- argSharpCount--;
- if (argSharpCount>0)
- {
- //printf("argSharpCount--=%d copy\n",argSharpCount);
- }
- else
- {
- BEGIN( ReadTempArgs );
- //printf("end of argSharpCount\n");
- }
- }
-<CopyArgString,CopyArgPHPString>\\. {
- *copyArgString+=yytext;
- fullArgString+=yytext;
- }
-<CopyArgString>\" {
- *copyArgString+=*yytext;
- fullArgString+=*yytext;
- BEGIN( lastCopyArgStringContext );
- }
-<CopyArgPHPString>\' {
- *copyArgString+=*yytext;
- fullArgString+=*yytext;
- BEGIN( lastCopyArgStringContext );
- }
-<ReadFuncArgType,ReadTempArgs,CopyArgRound,CopyArgSharp>{CHARLIT} {
- if (insidePHP)
- {
- REJECT;
- }
- else
- {
- *copyArgString+=yytext;
- fullArgString+=yytext;
- }
- }
-<ReadFuncArgType,ReadTempArgs,CopyArgRound,CopyArgSharp>\' {
- *copyArgString+=yytext;
- fullArgString+=yytext;
- if (insidePHP)
- {
- lastCopyArgStringContext=YY_START;
- BEGIN(CopyArgPHPString);
- }
- }
-<ReadFuncArgType,ReadTempArgs,CopyArgString,CopyArgPHPString,CopyArgRound,CopyArgSharp>\n {
- yyLineNr++;
- *copyArgString+=*yytext;
- fullArgString+=*yytext;
- }
-<ReadFuncArgType,ReadTempArgs,CopyArgString,CopyArgPHPString,CopyArgRound,CopyArgSharp>. {
- *copyArgString+=*yytext;
- fullArgString+=*yytext;
- }
-
-
-
- /*------------------------------------------------------------------------*/
-
-
-<FuncRound>"(" { current->args += *yytext ;
- ++roundCount ;
- }
-<FuncRound>")" { current->args += *yytext ;
- if ( roundCount )
- --roundCount ;
- else
- BEGIN( FuncQual ) ;
- }
- /*
-<FuncQual>"#" { if (insidePHP)
- REJECT;
- lastCPPContext = YY_START;
- BEGIN(SkipCPP);
- }
- */
-<FuncQual>[{:;,] {
- if ( strcmp(yytext,";")==0 &&
- insidePHP &&
- !containsWord(current->type,"function") )
- {
- current->reset();
- initEntry();
- BEGIN( FindMembers );
- }
- else
- {
- unput(*yytext); BEGIN( Function );
- }
- }
-<FuncQual>{BN}*"abstract"{BN}* { // pure virtual member function
- lineCount() ;
- current->virt = Pure;
- current->args += " override ";
- }
-<FuncQual>{BN}*"override"{BN}* { // overridden virtual member function
- lineCount() ;
- current->spec |= Entry::Override;
- current->args += " override ";
- }
-<FuncQual>{BN}*"sealed"{BN}* { // sealed member function
- lineCount() ;
- current->spec |= Entry::Sealed;
- current->args += " sealed ";
- }
-<FuncQual>{BN}*"new"{BN}* { // new member function
- lineCount() ;
- current->spec |= Entry::New;
- current->args += " new ";
- }
-<FuncQual>{BN}*"const"{BN}* { // const member function
- lineCount() ;
- current->args += " const ";
- current->argList->constSpecifier=TRUE;
- }
-<FuncQual>{BN}*"volatile"{BN}* { // volatile member function
- lineCount() ;
- current->args += " volatile ";
- current->argList->volatileSpecifier=TRUE;
- }
-<FuncQual>{BN}*"="{BN}*"0"{BN}* { // pure virtual member function
- lineCount() ;
- current->args += " = 0";
- current->virt = Pure;
- current->argList->pureSpecifier=TRUE;
- }
-<FuncRound,FuncFunc>{BN}*","{BN}* {
- lineCount() ;
- current->args += ", " ;
- }
-<FuncQual,FuncRound,FuncFunc>{BN}+ {
- lineCount() ;
- current->args += ' ' ;
- }
-<Function,FuncQual,FuncRound,FuncFunc>"#" { if (insidePHP)
- REJECT;
- lastCPPContext = YY_START;
- BEGIN(SkipCPP);
- }
-<FuncQual>"=" {
- if (insideCli &&
- (current_root->section&Entry::COMPOUND_MASK)
- )
- {
- BEGIN(CliOverride);
- }
- else
- {
- // typically an initialized function pointer
- lastInitializerContext=YY_START;
- initBracketCount=0;
- BEGIN(ReadInitializer);
- }
- }
-<CliOverride>{ID} {
- }
-<CliOverride>"{" {
- unput(*yytext);
- BEGIN(FuncQual);
- }
-<CliOverride>\n {
- yyLineNr++;
- }
-<CliOverride>. {
- }
-<FuncPtrInit>[{;] {
- unput(*yytext);
- BEGIN(FuncQual);
- }
-<FuncPtrInit>\" {
- current->args += *yytext;
- pCopyQuotedString=&current->args;
- lastStringContext=FuncPtrInit;
- BEGIN(CopyString);
- }
-<FuncPtrInit>\' {
- current->args += *yytext;
- if (insidePHP)
- {
- pCopyQuotedString=&current->args;
- lastStringContext=FuncPtrInit;
- BEGIN(CopyPHPString);
- }
- }
-<FuncPtrInit>{CHARLIT} {
- if (insidePHP)
- {
- REJECT;
- }
- else
- {
- current->args += yytext;
- }
- }
-<FuncPtrInit>{ID} {
- current->args += yytext;
- }
-<FuncPtrInit>. {
- current->args += *yytext;
- }
-<FuncPtrInit>\n {
- current->args += *yytext;
- yyLineNr++;
- }
-<FuncQual>{ID} { // typically a K&R style C function
- if (insideCS && strcmp(yytext,"where")==0)
- {
- // type contraint for a method
- delete current->typeConstr;
- current->typeConstr = new ArgumentList;
- current->typeConstr->append(new Argument);
- lastCSConstraint = YY_START;
- BEGIN( CSConstraintName );
- }
- else if (checkForKnRstyleC())
- {
- //fprintf(stderr,"===> got a K&R style function\n");
- current->args = yytext;
- oldStyleArgType.resize(0);
- BEGIN(OldStyleArgs);
- }
- else
- {
- current->args += yytext;
- }
- }
-<OldStyleArgs>[,;] {
- QCString oldStyleArgPtr;
- QCString oldStyleArgName;
- splitKnRArg(oldStyleArgPtr,oldStyleArgName);
- QCString doc,brief;
- if (current->doc!=docBackup)
- {
- doc=current->doc.copy();
- current->doc=docBackup;
- }
- if (current->brief!=briefBackup)
- {
- brief=current->brief.copy();
- current->brief=briefBackup;
- }
- addKnRArgInfo(oldStyleArgType+oldStyleArgPtr,
- oldStyleArgName,brief,doc);
- current->args.resize(0);
- if (*yytext==';') oldStyleArgType.resize(0);
- }
-<OldStyleArgs>{ID} { current->args += yytext; }
-<OldStyleArgs>"{" {
- current->args = argListToString(current->argList);
- unput('{');
- BEGIN(FuncQual);
- }
-<OldStyleArgs>. { current->args += *yytext; }
-<FuncQual,FuncRound,FuncFunc>. { current->args += *yytext; }
-<FuncQual>{BN}*"try:" |
-<FuncQual>{BN}*"try"{BN}+ { /* try-function-block */
- insideTryBlock=TRUE;
- lineCount();
- if (yytext[yyleng-1]==':')
- {
- unput(':');
- BEGIN( Function );
- }
- }
-<FuncQual>{BN}*"throw"{BN}*"(" { // C++ style throw clause
- current->exception = " throw (" ;
- roundCount=0;
- lineCount() ;
- BEGIN( ExcpRound ) ;
- }
-<FuncQual>{BN}*"raises"{BN}*"(" {
- current->exception = " raises (" ;
- lineCount() ;
- roundCount=0;
- BEGIN( ExcpRound ) ;
- }
-<FuncQual>{BN}*"throws"{BN}+ { // Java style throw clause
- current->exception = " throws " ;
- lineCount() ;
- BEGIN( ExcpList );
- }
-<ExcpRound>"(" { current->exception += *yytext ;
- ++roundCount ;
- }
-<ExcpRound>")" { current->exception += *yytext ;
- if ( roundCount )
- --roundCount ;
- else
- BEGIN( FuncQual ) ;
- }
-<ExcpRound>. {
- current->exception += *yytext;
- }
-<ExcpList>"{" {
- unput('{'); BEGIN( FuncQual );
- }
-<ExcpList>";" {
- unput(';'); BEGIN( FuncQual );
- }
-<ExcpList>"\n" {
- current->exception += ' ';
- yyLineNr++;
- }
-<ExcpList>. {
- current->exception += *yytext;
- }
-<Function>"(" { current->type += current->name ;
- current->name = current->args ;
- current->args = yytext ;
- roundCount=0;
- BEGIN( FuncRound ) ;
- }
-<Function>":" {
- if (!insidePHP) BEGIN(SkipInits);
- }
-<Function>[;{,] {
- current->name=current->name.simplifyWhiteSpace();
- current->type=current->type.simplifyWhiteSpace();
- current->args=removeRedundantWhiteSpace(current->args);
- // was: current->args.simplifyWhiteSpace();
- current->fileName = yyFileName;
- current->startLine = yyLineNr;
- static QRegExp re("([^)]*[*&][^)]*)"); // (...*...)
- if (*yytext!=';' || (current_root->section&Entry::COMPOUND_MASK) )
- {
- int tempArg=current->name.find('<');
- QCString tempName;
- if (tempArg==-1) tempName=current->name; else tempName=current->name.left(tempArg);
- if (!current->type.isEmpty() &&
- (current->type.find(re,0)!=-1 || current->type.left(8)=="typedef "))
- {
- //printf("Scanner.l: found in class variable: `%s' `%s' `%s'\n", current->type.data(),current->name.data(),current->args.data());
- if (isTypedef && current->type.left(8)!="typedef ")
- {
- current->type.prepend("typedef ");
- }
- current->section = Entry::VARIABLE_SEC ;
- }
- else
- {
- //printf("Scanner.l: found in class function: `%s' `%s' `%s'\n", current->type.data(),current->name.data(),current->args.data());
- current->section = Entry::FUNCTION_SEC ;
- current->proto = *yytext==';';
- }
- }
- else // a global function prototype or function variable
- {
- //printf("Scanner.l: prototype? type=`%s' name=`%s' args=`%s'\n",current->type.data(),current->name.data(),current->args.data());
- if (!current->type.isEmpty() &&
- (current->type.find(re,0)!=-1 || current->type.left(8)=="typedef "))
- {
- if (isTypedef && current->type.left(8)!="typedef ")
- {
- current->type.prepend("typedef ");
- }
- //printf("Scanner.l: found function variable!\n");
- current->section = Entry::VARIABLE_SEC;
- }
- else
- {
- //printf("Scanner.l: found prototype\n");
- current->section = Entry::FUNCTION_SEC;
- current->proto = TRUE;
- }
- }
- //printf("Adding entry `%s'\n",current->name.data());
- if ( insidePHP)
- {
- if (findAndRemoveWord(current->type,"final"))
- {
- current->spec |= Entry::Final;
- }
- if (findAndRemoveWord(current->type,"abstract"))
- {
- current->spec |= Entry::Abstract;
- }
- }
- if ( insidePHP && !containsWord(current->type,"function"))
- {
- initEntry();
- if ( *yytext == '{' )
- {
- lastCurlyContext = FindMembers;
- curlyCount=0;
- BEGIN( SkipCurly );
- }
- else
- {
- BEGIN( FindMembers );
- }
- }
- else
- {
- if ( insidePHP)
- {
- findAndRemoveWord(current->type,"function");
- }
- previous = current;
- current_root->addSubEntry(current);
- current = new Entry ;
- initEntry();
- // Objective C 2.0: Required/Optional section
- if (previous->spec & (Entry::Optional | Entry::Required))
- {
- current->spec |= previous->spec & (Entry::Optional|Entry::Required);
- }
- lastCurlyContext = FindMembers;
- if ( *yytext == ',' )
- {
- current->type = previous->type;
- // we need to strip any trailing * and & (see bugs 623023 and 649103 for test cases)
- int i=current->type.length();
- while (i>0 && (current->type[i-1]=='*' || current->type[i-1]=='&' || current->type[i-1]==' ')) i--;
- current->type = current->type.left(i);
- }
- if ( *yytext == '{' )
- {
- if ( !insidePHP && (current_root->section & Entry::COMPOUND_MASK) )
- {
- previous->spec |= Entry::Inline;
- }
- //addToBody(yytext);
- curlyCount=0;
- BEGIN( SkipCurly ) ;
- }
- else
- {
- if (previous->section!=Entry::VARIABLE_SEC)
- previous->bodyLine=-1; // a function/member declaration
- BEGIN( FindMembers ) ;
- }
- }
- }
-<SkipInits>"{" {
- //addToBody(yytext);
- //lastCurlyContext = FindMembers;
- //curlyCount=0;
- //BEGIN( SkipCurly ) ;
- unput('{');
- BEGIN( Function );
- }
-<SkipCurly>"{" {
- //addToBody(yytext);
- ++curlyCount ;
- }
-<SkipCurly>"}" {
- //addToBody(yytext);
- if( curlyCount )
- {
- --curlyCount ;
- }
- else
- {
-#if 0
- if (!Config_getBool("HIDE_IN_BODY_DOCS") &&
- !current->doc.isEmpty())
- {
- // copy documentation found inside the body
- // to the previous item
- if (previous->inbodyLine==-1)
- {
- previous->inbodyLine = current->docLine;
- previous->inbodyFile = current->docFile;
- }
- //printf("*** inbodyDocs+=%s\n",current->doc.data());
- previous->inbodyDocs += current->doc;
- current->doc.resize(0);
- }
-#endif
- if (current->sli && previous) // copy special list items
- {
- QListIterator<ListItemInfo> li(*current->sli);
- ListItemInfo *lii;
- for (li.toFirst();(lii=li.current());++li)
- {
- previous->addSpecialListItem(lii->type,lii->itemId);
- }
- delete current->sli;
- current->sli = 0;
- }
- if (previous) previous->endBodyLine=yyLineNr;
- BEGIN( lastCurlyContext ) ;
- }
- }
-<SkipCurly>"}"{BN}*("/*!"|"/**"|"//!"|"///")"<" {
- lineCount();
- if ( curlyCount )
- {
- //addToBody(yytext);
- --curlyCount ;
- }
- else
- {
- current->endBodyLine=yyLineNr;
-
- tempEntry = current; // temporarily switch to the previous entry
- current = previous;
-
- docBlockContext = SkipCurlyEndDoc;
- docBlockInBody = FALSE;
- docBlockAutoBrief = ( yytext[yyleng-2]=='*' && Config_getBool("JAVADOC_AUTOBRIEF") ) ||
- ( yytext[yyleng-2]=='!' && Config_getBool("QT_AUTOBRIEF") );
- docBlock.resize(0);
- docBlockTerm = '}';
- if (yytext[yyleng-3]=='/')
- {
- startCommentBlock(TRUE);
- BEGIN( DocLine );
- }
- else
- {
- startCommentBlock(FALSE);
- BEGIN( DocBlock );
- }
- }
- }
-<SkipCurlyEndDoc>"}"{BN}*("/*!"|"/**"|"//!"|"///")"<" { // desc is followed by another one
- docBlockContext = SkipCurlyEndDoc;
- docBlockInBody = FALSE;
- docBlockAutoBrief = ( yytext[yyleng-2]=='*' && Config_getBool("JAVADOC_AUTOBRIEF") ) ||
- ( yytext[yyleng-2]=='!' && Config_getBool("QT_AUTOBRIEF") );
- docBlock.resize(0);
- docBlockTerm = '}';
- if (yytext[yyleng-3]=='/')
- {
- startCommentBlock(TRUE);
- BEGIN( DocLine );
- }
- else
- {
- startCommentBlock(FALSE);
- BEGIN( DocBlock );
- }
- }
-<SkipCurlyEndDoc>"}" {
- //addToBody("}");
- current = tempEntry;
- BEGIN( lastCurlyContext );
- }
-<SkipCurly>\" {
- //addToBody(yytext);
- lastStringContext=SkipCurly;
- BEGIN( SkipString );
- }
-<SkipCurly>^{B}*"#" {
- if (insidePHP)
- REJECT;
- //addToBody(yytext);
- BEGIN( SkipCurlyCpp );
- }
-<SkipCurly,SkipInits>\n {
- yyLineNr++;
- //addToBody(yytext);
- }
-<SkipCurly,SkipCurlyCpp>"<<<" {
- if (!insidePHP)
- {
- REJECT;
- }
- else
- {
- lastHereDocContext = YY_START;
- BEGIN(HereDoc);
- }
- }
-<SkipCurly,SkipCurlyCpp>[^\n#"'@\\/{}<]+ {
- //addToBody(yytext);
- }
-<SkipCurlyCpp>\n {
- //addToBody(yytext);
- yyLineNr++;
- lastCurlyContext = FindMembers;
- BEGIN( SkipCurly );
- }
-<SkipCurlyCpp>\\[\r]*"\n"[\r]* {
- //addToBody(yytext);
- yyLineNr++;
- }
-<SkipInits,SkipCurly,SkipCurlyCpp>"/*" {
- //addToBody(yytext);
- lastCContext = YY_START;
- BEGIN(SkipComment);
- }
-<SkipInits,SkipCurly,SkipCurlyCpp>"//" {
- //addToBody(yytext);
- lastCContext = YY_START;
- BEGIN(SkipCxxComment);
- }
-<SkipInits>\" {
- lastStringContext=YY_START;
- BEGIN( SkipString );
- }
-<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>"#" {
- if (!insidePHP)
- REJECT;
- //addToBody(yytext);
- lastCContext = YY_START;
- BEGIN(SkipCxxComment);
- }
-<SkipInits,SkipCurly,SkipCurlyCpp>@\" {
- if (!insideCS) REJECT;
- // C# verbatim string
- lastSkipVerbStringContext=YY_START;
- pSkipVerbString=&current->initializer;
- BEGIN(SkipVerbString);
- }
-<SkipInits,SkipCurly,SkipCurlyCpp>{CHARLIT} {
- if (insidePHP) REJECT;
- }
-<SkipInits,SkipCurly,SkipCurlyCpp>\' {
- if (insidePHP)
- {
- lastStringContext=YY_START;
- BEGIN(SkipPHPString);
- }
- }
-<SkipInits,SkipCurly,SkipCurlyCpp>. { }
-<SkipString,SkipPHPString>\\. { }
-<SkipString>\" {
- BEGIN( lastStringContext );
- }
-<SkipPHPString>\' {
- BEGIN( lastStringContext );
- }
-<SkipString,SkipPHPString>"/*"|"*/"|"//" { }
-<SkipString,SkipPHPString>\n {
- yyLineNr++;
- }
-<SkipString,SkipPHPString>. { }
-<CompoundName>":" { // for "class : public base {} var;" construct, see bug 608359
- unput(':');
- BEGIN(ClassVar);
- }
-<Bases,CompoundName>";" {
- current->section = Entry::EMPTY_SEC ;
- current->type.resize(0) ;
- current->name.resize(0) ;
- current->args.resize(0) ;
- current->argList->clear();
- BEGIN( FindMembers ) ;
- }
-<CompoundName>{SCOPENAME}{BN}*/"<" {
- sharpCount = 0;
- current->name = yytext ;
- if (current->spec & Entry::Protocol)
- {
- current->name+="-p";
- }
- lineCount();
- lastClassTemplSpecContext = ClassVar;
- if (insideObjC) // protocol list
- {
- BEGIN( ObjCProtocolList );
- }
- else if (insideCS) // C# generic class
- {
- current->name+="-g";
- BEGIN( CSGeneric );
- }
- else // C++ template specialization
- {
- roundCount=0;
- BEGIN( ClassTemplSpec );
- }
- }
-<CSGeneric>"<" {
- if (current->tArgLists==0)
- {
- current->tArgLists = new QList<ArgumentList>;
- current->tArgLists->setAutoDelete(TRUE);
- }
- ArgumentList *al = new ArgumentList;
- // check bug 612858 before enabling the next line
- //current->spec |= Entry::Template;
- current->tArgLists->append(al);
- currentArgumentList = al;
- templateStr="<";
- //current->name += "<";
- fullArgString = templateStr;
- //copyArgString = &current->name;
- copyArgString = &templateStr;
- currentArgumentContext = ClassVar;
- BEGIN( ReadTempArgs );
- }
-<ObjCProtocolList>"<" {
- insideProtocolList=TRUE;
- BEGIN( Bases );
- }
-<ClassTemplSpec>">"({BN}*"::"{BN}*{SCOPENAME})? {
- current->name += yytext;
- lineCount();
- if (--sharpCount<=0)
- {
- current->name = removeRedundantWhiteSpace(current->name);
- if (current->spec & Entry::Protocol)
- { // Objective-C protocol
- unput('{'); // fake start of body
- BEGIN( ClassVar );
- }
- else
- {
- BEGIN( lastClassTemplSpecContext );
- }
- }
- }
-<ClassTemplSpec>"<" {
- current->name += yytext;
- sharpCount++;
- }
-<ClassTemplSpec>. {
- current->name += yytext;
- }
-<CompoundName>{SCOPENAME}{BN}*";" { // forward declaration
- unput(';');
- current->reset();
- initEntry();
- if (isTypedef) // typedef of a class, put typedef keyword back
- {
- current->type.prepend("typedef");
- }
- BEGIN( FindMembers );
- }
-<CompoundName>{SCOPENAME}/"(" {
- current->name = yytext ;
- lineCount();
- if (current->spec & Entry::Protocol)
- {
- current->name += "-p";
- }
- BEGIN( ClassVar );
- }
-<CompoundName>{SCOPENAME}/{BN}*"," { // multiple forward declarations on one line
- // e.g. @protocol A,B;
- current->reset();
- initEntry();
- }
-<CompoundName>{SCOPENAME} {
- current->name = yytext ;
- lineCount();
- if (current->spec & Entry::Protocol)
- {
- current->name += "-p";
- }
- if ((current->spec & Entry::Protocol) ||
- current->section == Entry::OBJCIMPL_SEC)
- {
- unput('{'); // fake start of body
- }
- BEGIN( ClassVar );
- }
-<CompoundName>{CSSCOPENAME} { // C# style scope
- current->name = substitute(yytext,".","::");
- lineCount();
- BEGIN( ClassVar );
- }
-<ClassVar>{SCOPENAME}{BN}*/"(" {
- if (insideIDL && strncmp(yytext,"switch",6)==0 && !isId(yytext[6]))
- {
- // Corba IDL style union
- roundCount=0;
- BEGIN(SkipUnionSwitch);
- }
- else
- {
- addType(current);
- current->name = yytext;
- current->name = current->name.stripWhiteSpace();
- lineCount();
- BEGIN( FindMembers );
- }
- }
-<ClassVar>"," {
- if (isTypedef)
- {
- // multiple types in one typedef
- unput(',');
- current->type.prepend("typedef ");
- BEGIN(FindMembers);
- }
- else
- {
- // Multiple class forward declaration
- }
- }
-<ClassVar>("sealed"|"abstract")/{BN}*(":"|"{") {
- if (insideCli)
- {
- if (yytext[0]=='s') // sealed
- current->spec |= Entry::SealedClass;
- else // abstract
- current->spec |= Entry::AbstractClass;
- BEGIN( ClassVar );
- }
- else
- {
- REJECT;
- }
- }
-<ClassVar>{ID} {
- if (insideIDL && strcmp(yytext,"switch")==0)
- {
- // Corba IDL style union
- roundCount=0;
- BEGIN(SkipUnionSwitch);
- }
- else if ((insideJava || insidePHP || insideJS) && (strcmp(yytext,"implements")==0 || strcmp(yytext,"extends")==0))
- {
- current->type.resize(0);
- baseProt=Public;
- baseVirt=Normal;
- baseName.resize(0);
- BEGIN( BasesProt ) ;
- }
- else if (insideCS && strcmp(yytext,"where")==0) // C# type contraint
- {
- delete current->typeConstr;
- current->typeConstr = new ArgumentList;
- current->typeConstr->append(new Argument);
- lastCSConstraint = YY_START;
- BEGIN( CSConstraintName );
- }
- else if (insideCli && strcmp(yytext,"abstract"))
- {
- current->spec|=Entry::Abstract;
- }
- else if (insideCli && strcmp(yytext,"sealed"))
- {
- current->spec|=Entry::Sealed;
- }
- else
- {
- if (current->section == Entry::ENUM_SEC)
- { // found "enum a b" -> variable
- current->section = Entry::VARIABLE_SEC ;
- }
- current->type += ' ' ;
- current->type += current->name ;
- current->name = yytext ;
-
- if (nameIsOperator(current->name))
- {
- BEGIN( Operator );
- }
- }
- }
-<ClassVar>[(\[] {
- if (insideObjC && *yytext=='(') // class category
- {
- current->name+='(';
- if (current->section!=Entry::OBJCIMPL_SEC)
- {
- current->spec|=Entry::Category;
- }
- BEGIN( ClassCategory );
- }
- else
- {
- // probably a function anyway
- unput(*yytext);
- BEGIN( FindMembers );
- }
- }
-<CSConstraintType,CSConstraintName>"/**/" { /* empty comment */ }
-<CSConstraintType,CSConstraintName>("/*"[*!]|"//"[/!])("<"?) { // special comment
- fullArgString.resize(0);
- lastCopyArgChar='#'; // end marker
- lastCommentInArgContext=YY_START;
- if (yytext[1]=='/')
- BEGIN( CopyArgCommentLine );
- else
- BEGIN( CopyArgComment );
- }
-<CSConstraintType,CSConstraintName>"#" { // artificially inserted token to signal end of comment block
- current->typeConstr->last()->docs = fullArgString;
- }
-<CSConstraintType>"{" { // end of type constraint reached
- // parse documentation of the constraints
- handleParametersCommentBlocks(current->typeConstr);
- unput('{');
- BEGIN( lastCSConstraint );
- }
-<CSConstraintType,CSConstraintName>";" {
- handleParametersCommentBlocks(current->typeConstr);
- unput(';');
- BEGIN( lastCSConstraint );
- }
-<CSConstraintName>":" {
- BEGIN( CSConstraintType );
- }
-<CSConstraintName>{ID} {
- // parameter name
- current->typeConstr->last()->name=yytext;
- }
-<CSConstraintType>"where" { // another constraint for a different param
- current->typeConstr->append(new Argument);
- BEGIN( CSConstraintName );
- }
-<CSConstraintType>({ID}".")*{ID}("<"{ID}">")?("()")? {
- if (current->typeConstr->last()->type.isEmpty())
- // first type constraint for this parameter
- {
- current->typeConstr->last()->type=yytext;
- }
- else // new type constraint for same parameter
- {
- QCString name = current->typeConstr->last()->name;
- current->typeConstr->append(new Argument);
- current->typeConstr->last()->name=name;
- current->typeConstr->last()->type=yytext;
- }
- }
-<CSConstraintName,CSConstraintType>\n {
- yyLineNr++;
- }
-<CSConstraintName,CSConstraintType>. {
- }
-<ClassCategory>{ID} {
- current->name+=yytext;
- }
-<ClassCategory>")" {
- current->name+=')';
- if ((current->section & Entry::Protocol) ||
- current->section == Entry::OBJCIMPL_SEC)
- {
- unput('{'); // fake start of body
- }
- else // category has no variables so push back an empty body
- {
- unput('}');
- unput('{');
- }
- BEGIN( ClassVar );
- }
-<ClassVar>":" {
- if (current->section == Entry::VARIABLE_SEC) // enum a b:2, see bug 313527
- {
- BEGIN(BitFields);
- current->bitfields+=":";
- }
- else
- {
- current->type.resize(0);
- if ((current->spec & Entry::Interface) ||
- (current->spec & Entry::Struct) ||
- (current->spec & Entry::Ref) ||
- (current->spec & Entry::Value) ||
- insidePHP || insideCS || insideD || insideObjC
- )
- baseProt=Public;
- else
- baseProt=Private;
- baseVirt=Normal;
- baseName.resize(0);
- BEGIN( BasesProt ) ;
- }
- }
-<ClassVar>[;=*&] {
- unput(*yytext);
- if (isTypedef) // typedef of a class, put typedef keyword back
- {
- current->type.prepend("typedef");
- }
- if ((yytext[0]=='*' || yytext[0]=='&') &&
- current->section == Entry::ENUM_SEC)
- { // found "enum a *b" -> variable
- current->section = Entry::VARIABLE_SEC ;
- }
- BEGIN( FindMembers );
- }
-<Bases,ClassVar>"///"/[^/] {
- if (!insideObjC)
- {
- REJECT;
- }
- else
- {
- lineCount();
- current->program+=yytext;
- current->fileName = yyFileName ;
- current->startLine = yyLineNr ;
- curlyCount=0;
- BEGIN( ReadBodyIntf );
- }
- }
-<Bases,ClassVar>("//"{B}*)?"/**"/[^/*] |
-<Bases,ClassVar>("//"{B}*)?"/*!" |
-<Bases,ClassVar>"//!" |
-<Bases,ClassVar>[\-+]{BN}* {
- if (!insideObjC)
- {
- REJECT;
- }
- else
- {
- lineCount();
- current->program+=yytext;
- current->fileName = yyFileName ;
- current->startLine = yyLineNr ;
- curlyCount=0;
- BEGIN( ReadBodyIntf );
- }
- }
-<CompoundName,ClassVar>{B}*"{"{B}* {
- current->fileName = yyFileName ;
- current->startLine = yyLineNr ;
- current->name = removeRedundantWhiteSpace(current->name);
- if (current->name.isEmpty() && !isTypedef) // anonymous compound
- {
- if (current->section==Entry::NAMESPACE_SEC) // allow reopening of anonymous namespaces
- {
- if (Config_getBool("EXTRACT_ANON_NSPACES")) // use visible name
- {
- current->name="anonymous_namespace{"+stripPath(current->fileName)+"}";
- }
- else // use invisible name
- {
- current->name.sprintf("@%d",anonNSCount);
- }
- }
- else
- {
- current->name.sprintf("@%d",anonCount++);
- }
- }
- curlyCount=0;
- if (current_root && // not a nested struct inside an @interface section
- !(current_root->spec & Entry::Interface) &&
- ((current->spec & (Entry::Interface | Entry::Protocol | Entry::Category) ||
- current->section==Entry::OBJCIMPL_SEC)
- ) &&
- insideObjC
- )
- { // ObjC body that ends with @end
- BEGIN( ReadBodyIntf );
- }
- else if (current->section==Entry::NAMESPACE_SEC)
- { // namespace body
- BEGIN( ReadNSBody );
- }
- else
- { // class body
- BEGIN( ReadBody ) ;
- }
- }
-<BasesProt>"virtual"{BN}+ { lineCount(); baseVirt = Virtual; }
-<BasesProt>"public"{BN}+ { lineCount(); baseProt = Public; }
-<BasesProt>"protected"{BN}+ { lineCount(); baseProt = Protected; }
-<BasesProt>"internal"{BN}+ { lineCount(); baseProt = Package; }
-<BasesProt>"private"{BN}+ { lineCount(); baseProt = Private; }
-<BasesProt>{BN} { lineCount(); }
-<BasesProt>. { unput(*yytext); BEGIN(Bases); }
-<Bases>("\\")?({ID}"\\")*{ID} { // PHP namespace token, not sure if interspacing is allowed but it gives problems (see bug 640847)
- if (!insidePHP)
- {
- REJECT;
- }
- else // PHP base class of the form \Ns\Cl or Ns\Cl
- {
- lineCount();
- QCString bn=yytext;
- bn = substitute(bn,"\\","::");
- baseName += bn;
- current->args += ' ';
- current->args += yytext;
- }
- }
-<Bases>("::")?{BN}*({ID}{BN}*"::"{BN}*)*{ID} {
- lineCount();
- QCString baseScope = yytext;
- if (insideCS && baseScope.stripWhiteSpace()=="where")
- {
- // type contraint for a class
- delete current->typeConstr;
- current->typeConstr = new ArgumentList;
- current->typeConstr->append(new Argument);
- lastCSConstraint = YY_START;
- BEGIN( CSConstraintName );
- }
- else
- {
- baseName+=yytext;
- current->args += ' ';
- current->args += yytext;
- }
- }
-<Bases>{BN}*{ID}("."{ID})* { // Java style class
- QCString name = substitute(yytext,".","::");
- baseName += name;
- current->args += ' ';
- current->args += name;
- }
-<ClassVar,Bases>\n/{BN}*[^{, \t\n] {
- if (!insideObjC)
- {
- REJECT;
- }
- else
- {
- yyLineNr++;
- unput('{');
- }
- }
-<ClassVar,Bases>"@end" { // empty ObjC interface
- unput('d'); // insert fake body: {}@end
- unput('n');
- unput('e');
- unput('@');
- unput('}');
- unput('{');
- }
-<ClassVar>"<" { current->name += *yytext;
- sharpCount=1;
- roundCount=0;
- lastSkipSharpContext = YY_START;
- specName = &current->name;
- BEGIN ( Specialization );
- }
-<Bases>"<" {
- sharpCount=1;
- roundCount=0;
- lastSkipSharpContext = YY_START;
- if (insideObjC) // start of protocol list
- {
- unput(',');
- }
- else // template specialization
- {
- //if (insideCS) // generic
- //{
- // baseName+="-g";
- //}
- templateStr = yytext;
- specName = &templateStr;
- BEGIN ( Specialization );
- }
- }
-<Specialization>"<" { *specName += *yytext;
- if (roundCount==0) sharpCount++;
- }
-<Specialization>">" {
- *specName += *yytext;
- if (roundCount==0 && --sharpCount<=0)
- {
- if (1 /*!insideCS*/)
- {
- baseName+=*specName;
- }
- else
- {
- if (current->tArgLists==0)
- {
- current->tArgLists = new QList<ArgumentList>;
- current->tArgLists->setAutoDelete(TRUE);
- }
- ArgumentList *al = new ArgumentList;
- current->tArgLists->append(al);
- stringToArgumentList(*specName,al);
- }
- BEGIN(lastSkipSharpContext);
- }
- }
-<Specialization>{BN}+ { lineCount(); *specName +=' '; }
-<Specialization>"<<" { *specName += yytext; }
-<Specialization>">>"/{B}*"::" { // M$ C++ extension to allow >> to close a template...
- unput('>');
- unput(' ');
- unput('>');
- }
-<Specialization>">>" {
- if (insideCS) // for C# >> ends a nested template
- {
- REJECT;
- }
- else // for C++ >> is a bitshift
- // operator and > > would end
- // a nested template.
- // We require the bitshift to be enclosed in braces.
- // See http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2005/n1757.html
- {
- if (roundCount>0)
- {
- *specName += yytext;
- }
- else
- {
- unput('>');
- unput(' ');
- unput('>');
- }
- }
- }
-<Specialization>"typename"{BN}+ { lineCount(); }
-<Specialization>"(" { *specName += *yytext; roundCount++; }
-<Specialization>")" { *specName += *yytext; roundCount--; }
-<Specialization>. {
- *specName += *yytext;
- }
-<SkipSharp>"<" { ++sharpCount; }
-<SkipSharp>">" { if (--sharpCount<=0)
- BEGIN ( lastSkipSharpContext );
- }
-<SkipRound>"(" { ++roundCount; }
-<SkipRound>")" { if (--roundCount<=0)
- BEGIN ( lastSkipRoundContext );
- }
-<SkipRound>\" {
- lastStringContext=SkipRound;
- BEGIN(SkipString);
- }
-<Bases>","|(">"({BN}*"{")?)|({BN}+"implements"{BN}*) { lineCount();
- if (insideProtocolList)
- {
- baseName+="-p";
- }
- else
- {
- current->args += ',' ;
- }
- current->name = removeRedundantWhiteSpace(current->name);
- if (!baseName.isEmpty())
- {
- current->extends->append(
- new BaseInfo(baseName,baseProt,baseVirt)
- );
- }
- if ((current->spec & (Entry::Interface|Entry::Struct)) ||
- insideJava || insidePHP || insideCS ||
- insideD || insideObjC)
- {
- baseProt=Public;
- }
- else
- {
- baseProt=Private;
- }
- baseVirt=Normal;
- baseName.resize(0);
- if (*yytext=='>')
- { // end of a ObjC protocol list
- insideProtocolList=FALSE;
- if (yyleng==1)
- {
- unput('{'); // dummy start body
- }
- else
- {
- yyless(1);
- }
- }
- else
- {
- if (*yytext==',' && insideObjC) // Begin of protocol list
- {
- insideProtocolList=TRUE;
- }
- BEGIN(BasesProt);
- }
- }
-<Bases>{B}*"{"{B}* { current->fileName = yyFileName ;
- current->startLine = yyLineNr ;
- current->name = removeRedundantWhiteSpace(current->name);
- if (!baseName.isEmpty())
- current->extends->append(
- new BaseInfo(baseName,baseProt,baseVirt)
- );
- curlyCount=0;
- if (insideObjC)
- {
- BEGIN( ReadBodyIntf );
- }
- else
- {
- BEGIN( ReadBody ) ;
- }
- }
-<SkipUnionSwitch>{B}*"(" {
- roundCount++;
- }
-<SkipUnionSwitch>")" {
- if (--roundCount==0)
- {
- BEGIN(ClassVar);
- }
- }
-<SkipUnionSwitch>\n { yyLineNr++; }
-<SkipUnionSwitch>.
-<Comment>{BN}+ { current->program += yytext ;
- lineCount() ;
- }
-<Comment>"/*" { current->program += yytext ; }
-<Comment>"//" { current->program += yytext ; }
-<Comment>{CMD}("code"|"verbatim") {
- insideCode=TRUE;
- current->program += yytext ;
- }
-<Comment>{CMD}("endcode"|"endverbatim") {
- insideCode=FALSE;
- current->program += yytext ;
- }
-<Comment>[^ \.\t\r\n\/\*]+ { current->program += yytext ; }
-<Comment>"*/" { current->program += yytext ;
- if (!insideCode) BEGIN( lastContext ) ;
- }
-<Comment>. { current->program += *yytext ; }
-
-<FindMembers,FindFields,MemberSpec,FuncQual,SkipCurly,Operator,ClassVar,SkipInits,Bases,OldStyleArgs>("//"{B}*)?"/*!" {
- //printf("Start doc block at %d\n",yyLineNr);
- removeSlashes=(yytext[1]=='/');
- tmpDocType=-1;
- if (!current->doc.isEmpty())
- {
- current->doc+="\n\n";
- }
- else
- {
- current->docLine = yyLineNr;
- current->docFile = yyFileName;
- }
-
- lastDocContext = YY_START;
- if (current_root->section & Entry::SCOPE_MASK)
- {
- current->inside = current_root->name+"::";
- }
- docBlockContext = YY_START;
- docBlockInBody = YY_START==SkipCurly;
- docBlockAutoBrief = Config_getBool("QT_AUTOBRIEF");
- docBlock.resize(0);
- if (docBlockAutoBrief)
- {
- current->briefLine = yyLineNr;
- current->briefFile = yyFileName;
- }
- startCommentBlock(FALSE);
- BEGIN( DocBlock );
- }
-<FindMembers,FindFields,MemberSpec,FuncQual,SkipCurly,Operator,ClassVar,SkipInits,Bases,OldStyleArgs>("//"{B}*)?"/**"/[^/*] {
- removeSlashes=(yytext[1]=='/');
- lastDocContext = YY_START;
-
- //printf("Found comment block at %s:%d\n",yyFileName,yyLineNr);
- if (current_root->section & Entry::SCOPE_MASK)
- {
- current->inside = current_root->name+"::";
- }
- current->docLine = yyLineNr;
- current->docFile = yyFileName;
- docBlockContext = YY_START;
- docBlockInBody = YY_START==SkipCurly;
- docBlockAutoBrief = Config_getBool("JAVADOC_AUTOBRIEF");
- docBlock.resize(0);
- if (docBlockAutoBrief)
- {
- current->briefLine = yyLineNr;
- current->briefFile = yyFileName;
- }
- startCommentBlock(FALSE);
- BEGIN( DocBlock );
- }
-<FindMembers,FindFields,MemberSpec,SkipCurly,FuncQual,Operator,ClassVar,Bases,OldStyleArgs>"//!" {
- tmpDocType=-1;
- lastDocContext = YY_START;
- if (current_root->section & Entry::SCOPE_MASK)
- {
- current->inside = current_root->name+"::";
- }
- docBlockContext = YY_START;
- docBlockInBody = YY_START==SkipCurly;
- docBlockAutoBrief = FALSE;
- docBlock.resize(0);
- startCommentBlock(current->brief.isEmpty());
- BEGIN( DocLine );
- }
-<FindMembers,FindFields,MemberSpec,SkipCurly,FuncQual,Operator,ClassVar,Bases,OldStyleArgs>"///"/[^/] {
- tmpDocType=-1;
- lastDocContext = YY_START;
- if (current_root->section & Entry::SCOPE_MASK)
- {
- current->inside = current_root->name+"::";
- }
- docBlockContext = YY_START;
- docBlockInBody = YY_START==SkipCurly;
- docBlockAutoBrief = FALSE;
- docBlock.resize(0);
- startCommentBlock(current->brief.isEmpty());
- BEGIN( DocLine );
- }
-<FindMembers>"extern"{BN}*"\"C"("++")?"\""{BN}*("{")? {
- lineCount();
- externC=TRUE;
- }
-<FindMembers>"{" {
- if (externC)
- {
- externC=FALSE;
- }
- else if (insideCS &&
- !current->name.isEmpty() &&
- !current->type.isEmpty())
- {
- if (containsWord(current->type,"event")) // event
- {
- current->mtype = mtype = Event;
- }
- else // property
- {
- current->mtype = mtype = Property;
- }
- current->bodyLine = yyLineNr;
- curlyCount=0;
- BEGIN( CSAccessorDecl );
- }
- else
- {
- if ((insideJava || insideCS || insideD) &&
- current->name.isEmpty()
- )
- {
- // static Java initializer
- needsSemi = FALSE;
- if (current->stat)
- {
- current->name="[static initializer]";
- current->type.resize(0);
- }
- else
- {
- current->name="[instance initializer]";
- }
- unput(*yytext);
- BEGIN( Function );
- }
- else
- {
- needsSemi = TRUE;
- current->type.resize(0);
- current->name.resize(0);
- current->args.resize(0);
- current->argList->clear();
- curlyCount=0;
- BEGIN( SkipCurlyBlock );
- }
- }
- }
-<CSAccessorDecl>"{" { curlyCount++; }
-<CSAccessorDecl>"}" {
- if (curlyCount)
- {
- curlyCount--;
- }
- else
- {
- mtype = Method;
- unput(';');
- BEGIN(FindMembers);
- }
- }
-<CSAccessorDecl>"set" { if (curlyCount==0) current->spec |= Entry::Settable; }
-<CSAccessorDecl>"get" { if (curlyCount==0) current->spec |= Entry::Gettable; }
-<CSAccessorDecl>"add" { if (curlyCount==0) current->spec |= Entry::Addable; }
-<CSAccessorDecl>"remove" { if (curlyCount==0) current->spec |= Entry::Removable; }
-<CSAccessorDecl>"raise" { if (curlyCount==0) current->spec |= Entry::Raisable; }
-<CSAccessorDecl>. {}
-<CSAccessorDecl>\n { yyLineNr++; }
-
-
-
-
- /**********************************************************************************/
- /******************** Documentation block related rules ***************************/
- /**********************************************************************************/
-
- /* ---- Single line comments ------ */
-<DocLine>[^\n]*"\n"[ \t]*"//"[/!] { // continuation of multiline C++-style comment
- docBlock+=yytext;
- docBlock.resize(docBlock.length() - 3);
- yyLineNr++;
- }
-<DocLine>[^\n]*/"\n" { // whole line
- docBlock+=yytext;
- handleCommentBlock(docBlock.data(),current->brief.isEmpty());
- BEGIN( docBlockContext );
- }
-
- /* ---- Comments blocks ------ */
-
-<DocBlock>"*"*"*/" { // end of comment block
- handleCommentBlock(docBlock.data(),FALSE);
- BEGIN(docBlockContext);
- }
-<DocBlock>^{B}*("//")?{B}*"*"+/[^//a-z_A-Z0-9*] { // start of a comment line
- }
-<DocBlock>^{B}*("//"){B}* { // strip embedded C++ comments if at the start of a line
- }
-<DocBlock>"//" { // slashes in the middle of a comment block
- docBlock+=yytext;
- }
-<DocBlock>"/*" { // start of a new comment in the
- // middle of a comment block
- docBlock+=yytext;
- }
-<DocBlock>("@@"|"\\\\"){ID}/[^a-z_A-Z0-9] { // escaped command
- docBlock+=yytext;
- }
-<DocBlock>{CMD}("f$"|"f["|"f{") {
- docBlock+=yytext;
- docBlockName=&yytext[1];
- if (docBlockName.at(1)=='{')
- {
- docBlockName.at(1)='}';
- }
- BEGIN(DocCopyBlock);
- }
-<DocBlock>"<"{PRE}">" {
- docBlock+=yytext;
- docBlockName="<pre>";
- BEGIN(DocCopyBlock);
- }
-<DocBlock>{CMD}("verbatim"|"latexonly"|"htmlonly"|"xmlonly"|"manonly"|"dot"|"code")/[^a-z_A-Z0-9] { // verbatim command (which could contain nested comments!)
- docBlock+=yytext;
- docBlockName=&yytext[1];
- BEGIN(DocCopyBlock);
- }
-<DocBlock>{B}*"<code>" {
- if (insideCS)
- {
- docBlock+=yytext;
- docBlockName="<code>";
- BEGIN(DocCopyBlock);
- }
- else
- {
- REJECT;
- }
- }
-<DocBlock>[^@*\/\\\n]+ { // any character that isn't special
- docBlock+=yytext;
- }
-<DocBlock>\n { // newline
- yyLineNr++;
- docBlock+=*yytext;
- }
-<DocBlock>. { // command block
- docBlock+=*yytext;
- }
-
- /* ---- Copy verbatim sections ------ */
-
-<DocCopyBlock>"</"{PRE}">" { // end of a <pre> block
- docBlock+=yytext;
- if (docBlockName=="<pre>")
- {
- BEGIN(DocBlock);
- }
- }
-<DocCopyBlock>"</"{CODE}">" { // end of a <code> block
- docBlock+=yytext;
- if (docBlockName=="<code>")
- {
- BEGIN(DocBlock);
- }
- }
-<DocCopyBlock>[\\@]("f$"|"f]"|"f}") {
- docBlock+=yytext;
- BEGIN(DocBlock);
- }
-<DocCopyBlock>[\\@]("endverbatim"|"endlatexonly"|"endhtmlonly"|"endxmlonly"|"endmanonly"|"enddot"|"endcode")/[^a-z_A-Z0-9] { // end of verbatim block
- docBlock+=yytext;
- if (&yytext[4]==docBlockName)
- {
- BEGIN(DocBlock);
- }
- }
-<DocCopyBlock>^{B}*"*"+/{BN}+ { // start of a comment line
- if (docBlockName=="verbatim")
- {
- REJECT;
- }
- }
-<DocCopyBlock>[^\<@/*\]\$\\\n]+ { // any character that is not special
- docBlock+=yytext;
- }
-<DocCopyBlock>"/*"|"*/"|"//" {
- docBlock+=yytext;
- }
-<DocCopyBlock>\n { // newline
- docBlock+=*yytext;
- yyLineNr++;
- }
-<DocCopyBlock>. { // any other character
- docBlock+=*yytext;
- }
-<DocCopyBlock><<EOF>> {
- warn(yyFileName,yyLineNr,
- "warning: reached end of file while inside a %s block!\n"
- "The command that should end the block seems to be missing!\n",
- docBlockName.data());
- yyterminate();
- }
-
-
- /* ------------- Prototype parser -------------- */
-
-<Prototype>"operator"{B}*"("{B}*")" {
- current->name+=yytext;
- }
-<Prototype>"(" {
- current->args+=*yytext;
- currentArgumentContext = PrototypeQual;
- fullArgString = current->args.copy();
- copyArgString = &current->args;
- BEGIN( ReadFuncArgType ) ;
- }
-<Prototype>"("({ID}"::")*({B}*[&*])+ {
- current->type+=current->name+yytext;
- current->name.resize(0);
- BEGIN( PrototypePtr );
- }
-<PrototypePtr>{SCOPENAME} {
- current->name+=yytext;
- }
-<PrototypePtr>"(" {
- current->args+=*yytext;
- currentArgumentContext = PrototypeQual;
- fullArgString = current->args.copy();
- copyArgString = &current->args;
- BEGIN( ReadFuncArgType ) ;
- }
-<PrototypePtr>")" {
- current->type+=')';
- BEGIN( Prototype );
- }
-<PrototypePtr>. {
- current->name+=yytext;
- }
-<PrototypeQual>"{" {
- BEGIN( PrototypeSkipLine);
- }
-<PrototypeQual>{B}*"const"{B}* {
- current->args += " const ";
- current->argList->constSpecifier=TRUE;
- }
-<PrototypeQual>{B}*"volatile"{B}* {
- current->args += " volatile ";
- current->argList->volatileSpecifier=TRUE;
- }
-<PrototypeQual>{B}*"="{B}*"0"{B}* {
- current->args += " = 0";
- current->virt = Pure;
- current->argList->pureSpecifier=TRUE;
- }
-<PrototypeQual>"throw"{B}*"(" {
- current->exception = "throw(";
- BEGIN(PrototypeExc);
- }
-<PrototypeExc>")" {
- current->exception += ')';
- BEGIN(PrototypeQual);
- }
-<PrototypeExc>. {
- current->exception += *yytext;
- }
-<PrototypeQual>. {
- current->args += *yytext;
- }
-<Prototype>. {
- current->name += *yytext;
- }
-<PrototypeSkipLine>. {
- }
-
-
- /* ------------ Generic rules -------------- */
-
-
-<SkipCxxComment>.*"\\\n" { // line continuation
- if (insideCS)
- {
- REJECT;
- }
- else
- {
- yyLineNr++;
- }
- }
-<SkipCxxComment>.*/\n {
- BEGIN( lastCContext ) ;
- }
-<SkipComment>[^\*\n]+
-<*>\n { yyLineNr++ ; }
-<*>\" {
- if (insideIDL && insideCppQuote)
- {
- BEGIN(EndCppQuote);
- }
- }
-<*>"#" {
- if (!insidePHP)
- REJECT;
- lastCContext = YY_START ;
- BEGIN( SkipCxxComment ) ;
- }
-<*>\' {
- if (insidePHP)
- {
- lastStringContext=YY_START;
- BEGIN(SkipPHPString);
- }
- }
-<*>\" {
- if (insidePHP)
- {
- lastStringContext=YY_START;
- BEGIN(SkipString);
- }
- }
-<*>.
-<SkipComment>"//"|"/*"
-<*>"/*" { lastCContext = YY_START ;
- BEGIN( SkipComment ) ;
- }
-<SkipComment>{B}*"*/" { BEGIN( lastCContext ) ; }
-<*>"//" {
- lastCContext = YY_START ;
- BEGIN( SkipCxxComment ) ;
- }
-%%
-
-//----------------------------------------------------------------------------
-
-static void startCommentBlock(bool brief)
-{
- if (brief)
- {
- current->briefFile = yyFileName;
- current->briefLine = yyLineNr;
- }
- else
- {
- current->docFile = yyFileName;
- current->docLine = yyLineNr;
- }
-}
-
-//----------------------------------------------------------------------------
-
-static void newEntry()
-{
- current_root->addSubEntry(current);
- previous = current;
- current = new Entry ;
- initEntry();
-}
-
-static void handleCommentBlock(const QCString &doc,bool brief)
-{
- static bool hideInBodyDocs = Config_getBool("HIDE_IN_BODY_DOCS");
- int position=0;
- bool needsEntry=FALSE;
- if (docBlockInBody && hideInBodyDocs) return;
- //printf("parseCommentBlock [%s] brief=%d\n",doc.data(),brief);
- int lineNr = brief ? current->briefLine : current->docLine; // line of block start
-
- // fill in inbodyFile && inbodyLine the first time, see bug 633891
- Entry *docEntry = docBlockInBody && previous ? previous : current;
- if (docBlockInBody && docEntry && docEntry->inbodyLine==-1)
- {
- docEntry->inbodyFile = yyFileName;
- docEntry->inbodyLine = lineNr;
- }
-
- while (parseCommentBlock(
- g_thisParser,
- docBlockInBody && previous ? previous : current,
- doc, // text
- yyFileName, // file
- lineNr, // line of block start
- docBlockInBody ? FALSE : brief, // isBrief
- docBlockInBody ? FALSE : docBlockAutoBrief, // isJavaDocStyle
- docBlockInBody, // isInBody
- protection,
- position,
- needsEntry
- )
- )
- {
- //printf("parseCommentBlock position=%d [%s]\n",position,doc.data()+position);
- if (needsEntry)
- {
- QCString docFile = current->docFile;
- newEntry();
- current->docFile = docFile;
- current->docLine = lineNr;
- }
- }
- if (needsEntry)
- {
- newEntry();
- }
-
- if (docBlockTerm)
- {
- unput(docBlockTerm);
- docBlockTerm=0;
- }
-}
-
-static void handleParametersCommentBlocks(ArgumentList *al)
-{
- //printf(">>>>>>> handleParametersCommentBlocks()\n");
- ArgumentListIterator ali(*al);
- Argument *a;
- for (ali.toFirst();(a=ali.current());++ali)
- {
- //printf(" Param %s docs=%s\n",a->name.data(),a->docs.data());
- if (!a->docs.isEmpty())
- {
- int position=0;
- bool needsEntry;
-
- // save context
- QCString orgDoc = current->doc;
- QCString orgBrief = current->brief;
- int orgDocLine = current->docLine;
- int orgBriefLine = current->briefLine;
-
- current->doc.resize(0);
- current->brief.resize(0);
-
- //printf("handleParametersCommentBlock [%s]\n",doc.data());
- while (parseCommentBlock(
- g_thisParser,
- current,
- a->docs, // text
- yyFileName, // file
- current->docLine, // line of block start
- FALSE,
- FALSE,
- FALSE,
- protection,
- position,
- needsEntry
- )
- )
- {
- //printf("handleParametersCommentBlock position=%d [%s]\n",position,doc.data()+position);
- if (needsEntry) newEntry();
- }
- if (needsEntry)
- {
- newEntry();
- }
- a->docs = current->doc;
-
- // restore context
- current->doc = orgDoc;
- current->brief = orgBrief;
- current->docLine = orgDocLine;
- current->briefLine = orgBriefLine;
- }
- }
-}
-
-
-//----------------------------------------------------------------------------
-
-static void parseCompounds(Entry *rt)
-{
- //printf("parseCompounds(%s)\n",rt->name.data());
- g_inputFromFile = FALSE;
- EntryListIterator eli(*rt->children());
- Entry *ce;
- for (;(ce=eli.current());++eli)
- {
- if (!ce->program.isEmpty())
- {
- //printf("-- %s ---------\n%s\n---------------\n",
- // ce->name.data(),ce->program.data());
- // init scanner state
- padCount=0;
- //depthIf = 0;
- inputString = ce->program;
- inputPosition = 0;
- scanYYrestart( scanYYin ) ;
- if (ce->section==Entry::ENUM_SEC || (ce->spec&Entry::Enum))
- BEGIN( FindFields ) ;
- else
- BEGIN( FindMembers ) ;
- current_root = ce ;
- yyFileName = ce->fileName;
- //setContext();
- yyLineNr = ce->startLine ;
- insideObjC = ce->lang==SrcLangExt_ObjC;
- //printf("---> Inner block starts at line %d objC=%d\n",yyLineNr,insideObjC);
- //current->reset();
- if (current) delete current;
- current = new Entry;
- initEntry();
- gstat = FALSE;
- int ni=ce->name.findRev("::"); if (ni==-1) ni=0; else ni+=2;
- // set default protection based on the compound type
- if( ce->section==Entry::CLASS_SEC ) // class
- {
-
- if (insidePHP || insideD || insideJS)
- {
- current->protection = protection = Public ;
- }
- else if (insideJava)
- {
- current->protection = protection = (ce->spec & (Entry::Interface|Entry::Enum)) ? Public : Package;
- }
- else if (ce->spec&(Entry::Interface | Entry::Ref | Entry::Value | Entry::Struct | Entry::Union))
- {
- if (ce->lang==SrcLangExt_ObjC)
- {
- current->protection = protection = Protected ;
- }
- else
- {
- current->protection = protection = Public ;
- }
- }
- else
- {
- current->protection = protection = Private ;
- }
- }
- else if (ce->section == Entry::ENUM_SEC ) // enum
- {
- current->protection = protection = ce->protection;
- }
- else if (!ce->name.isEmpty() && ce->name.at(ni)=='@') // unnamed union or namespace
- {
- if (ce->section == Entry::NAMESPACE_SEC ) // unnamed namespace
- {
- current->stat = gstat = TRUE;
- }
- current->protection = protection = ce->protection;
- }
- else // named struct, union, protocol, category
- {
- current->protection = protection = Public ;
- }
- mtype = Method;
- virt = Normal;
- //printf("name=%s current->stat=%d gstat=%d\n",ce->name.data(),current->stat,gstat);
-
- //memberGroupId = DOX_NOGROUP;
- //memberGroupRelates.resize(0);
- //memberGroupInside.resize(0);
- groupEnterCompound(yyFileName,yyLineNr,ce->name);
-
- scanYYlex() ;
- g_lexInit=TRUE;
- //forceEndGroup();
-
- groupLeaveCompound(yyFileName,yyLineNr,ce->name);
-
- delete current; current=0;
- ce->program.resize(0);
-
-
- //if (depthIf>0)
- //{
- // warn(yyFileName,yyLineNr,"Documentation block ended in the middle of a conditional section!");
- //}
- }
- parseCompounds(ce);
- }
-}
-
-//----------------------------------------------------------------------------
-
-static void parseMain(const char *fileName,const char *fileBuf,Entry *rt)
-{
- initParser();
- //g_inputFromFile = TRUE;
-
- inputString = fileBuf;
- inputPosition = 0;
- g_inputFromFile = FALSE;
-
- //anonCount = 0; // don't reset per file
- //depthIf = 0;
- protection = Public;
- mtype = Method;
- gstat = FALSE;
- virt = Normal;
- current_root = rt;
- global_root = rt;
- inputFile.setName(fileName);
- if (inputFile.open(IO_ReadOnly))
- {
- yyLineNr= 1 ;
- yyFileName = fileName;
- setContext();
- rt->lang = language;
- msg("Parsing file %s...\n",yyFileName.data());
-
- current_root = rt ;
- initParser();
- groupEnterFile(yyFileName,yyLineNr);
- current = new Entry;
- //printf("current=%p current_root=%p\n",current,current_root);
- int sec=guessSection(yyFileName);
- if (sec)
- {
- current->name = yyFileName;
- current->section = sec;
- current_root->addSubEntry(current);
- current = new Entry;
- }
- current->reset();
- initEntry();
- scanYYrestart( scanYYin );
- if ( insidePHP )
- {
- BEGIN( FindMembersPHP );
- }
- else
- {
- BEGIN( FindMembers );
- }
-
- scanYYlex();
- g_lexInit=TRUE;
-
- if (YY_START==Comment)
- {
- warn(yyFileName,yyLineNr,"File ended in the middle of a comment block! Perhaps a missing \\endcode?");
- }
-
- //forceEndGroup();
- groupLeaveFile(yyFileName,yyLineNr);
-
- //if (depthIf>0)
- //{
- // warn(yyFileName,yyLineNr,"Documentation block ended in the middle of a conditional section!");
- //}
-
- rt->program.resize(0);
- if (rt->children()->contains(current)==0)
- // it could be that current is already added as a child to rt, so we
- // only delete it if this is not the case. See bug 635317.
- {
- delete current; current=0;
- }
-
- parseCompounds(rt);
-
- inputFile.close();
-
- anonNSCount++;
- }
-}
-
-//----------------------------------------------------------------------------
-
-static void parsePrototype(const QCString &text)
-{
- //printf("**** parsePrototype(%s) begin\n",text.data());
- if (text.isEmpty())
- {
- warn(yyFileName,yyLineNr,"Empty prototype found!");
- return;
- }
-
- const char *orgInputString;
- int orgInputPosition;
- YY_BUFFER_STATE orgState;
- bool orgInputFromFile;
-
- // save scanner state
- orgState = YY_CURRENT_BUFFER;
- yy_switch_to_buffer(yy_create_buffer(scanYYin, YY_BUF_SIZE));
- orgInputString = inputString;
- orgInputPosition = inputPosition;
- orgInputFromFile = g_inputFromFile;
-
- // set new string
- inputString = text;
- inputPosition = 0;
- g_inputFromFile = FALSE;
- scanYYrestart( scanYYin );
- BEGIN(Prototype);
- scanYYlex();
- g_lexInit=TRUE;
-
- current->name = current->name.stripWhiteSpace();
- if (current->section == Entry::MEMBERDOC_SEC && current->args.isEmpty())
- current->section = Entry::VARIABLEDOC_SEC;
-
- // restore original scanner state
- YY_BUFFER_STATE tmpState = YY_CURRENT_BUFFER;
- yy_switch_to_buffer(orgState);
- yy_delete_buffer(tmpState);
- inputString = orgInputString;
- inputPosition = orgInputPosition;
- g_inputFromFile = orgInputFromFile;
-
- //printf("**** parsePrototype end\n");
-}
-
-void scanFreeScanner()
-{
-#if defined(YY_FLEX_SUBMINOR_VERSION)
- if (g_lexInit)
- {
- scanYYlex_destroy();
- }
-#endif
-}
-
-//static void handleGroupStartCommand(const char *header)
-//{
-// memberGroupHeader=header;
-// startGroupInDoc();
-//}
-//
-//static void handleGroupEndCommand()
-//{
-// endGroup();
-// previous=0;
-//}
-
-//----------------------------------------------------------------------------
-
-void CLanguageScanner::parseInput(const char *fileName,const char *fileBuf,Entry *root)
-{
- g_thisParser = this;
- ::parseMain(fileName,fileBuf,root);
-}
-
-void CLanguageScanner::parseCode(CodeOutputInterface & codeOutIntf,
- const char * scopeName,
- const QCString & input,
- bool isExampleBlock,
- const char * exampleName,
- FileDef * fileDef,
- int startLine,
- int endLine,
- bool inlineFragment,
- MemberDef *memberDef,
- bool showLineNumbers
- )
-{
- ::parseCCode(codeOutIntf,scopeName,input,isExampleBlock,exampleName,
- fileDef,startLine,endLine,inlineFragment,memberDef,
- showLineNumbers);
-}
-
-bool CLanguageScanner::needsPreprocessing(const QCString &extension)
-{
- QCString fe=extension.lower();
- return
- !( fe==".java" || fe==".as" || fe==".d" || fe==".php" ||
- fe==".php4" || fe==".inc" || fe==".phtml"
- );
-}
-
-void CLanguageScanner::resetCodeParserState()
-{
- ::resetCCodeParserState();
-}
-
-void CLanguageScanner::parsePrototype(const char *text)
-{
- ::parsePrototype(text);
-}
-
-//----------------------------------------------------------------------------
-
-#if !defined(YY_FLEX_SUBMINOR_VERSION)
-//----------------------------------------------------------------------------
-extern "C" { // some bogus code to keep the compiler happy
- void scannerYYdummy() { yy_flex_realloc(0,0); }
-}
-#endif
-
diff --git a/trunk/src/search.css b/trunk/src/search.css
deleted file mode 100644
index 5e6b12f..0000000
--- a/trunk/src/search.css
+++ /dev/null
@@ -1,238 +0,0 @@
-/*---------------- Search Box */
-
-#FSearchBox {
- float: left;
-}
-
-#MSearchBox {
- white-space : nowrap;
- position: absolute;
- float: none;
- display: inline;
- margin-top: 8px;
- right: 0px;
- width: 170px;
- z-index: 102;
- background-color: white;
-}
-
-#MSearchBox .left
-{
- display:block;
- position:absolute;
- left:10px;
- width:20px;
- height:19px;
- background:url('search_l.png') no-repeat;
- background-position:right;
-}
-
-#MSearchSelect {
- display:block;
- position:absolute;
- width:20px;
- height:19px;
-}
-
-.left #MSearchSelect {
- left:4px;
-}
-
-.right #MSearchSelect {
- right:5px;
-}
-
-#MSearchField {
- display:block;
- position:absolute;
- height:19px;
- background:url('search_m.png') repeat-x;
- border:none;
- width:116px;
- margin-left:20px;
- padding-left:4px;
- color: #909090;
- outline: none;
- font: 9pt Arial, Verdana, sans-serif;
-}
-
-#FSearchBox #MSearchField {
- margin-left:15px;
-}
-
-#MSearchBox .right {
- display:block;
- position:absolute;
- right:10px;
- top:0px;
- width:20px;
- height:19px;
- background:url('search_r.png') no-repeat;
- background-position:left;
-}
-
-#MSearchClose {
- display: none;
- position: absolute;
- top: 4px;
- background : none;
- border: none;
- margin: 0px 4px 0px 0px;
- padding: 0px 0px;
- outline: none;
-}
-
-.left #MSearchClose {
- left: 6px;
-}
-
-.right #MSearchClose {
- right: 2px;
-}
-
-.MSearchBoxActive #MSearchField {
- color: #000000;
-}
-
-/*---------------- Search filter selection */
-
-#MSearchSelectWindow {
- display: none;
- position: absolute;
- left: 0; top: 0;
- border: 1px solid ##A0;
- background-color: ##FA;
- z-index: 1;
- padding-top: 4px;
- padding-bottom: 4px;
- -moz-border-radius: 4px;
- -webkit-border-top-left-radius: 4px;
- -webkit-border-top-right-radius: 4px;
- -webkit-border-bottom-left-radius: 4px;
- -webkit-border-bottom-right-radius: 4px;
- -webkit-box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15);
-}
-
-.SelectItem {
- font: 8pt Arial, Verdana, sans-serif;
- padding-left: 2px;
- padding-right: 12px;
- border: 0px;
-}
-
-span.SelectionMark {
- margin-right: 4px;
- font-family: monospace;
- outline-style: none;
- text-decoration: none;
-}
-
-a.SelectItem {
- display: block;
- outline-style: none;
- color: #000000;
- text-decoration: none;
- padding-left: 6px;
- padding-right: 12px;
-}
-
-a.SelectItem:focus,
-a.SelectItem:active {
- color: #000000;
- outline-style: none;
- text-decoration: none;
-}
-
-a.SelectItem:hover {
- color: #FFFFFF;
- background-color: ##50;
- outline-style: none;
- text-decoration: none;
- cursor: pointer;
- display: block;
-}
-
-/*---------------- Search results window */
-
-iframe#MSearchResults {
- width: 60ex;
- height: 15em;
-}
-
-#MSearchResultsWindow {
- display: none;
- position: absolute;
- left: 0; top: 0;
- border: 1px solid #000;
- background-color: ##F0;
-}
-
-/* ----------------------------------- */
-
-
-#SRIndex {
- clear:both;
- padding-bottom: 15px;
-}
-
-.SREntry {
- font-size: 10pt;
- padding-left: 1ex;
-}
-
-.SRPage .SREntry {
- font-size: 8pt;
- padding: 1px 5px;
-}
-
-body.SRPage {
- margin: 5px 2px;
-}
-
-.SRChildren {
- padding-left: 3ex; padding-bottom: .5em
-}
-
-.SRPage .SRChildren {
- display: none;
-}
-
-.SRSymbol {
- font-weight: bold;
- color: ##58;
- font-family: Arial, Verdana, sans-serif;
- text-decoration: none;
- outline: none;
-}
-
-a.SRScope {
- display: block;
- color: ##58;
- font-family: Arial, Verdana, sans-serif;
- text-decoration: none;
- outline: none;
-}
-
-a.SRSymbol:focus, a.SRSymbol:active,
-a.SRScope:focus, a.SRScope:active {
- text-decoration: underline;
-}
-
-span.SRScope {
- padding-left: 4px;
-}
-
-.SRPage .SRStatus {
- padding: 2px 5px;
- font-size: 8pt;
- font-style: italic;
-}
-
-.SRResult {
- display: none;
-}
-
-DIV.searchresults {
- margin-left: 10px;
- margin-right: 10px;
-}
diff --git a/trunk/src/search.js b/trunk/src/search.js
deleted file mode 100644
index 3ed3f90..0000000
--- a/trunk/src/search.js
+++ /dev/null
@@ -1,778 +0,0 @@
-function convertToId(search)
-{
- var result = '';
- for (i=0;i<search.length;i++)
- {
- var c = search.charAt(i);
- var cn = c.charCodeAt(0);
- if (c.match(/[a-z0-9]/))
- {
- result+=c;
- }
- else if (cn<16)
- {
- result+="_0"+cn.toString(16);
- }
- else
- {
- result+="_"+cn.toString(16);
- }
- }
- return result;
-}
-
-function getXPos(item)
-{
- var x = 0;
- if (item.offsetWidth)
- {
- while (item && item!=document.body)
- {
- x += item.offsetLeft;
- item = item.offsetParent;
- }
- }
- return x;
-}
-
-function getYPos(item)
-{
- var y = 0;
- if (item.offsetWidth)
- {
- while (item && item!=document.body)
- {
- y += item.offsetTop;
- item = item.offsetParent;
- }
- }
- return y;
-}
-
-/* A class handling everything associated with the search panel.
-
- Parameters:
- name - The name of the global variable that will be
- storing this instance. Is needed to be able to set timeouts.
- resultPath - path to use for external files
-*/
-function SearchBox(name, resultsPath, inFrame, label)
-{
- if (!name || !resultsPath) { alert("Missing parameters to SearchBox."); }
-
- // ---------- Instance variables
- this.name = name;
- this.resultsPath = resultsPath;
- this.keyTimeout = 0;
- this.keyTimeoutLength = 500;
- this.closeSelectionTimeout = 300;
- this.lastSearchValue = "";
- this.lastResultsPage = "";
- this.hideTimeout = 0;
- this.searchIndex = 0;
- this.searchActive = false;
- this.insideFrame = inFrame;
- this.searchLabel = label;
-
- // ----------- DOM Elements
-
- this.DOMSearchField = function()
- { return document.getElementById("MSearchField"); }
-
- this.DOMSearchSelect = function()
- { return document.getElementById("MSearchSelect"); }
-
- this.DOMSearchSelectWindow = function()
- { return document.getElementById("MSearchSelectWindow"); }
-
- this.DOMPopupSearchResults = function()
- { return document.getElementById("MSearchResults"); }
-
- this.DOMPopupSearchResultsWindow = function()
- { return document.getElementById("MSearchResultsWindow"); }
-
- this.DOMSearchClose = function()
- { return document.getElementById("MSearchClose"); }
-
- this.DOMSearchBox = function()
- { return document.getElementById("MSearchBox"); }
-
- // ------------ Event Handlers
-
- // Called when focus is added or removed from the search field.
- this.OnSearchFieldFocus = function(isActive)
- {
- this.Activate(isActive);
- }
-
- this.OnSearchSelectShow = function()
- {
- var searchSelectWindow = this.DOMSearchSelectWindow();
- var searchField = this.DOMSearchSelect();
-
- if (this.insideFrame)
- {
- var left = getXPos(searchField);
- var top = getYPos(searchField);
- left += searchField.offsetWidth + 6;
- top += searchField.offsetHeight;
-
- // show search selection popup
- searchSelectWindow.style.display='block';
- left -= searchSelectWindow.offsetWidth;
- searchSelectWindow.style.left = left + 'px';
- searchSelectWindow.style.top = top + 'px';
- }
- else
- {
- var left = getXPos(searchField);
- var top = getYPos(searchField);
- top += searchField.offsetHeight;
-
- // show search selection popup
- searchSelectWindow.style.display='block';
- searchSelectWindow.style.left = left + 'px';
- searchSelectWindow.style.top = top + 'px';
- }
-
- // stop selection hide timer
- if (this.hideTimeout)
- {
- clearTimeout(this.hideTimeout);
- this.hideTimeout=0;
- }
- return false; // to avoid "image drag" default event
- }
-
- this.OnSearchSelectHide = function()
- {
- this.hideTimeout = setTimeout(this.name +".CloseSelectionWindow()",
- this.closeSelectionTimeout);
- }
-
- // Called when the content of the search field is changed.
- this.OnSearchFieldChange = function(evt)
- {
- if (this.keyTimeout) // kill running timer
- {
- clearTimeout(this.keyTimeout);
- this.keyTimeout = 0;
- }
-
- var e = (evt) ? evt : window.event; // for IE
- if (e.keyCode==40 || e.keyCode==13)
- {
- if (e.shiftKey==1)
- {
- this.OnSearchSelectShow();
- var win=this.DOMSearchSelectWindow();
- for (i=0;i<win.childNodes.length;i++)
- {
- var child = win.childNodes[i]; // get span within a
- if (child.className=='SelectItem')
- {
- child.focus();
- return;
- }
- }
- return;
- }
- else if (window.frames.MSearchResults.searchResults)
- {
- var elem = window.frames.MSearchResults.searchResults.NavNext(0);
- if (elem) elem.focus();
- }
- }
- else if (e.keyCode==27) // Escape out of the search field
- {
- this.DOMSearchField().blur();
- this.DOMPopupSearchResultsWindow().style.display = 'none';
- this.DOMSearchClose().style.display = 'none';
- this.lastSearchValue = '';
- this.Activate(false);
- return;
- }
-
- // strip whitespaces
- var searchValue = this.DOMSearchField().value.replace(/ +/g, "");
-
- if (searchValue != this.lastSearchValue) // search value has changed
- {
- if (searchValue != "") // non-empty search
- {
- // set timer for search update
- this.keyTimeout = setTimeout(this.name + '.Search()',
- this.keyTimeoutLength);
- }
- else // empty search field
- {
- this.DOMPopupSearchResultsWindow().style.display = 'none';
- this.DOMSearchClose().style.display = 'none';
- this.lastSearchValue = '';
- }
- }
- }
-
- this.SelectItemCount = function(id)
- {
- var count=0;
- var win=this.DOMSearchSelectWindow();
- for (i=0;i<win.childNodes.length;i++)
- {
- var child = win.childNodes[i]; // get span within a
- if (child.className=='SelectItem')
- {
- count++;
- }
- }
- return count;
- }
-
- this.SelectItemSet = function(id)
- {
- var i,j=0;
- var win=this.DOMSearchSelectWindow();
- for (i=0;i<win.childNodes.length;i++)
- {
- var child = win.childNodes[i]; // get span within a
- if (child.className=='SelectItem')
- {
- var node = child.firstChild;
- if (j==id)
- {
- node.innerHTML='&#8226;';
- }
- else
- {
- node.innerHTML='&#160;';
- }
- j++;
- }
- }
- }
-
- // Called when an search filter selection is made.
- // set item with index id as the active item
- this.OnSelectItem = function(id)
- {
- this.searchIndex = id;
- this.SelectItemSet(id);
- var searchValue = this.DOMSearchField().value.replace(/ +/g, "");
- if (searchValue!="" && this.searchActive) // something was found -> do a search
- {
- this.Search();
- }
- }
-
- this.OnSearchSelectKey = function(evt)
- {
- var e = (evt) ? evt : window.event; // for IE
- if (e.keyCode==40 && this.searchIndex<this.SelectItemCount()) // Down
- {
- this.searchIndex++;
- this.OnSelectItem(this.searchIndex);
- }
- else if (e.keyCode==38 && this.searchIndex>0) // Up
- {
- this.searchIndex--;
- this.OnSelectItem(this.searchIndex);
- }
- else if (e.keyCode==13 || e.keyCode==27)
- {
- this.OnSelectItem(this.searchIndex);
- this.CloseSelectionWindow();
- this.DOMSearchField().focus();
- }
- return false;
- }
-
- // --------- Actions
-
- // Closes the results window.
- this.CloseResultsWindow = function()
- {
- this.DOMPopupSearchResultsWindow().style.display = 'none';
- this.DOMSearchClose().style.display = 'none';
- this.Activate(false);
- }
-
- this.CloseSelectionWindow = function()
- {
- this.DOMSearchSelectWindow().style.display = 'none';
- }
-
- // Performs a search.
- this.Search = function()
- {
- this.keyTimeout = 0;
-
- // strip leading whitespace
- var searchValue = this.DOMSearchField().value.replace(/^ +/, "");
-
- var code = searchValue.toLowerCase().charCodeAt(0);
- var hexCode;
- if (code<16)
- {
- hexCode="0"+code.toString(16);
- }
- else
- {
- hexCode=code.toString(16);
- }
-
- var resultsPage;
- var resultsPageWithSearch;
- var hasResultsPage;
-
- if (indexSectionsWithContent[this.searchIndex].charAt(code) == '1')
- {
- resultsPage = this.resultsPath + '/' + indexSectionNames[this.searchIndex] + '_' + hexCode + '.html';
- resultsPageWithSearch = resultsPage+'?'+escape(searchValue);
- hasResultsPage = true;
- }
- else // nothing available for this search term
- {
- resultsPage = this.resultsPath + '/nomatches.html';
- resultsPageWithSearch = resultsPage;
- hasResultsPage = false;
- }
-
- window.frames.MSearchResults.location = resultsPageWithSearch;
- var domPopupSearchResultsWindow = this.DOMPopupSearchResultsWindow();
-
- if (domPopupSearchResultsWindow.style.display!='block')
- {
- var domSearchBox = this.DOMSearchBox();
- this.DOMSearchClose().style.display = 'inline';
- if (this.insideFrame)
- {
- var domPopupSearchResults = this.DOMPopupSearchResults();
- domPopupSearchResultsWindow.style.position = 'relative';
- domPopupSearchResultsWindow.style.display = 'block';
- var width = document.body.clientWidth - 8; // the -8 is for IE :-(
- domPopupSearchResultsWindow.style.width = width + 'px';
- domPopupSearchResults.style.width = width + 'px';
- }
- else
- {
- var domPopupSearchResults = this.DOMPopupSearchResults();
- var left = getXPos(domSearchBox) + 150; // domSearchBox.offsetWidth;
- var top = getYPos(domSearchBox) + 20; // domSearchBox.offsetHeight + 1;
- domPopupSearchResultsWindow.style.display = 'block';
- left -= domPopupSearchResults.offsetWidth;
- domPopupSearchResultsWindow.style.top = top + 'px';
- domPopupSearchResultsWindow.style.left = left + 'px';
- }
- }
-
- this.lastSearchValue = searchValue;
- this.lastResultsPage = resultsPage;
- }
-
- // -------- Activation Functions
-
- // Activates or deactivates the search panel, resetting things to
- // their default values if necessary.
- this.Activate = function(isActive)
- {
- if (isActive || // open it
- this.DOMPopupSearchResultsWindow().style.display == 'block'
- )
- {
- this.DOMSearchBox().className = 'MSearchBoxActive';
-
- var searchField = this.DOMSearchField();
-
- if (searchField.value == this.searchLabel) // clear "Search" term upon entry
- {
- searchField.value = '';
- this.searchActive = true;
- }
- }
- else if (!isActive) // directly remove the panel
- {
- this.DOMSearchBox().className = 'MSearchBoxInactive';
- this.DOMSearchField().value = this.searchLabel;
- this.searchActive = false;
- this.lastSearchValue = ''
- this.lastResultsPage = '';
- }
- }
-}
-
-// -----------------------------------------------------------------------
-
-// The class that handles everything on the search results page.
-function SearchResults(name)
-{
- // The number of matches from the last run of <Search()>.
- this.lastMatchCount = 0;
- this.lastKey = 0;
- this.repeatOn = false;
-
- // Toggles the visibility of the passed element ID.
- this.FindChildElement = function(id)
- {
- var parentElement = document.getElementById(id);
- var element = parentElement.firstChild;
-
- while (element && element!=parentElement)
- {
- if (element.nodeName == 'DIV' && element.className == 'SRChildren')
- {
- return element;
- }
-
- if (element.nodeName == 'DIV' && element.hasChildNodes())
- {
- element = element.firstChild;
- }
- else if (element.nextSibling)
- {
- element = element.nextSibling;
- }
- else
- {
- do
- {
- element = element.parentNode;
- }
- while (element && element!=parentElement && !element.nextSibling);
-
- if (element && element!=parentElement)
- {
- element = element.nextSibling;
- }
- }
- }
- }
-
- this.Toggle = function(id)
- {
- var element = this.FindChildElement(id);
- if (element)
- {
- if (element.style.display == 'block')
- {
- element.style.display = 'none';
- }
- else
- {
- element.style.display = 'block';
- }
- }
- }
-
- // Searches for the passed string. If there is no parameter,
- // it takes it from the URL query.
- //
- // Always returns true, since other documents may try to call it
- // and that may or may not be possible.
- this.Search = function(search)
- {
- if (!search) // get search word from URL
- {
- search = window.location.search;
- search = search.substring(1); // Remove the leading '?'
- search = unescape(search);
- }
-
- search = search.replace(/^ +/, ""); // strip leading spaces
- search = search.replace(/ +$/, ""); // strip trailing spaces
- search = search.toLowerCase();
- search = convertToId(search);
-
- var resultRows = document.getElementsByTagName("div");
- var matches = 0;
-
- var i = 0;
- while (i < resultRows.length)
- {
- var row = resultRows.item(i);
- if (row.className == "SRResult")
- {
- var rowMatchName = row.id.toLowerCase();
- rowMatchName = rowMatchName.replace(/^sr\d*_/, ''); // strip 'sr123_'
-
- if (search.length<=rowMatchName.length &&
- rowMatchName.substr(0, search.length)==search)
- {
- row.style.display = 'block';
- matches++;
- }
- else
- {
- row.style.display = 'none';
- }
- }
- i++;
- }
- document.getElementById("Searching").style.display='none';
- if (matches == 0) // no results
- {
- document.getElementById("NoMatches").style.display='block';
- }
- else // at least one result
- {
- document.getElementById("NoMatches").style.display='none';
- }
- this.lastMatchCount = matches;
- return true;
- }
-
- // return the first item with index index or higher that is visible
- this.NavNext = function(index)
- {
- var focusItem;
- while (1)
- {
- var focusName = 'Item'+index;
- focusItem = document.getElementById(focusName);
- if (focusItem && focusItem.parentNode.parentNode.style.display=='block')
- {
- break;
- }
- else if (!focusItem) // last element
- {
- break;
- }
- focusItem=null;
- index++;
- }
- return focusItem;
- }
-
- this.NavPrev = function(index)
- {
- var focusItem;
- while (1)
- {
- var focusName = 'Item'+index;
- focusItem = document.getElementById(focusName);
- if (focusItem && focusItem.parentNode.parentNode.style.display=='block')
- {
- break;
- }
- else if (!focusItem) // last element
- {
- break;
- }
- focusItem=null;
- index--;
- }
- return focusItem;
- }
-
- this.ProcessKeys = function(e)
- {
- if (e.type == "keydown")
- {
- this.repeatOn = false;
- this.lastKey = e.keyCode;
- }
- else if (e.type == "keypress")
- {
- if (!this.repeatOn)
- {
- if (this.lastKey) this.repeatOn = true;
- return false; // ignore first keypress after keydown
- }
- }
- else if (e.type == "keyup")
- {
- this.lastKey = 0;
- this.repeatOn = false;
- }
- return this.lastKey!=0;
- }
-
- this.Nav = function(evt,itemIndex)
- {
- var e = (evt) ? evt : window.event; // for IE
- if (e.keyCode==13) return true;
- if (!this.ProcessKeys(e)) return false;
-
- if (this.lastKey==38) // Up
- {
- var newIndex = itemIndex-1;
- var focusItem = this.NavPrev(newIndex);
- if (focusItem)
- {
- var child = this.FindChildElement(focusItem.parentNode.parentNode.id);
- if (child && child.style.display == 'block') // children visible
- {
- var n=0;
- var tmpElem;
- while (1) // search for last child
- {
- tmpElem = document.getElementById('Item'+newIndex+'_c'+n);
- if (tmpElem)
- {
- focusItem = tmpElem;
- }
- else // found it!
- {
- break;
- }
- n++;
- }
- }
- }
- if (focusItem)
- {
- focusItem.focus();
- }
- else // return focus to search field
- {
- parent.document.getElementById("MSearchField").focus();
- }
- }
- else if (this.lastKey==40) // Down
- {
- var newIndex = itemIndex+1;
- var focusItem;
- var item = document.getElementById('Item'+itemIndex);
- var elem = this.FindChildElement(item.parentNode.parentNode.id);
- if (elem && elem.style.display == 'block') // children visible
- {
- focusItem = document.getElementById('Item'+itemIndex+'_c0');
- }
- if (!focusItem) focusItem = this.NavNext(newIndex);
- if (focusItem) focusItem.focus();
- }
- else if (this.lastKey==39) // Right
- {
- var item = document.getElementById('Item'+itemIndex);
- var elem = this.FindChildElement(item.parentNode.parentNode.id);
- if (elem) elem.style.display = 'block';
- }
- else if (this.lastKey==37) // Left
- {
- var item = document.getElementById('Item'+itemIndex);
- var elem = this.FindChildElement(item.parentNode.parentNode.id);
- if (elem) elem.style.display = 'none';
- }
- else if (this.lastKey==27) // Escape
- {
- parent.searchBox.CloseResultsWindow();
- parent.document.getElementById("MSearchField").focus();
- }
- else if (this.lastKey==13) // Enter
- {
- return true;
- }
- return false;
- }
-
- this.NavChild = function(evt,itemIndex,childIndex)
- {
- var e = (evt) ? evt : window.event; // for IE
- if (e.keyCode==13) return true;
- if (!this.ProcessKeys(e)) return false;
-
- if (this.lastKey==38) // Up
- {
- if (childIndex>0)
- {
- var newIndex = childIndex-1;
- document.getElementById('Item'+itemIndex+'_c'+newIndex).focus();
- }
- else // already at first child, jump to parent
- {
- document.getElementById('Item'+itemIndex).focus();
- }
- }
- else if (this.lastKey==40) // Down
- {
- var newIndex = childIndex+1;
- var elem = document.getElementById('Item'+itemIndex+'_c'+newIndex);
- if (!elem) // last child, jump to parent next parent
- {
- elem = this.NavNext(itemIndex+1);
- }
- if (elem)
- {
- elem.focus();
- }
- }
- else if (this.lastKey==27) // Escape
- {
- parent.searchBox.CloseResultsWindow();
- parent.document.getElementById("MSearchField").focus();
- }
- else if (this.lastKey==13) // Enter
- {
- return true;
- }
- return false;
- }
-}
-
-function setKeyActions(elem,action)
-{
- elem.setAttribute('onkeydown',action);
- elem.setAttribute('onkeypress',action);
- elem.setAttribute('onkeyup',action);
-}
-
-function setClassAttr(elem,attr)
-{
- elem.setAttribute('class',attr);
- elem.setAttribute('className',attr);
-}
-
-function createResults()
-{
- var results = document.getElementById("SRResults");
- for (var e=0; e<searchData.length; e++)
- {
- var id = searchData[e][0];
- var srResult = document.createElement('div');
- srResult.setAttribute('id','SR_'+id);
- setClassAttr(srResult,'SRResult');
- var srEntry = document.createElement('div');
- setClassAttr(srEntry,'SREntry');
- var srLink = document.createElement('a');
- srLink.setAttribute('id','Item'+e);
- setKeyActions(srLink,'return searchResults.Nav(event,'+e+')');
- setClassAttr(srLink,'SRSymbol');
- srLink.innerHTML = searchData[e][1][0];
- srEntry.appendChild(srLink);
- if (searchData[e][1].length==2) // single result
- {
- srLink.setAttribute('href',searchData[e][1][1][0]);
- if (searchData[e][1][1][1])
- {
- srLink.setAttribute('target','_parent');
- }
- var srScope = document.createElement('span');
- setClassAttr(srScope,'SRScope');
- srScope.innerHTML = searchData[e][1][1][2];
- srEntry.appendChild(srScope);
- }
- else // multiple results
- {
- srLink.setAttribute('href','javascript:searchResults.Toggle("SR_'+id+'")');
- var srChildren = document.createElement('div');
- setClassAttr(srChildren,'SRChildren');
- for (var c=0; c<searchData[e][1].length-1; c++)
- {
- var srChild = document.createElement('a');
- srChild.setAttribute('id','Item'+e+'_c'+c);
- setKeyActions(srChild,'return searchResults.NavChild(event,'+e+','+c+')');
- setClassAttr(srChild,'SRScope');
- srChild.setAttribute('href',searchData[e][1][c+1][0]);
- if (searchData[e][1][c+1][1])
- {
- srChild.setAttribute('target','_parent');
- }
- srChild.innerHTML = searchData[e][1][c+1][2];
- srChildren.appendChild(srChild);
- }
- srEntry.appendChild(srChildren);
- }
- srResult.appendChild(srEntry);
- results.appendChild(srResult);
- }
-}
-
diff --git a/trunk/src/search_css.h b/trunk/src/search_css.h
deleted file mode 100644
index 9b6656b..0000000
--- a/trunk/src/search_css.h
+++ /dev/null
@@ -1,238 +0,0 @@
-"/*---------------- Search Box */\n"
-"\n"
-"#FSearchBox {\n"
-" float: left;\n"
-"}\n"
-"\n"
-"#MSearchBox {\n"
-" white-space : nowrap;\n"
-" position: absolute;\n"
-" float: none;\n"
-" display: inline;\n"
-" margin-top: 8px;\n"
-" right: 0px;\n"
-" width: 170px;\n"
-" z-index: 102;\n"
-" background-color: white;\n"
-"}\n"
-"\n"
-"#MSearchBox .left\n"
-"{\n"
-" display:block;\n"
-" position:absolute;\n"
-" left:10px;\n"
-" width:20px;\n"
-" height:19px;\n"
-" background:url('search_l.png') no-repeat;\n"
-" background-position:right;\n"
-"}\n"
-"\n"
-"#MSearchSelect {\n"
-" display:block;\n"
-" position:absolute;\n"
-" width:20px;\n"
-" height:19px;\n"
-"}\n"
-"\n"
-".left #MSearchSelect {\n"
-" left:4px;\n"
-"}\n"
-"\n"
-".right #MSearchSelect {\n"
-" right:5px;\n"
-"}\n"
-"\n"
-"#MSearchField {\n"
-" display:block;\n"
-" position:absolute;\n"
-" height:19px;\n"
-" background:url('search_m.png') repeat-x;\n"
-" border:none;\n"
-" width:116px;\n"
-" margin-left:20px;\n"
-" padding-left:4px;\n"
-" color: #909090;\n"
-" outline: none;\n"
-" font: 9pt Arial, Verdana, sans-serif;\n"
-"}\n"
-"\n"
-"#FSearchBox #MSearchField {\n"
-" margin-left:15px;\n"
-"}\n"
-"\n"
-"#MSearchBox .right {\n"
-" display:block;\n"
-" position:absolute;\n"
-" right:10px;\n"
-" top:0px;\n"
-" width:20px;\n"
-" height:19px;\n"
-" background:url('search_r.png') no-repeat;\n"
-" background-position:left;\n"
-"}\n"
-"\n"
-"#MSearchClose {\n"
-" display: none;\n"
-" position: absolute;\n"
-" top: 4px;\n"
-" background : none;\n"
-" border: none;\n"
-" margin: 0px 4px 0px 0px;\n"
-" padding: 0px 0px;\n"
-" outline: none;\n"
-"}\n"
-"\n"
-".left #MSearchClose {\n"
-" left: 6px;\n"
-"}\n"
-"\n"
-".right #MSearchClose {\n"
-" right: 2px;\n"
-"}\n"
-"\n"
-".MSearchBoxActive #MSearchField {\n"
-" color: #000000;\n"
-"}\n"
-"\n"
-"/*---------------- Search filter selection */\n"
-"\n"
-"#MSearchSelectWindow {\n"
-" display: none;\n"
-" position: absolute;\n"
-" left: 0; top: 0;\n"
-" border: 1px solid ##A0;\n"
-" background-color: ##FA;\n"
-" z-index: 1;\n"
-" padding-top: 4px;\n"
-" padding-bottom: 4px;\n"
-" -moz-border-radius: 4px;\n"
-" -webkit-border-top-left-radius: 4px;\n"
-" -webkit-border-top-right-radius: 4px;\n"
-" -webkit-border-bottom-left-radius: 4px;\n"
-" -webkit-border-bottom-right-radius: 4px;\n"
-" -webkit-box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15);\n"
-"}\n"
-"\n"
-".SelectItem {\n"
-" font: 8pt Arial, Verdana, sans-serif;\n"
-" padding-left: 2px;\n"
-" padding-right: 12px;\n"
-" border: 0px;\n"
-"}\n"
-"\n"
-"span.SelectionMark {\n"
-" margin-right: 4px;\n"
-" font-family: monospace;\n"
-" outline-style: none;\n"
-" text-decoration: none;\n"
-"}\n"
-"\n"
-"a.SelectItem {\n"
-" display: block;\n"
-" outline-style: none;\n"
-" color: #000000; \n"
-" text-decoration: none;\n"
-" padding-left: 6px;\n"
-" padding-right: 12px;\n"
-"}\n"
-"\n"
-"a.SelectItem:focus,\n"
-"a.SelectItem:active {\n"
-" color: #000000; \n"
-" outline-style: none;\n"
-" text-decoration: none;\n"
-"}\n"
-"\n"
-"a.SelectItem:hover {\n"
-" color: #FFFFFF;\n"
-" background-color: ##50;\n"
-" outline-style: none;\n"
-" text-decoration: none;\n"
-" cursor: pointer;\n"
-" display: block;\n"
-"}\n"
-"\n"
-"/*---------------- Search results window */\n"
-"\n"
-"iframe#MSearchResults {\n"
-" width: 60ex;\n"
-" height: 15em;\n"
-"}\n"
-"\n"
-"#MSearchResultsWindow {\n"
-" display: none;\n"
-" position: absolute;\n"
-" left: 0; top: 0;\n"
-" border: 1px solid #000;\n"
-" background-color: ##F0;\n"
-"}\n"
-"\n"
-"/* ----------------------------------- */\n"
-"\n"
-"\n"
-"#SRIndex {\n"
-" clear:both; \n"
-" padding-bottom: 15px;\n"
-"}\n"
-"\n"
-".SREntry {\n"
-" font-size: 10pt;\n"
-" padding-left: 1ex;\n"
-"}\n"
-"\n"
-".SRPage .SREntry {\n"
-" font-size: 8pt;\n"
-" padding: 1px 5px;\n"
-"}\n"
-"\n"
-"body.SRPage {\n"
-" margin: 5px 2px;\n"
-"}\n"
-"\n"
-".SRChildren {\n"
-" padding-left: 3ex; padding-bottom: .5em \n"
-"}\n"
-"\n"
-".SRPage .SRChildren {\n"
-" display: none;\n"
-"}\n"
-"\n"
-".SRSymbol {\n"
-" font-weight: bold; \n"
-" color: ##58;\n"
-" font-family: Arial, Verdana, sans-serif;\n"
-" text-decoration: none;\n"
-" outline: none;\n"
-"}\n"
-"\n"
-"a.SRScope {\n"
-" display: block;\n"
-" color: ##58; \n"
-" font-family: Arial, Verdana, sans-serif;\n"
-" text-decoration: none;\n"
-" outline: none;\n"
-"}\n"
-"\n"
-"a.SRSymbol:focus, a.SRSymbol:active,\n"
-"a.SRScope:focus, a.SRScope:active {\n"
-" text-decoration: underline;\n"
-"}\n"
-"\n"
-"span.SRScope {\n"
-" padding-left: 4px;\n"
-"}\n"
-"\n"
-".SRPage .SRStatus {\n"
-" padding: 2px 5px;\n"
-" font-size: 8pt;\n"
-" font-style: italic;\n"
-"}\n"
-"\n"
-".SRResult {\n"
-" display: none;\n"
-"}\n"
-"\n"
-"DIV.searchresults {\n"
-" margin-left: 10px;\n"
-" margin-right: 10px;\n"
-"}\n"
diff --git a/trunk/src/search_functions.php b/trunk/src/search_functions.php
deleted file mode 100644
index 10dabf2..0000000
--- a/trunk/src/search_functions.php
+++ /dev/null
@@ -1,374 +0,0 @@
-<script language="PHP">
-require_once "search-config.php";
-
-function end_form($value)
-{
- global $config;
- global $translator;
- if ($config['DISABLE_INDEX'] == false)
- {
- echo " <input type=\"text\" id=\"MSearchField\" name=\"query\" value=\"$value\" size=\"20\" accesskey=\"S\" onfocus=\"searchBox.OnSearchFieldFocus(true)\" onblur=\"searchBox.OnSearchFieldFocus(false)\"/>\n </form>\n </div><div class=\"right\"></div>\n </div>\n </li>\n </ul>\n </div>\n</div>\n";
- }
- if ($config['GENERATE_TREEVIEW'])
- {
- echo $translator['split_bar'];
- }
-}
-
-function end_page()
-{
- global $config;
- global $translator;
- if ($config['GENERATE_TREEVIEW'])
- {
- echo "</div>\n<div id=\"nav-path\" class=\"navpath\">\n <ul>\n <li class=\"footer\">";
- echo $translator['logo'];
- echo "</li>\n </ul>\n</div>";
- }
- echo "</body></html>";
-}
-
-function search_results()
-{
- global $translator;
- return $translator['search_results_title'];
-}
-
-function matches_text($num)
-{
- global $translator;
- $string = $translator['search_results'][($num>2)?2:$num];
- // The eval is used so that translator strings can contain $num.
- eval("\$result = \"$string\";");
- return $result;
-}
-
-function report_matches()
-{
- global $translator;
- return $translator['search_matches'];
-}
-
-function readInt($file)
-{
- $b1 = ord(fgetc($file)); $b2 = ord(fgetc($file));
- $b3 = ord(fgetc($file)); $b4 = ord(fgetc($file));
- return ($b1<<24)|($b2<<16)|($b3<<8)|$b4;
-}
-
-function readString($file)
-{
- $result="";
- while (ord($c=fgetc($file))) $result.=$c;
- return $result;
-}
-
-function readHeader($file)
-{
- $header =fgetc($file); $header.=fgetc($file);
- $header.=fgetc($file); $header.=fgetc($file);
- return $header;
-}
-
-function computeIndex($word)
-{
- // Simple hashing that allows for substring search
- if (strlen($word)<2) return -1;
- // high char of the index
- $hi = ord($word{0});
- if ($hi==0) return -1;
- // low char of the index
- $lo = ord($word{1});
- if ($lo==0) return -1;
- // return index
- return $hi*256+$lo;
-}
-
-function search($file,$word,&$statsList)
-{
- $index = computeIndex($word);
- if ($index!=-1) // found a valid index
- {
- fseek($file,$index*4+4); // 4 bytes per entry, skip header
- $index = readInt($file);
- if ($index) // found words matching the hash key
- {
- $start=sizeof($statsList);
- $count=$start;
- fseek($file,$index);
- $w = readString($file);
- while ($w)
- {
- $statIdx = readInt($file);
- if ($word==substr($w,0,strlen($word)))
- { // found word that matches (as substring)
- $statsList[$count++]=array(
- "word"=>$word,
- "match"=>$w,
- "index"=>$statIdx,
- "full"=>strlen($w)==strlen($word),
- "docs"=>array()
- );
- }
- $w = readString($file);
- }
- $totalHi=0;
- $totalFreqHi=0;
- $totalFreqLo=0;
- for ($count=$start;$count<sizeof($statsList);$count++)
- {
- $statInfo = &$statsList[$count];
- $multiplier = 1;
- // whole word matches have a double weight
- if ($statInfo["full"]) $multiplier=2;
- fseek($file,$statInfo["index"]);
- $numDocs = readInt($file);
- $docInfo = array();
- // read docs info + occurrence frequency of the word
- for ($i=0;$i<$numDocs;$i++)
- {
- $idx=readInt($file);
- $freq=readInt($file);
- $docInfo[$i]=array("idx" => $idx,
- "freq" => $freq>>1,
- "rank" => 0.0,
- "hi" => $freq&1
- );
- if ($freq&1) // word occurs in high priority doc
- {
- $totalHi++;
- $totalFreqHi+=$freq*$multiplier;
- }
- else // word occurs in low priority doc
- {
- $totalFreqLo+=$freq*$multiplier;
- }
- }
- // read name and url info for the doc
- for ($i=0;$i<$numDocs;$i++)
- {
- fseek($file,$docInfo[$i]["idx"]);
- $docInfo[$i]["name"]=readString($file);
- $docInfo[$i]["url"]=readString($file);
- }
- $statInfo["docs"]=$docInfo;
- }
- $totalFreq=($totalHi+1)*$totalFreqLo + $totalFreqHi;
- for ($count=$start;$count<sizeof($statsList);$count++)
- {
- $statInfo = &$statsList[$count];
- $multiplier = 1;
- // whole word matches have a double weight
- if ($statInfo["full"]) $multiplier=2;
- for ($i=0;$i<sizeof($statInfo["docs"]);$i++)
- {
- $docInfo = &$statInfo["docs"];
- // compute frequency rank of the word in each doc
- $freq=$docInfo[$i]["freq"];
- if ($docInfo[$i]["hi"])
- {
- $statInfo["docs"][$i]["rank"]=
- (float)($freq*$multiplier+$totalFreqLo)/$totalFreq;
- }
- else
- {
- $statInfo["docs"][$i]["rank"]=
- (float)($freq*$multiplier)/$totalFreq;
- }
- }
- }
- }
- }
- return $statsList;
-}
-
-function combine_results($results,&$docs)
-{
- foreach ($results as $wordInfo)
- {
- $docsList = &$wordInfo["docs"];
- foreach ($docsList as $di)
- {
- $key=$di["url"];
- $rank=$di["rank"];
- if (isset($docs[$key]))
- {
- $docs[$key]["rank"]+=$rank;
- }
- else
- {
- $docs[$key] = array("url"=>$key,
- "name"=>$di["name"],
- "rank"=>$rank
- );
- }
- $docs[$key]["words"][] = array(
- "word"=>$wordInfo["word"],
- "match"=>$wordInfo["match"],
- "freq"=>$di["freq"]
- );
- }
- }
- return $docs;
-}
-
-function filter_results($docs,&$requiredWords,&$forbiddenWords)
-{
- $filteredDocs=array();
- while (list ($key, $val) = each ($docs))
- {
- $words = &$docs[$key]["words"];
- $copy=1; // copy entry by default
- if (sizeof($requiredWords)>0)
- {
- foreach ($requiredWords as $reqWord)
- {
- $found=0;
- foreach ($words as $wordInfo)
- {
- $found = $wordInfo["word"]==$reqWord;
- if ($found) break;
- }
- if (!$found)
- {
- $copy=0; // document contains none of the required words
- break;
- }
- }
- }
- if (sizeof($forbiddenWords)>0)
- {
- foreach ($words as $wordInfo)
- {
- if (in_array($wordInfo["word"],$forbiddenWords))
- {
- $copy=0; // document contains a forbidden word
- break;
- }
- }
- }
- if ($copy) $filteredDocs[$key]=$docs[$key];
- }
- return $filteredDocs;
-}
-
-function compare_rank($a,$b)
-{
- if ($a["rank"] == $b["rank"])
- {
- return 0;
- }
- return ($a["rank"]>$b["rank"]) ? -1 : 1;
-}
-
-function sort_results($docs,&$sorted)
-{
- $sorted = $docs;
- usort($sorted,"compare_rank");
- return $sorted;
-}
-
-function report_results(&$docs)
-{
- echo "<div class=\"header\">";
- echo " <div class=\"headertitle\">\n";
- echo " <h1>".search_results()."</h1>\n";
- echo " </div>\n";
- echo "</div>\n";
- echo "<div class=\"searchresults\">\n";
- echo "<table cellspacing=\"2\">\n";
- $numDocs = sizeof($docs);
- if ($numDocs==0)
- {
- echo " <tr>\n";
- echo " <td colspan=\"2\">".matches_text(0)."</td>\n";
- echo " </tr>\n";
- }
- else
- {
- echo " <tr>\n";
- echo " <td colspan=\"2\">".matches_text($numDocs);
- echo "\n";
- echo " </td>\n";
- echo " </tr>\n";
- $num=1;
- foreach ($docs as $doc)
- {
- echo " <tr>\n";
- echo " <td align=\"right\">$num.</td>";
- echo "<td><a class=\"el\" href=\"".$doc["url"]."\">".$doc["name"]."</a></td>\n";
- echo " <tr>\n";
- echo " <td></td><td class=\"tiny\">".report_matches()." ";
- foreach ($doc["words"] as $wordInfo)
- {
- $word = $wordInfo["word"];
- $matchRight = substr($wordInfo["match"],strlen($word));
- echo "<b>$word</b>$matchRight(".$wordInfo["freq"].") ";
- }
- echo " </td>\n";
- echo " </tr>\n";
- $num++;
- }
- }
- echo "</table>\n";
- echo "</div>\n";
-}
-
-function run_query($query)
-{
- if(strcmp('4.1.0', phpversion()) > 0)
- {
- die("Error: PHP version 4.1.0 or above required!");
- }
- if (!($file=fopen("search/search.idx","rb")))
- {
- die("Error: Search index file could NOT be opened!");
- }
- if (readHeader($file)!="DOXS")
- {
- die("Error: Header of index file is invalid!");
- }
- $results = array();
- $requiredWords = array();
- $forbiddenWords = array();
- $foundWords = array();
- $word=strtok($query," ");
- while ($word) // for each word in the search query
- {
- if (($word{0}=='+')) { $word=substr($word,1); $requiredWords[]=$word; }
- if (($word{0}=='-')) { $word=substr($word,1); $forbiddenWords[]=$word; }
- if (!in_array($word,$foundWords))
- {
- $foundWords[]=$word;
- search($file,strtolower($word),$results);
- }
- $word=strtok(" ");
- }
- fclose($file);
- $docs = array();
- combine_results($results,$docs);
- // filter out documents with forbidden word or that do not contain
- // required words
- $filteredDocs = filter_results($docs,$requiredWords,$forbiddenWords);
- // sort the results based on rank
- $sorted = array();
- sort_results($filteredDocs,$sorted);
- return $sorted;
-}
-
-function main()
-{
- $query = "";
- if (array_key_exists("query", $_GET))
- {
- $query=$_GET["query"];
- }
- $sorted = run_query($query);
- // Now output the HTML stuff...
- // End the HTML form
- end_form(preg_replace("/[^a-zA-Z0-9\-\_\.]/i", " ", $query ));
- // report results to the user
- report_results($sorted);
- end_page();
-}
-</script>
diff --git a/trunk/src/search_functions_php.h b/trunk/src/search_functions_php.h
deleted file mode 100644
index 27c722c..0000000
--- a/trunk/src/search_functions_php.h
+++ /dev/null
@@ -1,374 +0,0 @@
-"<script language=\"PHP\">\n"
-"require_once \"search-config.php\";\n"
-"\n"
-"function end_form($value)\n"
-"{\n"
-" global $config;\n"
-" global $translator;\n"
-" if ($config['DISABLE_INDEX'] == false)\n"
-" {\n"
-" echo \" <input type=\\\"text\\\" id=\\\"MSearchField\\\" name=\\\"query\\\" value=\\\"$value\\\" size=\\\"20\\\" accesskey=\\\"S\\\" onfocus=\\\"searchBox.OnSearchFieldFocus(true)\\\" onblur=\\\"searchBox.OnSearchFieldFocus(false)\\\"/>\\n </form>\\n </div><div class=\\\"right\\\"></div>\\n </div>\\n </li>\\n </ul>\\n </div>\\n</div>\\n\";\n"
-" }\n"
-" if ($config['GENERATE_TREEVIEW'])\n"
-" {\n"
-" echo $translator['split_bar'];\n"
-" }\n"
-"}\n"
-"\n"
-"function end_page()\n"
-"{\n"
-" global $config;\n"
-" global $translator;\n"
-" if ($config['GENERATE_TREEVIEW'])\n"
-" {\n"
-" echo \"</div>\\n<div id=\\\"nav-path\\\" class=\\\"navpath\\\">\\n <ul>\\n <li class=\\\"footer\\\">\";\n"
-" echo $translator['logo'];\n"
-" echo \"</li>\\n </ul>\\n</div>\";\n"
-" }\n"
-" echo \"</body></html>\";\n"
-"}\n"
-"\n"
-"function search_results()\n"
-"{\n"
-" global $translator;\n"
-" return $translator['search_results_title'];\n"
-"}\n"
-"\n"
-"function matches_text($num)\n"
-"{\n"
-" global $translator;\n"
-" $string = $translator['search_results'][($num>2)?2:$num];\n"
-" // The eval is used so that translator strings can contain $num.\n"
-" eval(\"\\$result = \\\"$string\\\";\");\n"
-" return $result;\n"
-"}\n"
-"\n"
-"function report_matches()\n"
-"{\n"
-" global $translator;\n"
-" return $translator['search_matches'];\n"
-"}\n"
-"\n"
-"function readInt($file)\n"
-"{\n"
-" $b1 = ord(fgetc($file)); $b2 = ord(fgetc($file));\n"
-" $b3 = ord(fgetc($file)); $b4 = ord(fgetc($file));\n"
-" return ($b1<<24)|($b2<<16)|($b3<<8)|$b4;\n"
-"}\n"
-"\n"
-"function readString($file)\n"
-"{\n"
-" $result=\"\";\n"
-" while (ord($c=fgetc($file))) $result.=$c;\n"
-" return $result;\n"
-"}\n"
-"\n"
-"function readHeader($file)\n"
-"{\n"
-" $header =fgetc($file); $header.=fgetc($file);\n"
-" $header.=fgetc($file); $header.=fgetc($file);\n"
-" return $header;\n"
-"}\n"
-"\n"
-"function computeIndex($word)\n"
-"{\n"
-" // Simple hashing that allows for substring search\n"
-" if (strlen($word)<2) return -1;\n"
-" // high char of the index\n"
-" $hi = ord($word{0});\n"
-" if ($hi==0) return -1;\n"
-" // low char of the index\n"
-" $lo = ord($word{1});\n"
-" if ($lo==0) return -1;\n"
-" // return index\n"
-" return $hi*256+$lo;\n"
-"}\n"
-"\n"
-"function search($file,$word,&$statsList)\n"
-"{\n"
-" $index = computeIndex($word);\n"
-" if ($index!=-1) // found a valid index\n"
-" {\n"
-" fseek($file,$index*4+4); // 4 bytes per entry, skip header\n"
-" $index = readInt($file);\n"
-" if ($index) // found words matching the hash key\n"
-" {\n"
-" $start=sizeof($statsList);\n"
-" $count=$start;\n"
-" fseek($file,$index);\n"
-" $w = readString($file);\n"
-" while ($w)\n"
-" {\n"
-" $statIdx = readInt($file);\n"
-" if ($word==substr($w,0,strlen($word)))\n"
-" { // found word that matches (as substring)\n"
-" $statsList[$count++]=array(\n"
-" \"word\"=>$word,\n"
-" \"match\"=>$w,\n"
-" \"index\"=>$statIdx,\n"
-" \"full\"=>strlen($w)==strlen($word),\n"
-" \"docs\"=>array()\n"
-" );\n"
-" }\n"
-" $w = readString($file);\n"
-" }\n"
-" $totalHi=0;\n"
-" $totalFreqHi=0;\n"
-" $totalFreqLo=0;\n"
-" for ($count=$start;$count<sizeof($statsList);$count++)\n"
-" {\n"
-" $statInfo = &$statsList[$count];\n"
-" $multiplier = 1;\n"
-" // whole word matches have a double weight\n"
-" if ($statInfo[\"full\"]) $multiplier=2;\n"
-" fseek($file,$statInfo[\"index\"]); \n"
-" $numDocs = readInt($file);\n"
-" $docInfo = array();\n"
-" // read docs info + occurrence frequency of the word\n"
-" for ($i=0;$i<$numDocs;$i++)\n"
-" {\n"
-" $idx=readInt($file); \n"
-" $freq=readInt($file); \n"
-" $docInfo[$i]=array(\"idx\" => $idx,\n"
-" \"freq\" => $freq>>1,\n"
-" \"rank\" => 0.0,\n"
-" \"hi\" => $freq&1\n"
-" );\n"
-" if ($freq&1) // word occurs in high priority doc\n"
-" {\n"
-" $totalHi++;\n"
-" $totalFreqHi+=$freq*$multiplier;\n"
-" }\n"
-" else // word occurs in low priority doc\n"
-" {\n"
-" $totalFreqLo+=$freq*$multiplier;\n"
-" }\n"
-" }\n"
-" // read name and url info for the doc\n"
-" for ($i=0;$i<$numDocs;$i++)\n"
-" {\n"
-" fseek($file,$docInfo[$i][\"idx\"]);\n"
-" $docInfo[$i][\"name\"]=readString($file);\n"
-" $docInfo[$i][\"url\"]=readString($file);\n"
-" }\n"
-" $statInfo[\"docs\"]=$docInfo;\n"
-" }\n"
-" $totalFreq=($totalHi+1)*$totalFreqLo + $totalFreqHi;\n"
-" for ($count=$start;$count<sizeof($statsList);$count++)\n"
-" {\n"
-" $statInfo = &$statsList[$count];\n"
-" $multiplier = 1;\n"
-" // whole word matches have a double weight\n"
-" if ($statInfo[\"full\"]) $multiplier=2;\n"
-" for ($i=0;$i<sizeof($statInfo[\"docs\"]);$i++)\n"
-" {\n"
-" $docInfo = &$statInfo[\"docs\"];\n"
-" // compute frequency rank of the word in each doc\n"
-" $freq=$docInfo[$i][\"freq\"];\n"
-" if ($docInfo[$i][\"hi\"])\n"
-" {\n"
-" $statInfo[\"docs\"][$i][\"rank\"]=\n"
-" (float)($freq*$multiplier+$totalFreqLo)/$totalFreq;\n"
-" }\n"
-" else\n"
-" {\n"
-" $statInfo[\"docs\"][$i][\"rank\"]=\n"
-" (float)($freq*$multiplier)/$totalFreq;\n"
-" }\n"
-" }\n"
-" }\n"
-" }\n"
-" }\n"
-" return $statsList;\n"
-"}\n"
-"\n"
-"function combine_results($results,&$docs)\n"
-"{\n"
-" foreach ($results as $wordInfo)\n"
-" {\n"
-" $docsList = &$wordInfo[\"docs\"];\n"
-" foreach ($docsList as $di)\n"
-" {\n"
-" $key=$di[\"url\"];\n"
-" $rank=$di[\"rank\"];\n"
-" if (isset($docs[$key]))\n"
-" {\n"
-" $docs[$key][\"rank\"]+=$rank;\n"
-" }\n"
-" else\n"
-" {\n"
-" $docs[$key] = array(\"url\"=>$key,\n"
-" \"name\"=>$di[\"name\"],\n"
-" \"rank\"=>$rank\n"
-" );\n"
-" }\n"
-" $docs[$key][\"words\"][] = array(\n"
-" \"word\"=>$wordInfo[\"word\"],\n"
-" \"match\"=>$wordInfo[\"match\"],\n"
-" \"freq\"=>$di[\"freq\"]\n"
-" );\n"
-" }\n"
-" }\n"
-" return $docs;\n"
-"}\n"
-"\n"
-"function filter_results($docs,&$requiredWords,&$forbiddenWords)\n"
-"{\n"
-" $filteredDocs=array();\n"
-" while (list ($key, $val) = each ($docs)) \n"
-" {\n"
-" $words = &$docs[$key][\"words\"];\n"
-" $copy=1; // copy entry by default\n"
-" if (sizeof($requiredWords)>0)\n"
-" {\n"
-" foreach ($requiredWords as $reqWord)\n"
-" {\n"
-" $found=0;\n"
-" foreach ($words as $wordInfo)\n"
-" { \n"
-" $found = $wordInfo[\"word\"]==$reqWord;\n"
-" if ($found) break;\n"
-" }\n"
-" if (!$found) \n"
-" {\n"
-" $copy=0; // document contains none of the required words\n"
-" break;\n"
-" }\n"
-" }\n"
-" }\n"
-" if (sizeof($forbiddenWords)>0)\n"
-" {\n"
-" foreach ($words as $wordInfo)\n"
-" {\n"
-" if (in_array($wordInfo[\"word\"],$forbiddenWords))\n"
-" {\n"
-" $copy=0; // document contains a forbidden word\n"
-" break;\n"
-" }\n"
-" }\n"
-" }\n"
-" if ($copy) $filteredDocs[$key]=$docs[$key];\n"
-" }\n"
-" return $filteredDocs;\n"
-"}\n"
-"\n"
-"function compare_rank($a,$b)\n"
-"{\n"
-" if ($a[\"rank\"] == $b[\"rank\"]) \n"
-" {\n"
-" return 0;\n"
-" }\n"
-" return ($a[\"rank\"]>$b[\"rank\"]) ? -1 : 1; \n"
-"}\n"
-"\n"
-"function sort_results($docs,&$sorted)\n"
-"{\n"
-" $sorted = $docs;\n"
-" usort($sorted,\"compare_rank\");\n"
-" return $sorted;\n"
-"}\n"
-"\n"
-"function report_results(&$docs)\n"
-"{\n"
-" echo \"<div class=\\\"header\\\">\";\n"
-" echo \" <div class=\\\"headertitle\\\">\\n\";\n"
-" echo \" <h1>\".search_results().\"</h1>\\n\";\n"
-" echo \" </div>\\n\";\n"
-" echo \"</div>\\n\";\n"
-" echo \"<div class=\\\"searchresults\\\">\\n\";\n"
-" echo \"<table cellspacing=\\\"2\\\">\\n\";\n"
-" $numDocs = sizeof($docs);\n"
-" if ($numDocs==0)\n"
-" {\n"
-" echo \" <tr>\\n\";\n"
-" echo \" <td colspan=\\\"2\\\">\".matches_text(0).\"</td>\\n\";\n"
-" echo \" </tr>\\n\";\n"
-" }\n"
-" else\n"
-" {\n"
-" echo \" <tr>\\n\";\n"
-" echo \" <td colspan=\\\"2\\\">\".matches_text($numDocs);\n"
-" echo \"\\n\";\n"
-" echo \" </td>\\n\";\n"
-" echo \" </tr>\\n\";\n"
-" $num=1;\n"
-" foreach ($docs as $doc)\n"
-" {\n"
-" echo \" <tr>\\n\";\n"
-" echo \" <td align=\\\"right\\\">$num.</td>\";\n"
-" echo \"<td><a class=\\\"el\\\" href=\\\"\".$doc[\"url\"].\"\\\">\".$doc[\"name\"].\"</a></td>\\n\";\n"
-" echo \" <tr>\\n\";\n"
-" echo \" <td></td><td class=\\\"tiny\\\">\".report_matches().\" \";\n"
-" foreach ($doc[\"words\"] as $wordInfo)\n"
-" {\n"
-" $word = $wordInfo[\"word\"];\n"
-" $matchRight = substr($wordInfo[\"match\"],strlen($word));\n"
-" echo \"<b>$word</b>$matchRight(\".$wordInfo[\"freq\"].\") \";\n"
-" }\n"
-" echo \" </td>\\n\";\n"
-" echo \" </tr>\\n\";\n"
-" $num++;\n"
-" }\n"
-" }\n"
-" echo \"</table>\\n\";\n"
-" echo \"</div>\\n\";\n"
-"}\n"
-"\n"
-"function run_query($query)\n"
-"{\n"
-" if(strcmp('4.1.0', phpversion()) > 0) \n"
-" {\n"
-" die(\"Error: PHP version 4.1.0 or above required!\");\n"
-" }\n"
-" if (!($file=fopen(\"search/search.idx\",\"rb\"))) \n"
-" {\n"
-" die(\"Error: Search index file could NOT be opened!\");\n"
-" }\n"
-" if (readHeader($file)!=\"DOXS\")\n"
-" {\n"
-" die(\"Error: Header of index file is invalid!\");\n"
-" }\n"
-" $results = array();\n"
-" $requiredWords = array();\n"
-" $forbiddenWords = array();\n"
-" $foundWords = array();\n"
-" $word=strtok($query,\" \");\n"
-" while ($word) // for each word in the search query\n"
-" {\n"
-" if (($word{0}=='+')) { $word=substr($word,1); $requiredWords[]=$word; }\n"
-" if (($word{0}=='-')) { $word=substr($word,1); $forbiddenWords[]=$word; }\n"
-" if (!in_array($word,$foundWords))\n"
-" {\n"
-" $foundWords[]=$word;\n"
-" search($file,strtolower($word),$results);\n"
-" }\n"
-" $word=strtok(\" \");\n"
-" }\n"
-" fclose($file);\n"
-" $docs = array();\n"
-" combine_results($results,$docs);\n"
-" // filter out documents with forbidden word or that do not contain\n"
-" // required words\n"
-" $filteredDocs = filter_results($docs,$requiredWords,$forbiddenWords);\n"
-" // sort the results based on rank\n"
-" $sorted = array();\n"
-" sort_results($filteredDocs,$sorted);\n"
-" return $sorted;\n"
-"}\n"
-"\n"
-"function main()\n"
-"{\n"
-" $query = \"\";\n"
-" if (array_key_exists(\"query\", $_GET))\n"
-" {\n"
-" $query=$_GET[\"query\"];\n"
-" }\n"
-" $sorted = run_query($query);\n"
-" // Now output the HTML stuff...\n"
-" // End the HTML form\n"
-" end_form(preg_replace(\"/[^a-zA-Z0-9\\-\\_\\.]/i\", \" \", $query ));\n"
-" // report results to the user\n"
-" report_results($sorted);\n"
-" end_page();\n"
-"}\n"
-"</script>\n"
diff --git a/trunk/src/search_js.h b/trunk/src/search_js.h
deleted file mode 100644
index 985d03c..0000000
--- a/trunk/src/search_js.h
+++ /dev/null
@@ -1,778 +0,0 @@
-"function convertToId(search)\n"
-"{\n"
-" var result = '';\n"
-" for (i=0;i<search.length;i++)\n"
-" {\n"
-" var c = search.charAt(i);\n"
-" var cn = c.charCodeAt(0);\n"
-" if (c.match(/[a-z0-9]/))\n"
-" {\n"
-" result+=c;\n"
-" }\n"
-" else if (cn<16) \n"
-" {\n"
-" result+=\"_0\"+cn.toString(16);\n"
-" }\n"
-" else \n"
-" {\n"
-" result+=\"_\"+cn.toString(16);\n"
-" }\n"
-" }\n"
-" return result;\n"
-"}\n"
-"\n"
-"function getXPos(item)\n"
-"{\n"
-" var x = 0;\n"
-" if (item.offsetWidth)\n"
-" {\n"
-" while (item && item!=document.body)\n"
-" {\n"
-" x += item.offsetLeft;\n"
-" item = item.offsetParent;\n"
-" }\n"
-" }\n"
-" return x;\n"
-"}\n"
-"\n"
-"function getYPos(item)\n"
-"{\n"
-" var y = 0;\n"
-" if (item.offsetWidth)\n"
-" {\n"
-" while (item && item!=document.body)\n"
-" {\n"
-" y += item.offsetTop;\n"
-" item = item.offsetParent;\n"
-" }\n"
-" }\n"
-" return y;\n"
-"}\n"
-"\n"
-"/* A class handling everything associated with the search panel.\n"
-"\n"
-" Parameters:\n"
-" name - The name of the global variable that will be \n"
-" storing this instance. Is needed to be able to set timeouts.\n"
-" resultPath - path to use for external files\n"
-"*/\n"
-"function SearchBox(name, resultsPath, inFrame, label)\n"
-"{\n"
-" if (!name || !resultsPath) { alert(\"Missing parameters to SearchBox.\"); }\n"
-" \n"
-" // ---------- Instance variables\n"
-" this.name = name;\n"
-" this.resultsPath = resultsPath;\n"
-" this.keyTimeout = 0;\n"
-" this.keyTimeoutLength = 500;\n"
-" this.closeSelectionTimeout = 300;\n"
-" this.lastSearchValue = \"\";\n"
-" this.lastResultsPage = \"\";\n"
-" this.hideTimeout = 0;\n"
-" this.searchIndex = 0;\n"
-" this.searchActive = false;\n"
-" this.insideFrame = inFrame;\n"
-" this.searchLabel = label;\n"
-"\n"
-" // ----------- DOM Elements\n"
-"\n"
-" this.DOMSearchField = function()\n"
-" { return document.getElementById(\"MSearchField\"); }\n"
-"\n"
-" this.DOMSearchSelect = function()\n"
-" { return document.getElementById(\"MSearchSelect\"); }\n"
-"\n"
-" this.DOMSearchSelectWindow = function()\n"
-" { return document.getElementById(\"MSearchSelectWindow\"); }\n"
-"\n"
-" this.DOMPopupSearchResults = function()\n"
-" { return document.getElementById(\"MSearchResults\"); }\n"
-"\n"
-" this.DOMPopupSearchResultsWindow = function()\n"
-" { return document.getElementById(\"MSearchResultsWindow\"); }\n"
-"\n"
-" this.DOMSearchClose = function()\n"
-" { return document.getElementById(\"MSearchClose\"); }\n"
-"\n"
-" this.DOMSearchBox = function()\n"
-" { return document.getElementById(\"MSearchBox\"); }\n"
-"\n"
-" // ------------ Event Handlers\n"
-"\n"
-" // Called when focus is added or removed from the search field.\n"
-" this.OnSearchFieldFocus = function(isActive)\n"
-" {\n"
-" this.Activate(isActive);\n"
-" }\n"
-"\n"
-" this.OnSearchSelectShow = function()\n"
-" {\n"
-" var searchSelectWindow = this.DOMSearchSelectWindow();\n"
-" var searchField = this.DOMSearchSelect();\n"
-"\n"
-" if (this.insideFrame)\n"
-" {\n"
-" var left = getXPos(searchField);\n"
-" var top = getYPos(searchField);\n"
-" left += searchField.offsetWidth + 6;\n"
-" top += searchField.offsetHeight;\n"
-"\n"
-" // show search selection popup\n"
-" searchSelectWindow.style.display='block';\n"
-" left -= searchSelectWindow.offsetWidth;\n"
-" searchSelectWindow.style.left = left + 'px';\n"
-" searchSelectWindow.style.top = top + 'px';\n"
-" }\n"
-" else\n"
-" {\n"
-" var left = getXPos(searchField);\n"
-" var top = getYPos(searchField);\n"
-" top += searchField.offsetHeight;\n"
-"\n"
-" // show search selection popup\n"
-" searchSelectWindow.style.display='block';\n"
-" searchSelectWindow.style.left = left + 'px';\n"
-" searchSelectWindow.style.top = top + 'px';\n"
-" }\n"
-"\n"
-" // stop selection hide timer\n"
-" if (this.hideTimeout) \n"
-" {\n"
-" clearTimeout(this.hideTimeout);\n"
-" this.hideTimeout=0;\n"
-" }\n"
-" return false; // to avoid \"image drag\" default event\n"
-" }\n"
-"\n"
-" this.OnSearchSelectHide = function()\n"
-" {\n"
-" this.hideTimeout = setTimeout(this.name +\".CloseSelectionWindow()\",\n"
-" this.closeSelectionTimeout);\n"
-" }\n"
-"\n"
-" // Called when the content of the search field is changed.\n"
-" this.OnSearchFieldChange = function(evt)\n"
-" {\n"
-" if (this.keyTimeout) // kill running timer\n"
-" {\n"
-" clearTimeout(this.keyTimeout);\n"
-" this.keyTimeout = 0;\n"
-" }\n"
-"\n"
-" var e = (evt) ? evt : window.event; // for IE\n"
-" if (e.keyCode==40 || e.keyCode==13)\n"
-" {\n"
-" if (e.shiftKey==1)\n"
-" {\n"
-" this.OnSearchSelectShow();\n"
-" var win=this.DOMSearchSelectWindow(); \n"
-" for (i=0;i<win.childNodes.length;i++)\n"
-" {\n"
-" var child = win.childNodes[i]; // get span within a\n"
-" if (child.className=='SelectItem')\n"
-" {\n"
-" child.focus();\n"
-" return;\n"
-" }\n"
-" }\n"
-" return;\n"
-" }\n"
-" else if (window.frames.MSearchResults.searchResults)\n"
-" {\n"
-" var elem = window.frames.MSearchResults.searchResults.NavNext(0);\n"
-" if (elem) elem.focus();\n"
-" }\n"
-" }\n"
-" else if (e.keyCode==27) // Escape out of the search field\n"
-" {\n"
-" this.DOMSearchField().blur();\n"
-" this.DOMPopupSearchResultsWindow().style.display = 'none';\n"
-" this.DOMSearchClose().style.display = 'none';\n"
-" this.lastSearchValue = '';\n"
-" this.Activate(false);\n"
-" return;\n"
-" }\n"
-"\n"
-" // strip whitespaces\n"
-" var searchValue = this.DOMSearchField().value.replace(/ +/g, \"\");\n"
-"\n"
-" if (searchValue != this.lastSearchValue) // search value has changed\n"
-" {\n"
-" if (searchValue != \"\") // non-empty search\n"
-" {\n"
-" // set timer for search update\n"
-" this.keyTimeout = setTimeout(this.name + '.Search()',\n"
-" this.keyTimeoutLength);\n"
-" }\n"
-" else // empty search field\n"
-" {\n"
-" this.DOMPopupSearchResultsWindow().style.display = 'none';\n"
-" this.DOMSearchClose().style.display = 'none';\n"
-" this.lastSearchValue = '';\n"
-" }\n"
-" }\n"
-" }\n"
-"\n"
-" this.SelectItemCount = function(id)\n"
-" {\n"
-" var count=0;\n"
-" var win=this.DOMSearchSelectWindow(); \n"
-" for (i=0;i<win.childNodes.length;i++)\n"
-" {\n"
-" var child = win.childNodes[i]; // get span within a\n"
-" if (child.className=='SelectItem')\n"
-" {\n"
-" count++;\n"
-" }\n"
-" }\n"
-" return count;\n"
-" }\n"
-"\n"
-" this.SelectItemSet = function(id)\n"
-" {\n"
-" var i,j=0;\n"
-" var win=this.DOMSearchSelectWindow(); \n"
-" for (i=0;i<win.childNodes.length;i++)\n"
-" {\n"
-" var child = win.childNodes[i]; // get span within a\n"
-" if (child.className=='SelectItem')\n"
-" {\n"
-" var node = child.firstChild;\n"
-" if (j==id)\n"
-" {\n"
-" node.innerHTML='&#8226;';\n"
-" }\n"
-" else\n"
-" {\n"
-" node.innerHTML='&#160;';\n"
-" }\n"
-" j++;\n"
-" }\n"
-" }\n"
-" }\n"
-"\n"
-" // Called when an search filter selection is made.\n"
-" // set item with index id as the active item\n"
-" this.OnSelectItem = function(id)\n"
-" {\n"
-" this.searchIndex = id;\n"
-" this.SelectItemSet(id);\n"
-" var searchValue = this.DOMSearchField().value.replace(/ +/g, \"\");\n"
-" if (searchValue!=\"\" && this.searchActive) // something was found -> do a search\n"
-" {\n"
-" this.Search();\n"
-" }\n"
-" }\n"
-"\n"
-" this.OnSearchSelectKey = function(evt)\n"
-" {\n"
-" var e = (evt) ? evt : window.event; // for IE\n"
-" if (e.keyCode==40 && this.searchIndex<this.SelectItemCount()) // Down\n"
-" {\n"
-" this.searchIndex++;\n"
-" this.OnSelectItem(this.searchIndex);\n"
-" }\n"
-" else if (e.keyCode==38 && this.searchIndex>0) // Up\n"
-" {\n"
-" this.searchIndex--;\n"
-" this.OnSelectItem(this.searchIndex);\n"
-" }\n"
-" else if (e.keyCode==13 || e.keyCode==27)\n"
-" {\n"
-" this.OnSelectItem(this.searchIndex);\n"
-" this.CloseSelectionWindow();\n"
-" this.DOMSearchField().focus();\n"
-" }\n"
-" return false;\n"
-" }\n"
-"\n"
-" // --------- Actions\n"
-"\n"
-" // Closes the results window.\n"
-" this.CloseResultsWindow = function()\n"
-" {\n"
-" this.DOMPopupSearchResultsWindow().style.display = 'none';\n"
-" this.DOMSearchClose().style.display = 'none';\n"
-" this.Activate(false);\n"
-" }\n"
-"\n"
-" this.CloseSelectionWindow = function()\n"
-" {\n"
-" this.DOMSearchSelectWindow().style.display = 'none';\n"
-" }\n"
-"\n"
-" // Performs a search.\n"
-" this.Search = function()\n"
-" {\n"
-" this.keyTimeout = 0;\n"
-"\n"
-" // strip leading whitespace\n"
-" var searchValue = this.DOMSearchField().value.replace(/^ +/, \"\");\n"
-"\n"
-" var code = searchValue.toLowerCase().charCodeAt(0);\n"
-" var hexCode;\n"
-" if (code<16) \n"
-" {\n"
-" hexCode=\"0\"+code.toString(16);\n"
-" }\n"
-" else \n"
-" {\n"
-" hexCode=code.toString(16);\n"
-" }\n"
-"\n"
-" var resultsPage;\n"
-" var resultsPageWithSearch;\n"
-" var hasResultsPage;\n"
-"\n"
-" if (indexSectionsWithContent[this.searchIndex].charAt(code) == '1')\n"
-" {\n"
-" resultsPage = this.resultsPath + '/' + indexSectionNames[this.searchIndex] + '_' + hexCode + '.html';\n"
-" resultsPageWithSearch = resultsPage+'?'+escape(searchValue);\n"
-" hasResultsPage = true;\n"
-" }\n"
-" else // nothing available for this search term\n"
-" {\n"
-" resultsPage = this.resultsPath + '/nomatches.html';\n"
-" resultsPageWithSearch = resultsPage;\n"
-" hasResultsPage = false;\n"
-" }\n"
-"\n"
-" window.frames.MSearchResults.location = resultsPageWithSearch; \n"
-" var domPopupSearchResultsWindow = this.DOMPopupSearchResultsWindow();\n"
-"\n"
-" if (domPopupSearchResultsWindow.style.display!='block')\n"
-" {\n"
-" var domSearchBox = this.DOMSearchBox();\n"
-" this.DOMSearchClose().style.display = 'inline';\n"
-" if (this.insideFrame)\n"
-" {\n"
-" var domPopupSearchResults = this.DOMPopupSearchResults();\n"
-" domPopupSearchResultsWindow.style.position = 'relative';\n"
-" domPopupSearchResultsWindow.style.display = 'block';\n"
-" var width = document.body.clientWidth - 8; // the -8 is for IE :-(\n"
-" domPopupSearchResultsWindow.style.width = width + 'px';\n"
-" domPopupSearchResults.style.width = width + 'px';\n"
-" }\n"
-" else\n"
-" {\n"
-" var domPopupSearchResults = this.DOMPopupSearchResults();\n"
-" var left = getXPos(domSearchBox) + 150; // domSearchBox.offsetWidth;\n"
-" var top = getYPos(domSearchBox) + 20; // domSearchBox.offsetHeight + 1;\n"
-" domPopupSearchResultsWindow.style.display = 'block';\n"
-" left -= domPopupSearchResults.offsetWidth;\n"
-" domPopupSearchResultsWindow.style.top = top + 'px';\n"
-" domPopupSearchResultsWindow.style.left = left + 'px';\n"
-" }\n"
-" }\n"
-"\n"
-" this.lastSearchValue = searchValue;\n"
-" this.lastResultsPage = resultsPage;\n"
-" }\n"
-"\n"
-" // -------- Activation Functions\n"
-"\n"
-" // Activates or deactivates the search panel, resetting things to \n"
-" // their default values if necessary. \n"
-" this.Activate = function(isActive)\n"
-" {\n"
-" if (isActive || // open it\n"
-" this.DOMPopupSearchResultsWindow().style.display == 'block' \n"
-" )\n"
-" {\n"
-" this.DOMSearchBox().className = 'MSearchBoxActive';\n"
-"\n"
-" var searchField = this.DOMSearchField();\n"
-"\n"
-" if (searchField.value == this.searchLabel) // clear \"Search\" term upon entry\n"
-" { \n"
-" searchField.value = ''; \n"
-" this.searchActive = true;\n"
-" }\n"
-" }\n"
-" else if (!isActive) // directly remove the panel\n"
-" {\n"
-" this.DOMSearchBox().className = 'MSearchBoxInactive';\n"
-" this.DOMSearchField().value = this.searchLabel;\n"
-" this.searchActive = false;\n"
-" this.lastSearchValue = ''\n"
-" this.lastResultsPage = '';\n"
-" }\n"
-" }\n"
-"}\n"
-"\n"
-"// -----------------------------------------------------------------------\n"
-"\n"
-"// The class that handles everything on the search results page.\n"
-"function SearchResults(name)\n"
-"{\n"
-" // The number of matches from the last run of <Search()>.\n"
-" this.lastMatchCount = 0;\n"
-" this.lastKey = 0;\n"
-" this.repeatOn = false;\n"
-"\n"
-" // Toggles the visibility of the passed element ID.\n"
-" this.FindChildElement = function(id)\n"
-" {\n"
-" var parentElement = document.getElementById(id);\n"
-" var element = parentElement.firstChild;\n"
-"\n"
-" while (element && element!=parentElement)\n"
-" {\n"
-" if (element.nodeName == 'DIV' && element.className == 'SRChildren')\n"
-" {\n"
-" return element;\n"
-" }\n"
-"\n"
-" if (element.nodeName == 'DIV' && element.hasChildNodes())\n"
-" { \n"
-" element = element.firstChild; \n"
-" }\n"
-" else if (element.nextSibling)\n"
-" { \n"
-" element = element.nextSibling; \n"
-" }\n"
-" else\n"
-" {\n"
-" do\n"
-" {\n"
-" element = element.parentNode;\n"
-" }\n"
-" while (element && element!=parentElement && !element.nextSibling);\n"
-"\n"
-" if (element && element!=parentElement)\n"
-" { \n"
-" element = element.nextSibling; \n"
-" }\n"
-" }\n"
-" }\n"
-" }\n"
-"\n"
-" this.Toggle = function(id)\n"
-" {\n"
-" var element = this.FindChildElement(id);\n"
-" if (element)\n"
-" {\n"
-" if (element.style.display == 'block')\n"
-" {\n"
-" element.style.display = 'none';\n"
-" }\n"
-" else\n"
-" {\n"
-" element.style.display = 'block';\n"
-" }\n"
-" }\n"
-" }\n"
-"\n"
-" // Searches for the passed string. If there is no parameter,\n"
-" // it takes it from the URL query.\n"
-" //\n"
-" // Always returns true, since other documents may try to call it\n"
-" // and that may or may not be possible.\n"
-" this.Search = function(search)\n"
-" {\n"
-" if (!search) // get search word from URL\n"
-" {\n"
-" search = window.location.search;\n"
-" search = search.substring(1); // Remove the leading '?'\n"
-" search = unescape(search);\n"
-" }\n"
-"\n"
-" search = search.replace(/^ +/, \"\"); // strip leading spaces\n"
-" search = search.replace(/ +$/, \"\"); // strip trailing spaces\n"
-" search = search.toLowerCase();\n"
-" search = convertToId(search);\n"
-"\n"
-" var resultRows = document.getElementsByTagName(\"div\");\n"
-" var matches = 0;\n"
-"\n"
-" var i = 0;\n"
-" while (i < resultRows.length)\n"
-" {\n"
-" var row = resultRows.item(i);\n"
-" if (row.className == \"SRResult\")\n"
-" {\n"
-" var rowMatchName = row.id.toLowerCase();\n"
-" rowMatchName = rowMatchName.replace(/^sr\\d*_/, ''); // strip 'sr123_'\n"
-"\n"
-" if (search.length<=rowMatchName.length && \n"
-" rowMatchName.substr(0, search.length)==search)\n"
-" {\n"
-" row.style.display = 'block';\n"
-" matches++;\n"
-" }\n"
-" else\n"
-" {\n"
-" row.style.display = 'none';\n"
-" }\n"
-" }\n"
-" i++;\n"
-" }\n"
-" document.getElementById(\"Searching\").style.display='none';\n"
-" if (matches == 0) // no results\n"
-" {\n"
-" document.getElementById(\"NoMatches\").style.display='block';\n"
-" }\n"
-" else // at least one result\n"
-" {\n"
-" document.getElementById(\"NoMatches\").style.display='none';\n"
-" }\n"
-" this.lastMatchCount = matches;\n"
-" return true;\n"
-" }\n"
-"\n"
-" // return the first item with index index or higher that is visible\n"
-" this.NavNext = function(index)\n"
-" {\n"
-" var focusItem;\n"
-" while (1)\n"
-" {\n"
-" var focusName = 'Item'+index;\n"
-" focusItem = document.getElementById(focusName);\n"
-" if (focusItem && focusItem.parentNode.parentNode.style.display=='block')\n"
-" {\n"
-" break;\n"
-" }\n"
-" else if (!focusItem) // last element\n"
-" {\n"
-" break;\n"
-" }\n"
-" focusItem=null;\n"
-" index++;\n"
-" }\n"
-" return focusItem;\n"
-" }\n"
-"\n"
-" this.NavPrev = function(index)\n"
-" {\n"
-" var focusItem;\n"
-" while (1)\n"
-" {\n"
-" var focusName = 'Item'+index;\n"
-" focusItem = document.getElementById(focusName);\n"
-" if (focusItem && focusItem.parentNode.parentNode.style.display=='block')\n"
-" {\n"
-" break;\n"
-" }\n"
-" else if (!focusItem) // last element\n"
-" {\n"
-" break;\n"
-" }\n"
-" focusItem=null;\n"
-" index--;\n"
-" }\n"
-" return focusItem;\n"
-" }\n"
-"\n"
-" this.ProcessKeys = function(e)\n"
-" {\n"
-" if (e.type == \"keydown\") \n"
-" {\n"
-" this.repeatOn = false;\n"
-" this.lastKey = e.keyCode;\n"
-" }\n"
-" else if (e.type == \"keypress\")\n"
-" {\n"
-" if (!this.repeatOn)\n"
-" {\n"
-" if (this.lastKey) this.repeatOn = true;\n"
-" return false; // ignore first keypress after keydown\n"
-" }\n"
-" }\n"
-" else if (e.type == \"keyup\")\n"
-" {\n"
-" this.lastKey = 0;\n"
-" this.repeatOn = false;\n"
-" }\n"
-" return this.lastKey!=0;\n"
-" }\n"
-"\n"
-" this.Nav = function(evt,itemIndex) \n"
-" {\n"
-" var e = (evt) ? evt : window.event; // for IE\n"
-" if (e.keyCode==13) return true;\n"
-" if (!this.ProcessKeys(e)) return false;\n"
-"\n"
-" if (this.lastKey==38) // Up\n"
-" {\n"
-" var newIndex = itemIndex-1;\n"
-" var focusItem = this.NavPrev(newIndex);\n"
-" if (focusItem)\n"
-" {\n"
-" var child = this.FindChildElement(focusItem.parentNode.parentNode.id);\n"
-" if (child && child.style.display == 'block') // children visible\n"
-" { \n"
-" var n=0;\n"
-" var tmpElem;\n"
-" while (1) // search for last child\n"
-" {\n"
-" tmpElem = document.getElementById('Item'+newIndex+'_c'+n);\n"
-" if (tmpElem)\n"
-" {\n"
-" focusItem = tmpElem;\n"
-" }\n"
-" else // found it!\n"
-" {\n"
-" break;\n"
-" }\n"
-" n++;\n"
-" }\n"
-" }\n"
-" }\n"
-" if (focusItem)\n"
-" {\n"
-" focusItem.focus();\n"
-" }\n"
-" else // return focus to search field\n"
-" {\n"
-" parent.document.getElementById(\"MSearchField\").focus();\n"
-" }\n"
-" }\n"
-" else if (this.lastKey==40) // Down\n"
-" {\n"
-" var newIndex = itemIndex+1;\n"
-" var focusItem;\n"
-" var item = document.getElementById('Item'+itemIndex);\n"
-" var elem = this.FindChildElement(item.parentNode.parentNode.id);\n"
-" if (elem && elem.style.display == 'block') // children visible\n"
-" {\n"
-" focusItem = document.getElementById('Item'+itemIndex+'_c0');\n"
-" }\n"
-" if (!focusItem) focusItem = this.NavNext(newIndex);\n"
-" if (focusItem) focusItem.focus();\n"
-" }\n"
-" else if (this.lastKey==39) // Right\n"
-" {\n"
-" var item = document.getElementById('Item'+itemIndex);\n"
-" var elem = this.FindChildElement(item.parentNode.parentNode.id);\n"
-" if (elem) elem.style.display = 'block';\n"
-" }\n"
-" else if (this.lastKey==37) // Left\n"
-" {\n"
-" var item = document.getElementById('Item'+itemIndex);\n"
-" var elem = this.FindChildElement(item.parentNode.parentNode.id);\n"
-" if (elem) elem.style.display = 'none';\n"
-" }\n"
-" else if (this.lastKey==27) // Escape\n"
-" {\n"
-" parent.searchBox.CloseResultsWindow();\n"
-" parent.document.getElementById(\"MSearchField\").focus();\n"
-" }\n"
-" else if (this.lastKey==13) // Enter\n"
-" {\n"
-" return true;\n"
-" }\n"
-" return false;\n"
-" }\n"
-"\n"
-" this.NavChild = function(evt,itemIndex,childIndex)\n"
-" {\n"
-" var e = (evt) ? evt : window.event; // for IE\n"
-" if (e.keyCode==13) return true;\n"
-" if (!this.ProcessKeys(e)) return false;\n"
-"\n"
-" if (this.lastKey==38) // Up\n"
-" {\n"
-" if (childIndex>0)\n"
-" {\n"
-" var newIndex = childIndex-1;\n"
-" document.getElementById('Item'+itemIndex+'_c'+newIndex).focus();\n"
-" }\n"
-" else // already at first child, jump to parent\n"
-" {\n"
-" document.getElementById('Item'+itemIndex).focus();\n"
-" }\n"
-" }\n"
-" else if (this.lastKey==40) // Down\n"
-" {\n"
-" var newIndex = childIndex+1;\n"
-" var elem = document.getElementById('Item'+itemIndex+'_c'+newIndex);\n"
-" if (!elem) // last child, jump to parent next parent\n"
-" {\n"
-" elem = this.NavNext(itemIndex+1);\n"
-" }\n"
-" if (elem)\n"
-" {\n"
-" elem.focus();\n"
-" } \n"
-" }\n"
-" else if (this.lastKey==27) // Escape\n"
-" {\n"
-" parent.searchBox.CloseResultsWindow();\n"
-" parent.document.getElementById(\"MSearchField\").focus();\n"
-" }\n"
-" else if (this.lastKey==13) // Enter\n"
-" {\n"
-" return true;\n"
-" }\n"
-" return false;\n"
-" }\n"
-"}\n"
-"\n"
-"function setKeyActions(elem,action)\n"
-"{\n"
-" elem.setAttribute('onkeydown',action);\n"
-" elem.setAttribute('onkeypress',action);\n"
-" elem.setAttribute('onkeyup',action);\n"
-"}\n"
-"\n"
-"function setClassAttr(elem,attr)\n"
-"{\n"
-" elem.setAttribute('class',attr);\n"
-" elem.setAttribute('className',attr);\n"
-"}\n"
-"\n"
-"function createResults()\n"
-"{\n"
-" var results = document.getElementById(\"SRResults\");\n"
-" for (var e=0; e<searchData.length; e++)\n"
-" {\n"
-" var id = searchData[e][0];\n"
-" var srResult = document.createElement('div');\n"
-" srResult.setAttribute('id','SR_'+id);\n"
-" setClassAttr(srResult,'SRResult');\n"
-" var srEntry = document.createElement('div');\n"
-" setClassAttr(srEntry,'SREntry');\n"
-" var srLink = document.createElement('a');\n"
-" srLink.setAttribute('id','Item'+e);\n"
-" setKeyActions(srLink,'return searchResults.Nav(event,'+e+')');\n"
-" setClassAttr(srLink,'SRSymbol');\n"
-" srLink.innerHTML = searchData[e][1][0];\n"
-" srEntry.appendChild(srLink);\n"
-" if (searchData[e][1].length==2) // single result\n"
-" {\n"
-" srLink.setAttribute('href',searchData[e][1][1][0]);\n"
-" if (searchData[e][1][1][1])\n"
-" {\n"
-" srLink.setAttribute('target','_parent');\n"
-" }\n"
-" var srScope = document.createElement('span');\n"
-" setClassAttr(srScope,'SRScope');\n"
-" srScope.innerHTML = searchData[e][1][1][2];\n"
-" srEntry.appendChild(srScope);\n"
-" }\n"
-" else // multiple results\n"
-" {\n"
-" srLink.setAttribute('href','javascript:searchResults.Toggle(\"SR_'+id+'\")');\n"
-" var srChildren = document.createElement('div');\n"
-" setClassAttr(srChildren,'SRChildren');\n"
-" for (var c=0; c<searchData[e][1].length-1; c++)\n"
-" {\n"
-" var srChild = document.createElement('a');\n"
-" srChild.setAttribute('id','Item'+e+'_c'+c);\n"
-" setKeyActions(srChild,'return searchResults.NavChild(event,'+e+','+c+')');\n"
-" setClassAttr(srChild,'SRScope');\n"
-" srChild.setAttribute('href',searchData[e][1][c+1][0]);\n"
-" if (searchData[e][1][c+1][1])\n"
-" {\n"
-" srChild.setAttribute('target','_parent');\n"
-" }\n"
-" srChild.innerHTML = searchData[e][1][c+1][2];\n"
-" srChildren.appendChild(srChild);\n"
-" }\n"
-" srEntry.appendChild(srChildren);\n"
-" }\n"
-" srResult.appendChild(srEntry);\n"
-" results.appendChild(srResult);\n"
-" }\n"
-"}\n"
-"\n"
diff --git a/trunk/src/search_opensearch.php b/trunk/src/search_opensearch.php
deleted file mode 100644
index 3b59516..0000000
--- a/trunk/src/search_opensearch.php
+++ /dev/null
@@ -1,127 +0,0 @@
-<script language="PHP">
-require "search-functions.php";
-
-$mode = array_key_exists('v', $_GET)?$_GET['v']:"";
-$query = array_key_exists('query', $_GET)?$_GET['query']:"";
-
-$query_results = run_query($query);
-
-switch ($mode)
-{
- case "opensearch.xml":
- opensearch_description();
- break;
- case "json":
- opensearch_json_results($query, $query_results);
- break;
- case "xml":
- opensearch_xml_results($query, $query_results);
- break;
- default:
- invalid_format($query, $query_results);
- break;
-}
-
-function opensearch_description()
-{
- global $config;
- global $translator;
-
- $shortname = $translator['search']." ".$config['PROJECT_NAME'];
- $link = "http://".$_SERVER['HTTP_HOST'].dirname($_SERVER['SCRIPT_NAME']);
- header("Content-Type: application/xml");
- echo <<<END_OPENSEARCH
-<?xml version="1.0" encoding="UTF-8"?>
-<OpenSearchDescription xmlns="http://a9.com/-/spec/opensearch/1.1/">
-<ShortName>$shortname</ShortName>
-<Description>Doxygen Search</Description>
-<InputEncoding>UTF-8</InputEncoding>
-<!--
-<Image height="16" width="16" type="image/x-icon">
-http://dev.squello.com/doc/html/favicon.ico</Image>
--->
-<Url type="text/html" method="GET"
-template="$link/search.php?query={searchTerms}" />
-<Url type="application/x-suggestions+json" method="GET"
-template="$link/search-opensearch.php?v=json&amp;query={searchTerms}" />
-<Url type="application/x-suggestions+xml" method="GET"
-template="$link/search-opensearch.php?v=xml&amp;query={searchTerms}" />
-</OpenSearchDescription>
-END_OPENSEARCH;
-}
-
-function opensearch_xml_results($query, array $results)
-{
- // Much as I hate copy'n'paste code re-use, this is for testing;
- // I expect a richer version to come soon.
- // Although I hate that IE does this richer than FF more...
- $qs_results = array();
- foreach ($results as $i => $val)
- {
- foreach ($val['words'] as $j => $word)
- {
- if (array_key_exists($word, $qs_results))
- $qs_results[$word['match']]++;
- else
- $qs_results[$word['match']] = 1;
- }
- }
- $result = <<<END_FRAG
-<?xml version="1.0"?>
-<SearchSuggestion xmlns="http://schemas.microsoft.com/Search/2008/suggestions">
-<Query>$query</Query>
-<Section>
-END_FRAG;
- foreach ($qs_results as $word => $count)
- {
- $result .= <<<END_FRAG
-<Item>
-<Text>$word</Text>
-<Description>$count results</Description>
-</Item>
-END_FRAG;
- }
- $result .= <<<END_FRAG
-</Section>
-</SearchSuggestion>
-END_FRAG;
- echo $result;
-}
-
-function opensearch_json_results($query, array $results)
-{
- $qs_results = array();
- foreach ($results as $i => $val)
- {
- foreach ($val['words'] as $j => $word)
- {
- if (array_key_exists($word, $qs_results))
- $qs_results[$word['match']]++;
- else
- $qs_results[$word['match']] = 1;
- }
- }
- $result = '["'.$query.'", [';
- $json_words = "";
- $json_descriptions = "";
- $i = 0;
- foreach ($qs_results as $word => $count)
- {
- if ($i != 0)
- {
- $json_words .= ", ";
- $json_descriptions .= ", ";
- }
- $json_words .= '"'.$word.'"';
- $json_descriptions .= '"'.$count.' result'.($count==1?'':'s').'"';
- $i++;
- }
- print "[\"$query\", [$json_words],[$json_descriptions]]";
-}
-
-function invalid_format($query, array $results)
-{
- print "Search results for '$query':\n\n";
- print_r($results);
-}
-</script>
diff --git a/trunk/src/search_opensearch_php.h b/trunk/src/search_opensearch_php.h
deleted file mode 100644
index b1e9529..0000000
--- a/trunk/src/search_opensearch_php.h
+++ /dev/null
@@ -1,127 +0,0 @@
-"<script language=\"PHP\">\n"
-"require \"search-functions.php\";\n"
-"\n"
-"$mode = array_key_exists('v', $_GET)?$_GET['v']:\"\";\n"
-"$query = array_key_exists('query', $_GET)?$_GET['query']:\"\";\n"
-"\n"
-"$query_results = run_query($query);\n"
-"\n"
-"switch ($mode)\n"
-"{\n"
-" case \"opensearch.xml\":\n"
-" opensearch_description();\n"
-" break;\n"
-" case \"json\":\n"
-" opensearch_json_results($query, $query_results);\n"
-" break;\n"
-" case \"xml\":\n"
-" opensearch_xml_results($query, $query_results);\n"
-" break;\n"
-" default:\n"
-" invalid_format($query, $query_results);\n"
-" break;\n"
-"}\n"
-"\n"
-"function opensearch_description()\n"
-"{\n"
-" global $config;\n"
-" global $translator;\n"
-"\n"
-" $shortname = $translator['search'].\" \".$config['PROJECT_NAME'];\n"
-" $link = \"http://\".$_SERVER['HTTP_HOST'].dirname($_SERVER['SCRIPT_NAME']);\n"
-" header(\"Content-Type: application/xml\");\n"
-" echo <<<END_OPENSEARCH\n"
-"<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n"
-"<OpenSearchDescription xmlns=\"http://a9.com/-/spec/opensearch/1.1/\">\n"
-"<ShortName>$shortname</ShortName>\n"
-"<Description>Doxygen Search</Description>\n"
-"<InputEncoding>UTF-8</InputEncoding>\n"
-"<!--\n"
-"<Image height=\"16\" width=\"16\" type=\"image/x-icon\">\n"
-"http://dev.squello.com/doc/html/favicon.ico</Image>\n"
-"-->\n"
-"<Url type=\"text/html\" method=\"GET\"\n"
-"template=\"$link/search.php?query={searchTerms}\" />\n"
-"<Url type=\"application/x-suggestions+json\" method=\"GET\"\n"
-"template=\"$link/search-opensearch.php?v=json&amp;query={searchTerms}\" />\n"
-"<Url type=\"application/x-suggestions+xml\" method=\"GET\"\n"
-"template=\"$link/search-opensearch.php?v=xml&amp;query={searchTerms}\" />\n"
-"</OpenSearchDescription>\n"
-"END_OPENSEARCH;\n"
-"}\n"
-"\n"
-"function opensearch_xml_results($query, array $results)\n"
-"{\n"
-" // Much as I hate copy'n'paste code re-use, this is for testing;\n"
-" // I expect a richer version to come soon.\n"
-" // Although I hate that IE does this richer than FF more...\n"
-" $qs_results = array();\n"
-" foreach ($results as $i => $val)\n"
-" {\n"
-" foreach ($val['words'] as $j => $word)\n"
-" {\n"
-" if (array_key_exists($word, $qs_results))\n"
-" $qs_results[$word['match']]++;\n"
-" else\n"
-" $qs_results[$word['match']] = 1;\n"
-" }\n"
-" }\n"
-" $result = <<<END_FRAG\n"
-"<?xml version=\"1.0\"?>\n"
-"<SearchSuggestion xmlns=\"http://schemas.microsoft.com/Search/2008/suggestions\">\n"
-"<Query>$query</Query>\n"
-"<Section>\n"
-"END_FRAG;\n"
-" foreach ($qs_results as $word => $count)\n"
-" {\n"
-" $result .= <<<END_FRAG\n"
-"<Item>\n"
-"<Text>$word</Text>\n"
-"<Description>$count results</Description>\n"
-"</Item>\n"
-"END_FRAG;\n"
-" }\n"
-" $result .= <<<END_FRAG\n"
-"</Section>\n"
-"</SearchSuggestion>\n"
-"END_FRAG;\n"
-" echo $result;\n"
-"}\n"
-"\n"
-"function opensearch_json_results($query, array $results)\n"
-"{\n"
-" $qs_results = array();\n"
-" foreach ($results as $i => $val)\n"
-" {\n"
-" foreach ($val['words'] as $j => $word)\n"
-" {\n"
-" if (array_key_exists($word, $qs_results))\n"
-" $qs_results[$word['match']]++;\n"
-" else\n"
-" $qs_results[$word['match']] = 1;\n"
-" }\n"
-" }\n"
-" $result = '[\"'.$query.'\", [';\n"
-" $json_words = \"\";\n"
-" $json_descriptions = \"\";\n"
-" $i = 0;\n"
-" foreach ($qs_results as $word => $count)\n"
-" {\n"
-" if ($i != 0)\n"
-" {\n"
-" $json_words .= \", \";\n"
-" $json_descriptions .= \", \";\n"
-" }\n"
-" $json_words .= '\"'.$word.'\"';\n"
-" $json_descriptions .= '\"'.$count.' result'.($count==1?'':'s').'\"';\n"
-" $i++;\n"
-" }\n"
-" print \"[\\\"$query\\\", [$json_words],[$json_descriptions]]\";\n"
-"}\n"
-"\n"
-"function invalid_format($query, array $results)\n"
-"{\n"
-" print \"Search results for '$query':\\n\\n\";\n"
-" print_r($results);\n"
-"}\n"
-"</script>\n"
diff --git a/trunk/src/searchindex.cpp b/trunk/src/searchindex.cpp
deleted file mode 100644
index 6757711..0000000
--- a/trunk/src/searchindex.cpp
+++ /dev/null
@@ -1,1084 +0,0 @@
-/******************************************************************************
- *
- *
- *
- * Copyright (C) 1997-2012 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.
- *
- */
-
-#include "qtbc.h"
-#include "searchindex.h"
-#include "config.h"
-#include "util.h"
-#include <qfile.h>
-#include <ctype.h>
-#include <qregexp.h>
-
-
-// file format: (all multi-byte values are stored in big endian format)
-// 4 byte header
-// 256*256*4 byte index (4 bytes)
-// for each index entry: a zero terminated list of words
-// for each word: a \0 terminated string + 4 byte offset to the stats info
-// padding bytes to align at 4 byte boundary
-// for each word: the number of urls (4 bytes)
-// + for each url containing the word 8 bytes statistics
-// (4 bytes index to url string + 4 bytes frequency counter)
-// for each url: a \0 terminated string
-
-const int numIndexEntries = 256*256;
-
-//--------------------------------------------------------------------
-
-IndexWord::IndexWord(const char *word) : m_word(word), m_urls(17)
-{
- m_urls.setAutoDelete(TRUE);
- //printf("IndexWord::IndexWord(%s)\n",word);
-}
-
-void IndexWord::addUrlIndex(int idx,bool hiPriority)
-{
- //printf("IndexWord::addUrlIndex(%d,%d)\n",idx,hiPriority);
- URLInfo *ui = m_urls.find(idx);
- if (ui==0)
- {
- //printf("URLInfo::URLInfo(%d)\n",idx);
- ui=new URLInfo(idx,0);
- m_urls.insert(idx,ui);
- }
- ui->freq+=2;
- if (hiPriority) ui->freq|=1; // mark as high priority document
-}
-
-//--------------------------------------------------------------------
-
-SearchIndex::SearchIndex() : m_words(328829), m_index(numIndexEntries), m_urlIndex(-1)
-{
- int i;
- m_words.setAutoDelete(TRUE);
- m_urls.setAutoDelete(TRUE);
- m_index.setAutoDelete(TRUE);
- for (i=0;i<numIndexEntries;i++) m_index.insert(i,new QList<IndexWord>);
-}
-
-void SearchIndex::setCurrentDoc(const char *name,const char *baseName,const char *anchor)
-{
- if (name==0 || baseName==0) return;
- //printf("SearchIndex::setCurrentDoc(%s,%s,%s)\n",name,baseName,anchor);
- QCString url=baseName+Config_getString("HTML_FILE_EXTENSION");
- if (anchor) url+=(QCString)"#"+anchor;
- m_urlIndex++;
- m_urls.insert(m_urlIndex,new URL(name,url));
-}
-
-static int charsToIndex(const char *word)
-{
- if (word==0) return -1;
-
- // Fast string hashing algorithm
- //register ushort h=0;
- //const char *k = word;
- //ushort mask=0xfc00;
- //while ( *k )
- //{
- // h = (h&mask)^(h<<6)^(*k++);
- //}
- //return h;
-
- // Simple hashing that allows for substring searching
- uint c1=word[0];
- if (c1==0) return -1;
- uint c2=word[1];
- if (c2==0) return -1;
- return c1*256+c2;
-}
-
-void SearchIndex::addWord(const char *word,bool hiPriority,bool recurse)
-{
- static QRegExp nextPart("[_a-z:][A-Z]");
- //printf("SearchIndex::addWord(%s,%d)\n",word,hiPriority);
- QString wStr(word);
- if (wStr.isEmpty()) return;
- wStr=wStr.lower();
- IndexWord *w = m_words[wStr];
- if (w==0)
- {
- int idx=charsToIndex(wStr);
- if (idx<0) return;
- w = new IndexWord(wStr);
- //fprintf(stderr,"addWord(%s) at index %d\n",word,idx);
- m_index[idx]->append(w);
- m_words.insert(wStr,w);
- }
- w->addUrlIndex(m_urlIndex,hiPriority);
- int i;
- bool found=FALSE;
- if (!recurse) // the first time we check if we can strip the prefix
- {
- i=getPrefixIndex(word);
- if (i>0)
- {
- addWord(word+i,hiPriority,TRUE);
- found=TRUE;
- }
- }
- if (!found) // no prefix stripped
- {
- if ((i=nextPart.match(word))>=1)
- {
- addWord(word+i+1,hiPriority,TRUE);
- }
- }
-}
-
-
-static void writeInt(QFile &f,int index)
-{
- f.putch(((uint)index)>>24);
- f.putch((((uint)index)>>16)&0xff);
- f.putch((((uint)index)>>8)&0xff);
- f.putch(((uint)index)&0xff);
-}
-
-static void writeString(QFile &f,const char *s)
-{
- const char *p = s;
- while (*p) f.putch(*p++);
- f.putch(0);
-}
-
-void SearchIndex::write(const char *fileName)
-{
- int i;
- int size=4; // for the header
- size+=4*numIndexEntries; // for the index
- int wordsOffset = size;
- // first pass: compute the size of the wordlist
- for (i=0;i<numIndexEntries;i++)
- {
- QList<IndexWord> *wlist = m_index[i];
- if (!wlist->isEmpty())
- {
- QListIterator<IndexWord> iwi(*wlist);
- IndexWord *iw;
- for (iwi.toFirst();(iw=iwi.current());++iwi)
- {
- int ws = iw->word().length()+1;
- size+=ws+4; // word + url info list offset
- }
- size+=1; // zero list terminator
- }
- }
-
- // second pass: compute the offsets in the index
- int indexOffsets[numIndexEntries];
- int offset=wordsOffset;
- for (i=0;i<numIndexEntries;i++)
- {
- QList<IndexWord> *wlist = m_index[i];
- if (!wlist->isEmpty())
- {
- indexOffsets[i]=offset;
- QListIterator<IndexWord> iwi(*wlist);
- IndexWord *iw;
- for (iwi.toFirst();(iw=iwi.current());++iwi)
- {
- offset+= iw->word().length()+1;
- offset+=4; // word + offset to url info array
- }
- offset+=1; // zero list terminator
- }
- else
- {
- indexOffsets[i]=0;
- }
- }
- int padding = size;
- size = (size+3)&~3; // round up to 4 byte boundary
- padding = size - padding;
-
- //int statsOffset = size;
- QDictIterator<IndexWord> wdi(m_words);
- //IndexWord *iw;
- int *wordStatOffsets = new int[m_words.count()];
-
- int count=0;
-
- // third pass: compute offset to stats info for each word
- for (i=0;i<numIndexEntries;i++)
- {
- QList<IndexWord> *wlist = m_index[i];
- if (!wlist->isEmpty())
- {
- QListIterator<IndexWord> iwi(*wlist);
- IndexWord *iw;
- for (iwi.toFirst();(iw=iwi.current());++iwi)
- {
- //printf("wordStatOffsets[%d]=%d\n",count,size);
- wordStatOffsets[count++] = size;
- size+=4+iw->urls().count()*8; // count + (url_index,freq) per url
- }
- }
- }
- int *urlOffsets = new int[m_urls.count()];
- //int urlsOffset = size;
- QIntDictIterator<URL> udi(m_urls);
- URL *url;
- for (udi.toFirst();(url=udi.current());++udi)
- {
- urlOffsets[udi.currentKey()]=size;
- size+=url->name.length()+1+
- url->url.length()+1;
- }
- //printf("Total size %x bytes (word=%x stats=%x urls=%x)\n",size,wordsOffset,statsOffset,urlsOffset);
- QFile f(fileName);
- if (f.open(IO_WriteOnly))
- {
- // write header
- f.putch('D'); f.putch('O'); f.putch('X'); f.putch('S');
- // write index
- for (i=0;i<numIndexEntries;i++)
- {
- writeInt(f,indexOffsets[i]);
- }
- // write word lists
- count=0;
- for (i=0;i<numIndexEntries;i++)
- {
- QList<IndexWord> *wlist = m_index[i];
- if (!wlist->isEmpty())
- {
- QListIterator<IndexWord> iwi(*wlist);
- IndexWord *iw;
- for (iwi.toFirst();(iw=iwi.current());++iwi)
- {
- writeString(f,iw->word());
- writeInt(f,wordStatOffsets[count++]);
- }
- f.putch(0);
- }
- }
- // write extra padding bytes
- for (i=0;i<padding;i++) f.putch(0);
- // write word statistics
- for (i=0;i<numIndexEntries;i++)
- {
- QList<IndexWord> *wlist = m_index[i];
- if (!wlist->isEmpty())
- {
- QListIterator<IndexWord> iwi(*wlist);
- IndexWord *iw;
- for (iwi.toFirst();(iw=iwi.current());++iwi)
- {
- int numUrls = iw->urls().count();
- writeInt(f,numUrls);
- QIntDictIterator<URLInfo> uli(iw->urls());
- URLInfo *ui;
- for (uli.toFirst();(ui=uli.current());++uli)
- {
- writeInt(f,urlOffsets[ui->urlIdx]);
- writeInt(f,ui->freq);
- }
- }
- }
- }
- // write urls
- QIntDictIterator<URL> udi(m_urls);
- URL *url;
- for (udi.toFirst();(url=udi.current());++udi)
- {
- writeString(f,url->name);
- writeString(f,url->url);
- }
- }
-
- delete[] urlOffsets;
- delete[] wordStatOffsets;
-}
-
-//---------------------------------------------------------------------------
-// the following part is for the javascript based search engine
-
-#include "memberdef.h"
-#include "namespacedef.h"
-#include "pagedef.h"
-#include "classdef.h"
-#include "filedef.h"
-#include "language.h"
-#include "doxygen.h"
-#include "message.h"
-
-static const char search_script[]=
-#include "search_js.h"
-;
-
-#define MEMBER_INDEX_ENTRIES 256
-
-#define NUM_SEARCH_INDICES 15
-#define SEARCH_INDEX_ALL 0
-#define SEARCH_INDEX_CLASSES 1
-#define SEARCH_INDEX_NAMESPACES 2
-#define SEARCH_INDEX_FILES 3
-#define SEARCH_INDEX_FUNCTIONS 4
-#define SEARCH_INDEX_VARIABLES 5
-#define SEARCH_INDEX_TYPEDEFS 6
-#define SEARCH_INDEX_ENUMS 7
-#define SEARCH_INDEX_ENUMVALUES 8
-#define SEARCH_INDEX_PROPERTIES 9
-#define SEARCH_INDEX_EVENTS 10
-#define SEARCH_INDEX_RELATED 11
-#define SEARCH_INDEX_DEFINES 12
-#define SEARCH_INDEX_GROUPS 13
-#define SEARCH_INDEX_PAGES 14
-
-class SearchIndexList : public SDict< QList<Definition> >
-{
- public:
- SearchIndexList(int size=17) : SDict< QList<Definition> >(size,FALSE)
- {
- setAutoDelete(TRUE);
- }
- ~SearchIndexList() {}
- void append(Definition *d)
- {
- QList<Definition> *l = find(d->name());
- if (l==0)
- {
- l=new QList<Definition>;
- SDict< QList<Definition> >::append(d->name(),l);
- }
- l->append(d);
- }
- int compareItems(GCI item1, GCI item2)
- {
- QList<Definition> *md1=(QList<Definition> *)item1;
- QList<Definition> *md2=(QList<Definition> *)item2;
- QCString n1 = md1->first()->localName();
- QCString n2 = md2->first()->localName();
- return stricmp(n1.data(),n2.data());
- }
-};
-
-static void addMemberToSearchIndex(
- SearchIndexList symbols[NUM_SEARCH_INDICES][MEMBER_INDEX_ENTRIES],
- int symbolCount[NUM_SEARCH_INDICES],
- MemberDef *md)
-{
- static bool hideFriendCompounds = Config_getBool("HIDE_FRIEND_COMPOUNDS");
- bool isLinkable = md->isLinkable();
- ClassDef *cd=0;
- NamespaceDef *nd=0;
- FileDef *fd=0;
- GroupDef *gd=0;
- if (isLinkable &&
- (
- ((cd=md->getClassDef()) && cd->isLinkable() && cd->templateMaster()==0) ||
- ((gd=md->getGroupDef()) && gd->isLinkable())
- )
- )
- {
- QCString n = md->name();
- uchar charCode = (uchar)n.at(0);
- uint letter = charCode<128 ? tolower(charCode) : charCode;
- if (!n.isEmpty())
- {
- bool isFriendToHide = hideFriendCompounds &&
- (QCString(md->typeString())=="friend class" ||
- QCString(md->typeString())=="friend struct" ||
- QCString(md->typeString())=="friend union");
- if (!(md->isFriend() && isFriendToHide))
- {
- symbols[SEARCH_INDEX_ALL][letter].append(md);
- symbolCount[SEARCH_INDEX_ALL]++;
- }
- if (md->isFunction() || md->isSlot() || md->isSignal())
- {
- symbols[SEARCH_INDEX_FUNCTIONS][letter].append(md);
- symbolCount[SEARCH_INDEX_FUNCTIONS]++;
- }
- else if (md->isVariable())
- {
- symbols[SEARCH_INDEX_VARIABLES][letter].append(md);
- symbolCount[SEARCH_INDEX_VARIABLES]++;
- }
- else if (md->isTypedef())
- {
- symbols[SEARCH_INDEX_TYPEDEFS][letter].append(md);
- symbolCount[SEARCH_INDEX_TYPEDEFS]++;
- }
- else if (md->isEnumerate())
- {
- symbols[SEARCH_INDEX_ENUMS][letter].append(md);
- symbolCount[SEARCH_INDEX_ENUMS]++;
- }
- else if (md->isEnumValue())
- {
- symbols[SEARCH_INDEX_ENUMVALUES][letter].append(md);
- symbolCount[SEARCH_INDEX_ENUMVALUES]++;
- }
- else if (md->isProperty())
- {
- symbols[SEARCH_INDEX_PROPERTIES][letter].append(md);
- symbolCount[SEARCH_INDEX_PROPERTIES]++;
- }
- else if (md->isEvent())
- {
- symbols[SEARCH_INDEX_EVENTS][letter].append(md);
- symbolCount[SEARCH_INDEX_EVENTS]++;
- }
- else if (md->isRelated() || md->isForeign() ||
- (md->isFriend() && !isFriendToHide))
- {
- symbols[SEARCH_INDEX_RELATED][letter].append(md);
- symbolCount[SEARCH_INDEX_RELATED]++;
- }
- }
- }
- else if (isLinkable &&
- (((nd=md->getNamespaceDef()) && nd->isLinkable()) ||
- ((fd=md->getFileDef()) && fd->isLinkable())
- )
- )
- {
- QCString n = md->name();
- uchar charCode = (uchar)n.at(0);
- uint letter = charCode<128 ? tolower(charCode) : charCode;
- if (!n.isEmpty())
- {
- symbols[SEARCH_INDEX_ALL][letter].append(md);
- symbolCount[SEARCH_INDEX_ALL]++;
-
- if (md->isFunction())
- {
- symbols[SEARCH_INDEX_FUNCTIONS][letter].append(md);
- symbolCount[SEARCH_INDEX_FUNCTIONS]++;
- }
- else if (md->isVariable())
- {
- symbols[SEARCH_INDEX_VARIABLES][letter].append(md);
- symbolCount[SEARCH_INDEX_VARIABLES]++;
- }
- else if (md->isTypedef())
- {
- symbols[SEARCH_INDEX_TYPEDEFS][letter].append(md);
- symbolCount[SEARCH_INDEX_TYPEDEFS]++;
- }
- else if (md->isEnumerate())
- {
- symbols[SEARCH_INDEX_ENUMS][letter].append(md);
- symbolCount[SEARCH_INDEX_ENUMS]++;
- }
- else if (md->isEnumValue())
- {
- symbols[SEARCH_INDEX_ENUMVALUES][letter].append(md);
- symbolCount[SEARCH_INDEX_ENUMVALUES]++;
- }
- else if (md->isDefine())
- {
- symbols[SEARCH_INDEX_DEFINES][letter].append(md);
- symbolCount[SEARCH_INDEX_DEFINES]++;
- }
- }
- }
-}
-
-static QCString searchId(const QCString &s)
-{
- int c;
- uint i;
- QCString result;
- for (i=0;i<s.length();i++)
- {
- c=s.at(i);
- if ((c>='0' && c<='9') || (c>='A' && c<='Z') || (c>='a' && c<='z'))
- {
- result+=(char)tolower(c);
- }
- else
- {
- char val[4];
- sprintf(val,"_%02x",(uchar)c);
- result+=val;
- }
- }
- return result;
-}
-
-static int g_searchIndexCount[NUM_SEARCH_INDICES];
-static SearchIndexList g_searchIndexSymbols[NUM_SEARCH_INDICES][MEMBER_INDEX_ENTRIES];
-static const char *g_searchIndexName[NUM_SEARCH_INDICES] =
-{
- "all",
- "classes",
- "namespaces",
- "files",
- "functions",
- "variables",
- "typedefs",
- "enums",
- "enumvalues",
- "properties",
- "events",
- "related",
- "defines",
- "groups",
- "pages"
-};
-
-
-class SearchIndexCategoryMapping
-{
- public:
- SearchIndexCategoryMapping()
- {
- categoryLabel[SEARCH_INDEX_ALL] = theTranslator->trAll();
- categoryLabel[SEARCH_INDEX_CLASSES] = theTranslator->trClasses();
- categoryLabel[SEARCH_INDEX_NAMESPACES] = theTranslator->trNamespace(TRUE,FALSE);
- categoryLabel[SEARCH_INDEX_FILES] = theTranslator->trFile(TRUE,FALSE);
- categoryLabel[SEARCH_INDEX_FUNCTIONS] = theTranslator->trFunctions();
- categoryLabel[SEARCH_INDEX_VARIABLES] = theTranslator->trVariables();
- categoryLabel[SEARCH_INDEX_TYPEDEFS] = theTranslator->trTypedefs();
- categoryLabel[SEARCH_INDEX_ENUMS] = theTranslator->trEnumerations();
- categoryLabel[SEARCH_INDEX_ENUMVALUES] = theTranslator->trEnumerationValues();
- categoryLabel[SEARCH_INDEX_PROPERTIES] = theTranslator->trProperties();
- categoryLabel[SEARCH_INDEX_EVENTS] = theTranslator->trEvents();
- categoryLabel[SEARCH_INDEX_RELATED] = theTranslator->trFriends();
- categoryLabel[SEARCH_INDEX_DEFINES] = theTranslator->trDefines();
- categoryLabel[SEARCH_INDEX_GROUPS] = theTranslator->trGroup(TRUE,FALSE);
- categoryLabel[SEARCH_INDEX_PAGES] = theTranslator->trPage(TRUE,FALSE);
- }
- QCString categoryLabel[NUM_SEARCH_INDICES];
-};
-
-void writeJavascriptSearchIndex()
-{
- if (!Config_getBool("GENERATE_HTML")) return;
-
- // index classes
- ClassSDict::Iterator cli(*Doxygen::classSDict);
- ClassDef *cd;
- for (;(cd=cli.current());++cli)
- {
- uchar charCode = (uchar)cd->localName().at(0);
- uint letter = charCode<128 ? tolower(charCode) : charCode;
- if (cd->isLinkable() && isId(letter))
- {
- g_searchIndexSymbols[SEARCH_INDEX_ALL][letter].append(cd);
- g_searchIndexSymbols[SEARCH_INDEX_CLASSES][letter].append(cd);
- g_searchIndexCount[SEARCH_INDEX_ALL]++;
- g_searchIndexCount[SEARCH_INDEX_CLASSES]++;
- }
- }
-
- // index namespaces
- NamespaceSDict::Iterator nli(*Doxygen::namespaceSDict);
- NamespaceDef *nd;
- for (;(nd=nli.current());++nli)
- {
- uchar charCode = (uchar)nd->name().at(0);
- uint letter = charCode<128 ? tolower(charCode) : charCode;
- if (nd->isLinkable() && isId(letter))
- {
- g_searchIndexSymbols[SEARCH_INDEX_ALL][letter].append(nd);
- g_searchIndexSymbols[SEARCH_INDEX_NAMESPACES][letter].append(nd);
- g_searchIndexCount[SEARCH_INDEX_ALL]++;
- g_searchIndexCount[SEARCH_INDEX_NAMESPACES]++;
- }
- }
-
- // index files
- FileNameListIterator fnli(*Doxygen::inputNameList);
- FileName *fn;
- for (;(fn=fnli.current());++fnli)
- {
- FileNameIterator fni(*fn);
- FileDef *fd;
- for (;(fd=fni.current());++fni)
- {
- uchar charCode = (uchar)fd->name().at(0);
- uint letter = charCode<128 ? tolower(charCode) : charCode;
- if (fd->isLinkable() && isId(letter))
- {
- g_searchIndexSymbols[SEARCH_INDEX_ALL][letter].append(fd);
- g_searchIndexSymbols[SEARCH_INDEX_FILES][letter].append(fd);
- g_searchIndexCount[SEARCH_INDEX_ALL]++;
- g_searchIndexCount[SEARCH_INDEX_FILES]++;
- }
- }
- }
-
- // index class members
- {
- MemberNameSDict::Iterator mnli(*Doxygen::memberNameSDict);
- MemberName *mn;
- // for each member name
- for (mnli.toFirst();(mn=mnli.current());++mnli)
- {
- MemberDef *md;
- MemberNameIterator mni(*mn);
- // for each member definition
- for (mni.toFirst();(md=mni.current());++mni)
- {
- addMemberToSearchIndex(g_searchIndexSymbols,g_searchIndexCount,md);
- }
- }
- }
-
- // index file/namespace members
- {
- MemberNameSDict::Iterator fnli(*Doxygen::functionNameSDict);
- MemberName *mn;
- // for each member name
- for (fnli.toFirst();(mn=fnli.current());++fnli)
- {
- MemberDef *md;
- MemberNameIterator mni(*mn);
- // for each member definition
- for (mni.toFirst();(md=mni.current());++mni)
- {
- addMemberToSearchIndex(g_searchIndexSymbols,g_searchIndexCount,md);
- }
- }
- }
-
- // index groups
- GroupSDict::Iterator gli(*Doxygen::groupSDict);
- GroupDef *gd;
- for (gli.toFirst();(gd=gli.current());++gli)
- {
- if (gd->isLinkable())
- {
- QCString title = gd->groupTitle();
- if (!title.isEmpty()) // TODO: able searching for all word in the title
- {
- uchar charCode = title.at(0);
- uint letter = charCode<128 ? tolower(charCode) : charCode;
- if (isId(letter))
- {
- g_searchIndexSymbols[SEARCH_INDEX_ALL][letter].append(gd);
- g_searchIndexSymbols[SEARCH_INDEX_GROUPS][letter].append(gd);
- g_searchIndexCount[SEARCH_INDEX_ALL]++;
- g_searchIndexCount[SEARCH_INDEX_GROUPS]++;
- }
- }
- }
- }
-
- // index pages
- PageSDict::Iterator pdi(*Doxygen::pageSDict);
- PageDef *pd=0;
- for (pdi.toFirst();(pd=pdi.current());++pdi)
- {
- if (pd->isLinkable())
- {
- QCString title = pd->title();
- if (!title.isEmpty())
- {
- uchar charCode = title.at(0);
- uint letter = charCode<128 ? tolower(charCode) : charCode;
- if (isId(letter))
- {
- g_searchIndexSymbols[SEARCH_INDEX_ALL][letter].append(pd);
- g_searchIndexSymbols[SEARCH_INDEX_PAGES][letter].append(pd);
- g_searchIndexCount[SEARCH_INDEX_ALL]++;
- g_searchIndexCount[SEARCH_INDEX_PAGES]++;
- }
- }
- }
- }
- if (Doxygen::mainPage)
- {
- QCString title = Doxygen::mainPage->title();
- if (!title.isEmpty())
- {
- uchar charCode = title.at(0);
- uint letter = charCode<128 ? tolower(charCode) : charCode;
- if (isId(letter))
- {
- g_searchIndexSymbols[SEARCH_INDEX_ALL][letter].append(Doxygen::mainPage);
- g_searchIndexSymbols[SEARCH_INDEX_PAGES][letter].append(Doxygen::mainPage);
- g_searchIndexCount[SEARCH_INDEX_ALL]++;
- g_searchIndexCount[SEARCH_INDEX_PAGES]++;
- }
- }
- }
-
- // sort all lists
- int i,p;
- for (i=0;i<NUM_SEARCH_INDICES;i++)
- {
- for (p=0;p<MEMBER_INDEX_ENTRIES;p++)
- {
- if (g_searchIndexSymbols[i][p].count()>0)
- {
- g_searchIndexSymbols[i][p].sort();
- }
- }
- }
-
- // write index files
- QCString searchDirName = Config_getString("HTML_OUTPUT")+"/search";
-
- for (i=0;i<NUM_SEARCH_INDICES;i++)
- {
- for (p=0;p<MEMBER_INDEX_ENTRIES;p++)
- {
- if (g_searchIndexSymbols[i][p].count()>0)
- {
- QCString baseName;
- baseName.sprintf("%s_%02x",g_searchIndexName[i],p);
-
- QCString fileName = searchDirName + "/"+baseName+".html";
- QCString dataFileName = searchDirName + "/"+baseName+".js";
-
- QFile outFile(fileName);
- QFile dataOutFile(dataFileName);
- if (outFile.open(IO_WriteOnly) && dataOutFile.open(IO_WriteOnly))
- {
- {
- FTextStream t(&outFile);
-
- t << "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\""
- " \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">" << endl;
- t << "<html><head><title></title>" << endl;
- t << "<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>" << endl;
- t << "<link rel=\"stylesheet\" type=\"text/css\" href=\"search.css\"/>" << endl;
- t << "<script type=\"text/javascript\" src=\"" << baseName << ".js\"></script>" << endl;
- t << "<script type=\"text/javascript\" src=\"search.js\"></script>" << endl;
- t << "</head>" << endl;
- t << "<body class=\"SRPage\">" << endl;
- t << "<div id=\"SRIndex\">" << endl;
- t << "<div class=\"SRStatus\" id=\"Loading\">" << theTranslator->trLoading() << "</div>" << endl;
- t << "<div id=\"SRResults\"></div>" << endl; // here the results will be inserted
- t << "<script type=\"text/javascript\"><!--" << endl;
- t << "createResults();" << endl; // this function will insert the results
- t << "--></script>" << endl;
- t << "<div class=\"SRStatus\" id=\"Searching\">"
- << theTranslator->trSearching() << "</div>" << endl;
- t << "<div class=\"SRStatus\" id=\"NoMatches\">"
- << theTranslator->trNoMatches() << "</div>" << endl;
-
- t << "<script type=\"text/javascript\"><!--" << endl;
- t << "document.getElementById(\"Loading\").style.display=\"none\";" << endl;
- t << "document.getElementById(\"NoMatches\").style.display=\"none\";" << endl;
- t << "var searchResults = new SearchResults(\"searchResults\");" << endl;
- t << "searchResults.Search();" << endl;
- t << "--></script>" << endl;
- t << "</div>" << endl; // SRIndex
- t << "</body>" << endl;
- t << "</html>" << endl;
- }
- FTextStream ti(&dataOutFile);
-
- ti << "var searchData=" << endl;
- // format
- // searchData[] = array of items
- // searchData[x][0] = id
- // searchData[x][1] = [ name + child1 + child2 + .. ]
- // searchData[x][1][0] = name as shown
- // searchData[x][1][y+1] = info for child y
- // searchData[x][1][y+1][0] = url
- // searchData[x][1][y+1][1] = 1 => target="_parent"
- // searchData[x][1][y+1][2] = scope
-
- ti << "[" << endl;
- bool firstEntry=TRUE;
-
- SDict<QList<Definition> >::Iterator li(g_searchIndexSymbols[i][p]);
- QList<Definition> *dl;
- int itemCount=0;
- for (li.toFirst();(dl=li.current());++li)
- {
- Definition *d = dl->first();
- QCString id = d->localName();
-
- if (!firstEntry)
- {
- ti << "," << endl;
- }
- firstEntry=FALSE;
-
- QCString dispName = d->localName();
- if (d->definitionType()==Definition::TypeGroup)
- {
- dispName = ((GroupDef*)d)->groupTitle();
- }
- else if (d->definitionType()==Definition::TypePage)
- {
- dispName = ((PageDef*)d)->title();
- }
- ti << " ['" << searchId(dispName) << "',['"
- << convertToXML(dispName) << "',[";
-
- if (dl->count()==1) // item with a unique name
- {
- MemberDef *md = 0;
- bool isMemberDef = d->definitionType()==Definition::TypeMember;
- if (isMemberDef) md = (MemberDef*)d;
- QCString anchor = d->anchor();
-
- ti << "'" << externalRef("../",d->getReference(),TRUE)
- << d->getOutputFileBase() << Doxygen::htmlFileExtension;
- if (!anchor.isEmpty())
- {
- ti << "#" << anchor;
- }
- ti << "',";
-
- static bool extLinksInWindow = Config_getBool("EXT_LINKS_IN_WINDOW");
- if (!extLinksInWindow || d->getReference().isEmpty())
- {
- ti << "1,";
- }
- else
- {
- ti << "0,";
- }
-
- if (d->getOuterScope()!=Doxygen::globalScope)
- {
- ti << "'" << convertToXML(d->getOuterScope()->name()) << "'";
- }
- else if (md)
- {
- FileDef *fd = md->getBodyDef();
- if (fd==0) fd = md->getFileDef();
- if (fd)
- {
- ti << "'" << convertToXML(fd->localName()) << "'";
- }
- }
- else
- {
- ti << "''";
- }
- ti << "]]";
- }
- else // multiple items with the same name
- {
- QListIterator<Definition> di(*dl);
- bool overloadedFunction = FALSE;
- Definition *prevScope = 0;
- int childCount=0;
- for (di.toFirst();(d=di.current());)
- {
- ++di;
- Definition *scope = d->getOuterScope();
- Definition *next = di.current();
- Definition *nextScope = 0;
- MemberDef *md = 0;
- bool isMemberDef = d->definitionType()==Definition::TypeMember;
- if (isMemberDef) md = (MemberDef*)d;
- if (next) nextScope = next->getOuterScope();
- QCString anchor = d->anchor();
-
- if (childCount>0)
- {
- ti << "],[";
- }
- ti << "'" << externalRef("../",d->getReference(),TRUE)
- << d->getOutputFileBase() << Doxygen::htmlFileExtension;
- if (!anchor.isEmpty())
- {
- ti << "#" << anchor;
- }
- ti << "',";
-
- static bool extLinksInWindow = Config_getBool("EXT_LINKS_IN_WINDOW");
- if (!extLinksInWindow || d->getReference().isEmpty())
- {
- ti << "1,";
- }
- else
- {
- ti << "0,";
- }
- bool found=FALSE;
- overloadedFunction = ((prevScope!=0 && scope==prevScope) ||
- (scope && scope==nextScope)
- ) && md &&
- (md->isFunction() || md->isSlot());
- QCString prefix;
- if (md) prefix=convertToXML(md->localName());
- if (overloadedFunction) // overloaded member function
- {
- prefix+=convertToXML(md->argsString());
- // show argument list to disambiguate overloaded functions
- }
- else if (md) // unique member function
- {
- prefix+="()"; // only to show it is a function
- }
- QCString name;
- if (d->definitionType()==Definition::TypeClass)
- {
- name = convertToXML(((ClassDef*)d)->displayName());
- found = TRUE;
- }
- else if (d->definitionType()==Definition::TypeNamespace)
- {
- name = convertToXML(((NamespaceDef*)d)->displayName());
- found = TRUE;
- }
- else if (scope==0 || scope==Doxygen::globalScope) // in global scope
- {
- if (md)
- {
- FileDef *fd = md->getBodyDef();
- if (fd==0) fd = md->getFileDef();
- if (fd)
- {
- if (!prefix.isEmpty()) prefix+=":&#160;";
- name = prefix + convertToXML(fd->localName());
- found = TRUE;
- }
- }
- }
- else if (md && (md->getClassDef() || md->getNamespaceDef()))
- // member in class or namespace scope
- {
- SrcLangExt lang = md->getLanguage();
- name = convertToXML(d->getOuterScope()->qualifiedName())
- + getLanguageSpecificSeparator(lang) + prefix;
- found = TRUE;
- }
- else if (scope) // some thing else? -> show scope
- {
- name = prefix + convertToXML(scope->name());
- found = TRUE;
- }
- if (!found) // fallback
- {
- name = prefix + "("+theTranslator->trGlobalNamespace()+")";
- }
-
- ti << "'" << name << "'";
-
- prevScope = scope;
- childCount++;
- }
-
- ti << "]]";
- }
- ti << "]";
- itemCount++;
- }
- if (!firstEntry)
- {
- ti << endl;
- }
-
- ti << "];" << endl;
-
- }
- else
- {
- err("Failed to open file '%s' for writing...\n",fileName.data());
- }
- }
- }
- }
-
- {
- QFile f(searchDirName+"/search.js");
- if (f.open(IO_WriteOnly))
- {
- FTextStream t(&f);
- t << "// Search script generated by doxygen" << endl;
- t << "// Copyright (C) 2009 by Dimitri van Heesch." << endl << endl;
- t << "// The code in this file is loosly based on main.js, part of Natural Docs," << endl;
- t << "// which is Copyright (C) 2003-2008 Greg Valure" << endl;
- t << "// Natural Docs is licensed under the GPL." << endl << endl;
- t << "var indexSectionsWithContent =" << endl;
- t << "{" << endl;
- bool first=TRUE;
- int j=0;
- for (i=0;i<NUM_SEARCH_INDICES;i++)
- {
- if (g_searchIndexCount[i]>0)
- {
- if (!first) t << "," << endl;
- t << " " << j << ": \"";
- for (p=0;p<MEMBER_INDEX_ENTRIES;p++)
- {
- t << (g_searchIndexSymbols[i][p].count()>0 ? "1" : "0");
- }
- t << "\"";
- first=FALSE;
- j++;
- }
- }
- if (!first) t << "\n";
- t << "};" << endl << endl;
- t << "var indexSectionNames =" << endl;
- t << "{" << endl;
- first=TRUE;
- j=0;
- for (i=0;i<NUM_SEARCH_INDICES;i++)
- {
- if (g_searchIndexCount[i]>0)
- {
- if (!first) t << "," << endl;
- t << " " << j << ": \"" << g_searchIndexName[i] << "\"";
- first=FALSE;
- j++;
- }
- }
- if (!first) t << "\n";
- t << "};" << endl << endl;
- t << search_script;
- }
- }
- {
- QFile f(searchDirName+"/nomatches.html");
- if (f.open(IO_WriteOnly))
- {
- FTextStream t(&f);
- t << "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" "
- "\"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">" << endl;
- t << "<html><head><title></title>" << endl;
- t << "<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>" << endl;
- t << "<link rel=\"stylesheet\" type=\"text/css\" href=\"search.css\"/>" << endl;
- t << "<script type=\"text/javascript\" src=\"search.js\"></script>" << endl;
- t << "</head>" << endl;
- t << "<body class=\"SRPage\">" << endl;
- t << "<div id=\"SRIndex\">" << endl;
- t << "<div class=\"SRStatus\" id=\"NoMatches\">"
- << theTranslator->trNoMatches() << "</div>" << endl;
- t << "</div>" << endl;
- t << "</body>" << endl;
- t << "</html>" << endl;
- }
- }
- Doxygen::indexList.addStyleSheetFile("search/search.js");
-}
-
-void writeSearchCategories(FTextStream &t)
-{
- static SearchIndexCategoryMapping map;
- int i,j=0;
- for (i=0;i<NUM_SEARCH_INDICES;i++)
- {
- if (g_searchIndexCount[i]>0)
- {
- t << "<a class=\"SelectItem\" href=\"javascript:void(0)\" "
- << "onclick=\"searchBox.OnSelectItem(" << j << ")\">"
- << "<span class=\"SelectionMark\">&#160;</span>"
- << convertToXML(map.categoryLabel[i])
- << "</a>";
- j++;
- }
- }
-}
-
-
-
diff --git a/trunk/src/searchindex.h b/trunk/src/searchindex.h
deleted file mode 100644
index 024e70a..0000000
--- a/trunk/src/searchindex.h
+++ /dev/null
@@ -1,79 +0,0 @@
-/******************************************************************************
- *
- *
- *
- * Copyright (C) 1997-2012 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.
- *
- */
-
-#ifndef _SEARCHINDEX_H
-#define _SEARCHINDEX_H
-
-#include "qtbc.h"
-#include <qintdict.h>
-#include <qlist.h>
-#include <qdict.h>
-#include <qintdict.h>
-#include <qvector.h>
-
-class FTextStream;
-
-//------- server side search index ----------------------
-
-struct URL
-{
- URL(const char *n,const char *u) : name(n), url(u) {}
- QCString name;
- QCString url;
-};
-
-
-struct URLInfo
-{
- URLInfo(int idx,int f) : urlIdx(idx), freq(f) {}
- int urlIdx;
- int freq;
-};
-
-class IndexWord
-{
- public:
- IndexWord(const char *word);
- void addUrlIndex(int,bool);
- const QIntDict<URLInfo> &urls() const { return m_urls; }
- QCString word() const { return m_word; }
-
- private:
- QCString m_word;
- QIntDict<URLInfo> m_urls;
-};
-
-class SearchIndex
-{
- public:
- SearchIndex();
- void setCurrentDoc(const char *name,const char *baseName,const char *anchor=0);
- void addWord(const char *word,bool hiPriority,bool recurse=FALSE);
- void write(const char *file);
- private:
- QDict<IndexWord> m_words;
- QVector< QList<IndexWord> > m_index;
- QIntDict<URL> m_urls;
- int m_urlIndex;
-};
-
-//------- client side search index ----------------------
-
-void writeJavascriptSearchIndex();
-void writeSearchCategories(FTextStream &t);
-
-#endif
diff --git a/trunk/src/section.h b/trunk/src/section.h
deleted file mode 100644
index 556cad0..0000000
--- a/trunk/src/section.h
+++ /dev/null
@@ -1,68 +0,0 @@
-/******************************************************************************
- *
- *
- *
- *
- * Copyright (C) 1997-2012 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.
- *
- */
-
-#ifndef SECTION_H
-#define SECTION_H
-
-#include "qtbc.h"
-#include <qlist.h>
-#include <qdict.h>
-#include "sortdict.h"
-
-class Definition;
-
-struct SectionInfo
-{
- enum SectionType { Page = 0,
- Section = 1,
- Subsection = 2,
- Subsubsection = 3,
- Paragraph = 4,
- Anchor = 5
- };
- SectionInfo(const char *f,const char *l,const char *t,
- SectionType st,int lev,const char *r=0) :
- label(l), title(t), type(st), ref(r), definition(0),
- fileName(f), generated(FALSE), level(lev)
- {
- }
- SectionInfo(const SectionInfo &s)
- {
- label=s.label.copy(); title=s.title.copy(); ref=s.ref.copy();
- type =s.type; definition=s.definition;
- fileName=s.fileName.copy(); generated=s.generated;
- }
- ~SectionInfo() {}
- QCString label;
- QCString title;
- SectionType type;
- QCString ref;
- Definition *definition;
- QCString fileName;
- bool generated;
- int level;
-};
-
-class SectionDict : public SDict<SectionInfo>
-{
- public:
- SectionDict(int size) : SDict<SectionInfo>(size) {}
- ~SectionDict() {}
-};
-
-#endif
diff --git a/trunk/src/sizzle.js b/trunk/src/sizzle.js
deleted file mode 100644
index b37b0d4..0000000
--- a/trunk/src/sizzle.js
+++ /dev/null
@@ -1,19 +0,0 @@
-/*
- * Sizzle CSS Selector Engine - v0.9.3
- * Copyright 2009, The Dojo Foundation
- * Released under the MIT, BSD, and GPL Licenses.
- * More information: http://sizzlejs.com/
- */
-(function(){var R=/((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^[\]]*\]|['"][^'"]*['"]|[^[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?/g,L=0,H=Object.prototype.toString;var F=function(Y,U,ab,ac){ab=ab||[];U=U||document;if(U.nodeType!==1&&U.nodeType!==9){return[]}if(!Y||typeof Y!=="string"){return ab}var Z=[],W,af,ai,T,ad,V,X=true;R.lastIndex=0;while((W=R.exec(Y))!==null){Z.push(W[1]);if(W[2]){V=RegExp.rightContext;break}}if(Z.length>1&&M.exec(Y)){if(Z.length===2&&I.relative[Z[0]]){af=J(Z[0]+Z[1],U)}else{af=I.relative[Z[0]]?[U]:F(Z.shift(),U);while(Z.length){Y=Z.shift();if(I.relative[Y]){Y+=Z.shift()}af=J(Y,af)}}}else{var ae=ac?{expr:Z.pop(),set:E(ac)}:F.find(Z.pop(),Z.length===1&&U.parentNode?U.parentNode:U,Q(U));af=F.filter(ae.expr,ae.set);if(Z.length>0){ai=E(af)}else{X=false}while(Z.length){var ah=Z.pop(),ag=ah;if(!I.relative[ah]){ah=""}else{ag=Z.pop()}if(ag==null){ag=U}I.relative[ah](ai,ag,Q(U))}}if(!ai){ai=af}if(!ai){throw"Syntax error, unrecognized expression: "+(ah||Y)}if(H.call(ai)==="[object Array]"){if(!X){ab.push.apply(ab,ai)}else{if(U.nodeType===1){for(var aa=0;ai[aa]!=null;aa++){if(ai[aa]&&(ai[aa]===true||ai[aa].nodeType===1&&K(U,ai[aa]))){ab.push(af[aa])}}}else{for(var aa=0;ai[aa]!=null;aa++){if(ai[aa]&&ai[aa].nodeType===1){ab.push(af[aa])}}}}}else{E(ai,ab)}if(V){F(V,U,ab,ac);if(G){hasDuplicate=false;ab.sort(G);if(hasDuplicate){for(var aa=1;aa<ab.length;aa++){if(ab[aa]===ab[aa-1]){ab.splice(aa--,1)}}}}}return ab};F.matches=function(T,U){return F(T,null,null,U)};F.find=function(aa,T,ab){var Z,X;if(!aa){return[]}for(var W=0,V=I.order.length;W<V;W++){var Y=I.order[W],X;if((X=I.match[Y].exec(aa))){var U=RegExp.leftContext;if(U.substr(U.length-1)!=="\\"){X[1]=(X[1]||"").replace(/\\/g,"");Z=I.find[Y](X,T,ab);if(Z!=null){aa=aa.replace(I.match[Y],"");break}}}}if(!Z){Z=T.getElementsByTagName("*")}return{set:Z,expr:aa}};F.filter=function(ad,ac,ag,W){var V=ad,ai=[],aa=ac,Y,T,Z=ac&&ac[0]&&Q(ac[0]);while(ad&&ac.length){for(var ab in I.filter){if((Y=I.match[ab].exec(ad))!=null){var U=I.filter[ab],ah,af;T=false;if(aa==ai){ai=[]}if(I.preFilter[ab]){Y=I.preFilter[ab](Y,aa,ag,ai,W,Z);if(!Y){T=ah=true}else{if(Y===true){continue}}}if(Y){for(var X=0;(af=aa[X])!=null;X++){if(af){ah=U(af,Y,X,aa);var ae=W^!!ah;if(ag&&ah!=null){if(ae){T=true}else{aa[X]=false}}else{if(ae){ai.push(af);T=true}}}}}if(ah!==g){if(!ag){aa=ai}ad=ad.replace(I.match[ab],"");if(!T){return[]}break}}}if(ad==V){if(T==null){throw"Syntax error, unrecognized expression: "+ad}else{break}}V=ad}return aa};var I=F.selectors={order:["ID","NAME","TAG"],match:{ID:/#((?:[\w\u00c0-\uFFFF_-]|\\.)+)/,CLASS:/\.((?:[\w\u00c0-\uFFFF_-]|\\.)+)/,NAME:/\[name=['"]*((?:[\w\u00c0-\uFFFF_-]|\\.)+)['"]*\]/,ATTR:/\[\s*((?:[\w\u00c0-\uFFFF_-]|\\.)+)\s*(?:(\S?=)\s*(['"]*)(.*?)\3|)\s*\]/,TAG:/^((?:[\w\u00c0-\uFFFF\*_-]|\\.)+)/,CHILD:/:(only|nth|last|first)-child(?:\((even|odd|[\dn+-]*)\))?/,POS:/:(nth|eq|gt|lt|first|last|even|odd)(?:\((\d*)\))?(?=[^-]|$)/,PSEUDO:/:((?:[\w\u00c0-\uFFFF_-]|\\.)+)(?:\((['"]*)((?:\([^\)]+\)|[^\2\(\)]*)+)\2\))?/},attrMap:{"class":"className","for":"htmlFor"},attrHandle:{href:function(T){return T.getAttribute("href")}},relative:{"+":function(aa,T,Z){var X=typeof T==="string",ab=X&&!/\W/.test(T),Y=X&&!ab;if(ab&&!Z){T=T.toUpperCase()}for(var W=0,V=aa.length,U;W<V;W++){if((U=aa[W])){while((U=U.previousSibling)&&U.nodeType!==1){}aa[W]=Y||U&&U.nodeName===T?U||false:U===T}}if(Y){F.filter(T,aa,true)}},">":function(Z,U,aa){var X=typeof U==="string";if(X&&!/\W/.test(U)){U=aa?U:U.toUpperCase();for(var V=0,T=Z.length;V<T;V++){var Y=Z[V];if(Y){var W=Y.parentNode;Z[V]=W.nodeName===U?W:false}}}else{for(var V=0,T=Z.length;V<T;V++){var Y=Z[V];if(Y){Z[V]=X?Y.parentNode:Y.parentNode===U}}if(X){F.filter(U,Z,true)}}},"":function(W,U,Y){var V=L++,T=S;if(!U.match(/\W/)){var X=U=Y?U:U.toUpperCase();T=P}T("parentNode",U,V,W,X,Y)},"~":function(W,U,Y){var V=L++,T=S;if(typeof U==="string"&&!U.match(/\W/)){var X=U=Y?U:U.toUpperCase();T=P}T("previousSibling",U,V,W,X,Y)}},find:{ID:function(U,V,W){if(typeof V.getElementById!=="undefined"&&!W){var T=V.getElementById(U[1]);return T?[T]:[]}},NAME:function(V,Y,Z){if(typeof Y.getElementsByName!=="undefined"){var U=[],X=Y.getElementsByName(V[1]);for(var W=0,T=X.length;W<T;W++){if(X[W].getAttribute("name")===V[1]){U.push(X[W])}}return U.length===0?null:U}},TAG:function(T,U){return U.getElementsByTagName(T[1])}},preFilter:{CLASS:function(W,U,V,T,Z,aa){W=" "+W[1].replace(/\\/g,"")+" ";if(aa){return W}for(var X=0,Y;(Y=U[X])!=null;X++){if(Y){if(Z^(Y.className&&(" "+Y.className+" ").indexOf(W)>=0)){if(!V){T.push(Y)}}else{if(V){U[X]=false}}}}return false},ID:function(T){return T[1].replace(/\\/g,"")},TAG:function(U,T){for(var V=0;T[V]===false;V++){}return T[V]&&Q(T[V])?U[1]:U[1].toUpperCase()},CHILD:function(T){if(T[1]=="nth"){var U=/(-?)(\d*)n((?:\+|-)?\d*)/.exec(T[2]=="even"&&"2n"||T[2]=="odd"&&"2n+1"||!/\D/.test(T[2])&&"0n+"+T[2]||T[2]);T[2]=(U[1]+(U[2]||1))-0;T[3]=U[3]-0}T[0]=L++;return T},ATTR:function(X,U,V,T,Y,Z){var W=X[1].replace(/\\/g,"");if(!Z&&I.attrMap[W]){X[1]=I.attrMap[W]}if(X[2]==="~="){X[4]=" "+X[4]+" "}return X},PSEUDO:function(X,U,V,T,Y){if(X[1]==="not"){if(X[3].match(R).length>1||/^\w/.test(X[3])){X[3]=F(X[3],null,null,U)}else{var W=F.filter(X[3],U,V,true^Y);if(!V){T.push.apply(T,W)}return false}}else{if(I.match.POS.test(X[0])||I.match.CHILD.test(X[0])){return true}}return X},POS:function(T){T.unshift(true);return T}},filters:{enabled:function(T){return T.disabled===false&&T.type!=="hidden"},disabled:function(T){return T.disabled===true},checked:function(T){return T.checked===true},selected:function(T){T.parentNode.selectedIndex;return T.selected===true},parent:function(T){return !!T.firstChild},empty:function(T){return !T.firstChild},has:function(V,U,T){return !!F(T[3],V).length},header:function(T){return/h\d/i.test(T.nodeName)},text:function(T){return"text"===T.type},radio:function(T){return"radio"===T.type},checkbox:function(T){return"checkbox"===T.type},file:function(T){return"file"===T.type},password:function(T){return"password"===T.type},submit:function(T){return"submit"===T.type},image:function(T){return"image"===T.type},reset:function(T){return"reset"===T.type},button:function(T){return"button"===T.type||T.nodeName.toUpperCase()==="BUTTON"},input:function(T){return/input|select|textarea|button/i.test(T.nodeName)}},setFilters:{first:function(U,T){return T===0},last:function(V,U,T,W){return U===W.length-1},even:function(U,T){return T%2===0},odd:function(U,T){return T%2===1},lt:function(V,U,T){return U<T[3]-0},gt:function(V,U,T){return U>T[3]-0},nth:function(V,U,T){return T[3]-0==U},eq:function(V,U,T){return T[3]-0==U}},filter:{PSEUDO:function(Z,V,W,aa){var U=V[1],X=I.filters[U];if(X){return X(Z,W,V,aa)}else{if(U==="contains"){return(Z.textContent||Z.innerText||"").indexOf(V[3])>=0}else{if(U==="not"){var Y=V[3];for(var W=0,T=Y.length;W<T;W++){if(Y[W]===Z){return false}}return true}}}},CHILD:function(T,W){var Z=W[1],U=T;switch(Z){case"only":case"first":while(U=U.previousSibling){if(U.nodeType===1){return false}}if(Z=="first"){return true}U=T;case"last":while(U=U.nextSibling){if(U.nodeType===1){return false}}return true;case"nth":var V=W[2],ac=W[3];if(V==1&&ac==0){return true}var Y=W[0],ab=T.parentNode;if(ab&&(ab.sizcache!==Y||!T.nodeIndex)){var X=0;for(U=ab.firstChild;U;U=U.nextSibling){if(U.nodeType===1){U.nodeIndex=++X}}ab.sizcache=Y}var aa=T.nodeIndex-ac;if(V==0){return aa==0}else{return(aa%V==0&&aa/V>=0)}}},ID:function(U,T){return U.nodeType===1&&U.getAttribute("id")===T},TAG:function(U,T){return(T==="*"&&U.nodeType===1)||U.nodeName===T},CLASS:function(U,T){return(" "+(U.className||U.getAttribute("class"))+" ").indexOf(T)>-1},ATTR:function(Y,W){var V=W[1],T=I.attrHandle[V]?I.attrHandle[V](Y):Y[V]!=null?Y[V]:Y.getAttribute(V),Z=T+"",X=W[2],U=W[4];return T==null?X==="!=":X==="="?Z===U:X==="*="?Z.indexOf(U)>=0:X==="~="?(" "+Z+" ").indexOf(U)>=0:!U?Z&&T!==false:X==="!="?Z!=U:X==="^="?Z.indexOf(U)===0:X==="$="?Z.substr(Z.length-U.length)===U:X==="|="?Z===U||Z.substr(0,U.length+1)===U+"-":false},POS:function(X,U,V,Y){var T=U[2],W=I.setFilters[T];if(W){return W(X,V,U,Y)}}}};var M=I.match.POS;for(var O in I.match){I.match[O]=RegExp(I.match[O].source+/(?![^\[]*\])(?![^\(]*\))/.source)}var E=function(U,T){U=Array.prototype.slice.call(U);if(T){T.push.apply(T,U);return T}return U};try{Array.prototype.slice.call(document.documentElement.childNodes)}catch(N){E=function(X,W){var U=W||[];if(H.call(X)==="[object Array]"){Array.prototype.push.apply(U,X)}else{if(typeof X.length==="number"){for(var V=0,T=X.length;V<T;V++){U.push(X[V])}}else{for(var V=0;X[V];V++){U.push(X[V])}}}return U}}var G;if(document.documentElement.compareDocumentPosition){G=function(U,T){var V=U.compareDocumentPosition(T)&4?-1:U===T?0:1;if(V===0){hasDuplicate=true}return V}}else{if("sourceIndex" in document.documentElement){G=function(U,T){var V=U.sourceIndex-T.sourceIndex;if(V===0){hasDuplicate=true}return V}}else{if(document.createRange){G=function(W,U){var V=W.ownerDocument.createRange(),T=U.ownerDocument.createRange();V.selectNode(W);V.collapse(true);T.selectNode(U);T.collapse(true);var X=V.compareBoundaryPoints(Range.START_TO_END,T);if(X===0){hasDuplicate=true}return X}}}}(function(){var U=document.createElement("form"),V="script"+(new Date).getTime();U.innerHTML="<input name='"+V+"'/>";var T=document.documentElement;T.insertBefore(U,T.firstChild);if(!!document.getElementById(V)){I.find.ID=function(X,Y,Z){if(typeof Y.getElementById!=="undefined"&&!Z){var W=Y.getElementById(X[1]);return W?W.id===X[1]||typeof W.getAttributeNode!=="undefined"&&W.getAttributeNode("id").nodeValue===X[1]?[W]:g:[]}};I.filter.ID=function(Y,W){var X=typeof Y.getAttributeNode!=="undefined"&&Y.getAttributeNode("id");return Y.nodeType===1&&X&&X.nodeValue===W}}T.removeChild(U)})();(function(){var T=document.createElement("div");T.appendChild(document.createComment(""));if(T.getElementsByTagName("*").length>0){I.find.TAG=function(U,Y){var X=Y.getElementsByTagName(U[1]);if(U[1]==="*"){var W=[];for(var V=0;X[V];V++){if(X[V].nodeType===1){W.push(X[V])}}X=W}return X}}T.innerHTML="<a href='#'></a>";if(T.firstChild&&typeof T.firstChild.getAttribute!=="undefined"&&T.firstChild.getAttribute("href")!=="#"){I.attrHandle.href=function(U){return U.getAttribute("href",2)}}})();if(document.querySelectorAll){(function(){var T=F,U=document.createElement("div");U.innerHTML="<p class='TEST'></p>";if(U.querySelectorAll&&U.querySelectorAll(".TEST").length===0){return}F=function(Y,X,V,W){X=X||document;if(!W&&X.nodeType===9&&!Q(X)){try{return E(X.querySelectorAll(Y),V)}catch(Z){}}return T(Y,X,V,W)};F.find=T.find;F.filter=T.filter;F.selectors=T.selectors;F.matches=T.matches})()}if(document.getElementsByClassName&&document.documentElement.getElementsByClassName){(function(){var T=document.createElement("div");T.innerHTML="<div class='test e'></div><div class='test'></div>";if(T.getElementsByClassName("e").length===0){return}T.lastChild.className="e";if(T.getElementsByClassName("e").length===1){return}I.order.splice(1,0,"CLASS");I.find.CLASS=function(U,V,W){if(typeof V.getElementsByClassName!=="undefined"&&!W){return V.getElementsByClassName(U[1])}}})()}function P(U,Z,Y,ad,aa,ac){var ab=U=="previousSibling"&&!ac;for(var W=0,V=ad.length;W<V;W++){var T=ad[W];if(T){if(ab&&T.nodeType===1){T.sizcache=Y;T.sizset=W}T=T[U];var X=false;while(T){if(T.sizcache===Y){X=ad[T.sizset];break}if(T.nodeType===1&&!ac){T.sizcache=Y;T.sizset=W}if(T.nodeName===Z){X=T;break}T=T[U]}ad[W]=X}}}function S(U,Z,Y,ad,aa,ac){var ab=U=="previousSibling"&&!ac;for(var W=0,V=ad.length;W<V;W++){var T=ad[W];if(T){if(ab&&T.nodeType===1){T.sizcache=Y;T.sizset=W}T=T[U];var X=false;while(T){if(T.sizcache===Y){X=ad[T.sizset];break}if(T.nodeType===1){if(!ac){T.sizcache=Y;T.sizset=W}if(typeof Z!=="string"){if(T===Z){X=true;break}}else{if(F.filter(Z,[T]).length>0){X=T;break}}}T=T[U]}ad[W]=X}}}var K=document.compareDocumentPosition?function(U,T){return U.compareDocumentPosition(T)&16}:function(U,T){return U!==T&&(U.contains?U.contains(T):true)};var Q=function(T){return T.nodeType===9&&T.documentElement.nodeName!=="HTML"||!!T.ownerDocument&&Q(T.ownerDocument)};var J=function(T,aa){var W=[],X="",Y,V=aa.nodeType?[aa]:aa;while((Y=I.match.PSEUDO.exec(T))){X+=Y[0];T=T.replace(I.match.PSEUDO,"")}T=I.relative[T]?T+"*":T;for(var Z=0,U=V.length;Z<U;Z++){F(T,V[Z],W)}return F.filter(X,W)};o.find=F;o.filter=F.filter;o.expr=F.selectors;o.expr[":"]=o.expr.filters;F.selectors.filters.hidden=function(T){return T.offsetWidth===0||T.offsetHeight===0};F.selectors.filters.visible=function(T){return T.offsetWidth>0||T.offsetHeight>0};F.selectors.filters.animated=function(T){return o.grep(o.timers,function(U){return T===U.elem}).length};o.multiFilter=function(V,T,U){if(U){V=":not("+V+")"}return F.matches(V,T)};o.dir=function(V,U){var T=[],W=V[U];while(W&&W!=document){if(W.nodeType==1){T.push(W)}W=W[U]}return T};o.nth=function(X,T,V,W){T=T||1;var U=0;for(;X;X=X[V]){if(X.nodeType==1&&++U==T){break}}return X};o.sibling=function(V,U){var T=[];for(;V;V=V.nextSibling){if(V.nodeType==1&&V!=U){T.push(V)}}return T};return;l.Sizzle=F})();o.event={add:function(I,F,H,K){if(I.nodeType==3||I.nodeType==8){return}if(I.setInterval&&I!=l){I=l}if(!H.guid){H.guid=this.guid++}if(K!==g){var G=H;H=this.proxy(G);H.data=K}var E=o.data(I,"events")||o.data(I,"events",{}),J=o.data(I,"handle")||o.data(I,"handle",function(){return typeof o!=="undefined"&&!o.event.triggered?o.event.handle.apply(arguments.callee.elem,arguments):g});J.elem=I;o.each(F.split(/\s+/),function(M,N){var O=N.split(".");N=O.shift();H.type=O.slice().sort().join(".");var L=E[N];if(o.event.specialAll[N]){o.event.specialAll[N].setup.call(I,K,O)}if(!L){L=E[N]={};if(!o.event.special[N]||o.event.special[N].setup.call(I,K,O)===false){if(I.addEventListener){I.addEventListener(N,J,false)}else{if(I.attachEvent){I.attachEvent("on"+N,J)}}}}L[H.guid]=H;o.event.global[N]=true});I=null},guid:1,global:{},remove:function(K,H,J){if(K.nodeType==3||K.nodeType==8){return}var G=o.data(K,"events"),F,E;if(G){if(H===g||(typeof H==="string"&&H.charAt(0)==".")){for(var I in G){this.remove(K,I+(H||""))}}else{if(H.type){J=H.handler;H=H.type}o.each(H.split(/\s+/),function(M,O){var Q=O.split(".");O=Q.shift();var N=RegExp("(^|\\.)"+Q.slice().sort().join(".*\\.")+"(\\.|$)");if(G[O]){if(J){delete G[O][J.guid]}else{for(var P in G[O]){if(N.test(G[O][P].type)){delete G[O][P]}}}if(o.event.specialAll[O]){o.event.specialAll[O].teardown.call(K,Q)}for(F in G[O]){break}if(!F){if(!o.event.special[O]||o.event.special[O].teardown.call(K,Q)===false){if(K.removeEventListener){K.removeEventListener(O,o.data(K,"handle"),false)}else{if(K.detachEvent){K.detachEvent("on"+O,o.data(K,"handle"))}}}F=null;delete G[O]}}})}for(F in G){break}if(!F){var L=o.data(K,"handle");if(L){L.elem=null}o.removeData(K,"events");o.removeData(K,"handle")}}},trigger:function(I,K,H,E){var G=I.type||I;if(!E){I=typeof I==="object"?I[h]?I:o.extend(o.Event(G),I):o.Event(G);if(G.indexOf("!")>=0)
-{I.type=G=G.slice(0,-1);I.exclusive=true}if(!H){I.stopPropagation();if(this.global[G]){o.each(o.cache,function(){if(this.events&&this.events[G]){o.event.trigger(I,K,this.handle.elem)}})}}if(!H||H.nodeType==3||H.nodeType==8){return g}I.result=g;I.target=H;K=o.makeArray(K);K.unshift(I)}I.currentTarget=H;var J=o.data(H,"handle");if(J){J.apply(H,K)}if((!H[G]||(o.nodeName(H,"a")&&G=="click"))&&H["on"+G]&&H["on"+G].apply(H,K)===false){I.result=false}if(!E&&H[G]&&!I.isDefaultPrevented()&&!(o.nodeName(H,"a")&&G=="click")){this.triggered=true;try{H[G]()}catch(L){}}this.triggered=false;if(!I.isPropagationStopped()){var F=H.parentNode||H.ownerDocument;if(F){o.event.trigger(I,K,F,true)}}},handle:function(K){var J,E;K=arguments[0]=o.event.fix(K||l.event);K.currentTarget=this;var L=K.type.split(".");K.type=L.shift();J=!L.length&&!K.exclusive;var I=RegExp("(^|\\.)"+L.slice().sort().join(".*\\.")+"(\\.|$)");E=(o.data(this,"events")||{})[K.type];for(var G in E){var H=E[G];if(J||I.test(H.type)){K.handler=H;K.data=H.data;var F=H.apply(this,arguments);if(F!==g){K.result=F;if(F===false){K.preventDefault();K.stopPropagation()}}if(K.isImmediatePropagationStopped()){break}}}},props:"altKey attrChange attrName bubbles button cancelable charCode clientX clientY ctrlKey currentTarget data detail eventPhase fromElement handler keyCode metaKey newValue originalTarget pageX pageY prevValue relatedNode relatedTarget screenX screenY shiftKey srcElement target toElement view wheelDelta which".split(" "),fix:function(H){if(H[h]){return H}var F=H;H=o.Event(F);for(var G=this.props.length,J;G;){J=this.props[--G];H[J]=F[J]}if(!H.target){H.target=H.srcElement||document}if(H.target.nodeType==3){H.target=H.target.parentNode}if(!H.relatedTarget&&H.fromElement){H.relatedTarget=H.fromElement==H.target?H.toElement:H.fromElement}if(H.pageX==null&&H.clientX!=null){var I=document.documentElement,E=document.body;H.pageX=H.clientX+(I&&I.scrollLeft||E&&E.scrollLeft||0)-(I.clientLeft||0);H.pageY=H.clientY+(I&&I.scrollTop||E&&E.scrollTop||0)-(I.clientTop||0)}if(!H.which&&((H.charCode||H.charCode===0)?H.charCode:H.keyCode)){H.which=H.charCode||H.keyCode}if(!H.metaKey&&H.ctrlKey){H.metaKey=H.ctrlKey}if(!H.which&&H.button){H.which=(H.button&1?1:(H.button&2?3:(H.button&4?2:0)))}return H},proxy:function(F,E){E=E||function(){return F.apply(this,arguments)};E.guid=F.guid=F.guid||E.guid||this.guid++;return E},special:{ready:{setup:B,teardown:function(){}}},specialAll:{live:{setup:function(E,F){o.event.add(this,F[0],c)},teardown:function(G){if(G.length){var E=0,F=RegExp("(^|\\.)"+G[0]+"(\\.|$)");o.each((o.data(this,"events").live||{}),function(){if(F.test(this.type)){E++}});if(E<1){o.event.remove(this,G[0],c)}}}}}};o.Event=function(E){if(!this.preventDefault){return new o.Event(E)}if(E&&E.type){this.originalEvent=E;this.type=E.type}else{this.type=E}this.timeStamp=e();this[h]=true};function k(){return false}function u(){return true}o.Event.prototype={preventDefault:function(){this.isDefaultPrevented=u;var E=this.originalEvent;if(!E){return}if(E.preventDefault){E.preventDefault()}E.returnValue=false},stopPropagation:function(){this.isPropagationStopped=u;var E=this.originalEvent;if(!E){return}if(E.stopPropagation){E.stopPropagation()}E.cancelBubble=true},stopImmediatePropagation:function(){this.isImmediatePropagationStopped=u;this.stopPropagation()},isDefaultPrevented:k,isPropagationStopped:k,isImmediatePropagationStopped:k};var a=function(F){var E=F.relatedTarget;while(E&&E!=this){try{E=E.parentNode}catch(G){E=this}}if(E!=this){F.type=F.data;o.event.handle.apply(this,arguments)}};o.each({mouseover:"mouseenter",mouseout:"mouseleave"},function(F,E){o.event.special[E]={setup:function(){o.event.add(this,F,a,E)},teardown:function(){o.event.remove(this,F,a)}}});o.fn.extend({bind:function(F,G,E){return F=="unload"?this.one(F,G,E):this.each(function(){o.event.add(this,F,E||G,E&&G)})},one:function(G,H,F){var E=o.event.proxy(F||H,function(I){o(this).unbind(I,E);return(F||H).apply(this,arguments)});return this.each(function(){o.event.add(this,G,E,F&&H)})},unbind:function(F,E){return this.each(function(){o.event.remove(this,F,E)})},trigger:function(E,F){return this.each(function(){o.event.trigger(E,F,this)})},triggerHandler:function(E,G){if(this[0]){var F=o.Event(E);F.preventDefault();F.stopPropagation();o.event.trigger(F,G,this[0]);return F.result}},toggle:function(G){var E=arguments,F=1;while(F<E.length){o.event.proxy(G,E[F++])}return this.click(o.event.proxy(G,function(H){this.lastToggle=(this.lastToggle||0)%F;H.preventDefault();return E[this.lastToggle++].apply(this,arguments)||false}))},hover:function(E,F){return this.mouseenter(E).mouseleave(F)},ready:function(E){B();if(o.isReady){E.call(document,o)}else{o.readyList.push(E)}return this},live:function(G,F){var E=o.event.proxy(F);E.guid+=this.selector+G;o(document).bind(i(G,this.selector),this.selector,E);return this},die:function(F,E){o(document).unbind(i(F,this.selector),E?{guid:E.guid+this.selector+F}:null);return this}});function c(H){var E=RegExp("(^|\\.)"+H.type+"(\\.|$)"),G=true,F=[];o.each(o.data(this,"events").live||[],function(I,J){if(E.test(J.type)){var K=o(H.target).closest(J.data)[0];if(K){F.push({elem:K,fn:J})}}});F.sort(function(J,I){return o.data(J.elem,"closest")-o.data(I.elem,"closest")});o.each(F,function(){if(this.fn.call(this.elem,H,this.fn.data)===false){return(G=false)}});return G}function i(F,E){return["live",F,E.replace(/\./g,"`").replace(/ /g,"|")].join(".")}o.extend({isReady:false,readyList:[],ready:function(){if(!o.isReady){o.isReady=true;if(o.readyList){o.each(o.readyList,function(){this.call(document,o)});o.readyList=null}o(document).triggerHandler("ready")}}});var x=false;function B(){if(x){return}x=true;if(document.addEventListener){document.addEventListener("DOMContentLoaded",function(){document.removeEventListener("DOMContentLoaded",arguments.callee,false);o.ready()},false)}else{if(document.attachEvent){document.attachEvent("onreadystatechange",function(){if(document.readyState==="complete"){document.detachEvent("onreadystatechange",arguments.callee);o.ready()}});if(document.documentElement.doScroll&&l==l.top){(function(){if(o.isReady){return}try{document.documentElement.doScroll("left")}catch(E){setTimeout(arguments.callee,0);return}o.ready()})()}}}o.event.add(l,"load",o.ready)}o.each(("blur,focus,load,resize,scroll,unload,click,dblclick,mousedown,mouseup,mousemove,mouseover,mouseout,mouseenter,mouseleave,change,select,submit,keydown,keypress,keyup,error").split(","),function(F,E){o.fn[E]=function(G){return G?this.bind(E,G):this.trigger(E)}});o(l).bind("unload",function(){for(var E in o.cache){if(E!=1&&o.cache[E].handle){o.event.remove(o.cache[E].handle.elem)}}});(function(){o.support={};var F=document.documentElement,G=document.createElement("script"),K=document.createElement("div"),J="script"+(new Date).getTime();K.style.display="none";K.innerHTML=' <link/><table></table><a href="/a" style="color:red;float:left;opacity:.5;">a</a><select><option>text</option></select><object><param/></object>';var H=K.getElementsByTagName("*"),E=K.getElementsByTagName("a")[0];if(!H||!H.length||!E){return}o.support={leadingWhitespace:K.firstChild.nodeType==3,tbody:!K.getElementsByTagName("tbody").length,objectAll:!!K.getElementsByTagName("object")[0].getElementsByTagName("*").length,htmlSerialize:!!K.getElementsByTagName("link").length,style:/red/.test(E.getAttribute("style")),hrefNormalized:E.getAttribute("href")==="/a",opacity:E.style.opacity==="0.5",cssFloat:!!E.style.cssFloat,scriptEval:false,noCloneEvent:true,boxModel:null};G.type="text/javascript";try{G.appendChild(document.createTextNode("window."+J+"=1;"))}catch(I){}F.insertBefore(G,F.firstChild);if(l[J]){o.support.scriptEval=true;delete l[J]}F.removeChild(G);if(K.attachEvent&&K.fireEvent){K.attachEvent("onclick",function(){o.support.noCloneEvent=false;K.detachEvent("onclick",arguments.callee)});K.cloneNode(true).fireEvent("onclick")}o(function(){var L=document.createElement("div");L.style.width=L.style.paddingLeft="1px";document.body.appendChild(L);o.boxModel=o.support.boxModel=L.offsetWidth===2;document.body.removeChild(L).style.display="none"})})();var w=o.support.cssFloat?"cssFloat":"styleFloat";o.props={"for":"htmlFor","class":"className","float":w,cssFloat:w,styleFloat:w,readonly:"readOnly",maxlength:"maxLength",cellspacing:"cellSpacing",rowspan:"rowSpan",tabindex:"tabIndex"};o.fn.extend({_load:o.fn.load,load:function(G,J,K){if(typeof G!=="string"){return this._load(G)}var I=G.indexOf(" ");if(I>=0){var E=G.slice(I,G.length);G=G.slice(0,I)}var H="GET";if(J){if(o.isFunction(J)){K=J;J=null}else{if(typeof J==="object"){J=o.param(J);H="POST"}}}var F=this;o.ajax({url:G,type:H,dataType:"html",data:J,complete:function(M,L){if(L=="success"||L=="notmodified"){F.html(E?o("<div/>").append(M.responseText.replace(/<script(.|\s)*?\/script>/g,"")).find(E):M.responseText)}if(K){F.each(K,[M.responseText,L,M])}}});return this},serialize:function(){return o.param(this.serializeArray())},serializeArray:function(){return this.map(function(){return this.elements?o.makeArray(this.elements):this}).filter(function(){return this.name&&!this.disabled&&(this.checked||/select|textarea/i.test(this.nodeName)||/text|hidden|password|search/i.test(this.type))}).map(function(E,F){var G=o(this).val();return G==null?null:o.isArray(G)?o.map(G,function(I,H){return{name:F.name,value:I}}):{name:F.name,value:G}}).get()}});o.each("ajaxStart,ajaxStop,ajaxComplete,ajaxError,ajaxSuccess,ajaxSend".split(","),function(E,F){o.fn[F]=function(G){return this.bind(F,G)}});var r=e();o.extend({get:function(E,G,H,F){if(o.isFunction(G)){H=G;G=null}return o.ajax({type:"GET",url:E,data:G,success:H,dataType:F})},getScript:function(E,F){return o.get(E,null,F,"script")},getJSON:function(E,F,G){return o.get(E,F,G,"json")},post:function(E,G,H,F){if(o.isFunction(G)){H=G;G={}}return o.ajax({type:"POST",url:E,data:G,success:H,dataType:F})},ajaxSetup:function(E){o.extend(o.ajaxSettings,E)},ajaxSettings:{url:location.href,global:true,type:"GET",contentType:"application/x-www-form-urlencoded",processData:true,async:true,xhr:function(){return l.ActiveXObject?new ActiveXObject("Microsoft.XMLHTTP"):new XMLHttpRequest()},accepts:{xml:"application/xml, text/xml",html:"text/html",script:"text/javascript, application/javascript",json:"application/json, text/javascript",text:"text/plain",_default:"*/*"}},lastModified:{},ajax:function(M){M=o.extend(true,M,o.extend(true,{},o.ajaxSettings,M));var W,F=/=\?(&|$)/g,R,V,G=M.type.toUpperCase();if(M.data&&M.processData&&typeof M.data!=="string"){M.data=o.param(M.data)}if(M.dataType=="jsonp"){if(G=="GET"){if(!M.url.match(F)){M.url+=(M.url.match(/\?/)?"&":"?")+(M.jsonp||"callback")+"=?"}}else{if(!M.data||!M.data.match(F)){M.data=(M.data?M.data+"&":"")+(M.jsonp||"callback")+"=?"}}M.dataType="json"}if(M.dataType=="json"&&(M.data&&M.data.match(F)||M.url.match(F))){W="jsonp"+r++;if(M.data){M.data=(M.data+"").replace(F,"="+W+"$1")}M.url=M.url.replace(F,"="+W+"$1");M.dataType="script";l[W]=function(X){V=X;I();L();l[W]=g;try{delete l[W]}catch(Y){}if(H){H.removeChild(T)}}}if(M.dataType=="script"&&M.cache==null){M.cache=false}if(M.cache===false&&G=="GET"){var E=e();var U=M.url.replace(/(\?|&)_=.*?(&|$)/,"$1_="+E+"$2");M.url=U+((U==M.url)?(M.url.match(/\?/)?"&":"?")+"_="+E:"")}if(M.data&&G=="GET"){M.url+=(M.url.match(/\?/)?"&":"?")+M.data;M.data=null}if(M.global&&!o.active++){o.event.trigger("ajaxStart")}var Q=/^(\w+:)?\/\/([^\/?#]+)/.exec(M.url);if(M.dataType=="script"&&G=="GET"&&Q&&(Q[1]&&Q[1]!=location.protocol||Q[2]!=location.host)){var H=document.getElementsByTagName("head")[0];var T=document.createElement("script");T.src=M.url;if(M.scriptCharset){T.charset=M.scriptCharset}if(!W){var O=false;T.onload=T.onreadystatechange=function(){if(!O&&(!this.readyState||this.readyState=="loaded"||this.readyState=="complete")){O=true;I();L();T.onload=T.onreadystatechange=null;H.removeChild(T)}}}H.appendChild(T);return g}var K=false;var J=M.xhr();if(M.username){J.open(G,M.url,M.async,M.username,M.password)}else{J.open(G,M.url,M.async)}try{if(M.data){J.setRequestHeader("Content-Type",M.contentType)}if(M.ifModified){J.setRequestHeader("If-Modified-Since",o.lastModified[M.url]||"Thu, 01 Jan 1970 00:00:00 GMT")}J.setRequestHeader("X-Requested-With","XMLHttpRequest");J.setRequestHeader("Accept",M.dataType&&M.accepts[M.dataType]?M.accepts[M.dataType]+", */*":M.accepts._default)}catch(S){}if(M.beforeSend&&M.beforeSend(J,M)===false){if(M.global&&!--o.active){o.event.trigger("ajaxStop")}J.abort();return false}if(M.global){o.event.trigger("ajaxSend",[J,M])}var N=function(X){if(J.readyState==0){if(P){clearInterval(P);P=null;if(M.global&&!--o.active){o.event.trigger("ajaxStop")}}}else{if(!K&&J&&(J.readyState==4||X=="timeout")){K=true;if(P){clearInterval(P);P=null}R=X=="timeout"?"timeout":!o.httpSuccess(J)?"error":M.ifModified&&o.httpNotModified(J,M.url)?"notmodified":"success";if(R=="success"){try{V=o.httpData(J,M.dataType,M)}catch(Z){R="parsererror"}}if(R=="success"){var Y;try{Y=J.getResponseHeader("Last-Modified")}catch(Z){}if(M.ifModified&&Y){o.lastModified[M.url]=Y}if(!W){I()}}else{o.handleError(M,J,R)}L();if(X){J.abort()}if(M.async){J=null}}}};if(M.async){var P=setInterval(N,13);if(M.timeout>0){setTimeout(function(){if(J&&!K){N("timeout")}},M.timeout)}}try{J.send(M.data)}catch(S){o.handleError(M,J,null,S)}if(!M.async){N()}function I(){if(M.success){M.success(V,R)}if(M.global){o.event.trigger("ajaxSuccess",[J,M])}}function L(){if(M.complete){M.complete(J,R)}if(M.global){o.event.trigger("ajaxComplete",[J,M])}if(M.global&&!--o.active){o.event.trigger("ajaxStop")}}return J},handleError:function(F,H,E,G){if(F.error){F.error(H,E,G)}if(F.global){o.event.trigger("ajaxError",[H,F,G])}},active:0,httpSuccess:function(F){try{return !F.status&&location.protocol=="file:"||(F.status>=200&&F.status<300)||F.status==304||F.status==1223}catch(E){}return false},httpNotModified:function(G,E){try{var H=G.getResponseHeader("Last-Modified");return G.status==304||H==o.lastModified[E]}catch(F){}return false},httpData:function(J,H,G){var F=J.getResponseHeader("content-type"),E=H=="xml"||!H&&F&&F.indexOf("xml")>=0,I=E?J.responseXML:J.responseText;if(E&&I.documentElement.tagName=="parsererror"){throw"parsererror"}if(G&&G.dataFilter){I=G.dataFilter(I,H)}if(typeof I==="string"){if(H=="script"){o.globalEval(I)}if(H=="json"){I=l["eval"]("("+I+")")}}return I},param:function(E){var G=[];function H(I,J){G[G.length]=encodeURIComponent(I)+"="+encodeURIComponent(J)}if(o.isArray(E)||E.jquery){o.each(E,function(){H(this.name,this.value)})}else{for(var F in E){if(o.isArray(E[F])){o.each(E[F],function(){H(F,this)})}else{H(F,o.isFunction(E[F])?E[F]():E[F])}}}return G.join("&").replace(/%20/g,"+")}});var m={},n,d=[["height","marginTop","marginBottom","paddingTop","paddingBottom"],["width","marginLeft","marginRight","paddingLeft","paddingRight"],["opacity"]];function t(F,E){var G={};o.each(d.concat.apply([],d.slice(0,E)),function()
-{G[this]=F});return G}o.fn.extend({show:function(J,L){if(J){return this.animate(t("show",3),J,L)}else{for(var H=0,F=this.length;H<F;H++){var E=o.data(this[H],"olddisplay");this[H].style.display=E||"";if(o.css(this[H],"display")==="none"){var G=this[H].tagName,K;if(m[G]){K=m[G]}else{var I=o("<"+G+" />").appendTo("body");K=I.css("display");if(K==="none"){K="block"}I.remove();m[G]=K}o.data(this[H],"olddisplay",K)}}for(var H=0,F=this.length;H<F;H++){this[H].style.display=o.data(this[H],"olddisplay")||""}return this}},hide:function(H,I){if(H){return this.animate(t("hide",3),H,I)}else{for(var G=0,F=this.length;G<F;G++){var E=o.data(this[G],"olddisplay");if(!E&&E!=="none"){o.data(this[G],"olddisplay",o.css(this[G],"display"))}}for(var G=0,F=this.length;G<F;G++){this[G].style.display="none"}return this}},_toggle:o.fn.toggle,toggle:function(G,F){var E=typeof G==="boolean";return o.isFunction(G)&&o.isFunction(F)?this._toggle.apply(this,arguments):G==null||E?this.each(function(){var H=E?G:o(this).is(":hidden");o(this)[H?"show":"hide"]()}):this.animate(t("toggle",3),G,F)},fadeTo:function(E,G,F){return this.animate({opacity:G},E,F)},animate:function(I,F,H,G){var E=o.speed(F,H,G);return this[E.queue===false?"each":"queue"](function(){var K=o.extend({},E),M,L=this.nodeType==1&&o(this).is(":hidden"),J=this;for(M in I){if(I[M]=="hide"&&L||I[M]=="show"&&!L){return K.complete.call(this)}if((M=="height"||M=="width")&&this.style){K.display=o.css(this,"display");K.overflow=this.style.overflow}}if(K.overflow!=null){this.style.overflow="hidden"}K.curAnim=o.extend({},I);o.each(I,function(O,S){var R=new o.fx(J,K,O);if(/toggle|show|hide/.test(S)){R[S=="toggle"?L?"show":"hide":S](I)}else{var Q=S.toString().match(/^([+-]=)?([\d+-.]+)(.*)$/),T=R.cur(true)||0;if(Q){var N=parseFloat(Q[2]),P=Q[3]||"px";if(P!="px"){J.style[O]=(N||1)+P;T=((N||1)/R.cur(true))*T;J.style[O]=T+P}if(Q[1]){N=((Q[1]=="-="?-1:1)*N)+T}R.custom(T,N,P)}else{R.custom(T,S,"")}}});return true})},stop:function(F,E){var G=o.timers;if(F){this.queue([])}this.each(function(){for(var H=G.length-1;H>=0;H--){if(G[H].elem==this){if(E){G[H](true)}G.splice(H,1)}}});if(!E){this.dequeue()}return this}});o.each({slideDown:t("show",1),slideUp:t("hide",1),slideToggle:t("toggle",1),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"}},function(E,F){o.fn[E]=function(G,H){return this.animate(F,G,H)}});o.extend({speed:function(G,H,F){var E=typeof G==="object"?G:{complete:F||!F&&H||o.isFunction(G)&&G,duration:G,easing:F&&H||H&&!o.isFunction(H)&&H};E.duration=o.fx.off?0:typeof E.duration==="number"?E.duration:o.fx.speeds[E.duration]||o.fx.speeds._default;E.old=E.complete;E.complete=function(){if(E.queue!==false){o(this).dequeue()}if(o.isFunction(E.old)){E.old.call(this)}};return E},easing:{linear:function(G,H,E,F){return E+F*G},swing:function(G,H,E,F){return((-Math.cos(G*Math.PI)/2)+0.5)*F+E}},timers:[],fx:function(F,E,G){this.options=E;this.elem=F;this.prop=G;if(!E.orig){E.orig={}}}});o.fx.prototype={update:function(){if(this.options.step){this.options.step.call(this.elem,this.now,this)}(o.fx.step[this.prop]||o.fx.step._default)(this);if((this.prop=="height"||this.prop=="width")&&this.elem.style){this.elem.style.display="block"}},cur:function(F){if(this.elem[this.prop]!=null&&(!this.elem.style||this.elem.style[this.prop]==null)){return this.elem[this.prop]}var E=parseFloat(o.css(this.elem,this.prop,F));return E&&E>-10000?E:parseFloat(o.curCSS(this.elem,this.prop))||0},custom:function(I,H,G){this.startTime=e();this.start=I;this.end=H;this.unit=G||this.unit||"px";this.now=this.start;this.pos=this.state=0;var E=this;function F(J){return E.step(J)}F.elem=this.elem;if(F()&&o.timers.push(F)&&!n){n=setInterval(function(){var K=o.timers;for(var J=0;J<K.length;J++){if(!K[J]()){K.splice(J--,1)}}if(!K.length){clearInterval(n);n=g}},13)}},show:function(){this.options.orig[this.prop]=o.attr(this.elem.style,this.prop);this.options.show=true;this.custom(this.prop=="width"||this.prop=="height"?1:0,this.cur());o(this.elem).show()},hide:function(){this.options.orig[this.prop]=o.attr(this.elem.style,this.prop);this.options.hide=true;this.custom(this.cur(),0)},step:function(H){var G=e();if(H||G>=this.options.duration+this.startTime){this.now=this.end;this.pos=this.state=1;this.update();this.options.curAnim[this.prop]=true;var E=true;for(var F in this.options.curAnim){if(this.options.curAnim[F]!==true){E=false}}if(E){if(this.options.display!=null){this.elem.style.overflow=this.options.overflow;this.elem.style.display=this.options.display;if(o.css(this.elem,"display")=="none"){this.elem.style.display="block"}}if(this.options.hide){o(this.elem).hide()}if(this.options.hide||this.options.show){for(var I in this.options.curAnim){o.attr(this.elem.style,I,this.options.orig[I])}}this.options.complete.call(this.elem)}return false}else{var J=G-this.startTime;this.state=J/this.options.duration;this.pos=o.easing[this.options.easing||(o.easing.swing?"swing":"linear")](this.state,J,0,1,this.options.duration);this.now=this.start+((this.end-this.start)*this.pos);this.update()}return true}};o.extend(o.fx,{speeds:{slow:600,fast:200,_default:400},step:{opacity:function(E){o.attr(E.elem.style,"opacity",E.now)},_default:function(E){if(E.elem.style&&E.elem.style[E.prop]!=null){E.elem.style[E.prop]=E.now+E.unit}else{E.elem[E.prop]=E.now}}}});if(document.documentElement.getBoundingClientRect){o.fn.offset=function(){if(!this[0]){return{top:0,left:0}}if(this[0]===this[0].ownerDocument.body){return o.offset.bodyOffset(this[0])}var G=this[0].getBoundingClientRect(),J=this[0].ownerDocument,F=J.body,E=J.documentElement,L=E.clientTop||F.clientTop||0,K=E.clientLeft||F.clientLeft||0,I=G.top+(self.pageYOffset||o.boxModel&&E.scrollTop||F.scrollTop)-L,H=G.left+(self.pageXOffset||o.boxModel&&E.scrollLeft||F.scrollLeft)-K;return{top:I,left:H}}}else{o.fn.offset=function(){if(!this[0]){return{top:0,left:0}}if(this[0]===this[0].ownerDocument.body){return o.offset.bodyOffset(this[0])}o.offset.initialized||o.offset.initialize();var J=this[0],G=J.offsetParent,F=J,O=J.ownerDocument,M,H=O.documentElement,K=O.body,L=O.defaultView,E=L.getComputedStyle(J,null),N=J.offsetTop,I=J.offsetLeft;while((J=J.parentNode)&&J!==K&&J!==H){M=L.getComputedStyle(J,null);N-=J.scrollTop,I-=J.scrollLeft;if(J===G){N+=J.offsetTop,I+=J.offsetLeft;if(o.offset.doesNotAddBorder&&!(o.offset.doesAddBorderForTableAndCells&&/^t(able|d|h)$/i.test(J.tagName))){N+=parseInt(M.borderTopWidth,10)||0,I+=parseInt(M.borderLeftWidth,10)||0}F=G,G=J.offsetParent}if(o.offset.subtractsBorderForOverflowNotVisible&&M.overflow!=="visible"){N+=parseInt(M.borderTopWidth,10)||0,I+=parseInt(M.borderLeftWidth,10)||0}E=M}if(E.position==="relative"||E.position==="static"){N+=K.offsetTop,I+=K.offsetLeft}if(E.position==="fixed"){N+=Math.max(H.scrollTop,K.scrollTop),I+=Math.max(H.scrollLeft,K.scrollLeft)}return{top:N,left:I}}}o.offset={initialize:function(){if(this.initialized){return}var L=document.body,F=document.createElement("div"),H,G,N,I,M,E,J=L.style.marginTop,K='<div style="position:absolute;top:0;left:0;margin:0;border:5px solid #000;padding:0;width:1px;height:1px;"><div></div></div><table style="position:absolute;top:0;left:0;margin:0;border:5px solid #000;padding:0;width:1px;height:1px;" cellpadding="0" cellspacing="0"><tr><td></td></tr></table>';M={position:"absolute",top:0,left:0,margin:0,border:0,width:"1px",height:"1px",visibility:"hidden"};for(E in M){F.style[E]=M[E]}F.innerHTML=K;L.insertBefore(F,L.firstChild);H=F.firstChild,G=H.firstChild,I=H.nextSibling.firstChild.firstChild;this.doesNotAddBorder=(G.offsetTop!==5);this.doesAddBorderForTableAndCells=(I.offsetTop===5);H.style.overflow="hidden",H.style.position="relative";this.subtractsBorderForOverflowNotVisible=(G.offsetTop===-5);L.style.marginTop="1px";this.doesNotIncludeMarginInBodyOffset=(L.offsetTop===0);L.style.marginTop=J;L.removeChild(F);this.initialized=true},bodyOffset:function(E){o.offset.initialized||o.offset.initialize();var G=E.offsetTop,F=E.offsetLeft;if(o.offset.doesNotIncludeMarginInBodyOffset){G+=parseInt(o.curCSS(E,"marginTop",true),10)||0,F+=parseInt(o.curCSS(E,"marginLeft",true),10)||0}return{top:G,left:F}}};o.fn.extend({position:function(){var I=0,H=0,F;if(this[0]){var G=this.offsetParent(),J=this.offset(),E=/^body|html$/i.test(G[0].tagName)?{top:0,left:0}:G.offset();J.top-=j(this,"marginTop");J.left-=j(this,"marginLeft");E.top+=j(G,"borderTopWidth");E.left+=j(G,"borderLeftWidth");F={top:J.top-E.top,left:J.left-E.left}}return F},offsetParent:function(){var E=this[0].offsetParent||document.body;while(E&&(!/^body|html$/i.test(E.tagName)&&o.css(E,"position")=="static")){E=E.offsetParent}return o(E)}});o.each(["Left","Top"],function(F,E){var G="scroll"+E;o.fn[G]=function(H){if(!this[0]){return null}return H!==g?this.each(function(){this==l||this==document?l.scrollTo(!F?H:o(l).scrollLeft(),F?H:o(l).scrollTop()):this[G]=H}):this[0]==l||this[0]==document?self[F?"pageYOffset":"pageXOffset"]||o.boxModel&&document.documentElement[G]||document.body[G]:this[0][G]}});o.each(["Height","Width"],function(I,G){var E=I?"Left":"Top",H=I?"Right":"Bottom",F=G.toLowerCase();o.fn["inner"+G]=function(){return this[0]?o.css(this[0],F,false,"padding"):null};o.fn["outer"+G]=function(K){return this[0]?o.css(this[0],F,false,K?"margin":"border"):null};var J=G.toLowerCase();o.fn[J]=function(K){return this[0]==l?document.compatMode=="CSS1Compat"&&document.documentElement["client"+G]||document.body["client"+G]:this[0]==document?Math.max(document.documentElement["client"+G],document.body["scroll"+G],document.documentElement["scroll"+G],document.body["offset"+G],document.documentElement["offset"+G]):K===g?(this.length?o.css(this[0],J):null):this.css(J,typeof K==="string"?K:K+"px")}})})();
-
-/*
- * jQuery hashchange event - v1.3 - 7/21/2010
- * http://benalman.com/projects/jquery-hashchange-plugin/
- *
- * Copyright (c) 2010 "Cowboy" Ben Alman
- * Dual licensed under the MIT and GPL licenses.
- * http://benalman.com/about/license/
- */
-(function($,e,b){var c="hashchange",h=document,f,g=$.event.special,i=h.documentMode,d="on"+c in e&&(i===b||i>7);function a(j){j=j||location.href;return"#"+j.replace(/^[^#]*#?(.*)$/,"$1")}$.fn[c]=function(j){return j?this.bind(c,j):this.trigger(c)};$.fn[c].delay=50;g[c]=$.extend(g[c],{setup:function(){if(d){return false}$(f.start)},teardown:function(){if(d){return false}$(f.stop)}});f=(function(){var j={},p,m=a(),k=function(q){return q},l=k,o=k;j.start=function(){p||n()};j.stop=function(){p&&clearTimeout(p);p=b};function n(){var r=a(),q=o(m);if(r!==m){l(m=r,q);$(e).trigger(c)}else{if(q!==m){location.href=location.href.replace(/#.*/,"")+q}}p=setTimeout(n,$.fn[c].delay)}$.browser.msie&&!d&&(function(){var q,r;j.start=function(){if(!q){r=$.fn[c].src;r=r&&r+a();q=$('<iframe tabindex="-1" title="empty"/>').hide().one("load",function(){r||l(a());n()}).attr("src",r||"javascript:0").insertAfter("body")[0].contentWindow;h.onpropertychange=function(){try{if(event.propertyName==="title"){q.document.title=h.title}}catch(s){}}}};j.stop=k;o=function(){return a(q.location.href)};l=function(v,s){var u=q.document,t=$.fn[c].domain;if(v!==s){u.title=h.title;u.open();t&&u.write('<script>document.domain="'+t+'"<\/script>');u.close();q.location.hash=v}}})();return j})()})(jQuery,this);
diff --git a/trunk/src/sizzle_js.h b/trunk/src/sizzle_js.h
deleted file mode 100644
index c4f753b..0000000
--- a/trunk/src/sizzle_js.h
+++ /dev/null
@@ -1,19 +0,0 @@
-"/*\n"
-" * Sizzle CSS Selector Engine - v0.9.3\n"
-" * Copyright 2009, The Dojo Foundation\n"
-" * Released under the MIT, BSD, and GPL Licenses.\n"
-" * More information: http://sizzlejs.com/\n"
-" */\n"
-"(function(){var R=/((?:\\((?:\\([^()]+\\)|[^()]+)+\\)|\\[(?:\\[[^[\\]]*\\]|['\"][^'\"]*['\"]|[^[\\]'\"]+)+\\]|\\\\.|[^ >+~,(\\[\\\\]+)+|[>+~])(\\s*,\\s*)?/g,L=0,H=Object.prototype.toString;var F=function(Y,U,ab,ac){ab=ab||[];U=U||document;if(U.nodeType!==1&&U.nodeType!==9){return[]}if(!Y||typeof Y!==\"string\"){return ab}var Z=[],W,af,ai,T,ad,V,X=true;R.lastIndex=0;while((W=R.exec(Y))!==null){Z.push(W[1]);if(W[2]){V=RegExp.rightContext;break}}if(Z.length>1&&M.exec(Y)){if(Z.length===2&&I.relative[Z[0]]){af=J(Z[0]+Z[1],U)}else{af=I.relative[Z[0]]?[U]:F(Z.shift(),U);while(Z.length){Y=Z.shift();if(I.relative[Y]){Y+=Z.shift()}af=J(Y,af)}}}else{var ae=ac?{expr:Z.pop(),set:E(ac)}:F.find(Z.pop(),Z.length===1&&U.parentNode?U.parentNode:U,Q(U));af=F.filter(ae.expr,ae.set);if(Z.length>0){ai=E(af)}else{X=false}while(Z.length){var ah=Z.pop(),ag=ah;if(!I.relative[ah]){ah=\"\"}else{ag=Z.pop()}if(ag==null){ag=U}I.relative[ah](ai,ag,Q(U))}}if(!ai){ai=af}if(!ai){throw\"Syntax error, unrecognized expression: \"+(ah||Y)}if(H.call(ai)===\"[object Array]\"){if(!X){ab.push.apply(ab,ai)}else{if(U.nodeType===1){for(var aa=0;ai[aa]!=null;aa++){if(ai[aa]&&(ai[aa]===true||ai[aa].nodeType===1&&K(U,ai[aa]))){ab.push(af[aa])}}}else{for(var aa=0;ai[aa]!=null;aa++){if(ai[aa]&&ai[aa].nodeType===1){ab.push(af[aa])}}}}}else{E(ai,ab)}if(V){F(V,U,ab,ac);if(G){hasDuplicate=false;ab.sort(G);if(hasDuplicate){for(var aa=1;aa<ab.length;aa++){if(ab[aa]===ab[aa-1]){ab.splice(aa--,1)}}}}}return ab};F.matches=function(T,U){return F(T,null,null,U)};F.find=function(aa,T,ab){var Z,X;if(!aa){return[]}for(var W=0,V=I.order.length;W<V;W++){var Y=I.order[W],X;if((X=I.match[Y].exec(aa))){var U=RegExp.leftContext;if(U.substr(U.length-1)!==\"\\\\\"){X[1]=(X[1]||\"\").replace(/\\\\/g,\"\");Z=I.find[Y](X,T,ab);if(Z!=null){aa=aa.replace(I.match[Y],\"\");break}}}}if(!Z){Z=T.getElementsByTagName(\"*\")}return{set:Z,expr:aa}};F.filter=function(ad,ac,ag,W){var V=ad,ai=[],aa=ac,Y,T,Z=ac&&ac[0]&&Q(ac[0]);while(ad&&ac.length){for(var ab in I.filter){if((Y=I.match[ab].exec(ad))!=null){var U=I.filter[ab],ah,af;T=false;if(aa==ai){ai=[]}if(I.preFilter[ab]){Y=I.preFilter[ab](Y,aa,ag,ai,W,Z);if(!Y){T=ah=true}else{if(Y===true){continue}}}if(Y){for(var X=0;(af=aa[X])!=null;X++){if(af){ah=U(af,Y,X,aa);var ae=W^!!ah;if(ag&&ah!=null){if(ae){T=true}else{aa[X]=false}}else{if(ae){ai.push(af);T=true}}}}}if(ah!==g){if(!ag){aa=ai}ad=ad.replace(I.match[ab],\"\");if(!T){return[]}break}}}if(ad==V){if(T==null){throw\"Syntax error, unrecognized expression: \"+ad}else{break}}V=ad}return aa};var I=F.selectors={order:[\"ID\",\"NAME\",\"TAG\"],match:{ID:/#((?:[\\w\\u00c0-\\uFFFF_-]|\\\\.)+)/,CLASS:/\\.((?:[\\w\\u00c0-\\uFFFF_-]|\\\\.)+)/,NAME:/\\[name=['\"]*((?:[\\w\\u00c0-\\uFFFF_-]|\\\\.)+)['\"]*\\]/,ATTR:/\\[\\s*((?:[\\w\\u00c0-\\uFFFF_-]|\\\\.)+)\\s*(?:(\\S?=)\\s*(['\"]*)(.*?)\\3|)\\s*\\]/,TAG:/^((?:[\\w\\u00c0-\\uFFFF\\*_-]|\\\\.)+)/,CHILD:/:(only|nth|last|first)-child(?:\\((even|odd|[\\dn+-]*)\\))?/,POS:/:(nth|eq|gt|lt|first|last|even|odd)(?:\\((\\d*)\\))?(?=[^-]|$)/,PSEUDO:/:((?:[\\w\\u00c0-\\uFFFF_-]|\\\\.)+)(?:\\((['\"]*)((?:\\([^\\)]+\\)|[^\\2\\(\\)]*)+)\\2\\))?/},attrMap:{\"class\":\"className\",\"for\":\"htmlFor\"},attrHandle:{href:function(T){return T.getAttribute(\"href\")}},relative:{\"+\":function(aa,T,Z){var X=typeof T===\"string\",ab=X&&!/\\W/.test(T),Y=X&&!ab;if(ab&&!Z){T=T.toUpperCase()}for(var W=0,V=aa.length,U;W<V;W++){if((U=aa[W])){while((U=U.previousSibling)&&U.nodeType!==1){}aa[W]=Y||U&&U.nodeName===T?U||false:U===T}}if(Y){F.filter(T,aa,true)}},\">\":function(Z,U,aa){var X=typeof U===\"string\";if(X&&!/\\W/.test(U)){U=aa?U:U.toUpperCase();for(var V=0,T=Z.length;V<T;V++){var Y=Z[V];if(Y){var W=Y.parentNode;Z[V]=W.nodeName===U?W:false}}}else{for(var V=0,T=Z.length;V<T;V++){var Y=Z[V];if(Y){Z[V]=X?Y.parentNode:Y.parentNode===U}}if(X){F.filter(U,Z,true)}}},\"\":function(W,U,Y){var V=L++,T=S;if(!U.match(/\\W/)){var X=U=Y?U:U.toUpperCase();T=P}T(\"parentNode\",U,V,W,X,Y)},\"~\":function(W,U,Y){var V=L++,T=S;if(typeof U===\"string\"&&!U.match(/\\W/)){var X=U=Y?U:U.toUpperCase();T=P}T(\"previousSibling\",U,V,W,X,Y)}},find:{ID:function(U,V,W){if(typeof V.getElementById!==\"undefined\"&&!W){var T=V.getElementById(U[1]);return T?[T]:[]}},NAME:function(V,Y,Z){if(typeof Y.getElementsByName!==\"undefined\"){var U=[],X=Y.getElementsByName(V[1]);for(var W=0,T=X.length;W<T;W++){if(X[W].getAttribute(\"name\")===V[1]){U.push(X[W])}}return U.length===0?null:U}},TAG:function(T,U){return U.getElementsByTagName(T[1])}},preFilter:{CLASS:function(W,U,V,T,Z,aa){W=\" \"+W[1].replace(/\\\\/g,\"\")+\" \";if(aa){return W}for(var X=0,Y;(Y=U[X])!=null;X++){if(Y){if(Z^(Y.className&&(\" \"+Y.className+\" \").indexOf(W)>=0)){if(!V){T.push(Y)}}else{if(V){U[X]=false}}}}return false},ID:function(T){return T[1].replace(/\\\\/g,\"\")},TAG:function(U,T){for(var V=0;T[V]===false;V++){}return T[V]&&Q(T[V])?U[1]:U[1].toUpperCase()},CHILD:function(T){if(T[1]==\"nth\"){var U=/(-?)(\\d*)n((?:\\+|-)?\\d*)/.exec(T[2]==\"even\"&&\"2n\"||T[2]==\"odd\"&&\"2n+1\"||!/\\D/.test(T[2])&&\"0n+\"+T[2]||T[2]);T[2]=(U[1]+(U[2]||1))-0;T[3]=U[3]-0}T[0]=L++;return T},ATTR:function(X,U,V,T,Y,Z){var W=X[1].replace(/\\\\/g,\"\");if(!Z&&I.attrMap[W]){X[1]=I.attrMap[W]}if(X[2]===\"~=\"){X[4]=\" \"+X[4]+\" \"}return X},PSEUDO:function(X,U,V,T,Y){if(X[1]===\"not\"){if(X[3].match(R).length>1||/^\\w/.test(X[3])){X[3]=F(X[3],null,null,U)}else{var W=F.filter(X[3],U,V,true^Y);if(!V){T.push.apply(T,W)}return false}}else{if(I.match.POS.test(X[0])||I.match.CHILD.test(X[0])){return true}}return X},POS:function(T){T.unshift(true);return T}},filters:{enabled:function(T){return T.disabled===false&&T.type!==\"hidden\"},disabled:function(T){return T.disabled===true},checked:function(T){return T.checked===true},selected:function(T){T.parentNode.selectedIndex;return T.selected===true},parent:function(T){return !!T.firstChild},empty:function(T){return !T.firstChild},has:function(V,U,T){return !!F(T[3],V).length},header:function(T){return/h\\d/i.test(T.nodeName)},text:function(T){return\"text\"===T.type},radio:function(T){return\"radio\"===T.type},checkbox:function(T){return\"checkbox\"===T.type},file:function(T){return\"file\"===T.type},password:function(T){return\"password\"===T.type},submit:function(T){return\"submit\"===T.type},image:function(T){return\"image\"===T.type},reset:function(T){return\"reset\"===T.type},button:function(T){return\"button\"===T.type||T.nodeName.toUpperCase()===\"BUTTON\"},input:function(T){return/input|select|textarea|button/i.test(T.nodeName)}},setFilters:{first:function(U,T){return T===0},last:function(V,U,T,W){return U===W.length-1},even:function(U,T){return T%2===0},odd:function(U,T){return T%2===1},lt:function(V,U,T){return U<T[3]-0},gt:function(V,U,T){return U>T[3]-0},nth:function(V,U,T){return T[3]-0==U},eq:function(V,U,T){return T[3]-0==U}},filter:{PSEUDO:function(Z,V,W,aa){var U=V[1],X=I.filters[U];if(X){return X(Z,W,V,aa)}else{if(U===\"contains\"){return(Z.textContent||Z.innerText||\"\").indexOf(V[3])>=0}else{if(U===\"not\"){var Y=V[3];for(var W=0,T=Y.length;W<T;W++){if(Y[W]===Z){return false}}return true}}}},CHILD:function(T,W){var Z=W[1],U=T;switch(Z){case\"only\":case\"first\":while(U=U.previousSibling){if(U.nodeType===1){return false}}if(Z==\"first\"){return true}U=T;case\"last\":while(U=U.nextSibling){if(U.nodeType===1){return false}}return true;case\"nth\":var V=W[2],ac=W[3];if(V==1&&ac==0){return true}var Y=W[0],ab=T.parentNode;if(ab&&(ab.sizcache!==Y||!T.nodeIndex)){var X=0;for(U=ab.firstChild;U;U=U.nextSibling){if(U.nodeType===1){U.nodeIndex=++X}}ab.sizcache=Y}var aa=T.nodeIndex-ac;if(V==0){return aa==0}else{return(aa%V==0&&aa/V>=0)}}},ID:function(U,T){return U.nodeType===1&&U.getAttribute(\"id\")===T},TAG:function(U,T){return(T===\"*\"&&U.nodeType===1)||U.nodeName===T},CLASS:function(U,T){return(\" \"+(U.className||U.getAttribute(\"class\"))+\" \").indexOf(T)>-1},ATTR:function(Y,W){var V=W[1],T=I.attrHandle[V]?I.attrHandle[V](Y):Y[V]!=null?Y[V]:Y.getAttribute(V),Z=T+\"\",X=W[2],U=W[4];return T==null?X===\"!=\":X===\"=\"?Z===U:X===\"*=\"?Z.indexOf(U)>=0:X===\"~=\"?(\" \"+Z+\" \").indexOf(U)>=0:!U?Z&&T!==false:X===\"!=\"?Z!=U:X===\"^=\"?Z.indexOf(U)===0:X===\"$=\"?Z.substr(Z.length-U.length)===U:X===\"|=\"?Z===U||Z.substr(0,U.length+1)===U+\"-\":false},POS:function(X,U,V,Y){var T=U[2],W=I.setFilters[T];if(W){return W(X,V,U,Y)}}}};var M=I.match.POS;for(var O in I.match){I.match[O]=RegExp(I.match[O].source+/(?![^\\[]*\\])(?![^\\(]*\\))/.source)}var E=function(U,T){U=Array.prototype.slice.call(U);if(T){T.push.apply(T,U);return T}return U};try{Array.prototype.slice.call(document.documentElement.childNodes)}catch(N){E=function(X,W){var U=W||[];if(H.call(X)===\"[object Array]\"){Array.prototype.push.apply(U,X)}else{if(typeof X.length===\"number\"){for(var V=0,T=X.length;V<T;V++){U.push(X[V])}}else{for(var V=0;X[V];V++){U.push(X[V])}}}return U}}var G;if(document.documentElement.compareDocumentPosition){G=function(U,T){var V=U.compareDocumentPosition(T)&4?-1:U===T?0:1;if(V===0){hasDuplicate=true}return V}}else{if(\"sourceIndex\" in document.documentElement){G=function(U,T){var V=U.sourceIndex-T.sourceIndex;if(V===0){hasDuplicate=true}return V}}else{if(document.createRange){G=function(W,U){var V=W.ownerDocument.createRange(),T=U.ownerDocument.createRange();V.selectNode(W);V.collapse(true);T.selectNode(U);T.collapse(true);var X=V.compareBoundaryPoints(Range.START_TO_END,T);if(X===0){hasDuplicate=true}return X}}}}(function(){var U=document.createElement(\"form\"),V=\"script\"+(new Date).getTime();U.innerHTML=\"<input name='\"+V+\"'/>\";var T=document.documentElement;T.insertBefore(U,T.firstChild);if(!!document.getElementById(V)){I.find.ID=function(X,Y,Z){if(typeof Y.getElementById!==\"undefined\"&&!Z){var W=Y.getElementById(X[1]);return W?W.id===X[1]||typeof W.getAttributeNode!==\"undefined\"&&W.getAttributeNode(\"id\").nodeValue===X[1]?[W]:g:[]}};I.filter.ID=function(Y,W){var X=typeof Y.getAttributeNode!==\"undefined\"&&Y.getAttributeNode(\"id\");return Y.nodeType===1&&X&&X.nodeValue===W}}T.removeChild(U)})();(function(){var T=document.createElement(\"div\");T.appendChild(document.createComment(\"\"));if(T.getElementsByTagName(\"*\").length>0){I.find.TAG=function(U,Y){var X=Y.getElementsByTagName(U[1]);if(U[1]===\"*\"){var W=[];for(var V=0;X[V];V++){if(X[V].nodeType===1){W.push(X[V])}}X=W}return X}}T.innerHTML=\"<a href='#'></a>\";if(T.firstChild&&typeof T.firstChild.getAttribute!==\"undefined\"&&T.firstChild.getAttribute(\"href\")!==\"#\"){I.attrHandle.href=function(U){return U.getAttribute(\"href\",2)}}})();if(document.querySelectorAll){(function(){var T=F,U=document.createElement(\"div\");U.innerHTML=\"<p class='TEST'></p>\";if(U.querySelectorAll&&U.querySelectorAll(\".TEST\").length===0){return}F=function(Y,X,V,W){X=X||document;if(!W&&X.nodeType===9&&!Q(X)){try{return E(X.querySelectorAll(Y),V)}catch(Z){}}return T(Y,X,V,W)};F.find=T.find;F.filter=T.filter;F.selectors=T.selectors;F.matches=T.matches})()}if(document.getElementsByClassName&&document.documentElement.getElementsByClassName){(function(){var T=document.createElement(\"div\");T.innerHTML=\"<div class='test e'></div><div class='test'></div>\";if(T.getElementsByClassName(\"e\").length===0){return}T.lastChild.className=\"e\";if(T.getElementsByClassName(\"e\").length===1){return}I.order.splice(1,0,\"CLASS\");I.find.CLASS=function(U,V,W){if(typeof V.getElementsByClassName!==\"undefined\"&&!W){return V.getElementsByClassName(U[1])}}})()}function P(U,Z,Y,ad,aa,ac){var ab=U==\"previousSibling\"&&!ac;for(var W=0,V=ad.length;W<V;W++){var T=ad[W];if(T){if(ab&&T.nodeType===1){T.sizcache=Y;T.sizset=W}T=T[U];var X=false;while(T){if(T.sizcache===Y){X=ad[T.sizset];break}if(T.nodeType===1&&!ac){T.sizcache=Y;T.sizset=W}if(T.nodeName===Z){X=T;break}T=T[U]}ad[W]=X}}}function S(U,Z,Y,ad,aa,ac){var ab=U==\"previousSibling\"&&!ac;for(var W=0,V=ad.length;W<V;W++){var T=ad[W];if(T){if(ab&&T.nodeType===1){T.sizcache=Y;T.sizset=W}T=T[U];var X=false;while(T){if(T.sizcache===Y){X=ad[T.sizset];break}if(T.nodeType===1){if(!ac){T.sizcache=Y;T.sizset=W}if(typeof Z!==\"string\"){if(T===Z){X=true;break}}else{if(F.filter(Z,[T]).length>0){X=T;break}}}T=T[U]}ad[W]=X}}}var K=document.compareDocumentPosition?function(U,T){return U.compareDocumentPosition(T)&16}:function(U,T){return U!==T&&(U.contains?U.contains(T):true)};var Q=function(T){return T.nodeType===9&&T.documentElement.nodeName!==\"HTML\"||!!T.ownerDocument&&Q(T.ownerDocument)};var J=function(T,aa){var W=[],X=\"\",Y,V=aa.nodeType?[aa]:aa;while((Y=I.match.PSEUDO.exec(T))){X+=Y[0];T=T.replace(I.match.PSEUDO,\"\")}T=I.relative[T]?T+\"*\":T;for(var Z=0,U=V.length;Z<U;Z++){F(T,V[Z],W)}return F.filter(X,W)};o.find=F;o.filter=F.filter;o.expr=F.selectors;o.expr[\":\"]=o.expr.filters;F.selectors.filters.hidden=function(T){return T.offsetWidth===0||T.offsetHeight===0};F.selectors.filters.visible=function(T){return T.offsetWidth>0||T.offsetHeight>0};F.selectors.filters.animated=function(T){return o.grep(o.timers,function(U){return T===U.elem}).length};o.multiFilter=function(V,T,U){if(U){V=\":not(\"+V+\")\"}return F.matches(V,T)};o.dir=function(V,U){var T=[],W=V[U];while(W&&W!=document){if(W.nodeType==1){T.push(W)}W=W[U]}return T};o.nth=function(X,T,V,W){T=T||1;var U=0;for(;X;X=X[V]){if(X.nodeType==1&&++U==T){break}}return X};o.sibling=function(V,U){var T=[];for(;V;V=V.nextSibling){if(V.nodeType==1&&V!=U){T.push(V)}}return T};return;l.Sizzle=F})();o.event={add:function(I,F,H,K){if(I.nodeType==3||I.nodeType==8){return}if(I.setInterval&&I!=l){I=l}if(!H.guid){H.guid=this.guid++}if(K!==g){var G=H;H=this.proxy(G);H.data=K}var E=o.data(I,\"events\")||o.data(I,\"events\",{}),J=o.data(I,\"handle\")||o.data(I,\"handle\",function(){return typeof o!==\"undefined\"&&!o.event.triggered?o.event.handle.apply(arguments.callee.elem,arguments):g});J.elem=I;o.each(F.split(/\\s+/),function(M,N){var O=N.split(\".\");N=O.shift();H.type=O.slice().sort().join(\".\");var L=E[N];if(o.event.specialAll[N]){o.event.specialAll[N].setup.call(I,K,O)}if(!L){L=E[N]={};if(!o.event.special[N]||o.event.special[N].setup.call(I,K,O)===false){if(I.addEventListener){I.addEventListener(N,J,false)}else{if(I.attachEvent){I.attachEvent(\"on\"+N,J)}}}}L[H.guid]=H;o.event.global[N]=true});I=null},guid:1,global:{},remove:function(K,H,J){if(K.nodeType==3||K.nodeType==8){return}var G=o.data(K,\"events\"),F,E;if(G){if(H===g||(typeof H===\"string\"&&H.charAt(0)==\".\")){for(var I in G){this.remove(K,I+(H||\"\"))}}else{if(H.type){J=H.handler;H=H.type}o.each(H.split(/\\s+/),function(M,O){var Q=O.split(\".\");O=Q.shift();var N=RegExp(\"(^|\\\\.)\"+Q.slice().sort().join(\".*\\\\.\")+\"(\\\\.|$)\");if(G[O]){if(J){delete G[O][J.guid]}else{for(var P in G[O]){if(N.test(G[O][P].type)){delete G[O][P]}}}if(o.event.specialAll[O]){o.event.specialAll[O].teardown.call(K,Q)}for(F in G[O]){break}if(!F){if(!o.event.special[O]||o.event.special[O].teardown.call(K,Q)===false){if(K.removeEventListener){K.removeEventListener(O,o.data(K,\"handle\"),false)}else{if(K.detachEvent){K.detachEvent(\"on\"+O,o.data(K,\"handle\"))}}}F=null;delete G[O]}}})}for(F in G){break}if(!F){var L=o.data(K,\"handle\");if(L){L.elem=null}o.removeData(K,\"events\");o.removeData(K,\"handle\")}}},trigger:function(I,K,H,E){var G=I.type||I;if(!E){I=typeof I===\"object\"?I[h]?I:o.extend(o.Event(G),I):o.Event(G);if(G.indexOf(\"!\")>=0)\n"
-"{I.type=G=G.slice(0,-1);I.exclusive=true}if(!H){I.stopPropagation();if(this.global[G]){o.each(o.cache,function(){if(this.events&&this.events[G]){o.event.trigger(I,K,this.handle.elem)}})}}if(!H||H.nodeType==3||H.nodeType==8){return g}I.result=g;I.target=H;K=o.makeArray(K);K.unshift(I)}I.currentTarget=H;var J=o.data(H,\"handle\");if(J){J.apply(H,K)}if((!H[G]||(o.nodeName(H,\"a\")&&G==\"click\"))&&H[\"on\"+G]&&H[\"on\"+G].apply(H,K)===false){I.result=false}if(!E&&H[G]&&!I.isDefaultPrevented()&&!(o.nodeName(H,\"a\")&&G==\"click\")){this.triggered=true;try{H[G]()}catch(L){}}this.triggered=false;if(!I.isPropagationStopped()){var F=H.parentNode||H.ownerDocument;if(F){o.event.trigger(I,K,F,true)}}},handle:function(K){var J,E;K=arguments[0]=o.event.fix(K||l.event);K.currentTarget=this;var L=K.type.split(\".\");K.type=L.shift();J=!L.length&&!K.exclusive;var I=RegExp(\"(^|\\\\.)\"+L.slice().sort().join(\".*\\\\.\")+\"(\\\\.|$)\");E=(o.data(this,\"events\")||{})[K.type];for(var G in E){var H=E[G];if(J||I.test(H.type)){K.handler=H;K.data=H.data;var F=H.apply(this,arguments);if(F!==g){K.result=F;if(F===false){K.preventDefault();K.stopPropagation()}}if(K.isImmediatePropagationStopped()){break}}}},props:\"altKey attrChange attrName bubbles button cancelable charCode clientX clientY ctrlKey currentTarget data detail eventPhase fromElement handler keyCode metaKey newValue originalTarget pageX pageY prevValue relatedNode relatedTarget screenX screenY shiftKey srcElement target toElement view wheelDelta which\".split(\" \"),fix:function(H){if(H[h]){return H}var F=H;H=o.Event(F);for(var G=this.props.length,J;G;){J=this.props[--G];H[J]=F[J]}if(!H.target){H.target=H.srcElement||document}if(H.target.nodeType==3){H.target=H.target.parentNode}if(!H.relatedTarget&&H.fromElement){H.relatedTarget=H.fromElement==H.target?H.toElement:H.fromElement}if(H.pageX==null&&H.clientX!=null){var I=document.documentElement,E=document.body;H.pageX=H.clientX+(I&&I.scrollLeft||E&&E.scrollLeft||0)-(I.clientLeft||0);H.pageY=H.clientY+(I&&I.scrollTop||E&&E.scrollTop||0)-(I.clientTop||0)}if(!H.which&&((H.charCode||H.charCode===0)?H.charCode:H.keyCode)){H.which=H.charCode||H.keyCode}if(!H.metaKey&&H.ctrlKey){H.metaKey=H.ctrlKey}if(!H.which&&H.button){H.which=(H.button&1?1:(H.button&2?3:(H.button&4?2:0)))}return H},proxy:function(F,E){E=E||function(){return F.apply(this,arguments)};E.guid=F.guid=F.guid||E.guid||this.guid++;return E},special:{ready:{setup:B,teardown:function(){}}},specialAll:{live:{setup:function(E,F){o.event.add(this,F[0],c)},teardown:function(G){if(G.length){var E=0,F=RegExp(\"(^|\\\\.)\"+G[0]+\"(\\\\.|$)\");o.each((o.data(this,\"events\").live||{}),function(){if(F.test(this.type)){E++}});if(E<1){o.event.remove(this,G[0],c)}}}}}};o.Event=function(E){if(!this.preventDefault){return new o.Event(E)}if(E&&E.type){this.originalEvent=E;this.type=E.type}else{this.type=E}this.timeStamp=e();this[h]=true};function k(){return false}function u(){return true}o.Event.prototype={preventDefault:function(){this.isDefaultPrevented=u;var E=this.originalEvent;if(!E){return}if(E.preventDefault){E.preventDefault()}E.returnValue=false},stopPropagation:function(){this.isPropagationStopped=u;var E=this.originalEvent;if(!E){return}if(E.stopPropagation){E.stopPropagation()}E.cancelBubble=true},stopImmediatePropagation:function(){this.isImmediatePropagationStopped=u;this.stopPropagation()},isDefaultPrevented:k,isPropagationStopped:k,isImmediatePropagationStopped:k};var a=function(F){var E=F.relatedTarget;while(E&&E!=this){try{E=E.parentNode}catch(G){E=this}}if(E!=this){F.type=F.data;o.event.handle.apply(this,arguments)}};o.each({mouseover:\"mouseenter\",mouseout:\"mouseleave\"},function(F,E){o.event.special[E]={setup:function(){o.event.add(this,F,a,E)},teardown:function(){o.event.remove(this,F,a)}}});o.fn.extend({bind:function(F,G,E){return F==\"unload\"?this.one(F,G,E):this.each(function(){o.event.add(this,F,E||G,E&&G)})},one:function(G,H,F){var E=o.event.proxy(F||H,function(I){o(this).unbind(I,E);return(F||H).apply(this,arguments)});return this.each(function(){o.event.add(this,G,E,F&&H)})},unbind:function(F,E){return this.each(function(){o.event.remove(this,F,E)})},trigger:function(E,F){return this.each(function(){o.event.trigger(E,F,this)})},triggerHandler:function(E,G){if(this[0]){var F=o.Event(E);F.preventDefault();F.stopPropagation();o.event.trigger(F,G,this[0]);return F.result}},toggle:function(G){var E=arguments,F=1;while(F<E.length){o.event.proxy(G,E[F++])}return this.click(o.event.proxy(G,function(H){this.lastToggle=(this.lastToggle||0)%F;H.preventDefault();return E[this.lastToggle++].apply(this,arguments)||false}))},hover:function(E,F){return this.mouseenter(E).mouseleave(F)},ready:function(E){B();if(o.isReady){E.call(document,o)}else{o.readyList.push(E)}return this},live:function(G,F){var E=o.event.proxy(F);E.guid+=this.selector+G;o(document).bind(i(G,this.selector),this.selector,E);return this},die:function(F,E){o(document).unbind(i(F,this.selector),E?{guid:E.guid+this.selector+F}:null);return this}});function c(H){var E=RegExp(\"(^|\\\\.)\"+H.type+\"(\\\\.|$)\"),G=true,F=[];o.each(o.data(this,\"events\").live||[],function(I,J){if(E.test(J.type)){var K=o(H.target).closest(J.data)[0];if(K){F.push({elem:K,fn:J})}}});F.sort(function(J,I){return o.data(J.elem,\"closest\")-o.data(I.elem,\"closest\")});o.each(F,function(){if(this.fn.call(this.elem,H,this.fn.data)===false){return(G=false)}});return G}function i(F,E){return[\"live\",F,E.replace(/\\./g,\"`\").replace(/ /g,\"|\")].join(\".\")}o.extend({isReady:false,readyList:[],ready:function(){if(!o.isReady){o.isReady=true;if(o.readyList){o.each(o.readyList,function(){this.call(document,o)});o.readyList=null}o(document).triggerHandler(\"ready\")}}});var x=false;function B(){if(x){return}x=true;if(document.addEventListener){document.addEventListener(\"DOMContentLoaded\",function(){document.removeEventListener(\"DOMContentLoaded\",arguments.callee,false);o.ready()},false)}else{if(document.attachEvent){document.attachEvent(\"onreadystatechange\",function(){if(document.readyState===\"complete\"){document.detachEvent(\"onreadystatechange\",arguments.callee);o.ready()}});if(document.documentElement.doScroll&&l==l.top){(function(){if(o.isReady){return}try{document.documentElement.doScroll(\"left\")}catch(E){setTimeout(arguments.callee,0);return}o.ready()})()}}}o.event.add(l,\"load\",o.ready)}o.each((\"blur,focus,load,resize,scroll,unload,click,dblclick,mousedown,mouseup,mousemove,mouseover,mouseout,mouseenter,mouseleave,change,select,submit,keydown,keypress,keyup,error\").split(\",\"),function(F,E){o.fn[E]=function(G){return G?this.bind(E,G):this.trigger(E)}});o(l).bind(\"unload\",function(){for(var E in o.cache){if(E!=1&&o.cache[E].handle){o.event.remove(o.cache[E].handle.elem)}}});(function(){o.support={};var F=document.documentElement,G=document.createElement(\"script\"),K=document.createElement(\"div\"),J=\"script\"+(new Date).getTime();K.style.display=\"none\";K.innerHTML=' <link/><table></table><a href=\"/a\" style=\"color:red;float:left;opacity:.5;\">a</a><select><option>text</option></select><object><param/></object>';var H=K.getElementsByTagName(\"*\"),E=K.getElementsByTagName(\"a\")[0];if(!H||!H.length||!E){return}o.support={leadingWhitespace:K.firstChild.nodeType==3,tbody:!K.getElementsByTagName(\"tbody\").length,objectAll:!!K.getElementsByTagName(\"object\")[0].getElementsByTagName(\"*\").length,htmlSerialize:!!K.getElementsByTagName(\"link\").length,style:/red/.test(E.getAttribute(\"style\")),hrefNormalized:E.getAttribute(\"href\")===\"/a\",opacity:E.style.opacity===\"0.5\",cssFloat:!!E.style.cssFloat,scriptEval:false,noCloneEvent:true,boxModel:null};G.type=\"text/javascript\";try{G.appendChild(document.createTextNode(\"window.\"+J+\"=1;\"))}catch(I){}F.insertBefore(G,F.firstChild);if(l[J]){o.support.scriptEval=true;delete l[J]}F.removeChild(G);if(K.attachEvent&&K.fireEvent){K.attachEvent(\"onclick\",function(){o.support.noCloneEvent=false;K.detachEvent(\"onclick\",arguments.callee)});K.cloneNode(true).fireEvent(\"onclick\")}o(function(){var L=document.createElement(\"div\");L.style.width=L.style.paddingLeft=\"1px\";document.body.appendChild(L);o.boxModel=o.support.boxModel=L.offsetWidth===2;document.body.removeChild(L).style.display=\"none\"})})();var w=o.support.cssFloat?\"cssFloat\":\"styleFloat\";o.props={\"for\":\"htmlFor\",\"class\":\"className\",\"float\":w,cssFloat:w,styleFloat:w,readonly:\"readOnly\",maxlength:\"maxLength\",cellspacing:\"cellSpacing\",rowspan:\"rowSpan\",tabindex:\"tabIndex\"};o.fn.extend({_load:o.fn.load,load:function(G,J,K){if(typeof G!==\"string\"){return this._load(G)}var I=G.indexOf(\" \");if(I>=0){var E=G.slice(I,G.length);G=G.slice(0,I)}var H=\"GET\";if(J){if(o.isFunction(J)){K=J;J=null}else{if(typeof J===\"object\"){J=o.param(J);H=\"POST\"}}}var F=this;o.ajax({url:G,type:H,dataType:\"html\",data:J,complete:function(M,L){if(L==\"success\"||L==\"notmodified\"){F.html(E?o(\"<div/>\").append(M.responseText.replace(/<script(.|\\s)*?\\/script>/g,\"\")).find(E):M.responseText)}if(K){F.each(K,[M.responseText,L,M])}}});return this},serialize:function(){return o.param(this.serializeArray())},serializeArray:function(){return this.map(function(){return this.elements?o.makeArray(this.elements):this}).filter(function(){return this.name&&!this.disabled&&(this.checked||/select|textarea/i.test(this.nodeName)||/text|hidden|password|search/i.test(this.type))}).map(function(E,F){var G=o(this).val();return G==null?null:o.isArray(G)?o.map(G,function(I,H){return{name:F.name,value:I}}):{name:F.name,value:G}}).get()}});o.each(\"ajaxStart,ajaxStop,ajaxComplete,ajaxError,ajaxSuccess,ajaxSend\".split(\",\"),function(E,F){o.fn[F]=function(G){return this.bind(F,G)}});var r=e();o.extend({get:function(E,G,H,F){if(o.isFunction(G)){H=G;G=null}return o.ajax({type:\"GET\",url:E,data:G,success:H,dataType:F})},getScript:function(E,F){return o.get(E,null,F,\"script\")},getJSON:function(E,F,G){return o.get(E,F,G,\"json\")},post:function(E,G,H,F){if(o.isFunction(G)){H=G;G={}}return o.ajax({type:\"POST\",url:E,data:G,success:H,dataType:F})},ajaxSetup:function(E){o.extend(o.ajaxSettings,E)},ajaxSettings:{url:location.href,global:true,type:\"GET\",contentType:\"application/x-www-form-urlencoded\",processData:true,async:true,xhr:function(){return l.ActiveXObject?new ActiveXObject(\"Microsoft.XMLHTTP\"):new XMLHttpRequest()},accepts:{xml:\"application/xml, text/xml\",html:\"text/html\",script:\"text/javascript, application/javascript\",json:\"application/json, text/javascript\",text:\"text/plain\",_default:\"*/*\"}},lastModified:{},ajax:function(M){M=o.extend(true,M,o.extend(true,{},o.ajaxSettings,M));var W,F=/=\\?(&|$)/g,R,V,G=M.type.toUpperCase();if(M.data&&M.processData&&typeof M.data!==\"string\"){M.data=o.param(M.data)}if(M.dataType==\"jsonp\"){if(G==\"GET\"){if(!M.url.match(F)){M.url+=(M.url.match(/\\?/)?\"&\":\"?\")+(M.jsonp||\"callback\")+\"=?\"}}else{if(!M.data||!M.data.match(F)){M.data=(M.data?M.data+\"&\":\"\")+(M.jsonp||\"callback\")+\"=?\"}}M.dataType=\"json\"}if(M.dataType==\"json\"&&(M.data&&M.data.match(F)||M.url.match(F))){W=\"jsonp\"+r++;if(M.data){M.data=(M.data+\"\").replace(F,\"=\"+W+\"$1\")}M.url=M.url.replace(F,\"=\"+W+\"$1\");M.dataType=\"script\";l[W]=function(X){V=X;I();L();l[W]=g;try{delete l[W]}catch(Y){}if(H){H.removeChild(T)}}}if(M.dataType==\"script\"&&M.cache==null){M.cache=false}if(M.cache===false&&G==\"GET\"){var E=e();var U=M.url.replace(/(\\?|&)_=.*?(&|$)/,\"$1_=\"+E+\"$2\");M.url=U+((U==M.url)?(M.url.match(/\\?/)?\"&\":\"?\")+\"_=\"+E:\"\")}if(M.data&&G==\"GET\"){M.url+=(M.url.match(/\\?/)?\"&\":\"?\")+M.data;M.data=null}if(M.global&&!o.active++){o.event.trigger(\"ajaxStart\")}var Q=/^(\\w+:)?\\/\\/([^\\/?#]+)/.exec(M.url);if(M.dataType==\"script\"&&G==\"GET\"&&Q&&(Q[1]&&Q[1]!=location.protocol||Q[2]!=location.host)){var H=document.getElementsByTagName(\"head\")[0];var T=document.createElement(\"script\");T.src=M.url;if(M.scriptCharset){T.charset=M.scriptCharset}if(!W){var O=false;T.onload=T.onreadystatechange=function(){if(!O&&(!this.readyState||this.readyState==\"loaded\"||this.readyState==\"complete\")){O=true;I();L();T.onload=T.onreadystatechange=null;H.removeChild(T)}}}H.appendChild(T);return g}var K=false;var J=M.xhr();if(M.username){J.open(G,M.url,M.async,M.username,M.password)}else{J.open(G,M.url,M.async)}try{if(M.data){J.setRequestHeader(\"Content-Type\",M.contentType)}if(M.ifModified){J.setRequestHeader(\"If-Modified-Since\",o.lastModified[M.url]||\"Thu, 01 Jan 1970 00:00:00 GMT\")}J.setRequestHeader(\"X-Requested-With\",\"XMLHttpRequest\");J.setRequestHeader(\"Accept\",M.dataType&&M.accepts[M.dataType]?M.accepts[M.dataType]+\", */*\":M.accepts._default)}catch(S){}if(M.beforeSend&&M.beforeSend(J,M)===false){if(M.global&&!--o.active){o.event.trigger(\"ajaxStop\")}J.abort();return false}if(M.global){o.event.trigger(\"ajaxSend\",[J,M])}var N=function(X){if(J.readyState==0){if(P){clearInterval(P);P=null;if(M.global&&!--o.active){o.event.trigger(\"ajaxStop\")}}}else{if(!K&&J&&(J.readyState==4||X==\"timeout\")){K=true;if(P){clearInterval(P);P=null}R=X==\"timeout\"?\"timeout\":!o.httpSuccess(J)?\"error\":M.ifModified&&o.httpNotModified(J,M.url)?\"notmodified\":\"success\";if(R==\"success\"){try{V=o.httpData(J,M.dataType,M)}catch(Z){R=\"parsererror\"}}if(R==\"success\"){var Y;try{Y=J.getResponseHeader(\"Last-Modified\")}catch(Z){}if(M.ifModified&&Y){o.lastModified[M.url]=Y}if(!W){I()}}else{o.handleError(M,J,R)}L();if(X){J.abort()}if(M.async){J=null}}}};if(M.async){var P=setInterval(N,13);if(M.timeout>0){setTimeout(function(){if(J&&!K){N(\"timeout\")}},M.timeout)}}try{J.send(M.data)}catch(S){o.handleError(M,J,null,S)}if(!M.async){N()}function I(){if(M.success){M.success(V,R)}if(M.global){o.event.trigger(\"ajaxSuccess\",[J,M])}}function L(){if(M.complete){M.complete(J,R)}if(M.global){o.event.trigger(\"ajaxComplete\",[J,M])}if(M.global&&!--o.active){o.event.trigger(\"ajaxStop\")}}return J},handleError:function(F,H,E,G){if(F.error){F.error(H,E,G)}if(F.global){o.event.trigger(\"ajaxError\",[H,F,G])}},active:0,httpSuccess:function(F){try{return !F.status&&location.protocol==\"file:\"||(F.status>=200&&F.status<300)||F.status==304||F.status==1223}catch(E){}return false},httpNotModified:function(G,E){try{var H=G.getResponseHeader(\"Last-Modified\");return G.status==304||H==o.lastModified[E]}catch(F){}return false},httpData:function(J,H,G){var F=J.getResponseHeader(\"content-type\"),E=H==\"xml\"||!H&&F&&F.indexOf(\"xml\")>=0,I=E?J.responseXML:J.responseText;if(E&&I.documentElement.tagName==\"parsererror\"){throw\"parsererror\"}if(G&&G.dataFilter){I=G.dataFilter(I,H)}if(typeof I===\"string\"){if(H==\"script\"){o.globalEval(I)}if(H==\"json\"){I=l[\"eval\"](\"(\"+I+\")\")}}return I},param:function(E){var G=[];function H(I,J){G[G.length]=encodeURIComponent(I)+\"=\"+encodeURIComponent(J)}if(o.isArray(E)||E.jquery){o.each(E,function(){H(this.name,this.value)})}else{for(var F in E){if(o.isArray(E[F])){o.each(E[F],function(){H(F,this)})}else{H(F,o.isFunction(E[F])?E[F]():E[F])}}}return G.join(\"&\").replace(/%20/g,\"+\")}});var m={},n,d=[[\"height\",\"marginTop\",\"marginBottom\",\"paddingTop\",\"paddingBottom\"],[\"width\",\"marginLeft\",\"marginRight\",\"paddingLeft\",\"paddingRight\"],[\"opacity\"]];function t(F,E){var G={};o.each(d.concat.apply([],d.slice(0,E)),function()\n"
-"{G[this]=F});return G}o.fn.extend({show:function(J,L){if(J){return this.animate(t(\"show\",3),J,L)}else{for(var H=0,F=this.length;H<F;H++){var E=o.data(this[H],\"olddisplay\");this[H].style.display=E||\"\";if(o.css(this[H],\"display\")===\"none\"){var G=this[H].tagName,K;if(m[G]){K=m[G]}else{var I=o(\"<\"+G+\" />\").appendTo(\"body\");K=I.css(\"display\");if(K===\"none\"){K=\"block\"}I.remove();m[G]=K}o.data(this[H],\"olddisplay\",K)}}for(var H=0,F=this.length;H<F;H++){this[H].style.display=o.data(this[H],\"olddisplay\")||\"\"}return this}},hide:function(H,I){if(H){return this.animate(t(\"hide\",3),H,I)}else{for(var G=0,F=this.length;G<F;G++){var E=o.data(this[G],\"olddisplay\");if(!E&&E!==\"none\"){o.data(this[G],\"olddisplay\",o.css(this[G],\"display\"))}}for(var G=0,F=this.length;G<F;G++){this[G].style.display=\"none\"}return this}},_toggle:o.fn.toggle,toggle:function(G,F){var E=typeof G===\"boolean\";return o.isFunction(G)&&o.isFunction(F)?this._toggle.apply(this,arguments):G==null||E?this.each(function(){var H=E?G:o(this).is(\":hidden\");o(this)[H?\"show\":\"hide\"]()}):this.animate(t(\"toggle\",3),G,F)},fadeTo:function(E,G,F){return this.animate({opacity:G},E,F)},animate:function(I,F,H,G){var E=o.speed(F,H,G);return this[E.queue===false?\"each\":\"queue\"](function(){var K=o.extend({},E),M,L=this.nodeType==1&&o(this).is(\":hidden\"),J=this;for(M in I){if(I[M]==\"hide\"&&L||I[M]==\"show\"&&!L){return K.complete.call(this)}if((M==\"height\"||M==\"width\")&&this.style){K.display=o.css(this,\"display\");K.overflow=this.style.overflow}}if(K.overflow!=null){this.style.overflow=\"hidden\"}K.curAnim=o.extend({},I);o.each(I,function(O,S){var R=new o.fx(J,K,O);if(/toggle|show|hide/.test(S)){R[S==\"toggle\"?L?\"show\":\"hide\":S](I)}else{var Q=S.toString().match(/^([+-]=)?([\\d+-.]+)(.*)$/),T=R.cur(true)||0;if(Q){var N=parseFloat(Q[2]),P=Q[3]||\"px\";if(P!=\"px\"){J.style[O]=(N||1)+P;T=((N||1)/R.cur(true))*T;J.style[O]=T+P}if(Q[1]){N=((Q[1]==\"-=\"?-1:1)*N)+T}R.custom(T,N,P)}else{R.custom(T,S,\"\")}}});return true})},stop:function(F,E){var G=o.timers;if(F){this.queue([])}this.each(function(){for(var H=G.length-1;H>=0;H--){if(G[H].elem==this){if(E){G[H](true)}G.splice(H,1)}}});if(!E){this.dequeue()}return this}});o.each({slideDown:t(\"show\",1),slideUp:t(\"hide\",1),slideToggle:t(\"toggle\",1),fadeIn:{opacity:\"show\"},fadeOut:{opacity:\"hide\"}},function(E,F){o.fn[E]=function(G,H){return this.animate(F,G,H)}});o.extend({speed:function(G,H,F){var E=typeof G===\"object\"?G:{complete:F||!F&&H||o.isFunction(G)&&G,duration:G,easing:F&&H||H&&!o.isFunction(H)&&H};E.duration=o.fx.off?0:typeof E.duration===\"number\"?E.duration:o.fx.speeds[E.duration]||o.fx.speeds._default;E.old=E.complete;E.complete=function(){if(E.queue!==false){o(this).dequeue()}if(o.isFunction(E.old)){E.old.call(this)}};return E},easing:{linear:function(G,H,E,F){return E+F*G},swing:function(G,H,E,F){return((-Math.cos(G*Math.PI)/2)+0.5)*F+E}},timers:[],fx:function(F,E,G){this.options=E;this.elem=F;this.prop=G;if(!E.orig){E.orig={}}}});o.fx.prototype={update:function(){if(this.options.step){this.options.step.call(this.elem,this.now,this)}(o.fx.step[this.prop]||o.fx.step._default)(this);if((this.prop==\"height\"||this.prop==\"width\")&&this.elem.style){this.elem.style.display=\"block\"}},cur:function(F){if(this.elem[this.prop]!=null&&(!this.elem.style||this.elem.style[this.prop]==null)){return this.elem[this.prop]}var E=parseFloat(o.css(this.elem,this.prop,F));return E&&E>-10000?E:parseFloat(o.curCSS(this.elem,this.prop))||0},custom:function(I,H,G){this.startTime=e();this.start=I;this.end=H;this.unit=G||this.unit||\"px\";this.now=this.start;this.pos=this.state=0;var E=this;function F(J){return E.step(J)}F.elem=this.elem;if(F()&&o.timers.push(F)&&!n){n=setInterval(function(){var K=o.timers;for(var J=0;J<K.length;J++){if(!K[J]()){K.splice(J--,1)}}if(!K.length){clearInterval(n);n=g}},13)}},show:function(){this.options.orig[this.prop]=o.attr(this.elem.style,this.prop);this.options.show=true;this.custom(this.prop==\"width\"||this.prop==\"height\"?1:0,this.cur());o(this.elem).show()},hide:function(){this.options.orig[this.prop]=o.attr(this.elem.style,this.prop);this.options.hide=true;this.custom(this.cur(),0)},step:function(H){var G=e();if(H||G>=this.options.duration+this.startTime){this.now=this.end;this.pos=this.state=1;this.update();this.options.curAnim[this.prop]=true;var E=true;for(var F in this.options.curAnim){if(this.options.curAnim[F]!==true){E=false}}if(E){if(this.options.display!=null){this.elem.style.overflow=this.options.overflow;this.elem.style.display=this.options.display;if(o.css(this.elem,\"display\")==\"none\"){this.elem.style.display=\"block\"}}if(this.options.hide){o(this.elem).hide()}if(this.options.hide||this.options.show){for(var I in this.options.curAnim){o.attr(this.elem.style,I,this.options.orig[I])}}this.options.complete.call(this.elem)}return false}else{var J=G-this.startTime;this.state=J/this.options.duration;this.pos=o.easing[this.options.easing||(o.easing.swing?\"swing\":\"linear\")](this.state,J,0,1,this.options.duration);this.now=this.start+((this.end-this.start)*this.pos);this.update()}return true}};o.extend(o.fx,{speeds:{slow:600,fast:200,_default:400},step:{opacity:function(E){o.attr(E.elem.style,\"opacity\",E.now)},_default:function(E){if(E.elem.style&&E.elem.style[E.prop]!=null){E.elem.style[E.prop]=E.now+E.unit}else{E.elem[E.prop]=E.now}}}});if(document.documentElement.getBoundingClientRect){o.fn.offset=function(){if(!this[0]){return{top:0,left:0}}if(this[0]===this[0].ownerDocument.body){return o.offset.bodyOffset(this[0])}var G=this[0].getBoundingClientRect(),J=this[0].ownerDocument,F=J.body,E=J.documentElement,L=E.clientTop||F.clientTop||0,K=E.clientLeft||F.clientLeft||0,I=G.top+(self.pageYOffset||o.boxModel&&E.scrollTop||F.scrollTop)-L,H=G.left+(self.pageXOffset||o.boxModel&&E.scrollLeft||F.scrollLeft)-K;return{top:I,left:H}}}else{o.fn.offset=function(){if(!this[0]){return{top:0,left:0}}if(this[0]===this[0].ownerDocument.body){return o.offset.bodyOffset(this[0])}o.offset.initialized||o.offset.initialize();var J=this[0],G=J.offsetParent,F=J,O=J.ownerDocument,M,H=O.documentElement,K=O.body,L=O.defaultView,E=L.getComputedStyle(J,null),N=J.offsetTop,I=J.offsetLeft;while((J=J.parentNode)&&J!==K&&J!==H){M=L.getComputedStyle(J,null);N-=J.scrollTop,I-=J.scrollLeft;if(J===G){N+=J.offsetTop,I+=J.offsetLeft;if(o.offset.doesNotAddBorder&&!(o.offset.doesAddBorderForTableAndCells&&/^t(able|d|h)$/i.test(J.tagName))){N+=parseInt(M.borderTopWidth,10)||0,I+=parseInt(M.borderLeftWidth,10)||0}F=G,G=J.offsetParent}if(o.offset.subtractsBorderForOverflowNotVisible&&M.overflow!==\"visible\"){N+=parseInt(M.borderTopWidth,10)||0,I+=parseInt(M.borderLeftWidth,10)||0}E=M}if(E.position===\"relative\"||E.position===\"static\"){N+=K.offsetTop,I+=K.offsetLeft}if(E.position===\"fixed\"){N+=Math.max(H.scrollTop,K.scrollTop),I+=Math.max(H.scrollLeft,K.scrollLeft)}return{top:N,left:I}}}o.offset={initialize:function(){if(this.initialized){return}var L=document.body,F=document.createElement(\"div\"),H,G,N,I,M,E,J=L.style.marginTop,K='<div style=\"position:absolute;top:0;left:0;margin:0;border:5px solid #000;padding:0;width:1px;height:1px;\"><div></div></div><table style=\"position:absolute;top:0;left:0;margin:0;border:5px solid #000;padding:0;width:1px;height:1px;\" cellpadding=\"0\" cellspacing=\"0\"><tr><td></td></tr></table>';M={position:\"absolute\",top:0,left:0,margin:0,border:0,width:\"1px\",height:\"1px\",visibility:\"hidden\"};for(E in M){F.style[E]=M[E]}F.innerHTML=K;L.insertBefore(F,L.firstChild);H=F.firstChild,G=H.firstChild,I=H.nextSibling.firstChild.firstChild;this.doesNotAddBorder=(G.offsetTop!==5);this.doesAddBorderForTableAndCells=(I.offsetTop===5);H.style.overflow=\"hidden\",H.style.position=\"relative\";this.subtractsBorderForOverflowNotVisible=(G.offsetTop===-5);L.style.marginTop=\"1px\";this.doesNotIncludeMarginInBodyOffset=(L.offsetTop===0);L.style.marginTop=J;L.removeChild(F);this.initialized=true},bodyOffset:function(E){o.offset.initialized||o.offset.initialize();var G=E.offsetTop,F=E.offsetLeft;if(o.offset.doesNotIncludeMarginInBodyOffset){G+=parseInt(o.curCSS(E,\"marginTop\",true),10)||0,F+=parseInt(o.curCSS(E,\"marginLeft\",true),10)||0}return{top:G,left:F}}};o.fn.extend({position:function(){var I=0,H=0,F;if(this[0]){var G=this.offsetParent(),J=this.offset(),E=/^body|html$/i.test(G[0].tagName)?{top:0,left:0}:G.offset();J.top-=j(this,\"marginTop\");J.left-=j(this,\"marginLeft\");E.top+=j(G,\"borderTopWidth\");E.left+=j(G,\"borderLeftWidth\");F={top:J.top-E.top,left:J.left-E.left}}return F},offsetParent:function(){var E=this[0].offsetParent||document.body;while(E&&(!/^body|html$/i.test(E.tagName)&&o.css(E,\"position\")==\"static\")){E=E.offsetParent}return o(E)}});o.each([\"Left\",\"Top\"],function(F,E){var G=\"scroll\"+E;o.fn[G]=function(H){if(!this[0]){return null}return H!==g?this.each(function(){this==l||this==document?l.scrollTo(!F?H:o(l).scrollLeft(),F?H:o(l).scrollTop()):this[G]=H}):this[0]==l||this[0]==document?self[F?\"pageYOffset\":\"pageXOffset\"]||o.boxModel&&document.documentElement[G]||document.body[G]:this[0][G]}});o.each([\"Height\",\"Width\"],function(I,G){var E=I?\"Left\":\"Top\",H=I?\"Right\":\"Bottom\",F=G.toLowerCase();o.fn[\"inner\"+G]=function(){return this[0]?o.css(this[0],F,false,\"padding\"):null};o.fn[\"outer\"+G]=function(K){return this[0]?o.css(this[0],F,false,K?\"margin\":\"border\"):null};var J=G.toLowerCase();o.fn[J]=function(K){return this[0]==l?document.compatMode==\"CSS1Compat\"&&document.documentElement[\"client\"+G]||document.body[\"client\"+G]:this[0]==document?Math.max(document.documentElement[\"client\"+G],document.body[\"scroll\"+G],document.documentElement[\"scroll\"+G],document.body[\"offset\"+G],document.documentElement[\"offset\"+G]):K===g?(this.length?o.css(this[0],J):null):this.css(J,typeof K===\"string\"?K:K+\"px\")}})})();\n"
-"\n"
-"/*\n"
-" * jQuery hashchange event - v1.3 - 7/21/2010\n"
-" * http://benalman.com/projects/jquery-hashchange-plugin/\n"
-" * \n"
-" * Copyright (c) 2010 \"Cowboy\" Ben Alman\n"
-" * Dual licensed under the MIT and GPL licenses.\n"
-" * http://benalman.com/about/license/\n"
-" */\n"
-"(function($,e,b){var c=\"hashchange\",h=document,f,g=$.event.special,i=h.documentMode,d=\"on\"+c in e&&(i===b||i>7);function a(j){j=j||location.href;return\"#\"+j.replace(/^[^#]*#?(.*)$/,\"$1\")}$.fn[c]=function(j){return j?this.bind(c,j):this.trigger(c)};$.fn[c].delay=50;g[c]=$.extend(g[c],{setup:function(){if(d){return false}$(f.start)},teardown:function(){if(d){return false}$(f.stop)}});f=(function(){var j={},p,m=a(),k=function(q){return q},l=k,o=k;j.start=function(){p||n()};j.stop=function(){p&&clearTimeout(p);p=b};function n(){var r=a(),q=o(m);if(r!==m){l(m=r,q);$(e).trigger(c)}else{if(q!==m){location.href=location.href.replace(/#.*/,\"\")+q}}p=setTimeout(n,$.fn[c].delay)}$.browser.msie&&!d&&(function(){var q,r;j.start=function(){if(!q){r=$.fn[c].src;r=r&&r+a();q=$('<iframe tabindex=\"-1\" title=\"empty\"/>').hide().one(\"load\",function(){r||l(a());n()}).attr(\"src\",r||\"javascript:0\").insertAfter(\"body\")[0].contentWindow;h.onpropertychange=function(){try{if(event.propertyName===\"title\"){q.document.title=h.title}}catch(s){}}}};j.stop=k;o=function(){return a(q.location.href)};l=function(v,s){var u=q.document,t=$.fn[c].domain;if(v!==s){u.title=h.title;u.open();t&&u.write('<script>document.domain=\"'+t+'\"<\\/script>');u.close();q.location.hash=v}}})();return j})()})(jQuery,this);\n"
diff --git a/trunk/src/sortdict.h b/trunk/src/sortdict.h
deleted file mode 100644
index 40f23f7..0000000
--- a/trunk/src/sortdict.h
+++ /dev/null
@@ -1,665 +0,0 @@
-/******************************************************************************
- *
- *
- *
- *
- * Copyright (C) 1997-2012 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.
- *
- */
-
-#ifndef _SORTDICT_H
-#define _SORTDICT_H
-
-#include "qtbc.h"
-#include <qlist.h>
-#include <qdict.h>
-#include <qintdict.h>
-
-#define AUTORESIZE 1
-
-#if AUTORESIZE
-const uint SDict_primes[] =
-{
- 17,
- 29,
- 47,
- 71,
- 113,
- 179,
- 293,
- 457,
- 733,
- 1171,
- 1871,
- 2999,
- 4787,
- 7669,
- 12251,
- 19603,
- 31379,
- 50177,
- 80287,
- 128449,
- 205519,
- 328829,
- 526139,
- 841801,
- 1346881,
- 2155007,
- 3448033,
- 5516827,
- 8826919,
- 14123059,
- 23538433,
- 39230771,
- 65384537,
- 108974231,
- 181623707,
- 302706181,
- 504510283,
- 840850487,
- 0xffffffff
-};
-#endif
-
-template<class T> class SDict;
-template<class T> class SIntDict;
-
-/*! internal wrapper class that redirects compareItems() to the
- * dictionary
- */
-template<class T>
-class SList : public QList<T>
-{
- public:
- SList(SDict<T> *owner) : m_owner(owner) {}
- virtual ~SList() {}
- int compareItems(GCI item1,GCI item2)
- {
- return m_owner->compareItems(item1,item2);
- }
- private:
- SDict<T> *m_owner;
-};
-
-/*! Ordered dictionary of elements of type T.
- * Internally uses a QList<T> and a QDict<T>.
- */
-template<class T>
-class SDict
-{
- private:
- SList<T> *m_list;
- QDict<T> *m_dict;
- int m_sizeIndex;
-
- public:
- /*! Create an ordered dictionary.
- * \param size The size of the dictionary. Should be a prime number for
- * best distribution of elements.
- * \param caseSensitive indicated whether the keys should be sorted
- * in a case sensitive way.
- */
- SDict(int size,bool caseSensitive=TRUE) : m_sizeIndex(0)
- {
- m_list = new SList<T>(this);
-#if AUTORESIZE
- while ((uint)size>SDict_primes[m_sizeIndex]) m_sizeIndex++;
- m_dict = new QDict<T>(SDict_primes[m_sizeIndex],caseSensitive);
-#else
- m_dict = new QDict<T>(size,caseSensitive);
-#endif
- }
-
- /*! Destroys the dictionary */
- virtual ~SDict()
- {
- delete m_list;
- delete m_dict;
- }
-
- /*! Appends an element to the dictionary. The element is owned by the
- * dictionary.
- * \param key The unique key to use to quicky find the item later on.
- * \param d The compound to add.
- * \sa find()
- */
- void append(const char *key,const T *d)
- {
- m_list->append(d);
- m_dict->insert(key,d);
-#if AUTORESIZE
- if (m_dict->size()>SDict_primes[m_sizeIndex])
- {
- m_dict->resize(SDict_primes[++m_sizeIndex]);
- }
-#endif
- }
-
- /*! Prepends an element to the dictionary. The element is owned by the
- * dictionary.
- * \param key The unique key to use to quicky find the item later on.
- * \param d The compound to add.
- * \sa find()
- */
- void prepend(const char *key,const T *d)
- {
- m_list->prepend(d);
- m_dict->insert(key,d);
-#if AUTORESIZE
- if (m_dict->size()>SDict_primes[m_sizeIndex])
- {
- m_dict->resize(SDict_primes[++m_sizeIndex]);
- }
-#endif
- }
-
- /*! Remove an item from the dictionary */
- bool remove(const char *key)
- {
- T *item = m_dict->take(key);
- return item ? m_list->remove(item) : FALSE;
- }
-
- /*! Take an item out of the dictionary without deleting it */
- T *take(const char *key)
- {
- T *item = m_dict->take(key);
- if (item)
- {
- int i = m_list->find(item);
- m_list->take(i);
- }
- return item;
- }
-
- /*! Sorts the members of the dictionary. First appending a number
- * of members and then sorting them is faster (O(NlogN) than using
- * inSort() for each member (O(N^2)).
- */
- void sort()
- {
- m_list->sort();
- }
- /*! Inserts a compound into the dictionary in a sorted way.
- * \param key The unique key to use to quicky find the item later on.
- * \param d The compound to add.
- * \sa find()
- */
- void inSort(const char *key,const T *d)
- {
- m_list->inSort(d);
- m_dict->insert(key,d);
-#if AUTORESIZE
- if (m_dict->size()>SDict_primes[m_sizeIndex])
- {
- m_dict->resize(SDict_primes[++m_sizeIndex]);
- }
-#endif
- }
-
- void insertAt(int i,const char *key,const T *d)
- {
- m_list->insert(i,d);
- m_dict->insert(key,d);
-#if AUTORESIZE
- if (m_dict->size()>SDict_primes[m_sizeIndex])
- {
- m_dict->resize(SDict_primes[++m_sizeIndex]);
- }
-#endif
- }
-
- /*! Indicates whether or not the dictionary owns its elements */
- void setAutoDelete(bool val)
- {
- m_list->setAutoDelete(val);
- }
-
- /*! Looks up a compound given its key.
- * \param key The key to identify this element.
- * \return The requested compound or zero if it cannot be found.
- * \sa append()
- */
- T *find(const char *key)
- {
- return m_dict->find(key);
- }
- T *find(const QCString &key)
- {
- return m_dict->find(key);
- }
- T *find(const QString &key)
- {
- return m_dict->find(key);
- }
- int findAt(const QCString &key)
- {
- T *item = find(key);
- if (item==0) return -1;
- return m_list->find(item);
- }
-
- /*! Equavalent to find(). */
- T *operator[](const char *key) const
- {
- return m_dict->find(key);
- }
-
- /*! Returns the item at position \a i in the sorted dictionary */
- T *at(uint i)
- {
- return m_list->at(i);
- }
-
- /*! Function that is used to compare two items when sorting.
- * Overload this to properly sort items.
- * \sa inSort()
- */
- virtual int compareItems(GCI item1,GCI item2)
- {
- return item1!=item2;
- }
-
- /*! Clears the dictionary. Will delete items if setAutoDelete() was
- * set to \c TRUE.
- * \sa setAutoDelete
- */
- void clear()
- {
- m_list->clear();
- m_dict->clear();
- }
-
- /*! Returns the number of items stored in the dictionary
- */
- int count() const
- {
- return m_list->count();
- }
-
- class Iterator; // first forward declare
- friend class Iterator; // then make it a friend
- /*! Simple iterator for SDict. It iterates in the order in which the
- * elements are stored.
- */
- class Iterator
- {
- public:
- /*! Create an iterator given the dictionary. */
- Iterator(const SDict<T> &dict)
- {
- m_li = new QListIterator<T>(*dict.m_list);
- }
-
- /*! Destroys the dictionary */
- virtual ~Iterator()
- {
- delete m_li;
- }
-
- /*! Set the iterator to the first element in the list.
- * \return The first compound, or zero if the list was empty.
- */
- T *toFirst() const
- {
- return m_li->toFirst();
- }
-
- /*! Set the iterator to the last element in the list.
- * \return The first compound, or zero if the list was empty.
- */
- T *toLast() const
- {
- return m_li->toLast();
- }
-
- /*! Returns the current compound */
- T *current() const
- {
- return m_li->current();
- }
-
- /*! Moves the iterator to the next element.
- * \return the new "current" element, or zero if the iterator was
- * already pointing at the last element.
- */
- T *operator++()
- {
- return m_li->operator++();
- }
-
- /*! Moves the iterator to the previous element.
- * \return the new "current" element, or zero if the iterator was
- * already pointing at the first element.
- */
- T *operator--()
- {
- return m_li->operator--();
- }
-
- private:
- QListIterator<T> *m_li;
- };
-
- class IteratorDict; // first forward declare
- friend class IteratorDict; // then make it a friend
- /*! Simple iterator for SDict. It iterates in over the dictionary elements
- * in an unsorted way, but does provide information about the element's key.
- */
- class IteratorDict
- {
- public:
- /*! Create an iterator given the dictionary. */
- IteratorDict(const SDict<T> &dict)
- {
- m_di = new QDictIterator<T>(*dict.m_dict);
- }
-
- /*! Destroys the dictionary */
- virtual ~IteratorDict()
- {
- delete m_di;
- }
-
- /*! Set the iterator to the first element in the list.
- * \return The first compound, or zero if the list was empty.
- */
- T *toFirst() const
- {
- return m_di->toFirst();
- }
-
- /*! Set the iterator to the last element in the list.
- * \return The first compound, or zero if the list was empty.
- */
- T *toLast() const
- {
- return m_di->toLast();
- }
-
- /*! Returns the current compound */
- T *current() const
- {
- return m_di->current();
- }
-
- /*! Returns the current key */
- QCString currentKey() const
- {
- return m_di->currentKey();
- }
-
- /*! Moves the iterator to the next element.
- * \return the new "current" element, or zero if the iterator was
- * already pointing at the last element.
- */
- T *operator++()
- {
- return m_di->operator++();
- }
-
- /*! Moves the iterator to the previous element.
- * \return the new "current" element, or zero if the iterator was
- * already pointing at the first element.
- */
- T *operator--()
- {
- return m_di->operator--();
- }
-
- private:
- QDictIterator<T> *m_di;
- };
-};
-
-/*! internal wrapper class that redirects compareItems() to the
- * dictionary
- */
-template<class T>
-class SIntList : public QList<T>
-{
- public:
- SIntList(SIntDict<T> *owner) : m_owner(owner) {}
- virtual ~SIntList() {}
- int compareItems(GCI item1,GCI item2)
- {
- return m_owner->compareItems(item1,item2);
- }
- private:
- SIntDict<T> *m_owner;
-};
-
-/*! Ordered dictionary of elements of type T.
- * Internally uses a QList<T> and a QIntDict<T>.
- */
-template<class T>
-class SIntDict
-{
- private:
- SIntList<T> *m_list;
- QIntDict<T> *m_dict;
- int m_sizeIndex;
-
- public:
- /*! Create an ordered dictionary.
- * \param size The size of the dictionary. Should be a prime number for
- * best distribution of elements.
- */
- SIntDict(int size) : m_sizeIndex(0)
- {
- m_list = new SIntList<T>(this);
-#if AUTORESIZE
- while ((uint)size>SDict_primes[m_sizeIndex]) m_sizeIndex++;
- m_dict = new QIntDict<T>(SDict_primes[m_sizeIndex]);
-#else
- m_dict = new QIntDict<T>(size);
-#endif
- }
-
- /*! Destroys the dictionary */
- virtual ~SIntDict()
- {
- delete m_list;
- delete m_dict;
- }
-
- /*! Appends a compound to the dictionary. The element is owned by the
- * dictionary.
- * \param key The unique key to use to quicky find the item later on.
- * \param d The compound to add.
- * \sa find()
- */
- void append(int key,const T *d)
- {
- m_list->append(d);
- m_dict->insert(key,d);
-#if AUTORESIZE
- if (m_dict->size()>SDict_primes[m_sizeIndex])
- {
- m_dict->resize(SDict_primes[++m_sizeIndex]);
- }
-#endif
- }
-
- /*! Prepend a compound to the dictionary. The element is owned by the
- * dictionary.
- * \param key The unique key to use to quicky find the item later on.
- * \param d The compound to add.
- * \sa find()
- */
- void prepend(int key,const T *d)
- {
- m_list->prepend(d);
- m_dict->insert(key,d);
-#if AUTORESIZE
- if (m_dict->size()>SDict_primes[m_sizeIndex])
- {
- m_dict->resize(SDict_primes[++m_sizeIndex]);
- }
-#endif
- }
-
- /*! Remove an item from the dictionary */
- bool remove(int key)
- {
- T *item = m_dict->take(key);
- return item ? m_list->remove(item) : FALSE;
- }
-
- /*! Sorts the members of the dictionary. First appending a number
- * of members and then sorting them is faster (O(NlogN) than using
- * inSort() for each member (O(N^2)).
- */
- void sort()
- {
- m_list->sort();
- }
-
- /*! Inserts a compound into the dictionary in a sorted way.
- * \param key The unique key to use to quicky find the item later on.
- * \param d The compound to add.
- * \sa find()
- */
- void inSort(int key,const T *d)
- {
- m_list->inSort(d);
- m_dict->insert(key,d);
-#if AUTORESIZE
- if (m_dict->size()>SDict_primes[m_sizeIndex])
- {
- m_dict->resize(SDict_primes[++m_sizeIndex]);
- }
-#endif
- }
-
- /*! Indicates whether or not the dictionary owns its elements */
- void setAutoDelete(bool val)
- {
- m_list->setAutoDelete(val);
- }
-
- /*! Looks up a compound given its key.
- * \param key The key to identify this element.
- * \return The requested compound or zero if it cannot be found.
- * \sa append()
- */
- T *find(int key)
- {
- return m_dict->find(key);
- }
-
- /*! Equavalent to find(). */
- T *operator[](int key) const
- {
- return m_dict->find(key);
- }
-
- /*! Returns the item at position \a i in the sorted dictionary */
- T *at(uint i)
- {
- return m_list->at(i);
- }
-
- /*! Function that is used to compare two items when sorting.
- * Overload this to properly sort items.
- * \sa inSort()
- */
- virtual int compareItems(GCI item1,GCI item2)
- {
- return item1!=item2;
- }
-
- /*! Clears the dictionary. Will delete items if setAutoDelete() was
- * set to \c TRUE.
- * \sa setAutoDelete
- */
- void clear()
- {
- m_list->clear();
- m_dict->clear();
- }
-
- /*! Returns the number of items stored in the dictionary
- */
- int count()
- {
- return m_list->count();
- }
-
- class Iterator; // first forward declare
- friend class Iterator; // then make it a friend
- /*! Simple iterator for SDict. It iterates in the order in which the
- * elements are stored.
- */
- class Iterator
- {
- public:
- /*! Create an iterator given the dictionary. */
- Iterator(const SIntDict<T> &dict)
- {
- m_li = new QListIterator<T>(*dict.m_list);
- }
-
- /*! Destroys the dictionary */
- virtual ~Iterator()
- {
- delete m_li;
- }
-
- /*! Set the iterator to the first element in the list.
- * \return The first compound, or zero if the list was empty.
- */
- T *toFirst() const
- {
- return m_li->toFirst();
- }
-
- /*! Set the iterator to the last element in the list.
- * \return The first compound, or zero if the list was empty.
- */
- T *toLast() const
- {
- return m_li->toLast();
- }
-
- /*! Returns the current compound */
- T *current() const
- {
- return m_li->current();
- }
-
- /*! Moves the iterator to the next element.
- * \return the new "current" element, or zero if the iterator was
- * already pointing at the last element.
- */
- T *operator++()
- {
- return m_li->operator++();
- }
-
- /*! Moves the iterator to the previous element.
- * \return the new "current" element, or zero if the iterator was
- * already pointing at the first element.
- */
- T *operator--()
- {
- return m_li->operator--();
- }
-
- private:
- QListIterator<T> *m_li;
- };
-
-};
-
-#endif
diff --git a/trunk/src/store.cpp b/trunk/src/store.cpp
deleted file mode 100644
index b60520c..0000000
--- a/trunk/src/store.cpp
+++ /dev/null
@@ -1,481 +0,0 @@
-/******************************************************************************
- *
- *
- *
- *
- * Copyright (C) 1997-2012 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.
- *
- */
-
-#include "store.h"
-#include "portable.h"
-
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <errno.h>
-#include <string.h>
-#include <assert.h>
-#include <ctype.h>
-
-#define BLOCK_SIZE 512 // should be >8 and a power of 2
-#define BLOCK_POINTER_SIZE sizeof(portable_off_t)
-
-
-#define ASSERTS_ENABLED
-
-#ifdef ASSERTS_ENABLED
-#define STORE_ASSERT(x) assert(x)
-#else
-#define STORE_ASSERT(x)
-#endif
-
-// Decide to use ftell or keep track of the current file pointer ourselves.
-// Since valgrind shows that calling ftell has the unwanted side-effect of
-// writing some uninitialized bytes (!) it might be better (and faster) to keep track
-// of the current pointer ourselves.
-#define USE_FTELL 0
-
-//------------------------------------------------------------------------------------
-
-Store::Store()
-{
- m_file = 0;
- m_front = 0;
- m_cur = 0;
- m_head = 0;
- m_state = Init;
- m_reads = 0;
- m_writes = 0;
-}
-
-Store::~Store()
-{
- if (m_file) fclose(m_file);
-
- // clean up free list
- while (m_head)
- {
- Node *node = m_head;
- m_head = node->next;
- delete node;
- }
-}
-
-int Store::open(const char *name)
-{
- int i;
- STORE_ASSERT(m_state==Init);
- if (m_file) return 0; // already open
- m_file = portable_fopen(name,"w+b");
- if (m_file==0) return -1;
-
- // first block serves as header, so offset=0 can be used as the end of the list.
- for (i=0;i<BLOCK_SIZE/8;i++)
- {
- fputc('D',m_file);
- fputc('O',m_file);
- fputc('X',m_file);
- fputc('Y',m_file);
- fputc('G',m_file);
- fputc('E',m_file);
- fputc('N',m_file);
- fputc(0,m_file);
- }
- m_front = BLOCK_SIZE;
- m_cur = BLOCK_SIZE;
- m_head = 0;
- m_state = Reading;
- return 0;
-}
-
-void Store::close()
-{
- if (m_file) fclose(m_file);
- m_file=0;
- m_state = Init;
-}
-
-portable_off_t Store::alloc()
-{
- STORE_ASSERT(m_state==Reading);
- m_state=Writing;
- portable_off_t pos;
- if (m_head==0) // allocate new block
- {
- //printf("alloc: new block, pos=%lld\n",(long long)m_front);
- if (portable_fseek(m_file,0,SEEK_END)==-1) // go to end of the file
- {
- fprintf(stderr,"Store::alloc: Error seeking to end of file: %s\n",strerror(errno));
- exit(1);
- }
-#if USE_FTELL
- pos = portable_ftell(m_file);
- STORE_ASSERT( (pos & (BLOCK_SIZE-1))==0 );
- m_front = pos + BLOCK_SIZE; // move front to end of this block
-#else
- m_cur = m_front;
- pos = m_cur;
- STORE_ASSERT( (pos & (BLOCK_SIZE-1))==0 );
- m_front = pos + BLOCK_SIZE;
-#endif
- }
- else // reuse freed block
- {
- //printf("alloc: reuse block: pos=%lld\n",(long long)m_head->pos);
- Node *node = m_head;
- pos = node->pos;
- // point head to next free item
- m_head = node->next;
- delete node;
- // move to start of the block
- if (portable_fseek(m_file,pos,SEEK_SET)==-1)
- {
- fprintf(stderr,"Store::alloc: Error seeking to position %d: %s\n",
- (int)pos,strerror(errno));
- exit(1);
- }
- m_cur = pos;
- STORE_ASSERT( (pos & (BLOCK_SIZE-1))==0 );
- }
- //printf("%x: Store::alloc\n",(int)pos);
- return pos;
-}
-
-int Store::write(const char *buf,uint size)
-{
- STORE_ASSERT(m_state==Writing);
- //printf("%x: Store::write\n",(int)portable_ftell(m_file));
- do
- {
-#if USE_FTELL
- portable_off_t curPos = portable_ftell(m_file);
-#else
- portable_off_t curPos = m_cur;
-#endif
- int bytesInBlock = BLOCK_SIZE - BLOCK_POINTER_SIZE - (curPos & (BLOCK_SIZE-1));
- int bytesLeft = bytesInBlock<(int)size ? (int)size-bytesInBlock : 0;
- int numBytes = size - bytesLeft;
- STORE_ASSERT(bytesInBlock>=0);
- STORE_ASSERT(numBytes<=(int)(BLOCK_SIZE-BLOCK_POINTER_SIZE));
- if (numBytes>0)
- {
- if ((int)fwrite(buf,1,numBytes,m_file)!=numBytes)
- {
- fprintf(stderr,"Error writing: %s\n",strerror(errno));
- exit(1);
- }
- m_cur+=numBytes;
- m_writes++;
- }
- if (bytesLeft>0) // still more bytes to write
- {
-#if USE_FTELL
- STORE_ASSERT(((portable_ftell(m_file)+BLOCK_POINTER_SIZE)&(BLOCK_SIZE-1))==0);
-#else
- STORE_ASSERT(((m_cur+BLOCK_POINTER_SIZE)&(BLOCK_SIZE-1))==0);
-#endif
- // allocate new block
- if (m_head==0) // no free blocks to reuse
- {
- //printf("%x: Store::write: new: pos=%x\n",(int)m_front,(int)portable_ftell(m_file));
- // write pointer to next block
- if (fwrite(&m_front,BLOCK_POINTER_SIZE,1,m_file)!=1)
- {
- fprintf(stderr,"Error writing to store: %s\n",strerror(errno));
- exit(1);
- }
- m_cur+=BLOCK_POINTER_SIZE;
-#if USE_FTELL
- STORE_ASSERT(portable_ftell(m_file)==(curPos&~(BLOCK_SIZE-1))+BLOCK_SIZE);
-#else
- STORE_ASSERT(m_cur==(curPos&~(BLOCK_SIZE-1))+BLOCK_SIZE);
-#endif
- // move to next block
- if (portable_fseek(m_file,0,SEEK_END)==-1) // go to end of the file
- {
- fprintf(stderr,"Store::alloc: Error seeking to end of file: %s\n",strerror(errno));
- exit(1);
- }
- m_cur=m_front;
-#if USE_FTELL
- STORE_ASSERT(portable_ftell(m_file)==m_front);
-#else
- STORE_ASSERT(m_cur==m_front);
-#endif
- // move front to the next of the block
- m_front+=BLOCK_SIZE;
- }
- else // reuse block from the free list
- {
- // write pointer to next block
- if (fwrite(&m_head->pos,BLOCK_POINTER_SIZE,1,m_file)!=1)
- {
- fprintf(stderr,"Error writing to store: %s\n",strerror(errno));
- exit(1);
- }
- Node *node = m_head;
- portable_off_t pos = node->pos;
- // point head to next free item
- m_head = node->next;
- delete node;
- // move to start of the block
- if (portable_fseek(m_file,pos,SEEK_SET)==-1)
- {
- fprintf(stderr,"Store::write: Error seeking to position %d: %s\n",
- (int)pos,strerror(errno));
- exit(1);
- }
- m_cur = pos;
- //printf("%x: Store::write: reuse\n",(int)pos);
- }
- }
- size-=numBytes;
- buf+=numBytes;
- }
- while (size>0);
- return size;
-}
-
-void Store::end()
-{
- STORE_ASSERT(m_state==Writing);
-#if USE_FTELL
- portable_off_t curPos = portable_ftell(m_file);
-#else
- portable_off_t curPos = m_cur;
-#endif
- int bytesInBlock = BLOCK_SIZE - (curPos & (BLOCK_SIZE-1));
- //printf("%x: Store::end erasing %x bytes\n",(int)curPos&~(BLOCK_SIZE-1),bytesInBlock);
- //printf("end: bytesInBlock=%x\n",bytesInBlock);
- // zero out rest of the block
- int i;
- for (i=0;i<bytesInBlock;i++)
- {
- fputc(0,m_file);
- }
- m_state=Reading;
-}
-
-void Store::release(portable_off_t pos)
-{
- STORE_ASSERT(m_state==Reading);
- //printf("release: block pos=%lld\n",(long long)pos);
- STORE_ASSERT(pos>0 && (pos & (BLOCK_SIZE-1))==0);
- // goto end of the block
- portable_off_t cur = pos, next;
- while (1)
- {
- // add new node to the free list
- Node *node = new Node;
- node->next = m_head;
- node->pos = cur;
-
- m_head = node;
- // goto the end of cur block
- if (portable_fseek(m_file,cur+BLOCK_SIZE-BLOCK_POINTER_SIZE,SEEK_SET)==-1)
- {
- fprintf(stderr,"Store::release: Error seeking to position %d: %s\n",
- (int)(cur+BLOCK_SIZE-BLOCK_POINTER_SIZE),strerror(errno));
- exit(1);
- }
- // read pointer to next block
- if (fread(&next,BLOCK_POINTER_SIZE,1,m_file)!=1)
- {
- fprintf(stderr,"Store::release: Error reading from store: %s\n",strerror(errno));
- exit(1);
- }
- m_cur = cur+BLOCK_SIZE;
- if (next==0) break; // found end of list -> cur is last element
- STORE_ASSERT((next & (BLOCK_SIZE-1))==0);
- cur = next;
- //printf("%x: Store::release\n",(int)cur);
- }
-}
-
-void Store::seek(portable_off_t pos)
-{
- STORE_ASSERT(m_state==Reading);
- //printf("%x: Store::seek\n",(int)pos);
- if (portable_fseek(m_file,pos,SEEK_SET)==-1)
- {
- fprintf(stderr,"Store::seek: Error seeking to position %d: %s\n",
- (int)pos,strerror(errno));
- exit(1);
- }
- m_cur = pos;
- STORE_ASSERT((pos&(BLOCK_SIZE-1))==0);
-}
-
-int Store::read(char *buf,uint size)
-{
- STORE_ASSERT(m_state==Reading);
- //printf("%x: Store::read total=%d\n",(int)portable_ftell(m_file),size);
- do
- {
-#if USE_FTELL
- portable_off_t curPos = portable_ftell(m_file);
-#else
- portable_off_t curPos = m_cur;
-#endif
- int bytesInBlock = BLOCK_SIZE - BLOCK_POINTER_SIZE - (curPos & (BLOCK_SIZE-1));
- int bytesLeft = bytesInBlock<(int)size ? (int)size-bytesInBlock : 0;
- int numBytes = size - bytesLeft;
- //printf(" Store::read: pos=%x num=%d left=%d\n",(int)curPos,numBytes,bytesLeft);
-
- if (numBytes>0)
- {
- //printf("%x: Store::read: %d out of %d bytes\n",(int)portable_ftell(m_file),numBytes,size);
- if ((int)fread(buf,1,numBytes,m_file)!=numBytes)
- {
- fprintf(stderr,"Error reading from store: %s\n",strerror(errno));
- exit(1);
- }
- m_cur+=numBytes;
- m_reads++;
- }
- if (bytesLeft>0)
- {
- portable_off_t newPos;
- // read offset of the next block
-#if USE_FTELL
- STORE_ASSERT(((portable_ftell(m_file)+BLOCK_POINTER_SIZE)&(BLOCK_SIZE-1))==0);
-#else
- STORE_ASSERT(((m_cur+BLOCK_POINTER_SIZE)&(BLOCK_SIZE-1))==0);
-#endif
- if (fread((char *)&newPos,BLOCK_POINTER_SIZE,1,m_file)!=1)
- {
- fprintf(stderr,"Error reading from store: %s\n",strerror(errno));
- exit(1);
- }
- //printf("%x: Store::read: continue in next block, %d bytes to go\n",(int)newPos,bytesLeft);
- //printf(" Store::read: next block=%x\n",(int)newPos);
- STORE_ASSERT(newPos!=0);
- STORE_ASSERT((newPos&(BLOCK_SIZE-1))==0);
- curPos = newPos;
- // move to next block
- if (portable_fseek(m_file,curPos,SEEK_SET)==-1)
- {
- fprintf(stderr,"Store::read: Error seeking to position %d: %s\n",
- (int)curPos,strerror(errno));
- exit(1);
- }
- m_cur = curPos;
- }
-
- size-=numBytes;
- buf+=numBytes;
- }
- while (size>0);
- return size;
-}
-
-void Store::printFreeList()
-{
- printf("FreeList: ");
- portable_off_t pos = m_head->pos;
- while (pos)
- {
- printf("%x ",(int)pos);
- m_head = m_head->next;
- }
- printf("\n");
-}
-
-void Store::printStats()
-{
- printf("ObjStore: block size %d bytes, total size %ld blocks, wrote %d blocks, read %d blocks\n",
- BLOCK_SIZE,(long)(m_front/BLOCK_SIZE),m_reads,m_writes);
-}
-
-void Store::dumpBlock(portable_off_t s,portable_off_t e)
-{
- portable_fseek(m_file,s,SEEK_SET);
- int size = (int)(e-s);
- uchar *buf = new uchar[size];
- (void)fread(buf,size,1,m_file);
- int i,j;
- for (i=0;i<size;i+=16)
- {
- printf("%08x: ",(int)s+i);
- for (j=i;j<QMIN(size,i+16);j++)
- {
- printf("%02x ",buf[i+j]);
- }
- printf(" ");
- for (j=i;j<QMIN(size,i+16);j++)
- {
- printf("%c",(buf[i+j]>=32 && buf[i+j]<128)?buf[i+j]:'.');
- }
- printf("\n");
- }
- portable_fseek(m_file,m_cur,SEEK_SET);
-}
-
-#ifdef STORE_TEST
-
-int main()
-{
- printf("sizeof(portable_off_t)=%d\n",(int)sizeof(portable_off_t));
- Store s;
- if (s.open("test.db")==0)
- {
- const char *str1 = "This is a test message... ";
- const char *str2 = "Another message. ";
-
- int i,j;
- for (j=0;j<5;j++)
- {
- char buf[100];
-
- portable_off_t handle = s.alloc();
- for (i=0;i<1000000000;i++)
- {
- s.write(str1,strlen(str1)+1);
- }
- s.end();
- portable_off_t handle2 = s.alloc();
- for (i=0;i<10;i++)
- {
- s.write(str2,strlen(str2)+1);
- }
- s.end();
-
- s.seek(handle);
- for (i=0;i<3;i++)
- {
- s.read(buf,strlen(str1)+1);
- printf("i=%d Read: %s\n",i,buf);
- }
-
- s.release(handle);
-
- s.seek(handle2);
- for (i=0;i<3;i++)
- {
- s.read(buf,strlen(str2)+1);
- printf("i=%d Read: %s\n",i,buf);
- }
-
- s.release(handle2);
- }
-
- s.close();
- }
- else
- {
- printf("Open failed! %s\n",strerror(errno));
- }
-}
-
-#endif
-
diff --git a/trunk/src/store.h b/trunk/src/store.h
deleted file mode 100644
index 816ce46..0000000
--- a/trunk/src/store.h
+++ /dev/null
@@ -1,123 +0,0 @@
-/******************************************************************************
- *
- *
- *
- * Copyright (C) 1997-2012 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.
- *
- */
-
-#ifndef STORE_H
-#define STORE_H
-
-#include <qglobal.h>
-#include <stdio.h>
-
-#include "portable.h"
-
-/*! @brief Abstract interface for file based memory storage operations */
-class StorageIntf
-{
- public:
- /*! Required by gcc */
- virtual ~StorageIntf() {}
- /*! Read \a size bytes from the store into \a buf. */
- virtual int read(char *buf,uint size) = 0;
- /*! Write \a size bytes from \a buf into the store. */
- virtual int write(const char *buf,uint size) = 0;
-};
-
-/*! @brief The Store is a file based memory manager.
- *
- * You can open the store using open(). Then obtain a handle via alloc()
- * followed by a sequence of write() commands to store information,
- * and finalize it using end().
- *
- * Later on you locate the information
- * with seek() using the handle obtained with alloc(), and then use a
- * sequence of read() calls to read the information back.
- *
- * If no longer needed the storage space can be freed using release().
- *
- * The store will dynamically grow the file on disk if needed.
- */
-class Store : public StorageIntf
-{
- public:
- /*! Creates a store. */
- Store();
-
- /*! Releases the store object. Will close the underlying file if opened. */
- ~Store();
-
- /*! Opens the file underlying the store using \a name as the file name.
- * Returns 0 upon success, or -1 otherwise.
- */
- int open(const char *name);
-
- /*! Allocates a handle to write to and read from. */
- portable_off_t alloc();
-
- /*! Writes \a size bytes in array \a buf to the store.
- * First alloc() has to be called.
- * \note The information can only be read after end() has been called.
- */
- int write(const char *buf,uint size);
-
- /*! Ends the sequence of writes.
- * \note After this call, first alloc() has to be called
- * before new writes can be done.
- */
- void end();
-
- /*! Releases the memory corresponding to the handle returned with alloc() */
- void release(portable_off_t handle);
-
- /*! Closes the store */
- void close();
-
- /*! Goes to the start of information corresponding to handle \a pos */
- void seek(portable_off_t handle);
-
- /*! Reads \a size bytes from the store into the array pointed to be \a buf.
- * \note Before reading seek() has to be called to set the right start of the store.
- */
- int read(char *buf,uint size);
-
- void printStats();
-
- portable_off_t pos() const { return m_cur; }
-
- void dumpBlock(portable_off_t start,portable_off_t end);
-
- private:
- enum State
- {
- Init,
- Reading,
- Writing
- };
- struct Node
- {
- portable_off_t pos;
- struct Node *next;
- };
- void printFreeList();
- FILE *m_file;
- portable_off_t m_front;
- portable_off_t m_cur;
- Node *m_head;
- State m_state;
- int m_reads;
- int m_writes;
-};
-
-#endif
diff --git a/trunk/src/svgpan.js b/trunk/src/svgpan.js
deleted file mode 100644
index 4218e79..0000000
--- a/trunk/src/svgpan.js
+++ /dev/null
@@ -1,319 +0,0 @@
-/**
- * The code below is based on SVGPan Library 1.2 and was modified for doxygen
- * to support both zooming and panning via the mouse and via embedded bottons.
- *
- * This code is licensed under the following BSD license:
- *
- * Copyright 2009-2010 Andrea Leofreddi <a.leofreddi@itcharm.com>. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without modification, are
- * permitted provided that the following conditions are met:
- *
- * 1. Redistributions of source code must retain the above copyright notice, this list of
- * conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright notice, this list
- * of conditions and the following disclaimer in the documentation and/or other materials
- * provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY Andrea Leofreddi ``AS IS'' AND ANY EXPRESS OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
- * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL Andrea Leofreddi OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
- * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
- * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
- * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
- * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- *
- * The views and conclusions contained in the software and documentation are those of the
- * authors and should not be interpreted as representing official policies, either expressed
- * or implied, of Andrea Leofreddi.
- */
-
-var root = document.documentElement;
-var state = 'none';
-var stateOrigin;
-var stateTf = root.createSVGMatrix();
-var cursorGrab = ' url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA4AAAAOCAMAAAAolt3jAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAAlQTFRFAAAA////////c3ilYwAAAAN0Uk5T//8A18oNQQAAAD1JREFUeNp0zlEKACAIA9Bt9z90bZBZkQj29qFBEuBOzQHSnWTTyckEfqUuZgFvslH4ch3qLCO/Kr8cAgwATw4Ax6XRCcoAAAAASUVORK5CYII="), move';
-var zoomSteps = 10;
-var zoomInFactor;
-var zoomOutFactor;
-var windowWidth;
-var windowHeight;
-var svgDoc;
-var minZoom;
-var maxZoom;
-if (!window) window=this;
-
-/**
- * Show the graph in the middle of the view, scaled to fit
- */
-function show()
-{
- if (window.innerHeight) // Firefox
- {
- windowWidth = window.innerWidth;
- windowHeight = window.innerHeight;
- }
- else if (document.documentElement.clientWidth) // Chrome/Safari
- {
- windowWidth = document.documentElement.clientWidth
- windowHeight = document.documentElement.clientHeight
- }
- if (!windowWidth || !windowHeight) // failsafe
- {
- windowWidth = 800;
- windowHeight = 600;
- }
- minZoom = Math.min(Math.min(viewHeight,windowHeight)/viewHeight,Math.min(viewWidth,windowWidth)/viewWidth);
- maxZoom = minZoom+1.5;
- zoomInFactor = Math.pow(maxZoom/minZoom,1.0/zoomSteps);
- zoomOutFactor = 1.0/zoomInFactor;
-
- var g = svgDoc.getElementById('viewport');
- try
- {
- var bb = g.getBBox(); // this can throw an exception if css { display: none }
- var tx = (windowWidth-viewWidth*minZoom+8)/(2*minZoom);
- var ty = viewHeight+(windowHeight-viewHeight*minZoom)/(2*minZoom);
- var a = 'scale('+minZoom+') rotate(0) translate('+tx+' '+ty+')';
- g.setAttribute('transform',a);
- }
- catch(e) {}
-}
-
-/**
- * Register handlers
- */
-function init(evt)
-{
- svgDoc = evt.target.ownerDocument;
- if (top.window && top.window.registerShow) // register show function in html doc for dynamic sections
- {
- top.window.registerShow(sectionId,show);
- }
- show();
-
- setAttributes(root, {
- "onmousedown" : "handleMouseDown(evt)",
- "onmousemove" : "handleMouseMove(evt)",
- "onmouseup" : "handleMouseUp(evt)"
- });
-
- if (window.addEventListener)
- {
- if (navigator.userAgent.toLowerCase().indexOf('webkit') >= 0 ||
- navigator.userAgent.toLowerCase().indexOf("opera") >= 0 ||
- navigator.appVersion.indexOf("MSIE") != -1)
- {
- window.addEventListener('mousewheel', handleMouseWheel, false); // Chrome/Safari/IE9
- }
- else
- {
- window.addEventListener('DOMMouseScroll', handleMouseWheel, false); // Others
- }
- }
-}
-
-window.onresize=function()
-{
- if (svgDoc) { show(); }
-}
-
-/**
- * Instance an SVGPoint object with given event coordinates.
- */
-function getEventPoint(evt)
-{
- var p = root.createSVGPoint();
- p.x = evt.clientX;
- p.y = evt.clientY;
- return p;
-}
-
-/**
- * Sets the current transform matrix of an element.
- */
-function setCTM(element, matrix)
-{
- var s = "matrix(" + matrix.a + "," + matrix.b + "," + matrix.c + "," + matrix.d + "," + matrix.e + "," + matrix.f + ")";
- element.setAttribute("transform", s);
-}
-
-/**
- * Sets attributes of an element.
- */
-function setAttributes(element, attributes)
-{
- for (i in attributes)
- element.setAttributeNS(null, i, attributes[i]);
-}
-
-function doZoom(g,point,zoomFactor)
-{
- var p = point.matrixTransform(g.getCTM().inverse());
- var k = root.createSVGMatrix().translate(p.x, p.y).scale(zoomFactor).translate(-p.x, -p.y);
- var n = g.getCTM().multiply(k);
- var s = Math.max(n.a,n.d);
- if (s>maxZoom) n=n.translate(p.x,p.y).scale(maxZoom/s).translate(-p.x,-p.y);
- else if (s<minZoom) n=n.translate(p.x,p.y).scale(minZoom/s).translate(-p.x,-p.y);
- setCTM(g, n);
- stateTf = stateTf.multiply(n.inverse());
-}
-
-/**
- * Handle mouse move event.
- */
-function handleMouseWheel(evt)
-{
- if (!evt) evt = window.evt;
- if (!evt.shiftKey) return; // only zoom when shift is pressed
- if (evt.preventDefault) evt.preventDefault();
- evt.returnValue = false;
-
- if (state!='pan')
- {
- var delta;
- if (evt.wheelDelta)
- {
- delta = evt.wheelDelta / 7200; // Opera/Chrome/IE9/Safari
- }
- else
- {
- delta = evt.detail / -180; // Mozilla
- }
- var svgDoc = evt.target.ownerDocument;
- var g = svgDoc.getElementById("viewport");
- var p = getEventPoint(evt);
- doZoom(g,p,1+delta);
- }
-}
-
-/**
- * Handle mouse move event.
- */
-function handleMouseMove(evt)
-{
- if(evt.preventDefault)
- evt.preventDefault();
-
- evt.returnValue = false;
-
- var g = svgDoc.getElementById("viewport");
-
- if (state == 'pan')
- {
- // Pan mode
- var p = getEventPoint(evt).matrixTransform(stateTf);
- setCTM(g,stateTf.inverse().translate(p.x - stateOrigin.x, p.y - stateOrigin.y));
- }
-}
-
-/**
- * Handle click event.
- */
-function handleMouseDown(evt)
-{
- if(evt.preventDefault)
- evt.preventDefault();
- evt.returnValue = false;
- var g = svgDoc.getElementById("viewport");
- state = 'pan';
- stateTf = g.getCTM().inverse();
- stateOrigin = getEventPoint(evt).matrixTransform(stateTf);
- g.style.cursor = cursorGrab;
-}
-
-/**
- * Handle mouse button release event.
- */
-function handleMouseUp(evt)
-{
- if (evt.preventDefault) evt.preventDefault();
- evt.returnValue = false;
- var g = svgDoc.getElementById("viewport");
- g.style.cursor = "default";
- // Quit pan mode
- state = '';
-}
-
-/**
- * Dumps a matrix to a string (useful for debug).
- */
-function dumpMatrix(matrix)
-{
- var s = "[ " + matrix.a + ", " + matrix.c + ", " + matrix.e + "\n " + matrix.b + ", " + matrix.d + ", " + matrix.f + "\n 0, 0, 1 ]";
- return s;
-}
-
-/**
- * Handler for pan buttons
- */
-function handlePan(x,y)
-{
- var g = svgDoc.getElementById("viewport");
- setCTM(g,g.getCTM().translate(x*20/minZoom,y*20/minZoom));
-}
-
-/**
- * Handle reset button
- */
-function handleReset()
-{
- show();
-}
-
-/**
- * Handler for zoom buttons
- */
-function handleZoom(evt,direction)
-{
- var g = svgDoc.getElementById("viewport");
- var factor = direction=='in' ? zoomInFactor : zoomOutFactor;
- var m = g.getCTM();
- var p = root.createSVGPoint();
- p.x = windowWidth/2;
- p.y = windowHeight/2;
- doZoom(g,p,factor);
-}
-
-function serializeXmlNode(xmlNode)
-{
- if (typeof window.XMLSerializer != "undefined") {
- return (new window.XMLSerializer()).serializeToString(xmlNode);
- } else if (typeof xmlNode.xml != "undefined") {
- return xmlNode.xml;
- }
- return "";
-}
-
-/**
- * Handler for print function
- */
-function handlePrint(evt)
-{
- evt.returnValue = false;
- var g = svgDoc.getElementById("graph");
- var xs = serializeXmlNode(g);
- try {
- var w = window.open('about:blank','_blank','width='+windowWidth+',height='+windowHeight+
- ',toolbar=0,status=0,menubar=0,scrollbars=0,resizable=0,location=0,directories=0');
- var d = w.document;
- d.write('<html xmlns="http://www.w3.org/1999/xhtml" '+
- 'xmlns:svg="http://www.w3.org/2000/svg" '+
- 'xmlns:xlink="http://www.w3.org/1999/xlink">');
- d.write('<head><title>Print SVG</title></head>');
- d.write('<body style="margin: 0px; padding: 0px;" onload="window.print();">');
- d.write('<div id="svg" style="width:'+windowWidth+'px; height:'+windowHeight+'px;">'+xs+'</div>');
- d.write('</body>');
- d.write('</html>');
- d.close();
- } catch(e) {
- alert('Failed to open popup window needed for printing!\n'+e.message);
- }
-}
-
-
-
-
diff --git a/trunk/src/svgpan_js.h b/trunk/src/svgpan_js.h
deleted file mode 100644
index ac996da..0000000
--- a/trunk/src/svgpan_js.h
+++ /dev/null
@@ -1,319 +0,0 @@
-"/**\n"
-" * The code below is based on SVGPan Library 1.2 and was modified for doxygen\n"
-" * to support both zooming and panning via the mouse and via embedded bottons.\n"
-" *\n"
-" * This code is licensed under the following BSD license:\n"
-" *\n"
-" * Copyright 2009-2010 Andrea Leofreddi <a.leofreddi@itcharm.com>. All rights reserved.\n"
-" * \n"
-" * Redistribution and use in source and binary forms, with or without modification, are\n"
-" * permitted provided that the following conditions are met:\n"
-" * \n"
-" * 1. Redistributions of source code must retain the above copyright notice, this list of\n"
-" * conditions and the following disclaimer.\n"
-" * \n"
-" * 2. Redistributions in binary form must reproduce the above copyright notice, this list\n"
-" * of conditions and the following disclaimer in the documentation and/or other materials\n"
-" * provided with the distribution.\n"
-" * \n"
-" * THIS SOFTWARE IS PROVIDED BY Andrea Leofreddi ``AS IS'' AND ANY EXPRESS OR IMPLIED\n"
-" * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n"
-" * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL Andrea Leofreddi OR\n"
-" * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n"
-" * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n"
-" * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n"
-" * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n"
-" * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n"
-" * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n"
-" * \n"
-" * The views and conclusions contained in the software and documentation are those of the\n"
-" * authors and should not be interpreted as representing official policies, either expressed\n"
-" * or implied, of Andrea Leofreddi.\n"
-" */\n"
-"\n"
-"var root = document.documentElement;\n"
-"var state = 'none';\n"
-"var stateOrigin;\n"
-"var stateTf = root.createSVGMatrix();\n"
-"var cursorGrab = ' url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA4AAAAOCAMAAAAolt3jAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAAlQTFRFAAAA////////c3ilYwAAAAN0Uk5T//8A18oNQQAAAD1JREFUeNp0zlEKACAIA9Bt9z90bZBZkQj29qFBEuBOzQHSnWTTyckEfqUuZgFvslH4ch3qLCO/Kr8cAgwATw4Ax6XRCcoAAAAASUVORK5CYII=\"), move';\n"
-"var zoomSteps = 10;\n"
-"var zoomInFactor;\n"
-"var zoomOutFactor;\n"
-"var windowWidth;\n"
-"var windowHeight;\n"
-"var svgDoc;\n"
-"var minZoom;\n"
-"var maxZoom;\n"
-"if (!window) window=this;\n"
-"\n"
-"/**\n"
-" * Show the graph in the middle of the view, scaled to fit \n"
-" */\n"
-"function show()\n"
-"{\n"
-" if (window.innerHeight) // Firefox\n"
-" {\n"
-" windowWidth = window.innerWidth;\n"
-" windowHeight = window.innerHeight;\n"
-" }\n"
-" else if (document.documentElement.clientWidth) // Chrome/Safari\n"
-" {\n"
-" windowWidth = document.documentElement.clientWidth\n"
-" windowHeight = document.documentElement.clientHeight\n"
-" }\n"
-" if (!windowWidth || !windowHeight) // failsafe\n"
-" {\n"
-" windowWidth = 800;\n"
-" windowHeight = 600;\n"
-" }\n"
-" minZoom = Math.min(Math.min(viewHeight,windowHeight)/viewHeight,Math.min(viewWidth,windowWidth)/viewWidth);\n"
-" maxZoom = minZoom+1.5;\n"
-" zoomInFactor = Math.pow(maxZoom/minZoom,1.0/zoomSteps);\n"
-" zoomOutFactor = 1.0/zoomInFactor;\n"
-"\n"
-" var g = svgDoc.getElementById('viewport');\n"
-" try\n"
-" {\n"
-" var bb = g.getBBox(); // this can throw an exception if css { display: none }\n"
-" var tx = (windowWidth-viewWidth*minZoom+8)/(2*minZoom);\n"
-" var ty = viewHeight+(windowHeight-viewHeight*minZoom)/(2*minZoom);\n"
-" var a = 'scale('+minZoom+') rotate(0) translate('+tx+' '+ty+')';\n"
-" g.setAttribute('transform',a);\n"
-" }\n"
-" catch(e) {}\n"
-"}\n"
-"\n"
-"/**\n"
-" * Register handlers\n"
-" */\n"
-"function init(evt) \n"
-"{\n"
-" svgDoc = evt.target.ownerDocument;\n"
-" if (top.window && top.window.registerShow) // register show function in html doc for dynamic sections\n"
-" {\n"
-" top.window.registerShow(sectionId,show);\n"
-" }\n"
-" show();\n"
-"\n"
-" setAttributes(root, {\n"
-" \"onmousedown\" : \"handleMouseDown(evt)\",\n"
-" \"onmousemove\" : \"handleMouseMove(evt)\",\n"
-" \"onmouseup\" : \"handleMouseUp(evt)\"\n"
-" });\n"
-"\n"
-" if (window.addEventListener)\n"
-" {\n"
-" if (navigator.userAgent.toLowerCase().indexOf('webkit') >= 0 || \n"
-" navigator.userAgent.toLowerCase().indexOf(\"opera\") >= 0 || \n"
-" navigator.appVersion.indexOf(\"MSIE\") != -1)\n"
-" {\n"
-" window.addEventListener('mousewheel', handleMouseWheel, false); // Chrome/Safari/IE9\n"
-" }\n"
-" else\n"
-" {\n"
-" window.addEventListener('DOMMouseScroll', handleMouseWheel, false); // Others\n"
-" }\n"
-" }\n"
-"}\n"
-"\n"
-"window.onresize=function()\n"
-"{\n"
-" if (svgDoc) { show(); }\n"
-"}\n"
-"\n"
-"/**\n"
-" * Instance an SVGPoint object with given event coordinates.\n"
-" */\n"
-"function getEventPoint(evt) \n"
-"{\n"
-" var p = root.createSVGPoint();\n"
-" p.x = evt.clientX;\n"
-" p.y = evt.clientY;\n"
-" return p;\n"
-"}\n"
-"\n"
-"/**\n"
-" * Sets the current transform matrix of an element.\n"
-" */\n"
-"function setCTM(element, matrix) \n"
-"{\n"
-" var s = \"matrix(\" + matrix.a + \",\" + matrix.b + \",\" + matrix.c + \",\" + matrix.d + \",\" + matrix.e + \",\" + matrix.f + \")\";\n"
-" element.setAttribute(\"transform\", s);\n"
-"}\n"
-"\n"
-"/**\n"
-" * Sets attributes of an element.\n"
-" */\n"
-"function setAttributes(element, attributes)\n"
-"{\n"
-" for (i in attributes)\n"
-" element.setAttributeNS(null, i, attributes[i]);\n"
-"}\n"
-"\n"
-"function doZoom(g,point,zoomFactor)\n"
-"{\n"
-" var p = point.matrixTransform(g.getCTM().inverse());\n"
-" var k = root.createSVGMatrix().translate(p.x, p.y).scale(zoomFactor).translate(-p.x, -p.y);\n"
-" var n = g.getCTM().multiply(k);\n"
-" var s = Math.max(n.a,n.d);\n"
-" if (s>maxZoom) n=n.translate(p.x,p.y).scale(maxZoom/s).translate(-p.x,-p.y);\n"
-" else if (s<minZoom) n=n.translate(p.x,p.y).scale(minZoom/s).translate(-p.x,-p.y);\n"
-" setCTM(g, n);\n"
-" stateTf = stateTf.multiply(n.inverse());\n"
-"}\n"
-"\n"
-"/**\n"
-" * Handle mouse move event.\n"
-" */\n"
-"function handleMouseWheel(evt) \n"
-"{\n"
-" if (!evt) evt = window.evt;\n"
-" if (!evt.shiftKey) return; // only zoom when shift is pressed\n"
-" if (evt.preventDefault) evt.preventDefault();\n"
-" evt.returnValue = false;\n"
-"\n"
-" if (state!='pan')\n"
-" {\n"
-" var delta;\n"
-" if (evt.wheelDelta)\n"
-" {\n"
-" delta = evt.wheelDelta / 7200; // Opera/Chrome/IE9/Safari\n"
-" }\n"
-" else\n"
-" {\n"
-" delta = evt.detail / -180; // Mozilla\n"
-" }\n"
-" var svgDoc = evt.target.ownerDocument;\n"
-" var g = svgDoc.getElementById(\"viewport\");\n"
-" var p = getEventPoint(evt);\n"
-" doZoom(g,p,1+delta);\n"
-" }\n"
-"}\n"
-"\n"
-"/**\n"
-" * Handle mouse move event.\n"
-" */\n"
-"function handleMouseMove(evt) \n"
-"{\n"
-" if(evt.preventDefault)\n"
-" evt.preventDefault();\n"
-"\n"
-" evt.returnValue = false;\n"
-"\n"
-" var g = svgDoc.getElementById(\"viewport\");\n"
-"\n"
-" if (state == 'pan') \n"
-" {\n"
-" // Pan mode\n"
-" var p = getEventPoint(evt).matrixTransform(stateTf);\n"
-" setCTM(g,stateTf.inverse().translate(p.x - stateOrigin.x, p.y - stateOrigin.y));\n"
-" } \n"
-"}\n"
-"\n"
-"/**\n"
-" * Handle click event.\n"
-" */\n"
-"function handleMouseDown(evt) \n"
-"{\n"
-" if(evt.preventDefault)\n"
-" evt.preventDefault();\n"
-" evt.returnValue = false;\n"
-" var g = svgDoc.getElementById(\"viewport\");\n"
-" state = 'pan';\n"
-" stateTf = g.getCTM().inverse();\n"
-" stateOrigin = getEventPoint(evt).matrixTransform(stateTf);\n"
-" g.style.cursor = cursorGrab;\n"
-"}\n"
-"\n"
-"/**\n"
-" * Handle mouse button release event.\n"
-" */\n"
-"function handleMouseUp(evt) \n"
-"{\n"
-" if (evt.preventDefault) evt.preventDefault();\n"
-" evt.returnValue = false;\n"
-" var g = svgDoc.getElementById(\"viewport\");\n"
-" g.style.cursor = \"default\";\n"
-" // Quit pan mode\n"
-" state = '';\n"
-"}\n"
-"\n"
-"/**\n"
-" * Dumps a matrix to a string (useful for debug).\n"
-" */\n"
-"function dumpMatrix(matrix) \n"
-"{\n"
-" var s = \"[ \" + matrix.a + \", \" + matrix.c + \", \" + matrix.e + \"\\n \" + matrix.b + \", \" + matrix.d + \", \" + matrix.f + \"\\n 0, 0, 1 ]\";\n"
-" return s;\n"
-"}\n"
-"\n"
-"/**\n"
-" * Handler for pan buttons\n"
-" */\n"
-"function handlePan(x,y)\n"
-"{\n"
-" var g = svgDoc.getElementById(\"viewport\");\n"
-" setCTM(g,g.getCTM().translate(x*20/minZoom,y*20/minZoom));\n"
-"}\n"
-"\n"
-"/**\n"
-" * Handle reset button\n"
-" */\n"
-"function handleReset()\n"
-"{\n"
-" show();\n"
-"}\n"
-"\n"
-"/**\n"
-" * Handler for zoom buttons\n"
-" */\n"
-"function handleZoom(evt,direction)\n"
-"{\n"
-" var g = svgDoc.getElementById(\"viewport\");\n"
-" var factor = direction=='in' ? zoomInFactor : zoomOutFactor;\n"
-" var m = g.getCTM();\n"
-" var p = root.createSVGPoint();\n"
-" p.x = windowWidth/2;\n"
-" p.y = windowHeight/2;\n"
-" doZoom(g,p,factor);\n"
-"}\n"
-"\n"
-"function serializeXmlNode(xmlNode) \n"
-"{\n"
-" if (typeof window.XMLSerializer != \"undefined\") {\n"
-" return (new window.XMLSerializer()).serializeToString(xmlNode);\n"
-" } else if (typeof xmlNode.xml != \"undefined\") {\n"
-" return xmlNode.xml;\n"
-" }\n"
-" return \"\";\n"
-"}\n"
-"\n"
-"/** \n"
-" * Handler for print function\n"
-" */\n"
-"function handlePrint(evt)\n"
-"{\n"
-" evt.returnValue = false;\n"
-" var g = svgDoc.getElementById(\"graph\");\n"
-" var xs = serializeXmlNode(g);\n"
-" try {\n"
-" var w = window.open('about:blank','_blank','width='+windowWidth+',height='+windowHeight+\n"
-" ',toolbar=0,status=0,menubar=0,scrollbars=0,resizable=0,location=0,directories=0');\n"
-" var d = w.document;\n"
-" d.write('<html xmlns=\"http://www.w3.org/1999/xhtml\" '+\n"
-" 'xmlns:svg=\"http://www.w3.org/2000/svg\" '+\n"
-" 'xmlns:xlink=\"http://www.w3.org/1999/xlink\">');\n"
-" d.write('<head><title>Print SVG</title></head>');\n"
-" d.write('<body style=\"margin: 0px; padding: 0px;\" onload=\"window.print();\">');\n"
-" d.write('<div id=\"svg\" style=\"width:'+windowWidth+'px; height:'+windowHeight+'px;\">'+xs+'</div>');\n"
-" d.write('</body>');\n"
-" d.write('</html>');\n"
-" d.close();\n"
-" } catch(e) {\n"
-" alert('Failed to open popup window needed for printing!\\n'+e.message);\n"
-" }\n"
-"}\n"
-"\n"
-"\n"
-"\n"
-"\n"
diff --git a/trunk/src/tagreader.cpp b/trunk/src/tagreader.cpp
deleted file mode 100644
index 226a726..0000000
--- a/trunk/src/tagreader.cpp
+++ /dev/null
@@ -1,1408 +0,0 @@
-/******************************************************************************
- *
- *
- *
- *
- * Copyright (C) 1997-2012 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.
- *
- */
-
-#include "tagreader.h"
-
-#include <stdio.h>
-#include <stdarg.h>
-
-#include <qxml.h>
-#include <qstack.h>
-#include <qdict.h>
-#include <qfileinfo.h>
-#include <qlist.h>
-#include <qstring.h>
-#include <qstringlist.h>
-
-#include "entry.h"
-#include "classdef.h"
-#include "doxygen.h"
-#include "util.h"
-#include "message.h"
-#include "defargs.h"
-#include "arguments.h"
-//#include "reflist.h"
-
-/*! Information about an linkable anchor */
-class TagAnchorInfo
-{
- public:
- TagAnchorInfo(const QString &f,const QString &l) : label(l), fileName(f) {}
- QString label;
- QString fileName;
-};
-
-class TagAnchorInfoList : public QList<TagAnchorInfo>
-{
- public:
- TagAnchorInfoList() : QList<TagAnchorInfo>() { setAutoDelete(TRUE); }
- virtual ~TagAnchorInfoList() {}
-};
-
-/*! Container for member specific info that can be read from a tagfile */
-class TagMemberInfo
-{
- public:
- TagMemberInfo() : prot(Public), virt(Normal), isStatic(FALSE) {}
- QString type;
- QString name;
- QString anchorFile;
- QString anchor;
- QString arglist;
- QString kind;
- TagAnchorInfoList docAnchors;
- Protection prot;
- Specifier virt;
- bool isStatic;
-};
-
-/*! Container for class specific info that can be read from a tagfile */
-class TagClassInfo
-{
- public:
- enum Kind { Class, Struct, Union, Interface, Exception, Protocol, Category };
- TagClassInfo() { bases=0, templateArguments=0; members.setAutoDelete(TRUE); isObjC=FALSE; }
- ~TagClassInfo() { delete bases; delete templateArguments; }
- QString name;
- QString filename;
- TagAnchorInfoList docAnchors;
- QList<BaseInfo> *bases;
- QList<TagMemberInfo> members;
- QList<QString> *templateArguments;
- QStringList classList;
- Kind kind;
- bool isObjC;
-};
-
-/*! Container for namespace specific info that can be read from a tagfile */
-class TagNamespaceInfo
-{
- public:
- TagNamespaceInfo() { members.setAutoDelete(TRUE); }
- QString name;
- QString filename;
- QStringList classList;
- QStringList namespaceList;
- TagAnchorInfoList docAnchors;
- QList<TagMemberInfo> members;
-};
-
-/*! Container for package specific info that can be read from a tagfile */
-class TagPackageInfo
-{
- public:
- TagPackageInfo() { members.setAutoDelete(TRUE); }
- QString name;
- QString filename;
- TagAnchorInfoList docAnchors;
- QList<TagMemberInfo> members;
- QStringList classList;
-};
-
-class TagIncludeInfo
-{
- public:
- QString id;
- QString name;
- QString text;
- bool isLocal;
- bool isImported;
-};
-
-/*! Container for file specific info that can be read from a tagfile */
-class TagFileInfo
-{
- public:
- TagFileInfo() { members.setAutoDelete(TRUE); includes.setAutoDelete(TRUE); }
- QString name;
- QString path;
- QString filename;
- TagAnchorInfoList docAnchors;
- QList<TagMemberInfo> members;
- QStringList classList;
- QStringList namespaceList;
- QList<TagIncludeInfo> includes;
-};
-
-/*! Container for group specific info that can be read from a tagfile */
-class TagGroupInfo
-{
- public:
- TagGroupInfo() { members.setAutoDelete(TRUE); }
- QString name;
- QString title;
- QString filename;
- TagAnchorInfoList docAnchors;
- QList<TagMemberInfo> members;
- QStringList subgroupList;
- QStringList classList;
- QStringList namespaceList;
- QStringList fileList;
- QStringList pageList;
- QStringList dirList;
-};
-
-/*! Container for page specific info that can be read from a tagfile */
-class TagPageInfo
-{
- public:
- QString name;
- QString title;
- QString filename;
- TagAnchorInfoList docAnchors;
-};
-
-/*! Container for directory specific info that can be read from a tagfile */
-class TagDirInfo
-{
- public:
- QString name;
- QString filename;
- QString path;
- QStringList subdirList;
- QStringList fileList;
- TagAnchorInfoList docAnchors;
-};
-
-/*! Tag file parser.
- * Reads an XML-structured tagfile and builds up the structure in
- * memory. The method buildLists() is used to transfer/translate
- * the structures to the doxygen engine.
- */
-class TagFileParser : public QXmlDefaultHandler
-{
- enum State { Invalid,
- InClass,
- InFile,
- InNamespace,
- InGroup,
- InPage,
- InMember,
- InPackage,
- InDir,
- InTempArgList
- };
- class StartElementHandler
- {
- typedef void (TagFileParser::*Handler)(const QXmlAttributes &attrib);
- public:
- StartElementHandler(TagFileParser *parent, Handler h) : m_parent(parent), m_handler(h) {}
- void operator()(const QXmlAttributes &attrib) { (m_parent->*m_handler)(attrib); }
- private:
- TagFileParser *m_parent;
- Handler m_handler;
- };
-
- class EndElementHandler
- {
- typedef void (TagFileParser::*Handler)();
- public:
- EndElementHandler(TagFileParser *parent, Handler h) : m_parent(parent), m_handler(h) {}
- void operator()() { (m_parent->*m_handler)(); }
- private:
- TagFileParser *m_parent;
- Handler m_handler;
- };
-
- public:
- TagFileParser(const char *tagName) : m_startElementHandlers(17),
- m_endElementHandlers(17),
- m_tagName(tagName)
- {
- m_startElementHandlers.setAutoDelete(TRUE);
- m_endElementHandlers.setAutoDelete(TRUE);
- }
-
- void setDocumentLocator ( QXmlLocator * locator )
- {
- m_locator = locator;
- }
-
- void setFileName( const QString &fileName )
- {
- m_inputFileName = fileName;
- }
-
- void warn(const char *fmt)
- {
- ::warn(m_inputFileName,m_locator->lineNumber(),fmt);
- }
- void warn(const char *fmt,const char *s)
- {
- ::warn(m_inputFileName,m_locator->lineNumber(),fmt,s);
- }
-
- void startCompound( const QXmlAttributes& attrib )
- {
- m_curString = "";
- QString kind = attrib.value("kind");
- QString isObjC = attrib.value("objc");
- if (kind=="class")
- {
- m_curClass = new TagClassInfo;
- m_curClass->kind = TagClassInfo::Class;
- m_state = InClass;
- }
- else if (kind=="struct")
- {
- m_curClass = new TagClassInfo;
- m_curClass->kind = TagClassInfo::Struct;
- m_state = InClass;
- }
- else if (kind=="union")
- {
- m_curClass = new TagClassInfo;
- m_curClass->kind = TagClassInfo::Union;
- m_state = InClass;
- }
- else if (kind=="interface")
- {
- m_curClass = new TagClassInfo;
- m_curClass->kind = TagClassInfo::Interface;
- m_state = InClass;
- }
- else if (kind=="exception")
- {
- m_curClass = new TagClassInfo;
- m_curClass->kind = TagClassInfo::Exception;
- m_state = InClass;
- }
- else if (kind=="protocol")
- {
- m_curClass = new TagClassInfo;
- m_curClass->kind = TagClassInfo::Protocol;
- m_state = InClass;
- }
- else if (kind=="category")
- {
- m_curClass = new TagClassInfo;
- m_curClass->kind = TagClassInfo::Category;
- m_state = InClass;
- }
- else if (kind=="file")
- {
- m_curFile = new TagFileInfo;
- m_state = InFile;
- }
- else if (kind=="namespace")
- {
- m_curNamespace = new TagNamespaceInfo;
- m_state = InNamespace;
- }
- else if (kind=="group")
- {
- m_curGroup = new TagGroupInfo;
- m_state = InGroup;
- }
- else if (kind=="page")
- {
- m_curPage = new TagPageInfo;
- m_state = InPage;
- }
- else if (kind=="package")
- {
- m_curPackage = new TagPackageInfo;
- m_state = InPackage;
- }
- else if (kind=="dir")
- {
- m_curDir = new TagDirInfo;
- m_state = InDir;
- }
- else
- {
- warn("warning: Unknown compound attribute `%s' found!\n",kind.data());
- m_state = Invalid;
- }
- if (isObjC=="yes" && m_curClass)
- {
- m_curClass->isObjC = TRUE;
- }
- }
-
- void endCompound()
- {
- switch (m_state)
- {
- case InClass: m_tagFileClasses.append(m_curClass);
- m_curClass=0; break;
- case InFile: m_tagFileFiles.append(m_curFile);
- m_curFile=0; break;
- case InNamespace: m_tagFileNamespaces.append(m_curNamespace);
- m_curNamespace=0; break;
- case InGroup: m_tagFileGroups.append(m_curGroup);
- m_curGroup=0; break;
- case InPage: m_tagFilePages.append(m_curPage);
- m_curPage=0; break;
- case InDir: m_tagFileDirs.append(m_curDir);
- m_curDir=0; break;
- case InPackage: m_tagFilePackages.append(m_curPackage);
- m_curPackage=0; break;
- default:
- warn("warning: tag `compound' was not expected!\n");
- }
- }
-
- void startMember( const QXmlAttributes& attrib)
- {
- m_curMember = new TagMemberInfo;
- m_curMember->kind = attrib.value("kind");
- QString protStr = attrib.value("protection");
- QString virtStr = attrib.value("virtualness");
- QString staticStr = attrib.value("static");
- if (protStr=="protected")
- {
- m_curMember->prot = Protected;
- }
- else if (protStr=="private")
- {
- m_curMember->prot = Private;
- }
- if (virtStr=="virtual")
- {
- m_curMember->virt = Virtual;
- }
- else if (virtStr=="pure")
- {
- m_curMember->virt = Pure;
- }
- if (staticStr=="yes")
- {
- m_curMember->isStatic = TRUE;
- }
- m_stateStack.push(new State(m_state));
- m_state = InMember;
- }
-
- void endMember()
- {
- m_state = *m_stateStack.top();
- m_stateStack.remove();
- switch(m_state)
- {
- case InClass: m_curClass->members.append(m_curMember); break;
- case InFile: m_curFile->members.append(m_curMember); break;
- case InNamespace: m_curNamespace->members.append(m_curMember); break;
- case InGroup: m_curGroup->members.append(m_curMember); break;
- case InPackage: m_curPackage->members.append(m_curMember); break;
- default: warn("warning: Unexpected tag `member' found\n"); break;
- }
- }
-
- void endDocAnchor()
- {
- switch(m_state)
- {
- case InClass: m_curClass->docAnchors.append(new TagAnchorInfo(m_fileName,m_curString)); break;
- case InFile: m_curFile->docAnchors.append(new TagAnchorInfo(m_fileName,m_curString)); break;
- case InNamespace: m_curNamespace->docAnchors.append(new TagAnchorInfo(m_fileName,m_curString)); break;
- case InGroup: m_curGroup->docAnchors.append(new TagAnchorInfo(m_fileName,m_curString)); break;
- case InPage: m_curPage->docAnchors.append(new TagAnchorInfo(m_fileName,m_curString)); break;
- case InMember: m_curMember->docAnchors.append(new TagAnchorInfo(m_fileName,m_curString)); break;
- case InPackage: m_curPackage->docAnchors.append(new TagAnchorInfo(m_fileName,m_curString)); break;
- case InDir: m_curDir->docAnchors.append(new TagAnchorInfo(m_fileName,m_curString)); break;
- default: warn("warning: Unexpected tag `member' found\n"); break;
- }
- }
-
- void endClass()
- {
- switch(m_state)
- {
- case InClass: m_curClass->classList.append(m_curString); break;
- case InFile: m_curFile->classList.append(m_curString); break;
- case InNamespace: m_curNamespace->classList.append(m_curString); break;
- case InGroup: m_curGroup->classList.append(m_curString); break;
- case InPackage: m_curPackage->classList.append(m_curString); break;
- default: warn("warning: Unexpected tag `class' found\n"); break;
- }
- }
-
- void endNamespace()
- {
- switch(m_state)
- {
- case InNamespace: m_curNamespace->classList.append(m_curString); break;
- case InFile: m_curFile->namespaceList.append(m_curString); break;
- case InGroup: m_curGroup->namespaceList.append(m_curString); break;
- default: warn("warning: Unexpected tag `namespace' found\n"); break;
- }
- }
-
- void endFile()
- {
- switch(m_state)
- {
- case InGroup: m_curGroup->fileList.append(m_curString); break;
- case InDir: m_curDir->fileList.append(m_curString); break;
- default: warn("warning: Unexpected tag `file' found\n"); break;
- }
- }
-
- void endPage()
- {
- switch(m_state)
- {
- case InGroup: m_curGroup->fileList.append(m_curString); break;
- default: warn("warning: Unexpected tag `page' found\n"); break;
- }
- }
-
- void endDir()
- {
- switch(m_state)
- {
- case InDir: m_curDir->subdirList.append(m_curString); break;
- default: warn("warning: Unexpected tag `page' found\n"); break;
- }
- }
-
- void startStringValue(const QXmlAttributes& )
- {
- m_curString = "";
- }
-
- void startDocAnchor(const QXmlAttributes& attrib )
- {
- m_fileName = attrib.value("file");
- m_curString = "";
- }
-
- void endType()
- {
- if (m_state==InMember)
- {
- m_curMember->type = m_curString;
- }
- else
- {
- warn("warning: Unexpected tag `type' found\n");
- }
- }
-
- void endName()
- {
- switch (m_state)
- {
- case InClass: m_curClass->name = m_curString; break;
- case InFile: m_curFile->name = m_curString; break;
- case InNamespace: m_curNamespace->name = m_curString; break;
- case InGroup: m_curGroup->name = m_curString; break;
- case InPage: m_curPage->name = m_curString; break;
- case InDir: m_curDir->name = m_curString; break;
- case InMember: m_curMember->name = m_curString; break;
- case InPackage: m_curPackage->name = m_curString; break;
- default: warn("warning: Unexpected tag `name' found\n"); break;
- }
- }
-
- void startBase(const QXmlAttributes& attrib )
- {
- m_curString="";
- if (m_state==InClass && m_curClass)
- {
- QString protStr = attrib.value("protection");
- QString virtStr = attrib.value("virtualness");
- Protection prot = Public;
- Specifier virt = Normal;
- if (protStr=="protected")
- {
- prot = Protected;
- }
- else if (protStr=="private")
- {
- prot = Private;
- }
- if (virtStr=="virtual")
- {
- virt = Virtual;
- }
- if (m_curClass->bases==0)
- {
- m_curClass->bases = new QList<BaseInfo>;
- m_curClass->bases->setAutoDelete(TRUE);
- }
- m_curClass->bases->append(new BaseInfo(m_curString,prot,virt));
- }
- else
- {
- warn("warning: Unexpected tag `base' found\n");
- }
- }
-
- void endBase()
- {
- if (m_state==InClass && m_curClass)
- {
- m_curClass->bases->getLast()->name = m_curString;
- }
- else
- {
- warn("warning: Unexpected tag `base' found\n");
- }
- }
-
- void startIncludes(const QXmlAttributes& attrib )
- {
- if (m_state==InFile && m_curFile)
- {
- m_curIncludes = new TagIncludeInfo;
- m_curIncludes->id = attrib.value("id");
- m_curIncludes->name = attrib.value("name");
- m_curIncludes->isLocal = attrib.value("local")=="yes" ? TRUE : FALSE;
- m_curIncludes->isImported = attrib.value("imported")=="yes" ? TRUE : FALSE;
- m_curFile->includes.append(m_curIncludes);
- }
- else
- {
- warn("warning: Unexpected tag `includes' found\n");
- }
- m_curString="";
- }
-
- void endIncludes()
- {
- m_curIncludes->text = m_curString;
- }
-
- void endTemplateArg()
- {
- if (m_state==InClass && m_curClass)
- {
- if (m_curClass->templateArguments==0)
- {
- m_curClass->templateArguments = new QList<QString>;
- m_curClass->templateArguments->setAutoDelete(TRUE);
- }
- m_curClass->templateArguments->append(new QString(m_curString));
- }
- else
- {
- warn("warning: Unexpected tag `templarg' found\n");
- }
- }
-
- void endFilename()
- {
- switch (m_state)
- {
- case InClass: m_curClass->filename = m_curString; break;
- case InNamespace: m_curNamespace->filename = m_curString; break;
- case InFile: m_curFile->filename = m_curString; break;
- case InGroup: m_curGroup->filename = m_curString; break;
- case InPage: m_curPage->filename = m_curString; break;
- case InPackage: m_curPackage->filename = m_curString; break;
- case InDir: m_curDir->filename = m_curString; break;
- default: warn("warning: Unexpected tag `filename' found\n"); break;
- }
- }
-
- void endPath()
- {
- switch (m_state)
- {
- case InFile: m_curFile->path = m_curString; break;
- case InDir: m_curDir->path = m_curString; break;
- default: warn("warning: Unexpected tag `path' found\n"); break;
- }
- }
-
- void endAnchor()
- {
- if (m_state==InMember)
- {
- m_curMember->anchor = m_curString;
- }
- else
- {
- warn("warning: Unexpected tag `anchor' found\n");
- }
- }
-
- void endAnchorFile()
- {
- if (m_state==InMember)
- {
- m_curMember->anchorFile = m_curString;
- }
- else
- {
- warn("warning: Unexpected tag `anchorfile' found\n");
- }
- }
-
- void endArglist()
- {
- if (m_state==InMember)
- {
- m_curMember->arglist = m_curString;
- }
- else
- {
- warn("warning: Unexpected tag `arglist' found\n");
- }
- }
- void endTitle()
- {
- switch (m_state)
- {
- case InGroup: m_curGroup->title = m_curString; break;
- case InPage: m_curPage->title = m_curString; break;
- default: warn("warning: Unexpected tag `title' found\n"); break;
- }
- }
-
- void endSubgroup()
- {
- if (m_state==InGroup)
- {
- m_curGroup->subgroupList.append(m_curString);
- }
- else
- {
- warn("warning: Unexpected tag `subgroup' found\n");
- }
- }
-
- void startIgnoreElement(const QXmlAttributes& )
- {
- }
-
- void endIgnoreElement()
- {
- }
-
- bool startDocument()
- {
- m_state = Invalid;
-
- m_curClass=0;
- m_curNamespace=0;
- m_curFile=0;
- m_curGroup=0;
- m_curPage=0;
- m_curPackage=0;
- m_curDir=0;
-
- m_stateStack.setAutoDelete(TRUE);
- m_tagFileClasses.setAutoDelete(TRUE);
- m_tagFileFiles.setAutoDelete(TRUE);
- m_tagFileNamespaces.setAutoDelete(TRUE);
- m_tagFileGroups.setAutoDelete(TRUE);
- m_tagFilePages.setAutoDelete(TRUE);
- m_tagFilePackages.setAutoDelete(TRUE);
- m_tagFileDirs.setAutoDelete(TRUE);
-
- m_startElementHandlers.insert("compound", new StartElementHandler(this,&TagFileParser::startCompound));
- m_startElementHandlers.insert("member", new StartElementHandler(this,&TagFileParser::startMember));
- m_startElementHandlers.insert("name", new StartElementHandler(this,&TagFileParser::startStringValue));
- m_startElementHandlers.insert("base", new StartElementHandler(this,&TagFileParser::startBase));
- m_startElementHandlers.insert("filename", new StartElementHandler(this,&TagFileParser::startStringValue));
- m_startElementHandlers.insert("includes", new StartElementHandler(this,&TagFileParser::startIncludes));
- m_startElementHandlers.insert("path", new StartElementHandler(this,&TagFileParser::startStringValue));
- m_startElementHandlers.insert("anchorfile", new StartElementHandler(this,&TagFileParser::startStringValue));
- m_startElementHandlers.insert("anchor", new StartElementHandler(this,&TagFileParser::startStringValue));
- m_startElementHandlers.insert("arglist", new StartElementHandler(this,&TagFileParser::startStringValue));
- m_startElementHandlers.insert("title", new StartElementHandler(this,&TagFileParser::startStringValue));
- m_startElementHandlers.insert("subgroup", new StartElementHandler(this,&TagFileParser::startStringValue));
- m_startElementHandlers.insert("class", new StartElementHandler(this,&TagFileParser::startStringValue));
- m_startElementHandlers.insert("namespace", new StartElementHandler(this,&TagFileParser::startStringValue));
- m_startElementHandlers.insert("file", new StartElementHandler(this,&TagFileParser::startStringValue));
- m_startElementHandlers.insert("dir", new StartElementHandler(this,&TagFileParser::startStringValue));
- m_startElementHandlers.insert("page", new StartElementHandler(this,&TagFileParser::startStringValue));
- m_startElementHandlers.insert("docanchor", new StartElementHandler(this,&TagFileParser::startDocAnchor));
- m_startElementHandlers.insert("tagfile", new StartElementHandler(this,&TagFileParser::startIgnoreElement));
- m_startElementHandlers.insert("templarg", new StartElementHandler(this,&TagFileParser::startStringValue));
- m_startElementHandlers.insert("type", new StartElementHandler(this,&TagFileParser::startStringValue));
-
- m_endElementHandlers.insert("compound", new EndElementHandler(this,&TagFileParser::endCompound));
- m_endElementHandlers.insert("member", new EndElementHandler(this,&TagFileParser::endMember));
- m_endElementHandlers.insert("name", new EndElementHandler(this,&TagFileParser::endName));
- m_endElementHandlers.insert("base", new EndElementHandler(this,&TagFileParser::endBase));
- m_endElementHandlers.insert("filename", new EndElementHandler(this,&TagFileParser::endFilename));
- m_endElementHandlers.insert("includes", new EndElementHandler(this,&TagFileParser::endIncludes));
- m_endElementHandlers.insert("path", new EndElementHandler(this,&TagFileParser::endPath));
- m_endElementHandlers.insert("anchorfile", new EndElementHandler(this,&TagFileParser::endAnchorFile));
- m_endElementHandlers.insert("anchor", new EndElementHandler(this,&TagFileParser::endAnchor));
- m_endElementHandlers.insert("arglist", new EndElementHandler(this,&TagFileParser::endArglist));
- m_endElementHandlers.insert("title", new EndElementHandler(this,&TagFileParser::endTitle));
- m_endElementHandlers.insert("subgroup", new EndElementHandler(this,&TagFileParser::endSubgroup));
- m_endElementHandlers.insert("class" , new EndElementHandler(this,&TagFileParser::endClass));
- m_endElementHandlers.insert("namespace", new EndElementHandler(this,&TagFileParser::endNamespace));
- m_endElementHandlers.insert("file", new EndElementHandler(this,&TagFileParser::endFile));
- m_endElementHandlers.insert("dir", new EndElementHandler(this,&TagFileParser::endDir));
- m_endElementHandlers.insert("page", new EndElementHandler(this,&TagFileParser::endPage));
- m_endElementHandlers.insert("docanchor", new EndElementHandler(this,&TagFileParser::endDocAnchor));
- m_endElementHandlers.insert("tagfile", new EndElementHandler(this,&TagFileParser::endIgnoreElement));
- m_endElementHandlers.insert("templarg", new EndElementHandler(this,&TagFileParser::endTemplateArg));
- m_endElementHandlers.insert("type", new EndElementHandler(this,&TagFileParser::endType));
-
- return TRUE;
- }
-
- bool startElement( const QString&, const QString&,
- const QString&name, const QXmlAttributes& attrib )
- {
- //printf("startElement `%s'\n",name.data());
- StartElementHandler *handler = m_startElementHandlers[name];
- if (handler)
- {
- (*handler)(attrib);
- }
- else
- {
- warn("warning: Unknown tag `%s' found!\n",name.data());
- }
- return TRUE;
- }
-
- bool endElement( const QString&, const QString&, const QString& name )
- {
- //printf("endElement `%s'\n",name.data());
- EndElementHandler *handler = m_endElementHandlers[name];
- if (handler)
- {
- (*handler)();
- }
- else
- {
- warn("warning: Unknown tag `%s' found!\n",name.data());
- }
- return TRUE;
- }
-
- bool characters ( const QString & ch )
- {
- m_curString+=ch;
- return TRUE;
- }
-
- void dump();
- void buildLists(Entry *root);
- void addIncludes();
-
- private:
- void buildMemberList(Entry *ce,QList<TagMemberInfo> &members);
- void addDocAnchors(Entry *e,const TagAnchorInfoList &l);
- QList<TagClassInfo> m_tagFileClasses;
- QList<TagFileInfo> m_tagFileFiles;
- QList<TagNamespaceInfo> m_tagFileNamespaces;
- QList<TagGroupInfo> m_tagFileGroups;
- QList<TagPageInfo> m_tagFilePages;
- QList<TagPackageInfo> m_tagFilePackages;
- QList<TagDirInfo> m_tagFileDirs;
- QDict<StartElementHandler> m_startElementHandlers;
- QDict<EndElementHandler> m_endElementHandlers;
- TagClassInfo *m_curClass;
- TagFileInfo *m_curFile;
- TagNamespaceInfo *m_curNamespace;
- TagPackageInfo *m_curPackage;
- TagGroupInfo *m_curGroup;
- TagPageInfo *m_curPage;
- TagDirInfo *m_curDir;
- TagMemberInfo *m_curMember;
- TagIncludeInfo *m_curIncludes;
- QCString m_curString;
- QString m_tagName;
- QString m_fileName;
- State m_state;
- QStack<State> m_stateStack;
- QXmlLocator *m_locator;
- QString m_inputFileName;
-};
-
-/*! Error handler for the XML tag file parser.
- * Basically dumps all fatal error to stderr using err().
- */
-class TagFileErrorHandler : public QXmlErrorHandler
-{
- public:
- virtual ~TagFileErrorHandler() {}
- bool warning( const QXmlParseException & )
- {
- return FALSE;
- }
- bool error( const QXmlParseException & )
- {
- return FALSE;
- }
- bool fatalError( const QXmlParseException &exception )
- {
- err("Fatal error at line %d column %d: %s\n",
- exception.lineNumber(),exception.columnNumber(),
- exception.message().data());
- return FALSE;
- }
- QString errorString() { return ""; }
-
- private:
- QString errorMsg;
-};
-
-/*! Dumps the internal structures. For debugging only! */
-void TagFileParser::dump()
-{
- msg("Result:\n");
- QListIterator<TagClassInfo> lci(m_tagFileClasses);
-
- //============== CLASSES
- TagClassInfo *cd;
- for (;(cd=lci.current());++lci)
- {
- msg("class `%s'\n",cd->name.data());
- msg(" filename `%s'\n",cd->filename.data());
- if (cd->bases)
- {
- QListIterator<BaseInfo> bii(*cd->bases);
- BaseInfo *bi;
- for ( bii.toFirst() ; (bi=bii.current()) ; ++bii)
- {
- msg( " base: %s \n", bi->name.data() );
- }
- }
-
- QListIterator<TagMemberInfo> mci(cd->members);
- TagMemberInfo *md;
- for (;(md=mci.current());++mci)
- {
- msg(" member:\n");
- msg(" kind: `%s'\n",md->kind.data());
- msg(" name: `%s'\n",md->name.data());
- msg(" anchor: `%s'\n",md->anchor.data());
- msg(" arglist: `%s'\n",md->arglist.data());
- }
- }
- //============== NAMESPACES
- QListIterator<TagNamespaceInfo> lni(m_tagFileNamespaces);
- TagNamespaceInfo *nd;
- for (;(nd=lni.current());++lni)
- {
- msg("namespace `%s'\n",nd->name.data());
- msg(" filename `%s'\n",nd->filename.data());
- QStringList::Iterator it;
- for ( it = nd->classList.begin();
- it != nd->classList.end(); ++it )
- {
- msg( " class: %s \n", (*it).latin1() );
- }
-
- QListIterator<TagMemberInfo> mci(nd->members);
- TagMemberInfo *md;
- for (;(md=mci.current());++mci)
- {
- msg(" member:\n");
- msg(" kind: `%s'\n",md->kind.data());
- msg(" name: `%s'\n",md->name.data());
- msg(" anchor: `%s'\n",md->anchor.data());
- msg(" arglist: `%s'\n",md->arglist.data());
- }
- }
- //============== FILES
- QListIterator<TagFileInfo> lfi(m_tagFileFiles);
- TagFileInfo *fd;
- for (;(fd=lfi.current());++lfi)
- {
- msg("file `%s'\n",fd->name.data());
- msg(" filename `%s'\n",fd->filename.data());
- QStringList::Iterator it;
- for ( it = fd->namespaceList.begin();
- it != fd->namespaceList.end(); ++it )
- {
- msg( " namespace: %s \n", (*it).latin1() );
- }
- for ( it = fd->classList.begin();
- it != fd->classList.end(); ++it )
- {
- msg( " class: %s \n", (*it).latin1() );
- }
-
- QListIterator<TagMemberInfo> mci(fd->members);
- TagMemberInfo *md;
- for (;(md=mci.current());++mci)
- {
- msg(" member:\n");
- msg(" kind: `%s'\n",md->kind.data());
- msg(" name: `%s'\n",md->name.data());
- msg(" anchor: `%s'\n",md->anchor.data());
- msg(" arglist: `%s'\n",md->arglist.data());
- }
-
- QListIterator<TagIncludeInfo> mii(fd->includes);
- TagIncludeInfo *ii;
- for (;(ii=mii.current());++mii)
- {
- msg(" includes id: %s name: %s\n",ii->id.data(),ii->name.data());
- }
- }
-
- //============== GROUPS
- QListIterator<TagGroupInfo> lgi(m_tagFileGroups);
- TagGroupInfo *gd;
- for (;(gd=lgi.current());++lgi)
- {
- msg("group `%s'\n",gd->name.data());
- msg(" filename `%s'\n",gd->filename.data());
- QStringList::Iterator it;
- for ( it = gd->namespaceList.begin();
- it != gd->namespaceList.end(); ++it )
- {
- msg( " namespace: %s \n", (*it).latin1() );
- }
- for ( it = gd->classList.begin();
- it != gd->classList.end(); ++it )
- {
- msg( " class: %s \n", (*it).latin1() );
- }
- for ( it = gd->fileList.begin();
- it != gd->fileList.end(); ++it )
- {
- msg( " file: %s \n", (*it).latin1() );
- }
- for ( it = gd->subgroupList.begin();
- it != gd->subgroupList.end(); ++it )
- {
- msg( " subgroup: %s \n", (*it).latin1() );
- }
- for ( it = gd->pageList.begin();
- it != gd->pageList.end(); ++it )
- {
- msg( " page: %s \n", (*it).latin1() );
- }
-
- QListIterator<TagMemberInfo> mci(gd->members);
- TagMemberInfo *md;
- for (;(md=mci.current());++mci)
- {
- msg(" member:\n");
- msg(" kind: `%s'\n",md->kind.data());
- msg(" name: `%s'\n",md->name.data());
- msg(" anchor: `%s'\n",md->anchor.data());
- msg(" arglist: `%s'\n",md->arglist.data());
- }
- }
- //============== PAGES
- QListIterator<TagPageInfo> lpi(m_tagFilePages);
- TagPageInfo *pd;
- for (;(pd=lpi.current());++lpi)
- {
- msg("page `%s'\n",pd->name.data());
- msg(" title `%s'\n",pd->title.data());
- msg(" filename `%s'\n",pd->filename.data());
- }
- //============== DIRS
- QListIterator<TagDirInfo> ldi(m_tagFileDirs);
- TagDirInfo *dd;
- for (;(dd=ldi.current());++ldi)
- {
- msg("dir `%s'\n",dd->name.data());
- msg(" path `%s'\n",dd->path.data());
- QStringList::Iterator it;
- for ( it = dd->fileList.begin();
- it != dd->fileList.end(); ++it )
- {
- msg( " file: %s \n", (*it).latin1() );
- }
- for ( it = dd->subdirList.begin();
- it != dd->subdirList.end(); ++it )
- {
- msg( " subdir: %s \n", (*it).latin1() );
- }
- }
-}
-
-void TagFileParser::addDocAnchors(Entry *e,const TagAnchorInfoList &l)
-{
- QListIterator<TagAnchorInfo> tli(l);
- TagAnchorInfo *ta;
- for (tli.toFirst();(ta=tli.current());++tli)
- {
- if (Doxygen::sectionDict.find(ta->label)==0)
- {
- //printf("New sectionInfo file=%s anchor=%s\n",
- // ta->fileName.data(),ta->label.data());
- SectionInfo *si=new SectionInfo(ta->fileName,ta->label,ta->label,
- SectionInfo::Anchor,0,m_tagName);
- Doxygen::sectionDict.append(ta->label,si);
- e->anchors->append(si);
- }
- else
- {
- warn("Duplicate anchor %s found\n",ta->label.data());
- }
- }
-}
-
-void TagFileParser::buildMemberList(Entry *ce,QList<TagMemberInfo> &members)
-{
- QListIterator<TagMemberInfo> mii(members);
- TagMemberInfo *tmi;
- for (;(tmi=mii.current());++mii)
- {
- Entry *me = new Entry;
- me->type = tmi->type;
- me->name = tmi->name;
- me->args = tmi->arglist;
- if (!me->args.isEmpty())
- {
- delete me->argList;
- me->argList = new ArgumentList;
- stringToArgumentList(me->args,me->argList);
- }
- me->protection = tmi->prot;
- me->virt = tmi->virt;
- me->stat = tmi->isStatic;
- me->fileName = ce->fileName;
- if (ce->section == Entry::GROUPDOC_SEC)
- {
- me->groups->append(new Grouping(ce->name,Grouping::GROUPING_INGROUP));
- }
- addDocAnchors(me,tmi->docAnchors);
- TagInfo *ti = new TagInfo;
- ti->tagName = m_tagName;
- ti->anchor = tmi->anchor;
- ti->fileName = tmi->anchorFile;
- me->tagInfo = ti;
- if (tmi->kind=="define")
- {
- me->type="#define";
- me->section = Entry::DEFINE_SEC;
- }
- else if (tmi->kind=="enumvalue")
- {
- me->section = Entry::VARIABLE_SEC;
- me->mtype = Method;
- }
- else if (tmi->kind=="property")
- {
- me->section = Entry::VARIABLE_SEC;
- me->mtype = Property;
- }
- else if (tmi->kind=="event")
- {
- me->section = Entry::VARIABLE_SEC;
- me->mtype = Event;
- }
- else if (tmi->kind=="variable")
- {
- me->section = Entry::VARIABLE_SEC;
- me->mtype = Method;
- }
- else if (tmi->kind=="typedef")
- {
- me->section = Entry::VARIABLE_SEC; //Entry::TYPEDEF_SEC;
- me->type.prepend("typedef ");
- me->mtype = Method;
- }
- else if (tmi->kind=="enumeration")
- {
- me->section = Entry::ENUM_SEC;
- me->mtype = Method;
- }
- else if (tmi->kind=="function")
- {
- me->section = Entry::FUNCTION_SEC;
- me->mtype = Method;
- }
- else if (tmi->kind=="signal")
- {
- me->section = Entry::FUNCTION_SEC;
- me->mtype = Signal;
- }
- else if (tmi->kind=="prototype")
- {
- me->section = Entry::FUNCTION_SEC;
- me->mtype = Method;
- }
- else if (tmi->kind=="friend")
- {
- me->section = Entry::FUNCTION_SEC;
- me->type.prepend("friend ");
- me->mtype = Method;
- }
- else if (tmi->kind=="dcop")
- {
- me->section = Entry::FUNCTION_SEC;
- me->mtype = DCOP;
- }
- else if (tmi->kind=="slot")
- {
- me->section = Entry::FUNCTION_SEC;
- me->mtype = Slot;
- }
- ce->addSubEntry(me);
- }
-}
-
-static QString stripPath(const QString &s)
-{
- int i=s.findRev('/');
- if (i!=-1)
- {
- return s.right(s.length()-i-1);
- }
- else
- {
- return s;
- }
-}
-
-/*! Injects the info gathered by the XML parser into the Entry tree.
- * This tree contains the information extracted from the input in a
- * "unrelated" form.
- */
-void TagFileParser::buildLists(Entry *root)
-{
- // build class list
- TagClassInfo *tci = m_tagFileClasses.first();
- while (tci)
- {
- Entry *ce = new Entry;
- ce->section = Entry::CLASS_SEC;
- switch (tci->kind)
- {
- case TagClassInfo::Class: break;
- case TagClassInfo::Struct: ce->spec = Entry::Struct; break;
- case TagClassInfo::Union: ce->spec = Entry::Union; break;
- case TagClassInfo::Interface: ce->spec = Entry::Interface; break;
- case TagClassInfo::Exception: ce->spec = Entry::Exception; break;
- case TagClassInfo::Protocol: ce->spec = Entry::Protocol; break;
- case TagClassInfo::Category: ce->spec = Entry::Category; break;
- }
- ce->name = tci->name;
- if (tci->kind==TagClassInfo::Protocol)
- {
- ce->name+="-p";
- }
- addDocAnchors(ce,tci->docAnchors);
- TagInfo *ti = new TagInfo;
- ti->tagName = m_tagName;
- ti->fileName = tci->filename;
- ce->tagInfo = ti;
- ce->lang = tci->isObjC ? SrcLangExt_ObjC : SrcLangExt_Unknown;
- // 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>;
- ce->tArgLists->setAutoDelete(TRUE);
- }
- ArgumentList *al = new ArgumentList;
- ce->tArgLists->append(al);
-
- QListIterator<QString> sli(*tci->templateArguments);
- QString *argName;
- for (;(argName=sli.current());++sli)
- {
- Argument *a = new Argument;
- a->type = "class";
- a->name = *argName;
- al->append(a);
- }
- }
-
- buildMemberList(ce,tci->members);
- root->addSubEntry(ce);
- tci = m_tagFileClasses.next();
- }
-
- // build file list
- TagFileInfo *tfi = m_tagFileFiles.first();
- while (tfi)
- {
- Entry *fe = new Entry;
- fe->section = guessSection(tfi->name);
- fe->name = tfi->name;
- addDocAnchors(fe,tfi->docAnchors);
- TagInfo *ti = new TagInfo;
- ti->tagName = m_tagName;
- ti->fileName = tfi->filename;
- fe->tagInfo = ti;
-
- QString fullName = m_tagName+":"+tfi->path+stripPath(tfi->name);
- fe->fileName = fullName;
- //printf("new FileDef() filename=%s\n",tfi->filename.data());
- FileDef *fd = new FileDef(m_tagName+":"+tfi->path,
- tfi->name,m_tagName,
- tfi->filename
- );
- FileName *mn;
- if ((mn=Doxygen::inputNameDict->find(tfi->name)))
- {
- mn->append(fd);
- }
- else
- {
- mn = new FileName(fullName,tfi->name);
- mn->append(fd);
- Doxygen::inputNameList->inSort(mn);
- Doxygen::inputNameDict->insert(tfi->name,mn);
- }
- buildMemberList(fe,tfi->members);
- root->addSubEntry(fe);
- tfi = m_tagFileFiles.next();
- }
-
- // build namespace list
- TagNamespaceInfo *tni = m_tagFileNamespaces.first();
- while (tni)
- {
- Entry *ne = new Entry;
- ne->section = Entry::NAMESPACE_SEC;
- ne->name = tni->name;
- addDocAnchors(ne,tni->docAnchors);
- TagInfo *ti = new TagInfo;
- ti->tagName = m_tagName;
- ti->fileName = tni->filename;
- ne->tagInfo = ti;
-
- buildMemberList(ne,tni->members);
- root->addSubEntry(ne);
- tni = m_tagFileNamespaces.next();
- }
-
- // build package list
- TagPackageInfo *tpgi = m_tagFilePackages.first();
- while (tpgi)
- {
- Entry *pe = new Entry;
- pe->section = Entry::PACKAGE_SEC;
- pe->name = tpgi->name;
- addDocAnchors(pe,tpgi->docAnchors);
- TagInfo *ti = new TagInfo;
- ti->tagName = m_tagName;
- ti->fileName = tpgi->filename;
- pe->tagInfo = ti;
-
- buildMemberList(pe,tpgi->members);
- root->addSubEntry(pe);
- tpgi = m_tagFilePackages.next();
- }
-
- // build group list, but only if config file says to include it
- //if (Config_getBool("EXTERNAL_GROUPS"))
- //{
- TagGroupInfo *tgi = m_tagFileGroups.first();
- while (tgi)
- {
- Entry *ge = new Entry;
- ge->section = Entry::GROUPDOC_SEC;
- ge->name = tgi->name;
- ge->type = tgi->title;
- addDocAnchors(ge,tgi->docAnchors);
- TagInfo *ti = new TagInfo;
- ti->tagName = m_tagName;
- ti->fileName = tgi->filename;
- ge->tagInfo = ti;
-
- buildMemberList(ge,tgi->members);
- root->addSubEntry(ge);
- tgi = m_tagFileGroups.next();
- }
- //}
-
- // build page list
- TagPageInfo *tpi = m_tagFilePages.first();
- while (tpi)
- {
- Entry *pe = new Entry;
- pe->section = Entry::PAGEDOC_SEC;
- pe->name = tpi->name;
- pe->args = tpi->title;
- addDocAnchors(pe,tpi->docAnchors);
- TagInfo *ti = new TagInfo;
- ti->tagName = m_tagName;
- ti->fileName = tpi->filename;
- pe->tagInfo = ti;
-
- root->addSubEntry(pe);
- tpi = m_tagFilePages.next();
- }
-}
-
-void TagFileParser::addIncludes()
-{
- TagFileInfo *tfi = m_tagFileFiles.first();
- while (tfi)
- {
- //printf("tag file tagName=%s path=%s name=%s\n",m_tagName.data(),tfi->path.data(),tfi->name.data());
- FileName *fn = Doxygen::inputNameDict->find(tfi->name);
- if (fn)
- {
- //printf("found\n");
- FileNameIterator fni(*fn);
- FileDef *fd;
- for (;(fd=fni.current());++fni)
- {
- //printf("input file path=%s name=%s\n",fd->getPath().data(),fd->name().data());
- if (fd->getPath()==QCString(m_tagName+":"+tfi->path))
- {
- //printf("found\n");
- QListIterator<TagIncludeInfo> mii(tfi->includes);
- TagIncludeInfo *ii;
- for (;(ii=mii.current());++mii)
- {
- //printf("ii->name=`%s'\n",ii->name.data());
- FileName *ifn = Doxygen::inputNameDict->find(ii->name);
- ASSERT(ifn!=0);
- if (ifn)
- {
- FileNameIterator ifni(*ifn);
- FileDef *ifd;
- for (;(ifd=ifni.current());++ifni)
- {
- //printf("ifd->getOutputFileBase()=%s ii->id=%s\n",
- // ifd->getOutputFileBase().data(),ii->id.data());
- if (ifd->getOutputFileBase()==QCString(ii->id))
- {
- fd->addIncludeDependency(ifd,ii->text,ii->isLocal,ii->isImported,FALSE);
- }
- }
- }
- }
- }
- }
- }
- tfi = m_tagFileFiles.next();
- }
-}
-
-void parseTagFile(Entry *root,const char *fullName,const char *tagName)
-{
- QFileInfo fi(fullName);
- if (!fi.exists()) return;
- TagFileParser handler( tagName );
- handler.setFileName(fullName);
- TagFileErrorHandler errorHandler;
- QFile xmlFile( fullName );
- QXmlInputSource source( xmlFile );
- QXmlSimpleReader reader;
- reader.setContentHandler( &handler );
- reader.setErrorHandler( &errorHandler );
- reader.parse( source );
- handler.buildLists(root);
- handler.addIncludes();
- //handler.dump();
-}
-
-
diff --git a/trunk/src/tagreader.h b/trunk/src/tagreader.h
deleted file mode 100644
index 8366cbb..0000000
--- a/trunk/src/tagreader.h
+++ /dev/null
@@ -1,28 +0,0 @@
-/******************************************************************************
- *
- *
- *
- *
- * Copyright (C) 1997-2012 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.
- *
- */
-
-#ifndef TAGREADER_H
-#define TAGREADER_H
-
-#include "qtbc.h"
-
-class Entry;
-
-void parseTagFile(Entry *root,const char *fullPathName,const char *fileName);
-
-#endif
diff --git a/trunk/src/tclscanner.h b/trunk/src/tclscanner.h
deleted file mode 100644
index 8f9d280..0000000
--- a/trunk/src/tclscanner.h
+++ /dev/null
@@ -1,52 +0,0 @@
-/******************************************************************************
- *
- *
- *
- * Copyright (C) 1997-2012 by Dimitri van Heesch.
- * Copyright (C) 2010-2011 by Rene Zaumseil
- *
- * 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.
- *
- */
-
-#ifndef SCANNER_TCL_H
-#define SCANNER_TCL_H
-
-#include "parserintf.h"
-
-/** \brief Tcl language parser using state-based lexical scanning.
- *
- * This is the Tcl language parser for doxygen.
- */
-class TclLanguageScanner : public ParserInterface
-{
- public:
- virtual ~TclLanguageScanner() {}
- void parseInput(const char *fileName,
- const char *fileBuf,
- Entry *root);
- bool needsPreprocessing(const QCString &extension);
- void parseCode(CodeOutputInterface &codeOutIntf,
- const char *scopeName,
- const QCString &input,
- bool isExampleBlock,
- const char *exampleName=0,
- FileDef *fileDef=0,
- int startLine=-1,
- int endLine=-1,
- bool inlineFragment=FALSE,
- MemberDef *memberDef=0,
- bool showLineNumbers=TRUE
- );
- void resetCodeParserState();
- void parsePrototype(const char *text);
-};
-
-#endif
diff --git a/trunk/src/tclscanner.l b/trunk/src/tclscanner.l
deleted file mode 100644
index 67b8c6d..0000000
--- a/trunk/src/tclscanner.l
+++ /dev/null
@@ -1,2683 +0,0 @@
-/*****************************************************************************
- * Parser for Tcl subset
- *
- * Copyright (C) 2010 by Rene Zaumseil
- * based on the work of 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.
- *
- */
-%{
-#include <stdio.h>
-#include <stdlib.h>
-#include <assert.h>
-#include <ctype.h>
-#include "qtbc.h"
-#include <qarray.h>
-#include <qstack.h>
-#include <qregexp.h>
-#include <unistd.h>
-#include <qfile.h>
-#include <qdict.h>
-#include "entry.h"
-#include "message.h"
-#include "config.h"
-#include "doxygen.h"
-#include "util.h"
-#include "defargs.h"
-#include "language.h"
-#include "commentscan.h"
-#include "pre.h"
-#include "tclscanner.h"
-#include "outputlist.h"
-#include "membername.h"
-#include "searchindex.h"
-#include "commentcnv.h"
-#include "bufstr.h"
-#include "portable.h"
-#include <qstring.h>
-#include <qstringlist.h>
-#include <qlist.h>
-#include <qmap.h>
-#include "arguments.h"
-
-#define YY_NEVER_INTERACTIVE 1
-
-#define MAX_INCLUDE_DEPTH 10
-
-//! Application error.
-#define tcl_err \
- printf("Error %d %s() in %s line %d! ",__LINE__,__FUNCTION__,tcl.file_name.data(),yylineno); \
- yy_push_state(ERROR); \
- yyless(0); \
- printf
-
-//! Application warning.
-#define tcl_war \
- printf("Warning %d %s() in %s line %d: ",__LINE__,__FUNCTION__,tcl.file_name.data(),yylineno); \
- printf
-
-//! Application message.
-#define tcl_inf \
- if (0) printf("--- %.4d %s() %d@%d: ",__LINE__,__FUNCTION__,yylineno,yy_start_stack_ptr) && printf
-
-//! Debug message.
-#define D\
- if (0) printf("--- %.4d %s() %d@%d: %s\n",__LINE__,__FUNCTION__,yylineno,yy_start_stack_ptr,yytext);
-
-// BEGIN of copy from tclUtil.c
-// - Tcl_Interp removed
-// - changes are marked with RZ
-// #define's to adapt the code:
-#define CONST const
-#define UCHAR (unsigned char)
-#define TCL_ERROR 1
-#define TCL_OK 0
-#define ckalloc malloc
-#define ckfree free
-#define TclCopyAndCollapse(size,src,dest) memcpy(dest,src,size); *(dest+size)=0
-int TclFindElement(
- CONST char *list, /* Points to the first byte of a string
- * containing a Tcl list with zero or more
- * elements (possibly in braces). */
- int listLength, /* Number of bytes in the list's string. */
- CONST char **elementPtr, /* Where to put address of first significant
- * character in first element of list. */
- CONST char **nextPtr, /* Fill in with location of character just
- * after all white space following end of
- * argument (next arg or end of list). */
- int *sizePtr, /* If non-zero, fill in with size of
- * element. */
- int *bracePtr) /* If non-zero, fill in with non-zero/zero to
- * indicate that arg was/wasn't in braces. */
-{
- CONST char *p = list;
- CONST char *elemStart; /* Points to first byte of first element. */
- CONST char *limit; /* Points just after list's last byte. */
- int openBraces = 0; /* Brace nesting level during parse. */
- int inQuotes = 0;
- int size = 0; /* lint. */
- //RZ int numChars;
-
- /*
- * Skim off leading white space and check for an opening brace or quote.
- * We treat embedded NULLs in the list as bytes belonging to a list
- * element.
- */
-
- limit = (list + listLength);
- while ((p < limit) && (isspace(UCHAR(*p))))
- { /* INTL: ISO space. */
- p++;
- }
- if (p == limit)
- { /* no element found */
- elemStart = limit;
- goto done;
- }
-
- if (*p == '{')
- {
- openBraces = 1;
- p++;
- }
- else if (*p == '"')
- {
- inQuotes = 1;
- p++;
- }
- elemStart = p;
- if (bracePtr != 0)
- {
- *bracePtr = openBraces;
- }
-
- /*
- * Find element's end (a space, close brace, or the end of the string).
- */
-
- while (p < limit)
- {
- switch (*p)
- {
- /*
- * Open brace: don't treat specially unless the element is in
- * braces. In this case, keep a nesting count.
- */
-
- case '{':
- if (openBraces != 0)
- {
- openBraces++;
- }
- break;
-
- /*
- * Close brace: if element is in braces, keep nesting count and
- * quit when the last close brace is seen.
- */
-
- case '}':
- if (openBraces > 1)
- {
- openBraces--;
- }
- else if (openBraces == 1)
- {
- size = (p - elemStart);
- p++;
- if ((p >= limit) || isspace(UCHAR(*p)))
- { /* INTL: ISO space. */
- goto done;
- }
-
- /*
- * Garbage after the closing brace; return an error.
- */
-
- return TCL_ERROR;
- }
- break;
-
- /*
- * Backslash: skip over everything up to the end of the backslash
- * sequence.
- */
-
- case '\\':
- //RZ Tcl_UtfBackslash(p, &numChars, NULL);
- //RZ p += (numChars - 1);
- p++; //RZ
- break;
-
- /*
- * Space: ignore if element is in braces or quotes; otherwise
- * terminate element.
- */
-
- case ' ':
- case '\f':
- case '\n':
- case '\r':
- case '\t':
- case '\v':
- if ((openBraces == 0) && !inQuotes)
- {
- size = (p - elemStart);
- goto done;
- }
- break;
-
- /*
- * Double-quote: if element is in quotes then terminate it.
- */
-
- case '"':
- if (inQuotes)
- {
- size = (p - elemStart);
- p++;
- if ((p >= limit) || isspace(UCHAR(*p)))
- { /* INTL: ISO space */
- goto done;
- }
-
- /*
- * Garbage after the closing quote; return an error.
- */
- return TCL_ERROR;
- }
- break;
- }
- p++;
- }
-
- /*
- * End of list: terminate element.
- */
-
- if (p == limit)
- {
- if (openBraces != 0)
- {
- return TCL_ERROR;
- }
- else if (inQuotes)
- {
- return TCL_ERROR;
- }
- size = (p - elemStart);
- }
-
-done:
- while ((p < limit) && (isspace(UCHAR(*p))))
- { /* INTL: ISO space. */
- p++;
- }
- *elementPtr = elemStart;
- *nextPtr = p;
- if (sizePtr != 0)
- {
- *sizePtr = size;
- }
- return TCL_OK;
-}
-
-int Tcl_SplitList(
- CONST char *list, /* Pointer to string with list structure. */
- int *argcPtr, /* Pointer to location to fill in with the
- * number of elements in the list. */
- CONST char ***argvPtr) /* Pointer to place to store pointer to array
- * of pointers to list elements. */
-{
- CONST char **argv, *l, *element;
- char *p;
- int length, size, i, result, elSize, brace;
-
- /*
- * Figure out how much space to allocate. There must be enough space for
- * both the array of pointers and also for a copy of the list. To estimate
- * the number of pointers needed, count the number of space characters in
- * the list.
- */
-
- for (size = 2, l = list; *l != 0; l++)
- {
- if (isspace(UCHAR(*l)))
- { /* INTL: ISO space. */
- size++;
-
- /*
- * Consecutive space can only count as a single list delimiter.
- */
-
- while (1)
- {
- char next = *(l + 1);
-
- if (next == '\0')
- {
- break;
- }
- ++l;
- if (isspace(UCHAR(next)))
- { /* INTL: ISO space. */
- continue;
- }
- break;
- }
- }
- }
- length = l - list;
- argv = (CONST char **) ckalloc((unsigned)
- ((size * sizeof(char *)) + length + 1));
- for (i = 0, p = ((char *) argv) + size*sizeof(char *);
- *list != 0; i++)
- {
- CONST char *prevList = list;
-
- result = TclFindElement(list, length, &element, &list,
- &elSize, &brace);
- length -= (list - prevList);
- if (result != TCL_OK)
- {
- ckfree((char *) argv);
- return result;
- }
- if (*element == 0)
- {
- break;
- }
- if (i >= size)
- {
- ckfree((char *) argv);
- return TCL_ERROR;
- }
- argv[i] = p;
- if (brace)
- {
- memcpy(p, element, (size_t) elSize);
- p += elSize;
- *p = 0;
- p++;
- }
- else
- {
- TclCopyAndCollapse(elSize, element, p);
- p += elSize+1;
- }
- }
-
- argv[i] = NULL;
- *argvPtr = argv;
- *argcPtr = i;
- return TCL_OK;
-}
-// END of tclUtil.c
-
-void tcl_split_list(QString &str, QStringList &list)
-{
- int argc;
- const char **argv;
-
- list.clear();
- if (str.left(1)=="{" && str.right(1)=="}")
- {
- str=str.mid(1,str.length()-2);
- }
- else if (str.left(1)=="\"" && str.right(1)=="\"")
- {
- str=str.mid(1,str.length()-2);
- }
- if (Tcl_SplitList(str.ascii(),&argc,&argv) != TCL_OK)
- {
- list.append(str);
- }
- else
- {
- for (int i = 0; i < argc; i++)
- {
- list.append(argv[i]);
- }
- ckfree((char *) argv);
- }
-}
-
-//! Structure containing information about current scan context.
-typedef struct
-{
- char type[2]; // type of scan context: "\"" "{" "[" "?" " "
- int line0; // start line of scan context
- int line1; // end line of scan context
- YY_BUFFER_STATE buffer_state; // value of scan context
- QCString ns; // current namespace
- Entry *entry_fn; // if set contains the current proc/method/constructor/destructor
- Entry *entry_cl; // if set contain the current class
- Entry *entry_scan; // current scan entry
- Protection protection; // current protections state
- QStringList after; // option/value list (options: NULL comment keyword script)
-} tcl_scan;
-
-//* Structure containing all internal global variables.
-static struct
-{
- CodeOutputInterface * code; // if set then we are codifying the file
- int code_line; // current line of code
- int code_linenumbers; // if true create line numbers in code
- const char *code_font; // used font to codify
- bool config_autobrief; // value of configuration option
- QMap<QString,QString> config_subst; // map of configuration option values
- QCString input_string; // file contents
- int input_position; // position in file
- QCString file_name; // name of used file
- ParserInterface *this_parser; // myself
- int command; // true if command was found
- int comment; // set true if comment was scaned
- int brace_level; // bookkeeping of braces
- int bracket_level; // bookkeeping of brackets
- int bracket_quote; // bookkeeping of quotes (toggles)
- char word_is; // type of current word: "\"" "{" "[" "?" " "
- int line_comment; // line number of comment
- int line_commentline; // line number of comment after command
- int line_command; // line number of command
- int line_body0; // start line of body
- int line_body1; // end line of body
- QCString string_command; // contain current command
- QCString string_commentline; // contain current comment after command
- QCString string_commentcodify; // current comment string used in codifying
- QCString string_comment; // contain current comment
- QCString string_last; // contain last read word or part of word
- QCString string; // temporary string value
- Entry* entry_main; // top level entry
- Entry* entry_file; // entry of current file
- Entry* entry_current; // currently used entry
- Entry* entry_inside; // contain entry of current scan context
- QStringList list_commandwords; // list of command words
- QList<tcl_scan> scan; // stack of scan contexts
- QAsciiDict<Entry> ns; // all read namespace entries
- QAsciiDict<Entry> cl; // all read class entries
- QAsciiDict<Entry> fn; // all read function entries
- QList<Entry> entry; // list of all created entries, will be deleted after codifying
- Protection protection; // current protections state
- MemberDef *memberdef; // contain current MemberDef when codifying
-} tcl;
-
-// scanner functions
-static int yyread(char *buf,int max_size);
-static tcl_scan *tcl_scan_start(char type, QString content, QCString ns, Entry *entry_cls, Entry *entry_fn);
-static void tcl_scan_end();
-static void tcl_comment(int what,const char *text);
-static void tcl_word(int what,const char *text);
-static void tcl_command(int what,const char *text);
-
-// helper functions
-
-//! Create new entry.
-// @return new initialised entry
-Entry* tcl_entry_new()
-{
- Entry *myEntry = new Entry;
- myEntry->section = Entry::EMPTY_SEC;
- myEntry->name = "";
-// myEntry->type = "";
- myEntry->brief = "";
-// myEntry->doc = "";
- myEntry->protection = Package;
-// myEntry->mtype = Method;
-// myEntry->virt = Normal;
-// myEntry->stat = FALSE;
- myEntry->fileName = tcl.file_name;
- myEntry->lang = SrcLangExt_Tcl;
- initGroupInfo(myEntry);
- // collect entries
- if (tcl.code==NULL)
- {
- tcl.entry.insert(0,myEntry);
- }
- return myEntry;
-}
-
-//! Set protection level.
-void tcl_protection(Entry *entry)
-{
- if (entry->protection!=Public&&entry->protection!=Protected&&entry->protection!=Private)
- {
- entry->protection = tcl.protection;
- }
- if (entry->protection!=Protected&&entry->protection!=Private)
- {
- entry->protection = Public;
- }
-}
-
-//! Check name.
-// @return 'ns' and 'name' of given current 'ns0' and 'name0'
-static void tcl_name(const QCString ns0, const QString name0, QCString &ns, QCString &name)
-{
- QCString myNm;
- int myStart;
-
- if (strncmp(name0.data(),"::",2)==0)
- {
- myNm = name0.mid(2);
- }
- else if (ns0.length() && ns0 != " ")
- {
- myNm = ns0 + "::" + name0.data();
- }
- else
- {
- myNm = name0;
- }
- myStart = myNm.findRev("::");
- if (myStart == -1)
- {
- ns = "";
- name = myNm;
- }
- else
- {
- ns = myNm.mid(0,myStart);
- name = myNm.mid(myStart+2);
- }
-}
-
-// Check and return namespace entry.
-// @return namespace entry
-Entry* tcl_entry_namespace(const QCString ns)
-{
- Entry *myEntry;
- if (ns.length())
- {
- myEntry = tcl.ns.find(ns);
- }
- else
- {
- myEntry = tcl.ns.find("::");
- }
- if (myEntry == NULL)
- {
- myEntry = tcl_entry_new();
- myEntry->section = Entry::NAMESPACE_SEC;
- myEntry->name = ns;
- tcl.entry_main->addSubEntry(myEntry);
- tcl.ns.insert(ns,myEntry);
- }
- return myEntry;
-}
-
-// Check and return class entry.
-// @return class entry
-Entry* tcl_entry_class(const QCString cl)
-{
- Entry *myEntry;
- if (!cl.length()) return(NULL);
-
- myEntry = tcl.cl.find(cl);
- if (myEntry == NULL)
- {
- myEntry = tcl_entry_new();
- myEntry->section = Entry::CLASS_SEC;
- myEntry->name = cl;
- tcl.entry_main->addSubEntry(myEntry);
- tcl.cl.insert(cl,myEntry);
- }
- return myEntry;
-}
-
-//! Check for keywords.
-// @return 1 if keyword and 0 otherwise
-static int tcl_keyword(QCString str)
-{
- static QStringList myList;
- static int myInit=1;
- if (myInit)
- {
- // tcl keywords
- myList <<"append"<<"apply"<<"array"<<"auto_execok"<<"auto_import"<<"auto_load"<<"auto_mkindex"<<"auto_qualify"<<"auto_reset";
- myList <<"binary";
- myList <<"catch"<<"cd"<<"close"<<"clock"<<"concat";
- myList <<"eof"<<"eval"<<"exec"<<"exit"<<"expr";
- myList <<"fblocked"<<"fconfigure"<<"file"<<"fileevent"<<"flush"<<"for"<<"foreach"<<"format";
- myList <<"gets"<<"global";
- myList <<"http";
- myList <<"if"<<"incr"<<"info"<<"interp";
- myList <<"join";
- myList <<"lappend"<<"lassign"<<"lindex"<<"linsert"<<"llength"<<"load"<<"lrange"<<"lrepeat"<<"lreplace"<<"lreverse"<<"lset";
- myList <<"namespace";
- myList <<"package"<<"parray"<<"pid"<<"pkg_mkIndex"<<"proc"<<"puts"<<"pwd";
- myList <<"registry"<<"rename"<<"return";
- myList <<"scan"<<"set"<<"split"<<"string"<<"switch";
- myList <<"tclLog"<<"tcl_endOfWord"<<"tcl_findLibrary"<<"tcl_startOfNextWord"<<"tcl_startOfPreviousWord"<<"tcl_wordBreakAfter"<<"tcl_wordBreakBefore"<<"tell"<<"time";
- myList <<"unknown"<<"upvar";
- myList <<"variable"<<"vwait";
-// tk keywords
- myList <<"bell"<<"bind"<<"bindtags";
- myList <<"clipboard"<<"console"<<"consoleinterp";
- myList <<"destroy";
- myList <<"event";
- myList <<"focus";
- myList <<"grid";
- myList <<"lower";
- myList <<"option";
- myList <<"pack"<<"place";
- myList <<"raise";
- myList <<"send";
- myList <<"tkerror"<<"tkwait"<<"tk_bisque"<<"tk_focusNext"<<"tk_focusPrev"<<"tk_focusFollowsMouse"<<"tk_popup"<<"tk_setPalette"<<"tk_textCut"<<"tk_TextCopy"<<"tk_textPaste"<<"chooseColor"<<"tk_chooseColor"<<"tk_chooseDirectory"<<"tk_dialog"<<"tk_getOpenFile"<<"tkDialog"<<"tk_getSaveFile"<<"tk_messageBox";
- myList <<"winfo"<<"wm";
- myList <<"button"<<"canvas"<<"checkbutton"<<"entry"<<"frame"<<"image"<<"label"<<"labelframe"<<"listbox"<<"menu"<<"menubutton"<<"message"<<"panedwindow"<<"radiobutton"<<"scale"<<"scrollbar"<<"spinbox"<<"toplevel";
- myList.sort();
- myInit=0;
- }
- str=str.stripWhiteSpace();
- if (str.left(2)=="::") {str=str.mid(2);}
- if (myList.findIndex(str) != -1) return(1);
- return 0;
-}
-
-//! End codifying with special font class.
-static void tcl_font_end()
-{
- if (tcl.code==NULL) return;
- if (tcl.code_font)
- {
- tcl.code->endFontClass();
- tcl.code_font=NULL;
- }
-}
-
-//! Codify 'str' with special font class 's'.
-static void tcl_codify(const char *s,char *str)
-{
- if (tcl.code==NULL||str==NULL) return;
- if (s && strcmp(s,"NULL")!=0)
- {
- tcl_font_end();
- tcl.code->startFontClass(s);
- tcl.code_font=s;
- }
- char *p=str,*sp=p;
- char c;
- bool done=FALSE;
- while (!done)
- {
- sp=p;
- while ((c=*p++) && c!='\n') {}
- if (c=='\n')
- {
- tcl.code_line++;
- *(p-1)='\0';
- tcl.code->codify(sp);
- //tcl_font_end();
- tcl.code->endCodeLine();
- if (tcl.code_linenumbers)
- {
- if (tcl.code_font!=NULL)
- {
- tcl.code->endFontClass();
- tcl.code->writeLineNumber(0,0,0,tcl.code_line);
- tcl.code->startFontClass(tcl.code_font);
- }
- else
- {
- tcl.code->writeLineNumber(0,0,0,tcl.code_line);
- }
- }
- }
- else
- {
- tcl.code->codify(sp);
- done=TRUE;
- }
- }
- tcl_font_end();
-}
-
-#if 0
-//! Codify 'str' with special font class 's'.
-static void tcl_codify(const char *s,const char *str)
-{
- if (tcl.code==NULL) return;
- char *tmp= (char *) malloc(strlen(str)+1);
- strcpy(tmp, str);
- tcl_codify(s,tmp);
- free(tmp);
-}
-#endif
-
-//! Codify 'str' with special font class 's'.
-static void tcl_codify(const char *s,QString str)
-{
- if (tcl.code==NULL) return;
- char *tmp= (char *) malloc(str.length()+1);
- strcpy(tmp, str.data());
- tcl_codify(s,tmp);
- free(tmp);
-}
-
-//! Codify 'str' with special font class 's'.
-static void tcl_codify(const char *s,QCString str)
-{
- if (tcl.code==NULL) return;
- char *tmp= (char *) malloc(str.length()+1);
- strcpy(tmp, str);
- tcl_codify(s,tmp);
- free(tmp);
-}
-
-//-----------------------------------------------------------------------------
-#undef YY_INPUT
-#define YY_INPUT(buf,result,max_size) result=yyread(buf,max_size);
-//-----------------------------------------------------------------------------
-%}
-ws ([ \t]|\\\n)
-
-%option yylineno
-%option noyywrap
-%option stack
-
-%x ERROR
-%x TOP
-%x COMMAND
-%x WORD
-%x COMMENT
-%x COMMENT_NL
-%x COMMENT_CODE
-%x COMMENT_VERB
-%x COMMENTLINE
-%x COMMENTLINE_NL
-%%
-<ERROR>. {
-D
- yyterminate();
-}
-<<EOF>> {
-D
- if (tcl.scan.count()<1)
- {// error
-D
- tcl_err("Tcl parser stack empty! Parser error in file '%s'.\n",tcl.file_name.data());
- yyterminate();
- }
- else if (tcl.scan.count()==1)
- {// exit, check on input?
-D
- yyterminate();
- }
- else
- {// continue
-D
- tcl_command(-1,"");
- tcl_scan_end();
- }
-}
-<TOP>"#" {
-D
- yyless(0);
- tcl.line_comment=yylineno;
- tcl_comment(0,"");
-}
-<TOP>({ws}|[\;\n])+ {
-D
- tcl_codify(NULL,yytext);
-}
-<TOP>. {
-D
- yyless(0);
- tcl.line_command=yylineno;
- tcl_command(0,"");
-}
-
-<COMMENT>[ \t]* {
-D
- tcl_codify("comment",yytext);
-}
-<COMMENT>"###".*\n {
-D
- tcl_codify("comment",yytext);
- tcl_comment(2,yytext+1);
-}
-<COMMENT>"##".*\\\n {
-D
- tcl_codify("comment",yytext);
- QCString t=yytext;
- t = t.mid(2,t.length()-3);
- t.append("\n");
- tcl_comment(1,t.data());
- yy_push_state(COMMENT_NL);
-}
-<COMMENT>"##".*\n {
-D
- tcl_codify("comment",yytext);
- tcl_comment(1,yytext+2);
-}
-<COMMENT>"#"[@\\]"code"\n[ \t]*[^#] {
-D
- QCString t=yytext;
- tcl_codify("comment",t.left(7));
- tcl_comment(2,"\n@code\n");
- yyless(7);
- yy_push_state(COMMENT_CODE);
-}
-<COMMENT>"#"[@\\]"verbatim"\n[ \t]*[^#] {
-D
- QCString t=yytext;
- tcl_codify("comment",t.left(11));
- tcl_comment(2,"\n@verbatim\n");
- yyless(11);
- yy_push_state(COMMENT_VERB);
-}
-<COMMENT>"#".*\\\n {
-D
- tcl_codify("comment",yytext);
- QCString t=yytext;
- t = t.mid(1,t.length()-3);
- t.append("\n");
- tcl_comment(2,t.data());
- yy_push_state(COMMENT_NL);
-}
-<COMMENT>"#".*\n {
-D
- tcl_codify("comment",yytext);
- tcl_comment(2,yytext+1);
-}
-<COMMENT>"#".*\x1A {
-D
- QCString t=yytext;
- t = t.mid(0,t.length()-1);
- tcl_codify("comment",t.data());
- t = t.mid(1,t.length());
- tcl_comment(-2,t.data());
- unput(0x1A);
-}
-<COMMENT>\x1A {
-D
- tcl_comment(-2,"");
- unput(0x1A);
-}
-<COMMENT>.|\n {
-D
- tcl_comment(-2,yytext);
- yyless(0);
-}
-
-<COMMENT_CODE>"#"[@\\]"endcode"\n {
-D
- QCString t=yytext;
- t = t.left(t.length()-10);
- tcl_comment(2,t.data());
- tcl_comment(2,"\n@endcode\n");
- yy_pop_state();
- yyless(0);
-}
-<COMMENT_CODE>.*\n {
-D
- yymore();
-}
-<COMMENT_CODE>.*\x1A {
-D
- yy_pop_state();
- yyless(0);
-}
-
-<COMMENT_VERB>"#"[@\\]"endverbatim"\n {
-D
- QCString t=yytext;
- t = t.left(t.length()-14);
- tcl_comment(2,t.data());
- tcl_comment(2,"\n@endverbatim\n");
- yy_pop_state();
- yyless(0);
-}
-<COMMENT_VERB>.*\n {
-D
- yymore();
-}
-<COMMENT_VERB>.*\x1A {
-D
- yy_pop_state();
- yyless(0);
-}
-
-<COMMENT_NL>.*\\\n {
-D
- tcl_codify("comment",yytext);
- tcl_comment(2,yytext);
-}
-<COMMENT_NL>.*\n {
-D
- tcl_codify("comment",yytext);
- tcl_comment(2,yytext);
- yy_pop_state();
-}
-<COMMENT_NL>.*\x1A {
-D
- yy_pop_state();
- yyless(0);
-}
-
-<COMMENTLINE>.*\x1A {
-D
- yy_pop_state();
- yyless(0);
-}
-<COMMENTLINE>[ \t]* {
-D
- tcl.string_commentcodify += yytext;
-}
-<COMMENTLINE>"#<".*\\\n {
-D
- tcl.string_commentcodify += yytext;
- QCString t=yytext;
- t = t.mid(2,t.length()-4);
- t.append("\n");
- tcl.string_commentline += t;
- yy_push_state(COMMENTLINE_NL);
-}
-<COMMENTLINE>"#<".*\n {
-D
- tcl.string_commentcodify += yytext;
- tcl.string_commentline += (yytext+2);
-}
-<COMMENTLINE>.|\n {
-D
- yy_pop_state();
- if (tcl.string_commentline.length())
- {
- tcl.entry_current->brief = tcl.string_commentline;
- tcl.entry_current->briefLine = tcl.line_commentline;
- tcl.entry_current->briefFile = tcl.file_name;
- }
- yyless(0);
- tcl_command(-1,tcl.string_commentcodify.data());
- tcl.string_commentline="";
- tcl.string_commentcodify="";
-}
-
-<COMMENTLINE_NL>.*\\\n {
-D
- tcl.string_commentcodify += yytext;
- QCString t=yytext;
- t = t.left(t.length()-3);
- t.append("\n");
- tcl.string_commentline += t;
-}
-<COMMENTLINE_NL>.*\n {
-D
- tcl.string_commentcodify += yytext;
- tcl.string_commentline += yytext;
- yy_pop_state();
-}
-<COMMENTLINE_NL>.*\x1A {
-D
- QCString t=yytext;
- t = t.left(t.length()-1);
- tcl.string_commentcodify += t;
- tcl.string_commentline += t;
- yy_pop_state();
- unput(0x1A);
-}
-
-<COMMAND>{ws}*[\;]{ws}*"#<" {
-D
- tcl.string_commentcodify = yytext;
- tcl.string_commentcodify = tcl.string_commentcodify.left(tcl.string_commentcodify.length()-2);
- tcl.string_commentline = "";
- tcl.line_commentline = yylineno;
- tcl.line_body1=yylineno;
- unput('<');
- unput('#');
- yy_push_state(COMMENTLINE);
-}
-<COMMAND>{ws}*\x1A {
-D
- tcl.string_commentcodify = "";
- tcl.string_commentline = "";
- tcl.line_body1=yylineno;
- tcl_command(-1,"");
-}
-<COMMAND>{ws}*; {
-D
- tcl.string_commentcodify = "";
- tcl.string_commentline = "";
- tcl.line_body1=yylineno;
- tcl_command(-1,yytext);
-}
-<COMMAND>{ws}*\n {
-D
- tcl.string_commentcodify = "";
- tcl.string_commentline = "";
- tcl.line_body1=yylineno-1;
- tcl_command(-1,yytext);
-}
-<COMMAND>{ws}+ {
-D
- tcl_command(1,yytext);
-}
-<COMMAND>"{*}". {
-D
- tcl.word_is = ' ';
- tcl.string_last = "{*}";
- tcl_word(0,&yytext[3]);
-}
-<COMMAND>"\\"[\{\}\[\]\;\" \t] {
-D
- tcl.word_is=' ';
- tcl.string_last = "";
- tcl_word(0,yytext);
-}
-<COMMAND>. {
-D
- tcl.word_is=' ';
- if (yytext[0]=='{'||yytext[0]=='['||yytext[0]=='"') tcl.word_is = yytext[0];
- tcl.string_last = "";
- tcl_word(0,yytext);
-}
-
-<WORD>"\\\\" |
-<WORD>"\\"[\{\}\[\]\;\" \t] {
- tcl_word(1,yytext);
-}
-<WORD>"\\\n" {
- tcl_word(2,yytext);
-}
-<WORD>"{" {
- tcl_word(3,yytext);
-}
-<WORD>"}" {
- tcl_word(4,yytext);
-}
-<WORD>"[" {
- tcl_word(5,yytext);
-}
-<WORD>"]" {
- tcl_word(6,yytext);
-}
-<WORD>"\"" {
- tcl_word(7,yytext);
-}
-<WORD>" " {
- tcl_word(8,yytext);
-}
-<WORD>"\t" {
- tcl_word(9,yytext);
-}
-<WORD>";" {
- tcl_word(10,yytext);
-}
-<WORD>"\n" {
- tcl_word(11,yytext);
-}
-<WORD>\x1A {
- tcl_word(12,yytext);
-}
-<WORD>. {
- tcl_word(1,yytext);
-}
-%%
-
-//! Start new scan context for given 'content'.
-// @return created new scan context.
-static tcl_scan *tcl_scan_start(char type, QString content, QCString ns, Entry *entry_cl, Entry *entry_fn)
-{
- tcl_scan *myScan=tcl.scan.at(0);
- QCString myName;
-tcl_inf("line=%d type=%d '%s'\n",tcl.line_body0,type,content.ascii());
-
- myScan->line1=yylineno;
- yy_push_state(TOP);
-
- myScan=new tcl_scan;
- myScan->type[0] =' ';
- myScan->type[1] = '\0';
- switch (type) {
- case '"':
- case '{':
- case '[':
- myScan->type[0] = type;
- break;
- case '?':
- if (content[0]=='"'&&content[content.length()-1]=='"') myScan->type[0]='"';
- if (content[0]=='{'&&content[content.length()-1]=='}') myScan->type[0]='{';
- if (content[0]=='['&&content[content.length()-1]==']') myScan->type[0]='[';
- }
- if (myScan->type[0]!=' ')
- {
- tcl_codify(NULL,&myScan->type[0]);
- content = content.mid(1,content.length()-2);
- }
- content += (char)0x1A;// for detection end of scan context
- myScan->ns = ns;
- myScan->entry_cl = entry_cl;
- myScan->entry_fn = entry_fn;
- myScan->entry_scan = tcl.entry_current;
- myScan->buffer_state=yy_scan_string(content.ascii());
- myScan->line0=tcl.line_body0;
- myScan->line1=tcl.line_body1;
- myScan->after.clear();
- yylineno=myScan->line0;
- myScan->protection = tcl.protection;
-
- tcl.entry_inside = myScan->entry_scan;
- tcl.entry_current = tcl_entry_new();
- tcl.scan.insert(0,myScan);
- yy_switch_to_buffer(myScan->buffer_state);
- return (myScan);
-}
-
-//! Close current scan context.
-static void tcl_scan_end()
-{
- tcl_scan *myScan=tcl.scan.at(0);
- tcl_scan *myScan1=tcl.scan.at(1);
-tcl_inf("line=%d\n",myScan->line1);
-
- if (myScan->type[0]=='{') myScan->type[0]='}';
- if (myScan->type[0]=='[') myScan->type[0]=']';
- if (myScan->type[0]!=' ') tcl_codify(NULL,&myScan->type[0]);
- int myStart=-1;
- for (unsigned int i=0;i<myScan->after.count();i=i+2)
- {
- if (myScan->after[i]=="script") {
- myStart=i;
- break;
- }
- tcl_codify(myScan->after[i],myScan->after[i+1]);
- }
- yy_delete_buffer(myScan->buffer_state);
- yy_pop_state();
- tcl.entry_inside = myScan1->entry_scan;
- yy_switch_to_buffer(myScan1->buffer_state);
- yylineno=myScan1->line1;
- tcl.protection = myScan1->protection;
- if (myStart>=0)
- {
- myScan1 = tcl_scan_start('?', myScan->after[myStart+1], myScan->ns, myScan->entry_cl, myScan->entry_fn);
- for (unsigned int i=myStart+2;i<myScan->after.count();i++)
- {
- myScan1->after.append(myScan->after[i]);
- }
- tcl.scan.remove(1);
- }
- else
- {
- tcl.scan.removeFirst();
- }
-}
-
-//! Handling of word parsing.
-static void tcl_word(int what,const char *text)
-{
- static char myList[1024]="";// nesting level list
- static int myLevel=0;// number of current nesting level
- static int myWhite=0;// set true when next char should be whitespace
- static char myWord;// internal state
-
- switch (what)
- {
- case 0:// start
- yy_push_state(WORD);
- switch (text[0])
- {
- case '{':
- case '[':
- case '"': myWord = text[0]; break;
- default: myWord = '.';
- }
- myList[0]=myWord;
- myLevel=1;
- myWhite=0;
- break;
- case 1:// all other chars
- if (myWhite)
- {// {x}y "x"y
- tcl_err("expected word separator: %s\n",text);
- return;
- }
- if (myLevel==0)
- {
- myWord='.';
- myList[0]=myWord;
- myLevel=1;
- }
- break;
- case 2:// \\\n
- if (myLevel==0)
- {
- myWord=' ';
- yy_pop_state();
- yyless(0);
-tcl_inf("(\\\n) ?%s?\n",tcl.string_last.data());
- return;
- }
- switch (myList[myLevel-1])
- {
- case '{':
- case '[':
- case '"':
- break;
- case '.':
- if (myLevel==1)
- {
- myWord=' ';
- yy_pop_state();
- yyless(0);
-tcl_inf("(\\\n) ?%s?\n",tcl.string_last.data());
- return;
- }
- break;
- }
- myWhite=0;
- break;
- case 3:// {
- if (myWhite)
- {// {x}{ "x"{
- tcl_err("expected word separator: %s\n",text);
- return;
- }
- switch (myList[myLevel-1])
- {
- case '{':
- case '[':
- myList[myLevel++]='{';
- break;
- case '"':
- case '.':
- break;
- }
- myWhite=0;
- break;
- case 4:// }
- if (myWhite)
- {// {x}{ "x"{
- tcl_err("expected word separator: %s\n",text);
- return;
- }
- switch (myList[myLevel-1])
- {
- case '{':// {{x}}
- myLevel--;
- if (myLevel==0 && tcl.code==NULL)
- {
- myWhite=1;
- }
- break;
- case '[':
- case '"':
- case '.':
- break;
- }
- break;
- case 5:// [
- if (myWhite)
- {// {x}[
- tcl_err("expected word separator: %s\n",text);
- return;
- }
- switch (myList[myLevel-1])
- {
- case '{':
- break;
- case '[':
- case '"':
- case '.':
- myList[myLevel++]='[';
- break;
- }
- myWhite=0;
- break;
- case 6:// ]
- if (myWhite)
- {// {x}]
- tcl_err("expected word separator: %s\n",text);
- return;
- }
- switch (myList[myLevel-1])
- {
- case '{':
- break;
- case '[':
- myLevel--;
- break;
- case '"':
- case '.':
- break;
- }
- myWhite=0;
- break;
- case 7:// "
- if (myWhite)
- {// {x}"
- tcl_err("expected word separator: %s\n",text);
- return;
- }
- switch (myList[myLevel-1])
- {
- case '{':
- break;
- case '[':
- myList[myLevel++]='"';
- break;
- case '"':
- myLevel--;
- case '.':
- break;
- }
- break;
- case 8:// ' '
- case 9:// \t
- case 10:// ;
- case 11:// \n
- if (myLevel==0)
- {
- myWord=' ';
- yy_pop_state();
- yyless(0);
-tcl_inf("(%d) ?%s?\n",what,tcl.string_last.data());
- return;
- }
- switch (myList[myLevel-1])
- {
- case '{':
- case '[':
- case '"':
- break;
- case '.':
- if (myLevel==1)
- {
- myWord=' ';
- yy_pop_state();
- yyless(0);
-tcl_inf("(.%d) ?%s?\n",what,tcl.string_last.data());
- return;
- }
- else
- {
- myLevel--;
- }
- break;
- }
- myWhite=0;
- break;
- case 12:// \x1A
- if (myLevel==0)
- {
- myWord=' ';
- yy_pop_state();
- yyless(0);
-tcl_inf("(%d) ?%s?\n",what,tcl.string_last.data());
- return;
- }
- if (myLevel!=1 || myList[0] != '.')
- {
- tcl_war("level=%d expected=%c\n",myLevel,myList[myLevel-1]);
- }
- myWord=' ';
- yy_pop_state();
- yyless(0);
-tcl_inf("(.%d) ?%s?\n",what,tcl.string_last.data());
- return;
- myWhite=0;
- break;
- default:
- tcl_err("wrong state: %d\n",what);
- return;
- }
- tcl.string_last += text;
-}
-
-//! Handling of comment parsing.
-static void tcl_comment(int what,const char *text)
-{
- if (what==0)
- { // begin of comment
- if (tcl.comment)
- {
- tcl_err("comment in comment\n");
- return;
- }
- yy_push_state(COMMENT);
-tcl_inf("<- %s\n",text);
- tcl.string_comment="";
- tcl.comment=0;
- }
- else if (what==1)
- { // start new comment
- if (tcl.comment)
- {
- tcl_comment(99,""); // inbody
- }
- tcl.string_comment=text;
- tcl.comment=1;
- }
- else if (what==2)
- { // add to comment
- if (tcl.comment)
- {
- tcl.string_comment+=text;
- }
- }
- else if (what==-1 || what == -2)
- { // end of comment without/with command
- if (tcl.comment)
- {
- tcl.string_last=tcl.string_comment;
- tcl_comment(100+what,"");
- }
- else
- {
- tcl.string_last = "";
-tcl_inf("-> %s\n",(const char *)tcl.string_comment);
- }
- yy_pop_state();
- tcl.string_comment="";
- tcl.comment=0;
- }
- else if (what==98 || what==99)
- { // 98=new 99=inbody
- if (tcl.this_parser && tcl.string_comment.length())
- {
-tcl_inf("-> %s\n",(const char *)tcl.string_comment);
- int myPos=0;
- bool myNew=0;
- int myLine=tcl.line_comment;
- BufStr myI(1024);
- BufStr myO(1024);
- Protection myProt=tcl.protection;
-
- // resolve ALIASES
- myI.addArray("/*!",3);
- myI.addArray(tcl.string_comment.data(),tcl.string_comment.length());
- myI.addArray("*/",2);
- convertCppComments(&myI,&myO,tcl.file_name);
- myO.dropFromStart(3);
- myO.shrink(myO.curPos()-2);
- myO.addChar('\0');
- QCString myDoc = myO.data();
- if (what==99)
- { // inbody comment file or namespace or class or proc/method
- int myPos0;
- int myLine0;
- Entry myEntry0; // used to test parsing
- Entry *myEntry;
-
- Entry *myEntry1=NULL;
- if (tcl.scan.at(0)->entry_fn)
- {
- myEntry1=tcl.scan.at(0)->entry_fn;
- }
- else if (tcl.scan.at(0)->entry_cl)
- {
- myEntry1=tcl.scan.at(0)->entry_cl;
- }
-
- myPos0=myPos;
- myLine0=myLine;
- while (parseCommentBlock(tcl.this_parser, &myEntry0, myDoc, tcl.file_name,
- myLine, FALSE, tcl.config_autobrief, FALSE, myProt, myPos, myNew))
- {
- if (myNew)
- { // we need a new entry in this case
- myNew=0;
- myEntry = tcl_entry_new();
- parseCommentBlock(tcl.this_parser, myEntry, myDoc, tcl.file_name,
- myLine0, FALSE, tcl.config_autobrief, FALSE, myProt, myPos0, myNew);
- tcl.entry_inside->addSubEntry(myEntry);
- }
- else
- { // we can add to current entry in this case
- if (myEntry1==NULL)
- {
- myEntry1=tcl_entry_namespace(tcl.scan.at(0)->ns);
- }
- parseCommentBlock(tcl.this_parser, myEntry1, myDoc, tcl.file_name,
- myLine0, FALSE, tcl.config_autobrief, FALSE, myProt, myPos0, myNew);
- }
- myPos0=myPos;
- myLine0=myLine;
- }
- if (myNew)
- { // we need a new entry
- myNew=0;
- myEntry = tcl_entry_new();
- parseCommentBlock(tcl.this_parser, myEntry, myDoc, tcl.file_name,
- myLine0, FALSE, tcl.config_autobrief, FALSE, myProt, myPos0, myNew);
- tcl.entry_inside->addSubEntry(myEntry);
- }
- else
- { // we can add to current entry
- if (myEntry1==NULL)
- {
- myEntry1=tcl_entry_namespace(tcl.scan.at(0)->ns);
- }
- parseCommentBlock(tcl.this_parser, myEntry1, myDoc, tcl.file_name,
- myLine0, FALSE, tcl.config_autobrief, FALSE, myProt, myPos0, myNew);
- }
- }
- else
- { // new entry
- tcl.entry_current = tcl_entry_new();
- while (parseCommentBlock(tcl.this_parser, tcl.entry_current, myDoc,
- tcl.file_name, myLine, FALSE, tcl.config_autobrief, FALSE,
- myProt, myPos, myNew))
- {
- if (myNew)
- {
- tcl.entry_inside->addSubEntry(tcl.entry_current);
- tcl.entry_current = tcl_entry_new();
- }
- else
- {
- tcl.entry_current->section = tcl.entry_inside->section;
- tcl.entry_current->name = tcl.entry_inside->name;
- }
- }
- if (myNew)
- {
- tcl.entry_inside->addSubEntry(tcl.entry_current);
- tcl.entry_current = tcl_entry_new();
- }
- else
- {
- tcl.entry_current->section = tcl.entry_inside->section;
- tcl.entry_current->name = tcl.entry_inside->name;
- }
- }
- if (tcl.protection != myProt)
- {
- tcl.scan.at(0)->protection = tcl.protection = myProt;
- }
- }
- }
- else
- {
- tcl_err("what %d\n",what);
- return;
- }
-}
-
-//! Parse given \c arglist .
-static void tcl_command_ARGLIST(QString &arglist)
-{
-D
- Argument *myArg;
- QStringList myArgs;
- QString myArglist="";
-
- if (tcl.entry_current->argList==NULL)
- {
- tcl.entry_current->argList=new ArgumentList;
- }
- tcl_split_list(arglist,myArgs);
- for (uint i=0;i<myArgs.count();i++)
- {
- QStringList myArgs1;
- myArg=new Argument;
-
- tcl_split_list(*myArgs.at(i),myArgs1);
- if (myArgs1.count()==2)
- {
- myArg->name= *myArgs1.at(0);
- myArg->defval= *myArgs1.at(1);
- if (myArg->defval.isEmpty())
- {
- myArg->defval = " ";
- }
- myArglist = myArglist + "?" + myArg->name.data() + "? ";
- }
- else
- {
- myArg->name= *myArgs.at(i);
- myArglist = myArglist + myArg->name.data() + " ";
- }
- tcl.entry_current->argList->append(myArg);
- }
- arglist = myArglist;
- tcl.entry_current->args = arglist;
-}
-
-//! Create link.
-static void tcl_codify_link(QCString name)
-{
- if (tcl.code == NULL || name.isEmpty()) return;
- static int init=0;
- static QAsciiDict<MemberDef> fn;
- if (init==0)
- {
- init=1;
- MemberNameSDict::Iterator mni(*Doxygen::memberNameSDict);
- MemberNameSDict::Iterator fni(*Doxygen::functionNameSDict);
- MemberName *mn=0;
- MemberDef *md;
- for (mni.toFirst();(mn=mni.current());++mni)
- {
- MemberNameIterator mi(*mn);
- for (mi.toFirst();(md=mi.current());++mi)
- {
- fn.insert(md->qualifiedName(),md);
- }
- }
- for (fni.toFirst();(mn=fni.current());++fni)
- {
- MemberNameIterator fi(*mn);
- for (fi.toFirst();(md=fi.current());++fi)
- {
- fn.insert(md->qualifiedName(),md);
- }
- }
- }
- MemberDef *myDef;
- QCString myName=name;
- if (name.mid(0,2)=="::") // fully qualified global command
- {
- myName = myName.mid(2);
- myDef = fn.find(myName);
- }
- else // not qualified name
- {
- QCString myName1=myName;
- myDef = NULL;
- myName1 = tcl.scan.at(0)->ns;
- if (myName1 == " " || myName1 == "")
- {
- myName1 = myName;
- }
- else
- {
- myName1 = myName1 + "::" + myName;
- }
- myDef = fn.find(myName1); // search namespace command
- if (myDef == NULL)
- {
- myDef = fn.find(myName); // search global command
- }
- }
- if (myDef != NULL) // documented command
- {
- tcl.code->writeCodeLink(myDef->getReference().data(),
- myDef->getOutputFileBase().data(),
- myDef->anchor().data(),
- name,
- myDef->qualifiedName().data());
- if (tcl.memberdef)
- {
- myDef->addSourceReferencedBy(tcl.memberdef);
- tcl.memberdef->addSourceReferences(myDef);
- }
- }
- else if (tcl_keyword(myName)) // check keyword
- {
- tcl_codify("keyword",name);
- }
- else
- {
- tcl_codify(NULL,name); // something else
- }
-
-}
-
-//! Handle internal tcl commands.
-// "if expr1 ?then? body1 elseif expr2 ?then? body2 elseif ... ?else? ?bodyN?"
-static void tcl_command_IF(QStringList type)
-{
-D
- tcl_codify("keyword",*tcl.list_commandwords.at(0));
- tcl_codify(NULL,*tcl.list_commandwords.at(1));
- tcl_scan *myScan=tcl.scan.at(0);
- myScan = tcl_scan_start('?',*tcl.list_commandwords.at(2),
- myScan->ns,myScan->entry_cl,myScan->entry_fn);
- for (unsigned int i = 3;i<tcl.list_commandwords.count();i++)
- {
- myScan->after << type[i] << tcl.list_commandwords[i];
- }
-}
-//! Handle internal tcl commands.
-// "for start test next body"
-static void tcl_command_FOR()
-{
-D
- tcl_codify("keyword",*tcl.list_commandwords.at(0));
- tcl_codify(NULL,*tcl.list_commandwords.at(1));
- tcl_scan *myScan=tcl.scan.at(0);
- myScan = tcl_scan_start('?',*tcl.list_commandwords.at(2),
- myScan->ns,myScan->entry_cl,myScan->entry_fn);
- myScan->after << "NULL" << tcl.list_commandwords[3];
- myScan->after << "script" << tcl.list_commandwords[4];
- myScan->after << "NULL" << tcl.list_commandwords[5];
- myScan->after << "script" << tcl.list_commandwords[6];
- myScan->after << "NULL" << tcl.list_commandwords[7];
- myScan->after << "script" << tcl.list_commandwords[8];
-}
-
-///! Handle internal tcl commands.
-// "foreach varname list body" and
-// "foreach varlist1 list1 ?varlist2 list2 ...? body"
-static void tcl_command_FOREACH()
-{
-D
- unsigned int i;
- tcl_codify("keyword",*tcl.list_commandwords.at(0));
- for (i = 1;i<tcl.list_commandwords.count()-1;i++)
- {
- tcl_codify(NULL,*tcl.list_commandwords.at(i));
- }
- tcl_scan *myScan=tcl.scan.at(0);
- myScan = tcl_scan_start('?',*tcl.list_commandwords.at(tcl.list_commandwords.count()-1),
- myScan->ns,myScan->entry_cl,myScan->entry_fn);
-}
-
-///! Handle internal tcl commands.
-// "while test body"
-static void tcl_command_WHILE()
-{
-D
- tcl_codify("keyword",*tcl.list_commandwords.at(0));
- tcl_codify(NULL,*tcl.list_commandwords.at(1));
- tcl_scan *myScan=tcl.scan.at(0);
- myScan = tcl_scan_start('?',*tcl.list_commandwords.at(2),
- myScan->ns,myScan->entry_cl,myScan->entry_fn);
- myScan->after << "NULL" << tcl.list_commandwords[3];
- myScan->after << "script" << tcl.list_commandwords[4];
-}
-
-//! Handle all other commands.
-// Create links of first command word or first command word inside [].
-static void tcl_command_OTHER()
-{
- if (tcl.code == NULL) return;
-D
- QCString myName;
- for (unsigned int i=0; i< tcl.list_commandwords.count(); i++)
- {
- myName = *tcl.list_commandwords.at(i);
- if (i==0)
- {
- tcl_codify_link(myName);
- }
- else if (i%2 != 0)
- {
- tcl_codify(NULL,myName);
- }
- else
- {
- QCString myStr="";
- int myCmd=0;
- unsigned int i;
- for (i=0;i<myName.length();i++)
- {
- QChar c = myName[i];
- if (myCmd)
- {
- if (c==' '||c=='\t'||c=='\n'||c==']')
- {//end of command
- tcl_codify_link(myStr);
- myStr="";
- myCmd=0;
- }
- myStr+=c;
- }
- else
- {
- myStr+=c;
- if (c=='[')
- {//start of command
- for (;i<myName.length();i++)
- {
- c = myName[i+1];
- if (c!=' ' && c!='\t' && c!='\n') break;
- myStr+=c;
- }
- tcl_codify(NULL,myStr);
- myStr="";
- myCmd=1;
- }
- }
- }
- tcl_codify(NULL,myStr);
- }
- }
-}
-
-//! Handle \c proc statements.
-static void tcl_command_PROC()
-{
-D
- QCString myNs, myName;
- Entry *myEntryNs, *myEntry;
- tcl_scan *myScan = tcl.scan.at(0);
-
- tcl_codify("keyword",*tcl.list_commandwords.at(0));
- tcl_codify(NULL,*tcl.list_commandwords.at(1));
- tcl_codify(NULL,*tcl.list_commandwords.at(2));
- tcl_codify(NULL,*tcl.list_commandwords.at(3));
- tcl_codify(NULL,*tcl.list_commandwords.at(4));
- tcl_codify(NULL,*tcl.list_commandwords.at(5));
- tcl_name(myScan->ns,*tcl.list_commandwords.at(2),myNs,myName);
- if (myNs.length())
- {
- myEntryNs = tcl_entry_namespace(myNs);
- }
- else
- {
- myEntryNs = tcl_entry_namespace(myScan->ns);
- }
- //why not needed here? tcl.fn.remove(myName);
- tcl.entry_current->section = Entry::FUNCTION_SEC;
- tcl.entry_current->mtype = Method;
- tcl.entry_current->name = myName;
- tcl.entry_current->startLine = tcl.line_command;
- tcl.entry_current->bodyLine = tcl.line_body0;
- tcl.entry_current->endBodyLine = tcl.line_body1;
- tcl_protection(tcl.entry_current);
- tcl_command_ARGLIST(*tcl.list_commandwords.at(4));
- myEntryNs->addSubEntry(tcl.entry_current);
- myEntry = tcl.entry_current;
- tcl.fn.insert(myName,myEntry);
- myScan = tcl_scan_start(tcl.word_is,*tcl.list_commandwords.at(6),
- myEntryNs->name,NULL,myEntry);
-}
-
-//! Handle \c itcl::body statements and \c oo::define method and method inside \c itcl::class statements.
-static void tcl_command_METHOD()
-{
-D
- QCString myNs, myName;
- Entry *myEntryCl, *myEntry;
- tcl_scan *myScan = tcl.scan.at(0);
-
- tcl_codify("keyword",*tcl.list_commandwords.at(0));
- tcl_codify(NULL,*tcl.list_commandwords.at(1));
- tcl_codify(NULL,*tcl.list_commandwords.at(2));
- tcl_codify(NULL,*tcl.list_commandwords.at(3));
- tcl_codify(NULL,*tcl.list_commandwords.at(4));
- tcl_codify(NULL,*tcl.list_commandwords.at(5));
- tcl_name(myScan->ns,*tcl.list_commandwords.at(2),myNs,myName);
- if (myNs.length())
- {
- myEntryCl = tcl_entry_class(myNs);
- }
- else
- {
- myNs = myScan->ns;
- myEntryCl = myScan->entry_cl;
- }
- // needed in case of more then one definition p.e. itcl::method and itcl::body
- // see also bug #
- tcl.fn.remove(myName);
- tcl.entry_current->section = Entry::FUNCTION_SEC;
- tcl.entry_current->mtype = Method;
- tcl.entry_current->name = myName;
- tcl.entry_current->startLine = tcl.line_command;
- tcl.entry_current->bodyLine = tcl.line_body0;
- tcl.entry_current->endBodyLine = tcl.line_body1;
- tcl_protection(tcl.entry_current);
- tcl_command_ARGLIST(*tcl.list_commandwords.at(4));
- myEntryCl->addSubEntry(tcl.entry_current);
- tcl.fn.insert(myName,tcl.entry_current);
- myEntry = tcl.entry_current;
- myScan = tcl_scan_start(tcl.word_is,*tcl.list_commandwords.at(6),
- myNs, myEntryCl, myEntry);
-}
-
-//! Handle \c constructor statements inside class definitions.
-static void tcl_command_CONSTRUCTOR()
-{
-D
- QCString myNs, myName;
- Entry *myEntryCl, *myEntry;
- tcl_scan *myScan = tcl.scan.at(0);
-
- tcl_codify("keyword",*tcl.list_commandwords.at(0));
- tcl_codify(NULL,*tcl.list_commandwords.at(1));
- tcl_codify(NULL,*tcl.list_commandwords.at(2));
- tcl_codify(NULL,*tcl.list_commandwords.at(3));
- tcl_name(myScan->ns,*tcl.list_commandwords.at(0),myNs,myName);
- if (myNs.length())
- {
- myEntryCl = tcl_entry_class(myNs);
- }
- else
- {
- myNs = myScan->ns;
- myEntryCl = myScan->entry_cl;
- }
- tcl.entry_current->section = Entry::FUNCTION_SEC;
- tcl.entry_current->mtype = Method;
- tcl.entry_current->name = myName;
- tcl.entry_current->startLine = tcl.line_command;
- tcl.entry_current->bodyLine = tcl.line_body0;
- tcl.entry_current->endBodyLine = tcl.line_body1;
- tcl_protection(tcl.entry_current);
- tcl_command_ARGLIST(*tcl.list_commandwords.at(2));
- myEntryCl->addSubEntry(tcl.entry_current);
- myEntry = tcl.entry_current;
- tcl.fn.insert(myName,myEntry);
- myScan = tcl_scan_start(tcl.word_is,*tcl.list_commandwords.at(4),
- myNs, myEntryCl, myEntry);
-}
-
-//! Handle \c destructor statements inside class definitions.
-static void tcl_command_DESTRUCTOR()
-{
-D
- QCString myNs, myName;
- Entry *myEntryCl, *myEntry;
- tcl_scan *myScan = tcl.scan.at(0);
-
- tcl_codify("keyword",*tcl.list_commandwords.at(0));
- tcl_codify(NULL,*tcl.list_commandwords.at(1));
- tcl_name(myScan->ns,*tcl.list_commandwords.at(0),myNs,myName);
- if (myNs.length())
- {
- myEntryCl = tcl_entry_class(myNs);
- }
- else
- {
- myNs = myScan->ns;
- myEntryCl = myScan->entry_cl;
- }
- tcl.entry_current->section = Entry::FUNCTION_SEC;
- tcl.entry_current->mtype = Method;
- tcl.entry_current->name = myName;
- tcl.entry_current->startLine = tcl.line_command;
- tcl.entry_current->bodyLine = tcl.line_body0;
- tcl.entry_current->endBodyLine = tcl.line_body1;
- tcl_protection(tcl.entry_current);
- myEntryCl->addSubEntry(tcl.entry_current);
- myEntry = tcl.entry_current;
- tcl.fn.insert(myName,myEntry);
- myScan = tcl_scan_start(tcl.word_is,*tcl.list_commandwords.at(2),
- myNs, myEntryCl, myEntry);
-}
-
-//! Handle \c namespace statements.
-static void tcl_command_NAMESPACE()
-{
-D
- QCString myNs, myName, myStr;
- Entry *myEntryNs=NULL;
- tcl_scan *myScan = tcl.scan.at(0);
-
- tcl_codify("keyword",*tcl.list_commandwords.at(0));
- tcl_codify(NULL,*tcl.list_commandwords.at(1));
- tcl_codify("keyword",*tcl.list_commandwords.at(2));
- tcl_codify(NULL,*tcl.list_commandwords.at(3));
- tcl_codify(NULL,*tcl.list_commandwords.at(4));
- tcl_codify(NULL,*tcl.list_commandwords.at(5));
- tcl_name(myScan->ns,*tcl.list_commandwords.at(4),myNs,myName);
- if (myNs.length())
- {
- myName = myNs+"::"+myName;
- }
- tcl.entry_current->section = Entry::NAMESPACE_SEC;
- tcl.entry_current->name = myName;
- tcl.entry_current->startLine = tcl.line_command;
- tcl.entry_current->bodyLine = tcl.line_body0;
- tcl.entry_current->endBodyLine = tcl.line_body1;
- tcl.entry_main->addSubEntry(tcl.entry_current);
- tcl.ns.insert(myName,tcl.entry_current);
- myEntryNs = tcl.entry_current;
- myStr = *tcl.list_commandwords.at(6);
- if (tcl.list_commandwords.count() > 7)
- {
- for (uint i=7;i<tcl.list_commandwords.count();i++)
- {
- myStr.append(*tcl.list_commandwords.at(i));
- }
- tcl.word_is=' ';
- }
- myScan = tcl_scan_start(tcl.word_is,myStr, myName, NULL, NULL);
-}
-
-//! Handle \c itcl::class statements.
-static void tcl_command_ITCL_CLASS()
-{
-D
- QCString myNs, myName, myStr;
- Entry *myEntryCl;
- tcl_scan *myScan = tcl.scan.at(0);
-
- tcl_codify("keyword",*tcl.list_commandwords.at(0));
- tcl_codify(NULL,*tcl.list_commandwords.at(1));
- tcl_codify("NULL",*tcl.list_commandwords.at(2));
- tcl_codify("NULL",*tcl.list_commandwords.at(3));
- tcl_name(myScan->ns,*tcl.list_commandwords.at(2),myNs,myName);
- if (myNs.length())
- {
- myName = myNs+"::"+myName;
- }
- tcl.entry_current->section = Entry::CLASS_SEC;
- tcl.entry_current->name = myName;
- tcl.entry_current->startLine = tcl.line_command;
- tcl.entry_current->bodyLine = tcl.line_body0;
- tcl.entry_current->endBodyLine = tcl.line_body1;
- tcl.entry_main->addSubEntry(tcl.entry_current);
- tcl.cl.insert(myName,tcl.entry_current);
- myEntryCl = tcl.entry_current;
- myScan = tcl_scan_start(tcl.word_is,*tcl.list_commandwords.at(4),
- myName, myEntryCl, NULL);
-}
-
-//! Handle \c oo::class statements.
-static void tcl_command_OO_CLASS()
-{
-D
- QCString myNs, myName, myStr;
- Entry *myEntryNs, *myEntryCl;
- tcl_scan *myScan = tcl.scan.at(0);
-
- tcl_codify("keyword",*tcl.list_commandwords.at(0));
- tcl_codify(NULL,*tcl.list_commandwords.at(1));
- tcl_codify("NULL",*tcl.list_commandwords.at(2));
- tcl_codify("NULL",*tcl.list_commandwords.at(3));
- tcl_codify("NULL",*tcl.list_commandwords.at(4));
- tcl_codify("NULL",*tcl.list_commandwords.at(5));
- tcl_name(myScan->ns,*tcl.list_commandwords.at(4),myNs,myName);
- if (myNs.length())
- {
- myName = myNs+"::"+myName;
- }
- tcl.entry_current->section = Entry::CLASS_SEC;
- tcl.entry_current->name = myName;
- tcl.entry_current->startLine = tcl.line_command;
- tcl.entry_current->bodyLine = tcl.line_body0;
- tcl.entry_current->endBodyLine = tcl.line_body1;
- tcl.entry_main->addSubEntry(tcl.entry_current);
- myEntryNs = tcl_entry_namespace(myName);
- tcl.cl.insert(myName,tcl.entry_current);
- myEntryCl = tcl.entry_current;
- myScan = tcl_scan_start(tcl.word_is,*tcl.list_commandwords.at(6),
- myName, myEntryCl, NULL);
-}
-
-//! Handle \c oo::define statements.
-static void tcl_command_OO_DEFINE()
-{
-D
- QCString myNs, myName, myStr;
- Entry *myEntryCl;
- tcl_scan *myScan = tcl.scan.at(0);
-
- tcl_codify("keyword",*tcl.list_commandwords.at(0));
- tcl_codify(NULL,*tcl.list_commandwords.at(1));
- tcl_codify("NULL",*tcl.list_commandwords.at(2));
- tcl_codify("NULL",*tcl.list_commandwords.at(3));
- tcl_name(myScan->ns,*tcl.list_commandwords.at(2),myNs,myName);
- if (myNs.length())
- {
- myName = myNs+"::"+myName;
- }
- myEntryCl = tcl_entry_class(myName);
- myStr = *tcl.list_commandwords.at(4);
- if (tcl.list_commandwords.count() > 5)
- {
- for (uint i=5;i<tcl.list_commandwords.count();i++)
- {
- myStr.append(*tcl.list_commandwords.at(i));
- }
- tcl.word_is=' ';
- }
- myScan = tcl_scan_start(tcl.word_is,myStr,myName,myEntryCl,NULL);
-}
-
-//! Handle \c variable statements.
-static void tcl_command_VARIABLE(int inclass)
-{
-D
- QCString myNs, myName;
- Entry *myEntry;
- tcl_scan *myScan = tcl.scan.at(0);
-
- tcl_codify("keyword",*tcl.list_commandwords.at(0));
- for (unsigned int i=1; i< tcl.list_commandwords.count(); i++)
- {
- tcl_codify(NULL,*tcl.list_commandwords.at(i));
- }
- tcl_name(myScan->ns,*tcl.list_commandwords.at(2),myNs,myName);
- if (myNs.length())
- {// qualified variables go into namespace
- myEntry = tcl_entry_namespace(myNs);
- tcl.entry_current->stat = true;
- }
- else
- {
- if (inclass)
- {
- myEntry = myScan->entry_cl;
- tcl.entry_current->stat = false;
- }
- else
- {
- myEntry = tcl_entry_namespace(myScan->ns);
- tcl.entry_current->stat = true;
- }
- }
- tcl.entry_current->section = Entry::VARIABLE_SEC;
- tcl.entry_current->name = myName;
- tcl.entry_current->startLine = tcl.line_command;
- tcl.entry_current->bodyLine = tcl.line_body0;
- tcl.entry_current->endBodyLine = tcl.line_body1;
- tcl_protection(tcl.entry_current);
- myEntry->addSubEntry(tcl.entry_current);
- tcl.entry_current = tcl_entry_new();
-}
-
-//! Handling of command parsing.
-static void tcl_command(int what,const char *text)
-{
- int myLine=0;
- if (what==0)
- {
- tcl.scan.at(0)->line1=yylineno;// current line in scan context
- tcl.line_body0=yylineno;// start line of command
-tcl_inf("<- %s\n",text);
- yy_push_state(COMMAND);
- tcl.list_commandwords.clear();
- tcl.string_command="";
- tcl.string_last="";
- tcl.command=1;
- return;
- }
- if (what==1)
- {
- if (tcl.string_last.length())
- {
- tcl.list_commandwords.append(tcl.string_last);
- tcl.string_last="";
- }
- if (text)
- {
- tcl.list_commandwords.append(text);
- }
- return;
- }
- if (what!=-1)
- {// should not happen
- tcl_err("what %d\n",what);
- return;
- }
- QCString myText = text;
-tcl_inf("->\n");
- if (tcl.command==0)
- {
- return;//TODO check on inside comment
- }
- if (tcl.string_last != "")
- {// get last word
- tcl.list_commandwords.append(tcl.string_last);
- tcl.string_last="";
- }
- yy_pop_state();
-
- // check command
- QString myStr = *tcl.list_commandwords.at(0);
- int myLevel = 0;
- Protection myProt = tcl.protection;
-
- if (tcl.list_commandwords.count() < 3)
- {
- tcl_command_OTHER();
- goto command_text;
- }
- // remove leading "::" and apply TCL_SUBST
- if (myStr.left(2)=="::") myStr = myStr.mid(2);
- if (tcl.config_subst.contains(myStr))
- {
- myStr=tcl.config_subst[myStr];
- }
- if (strcmp("private",myStr)==0)
- {
- tcl.protection = Private;
- myLevel = 1;
- }
- else if (strcmp("protected",myStr)==0)
- {
- tcl.protection = Protected;
- myLevel = 1;
- }
- else if (strcmp("public",myStr)==0)
- {
- tcl.protection = Public;
- myLevel = 1;
- }
- if (myLevel)
- {
- tcl_codify("keyword",*tcl.list_commandwords.at(0));
- tcl_codify(NULL,*tcl.list_commandwords.at(1));
- tcl.list_commandwords.remove(tcl.list_commandwords.at(1));
- tcl.list_commandwords.remove(tcl.list_commandwords.at(0));
- if (tcl.list_commandwords.count()==1)
- {
- tcl_scan *myScan = tcl.scan.at(0);
- myScan = tcl_scan_start(tcl.word_is,*tcl.list_commandwords.at(0),
- myScan->ns,myScan->entry_cl,myScan->entry_fn);
- myProt = tcl.protection;
- goto command_end;
- }
- myStr = *tcl.list_commandwords.at(0);
- // remove leading "::" and apply TCL_SUBST
- if (myStr.left(2)=="::") myStr = myStr.mid(2);
- if (tcl.config_subst.contains(myStr))
- {
- myStr=tcl.config_subst[myStr];
- }
- }
- if (strcmp("proc",myStr)==0)
- {
- if (tcl.list_commandwords.count() == 5)
- {// itcl::proc
- tcl.list_commandwords.append("");
- tcl.list_commandwords.append("");
- }
- if (tcl.list_commandwords.count() != 7) {myLine=__LINE__;goto command_warn;}
- tcl_command_PROC();
- goto command_end;
- }
- if (strcmp("method",myStr)==0)
- {
- if (tcl.list_commandwords.count() == 5)
- {// itcl::method
- tcl.list_commandwords.append("");
- tcl.list_commandwords.append("");
- }
- if (tcl.list_commandwords.count() != 7) {myLine=__LINE__;goto command_warn;}
- tcl_command_METHOD();
- goto command_end;
- }
- if (strcmp("constructor",myStr)==0)
- {
- if (tcl.list_commandwords.count() != 5) {myLine=__LINE__;goto command_warn;}
- tcl_command_CONSTRUCTOR();
- goto command_end;
- }
- if (strcmp("destructor",myStr)==0)
- {
- if (tcl.list_commandwords.count() != 3) {myLine=__LINE__;goto command_warn;}
- tcl_command_DESTRUCTOR();
- goto command_end;
- }
- if (strcmp("namespace",myStr)==0)
- {
- if (strcmp("eval",*tcl.list_commandwords.at(2))==0)
- {
- if (tcl.list_commandwords.count() < 7) {myLine=__LINE__;goto command_warn;}
- tcl_command_NAMESPACE();
- goto command_end;
- }
- tcl_command_OTHER();
- goto command_text;
- }
- if (strcmp("itcl::class",myStr)==0)
- {
- if (tcl.list_commandwords.count() != 5) {myLine=__LINE__;goto command_warn;}
- tcl_command_ITCL_CLASS();
- goto command_end;
- }
- if (strcmp("itcl::body",myStr)==0)
- {
- if (tcl.list_commandwords.count() != 7) {myLine=__LINE__;goto command_warn;}
- tcl_command_METHOD();
- goto command_end;
- }
- if (strcmp("oo::class",myStr)==0)
- {
- if (strcmp("create",*tcl.list_commandwords.at(2))==0)
- {
- if (tcl.list_commandwords.count() != 7) {myLine=__LINE__;goto command_warn;}
- tcl_command_OO_CLASS();
- goto command_end;
- }
- tcl_command_OTHER();
- goto command_text;
- }
- if (strcmp("oo::define",myStr)==0)
- {
- if (tcl.list_commandwords.count() < 5) {myLine=__LINE__;goto command_warn;}
- tcl_command_OO_DEFINE();
- goto command_end;
- }
- if (strcmp("variable",myStr)==0)
- {
- if (tcl.list_commandwords.count() < 3) {myLine=__LINE__;goto command_warn;}
- if (tcl.scan.at(0)->entry_fn == NULL)
- {// only parsed outside functions
- tcl_command_VARIABLE(tcl.scan.at(0)->entry_cl!=NULL&&tcl.scan.at(0)->entry_cl->name!="");
- goto command_text;
- }
- }
- if (strcmp("common",myStr)==0)
- {
- if (tcl.list_commandwords.count() < 3) {myLine=__LINE__;goto command_warn;}
- if (tcl.scan.at(0)->entry_fn == NULL)
- {// only parsed outside functions
- tcl_command_VARIABLE(0);
- goto command_text;
- }
- }
- if (strcmp("inherit",myStr)==0 || strcmp("superclass",myStr)==0)
- {
- if (tcl.list_commandwords.count() < 3) {myLine=__LINE__;goto command_warn;}
- if (tcl.scan.at(0)->entry_cl!=NULL&&tcl.scan.at(0)->entry_cl->name!="")
- {
- for (unsigned int i = 2; i < tcl.list_commandwords.count(); i = i + 2)
- {
- tcl.scan.at(0)->entry_cl->extends->append(new BaseInfo(*tcl.list_commandwords.at(i),Public,Normal));
- }
- }
- goto command_end;
- }
- /*
- * Start of internal tcl keywords
- * Ready: if, for, foreach, while
- * TODO: switch, eval, ?
- */
- if (strcmp("for",myStr)==0)
- {
- if (tcl.list_commandwords.count() != 9) {myLine=__LINE__;goto command_warn;}
- tcl_command_FOR();
- goto command_end;
- }
- if (strcmp("foreach",myStr)==0)
- {
- if (tcl.list_commandwords.count() < 7 || tcl.list_commandwords.count()%2==0) {myLine=__LINE__;goto command_warn;}
- tcl_command_FOREACH();
- goto command_end;
- }
- /*
-if expr1 ?then? body1 elseif expr2 ?then? body2 elseif ... ?else? ?bodyN?
- */
- if (strcmp("if",myStr)==0 && tcl.list_commandwords.count() > 4)
- {
- QStringList myType;
- myType << "keyword" << "NULL" << "script" << "NULL";
- char myState='x';// last word: e'x'pr 't'hen 'b'ody 'e'lse else'i'f..
- for (unsigned int i = 4; i < tcl.list_commandwords.count(); i = i + 2)
- {
- const char *myStr=*tcl.list_commandwords.at(i);
- if (myState=='x')
- {
- if (strcmp("then",myStr)==0) {
- myState='t';
- myType << "keyword" << "NULL";
- }
- else
- {
- myState='b';
- myType << "script" << "NULL";
- }
- }
- else if (myState=='t')
- {
- myState='b';
- myType << "script" << "NULL";
- }
- else if (myState=='b')
- {
- if (strcmp("elseif",myStr)==0) {
- myState='i';
- myType << "keyword" << "NULL";
- }
- else if (strcmp("else",myStr)==0 && i==tcl.list_commandwords.count()-3)
- {
- myState = 'b';
- myType << "keyword" << "NULL" << "script";
- i = tcl.list_commandwords.count();
- }
- else if (i==tcl.list_commandwords.count()-1)
- {
- myState = 'b';
- myType << "script";
- i = tcl.list_commandwords.count();
- }
- else
- {
- myLine=__LINE__;goto command_warn;
- }
- }
- else if (myState=='i')
- {
- myState='x';
- myType << "script" << "NULL";
- }
- }
- if (myState != 'b') {myLine=__LINE__;goto command_warn;}
- tcl_command_IF(myType);
- goto command_end;
- }
- if (strcmp("while",myStr)==0)
- {
- if (tcl.list_commandwords.count() != 5) {myLine=__LINE__;goto command_warn;}
- tcl_command_WHILE();
- goto command_end;
- }
- tcl_command_OTHER();
- goto command_text;
- command_warn:// print warning message because of wrong used syntax
- tcl_war("%d count=%d: %s\n",myLine,tcl.list_commandwords.count(),tcl.list_commandwords.join(" ").ascii());
- tcl_command_OTHER();
- command_text:// print remaining text as comment
- if (!myText.isEmpty()) tcl_codify("comment",myText);
- myText = "";
- command_end:// add remaining text to current context
- if (!myText.isEmpty()) tcl.scan.at(0)->after << "comment" << myText;
- tcl.list_commandwords.clear();
- tcl.command = 0;
- tcl.protection = myProt;
-}
-
-//----------------------------------------------------------------------------
-//! Common initializations.
-static void tcl_init()
-{
- // Get values from option TCL_SUBST
- tcl.config_subst.clear();
- if (Config::instance()->get("TCL_SUBST"))
- {
- QStrList myStrList = Config_getList("TCL_SUBST");
- const char *s=myStrList.first();
- while (s)
- {
- QCString myStr=s;
- int i=myStr.find('=');
- if (i>0)
- {
- QCString myName=myStr.left(i).stripWhiteSpace();
- QCString myValue=myStr.right(myStr.length()-i-1).stripWhiteSpace();
- if (!myName.isEmpty() && !myValue.isEmpty())
-tcl_inf("TCL_SUBST: use '%s'\n",s);
- tcl.config_subst[myName] = myValue;
- }
- s = myStrList.next();
- }
- }
-
- if (tcl.input_string.at(tcl.input_string.length()-1) == '\n')
- {
- tcl.input_string[tcl.input_string.length()-1] = 0x1A;
- }
- else
- {
- tcl.input_string += 0x1A;
- }
- tcl.code = NULL;
- tcl.code_font=NULL;
- tcl.code_line=1;
- tcl.code_linenumbers=1;
- tcl.config_autobrief = Config_getBool("JAVADOC_AUTOBRIEF");
- tcl.input_position = 0;
- tcl.file_name = NULL;
- tcl.this_parser = NULL;
- tcl.command=0;
- tcl.comment=0;
- tcl.brace_level=0;
- tcl.bracket_level=0;
- tcl.bracket_quote=0;
- tcl.word_is=' ';
- tcl.string_command="";
- tcl.string_commentline="";
- tcl.string_commentcodify="";
- tcl.string_comment = "";
- tcl.string_last = "";
- tcl.entry_main = NULL;
- tcl.entry_file = NULL;
- tcl.entry_current = NULL;
- tcl.entry_inside = NULL;
- tcl.list_commandwords.clear();
- tcl.scan.clear();
- tcl.ns.clear();
- tcl.cl.clear();
- tcl.fn.clear();
- yylineno = 1;
- tcl.protection = Public;
- tcl.memberdef = NULL;
-}
-
-//! Start parsing.
-static void tcl_parse(const QCString ns, const QCString cls)
-{
- tcl_scan *myScan;
-
- tcl.entry_file = tcl_entry_new();
- tcl.entry_file->name = tcl.file_name;
- tcl.entry_file->section = Entry::SOURCE_SEC;
- tcl.entry_file->protection = Public;
- tcl.entry_main->addSubEntry(tcl.entry_file);
- Entry *myEntry=tcl_entry_new();
- myEntry->name="";
- tcl.entry_main->addSubEntry(myEntry);
- tcl.ns.insert("::",myEntry);
- tcl.entry_current = tcl_entry_new();
-
- tclscanYYrestart( tclscanYYin );
- BEGIN( TOP );
- yylineno=1;
- myScan = new tcl_scan;
- myScan->type[0]=' ';myScan->type[1]='\n';
- myScan->after.clear();
- myScan->line0=yylineno;
- myScan->line1=yylineno;
- myScan->buffer_state=YY_CURRENT_BUFFER;
- myScan->ns=ns;
- myScan->entry_cl=tcl_entry_class(cls);
- myScan->entry_fn=NULL;
- tcl.entry_inside = tcl.entry_file;
- myScan->entry_scan = tcl.entry_inside;
- tcl.scan.insert(0,myScan);
- tclscanYYlex();
- tcl.scan.clear();
- tcl.ns.clear();
- tcl.cl.clear();
- tcl.fn.clear();
- tcl.entry.clear();
-}
-
-//! Parse text file and build up entry tree.
-void TclLanguageScanner::parseInput(const char *fileName,const char *input,Entry *root)
-{
- QFile myFile;
-tcl_inf("%s\n",fileName);
- myFile.setName(fileName);
- if (!myFile.open(IO_ReadOnly)) return;
- if (strlen(input)<1) return;
-
- tcl.input_string = input;
- if (tcl.input_string.length()<1) return;
-
- msg("Parsing %s...\n",fileName);
- groupEnterFile(fileName,yylineno);
-
- tcl_init();
- tcl.code = NULL;
- tcl.file_name = fileName;
- tcl.this_parser = this;
- tcl.entry_main = root; /* toplevel entry */
- tcl_parse("","");
- groupLeaveFile(tcl.file_name,yylineno);
- root->program.resize(0);
- myFile.close();
-}
-
-//! Parse file and codify.
-void TclLanguageScanner::parseCode(CodeOutputInterface & codeOutIntf,
- const char * scopeName,
- const QCString & input,
- bool isExampleBlock,
- const char * exampleName,
- FileDef * fileDef,
- int startLine,
- int endLine,
- bool inlineFragment,
- MemberDef *memberDef,
- bool showLineNumbers
- )
-{
- (void)scopeName;
- (void)exampleName;
- (void)fileDef;
- (void)endLine;
- (void)inlineFragment;
-
- if (input.length()<1) return;
- tcl.input_string = input;
-
- QCString myNs="";
- QCString myCls="";
- if (memberDef)
- {
- if (memberDef->getClassDef())
- {
- myCls = memberDef->getClassDef()->displayName();
- myNs = myCls;
- }
- else if (memberDef->getNamespaceDef())
- {
- myNs = memberDef->getNamespaceDef()->displayName();
- }
- }
-
- QString myStr="Codifying..";
- if (scopeName)
- {
- myStr +=" scope=";
- myStr+=scopeName;
- }
- if (exampleName)
- {
- myStr+=" example=";
- myStr+=exampleName;
- }
- if (memberDef)
- {
- myStr+=" member=";
- myStr+=memberDef->memberTypeName();
- myStr+=" ";
- myStr+=memberDef->qualifiedName();
- }
- if (fileDef)
- {
- myStr+=" file=";
- myStr+=fileDef->fileName();
- }
-tcl_inf("%s (%d,%d) %d %d\n",myStr.ascii(),startLine,endLine,isExampleBlock,inlineFragment);
-//tcl_inf("%s\n"input.data());
- if (isExampleBlock)
- {
- tcl_codify(NULL,input);
- return;
- }
- tcl_init();
- tcl.memberdef = memberDef;
- tcl.code = &codeOutIntf;
- if (startLine<0)
- {
- startLine=1;
- }
- yylineno=startLine;
- tcl.code_linenumbers = showLineNumbers;
- tcl.code_line=yylineno;
- if (tcl.code_linenumbers)
- {
- tcl.code->writeLineNumber(0,0,0,tcl.code_line);
- }
- tcl.file_name = "";
- tcl.this_parser = NULL;
- tcl.entry_main = tcl_entry_new();
- tcl_parse(myNs,myCls);
- tcl.scan.clear();
- tcl.ns.clear();
- tcl.cl.clear();
- tcl.fn.clear();
- tcl.entry.clear();
-}
-
-bool TclLanguageScanner::needsPreprocessing(const QCString &extension)
-{
- (void)extension;
- return FALSE;
-}
-
-void TclLanguageScanner::resetCodeParserState()
-{
-}
-
-void TclLanguageScanner::parsePrototype(const char *text)
-{
- (void)text;
-}
-
-static int yyread(char *buf,int max_size)
-{
- int c=0;
-
- *buf = '\0';
- while ( c < max_size && tcl.input_string.at(tcl.input_position) )
- {
- *buf = tcl.input_string.at(tcl.input_position++) ;
- c++; buf++;
- }
- //printf("Read from=%d size=%d max=%d c=%d\n",tcl.input_position,strlen(&tcl.input_string[tcl.input_position]),max_size,c);
- return c;
-}
-
-//----------------------------------------------------------------------------
-
-// to avoid a warning
-void tclDummy()
-{
- yy_top_state();
-}
-
-#if !defined(YY_FLEX_SUBMINOR_VERSION)
-//----------------------------------------------------------------------------
-extern "C" { // some bogus code to keep the compiler happy
- void tclscannerYYdummy() { yy_flex_realloc(0,0); }
-}
-#endif
-
diff --git a/trunk/src/textdocvisitor.cpp b/trunk/src/textdocvisitor.cpp
deleted file mode 100644
index b0c3ec2..0000000
--- a/trunk/src/textdocvisitor.cpp
+++ /dev/null
@@ -1,88 +0,0 @@
-/******************************************************************************
- *
- *
- *
- *
- * Copyright (C) 1997-2012 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.
- *
- */
-
-#include <qdir.h>
-#include "textdocvisitor.h"
-#include "message.h"
-
-//-------------------------------------------------------------------------
-
-void TextDocVisitor::visit(DocSymbol *s)
-{
- switch(s->symbol())
- {
- case DocSymbol::BSlash: m_t << "\\"; break;
- case DocSymbol::At: m_t << "@"; break;
- case DocSymbol::Less: m_t << "&lt;"; break;
- case DocSymbol::Greater: m_t << "&gt;"; break;
- case DocSymbol::Amp: m_t << "&amp;"; break;
- case DocSymbol::Dollar: m_t << "$"; break;
- case DocSymbol::Hash: m_t << "#"; break;
- case DocSymbol::DoubleColon: m_t << "::"; break;
- case DocSymbol::Percent: m_t << "%"; break;
- case DocSymbol::Copy: m_t << "&copy;"; break;
- case DocSymbol::Tm: m_t << "&tm;"; break;
- case DocSymbol::Reg: m_t << "&reg;"; break;
- case DocSymbol::Apos: m_t << "'"; break;
- case DocSymbol::Quot: m_t << "\""; break;
- case DocSymbol::Lsquo: m_t << "&lsquo;"; break;
- case DocSymbol::Rsquo: m_t << "&rsquo;"; break;
- case DocSymbol::Ldquo: m_t << "&ldquo;"; break;
- case DocSymbol::Rdquo: m_t << "&rdquo;"; break;
- case DocSymbol::Ndash: m_t << "&ndash;"; break;
- case DocSymbol::Mdash: m_t << "&mdash;"; break;
- case DocSymbol::Uml: m_t << "&" << s->letter() << "uml;"; break;
- case DocSymbol::Acute: m_t << "&" << s->letter() << "acute;"; break;
- case DocSymbol::Grave: m_t << "&" << s->letter() << "grave;"; break;
- case DocSymbol::Circ: m_t << "&" << s->letter() << "circ;"; break;
- case DocSymbol::Slash: m_t << "&" << s->letter() << "slash;"; break;
- case DocSymbol::Tilde: m_t << "&" << s->letter() << "tilde;"; break;
- case DocSymbol::Szlig: m_t << "&szlig;"; break;
- case DocSymbol::Cedil: m_t << "&" << s->letter() << "cedil;"; break;
- case DocSymbol::Ring: m_t << "&" << s->letter() << "ring;"; break;
- case DocSymbol::Nbsp: m_t << "&nbsp;"; break;
- case DocSymbol::Aelig: m_t << "&aelig;"; break;
- case DocSymbol::AElig: m_t << "&AElig;"; break;
- default:
- err("error: unknown symbol found\n");
- }
-}
-
-
-void TextDocVisitor::filter(const char *str)
-{
- if (str==0) return;
- //printf("TextDocVisitor::filter(%s)\n",str);
- const char *p=str;
- char c;
- while (*p)
- {
- c=*p++;
- switch(c)
- {
- case '\n': m_t << " "; break;
- case '"': m_t << "&quot;"; break;
- case '\'': m_t << "&#39;"; break;
- case '<': m_t << "&lt;"; break;
- case '>': m_t << "&gt;"; break;
- case '&': m_t << "&amp;"; break;
- default: m_t << c;
- }
- }
-}
-
diff --git a/trunk/src/textdocvisitor.h b/trunk/src/textdocvisitor.h
deleted file mode 100644
index 66ace1a..0000000
--- a/trunk/src/textdocvisitor.h
+++ /dev/null
@@ -1,139 +0,0 @@
-/******************************************************************************
- *
- *
- *
- *
- * Copyright (C) 1997-2012 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.
- *
- */
-
-#ifndef _TEXTDOCVISITOR_H
-#define _TEXTDOCVISITOR_H
-
-#include "docvisitor.h"
-#include "docparser.h"
-#include <qstack.h>
-#include <qcstring.h>
-#include "ftextstream.h"
-
-
-/*! @brief Concrete visitor implementation for TEXT output. */
-class TextDocVisitor : public DocVisitor
-{
- public:
- TextDocVisitor(FTextStream &t) : DocVisitor(DocVisitor_Text), m_t(t) {}
-
- //--------------------------------------
- // visitor functions for leaf nodes
- //--------------------------------------
-
- void visit(DocWord *w) { filter(w->word()); }
- void visit(DocLinkedWord *w) { filter(w->word()); }
- void visit(DocWhiteSpace *) { m_t << " "; }
- void visit(DocSymbol *);
- void visit(DocURL *u) { filter(u->url()); }
- void visit(DocLineBreak *) { m_t << " "; }
- void visit(DocHorRuler *) {}
- void visit(DocStyleChange *) {}
- void visit(DocVerbatim *s) { filter(s->text()); }
- void visit(DocAnchor *) {}
- void visit(DocInclude *) {}
- void visit(DocIncOperator *) {}
- void visit(DocFormula *) {}
- void visit(DocIndexEntry *) {}
- void visit(DocSimpleSectSep *){}
- void visit(DocCite *) {}
-
- //--------------------------------------
- // visitor functions for compound nodes
- //--------------------------------------
-
- void visitPre(DocAutoList *) {}
- void visitPost(DocAutoList *) {}
- void visitPre(DocAutoListItem *) {}
- void visitPost(DocAutoListItem *) {}
- void visitPre(DocPara *) {}
- void visitPost(DocPara *) {}
- void visitPre(DocRoot *) {}
- void visitPost(DocRoot *) {}
- void visitPre(DocSimpleSect *) {}
- void visitPost(DocSimpleSect *) {}
- void visitPre(DocTitle *) {}
- void visitPost(DocTitle *) {}
- void visitPre(DocSimpleList *) {}
- void visitPost(DocSimpleList *) {}
- void visitPre(DocSimpleListItem *) {}
- void visitPost(DocSimpleListItem *) {}
- void visitPre(DocSection *) {}
- void visitPost(DocSection *) {}
- void visitPre(DocHtmlList *) {}
- void visitPost(DocHtmlList *) {}
- void visitPre(DocHtmlListItem *) {}
- void visitPost(DocHtmlListItem *) {}
- void visitPre(DocHtmlDescList *) {}
- void visitPost(DocHtmlDescList *) {}
- void visitPre(DocHtmlDescTitle *) {}
- void visitPost(DocHtmlDescTitle *) {}
- void visitPre(DocHtmlDescData *) {}
- void visitPost(DocHtmlDescData *) {}
- void visitPre(DocHtmlTable *) {}
- void visitPost(DocHtmlTable *) {}
- void visitPre(DocHtmlRow *) {}
- void visitPost(DocHtmlRow *) {}
- void visitPre(DocHtmlCell *) {}
- void visitPost(DocHtmlCell *) {}
- void visitPre(DocHtmlCaption *) {}
- void visitPost(DocHtmlCaption *) {}
- void visitPre(DocInternal *) {}
- void visitPost(DocInternal *) {}
- void visitPre(DocHRef *) {}
- void visitPost(DocHRef *) {}
- void visitPre(DocHtmlHeader *) {}
- void visitPost(DocHtmlHeader *) {}
- void visitPre(DocImage *) {}
- void visitPost(DocImage *) {}
- void visitPre(DocDotFile *) {}
- void visitPost(DocDotFile *) {}
-
- void visitPre(DocMscFile *) {}
- void visitPost(DocMscFile *) {}
- void visitPre(DocLink *) {}
- void visitPost(DocLink *) {}
- void visitPre(DocRef *) {}
- void visitPost(DocRef *) {}
- void visitPre(DocSecRefItem *) {}
- void visitPost(DocSecRefItem *) {}
- void visitPre(DocSecRefList *) {}
- void visitPost(DocSecRefList *) {}
- void visitPre(DocParamSect *) {}
- void visitPost(DocParamSect *) {}
- void visitPre(DocParamList *) {}
- void visitPost(DocParamList *) {}
- void visitPre(DocXRefItem *) {}
- void visitPost(DocXRefItem *) {}
- void visitPre(DocInternalRef *) {}
- void visitPost(DocInternalRef *) {}
- void visitPre(DocCopy *) {}
- void visitPost(DocCopy *) {}
- void visitPre(DocText *) {}
- void visitPost(DocText *) {}
- void visitPre(DocHtmlBlockQuote *) {}
- void visitPost(DocHtmlBlockQuote *) {}
-
- private:
-
- void filter(const char *str);
-
- FTextStream &m_t;
-};
-
-#endif
diff --git a/trunk/src/translator.cpp b/trunk/src/translator.cpp
deleted file mode 100644
index 10dfa9b..0000000
--- a/trunk/src/translator.cpp
+++ /dev/null
@@ -1,248 +0,0 @@
-/*! \file translator.cpp
- * \brief Implementation of generally used translator methods.
- *
- * This file contains implementation of the translator methods that
- * are not expected to be reimplemented by derived translator classes.
- * It also contains static data tables used by the methods.
- *
- */
-#include "translator.h"
-
-/*! The translation table used by Win1250ToISO88592() method. */
-const char Translator::Win1250ToISO88592Tab[] =
-{
- '\x80', '\x81', '\x82', '\x83', '\x84', '\x85', '\x86', '\x87',
- '\x88', '\x89', '\xA9', '\x8B', '\xA6', '\xAB', '\xAE', '\xAC',
- '\x90', '\x91', '\x92', '\x93', '\x94', '\x2E', '\x96', '\x97',
- '\x98', '\x99', '\xB9', '\x9B', '\xB6', '\xBB', '\xBE', '\xBC',
- '\xA0', '\x20', '\x20', '\xA3', '\xA4', '\xA1', '\xA6', '\xA7',
- '\x22', '\xA9', '\xAA', '\x3C', '\xAC', '\x2D', '\xAE', '\xAF',
- '\x2E', '\x2B', '\x20', '\xB3', '\x27', '\x75', '\xB6', '\xB7',
- '\x20', '\xB1', '\xBA', '\x3E', '\xA5', '\x22', '\xB5', '\xBF',
- '\xC0', '\xC1', '\xC2', '\xC3', '\xC4', '\xC5', '\xC6', '\xC7',
- '\xC8', '\xC9', '\xCA', '\xCB', '\xCC', '\xCD', '\xCE', '\xCF',
- '\xD0', '\xD1', '\xD2', '\xD3', '\xD4', '\xD5', '\xD6', '\xD7',
- '\xD8', '\xD9', '\xDA', '\xDB', '\xDC', '\xDD', '\xDE', '\xDF',
- '\xE0', '\xE1', '\xE2', '\xE3', '\xE4', '\xE5', '\xE6', '\xE7',
- '\xE8', '\xE9', '\xEA', '\xEB', '\xEC', '\xED', '\xEE', '\xEF',
- '\xF0', '\xF1', '\xF2', '\xF3', '\xF4', '\xF5', '\xF6', '\x2D',
- '\xF8', '\xF9', '\xFA', '\xFB', '\xFC', '\xFD', '\xFE', '\xFF',
- '\0'
-};
-
-
-/*! The translation table used by ISO88592ToWin1250() method. */
-const char Translator::ISO88592ToWin1250Tab[] = {
- '\x80', '\x81', '\x82', '\x83', '\x84', '\x85', '\x86', '\x87',
- '\x88', '\x89', '\x8A', '\x8B', '\x8C', '\x8D', '\x8E', '\x8F',
- '\x90', '\x91', '\x92', '\x93', '\x94', '\x95', '\x96', '\x97',
- '\x98', '\x99', '\x9A', '\x9B', '\x9C', '\x9D', '\x9E', '\x9F',
- '\xA0', '\xA5', '\xA2', '\xA3', '\xA4', '\xBC', '\x8C', '\xA7',
- '\xA8', '\x8A', '\xAA', '\x8D', '\x8F', '\xAD', '\x8E', '\xAF',
- '\xB0', '\xB9', '\xB2', '\xB3', '\xB4', '\xBE', '\x9C', '\xB7',
- '\xB8', '\x9A', '\xBA', '\x9D', '\x9F', '\xBD', '\x9E', '\xBF',
- '\xC0', '\xC1', '\xC2', '\xC3', '\xC4', '\xC5', '\xC6', '\xC7',
- '\xC8', '\xC9', '\xCA', '\xCB', '\xCC', '\xCD', '\xCE', '\xCF',
- '\xD0', '\xD1', '\xD2', '\xD3', '\xD4', '\xD5', '\xD6', '\xD7',
- '\xD8', '\xD9', '\xDA', '\xDB', '\xDC', '\xDD', '\xDE', '\xDF',
- '\xE0', '\xE1', '\xE2', '\xE3', '\xE4', '\xE5', '\xE6', '\xE7',
- '\xE8', '\xE9', '\xEA', '\xEB', '\xEC', '\xED', '\xEE', '\xEF',
- '\xF0', '\xF1', '\xF2', '\xF3', '\xF4', '\xF5', '\xF6', '\xF7',
- '\xF8', '\xF9', '\xFA', '\xFB', '\xFC', '\xFD', '\xFE', '\xFF',
- '\0'
-};
-
-
-/*! The translation table used by Koi8RToWindows1251() method. */
-const unsigned char Translator::Koi8RToWindows1251Tab[128] =
-{ 128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,
- 144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,
- 160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,
- 176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,
- 254,224,225,246,228,229,244,227,245,232,233,234,235,236,237,238,
- 239,255,240,241,242,243,230,226,252,251,231,248,253,249,247,250,
- 222,192,193,214,196,197,212,195,213,200,201,202,203,204,205,206,
- 207,223,208,209,210,211,198,194,220,219,199,216,221,217,215,218
-};
-
-
-/*! The translation table used by Windows1251ToKoi8R() method. */
-const unsigned char Translator::Windows1251ToKoi8RTab[128] =
-{ 128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,
- 144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,
- 160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,
- 176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,
- 225,226,247,231,228,229,246,250,233,234,235,236,237,238,239,240,
- 242,243,244,245,230,232,227,254,251,253,255,249,248,252,224,241,
- 193,194,215,199,196,197,214,218,201,202,203,204,205,206,207,208,
- 210,211,212,213,198,200,195,222,219,221,223,217,216,220,192,209
-};
-
-/*! Returns the string converted from windows-1250 to iso-8859-2. */
-/* The method was designed initially for translator_cz.h.
- * It is used for on-line encoding conversion related to
- * conditional compilation in Unix/MS Windows environments
- * (both use different encoding). Later, the translator_hr.h
- * (by Boris Bralo) used and improved the same style. As the
- * method with the translation table was the same, the
- * decision to move it to this base class was made. The same
- * holds for ISO88592ToWin1250() method.
- *
- * Alexandr Chelpanov used the same approach for
- * Koi8RToWindows1251() and Windows1251ToKoi8R() methods. Notice,
- * that he uses Unicode tables.
- *
- * It is recommended for possibly other similar methods in future.
- */
-QCString Translator::Win1250ToISO88592(const QCString & sInput)
-{
- // The conversion table for characters >127
- //
-
- QCString result;
- int len = sInput.length();
-
- for (int i = 0; i < len; ++i)
- {
- unsigned int c = sInput[i];
- result += (c > 127) ? Win1250ToISO88592Tab[c & 0x7F] : c;
- }
- return result;
-}
-
-
-/*! returns the string converted from iso-8859-2 to windows-1250 */
-/* See the comments of the Win1250ToISO88592() method for details. */
-QCString Translator::ISO88592ToWin1250(const QCString & sInput)
-{
- // The conversion table for characters >127
- //
- QCString result;
- int len = sInput.length();
-
- for (int i = 0; i < len; ++i)
- {
- unsigned int c = sInput[i];
- result += (c > 127) ? ISO88592ToWin1250Tab[c & 0x7F] : c;
- }
- return result;
-}
-
-
-/*! Returns the string converted from koi8-r to windows-1251. */
-/* The method was designed initially for translator_cz.h.
- It is used for on-line encoding conversion related to conditional
- compilation in Unix/MS Windows environments (both use different
- encoding). Encoding table got from QT:qtextcodec.cpp
- */
-QCString Translator::Koi8RToWindows1251( const QCString & sInput )
-{
-
- QCString result(sInput);
- int len = sInput.length();
-
- const unsigned char * c = (const unsigned char *)(const char*)sInput;
- unsigned char *dc = (unsigned char*)(const char*)result;
- for( int i=0; i<len; i++ ) {
- if ( c[i] > 127 )
- dc[i] = Koi8RToWindows1251Tab[c[i]-128];
- }
- return result;
-}
-
-
-/*! returns the string converted from Windows-1251 to koi8-r */
-/* See the comments of the Koi8RToWindows1251() method for details.
- Encoding table got from QT:qtextcodec.cpp */
-QCString Translator::Windows1251ToKoi8R( const QCString & sInput )
-{
- QCString result(sInput);
- int len = sInput.length();
-
- const unsigned char * c = (const unsigned char *)(const char*)sInput;
- unsigned char *dc = (unsigned char*)(const char*)result;
- for( int i=0; i<len; i++ ) {
- if ( c[i] > 127 )
- dc[i] = Windows1251ToKoi8RTab[c[i]-128];
- }
- return result;
-}
-
-/*! returns the caracter converted from hankaku-kana to zenkakukana.
- Thanks Yongmao Ni http://alfin.mine.utsunomiya-u.ac.jp/~niy/algo/ */
-unsigned int hankaku2zen(int hankaku)
-{
- static unsigned int z[64] = {
- 0x2121,0x2123,0x2156,0x2157,0x2122,0x2126,0x2572,0x2521,
- 0x2523,0x2525,0x2527,0x2529,0x2563,0x2565,0x2567,0x2543,
- 0x213c,0x2522,0x2524,0x2526,0x2528,0x252a,0x252b,0x252d,
- 0x252f,0x2531,0x2533,0x2535,0x2537,0x2539,0x253b,0x253d,
- 0x253f,0x2541,0x2544,0x2546,0x2548,0x254a,0x254b,0x254c,
- 0x254d,0x254e,0x254f,0x2552,0x2555,0x2558,0x255b,0x255e,
- 0x255f,0x2560,0x2561,0x2562,0x2564,0x2566,0x2568,0x2569,
- 0x256a,0x256b,0x256c,0x256d,0x256f,0x2573,0x212b,0x212c };
-
- if (hankaku < 0xa0 || hankaku > 0xdf) return 0;
- return z[hankaku - 0xa0];
-}
-
-/*! returns the character converted from japaneseEUC to SJIS
- Thanks Yongmao Ni http://alfin.mine.utsunomiya-u.ac.jp/~niy/algo/ */
-unsigned int euc2sjis(unsigned int euc)
-{
- unsigned int jis;
- unsigned int hib, lob;
-
- if ((euc & 0xff00) == 0x8e00)
- jis = hankaku2zen(euc & 0xff);
- else jis = euc & ~0x8080;
-
- hib = (jis >> 8) & 0xff;
- lob = jis & 0xff;
- lob += (hib & 1) ? 0x1f : 0x7d;
- if (lob >= 0x7f) lob++;
- hib = ((hib - 0x21) >> 1) + 0x81;
- if (hib > 0x9f) hib += 0x40;
-
- return (hib << 8) | lob;
-}
-
-
-/*! returns the string converted from Japanese-EUC to SJIS */
-
-QCString Translator::JapaneseEucToSjis( const QCString & sInput )
-{
- QString result;
- int len = sInput.length();
- int c1,c2,sj;
-
- result.setUnicode(0, len);
- QChar* uc = (QChar*)result.unicode(); // const_cast
- const unsigned char * c = (const unsigned char *)(const char*)sInput;
-
- for( int i=0; i<len;)
- {
- c1 = c[i];
-
- if( c1 == EOF ) break;
-
- /* if MSB=0 then the character is ascii */
- if(!( c1 & 0x80))
- {
- uc[i] = c[i];
- i=i+1;
- }
- else
- {
- c2 = c[i+1];
- if( c2 == EOF ) break;
- sj = euc2sjis( (c1 << 8) + c2 );
- uc[i] = sj >> 8;
- uc[i+1] = sj & 0xff;
- i+=2;
- }
- }
-
- return result.latin1();
-
-}
diff --git a/trunk/src/translator.h b/trunk/src/translator.h
deleted file mode 100644
index 47a9417..0000000
--- a/trunk/src/translator.h
+++ /dev/null
@@ -1,509 +0,0 @@
-/******************************************************************************
- *
- *
- *
- * Copyright (C) 1997-2012 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.
- *
- */
-
-#ifndef TRANSLATOR_H
-#define TRANSLATOR_H
-
-#include "qtbc.h"
-#include "classdef.h"
-#include "util.h"
-#include "config.h"
-
-class Translator
-{
- private:
- /* Tables for encoding conversions. */
- static const char Win1250ToISO88592Tab[];
- static const char ISO88592ToWin1250Tab[];
- static const unsigned char Koi8RToWindows1251Tab[128];
- static const unsigned char Windows1251ToKoi8RTab[128];
-
- protected:
- /*! Returns the string converted from windows-1250 to iso-8859-2. */
- QCString Win1250ToISO88592(const QCString & sInput);
-
- /*! Returns the string converted from iso-8859-2 to windows-1250. */
- QCString ISO88592ToWin1250(const QCString & sInput);
-
- /*! Returns the string converted from koi8-r to windows-1251. */
- QCString Koi8RToWindows1251( const QCString & sInput );
-
- /*! Returns the string converted from windows-1251 to koi8-r. */
- QCString Windows1251ToKoi8R( const QCString & sInput );
-
- /*! Returns the string converted from Japanese-EUC to SJIS. */
- QCString JapaneseEucToSjis( const QCString & sInput );
-
- public:
-
- /*! This method is used to provide warning message that is displayed
- * if the user chooses a language whose translation is not up to date.
- * It is implemented by the adapter classes.
- */
- virtual QCString updateNeededMessage() { return ""; }
- virtual ~Translator() {}
-
- // Please, have a look at comments inside the translator_en.h file
- // to learn the meaning of the following methods. The translator_en.h
- // file contains the TranslatorEnglish implementation, which is
- // always up-to-date (by definition).
-
- // --- Language control methods -------------------
-
- virtual QCString idLanguage() = 0;
- virtual QCString latexLanguageSupportCommand() = 0;
- virtual QCString idLanguageCharset() = 0;
-
- // --- Language translation methods -------------------
-
- virtual QCString trRelatedFunctions() = 0;
- virtual QCString trRelatedSubscript() = 0;
- virtual QCString trDetailedDescription() = 0;
- virtual QCString trMemberTypedefDocumentation() = 0;
- virtual QCString trMemberEnumerationDocumentation() = 0;
- virtual QCString trMemberFunctionDocumentation() = 0;
- virtual QCString trMemberDataDocumentation() = 0;
- virtual QCString trMore() = 0;
- virtual QCString trListOfAllMembers() = 0;
- virtual QCString trMemberList() = 0;
- virtual QCString trThisIsTheListOfAllMembers() = 0;
- virtual QCString trIncludingInheritedMembers() = 0;
- virtual QCString trGeneratedAutomatically(const char *s) = 0;
- virtual QCString trEnumName() = 0;
- virtual QCString trEnumValue() = 0;
- virtual QCString trDefinedIn() = 0;
-
- // quick reference sections
-
- virtual QCString trModules() = 0;
- virtual QCString trClassHierarchy() = 0;
- virtual QCString trCompoundList() = 0;
- virtual QCString trFileList() = 0;
- //virtual QCString trHeaderFiles() = 0;
- virtual QCString trCompoundMembers() = 0;
- virtual QCString trFileMembers() = 0;
- virtual QCString trRelatedPages() = 0;
- virtual QCString trExamples() = 0;
- virtual QCString trSearch() = 0;
- virtual QCString trClassHierarchyDescription() = 0;
- virtual QCString trFileListDescription(bool extractAll) = 0;
- virtual QCString trCompoundListDescription() = 0;
- virtual QCString trCompoundMembersDescription(bool extractAll) = 0;
- virtual QCString trFileMembersDescription(bool extractAll) = 0;
- //virtual QCString trHeaderFilesDescription() = 0;
- virtual QCString trExamplesDescription() = 0;
- virtual QCString trRelatedPagesDescription() = 0;
- virtual QCString trModulesDescription() = 0;
- //virtual QCString trNoDescriptionAvailable() = 0;
-
- // index titles (the project name is prepended for these)
-
- virtual QCString trDocumentation() = 0;
- virtual QCString trModuleIndex() = 0;
- virtual QCString trHierarchicalIndex() = 0;
- virtual QCString trCompoundIndex() = 0;
- virtual QCString trFileIndex() = 0;
- virtual QCString trModuleDocumentation() = 0;
- virtual QCString trClassDocumentation() = 0;
- virtual QCString trFileDocumentation() = 0;
- virtual QCString trExampleDocumentation() = 0;
- virtual QCString trPageDocumentation() = 0;
- virtual QCString trReferenceManual() = 0;
- virtual QCString trDefines() = 0;
- virtual QCString trFuncProtos() = 0;
- virtual QCString trTypedefs() = 0;
- virtual QCString trEnumerations() = 0;
- virtual QCString trFunctions() = 0;
- virtual QCString trVariables() = 0;
- virtual QCString trEnumerationValues() = 0;
- virtual QCString trDefineDocumentation() = 0;
- virtual QCString trFunctionPrototypeDocumentation() = 0;
- virtual QCString trTypedefDocumentation() = 0;
- virtual QCString trEnumerationTypeDocumentation() = 0;
- virtual QCString trFunctionDocumentation() = 0;
- virtual QCString trVariableDocumentation() = 0;
- virtual QCString trCompounds() = 0;
- virtual QCString trGeneratedAt(const char *date,const char *projName) = 0;
- virtual QCString trWrittenBy() = 0;
- virtual QCString trClassDiagram(const char *clName) = 0;
- virtual QCString trForInternalUseOnly() = 0;
- //virtual QCString trReimplementedForInternalReasons() = 0;
- virtual QCString trWarning() = 0;
- //virtual QCString trBugsAndLimitations() = 0;
- virtual QCString trVersion() = 0;
- virtual QCString trDate() = 0;
- virtual QCString trReturns() = 0;
- virtual QCString trSeeAlso() = 0;
- virtual QCString trParameters() = 0;
- virtual QCString trExceptions() = 0;
- virtual QCString trGeneratedBy() = 0;
-
-//////////////////////////////////////////////////////////////////////////
-// new since 0.49-990307
-//////////////////////////////////////////////////////////////////////////
-
- virtual QCString trNamespaceList() = 0;
- virtual QCString trNamespaceListDescription(bool extractAll) = 0;
- virtual QCString trFriends() = 0;
-
-//////////////////////////////////////////////////////////////////////////
-// new since 0.49-990405
-//////////////////////////////////////////////////////////////////////////
-
- virtual QCString trRelatedFunctionDocumentation() = 0;
-
-//////////////////////////////////////////////////////////////////////////
-// new since 0.49-990425
-//////////////////////////////////////////////////////////////////////////
-
- virtual QCString trCompoundReference(const char *clName,
- ClassDef::CompoundType compType,
- bool isTemplate) = 0;
-
- virtual QCString trFileReference(const char *fileName) = 0;
- virtual QCString trNamespaceReference(const char *namespaceName) = 0;
-
- virtual QCString trPublicMembers() = 0;
- virtual QCString trPublicSlots() = 0;
- virtual QCString trSignals() = 0;
- virtual QCString trStaticPublicMembers() = 0;
- virtual QCString trProtectedMembers() = 0;
- virtual QCString trProtectedSlots() = 0;
- virtual QCString trStaticProtectedMembers() = 0;
- virtual QCString trPrivateMembers() = 0;
- virtual QCString trPrivateSlots() = 0;
- virtual QCString trStaticPrivateMembers() = 0;
- virtual QCString trWriteList(int numEntries) = 0;
- virtual QCString trInheritsList(int numEntries) = 0;
- virtual QCString trInheritedByList(int numEntries) = 0;
- virtual QCString trReimplementedFromList(int numEntries) = 0;
- virtual QCString trReimplementedInList(int numEntries) = 0;
- virtual QCString trNamespaceMembers() = 0;
- virtual QCString trNamespaceMemberDescription(bool extractAll) = 0;
- virtual QCString trNamespaceIndex() = 0;
- virtual QCString trNamespaceDocumentation() = 0;
-
-//////////////////////////////////////////////////////////////////////////
-// new since 0.49-990522
-//////////////////////////////////////////////////////////////////////////
-
- virtual QCString trNamespaces() = 0;
-
-//////////////////////////////////////////////////////////////////////////
-// new since 0.49-990728
-//////////////////////////////////////////////////////////////////////////
-
- virtual QCString trGeneratedFromFiles(ClassDef::CompoundType compType,
- bool single) = 0;
- virtual QCString trAlphabeticalList() = 0;
-
-//////////////////////////////////////////////////////////////////////////
-// new since 0.49-990901
-//////////////////////////////////////////////////////////////////////////
-
- virtual QCString trReturnValues() = 0;
- virtual QCString trMainPage() = 0;
- virtual QCString trPageAbbreviation() = 0;
-
-//////////////////////////////////////////////////////////////////////////
-// new since 0.49-991003
-//////////////////////////////////////////////////////////////////////////
-
- //virtual QCString trSources() = 0;
- virtual QCString trDefinedAtLineInSourceFile() = 0;
- virtual QCString trDefinedInSourceFile() = 0;
-
-//////////////////////////////////////////////////////////////////////////
-// new since 0.49-991205
-//////////////////////////////////////////////////////////////////////////
-
- virtual QCString trDeprecated() = 0;
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.0.0
-//////////////////////////////////////////////////////////////////////////
-
- virtual QCString trCollaborationDiagram(const char *clName) = 0;
- virtual QCString trInclDepGraph(const char *fName) = 0;
- virtual QCString trConstructorDocumentation() = 0;
- virtual QCString trGotoSourceCode() = 0;
- virtual QCString trGotoDocumentation() = 0;
- virtual QCString trPrecondition() = 0;
- virtual QCString trPostcondition() = 0;
- virtual QCString trInvariant() = 0;
- virtual QCString trInitialValue() = 0;
- virtual QCString trCode() = 0;
-
- virtual QCString trGraphicalHierarchy() = 0;
- virtual QCString trGotoGraphicalHierarchy() = 0;
- virtual QCString trGotoTextualHierarchy() = 0;
- virtual QCString trPageIndex() = 0;
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.1.0
-//////////////////////////////////////////////////////////////////////////
-
- virtual QCString trNote() = 0;
- virtual QCString trPublicTypes() = 0;
- virtual QCString trPublicAttribs() = 0;
- virtual QCString trStaticPublicAttribs() = 0;
- virtual QCString trProtectedTypes() = 0;
- virtual QCString trProtectedAttribs() = 0;
- virtual QCString trStaticProtectedAttribs() = 0;
- virtual QCString trPrivateTypes() = 0;
- virtual QCString trPrivateAttribs() = 0;
- virtual QCString trStaticPrivateAttribs() = 0;
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.1.3
-//////////////////////////////////////////////////////////////////////////
-
- virtual QCString trTodo() = 0;
- virtual QCString trTodoList() = 0;
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.1.4
-//////////////////////////////////////////////////////////////////////////
-
- virtual QCString trReferencedBy() = 0;
- virtual QCString trRemarks() = 0;
- virtual QCString trAttention() = 0;
- virtual QCString trInclByDepGraph() = 0;
- virtual QCString trSince() = 0;
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.1.5
-//////////////////////////////////////////////////////////////////////////
-
- virtual QCString trLegendTitle() = 0;
- virtual QCString trLegendDocs() = 0;
- virtual QCString trLegend() = 0;
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.2.0
-//////////////////////////////////////////////////////////////////////////
-
- virtual QCString trTest() = 0;
- virtual QCString trTestList() = 0;
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.2.1
-//////////////////////////////////////////////////////////////////////////
-
- virtual QCString trDCOPMethods() = 0;
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.2.2
-//////////////////////////////////////////////////////////////////////////
-
- virtual QCString trProperties() = 0;
- virtual QCString trPropertyDocumentation() = 0;
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.2.4
-//////////////////////////////////////////////////////////////////////////
-
- //virtual QCString trInterfaces() = 0;
- virtual QCString trClasses() = 0;
- virtual QCString trPackage(const char *name) = 0;
- virtual QCString trPackageList() = 0;
- virtual QCString trPackageListDescription() = 0;
- virtual QCString trPackages() = 0;
- //virtual QCString trPackageDocumentation() = 0;
- virtual QCString trDefineValue() = 0;
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.2.5
-//////////////////////////////////////////////////////////////////////////
-
- virtual QCString trBug() = 0;
- virtual QCString trBugList() = 0;
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.2.6
-//////////////////////////////////////////////////////////////////////////
-
- virtual QCString trRTFansicp() = 0;
- virtual QCString trRTFCharSet() = 0;
- virtual QCString trRTFGeneralIndex() = 0;
-
- // Translation of the word
-
- virtual QCString trClass(bool first_capital, bool singular) = 0;
- virtual QCString trFile(bool first_capital, bool singular) = 0;
- virtual QCString trNamespace(bool first_capital, bool singular) = 0;
- virtual QCString trGroup(bool first_capital, bool singular) = 0;
- virtual QCString trPage(bool first_capital, bool singular) = 0;
- virtual QCString trMember(bool first_capital, bool singular) = 0;
- //virtual QCString trField(bool first_capital, bool singular) = 0;
- virtual QCString trGlobal(bool first_capital, bool singular) = 0;
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.2.7
-//////////////////////////////////////////////////////////////////////////
-
- virtual QCString trAuthor(bool first_capital, bool singular) = 0;
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.2.11
-//////////////////////////////////////////////////////////////////////////
-
- virtual QCString trReferences() = 0;
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.2.13
-//////////////////////////////////////////////////////////////////////////
-
- virtual QCString trImplementedFromList(int numEntries) = 0;
- virtual QCString trImplementedInList(int numEntries) = 0;
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.2.16
-//////////////////////////////////////////////////////////////////////////
-
- virtual QCString trRTFTableOfContents() = 0;
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.2.17
-//////////////////////////////////////////////////////////////////////////
-
- virtual QCString trDeprecatedList() = 0;
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.2.18
-//////////////////////////////////////////////////////////////////////////
-
- virtual QCString trEvents() = 0;
- virtual QCString trEventDocumentation() = 0;
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.3
-//////////////////////////////////////////////////////////////////////////
-
- virtual QCString trPackageTypes() = 0;
- virtual QCString trPackageMembers() = 0;
- virtual QCString trStaticPackageMembers() = 0;
- virtual QCString trPackageAttribs() = 0;
- virtual QCString trStaticPackageAttribs() = 0;
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.3.1
-//////////////////////////////////////////////////////////////////////////
-
- virtual QCString trAll() = 0;
- virtual QCString trCallGraph() = 0;
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.3.3
-//////////////////////////////////////////////////////////////////////////
-
- virtual QCString trSearchForIndex() = 0;
- virtual QCString trSearchResultsTitle() = 0;
- virtual QCString trSearchResults(int numDocuments) = 0;
- virtual QCString trSearchMatches() = 0;
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.3.8
-//////////////////////////////////////////////////////////////////////////
-
- virtual QCString trSourceFile(QCString& filename) = 0;
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.3.9
-//////////////////////////////////////////////////////////////////////////
-
- virtual QCString trDirIndex() = 0;
- virtual QCString trDirDocumentation() = 0;
- virtual QCString trDirectories() = 0;
- virtual QCString trDirDescription() = 0;
- virtual QCString trDirReference(const char *dirName) = 0;
- virtual QCString trDir(bool first_capital, bool singular) = 0;
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.4.1
-//////////////////////////////////////////////////////////////////////////
-
- virtual QCString trOverloadText() = 0;
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.4.6
-//////////////////////////////////////////////////////////////////////////
-
- virtual QCString trCallerGraph() = 0;
- virtual QCString trEnumerationValueDocumentation() = 0;
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.5.4
-//////////////////////////////////////////////////////////////////////////
-
- virtual QCString trMemberFunctionDocumentationFortran() = 0;
- virtual QCString trCompoundListFortran() = 0;
- virtual QCString trCompoundMembersFortran() = 0;
- virtual QCString trCompoundListDescriptionFortran() = 0;
- virtual QCString trCompoundMembersDescriptionFortran(bool extractAll) = 0;
- virtual QCString trCompoundIndexFortran() = 0;
- virtual QCString trTypeDocumentation() = 0;
- virtual QCString trSubprograms() = 0;
- virtual QCString trSubprogramDocumentation() = 0;
- virtual QCString trDataTypes() = 0;
- virtual QCString trModulesList() = 0;
- virtual QCString trModulesListDescription(bool extractAll) = 0;
- virtual QCString trCompoundReferenceFortran(const char *clName,
- ClassDef::CompoundType compType,
- bool isTemplate) = 0;
- virtual QCString trModuleReference(const char *namespaceName) = 0;
- virtual QCString trModulesMembers() = 0;
- virtual QCString trModulesMemberDescription(bool extractAll) = 0;
- virtual QCString trModulesIndex() = 0;
- virtual QCString trModule(bool first_capital, bool singular) = 0;
- virtual QCString trGeneratedFromFilesFortran(ClassDef::CompoundType compType,
- bool single) = 0;
- virtual QCString trType(bool first_capital, bool singular) = 0;
- virtual QCString trSubprogram(bool first_capital, bool singular) = 0;
- virtual QCString trTypeConstraints() = 0;
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.6.0
-//////////////////////////////////////////////////////////////////////////
-
- virtual QCString trDirRelation(const char *name) = 0;
- virtual QCString trLoading() = 0;
- virtual QCString trGlobalNamespace() = 0;
- virtual QCString trSearching() = 0;
- virtual QCString trNoMatches() = 0;
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.6.3
-//////////////////////////////////////////////////////////////////////////
-
- virtual QCString trDirDependency(const char *name) = 0;
- virtual QCString trFileIn(const char *name) = 0;
- virtual QCString trIncludesFileIn(const char *name) = 0;
- virtual QCString trDateTime(int year,int month,int day,int dayOfWeek,
- int hour,int minutes,int seconds,
- bool includeTime) = 0;
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.7.5
-//////////////////////////////////////////////////////////////////////////
-
- virtual QCString trCiteReferences() = 0;
- virtual QCString trCopyright() = 0;
- virtual QCString trDirDepGraph(const char *name) = 0;
-};
-
-#endif
diff --git a/trunk/src/translator_adapter.h b/trunk/src/translator_adapter.h
deleted file mode 100644
index 9d2b6b9..0000000
--- a/trunk/src/translator_adapter.h
+++ /dev/null
@@ -1,202 +0,0 @@
-#ifndef TRANSLATOR_ADAPTER_H
-#define TRANSLATOR_ADAPTER_H
-
-#include "version.h"
-
-/*! \brief Base of the translator adapter tree
- *
- * This abstract class provides access to the english
- * translations, to be used as a substitute for not implemented
- * local translations.
- */
-class TranslatorAdapterBase : public Translator
-{
- protected:
- virtual ~TranslatorAdapterBase() {}
- TranslatorEnglish english;
-
- /*! An auxiliary inline method used by the updateNeededMessage()
- * for building a warning message.
- */
- inline QCString createUpdateNeededMessage(const QCString & languageName,
- const QCString & versionString)
- {
- return QCString("Warning: The selected output language \"")
- + languageName
- + "\" has not been updated\nsince "
- + versionString
- + ". As a result some sentences may appear in English.\n\n";
- }
-
- public:
- /*! This method is used to generate a warning message to signal
- * the user that the translation of his/her language of choice
- * needs updating. It must be implemented by the translator
- * adapter class (pure virtual).
- *
- * \sa createUpdateNeededMessage()
- */
- virtual QCString updateNeededMessage() = 0;
-
-};
-
-class TranslatorAdapter_1_7_5 : public TranslatorAdapterBase
-{
- public:
- virtual QCString updateNeededMessage()
- { return createUpdateNeededMessage(idLanguage(),"release 1.7.5"); }
-
- virtual QCString trCiteReferences()
- { return english.trCiteReferences(); }
-
- virtual QCString trCopyright()
- { return english.trCopyright(); }
-
- virtual QCString trDirDepGraph(const char *name)
- { return english.trDirDepGraph(name); }
-};
-
-class TranslatorAdapter_1_6_3 : public TranslatorAdapter_1_7_5
-{
- public:
- virtual QCString updateNeededMessage()
- { return createUpdateNeededMessage(idLanguage(),"release 1.6.3"); }
-
- virtual QCString trDirDependency(const char *name)
- { return english.trDirDependency(name); }
- virtual QCString trFileIn(const char *name)
- { return english.trFileIn(name); }
- virtual QCString trIncludesFileIn(const char *name)
- { return english.trIncludesFileIn(name); }
- virtual QCString trDateTime(int year,int month,int day,int dayOfWeek,
- int hour,int minutes,int seconds,
- bool includeTime)
- { return english.trDateTime(year,month,day,dayOfWeek,hour,minutes,seconds,includeTime); }
-};
-
-class TranslatorAdapter_1_6_0 : public TranslatorAdapter_1_6_3
-{
- public:
- virtual QCString updateNeededMessage()
- { return createUpdateNeededMessage(idLanguage(),"release 1.6.0"); }
-
- virtual QCString trDirRelation(const char *name)
- { return english.trDirRelation(name); }
-
- virtual QCString trLoading()
- { return english.trLoading(); }
-
- virtual QCString trGlobalNamespace()
- { return english.trGlobalNamespace(); }
-
- virtual QCString trSearching()
- { return english.trSearching(); }
-
- virtual QCString trNoMatches()
- { return english.trNoMatches(); }
-};
-
-class TranslatorAdapter_1_5_4 : public TranslatorAdapter_1_6_0
-{
- public:
- virtual QCString updateNeededMessage()
- { return createUpdateNeededMessage(idLanguage(),"release 1.5.4"); }
-
- virtual QCString trMemberFunctionDocumentationFortran()
- { return english.trMemberFunctionDocumentationFortran(); }
-
- virtual QCString trCompoundListFortran()
- { return english.trCompoundListFortran(); }
-
- virtual QCString trCompoundMembersFortran()
- { return english.trCompoundMembersFortran(); }
-
- virtual QCString trCompoundListDescriptionFortran()
- { return english.trCompoundListDescriptionFortran(); }
-
- virtual QCString trCompoundMembersDescriptionFortran(bool extractAll)
- { return english.trCompoundMembersDescriptionFortran(extractAll); }
-
- virtual QCString trCompoundIndexFortran()
- { return english.trCompoundIndexFortran(); }
-
- virtual QCString trTypeDocumentation()
- { return english.trTypeDocumentation(); }
-
- virtual QCString trSubprograms()
- { return english.trSubprograms(); }
-
- virtual QCString trSubprogramDocumentation()
- { return english.trSubprogramDocumentation(); }
-
- virtual QCString trDataTypes()
- { return english.trDataTypes(); }
-
- virtual QCString trModulesList()
- { return english.trModulesList(); }
-
- virtual QCString trModulesListDescription(bool extractAll)
- { return english.trModulesListDescription(extractAll); }
-
- virtual QCString trCompoundReferenceFortran(const char *clName,
- ClassDef::CompoundType compType,
- bool isTemplate)
- { return english.trCompoundReferenceFortran(clName,compType,isTemplate); }
-
- virtual QCString trModuleReference(const char *namespaceName)
- { return english.trModuleReference(namespaceName); }
-
- virtual QCString trModulesMembers()
- { return english.trModulesMembers(); }
-
- virtual QCString trModulesMemberDescription(bool extractAll)
- { return english.trModulesMemberDescription(extractAll); }
-
- virtual QCString trModulesIndex()
- { return english.trModulesIndex(); }
-
- virtual QCString trModule(bool first_capital, bool singular)
- { return english.trModule(first_capital,singular); }
-
- virtual QCString trGeneratedFromFilesFortran(ClassDef::CompoundType compType,
- bool single)
- { return english.trGeneratedFromFilesFortran(compType,single); }
-
- virtual QCString trType(bool first_capital, bool singular)
- { return english.trType(first_capital,singular); }
-
- virtual QCString trSubprogram(bool first_capital, bool singular)
- { return english.trSubprogram(first_capital,singular); }
-
- virtual QCString trTypeConstraints()
- { return english.trTypeConstraints(); }
-};
-
-class TranslatorAdapter_1_4_6 : public TranslatorAdapter_1_5_4
-{
- public:
- virtual QCString updateNeededMessage()
- { return createUpdateNeededMessage(idLanguage(),"release 1.4.6"); }
-
- virtual QCString trCallerGraph()
- {
- return english.trCallerGraph();
- }
- virtual QCString trEnumerationValueDocumentation()
- {
- return english.trEnumerationValueDocumentation();
- }
-};
-
-class TranslatorAdapter_1_4_1 : public TranslatorAdapter_1_4_6
-{
- public:
- virtual QCString updateNeededMessage()
- { return createUpdateNeededMessage(idLanguage(),"release 1.4.1"); }
-
- virtual QCString trOverloadText()
- { return english.trOverloadText(); }
-};
-
-#endif
-
diff --git a/trunk/src/translator_am.h b/trunk/src/translator_am.h
deleted file mode 100644
index 3eac0cc..0000000
--- a/trunk/src/translator_am.h
+++ /dev/null
@@ -1,1853 +0,0 @@
-/******************************************************************************
- *
- *
- *
- * Copyright (C) 1997-2012 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.
- */
-
-/*
- * Translation by
- * Armen Tangamyan <armen.tangamyan@anu.edu.au>
- */
-
-#ifndef TRANSLATOR_AM_H
-#define TRANSLATOR_AM_H
-
-class TranslatorArmenian : public Translator
-{
- public:
- /*! Used for identification of the language. */
- virtual QCString idLanguage()
- { return "armenian"; }
-
- /* Used to get the command(s) for the language support. */
- virtual QCString latexLanguageSupportCommand()
- {
- return "<pre>\\usepackage[latin]{armtex}\n"
- "\\usepackage[armscii8]{inputenc}\n</pre>";
- }
-
- /*! return the language charset. This will be used for the HTML output */
- virtual QCString idLanguageCharset()
- {
- return "utf-8";
- }
-
- // --- Language translation methods -------------------
-
- /*! used in the compound documentation before a list of related functions. */
- virtual QCString trRelatedFunctions()
- { return "Ô´Õ¡Õ½Õ«Õ¶ Õ¾Õ¥Ö€Õ¡Õ¢Õ¥Ö€Õ¾Õ¸Õ² Ö†Õ¸Ö‚Õ¶Õ¯ÖÕ«Õ¡Õ¶Õ¥Ö€"; }
-
- /*! subscript for the related functions. */
- virtual QCString trRelatedSubscript()
- { return "(Õ€Õ¡Õ·Õ¾Õ« Õ¡Õ¼Õ¥Ö„, Õ¸Ö€ Õ½Ö€Õ¡Õ¶Ö„ Õ¡Õ¶Õ¤Õ¡Õ´ Ö†Õ¸Ö‚Õ¶Õ¯ÖÕ«Õ¡Õ¶Õ¥Ö€ Õ¹Õ¥Õ¶)"; }
-
- /*! header that is put before the detailed description of files, classes and namespaces. */
- virtual QCString trDetailedDescription()
- { return "Õ„Õ¡Õ¶Ö€Õ¡Õ´Õ¡Õ½Õ¶ Õ¶Õ¯Õ¡Ö€Õ¡Õ£Ö€Õ¸Ö‚Õ©ÕµÕ¸Ö‚Õ¶"; }
-
- /*! header that is put before the list of typedefs. */
- virtual QCString trMemberTypedefDocumentation()
- { return "Ô±Õ¶Õ¤Õ¡Õ´ Õ¿Õ«ÕºÕ« Õ½Õ¡Õ°Õ´Õ¡Õ¶Õ¸Ö‚Õ´Õ¶Õ¥Ö€ (typedef)"; }
-
- /*! header that is put before the list of enumerations. */
- virtual QCString trMemberEnumerationDocumentation()
- { return "Ô±Õ¶Õ¤Õ¡Õ´ hÕ¡Õ´Õ¡Ö€Õ¡Õ¯Õ¡Õ¬Õ¸Ö‚Õ´Õ¶Õ¥Ö€"; }
-
- /*! header that is put before the list of member functions. */
- virtual QCString trMemberFunctionDocumentation()
- { return "Ô±Õ¶Õ¤Õ¡Õ´ Ö†Õ¸Ö‚Õ¶Õ¯ÖÕ«Õ¡Õ¶Õ¥Ö€"; }
-
- /*! header that is put before the list of member attributes. */
- virtual QCString trMemberDataDocumentation()
- {
- if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
- {
- return "Ô´Õ¡Õ·Õ¿Õ¥Ö€";
- }
- else
- {
- return "Ô±Õ¶Õ¤Õ¡Õ´ Õ¿Õ¾ÕµÕ¡Õ¬Õ¶Õ¥Ö€";
- }
- }
-
- /*! this is the text of a link put after brief descriptions. */
- virtual QCString trMore()
- { return "Õ„Õ¡Õ¶Ö€Õ¡Õ´Õ¡Õ½Õ¶..."; }
-
- /*! put in the class documentation */
- /* Dosn't use when optimization for C is on. */
- virtual QCString trListOfAllMembers()
- {
- return "Ô²Õ¸Õ¬Õ¸Ö€ Õ¡Õ¶Õ¤Õ¡Õ´Õ¶Õ¥Ö€Õ« ÖÕ¸Ö‚ÖÕ¡Õ¯Õ¨";
- }
-
- /*! used as the title of the "list of all members" page of a class */
- /* Dosn't use when optimization for C is on. */
- virtual QCString trMemberList()
- {
- return "Ô±Õ¶Õ¤Õ¡Õ´Õ¶Õ¥Ö€Õ« ÖÕ¸Ö‚ÖÕ¡Õ¯";
- }
-
- /*! this is the first part of a sentence that is followed by a class name */
- /* Dosn't use when optimization for C is on. */
- virtual QCString trThisIsTheListOfAllMembers()
- { return "ÕÕ¡ Õ¤Õ¡Õ½Õ« Õ¡Õ¶Õ¤Õ¡Õ´Õ¶Õ¥Ö€Õ« Õ¡Õ´Õ¢Õ¸Õ²Õ»Õ¡Õ¯Õ¡Õ¶ ÖÕ¸Ö‚ÖÕ¡Õ¯Õ¶ Õ§ "; }
-
- /*! this is the remainder of the sentence after the class name */
- /* Dosn't use when optimization for C is on. */
- virtual QCString trIncludingInheritedMembers()
- { return ", Õ¶Õ¥Ö€Õ¡Õ¼ÕµÕ¡Õ¬ Õ¢Õ¸Õ¬Õ¸Ö€ ÕªÕ¡Õ¼Õ¡Õ¶Õ£Õ¾Õ¡Õ® Õ¡Õ¶Õ¤Õ¡Õ´Õ¶Õ¥Ö€Õ¨"; }
-
- /*! this is put at the author sections at the bottom of man pages.
- * parameter s is name of the project name.
- */
- virtual QCString trGeneratedAutomatically(const char *s)
- { QCString result="Ô±Õ¾Õ¿Õ¸Õ´Õ¡Õ¿ Õ½Õ¿Õ¥Õ²Õ®Õ¾Õ¡Õ® Õ§ Õ¥Õ¬Ö„Õ¡ÕµÕ«Õ¶ Õ¯Õ¸Õ¤Õ«Ö, Doxygen-Õ« Õ´Õ«Õ»Õ¸ÖÕ¸Õ¾, ";
- if (s) result+=s+(QCString)" Õ°Õ¡Õ´Õ¡Ö€:";
- return result;
- }
-
- /*! put after an enum name in the list of all members */
- virtual QCString trEnumName()
- { return "Õ°Õ¡Õ´Õ¡Ö€Õ¡Õ¯Õ¡Õ¬Õ´Õ¡Õ¶ Õ¡Õ¶Õ¸Ö‚Õ¶"; }
-
- /*! put after an enum value in the list of all members */
- virtual QCString trEnumValue()
- { return "Õ°Õ¡Õ´Õ¡Ö€Õ¡Õ¯Õ¡Õ¬Õ´Õ¡Õ¶ Õ¡Ö€ÕªÕ¥Ö„"; }
-
- /*! put after an undocumented member in the list of all members */
- virtual QCString trDefinedIn()
- { return "Õ½Õ¡Õ°Õ´Õ¡Õ¶Õ¾Õ¡Õ®"; }
-
- // quick reference sections
-
- /*! This is put above each page as a link to the list of all groups of
- * compounds or files (see the \\group command).
- */
- virtual QCString trModules()
- { return "Õ„Õ¸Õ¤Õ¸Ö‚Õ¬Õ¶Õ¥Ö€"; }
-
- /*! This is put above each page as a link to the class hierarchy */
- virtual QCString trClassHierarchy()
- { return "Ô´Õ¡Õ½Õ¥Ö€Õ« Õ°Õ«Õ¥Ö€Õ¡Ö€Õ­Õ¡"; }
-
- /*! This is put above each page as a link to the list of annotated classes */
- virtual QCString trCompoundList()
- {
- if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
- {
- return "ÕÕ¾ÕµÕ¡Õ¬Õ¶Õ¥Ö€Õ« Õ¯Õ¡Õ¼Õ¸Ö‚ÖÕ¾Õ¡Õ®Ö„";
- }
- else
- {
- return "Ô´Õ¡Õ½Õ¥Ö€Õ« ÖÕ¸Ö‚ÖÕ¡Õ¯";
- }
- }
-
- /*! This is put above each page as a link to the list of documented files */
- virtual QCString trFileList()
- { return "Õ–Õ¡ÕµÕ¬Õ¥Ö€Õ« ÖÕ¸Ö‚ÖÕ¡Õ¯"; }
-
- /*! This is put above each page as a link to all members of compounds. */
- virtual QCString trCompoundMembers()
- {
- if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
- {
- return "ÕÕ¾ÕµÕ¡Õ¬Õ¶Õ¥Ö€Õ« Õ¤Õ¡Õ·Õ¿Õ¥Ö€";
- }
- else
- {
- return "Ô´Õ¡Õ½Õ« Õ¡Õ¶Õ¤Õ¡Õ´Õ¶Õ¥Ö€";
- }
- }
-
- /*! This is put above each page as a link to all members of files. */
- /*??*/
- virtual QCString trFileMembers()
- {
- if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
- {
- return "Ô³Õ¬Õ¸Õ¢Õ¡Õ¬Õ¶Õ¥Ö€";
- }
- else
- {
- return "Õ–Õ¡ÕµÕ¬Õ« Õ¡Õ¶Õ¤Õ¡Õ´Õ¶Õ¥Ö€";
- }
- }
-
- /*! This is put above each page as a link to all related pages. */
- virtual QCString trRelatedPages()
- { return "Õ†Õ´Õ¡Õ¶Õ¡Õ¿Õ«Õº Õ§Õ»Õ¥Ö€"; }
-
- /*! This is put above each page as a link to all examples. */
- virtual QCString trExamples()
- { return "Õ•Ö€Õ«Õ¶Õ¡Õ¯Õ¶Õ¥Ö€"; }
-
- /*! This is put above each page as a link to the search engine. */
- virtual QCString trSearch()
- { return "ÕˆÖ€Õ¸Õ¶Õ¸Ö‚Õ´"; }
-
- /*! This is an introduction to the class hierarchy. */
- virtual QCString trClassHierarchyDescription()
- { return "Ô±ÕµÕ½ ÕªÕ¡Õ¼Õ¡Õ¶Õ£Õ´Õ¡Õ¶ ÖÕ¸Ö‚ÖÕ¡Õ¯Õ¨ Õ¯Õ¸ÕºÕ¿Õ¸Ö€Õ¥Õ¶ Õ§ Õ¿Õ¥Õ½Õ¡Õ¯Õ¡Õ¾Õ¸Ö€Õ¾Õ¡Õ®, "
- "Õ¢Õ¡ÕµÖ Õ¸Õ¹ Õ¡Õ´Õ¢Õ¸Õ²Õ»Õ¡ÕºÕ¥Õ½, Õ¡ÕµÕ¢Õ¢Õ¥Õ¶Õ¡Õ¯Õ¡Õ¶ Õ¯Õ¡Ö€Õ£Õ¸Õ¾.";
- }
-
- /*! This is an introduction to the list with all files. */
- virtual QCString trFileListDescription(bool extractAll)
- {
- QCString result="Ô²Õ¸Õ¬Õ¸Ö€ ";
- if (!extractAll) result+="ÖƒÕ¡Õ½Õ¿Õ¡Õ£Ö€Õ¾Õ¡Õ® ";
- result+="Ö†Õ¡ÕµÕ¬Õ¥Ö€Õ« Õ´Õ« ÖÕ¸Ö‚ÖÕ¡Õ¯` Õ¯Õ¡Ö€Õ³ Õ¢Õ¡ÖÕ¡Õ¿Ö€Õ¸Ö‚Õ©ÕµÕ¸Ö‚Õ¶Õ¶Õ¥Ö€Õ¸Õ¾:";
- return result;
- }
-
- /*! This is an introduction to the annotated compound list. */
- virtual QCString trCompoundListDescription()
- {
- if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
- {
- return "ÕÕ¾ÕµÕ¡Õ¬Õ¶Õ¥Ö€Õ« Õ¯Õ¡Õ¼Õ¸Ö‚ÖÕ¾Õ¡Õ®Ö„Õ¨` Õ¯Õ¡Ö€Õ³ Õ¢Õ¡ÖÕ¡Õ¿Ö€Õ¸Ö‚Õ©ÕµÕ¸Ö‚Õ¶Õ¶Õ¥Ö€Õ¸Õ¾.";
- }
- else
- {
- return "Ô´Õ¡Õ½Õ¥Ö€Õ¨, Õ¯Õ¡Õ¼Õ¸Ö‚ÖÕ¾Õ¡Õ®Ö„Õ¶Õ¥Ö€Õ¨, Õ´Õ«Õ¡Õ¾Õ¸Ö€Õ¸Ö‚Õ´Õ¶Õ¥Ö€Õ¨ "
- "Ö‡ Õ«Õ¶Õ¿Õ¥Ö€Ö†Õ¥ÕµÕ½Õ¶Õ¥Ö€Õ¨` Õ¯Õ¡Ö€Õ³ Õ¢Õ¡ÖÕ¡Õ¿Ö€Õ¸Ö‚Õ©ÕµÕ¸Ö‚Õ¶Õ¶Õ¥Ö€Õ¸Õ¾.";
- }
- }
-
- /*! This is an introduction to the page with all class members. */
- virtual QCString trCompoundMembersDescription(bool extractAll)
- {
- QCString result="Ô²Õ¸Õ¬Õ¸Ö€ ";
- if(!extractAll) result+="ÖƒÕ¡Õ½Õ¿Õ¡Õ£Ö€Õ¾Õ¡Õ® ";
- if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
- result+="Õ¯Õ¡Õ¼Õ¸Ö‚ÖÕ¾Õ¡Õ®Ö„Õ¶Õ¥Ö€Õ« Ö‡ Õ´Õ«Õ¡Õ¾Õ¸Ö€Õ¸Ö‚Õ´Õ¶Õ¥Ö€Õ« Õ¤Õ¡Õ·Õ¿Õ¥Ö€Õ« ";
- else
- result+="Õ¤Õ¡Õ½Õ« Õ¡Õ¶Õ¤Õ¡Õ´Õ¶Õ¥Ö€Õ« ";
- result+="ÖÕ¸Ö‚ÖÕ¡Õ¯Õ¨`";
- result+=" Õ°Õ²Õ¸Ö‚Õ´Õ¶Õ¥Ö€Õ¸Õ¾ Õ¤Õ¥ÕºÕ« ";
- if(!extractAll)
- {
- if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
- result+="Õ¯Õ¡Õ¼Õ¸Ö‚ÖÕ¾Õ¡Õ®Ö„/Õ´Õ«Õ¡Õ¾Õ¸Ö€Õ¸Ö‚Õ´ ÖƒÕ¡Õ½Õ¿Õ¡Õ£Ö€Õ¸Ö‚Õ©ÕµÕ¸Ö‚Õ¶Õ¶Õ¥Ö€Õ¨ Õ¢Õ¸Õ¬Õ¸Ö€ Õ¡Õ¶Õ¤Õ¡Õ´Õ¶Õ¥Ö€Õ« Õ°Õ¡Õ´Õ¡Ö€.";
- else
- result+="Õ¤Õ¡Õ½Õ« ÖƒÕ¡Õ½Õ¿Õ¡Õ£Ö€Õ¸Ö‚Õ©ÕµÕ¸Ö‚Õ¶Õ¨ Õ¢Õ¸Õ¬Õ¸Ö€ Õ¡Õ¶Õ¤Õ¡Õ´Õ¶Õ¥Ö€Õ« Õ°Õ¡Õ´Õ¡Ö€.";
- }
- else
- {
- if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
- result += "Õ¯Õ¡Õ¼Õ¸Ö‚ÖÕ¾Õ¡Õ®Ö„Õ¶Õ¥Ö€Õ¨/Õ´Õ«Õ¡Õ¾Õ¸Ö€Õ¸Ö‚Õ´Õ¶Õ¥Ö€Õ¨, Õ¸Ö€Õ¸Õ¶Ö Õ¶Ö€Õ¡Õ¶Ö„ ÕºÕ¡Õ¿Õ¯Õ¡Õ¶Õ¸Ö‚Õ´ Õ¥Õ¶.";
- else
- result += "Õ¤Õ¡Õ½Õ¥Ö€Õ¨, Õ¸Ö€Õ¸Õ¶Ö Õ¶Ö€Õ¡Õ¶Ö„ ÕºÕ¡Õ¿Õ¯Õ¡Õ¶Õ¸Ö‚Õ´ Õ¥Õ¶.";
- }
- return result;
- }
-
- /*! This is an introduction to the page with all file members. */
- virtual QCString trFileMembersDescription(bool extractAll)
- {
- QCString result="Ô²Õ¸Õ¬Õ¸Ö€ ";
- if (!extractAll) result+="ÖƒÕ¡Õ½Õ¿Õ¡Õ£Ö€Õ¾Õ¡Õ® ";
-
- if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
- {
- result+="Ö†Õ¸Ö‚Õ¶Õ¯ÖÕ«Õ¡Õ¶Õ¥Ö€Õ«, ÖƒÕ¸ÖƒÕ¸Õ­Õ¡Õ¯Õ¡Õ¶Õ¶Õ¥Ö€Õ«, Õ´Õ¡Õ¯Ö€Õ¸-Õ°Õ¡ÕµÕ¿Õ¡Ö€Õ¡Ö€Õ¸Ö‚Õ©ÕµÕ¸Ö‚Õ¶Õ¶Õ¥Ö€Õ«, "
- "Õ°Õ¡Õ´Õ¡Ö€Õ¡Õ¯Õ¡Õ¬Õ¸Ö‚Õ´Õ¶Õ¥Ö€Õ« Ö‡ Õ¿Õ«ÕºÕ« Õ½Õ¡Õ°Õ´Õ¡Õ¶Õ¸Ö‚Õ´Õ¶Õ¥Ö€Õ« (typedef)";
- }
- else
- {
- result+="Ö†Õ¡ÕµÕ¬Õ« Õ¡Õ¶Õ¤Õ¡Õ´Õ¶Õ¥Ö€Õ« ";
- }
- result+="ÖÕ¸Ö‚ÖÕ¡Õ¯Õ¨`";
- result+=" Õ°Õ²Õ¸Ö‚Õ´Õ¶Õ¥Ö€Õ¸Õ¾ Õ¤Õ¥ÕºÕ« ";
- if (extractAll)
- result+="Ö†Õ¡ÕµÕ¬Õ¥Ö€Õ¨, Õ¸Ö€Õ¸Õ¶Ö Õ¶Ö€Õ¡Õ¶Ö„ ÕºÕ¡Õ¿Õ¯Õ¡Õ¶Õ¸Ö‚Õ´ Õ¥Õ¶.";
- else
- result+="ÖƒÕ¡Õ½Õ¿Õ¡Õ£Ö€Õ¸Ö‚Õ©ÕµÕ¸Ö‚Õ¶Õ¨.";
- return result;
- }
-
- /*! This is an introduction to the page with the list of all examples */
- virtual QCString trExamplesDescription()
- { return "Ô²Õ¸Õ¬Õ¸Ö€ Ö…Ö€Õ«Õ¶Õ¡Õ¯Õ¶Õ¥Ö€Õ« ÖÕ¸Ö‚ÖÕ¡Õ¯Õ¨."; }
-
- /*! This is an introduction to the page with the list of related pages */
- virtual QCString trRelatedPagesDescription()
- { return "Ô²Õ¸Õ¬Õ¸Ö€ Õ¶Õ´Õ¡Õ¶Õ¡Õ¿Õ«Õº ÖƒÕ¡Õ½Õ¿Õ¡Õ£Ö€Õ¸Ö‚Õ©ÕµÕ¡Õ¶ Õ§Õ»Õ¥Ö€Õ« ÖÕ¸Ö‚ÖÕ¡Õ¯Õ¨."; }
-
- /*! This is an introduction to the page with the list of class/file groups */
- virtual QCString trModulesDescription()
- { return "Ô²Õ¸Õ¬Õ¸Ö€ Õ´Õ¸Õ¤Õ¸Ö‚Õ¬Õ¶Õ¥Ö€Õ« ÖÕ¸Ö‚ÖÕ¡Õ¯Õ¨."; }
-
- // index titles (the project name is prepended for these)
-
-
- /*! This is used in HTML as the title of index.html. */
- virtual QCString trDocumentation()
- { return " - Õ“Õ¡Õ½Õ¿Õ¡Õ£Ö€Õ¸Ö‚Õ©ÕµÕ¸Ö‚Õ¶"; }
-
- /*! This is used in LaTeX as the title of the chapter with the
- * index of all groups.
- */
- virtual QCString trModuleIndex()
- { return "Õ„Õ¸Õ¤Õ¸Ö‚Õ¬Õ¶Õ¥Ö€"; }
-
- /*! This is used in LaTeX as the title of the chapter with the
- * class hierarchy.
- */
- virtual QCString trHierarchicalIndex()
- { return "Ô´Õ¡Õ½Õ¡Õ¯Õ¡Ö€Õ£Õ¸Ö‚Õ´Õ¶Õ¥Ö€"; }
-
- /*! This is used in LaTeX as the title of the chapter with the
- * annotated compound index.
- */
- virtual QCString trCompoundIndex()
- {
- if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
- {
- return "ÕÕ¾ÕµÕ¡Õ¬Õ¶Õ¥Ö€Õ« Õ¯Õ¡Õ¼Õ¸Ö‚ÖÕ¾Õ¡Õ®Ö„";
- }
- else
- {
- return "Ô´Õ¡Õ½Õ¥Ö€";
- }
- }
-
- /*! This is used in LaTeX as the title of the chapter with the
- * list of all files.
- */
- virtual QCString trFileIndex()
- { return "Õ–Õ¡ÕµÕ¬Õ¥Ö€"; }
-
- /*! This is used in LaTeX as the title of the chapter containing
- * the documentation of all groups.
- */
- virtual QCString trModuleDocumentation()
- { return "Õ„Õ¸Õ¤Õ¸Ö‚Õ¬Õ¶Õ¥Ö€"; }
-
- /*! This is used in LaTeX as the title of the chapter containing
- * the documentation of all classes, structs and unions.
- */
- virtual QCString trClassDocumentation()
- {
- if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
- {
- return "ÕÕ¾ÕµÕ¡Õ¬Õ¶Õ¥Ö€Õ« Õ¯Õ¡Õ¼Õ¸Ö‚ÖÕ¾Õ¡Õ®Ö„Õ¶Õ¥Ö€";
- }
- else
- {
- return "Ô´Õ¡Õ½Õ¥Ö€";
- }
- }
-
- /*! This is used in LaTeX as the title of the chapter containing
- * the documentation of all files.
- */
- virtual QCString trFileDocumentation()
- { return "Õ–Õ¡ÕµÕ¬Õ¥Ö€"; }
-
- /*! This is used in LaTeX as the title of the chapter containing
- * the documentation of all examples.
- */
- virtual QCString trExampleDocumentation()
- { return "Õ•Ö€Õ«Õ¶Õ¡Õ¯Õ¶Õ¥Ö€"; }
-
- /*! This is used in LaTeX as the title of the chapter containing
- * the documentation of all related pages.
- */
- virtual QCString trPageDocumentation()
- { return "Ô·Õ»Õ¥Ö€"; }
-
- /*! This is used in LaTeX as the title of the document */
- virtual QCString trReferenceManual()
- { return "Õ€Õ²Õ¸Ö‚Õ´Õ¶Õ¥Ö€Õ« Õ±Õ¥Õ¼Õ¶Õ¡Ö€Õ¯"; }
-
- /*! This is used in the documentation of a file as a header before the
- * list of defines
- */
- virtual QCString trDefines()
- { return "Õ„Õ¡Õ¯Ö€Õ¸Õ½Õ¶Õ¥Ö€"; }
-
- /*! This is used in the documentation of a file as a header before the
- * list of function prototypes
- */
- virtual QCString trFuncProtos()
- { return "Õ–Õ¸Ö‚Õ¶Õ¯ÖÕ«Õ¡Õ¶Õ¥Ö€Õ« Õ¶Õ¡Õ­Õ¡Õ¿Õ«ÕºÕ¥Ö€"; }
-
- /*! This is used in the documentation of a file as a header before the
- * list of typedefs
- */
- virtual QCString trTypedefs()
- { return "ÕÕ«ÕºÕ« Õ½Õ¡Õ°Õ´Õ¡Õ¶Õ¸Ö‚Õ´Õ¶Õ¥Ö€ (typedef)"; }
-
- /*! This is used in the documentation of a file as a header before the
- * list of enumerations
- */
- virtual QCString trEnumerations()
- { return "Õ€Õ¡Õ´Õ¡Ö€Õ¡Õ¯Õ¡Õ¬Õ¸Ö‚Õ´Õ¶Õ¥Ö€"; }
-
- /*! This is used in the documentation of a file as a header before the
- * list of (global) functions
- */
- virtual QCString trFunctions()
- { return "Õ–Õ¸Ö‚Õ¶Õ¯ÖÕ«Õ¡Õ¶Õ¥Ö€"; }
-
- /*! This is used in the documentation of a file as a header before the
- * list of (global) variables
- */
- virtual QCString trVariables()
- { return "Õ“Õ¸ÖƒÕ¸Õ­Õ¡Õ¯Õ¡Õ¶Õ¶Õ¥Ö€"; }
-
- /*! This is used in the documentation of a file as a header before the
- * list of (global) variables
- */
- virtual QCString trEnumerationValues()
- { return "Õ€Õ¡Õ·Õ¾Õ«Õ¹"; }
-
- /*! This is used in the documentation of a file before the list of
- * documentation blocks for defines
- */
- virtual QCString trDefineDocumentation()
- { return "Õ„Õ¡Õ¯Ö€Õ¸Õ½Õ¶Õ¥Ö€"; }
-
- /*! This is used in the documentation of a file/namespace before the list
- * of documentation blocks for function prototypes
- */
- virtual QCString trFunctionPrototypeDocumentation()
- { return "Õ–Õ¸Ö‚Õ¶Õ¯ÖÕ«Õ¡Õ¶Õ¥Ö€Õ« Õ¶Õ¡Õ­Õ¡Õ¿Õ«ÕºÕ¥Ö€"; }
-
- /*! This is used in the documentation of a file/namespace before the list
- * of documentation blocks for typedefs
- */
- virtual QCString trTypedefDocumentation()
- { return "ÕÕ«ÕºÕ« Õ½Õ¡Õ°Õ´Õ¡Õ¶Õ¸Ö‚Õ´Õ¶Õ¥Ö€ (typedef)"; }
-
- /*! This is used in the documentation of a file/namespace before the list
- * of documentation blocks for enumeration types
- */
- virtual QCString trEnumerationTypeDocumentation()
- { return "Õ€Õ¡Õ´Õ¡Ö€Õ¡Õ¯Õ¡Õ¬Õ´Õ¡Õ¶ Õ¿Õ«ÕºÕ¥Ö€"; }
-
- /*! This is used in the documentation of a file/namespace before the list
- * of documentation blocks for functions
- */
- virtual QCString trFunctionDocumentation()
- { return "Õ–Õ¸Ö‚Õ¶Õ¯ÖÕ«Õ¡Õ¶Õ¥Ö€"; }
-
- /*! This is used in the documentation of a file/namespace before the list
- * of documentation blocks for variables
- */
- virtual QCString trVariableDocumentation()
- { return "Õ“Õ¸ÖƒÕ¸Õ­Õ¡Õ¯Õ¡Õ¶Õ¶Õ¥Ö€"; }
-
- /*! This is used in the documentation of a file/namespace/group before
- * the list of links to documented compounds
- */
- virtual QCString trCompounds()
- {
- if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
- {
- return "ÕÕ¾ÕµÕ¡Õ¬Õ¶Õ¥Ö€Õ« Õ¯Õ¡Õ¼Õ¸Ö‚ÖÕ¾Õ¡Õ®Ö„";
- }
- else
- {
- return "Ô´Õ¡Õ½Õ¥Ö€";
- }
-
- }
-
- /*! This is used in the documentation of a group before the list of
- * links to documented files
- */
- /*! This is used in the standard footer of each page and indicates when
- * the page was generated
- */
- virtual QCString trGeneratedAt(const char *date,const char *projName)
- {
- QCString result=(QCString)"ÕÕ¿Õ¥Õ²Õ®Õ¾Õ¥Õ¬ Õ§ "+date;
- if (projName) result+=projName+QCString(" -Õ« Õ°Õ¡Õ´Õ¡Ö€,");
- result+=(QCString)" Õ°Õ¥Õ¿Ö‡ÕµÕ¡Õ¬ Õ°Õ¡Õ´Õ¡Õ¯Õ¡Ö€Õ£Õ¸Õ¾.";
- return result;
- }
- /*! This is part of the sentence used in the standard footer of each page.
- */
- virtual QCString trWrittenBy()
- {
- return "Õ€Õ¥Õ²Õ«Õ¶Õ¡Õ¯ - ";
- }
-
- /*! this text is put before a class diagram */
- virtual QCString trClassDiagram(const char *clName)
- {
- return clName+QCString(" -Õ« ÕªÕ¡Õ¼Õ¡Õ¶Õ£Õ´Õ¡Õ¶ Õ£Õ®Õ¡Õ£Õ«Ö€Õ¨.");
- }
-
- /*! this text is generated when the \\internal command is used. */
- virtual QCString trForInternalUseOnly()
- { return "Õ„Õ«Õ¡ÕµÕ¶ Õ¶Õ¥Ö€Ö„Õ«Õ¶ Ö…Õ£Õ¿Õ¡Õ£Õ¸Ö€Õ®Õ´Õ¡Õ¶ Õ°Õ¡Õ´Õ¡Ö€"; }
-
- /*! this text is generated when the \\warning command is used. */
- virtual QCString trWarning()
- { return "Ô¶Õ£Õ¸Ö‚Õ·Õ¡ÖÕ¸Ö‚Õ´"; }
-
- /*! this text is generated when the \\version command is used. */
- virtual QCString trVersion()
- { return "ÕÕ¡Ö€Õ¢Õ¥Ö€Õ¡Õ¯"; }
-
- /*! this text is generated when the \\date command is used. */
- virtual QCString trDate()
- { return "ÕÕ¡Ö€Õ¥Õ©Õ«Õ¾"; }
-
- /*! this text is generated when the \\return command is used. */
- virtual QCString trReturns()
- { return "ÕŽÕ¥Ö€Õ¡Õ¤Õ¡Ö€Õ±Õ¶Õ¸Ö‚Õ´ Õ§"; }
-
- /*! this text is generated when the \\sa command is used. */
- virtual QCString trSeeAlso()
- { return "ÕÕ¥Õ½Õ¥Ö„ Õ¶Õ¡Ö‡"; }
-
- /*! this text is generated when the \\param command is used. */
- virtual QCString trParameters()
- { return "ÕŠÕ¡Ö€Õ¡Õ´Õ¥Õ¿Ö€Õ¥Ö€"; }
-
- /*! this text is generated when the \\exception command is used. */
- virtual QCString trExceptions()
- { return "Ô²Õ¡ÖÕ¡Õ¼Õ¸Ö‚Õ©ÕµÕ¸Ö‚Õ¶Õ¶Õ¥Ö€"; }
-
- /*! this text is used in the title page of a LaTeX document. */
- virtual QCString trGeneratedBy()
- { return "ÕÕ¿Õ¥Õ²Õ®Õ¾Õ¡Õ® Õ§ Õ°Õ¥Õ¿Ö‡ÕµÕ¡Õ¬ Õ°Õ¡Õ´Õ¡Õ¯Õ¡Ö€Õ£Õ« Õ¯Õ¸Õ²Õ´Õ«Ö"; }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 0.49-990307
-//////////////////////////////////////////////////////////////////////////
-
- /*! used as the title of page containing all the index of all namespaces. */
- virtual QCString trNamespaceList()
- { return "Ô±Õ¶Õ¸Ö‚Õ¶Õ¶Õ¥Ö€Õ« Õ¿Õ¡Ö€Õ¡Õ®Õ¸Ö‚Õ©ÕµÕ¸Ö‚Õ¶Õ¶Õ¥Ö€Õ« ÖÕ¸Ö‚ÖÕ¡Õ¯"; }
-
- /*! used as an introduction to the namespace list */
- virtual QCString trNamespaceListDescription(bool extractAll)
- {
- QCString result="Ô²Õ¸Õ¬Õ¸Ö€ ";
- if (!extractAll) result+="ÖƒÕ¡Õ½Õ¿Õ¡Õ£Ö€Õ¾Õ¡Õ® ";
- result+="Õ¡Õ¶Õ¸Ö‚Õ¶Õ¶Õ¥Ö€Õ« Õ¿Õ¡Ö€Õ¡Õ®Õ¸Ö‚Õ©ÕµÕ¸Ö‚Õ¶Õ¶Õ¥Ö€Õ« ÖÕ¸Ö‚ÖÕ¡Õ¯Õ¨` Õ¯Õ¡Ö€Õ³ Õ¢Õ¡ÖÕ¡Õ¿Ö€Õ¸Ö‚Õ©ÕµÕ¸Ö‚Õ¶Õ¶Õ¥Ö€Õ¸Õ¾.";
- return result;
- }
-
- /*! used in the class documentation as a header before the list of all
- * friends of a class
- */
- virtual QCString trFriends()
- { return "Ô¸Õ¶Õ¯Õ¥Ö€Õ¶Õ¥Ö€"; }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 0.49-990405
-//////////////////////////////////////////////////////////////////////////
-
- /*! used in the class documentation as a header before the list of all
- * related classes
- */
- virtual QCString trRelatedFunctionDocumentation()
- { return "Ô´Õ¡Õ½Õ« Õ¨Õ¶Õ¯Õ¥Ö€Õ¶Õ¥Ö€ Ö‡ Õ¯Õ¡ÕºÕ¾Õ¡Õ® Ö†Õ¸Ö‚Õ¶Õ¯ÖÕ«Õ¡Õ¶Õ¥Ö€"; }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 0.49-990425
-//////////////////////////////////////////////////////////////////////////
-
- /*! used as the title of the HTML page of a class/struct/union */
- virtual QCString trCompoundReference(const char *clName,
- ClassDef::CompoundType compType,
- bool isTemplate)
- {
- QCString result=(QCString)clName;
- if (isTemplate)
- {
- switch(compType)
- {
- case ClassDef::Class: result+=" Ô´Õ¡Õ½Õ«"; break;
- case ClassDef::Struct: result+=" Ô¿Õ¡Õ¼Õ¸Ö‚ÖÕ¾Õ¡Õ®Ö„Õ«"; break;
- case ClassDef::Union: result+=" Õ„Õ«Õ¡Õ¾Õ¸Ö€Õ´Õ¡Õ¶"; break;
- case ClassDef::Interface: result+=" Ô»Õ¶Õ¿Õ¥Ö€Ö†Õ¥ÕµÕ½Õ«"; break;
- case ClassDef::Protocol: result+=" Ô±Ö€Õ±Õ¡Õ¶Õ¡Õ£Ö€Õ¸Ö‚Õ©ÕµÕ¡Õ¶"; break;
- case ClassDef::Category: result+=" Ô´Õ¡Õ½Õ¡Õ¯Õ¡Ö€Õ£Õ´Õ¡Õ¶"; break;
- case ClassDef::Exception: result+=" Ô²Õ¡ÖÕ¡Õ¼Õ¸Ö‚Õ©ÕµÕ¡Õ¶"; break;
- }
- result+=" ÕÖ‡Õ¡Õ¶Õ´Õ¸Ö‚Õ·Õ¶Õ¥Ö€";
- }
- else
- {
- switch(compType)
- {
- case ClassDef::Class: result+=" Ô´Õ¡Õ½"; break;
- case ClassDef::Struct: result+=" Ô¿Õ¡Õ¼Õ¸Ö‚ÖÕ¾Õ¡Õ®Ö„"; break;
- case ClassDef::Union: result+=" Õ„Õ«Õ¡Õ¾Õ¸Ö€Õ¸Ö‚Õ´"; break;
- case ClassDef::Interface: result+=" Ô»Õ¶Õ¿Õ¥Ö€Ö†Õ¥ÕµÕ½"; break;
- case ClassDef::Protocol: result+=" Ô±Ö€Õ±Õ¡Õ¶Õ¡Õ£Ö€Õ¸Ö‚Õ©ÕµÕ¸Ö‚Õ¶"; break;
- case ClassDef::Category: result+=" Ô´Õ¡Õ½Õ¡Õ¯Õ¡Ö€Õ£Õ¸Ö‚Õ´"; break;
- case ClassDef::Exception: result+=" Ô²Õ¡ÖÕ¡Õ¼Õ¸Ö‚Õ©ÕµÕ¸Ö‚Õ¶"; break;
- }
- }
- return result;
- }
-
- /*! used as the title of the HTML page of a file */
- virtual QCString trFileReference(const char *fileName)
- {
- return fileName+QCString(" Ö†Õ¡ÕµÕ¬Õ¥Ö€");
- }
-
- /*! used as the title of the HTML page of a namespace */
- virtual QCString trNamespaceReference(const char *namespaceName)
- {
- QCString result=namespaceName;
- result+=" Õ¡Õ¶Õ¸Ö‚Õ¶Õ¶Õ¥Ö€Õ« Õ¿Õ¡Ö€Õ¡Õ®Õ¸Ö‚Õ©ÕµÕ¸Ö‚Õ¶Õ¶Õ¥Ö€";
- return result;
- }
-
- virtual QCString trPublicMembers()
- { return "Ô²Õ¡Ö Õ¡Õ¶Õ¤Õ¡Õ´ Ö†Õ¸Ö‚Õ¶Õ¯ÖÕ«Õ¡Õ¶Õ¥Ö€"; }
- virtual QCString trPublicSlots()
- { return "Ô²Õ¡Ö Õ½Õ¬Õ¸Õ©Õ¥Ö€"; }
- virtual QCString trSignals()
- { return "Ô±Õ¦Õ¤Õ¡Õ¶Õ·Õ¡Õ¶Õ¶Õ¥Ö€"; }
- virtual QCString trStaticPublicMembers()
- { return "Ô²Õ¡Ö Õ½Õ¿Õ¡Õ¿Õ«Õ¯ Õ¡Õ¶Õ¤Õ¡Õ´ Ö†Õ¸Ö‚Õ¶Õ¯ÖÕ«Õ¡Õ¶Õ¥Ö€"; }
- virtual QCString trProtectedMembers()
- { return "ÕŠÕ¡Õ·Õ¿ÕºÕ¡Õ¶Õ¾Õ¡Õ® Õ¡Õ¶Õ¤Õ¡Õ´ Ö†Õ¸Ö‚Õ¶Õ¯ÖÕ«Õ¡Õ¶Õ¥Ö€"; }
- virtual QCString trProtectedSlots()
- { return "ÕŠÕ¡Õ·Õ¿ÕºÕ¡Õ¶Õ¾Õ¡Õ® Õ½Õ¬Õ¸Õ©Õ¥Ö€"; }
- virtual QCString trStaticProtectedMembers()
- { return "ÕŠÕ¡Õ·Õ¿ÕºÕ¡Õ¶Õ¾Õ¡Õ® Õ½Õ¿Õ¡Õ¿Õ«Õ¯ Õ¡Õ¶Õ¤Õ¡Õ´ Ö†Õ¸Ö‚Õ¶Õ¯ÖÕ«Õ¡Õ¶Õ¥Ö€"; }
- virtual QCString trPrivateMembers()
- { return "Õ“Õ¡Õ¯ Ö†Õ¸Ö‚Õ¶Õ¯ÖÕ«Õ¡Õ¶Õ¥Ö€"; }
- virtual QCString trPrivateSlots()
- { return "Õ“Õ¡Õ¯ Õ½Õ¬Õ¸Õ©Õ¥Ö€"; }
- virtual QCString trStaticPrivateMembers()
- { return "Õ“Õ¡Õ¯ Õ½Õ¿Õ¡Õ¿Õ«Õ¯ Õ¡Õ¶Õ¤Õ¡Õ´ Ö†Õ¸Ö‚Õ¶Õ¯ÖÕ«Õ¡Õ¶Õ¥Ö€"; }
-
- /*! this function is used to produce a comma-separated list of items.
- * use generateMarker(i) to indicate where item i should be put.
- */
- virtual QCString trWriteList(int numEntries)
- {
- QCString result;
- int i;
- // the inherits list contain `numEntries' classes
- for (i=0;i<numEntries;i++)
- {
- // use generateMarker to generate placeholders for the class links!
- result+=generateMarker(i); // generate marker for entry i in the list
- // (order is left to right)
-
- if (i!=numEntries-1) // not the last entry, so we need a separator
- {
- if (i<numEntries-2) // not the fore last entry
- result+=", ";
- else // the fore last entry
- result+=" Ö‡ ";
- }
- }
- return result;
- }
-
- /*! used in class documentation to produce a list of base classes,
- * if class diagrams are disabled.
- */
- virtual QCString trInheritsList(int numEntries)
- {
- return "Õ€Õ¥Õ¶Ö„Õ¡ÕµÕ«Õ¶ Õ¤Õ¡Õ½Õ¥Ö€ - "+trWriteList(numEntries)+":";
- }
-
- /*! used in class documentation to produce a list of super classes,
- * if class diagrams are disabled.
- */
- virtual QCString trInheritedByList(int numEntries)
- {
- return "ÔºÕ¡Õ¼Õ¡Õ¶Õ£Õ¸Ö€Õ¤ Õ¤Õ¡Õ½Õ¥Ö€ - "+trWriteList(numEntries)+":";
- }
-
- /*! used in member documentation blocks to produce a list of
- * members that are hidden by this one.
- */
- virtual QCString trReimplementedFromList(int numEntries)
- {
- return "ÕŽÕ¥Ö€Õ¡Õ½Õ¡Õ°Õ´Õ¡Õ¶Õ¾Õ¡Õ® Ö†Õ¸Ö‚Õ¶Õ¯ÖÕ«Õ¡Õ¶Õ¥Ö€ - "+trWriteList(numEntries)+":";
- }
-
- /*! used in member documentation blocks to produce a list of
- * all member that overwrite the implementation of this member.
- */
- virtual QCString trReimplementedInList(int numEntries)
- {
- return "ÕŽÕ¥Ö€Õ¡Õ½Õ¡Õ°Õ´Õ¡Õ¶Õ¾Õ¡Õ® Õ§ "+trWriteList(numEntries)+" Õ¸Ö‚Õ´:";
- }
-
- /*! This is put above each page as a link to all members of namespaces. */
- virtual QCString trNamespaceMembers()
- { return "Ô±Õ¶Õ¸Ö‚Õ¶Õ¶Õ¥Ö€Õ« Õ¿Õ¡Ö€Õ¡Õ®Õ¸Ö‚Õ©ÕµÕ¡Õ¶ Õ¡Õ¶Õ¤Õ¡Õ´Õ¶Õ¥Ö€"; }
-
- /*! This is an introduction to the page with all namespace members */
- virtual QCString trNamespaceMemberDescription(bool extractAll)
- {
- QCString result="Ô²Õ¸Õ¬Õ¸Ö€ ";
- if (!extractAll) result+="ÖƒÕ¡Õ½Õ¿Õ¡Õ£Ö€Õ¾Õ¡Õ® ";
- result+="Õ¡Õ¶Õ¸Ö‚Õ¶Õ¶Õ¥Ö€Õ« Õ¿Õ¡Ö€Õ¡Õ®Õ¸Ö‚Õ©ÕµÕ¡Õ¶ Õ¡Õ¶Õ¤Õ¡Õ´Õ¶Õ¥Ö€Õ« ÖÕ¸Ö‚ÖÕ¡Õ¯Õ¨` "
- "Õ°Õ²Õ¸Ö‚Õ´Õ¶Õ¥Ö€Õ¸Õ¾ Õ¤Õ¥ÕºÕ« ";
- if (extractAll)
- result+="Õ¢Õ¸Õ¬Õ¸Ö€ Õ¡Õ¶Õ¤Õ¡Õ´Õ¶Õ¥Ö€Õ« Õ¡Õ¶Õ¸Ö‚Õ¶Õ¶Õ¥Ö€Õ« Õ¿Õ¡Ö€Õ¡Õ®Õ¸Ö‚Õ©ÕµÕ¡Õ¶ ÖƒÕ¡Õ½Õ¿Õ¡Õ£Ö€Õ¸Ö‚Õ©ÕµÕ¸Ö‚Õ¶Õ¨.";
- else
- result+="Õ¡Õ¶Õ¸Ö‚Õ¶Õ¶Õ¥Ö€Õ« Õ¿Õ¡Ö€Õ¡Õ®Õ¸Ö‚Õ©ÕµÕ¸Ö‚Õ¶Õ¨, Õ¸Ö€Õ«Õ¶ Õ¶Ö€Õ¡Õ¶Ö„ ÕºÕ¡Õ¿Õ¯Õ¡Õ¶Õ¸Ö‚Õ´ Õ¥Õ¶.";
- return result;
- }
-
- /*! This is used in LaTeX as the title of the chapter with the
- * index of all namespaces.
- */
- virtual QCString trNamespaceIndex()
- { return "Ô±Õ¶Õ¸Ö‚Õ¶Õ¶Õ¥Ö€Õ« Õ¿Õ¡Ö€Õ¡Õ®Õ¸Ö‚Õ©ÕµÕ¸Ö‚Õ¶Õ¶Õ¥Ö€"; }
-
- /*! This is used in LaTeX as the title of the chapter containing
- * the documentation of all namespaces.
- */
- virtual QCString trNamespaceDocumentation()
- { return "Ô±Õ¶Õ¸Ö‚Õ¶Õ¶Õ¥Ö€Õ« Õ¿Õ¡Ö€Õ¡Õ®Õ¸Ö‚Õ©ÕµÕ¸Ö‚Õ¶"; }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 0.49-990522
-//////////////////////////////////////////////////////////////////////////
-
- /*! This is used in the documentation before the list of all
- * namespaces in a file.
- */
- virtual QCString trNamespaces()
- { return "Ô±Õ¶Õ¸Ö‚Õ¶Õ¶Õ¥Ö€Õ« Õ¿Õ¡Ö€Õ¡Õ®Õ¸Ö‚Õ©ÕµÕ¸Ö‚Õ¶Õ¶Õ¥Ö€"; }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 0.49-990728
-//////////////////////////////////////////////////////////////////////////
-
- /*! This is put at the bottom of a class documentation page and is
- * followed by a list of files that were used to generate the page.
- */
- virtual QCString trGeneratedFromFiles(ClassDef::CompoundType compType,
- bool single)
- {
- QCString result = (QCString)"Ô±ÕµÕ½ ";
- switch(compType)
- {
- case ClassDef::Class: result+="Õ¤Õ¡Õ½Õ«"; break;
- case ClassDef::Struct: result+="Õ¯Õ¡Õ¼Õ¸Ö‚ÖÕ¾Õ¡Õ®Ö„Õ«"; break;
- case ClassDef::Union: result+="Õ´Õ«Õ¡Õ¾Õ¸Ö€Õ´Õ¡Õ¶"; break;
- case ClassDef::Interface: result+="Õ«Õ¶Õ¿Õ¥Ö€Ö†Õ¥ÕµÕ½Õ«"; break;
- case ClassDef::Protocol: result+="Õ¡Ö€Õ±Õ¡Õ¶Õ¡Õ£Ö€Õ¸Ö‚Õ©ÕµÕ¡Õ¶"; break;
- case ClassDef::Category: result+="Õ¤Õ¡Õ½Õ¡Õ¯Õ¡Ö€Õ£Õ´Õ¡Õ¶"; break;
- case ClassDef::Exception: result+="Õ¢Õ¡ÖÕ¡Õ¼Õ¸Ö‚Õ©ÕµÕ¡Õ¶"; break;
- }
- result+=" ÖƒÕ¡Õ½Õ¿Õ¡Õ£Ö€Õ¸Ö‚Õ©ÕµÕ¸Ö‚Õ¶Õ¨ Õ½Õ¿Õ¥Õ²Õ®Õ¾Õ¥Õ¬ Õ§ Õ°Õ¥Õ¿Ö‡ÕµÕ¡Õ¬ Ö†Õ¡ÕµÕ¬";
- if (single) result+="Õ«Ö."; else result+="Õ¥Ö€Õ«Ö.";
- return result;
- }
-
- /*! This is in the (quick) index as a link to the alphabetical compound
- * list.
- */
- virtual QCString trAlphabeticalList()
- { return "Ô±ÕµÕ¢Õ¢Õ¥Õ¶Õ¡Õ¯Õ¡Õ¶ ÖÕ¸Ö‚ÖÕ¡Õ¯"; }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 0.49-990901
-//////////////////////////////////////////////////////////////////////////
-
- /*! This is used as the heading text for the retval command. */
- virtual QCString trReturnValues()
- { return "ÕŽÕ¥Ö€Õ¡Õ¤Õ¡Ö€Õ±Õ¾Õ¸Õ² Õ¡Ö€ÕªÕ¥Ö„Õ¶Õ¥Ö€"; }
-
- /*! This is in the (quick) index as a link to the main page (index.html)
- */
- virtual QCString trMainPage()
- { return "Ô³Õ¬Õ­Õ¡Õ¾Õ¸Ö€ Õ§Õ»"; }
-
- /*! This is used in references to page that are put in the LaTeX
- * documentation. It should be an abbreviation of the word page.
- */
- virtual QCString trPageAbbreviation()
- { return "Õ§Õ»:"; }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 0.49-991106
-//////////////////////////////////////////////////////////////////////////
-
- virtual QCString trDefinedAtLineInSourceFile()
- {
- return "ÕÕ¡Õ°Õ´Õ¡Õ¶Õ¸Ö‚Õ´Õ¨ @1 Ö†Õ¡ÕµÕ¬Õ« @0 Õ¿Õ¸Õ²Õ¸Ö‚Õ´ Õ§:";
- }
- virtual QCString trDefinedInSourceFile()
- {
- return "ÕÕ¡Õ°Õ´Õ¡Õ¶Õ¸Ö‚Õ´Õ¨ @0 Ö†Õ¡ÕµÕ¬Õ¸Ö‚Õ´ Õ§:";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 0.49-991205
-//////////////////////////////////////////////////////////////////////////
-
- virtual QCString trDeprecated()
- {
- return "Õ€Õ¶Õ¡ÖÕ¡Õ® Õ§";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.0.0
-//////////////////////////////////////////////////////////////////////////
-
- /*! this text is put before a collaboration diagram */
- virtual QCString trCollaborationDiagram(const char *clName)
- {
- return (QCString)clName+"-Õ« Õ°Õ¡Õ´Õ¡Õ£Õ¸Ö€Õ®Õ¡Õ¯ÖÕ¸Ö‚Õ©ÕµÕ¸Ö‚Õ¶Õ¶Õ¥Ö€Õ« Õ£Õ®Õ¡Õ£Õ«Ö€.";
- }
- /*! this text is put before an include dependency graph */
- virtual QCString trInclDepGraph(const char *fName)
- {
- return (QCString)fName+"-Õ« Õ¶Õ¥Ö€Õ¡Õ¼Õ¸Ö‚Õ´Õ¶Õ¥Ö€Õ« Õ¯Õ¡Õ­Õ¾Õ¡Õ®Õ¸Ö‚Õ©ÕµÕ¸Ö‚Õ¶Õ¶Õ¥Ö€Õ« Õ£Õ®Õ¡Õ£Õ«Ö€.";
- }
- /*! header that is put before the list of constructor/destructors. */
- virtual QCString trConstructorDocumentation()
- {
- return "Ô¿Õ¡Õ¼Õ¸Ö‚ÖÕ«Õ¹Õ¶Õ¥Ö€";
- }
- /*! Used in the file documentation to point to the corresponding sources. */
- virtual QCString trGotoSourceCode()
- {
- return "ÕÕ¥'Õ½ Õ¡ÕµÕ½ Ö†Õ¡ÕµÕ¬Õ« Õ¥Õ¬Ö„Õ¡ÕµÕ«Õ¶ Õ¯Õ¸Õ¤Õ¨";
- }
- /*! Used in the file sources to point to the corresponding documentation. */
- virtual QCString trGotoDocumentation()
- {
- return "ÕÕ¥'Õ½ Õ¡ÕµÕ½ Ö†Õ¡ÕµÕ¬Õ« ÖƒÕ¡Õ½Õ¿Õ¡Õ£Ö€Õ¸Ö‚Õ©ÕµÕ¸Ö‚Õ¶Õ¨:";
- }
- /*! Text for the \\pre command */
- virtual QCString trPrecondition()
- {
- return "Õ†Õ¡Õ­Õ¡ÕºÕ¡ÕµÕ´Õ¡Õ¶";
- }
- /*! Text for the \\post command */
- virtual QCString trPostcondition()
- {
- return "Õ€Õ¥Õ¿ÕºÕ¡ÕµÕ´Õ¡Õ¶";
- }
- /*! Text for the \\invariant command */
- virtual QCString trInvariant()
- {
- return "Ô±Õ¶ÖƒÕ¸ÖƒÕ¸Õ­";
- }
- /*! Text shown before a multi-line variable/enum initialization */
- virtual QCString trInitialValue()
- {
- return "Õ†Õ¡Õ­Õ¶Õ¡Õ¯Õ¡Õ¶ Õ¡Ö€ÕªÕ¥Ö„";
- }
- /*! Text used the source code in the file index */
- virtual QCString trCode()
- {
- return "ÔµÕ¬Ö„Õ¡ÕµÕ«Õ¶ Õ¯Õ¸Õ¤";
- }
- virtual QCString trGraphicalHierarchy()
- {
- return "Ô³Ö€Õ¡Ö†Õ«Õ¯Õ¡Õ¯Õ¡Õ¶ Õ¤Õ¡Õ½Õ¥Ö€Õ« Õ°Õ«Õ¥Ö€Õ¡Ö€Õ­Õ«Õ¡:";
- }
- virtual QCString trGotoGraphicalHierarchy()
- {
- return "ÕÕ¥'Õ½ Õ¤Õ¡Õ½Õ¥Ö€Õ« Õ£Ö€Õ¡Ö†Õ«Õ¯Õ¡Õ¯Õ¡Õ¶ Õ°Õ«Õ¥Ö€Õ¡Ö€Õ­Õ«Õ¡Õ¶:";
- }
- virtual QCString trGotoTextualHierarchy()
- {
- return "ÕÕ¥'Õ½ Õ¤Õ¡Õ½Õ¥Ö€Õ« Õ¿Õ¥Ö„Õ½Õ¿Õ¡ÕµÕ«Õ¶ Õ°Õ«Õ¥Ö€Õ¡Ö€Õ­Õ«Õ¡Õ¶:";
- }
- virtual QCString trPageIndex()
- {
- return "Õ§Õ»Õ¥Ö€";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.1.0
-//////////////////////////////////////////////////////////////////////////
-
- virtual QCString trNote()
- {
- return "Õ†Õ·Õ¸Ö‚Õ´";
- }
- virtual QCString trPublicTypes()
- {
- return "Ô²Õ¡Ö Õ¿Õ«ÕºÕ¥Ö€";
- }
- virtual QCString trPublicAttribs()
- {
- if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
- {
- return "ÕÕ¾ÕµÕ¡Õ¬Õ¶Õ¥Ö€Õ« Õ¤Õ¡Õ·Õ¿Õ¥Ö€";
- }
- else
- {
- return "Ô²Õ¡Ö Õ¡Õ¿Ö€Õ«Õ¢Õ¸Ö‚Õ¿Õ¶Õ¥Ö€";
- }
- }
- virtual QCString trStaticPublicAttribs()
- {
- return "Ô²Õ¡Ö Õ½Õ¿Õ¡Õ¿Õ«Õ¯ Õ¡Õ¿Ö€Õ«Õ¢Õ¸Ö‚Õ¿Õ¶Õ¥Ö€";
- }
- virtual QCString trProtectedTypes()
- {
- return "ÕŠÕ¡Õ·Õ¿ÕºÕ¡Õ¶Õ¾Õ¡Õ® Õ¿Õ«ÕºÕ¥Ö€";
- }
- virtual QCString trProtectedAttribs()
- {
- return "ÕŠÕ¡Õ·Õ¿ÕºÕ¡Õ¶Õ¾Õ¡Õ® Õ¡Õ¿Ö€Õ«Õ¢Õ¸Ö‚Õ¿Õ¶Õ¥Ö€";
- }
- virtual QCString trStaticProtectedAttribs()
- {
- return "ÕŠÕ¡Õ·Õ¿ÕºÕ¡Õ¶Õ¾Õ¡Õ® Õ½Õ¿Õ¡Õ¿Õ«Õ¯ Õ¡Õ¿Ö€Õ«Õ¢Õ¸Ö‚Õ¿Õ¶Õ¥Ö€";
- }
- virtual QCString trPrivateTypes()
- {
- return "Õ“Õ¡Õ¯ Õ¿Õ«ÕºÕ¥Ö€";
- }
- virtual QCString trPrivateAttribs()
- {
- return "Õ“Õ¡Õ¯ Õ¡Õ¿Ö€Õ«Õ¢Õ¸Ö‚Õ¿Õ¶Õ¥Ö€";
- }
- virtual QCString trStaticPrivateAttribs()
- {
- return "Õ“Õ¡Õ¯ Õ½Õ¿Õ¡Õ¿Õ«Õ¯ Õ¡Õ¿Ö€Õ«Õ¢Õ¸Ö‚Õ¿Õ¶Õ¥Ö€";
- }
-
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.1.3
-//////////////////////////////////////////////////////////////////////////
-
- /*! Used as a marker that is put before a todo item */
- virtual QCString trTodo()
- /*??*/
- {
- return "Ô¿Õ¡Õ¿Õ¡Ö€Õ´Õ¡Õ¶ Õ¥Õ¶Õ©Õ¡Õ¯Õ¡";
- }
- /*! Used as the header of the todo list */
- virtual QCString trTodoList()
- /*??*/
- {
- return "Ô½Õ¶Õ¤Õ«Ö€Õ¶Õ¥Ö€Õ« ÖÕ¸Ö‚ÖÕ¡Õ¯";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.1.4
-//////////////////////////////////////////////////////////////////////////
-
- virtual QCString trReferencedBy()
- {
- return "Õ•Õ£Õ¿Õ¡Õ£Õ¸Ö€Õ®Õ¾Õ¸Ö‚Õ´ Õ§ Õ°Õ¥Õ¿Ö‡ÕµÕ¡Õ¬Õ¸Ö‚Õ´ - ";
- }
- virtual QCString trRemarks()
- {
- return "Ô´Õ«Õ¿Õ¸Õ²Õ¸Ö‚Õ©ÕµÕ¸Ö‚Õ¶Õ¶Õ¥Ö€";
- }
- virtual QCString trAttention()
- {
- return "ÕˆÖ‚Õ·Õ¡Õ¤Ö€Õ¸Ö‚Õ©ÕµÕ¸Ö‚Õ¶";
- }
- virtual QCString trInclByDepGraph()
- {
- return "Ô±ÕµÕ½ Õ£Ö€Õ¡Ö†Õ¨ ÖÕ¸Ö‚ÕµÖ Õ§ Õ¿Õ¡Õ¬Õ«Õ½, Õ©Õ¥ Õ¸Ö€ Ö†Õ¡ÕµÕ¬Õ¥Ö€Õ¶ Õ¥Õ¶ "
- "Õ¸Ö‚Õ²Õ²Õ¡Õ¯Õ« Õ¯Õ¡Õ´ Õ¡Õ¶Õ¸Ö‚Õ²Õ²Õ¡Õ¯Õ« Õ¶Õ¥Ö€Õ¡Õ¼Õ¸Ö‚Õ´ Õ¿Õ¾ÕµÕ¡Õ¬ Ö†Õ¡ÕµÕ¬Õ¨.";
- }
- virtual QCString trSince()
- /*??*/
- {
- return "ÕÕ¯Õ½Õ¡Õ®";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.1.5
-//////////////////////////////////////////////////////////////////////////
-
- /*! title of the graph legend page */
- virtual QCString trLegendTitle()
- {
- return "Ô¼Õ¥Õ£Õ¥Õ¶Õ¤";
- }
- /*! page explaining how the dot graph's should be interpreted
- * The %A in the text below are to prevent link to classes called "A".
- */
- virtual QCString trLegendDocs()
- {
- return
- "Ô±ÕµÕ½ Õ§Õ»Õ¨ Õ¶Õ¯Õ¡Ö€Õ¡Õ£Ö€Õ¸Ö‚Õ´ Õ§, Õ©Õ¥ Õ«Õ¶Õ¹ÕºÕ¥Õ½ Õ´Õ¥Õ¯Õ¶Õ¡Õ¢Õ¡Õ¶Õ¥Õ¬ doxygen-Õ« Õ½Õ¿Õ¥Õ²Õ®Õ¡Õ® Õ£Ö€Õ¡Ö†Õ¶Õ¥Ö€Õ¨:<p>\n"
- "Ô´Õ«Õ¿Õ¡Ö€Õ¯Õ¥Õ¶Ö„ Õ°Õ¥Õ¿Ö‡ÕµÕ¡Õ¬ Ö…Ö€Õ«Õ¶Õ¡Õ¯Õ¨.\n"
- "\\code\n"
- "/*! Ô¿Ö€Õ³Õ¡Õ¿Õ´Õ¡Õ¶ Õ°Õ¥Õ¿Ö‡Õ¡Õ¶Ö„Õ¸Õ¾ Õ¡Õ¶Õ¿Õ¥Õ½Õ¡Õ¶Õ¥Õ¬Õ« Õ¤Õ¡Õ½ */\n"
- "class Invisible { };\n\n"
- "/*! Ô¿Ö€Õ³Õ¡Õ¿Õ¾Õ¡Õ® Õ¤Õ¡Õ½, ÕªÕ¡Õ¼Õ¡Õ¶Õ£Õ¸Ö‚Õ©ÕµÕ¸Ö‚Õ¶Õ¶Õ¥Ö€Õ« Õ°Õ¡Ö€Õ¡Õ¢Õ¥Ö€Õ¸Ö‚Õ©ÕµÕ¸Ö‚Õ¶Õ¨ ÖƒÕ¡Õ¯ Õ§ */\n"
- "class Truncated : public Invisible { };\n\n"
- "/* Õ‰ÖƒÕ¡Õ½Õ¿Õ¡Õ£Ö€Õ¾Õ¡Õ® Õ¤Õ¡Õ½ */\n"
- "class Undocumented { };\n\n"
- "/*! Ô²Õ¡Ö ÕªÕ¡Õ¼Õ¡Õ¶Õ£Õ¸Ö‚Õ´ */\n"
- "class PublicBase : public Truncated { };\n\n"
- "/*! Ô´Õ¡Õ½Õ« Õ±Ö‡Õ¡Õ¹Õ¡Öƒ */\n"
- "template<class T> class Templ {};\n\n"
- "/*! ÕŠÕ¡Õ·Õ¿ÕºÕ¡Õ¶Õ¾Õ¡Õ® ÕªÕ¡Õ¼Õ¡Õ¶Õ£Õ¸Ö‚Õ´ */\n"
- "class ProtectedBase { };\n\n"
- "/*! Õ“Õ¡Õ¯ ÕªÕ¡Õ¼Õ¡Õ¶Õ£Õ¸Ö‚Õ´ */\n"
- "class PrivateBase { };\n\n"
- "/*! Ô´Õ¡Õ½, Õ¸Ö€Õ¨ Ö…Õ£Õ¿Õ¡Õ£Õ¸Ö€Õ®Õ¾Õ¸Ö‚Õ´ Õ§ Inherited Õ¤Õ¡Õ½Õ« Õ¯Õ¸Õ²Õ´Õ«Ö */\n"
- "class Used { };\n\n"
- "/*! Ô´Õ¡Õ½, Õ¸Ö€Õ¨ ÕªÕ¡Õ¼Õ¡Õ¶Õ£Õ¸Ö‚Õ´ Õ§ Õ´Õ« Õ·Õ¡Ö€Ö„ Õ¡ÕµÕ¬ Õ¤Õ¡Õ½Õ¥Ö€Õ«Ö */\n"
- "class Inherited : public PublicBase,\n"
- " protected ProtectedBase,\n"
- " private PrivateBase,\n"
- " public Undocumented,\n"
- " public Templ<int>\n"
- "{\n"
- " private:\n"
- " Used *m_usedClass;\n"
- "};\n"
- "\\endcode\n"
- "ÕÖ€Õ¡Õ¶Õ¸Õ¾ Õ¯Õ½Õ¿Õ¡Õ¶Õ¡Õ¶Ö„ Õ°Õ¥Õ¿Ö‡ÕµÕ¡Õ¬ Õ£Ö€Õ¡Ö†Õ¨."
- "<p><center><img src=\"graph_legend."+Config_getEnum("DOT_IMAGE_FORMAT")+"\"></center>\n"
- "<p>\n"
- "Ô±ÕµÕ½ Õ£Ö€Õ¡Ö†Õ« Õ¸Ö‚Õ²Õ²Õ¡Õ¶Õ¯ÕµÕ¸Ö‚Õ¶Õ¶Õ¥Ö€Õ¨ Õ¸Ö‚Õ¶Õ¥Õ¶ Õ°Õ¥Õ¿Ö‡ÕµÕ¡Õ¬ Õ«Õ´Õ¡Õ½Õ¿Õ¨.\n"
- "<ul>\n"
- "<li>%A Õ¬ÖÕ¸Õ¶Õ¾Õ¡Ö Õ´Õ¸Õ­Ö€Õ¡Õ£Õ¸Ö‚ÕµÕ¶ Õ¸Ö‚Õ²Õ²Õ¡Õ¶Õ¯ÕµÕ¸Ö‚Õ¶Õ¨ Õ¶Õ¥Ö€Õ¯Õ¡ÕµÕ¡ÖÕ¶Õ¸Ö‚Õ´ Õ§ Õ¡ÕµÕ¶ Õ¤Õ¡Õ½Õ¨ Õ¯Õ¡Õ´ Õ¯Õ¡Õ¼Õ¸Ö‚ÖÕ¾Õ¡Õ®Ö„Õ¨, "
- "Õ¸Ö€Õ« Õ°Õ¡Õ´Õ¡Ö€ Õ½Õ¿Õ¥Õ²Õ®Õ¾Õ¥Õ¬ Õ§ Õ¿Õ¾ÕµÕ¡Õ¬ Õ£Ö€Õ¡Ö†Õ¨:</li>\n"
- "<li>%A Õ½Ö‡ Õ¥Õ¦Ö€Õ¥Ö€Õ¸Õ¾ Õ¸Ö‚Õ²Õ²Õ¡Õ¶Õ¯ÕµÕ¸Ö‚Õ¶Õ¨ Õ¶Õ·Õ¡Õ¶Õ¡Õ¯Õ¸Ö‚Õ´ Õ§ ÖƒÕ¡Õ½Õ¿Õ¡Õ£Ö€Õ¾Õ¡Õ® Õ¤Õ¡Õ½ Õ¯Õ¡Õ´ Õ¯Õ¡Ö€Õ¸Ö‚ÖÕ¾Õ¡Õ®Ö„:</li>\n"
- "<li>%A Õ´Õ¸Õ­Ö€Õ¡Õ£Õ¸Ö‚ÕµÕ¶ Õ¥Õ¦Ö€Õ¥Ö€Õ¸Õ¾ Õ¸Ö‚Õ²Õ²Õ¡Õ¶Õ¯ÕµÕ¸Ö‚Õ¶Õ¨ Õ¶Õ·Õ¡Õ¶Õ¡Õ¯Õ¸Ö‚Õ´ Õ§ Õ¹ÖƒÕ¡Õ½Õ¿Õ¡Õ£Ö€Õ¾Õ¡Õ® Õ¤Õ¡Õ½ Õ¯Õ¡Õ´ Õ¯Õ¡Õ¼Õ¸Ö‚ÖÕ¾Õ¡Õ®Ö„:</li>\n"
- "<li>%A Õ¯Õ¡Ö€Õ´Õ«Ö€ Õ¥Õ¦Ö€Õ¥Ö€Õ¸Õ¾ Õ¸Ö‚Õ²Õ²Õ¡Õ¶Õ¯ÕµÕ¸Ö‚Õ¶Õ¨ Õ¶Õ·Õ¡Õ¶Õ¡Õ¯Õ¸Ö‚Õ´ Õ§ Õ¤Õ¡Õ½ Õ¯Õ¡Õ´ Õ¯Õ¡Õ¼Õ¸Ö‚ÖÕ¾Õ¡Õ®Ö„, Õ¸Ö€Õ« Õ°Õ¡Õ´Õ¡Ö€\n"
- " Õ¸Õ¹ Õ¢Õ¸Õ¬Õ¸Ö€ ÕªÕ¡Õ¼Õ¡Õ¶Õ£Õ¸Ö‚Õ´/ÕºÕ¡Ö€Õ¸Ö‚Õ¶Õ¡Õ¯Õ¸Ö‚Õ´ Õ¯Õ¡ÕºÕ¥Ö€Õ¶ Õ¥Õ¶ ÖÕ¸Ö‚ÖÕ¡Õ¤Ö€Õ¾Õ¡Õ®: Ô³Ö€Õ¡Ö†Õ¨ Õ¯Ö€Õ³Õ¡Õ¿Õ¾Õ¡Õ® Õ§, "
- "Õ¥Õ©Õ¥ Õ¡ÕµÕ¶ Õ¹Õ« Õ¿Õ¥Õ²Õ¡Õ¾Õ¸Ö€Õ¾Õ¸Ö‚Õ´ Õ¶Õ·Õ¾Õ¡Õ® Õ½Õ¡Õ°Õ´Õ¡Õ¶Õ¶Õ¥Ö€Õ¸Ö‚Õ´:</li>\n"
- "</ul>\n"
- "ÕÕ¬Õ¡Ö„Õ¶Õ¥Ö€Õ¨ Õ¸Ö‚Õ¶Õ¥Õ¶ Õ°Õ¥Õ¿Ö‡ÕµÕ¡Õ¬ Õ«Õ´Õ¡Õ½Õ¿Õ¨.\n"
- "<ul>\n"
- "<li>%A Õ´Õ¸Ö‚Õ£ Õ¯Õ¡ÕºÕ¸Ö‚ÕµÕ¿ Õ½Õ¬Õ¡Ö„Õ¨ Ö…Õ£Õ¿Õ¡Õ£Õ¸Ö€Õ®Õ¾Õ¸Ö‚Õ´ Õ§ Õ¥Ö€Õ¯Õ¸Ö‚ Õ¤Õ¡Õ½Õ¥Ö€Õ« Õ´Õ«Õ»Ö‡ Õ¢Õ¡Ö ÕªÕ¡Õ¼Õ¡Õ¶Õ£Õ¸Ö‚Õ´ "
- "Õ¯Õ¡ÕºÕ¨ ÖÕ¸Ö‚ÖÕ¡Õ¤Ö€Õ¥Õ¬Õ¸Ö‚ Õ°Õ¡Õ´Õ¡Ö€:</li>\n"
- "<li>%A Õ´Õ¸Ö‚Õ£ Õ¯Õ¡Õ¶Õ¡Õ¹ Õ½Õ¬Õ¡Ö„Õ¨ Ö…Õ£Õ¿Õ¡Õ£Õ¸Ö€Õ®Õ¾Õ¸Ö‚Õ´ Õ§ ÕºÕ¡Õ·Õ¿ÕºÕ¡Õ¶Õ¾Õ¡Õ® ÕªÕ¡Õ¼Õ¡Õ¶Õ£Õ´Õ¡Õ¶ Õ°Õ¡Õ´Õ¡Ö€:</li>\n"
- "<li>%A Õ´Õ¸Ö‚Õ£ Õ¯Õ¡Ö€Õ´Õ«Ö€ Õ½Õ¬Õ¡Ö„Õ¨ Ö…Õ£Õ¿Õ¡Õ£Õ¸Ö€Õ®Õ¾Õ¸Ö‚Õ´ Õ§ ÖƒÕ¡Õ¯ ÕªÕ¡Õ¼Õ¡Õ¶Õ£Õ´Õ¡Õ¶ Õ°Õ¡Õ´Õ¡Ö€:</li>\n"
- "<li>%A Õ´Õ¡Õ¶Õ¸Ö‚Õ·Õ¡Õ¯Õ¡Õ£Õ¸Ö‚ÕµÕ¶ Õ¯Õ¥Õ¿Õ¡Õ£Õ«Õ® Õ½Õ¬Õ¡Ö„Õ¨ Ö…Õ£Õ¿Õ¡Õ£Õ¸Ö€Õ·Õ¾Õ¸Ö‚Õ´ Õ§, Õ¥Õ©Õ¥ Õ¤Õ¡Õ½Õ¨ ÕºÕ¡Ö€Õ¸Ö‚Õ¶Õ¡Õ¯Õ¾Õ¸Ö‚Õ´ Õ§"
- "Õ¡ÕµÕ¬ Õ¤Õ¡Õ½Õ¸Ö‚Õ´ Õ¯Õ¡Õ´ Ö…Õ£Õ¿Õ¡Õ£Õ¸Ö€Õ·Õ¾Õ¸Ö‚Õ´ Õ§ Õ¡ÕµÕ¬ Õ¤Õ¡Õ½Õ« Õ¯Õ¸Õ²Õ´Õ«Ö: ÕÕ¬Õ¡Ö„Õ¨ ÕºÕ«Õ¿Õ¡Õ¯Õ¡Õ¾Õ¸Ö€Õ¾Õ¡Õ· Õ§"
- "ÖƒÕ¸ÖƒÕ¸Õ­Õ¡Õ¯Õ¡Õ¶(Õ¶Õ¥Ö€)Õ¸Õ¾, Õ¸Ö€Õ« Õ´Õ«Õ»Õ¸ÖÕ¸Õ¾ Õ´Õ¡Õ¿Õ¶Õ¡Õ¶Õ·Õ¾Õ¡Õ® Õ¤Õ¡Õ½Õ¨ Õ¯Õ¡Õ´ Õ¯Õ¡Õ¼Õ¸Ö‚ÖÕ¾Õ¡Õ®Ö„Õ¨ Õ°Õ¡Õ½Õ¡Õ¶Õ¥Õ¬Õ« Õ§:</li>\n"
- "<li>Ô´Õ¥Õ¦Õ«Õ¶ Õ¯Õ¥Õ¿Õ¡Õ£Õ«Õ® Õ½Õ¬Õ¡Ö„Õ¨ ÖÕ¸Ö‚ÕµÖ Õ§ Õ¿Õ¡Õ¬Õ«Õ½ Õ±Ö‡Õ¡Õ¶Õ´Õ¸Ö‚Õ·Õ« Ö…Ö€Õ«Õ¶Õ¡Õ¯Õ« Õ¯Õ¡ÕºÕ¨ Õ¡ÕµÕ¶ Õ±Ö‡Õ¡Õ¶Õ´Õ¸Ö‚Õ·Õ« Õ°Õ¥Õ¿, "
- "Õ¸Ö€Õ«Ö Õ¡ÕµÕ¶ Õ«Ö€Õ¡Õ¯Õ¡Õ¶ÖÕ¾Õ¥Õ¬ Õ§. ÕÕ¬Õ¡Ö„Õ¨ ÕºÕ«Õ¿Õ¡Õ¯Õ¡Õ¾Õ¸Ö€Õ¾Õ¡Õ® Õ§ Ö…Ö€Õ«Õ¶Õ¡Õ¯Õ« Õ±Ö‡Õ¡Õ¶Õ´Õ¸Ö‚Õ·Õ¡ÕµÕ«Õ¶ ÕºÕ¡Ö€Õ¡Õ´Õ¥Õ¿Ö€Õ¥Ö€Õ¸Õ¾:</li>\n"
- "</ul>\n";
- }
- /*! text for the link to the legend page */
- virtual QCString trLegend()
- {
- return "Õ¬Õ¥Õ£Õ¥Õ¶Õ¤";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.2.0
-//////////////////////////////////////////////////////////////////////////
-
- /*! Used as a marker that is put before a test item */
- virtual QCString trTest()
- {
- return "Ô¹Õ¥Õ½Õ¿";
- }
- /*! Used as the header of the test list */
- virtual QCString trTestList()
- {
- return "Ô¹Õ¥Õ½Õ¿Õ¥Ö€Õ« ÖÕ¸Ö‚ÖÕ¡Õ¯";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.2.1
-//////////////////////////////////////////////////////////////////////////
-
- /*! Used as a section header for KDE-2 IDL methods */
- virtual QCString trDCOPMethods()
- {
- return "DCOP Õ¡Õ¶Õ¤Õ¡Õ´ Ö†Õ¸Ö‚Õ¶Õ¯ÖÕ«Õ¡Õ¶Õ¥Ö€";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.2.2
-//////////////////////////////////////////////////////////////////////////
-
- /*! Used as a section header for IDL properties */
- virtual QCString trProperties()
- {
- return "Õ€Õ¡Õ¿Õ¯Õ¸Ö‚Õ©ÕµÕ¸Ö‚Õ¶Õ¶Õ¥Ö€";
- }
- /*! Used as a section header for IDL property documentation */
- virtual QCString trPropertyDocumentation()
- {
- return "Õ€Õ¡Õ¿Õ¯Õ¸Ö‚Õ©ÕµÕ¸Ö‚Õ¶Õ¶Õ¥Ö€";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.2.4
-//////////////////////////////////////////////////////////////////////////
-
- /*! Used for Java classes in the summary section of Java packages */
- virtual QCString trClasses()
- {
- if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
- {
- return "ÕÕ¾ÕµÕ¡Õ¬Õ¶Õ¥Ö€Õ« Õ¯Õ¡Õ¼Õ¸Ö‚ÖÕ¾Õ¡Õ®Ö„";
- }
- else
- {
- return "Ô´Õ¡Õ½Õ¥Ö€";
- }
- }
- /*! Used as the title of a Java package */
- virtual QCString trPackage(const char *name)
- {
- return (QCString)"Õ“Õ¡Õ©Õ¥Õ© "+name;
- }
- /*! Title of the package index page */
- virtual QCString trPackageList()
- {
- return "Õ“Õ¡Õ©Õ¥Õ©Õ¶Õ¥Ö€Õ« ÖÕ¸Ö‚ÖÕ¡Õ¯";
- }
- /*! The description of the package index page */
- virtual QCString trPackageListDescription()
- {
- return "Ô²Õ¸Õ¬Õ¸Ö€ ÖƒÕ¡Õ©Õ¥Õ©Õ¶Õ¥Ö€Õ¨` Õ¯Õ¡Ö€Õ³ Õ¢Õ¡ÖÕ¡Õ¿Ö€Õ¸Ö‚Õ©ÕµÕ¸Ö‚Õ¶Õ¶Õ¥Ö€Õ¸Õ¾ (Õ¥Õ©Õ¥ Õ°Õ¡Õ½Õ¡Õ¶Õ¥Õ¬Õ« Õ¥Õ¶).";
- }
- /*! The link name in the Quick links header for each page */
- virtual QCString trPackages()
- {
- return "Õ“Õ¡Õ©Õ¥Õ©Õ¶Õ¥Ö€";
- }
- /*! Text shown before a multi-line define */
- virtual QCString trDefineValue()
- {
- return "Ô±Ö€ÕªÕ¥Ö„Õ¶Õ¥Ö€";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.2.5
-//////////////////////////////////////////////////////////////////////////
-
- /*! Used as a marker that is put before a \\bug item */
- virtual QCString trBug()
- {
- return "ÕÕ­Õ¡Õ¬";
- }
- /*! Used as the header of the bug list */
- virtual QCString trBugList()
- {
- return "ÕÕ­Õ¡Õ¬Õ¶Õ¥Ö€Õ« ÖÕ¸Ö‚ÖÕ¡Õ¯";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.2.6
-//////////////////////////////////////////////////////////////////////////
- /*! Used as ansicpg for RTF file */
- virtual QCString trRTFansicp()
- {
- return "armscii-8";
- }
- /*! Used as ansicpg for RTF fcharset */
- virtual QCString trRTFCharSet()
- {
- return "0";
- }
- /*! Used as header RTF general index */
- virtual QCString trRTFGeneralIndex()
- {
- return "Õ‘Õ¸Ö‚ÖÕ«Õ¹";
- }
-
- /*! This is used for translation of the word that will possibly
- * be followed by a single name or by a list of names
- * of the category.
- */
- virtual QCString trClass(bool first_capital, bool singular)
- {
- if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
- {
- QCString result((first_capital ? "ÕÕ¾ÕµÕ¡Õ¬Õ¶Õ¥Ö€Õ« Õ¯Õ¡Õ¼Õ¸Ö‚ÖÕ¾Õ¡Õ®Ö„" : "Õ¿Õ¾ÕµÕ¡Õ¬Õ¶Õ¥Ö€Õ« Õ¯Õ¡Õ¼Õ¸Ö‚ÖÕ¾Õ¡Õ®Ö„"));
- return result;
- }
- else
- {
- QCString result((first_capital ? "Ô´Õ¡Õ½" : "Õ¤Õ¡Õ½"));
- if(!singular) result+="Õ¥Ö€";
- return result;
- }
- }
-
- /*! This is used for translation of the word that will possibly
- * be followed by a single name or by a list of names
- * of the category.
- */
- virtual QCString trFile(bool first_capital, bool singular)
- {
- QCString result((first_capital ? "Õ–Õ¡ÕµÕ¬" : "Ö†Õ¡ÕµÕ¬"));
- if (!singular) result+="Õ¥Ö€";
- return result;
- }
-
- /*! This is used for translation of the word that will possibly
- * be followed by a single name or by a list of names
- * of the category.
- */
- virtual QCString trNamespace(bool first_capital, bool singular)
- {
- QCString result((first_capital ? "Ô±Õ¶Õ¸Ö‚Õ¶Õ¶Õ¥Ö€Õ« Õ¿Õ¡Ö€Õ¡Õ®Õ¸Ö‚Õ©ÕµÕ¸Ö‚Õ¶" : "Õ¡Õ¶Õ¸Ö‚Õ¶Õ¶Õ¥Ö€Õ« Õ¿Õ¡Ö€Õ¡Õ®Õ¸Ö‚Õ©ÕµÕ¸Ö‚Õ¶"));
- if (!singular) result+="Õ¶Õ¥Ö€";
- return result;
- }
-
- /*! This is used for translation of the word that will possibly
- * be followed by a single name or by a list of names
- * of the category.
- */
- virtual QCString trGroup(bool first_capital, bool singular)
- {
- QCString result((first_capital ? "Ô½" : "Õ­"));
- result+=(singular ? "Õ¸Ö‚Õ´Õ¢" : "Õ´Õ¢Õ¥Ö€");
- return result;
- }
-
- /*! This is used for translation of the word that will possibly
- * be followed by a single name or by a list of names
- * of the category.
- */
- virtual QCString trPage(bool first_capital, bool singular)
- {
- QCString result((first_capital ? "Ô·Õ»" : "Õ§Õ»"));
- if (!singular) result+="Õ¥Ö€";
- return result;
- }
-
- /*! This is used for translation of the word that will possibly
- * be followed by a single name or by a list of names
- * of the category.
- */
- virtual QCString trMember(bool first_capital, bool singular)
- {
- QCString result((first_capital ? "Ô±Õ¶Õ¤Õ¡Õ´" : "Õ¡Õ¶Õ¤Õ¡Õ´"));
- if (!singular) result+="Õ¶Õ¥Ö€";
- return result;
- }
-
- /*! This is used for translation of the word that will possibly
- * be followed by a single name or by a list of names
- * of the category.
- */
- virtual QCString trGlobal(bool first_capital, bool singular)
- {
- QCString result((first_capital ? "Ô³Õ¬Õ¸Õ¢Õ¡Õ¬" : "Õ£Õ¬Õ¸Õ¢Õ¡Õ¬"));
- if (!singular) result+="Õ¶Õ¥Ö€";
- return result;
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.2.7
-//////////////////////////////////////////////////////////////////////////
-
- /*! This text is generated when the \\author command is used and
- * for the author section in man pages. */
- virtual QCString trAuthor(bool first_capital, bool singular)
- {
- QCString result((first_capital ? "Õ€Õ¥Õ²Õ«Õ¶Õ¡Õ¯" : "Õ°Õ¥Õ²Õ«Õ¶Õ¡Õ¯"));
- if (!singular) result+="Õ¶Õ¥Ö€";
- return result;
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.2.11
-//////////////////////////////////////////////////////////////////////////
-
- /*! This text is put before the list of members referenced by a member
- */
- virtual QCString trReferences()
- {
- return "Õ€Õ²Õ¸Ö‚Õ´Õ¶Õ¥Ö€ - ";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.2.13
-//////////////////////////////////////////////////////////////////////////
-
- /*! used in member documentation blocks to produce a list of
- * members that are implemented by this one.
- */
- virtual QCString trImplementedFromList(int numEntries)
- {
- return "Ô»Ö€Õ¡Õ£Õ¸Ö€Õ®Õ¸Ö‚Õ´ Õ§ Õ°Õ¥Õ¿Ö‡ÕµÕ¡Õ¬ Õ¤Õ¡Õ½(Õ¥Ö€)Õ« Ö†Õ¸Ö‚Õ¶Õ¯ÖÕ«Õ¡Õ¶Õ¥Ö€Õ¨ - "+trWriteList(numEntries)+":";
- }
-
- /*! used in member documentation blocks to produce a list of
- * all members that implementation this member.
- */
- virtual QCString trImplementedInList(int numEntries)
- {
- return "Ô»Ö€Õ¡Õ£Õ¸Ö€Õ®Õ¾Õ¸Ö‚Õ´ Õ§ Õ°Õ¥Õ¿Ö‡ÕµÕ¡Õ¬Õ¸Ö‚Õ´ - "+trWriteList(numEntries)+":";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.2.16
-//////////////////////////////////////////////////////////////////////////
-
- /*! used in RTF documentation as a heading for the Table
- * of Contents.
- */
- virtual QCString trRTFTableOfContents()
- {
- return "Ô²Õ¸Õ¾Õ¡Õ¶Õ¤Õ¡Õ¯Õ¸Ö‚Õ©ÕµÕ¸Ö‚Õ¶";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.2.17
-//////////////////////////////////////////////////////////////////////////
-
- /*! Used as the header of the list of item that have been
- * flagged deprecated
- */
- virtual QCString trDeprecatedList()
- {
- return "Õ€Õ¶Õ¡ÖÕ¡Õ® Õ½Õ¡Õ°Õ´Õ¡Õ¶Õ¸Ö‚Õ´Õ¶Õ¥Ö€Õ« ÖÕ¸Ö‚ÖÕ¡Õ¯Õ¨";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.2.18
-//////////////////////////////////////////////////////////////////////////
-
- /*! Used as a header for declaration section of the events found in
- * a C# program
- */
- virtual QCString trEvents()
- {
- return "ÕŠÕ¡Õ¿Õ¡Õ°Õ¡Ö€Õ¶Õ¥Ö€";
- }
- /*! Header used for the documentation section of a class' events. */
- virtual QCString trEventDocumentation()
- {
- return "ÕŠÕ¡Õ¿Õ¡Õ°Õ¡Ö€Õ¶Õ¥Ö€Õ« ÖÕ¸Ö‚ÖÕ¡Õ¯Õ¨";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.3
-//////////////////////////////////////////////////////////////////////////
-
- /*! Used as a heading for a list of Java class types with package scope.
- */
- virtual QCString trPackageTypes()
- {
- return "Õ“Õ¡Õ©Õ¥Õ©Õ« Õ¿Õ«ÕºÕ¥Ö€";
- }
- /*! Used as a heading for a list of Java class functions with package
- * scope.
- */
- virtual QCString trPackageMembers()
- {
- return "Õ“Õ¡Õ©Õ¥Õ©Õ« Ö†Õ¸Ö‚Õ¶Õ¯ÖÕ«Õ¡Õ¶Õ¥Ö€";
- }
- /*! Used as a heading for a list of static Java class functions with
- * package scope.
- */
- virtual QCString trStaticPackageMembers()
- {
- return "Õ“Õ¡Õ©Õ¥Õ©Õ« Õ½Õ¿Õ¡Õ¿Õ«Õ¯ Ö†Õ¸Ö‚Õ¶Õ¯ÖÕ«Õ¡Õ¶Õ¥Ö€";
- }
- /*! Used as a heading for a list of Java class variables with package
- * scope.
- */
- virtual QCString trPackageAttribs()
- {
- return "Õ“Õ¡Õ©Õ¥Õ©Õ« Õ¡Õ¿Ö€Õ«Õ¢Õ¸Ö‚Õ¿Õ¶Õ¥Ö€";
- }
- /*! Used as a heading for a list of static Java class variables with
- * package scope.
- */
- virtual QCString trStaticPackageAttribs()
- {
- return "Õ“Õ¡Õ©Õ¥Õ©Õ« Õ½Õ¿Õ¡Õ¿Õ«Õ¯ Õ¡Õ¿Ö€Õ«Õ¢Õ¸Ö‚Õ¿Õ¶Õ¥Ö€";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.3.1
-//////////////////////////////////////////////////////////////////////////
-
- /*! Used in the quick index of a class/file/namespace member list page
- * to link to the unfiltered list of all members.
- */
- virtual QCString trAll()
- {
- return "Ô²Õ¸Õ¬Õ¸Ö€";
- }
- /*! Put in front of the call graph for a function. */
- virtual QCString trCallGraph()
- {
- return "Ô±ÕµÕ½ Ö†Õ¸Ö‚Õ¶Õ¯ÖÕ«Õ¡ÕµÕ« Õ¯Õ¡Õ¶Õ¹Õ¥Ö€Õ« Õ£Ö€Õ¡Ö†Õ¨.";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.3.3
-//////////////////////////////////////////////////////////////////////////
-
- /*! When the search engine is enabled this text is put in the header
- * of each page before the field where one can enter the text to search
- * for.
- */
- virtual QCString trSearchForIndex()
- {
- return "ÕˆÖ€Õ¸Õ¶Õ¸Ö‚Õ´";
- }
- /*! This string is used as the title for the page listing the search
- * results.
- */
- virtual QCString trSearchResultsTitle()
- {
- return "ÕˆÖ€Õ¸Õ¶Õ´Õ¡Õ¶ Õ¡Ö€Õ¤ÕµÕ¸Ö‚Õ¶Ö„Õ¶Õ¥Ö€Õ¨";
- }
- /*! This string is put just before listing the search results. The
- * text can be different depending on the number of documents found.
- * Inside the text you can put the special marker $num to insert
- * the number representing the actual number of search results.
- * The @a numDocuments parameter can be either 0, 1 or 2, where the
- * value 2 represents 2 or more matches. HTML markup is allowed inside
- * the returned string.
- */
- virtual QCString trSearchResults(int numDocuments)
- {
- if (numDocuments==0)
- {
- return "Õ†Õ¥Ö€Õ¥ÖÕ¥Ö„, Õ¢Õ¡ÕµÖ ÕÕ¥Ö€ Õ¸Ö€Õ¸Õ¶Õ¸Ö‚Õ´Õ¨ Õ¡Ö€Õ¤ÕµÕ¸Ö‚Õ¶Ö„ Õ¹Õ¿Õ¾Õ¥Ö:";
- }
- else if( numDocuments == 1 )
- {
- return "Õ€Õ¡ÕµÕ¿Õ¶Õ¡Õ¢Õ¥Ö€Õ¾Õ¥Õ¬ Õ§ 1 ÖƒÕ¡Õ½Õ¿Õ¡Õ©Õ¸Ö‚Õ²Õ©:";
- }
- else
- {
- return "Õ€Õ¡ÕµÕ¿Õ¶Õ¡Õ¢Õ¥Ö€Õ¾Õ¥Õ¬ Õ§ <b>$num</b> ÖƒÕ¡Õ½Õ¿Õ¡Õ©Õ¸Ö‚Õ²Õ©:"
- "Õ“Õ¡Õ½Õ¿Õ¡Õ©Õ²Õ©Õ¥Ö€Õ¨ Õ¤Õ¡Õ½Õ¡Õ¯Õ¡Ö€Õ£Õ¾Õ¡Õ® Õ¥Õ¶ Õ¨Õ½Õ¿ Õ°Õ¡Õ´Õ¡ÕºÕ¡Õ½Õ­Õ¡Õ¶Õ¸Ö‚Õ©ÕµÕ¡Õ¶";
- }
- }
- /*! This string is put before the list of matched words, for each search
- * result. What follows is the list of words that matched the query.
- */
- virtual QCString trSearchMatches()
- {
- return "ÕˆÖ€Õ¸Õ¶Õ´Õ¡Õ¶ Õ¡Ö€Õ¤ÕµÕ¸Ö‚Õ¶Ö„Õ¶Õ¥Ö€:";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.3.8
-//////////////////////////////////////////////////////////////////////////
-
- /*! This is used in HTML as the title of page with source code for file filename
- */
- virtual QCString trSourceFile(QCString& filename)
- {
- return "ÔµÕ¬Õ¡Õ¯Õ¥Õ¿Õ¡ÕµÕ«Õ¶ Ö†Õ¡ÕµÕ¬ " + filename;
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.3.9
-//////////////////////////////////////////////////////////////////////////
-
- /*! This is used as the name of the chapter containing the directory
- * hierarchy.
- */
- virtual QCString trDirIndex()
- { return "Õ–Õ¡ÕµÕ¬Õ¡Õ¤Õ¡Ö€Õ¡Õ¶Õ¶Õ¥Ö€Õ« Õ°Õ«Õ¥Ö€Õ¡Ö€Õ­Õ«Õ¡"; }
-
- /*! This is used as the name of the chapter containing the documentation
- * of the directories.
- */
- virtual QCString trDirDocumentation()
- { return "Õ–Õ¡ÕµÕ¬Õ¡Õ¤Õ¡Ö€Õ¡Õ¶Õ¶Õ¥Ö€"; }
-
- /*! This is used as the title of the directory index and also in the
- * Quick links of a HTML page, to link to the directory hierarchy.
- */
- virtual QCString trDirectories()
- { return "Õ–Õ¡ÕµÕ¬Õ¡Õ¤Ö€Õ¡Õ¶Õ¶Õ¥Ö€"; }
-
- /*! This returns a sentences that introduces the directory hierarchy.
- * and the fact that it is sorted alphabetically per level
- */
- virtual QCString trDirDescription()
- { return "Ô±ÕµÕ½ Ö†Õ¡ÕµÕ¬Õ¡Õ¤Õ¡Ö€Õ¡Õ¶Õ¶Õ¥Ö€Õ« Õ°Õ«Õ¥Ö€Õ¡Ö€Õ­Õ«Õ¡Õ¶ Õ¯Õ¡Ö€Õ£Õ¡Õ¾Õ¸Ö€Õ¾Õ¡Õ® Õ§ Õ¯Õ¸ÕºÕ¿Õ¸Ö€Õ¥Õ¶, "
- "Õ¢Õ¡ÕµÖ Õ¸Õ¹ Õ¡Õ´Õ¢Õ¸Õ²Õ»Õ¡ÕºÕ¥Õ½, Õ¡ÕµÕ¢Õ¢Õ¥Õ¶Õ¡Õ¯Õ¡Õ¶ Õ¯Õ¡Ö€Õ£Õ¸Õ¾.";
- }
-
- /*! This returns the title of a directory page. The name of the
- * directory is passed via \a dirName.
- */
- virtual QCString trDirReference(const char *dirName)
- { QCString result=dirName; result+=" Õ–Õ¡ÕµÕ¬Õ¡Õ¤Õ¡Ö€Õ¡Õ¶"; return result; }
-
- /*! This returns the word directory with or without starting capital
- * (\a first_capital) and in sigular or plural form (\a singular).
- */
- virtual QCString trDir(bool first_capital, bool singular)
- {
- QCString result((first_capital ? "Õ–Õ¡ÕµÕ¬Õ¡Õ¤Õ¡Ö€Õ¡Õ¶" : "Ö†Õ¡ÕµÕ¬Õ¡Õ¤Õ¡Ö€Õ¡Õ¶"));
- if (!singular) result+="Õ¶Õ¥Ö€";
- return result;
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.4.1
-//////////////////////////////////////////////////////////////////////////
-
- /*! This text is added to the documentation when the \\overload command
- * is used for a overloaded function.
- */
- virtual QCString trOverloadText()
- {
- return "ÕÕ¡ Õ¾Õ¥Ö€Õ¡Õ¢Õ¥Õ¼Õ¶Õ¾Õ¡Õ® Ö†Õ¸Ö‚Õ¶Õ¯ÖÕ«Õ¡ Õ§` Õ¿Ö€Õ¡Õ´Õ¡Õ¤Ö€Õ¾Õ¡Õ® Õ°Õ¡Ö€Õ´Õ¡Ö€Õ¸Ö‚Õ©ÕµÕ¡Õ¶ Õ°Õ¡Õ´Õ¡Ö€: "
- "Ô±ÕµÕ¶ Õ¿Õ¡Ö€Õ¢Õ¥Ö€Õ¾Õ¸Ö‚Õ´ Õ§ Õ¶Õ¡Õ­Õ¶Õ¡Õ¯Õ¡Õ¶Õ«Ö Õ´Õ«Õ¡ÕµÕ¶ Õ¡Ö€Õ£Õ¸Ö‚Õ´Õ¶Õ¥Õ¿Õ¶Õ¥Ö€Õ¸Õ¾:";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.4.6
-//////////////////////////////////////////////////////////////////////////
-
- /*! This is used to introduce a caller (or called-by) graph */
- virtual QCString trCallerGraph()
- {
- return "Ô±ÕµÕ½ Ö†Õ¸Ö‚Õ¶Õ¯ÖÕ«Õ¡ÕµÕ« Õ¯Õ¡Õ¶Õ¹Õ¥Ö€Õ« Õ£Ö€Õ¡Ö†Õ¨.";
- }
-
- /*! This is used in the documentation of a file/namespace before the list
- * of documentation blocks for enumeration values
- */
- virtual QCString trEnumerationValueDocumentation()
- { return "Õ€Õ¡Õ´Õ¡Ö€Õ¡Õ¯Õ¡Õ¬Õ¸Ö‚Õ´Õ¶Õ¥Ö€"; }
-
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.5.4 (mainly for Fortran)
-//////////////////////////////////////////////////////////////////////////
- /*! header that is put before the list of member subprograms (Fortran). */
- virtual QCString trMemberFunctionDocumentationFortran()
- { return "Ô±Õ¶Õ¤Õ¡Õ´ Ö†Õ¸Ö‚Õ¶ÖÕ«Õ¡Õ¶Õ¥Ö€/Õ¥Õ¶Õ©Õ¡Õ®Ö€Õ¡Õ£Ö€Õ¥Ö€"; }
-
- /*! This is put above each page as a link to the list of annotated data types (Fortran). */
- virtual QCString trCompoundListFortran()
- { return "ÕÕ¾ÕµÕ¡Õ¬Õ¶Õ¥Ö€Õ« Õ¿Õ«ÕºÕ¥Ö€Õ« ÖÕ¸Ö‚ÖÕ¡Õ¯Õ¨"; }
-
- /*! This is put above each page as a link to all members of compounds (Fortran). */
- virtual QCString trCompoundMembersFortran()
- { return "ÕÕ¾ÕµÕ¡Õ¬Õ¶Õ¥Ö€Õ« Õ¤Õ¡Õ·Õ¿Õ¥Ö€"; }
-
- /*! This is an introduction to the annotated compound list (Fortran). */
- virtual QCString trCompoundListDescriptionFortran()
- { return "ÕÕ¾ÕµÕ¡Õ¬Õ¶Õ¥Ö€Õ« Õ¿Õ«ÕºÕ¥Ö€Õ¨` Õ¯Õ¡Ö€Õ³ Õ¢Õ¡ÖÕ¡Õ¿Ö€Õ¸Ö‚Õ©ÕµÕ¸Ö‚Õ¶Õ¶Õ¥Ö€Õ¸Õ¾."; }
-
- /*! This is an introduction to the page with all data types (Fortran). */
- virtual QCString trCompoundMembersDescriptionFortran(bool extractAll)
- {
- QCString result="Ô²Õ¸Õ¬Õ¸Ö€ ";
- if (!extractAll)
- {
- result+="ÖƒÕ¡Õ½Õ¿Õ¡Õ£Ö€Õ¾Õ¡Õ® ";
- }
- result+="Õ¿Õ¾ÕµÕ¡Õ¬Õ¶Õ¥Ö€Õ« Õ¿Õ«ÕºÕ¥Ö€Õ« Õ¡Õ¶Õ¤Õ¡Õ´Õ¶Õ¥Ö€Õ« ÖÕ¸Ö‚ÖÕ¡Õ¯Õ¨` Õ°Õ²Õ¸Ö‚Õ´Õ¶Õ¥Ö€Õ¸Õ¾ Õ¤Õ¥ÕºÕ« ";
- if (!extractAll)
- {
- result+="Õ¢Õ¸Õ¬Õ¸Ö€ Õ¡Õ¶Õ¤Õ¡Õ´Õ¶Õ¥Ö€Õ« Õ¿Õ¾ÕµÕ¡Õ¬Õ¶Õ¥Ö€Õ« Õ¯Õ¡Õ¼Õ¸Ö‚ÖÕ¾Õ¡Õ®Ö„Õ« ÖƒÕ¡Õ½Õ¿Õ¡Õ£Ö€Õ¸Ö‚Õ©ÕµÕ¸Ö‚Õ¶Õ¨";
- }
- else
- {
- result+="Õ¿Õ¾ÕµÕ¡Õ¬Õ¶Õ¥Ö€Õ« Õ¿Õ«ÕºÕ¥Ö€Õ¨, Õ¸Ö€Õ¸Õ¶Ö Õ¶Ö€Õ¡Õ¶Ö„ ÕºÕ¡Õ¿Õ¯Õ¡Õ¶Õ¸Ö‚Õ´ Õ¥Õ¶";
- }
- return result;
- }
-
- /*! This is used in LaTeX as the title of the chapter with the
- * annotated compound index (Fortran).
- */
- virtual QCString trCompoundIndexFortran()
- { return "ÕÕ¾ÕµÕ¡Õ¬Õ¶Õ¥Ö€Õ« Õ¿Õ«ÕºÕ¥Ö€"; }
-
- /*! This is used in LaTeX as the title of the chapter containing
- * the documentation of all data types (Fortran).
- */
- virtual QCString trTypeDocumentation()
- { return "ÕÕ¾ÕµÕ¡Õ¬Õ¶Õ¥Ö€Õ« Õ¿Õ«ÕºÕ¥Ö€"; }
-
- /*! This is used in the documentation of a file as a header before the
- * list of (global) subprograms (Fortran).
- */
- virtual QCString trSubprograms()
- { return "Õ–Õ¸Ö‚Õ¶Õ¯ÖÕ«Õ¡Õ¶Õ¥Ö€/Õ¥Õ¶Õ©Õ¡Õ®Ö€Õ¡Õ£Ö€Õ¥Ö€"; }
-
- /*! This is used in the documentation of a file/namespace before the list
- * of documentation blocks for subprograms (Fortran)
- */
- virtual QCString trSubprogramDocumentation()
- { return "Õ–Õ¸Ö‚Õ¶Õ¯ÖÕ«Õ¡Õ¶Õ¥Ö€/Õ¥Õ¶Õ©Õ¡Õ®Ö€Õ¡Õ£Ö€Õ¥Ö€"; }
-
- /*! This is used in the documentation of a file/namespace/group before
- * the list of links to documented compounds (Fortran)
- */
- virtual QCString trDataTypes()
- { return "ÕÕ¾ÕµÕ¡Õ¬Õ¶Õ¥Ö€Õ« Õ¿Õ«ÕºÕ¥Ö€"; }
-
- /*! used as the title of page containing all the index of all modules (Fortran). */
- virtual QCString trModulesList()
- { return "Õ„Õ¸Õ¤Õ¸Ö‚Õ¬Õ¶Õ¥Ö€Õ« ÖÕ¸Ö‚ÖÕ¡Õ¯"; }
-
- /*! used as an introduction to the modules list (Fortran) */
- virtual QCString trModulesListDescription(bool extractAll)
- {
- QCString result="Ô²Õ¸Õ¬Õ¸Ö€";
- if (!extractAll) result+="ÖƒÕ¡Õ½Õ¿Õ¡Õ£Ö€Õ¾Õ¡Õ® ";
- result+="Õ´Õ¸Õ¤Õ¸Ö‚Õ¬Õ¶Õ¥Ö€Õ« ÖÕ¸Ö‚ÖÕ¡Õ¯Õ¨` Õ¯Õ¡Ö€Õ³ Õ¢Õ¡ÖÕ¡Õ¿Ö€Õ¸Ö‚Õ©ÕµÕ¸Ö‚Õ¶Õ¶Õ¥Ö€Õ¸Õ¾.";
- return result;
- }
-
- /*! used as the title of the HTML page of a module/type (Fortran) */
- virtual QCString trCompoundReferenceFortran(const char *clName,
- ClassDef::CompoundType compType,
- bool isTemplate)
- {
- QCString result=(QCString)clName;
- if (!isTemplate)
- {
- switch(compType)
- {
- case ClassDef::Class: result+=" Õ„Õ¸Õ¤Õ¸Ö‚Õ¬"; break;
- case ClassDef::Struct: result+=" ÕÕ«Õº"; break;
- case ClassDef::Union: result+=" Õ„Õ«Õ¡Õ¾Õ¸Ö€Õ¸Ö‚Õ´"; break;
- case ClassDef::Interface: result+=" Ô»Õ¶Õ¿Õ¥Ö€Ö†Õ¥ÕµÕ½"; break;
- case ClassDef::Protocol: result+=" Ô±Ö€Õ±Õ¡Õ¶Õ¡Õ£Ö€Õ¸Ö‚Õ©ÕµÕ¸Ö‚Õ¶"; break;
- case ClassDef::Category: result+=" Ô´Õ¡Õ½Õ¡Õ¯Õ¡Ö€Õ£Õ¸Ö‚Õ´"; break;
- case ClassDef::Exception: result+=" Ô²Õ¡ÖÕ¡Õ¼Õ¸Ö‚Õ©ÕµÕ¸Ö‚Õ¶"; break;
- }
- }
- else
- {
- switch(compType)
- {
- case ClassDef::Class: result+=" Õ„Õ¸Õ¤Õ¸Ö‚Õ¬Õ«"; break;
- case ClassDef::Struct: result+=" ÕÕ«ÕºÕ«"; break;
- case ClassDef::Union: result+=" Õ„Õ«Õ¡Õ¾Õ¸Ö€Õ´Õ¡Õ¶"; break;
- case ClassDef::Interface: result+=" Ô»Õ¶Õ¿Õ¥Ö€Ö†Õ¥ÕµÕ½Õ«"; break;
- case ClassDef::Protocol: result+=" Ô±Ö€Õ±Õ¡Õ¶Õ¡Õ£Ö€Õ¸Ö‚Õ©ÕµÕ¡Õ¶"; break;
- case ClassDef::Category: result+=" Ô´Õ¡Õ½Õ¡Õ¯Õ¡Ö€Õ£Õ´Õ¡Õ¶"; break;
- case ClassDef::Exception: result+=" Ô²Õ¡ÖÕ¡Õ¼Õ¸Ö‚Õ©ÕµÕ¡Õ¶"; break;
- }
- result+=" ÕÖ‡Õ¡Õ¶Õ´Õ¸Ö‚Õ·";
- }
- return result;
- }
- /*! used as the title of the HTML page of a module (Fortran) */
- virtual QCString trModuleReference(const char *namespaceName)
- {
- return QCString("Õ„Õ¸Õ¤Õ¸Ö‚Õ¬ ") + namespaceName;
- }
-
- /*! This is put above each page as a link to all members of modules. (Fortran) */
- virtual QCString trModulesMembers()
- { return "Õ„Õ¸Õ¤Õ¸Ö‚Õ¬Õ« Õ¡Õ¶Õ¤Õ¡Õ´Õ¶Õ¥Ö€"; }
-
- /*! This is an introduction to the page with all modules members (Fortran) */
- virtual QCString trModulesMemberDescription(bool extractAll)
- {
- QCString result="Õ„Õ¸Õ¤Õ¸Ö‚Õ¬Õ« Õ¢Õ¸Õ¬Õ¸Ö€ ";
- if (!extractAll) result+="ÖƒÕ¡Õ½Õ¿Õ¡Õ£Ö€Õ¾Õ¡Õ® ";
- result+="Õ¡Õ¶Õ¤Õ¡Õ´Õ¶Õ¥Ö€Õ« ÖÕ¸Ö‚ÖÕ¡Õ¯Õ¨` Õ°Õ²Õ¸Ö‚Õ´Õ¶Õ¥Ö€Õ¸Õ¾ Õ¤Õ¥ÕºÕ« ";
- if (extractAll)
- {
- result+="Õ¢Õ¸Õ¬Õ¸Ö€ Õ¡Õ¶Õ¤Õ¡Õ´Õ¶Õ¥Ö€Õ« ÖƒÕ¡Õ½Õ¿Õ¡Õ£Ö€Õ¸Ö‚Õ©ÕµÕ¸Ö‚Õ¶Õ¶Õ¥Ö€Õ¨.";
- }
- else
- {
- result+="Õ´Õ¸Õ¤Õ¸Ö‚Õ¬Õ¶Õ¥Ö€Õ¨, Õ¸Ö€Õ¸Õ¶Ö Õ¶Ö€Õ¡Õ¶Ö„ ÕºÕ¡Õ¿Õ¯Õ¡Õ¶Õ¸Ö‚Õ´ Õ¥Õ¶.";
- }
- return result;
- }
-
- /*! This is used in LaTeX as the title of the chapter with the
- * index of all modules (Fortran).
- */
- virtual QCString trModulesIndex()
- { return "Õ„Õ¸Õ¤Õ¸Ö‚Õ¬Õ¶Õ¥Ö€"; }
-
- /*! This is used for translation of the word that will possibly
- * be followed by a single name or by a list of names
- * of the category.
- */
- virtual QCString trModule(bool first_capital, bool singular)
- {
- QCString result((first_capital ? "Õ„Õ¸Õ¤Õ¸Ö‚Õ¬" : "Õ´Õ¸Õ¤Õ¸Ö‚Õ¬"));
- if (!singular) result+="Õ¶Õ¥Ö€";
- return result;
- }
- /*! This is put at the bottom of a module documentation page and is
- * followed by a list of files that were used to generate the page.
- */
- virtual QCString trGeneratedFromFilesFortran(ClassDef::CompoundType compType,
- bool single)
- { // here s is one of " Module", " Struct" or " Union"
- // single is true implies a single file
- QCString result=(QCString)"Ô±ÕµÕ½ ";
- switch(compType)
- {
- case ClassDef::Class: result+="Õ´Õ¸Õ¤Õ¸Ö‚Õ¬Õ«"; break;
- case ClassDef::Struct: result+="Õ¿Õ«ÕºÕ«"; break;
- case ClassDef::Union: result+="Õ´Õ«Õ¡Õ¾Õ¸Ö€Õ´Õ¡Õ¶"; break;
- case ClassDef::Interface: result+="Õ«Õ¶Õ¿Õ¥Ö€Ö†Õ¥ÕµÕ½Õ«"; break;
- case ClassDef::Protocol: result+="Õ¡Ö€Õ±Õ¡Õ¶Õ¡Õ£Ö€Õ¸Ö‚Õ©ÕµÕ¡Õ¶"; break;
- case ClassDef::Category: result+="Õ¤Õ¡Õ½Õ¡Õ¯Õ¡Ö€Õ£Õ´Õ¡Õ¶"; break;
- case ClassDef::Exception: result+="Õ¢Õ¡ÖÕ¡Õ¼Õ¸Ö‚Õ©ÕµÕ¡Õ¶"; break;
- }
- result+=" ÖƒÕ¡Õ½Õ¿Õ¡Õ£Ö€Õ¸Ö‚Õ©ÕµÕ¸Ö‚Õ¶Õ¨ Õ½Õ¿Õ¥Õ²Õ®Õ¾Õ¥Õ¬ Õ§ Õ°Õ¥Õ¿Ö‡Õ¡Õ¬ Ö†Õ¡ÕµÕ¬";
- if (single) result+="Õ«Ö."; else result+="Õ¥Ö€Õ«Ö.";
- return result;
- }
- /*! This is used for translation of the word that will possibly
- * be followed by a single name or by a list of names
- * of the category.
- */
- virtual QCString trType(bool first_capital, bool singular)
- {
- QCString result((first_capital ? "ÕÕ«Õº" : "Õ¿Õ«Õº"));
- if (!singular) result+="Õ¥Ö€";
- return result;
- }
- /*! This is used for translation of the word that will possibly
- * be followed by a single name or by a list of names
- * of the category.
- */
- virtual QCString trSubprogram(bool first_capital, bool singular)
- {
- QCString result((first_capital ? "Ôµ" : "Õ¥"));
- if (singular) result+="Õ¶Õ©Õ¡Õ®Ö€Õ¡Õ£Õ«Ö€"; else result+="Õ¶Õ©Õ¡Õ®Ö€Õ¡Õ£Ö€Õ¥Ö€";
- return result;
- }
-
- /*! C# Type Constraint list */
- virtual QCString trTypeConstraints()
- {
- return "ÕÕ«ÕºÕ¥Ö€Õ« ÕÕ¡Õ°Õ´Õ¡Õ¶Õ¡ÖƒÕ¡Õ¯Õ¸Ö‚Õ´Õ¶Õ¥Ö€";
- }
-//////////////////////////////////////////////////////////////////////////
-// new since 1.6.0 (mainly for the new search engine)
-//////////////////////////////////////////////////////////////////////////
-
- /*! directory relation for \a name */
- virtual QCString trDirRelation(const char *name)
- {
- return QCString(name)+" Ô¿Õ¡Õº";
- }
-
- /*! Loading message shown when loading search results */
- virtual QCString trLoading()
- {
- return "Ô²Õ¥Õ¼Õ¶Õ¸Ö‚Õ´...";
- }
-
- /*! Label used for search results in the global namespace */
- virtual QCString trGlobalNamespace()
- {
- return "Ô³Õ¬Õ¸Õ¢Õ¡Õ¬ Õ¡Õ¶Õ¸Ö‚Õ¶Õ¶Õ¥Ö€Õ« Õ¿Õ¡Ö€Õ¡Õ®Õ¸Ö‚Õ©ÕµÕ¸Ö‚Õ¶";
- }
-
- /*! Message shown while searching */
- virtual QCString trSearching()
- {
- return "ÕˆÖ€Õ¸Õ¶Õ¸Ö‚Õ´...";
- }
-
- /*! Text shown when no search results are found */
- virtual QCString trNoMatches()
- {
- return "Ô±Õ¶Õ¡Ö€Õ¤ÕµÕ¸Ö‚Õ¶Ö„";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.6.3 (missing items for the directory pages)
-//////////////////////////////////////////////////////////////////////////
-
- /*! introduction text for the directory dependency graph */
- virtual QCString trDirDependency(const char *name)
- {
- return (QCString)name + " -Õ« Õ¯Õ¡Õ­Õ¾Õ¡Õ®Õ¸Ö‚Õ©ÕµÕ¸Ö‚Õ¶Õ¶Õ¥Ö€Õ« Õ£Õ®Õ¡Õ£Õ«Ö€";
- }
-
- /*! when clicking a directory dependency label, a page with a
- * table is shown. The heading for the first column mentions the
- * source file that has a relation to another file.
- */
- virtual QCString trFileIn(const char *name)
- {
- return (QCString)"Õ–Õ¡ÕµÕ¬Õ¨ " + name + " Õ¸Ö‚Õ´";
- }
-
- /*! when clicking a directory dependency label, a page with a
- * table is shown. The heading for the second column mentions the
- * destination file that is included.
- */
- virtual QCString trIncludesFileIn(const char *name)
- {
- return (QCString)"Õ†Õ¥Ö€Õ¡Õ¼Õ¸Ö‚Õ´ Õ§ Ö†Õ¡ÕµÕ¬Õ¨ " + name + " Õ¸Ö‚Õ´";
- }
-
- /** Compiles a date string.
- * @param year Year in 4 digits
- * @param month Month of the year: 1=January
- * @param day Day of the Month: 1..31
- * @param dayOfWeek Day of the week: 1=Monday..7=Sunday
- * @param hour Hour of the day: 0..23
- * @param minutes Minutes in the hour: 0..59
- * @param seconds Seconds within the minute: 0..59
- * @param includeTime Include time in the result string?
- */
- virtual QCString trDateTime(int year,int month,int day,int dayOfWeek,
- int hour,int minutes,int seconds,
- bool includeTime)
- {
- static const char *days[] = { "ÔµÖ€Õ¯Õ¸Ö‚Õ·Õ¡Õ¢Õ©Õ«,","ÔµÖ€Õ¥Ö„Õ·Õ¡Õ¢Õ©Õ«,","Õ‰Õ¸Ö€Õ¥Ö„Õ·Õ¡Õ¢Õ©Õ«,","Õ€Õ«Õ¶Õ£Õ·Õ¡Õ¢Õ©Õ«,",
- "ÕˆÖ‚Ö€Õ¢Õ¡Õ©,","Õ‡Õ¡Õ¢Õ¡Õ©,","Ô¿Õ«Ö€Õ¡Õ¯Õ«," };
- static const char *months[] = { "Õ€Õ¸Ö‚Õ¶Õ«Õ½Õ«","Õ“Õ¥Õ¿Ö€Õ¾Õ¡Ö€Õ«","Õ„Õ¡Ö€Õ¿Õ«","Ô±ÕºÖ€Ö€Õ«Õ¬Õ«","Õ„Õ¡ÕµÕ«Õ½Õ«","Õ€Õ¸Ö‚Õ¶Õ«Õ½Õ«",
- "Õ€Õ¸Ö‚Õ¬Õ«Õ½Õ«","Õ•Õ£Õ¸Õ½Õ¿Õ¸Õ½Õ«","ÕÕ¥ÕºÕ¿Õ¥Õ´Õ¢Õ¥Ö€Õ«","Õ€Õ¸Õ¯Õ¿Õ¥Õ¢Õ´Õ¥Ö€Õ«","Õ†Õ¸ÕµÕ¥Õ´Õ¢Õ¥Ö€Õ«","Ô´Õ¥Õ¯Õ¿Õ¥Õ´Õ¢Õ¥Ö€Õ«" };
- QCString sdate;
- sdate.sprintf("%s %d %s %d",days[dayOfWeek-1],day,months[month-1],year);
- if (includeTime)
- {
- QCString stime;
- stime.sprintf(" %.2d:%.2d:%.2d ",hour,minutes,seconds);
- sdate+=stime;
- }
- return sdate;
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.7.5
-//////////////////////////////////////////////////////////////////////////
-
- /*! Header for the page with bibliographic citations */
- virtual QCString trCiteReferences()
- { return "Ô³Ö€Õ¡Õ¯Õ¡Õ¶Õ¸Ö‚Õ©ÕµÕ¸Ö‚Õ¶"; }
-
- /*! Text for copyright paragraph */
- virtual QCString trCopyright()
- { return "Õ€Õ¥Õ²Õ«Õ¶Õ¡Õ¯Õ¡ÕµÕ«Õ¶ Õ«Ö€Õ¡Õ¾Õ¸Ö‚Õ¶Ö„"; }
-
- /*! Header for the graph showing the directory dependencies */
- virtual QCString trDirDepGraph(const char *name)
- { return name + QCString("-Õ« Ö†Õ¡ÕµÕ¬Õ¡Õ¤Õ¡Ö€Õ¡Õ¶Õ¶Õ¥Ö€Õ« Õ¯Õ¡Õ­Õ¾Õ¡Õ®Õ¸Ö‚Õ©ÕµÕ¸Ö‚Õ¶Õ¶Õ¥Ö€Õ« Õ£Õ®Õ¡Õ£Õ«Ö€:"); }
-
-};
-
-#endif
diff --git a/trunk/src/translator_ar.h b/trunk/src/translator_ar.h
deleted file mode 100644
index 6738537..0000000
--- a/trunk/src/translator_ar.h
+++ /dev/null
@@ -1,1615 +0,0 @@
-/******************************************************************************
- *
- *
- *
- * Copyright (C) 1997-2012 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.
- *
- */
-
-/*
- * Arabic translation for Doxygen
- *
- * Please send your comments on this translation to moazreyad@yahoo.com
- *
- * Note : consider this file as Beta version for testing Arabic output with Doxygen.
- *
- * Revision history :
- *
- * 6/2006 : Created initial version of Arabic translation.
- */
-
-#ifndef TRANSLATOR_AR_H
-#define TRANSLATOR_AR_H
-
-class TranslatorArabic : public TranslatorAdapter_1_4_6
-{
- protected:
- friend class TranslatorAdapterBase;
- virtual ~TranslatorArabic() {}
-
- public:
-
- // --- Language control methods -------------------
-
- /*! Used for identification of the language. The identification
- * should not be translated. It should be replaced by the name
- * of the language in English using lower-case characters only
- * (e.g. "czech", "japanese", "russian", etc.). It should be equal to
- * the identification used in language.cpp.
- */
- virtual QCString idLanguage()
- { return "arabic"; }
-
- /*! Used to get the LaTeX command(s) for the language support.
- * This method should return string with commands that switch
- * LaTeX to the desired language. For example
- * <pre>"\\usepackage[german]{babel}\n"
- * </pre>
- * or
- * <pre>"\\usepackage{polski}\n"
- * "\\usepackage[latin2]{inputenc}\n"
- * "\\usepackage[T1]{fontenc}\n"
- * </pre>
- *
- * The English LaTeX does not use such commands. Because of this
- * the empty string is returned in this implementation.
- */
- virtual QCString latexLanguageSupportCommand()
- {
- return "";
- }
-
- /*! return the language charset. This will be used for the HTML output */
- virtual QCString idLanguageCharset()
- {
- return "cp1256";
- }
-
- // --- Language translation methods -------------------
-
- /*! used in the compound documentation before a list of related functions. */
- virtual QCString trRelatedFunctions()
- { return "ÏæÇá ÐÇÊ ÕáÉ"; }
-
- /*! subscript for the related functions. */
- virtual QCString trRelatedSubscript()
- { return "(áÇÍÙ Ãä åÐå ÇáÏæÇá áíÓÊ ÃÚÖÇÁ)"; }
-
- /*! header that is put before the detailed description of files, classes and namespaces. */
- virtual QCString trDetailedDescription()
- { return "æÕÝ ÊÝÕíáí"; }
-
- /*! header that is put before the list of typedefs. */
- virtual QCString trMemberTypedefDocumentation()
- { return "ÊæËíÞ ÊÚÑíÝÇÊ ÇáäæÚ ÇáÃÚÖÇÁ"; }
-
- /*! header that is put before the list of enumerations. */
- virtual QCString trMemberEnumerationDocumentation()
- { return "ÊæËíÞ ÇáÚÏÏíÇÊ ÇáÃÚÖÇÁ"; }
-
- /*! header that is put before the list of member functions. */
- virtual QCString trMemberFunctionDocumentation()
- { return "ÊæËíÞ ÇáÏæÇá ÇáÃÚÖÇÁ"; }
-
- /*! header that is put before the list of member attributes. */
- virtual QCString trMemberDataDocumentation()
- {
- if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
- {
- return "ÊæËíÞ ÇáÍÞá";
- }
- else
- {
- return "ÊæËíÞ ÇáÈíÇä ÇáÚÖæ";
- }
- }
-
- /*! this is the text of a link put after brief descriptions. */
- virtual QCString trMore()
- { return "ÇáãÒíÏ ..."; }
-
- /*! put in the class documentation */
- virtual QCString trListOfAllMembers()
- { return "ÇÚÑÖ ßá ÇáÃÚÖÇÁ"; }
-
- /*! used as the title of the "list of all members" page of a class */
- virtual QCString trMemberList()
- { return "ÞÇÆãÉ ÇáÃÚÖÇÁ"; }
-
- /*! this is the first part of a sentence that is followed by a class name */
- virtual QCString trThisIsTheListOfAllMembers()
- { return "åÐå ÝÇÆãÉ Èßá ÇáÃÚÖÇÁ Ýí "; }
-
- /*! this is the remainder of the sentence after the class name */
- virtual QCString trIncludingInheritedMembers()
- { return ", ãÊÖãäÉ ßá ÇáÃÚÖÇÁ ÇáãæÑæËÉ"; }
-
- /*! this is put at the author sections at the bottom of man pages.
- * parameter s is name of the project name.
- */
- virtual QCString trGeneratedAutomatically(const char *s)
- { QCString result="Êã ÊßæíäåÇ ÂáíÇ ÈæÇÓØÉ Doxygen";
- if (s) result+=(QCString)" áÜ "+s;
- result+=" ãä ãáÝÇÊ ÇáãÕÏÑ.";
- return result;
- }
-
- /*! put after an enum name in the list of all members */
- virtual QCString trEnumName()
- { return "ÇáÅÓã ÇáÚÏÏí"; }
-
- /*! put after an enum value in the list of all members */
- virtual QCString trEnumValue()
- { return "ÇáÞíãÉ ÇáÚÏÏíÉ"; }
-
- /*! put after an undocumented member in the list of all members */
- virtual QCString trDefinedIn()
- { return "ãÚÑÝ Ýí"; }
-
- // quick reference sections
-
- /*! This is put above each page as a link to the list of all groups of
- * compounds or files (see the \\group command).
- */
- virtual QCString trModules()
- { return "ãßæäÇÊ"; }
-
- /*! This is put above each page as a link to the class hierarchy */
- virtual QCString trClassHierarchy()
- { return "ÇáÔßá ÇáåÑãí ááÝÆÉ"; }
-
- /*! This is put above each page as a link to the list of annotated classes */
- virtual QCString trCompoundList()
- {
- if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
- {
- return "åíÇßá ÇáÈíÇäÇÊ";
- }
- else
- {
- return "ÞÇÆãÉ ÇáÝÆÇÊ";
- }
- }
-
- /*! This is put above each page as a link to the list of documented files */
- virtual QCString trFileList()
- { return "ÞÇÆãÉ ÇáãáÝÇÊ"; }
-
- /*! This is put above each page as a link to the list of all verbatim headers */
- virtual QCString trHeaderFiles()
- { return "ÇáãáÝÇÊ ÇáÑÃÓíÉ"; }
-
- /*! This is put above each page as a link to all members of compounds. */
- virtual QCString trCompoundMembers()
- {
- if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
- {
- return "ÍÞæá ÇáÈíÇäÇÊ";
- }
- else
- {
- return "ÃÚÖÇÁ ÇáÝÆÉ";
- }
- }
-
- /*! This is put above each page as a link to all members of files. */
- virtual QCString trFileMembers()
- {
- if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
- {
- return "ÇáÚæÇã";
- }
- else
- {
- return "ÃÚÖÇÁ ÇáãáÝ";
- }
- }
-
- /*! This is put above each page as a link to all related pages. */
- virtual QCString trRelatedPages()
- { return "ÕÝÍÇÊ ÐÇÊ ÕáÉ"; }
-
- /*! This is put above each page as a link to all examples. */
- virtual QCString trExamples()
- { return "̋臃"; }
-
- /*! This is put above each page as a link to the search engine. */
- virtual QCString trSearch()
- { return "ÈÍË"; }
-
- /*! This is an introduction to the class hierarchy. */
- virtual QCString trClassHierarchyDescription()
- { return "ÞÇÆãÉ ÇáÊæÇÑË åÐå Êã ÊÑÊíÈåÇ ÃÈÌÏíÇ ÈÕæÑÉ ÊÞÑíÈíÉ ¡ "
- "æáßä áíÓ ÈÕæÑÉ ÊÇãÉ:";
- }
-
- /*! This is an introduction to the list with all files. */
- virtual QCString trFileListDescription(bool extractAll)
- {
- QCString result="åÐå ÞÇÆãÉ Èßá ÇáãáÝÇÊ";
- if (!extractAll) result+="ÇáãæËÞÉ ";
- result+="ãÚ æÕÝ ãÎÊÕÑ :";
- return result;
- }
-
- /*! This is an introduction to the annotated compound list. */
- virtual QCString trCompoundListDescription()
- {
-
- if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
- {
- return "åÐå åí åíÇßá ÇáÈíÇäÇÊ ãÚ æÕÝ ãÎÊÕÑ:";
- }
- else
- {
- return "åÐå åí ÇáÝÆÇÊ ¡ ÇáÈäÇÁÇÊ ¡"
- "ÇáÅÊÍÇÏÇÊ æÇáæÇÌåÇÊ ãÚ æÕÝ ãÎÊÕÑ:";
- }
- }
-
- /*! This is an introduction to the page with all class members. */
- virtual QCString trCompoundMembersDescription(bool extractAll)
- {
- QCString result="åÐå ÞÇÆãÉ Èßá ";
-
- if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
- {
- result+="ÍÞæá ÇáÈäÇÁÇÊ æÇáÅÊÍÇÏÇÊ";
- }
- else
- {
- result+="ÃÚÖÇÁ ÇáÝÆÉ";
- }
- if (!extractAll)
- {
- result+=" ÇáãæËÞÉ ";
- }
- result+=" ãÚ æÕáÇÊ Åáì ";
- if (!extractAll)
- {
- if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
- {
- result+="ÊæËíÞ ÇáÈäÇÁ/ÇáÅÊÍÇÏ áßá ÍÞá:";
- }
- else
- {
- result+="ÊæËíÞ ÇáÝÆÉ áßá ÚÖæ:";
- }
- }
- else
- {
- if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
- {
- result+="ÇáÈäÇÁÇÊ/ÇáÅÊÍÇÏÇÊ ÇáÊí íäÊãæä ÅáíåÇ:";
- }
- else
- {
- result+="ÇáÝÆÇÊ ÇáÊí íäÊãæä ÅáíåÇ:";
- }
- }
- return result;
- }
-
- /*! This is an introduction to the page with all file members. */
- virtual QCString trFileMembersDescription(bool extractAll)
- {
- QCString result="Here is a list of all ";
- if (!extractAll) result+="documented ";
-
- if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
- {
- result+="functions, variables, defines, enums, and typedefs";
- }
- else
- {
- result+="file members";
- }
- result+=" with links to ";
- if (extractAll)
- result+="the files they belong to:";
- else
- result+="the documentation:";
- return result;
- }
-
- /*! This is an introduction to the page with the list of all header files. */
- virtual QCString trHeaderFilesDescription()
- { return "Here are the header files that make up the API:"; }
-
- /*! This is an introduction to the page with the list of all examples */
- virtual QCString trExamplesDescription()
- { return "åÐå ÞÇÆãÉ Èßá ÇáÃãËáÉ:"; }
-
- /*! This is an introduction to the page with the list of related pages */
- virtual QCString trRelatedPagesDescription()
- { return "åÐå ÞÇÆãÉ Èßá ÕÝÍÇÊ ÇáÊæËíÞ ÐÇÊ ÇáÕáÉ:"; }
-
- /*! This is an introduction to the page with the list of class/file groups */
- virtual QCString trModulesDescription()
- { return "åÐå ÞÇÆãÉ Èßá ÇáãßæäÇÊ:"; }
-
- /*! This sentences is used in the annotated class/file lists if no brief
- * description is given.
- */
- virtual QCString trNoDescriptionAvailable()
- { return "áÇ íæÌÏ æÕÝ ãÊÇÍ"; }
-
- // index titles (the project name is prepended for these)
-
-
- /*! This is used in HTML as the title of index.html. */
- virtual QCString trDocumentation()
- { return "ÇáÊæËíÞ"; }
-
- /*! This is used in LaTeX as the title of the chapter with the
- * index of all groups.
- */
- virtual QCString trModuleIndex()
- { return "ÝåÑÓ ÇáãßæäÇÊ"; }
-
- /*! This is used in LaTeX as the title of the chapter with the
- * class hierarchy.
- */
- virtual QCString trHierarchicalIndex()
- { return "ÇáÝåÑÓ ÇáåÑãí"; }
-
- /*! This is used in LaTeX as the title of the chapter with the
- * annotated compound index.
- */
- virtual QCString trCompoundIndex()
- {
- if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
- {
- return "ÝåÑÓ åíßá ÇáÈíÇäÇÊ";
- }
- else
- {
- return "ÝåÑÓ ÇáÝÆÉ";
- }
- }
-
- /*! This is used in LaTeX as the title of the chapter with the
- * list of all files.
- */
- virtual QCString trFileIndex()
- { return "ÝåÑÓ ÇáãáÝÇÊ"; }
-
- /*! This is used in LaTeX as the title of the chapter containing
- * the documentation of all groups.
- */
- virtual QCString trModuleDocumentation()
- { return "ÊæËíÞ Çáãßæä"; }
-
- /*! This is used in LaTeX as the title of the chapter containing
- * the documentation of all classes, structs and unions.
- */
- virtual QCString trClassDocumentation()
- {
- if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
- {
- return "ÝåÑÓ åíßá ÇáÈíÇäÇÊ";
- }
- else
- {
- return "ÝåÑÓ ÇáÝÆÉ";
- }
- }
-
- /*! This is used in LaTeX as the title of the chapter containing
- * the documentation of all files.
- */
- virtual QCString trFileDocumentation()
- { return "ÊæËíÞ ÇáãáÝÇÊ"; }
-
- /*! This is used in LaTeX as the title of the chapter containing
- * the documentation of all examples.
- */
- virtual QCString trExampleDocumentation()
- { return "ÊæËíÞ ÇáÃãËáÉ"; }
-
- /*! This is used in LaTeX as the title of the chapter containing
- * the documentation of all related pages.
- */
- virtual QCString trPageDocumentation()
- { return "ÊæËíÞ ÇáÕÝÍÇÊ"; }
-
- /*! This is used in LaTeX as the title of the document */
- virtual QCString trReferenceManual()
- { return "ÇáßÊíÈ ÇáãÑÌÚí"; }
-
- /*! This is used in the documentation of a file as a header before the
- * list of defines
- */
- virtual QCString trDefines()
- { return "ÇáÊÚÑíÝÇÊ"; }
-
- /*! This is used in the documentation of a file as a header before the
- * list of function prototypes
- */
- virtual QCString trFuncProtos()
- { return "Function Prototypes"; }
-
- /*! This is used in the documentation of a file as a header before the
- * list of typedefs
- */
- virtual QCString trTypedefs()
- { return "Typedefs"; }
-
- /*! This is used in the documentation of a file as a header before the
- * list of enumerations
- */
- virtual QCString trEnumerations()
- { return "ÇáÚÏÏíÇÊ"; }
-
- /*! This is used in the documentation of a file as a header before the
- * list of (global) functions
- */
- virtual QCString trFunctions()
- { return "ÇáÏæÇá"; }
-
- /*! This is used in the documentation of a file as a header before the
- * list of (global) variables
- */
- virtual QCString trVariables()
- { return "ÇáãÊÛíÑÇÊ"; }
-
- /*! This is used in the documentation of a file as a header before the
- * list of (global) variables
- */
- virtual QCString trEnumerationValues()
- { return "Enumerator"; }
-
- /*! This is used in the documentation of a file before the list of
- * documentation blocks for defines
- */
- virtual QCString trDefineDocumentation()
- { return "Define Documentation"; }
-
- /*! This is used in the documentation of a file/namespace before the list
- * of documentation blocks for function prototypes
- */
- virtual QCString trFunctionPrototypeDocumentation()
- { return "Function Prototype Documentation"; }
-
- /*! This is used in the documentation of a file/namespace before the list
- * of documentation blocks for typedefs
- */
- virtual QCString trTypedefDocumentation()
- { return "Typedef Documentation"; }
-
- /*! This is used in the documentation of a file/namespace before the list
- * of documentation blocks for enumeration types
- */
- virtual QCString trEnumerationTypeDocumentation()
- { return "Enumeration Type Documentation"; }
-
- /*! This is used in the documentation of a file/namespace before the list
- * of documentation blocks for enumeration values
- */
- virtual QCString trEnumerationValueDocumentation()
- { return "Enumerator Documentation"; }
-
- /*! This is used in the documentation of a file/namespace before the list
- * of documentation blocks for functions
- */
- virtual QCString trFunctionDocumentation()
- { return "ÊæËíÞ ÇáÏÇáÉ"; }
-
- /*! This is used in the documentation of a file/namespace before the list
- * of documentation blocks for variables
- */
- virtual QCString trVariableDocumentation()
- { return "ÊæËíÞ ÇáãÊÛíÑ"; }
-
- /*! This is used in the documentation of a file/namespace/group before
- * the list of links to documented compounds
- */
- virtual QCString trCompounds()
- {
- if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
- {
- return "åíÇßá ÇáÈíÇäÇÊ";
- }
- else
- {
- return "ÇáÝÆÇÊ";
- }
- }
-
- /*! This is used in the standard footer of each page and indicates when
- * the page was generated
- */
- virtual QCString trGeneratedAt(const char *date,const char *projName)
- {
- QCString result=(QCString)"Generated on "+date;
- if (projName) result+=(QCString)" for "+projName;
- result+=(QCString)" by";
- return result;
- }
- /*! This is part of the sentence used in the standard footer of each page.
- */
- virtual QCString trWrittenBy()
- {
- return "ßÊÈ ÈæÇÓØÉ";
- }
-
- /*! this text is put before a class diagram */
- virtual QCString trClassDiagram(const char *clName)
- {
- return (QCString)"Inheritance diagram for "+clName+":";
- }
-
- /*! this text is generated when the \\internal command is used. */
- virtual QCString trForInternalUseOnly()
- { return "ááÇÓÊÎÏÇã ÇáÏÇÎáí ÝÞØ."; }
-
- /*! this text is generated when the \\reimp command is used. */
- virtual QCString trReimplementedForInternalReasons()
- { return "Reimplemented for internal reasons; the API is not affected."; }
-
- /*! this text is generated when the \\warning command is used. */
- virtual QCString trWarning()
- { return "ÊäÈíå"; }
-
- /*! this text is generated when the \\bug command is used. */
- virtual QCString trBugsAndLimitations()
- { return "Bugs and limitations"; }
-
- /*! this text is generated when the \\version command is used. */
- virtual QCString trVersion()
- { return "ÅÕÏÇÑÉ"; }
-
- /*! this text is generated when the \\date command is used. */
- virtual QCString trDate()
- { return "ÊÇÑíÎ"; }
-
- /*! this text is generated when the \\return command is used. */
- virtual QCString trReturns()
- { return "Returns"; }
-
- /*! this text is generated when the \\sa command is used. */
- virtual QCString trSeeAlso()
- { return "ÇäÙÑ ÃíÖÇ"; }
-
- /*! this text is generated when the \\param command is used. */
- virtual QCString trParameters()
- { return "Parameters"; }
-
- /*! this text is generated when the \\exception command is used. */
- virtual QCString trExceptions()
- { return "ÇÓÊËäÇÁÇÊ"; }
-
- /*! this text is used in the title page of a LaTeX document. */
- virtual QCString trGeneratedBy()
- { return "ÇäÊÌÊ ÈæÇÓØÉ"; }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 0.49-990307
-//////////////////////////////////////////////////////////////////////////
-
- /*! used as the title of page containing all the index of all namespaces. */
- virtual QCString trNamespaceList()
- { return "ÞÇÆãÉ ãÌÇáÇÊ ÇáÃÓãÇÁ"; }
-
- /*! used as an introduction to the namespace list */
- virtual QCString trNamespaceListDescription(bool extractAll)
- {
- QCString result="Here is a list of all ";
- if (!extractAll) result+="documented ";
- result+="namespaces with brief descriptions:";
- return result;
- }
-
- /*! used in the class documentation as a header before the list of all
- * friends of a class
- */
- virtual QCString trFriends()
- { return "Friends"; }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 0.49-990405
-//////////////////////////////////////////////////////////////////////////
-
- /*! used in the class documentation as a header before the list of all
- * related classes
- */
- virtual QCString trRelatedFunctionDocumentation()
- { return "Friends And Related Function Documentation"; }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 0.49-990425
-//////////////////////////////////////////////////////////////////////////
-
- /*! used as the title of the HTML page of a class/struct/union */
- virtual QCString trCompoundReference(const char *clName,
- ClassDef::CompoundType compType,
- bool isTemplate)
- {
- QCString result=(QCString)clName;
- switch(compType)
- {
- case ClassDef::Class: result+=" Class"; break;
- case ClassDef::Struct: result+=" Struct"; break;
- case ClassDef::Union: result+=" Union"; break;
- case ClassDef::Interface: result+=" Interface"; break;
- case ClassDef::Protocol: result+=" Protocol"; break;
- case ClassDef::Category: result+=" Category"; break;
- case ClassDef::Exception: result+=" Exception"; break;
- }
- if (isTemplate) result+=" Template";
- result+=" Reference";
- return result;
- }
-
- /*! used as the title of the HTML page of a file */
- virtual QCString trFileReference(const char *fileName)
- {
- QCString result=fileName;
- result+=" File Reference";
- return result;
- }
-
- /*! used as the title of the HTML page of a namespace */
- virtual QCString trNamespaceReference(const char *namespaceName)
- {
- QCString result=namespaceName;
- result+=" Namespace Reference";
- return result;
- }
-
- virtual QCString trPublicMembers()
- { return "Public Member Functions"; }
- virtual QCString trPublicSlots()
- { return "Public Slots"; }
- virtual QCString trSignals()
- { return "Signals"; }
- virtual QCString trStaticPublicMembers()
- { return "Static Public Member Functions"; }
- virtual QCString trProtectedMembers()
- { return "Protected Member Functions"; }
- virtual QCString trProtectedSlots()
- { return "Protected Slots"; }
- virtual QCString trStaticProtectedMembers()
- { return "Static Protected Member Functions"; }
- virtual QCString trPrivateMembers()
- { return "Private Member Functions"; }
- virtual QCString trPrivateSlots()
- { return "Private Slots"; }
- virtual QCString trStaticPrivateMembers()
- { return "Static Private Member Functions"; }
-
- /*! this function is used to produce a comma-separated list of items.
- * use generateMarker(i) to indicate where item i should be put.
- */
- virtual QCString trWriteList(int numEntries)
- {
- QCString result;
- int i;
- // the inherits list contain `numEntries' classes
- for (i=0;i<numEntries;i++)
- {
- // use generateMarker to generate placeholders for the class links!
- result+=generateMarker(i); // generate marker for entry i in the list
- // (order is left to right)
-
- if (i!=numEntries-1) // not the last entry, so we need a separator
- {
- if (i<numEntries-2) // not the fore last entry
- result+=", ";
- else // the fore last entry
- result+=", and ";
- }
- }
- return result;
- }
-
- /*! used in class documentation to produce a list of base classes,
- * if class diagrams are disabled.
- */
- virtual QCString trInheritsList(int numEntries)
- {
- return "Inherits "+trWriteList(numEntries)+".";
- }
-
- /*! used in class documentation to produce a list of super classes,
- * if class diagrams are disabled.
- */
- virtual QCString trInheritedByList(int numEntries)
- {
- return "Inherited by "+trWriteList(numEntries)+".";
- }
-
- /*! used in member documentation blocks to produce a list of
- * members that are hidden by this one.
- */
- virtual QCString trReimplementedFromList(int numEntries)
- {
- return "Reimplemented from "+trWriteList(numEntries)+".";
- }
-
- /*! used in member documentation blocks to produce a list of
- * all member that overwrite the implementation of this member.
- */
- virtual QCString trReimplementedInList(int numEntries)
- {
- return "Reimplemented in "+trWriteList(numEntries)+".";
- }
-
- /*! This is put above each page as a link to all members of namespaces. */
- virtual QCString trNamespaceMembers()
- { return "Namespace Members"; }
-
- /*! This is an introduction to the page with all namespace members */
- virtual QCString trNamespaceMemberDescription(bool extractAll)
- {
- QCString result="Here is a list of all ";
- if (!extractAll) result+="documented ";
- result+="namespace members with links to ";
- if (extractAll)
- result+="the namespace documentation for each member:";
- else
- result+="the namespaces they belong to:";
- return result;
- }
- /*! This is used in LaTeX as the title of the chapter with the
- * index of all namespaces.
- */
- virtual QCString trNamespaceIndex()
- { return "ÝåÑÓ ãÌÇáÇÊ ÇáÃÓãÇÁ"; }
-
- /*! This is used in LaTeX as the title of the chapter containing
- * the documentation of all namespaces.
- */
- virtual QCString trNamespaceDocumentation()
- { return "ÊæËíÞ ãÌÇáÇÊ ÇáÃÓãÇÁ"; }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 0.49-990522
-//////////////////////////////////////////////////////////////////////////
-
- /*! This is used in the documentation before the list of all
- * namespaces in a file.
- */
- virtual QCString trNamespaces()
- { return "ãÌÇáÇÊ ÇáÃÓãÇÁ"; }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 0.49-990728
-//////////////////////////////////////////////////////////////////////////
-
- /*! This is put at the bottom of a class documentation page and is
- * followed by a list of files that were used to generate the page.
- */
- virtual QCString trGeneratedFromFiles(ClassDef::CompoundType compType,
- bool single)
- { // here s is one of " Class", " Struct" or " Union"
- // single is true implies a single file
- QCString result=(QCString)"ÊæËíÞ ";
- switch(compType)
- {
- case ClassDef::Class: result+="åÐå ÇáÝÆÉ"; break;
- case ClassDef::Struct: result+="åÐÇ ÇáÈäÇÁ"; break;
- case ClassDef::Union: result+="åÐÇ ÇáÅÊÍÇÏ"; break;
- case ClassDef::Interface: result+="åÐå ÇáæÇÌåÉ"; break;
- case ClassDef::Protocol: result+="åÐÇ ÇáÈÑæÊæßæá"; break;
- case ClassDef::Category: result+="åÐÇ ÇáÊÕäíÝ"; break;
- case ClassDef::Exception: result+="åÐÇ ÇáÅÓÊËäÇÁ"; break;
- }
- result+=" Êã Êßæíäå ãä ";
- if (single) result+="åÐÇ ÇáãáÝ:"; else result+="åÐå ÇáãáÝÇÊ:";
- return result;
- }
-
- /*! This is in the (quick) index as a link to the alphabetical compound
- * list.
- */
- virtual QCString trAlphabeticalList()
- { return "ÞÇÆãÉ ÃÈÌÏíÉ"; }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 0.49-990901
-//////////////////////////////////////////////////////////////////////////
-
- /*! This is used as the heading text for the retval command. */
- virtual QCString trReturnValues()
- { return "Þíã ÇáÚæÏÉ"; }
-
- /*! This is in the (quick) index as a link to the main page (index.html)
- */
- virtual QCString trMainPage()
- { return "ÇáÕÝÍÉ ÇáÑÆíÓíÉ"; }
-
- /*! This is used in references to page that are put in the LaTeX
- * documentation. It should be an abbreviation of the word page.
- */
- virtual QCString trPageAbbreviation()
- { return "Õ."; }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 0.49-991003
-//////////////////////////////////////////////////////////////////////////
-
- virtual QCString trSources()
- {
- return "ãÕÇÏÑ";
- }
- virtual QCString trDefinedAtLineInSourceFile()
- {
- return "Definition at line @0 of file @1.";
- }
- virtual QCString trDefinedInSourceFile()
- {
- return "Definition in file @0.";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 0.49-991205
-//////////////////////////////////////////////////////////////////////////
-
- virtual QCString trDeprecated()
- {
- return "Deprecated";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.0.0
-//////////////////////////////////////////////////////////////////////////
-
- /*! this text is put before a collaboration diagram */
- virtual QCString trCollaborationDiagram(const char *clName)
- {
- return (QCString)"ÑÓã ÇáÊÚÇæä áÜ "+clName+":";
- }
- /*! this text is put before an include dependency graph */
- virtual QCString trInclDepGraph(const char *fName)
- {
- return (QCString)"ÑÓã ÇÚÊãÇÏíÉ ÇáÊÖãíä áÜ "+fName+":";
- }
- /*! header that is put before the list of constructor/destructors. */
- virtual QCString trConstructorDocumentation()
- {
- return "ÊæËíÞ ÏæÇá ÇáÈäÇÁ æÇáåÏã";
- }
- /*! Used in the file documentation to point to the corresponding sources. */
- virtual QCString trGotoSourceCode()
- {
- return "ÇÐåÈ Åáì ÇáßæÏ ÇáÎÇÕ ÈåÐÇ ÇáãáÝ.";
- }
- /*! Used in the file sources to point to the corresponding documentation. */
- virtual QCString trGotoDocumentation()
- {
- return "ÇÐåÈ Åáì ÊæËíÞ åÐÇ ÇáãáÝ.";
- }
- /*! Text for the \\pre command */
- virtual QCString trPrecondition()
- {
- return "ÔÑØ ÓÇÈÞ";
- }
- /*! Text for the \\post command */
- virtual QCString trPostcondition()
- {
- return "ÔÑØ áÇÍÞ";
- }
- /*! Text for the \\invariant command */
- virtual QCString trInvariant()
- {
- return "ËÇÈÊ";
- }
- /*! Text shown before a multi-line variable/enum initialization */
- virtual QCString trInitialValue()
- {
- return "ÞíãÉ ãÈÏÆíÉ:";
- }
- /*! Text used the source code in the file index */
- virtual QCString trCode()
- {
- return "ßæÏ";
- }
- virtual QCString trGraphicalHierarchy()
- {
- return "ÇáÔßá ÇáÑÓæãí ááÝÆÇÊ";
- }
- virtual QCString trGotoGraphicalHierarchy()
- {
- return "ÇÐåÈ Åáì ÇáÔßá ÇáåÑãí ÇáÑÓæãí ááÝÆÇÊ";
- }
- virtual QCString trGotoTextualHierarchy()
- {
- return "ÇÐåÈ Åáì ÇáÔßá ÇáåÑãí ÇáäÕí ááÝÆÇÊ";
- }
- virtual QCString trPageIndex()
- {
- return "ÝåÑÓ ÇáÕÝÍÇÊ";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.1.0
-//////////////////////////////////////////////////////////////////////////
-
- virtual QCString trNote()
- {
- return "ãáÇÍÙÇÊ";
- }
- virtual QCString trPublicTypes()
- {
- return "ÃäæÇÚ ÚÇãÉ";
- }
- virtual QCString trPublicAttribs()
- {
- if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
- {
- return "ÍÞæá ÈíÇäÇÊ";
- }
- else
- {
- return "ÕÝÇÊ ÚÇãÉ";
- }
- }
- virtual QCString trStaticPublicAttribs()
- {
- return "ÕÝÇÊ ÓÇßäÉ ÚÇãÉ";
- }
- virtual QCString trProtectedTypes()
- {
- return "ÃäæÇÚ ãÍãíÉ";
- }
- virtual QCString trProtectedAttribs()
- {
- return "ÕÝÇÊ ãÍãíÉ";
- }
- virtual QCString trStaticProtectedAttribs()
- {
- return "ÕÝÇÊ ÓÇßäÉ ãÍãíÉ";
- }
- virtual QCString trPrivateTypes()
- {
- return "ÃäæÇÚ ÎÇÕÉ";
- }
- virtual QCString trPrivateAttribs()
- {
- return "ÕÝÇÊ ÎÇÕÉ";
- }
- virtual QCString trStaticPrivateAttribs()
- {
- return "ÕÝÇÊ ÓÇßäÉ ÎÇÕÉ";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.1.3
-//////////////////////////////////////////////////////////////////////////
-
- /*! Used as a marker that is put before a \\todo item */
- virtual QCString trTodo()
- {
- return "ãåÇã";
- }
- /*! Used as the header of the todo list */
- virtual QCString trTodoList()
- {
- return "ÞÇÆãÉ ÇáãåÇã";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.1.4
-//////////////////////////////////////////////////////////////////////////
-
- virtual QCString trReferencedBy()
- {
- return "ÐßÑ ÈæÇÓØÉ";
- }
- virtual QCString trRemarks()
- {
- return "ÊÚáíÞÇÊ";
- }
- virtual QCString trAttention()
- {
- return "ÇäÊÈå";
- }
- virtual QCString trInclByDepGraph()
- {
- return "åÐÇ ÇáÑÓã íæÖÍ ÇáãáÝÇÊ ÇáÊí ÖãäÊ åÐÇ ÇáãáÝ"
- "ÈÕæÑÉ ãÈÇÔÑÉ Ãæ ÛíÑ ãÈÇÔÑÉ:";
- }
- virtual QCString trSince()
- {
- return "ãäÐ";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.1.5
-//////////////////////////////////////////////////////////////////////////
-
- /*! title of the graph legend page */
- virtual QCString trLegendTitle()
- {
- return "Graph Legend";
- }
- /*! page explaining how the dot graph's should be interpreted
- * The %A in the text below are to prevent link to classes called "A".
- */
- virtual QCString trLegendDocs()
- {
- return
- "This page explains how to interpret the graphs that are generated "
- "by doxygen.<p>\n"
- "Consider the following example:\n"
- "\\code\n"
- "/*! Invisible class because of truncation */\n"
- "class Invisible { };\n\n"
- "/*! Truncated class, inheritance relation is hidden */\n"
- "class Truncated : public Invisible { };\n\n"
- "/* Class not documented with doxygen comments */\n"
- "class Undocumented { };\n\n"
- "/*! Class that is inherited using public inheritance */\n"
- "class PublicBase : public Truncated { };\n\n"
- "/*! A template class */\n"
- "template<class T> class Templ { };\n\n"
- "/*! Class that is inherited using protected inheritance */\n"
- "class ProtectedBase { };\n\n"
- "/*! Class that is inherited using private inheritance */\n"
- "class PrivateBase { };\n\n"
- "/*! Class that is used by the Inherited class */\n"
- "class Used { };\n\n"
- "/*! Super class that inherits a number of other classes */\n"
- "class Inherited : public PublicBase,\n"
- " protected ProtectedBase,\n"
- " private PrivateBase,\n"
- " public Undocumented\n"
- " public Templ<int>\n"
- "{\n"
- " private:\n"
- " Used *m_usedClass;\n"
- "};\n"
- "\\endcode\n"
- "If the \\c MAX_DOT_GRAPH_HEIGHT tag in the configuration file "
- "is set to 240 this will result in the following graph:"
- "<p><center><img alt=\"\" src=\"graph_legend."+Config_getEnum("DOT_IMAGE_FORMAT")+"\"></center>\n"
- "<p>\n"
- "The boxes in the above graph have the following meaning:\n"
- "<ul>\n"
- "<li>%A filled black box represents the struct or class for which the "
- "graph is generated.\n"
- "<li>%A box with a black border denotes a documented struct or class.\n"
- "<li>%A box with a grey border denotes an undocumented struct or class.\n"
- "<li>%A box with a red border denotes a documented struct or class for"
- "which not all inheritance/containment relations are shown. %A graph is "
- "truncated if it does not fit within the specified boundaries.\n"
- "</ul>\n"
- "The arrows have the following meaning:\n"
- "<ul>\n"
- "<li>%A dark blue arrow is used to visualize a public inheritance "
- "relation between two classes.\n"
- "<li>%A dark green arrow is used for protected inheritance.\n"
- "<li>%A dark red arrow is used for private inheritance.\n"
- "<li>%A purple dashed arrow is used if a class is contained or used "
- "by another class. The arrow is labeled with the variable(s) "
- "through which the pointed class or struct is accessible.\n"
- "<li>%A yellow dashed arrow denotes a relation between a template instance and "
- "the template class it was instantiated from. The arrow is labeled with "
- "the template parameters of the instance.\n"
- "</ul>\n";
- }
- /*! text for the link to the legend page */
- virtual QCString trLegend()
- {
- return "legend";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.2.0
-//////////////////////////////////////////////////////////////////////////
-
- /*! Used as a marker that is put before a test item */
- virtual QCString trTest()
- {
- return "ÇÎÊÈÇÑ";
- }
- /*! Used as the header of the test list */
- virtual QCString trTestList()
- {
- return "ÞÇÆãÉ ÇáÅÎÊÈÇÑÇÊ";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.2.1
-//////////////////////////////////////////////////////////////////////////
-
- /*! Used as a section header for KDE-2 IDL methods */
- virtual QCString trDCOPMethods()
- {
- return "DCOP Member Functions";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.2.2
-//////////////////////////////////////////////////////////////////////////
-
- /*! Used as a section header for IDL properties */
- virtual QCString trProperties()
- {
- return "ÎÕÇÆÕ";
- }
- /*! Used as a section header for IDL property documentation */
- virtual QCString trPropertyDocumentation()
- {
- return "ÊæËíÞ ÇáÎÇÕíÉ";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.2.4
-//////////////////////////////////////////////////////////////////////////
-
- /*! Used for Java interfaces in the summary section of Java packages */
- virtual QCString trInterfaces()
- {
- return "æÇÌåÇÊ";
- }
- /*! Used for Java classes in the summary section of Java packages */
- virtual QCString trClasses()
- {
- if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
- {
- return "åíÇßá ÇáÈíÇäÇÊ";
- }
- else
- {
- return "ÝÆÇÊ";
- }
- }
- /*! Used as the title of a Java package */
- virtual QCString trPackage(const char *name)
- {
- return (QCString)"ÍÒãÉ "+name;
- }
- /*! Title of the package index page */
- virtual QCString trPackageList()
- {
- return "ÞÇÆãÉ ÇáÍÒã";
- }
- /*! The description of the package index page */
- virtual QCString trPackageListDescription()
- {
- return "åÐå åí ÇáÍÒã ãÚ æÕÝ ãÎÊÕÑ áßá ãäåÇ )Åä æÌÏ( :";
- }
- /*! The link name in the Quick links header for each page */
- virtual QCString trPackages()
- {
- return "ÍÒã";
- }
- /*! Used as a chapter title for Latex & RTF output */
- virtual QCString trPackageDocumentation()
- {
- return "ÊæËíÞ ÇáÍÒã";
- }
- /*! Text shown before a multi-line define */
- virtual QCString trDefineValue()
- {
- return "ÇáÞíãÉ:";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.2.5
-//////////////////////////////////////////////////////////////////////////
-
- /*! Used as a marker that is put before a \\bug item */
- virtual QCString trBug()
- {
- return "ËÛÑÉ";
- }
- /*! Used as the header of the bug list */
- virtual QCString trBugList()
- {
- return "ÞÇÆãÉ ÇáËÛÑÇÊ";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.2.6
-//////////////////////////////////////////////////////////////////////////
-
- /*! Used as ansicpg for RTF file
- *
- * The following table shows the correlation of Charset name, Charset Value and
- * <pre>
- * Codepage number:
- * Charset Name Charset Value(hex) Codepage number
- * ------------------------------------------------------
- * DEFAULT_CHARSET 1 (x01)
- * SYMBOL_CHARSET 2 (x02)
- * OEM_CHARSET 255 (xFF)
- * ANSI_CHARSET 0 (x00) 1252
- * RUSSIAN_CHARSET 204 (xCC) 1251
- * EE_CHARSET 238 (xEE) 1250
- * GREEK_CHARSET 161 (xA1) 1253
- * TURKISH_CHARSET 162 (xA2) 1254
- * BALTIC_CHARSET 186 (xBA) 1257
- * HEBREW_CHARSET 177 (xB1) 1255
- * ARABIC _CHARSET 178 (xB2) 1256
- * SHIFTJIS_CHARSET 128 (x80) 932
- * HANGEUL_CHARSET 129 (x81) 949
- * GB2313_CHARSET 134 (x86) 936
- * CHINESEBIG5_CHARSET 136 (x88) 950
- * </pre>
- *
- */
- virtual QCString trRTFansicp()
- {
- return "1256";
- }
-
-
- /*! Used as ansicpg for RTF fcharset
- * \see trRTFansicp() for a table of possible values.
- */
- virtual QCString trRTFCharSet()
- {
- return "0";
- }
-
- /*! Used as header RTF general index */
- virtual QCString trRTFGeneralIndex()
- {
- return "ÝåÑÓ";
- }
-
- /*! This is used for translation of the word that will possibly
- * be followed by a single name or by a list of names
- * of the category.
- */
- virtual QCString trClass(bool /*first_capital*/, bool singular)
- {
- QCString result("ÝÆÉ");
- if (!singular) result="ÝÆÇÊ";
- return result;
- }
-
- /*! This is used for translation of the word that will possibly
- * be followed by a single name or by a list of names
- * of the category.
- */
- virtual QCString trFile(bool /*first_capital*/, bool singular)
- {
- QCString result("ãáÝ");
- if (!singular) result="ãáÝÇÊ";
- return result;
- }
-
- /*! This is used for translation of the word that will possibly
- * be followed by a single name or by a list of names
- * of the category.
- */
- virtual QCString trNamespace(bool /*first_capital*/, bool singular)
- {
- QCString result("ãÌÇá ÃÓãÇÁ");
- if (!singular) result="ãÌÇáÇÊ ÃÓãÇÁ";
- return result;
- }
-
- /*! This is used for translation of the word that will possibly
- * be followed by a single name or by a list of names
- * of the category.
- */
- virtual QCString trGroup(bool /*first_capital*/, bool singular)
- {
- QCString result("ãÌãæÚÉ");
- if (!singular) result="ãÌãæÚÇÊ";
- return result;
- }
-
- /*! This is used for translation of the word that will possibly
- * be followed by a single name or by a list of names
- * of the category.
- */
- virtual QCString trPage(bool /*first_capital*/, bool singular)
- {
- QCString result("ÕÝÍÉ");
- if (!singular) result="ÕÝÍÇÊ";
- return result;
- }
-
- /*! This is used for translation of the word that will possibly
- * be followed by a single name or by a list of names
- * of the category.
- */
- virtual QCString trMember(bool /*first_capital*/, bool singular)
- {
- QCString result("ÚÖæ");
- if (!singular) result="ÃÚÖÇÁ";
- return result;
- }
-
- /*! This is used for translation of the word that will possibly
- * be followed by a single name or by a list of names
- * of the category.
- */
- virtual QCString trField(bool /*first_capital*/, bool singular)
- {
- QCString result("ÍÞá");
- if (!singular) result="ÍÞæá";
- return result;
- }
-
- /*! This is used for translation of the word that will possibly
- * be followed by a single name or by a list of names
- * of the category.
- */
- virtual QCString trGlobal(bool /*first_capital*/, bool singular)
- {
- QCString result("ÚÇã");
- if (!singular) result="򾂋";
- return result;
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.2.7
-//////////////////////////////////////////////////////////////////////////
-
- /*! This text is generated when the \\author command is used and
- * for the author section in man pages. */
- virtual QCString trAuthor(bool /*first_capital*/, bool singular)
- {
- QCString result("ÇáãÄáÝ");
- if (!singular) result="ÇáãÄáÝæä";
- return result;
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.2.11
-//////////////////////////////////////////////////////////////////////////
-
- /*! This text is put before the list of members referenced by a member
- */
- virtual QCString trReferences()
- {
- return "ãÑÌÚíÇÊ";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.2.13
-//////////////////////////////////////////////////////////////////////////
-
- /*! used in member documentation blocks to produce a list of
- * members that are implemented by this one.
- */
- virtual QCString trImplementedFromList(int numEntries)
- {
- return "Implements "+trWriteList(numEntries)+".";
- }
-
- /*! used in member documentation blocks to produce a list of
- * all members that implement this abstract member.
- */
- virtual QCString trImplementedInList(int numEntries)
- {
- return "Implemented in "+trWriteList(numEntries)+".";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.2.16
-//////////////////////////////////////////////////////////////////////////
-
- /*! used in RTF documentation as a heading for the Table
- * of Contents.
- */
- virtual QCString trRTFTableOfContents()
- {
- return "ÌÏæá ÇáãÍÊæíÇÊ";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.2.17
-//////////////////////////////////////////////////////////////////////////
-
- /*! Used as the header of the list of item that have been
- * flagged deprecated
- */
- virtual QCString trDeprecatedList()
- {
- return "Deprecated List";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.2.18
-//////////////////////////////////////////////////////////////////////////
-
- /*! Used as a header for declaration section of the events found in
- * a C# program
- */
- virtual QCString trEvents()
- {
- return "ÇáÃÍÏÇË";
- }
- /*! Header used for the documentation section of a class' events. */
- virtual QCString trEventDocumentation()
- {
- return "ÊæËíÞ ÇáÃÍÏÇË";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.3
-//////////////////////////////////////////////////////////////////////////
-
- /*! Used as a heading for a list of Java class types with package scope.
- */
- virtual QCString trPackageTypes()
- {
- return "ÃäæÇÚ ÇáÍÒãÉ";
- }
- /*! Used as a heading for a list of Java class functions with package
- * scope.
- */
- virtual QCString trPackageMembers()
- {
- return "ÏæÇá ÇáÍÒãÉ";
- }
- /*! Used as a heading for a list of static Java class functions with
- * package scope.
- */
- virtual QCString trStaticPackageMembers()
- {
- return "ÏæÇá ÓÇßäÉ ááÍÒãÉ";
- }
- /*! Used as a heading for a list of Java class variables with package
- * scope.
- */
- virtual QCString trPackageAttribs()
- {
- return "ÎÕÇÆÕ ÇáÍÒãÉ";
- }
- /*! Used as a heading for a list of static Java class variables with
- * package scope.
- */
- virtual QCString trStaticPackageAttribs()
- {
- return "ÎÕÇÆÕ ÓÇßäÉ ááÍÒãÉ";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.3.1
-//////////////////////////////////////////////////////////////////////////
-
- /*! Used in the quick index of a class/file/namespace member list page
- * to link to the unfiltered list of all members.
- */
- virtual QCString trAll()
- {
- return "Çáßá";
- }
- /*! Put in front of the call graph for a function. */
- virtual QCString trCallGraph()
- {
- return "åÐÇ åæ ÑÓã ÇáÇÓÊÏÚÇÁ áåÐå ÇáÏÇáÉ:";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.3.3
-//////////////////////////////////////////////////////////////////////////
-
- /*! When the search engine is enabled this text is put in the header
- * of each page before the field where one can enter the text to search
- * for.
- */
- virtual QCString trSearchForIndex()
- {
- return "ÈÍË Úä";
- }
- /*! This string is used as the title for the page listing the search
- * results.
- */
- virtual QCString trSearchResultsTitle()
- {
- return "äÊÇÆÌ ÇáÈÍË";
- }
- /*! This string is put just before listing the search results. The
- * text can be different depending on the number of documents found.
- * Inside the text you can put the special marker $num to insert
- * the number representing the actual number of search results.
- * The @a numDocuments parameter can be either 0, 1 or 2, where the
- * value 2 represents 2 or more matches. HTML markup is allowed inside
- * the returned string.
- */
- virtual QCString trSearchResults(int numDocuments)
- {
- if (numDocuments==0)
- {
- return "ÚÝæÇ ¡ áÇ íæÌÏ ÊæËíÞ ãáÇÆã áãÇ ÈÍËÊ Úäå.";
- }
- else if (numDocuments==1)
- {
- return "æËíÞÉ ãäÇÓÈÉ áãÇ ÈÍËÊ Úäå. <b>1</b> Êã ÇáÚËæÑ Úáì.";
- }
- else
- {
- return "æËíÞÉ ãØÇÈÞÉ áãÇ ÈÍËÊ Úäå <b>$num</b> Êã ÅíÌÇÏ ."
- "æÊã ÊÑÊíÈåã ÈÍíË íßæä ÇáÃÞÑÈ áäÊíÌÉ ÇáÈÍË ÃæáÇ.";
- }
- }
- /*! This string is put before the list of matched words, for each search
- * result. What follows is the list of words that matched the query.
- */
- virtual QCString trSearchMatches()
- {
- return "íÊØÇÈÞ ãÚ:";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.3.8
-//////////////////////////////////////////////////////////////////////////
-
- /*! This is used in HTML as the title of page with source code for file filename
- */
- virtual QCString trSourceFile(QCString& filename)
- {
- return " ãáÝ ÇáãÕÏÑ" + filename ;
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.3.9
-//////////////////////////////////////////////////////////////////////////
-
- /*! This is used as the name of the chapter containing the directory
- * hierarchy.
- */
- virtual QCString trDirIndex()
- { return "Ôßá åÑãí ááÃÏáÉ"; }
-
- /*! This is used as the name of the chapter containing the documentation
- * of the directories.
- */
- virtual QCString trDirDocumentation()
- { return "ÊæËíÞ ÇáÃÏáÉ"; }
-
- /*! This is used as the title of the directory index and also in the
- * Quick links of an HTML page, to link to the directory hierarchy.
- */
- virtual QCString trDirectories()
- { return "ÇáÃÏáÉ"; }
-
- /*! This returns a sentences that introduces the directory hierarchy.
- * and the fact that it is sorted alphabetically per level
- */
- virtual QCString trDirDescription()
- { return "åÐÇ ÇáÔßá ÇáåÑãí ááÃÏáÉ Êã ÊÑÊíÈå ÃÈÌÏíÇ ÈÕæÑÉ ÊÞÑíÈíÉ¡ "
- "æáíÓ ÊÑÊíÈÇ ÃÈÌÏíÇ ßÇãáÇ:";
- }
-
- /*! This returns the title of a directory page. The name of the
- * directory is passed via \a dirName.
- */
- virtual QCString trDirReference(const char *dirName)
- { QCString result=" ãÑÌÚ ÇáÏáíá"; result+=dirName; return result; }
-
- /*! This returns the word directory with or without starting capital
- * (\a first_capital) and in sigular or plural form (\a singular).
- */
- virtual QCString trDir(bool first_capital, bool singular)
- {
- QCString result((first_capital ? "Director" : "director"));
- if (singular) result+="y"; else result+="ies";
- return result;
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.4.1
-//////////////////////////////////////////////////////////////////////////
-
- /*! This text is added to the documentation when the \\overload command
- * is used for a overloaded function.
- */
- virtual QCString trOverloadText()
- {
- return "åÐå ÏÇáÉ ÚÖæ ÒÇÆÏÉ ÇáÊÍãíá ¡"
- "æÌÏ ÃäåÇ ãáÇÆãÉ. ÅäåÇ ÊÎÊáÝ Úä ÇáÏÇáÉ ÃÚáÇå"
- "ÝÞØ Ýí äæÚíÉ Çá argument(s) ÇáÊí ÊÞÈáåÇ.";
- }
-};
-
-#endif
diff --git a/trunk/src/translator_br.h b/trunk/src/translator_br.h
deleted file mode 100644
index d36d466..0000000
--- a/trunk/src/translator_br.h
+++ /dev/null
@@ -1,1888 +0,0 @@
-/******************************************************************************
- * Copyright (C) 1997-2012 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 workns derived from the
- * input used in their production; they are not affected by this license.
- *
- * Brazilian Portuguese translation version 20100531
- * Maintainer: Fabio "FJTC" Jun Takada Chino <jun-chino at uol.com.br>
- * Thanks to Jorge Ramos, Fernando Carijo and others for their contributions.
- *
- * History:
- * 20110628:
- * - Updated to 1.7.5;
- * 20100531:
- * - Updated to 1.6.3;
- * 20091218:
- * - Updated to 1.6.1;
- * - Copyright year updated;
- * - Translation updates suggested by Fernando Carijó added;
- * 20080709:
- * - References to MAX_DOT_GRAPH_HEIGHT removed from trLegendDocs().
- * 20080206:
- * - Method trTypeContraints() renamed to trTypeConstraints().
- * 20071216:
- * - New methods since 1.5.4 updated.
- * Previous history removed from this version.
- */
-#ifndef TRANSLATOR_BR_H
-#define TRANSLATOR_BR_H
-
-class TranslatorBrazilian : public Translator
-{
- public:
-
- // --- Language control methods -------------------
-
- /*! Used for identification of the language. May resemble
- * the string returned by latexBabelPackage(), but it is not used
- * for the same purpose. The identification should not be translated.
- * It should be replaced by the name of the language in English
- * (e.g. Czech, Japanese, Russian, etc.). It should be equal to
- * the identification in language.h.
- */
- virtual QCString idLanguage()
- {
- return "brazil";
- }
-
- /*! Used to get the command(s) for the language support. This method
- * was designed for languages which do not prefer babel package.
- * If this methods returns empty string, then the latexBabelPackage()
- * method is used to generate the command for using the babel package.
- */
- virtual QCString latexLanguageSupportCommand()
- {
- return "\\usepackage[brazil]{babel}";
- }
-
- /*! return the language charset. This will be used for the HTML output */
- virtual QCString idLanguageCharset()
- {
- return "utf-8";
- }
-
- // --- Language translation methods -------------------
-
- /*! used in the compound documentation before a list of related functions. */
- virtual QCString trRelatedFunctions()
- { return "Funções Relacionadas"; }
-
- /*! subscript for the related functions. */
- virtual QCString trRelatedSubscript()
- { return "(Note que estas não são funções membros.)"; }
-
- /*! header that is put before the detailed description of files, classes and namespaces. */
- virtual QCString trDetailedDescription()
- { return "Descrição Detalhada"; }
-
- /*! header that is put before the list of typedefs. */
- virtual QCString trMemberTypedefDocumentation()
- { return "Definições de Tipos"; }
-
- /*! header that is put before the list of enumerations. */
- virtual QCString trMemberEnumerationDocumentation()
- { return "Enumerações"; }
-
- /*! header that is put before the list of member functions. */
- virtual QCString trMemberFunctionDocumentation()
- { return "Métodos"; }
-
- /*! header that is put before the list of member attributes. */
- virtual QCString trMemberDataDocumentation()
- {
- if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
- {
- return "Campos";
- }
- else
- {
- return "Atributos";
- }
- }
-
- /*! this is the text of a link put after brief descriptions. */
- virtual QCString trMore()
- { return "Mais..."; }
-
- /*! put in the class documentation */
- virtual QCString trListOfAllMembers()
- { return "Lista de todos os Membros."; }
-
- /*! used as the title of the "list of all members" page of a class */
- virtual QCString trMemberList()
- { return "Lista dos Membros"; }
-
- /*! this is the first part of a sentence that is followed by a class name */
- virtual QCString trThisIsTheListOfAllMembers()
- { return "Esta é a lista de todos os membros de "; }
-
- /*! this is the remainder of the sentence after the class name */
- virtual QCString trIncludingInheritedMembers()
- { return ", incluindo os membros herdados."; }
-
- /*! this is put at the author sections at the bottom of man pages.
- * parameter s is name of the project name.
- */
- virtual QCString trGeneratedAutomatically(const char *s)
- { QCString result="Gerado automaticamente por Doxygen";
- if (s) result+=(QCString)" para "+s;
- result+=" a partir de seu código-fonte.";
- return result;
- }
-
- /*! put after an enum name in the list of all members */
- virtual QCString trEnumName()
- { return "[Enumeração]"; }
-
- /*! put after an enum value in the list of all members */
- virtual QCString trEnumValue()
- { return "[Valor enumerado]"; }
-
- /*! put after an undocumented member in the list of all members */
- virtual QCString trDefinedIn()
- { return "definido(a) em"; }
-
- // quick reference sections
-
- /*! This is put above each page as a link to the list of all groups of
- * compounds or files (see the \\group command).
- */
- virtual QCString trModules()
- { return "Módulos"; }
-
- /*! This is put above each page as a link to the class hierarchy */
- virtual QCString trClassHierarchy()
- { return "Hierarquia de Classes"; }
-
- /*! This is put above each page as a link to the list of annotated classes */
- virtual QCString trCompoundList()
- {
- if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
- {
- return "Estruturas de Dados";
- }
- else
- {
- return "Lista de Componentes";
- }
- }
-
- /*! This is put above each page as a link to the list of documented files */
- virtual QCString trFileList()
- { return "Lista de Arquivos"; }
-
- /*! This is put above each page as a link to all members of compounds. */
- virtual QCString trCompoundMembers()
- {
- if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
- {
- return "Campos de Dados";
- }
- else
- {
- return "Componentes Membros";
- }
- }
-
- /*! This is put above each page as a link to all members of files. */
- virtual QCString trFileMembers()
- {
- if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
- {
- return "Globais";
- }
- else
- {
- return "Arquivos Membros";
- }
- }
-
- /*! This is put above each page as a link to all related pages. */
- virtual QCString trRelatedPages()
- { return "Páginas relacionadas"; }
-
- /*! This is put above each page as a link to all examples. */
- virtual QCString trExamples()
- { return "Exemplos"; }
-
- /*! This is put above each page as a link to the search engine. */
- virtual QCString trSearch()
- { return "Busca"; }
-
- /*! This is an introduction to the class hierarchy. */
- virtual QCString trClassHierarchyDescription()
- { return "Esta lista de hierarquias está parcialmente ordenada (ordem alfabética):"; }
-
- /*! This is an introduction to the list with all files. */
- virtual QCString trFileListDescription(bool extractAll)
- {
- QCString result="Esta é a lista de todos os arquivos ";
- if (!extractAll) result+="documentados ";
- result+="e suas respectivas descrições:";
- return result;
- }
-
- /*! This is an introduction to the annotated compound list. */
- virtual QCString trCompoundListDescription()
- {
-
- if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
- {
- return "Aqui estão as estruturas de dados, uniões e suas respectivas descrições:";
- }
- else
- {
- return "Aqui estão as classes, estruturas, uniões e interfaces e suas respectivas descrições:";
- }
- }
-
- /*! This is an introduction to the page with all class members. */
- virtual QCString trCompoundMembersDescription(bool extractAll)
- {
- QCString result="Esta é a lista de ";
-
- if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
- {
- result+="todas as estruturas e campos de uniões ";
- if (!extractAll)
- {
- result+="documentas";
- }
- }
- else
- {
- result+="todos os membros de classes ";
- if (!extractAll)
- {
- result+="documentos";
- }
- }
- result+=" com referências para ";
- if (!extractAll)
- {
- if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
- {
- result+="a documentação da estrutura/união de cada campo:";
- }
- else
- {
- result+="a documentação da classe de cada membro:";
- }
- }
- else
- {
- if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
- {
- result+="a estrutura/união a que pertencem:";
- }
- else
- {
- result+="a classe a que pertencem:";
- }
- }
- return result;
- }
-
- /*! This is an introduction to the page with all file members. */
- virtual QCString trFileMembersDescription(bool extractAll)
- {
- QCString result="Esta é a lista de ";
- if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
- {
- result+="todas as funções, variáveis, definições, enumerações e definições de tipos ";
- if (!extractAll) result+="documentadas ";
- }
- else
- {
- result+="todos os membros dos arquivos ";
- if (!extractAll) result+="documentados ";
- }
- result+="com referências para ";
- if (extractAll)
- result+="seus respectivos arquivos:";
- else
- result+="suas respectivas documentações:";
- return result;
- }
-
- /*! This is an introduction to the page with the list of all examples */
- virtual QCString trExamplesDescription()
- { return "Esta é a lista com todos os exemplos:"; }
-
- /*! This is an introduction to the page with the list of related pages */
- virtual QCString trRelatedPagesDescription()
- { return "Esta é a lista com toda a documentação relacionadas:"; }
-
- /*! This is an introduction to the page with the list of class/file groups */
- virtual QCString trModulesDescription()
- { return "Esta é a lista com todos os módulos:"; }
-
- /*! This is used in HTML as the title of index.html. */
- virtual QCString trDocumentation()
- { return "\nDocumentação"; }
-
- /*! This is used in LaTeX as the title of the chapter with the
- * index of all groups.
- */
- virtual QCString trModuleIndex()
- { return "Ãndice dos Módulos"; }
-
- /*! This is used in LaTeX as the title of the chapter with the
- * class hierarchy.
- */
- virtual QCString trHierarchicalIndex()
- { return "Ãndice Hierárquico"; }
-
- /*! This is used in LaTeX as the title of the chapter with the
- * annotated compound index.
- */
- virtual QCString trCompoundIndex()
- {
- if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
- {
- return "Ãndice das Estruturas de Dados";
- }
- else
- {
- return "Ãndice dos Componentes";
- }
- }
-
- /*! This is used in LaTeX as the title of the chapter with the
- * list of all files.
- */
- virtual QCString trFileIndex()
- { return "Ãndice dos Arquivos"; }
-
- /*! This is used in LaTeX as the title of the chapter containing
- * the documentation of all groups.
- */
- virtual QCString trModuleDocumentation()
- { return "Módulos"; }
-
- /*! This is used in LaTeX as the title of the chapter containing
- * the documentation of all classes, structs and unions.
- */
- virtual QCString trClassDocumentation()
- {
- if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
- {
- return "Estruturas";
- }
- else
- {
- return "Classes";
- }
- }
-
- /*! This is used in LaTeX as the title of the chapter containing
- * the documentation of all files.
- */
- virtual QCString trFileDocumentation()
- { return "Arquivos"; }
-
- /*! This is used in LaTeX as the title of the chapter containing
- * the documentation of all examples.
- */
- virtual QCString trExampleDocumentation()
- { return "Exemplos"; }
-
- /*! This is used in LaTeX as the title of the chapter containing
- * the documentation of all related pages.
- */
- virtual QCString trPageDocumentation()
- { return "Documentação Relacionada"; }
-
- /*! This is used in LaTeX as the title of the document */
- virtual QCString trReferenceManual()
- { return "Guia de Referência"; }
-
- /*! This is used in the documentation of a file as a header before the
- * list of defines
- */
- virtual QCString trDefines()
- { return "Definições e Macros"; }
-
- /*! This is used in the documentation of a file as a header before the
- * list of function prototypes
- */
- virtual QCString trFuncProtos()
- { return "Protótipos de Funções"; }
-
- /*! This is used in the documentation of a file as a header before the
- * list of typedefs
- */
- virtual QCString trTypedefs()
- { return "Definições de Tipos"; }
-
- /*! This is used in the documentation of a file as a header before the
- * list of enumerations
- */
- virtual QCString trEnumerations()
- { return "Enumerações"; }
-
- /*! This is used in the documentation of a file as a header before the
- * list of (global) functions
- */
- virtual QCString trFunctions()
- { return "Funções"; }
-
- /*! This is used in the documentation of a file as a header before the
- * list of (global) variables
- */
- virtual QCString trVariables()
- { return "Variáveis"; }
-
- /*! This is used in the documentation of a file as a header before the
- * list of (global) variables
- */
- virtual QCString trEnumerationValues()
- { return "Valores enumerados"; }
-
- /*! This is used in the documentation of a file before the list of
- * documentation blocks for defines
- */
- virtual QCString trDefineDocumentation()
- { return "Definições e macros"; }
-
- /*! This is used in the documentation of a file/namespace before the list
- * of documentation blocks for function prototypes
- */
- virtual QCString trFunctionPrototypeDocumentation()
- { return "Protótipos das funções"; }
-
- /*! This is used in the documentation of a file/namespace before the list
- * of documentation blocks for typedefs
- */
- virtual QCString trTypedefDocumentation()
- { return "Definições dos tipos"; }
-
- /*! This is used in the documentation of a file/namespace before the list
- * of documentation blocks for enumeration types
- */
- virtual QCString trEnumerationTypeDocumentation()
- { return "Enumerações"; }
-
- /*! This is used in the documentation of a file/namespace before the list
- * of documentation blocks for functions
- */
- virtual QCString trFunctionDocumentation()
- { return "Funções"; }
-
- /*! This is used in the documentation of a file/namespace before the list
- * of documentation blocks for variables
- */
- virtual QCString trVariableDocumentation()
- { return "Variáveis"; }
-
- /*! This is used in the documentation of a file/namespace/group before
- * the list of links to documented compounds
- */
- virtual QCString trCompounds()
- {
- if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
- {
- return "Estruturas de Dados";
- }
- else
- {
- return "Componentes";
- }
- }
-
- /*! This is used in the standard footer of each page and indicates when
- * the page was generated
- */
- virtual QCString trGeneratedAt(const char *date,const char *projName)
- {
- QCString result=(QCString)"Gerado em "+date;
- if (projName) result+=(QCString)" para "+projName;
- result+=(QCString)" por";
- return result;
- }
- /*! This is part of the sentence used in the standard footer of each page.
- */
- virtual QCString trWrittenBy()
- {
- return "escrito por";
- }
-
- /*! this text is put before a class diagram */
- virtual QCString trClassDiagram(const char *clName)
- {
- return (QCString)"Diagrama de Hierarquia para "+clName+":";
- }
-
- /*! this text is generated when the \\internal command is used. */
- virtual QCString trForInternalUseOnly()
- { return "Apenas para uso interno."; }
-
- /*! this text is generated when the \\warning command is used. */
- virtual QCString trWarning()
- { return "Aviso"; }
-
- /*! this text is generated when the \\version command is used. */
- virtual QCString trVersion()
- { return "Versão"; }
-
- /*! this text is generated when the \\date command is used. */
- virtual QCString trDate()
- { return "Data"; }
-
- /*! this text is generated when the \\return command is used. */
- virtual QCString trReturns()
- { return "Retorna"; }
-
- /*! this text is generated when the \\sa command is used. */
- virtual QCString trSeeAlso()
- { return "Veja também"; }
-
- /*! this text is generated when the \\param command is used. */
- virtual QCString trParameters()
- { return "Parâmetros"; }
-
- /*! this text is generated when the \\exception command is used. */
- virtual QCString trExceptions()
- { return "Exceções"; }
-
- /*! this text is used in the title page of a LaTeX document. */
- virtual QCString trGeneratedBy()
- { return "Gerado por"; }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 0.49-990307
-//////////////////////////////////////////////////////////////////////////
-
- /*! used as the title of page containing all the index of all namespaces. */
- virtual QCString trNamespaceList()
- { return "Lista de Namespaces"; }
-
- /*! used as an introduction to the namespace list */
- virtual QCString trNamespaceListDescription(bool extractAll)
- {
- QCString result="Esta é a lista de todos os Namespaces ";
- if (!extractAll) result+="documentados ";
- result+="com suas respectivas descrições:";
- return result;
- }
-
- /*! used in the class documentation as a header before the list of all
- * friends of a class
- */
- virtual QCString trFriends()
- { return "Amigas"; }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 0.49-990405
-//////////////////////////////////////////////////////////////////////////
-
- /*! used in the class documentation as a header before the list of all
- * related classes
- */
- virtual QCString trRelatedFunctionDocumentation()
- { return "Amigas e Funções Relacionadas"; }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 0.49-990425
-//////////////////////////////////////////////////////////////////////////
-
- /*! used as the title of the HTML page of a class/struct/union */
- virtual QCString trCompoundReference(const char *clName,
- ClassDef::CompoundType compType,
- bool isTemplate)
- {
- QCString result="Referência da";
- if (isTemplate) result+=" Template de";
- switch(compType)
- {
- case ClassDef::Class: result+=" Classe "; break;
- case ClassDef::Struct: result+=" Estrutura "; break;
- case ClassDef::Union: result+=" União "; break;
- case ClassDef::Interface: result+=" Interface "; break;
- case ClassDef::Protocol: result+=" Protocolo "; break;
- case ClassDef::Category: result+=" Categoria "; break;
- case ClassDef::Exception: result+=" Exceção "; break;
- }
- result+=(QCString)clName;
- return result;
- }
-
- /*! used as the title of the HTML page of a file */
- virtual QCString trFileReference(const char *fileName)
- {
- QCString result = "Referência do Arquivo ";
- result += fileName;
- return result;
- }
-
- /*! used as the title of the HTML page of a namespace */
- virtual QCString trNamespaceReference(const char *namespaceName)
- {
- QCString result ="Refência do Namespace ";
- result += namespaceName;
- return result;
- }
-
- virtual QCString trPublicMembers()
- { return "Métodos Públicos"; }
- virtual QCString trPublicSlots()
- { return "Slots Públicos"; }
- virtual QCString trSignals()
- { return "Sinais"; }
- virtual QCString trStaticPublicMembers()
- { return "Métodos Públicos Estáticos"; }
- virtual QCString trProtectedMembers()
- { return "Métodos Protegidos"; }
- virtual QCString trProtectedSlots()
- { return "Slots Protegidos"; }
- virtual QCString trStaticProtectedMembers()
- { return "Métodos Protegidos Estáticos"; }
- virtual QCString trPrivateMembers()
- { return "Métodos Privados"; }
- virtual QCString trPrivateSlots()
- { return "Slots Privados"; }
- virtual QCString trStaticPrivateMembers()
- { return "Métodos Privados Estáticos"; }
-
- /*! this function is used to produce a comma-separated list of items.
- * use generateMarker(i) to indicate where item i should be put.
- */
- virtual QCString trWriteList(int numEntries)
- {
- QCString result;
- int i;
- // the inherits list contain `numEntries' classes
- for (i=0;i<numEntries;i++)
- {
- // use generateMarker to generate placeholders for the class links!
- result+=generateMarker(i); // generate marker for entry i in the list
- // (order is left to right)
-
- if (i!=numEntries-1) // not the last entry, so we need a separator
- {
- if (i<numEntries-2) // not the fore last entry
- result+=", ";
- else // the fore last entry
- result+=" e ";
- }
- }
- return result;
- }
-
- /*! used in class documentation to produce a list of base classes,
- * if class diagrams are disabled.
- */
- virtual QCString trInheritsList(int numEntries)
- {
- return "Herdeiro de " + trWriteList(numEntries) + ".";
- }
-
- /*! used in class documentation to produce a list of super classes,
- * if class diagrams are disabled.
- */
- virtual QCString trInheritedByList(int numEntries)
- {
- return "Superclasse de "+trWriteList(numEntries)+".";
- }
-
- /*! used in member documentation blocks to produce a list of
- * members that are hidden by this one.
- */
- virtual QCString trReimplementedFromList(int numEntries)
- {
- return "Reimplementação de "+trWriteList(numEntries)+".";
- }
-
- /*! used in member documentation blocks to produce a list of
- * all member that overwrite the implementation of this member.
- */
- virtual QCString trReimplementedInList(int numEntries)
- {
- return "Reimplementado por "+trWriteList(numEntries)+".";
- }
-
- /*! This is put above each page as a link to all members of namespaces. */
- virtual QCString trNamespaceMembers()
- { return "Membros do Namespace"; }
-
- /*! This is an introduction to the page with all namespace members */
- virtual QCString trNamespaceMemberDescription(bool extractAll)
- {
- QCString result="Esta é a lista com todos os membros do Namespace ";
- if (!extractAll) result+="documentados ";
- result+="com referências para ";
- if (extractAll)
- result+="a documentação de seus respectivos Namespaces:";
- else
- result+="os seus respectivos namespaces:";
- return result;
- }
- /*! This is used in LaTeX as the title of the chapter with the
- * index of all namespaces.
- */
- virtual QCString trNamespaceIndex()
- { return "Namespaces"; }
-
- /*! This is used in LaTeX as the title of the chapter containing
- * the documentation of all namespaces.
- */
- virtual QCString trNamespaceDocumentation()
- { return "Namespaces"; }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 0.49-990522
-//////////////////////////////////////////////////////////////////////////
-
- /*! This is used in the documentation before the list of all
- * namespaces in a file.
- */
- virtual QCString trNamespaces()
- { return "Namespaces"; }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 0.49-990728
-//////////////////////////////////////////////////////////////////////////
-
- /*! This is put at the bottom of a class documentation page and is
- * followed by a list of files that were used to generate the page.
- */
- virtual QCString trGeneratedFromFiles(ClassDef::CompoundType compType,
- bool single)
- { // here s is one of " Class", " Struct" or " Union"
- // single is true implies a single file
- QCString result=(QCString)"A documentação para esta ";
- switch(compType)
- {
- case ClassDef::Class: result+="classe "; break;
- case ClassDef::Struct: result+="estrutura "; break;
- case ClassDef::Union: result+="união "; break;
- case ClassDef::Interface: result+="interface "; break;
- case ClassDef::Protocol: result+="protocolo "; break;
- case ClassDef::Category: result+="categoria "; break;
- case ClassDef::Exception: result+="exceção "; break;
- }
- result+=" foi gerada a partir ";
- if (single) result+="do seguinte arquivo:"; else result+="dos seguintes arquivos:";
- return result;
- }
-
- /*! This is in the (quick) index as a link to the alphabetical compound
- * list.
- */
- virtual QCString trAlphabeticalList()
- { return "Lista Alfabética"; }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 0.49-990901
-//////////////////////////////////////////////////////////////////////////
-
- /*! This is used as the heading text for the retval command. */
- virtual QCString trReturnValues()
- { return "Valores Retornados"; }
-
- /*! This is in the (quick) index as a link to the main page (index.html)
- */
- virtual QCString trMainPage()
- { return "Página Principal"; }
-
- /*! This is used in references to page that are put in the LaTeX
- * documentation. It should be an abbreviation of the word page.
- */
- virtual QCString trPageAbbreviation()
- { return "pag."; }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 0.49-991003
-//////////////////////////////////////////////////////////////////////////
-
- virtual QCString trDefinedAtLineInSourceFile()
- {
- return "Definição na linha @0 do arquivo @1.";
- }
- virtual QCString trDefinedInSourceFile()
- {
- return "Definição no arquivo @0.";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 0.49-991205
-//////////////////////////////////////////////////////////////////////////
-
- virtual QCString trDeprecated()
- {
- /*
- * This note is for brazilians only.
- * Esta é uma boa tradução para "deprecated"?
- */
- return "Descontinuado(a)";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.0.0
-//////////////////////////////////////////////////////////////////////////
-
- /*! this text is put before a collaboration diagram */
- virtual QCString trCollaborationDiagram(const char *clName)
- {
- return (QCString)"Diagrama de colaboração para "+clName+":";
- }
- /*! this text is put before an include dependency graph */
- virtual QCString trInclDepGraph(const char *fName)
- {
- return (QCString)"Gráfico de dependência de inclusões para "+fName+":";
- }
- /*! header that is put before the list of constructor/destructors. */
- virtual QCString trConstructorDocumentation()
- {
- return "Construtores & Destrutores";
- }
- /*! Used in the file documentation to point to the corresponding sources. */
- virtual QCString trGotoSourceCode()
- {
- return "Vá para o código-fonte deste arquivo.";
- }
- /*! Used in the file sources to point to the corresponding documentation. */
- virtual QCString trGotoDocumentation()
- {
- return "Vá para a documentação deste arquivo.";
- }
- /*! Text for the \\pre command */
- virtual QCString trPrecondition()
- {
- return "Pré-Condição";
- }
- /*! Text for the \\post command */
- virtual QCString trPostcondition()
- {
- return "Pós-Condição";
- }
- /*! Text for the \\invariant command */
- virtual QCString trInvariant()
- {
- return "Invariante";
- }
- /*! Text shown before a multi-line variable/enum initialization */
- virtual QCString trInitialValue()
- {
- return "Valor Inicial:";
- }
- /*! Text used the source code in the file index */
- virtual QCString trCode()
- {
- return "código";
- }
- virtual QCString trGraphicalHierarchy()
- {
- return "Gráfico de Hierarquia de Classes";
- }
- virtual QCString trGotoGraphicalHierarchy()
- {
- return "Vá para o Gráfico de Hierarquia de Classes";
- }
- virtual QCString trGotoTextualHierarchy()
- {
- return "Vá para a Hierarquia de Classes (texto)";
- }
- virtual QCString trPageIndex()
- {
- return "Ãndice da Página";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.1.0
-//////////////////////////////////////////////////////////////////////////
-
- virtual QCString trNote()
- {
- return "Observação";
- }
- virtual QCString trPublicTypes()
- {
- return "Tipos Públicos";
- }
- virtual QCString trPublicAttribs()
- {
- if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
- {
- return "Campos de Dados";
- }
- else
- {
- return "Atributos Públicos";
- }
- }
- virtual QCString trStaticPublicAttribs()
- {
- return "Atributos Estáticos Públicos";
- }
- virtual QCString trProtectedTypes()
- {
- return "Tipos Protegidos";
- }
- virtual QCString trProtectedAttribs()
- {
- return "Atributos Protegidos";
- }
- virtual QCString trStaticProtectedAttribs()
- {
- return "Atributos Estáticos Protegidos";
- }
- virtual QCString trPrivateTypes()
- {
- return "Tipos Privados";
- }
- virtual QCString trPrivateAttribs()
- {
- return "Atributos Privados";
- }
- virtual QCString trStaticPrivateAttribs()
- {
- return "Atributos Privados Estáticos";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.1.3
-//////////////////////////////////////////////////////////////////////////
-
- /*! Used as a marker that is put before a todo item */
- virtual QCString trTodo()
- {
- return "Futuras Atividades";
- }
- /*! Used as the header of the todo list */
- virtual QCString trTodoList()
- {
- return "Lista de Futuras Atividades";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.1.4
-//////////////////////////////////////////////////////////////////////////
-
- virtual QCString trReferencedBy()
- {
- return "Referenciado por";
- }
- virtual QCString trRemarks()
- {
- return "Anotações";
- }
- virtual QCString trAttention()
- {
- return "Atenção";
- }
- virtual QCString trInclByDepGraph()
- {
- return "Este grafo mostra quais arquivos estão direta ou indiretamente relacionados com este arquivo:";
- }
- virtual QCString trSince()
- {
- return "Desde";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.1.5
-//////////////////////////////////////////////////////////////////////////
-
- /*! title of the graph legend page */
- virtual QCString trLegendTitle()
- {
- return "Legenda do Grafo";
- }
- /*! page explaining how the dot graph's should be interpreted */
- virtual QCString trLegendDocs()
- {
- return
- "Esta página explica como interpretar os grafos gerados pelo doxygen.<p>\n"
- "Considere o seguinte exemplo:\n"
- "\\code\n"
- "/*! Invisible class because of truncation */\n"
- "class Invisible { };\n\n"
- "/*! Truncated class, inheritance relation is hidden */\n"
- "class Truncated : public Invisible { };\n\n"
- "/* Class not documented with doxygen comments */\n"
- "class Undocumented { };\n\n"
- "/*! Class that is inherited using public inheritance */\n"
- "class PublicBase : public Truncated { };\n\n"
- "/*! A template class */\n"
- "template<class T> class Templ { };\n\n"
- "/*! Class that is inherited using protected inheritance */\n"
- "class ProtectedBase { };\n\n"
- "/*! Class that is inherited using private inheritance */\n"
- "class PrivateBase { };\n\n"
- "/*! Class that is used by the Inherited class */\n"
- "class Used { };\n\n"
- "/*! Super class that inherits a number of other classes */\n"
- "class Inherited : public PublicBase,\n"
- " protected ProtectedBase,\n"
- " private PrivateBase,\n"
- " public Undocumented,\n"
- " public Templ<int>\n"
- "{\n"
- " private:\n"
- " Used *m_usedClass;\n"
- "};\n"
- "\\endcode\n"
- "Isto irá gerar o seguinte gráfo:"
- "<p><center><img src=\"graph_legend."+Config_getEnum("DOT_IMAGE_FORMAT")+"\"></center>\n"
- "<p>\n"
- "As caixas no grafo acima tem as seguintes interpretações:\n"
- "<ul>\n"
- "<li>Uma caixa inteiramente preta representa a estrutura ou a classe para qual "
- "o grafo foi gerado.\n"
- "<li>Uma caixa com bordas pretas denota uma estrutura ou classe documentada.\n"
- "<li>Uma caixa com bordas cinzas denota uma estrutura ou classe não documentada.\n"
-
- "<li>Uma caixa com bordas vermelhas denota uma estrutura ou classe documentada para\n"
- "a qual nem todas as heranças ou componentes são mostradas no grafo. Um grafo é "
- "truncado quando este é maior que o tamanho especificado."
- "</ul>\n"
- "As setas tem os seguintes significados:\n"
- "<ul>\n"
- "<li>Uma seta azul escura é utilizada para denotar uma relação de herança "
- "pública entre duas classes.\n"
- "<li>Uma seta verde escura é utilizada para denotar uma herança protegida.\n"
- "<li>Uma seta vermelho escura é utilizada para denotar uma herança privada.\n"
- "<li>Uma seta púrpura pontilhada é usada se uma classe está contida ou é utilizada"
- "por outra classe. A seta é marcada com a(s) variável(eis) "
- "através das quais a classe ou estrutura apontada está acessível. \n"
- "</ul>\n";
- }
- /*! text for the link to the legend page */
- virtual QCString trLegend()
- {
- return "legenda";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.2.0
-//////////////////////////////////////////////////////////////////////////
-
- /*! Used as a marker that is put before a test item */
- virtual QCString trTest()
- {
- return "Teste";
- }
- /*! Used as the header of the test list */
- virtual QCString trTestList()
- {
- return "Lista de Testes";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.2.1
-//////////////////////////////////////////////////////////////////////////
-
- /*! Used as a section header for KDE-2 IDL methods */
- virtual QCString trDCOPMethods()
- {
- return "Métodos DCOP";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.2.2
-//////////////////////////////////////////////////////////////////////////
-
- /*! Used as a section header for IDL properties */
- virtual QCString trProperties()
- {
- return "Propriedades";
- }
- /*! Used as a section header for IDL property documentation */
- virtual QCString trPropertyDocumentation()
- {
- return "Propriedades";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.2.4
-//////////////////////////////////////////////////////////////////////////
-
- /*! Used for Java classes in the summary section of Java packages */
- virtual QCString trClasses()
- {
- if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
- {
- return "Estruturas de Dados";
- }
- else
- {
- return "Classes";
- }
- }
- /*! Used as the title of a Java package */
- virtual QCString trPackage(const char *name)
- {
- return (QCString)"Pacote "+name;
- }
- /*! Title of the package index page */
- virtual QCString trPackageList()
- {
- return "Lista de Pacotes";
- }
- /*! The description of the package index page */
- virtual QCString trPackageListDescription()
- {
- return "Esta é a lista com os pacotes e suas respectivas descrições (se disponíveis):";
- }
- /*! The link name in the Quick links header for each page */
- virtual QCString trPackages()
- {
- return "Pacotes";
- }
- /*! Text shown before a multi-line define */
- virtual QCString trDefineValue()
- {
- return "Valor:";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.2.5
-//////////////////////////////////////////////////////////////////////////
-
- /*! Used as a marker that is put before a \\bug item */
- virtual QCString trBug()
- {
- return "Problema";
- }
- /*! Used as the header of the bug list */
- virtual QCString trBugList()
- {
- return "Lista de Problemas";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.2.6
-//////////////////////////////////////////////////////////////////////////
-
- /*! Used as ansicpg for RTF file
- *
- * The following table shows the correlation of Charset name, Charset Value and
- * <pre>
- * Codepage number:
- * Charset Name Charset Value(hex) Codepage number
- * ------------------------------------------------------
- * DEFAULT_CHARSET 1 (x01)
- * SYMBOL_CHARSET 2 (x02)
- * OEM_CHARSET 255 (xFF)
- * ANSI_CHARSET 0 (x00) 1252
- * RUSSIAN_CHARSET 204 (xCC) 1251
- * EE_CHARSET 238 (xEE) 1250
- * GREEK_CHARSET 161 (xA1) 1253
- * TURKISH_CHARSET 162 (xA2) 1254
- * BALTIC_CHARSET 186 (xBA) 1257
- * HEBREW_CHARSET 177 (xB1) 1255
- * ARABIC _CHARSET 178 (xB2) 1256
- * SHIFTJIS_CHARSET 128 (x80) 932
- * HANGEUL_CHARSET 129 (x81) 949
- * GB2313_CHARSET 134 (x86) 936
- * CHINESEBIG5_CHARSET 136 (x88) 950
- * </pre>
- *
- */
- virtual QCString trRTFansicp()
- {
- return "1252";
- }
-
-
- /*! Used as ansicpg for RTF fcharset
- * \see trRTFansicp() for a table of possible values.
- */
- virtual QCString trRTFCharSet()
- {
- return "0";
- }
-
- /*! Used as header RTF general index */
- virtual QCString trRTFGeneralIndex()
- {
- return "Ãndice";
- }
-
- /*! This is used for translation of the word that will possibly
- * be followed by a single name or by a list of names
- * of the category.
- */
- virtual QCString trClass(bool first_capital, bool singular)
- {
- QCString result((first_capital ? "Classe" : "classe"));
- if (!singular) result+="s";
- return result;
- }
-
- /*! This is used for translation of the word that will possibly
- * be followed by a single name or by a list of names
- * of the category.
- */
- virtual QCString trFile(bool first_capital, bool singular)
- {
- QCString result((first_capital ? "Arquivo": "arquivo"));
- if (!singular) result+="s";
- return result;
- }
-
- /*! This is used for translation of the word that will possibly
- * be followed by a single name or by a list of names
- * of the category.
- */
- virtual QCString trNamespace(bool first_capital, bool singular)
- {
- QCString result((first_capital ? "Namespace" : "namespace"));
- if (!singular) result+="s";
- return result;
- }
-
- /*! This is used for translation of the word that will possibly
- * be followed by a single name or by a list of names
- * of the category.
- */
- virtual QCString trGroup(bool first_capital, bool singular)
- {
- QCString result((first_capital ? "Grupo" : "grupo"));
- if (!singular) result+="s";
- return result;
- }
-
- /*! This is used for translation of the word that will possibly
- * be followed by a single name or by a list of names
- * of the category.
- */
- virtual QCString trPage(bool first_capital, bool singular)
- {
- QCString result((first_capital ? "Página" : "página"));
- if (!singular) result+="s";
- return result;
- }
-
- /*! This is used for translation of the word that will possibly
- * be followed by a single name or by a list of names
- * of the category.
- */
- virtual QCString trMember(bool first_capital, bool singular)
- {
- QCString result((first_capital ? "Membro" : "membro"));
- if (!singular) result+="s";
- return result;
- }
-
- /*! This is used for translation of the word that will possibly
- * be followed by a single name or by a list of names
- * of the category.
- */
- virtual QCString trGlobal(bool first_capital, bool singular)
- {
- QCString result((first_capital ? "Globa" : "globa"));
- if (!singular){
- result+="is";
- }else{
- result+="l";
- }
- return result;
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.2.7
-//////////////////////////////////////////////////////////////////////////
-
- /*! This text is generated when the \\author command is used and
- * for the author section in man pages. */
- virtual QCString trAuthor(bool first_capital, bool singular)
- {
- QCString result((first_capital ? "Autor" : "autor"));
- if (!singular) result+="es";
- return result;
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.2.11
-//////////////////////////////////////////////////////////////////////////
-
- /*! This text is put before the list of members referenced by a member
- */
- virtual QCString trReferences()
- {
- return "Referências";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.2.13
-//////////////////////////////////////////////////////////////////////////
-
- /*! used in member documentation blocks to produce a list of
- * members that are implemented by this one.
- */
- virtual QCString trImplementedFromList(int numEntries)
- {
- return "Implementa "+trWriteList(numEntries)+".";
- }
-
- /*! used in member documentation blocks to produce a list of
- * all members that implementation this member.
- */
- virtual QCString trImplementedInList(int numEntries)
- {
- return "Implementado por "+trWriteList(numEntries)+".";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.2.16
-//////////////////////////////////////////////////////////////////////////
-
- /*! used in RTF documentation as a heading for the Table
- * of Contents.
- */
- virtual QCString trRTFTableOfContents()
- {
- return "Conteúdo";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.2.17
-//////////////////////////////////////////////////////////////////////////
-
- /*! Used as the header of the list of item that have been
- * flagged deprecated
- */
- virtual QCString trDeprecatedList()
- {
- return "Lista de Descontinuados(as)";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.2.18
-//////////////////////////////////////////////////////////////////////////
-
- /*! Used as a header for declaration section of the events found in
- * a C# program
- */
- virtual QCString trEvents()
- {
- return "Eventos";
- }
- /*! Header used for the documentation section of a class' events. */
- virtual QCString trEventDocumentation()
- {
- return "Eventos";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.3
-//////////////////////////////////////////////////////////////////////////
-
- /*! Used as a heading for a list of Java class types with package scope.
- */
- virtual QCString trPackageTypes()
- {
- return "Tipos do Pacote";
- }
-
- /*! Used as a heading for a list of Java class functions with package
- * scope.
- */
- virtual QCString trPackageMembers()
- {
- return "Funções do Pacote";
- }
-
- /*! Used as a heading for a list of static Java class functions with
- * package scope.
- */
- virtual QCString trStaticPackageMembers()
- {
- return "Funções Estáticas do Pacote";
- }
-
- /*! Used as a heading for a list of Java class variables with package
- * scope.
- */
- virtual QCString trPackageAttribs()
- {
- return "Atributos do Pacote";
- }
-
- /*! Used as a heading for a list of static Java class variables with
- * package scope.
- */
- virtual QCString trStaticPackageAttribs()
- {
- return "Atributos Estáticos do Pacote";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.3.1
-//////////////////////////////////////////////////////////////////////////
-
- /*! Used in the quick index of a class/file/namespace member list page
- * to link to the unfiltered list of all members.
- */
- virtual QCString trAll()
- {
- return "Todos";
- }
- /*! Put in front of the call graph for a function. */
- virtual QCString trCallGraph()
- {
- return "Este é o diagrama das funções utilizadas por esta função:";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.3.3
-//////////////////////////////////////////////////////////////////////////
-
- /*! When the search engine is enabled this text is put in the header
- * of each page before the field where one can enter the text to search
- * for.
- */
- virtual QCString trSearchForIndex()
- {
- return "Procurar por";
- }
- /*! This string is used as the title for the page listing the search
- * results.
- */
- virtual QCString trSearchResultsTitle()
- {
- return "Resultado da Busca";
- }
- /*! This string is put just before listing the search results. The
- * text can be different depending on the number of documents found.
- * Inside the text you can put the special marker $num to insert
- * the number representing the actual number of search results.
- * The @a numDocuments parameter can be either 0, 1 or 2, where the
- * value 2 represents 2 or more matches. HTML markup is allowed inside
- * the returned string.
- */
- virtual QCString trSearchResults(int numDocuments)
- {
- if (numDocuments==0)
- {
- return "Nenhum documento foi encontrado.";
- }
- else if (numDocuments==1)
- {
- return "Apenas <b>1</b> documento foi encontrado.";
- }
- else
- {
- return "<b>$num</b> documentos encontrados. "
- "Os melhores resultados vem primeiro.";
- }
- }
- /*! This string is put before the list of matched words, for each search
- * result. What follows is the list of words that matched the query.
- */
- virtual QCString trSearchMatches()
- {
- return "Resultados:";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.3.8
-//////////////////////////////////////////////////////////////////////////
-
- /*! This is used in HTML as the title of page with source code for file filename
- */
- virtual QCString trSourceFile(QCString& filename)
- {
- return "Código-Fonte de " + filename;
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.3.9
-//////////////////////////////////////////////////////////////////////////
-
- /*! This is used as the name of the chapter containing the directory
- * hierarchy.
- */
- virtual QCString trDirIndex()
- { return "Hierarquia de Diretórios"; }
-
- /*! This is used as the name of the chapter containing the documentation
- * of the directories.
- */
- virtual QCString trDirDocumentation()
- { return "Documentação do Directório"; }
-
- /*! This is used as the title of the directory index and also in the
- * Quick links of a HTML page, to link to the directory hierarchy.
- */
- virtual QCString trDirectories()
- { return "Diretórios"; }
-
- /*! This returns a sentences that introduces the directory hierarchy.
- * and the fact that it is sorted alphabetically per level
- */
- virtual QCString trDirDescription()
- { return "Esta Hierarquia de Diretórios está parcialmente ordenada (ordem alfabética)"; }
-
- /*! This returns the title of a directory page. The name of the
- * directory is passed via \a dirName.
- */
- virtual QCString trDirReference(const char *dirName)
- {
- QCString result = "Referência do diretório ";
- result += dirName;
- return result;
- }
-
- /*! This returns the word directory with or without starting capital
- * (\a first_capital) and in sigular or plural form (\a singular).
- */
- virtual QCString trDir(bool first_capital, bool singular)
- {
- QCString result((first_capital ? "Diretório" : "diretório"));
- if (!singular) result+="s";
- return result;
- }
-//////////////////////////////////////////////////////////////////////////
-// new since 1.4.1
-//////////////////////////////////////////////////////////////////////////
-
- /*! This text is added to the documentation when the \\overload command
- * is used for a overloaded function.
- */
- virtual QCString trOverloadText()
- {
- return "Este é um método provido por conveniência. "
- "Ele difere do método acima apenas na lista de "
- "argumentos que devem ser utilizados.";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.4.6
-//////////////////////////////////////////////////////////////////////////
-
- /*! This is used to introduce a caller (or called-by) graph */
- virtual QCString trCallerGraph()
- {
- return "Este é o diagrama das funções que utilizam esta função:";
- }
-
- /*! This is used in the documentation of a file/namespace before the list
- * of documentation blocks for enumeration values
- */
- virtual QCString trEnumerationValueDocumentation()
- { return "Documentação da enumeração"; }
-
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.5.4 (mainly for Fortran)
-//////////////////////////////////////////////////////////////////////////
-
- /*! header that is put before the list of member subprograms (Fortran). */
- virtual QCString trMemberFunctionDocumentationFortran()
- { return "Documentação de Função Membro/Subrotina"; }
-
- /*! This is put above each page as a link to the list of annotated data types (Fortran). */
- virtual QCString trCompoundListFortran()
- { return "Lista de Tipos de Dados"; }
-
- /*! This is put above each page as a link to all members of compounds (Fortran). */
- virtual QCString trCompoundMembersFortran()
- { return "Campos de Dados"; }
-
- /*! This is an introduction to the annotated compound list (Fortran). */
- virtual QCString trCompoundListDescriptionFortran()
- { return "Aqui estão os tipos de dados com descrições resumidas:"; }
-
- /*! This is an introduction to the page with all data types (Fortran). */
- virtual QCString trCompoundMembersDescriptionFortran(bool extractAll)
- {
- QCString result="Esta é a lista de todos os membros ";
- if (!extractAll) result+="documentados ";
- result+="dos tipos de dados com links para ";
- if (extractAll)
- {
- result+="a documentação dos tipos de dados para cada membro:";
- }
- else
- {
- result+="os tipos de dados a que pertencem:";
- }
- return result;
- }
-
- /*! This is used in LaTeX as the title of the chapter with the
- * annotated compound index (Fortran).
- */
- virtual QCString trCompoundIndexFortran()
- { return "Ãndice de Tipos de Dados"; }
-
- /*! This is used in LaTeX as the title of the chapter containing
- * the documentation of all data types (Fortran).
- */
- virtual QCString trTypeDocumentation()
- { return "Documentação dos Tipos de Dados"; }
-
- /*! This is used in the documentation of a file as a header before the
- * list of (global) subprograms (Fortran).
- */
- virtual QCString trSubprograms()
- { return "Funções/Subrotinas"; }
-
- /*! This is used in the documentation of a file/namespace before the list
- * of documentation blocks for subprograms (Fortran)
- */
- virtual QCString trSubprogramDocumentation()
- { return "Documentação da Função/Subrotina"; }
-
- /*! This is used in the documentation of a file/namespace/group before
- * the list of links to documented compounds (Fortran)
- */
- virtual QCString trDataTypes()
- { return "Tipos de Dados"; }
-
- /*! used as the title of page containing all the index of all modules (Fortran). */
- virtual QCString trModulesList()
- { return "Lista de Módulos"; }
-
- /*! used as an introduction to the modules list (Fortran) */
- virtual QCString trModulesListDescription(bool extractAll)
- {
- QCString result="Esta é a lista de todos os módulos ";
- if (!extractAll) result+="documentados ";
- result+="com descrições resumidas:";
- return result;
- }
-
- /*! used as the title of the HTML page of a module/type (Fortran) */
- virtual QCString trCompoundReferenceFortran(const char *clName,
- ClassDef::CompoundType compType,
- bool isTemplate)
- {
- QCString result = (QCString)"Referência ";
-
- if (isTemplate) result+="da Template ";
-
- switch(compType)
- {
- case ClassDef::Class: result+="do Modulo "; break;
- case ClassDef::Struct: result+="do Tipo "; break;
- case ClassDef::Union: result+="da União "; break;
- case ClassDef::Interface: result+="da Interface "; break;
- case ClassDef::Protocol: result+="do Protocolo "; break;
- case ClassDef::Category: result+="da Categoria "; break;
- case ClassDef::Exception: result+="da Exceção "; break;
- }
- result += clName;
-
- return result;
- }
- /*! used as the title of the HTML page of a module (Fortran) */
- virtual QCString trModuleReference(const char *namespaceName)
- {
- QCString result = "Referência do Módulo ";
- result += namespaceName;
- return result;
- }
-
- /*! This is put above each page as a link to all members of modules. (Fortran) */
- virtual QCString trModulesMembers()
- { return "Membros do Módulo"; }
-
- /*! This is an introduction to the page with all modules members (Fortran) */
- virtual QCString trModulesMemberDescription(bool extractAll)
- {
- QCString result="Esta é a lista de todos os membros ";
- if (!extractAll) result+="documentados ";
- result+="dos módulos com links para ";
- if (extractAll)
- {
- result+="a documentação dos módulos para cada membro:";
- }
- else
- {
- result+="os módulos a que pertencem:";
- }
- return result;
- }
-
- /*! This is used in LaTeX as the title of the chapter with the
- * index of all modules (Fortran).
- */
- virtual QCString trModulesIndex()
- { return "Ãndice dos Módulos"; }
-
- /*! This is used for translation of the word that will possibly
- * be followed by a single name or by a list of names
- * of the category.
- */
- virtual QCString trModule(bool first_capital, bool singular)
- {
- QCString result((first_capital ? "Modulo" : "modulo"));
- if (!singular) result+="s";
- return result;
- }
- /*! This is put at the bottom of a module documentation page and is
- * followed by a list of files that were used to generate the page.
- */
- virtual QCString trGeneratedFromFilesFortran(ClassDef::CompoundType compType,
- bool single)
- { // here s is one of " Module", " Struct" or " Union"
- // single is true implies a single file
- QCString result=(QCString)"A documentação para ";
- switch(compType)
- {
- case ClassDef::Class: result+="este modulo "; break;
- case ClassDef::Struct: result+="este tipo "; break;
- case ClassDef::Union: result+="esta união "; break;
- case ClassDef::Interface: result+="esta interface "; break;
- case ClassDef::Protocol: result+="esto protocolo "; break;
- case ClassDef::Category: result+="esta categoria "; break;
- case ClassDef::Exception: result+="esta exceção "; break;
- }
-
- result+=" foi gerada a partir do";
- if (single)
- result+=" seguinte arquivo:";
- else
- result+="s seguintes arquivos:";
-
- return result;
- }
- /*! This is used for translation of the word that will possibly
- * be followed by a single name or by a list of names
- * of the category.
- */
- virtual QCString trType(bool first_capital, bool singular)
- {
- QCString result((first_capital ? "Tipo" : "tipo"));
- if (!singular) result+="s";
- return result;
- }
- /*! This is used for translation of the word that will possibly
- * be followed by a single name or by a list of names
- * of the category.
- */
- virtual QCString trSubprogram(bool first_capital, bool singular)
- {
- QCString result((first_capital ? "Subprograma" : "subprograma"));
- if (!singular) result+="s";
- return result;
- }
-
- /*! C# Type Contraint list */
- virtual QCString trTypeConstraints()
- {
- return "Restrições do Tipo";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.6.0 (mainly for the new search engine)
-//////////////////////////////////////////////////////////////////////////
-
- /*! directory relation for \a name
- */
- virtual QCString trDirRelation(const char *name)
- {
- return "Relação " + QCString(name);
- }
-
- /*! Loading message shown when loading search results */
- virtual QCString trLoading()
- {
- return "Carregando...";
- }
-
- /*! Label used for search results in the global namespace */
- virtual QCString trGlobalNamespace()
- {
- return "Namespace global";
- }
-
- /*! Message shown while searching */
- virtual QCString trSearching()
- {
- return "Procurando...";
- }
-
- /*! Text shown when no search results are found */
- virtual QCString trNoMatches()
- {
- return "Nenhuma entrada encontrada";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.6.3 (missing items for the directory pages)
-//////////////////////////////////////////////////////////////////////////
-
- /*! introduction text for the directory dependency graph */
- virtual QCString trDirDependency(const char *name)
- {
- return (QCString)"Grafo de dependência de diretórios para "+name;
- }
-
- /*! when clicking a directory dependency label, a page with a
- * table is shown. The heading for the first column mentions the
- * source file that has a relation to another file.
- */
- virtual QCString trFileIn(const char *name)
- {
- return (QCString)"Arquivo em "+name;
- }
-
- /*! when clicking a directory dependency label, a page with a
- * table is shown. The heading for the second column mentions the
- * destination file that is included.
- */
- virtual QCString trIncludesFileIn(const char *name)
- {
- return (QCString)"Inclui arquivo em "+name;
- }
-
- /** Compiles a date string.
- * @param year Year in 4 digits
- * @param month Month of the year: 1=January
- * @param day Day of the Month: 1..31
- * @param dayOfWeek Day of the week: 1=Monday..7=Sunday
- * @param hour Hour of the day: 0..23
- * @param minutes Minutes in the hour: 0..59
- * @param seconds Seconds within the minute: 0..59
- * @param includeTime Include time in the result string?
- */
- virtual QCString trDateTime(int year,int month,int day,int dayOfWeek,
- int hour,int minutes,int seconds,
- bool includeTime)
- {
- static const char *days[] = { "Segunda","Terça","Quarta","Quinta","Sexta","Sábado","Domingo" };
- static const char *months[] = { "Janeiro","Fevereiro","Março","Abril","Maio","Junho","Julho","Agosto","Setembro","Outubro","Novembro","Dezembro" };
- QCString sdate;
- sdate.sprintf("%s, %d de %s de %d",days[dayOfWeek-1],day,months[month-1],year);
- if (includeTime)
- {
- QCString stime;
- stime.sprintf(" %.2d:%.2d:%.2d",hour,minutes,seconds);
- sdate+=stime;
- }
- return sdate;
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.7.5
-//////////////////////////////////////////////////////////////////////////
-
- /*! Header for the page with bibliographic citations */
- virtual QCString trCiteReferences()
- { return "Referências Bibliográficas"; }
-
- /*! Text for copyright paragraph */
- virtual QCString trCopyright()
- {
- // Note: I will left it as is because "Direitos autorais" may not fit
- // in the text.
- return "Copyright";
- }
-
- /*! Header for the graph showing the directory dependencies */
- virtual QCString trDirDepGraph(const char *name)
- { return QCString("Grafo de dependências do diretório ")+name+":"; }
-};
-#endif
diff --git a/trunk/src/translator_ca.h b/trunk/src/translator_ca.h
deleted file mode 100644
index 595fe67..0000000
--- a/trunk/src/translator_ca.h
+++ /dev/null
@@ -1,1893 +0,0 @@
-/******************************************************************************
- *
- *
- *
- * Copyright (C) 1997-2012 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.
- *
- */
-
-#ifndef TRANSLATOR_CA_H
-#define TRANSLATOR_CA_H
-
-/*!
- When defining a translator class for the new language, follow
- the description in the documentation. One of the steps says
- that you should copy the translator_en.h (this) file to your
- translator_xx.h new file. Your new language should use the
- Translator class as the base class. This means that you need to
- implement exactly the same (pure virtual) methods as the
- TranslatorEnglish does. Because of this, it is a good idea to
- start with the copy of TranslatorEnglish and replace the strings
- one by one.
-
- It is not necessary to include "translator.h" or
- "translator_adapter.h" here. The files are included in the
- language.cpp correctly. Not including any of the mentioned
- files frees the maintainer from thinking about whether the
- first, the second, or both files should be included or not, and
- why. This holds namely for localized translators because their
- base class is changed occasionaly to adapter classes when the
- Translator class changes the interface, or back to the
- Translator class (by the local maintainer) when the localized
- translator is made up-to-date again.
-*/
-class TranslatorCatalan : public Translator
-{
- public:
-
- // --- Language control methods -------------------
-
- /*! Used for identification of the language. The identification
- * should not be translated. It should be replaced by the name
- * of the language in English using lower-case characters only
- * (e.g. "czech", "japanese", "russian", etc.). It should be equal to
- * the identification used in language.cpp.
- */
- virtual QCString idLanguage()
- { return "catalan"; }
-
- /*! Used to get the LaTeX command(s) for the language support.
- * This method should return string with commands that switch
- * LaTeX to the desired language. For example
- * <pre>"\\usepackage[german]{babel}\n"
- * </pre>
- * or
- * <pre>"\\usepackage{polski}\n"
- * "\\usepackage[latin2]{inputenc}\n"
- * "\\usepackage[T1]{fontenc}\n"
- * </pre>
- *
- * The English LaTeX does not use such commands. Because of this
- * the empty string is returned in this implementation.
- */
- virtual QCString latexLanguageSupportCommand()
- {
- //return "\\usepackage[catalan]{babel}\n\\usepackage[latin1]{inputenc}";
- return "\\usepackage[catalan]{babel}\n";
- }
-
- /*! return the language charset. This will be used for the HTML output */
- virtual QCString idLanguageCharset()
- {
- return "utf-8";
- }
-
- // --- Language translation methods -------------------
-
- /*! used in the compound documentation before a list of related functions. */
- virtual QCString trRelatedFunctions()
- { return "Funcions Associades"; }
-
- /*! subscript for the related functions. */
- virtual QCString trRelatedSubscript()
- { return "(Remarcar que aquestes funcions no són funcions membre.)"; }
-
- /*! header that is put before the detailed description of files, classes and namespaces. */
- virtual QCString trDetailedDescription()
- { return "Descripció Detallada"; }
-
- /*! header that is put before the list of typedefs. */
- virtual QCString trMemberTypedefDocumentation()
- { return "Documentació de les Definicions de Tipus Membre"; }
-
- /*! header that is put before the list of enumerations. */
- virtual QCString trMemberEnumerationDocumentation()
- { return "Documentació de les Enumeracions Membre"; }
-
- /*! header that is put before the list of member functions. */
- virtual QCString trMemberFunctionDocumentation()
- { return "Documentació de les Funcions Membre"; }
-
- /*! header that is put before the list of member attributes. */
- virtual QCString trMemberDataDocumentation()
- {
- if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
- {
- return "Documentació dels Camps";
- }
- else
- {
- return "Documentació de les Dades Membre";
- }
- }
-
- /*! this is the text of a link put after brief descriptions. */
- virtual QCString trMore()
- { return "Més..."; }
-
- /*! put in the class documentation */
- virtual QCString trListOfAllMembers()
- { return "Llista de tots els membres."; }
-
- /*! used as the title of the "list of all members" page of a class */
- virtual QCString trMemberList()
- { return "Llista dels Membres"; }
-
- /*! this is the first part of a sentence that is followed by a class name */
- virtual QCString trThisIsTheListOfAllMembers()
- { return "Aquesta és la llista complerta dels membres de "; }
-
- /*! this is the remainder of the sentence after the class name */
- virtual QCString trIncludingInheritedMembers()
- { return ", incloent tots els membres heretats."; }
-
- /*! this is put at the author sections at the bottom of man pages.
- * parameter s is name of the project name.
- */
- virtual QCString trGeneratedAutomatically(const char *s)
- { QCString result="Generat automàticament per Doxygen";
- if (s) result+=(QCString)" per a "+s;
- result+=" a partir del codi font.";
- return result;
- }
-
- /*! put after an enum name in the list of all members */
- virtual QCString trEnumName()
- { return "nom de la enum"; }
-
- /*! put after an enum value in the list of all members */
- virtual QCString trEnumValue()
- { return "valors de la enum"; }
-
- /*! put after an undocumented member in the list of all members */
- virtual QCString trDefinedIn()
- { return "definit a"; }
-
- // quick reference sections
-
- /*! This is put above each page as a link to the list of all groups of
- * compounds or files (see the \\group command).
- */
- virtual QCString trModules()
- { return "Mòduls"; }
-
- /*! This is put above each page as a link to the class hierarchy */
- virtual QCString trClassHierarchy()
- { return "Jerarquia de Classes"; }
-
- /*! This is put above each page as a link to the list of annotated classes */
- virtual QCString trCompoundList()
- {
- if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
- {
- return "Estructures de Dades";
- }
- else
- {
- return "Llista de Classes";
- }
- }
-
- /*! This is put above each page as a link to the list of documented files */
- virtual QCString trFileList()
- { return "Llista dels Fitxers"; }
-
- /*! This is put above each page as a link to all members of compounds. */
- virtual QCString trCompoundMembers()
- {
- if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
- {
- return "Camps de Dades";
- }
- else
- {
- return "Membres de Classes";
- }
- }
-
- /*! This is put above each page as a link to all members of files. */
- virtual QCString trFileMembers()
- {
- if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
- {
- return "Globals";
- }
- else
- {
- return "Membres de Fitxers";
- }
- }
-
- /*! This is put above each page as a link to all related pages. */
- virtual QCString trRelatedPages()
- { return "Pàgines Relacionades"; }
-
- /*! This is put above each page as a link to all examples. */
- virtual QCString trExamples()
- { return "Exemples"; }
-
- /*! This is put above each page as a link to the search engine. */
- virtual QCString trSearch()
- { return "Cerca"; }
-
- /*! This is an introduction to the class hierarchy. */
- virtual QCString trClassHierarchyDescription()
- { return "Aquesta llista d'herència està ordenada toscament, "
- "però no completa, de forma alfabètica:";
- }
-
- /*! This is an introduction to the list with all files. */
- virtual QCString trFileListDescription(bool extractAll)
- {
- QCString result="Aquesta és la llista de tots els fitxers ";
- if (!extractAll) result+="documentats ";
- result+="acompanyats amb breus descripcions:";
- return result;
- }
-
- /*! This is an introduction to the annotated compound list. */
- virtual QCString trCompoundListDescription()
- {
-
- if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
- {
- return "Aquestes són les estructures de dades acompanyades amb breus descripcions:";
- }
- else
- {
- return "Aquestes són les classes, estructures, "
- "unions i interfícies acompanyades amb breus descripcions:";
- }
- }
-
- /*! This is an introduction to the page with all class members. */
- virtual QCString trCompoundMembersDescription(bool extractAll)
- {
- QCString result="Aquesta és la llista de tots els ";
- if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
- {
- result+="camps d'estructures i unions";
- }
- else
- {
- result+="membres de classe";
- }
- if (!extractAll)
- {
- result+=" documentats";
- }
- result+=" amb enllaços a ";
- if (!extractAll)
- {
- if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
- {
- result+="la documentació de l'estructura/unió per a cada camp:";
- }
- else
- {
- result+="la documentació de la classe per a cada membre:";
- }
- }
- else
- {
- if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
- {
- result+="les estructures/unions a que pertanyen:";
- }
- else
- {
- result+="les classes a que pertanyen:";
- }
- }
- return result;
- }
- /*! This is an introduction to the page with all file members. */
- virtual QCString trFileMembersDescription(bool extractAll)
- {
- QCString result="Aquesta és la llista de ";
- if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
- {
- result+="totes les funcions, variables, definicions, enumeracions, i definicions de tipus";
- if (!extractAll) result+=" documentades";
- }
- else
- {
- result+="tots els membres de fitxers";
- if (!extractAll) result+=" documentats";
- }
- result+=" amb enllaços ";
- if (extractAll)
- result+="als fitxers als quals corresponen:";
- else
- result+="a la documentació:";
- return result;
- }
-
- /*! This is an introduction to the page with the list of all examples */
- virtual QCString trExamplesDescription()
- { return "Aquesta és la llista de tots els exemples:"; }
-
- /*! This is an introduction to the page with the list of related pages */
- virtual QCString trRelatedPagesDescription()
- { return "Aquesta és la llista de totes les pàgines de documentació associades:"; }
-
- /*! This is an introduction to the page with the list of class/file groups */
- virtual QCString trModulesDescription()
- { return "Aquesta és la llista de mòduls:"; }
-
- // index titles (the project name is prepended for these)
-
-
- /*! This is used in HTML as the title of index.html. */
- virtual QCString trDocumentation()
- { return ": Documentació"; }
-
- /*! This is used in LaTeX as the title of the chapter with the
- * index of all groups.
- */
- virtual QCString trModuleIndex()
- { return "Ãndex de Mòduls"; }
-
- /*! This is used in LaTeX as the title of the chapter with the
- * class hierarchy.
- */
- virtual QCString trHierarchicalIndex()
- { return "Ãndex Jeràrquic"; }
-
- /*! This is used in LaTeX as the title of the chapter with the
- * annotated compound index.
- */
- virtual QCString trCompoundIndex()
- {
- if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
- {
- return "Ãndex d'Estructures de Dades";
- }
- else
- {
- return "Ãndex de Classes";
- }
- }
-
- /*! This is used in LaTeX as the title of the chapter with the
- * list of all files.
- */
- virtual QCString trFileIndex()
- { return "Ãndex de Fitxers"; }
-
- /*! This is used in LaTeX as the title of the chapter containing
- * the documentation of all groups.
- */
- virtual QCString trModuleDocumentation()
- { return "Documentació dels Mòduls"; }
-
- /*! This is used in LaTeX as the title of the chapter containing
- * the documentation of all classes, structs and unions.
- */
- virtual QCString trClassDocumentation()
- {
- if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
- {
- return "Documentació de les Estructures de Dades";
- }
- else
- {
- return "Documentació de les Classes";
- }
- }
-
- /*! This is used in LaTeX as the title of the chapter containing
- * the documentation of all files.
- */
- virtual QCString trFileDocumentation()
- { return "Documentació dels Fitxers"; }
-
- /*! This is used in LaTeX as the title of the chapter containing
- * the documentation of all examples.
- */
- virtual QCString trExampleDocumentation()
- { return "Documentació dels Exemples"; }
-
- /*! This is used in LaTeX as the title of the chapter containing
- * the documentation of all related pages.
- */
- virtual QCString trPageDocumentation()
- { return "Documentació de les Pàgines"; }
-
- /*! This is used in LaTeX as the title of the document */
- virtual QCString trReferenceManual()
- { return "Manual de Referència"; }
-
- /*! This is used in the documentation of a file as a header before the
- * list of defines
- */
- virtual QCString trDefines()
- { return "Definicions"; }
-
- /*! This is used in the documentation of a file as a header before the
- * list of function prototypes
- */
- virtual QCString trFuncProtos()
- { return "Prototipus de Funcions"; }
-
- /*! This is used in the documentation of a file as a header before the
- * list of typedefs
- */
- virtual QCString trTypedefs()
- { return "Definicions de Tipus"; }
-
- /*! This is used in the documentation of a file as a header before the
- * list of enumerations
- */
- virtual QCString trEnumerations()
- { return "Enumeracions"; }
-
- /*! This is used in the documentation of a file as a header before the
- * list of (global) functions
- */
- virtual QCString trFunctions()
- { return "Funcions"; }
-
- /*! This is used in the documentation of a file as a header before the
- * list of (global) variables
- */
- virtual QCString trVariables()
- { return "Variables"; }
-
- /*! This is used in the documentation of a file as a header before the
- * list of (global) variables
- */
- virtual QCString trEnumerationValues()
- { return "Valors de les Enumeracions"; }
-
- /*! This is used in the documentation of a file before the list of
- * documentation blocks for defines
- */
- virtual QCString trDefineDocumentation()
- { return "Documentació de les Definicions"; }
-
- /*! This is used in the documentation of a file/namespace before the list
- * of documentation blocks for function prototypes
- */
- virtual QCString trFunctionPrototypeDocumentation()
- { return "Documentació de les Funcions Prototipus"; }
-
- /*! This is used in the documentation of a file/namespace before the list
- * of documentation blocks for typedefs
- */
- virtual QCString trTypedefDocumentation()
- { return "Documentació de les Definicions de Tipus"; }
-
- /*! This is used in the documentation of a file/namespace before the list
- * of documentation blocks for enumeration types
- */
- virtual QCString trEnumerationTypeDocumentation()
- { return "Documentació dels Tipus de les Enumeracions"; }
-
- /*! This is used in the documentation of a file/namespace before the list
- * of documentation blocks for functions
- */
- virtual QCString trFunctionDocumentation()
- { return "Documentació de les Funcions"; }
-
- /*! This is used in the documentation of a file/namespace before the list
- * of documentation blocks for variables
- */
- virtual QCString trVariableDocumentation()
- { return "Documentació de les Variables"; }
-
- /*! This is used in the documentation of a file/namespace/group before
- * the list of links to documented compounds
- */
- virtual QCString trCompounds()
- {
- if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
- {
- return "Estructures de Dades";
- }
- else
- {
- return "Classes";
- }
- }
-
- /*! This is used in the standard footer of each page and indicates when
- * the page was generated
- */
- virtual QCString trGeneratedAt(const char *date,const char *projName)
- {
- QCString result=(QCString)"Generat a "+date;
- if (projName) result+=(QCString)" per a "+projName;
- result+=(QCString)" per";
- return result;
- }
- /*! This is part of the sentence used in the standard footer of each page.
- */
- virtual QCString trWrittenBy()
- {
- return "escrit per";
- }
-
- /*! this text is put before a class diagram */
- virtual QCString trClassDiagram(const char *clName)
- {
- return (QCString)"Diagrama d'Herència per a "+clName+":";
- }
-
- /*! this text is generated when the \\internal command is used. */
- virtual QCString trForInternalUseOnly()
- { return "Tan sols per a ús intern."; }
-
- /*! this text is generated when the \\warning command is used. */
- virtual QCString trWarning()
- { return "Atenció"; }
-
- /*! this text is generated when the \\version command is used. */
- virtual QCString trVersion()
- { return "Versió"; }
-
- /*! this text is generated when the \\date command is used. */
- virtual QCString trDate()
- { return "Data"; }
-
- /*! this text is generated when the \\return command is used. */
- virtual QCString trReturns()
- { return "Retorna"; }
-
- /*! this text is generated when the \\sa command is used. */
- virtual QCString trSeeAlso()
- { return "Mireu també"; }
-
- /*! this text is generated when the \\param command is used. */
- virtual QCString trParameters()
- { return "Paràmetres"; }
-
- /*! this text is generated when the \\exception command is used. */
- virtual QCString trExceptions()
- { return "Excepcions"; }
-
- /*! this text is used in the title page of a LaTeX document. */
- virtual QCString trGeneratedBy()
- { return "Generat per"; }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 0.49-990307
-//////////////////////////////////////////////////////////////////////////
-
- /*! used as the title of page containing all the index of all namespaces. */
- virtual QCString trNamespaceList()
- { return "Llista dels Espais de Noms"; }
-
- /*! used as an introduction to the namespace list */
- virtual QCString trNamespaceListDescription(bool extractAll)
- {
- QCString result="Aquests són tots els espais de noms ";
- if (!extractAll) result+="documentats ";
- result+="amb breus descripcions:";
- return result;
- }
-
- /*! used in the class documentation as a header before the list of all
- * friends of a class
- */
- virtual QCString trFriends()
- { return "Classes Amigues"; }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 0.49-990405
-//////////////////////////////////////////////////////////////////////////
-
- /*! used in the class documentation as a header before the list of all
- * related classes
- */
- virtual QCString trRelatedFunctionDocumentation()
- { return "Documentació de funcions amigues i relacionades"; }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 0.49-990425
-//////////////////////////////////////////////////////////////////////////
-
- /*! used as the title of the HTML page of a class/struct/union */
- virtual QCString trCompoundReference(const char *clName,
- ClassDef::CompoundType compType,
- bool isTemplate)
- {
- QCString result="Referència de";
- switch(compType)
- {
- case ClassDef::Class: result+=" la Classe "; break;
- case ClassDef::Struct: result+=" l'Estructura "; break;
- case ClassDef::Union: result+=" la Unió "; break;
- case ClassDef::Interface: result+=" la Interfície "; break;
- case ClassDef::Protocol: result+="l Protocol "; break;
- case ClassDef::Category: result+=" la Categoria "; break;
- case ClassDef::Exception: result+=" l'Excepció "; break;
- }
- if (isTemplate) result+="Template ";
- result+=(QCString)clName;
- return result;
- }
-
- /*! used as the title of the HTML page of a file */
- virtual QCString trFileReference(const char *fileName)
- {
- QCString result="Referència del Fitxer ";
- result+=fileName;
- return result;
- }
-
- /*! used as the title of the HTML page of a namespace */
- virtual QCString trNamespaceReference(const char *namespaceName)
- {
- QCString result="Referència de l'Espai de Noms ";
- result+=namespaceName;
- return result;
- }
-
- virtual QCString trPublicMembers()
- { return "Mètodes públics"; }
- virtual QCString trPublicSlots()
- { return "Slots públics"; }
- virtual QCString trSignals()
- { return "Senyals"; }
- virtual QCString trStaticPublicMembers()
- { return "Mètodes Públics Estàtics"; }
- virtual QCString trProtectedMembers()
- { return "Mètodes Protegits"; }
- virtual QCString trProtectedSlots()
- { return "Slots Protegits"; }
- virtual QCString trStaticProtectedMembers()
- { return "Mètodes Protegits Estàtics"; }
- virtual QCString trPrivateMembers()
- { return "Mètodes Privats"; }
- virtual QCString trPrivateSlots()
- { return "Slots Privats"; }
- virtual QCString trStaticPrivateMembers()
- { return "Mètodes Privats Estàtics"; }
-
- /*! this function is used to produce a comma-separated list of items.
- * use generateMarker(i) to indicate where item i should be put.
- */
- virtual QCString trWriteList(int numEntries)
- {
- QCString result;
- int i;
- // the inherits list contain `numEntries' classes
- for (i=0;i<numEntries;i++)
- {
- // use generateMarker to generate placeholders for the class links!
- result+=generateMarker(i); // generate marker for entry i in the list
- // (order is left to right)
-
- if (i!=numEntries-1) // not the last entry, so we need a separator
- {
- if (i<numEntries-2) // not the fore last entry
- result+=", ";
- else // the fore last entry
- result+=" i ";
- }
- }
- return result;
- }
-
- /*! used in class documentation to produce a list of base classes,
- * if class diagrams are disabled.
- */
- virtual QCString trInheritsList(int numEntries)
- {
- return "Hereta de "+trWriteList(numEntries)+".";
- }
-
- /*! used in class documentation to produce a list of super classes,
- * if class diagrams are disabled.
- */
- virtual QCString trInheritedByList(int numEntries)
- {
- return "Heretat per "+trWriteList(numEntries)+".";
- }
-
- /*! used in member documentation blocks to produce a list of
- * members that are hidden by this one.
- */
- virtual QCString trReimplementedFromList(int numEntries)
- {
- return "Reimplementat de "+trWriteList(numEntries)+".";
- }
-
- /*! used in member documentation blocks to produce a list of
- * all member that overwrite the implementation of this member.
- */
- virtual QCString trReimplementedInList(int numEntries)
- {
- return "Reimplementat a "+trWriteList(numEntries)+".";
- }
-
- /*! This is put above each page as a link to all members of namespaces. */
- virtual QCString trNamespaceMembers()
- { return "Membres de l'Espai de Noms"; }
-
- /*! This is an introduction to the page with all namespace members */
- virtual QCString trNamespaceMemberDescription(bool extractAll)
- {
- QCString result="Aquesta és la llista de tots els membres de l'espai de noms ";
- if (!extractAll) result+="documentats ";
- result+="amb enllaços a ";
- if (extractAll)
- result+="la documentació de l'espai de noms de cada membre:";
- else
- result+="l'espai de noms al qual corresponen:";
- return result;
- }
- /*! This is used in LaTeX as the title of the chapter with the
- * index of all namespaces.
- */
- virtual QCString trNamespaceIndex()
- { return "Ãndex d'Espais de Noms"; }
-
- /*! This is used in LaTeX as the title of the chapter containing
- * the documentation of all namespaces.
- */
- virtual QCString trNamespaceDocumentation()
- { return "Documentació de l'Espai de Noms"; }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 0.49-990522
-//////////////////////////////////////////////////////////////////////////
-
- /*! This is used in the documentation before the list of all
- * namespaces in a file.
- */
- virtual QCString trNamespaces()
- { return "Espais de Noms"; }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 0.49-990728
-//////////////////////////////////////////////////////////////////////////
-
- /*! This is put at the bottom of a class documentation page and is
- * followed by a list of files that were used to generate the page.
- */
- virtual QCString trGeneratedFromFiles(ClassDef::CompoundType compType,
- bool single)
- { // here s is one of " Class", " Struct" or " Union"
- // single is true implies a single file
- QCString result=(QCString)"La documentació d'aquest";
- switch(compType)
- {
- case ClassDef::Class: result+="a classe"; break;
- case ClassDef::Struct: result+="a estructura"; break;
- case ClassDef::Union: result+="a unió"; break;
- case ClassDef::Interface: result+="a interfície"; break;
- case ClassDef::Protocol: result+=" protocol"; break;
- case ClassDef::Category: result+="a categoria"; break;
- case ClassDef::Exception: result+="a excepció"; break;
- }
- result+=" es va generar a partir del";
- if (!single) result+="s";
- result+=" següent";
- if (!single) result+="s";
- result+=" fitxer";
- if (!single) result+="s:"; else result+=":";
- return result;
- }
-
- /*! This is in the (quick) index as a link to the alphabetical compound
- * list.
- */
- virtual QCString trAlphabeticalList()
- { return "Llista Alfabètica"; }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 0.49-990901
-//////////////////////////////////////////////////////////////////////////
-
- /*! This is used as the heading text for the retval command. */
- virtual QCString trReturnValues()
- { return "Valors de retorn"; }
-
- /*! This is in the (quick) index as a link to the main page (index.html)
- */
- virtual QCString trMainPage()
- { return "Pàgina principal"; }
-
- /*! This is used in references to page that are put in the LaTeX
- * documentation. It should be an abbreviation of the word page.
- */
- virtual QCString trPageAbbreviation()
- { return "p."; }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 0.49-991003
-//////////////////////////////////////////////////////////////////////////
-
- virtual QCString trDefinedAtLineInSourceFile()
- {
- return "Definició a la línia @0 del fitxer @1.";
- }
- virtual QCString trDefinedInSourceFile()
- {
- return "Definició al fitxer @0.";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 0.49-991205
-//////////////////////////////////////////////////////////////////////////
-
- virtual QCString trDeprecated()
- {
- return "Antiquat";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.0.0
-//////////////////////////////////////////////////////////////////////////
-
- /*! this text is put before a collaboration diagram */
- virtual QCString trCollaborationDiagram(const char *clName)
- {
- return (QCString)"Diagrama de col·laboració per a "+clName+":";
- }
- /*! this text is put before an include dependency graph */
- virtual QCString trInclDepGraph(const char *fName)
- {
- return (QCString)"Inclou el graf de dependències per a "+fName+":";
- }
- /*! header that is put before the list of constructor/destructors. */
- virtual QCString trConstructorDocumentation()
- {
- return "Documentació del Constructor i el Destructor";
- }
- /*! Used in the file documentation to point to the corresponding sources. */
- virtual QCString trGotoSourceCode()
- {
- return "Veure el codi d'aquest fitxer.";
- }
- /*! Used in the file sources to point to the corresponding documentation. */
- virtual QCString trGotoDocumentation()
- {
- return "Veure la documentació d'aquest fitxer.";
- }
- /*! Text for the \\pre command */
- virtual QCString trPrecondition()
- {
- return "Precondició";
- }
- /*! Text for the \\post command */
- virtual QCString trPostcondition()
- {
- return "Postcondició";
- }
- /*! Text for the \\invariant command */
- virtual QCString trInvariant()
- {
- return "Invariant";
- }
- /*! Text shown before a multi-line variable/enum initialization */
- virtual QCString trInitialValue()
- {
- return "Valor inicial:";
- }
- /*! Text used the source code in the file index */
- virtual QCString trCode()
- {
- return "codi";
- }
- virtual QCString trGraphicalHierarchy()
- {
- return "Jerarquia Gràfica de la Classe";
- }
- virtual QCString trGotoGraphicalHierarchy()
- {
- return "Veure la jerarquia gràfica de la classe";
- }
- virtual QCString trGotoTextualHierarchy()
- {
- return "Veure la jerarquia textual de la classe";
- }
- virtual QCString trPageIndex()
- {
- return "Ãndex de Pàgines";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.1.0
-//////////////////////////////////////////////////////////////////////////
-
- virtual QCString trNote()
- {
- return "Nota";
- }
- virtual QCString trPublicTypes()
- {
- return "Tipus Públics";
- }
- virtual QCString trPublicAttribs()
- {
- if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
- {
- return "Camps de Dades";
- }
- else
- {
- return "Atributs Públics";
- }
- }
- virtual QCString trStaticPublicAttribs()
- {
- return "Atributs Públics Estàtics";
- }
- virtual QCString trProtectedTypes()
- {
- return "Tipus Protegits";
- }
- virtual QCString trProtectedAttribs()
- {
- return "Atributs Protegits";
- }
- virtual QCString trStaticProtectedAttribs()
- {
- return "Atributs Protegits Estàtics";
- }
- virtual QCString trPrivateTypes()
- {
- return "Tipus Privats";
- }
- virtual QCString trPrivateAttribs()
- {
- return "Atributs Privats";
- }
- virtual QCString trStaticPrivateAttribs()
- {
- return "Atributs Privats Estàtics";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.1.3
-//////////////////////////////////////////////////////////////////////////
-
- /*! Used as a marker that is put before a \\todo item */
- virtual QCString trTodo()
- {
- return "Per fer";
- }
- /*! Used as the header of the todo list */
- virtual QCString trTodoList()
- {
- return "Llista de coses per fer";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.1.4
-//////////////////////////////////////////////////////////////////////////
-
- virtual QCString trReferencedBy()
- {
- return "Referenciat a";
- }
- virtual QCString trRemarks()
- {
- return "Remarca";
- }
- virtual QCString trAttention()
- {
- return "Atenció";
- }
- virtual QCString trInclByDepGraph()
- {
- return "Aquest gràfic mostra quins fitxers inclouen, "
- "de forma directa o indirecta, aquest fitxer:";
- }
- virtual QCString trSince()
- {
- return "Des de";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.1.5
-//////////////////////////////////////////////////////////////////////////
-
- /*! title of the graph legend page */
- virtual QCString trLegendTitle()
- {
- return "Llegenda del Gràfic";
- }
- /*! page explaining how the dot graph's should be interpreted
- * The %A in the text below are to prevent link to classes called "A".
- */
- virtual QCString trLegendDocs()
- {
- return
- "Aquesta pàgina explica com s'interpreten els gràfics generats per doxygen.<p>\n"
- "Considera aquest exemple:\n"
- "\\code\n"
- "/*! Classe invisible per culpa del retall */\n"
- "class Invisible { };\n\n"
- "/*! Classe truncada, l'herència està amagada */\n"
- "class Truncated : public Invisible { };\n\n"
- "/* Classe no documentada amb comentaris doxygen */\n"
- "class Undocumented { };\n\n"
- "/*! Classe heredada amb herència pública */\n"
- "class PublicBase : public Truncated { };\n\n"
- "/*! Una classe Template */\n"
- "template<class T> class Templ { };\n\n"
- "/*! Classe heredada utilitzant herència protegida */\n"
- "class ProtectedBase { };\n\n"
- "/*! Classe heredada utiltzant herència privada */\n"
- "class PrivateBase { };\n\n"
- "/*! Classe usada per la classe heretada */\n"
- "class Used { };\n\n"
- "/*! Super classe que hereda una quantitat de classes */\n"
- "class Inherited : public PublicBase,\n"
- " protected ProtectedBase,\n"
- " private PrivateBase,\n"
- " public Undocumented,\n"
- " public Templ<int>\n"
- "{\n"
- " private:\n"
- " Used *m_usedClass;\n"
- "};\n"
- "\\endcode\n"
- "Resultarà el gràfic següent:"
- "<p><center><img alt=\"\" src=\"graph_legend."+Config_getEnum("DOT_IMAGE_FORMAT")+"\"></center>\n"
- "<p>\n"
- "Les caixes del gràfic superior tenen aquesta interpretació:\n"
- "<ul>\n"
- "<li>Una caixa negra plena represent l'estructura o classe per la qual el gràfic s'ha generat.\n"
- "<li>Una caixa de vora negra representa una estructura o classe documentada.\n"
- "<li>Una caixa de vora verda representa una estructura o classe indocumentada.\n"
- "<li>Una caixa de vora vermalla representa una estructura o classe documentada de la qual "
- "no es mostren totes les relacions d'herència/inclusió. Un gràfic és truncat si no s'ajusta als límits.\n"
- "</ul>\n"
- "Les sagetes tenen aquest significat:\n"
- "<ul>\n"
- "<li>Una sageta blau fosc remarca una relació d'herència de tipus pública entre dues classes.\n"
- "<li>Una sageta verd fosc remarca una relació d'herència de tipus protegida entre dues classes.\n"
- "<li>Una sageta roig fosc remarca una relació d'herència de tipus privada entre dues classes.\n"
- "<li>Una sageta puntejada de color porpra indica que una classe és continguda o usada per una altra classe."
- " La sageta s'etiqueta amb la variable o variables a través de les quals la classe o estructura apuntada és accessible.\n"
- "<li>Una sageta puntejada de color groc indica la relació entre una instància template i la classe template de què ha set instanciada."
- " La sageta s'etiqueta amb els paràmetres template de la instància.\n"
- "</ul>\n";
- }
- /*! text for the link to the legend page */
- virtual QCString trLegend()
- {
- return "llegenda";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.2.0
-//////////////////////////////////////////////////////////////////////////
-
- /*! Used as a marker that is put before a test item */
- virtual QCString trTest()
- {
- return "Prova";
- }
- /*! Used as the header of the test list */
- virtual QCString trTestList()
- {
- return "Llista de proves";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.2.1
-//////////////////////////////////////////////////////////////////////////
-
- /*! Used as a section header for KDE-2 IDL methods */
- virtual QCString trDCOPMethods()
- {
- return "Mètodes DCOP";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.2.2
-//////////////////////////////////////////////////////////////////////////
-
- /*! Used as a section header for IDL properties */
- virtual QCString trProperties()
- {
- return "Propietats";
- }
- /*! Used as a section header for IDL property documentation */
- virtual QCString trPropertyDocumentation()
- {
- return "Documentació de les Propietats";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.2.4
-//////////////////////////////////////////////////////////////////////////
-
- /*! Used for Java classes in the summary section of Java packages */
- virtual QCString trClasses()
- {
- if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
- {
- return "Estructures de Dades";
- }
- else
- {
- return "Classes";
- }
- }
- /*! Used as the title of a Java package */
- virtual QCString trPackage(const char *name)
- {
- return (QCString)"Paquet "+name;
- }
- /*! Title of the package index page */
- virtual QCString trPackageList()
- {
- return "Llista de Paquets";
- }
- /*! The description of the package index page */
- virtual QCString trPackageListDescription()
- {
- return "Aquesta és la llista de paquets, amb una breu descripció (si se'n disposa):";
- }
- /*! The link name in the Quick links header for each page */
- virtual QCString trPackages()
- {
- return "Paquets";
- }
- /*! Text shown before a multi-line define */
- virtual QCString trDefineValue()
- {
- return "Valor:";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.2.5
-//////////////////////////////////////////////////////////////////////////
-
- /*! Used as a marker that is put before a \\bug item */
- virtual QCString trBug()
- {
- return "Error";
- }
- /*! Used as the header of the bug list */
- virtual QCString trBugList()
- {
- return "Llista d'Errors";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.2.6
-//////////////////////////////////////////////////////////////////////////
-
- /*! Used as ansicpg for RTF file
- *
- * The following table shows the correlation of Charset name, Charset Value and
- * <pre>
- * Codepage number:
- * Charset Name Charset Value(hex) Codepage number
- * ------------------------------------------------------
- * DEFAULT_CHARSET 1 (x01)
- * SYMBOL_CHARSET 2 (x02)
- * OEM_CHARSET 255 (xFF)
- * ANSI_CHARSET 0 (x00) 1252
- * RUSSIAN_CHARSET 204 (xCC) 1251
- * EE_CHARSET 238 (xEE) 1250
- * GREEK_CHARSET 161 (xA1) 1253
- * TURKISH_CHARSET 162 (xA2) 1254
- * BALTIC_CHARSET 186 (xBA) 1257
- * HEBREW_CHARSET 177 (xB1) 1255
- * ARABIC _CHARSET 178 (xB2) 1256
- * SHIFTJIS_CHARSET 128 (x80) 932
- * HANGEUL_CHARSET 129 (x81) 949
- * GB2313_CHARSET 134 (x86) 936
- * CHINESEBIG5_CHARSET 136 (x88) 950
- * </pre>
- *
- */
- virtual QCString trRTFansicp()
- {
- return "1252";
- }
-
-
- /*! Used as ansicpg for RTF fcharset
- * \see trRTFansicp() for a table of possible values.
- */
- virtual QCString trRTFCharSet()
- {
- return "0";
- }
-
- /*! Used as header RTF general index */
- virtual QCString trRTFGeneralIndex()
- {
- return "Ãndex";
- }
-
- /*! This is used for translation of the word that will possibly
- * be followed by a single name or by a list of names
- * of the category.
- */
- virtual QCString trClass(bool first_capital, bool singular)
- {
- QCString result((first_capital ? "Classe" : "classe"));
- if (!singular) result+="s";
- return result;
- }
-
- /*! This is used for translation of the word that will possibly
- * be followed by a single name or by a list of names
- * of the category.
- */
- virtual QCString trFile(bool first_capital, bool singular)
- {
- QCString result((first_capital ? "Fitxer" : "fitxer"));
- if (!singular) result+="s";
- return result;
- }
-
- /*! This is used for translation of the word that will possibly
- * be followed by a single name or by a list of names
- * of the category.
- */
- virtual QCString trNamespace(bool first_capital, bool singular)
- {
- QCString result((first_capital ? "Namespace" : "namespace"));
- if (!singular) result+="s";
- return result;
- }
-
- /*! This is used for translation of the word that will possibly
- * be followed by a single name or by a list of names
- * of the category.
- */
- virtual QCString trGroup(bool first_capital, bool singular)
- {
- QCString result((first_capital ? "Grup" : "grup"));
- if (!singular) result+="s";
- return result;
- }
-
- /*! This is used for translation of the word that will possibly
- * be followed by a single name or by a list of names
- * of the category.
- */
- virtual QCString trPage(bool first_capital, bool singular)
- {
- QCString result((first_capital ? "Pàgin" : "pàgin"));
- if (!singular) result+="es"; else result+="a";
- return result;
- }
-
- /*! This is used for translation of the word that will possibly
- * be followed by a single name or by a list of names
- * of the category.
- */
- virtual QCString trMember(bool first_capital, bool singular)
- {
- QCString result((first_capital ? "Membre" : "membre"));
- if (!singular) result+="s";
- return result;
- }
-
- /*! This is used for translation of the word that will possibly
- * be followed by a single name or by a list of names
- * of the category.
- */
- virtual QCString trGlobal(bool first_capital, bool singular)
- {
- QCString result((first_capital ? "Global" : "global"));
- if (!singular) result+="s";
- return result;
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.2.7
-//////////////////////////////////////////////////////////////////////////
-
- /*! This text is generated when the \\author command is used and
- * for the author section in man pages. */
- virtual QCString trAuthor(bool first_capital, bool singular)
- {
- QCString result((first_capital ? "Autor" : "autor"));
- if (!singular) result+="s";
- return result;
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.2.11
-//////////////////////////////////////////////////////////////////////////
-
- /*! This text is put before the list of members referenced by a member
- */
- virtual QCString trReferences()
- {
- return "Referències";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.2.13
-//////////////////////////////////////////////////////////////////////////
-
- /*! used in member documentation blocks to produce a list of
- * members that are implemented by this one.
- */
- virtual QCString trImplementedFromList(int numEntries)
- {
- return "Implementa "+trWriteList(numEntries)+".";
- }
-
- /*! used in member documentation blocks to produce a list of
- * all members that implement this abstract member.
- */
- virtual QCString trImplementedInList(int numEntries)
- {
- return "Implementat a "+trWriteList(numEntries)+".";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.2.16
-//////////////////////////////////////////////////////////////////////////
-
- /*! used in RTF documentation as a heading for the Table
- * of Contents.
- */
- virtual QCString trRTFTableOfContents()
- {
- return "Taula de Continguts";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.2.17
-//////////////////////////////////////////////////////////////////////////
-
- /*! Used as the header of the list of item that have been
- * flagged deprecated
- */
- virtual QCString trDeprecatedList()
- {
- return "Llista d'Antiquats";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.2.18
-//////////////////////////////////////////////////////////////////////////
-
- /*! Used as a header for declaration section of the events found in
- * a C# program
- */
- virtual QCString trEvents()
- {
- return "Esdeveniments";
- }
- /*! Header used for the documentation section of a class' events. */
- virtual QCString trEventDocumentation()
- {
- return "Documentació dels Esdeveniments";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.3
-//////////////////////////////////////////////////////////////////////////
-
- /*! Used as a heading for a list of Java class types with package scope.
- */
- virtual QCString trPackageTypes()
- {
- return "Tipus de paquets";
- }
- /*! Used as a heading for a list of Java class functions with package
- * scope.
- */
- virtual QCString trPackageMembers()
- {
- return "Funcions de Paquet";
- }
- /*! Used as a heading for a list of static Java class functions with
- * package scope.
- */
- virtual QCString trStaticPackageMembers()
- {
- return "Funcions Estàtiques de Paquet";
- }
- /*! Used as a heading for a list of Java class variables with package
- * scope.
- */
- virtual QCString trPackageAttribs()
- {
- return "Atributs de Paquet";
- }
- /*! Used as a heading for a list of static Java class variables with
- * package scope.
- */
- virtual QCString trStaticPackageAttribs()
- {
- return "Atributs Estàtics de Paquet";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.3.1
-//////////////////////////////////////////////////////////////////////////
-
- /*! Used in the quick index of a class/file/namespace member list page
- * to link to the unfiltered list of all members.
- */
- virtual QCString trAll()
- {
- return "Tot";
- }
- /*! Put in front of the call graph for a function. */
- virtual QCString trCallGraph()
- {
- return "Gràfic de crides d'aquesta funció:";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.3.3
-//////////////////////////////////////////////////////////////////////////
-
- /*! When the search engine is enabled this text is put in the header
- * of each page before the field where one can enter the text to search
- * for.
- */
- virtual QCString trSearchForIndex()
- {
- return "Buscar";
- }
- /*! This string is used as the title for the page listing the search
- * results.
- */
- virtual QCString trSearchResultsTitle()
- {
- return "Resultats de la Búsqueda";
- }
- /*! This string is put just before listing the search results. The
- * text can be different depending on the number of documents found.
- * Inside the text you can put the special marker $num to insert
- * the number representing the actual number of search results.
- * The @a numDocuments parameter can be either 0, 1 or 2, where the
- * value 2 represents 2 or more matches. HTML markup is allowed inside
- * the returned string.
- */
- virtual QCString trSearchResults(int numDocuments)
- {
- if (numDocuments==0)
- {
- return "No s'ha trobat cap document.";
- }
- else if (numDocuments==1)
- {
- return "Trobat <b>1</b> document.";
- }
- else
- {
- return "Trobats <b>$num</b> documents. "
- "Mostrant els millors resultats primer.";
- }
- }
- /*! This string is put before the list of matched words, for each search
- * result. What follows is the list of words that matched the query.
- */
- virtual QCString trSearchMatches()
- {
- return "Resultats:";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.3.8
-//////////////////////////////////////////////////////////////////////////
-
- /*! This is used in HTML as the title of page with source code for file filename
- */
- virtual QCString trSourceFile(QCString& filename)
- {
- return "Fitxer de Codi " + filename;
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.3.9
-//////////////////////////////////////////////////////////////////////////
-
- /*! This is used as the name of the chapter containing the directory
- * hierarchy.
- */
- virtual QCString trDirIndex()
- { return "Jerarquia de Directoris"; }
-
- /*! This is used as the name of the chapter containing the documentation
- * of the directories.
- */
- virtual QCString trDirDocumentation()
- { return "Documentació dels Directoris"; }
-
- /*! This is used as the title of the directory index and also in the
- * Quick links of a HTML page, to link to the directory hierarchy.
- */
- virtual QCString trDirectories()
- { return "Directoris"; }
-
- /*! This returns a sentences that introduces the directory hierarchy.
- * and the fact that it is sorted alphabetically per level
- */
- virtual QCString trDirDescription()
- { return "Aquesta jerarquia de directoris està ordenada toscament, "
- "però no completa, de forma alfabètica:";
- }
-
- /*! This returns the title of a directory page. The name of the
- * directory is passed via \a dirName.
- */
- virtual QCString trDirReference(const char *dirName)
- { QCString result="Referència del Directori "; result+=dirName; return result; }
-
- /*! This returns the word directory with or without starting capital
- * (\a first_capital) and in sigular or plural form (\a singular).
- */
- virtual QCString trDir(bool first_capital, bool singular)
- {
- QCString result((first_capital ? "Directori" : "directori"));
- if (!singular) result+="s";
- return result;
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.4.1
-//////////////////////////////////////////////////////////////////////////
-
- /*! This text is added to the documentation when the \\overload command
- * is used for a overloaded function.
- */
- virtual QCString trOverloadText()
- {
- return "Aquesta és una funció membre sobrecarregada, "
- "proveïda per conveniència. Es diferencia de la funció "
- "anterior només en els arguments que accepta.";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.4.6
-//////////////////////////////////////////////////////////////////////////
-
- /*! This is used to introduce a caller (or called-by) graph */
- virtual QCString trCallerGraph()
- {
- return "Gràfic de crides a aquesta funció:";
- }
-
- /*! This is used in the documentation of a file/namespace before the list
- * of documentation blocks for enumeration values
- */
- virtual QCString trEnumerationValueDocumentation()
- { return "Documentació de les Enumeracions"; }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.5.4 (mainly for Fortran)
-//////////////////////////////////////////////////////////////////////////
-
- /*! header that is put before the list of member subprograms (Fortran). */
- virtual QCString trMemberFunctionDocumentationFortran()
- { return "Documentació de les Funcions/Subrutines Membre"; }
-
- /*! This is put above each page as a link to the list of annotated data types (Fortran). */
- virtual QCString trCompoundListFortran()
- { return "Llista de Tipus de Dades"; }
-
- /*! This is put above each page as a link to all members of compounds (Fortran). */
- virtual QCString trCompoundMembersFortran()
- { return "Camps de Dades"; }
-
- /*! This is an introduction to the annotated compound list (Fortran). */
- virtual QCString trCompoundListDescriptionFortran()
- { return "Aquests són els tipus de dades acompanyats amb breus descripcions:"; }
-
- /*! This is an introduction to the page with all data types (Fortran). */
- virtual QCString trCompoundMembersDescriptionFortran(bool extractAll)
- {
- QCString result="Aquesta és la llista de tots els membres de tipus de dades";
- if (!extractAll)
- {
- result+=" documentats";
- }
- result+=" amb enllaços a ";
- if (!extractAll)
- {
- result+="la documentació del tipus de dades per a cada membre:";
- }
- else
- {
- result+="els tipus de dades a que pertanyen:";
- }
- return result;
- }
-
- /*! This is used in LaTeX as the title of the chapter with the
- * annotated compound index (Fortran).
- */
- virtual QCString trCompoundIndexFortran()
- { return "Ãndex de Tipus de Dades"; }
-
- /*! This is used in LaTeX as the title of the chapter containing
- * the documentation of all data types (Fortran).
- */
- virtual QCString trTypeDocumentation()
- { return "Documentació dels Tipus de Dades"; }
-
- /*! This is used in the documentation of a file as a header before the
- * list of (global) subprograms (Fortran).
- */
- virtual QCString trSubprograms()
- { return "Funcions/Subrutines"; }
-
- /*! This is used in the documentation of a file/namespace before the list
- * of documentation blocks for subprograms (Fortran)
- */
- virtual QCString trSubprogramDocumentation()
- { return "Documentació de les Funcions/Subrutines"; }
-
- /*! This is used in the documentation of a file/namespace/group before
- * the list of links to documented compounds (Fortran)
- */
- virtual QCString trDataTypes()
- { return "Tipus de Dades"; }
-
- /*! used as the title of page containing all the index of all modules (Fortran). */
- virtual QCString trModulesList()
- { return "Llista de Mòduls"; }
-
- /*! used as an introduction to the modules list (Fortran) */
- virtual QCString trModulesListDescription(bool extractAll)
- {
- QCString result="Aquesta és la llista de tots els mòduls ";
- if (!extractAll) result+="documentats ";
- result+="amb breus descripcions:";
- return result;
- }
-
- /*! used as the title of the HTML page of a module/type (Fortran) */
- virtual QCString trCompoundReferenceFortran(const char *clName,
- ClassDef::CompoundType compType,
- bool isTemplate)
- {
- QCString result="Referència de";
- switch(compType)
- {
- case ClassDef::Class: result+=" el Mòdul "; break;
- case ClassDef::Struct: result+=" el Tipus "; break;
- case ClassDef::Union: result+=" la Unió "; break;
- case ClassDef::Interface: result+=" la Interfície "; break;
- case ClassDef::Protocol: result+="l Protocol "; break;
- case ClassDef::Category: result+=" la Categoria "; break;
- case ClassDef::Exception: result+=" l'Excepció "; break;
- }
- if (isTemplate) result+="Template ";
- result+=(QCString)clName;
- return result;
- }
-
- /*! used as the title of the HTML page of a module (Fortran) */
- virtual QCString trModuleReference(const char *namespaceName)
- {
- QCString result="Referència del Mòdul ";
- result+=namespaceName;
- return result;
- }
-
- /*! This is put above each page as a link to all members of modules. (Fortran) */
- virtual QCString trModulesMembers()
- { return "Membres del Mòdul"; }
-
- /*! This is an introduction to the page with all modules members (Fortran) */
- virtual QCString trModulesMemberDescription(bool extractAll)
- {
- QCString result="Aquesta és la llista de tots els membres del mòdul";
- if (!extractAll)
- {
- result+=" documentats";
- }
- result+=" amb enllaços a ";
- if (!extractAll)
- {
- result+="la documentació del mòdul per a cada membre:";
- }
- else
- {
- result+="els mòduls a que pertanyen:";
- }
- return result;
- }
-
- /*! This is used in LaTeX as the title of the chapter with the
- * index of all modules (Fortran).
- */
- virtual QCString trModulesIndex()
- { return "Ãndex de Mòduls"; }
-
- /*! This is used for translation of the word that will possibly
- * be followed by a single name or by a list of names
- * of the category.
- */
- virtual QCString trModule(bool first_capital, bool singular)
- {
- QCString result((first_capital ? "Mòdul" : "mòdul"));
- if (!singular) result+="s";
- return result;
- }
- /*! This is put at the bottom of a module documentation page and is
- * followed by a list of files that were used to generate the page.
- */
- virtual QCString trGeneratedFromFilesFortran(ClassDef::CompoundType compType,
- bool single)
- { // here s is one of " Module", " Struct" or " Union"
- // single is true implies a single file
- QCString result=(QCString)"La documentació d'aquest";
- switch(compType)
- {
- case ClassDef::Class: result+=" mòdul"; break;
- case ClassDef::Struct: result+=" tipus"; break;
- case ClassDef::Union: result+="a unió"; break;
- case ClassDef::Interface: result+="a interfície"; break;
- case ClassDef::Protocol: result+=" protocol"; break;
- case ClassDef::Category: result+="a categoria"; break;
- case ClassDef::Exception: result+="a excepció"; break;
- }
- result+=" es va generar a partir del";
- if (!single) result+="s";
- result+=" següent";
- if (!single) result+="s";
- result+=" fitxer";
- if (!single) result+="s:"; else result+=":";
- return result;
- }
-
- /*! This is used for translation of the word that will possibly
- * be followed by a single name or by a list of names
- * of the category.
- */
- virtual QCString trType(bool first_capital, bool)
- {
- QCString result((first_capital ? "Tipus" : "tipus"));
- //if (!singular) result+="s";
- return result;
- }
- /*! This is used for translation of the word that will possibly
- * be followed by a single name or by a list of names
- * of the category.
- */
- virtual QCString trSubprogram(bool first_capital, bool singular)
- {
- QCString result((first_capital ? "Subprogram" : "subprogram"));
- if (!singular) result+="es";
- else result+="a";
- return result;
- }
-
- /*! C# Type Constraint list */
- virtual QCString trTypeConstraints()
- {
- return "Restriccions de Tipus";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.6.0 (mainly for the new search engine)
-//////////////////////////////////////////////////////////////////////////
-
- /*! directory relation for \a name */
- virtual QCString trDirRelation(const char *name)
- {
- return QCString(name)+" Relació";
- }
-
- /*! Loading message shown when loading search results */
- virtual QCString trLoading()
- {
- return "Carregant...";
- }
-
- /*! Label used for search results in the global namespace */
- virtual QCString trGlobalNamespace()
- {
- return "Espai de Noms Global";
- }
-
- /*! Message shown while searching */
- virtual QCString trSearching()
- {
- return "Cercant...";
- }
-
- /*! Text shown when no search results are found */
- virtual QCString trNoMatches()
- {
- return "Cap coincidència";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.6.3 (missing items for the directory pages)
-//////////////////////////////////////////////////////////////////////////
-
- /*! introduction text for the directory dependency graph */
- virtual QCString trDirDependency(const char *name)
- {
- return (QCString)"Graf de dependència de directoris per a "+name;
- }
-
- /*! when clicking a directory dependency label, a page with a
- * table is shown. The heading for the first column mentions the
- * source file that has a relation to another file.
- */
- virtual QCString trFileIn(const char *name)
- {
- return (QCString)"Fitxer a "+name;
- }
-
- /*! when clicking a directory dependency label, a page with a
- * table is shown. The heading for the second column mentions the
- * destination file that is included.
- */
- virtual QCString trIncludesFileIn(const char *name)
- {
- return (QCString)"Inclou fitxer a "+name;
- }
-
- /** Compiles a date string.
- * @param year Year in 4 digits
- * @param month Month of the year: 1=January
- * @param day Day of the Month: 1..31
- * @param dayOfWeek Day of the week: 1=Monday..7=Sunday
- * @param hour Hour of the day: 0..23
- * @param minutes Minutes in the hour: 0..59
- * @param seconds Seconds within the minute: 0..59
- * @param includeTime Include time in the result string?
- */
- virtual QCString trDateTime(int year,int month,int day,int dayOfWeek,
- int hour,int minutes,int seconds,
- bool includeTime)
- {
- static const char *days[] = { "Dl","Dt","Dc","Dj","Dv","Ds","Dg" };
- static const char *months[] = { "Gen","Feb","Mar","Abr","Mai","Jun","Jul","Ago","Sep","Oct","Nov","Dec" };
- QCString sdate;
- sdate.sprintf("%s %s %d %d",days[dayOfWeek-1],months[month-1],day,year);
- if (includeTime)
- {
- QCString stime;
- stime.sprintf(" %.2d:%.2d:%.2d",hour,minutes,seconds);
- sdate+=stime;
- }
- return sdate;
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.7.5
-//////////////////////////////////////////////////////////////////////////
-
- /*! Header for the page with bibliographic citations */
- virtual QCString trCiteReferences()
- { return "Referències Bibliogràfiques"; }
-
- /*! Text for copyright paragraph */
- virtual QCString trCopyright()
- { return "Copyright"; }
-
- /*! Header for the graph showing the directory dependencies */
- virtual QCString trDirDepGraph(const char *name)
- { return QCString("Graf de dependència de directoris per a ")+name+":"; }
-
-};
-
-#endif
diff --git a/trunk/src/translator_cn.h b/trunk/src/translator_cn.h
deleted file mode 100644
index a77e436..0000000
--- a/trunk/src/translator_cn.h
+++ /dev/null
@@ -1,1886 +0,0 @@
-/******************************************************************************
- *
- *
- *
- * Copyright (C) 1997-2012 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.
- *
- */
-
-#ifndef TRANSLATOR_CN_H
-#define TRANSLATOR_CN_H
-
-/*!
- If you want insert a space whenever Chinese meets English charactors, set
- CN_SPC to " ", else null.
-*/
-#define CN_SPC
-
-class TranslatorChinese : public Translator
-{
- public:
- /*! Used for identification of the language. The identification
- * should not be translated. It should be replaced by the name
- * of the language in English using lower-case characters only
- * (e.g. "czech", "japanese", "russian", etc.). It sould be equal to
- * the identification used in the language.cpp.
- */
-
- virtual QCString idLanguage()
- { return "chinese"; }
-
- /*! Used to get the LaTeX command(s) for the language support.
- * This method should return string with commands that switch
- * LaTeX to the desired language. For example
- * <pre>"\\usepackage[german]{babel}\n"
- * </pre>
- * or
- * <pre>"\\usepackage{polski}\n"
- * "\\usepackage[latin2]{inputenc}\n"
- * "\\usepackage[T1]{fontenc}\n"
- * </pre>
- *
- * The English LaTeX does not use such commands. Because of this
- * the empty string is returned in this implementation.
- */
- virtual QCString latexLanguageSupportCommand()
- {
- return "";
- }
-
-
- /*! return the language charset. This will be used for the HTML output */
- virtual QCString idLanguageCharset()
- { return "UTF-8"; }
-
- /*! used in the compound documentation before a list of related functions.
- */
- virtual QCString trRelatedFunctions()
- { return "相关函数"; }
-
- /*! subscript for the related functions. */
- virtual QCString trRelatedSubscript()
- { return "(注æ„:这些ä¸æ˜¯æˆå‘˜å‡½æ•°ã€‚)"; }
-
- /*! header that is put before the detailed description of files,
- * classes and namespaces.
- */
- virtual QCString trDetailedDescription()
- { return "详细æè¿°"; }
-
- /*! header that is put before the list of typedefs. */
- virtual QCString trMemberTypedefDocumentation()
- { return "æˆå‘˜ç±»åž‹å®šä¹‰æ–‡æ¡£"; }
-
- /*! header that is put before the list of enumerations. */
- virtual QCString trMemberEnumerationDocumentation()
- { return "æˆå‘˜æžšä¸¾ç±»åž‹æ–‡æ¡£"; }
-
- /*! header that is put before the list of member function. */
- virtual QCString trMemberFunctionDocumentation()
- { return "æˆå‘˜å‡½æ•°æ–‡æ¡£"; }
-
- /*! header that is put before the list of member attributes. */
- virtual QCString trMemberDataDocumentation()
- {
- if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
- {
- return "字段文档";
- }
- else {
- return "æˆå‘˜æ•°æ®æ–‡æ¡£";
- }
- }
-
- /*! this is the text of a link put after brief descriptions. */
- virtual QCString trMore()
- { return "更多..."; }
-
- /*! put in the class documention */
- virtual QCString trListOfAllMembers()
- { return "所有æˆå‘˜çš„列表。"; }
-
- /*! used as the title of the "list of all members" page of a class */
- virtual QCString trMemberList()
- { return "æˆå‘˜åˆ—表"; }
-
- /*! this is the first part of a sentence that is followed by a class name */
- virtual QCString trThisIsTheListOfAllMembers()
- { return "æˆå‘˜çš„完整列表,这些æˆå‘˜å±žäºŽ"CN_SPC; }
-
- /*! this is the remainder of the sentence after the class name */
- virtual QCString trIncludingInheritedMembers()
- { return ",包括所有继承而æ¥çš„æˆå‘˜"; }
-
- /*! this is put at the author sections at the bottom of man pages.
- * parameter s is name of the project name.
- */
- virtual QCString trGeneratedAutomatically(const char *s)
- {
- QCString result;
- if (s) result=(QCString)"为"CN_SPC+s+",";
- result+="ç”±"CN_SPC"Doyxgen"CN_SPC"通过分æžæºä»£ç è‡ªåŠ¨ç”Ÿæˆã€‚";
- return result;
- }
-
- /*! put after an enum name in the list of all members */
- virtual QCString trEnumName()
- { return "枚举å称"; }
-
- /*! put after an enum value in the list of all members */
- virtual QCString trEnumValue()
- { return "枚举值"; }
-
- /*! put after an undocumented member in the list of all members */
- virtual QCString trDefinedIn()
- { return "定义于"CN_SPC; }
-
- // quick reference sections
-
-
- /*! This is put above each page as a link to the list of all groups of
- * compounds or files (see the \\group command).
- */
- virtual QCString trModules()
- { return "模å—"; }
-
- /*! This is put above each page as a link to the class hierarchy */
- virtual QCString trClassHierarchy()
- { return "类继承关系"; }
-
- /*! This is put above each page as a link to the list of annotated class */
- virtual QCString trCompoundList()
- {
- if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) {
- return "æ•°æ®ç»“æž„";
- }
- else {
- return "组åˆç±»åž‹åˆ—表";
- }
- }
-
- /*! This is put above each page as a link to the list of documented files */
- virtual QCString trFileList()
- { return "文件列表"; }
-
- /*! This is put above each page as a link to all members of compounds. */
- virtual QCString trCompoundMembers()
- {
- if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) {
- return "æ•°æ®å­—段";
- }
- else {
- return "组åˆç±»åž‹æˆå‘˜";
- }
- }
-
- /*! This is put above each page as a link to all member of files. */
- virtual QCString trFileMembers()
- {
- if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) {
- return "全局定义";
- } else {
- return "文件æˆå‘˜";
- }
- }
-
- /*! This is put above each page as a link to all related pages. */
- virtual QCString trRelatedPages()
- { return "相关页é¢"; }
-
- /*! This is put above each page as a link to all examples. */
- virtual QCString trExamples()
- { return "示例"; }
-
- virtual QCString trSearch()
- { return "æœç´¢"; }
-
- virtual QCString trClassHierarchyDescription()
- { return "此列表基本按字典顺åºæŽ’åºï¼š"; }
-
- virtual QCString trFileListDescription(bool extractAll)
- {
- QCString result="这里列出所有";
- if (!extractAll) result+="文档化的";
- result+="文件,附带简è¦è¯´æ˜Žï¼š";
- return result;
- }
-
- virtual QCString trCompoundListDescription()
- {
-
- if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
- {
- return "这里列出所有数æ®ç»“构,附带简è¦è¯´æ˜Žï¼š";
- }
- else
- {
- return "这里列出所有类ã€ç»“æž„ã€è”åˆä»¥åŠæŽ¥å£å®šä¹‰ï¼Œé™„带简è¦è¯´æ˜Žï¼š";
- }
- }
-
- virtual QCString trCompoundMembersDescription(bool extractAll)
- {
- QCString result="这里列出所有";
- if (!extractAll) {
- result+="文档化的";
- }
- if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) {
- result+="结构和è”åˆçš„æˆå‘˜ï¼Œé™„带";
- }
- else {
- result+="ç±»æˆå‘˜ï¼Œé™„带";
- }
-
- if (extractAll) {
- if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) {
- result+="所在结构ï¼è”åˆçš„文档的链接:";
- }
- else {
- result+="所在类的文档的链接:";
- }
- }
- else {
- if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) {
- result+="所属结构ï¼è”åˆçš„链接:";
- }
- else {
- result+="所属类的链接:";
- }
- }
- return result;
- }
-
- virtual QCString trFileMembersDescription(bool extractAll)
- {
- QCString result="这里列出所有";
- if (!extractAll)
- result +="文档化的";
-
- if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) {
- result +="函数,å˜é‡ï¼Œå®ï¼Œæžšä¸¾å’Œç±»åž‹å®šä¹‰ï¼Œé™„带";
- }
- else {
- result +="文件æˆå‘˜ï¼Œé™„带";
- }
-
- if (extractAll)
- result+="所在文件的文档的链接:";
- else
- result+="所在文件的链接:";
- return result;
- }
-
- virtual QCString trExamplesDescription()
- { return "这里列出所有示例:"; }
-
- virtual QCString trRelatedPagesDescription()
- { return "这里列出所有相关的页é¢ï¼š"; }
-
- virtual QCString trModulesDescription()
- { return "这里列出所有模å—"; }
-
- virtual QCString trDocumentation()
- { return "文档"; }
-
- virtual QCString trModuleIndex()
- { return "模å—索引"; }
-
- virtual QCString trHierarchicalIndex()
- { return "继承关系索引"; }
-
- virtual QCString trCompoundIndex()
- {
- if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
- {
- return "æ•°æ®ç»“构索引";
- }
- else {
- return "组åˆç±»åž‹ç´¢å¼•";
- }
- }
-
- virtual QCString trFileIndex()
- { return "文件索引"; }
-
- virtual QCString trModuleDocumentation()
- { return "模å—文档"; }
-
- virtual QCString trClassDocumentation()
- {
- if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
- {
- return "æ•°æ®ç»“构文档";
- }
- else {
- return "类文档";
- }
- }
-
- virtual QCString trFileDocumentation()
- { return "文件文档"; }
-
- virtual QCString trExampleDocumentation()
- { return "示例文档"; }
-
- virtual QCString trPageDocumentation()
- { return "页é¢æ–‡æ¡£"; }
-
- virtual QCString trReferenceManual()
- { return "å‚考手册"; }
-
- virtual QCString trDefines()
- { return "å®å®šä¹‰"; }
-
- virtual QCString trFuncProtos()
- { return "函数原型"; }
-
- virtual QCString trTypedefs()
- { return "类型定义"; }
-
- virtual QCString trEnumerations()
- { return "枚举"; }
-
- virtual QCString trFunctions()
- { return "函数"; }
-
- virtual QCString trVariables()
- { return "å˜é‡"; }
-
- virtual QCString trEnumerationValues()
- { return "枚举值"; }
-
-
- virtual QCString trDefineDocumentation()
- { return "å®å®šä¹‰æ–‡æ¡£"; }
-
- virtual QCString trFunctionPrototypeDocumentation()
- { return "函数原型文档"; }
-
- virtual QCString trTypedefDocumentation()
- { return "类型定义文档"; }
-
- virtual QCString trEnumerationTypeDocumentation()
- { return "枚举类型文档"; }
-
- virtual QCString trFunctionDocumentation()
- { return "函数文档"; }
-
- virtual QCString trVariableDocumentation()
- { return "å˜é‡æ–‡æ¡£"; }
-
- virtual QCString trCompounds()
- {
- if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
- {
- return "æ•°æ®ç»“æž„";
- }
- else {
- return "组åˆç±»åž‹";
- }
- }
-
- virtual QCString trGeneratedAt(const char *date,const char *projName)
- {
- QCString result=(QCString)"Generated at "+date;
- if (projName) result+=(QCString)" for "+projName;
- result+=(QCString)" by";
- return result;
- }
-
- virtual QCString trWrittenBy()
- {
- return "written by";
- }
-
- virtual QCString trClassDiagram(const char *clName)
- {
- return (QCString)"类"CN_SPC+clName+CN_SPC"继承关系图:";
- }
-
- virtual QCString trForInternalUseOnly()
- { return "ä»…é™å†…部使用。"; }
-
- virtual QCString trWarning()
- { return "警告"; }
-
- virtual QCString trVersion()
- { return "版本"; }
-
- virtual QCString trDate()
- { return "日期"; }
-
- virtual QCString trReturns()
- { return "返回"; }
-
- virtual QCString trSeeAlso()
- { return "å‚è§"; }
-
- virtual QCString trParameters()
- { return "å‚æ•°"; }
-
- virtual QCString trExceptions()
- { return "异常"; }
-
- virtual QCString trGeneratedBy()
- { return "制作者"; }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 0.49-990307
-//////////////////////////////////////////////////////////////////////////
-
- virtual QCString trNamespaceList()
- { return "命å空间列表"; }
-
- virtual QCString trNamespaceListDescription(bool extractAll)
- {
- QCString result="这里列出所有";
- if (!extractAll) result+="文档化的";
- result+="命å空间定义,附带简è¦è¯´æ˜Žï¼š";
- return result;
- }
-
- virtual QCString trFriends()
- { return "å‹å…ƒ"; }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 0.49-990405
-//////////////////////////////////////////////////////////////////////////
-
- virtual QCString trRelatedFunctionDocumentation()
- { return "å‹å…ƒåŠç›¸å…³å‡½æ•°æ–‡æ¡£"; }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 0.49-990425
-//////////////////////////////////////////////////////////////////////////
-
- virtual QCString trCompoundReference(const char *clName,
- ClassDef::CompoundType compType,
- bool isTemplate)
- // used as the title of the HTML page of a class/struct/union
- {
- QCString result=(QCString)clName;
- if (isTemplate) result+=CN_SPC"模æ¿";
- switch(compType)
- {
- case ClassDef::Class: result+="ç±»"; break;
- case ClassDef::Struct: result+="结构"; break;
- case ClassDef::Union: result+="è”åˆ"; break;
- case ClassDef::Interface: result+="接å£"; break;
- case ClassDef::Protocol: result+="åè®®"; break;
- case ClassDef::Category: result+="分类"; break;
- case ClassDef::Exception: result+="异常"; break;
- }
- result+="å‚考";
- return result;
- }
-
- virtual QCString trFileReference(const char *fileName)
- // used as the title of the HTML page of a file
- {
- QCString result=fileName;
- result+=CN_SPC"文件å‚考";
- return result;
- }
-
- virtual QCString trNamespaceReference(const char *namespaceName)
- // used as the title of the HTML page of a namespace
- {
- QCString result=namespaceName;
- result+=CN_SPC"命å空间å‚考";
- return result;
- }
-
- // these are for the member sections of a class, struct or union
- virtual QCString trPublicMembers()
- { return "公有æˆå‘˜"; }
-
- virtual QCString trPublicSlots()
- { return "公有槽"; }
-
- virtual QCString trSignals()
- { return "ä¿¡å·"; }
-
- virtual QCString trStaticPublicMembers()
- { return "é™æ€å…¬æœ‰æˆå‘˜"; }
-
- virtual QCString trProtectedMembers()
- { return "ä¿æŠ¤æˆå‘˜"; }
-
- virtual QCString trProtectedSlots()
- { return "ä¿æŠ¤æ§½"; }
-
- virtual QCString trStaticProtectedMembers()
- { return "é™æ€ä¿æŠ¤æˆå‘˜"; }
-
- virtual QCString trPrivateMembers()
- { return "ç§æœ‰æˆå‘˜"; }
-
- virtual QCString trPrivateSlots()
- { return "ç§æœ‰æ§½"; }
-
- virtual QCString trStaticPrivateMembers()
- { return "é™æ€ç§æœ‰æˆå‘˜"; }
-
- // end of member sections
-
- virtual QCString trWriteList(int numEntries)
- {
- // this function is used to produce a comma-separated list of items.
- // use generateMarker(i) to indicate where item i should be put.
- QCString result;
- int i;
- // the inherits list contain `numEntries' classes
- for (i=0;i<numEntries;i++)
- {
- // use generateMarker to generate placeholders for the class links!
- result+=generateMarker(i); // generate marker for entry i in the list
- // (order is left to right)
-
- if (i!=numEntries-1) // not the last entry, so we need a separator
- {
- if (i<numEntries-2) // not the fore last entry
- result+="ã€";
- else // the fore last entry
- result+=CN_SPC"åŠ"CN_SPC;
- }
- }
- return result;
- }
-
- virtual QCString trInheritsList(int numEntries)
- // used in class documentation to produce a list of base classes,
- // if class diagrams are disabled.
- {
- return "继承自"CN_SPC+trWriteList(numEntries)+"。";
- }
-
- virtual QCString trInheritedByList(int numEntries)
- // used in class documentation to produce a list of super classes,
- // if class diagrams are disabled.
- {
- return "被"CN_SPC+trWriteList(numEntries)+CN_SPC"继承.";
- }
-
- virtual QCString trReimplementedFromList(int numEntries)
- // used in member documentation blocks to produce a list of
- // members that are hidden by this one.
- {
- return "é‡è½½"CN_SPC+trWriteList(numEntries)+"。";
- }
-
- virtual QCString trReimplementedInList(int numEntries)
- {
- // used in member documentation blocks to produce a list of
- // all member that overwrite the implementation of this member.
- return "被"CN_SPC+trWriteList(numEntries)+CN_SPC"é‡è½½ã€‚";
- }
-
- virtual QCString trNamespaceMembers()
- // This is put above each page as a link to all members of namespaces.
- { return "命å空间æˆå‘˜"; }
-
- virtual QCString trNamespaceMemberDescription(bool extractAll)
- // This is an introduction to the page with all namespace members
- {
- QCString result="这里列出了所有";
- if (!extractAll) result+="文档化的";
- result+="命å空间æˆå‘˜ï¼Œé™„带";
- if (extractAll)
- result+="所在类的文档的链接:";
- else
- result+="所在类的链接:";
- return result;
- }
-
- virtual QCString trNamespaceIndex()
- // This is used in LaTeX as the title of the chapter with the
- // index of all namespaces.
- { return "命å空间索引"; }
-
- virtual QCString trNamespaceDocumentation()
- // This is used in LaTeX as the title of the chapter containing
- // the documentation of all namespaces.
- { return "命å空间文档"; }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 0.49-990522
-//////////////////////////////////////////////////////////////////////////
-
- /*! This is used in the documentation before the list of all
- * namespaces in a file.
- */
- virtual QCString trNamespaces()
- {
- // return "Namespaces";
- return "命å空间";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 0.49-990728
-//////////////////////////////////////////////////////////////////////////
-
- /*! This is put at the bottom of a class documentation page and is
- * followed by a list of files that were used to generate the page.
- */
- virtual QCString trGeneratedFromFiles(ClassDef::CompoundType compType,
- bool)
- { // here s is one of " Class", " Struct" or " Union"
- // single is true implies a single file
- QCString result=(QCString)"该";
- switch(compType)
- {
- case ClassDef::Class: result+="ç±»"; break;
- case ClassDef::Struct: result+="结构"; break;
- case ClassDef::Union: result+="è”åˆ"; break;
- case ClassDef::Interface: result+="接å£"; break;
- case ClassDef::Protocol: result+="åè®®"; break;
- case ClassDef::Category: result+="分类"; break;
- case ClassDef::Exception: result+="异常"; break;
- }
- result+="的文档由以下文件生æˆï¼š";
- return result;
- }
-
- /*! This is in the (quick) index as a link to the alphabetical compound
- * list.
- */
- virtual QCString trAlphabeticalList()
- { return "按字典顺åºæŽ’åºçš„列表"; }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 0.49-990901
-//////////////////////////////////////////////////////////////////////////
-
- /*! This is used as the heading text for the retval command. */
- virtual QCString trReturnValues()
- { return "返回值"; }
-
- /*! This is in the (quick) index as a link to the main page (index.html)
- */
- virtual QCString trMainPage()
- { return "首页"; }
-
- /*! This is used in references to page that are put in the LaTeX
- * documentation. It should be an abbreviation of the word page.
- */
- virtual QCString trPageAbbreviation()
- { return "p."; }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 0.49-991106
-//////////////////////////////////////////////////////////////////////////
-
- virtual QCString trDefinedAtLineInSourceFile()
- {
- return "在文件"CN_SPC"@1"CN_SPC"第"CN_SPC"@0"CN_SPC"行定义。";
- }
-
- virtual QCString trDefinedInSourceFile()
- {
- return "在文件"CN_SPC"@0"CN_SPC"中定义。";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 0.49-991205
-//////////////////////////////////////////////////////////////////////////
-
- virtual QCString trDeprecated()
- {
- return "Deprecated";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.0.0
-//////////////////////////////////////////////////////////////////////////
-
- /*! this text is put before a collaboration diagram */
- virtual QCString trCollaborationDiagram(const char *clName)
- {
- return (QCString)clName+CN_SPC"åˆä½œå›¾ï¼š";
- }
-
- /*! this text is put before an include dependency graph */
- virtual QCString trInclDepGraph(const char *fName)
- {
- return (QCString)fName+CN_SPC"包å«/ä¾èµ–关系图:";
- }
-
- /*! header that is put before the list of constructor/destructors. */
- virtual QCString trConstructorDocumentation()
- {
- return "构造åŠæžæž„函数文档";
- }
-
- /*! Used in the file documentation to point to the corresponding sources. */
- virtual QCString trGotoSourceCode()
- {
- return "æµè§ˆè¯¥æ–‡ä»¶çš„æºä»£ç ã€‚";
- }
-
- /*! Used in the file sources to point to the corresponding documentation. */
- virtual QCString trGotoDocumentation()
- {
- return "æµè§ˆè¯¥æ–‡ä»¶çš„文档。";
- }
-
- /*! Text for the \\pre command */
- virtual QCString trPrecondition()
- {
- return "å‰ç½®æ¡ä»¶";
- }
-
- /*! Text for the \\post command */
- virtual QCString trPostcondition()
- {
- return "åŽç½®æ¡ä»¶";
- }
-
- /*! Text for the \\invariant command */
- virtual QCString trInvariant()
- {
- return "ä¸å˜æ€§";
- }
-
- /*! Text shown before a multi-line variable/enum initialization */
- virtual QCString trInitialValue()
- {
- return "åˆå§‹åŒ–åºåˆ—:";
- }
-
- /*! Text used the source code in the file index */
- virtual QCString trCode()
- {
- return "代ç ";
- }
-
- virtual QCString trGraphicalHierarchy()
- {
- return "类继承关系图";
- }
-
- virtual QCString trGotoGraphicalHierarchy()
- {
- return "æµè§ˆç±»ç»§æ‰¿å…³ç³»å›¾";
- }
-
- virtual QCString trGotoTextualHierarchy()
- {
- return "æµè§ˆç±»ç»§æ‰¿å…³ç³»è¡¨";
- }
-
- virtual QCString trPageIndex()
- {
- return "页é¢ç´¢å¼•";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.1.0
-//////////////////////////////////////////////////////////////////////////
-
- virtual QCString trNote()
- {
- return "注解";
- }
-
- virtual QCString trPublicTypes()
- {
- return "公有类型";
- }
-
- virtual QCString trPublicAttribs()
- {
- if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
- {
- return "æ•°æ®æˆå‘˜";
- }
- else {
- return "公有属性";
- }
- }
-
- virtual QCString trStaticPublicAttribs()
- {
- return "é™æ€å…¬æœ‰å±žæ€§";
- }
-
- virtual QCString trProtectedTypes()
- {
- return "ä¿æŠ¤ç±»åž‹";
- }
-
- virtual QCString trProtectedAttribs()
- {
- return "ä¿æŠ¤å±žæ€§";
- }
-
- virtual QCString trStaticProtectedAttribs()
- {
- return "é™æ€ä¿æŠ¤å±žæ€§";
- }
-
- virtual QCString trPrivateTypes()
- {
- return "ç§æœ‰ç±»åž‹";
- }
-
- virtual QCString trPrivateAttribs()
- {
- return "ç§æœ‰å±žæ€§";
- }
-
- virtual QCString trStaticPrivateAttribs()
- {
- return "é™æ€ç§æœ‰å±žæ€§";
- }
-
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.1.3
-//////////////////////////////////////////////////////////////////////////
-
- /*! Used as a marker that is put before a todo item */
- virtual QCString trTodo()
- {
- return "TODO";
- }
-
- /*! Used as the header of the todo list */
- virtual QCString trTodoList()
- {
- return "TODO"CN_SPC"列表";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.1.4
-//////////////////////////////////////////////////////////////////////////
-
- virtual QCString trReferencedBy()
- {
- return "å‚考自";
- }
-
- virtual QCString trRemarks()
- {
- return "评论";
- }
-
- virtual QCString trAttention()
- {
- return "注æ„";
- }
-
- virtual QCString trInclByDepGraph()
- {
- return "此图展示直接或间接包å«è¯¥æ–‡ä»¶çš„文件:";
- }
-
- virtual QCString trSince()
- {
- return "自从";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.1.5
-//////////////////////////////////////////////////////////////////////////
-
- /*! title of the graph legend page */
- virtual QCString trLegendTitle()
- {
- return "图例";
- }
-
- /*! page explaining how the dot graph's should be interpreted */
- virtual QCString trLegendDocs()
- {
- return
- "本页å‘您展示如何ç†è§£ç”±"CN_SPC"Doxygen"CN_SPC"生æˆçš„图形。<p>\n"
- "请考虑如下示例:\n"
- "\\code\n"
- "/*! 由于截å–而使该类ä¸å¯è§ */\n"
- "class Invisible { };\n\n"
- "/*! 被截å–的类,继承关系被éšè—èµ·æ¥äº† */\n"
- "class Truncated : public Invisible { };\n\n"
- "/* 没有被"CN_SPC"doxygen"CN_SPC"的注释文档化的类 */\n"
- "class Undocumented { };\n\n"
- "/*! 被公有继承的类 */\n"
- "class PublicBase : public Truncated { };\n\n"
- "/*! A template class */\n"
- "template<class T> class Templ { };\n\n"
- "/*! 被ä¿æŠ¤ç»§æ‰¿çš„ç±» */\n"
- "class ProtectedBase { };\n\n"
- "/*! 被ç§æœ‰ç»§æ‰¿çš„ç±» */\n"
- "class PrivateBase { };\n\n"
- "/*! 被使用的类 */\n"
- "class Used { };\n\n"
- "/*! 继承了若干其它类的类 */\n"
- "class Inherited : public PublicBase,\n"
- " protected ProtectedBase,\n"
- " private PrivateBase,\n"
- " public Undocumented,\n"
- " public Templ<int>\n"
- "{\n"
- " private:\n"
- " Used *m_usedClass;\n"
- "};\n"
- "\\endcode\n"
- "Doxygen将生æˆå¦‚下的图形:"
- "<p><center><img src=\"graph_legend."+Config_getEnum("DOT_IMAGE_FORMAT")+"\"></center>\n"
- "<p>\n"
- "以上图形中的矩形有如下的å«ä¹‰ï¼š\n"
- "<ul>\n"
- "<li>被黑色填充的矩形代表当å‰çš„类或结构。\n"
- "<li>黑色边框的矩形代表<i>文档化</i>的类或结构。\n"
- "<li>ç°è‰²è¾¹æ¡†çš„矩形代表没有<i>文档化</i>的类或结构。\n"
- "<li>红色边框的矩形代表继承/包å«å…³ç³»æ²¡æœ‰è¢«å®Œæ•´æ˜¾ç¤ºå‡ºçš„类或结构。如果一幅图åƒçš„å°º"
- "寸大于指定尺寸,它将被截å–。"
- "</ul>\n"
- "å„个箭头有如下的å«ä¹‰ï¼š\n"
- "<ul>\n"
- "<li>æ·±è“色的箭头用于显示两个类之间的公有继承关系。\n"
- "<li>深绿色的箭头用于显示ä¿æŠ¤ç»§æ‰¿å…³ç³»ã€‚\n"
- "<li>深红色的箭头用于显示ç§æœ‰ç»§æ‰¿å…³ç³»ã€‚\n"
- "<li>紫色点状线æ¡çš„箭头用于显示两个类之间包å«æˆ–者使用的关系。通过箭头æ—边的å˜é‡å¯ä»¥"
- "访问到箭头所指的类或结构。\n"
- "</ul>\n";
- }
- /*! text for the link to the legend page */
- virtual QCString trLegend()
- {
- return "图例";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.2.0
-//////////////////////////////////////////////////////////////////////////
-
- /*! Used as a marker that is put before a test item */
- virtual QCString trTest()
- {
- return "测试";
- }
-
- /*! Used as the header of the test list */
- virtual QCString trTestList()
- {
- return "测试列表";
- }
-
-//////////////////////////////////////////////////////////////////////////
-//// new since 1.2.1
-////////////////////////////////////////////////////////////////////////////
- /*! Used as a section header for KDE-2 IDL methods */
- virtual QCString trDCOPMethods()
- {
- return "DCOP"CN_SPC"方法";
- }
-
-//////////////////////////////////////////////////////////////////////////
-//// new since 1.2.2
-////////////////////////////////////////////////////////////////////////////
-
- /*! Used as a section header for IDL properties */
- virtual QCString trProperties()
- {
- return "属性";
- }
-
- /*! Used as a section header for IDL property documentation */
- virtual QCString trPropertyDocumentation()
- {
- return "属性文档";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.2.4
-//////////////////////////////////////////////////////////////////////////
-
- /*! Used for Java classes in the summary section of Java packages */
- virtual QCString trClasses()
- {
- if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
- {
- return "æ•°æ®ç»“æž„";
- }
- else
- {
- return "ç±»";
- }
- }
-
- /*! Used as the title of a Java package */
- virtual QCString trPackage(const char *name)
- {
- return (QCString)"包 "+name;
- }
-
- /*! Title of the package index page */
- virtual QCString trPackageList()
- {
- return "包列表";
- }
-
- /*! The description of the package index page */
- virtual QCString trPackageListDescription()
- {
- return "这里列出所有的包,附带简è¦è¯´æ˜Ž(如果有的è¯):";
- }
-
- /*! The link name in the Quick links header for each page */
- virtual QCString trPackages()
- {
- return "包";
- }
-
- /*! Text shown before a multi-line define */
- virtual QCString trDefineValue()
- {
- return "值:";
- }
-
-////////////////////////////////////////////////////////////////////////////
-//// new since 1.2.6
-////////////////////////////////////////////////////////////////////////////
- virtual QCString trBug ()
- {
- return "缺陷";
- }
-
- virtual QCString trBugList ()
- {
- return "缺陷列表";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.2.6
-//////////////////////////////////////////////////////////////////////////
-
- /*! Used as ansicpg for RTF file
- *
- * The following table shows the correlation of Charset name, Charset Value and
- * <pre>
- * Codepage number:
- * Charset Name Charset Value(hex) Codepage number
- * ------------------------------------------------------
- * DEFAULT_CHARSET 1 (x01)
- * SYMBOL_CHARSET 2 (x02)
- * OEM_CHARSET 255 (xFF)
- * ANSI_CHARSET 0 (x00) 1252
- * RUSSIAN_CHARSET 204 (xCC) 1251
- * EE_CHARSET 238 (xEE) 1250
- * GREEK_CHARSET 161 (xA1) 1253
- * TURKISH_CHARSET 162 (xA2) 1254
- * BALTIC_CHARSET 186 (xBA) 1257
- * HEBREW_CHARSET 177 (xB1) 1255
- * ARABIC _CHARSET 178 (xB2) 1256
- * SHIFTJIS_CHARSET 128 (x80) 932
- * HANGEUL_CHARSET 129 (x81) 949
- * GB2313_CHARSET 134 (x86) 936
- * CHINESEBIG5_CHARSET 136 (x88) 950
- * </pre>
- *
- */
- virtual QCString trRTFansicp()
- {
- return "936";
- }
-
- /*! Used as ansicpg for RTF fcharset
- * \see trRTFansicp() for a table of possible values.
- */
- virtual QCString trRTFCharSet()
- {
- return "134";
- }
-
-
- /*! Used as header RTF general index */
- virtual QCString trRTFGeneralIndex()
- {
- return "索引";
- }
-
-
- /*! This is used for translation of the word that will possibly
- * be followed by a single name or by a list of names
- * of the category.
- */
- virtual QCString trClass(bool /*first_capital*/, bool /*singular*/)
- {
- /*
- QCString result((first_capital ? "Class" : "class"));
- if (!singular) result+="es";
- return result;
- */
- return "ç±»";
- }
-
- /*! This is used for translation of the word that will possibly
- * be followed by a single name or by a list of names
- * of the category.
- */
- virtual QCString trFile(bool /*first_capital*/, bool /*singular*/)
- {
- /*
- QCString result((first_capital ? "File" : "file"));
- if (!singular) result+="s";
- return result;
- */
- return "文件";
-
- }
-
- /*! This is used for translation of the word that will possibly
- * be followed by a single name or by a list of names
- * of the category.
- */
- virtual QCString trNamespace(bool /*first_capital*/, bool /*singular*/)
- {
- /*
- QCString result((first_capital ? "Namespace" : "namespace"));
- if (!singular) result+="s";
- return result;
- */
- return "命å空间";
- }
-
- /*! This is used for translation of the word that will possibly
- * be followed by a single name or by a list of names
- * of the category.
- */
- virtual QCString trGroup(bool /*first_capital*/, bool /*singular*/)
- {
- /*
- QCString result((first_capital ? "Group" : "group"));
- if (!singular) result+="s";
- return result;
- */
- return "组";
- }
-
- /*! This is used for translation of the word that will possibly
- * be followed by a single name or by a list of names
- * of the category.
- */
- virtual QCString trPage(bool /*first_capital*/, bool /*singular*/)
- {
- /*
- QCString result((first_capital ? "Page" : "page"));
- if (!singular) result+="s";
- return result;
- */
- return "页";
- }
-
- /*! This is used for translation of the word that will possibly
- * be followed by a single name or by a list of names
- * of the category.
- */
- virtual QCString trMember(bool /*first_capital*/, bool /*singular*/)
- {
- /*
- QCString result((first_capital ? "Member" : "member"));
- if (!singular) result+="s";
- return result;
- */
- return "æˆå‘˜";
- }
-
- /*! This is used for translation of the word that will possibly
- * be followed by a single name or by a list of names
- * of the category.
- */
- virtual QCString trGlobal(bool /*first_capital*/, bool /*singular*/)
- {
- /*
- QCString result((first_capital ? "Global" : "global"));
- if (!singular) result+="s";
- return result;
- */
- return "全局定义";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.2.7
-//////////////////////////////////////////////////////////////////////////
-
- /*! This text is generated when the \\author command is used and
- * for the author section in man pages. */
- virtual QCString trAuthor(bool /*first_capital*/, bool /*singular*/)
- {
- /*
- QCString result((first_capital ? "Author" : "author"));
- if (!singular) result+="s";
- return result;
- */
- return "作者";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.2.11
-//////////////////////////////////////////////////////////////////////////
-
- /*! This text is put before the list of members referenced by a member
- */
- virtual QCString trReferences()
- {
- return "å‚考";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.2.13
-//////////////////////////////////////////////////////////////////////////
-
- /*! used in member documentation blocks to produce a list of
- * members that are implemented by this one.
- */
- virtual QCString trImplementedFromList(int numEntries)
- {
- /* return "Implements "+trWriteList(numEntries)+"."; */
- return "实现了"CN_SPC+trWriteList(numEntries)+"。";
- }
-
- /*! used in member documentation blocks to produce a list of
- * all members that implement this abstract member.
- */
- virtual QCString trImplementedInList(int numEntries)
- {
- /* return "Implemented in "+trWriteList(numEntries)+"."; */
- return "在"CN_SPC+trWriteList(numEntries)+CN_SPC"内被实现。";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.2.16
-//////////////////////////////////////////////////////////////////////////
-
- /*! used in RTF documentation as a heading for the Table
- * of Contents.
- */
- virtual QCString trRTFTableOfContents()
- {
- /* return "Table of Contents"; */
- return "目录";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.2.17
-//////////////////////////////////////////////////////////////////////////
-
- /*! Used as the header of the list of item that have been
- * flagged deprecated
- */
- virtual QCString trDeprecatedList()
- {
-/* return "Deprecated List"; */
- return "过时列表";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.2.18
-//////////////////////////////////////////////////////////////////////////
-
- /*! Used as a header for declaration section of the events found in
- * a C# program
- */
- virtual QCString trEvents()
- {
- /* return "Events"; */
- return "事件";
- }
- /*! Header used for the documentation section of a class' events. */
- virtual QCString trEventDocumentation()
- {
- /* return "Event Documentation"; */
- return "事件文档";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.3
-//////////////////////////////////////////////////////////////////////////
-
- /*! Used as a heading for a list of Java class types with package scope.
- */
- virtual QCString trPackageTypes()
- {
- /* return "Package Types"; */
- return "模å—类型";
- }
- /*! Used as a heading for a list of Java class functions with package
- * scope.
- */
- virtual QCString trPackageMembers()
- {
- /* return "Package Functions"; */
- return "模å—函数";
- }
- /*! Used as a heading for a list of static Java class functions with
- * package scope.
- */
- virtual QCString trStaticPackageMembers()
- {
- /* return "Static Package Functions"; */
- return "é™æ€æ¨¡å—函数";
- }
- /*! Used as a heading for a list of Java class variables with package
- * scope.
- */
- virtual QCString trPackageAttribs()
- {
- /* return "Package Attributes"; */
- return "模å—属性";
- }
- /*! Used as a heading for a list of static Java class variables with
- * package scope.
- */
- virtual QCString trStaticPackageAttribs()
- {
- /* return "Static Package Attributes"; */
- return "é™æ€æ¨¡å—属性";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.3.1
-//////////////////////////////////////////////////////////////////////////
-
- /*! Used in the quick index of a class/file/namespace member list page
- * to link to the unfiltered list of all members.
- */
- virtual QCString trAll()
- {
- /* return "All"; */
- return "全部";
- }
- /*! Put in front of the call graph for a function. */
- virtual QCString trCallGraph()
- {
- /* return "Here is the call graph for this function:"; */
- return "函数调用图:";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.3.3
-//////////////////////////////////////////////////////////////////////////
-
- /*! When the search engine is enabled this text is put in the header
- * of each page before the field where one can enter the text to search
- * for.
- */
- virtual QCString trSearchForIndex()
- {
- /* return "Search for"; */
- return "æœç´¢";
- }
- /*! This string is used as the title for the page listing the search
- * results.
- */
- virtual QCString trSearchResultsTitle()
- {
- /* return "Search Results"; */
- return "æœç´¢ç»“æžœ";
- }
- /*! This string is put just before listing the search results. The
- * text can be different depending on the number of documents found.
- * Inside the text you can put the special marker $num to insert
- * the number representing the actual number of search results.
- * The @a numDocuments parameter can be either 0, 1 or 2, where the
- * value 2 represents 2 or more matches. HTML markup is allowed inside
- * the returned string.
- */
- virtual QCString trSearchResults(int numDocuments)
- {
- if (numDocuments==0)
- {
- /* return "Sorry, no documents matching your query."; */
- return "对ä¸èµ·ï¼Œæ‰¾ä¸åˆ°ä¸Žä½ çš„查询相符的文档。";
- }
- else if (numDocuments==1)
- {
- /* return "Found <b>1</b> document matching your query."; */
- return "找到<b>1</b>篇与你的查询相符的文档。";
- }
- else
- {
- /* return "Found <b>$num</b> documents matching your query. "
- "Showing best matches first."; */
- return "找到<b>$num</b>篇与你的查询相符的文档。"
- "先显示最å»åˆçš„文档。";
- }
- }
- /*! This string is put before the list of matched words, for each search
- * result. What follows is the list of words that matched the query.
- */
- virtual QCString trSearchMatches()
- {
- /* return "Matches:"; */
- return "符åˆçš„结果:";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.3.8
-//////////////////////////////////////////////////////////////////////////
-
- /*! This is used in HTML as the title of page with source code for file filename
- */
- virtual QCString trSourceFile(QCString& filename)
- {
- /* return filename + " Source File"; */
- return filename + CN_SPC"æºæ–‡ä»¶";
- }
-//////////////////////////////////////////////////////////////////////////
-// new since 1.3.9
-//////////////////////////////////////////////////////////////////////////
-
- /*! This is used as the name of the chapter containing the directory
- * hierarchy.
- */
- virtual QCString trDirIndex()
- /* { return "Directory Hierarchy"; } */
- {
- return "目录结构";
- }
-
- /*! This is used as the name of the chapter containing the documentation
- * of the directories.
- */
- virtual QCString trDirDocumentation()
- /* { return "Directory Documentation"; } */
- {
- return "目录文档";
- }
-
- /*! This is used as the title of the directory index and also in the
- * Quick links of a HTML page, to link to the directory hierarchy.
- */
- virtual QCString trDirectories()
- /* { return "Directories"; } */
- {
- return "目录";
- }
-
- /*! This returns a sentences that introduces the directory hierarchy.
- * and the fact that it is sorted alphabetically per level
- */
- virtual QCString trDirDescription()
-/* { return "This directory hierarchy is sorted roughly, " */
-/* "but not completely, alphabetically:"; */
-/* } */
- {
- return "目录结构仅ç»è¿‡ç²—略的排åº";
- }
-
- /*! This returns the title of a directory page. The name of the
- * directory is passed via \a dirName.
- */
- virtual QCString trDirReference(const char *dirName)
- /* { QCString result=dirName; result+=" Directory Reference"; return result; } */
- {
- QCString result=dirName;
- result+=CN_SPC"目录å‚考";
- return result;
- }
-
- /*! This returns the word directory with or without starting capital
- * (\a first_capital) and in sigular or plural form (\a singular).
- */
- virtual QCString trDir(bool, bool)
- {
- /* QCString result((first_capital ? "Director" : "director")); */
- /* if (singular) result+="y"; else result+="ies"; */
- /* return result; */
- return "目录";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.4.1
-//////////////////////////////////////////////////////////////////////////
-
- /*! This text is added to the documentation when the \\overload command
- * is used for a overloaded function.
- */
- virtual QCString trOverloadText()
- {
- /* return "This is an overloaded member function, "
- "provided for convenience. It differs from the above "
- "function only in what argument(s) it accepts."; */
- return "这是为便于使用而æ供的一个é‡è½½æˆå‘˜å‡½æ•°ã€‚"
- "与上é¢çš„函数相比,它接å—ä¸åŒç±»åž‹çš„å‚数。";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.4.6
-//////////////////////////////////////////////////////////////////////////
-
- /*! This is used to introduce a caller (or called-by) graph */
- virtual QCString trCallerGraph()
- {
- /* return "Here is the caller graph for this function:"; */
- return "这是这个函数的调用图:";
- }
-
- /*! This is used in the documentation of a file/namespace before the list
- * of documentation blocks for enumeration values
- */
- virtual QCString trEnumerationValueDocumentation()
- {
- /* return "Enumerator Documentation"; */
- return "枚举å˜é‡æ–‡æ¡£";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.5.4 (mainly for Fortran)
-//////////////////////////////////////////////////////////////////////////
-
- /*! header that is put before the list of member subprograms (Fortran). */
- virtual QCString trMemberFunctionDocumentationFortran()
- // { return "Member Function/Subroutine Documentation"; }
- { return "æˆå‘˜å‡½æ•°åŠè¿‡ç¨‹æ–‡æ¡£"; }
-
- /*! This is put above each page as a link to the list of annotated data types (Fortran). */
- virtual QCString trCompoundListFortran()
- // { return "Data Types List"; }
- { return "æ•°æ®ç±»åž‹åˆ—表"; }
-
- /*! This is put above each page as a link to all members of compounds (Fortran). */
- virtual QCString trCompoundMembersFortran()
- // { return "Data Fields"; }
- { return "æ•°æ®é¡¹"; }
-
- /*! This is an introduction to the annotated compound list (Fortran). */
- virtual QCString trCompoundListDescriptionFortran()
- // { return "Here are the data types with brief descriptions:"; }
- { return "带简è¦æè¿°çš„æ•°æ®ç±»åž‹åˆ—表:"; }
-
- /*! This is an introduction to the page with all data types (Fortran). */
- virtual QCString trCompoundMembersDescriptionFortran(bool extractAll)
- {
- // QCString result="Here is a list of all ";
- // if (!extractAll)
- // {
- // result+="documented ";
- // }
- // result+="data types members";
- // result+=" with links to ";
- // if (!extractAll)
- // {
- // result+="the data structure documentation for each member";
- // }
- // else
- // {
- // result+="the data types they belong to:";
- // }
- // return result;
- if(!extractAll) {
- return "这里是有文档的数æ®ç±»åž‹æˆå‘˜åˆ—表,å«æœ‰åˆ°æ¯ä¸ªæˆå‘˜çš„æ•°æ®ç»“构文档的链接";
- } else {
- return "这里是数æ®ç±»åž‹æˆå‘˜åˆ—表,å«æœ‰åˆ°æˆå‘˜æ‰€å±žçš„æ•°æ®ç±»åž‹çš„链接:";
- }
-
- }
-
- /*! This is used in LaTeX as the title of the chapter with the
- * annotated compound index (Fortran).
- */
- virtual QCString trCompoundIndexFortran()
- // { return "Data Type Index"; }
- { return "æ•°æ®ç±»åž‹ç´¢å¼•"; }
-
-
- /*! This is used in LaTeX as the title of the chapter containing
- * the documentation of all data types (Fortran).
- */
- virtual QCString trTypeDocumentation()
- // { return "Data Type Documentation"; }
- { return "æ•°æ®ç±»åž‹æ–‡æ¡£"; }
-
- /*! This is used in the documentation of a file as a header before the
- * list of (global) subprograms (Fortran).
- */
- virtual QCString trSubprograms()
- //{ return "Functions/Subroutines"; }
- { return "函数/过程"; }
-
- /*! This is used in the documentation of a file/namespace before the list
- * of documentation blocks for subprograms (Fortran)
- */
- virtual QCString trSubprogramDocumentation()
- //{ return "Function/Subroutine Documentation"; }
- { return "函数/过程文档"; }
-
-
- /*! This is used in the documentation of a file/namespace/group before
- * the list of links to documented compounds (Fortran)
- */
- virtual QCString trDataTypes()
- // { return "Data Types"; }
- { return "æ•°æ®ç±»åž‹"; }
-
- /*! used as the title of page containing all the index of all modules (Fortran). */
- virtual QCString trModulesList()
- // { return "Modules List"; }
- { return "模å—列表"; }
-
- /*! used as an introduction to the modules list (Fortran) */
- virtual QCString trModulesListDescription(bool extractAll)
- {
- // QCString result="Here is a list of all ";
- // if (!extractAll) result+="documented ";
- // result+="modules with brief descriptions:";
- // return result;
- if(!extractAll) {
- return "带简è¦æ述的有文档的模å—列表:";
- } else {
- return "带简è¦æ述的模å—列表:";
- }
- }
-
- /*! used as the title of the HTML page of a module/type (Fortran) */
- virtual QCString trCompoundReferenceFortran(const char *clName,
- ClassDef::CompoundType compType,
- bool isTemplate)
- {
- // QCString result=(QCString)clName;
- // switch(compType)
- // {
- // case ClassDef::Class: result+=" Module"; break;
- // case ClassDef::Struct: result+=" Type"; break;
- // case ClassDef::Union: result+=" Union"; break;
- // case ClassDef::Interface: result+=" Interface"; break;
- // case ClassDef::Protocol: result+=" Protocol"; break;
- // case ClassDef::Category: result+=" Category"; break;
- // case ClassDef::Exception: result+=" Exception"; break;
- // }
- // if (isTemplate) result+=" Template";
- // result+=" Reference";
- // return result;
- QCString result=(QCString)clName;
- switch(compType)
- {
- case ClassDef::Class: result+=CN_SPC"模å—"; break;
- case ClassDef::Struct: result+=CN_SPC"类型"; break;
- case ClassDef::Union: result+=CN_SPC"è”åˆ"; break;
- case ClassDef::Interface: result+=CN_SPC"ç•Œé¢"; break;
- case ClassDef::Protocol: result+=CN_SPC"接å£"; break;
- case ClassDef::Category: result+=CN_SPC"目录"; break;
- case ClassDef::Exception: result+=CN_SPC"异常"; break;
- }
- if (isTemplate) result+="模æ¿";
- result+="å‚考手册";
- return result;
- }
- /*! used as the title of the HTML page of a module (Fortran) */
- virtual QCString trModuleReference(const char *namespaceName)
- {
- QCString result=namespaceName;
- // result+=" Module Reference";
- result += CN_SPC"模å—å‚考手册";
- return result;
- }
-
- /*! This is put above each page as a link to all members of modules. (Fortran) */
- virtual QCString trModulesMembers()
- // { return "Module Members"; }
- { return "模å—æˆå‘˜"; }
-
- /*! This is an introduction to the page with all modules members (Fortran) */
- virtual QCString trModulesMemberDescription(bool extractAll)
- {
- // QCString result="Here is a list of all ";
- // if (!extractAll) result+="documented ";
- // result+="module members with links to ";
- // if (extractAll)
- // {
- // result+="the module documentation for each member:";
- // }
- // else
- // {
- // result+="the modules they belong to:";
- // }
- // return result;
- if(!extractAll) {
- return "这里是有文档的模å—æˆå‘˜åˆ—表,å«æœ‰åˆ°æ¯ä¸ªæˆå‘˜æ‰€åœ¨æ¨¡å—的文档的链接";
- } else {
- return "这里是模å—æˆå‘˜åˆ—表,å«æœ‰åˆ°æˆå‘˜æ‰€å±žçš„模å—的链接:";
- }
- }
-
- /*! This is used in LaTeX as the title of the chapter with the
- * index of all modules (Fortran).
- */
- virtual QCString trModulesIndex()
- // { return "Modules Index"; }
- { return "模å—索引"; }
-
- /*! This is used for translation of the word that will possibly
- * be followed by a single name or by a list of names
- * of the category.
- */
- virtual QCString trModule(bool, bool)
- {
- // QCString result((first_capital ? "Module" : "module"));
- // if (!singular) result+="s";
- // return result;
- return "模å—";
- }
- /*! This is put at the bottom of a module documentation page and is
- * followed by a list of files that were used to generate the page.
- */
- virtual QCString trGeneratedFromFilesFortran(ClassDef::CompoundType compType,
- bool)
- { // here s is one of " Module", " Struct" or " Union"
- // single is true implies a single file
- // QCString result=(QCString)"The documentation for this ";
- // switch(compType)
- // {
- // case ClassDef::Class: result+="module"; break;
- // case ClassDef::Struct: result+="type"; break;
- // case ClassDef::Union: result+="union"; break;
- // case ClassDef::Interface: result+="interface"; break;
- // case ClassDef::Protocol: result+="protocol"; break;
- // case ClassDef::Category: result+="category"; break;
- // case ClassDef::Exception: result+="exception"; break;
- // }
- // result+=" was generated from the following file";
- // if (single) result+=":"; else result+="s:";
- // return result;
- QCString result="该";
- switch(compType)
- {
- case ClassDef::Class: result+=CN_SPC"模å—"; break;
- case ClassDef::Struct: result+=CN_SPC"类型"; break;
- case ClassDef::Union: result+=CN_SPC"è”åˆ"; break;
- case ClassDef::Interface: result+=CN_SPC"ç•Œé¢"; break;
- case ClassDef::Protocol: result+=CN_SPC"接å£"; break;
- case ClassDef::Category: result+=CN_SPC"目录"; break;
- case ClassDef::Exception: result+=CN_SPC"异常"; break;
- }
- result+="的文档由以下文件生æˆ:";
- return result;
- }
- /*! This is used for translation of the word that will possibly
- * be followed by a single name or by a list of names
- * of the category.
- */
- virtual QCString trType(bool, bool)
- {
- return "类型";
- }
- /*! This is used for translation of the word that will possibly
- * be followed by a single name or by a list of names
- * of the category.
- */
- virtual QCString trSubprogram(bool, bool)
- {
- return "å­ç¨‹åº";
- }
-
- /*! C# Type Constraint list */
- virtual QCString trTypeConstraints()
- {
- return "类型é™åˆ¶";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.6.0
-//////////////////////////////////////////////////////////////////////////
- virtual QCString trDirRelation(const char *name)
- {
- // return QCString(name)+" Relation";
- // unsure
- return QCString(name)+CN_SPC"关系";
- }
-
- virtual QCString trLoading()
- {
- return "载入中...";
- }
-
- virtual QCString trGlobalNamespace()
- {
- return "全局命å空间";
- }
-
- virtual QCString trSearching()
- {
- return "æœç´¢ä¸­...";
- }
-
- virtual QCString trNoMatches()
- {
- return "未找到";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.6.3
-//////////////////////////////////////////////////////////////////////////
-
- virtual QCString trDirDependency(const char *name)
- {
- // return (QCString)"Directory dependency graph for "+name;
- // unsure
- return QCString(name)+CN_SPC"的目录ä¾èµ–关系图";
- }
-
- virtual QCString trFileIn(const char *name)
- {
- // return (QCString)"File in "+name;
- // unsure
- return (QCString)"文件在"+CN_SPC+name;
- }
-
- virtual QCString trIncludesFileIn(const char *name)
- {
- // return (QCString)"Includes file in "+name;
- // unsure
- return (QCString)"在"CN_SPC+name+CN_SPC"中引用";
- }
-
- virtual QCString trDateTime(int year,int month,int day,int dayOfWeek,
- int hour,int minutes,int seconds,
- bool includeTime)
- {
- static const char *days[] = { "一","二","三","四","五","六","日" };
- static const char *months[] = { "一","二","三","å››","五","å…­","七","å…«","ä¹","å","å一","å二" };
-
- QCString sdate;
-
- sdate.sprintf("%d年%s月%d日 星期%s",year, months[month-1], day, days[dayOfWeek-1]);
-
- if (includeTime)
- {
- QCString stime;
- stime.sprintf(" %.2d:%.2d:%.2d",hour,minutes,seconds);
- sdate+=stime;
- }
- return sdate;
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.7.5
-//////////////////////////////////////////////////////////////////////////
-
- /*! Header for the page with bibliographic citations */
- virtual QCString trCiteReferences()
- { return "å‚考书目"; }
-
- /*! Text for copyright paragraph */
- virtual QCString trCopyright()
- { return "版æƒæ‰€æœ‰"; }
-
- /*! Header for the graph showing the directory dependencies */
- virtual QCString trDirDepGraph(const char *name)
- {
- //unsure
- return QCString(name)+CN_SPC"的目录ä¾èµ–关系图";
- }
-};
-
-#endif
-
diff --git a/trunk/src/translator_cz.h b/trunk/src/translator_cz.h
deleted file mode 100644
index 3120e2f..0000000
--- a/trunk/src/translator_cz.h
+++ /dev/null
@@ -1,1926 +0,0 @@
-/******************************************************************************
- *
- *
- *
- * Copyright (C) 1997-2012 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.
- *
- */
-
-#ifndef TRANSLATOR_CZ_H
-#define TRANSLATOR_CZ_H
-
-// Updates:
-// --------
-// 2011/07/28 - Updates for "new since 1.7.5".
-// 2010/06/01 - typo
-// 2010/04/28 - Updates for "new since 1.6.3".
-// 2009/09/02 - Updates for "new since 1.6.0 (mainly for the new search engine)".
-// 2008/06/09 - Corrections in trLegendDocs().
-// 2007/11/13 - Update for "new since 1.5.4 (mainly for Fortran)".
-// 2007/03/20 - removing decode(), conversion of literals to UTF-8.
-// 2006/06/13 - translation of the trEnumerationValueDocumentation().
-// and clear in the Czech language.
-// modified trCallGraph() to make the meaning unambiguous
-// 2006/05/10 - Update for "new since 1.4.6" -- trCallerGraph(),
-// 2005/03/08 - Update for "new since 1.4.1" (trOverloadText())
-// 2005/02/11 - The "never used" methods removed.
-// 2004/09/14 - The new methods "since 1.3.9" implemented.
-// 2004/06/16 - The new method "since 1.3.8" implemented.
-// 2004/02/27 - Text inside the trCallGraph() corrected.
-// 2004/02/26 - trLegendDocs() updated.
-// 2003/08/13 - Four new methods "since 1.3.3" implemented.
-// 2003/06/10 - Two new methods "since 1.3.1" implemented.
-// 2003/04/28 - Five new methods "since 1.3" implemented.
-// 2002/10/15 - The new trEvents() and trEventDocumentation() implemented.
-// 2002/07/29 - The new trDeprecatedList() implemented.
-// 2002/07/08 - The new trRTFTableOfContents() implemented. (my birthday! ;)
-// 2002/03/05 - ... forgot to replace TranslatorAdapter... by Translator.
-// 2002/01/23 - Two new methods "since 1.2.13" implemented.
-// 2001/11/06 - trReferences() implemented.
-// 2001/07/16 - trClassDocumentation() updated as in the English translator.
-// 2001/05/25 - Corrections.
-// 2001/05/18 - Updates, corrections.
-// 2001/05/02 - Decode() inline changed to decode(); cleaning.
-// level as other translators.
-// class Translator. The English translator is now on the same
-// introducing TranslatorAdapter class and the abstract base
-// 2001/04/20 - Update for "new since 1.2.6-20010422". Experimental version
-// 2001/04/10 - Updates (1.2.6-20010408), cleaning.
-// 2001/03/12 - Minor correction of comments (synchronous with translator.h).
-// 2001/02/26 - Update for "new since 1.2.5" version (trBug(), trBugList()).
-// 2001/02/15 - trMore() now returns only "..." (ellipsis).
-// 2001/01/09 - Update for "new since 1.2.4" version.
-// 2000/10/17 - Update for "new since 1.2.2" version.
-// 2000/09/11 - Update for "new since 1.2.1" version.
-// 2000/09/06 - Reimplementation of trInheritsList().
-// 2000/08/31 - ISOToWin() and WinToISO() moved to the base class.
-// 2000/08/30 - Macro DECODE replaced by the inline (thanks to Boris Bralo).
-// 2000/08/24 - Corrections, updates.
-// 2000/08/02 - Updated for 1.2.0
-// 2000/07/19 - Updates for "new since 1.1.5"; encoding conversion separated.
-// 2000/07/10 - Update to 1.1.5; conditionally decoding to iso-8859-2 for UNIX.
-// 2000/06/20 - Prototype: with diacritics; based on ver. 1.1.4 (from scratch).
-//
-// The first translation from English to Czech was started by
-// Vlastimil Havran (1999--2000). The prototype version of Czech strings
-// with diacritics was implemented by Petr Prikryl (prikrylp@skil.cz),
-// 2000/06/20. Vlastimil agreed that Petr be the new maintainer.
-
-// Todo
-// ----
-// - The trReimplementedFromList() should pass the kind of the
-// reimplemented element. It can be method, typedef or possibly
-// something else. It is difficult to find the general translation
-// for all kinds in the Czech language.
-
-class TranslatorCzech : public Translator
-{
- public:
- // --- Language control methods -------------------
-
- virtual QCString idLanguage()
- { return "czech"; }
-
- virtual QCString latexLanguageSupportCommand()
- {
- return "\\usepackage[T2A]{fontenc}\n"
- "\\usepackage[czech]{babel}\n";
- }
-
- /*! return the language charset. This will be used for the HTML output */
- virtual QCString idLanguageCharset()
- {
- return "utf-8";
- }
-
- // --- Language translation methods -------------------
-
- /*! used in the compound documentation before a list of related functions. */
- virtual QCString trRelatedFunctions()
- { return "Související funkce"; }
-
- /*! subscript for the related functions. */
- virtual QCString trRelatedSubscript()
- { return "(Uvedené funkce nejsou Älenskými funkcemi.)"; }
-
- /*! header that is put before the detailed description of files, classes and namespaces. */
- virtual QCString trDetailedDescription()
- { return "Detailní popis"; }
-
- /*! header that is put before the list of typedefs. */
- virtual QCString trMemberTypedefDocumentation()
- { return "Dokumentace k Älenským typům"; }
-
- /*! header that is put before the list of enumerations. */
- virtual QCString trMemberEnumerationDocumentation()
- { return "Dokumentace k Älenským výÄtům"; }
-
- /*! header that is put before the list of member functions. */
- virtual QCString trMemberFunctionDocumentation()
- { return "Dokumentace k metodám"; }
-
- /*! header that is put before the list of member attributes. */
- virtual QCString trMemberDataDocumentation()
- {
- if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
- {
- return "Dokumentace k položkám";
- }
- else
- {
- return "Dokumentace k datovým Älenům";
- }
- }
-
- /*! this is the text of a link put after brief descriptions. */
- virtual QCString trMore()
- { return "..."; }
-
- /*! put in the class documentation */
- virtual QCString trListOfAllMembers()
- { return "Seznam vÅ¡ech Älenů."; }
-
- /*! used as the title of the "list of all members" page of a class */
- virtual QCString trMemberList()
- { return "Seznam Älenů třídy"; }
-
- /*! this is the first part of a sentence that is followed by a class name */
- virtual QCString trThisIsTheListOfAllMembers()
- { return "Zde naleznete úplný seznam Älenů třídy "; }
-
- /*! this is the remainder of the sentence after the class name */
- virtual QCString trIncludingInheritedMembers()
- { return ", vÄetnÄ› vÅ¡ech zdÄ›dÄ›ných Älenů."; }
-
- /*! this is put at the author sections at the bottom of man pages.
- * parameter s is name of the project name.
- */
- virtual QCString trGeneratedAutomatically(const char *s)
- { QCString result("Generováno automaticky programem Doxygen "
- "ze zdrojových textů");
- if (s) result += QCString(" projektu ") + s;
- result += ".";
- return result;
- }
-
- /*! put after an enum name in the list of all members */
- virtual QCString trEnumName()
- { return "jméno výÄtu"; }
-
- /*! put after an enum value in the list of all members */
- virtual QCString trEnumValue()
- { return "hodnota výÄtu"; }
-
- /*! put after an undocumented member in the list of all members */
- virtual QCString trDefinedIn()
- { return "definován v"; }
-
- // quick reference sections
-
- /*! This is put above each page as a link to the list of all groups of
- * compounds or files (see the \\group command).
- */
- virtual QCString trModules()
- { return "Moduly"; }
-
- /*! This is put above each page as a link to the class hierarchy */
- virtual QCString trClassHierarchy()
- { return "Hierarchie tříd"; }
-
- /*! This is put above each page as a link to the list of annotated classes */
- virtual QCString trCompoundList()
- {
- if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
- {
- return "Datové struktury";
- }
- else
- {
- return "Seznam tříd";
- }
- }
-
- /*! This is put above each page as a link to the list of documented files */
- virtual QCString trFileList()
- { return "Seznam souborů"; }
-
- /*! This is put above each page as a link to all members of compounds. */
- virtual QCString trCompoundMembers()
- {
- if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
- {
- return "Datové položky";
- }
- else
- {
- return "Seznam Älenů tříd";
- }
- }
-
- /*! This is put above each page as a link to all members of files. */
- virtual QCString trFileMembers()
- {
- if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
- {
- return "Globální symboly";
- }
- else
- {
- return "Symboly v souborech";
- }
- }
-
- /*! This is put above each page as a link to all related pages. */
- virtual QCString trRelatedPages()
- { return "Ostatní stránky"; }
-
- /*! This is put above each page as a link to all examples. */
- virtual QCString trExamples()
- { return "Příklady"; }
-
- /*! This is put above each page as a link to the search engine. */
- virtual QCString trSearch()
- { return "Hledat"; }
-
- /*! This is an introduction to the class hierarchy. */
- virtual QCString trClassHierarchyDescription()
- { return "Zde naleznete seznam, vyjadÅ™ující vztah dÄ›diÄnosti tříd. "
- "Je seřazen přibližně (ale ne úplně) podle abecedy:";
- }
-
- /*! This is an introduction to the list with all files. */
- virtual QCString trFileListDescription(bool extractAll)
- {
- QCString result="Zde naleznete seznam všech ";
- if (!extractAll) result+="dokumentovaných ";
- result+="souborů se struÄnými popisy:";
- return result;
- }
-
- /*! This is an introduction to the annotated compound list. */
- virtual QCString trCompoundListDescription()
- {
- if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
- {
- return "Následující seznam obsahuje identifikace datových "
- "struktur a jejich struÄné popisy:";
- }
- else
- {
- return "Následující seznam obsahuje především identifikace "
- "tříd, ale nacházejí se zde i další netriviální prvky, "
- "jako jsou struktury (struct), unie (union) a rozhraní "
- "(interface). V seznamu jsou uvedeny jejich struÄné "
- "popisy:";
- }
- }
-
- /*! This is an introduction to the page with all class members. */
- virtual QCString trCompoundMembersDescription(bool extractAll)
- {
- QCString result= "Zde naleznete seznam všech ";
- if (!extractAll)
- {
- result += "dokumentovaných ";
- }
-
- if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
- {
- result += "položek struktur (struct) a unií (union) ";
- }
- else
- {
- result += "Älenů tříd ";
- }
-
- result += "s odkazy na ";
-
- if (extractAll)
- {
- if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
- {
- result += "dokumentaci struktur/unií, ke kterým příslušejí:";
- }
- else
- {
- result += "dokumentaci tříd, ke kterým příslušejí:";
- }
- }
- else
- {
- if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
- {
- result+="struktury/unie, ke kterým příslušejí:";
- }
- else
- {
- result+="třídy, ke kterým příslušejí:";
- }
- }
-
- return result;
- }
-
- /*! This is an introduction to the page with all file members. */
- virtual QCString trFileMembersDescription(bool extractAll)
- {
- QCString result="Zde naleznete seznam všech ";
- if (!extractAll) result+="dokumentovaných ";
-
- if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
- {
- result+="funkcí, promÄ›nných, maker, výÄtů a definic typů (typedef) "
- "s odkazy na ";
- }
- else
- {
- result+="symbolů, které jsou definovány na úrovni svých souborů. "
- "Pro každý symbol je uveden odkaz na ";
- }
-
- if (extractAll)
- result+="soubory, ke kterým příslušejí:";
- else
- result+="dokumentaci:";
-
- return result;
- }
-
- /*! This is an introduction to the page with the list of all examples */
- virtual QCString trExamplesDescription()
- { return "Zde naleznete seznam všech příkladů:"; }
-
- /*! This is an introduction to the page with the list of related pages */
- virtual QCString trRelatedPagesDescription()
- { return "Následující seznam odkazuje na další stránky projektu:"; }
-
- /*! This is an introduction to the page with the list of class/file groups */
- virtual QCString trModulesDescription()
- { return "Zde naleznete seznam všech modulů:"; }
-
- // index titles (the project name is prepended for these)
-
-
- /*! This is used in HTML as the title of index.html. */
- virtual QCString trDocumentation()
- { return "Dokumentace"; }
-
- /*! This is used in LaTeX as the title of the chapter with the
- * index of all groups.
- */
- virtual QCString trModuleIndex()
- { return "Rejstřík modulů"; }
-
- /*! This is used in LaTeX as the title of the chapter with the
- * class hierarchy.
- */
- virtual QCString trHierarchicalIndex()
- { return "Rejstřík hierarchie tříd"; }
-
- /*! This is used in LaTeX as the title of the chapter with the
- * annotated compound index.
- */
- virtual QCString trCompoundIndex()
- {
- if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
- {
- return "Rejstřík datových struktur";
- }
- else
- {
- return "Rejstřík tříd";
- }
- }
-
- /*! This is used in LaTeX as the title of the chapter with the
- * list of all files.
- */
- virtual QCString trFileIndex()
- { return "Rejstřík souborů"; }
-
- /*! This is used in LaTeX as the title of the chapter containing
- * the documentation of all groups.
- */
- virtual QCString trModuleDocumentation()
- { return "Dokumentace modulů"; }
-
- /*! This is used in LaTeX as the title of the chapter containing
- * the documentation of all classes, structs and unions.
- */
- virtual QCString trClassDocumentation()
- {
- if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
- {
- return "Dokumentace datových struktur";
- }
- else
- {
- return "Dokumentace tříd";
- }
- }
-
- /*! This is used in LaTeX as the title of the chapter containing
- * the documentation of all files.
- */
- virtual QCString trFileDocumentation()
- { return "Dokumentace souborů"; }
-
- /*! This is used in LaTeX as the title of the chapter containing
- * the documentation of all examples.
- */
- virtual QCString trExampleDocumentation()
- { return "Dokumentace příkladů"; }
-
- /*! This is used in LaTeX as the title of the chapter containing
- * the documentation of all related pages.
- */
- virtual QCString trPageDocumentation()
- { return "Dokumentace souvisejících stránek"; }
-
- /*! This is used in LaTeX as the title of the document */
- virtual QCString trReferenceManual()
- { return "ReferenÄní příruÄka"; }
-
- /*! This is used in the documentation of a file as a header before the
- * list of defines
- */
- virtual QCString trDefines()
- { return "Definice maker"; }
-
- /*! This is used in the documentation of a file as a header before the
- * list of function prototypes
- */
- virtual QCString trFuncProtos()
- { return "Prototypy"; }
-
- /*! This is used in the documentation of a file as a header before the
- * list of typedefs
- */
- virtual QCString trTypedefs()
- { return "Definice typů"; }
-
- /*! This is used in the documentation of a file as a header before the
- * list of enumerations
- */
- virtual QCString trEnumerations()
- { return "VýÄty"; }
-
- /*! This is used in the documentation of a file as a header before the
- * list of (global) functions
- */
- virtual QCString trFunctions()
- { return "Funkce"; }
-
- /*! This is used in the documentation of a file as a header before the
- * list of (global) variables
- */
- virtual QCString trVariables()
- { return "Proměnné"; }
-
- /*! This is used in the documentation of a file as a header before the
- * list of (global) variables
- */
- virtual QCString trEnumerationValues()
- { return "Hodnoty výÄtu"; }
-
- /*! This is used in the documentation of a file before the list of
- * documentation blocks for defines
- */
- virtual QCString trDefineDocumentation()
- { return "Dokumentace k definicím maker"; }
-
- /*! This is used in the documentation of a file/namespace before the list
- * of documentation blocks for function prototypes
- */
- virtual QCString trFunctionPrototypeDocumentation()
- { return "Dokumentace prototypů"; }
-
- /*! This is used in the documentation of a file/namespace before the list
- * of documentation blocks for typedefs
- */
- virtual QCString trTypedefDocumentation()
- { return "Dokumentace definic typů"; }
-
- /*! This is used in the documentation of a file/namespace before the list
- * of documentation blocks for enumeration types
- */
- virtual QCString trEnumerationTypeDocumentation()
- { return "Dokumentace výÄtových typů"; }
-
- /*! This is used in the documentation of a file/namespace before the list
- * of documentation blocks for functions
- */
- virtual QCString trFunctionDocumentation()
- { return "Dokumentace funkcí"; }
-
- /*! This is used in the documentation of a file/namespace before the list
- * of documentation blocks for variables
- */
- virtual QCString trVariableDocumentation()
- { return "Dokumentace proměnných"; }
-
- /*! This is used in the documentation of a file/namespace/group before
- * the list of links to documented compounds
- */
- virtual QCString trCompounds()
- {
- if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
- {
- return "Datové struktry";
- }
- else
- {
- return "Třídy";
- }
- }
-
- /*! This is used in the standard footer of each page and indicates when
- * the page was generated
- */
- virtual QCString trGeneratedAt(const char *date,const char *projName)
- {
- QCString result("Generováno ");
- result += date;
- if (projName)
- result += QCString(" pro projekt ") + projName;
- result += " programem";
- return result;
- }
- /*! This is part of the sentence used in the standard footer of each page.
- */
- virtual QCString trWrittenBy()
- {
- return " -- autor ";
- }
-
- /*! this text is put before a class diagram */
- virtual QCString trClassDiagram(const char *clName)
- {
- return QCString("Diagram dÄ›diÄnosti pro třídu ") + clName;
- }
-
- /*! this text is generated when the \\internal command is used. */
- virtual QCString trForInternalUseOnly()
- { return "Pouze pro vnitřní použití."; }
-
- /*! this text is generated when the \\warning command is used. */
- virtual QCString trWarning()
- { return "Pozor"; }
-
- /*! this text is generated when the \\version command is used. */
- virtual QCString trVersion()
- { return "Verze"; }
-
- /*! this text is generated when the \\date command is used. */
- virtual QCString trDate()
- { return "Datum"; }
-
- /*! this text is generated when the \\return command is used. */
- virtual QCString trReturns()
- { return "Návratová hodnota"; }
-
- /*! this text is generated when the \\sa command is used. */
- virtual QCString trSeeAlso()
- { return "Viz také"; }
-
- /*! this text is generated when the \\param command is used. */
- virtual QCString trParameters()
- { return "Parametry"; }
-
- /*! this text is generated when the \\exception command is used. */
- virtual QCString trExceptions()
- { return "Výjimky"; }
-
- /*! this text is used in the title page of a LaTeX document. */
- virtual QCString trGeneratedBy()
- { return "Generováno programem"; }
-
- // new since 0.49-990307
-
- /*! used as the title of page containing all the index of all namespaces. */
- virtual QCString trNamespaceList()
- { return "Seznam prostorů jmen"; }
-
- /*! used as an introduction to the namespace list */
- virtual QCString trNamespaceListDescription(bool extractAll)
- {
- QCString result="Zde naleznete seznam všech ";
- if (!extractAll) result+="dokumentovaných ";
- result+="prostorů jmen se struÄným popisem:";
- return result;
- }
-
- /*! used in the class documentation as a header before the list of all
- * friends of a class
- */
- virtual QCString trFriends()
- { return "Friends"; }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 0.49-990405
-//////////////////////////////////////////////////////////////////////////
-
- /*! used in the class documentation as a header before the list of all
- * related classes
- */
- virtual QCString trRelatedFunctionDocumentation()
- { return "Dokumentace k friends"; }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 0.49-990425
-//////////////////////////////////////////////////////////////////////////
-
- /*! used as the title of the HTML page of a class/struct/union */
- virtual QCString trCompoundReference(const char *clName,
- ClassDef::CompoundType compType,
- bool isTemplate)
- {
- QCString result("Dokumentace ");
- if (isTemplate) result += "Å¡ablony ";
- switch(compType)
- {
- case ClassDef::Class: result += "třídy "; break;
- case ClassDef::Struct: result += "struktury "; break;
- case ClassDef::Union: result += "unie "; break;
- case ClassDef::Interface: result += "rozhraní "; break;
- case ClassDef::Protocol: result += "protokolu "; break;
- case ClassDef::Category: result += "kategorie "; break;
- case ClassDef::Exception: result += "výjimky "; break;
- }
- result += clName;
- return result;
- }
-
- /*! used as the title of the HTML page of a file */
- virtual QCString trFileReference(const char *fileName)
- {
- QCString result("Dokumentace souboru ");
- result+=fileName;
- return result;
- }
-
- /*! used as the title of the HTML page of a namespace */
- virtual QCString trNamespaceReference(const char *namespaceName)
- {
- QCString result("Dokumentace prostoru jmen ");
- result+=namespaceName;
- return result;
- }
-
- /*
- * these are for the member sections of a class, struct or union
- */
- virtual QCString trPublicMembers()
- { return "Veřejné metody"; }
- virtual QCString trPublicSlots()
- { return "Veřejné sloty"; }
- virtual QCString trSignals()
- { return "Signály"; }
- virtual QCString trStaticPublicMembers()
- { return "Statické veřejné metody"; }
- virtual QCString trProtectedMembers()
- { return "Chráněné metody"; }
- virtual QCString trProtectedSlots()
- { return "Chráněné sloty"; }
- virtual QCString trStaticProtectedMembers()
- { return "Statické chráněné metody"; }
- virtual QCString trPrivateMembers()
- { return "Privátní metody"; }
- virtual QCString trPrivateSlots()
- { return "Privátní sloty"; }
- virtual QCString trStaticPrivateMembers()
- { return "Statické privátní metody"; }
-
- /*! this function is used to produce a comma-separated list of items.
- * use generateMarker(i) to indicate where item i should be put.
- */
- virtual QCString trWriteList(int numEntries)
- {
- QCString result;
- int i;
- // the inherits list contain `numEntries' classes
- for (i=0;i<numEntries;i++)
- {
- // use generateMarker to generate placeholders for the class links!
- result+=generateMarker(i); // generate marker for entry i in the list
- // (order is left to right)
-
- if (i!=numEntries-1) // not the last entry, so we need a separator
- {
- if (i<numEntries-2) // not the fore last entry
- result+=", ";
- else // the fore last entry
- result+=" a ";
- }
- }
- return result;
- }
-
- /*! used in class documentation to produce a list of base classes,
- * if class diagrams are disabled.
- */
- virtual QCString trInheritsList(int numEntries)
- {
- QCString result("Dědí z ");
- result += (numEntries == 1) ? "bázové třídy " : "bázových tříd ";
- result += trWriteList(numEntries) + ".";
- return result;
- }
-
- /*! used in class documentation to produce a list of super classes,
- * if class diagrams are disabled.
- */
- virtual QCString trInheritedByList(int numEntries)
- {
- QCString result("Zděděna ");
- result += (numEntries == 1) ? "třídou " : "třídami ";
- result += trWriteList(numEntries) + ".";
- return result;
- }
-
- /*! used in member documentation blocks to produce a list of
- * members that are hidden by this one.
- */
- virtual QCString trReimplementedFromList(int numEntries)
- {
- QCString result("Reimplementuje stejnojmenný prvek z ");
- result += trWriteList(numEntries) + ".";
- return result;
- }
-
- /*! used in member documentation blocks to produce a list of
- * all member that overwrite the implementation of this member.
- */
- virtual QCString trReimplementedInList(int numEntries)
- {
- QCString result("Reimplementováno v ");
- result += trWriteList(numEntries) + ".";
- return result;
- }
-
- /*! This is put above each page as a link to all members of namespaces. */
- virtual QCString trNamespaceMembers()
- { return "Symboly v prostorech jmen"; }
-
- /*! This is an introduction to the page with all namespace members */
- virtual QCString trNamespaceMemberDescription(bool extractAll)
- {
- QCString result="Zde naleznete seznam všech ";
- if (!extractAll) result+="dokumentovaných ";
- result+="symbolů, které jsou definovány ve svých prostorech jmen. "
- "U každého je uveden odkaz na ";
- if (extractAll)
- result+="dokumentaci příslušného prostoru jmen:";
- else
- result+="příslušný prostor jmen:";
- return result;
- }
- /*! This is used in LaTeX as the title of the chapter with the
- * index of all namespaces.
- */
- virtual QCString trNamespaceIndex()
- { return "Rejstřík prostorů jmen"; }
-
- /*! This is used in LaTeX as the title of the chapter containing
- * the documentation of all namespaces.
- */
- virtual QCString trNamespaceDocumentation()
- { return "Dokumentace prostorů jmen"; }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 0.49-990522
-//////////////////////////////////////////////////////////////////////////
-
- /*! This is used in the documentation before the list of all
- * namespaces in a file.
- */
- virtual QCString trNamespaces()
- { return "Prostory jmen"; }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 0.49-990728
-//////////////////////////////////////////////////////////////////////////
-
- /*! This is put at the bottom of a class documentation page and is
- * followed by a list of files that were used to generate the page.
- */
- virtual QCString trGeneratedFromFiles(ClassDef::CompoundType compType,
- bool single)
- { // here s is one of " Class", " Struct" or " Union"
- // single is true implies a single file
- QCString result=(QCString)"Dokumentace pro ";
- switch(compType)
- {
- case ClassDef::Class: result+="tuto třídu"; break;
- case ClassDef::Struct: result+="tuto strukturu (struct)"; break;
- case ClassDef::Union: result+="tuto unii (union)"; break;
- case ClassDef::Interface: result+="toto rozhraní"; break;
- case ClassDef::Protocol: result+="tento protokol "; break;
- case ClassDef::Category: result+="tuto kategorii "; break;
- case ClassDef::Exception: result+="tuto výjimku"; break;
- }
- result+=" byla generována z ";
- if (single) result+="následujícího souboru:";
- else result+="následujících souborů:";
- return result;
- }
-
- /*! This is in the (quick) index as a link to the alphabetical compound
- * list.
- */
- virtual QCString trAlphabeticalList()
- { return "Rejstřík tříd"; }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 0.49-990901
-//////////////////////////////////////////////////////////////////////////
-
- /*! This is used as the heading text for the retval command. */
- virtual QCString trReturnValues()
- { return "Vracené hodnoty"; }
-
- /*! This is in the (quick) index as a link to the main page (index.html)
- */
- virtual QCString trMainPage()
- { return "Hlavní stránka"; }
-
- /*! This is used in references to page that are put in the LaTeX
- * documentation. It should be an abbreviation of the word page.
- */
- virtual QCString trPageAbbreviation()
- { return "s."; }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 0.49-991003
-//////////////////////////////////////////////////////////////////////////
-
- virtual QCString trDefinedAtLineInSourceFile()
- {
- return "Definice je uvedena na řádku @0 v souboru @1.";
- }
- virtual QCString trDefinedInSourceFile()
- {
- return "Definice v souboru @0.";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 0.49-991205
-//////////////////////////////////////////////////////////////////////////
-
- virtual QCString trDeprecated()
- {
- return "Zastaralé";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.0.0
-//////////////////////////////////////////////////////////////////////////
-
- /*! this text is put before a collaboration diagram */
- virtual QCString trCollaborationDiagram(const char *clName)
- {
- return (QCString)"Diagram tříd pro "+clName+":";
- }
- /*! this text is put before an include dependency graph */
- virtual QCString trInclDepGraph(const char *fName)
- {
- return (QCString)"Graf závislostí na vkládaných souborech "
- "pro "+fName+":";
- }
- /*! header that is put before the list of constructor/destructors. */
- virtual QCString trConstructorDocumentation()
- {
- return "Dokumentace konstruktoru a destruktoru";
- }
- /*! Used in the file documentation to point to the corresponding sources. */
- virtual QCString trGotoSourceCode()
- {
- return "Zobrazit zdrojový text tohoto souboru.";
- }
- /*! Used in the file sources to point to the corresponding documentation. */
- virtual QCString trGotoDocumentation()
- {
- return "Zobrazit dokumentaci tohoto souboru.";
- }
- /*! Text for the \\pre command */
- virtual QCString trPrecondition()
- {
- return "Precondition";
- }
- /*! Text for the \\post command */
- virtual QCString trPostcondition()
- {
- return "Postcondition";
- }
- /*! Text for the \\invariant command */
- virtual QCString trInvariant()
- {
- return "Invariant";
- }
- /*! Text shown before a multi-line variable/enum initialization */
- virtual QCString trInitialValue()
- {
- return "Initializer:";
- }
- /*! Text used the source code in the file index */
- virtual QCString trCode()
- {
- return "zdrojový text";
- }
- virtual QCString trGraphicalHierarchy()
- {
- return "Grafické zobrazení hierarchie tříd";
- }
- virtual QCString trGotoGraphicalHierarchy()
- {
- return "Zobrazit grafickou podobu hierarchie tříd";
- }
- virtual QCString trGotoTextualHierarchy()
- {
- return "Zobrazit textovou podobu hierarchie tříd";
- }
- virtual QCString trPageIndex()
- {
- return "Rejstřík stránek";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.1.0
-//////////////////////////////////////////////////////////////////////////
-
- virtual QCString trNote()
- {
- return "Poznámka";
- }
- virtual QCString trPublicTypes()
- {
- return "Veřejné typy";
- }
- virtual QCString trPublicAttribs()
- {
- if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
- {
- return "Datové položky";
- }
- else
- {
- return "Veřejné atributy";
- }
- }
- virtual QCString trStaticPublicAttribs()
- {
- return "Statické veřejné atributy";
- }
- virtual QCString trProtectedTypes()
- {
- return "Chráněné typy";
- }
- virtual QCString trProtectedAttribs()
- {
- return "Chráněné atributy";
- }
- virtual QCString trStaticProtectedAttribs()
- {
- return "Statické chráněné atributy";
- }
- virtual QCString trPrivateTypes()
- {
- return "Privátní typy";
- }
- virtual QCString trPrivateAttribs()
- {
- return "Privátní atributy";
- }
- virtual QCString trStaticPrivateAttribs()
- {
- return "Statické privátní atributy";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.1.3
-//////////////////////////////////////////////////////////////////////////
-
- /*! Used as a marker that is put before a todo item */
- virtual QCString trTodo()
- {
- return "Plánované úpravy";
- }
- /*! Used as the header of the todo list */
- virtual QCString trTodoList()
- {
- return "Seznam plánovaných úprav";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.1.4
-//////////////////////////////////////////////////////////////////////////
-
- virtual QCString trReferencedBy()
- {
- return "Používá se v";
- }
- virtual QCString trRemarks()
- {
- return "Poznámky"; // ??? not checked in a context
- }
- virtual QCString trAttention()
- {
- return "Upozornění"; // ??? not checked in a context
- }
- virtual QCString trInclByDepGraph()
- {
- return "Následující graf ukazuje, které soubory přímo nebo "
- "nepřímo vkládají tento soubor:";
- }
- virtual QCString trSince()
- {
- return "Od"; // ??? not checked in a context
- }
-
-////////////////////////////////////////////////////////////////////////////
-// new since 1.1.5
-//////////////////////////////////////////////////////////////////////////
-
- /*! title of the graph legend page */
- virtual QCString trLegendTitle()
- {
- return "Vysvětlivky ke grafu";
- }
- /*! page explaining how the dot graph's should be interpreted */
- virtual QCString trLegendDocs()
- {
- return
- "Zde naleznete vysvětlení, jak mají být interpretovány grafy, "
- "které byly generovány programem doxygen.<p>\n"
- "Uvažujte následující příklad:\n"
- "\\code\n"
- "/*! Neviditelná třída, která se v grafu nezobrazuje, protože "
- "došlo k ořezání grafu. */\n"
- "class Invisible { };\n\n"
- "/*! Třída, u které doÅ¡lo k oÅ™ezání grafu. Vztah dÄ›diÄnosti "
- "je skryt. */\n"
- "class Truncated : public Invisible { };\n\n"
- "/* Třída, která není dokumentována komentáři programu doxygen. */\n"
- "class Undocumented { };\n\n"
- "/*! Bázová třída děděná veřejně (public inheritance). */\n"
- "class PublicBase : public Truncated { };\n\n"
- "/*! Šablona třídy. */\n"
- "template<class T> class Templ { };\n\n"
- "/*! Bázová třída, použitá pro chráněné dědění "
- "(protected inheritance). */\n"
- "class ProtectedBase { };\n\n"
- "/*! Bázová třída, využitá pro privátní dědění "
- "(private inheritance). */\n"
- "class PrivateBase { };\n\n"
- "/*! Třída, která je využívána třídou Inherited. */\n"
- "class Used { };\n\n"
- "/*! Odvozená třída, která dědí z více tříd. */\n"
- "class Inherited : public PublicBase,\n"
- " protected ProtectedBase,\n"
- " private PrivateBase,\n"
- " public Undocumented,\n"
- " public Templ<int>\n"
- "{\n"
- " private:\n"
- " Used *m_usedClass;\n"
- "};\n"
- "\\endcode\n"
- "K výše uvedenému bude vygenerován následující graf:"
- "<p><center><img src=\"graph_legend."+Config_getEnum("DOT_IMAGE_FORMAT")+"\"></center>\n"
- "<p>\n"
- "Bloky (tj. uzly) v uvedeném grafu mají následující význam:\n"
- "<ul>\n"
- "<li>Šedě vyplněný obdélník reprezentuje strukturu nebo třídu, "
- "pro kterou byl graf generován.\n"
- "<li>Obdélník s Äerným obrysem oznaÄuje dokumentovanou "
- "strukturu nebo třídu.\n"
- "<li>Obdélník s Å¡edým obrysem oznaÄuje nedokumentovanou "
- "strukturu nebo třídu.\n"
- "<li>Obdélník s Äerveným obrysem oznaÄuje dokumentovanou "
- "strukturu nebo třídu, pro kterou\n"
- "nejsou zobrazeny vÅ¡echny vztahy dÄ›diÄnosti nebo obsažení. "
- "Graf je ořezán v případě, kdy jej\n"
- "není možné umístit do vymezeného prostoru.\n"
- "</ul>\n"
- "Šipky (tj. hrany grafu) mají následující význam:\n"
- "<ul>\n"
- "<li>TmavÄ› modrá Å¡ipka se používá pro oznaÄení vztahu veÅ™ejné "
- "dÄ›diÄnosti (public) mezi dvÄ›ma třídami.\n"
- "<li>TmavÄ› zelená Å¡ipka oznaÄuje vztah chránÄ›né dÄ›diÄnosti "
- "(protected).\n"
- "<li>TmavÄ› Äervená Å¡ipka oznaÄuje vztah privátní dÄ›diÄnosti "
- "(private).\n"
- "<li>Purpurová Å¡ipka kreslená ÄárkovanÄ› se používá v případÄ›, "
- "kdy je třída obsažena v jiné třídě,\n"
- "nebo kdy je používána jinou třídou. Je oznaÄena identifikátorem "
- "jedné nebo více proměných, přes které\n"
- "je třída nebo struktura zpřístupněna.\n"
- "<li>Žlutá Å¡ipka kreslená ÄárkovanÄ› vyjadÅ™uje vztah mezi instancí Å¡ablony "
- "a šablonou třídy, na základě které byla\n"
- "instance šablony vytvořena. V popisu šipky jsou uvedeny příslušné"
- " parametry Å¡ablony.\n"
- "</ul>\n";
- }
- /*! text for the link to the legend page */
- virtual QCString trLegend()
- {
- return "vysvětlivky";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.2.0
-//////////////////////////////////////////////////////////////////////////
-
- /*! Used as a marker that is put before a test item */
- virtual QCString trTest()
- {
- return "Test";
- }
-
- /*! Used as the header of the test list */
- virtual QCString trTestList()
- {
- return "Seznam testů";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.2.1
-//////////////////////////////////////////////////////////////////////////
-
- /*! Used as a section header for KDE-2 IDL methods */
- virtual QCString trDCOPMethods()
- {
- return "Metody DCOP";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.2.2
-//////////////////////////////////////////////////////////////////////////
-
- /*! Used as a section header for IDL properties */
- virtual QCString trProperties()
- {
- return "Vlastnosti";
- }
- /*! Used as a section header for IDL property documentation */
- virtual QCString trPropertyDocumentation()
- {
- return "Dokumentace k vlastnosti";
- }
-//////////////////////////////////////////////////////////////////////////
-// new since 1.2.4
-//////////////////////////////////////////////////////////////////////////
-
- /*! Used for Java classes in the summary section of Java packages */
- virtual QCString trClasses()
- {
- return "Třídy";
- }
- /*! Used as the title of a Java package */
- virtual QCString trPackage(const char *name)
- {
- return QCString("Balík ") + name;
- }
- /*! Title of the package index page */
- virtual QCString trPackageList()
- {
- return "Seznam balíků";
- }
- /*! The description of the package index page */
- virtual QCString trPackageListDescription()
- {
- return "Zde naleznete seznam balíků se struÄným popisem "
- "(pokud byl uveden):";
- }
- /*! The link name in the Quick links header for each page */
- virtual QCString trPackages()
- {
- return "Balíky";
- }
- /*! Text shown before a multi-line define */
- virtual QCString trDefineValue()
- {
- return "Hodnota:";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.2.5
-//////////////////////////////////////////////////////////////////////////
-
- /*! Used as a marker that is put before a \\bug item */
- virtual QCString trBug()
- {
- return "Chyba";
- }
- /*! Used as the header of the bug list */
- virtual QCString trBugList()
- {
- return "Seznam chyb";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.2.6-20010422
-//////////////////////////////////////////////////////////////////////////
-
- /*! Used as ansicpg for RTF file */
- virtual QCString trRTFansicp()
- {
- return "1250";
- }
-
- /*! Used as ansicpg for RTF fcharset */
- virtual QCString trRTFCharSet()
- {
- return "238";
- }
-
- /*! Used as header RTF general index */
- virtual QCString trRTFGeneralIndex()
- {
- return "Rejstřík";
- }
-
- /*! This is used for translation of the word that will possibly
- * be followed by a single name or by a list of names
- * of the category.
- */
- virtual QCString trClass(bool first_capital, bool singular)
- {
- QCString result((first_capital ? "Tříd" : "tříd"));
- result += singular ? "a" : "y";
- return result;
- }
-
- /*! This is used for translation of the word that will possibly
- * be followed by a single name or by a list of names
- * of the category.
- */
- virtual QCString trFile(bool first_capital, bool singular)
- {
- QCString result((first_capital ? "Soubor" : "soubor"));
- if (!singular) result+="y";
- return result;
- }
-
- /*! This is used for translation of the word that will possibly
- * be followed by a single name or by a list of names
- * of the category.
- */
- virtual QCString trNamespace(bool first_capital, bool singular)
- {
- QCString result((first_capital ? "Prostor" : "prostor"));
- if (!singular) result+="y";
- result+=" jmen";
- return result;
- }
-
- /*! This is used for translation of the word that will possibly
- * be followed by a single name or by a list of names
- * of the category.
- */
- virtual QCString trGroup(bool first_capital, bool singular)
- {
- QCString result((first_capital ? "Skupin" : "skupin"));
- result += singular ? "a" : "y";
- return result;
- }
-
- /*! This is used for translation of the word that will possibly
- * be followed by a single name or by a list of names
- * of the category.
- */
- virtual QCString trPage(bool first_capital, bool singular)
- {
- QCString result((first_capital ? "Stránk" : "stránk"));
- result += singular ? "a" : "y";
- return result;
- }
-
- /*! This is used for translation of the word that will possibly
- * be followed by a single name or by a list of names
- * of the category.
- */
- virtual QCString trMember(bool first_capital, bool singular)
- {
- QCString result((first_capital ? "ÄŒlen" : "Älen"));
- if (!singular)
- result += "y";
- return result;
- }
-
- /*! ??? Jak to prelozit? Bylo by dobre, kdyby se ozval nekdo,
- * kdo to pouziva.
- */
- virtual QCString trGlobal(bool first_capital, bool singular)
- {
- QCString result((first_capital ? "Global" : "global"));
- if (!singular) result+="s";
- return result;
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.2.7
-//////////////////////////////////////////////////////////////////////////
-
- /*! This text is generated when the \\author command is used and
- * for the author section in man pages. */
- virtual QCString trAuthor(bool first_capital, bool singular)
- {
- QCString result((first_capital ? "Auto" : "auto"));
- result += (singular) ? "r" : "ři";
- return result;
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.2.11
-//////////////////////////////////////////////////////////////////////////
-
- /*! This text is put before the list of members referenced by a member
- */
- virtual QCString trReferences()
- {
- return "Odkazuje se na";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.2.13
-//////////////////////////////////////////////////////////////////////////
-
- /*! used in member documentation blocks to produce a list of
- * members that are implemented by this one.
- */
- virtual QCString trImplementedFromList(int numEntries)
- {
- return "Implementuje "+trWriteList(numEntries)+".";
- }
-
- /*! used in member documentation blocks to produce a list of
- * all members that implement this member.
- */
- virtual QCString trImplementedInList(int numEntries)
- {
- return "Implementováno v "+trWriteList(numEntries)+".";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.2.16
-//////////////////////////////////////////////////////////////////////////
-
- /*! used in RTF documentation as a heading for the Table
- * of Contents.
- */
- virtual QCString trRTFTableOfContents()
- {
- return "Obsah";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.2.17
-//////////////////////////////////////////////////////////////////////////
-
- /*! Used as the header of the list of item that have been
- * flagged deprecated
- */
- virtual QCString trDeprecatedList()
- {
- return "Seznam zastaralých prvků";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.2.18
-//////////////////////////////////////////////////////////////////////////
-
- /*! Used as a header for declaration section of the events found in
- * a C# program
- */
- virtual QCString trEvents()
- {
- return "Události";
- }
- /*! Header used for the documentation section of a class' events. */
- virtual QCString trEventDocumentation()
- {
- return "Dokumentace událostí";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.3
-//////////////////////////////////////////////////////////////////////////
-
- /*! Used as a heading for a list of Java class types with package scope.
- */
- virtual QCString trPackageTypes()
- {
- return "Typy v balíku";
- }
- /*! Used as a heading for a list of Java class functions with package
- * scope.
- */
- virtual QCString trPackageMembers()
- {
- return "Funkce v balíku";
- }
- /*! Used as a heading for a list of static Java class functions with
- * package scope.
- */
- virtual QCString trStaticPackageMembers()
- {
- return "Statické funkce v balíku";
- }
- /*! Used as a heading for a list of Java class variables with package
- * scope.
- */
- virtual QCString trPackageAttribs()
- {
- return "Atributy balíku";
- }
- /*! Used as a heading for a list of static Java class variables with
- * package scope.
- */
- virtual QCString trStaticPackageAttribs()
- {
- return "Statické atributy balíku";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.3.1
-//////////////////////////////////////////////////////////////////////////
-
- /*! Used in the quick index of a class/file/namespace member list page
- * to link to the unfiltered list of all members.
- */
- virtual QCString trAll()
- {
- return "VÅ¡e";
- }
- /*! Put in front of the call graph for a function. */
- virtual QCString trCallGraph()
- {
- return "Tato funkce volá...";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.3.3
-//////////////////////////////////////////////////////////////////////////
-
- /*! When the search engine is enabled this text is put in the index
- * of each page before the search field.
- */
- virtual QCString trSearchForIndex()
- {
- return "Vyhledat";
- }
- /*! This string is used as the title for the page listing the search
- * results.
- */
- virtual QCString trSearchResultsTitle()
- {
- return "Výsledky vyhledávání";
- }
- /*! This string is put just before listing the search results. The
- * text can be different depending on the number of documents found.
- * Inside the text you can put the special marker $num to insert
- * the number representing the actual number of search results.
- * The @a numDocuments parameter can be either 0, 1 or 2, where the
- * value 2 represents 2 or more matches. HTML markup is allowed inside
- * the returned string.
- */
- virtual QCString trSearchResults(int numDocuments)
- {
- if (numDocuments==0)
- {
- return "Lituji. Vašemu dotazu neodpovídá žádný dokument.";
- }
- else if (numDocuments==1)
- {
- return "Nalezen jediný dokument, který vyhovuje vašemu dotazu.";
- }
- else
- {
- return "Nalezeno <b>$num</b> dokumentů, které vyhovují vašemu "
- "dotazu. Nejlépe odpovídající dokumenty jsou zobrazeny "
- "jako první.";
- }
- }
- /*! This string is put before the list of matched words, for each search
- * result. What follows is the list of words that matched the query.
- */
- virtual QCString trSearchMatches()
- {
- return "Nalezená slova:";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.3.8
-//////////////////////////////////////////////////////////////////////////
-
- /*! This is used in HTML as the title of page with source code for file filename
- */
- virtual QCString trSourceFile(QCString& filename)
- {
- return QCString("Zdrojový soubor ") + filename;
- }
-
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.3.9
-//////////////////////////////////////////////////////////////////////////
-
-
- /*! This is used as the name of the chapter containing the directory
- * hierarchy.
- */
- virtual QCString trDirIndex()
- { return "Hierarchie adresářů"; }
-
- /*! This is used as the name of the chapter containing the documentation
- * of the directories.
- */
- virtual QCString trDirDocumentation()
- { return "Dokumentace k adresářům"; }
-
- /*! This is used as the title of the directory index and also in the
- * Quick links of a HTML page, to link to the directory hierarchy.
- */
- virtual QCString trDirectories()
- { return "Adresáře"; }
-
- /*! This returns a sentences that introduces the directory hierarchy.
- * and the fact that it is sorted alphabetically per level
- */
- virtual QCString trDirDescription()
- {
- return "Následující hierarchie adresářů je zhruba, "
- "ale ne úplně, řazena podle abecedy:";
- }
-
- /*! This returns the title of a directory page. The name of the
- * directory is passed via \a dirName.
- */
- virtual QCString trDirReference(const char *dirName)
- {
- QCString result = "Reference k adresáři ";
- result += dirName;
- return result;
- }
-
- /*! This returns the word directory with or without starting capital
- * (\a first_capital) and in sigular or plural form (\a singular).
- */
- virtual QCString trDir(bool first_capital, bool singular)
- {
- QCString result((first_capital ? "Adresář" : "adresář"));
- if ( ! singular)
- result += "e";
- return result;
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.4.1
-//////////////////////////////////////////////////////////////////////////
-
- /*! This text is added to the documentation when the \\overload command
- * is used for a overloaded function.
- */
- virtual QCString trOverloadText()
- {
- return "Jde o přetíženou (overloaded) metodu, "
- "která má usnadnit používání. Od výše uvedené metody se liší "
- "pouze jinak zadávanými argumenty.";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.4.6
-//////////////////////////////////////////////////////////////////////////
-
- virtual QCString trCallerGraph()
- {
- return "Tuto funkci volají...";
- }
-
-
- /*! This is used in the documentation of a file/namespace before the list
- * of documentation blocks for enumeration values
- */
- virtual QCString trEnumerationValueDocumentation()
- {
- return "Dokumentace výÄtových hodnot";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.5.4 (mainly for Fortran)
-//////////////////////////////////////////////////////////////////////////
-
- /*! header that is put before the list of member subprograms (Fortran). */
- virtual QCString trMemberFunctionDocumentationFortran()
- { return "Dokumentace Älenských funkcí/podprogramů"; }
-
- /*! This is put above each page as a link to the list of annotated data types (Fortran). */
- virtual QCString trCompoundListFortran()
- { return "Seznam datových typů"; }
-
- /*! This is put above each page as a link to all members of compounds (Fortran). */
- virtual QCString trCompoundMembersFortran()
- { return "Datová pole"; }
-
- /*! This is an introduction to the annotated compound list (Fortran). */
- virtual QCString trCompoundListDescriptionFortran()
- { return "Datové typy se struÄnými popisy:"; }
-
- /*! This is an introduction to the page with all data types (Fortran). */
- virtual QCString trCompoundMembersDescriptionFortran(bool extractAll)
- {
-
- QCString result="Následuje seznam všech ";
- if (!extractAll)
- {
- result+="dokumentovaných ";
- }
- result+="složek datových typů";
- result+=" s odkazy na ";
- if (!extractAll)
- {
- result+="dokumentaci datové struktury pro každou složku:";
- }
- else
- {
- result+="příslušné datové typy:";
- }
- return result;
- }
-
- /*! This is used in LaTeX as the title of the chapter with the
- * annotated compound index (Fortran).
- */
- virtual QCString trCompoundIndexFortran()
- { return "Rejstřík datových typů"; }
-
- /*! This is used in LaTeX as the title of the chapter containing
- * the documentation of all data types (Fortran).
- */
- virtual QCString trTypeDocumentation()
- { return "Dokumentace k datovým typům"; }
-
- /*! This is used in the documentation of a file as a header before the
- * list of (global) subprograms (Fortran).
- */
- virtual QCString trSubprograms()
- { return "Funkce/podprogramy"; }
-
- /*! This is used in the documentation of a file/namespace before the list
- * of documentation blocks for subprograms (Fortran)
- */
- virtual QCString trSubprogramDocumentation()
- { return "Dokumentace funkce/podprogramu"; }
-
- /*! This is used in the documentation of a file/namespace/group before
- * the list of links to documented compounds (Fortran)
- */
- virtual QCString trDataTypes()
- { return "Datové typy"; }
-
- /*! used as the title of page containing all the index of all modules (Fortran). */
- virtual QCString trModulesList()
- { return "Seznam modulů"; }
-
- /*! used as an introduction to the modules list (Fortran) */
- virtual QCString trModulesListDescription(bool extractAll)
- {
- QCString result="Následuje seznam všech ";
- if (!extractAll) result+="dokumentovaných ";
- result+="modulů se struÄnými popisy:";
- return result;
- }
-
- /*! used as the title of the HTML page of a module/type (Fortran) */
- virtual QCString trCompoundReferenceFortran(const char *clName,
- ClassDef::CompoundType compType,
- bool isTemplate)
- {
- QCString result("Dokumentace ");
- if (isTemplate) result += "Å¡ablony ";
- switch(compType)
- {
- case ClassDef::Class: result += "třídy "; break;
- case ClassDef::Struct: result += "typu "; break;
- case ClassDef::Union: result += "unie "; break;
- case ClassDef::Interface: result += "rozhraní "; break;
- case ClassDef::Protocol: result += "protokolu "; break;
- case ClassDef::Category: result += "kategorie "; break;
- case ClassDef::Exception: result += "výjimky "; break;
- }
- result += clName;
- return result;
-
- }
- /*! used as the title of the HTML page of a module (Fortran) */
- virtual QCString trModuleReference(const char *namespaceName)
- {
- QCString result="Dokumentace modulu ";
- result += namespaceName;
- return result;
- }
-
- /*! This is put above each page as a link to all members of modules. (Fortran) */
- virtual QCString trModulesMembers()
- { return "Části modulu"; }
-
- /*! This is an introduction to the page with all modules members (Fortran) */
- virtual QCString trModulesMemberDescription(bool extractAll)
- {
- QCString result="Následuje seznam všech ";
- if (!extractAll) result+="dokumentovaných ";
- result+="Äástí modulů s odkazy ";
- if (extractAll)
- {
- result+="na dokumentaci modulu pro danou Äást:";
- }
- else
- {
- result+="na moduly, ke kterým Äást patří:";
- }
- return result;
- }
-
- /*! This is used in LaTeX as the title of the chapter with the
- * index of all modules (Fortran).
- */
- virtual QCString trModulesIndex()
- { return "Rejstřík modulů"; }
-
- /*! This is used for translation of the word that will possibly
- * be followed by a single name or by a list of names
- * of the category.
- */
- virtual QCString trModule(bool first_capital, bool singular)
- {
- QCString result((first_capital ? "Modul" : "modul"));
- if (!singular) result+="y";
- return result;
- }
- /*! This is put at the bottom of a module documentation page and is
- * followed by a list of files that were used to generate the page.
- */
- virtual QCString trGeneratedFromFilesFortran(ClassDef::CompoundType compType,
- bool single)
- { // here s is one of " Module", " Struct" or " Union"
- // single is true implies a single file
- QCString result=(QCString)"Dokumentace ";
- switch(compType)
- {
- case ClassDef::Class: result+="k tomuto modulu"; break;
- case ClassDef::Struct: result+="k tomuto typu"; break;
- case ClassDef::Union: result+="k této unii"; break;
- case ClassDef::Interface: result+="k tomuto rozhraní"; break;
- case ClassDef::Protocol: result+="k tomuto protokolu"; break;
- case ClassDef::Category: result+="k této kategorii"; break;
- case ClassDef::Exception: result+="k této výjimce"; break;
- }
- result+=" byla vygenerována z ";
- if (single) result+="následujícího souboru:";
- else result+="následujících souborů:";
- return result;
- }
- /*! This is used for translation of the word that will possibly
- * be followed by a single name or by a list of names
- * of the category.
- */
- virtual QCString trType(bool first_capital, bool singular)
- {
- QCString result((first_capital ? "Typ" : "typ"));
- if (!singular) result+="y";
- return result;
- }
- /*! This is used for translation of the word that will possibly
- * be followed by a single name or by a list of names
- * of the category.
- */
- virtual QCString trSubprogram(bool first_capital, bool singular)
- {
- QCString result((first_capital ? "Podprogram" : "podprogram"));
- if (!singular) result+="y";
- return result;
- }
-
- /*! C# Type Contraint list */
- virtual QCString trTypeConstraints()
- {
- return "Omezení typů (Type Constraints)";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.6.0 (mainly for the new search engine)
-//////////////////////////////////////////////////////////////////////////
-
- /*! directory relation for \a name */
- virtual QCString trDirRelation(const char *name)
- {
- return "Relace " + QCString(name);
- }
-
- /*! Loading message shown when loading search results */
- virtual QCString trLoading()
- {
- return "NaÄítám...";
- }
-
- /*! Label used for search results in the global namespace */
- virtual QCString trGlobalNamespace()
- {
- return "Globální prostor jmen";
- }
-
- /*! Message shown while searching */
- virtual QCString trSearching()
- {
- return "Vyhledávám...";
- }
-
- /*! Text shown when no search results are found */
- virtual QCString trNoMatches()
- {
- return "Nic se nenašlo";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.6.3 (missing items for the directory pages)
-//////////////////////////////////////////////////////////////////////////
-
- /*! introduction text for the directory dependency graph */
- virtual QCString trDirDependency(const char *name)
- {
- return (QCString)"Graf závislosti adresářů pro "+name;
- }
-
- /*! when clicking a directory dependency label, a page with a
- * table is shown. The heading for the first column mentions the
- * source file that has a relation to another file.
- */
- virtual QCString trFileIn(const char *name)
- {
- return (QCString)"Soubor v "+name;
- }
-
- /*! when clicking a directory dependency label, a page with a
- * table is shown. The heading for the second column mentions the
- * destination file that is included.
- */
- virtual QCString trIncludesFileIn(const char *name)
- {
- return (QCString)"Vkládá (include) soubor z "+name;
- }
-
- /** Compiles a date string.
- * @param year Year in 4 digits
- * @param month Month of the year: 1=January
- * @param day Day of the Month: 1..31
- * @param dayOfWeek Day of the week: 1=Monday..7=Sunday
- * @param hour Hour of the day: 0..23
- * @param minutes Minutes in the hour: 0..59
- * @param seconds Seconds within the minute: 0..59
- * @param includeTime Include time in the result string?
- */
- virtual QCString trDateTime(int year,int month,int day,int dayOfWeek,
- int hour,int minutes,int seconds,
- bool includeTime)
- {
- static const char *days[] = { "po","út","st","Ät","pá","so","ne" };
- static const char *months[] = { "led","úno","bÅ™e","dub","kvÄ›","Äer","Äec","srp","zář","říj","lis","pro" };
- QCString sdate;
- sdate.sprintf("%s %d. %s %d",days[dayOfWeek-1],day,months[month-1],year);
- if (includeTime)
- {
- QCString stime;
- stime.sprintf(" %.2d.%.2d:%.2d",hour,minutes,seconds);
- sdate+=stime;
- }
- return sdate;
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.7.5
-//////////////////////////////////////////////////////////////////////////
-
- /*! Header for the page with bibliographic citations */
- virtual QCString trCiteReferences()
- { return "Odkazy na literaturu"; }
-
- /*! Text for copyright paragraph */
- virtual QCString trCopyright()
- { return "Copyright"; }
-
- /*! Header for the graph showing the directory dependencies */
- virtual QCString trDirDepGraph(const char *name)
- { return QCString("Graf závislosti na adresářích pro ")+name+":"; }
-};
-
-#endif // TRANSLATOR_CZ_H
diff --git a/trunk/src/translator_de.h b/trunk/src/translator_de.h
deleted file mode 100644
index 35a1dc3..0000000
--- a/trunk/src/translator_de.h
+++ /dev/null
@@ -1,1986 +0,0 @@
-/******************************************************************************
- *
- *
- *
- * Copyright (C) 1997-2012 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.
- *
- * The translation into German was provided by
- * Jens Seidel (jensseidel@users.sf.net)
- * based on work from
- * Jens Breitenstein (Jens.Breitenstein@tlc.de)
- */
-
-// Updates:
-// --------
-// RK (who are you?)
-// - Update for "new since 1.1.3" version
-//
-// 2001/03/23 Jens Seidel (jensseidel@users.sourceforge.net)
-// - fixed typos
-// - changed trPageDocumentation() "Seitenbeschreibung" to
-// "Zusätzliche Informationen"
-// - removed old trGeneratedFrom()
-// - changed "/*!" to "/*" (documentation is inherited from translator_en.h
-// (INHERIT_DOCS = YES), there's no need to make changes twice)
-// - Update for "new since 1.2.4" version
-//
-// 2001/04/17 Jens Seidel (jensseidel@users.sourceforge.net)
-// - fixed typos ("Vererbunsbeziehung", "gesch&uumltzter")
-// - use umlauts instead of html code ("&auml;",...)
-// this makes it easier to read and fixes three problems (two in
-// \code segment)
-//
-// 2001/04/23 Jens Seidel (jensseidel@users.sourceforge.net)
-// - Update for "new since 1.2.6-20010422" version
-//
-// 2001/05/06 Jens Seidel (jensseidel@users.sourceforge.net)
-// - Update for "new since 1.2.7" version
-// - Removed implementation of latexBabelPackage(), trVerbatimText(),
-// trFiles(), added latexLanguageSupportCommand().
-//
-// 2001/05/25 Jens Seidel (jensseidel@users.sourceforge.net)
-// - Update for "new since 1.2.7-20010524" version:
-// removed trAuthors(), trAuthor(), added trAuthor(bool, bool)
-//
-// 2001/07/24 Jens Seidel (jensseidel@users.sourceforge.net)
-// - trClassDocumentation() updated as in the English translator.
-//
-// 2001/11/30 Oliver Brandt (o.brandt@tu-bs.de) and
-// Jens Seidel (jensseidel@users.sourceforge.net)
-// - trReferences() implemented.
-// - trCompoundReference(), trLegendDocs() updated
-// - Removed some TODO's
-//
-// 2001/02/13 Oliver Brandt (o.brandt@tu-bs.de)
-// - Updated for "new since 1.2.13" version
-// - Removed some TODO's
-//
-// 2002/07/08 Oliver Brandt (o.brandt@tu-bs.de)
-// - Updated for "new since 1.2.16" version
-//
-// 2002/11/25 Jens Seidel (jensseidel@users.sourceforge.net)
-// - sync with english version 1.3
-// - TranslatorGerman doesn't inherit from TranslatorEnglish anymore,
-// so I changed "/* " back to "/*! " as in the English file
-// - use ngerman instead of german package in LaTeX
-// - changed "Datenelemente" to "Methoden" in
-// tr{,Static}{Public,Protected,Private}Members
-//
-// 2003/04/28 Jens Seidel (jensseidel@users.sourceforge.net)
-// - Updated for "new since 1.3" version
-// - translated Java package to Paket
-//
-// 2003/09/11 Jens Seidel (jensseidel@users.sourceforge.net)
-// - Updated for "new since 1.3.1" version
-//
-// 2003/09/24 Jens Seidel (jensseidel@users.sourceforge.net)
-// - Updated a few strings which changed in CVS revision 1.22
-// ("compound" vs. "class")
-//
-// 2004/08/01 Jens Seidel (jensseidel@users.sourceforge.net)
-// - Updated for "new since 1.3.8" version
-//
-// 2004/09/19 Jens Seidel (jensseidel@users.sourceforge.net)
-// - Updated for "new since 1.3.9" version
-//
-// 2004/09/25 Jens Seidel (jensseidel@users.sourceforge.net)
-// - changed "Typendefinitionen" to "Typdefinitionen" in
-// trFileMembersDescription() and trTypedefs()
-// - added a dash after (file, ...) names and in front of description
-// - changed "Eigenschaften" to "Propertys" (yeah, not ..."ies")
-//
-// 2005/03/20 Jens Seidel (jensseidel@users.sourceforge.net)
-// - Updated for "new since 1.4.1" version
-//
-// 2005/04/09 Jens Seidel (jensseidel@users.sourceforge.net)
-// - Changed Todo list translation as suggested in
-// http://bugzilla.gnome.org/show_bug.cgi?id=172818
-//
-// 2005/05/09 Jens Seidel (jensseidel@users.sourceforge.net)
-// - Updated for "new since 1.4.3" version (removed unused methods)
-//
-// 2006/06/12 Jens Seidel (jensseidel@users.sourceforge.net)
-// - Updated for "new since 1.4.6" version
-//
-// 2008/02/04 Jens Seidel (jensseidel@users.sourceforge.net)
-// - Updated for "new since 1.5.4" version
-//
-// 2009/01/09 Jens Seidel (jensseidel@users.sourceforge.net)
-// - Resynced the trLegendDocs() method
-//
-// 2010/03/17 Jens Seidel (jensseidel@users.sourceforge.net)
-// - Updated for "new since 1.6.0" version
-// - Resynced the trLegendDocs() method (added closing HTML tags)
-// - Changed file encoding to utf-8, adapted idLanguageCharset()
-// - New German orthography (ngerman) is now default in LaTeX
-//
-// Todo:
-// - see FIXME
-
-#ifndef TRANSLATOR_DE_H
-#define TRANSLATOR_DE_H
-
-class TranslatorGerman : public Translator
-{
- public:
-
- // --- Language control methods -------------------
-
- /*! Used for identification of the language. The identification
- * should not be translated. It should be replaced by the name
- * of the language in English using lower-case characters only
- * (e.g. "czech", "japanese", "russian", etc.). It should be equal to
- * the identification used in language.cpp.
- */
- virtual QCString idLanguage()
- { return "german"; }
-
- /*! Used to get the LaTeX command(s) for the language support. This method
- * was designed for languages which do wish to use a babel package.
- */
- virtual QCString latexLanguageSupportCommand()
- {
- return "\\usepackage[ngerman]{babel}\n";
- }
-
- /*! return the language charset. This will be used for the HTML output */
- virtual QCString idLanguageCharset()
- {
- return "utf-8";
- }
-
- // --- Language translation methods -------------------
-
- /*! used in the compound documentation before a list of related functions. */
- virtual QCString trRelatedFunctions()
- { return "Verwandte Funktionen"; }
-
- /*! subscript for the related functions. */
- virtual QCString trRelatedSubscript()
- { return "(Es handelt sich hierbei nicht um Elementfunktionen.)"; }
-
- /*! header that is put before the detailed description of files, classes and namespaces. */
- virtual QCString trDetailedDescription()
- { return "Ausführliche Beschreibung"; }
-
- /*! header that is put before the list of typedefs. */
- virtual QCString trMemberTypedefDocumentation()
- { return "Dokumentation der benutzerdefinierten Datentypen"; }
-
- /*! header that is put before the list of enumerations. */
- virtual QCString trMemberEnumerationDocumentation()
- { return "Dokumentation der Aufzählungstypen"; }
-
- /*! header that is put before the list of member functions. */
- virtual QCString trMemberFunctionDocumentation()
- { return "Dokumentation der Elementfunktionen"; }
-
- /*! header that is put before the list of member attributes. */
- virtual QCString trMemberDataDocumentation()
- { /* No difference if "OPTIMIZE_OUTPUT_FOR_C" is set! */
- return "Dokumentation der Datenelemente";
- }
-
- /*! this is the text of a link put after brief descriptions. */
- virtual QCString trMore()
- { return "Mehr ..."; }
-
- /*! put in the class documentation */
- virtual QCString trListOfAllMembers()
- { return "Aufstellung aller Elemente"; }
-
- /*! used as the title of the "list of all members" page of a class */
- virtual QCString trMemberList()
- { return "Elementverzeichnis"; }
-
- /*! this is the first part of a sentence that is followed by a class name */
- virtual QCString trThisIsTheListOfAllMembers()
- { return "Vollständige Aufstellung aller Elemente für "; }
-
- /*! this is the remainder of the sentence after the class name */
- virtual QCString trIncludingInheritedMembers()
- { return " einschließlich aller geerbten Elemente."; }
-
- /*! this is put at the author sections at the bottom of man pages.
- * parameter s is name of the project name.
- */
- virtual QCString trGeneratedAutomatically(const char *s)
- { QCString result="Automatisch erzeugt von Doxygen";
- if (s) result+=(QCString)" für "+s;
- result+=" aus dem Quellcode.";
- return result;
- }
-
- /*! put after an enum name in the list of all members */
- virtual QCString trEnumName()
- { return "enum Bezeichner"; }
-
- /*! put after an enum value in the list of all members */
- virtual QCString trEnumValue()
- { return "enum Wert"; }
-
- /*! put after an undocumented member in the list of all members */
- virtual QCString trDefinedIn()
- { return "Definiert in"; }
-
- // quick reference sections
-
- /*! This is put above each page as a link to the list of all groups of
- * compounds or files (see the \\group command).
- */
- virtual QCString trModules()
- { return "Module"; }
-
- /*! This is put above each page as a link to the class hierarchy */
- virtual QCString trClassHierarchy()
- { return "Klassenhierarchie"; }
-
- /*! This is put above each page as a link to the list of annotated classes */
- virtual QCString trCompoundList()
- {
- if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
- {
- return "Datenstrukturen";
- }
- else
- {
- return "Auflistung der Klassen";
- }
- }
-
- /*! This is put above each page as a link to the list of documented files */
- virtual QCString trFileList()
- { return "Auflistung der Dateien"; }
-
- /*! This is put above each page as a link to all members of compounds. */
- virtual QCString trCompoundMembers()
- {
- if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
- {
- return "Datenstruktur-Elemente";
- }
- else
- {
- return "Klassen-Elemente";
- }
- }
-
- /*! This is put above each page as a link to all members of files. */
- virtual QCString trFileMembers()
- /* No difference if "OPTIMIZE_OUTPUT_FOR_C" is set! */
- { return "Datei-Elemente"; }
-
- /*! This is put above each page as a link to all related pages. */
- virtual QCString trRelatedPages()
- { return "Zusätzliche Informationen"; }
-
- /*! This is put above each page as a link to all examples. */
- virtual QCString trExamples()
- { return "Beispiele"; }
-
- /*! This is put above each page as a link to the search engine. */
- virtual QCString trSearch()
- { return "Suchen"; }
-
- /*! This is an introduction to the class hierarchy. */
- virtual QCString trClassHierarchyDescription()
- { return "Die Liste der Ableitungen ist -mit Einschränkungen- "
- "alphabetisch sortiert:";
- }
-
- /*! This is an introduction to the list with all files. */
- virtual QCString trFileListDescription(bool extractAll)
- {
- QCString result="Hier folgt die Aufzählung aller ";
- if (!extractAll) result+="dokumentierten ";
- result+="Dateien mit einer Kurzbeschreibung:";
- return result;
- }
-
- /*! This is an introduction to the annotated compound list. */
- virtual QCString trCompoundListDescription()
- {
- if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
- {
- return "Hier folgt die Aufzählung aller Datenstrukturen "
- "mit einer Kurzbeschreibung:";
- }
- else
- {
- return "Hier folgt die Aufzählung aller Klassen, Strukturen, "
- "Varianten und Schnittstellen mit einer Kurzbeschreibung:";
- }
- }
-
- /*! This is an introduction to the page with all class members. */
- virtual QCString trCompoundMembersDescription(bool extractAll)
- {
- QCString result="Hier folgt die Aufzählung aller ";
- if (!extractAll)
- {
- result+="dokumentierten ";
- }
- if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
- {
- result+="Strukturen und Varianten";
- }
- else
- {
- result+="Klassenelemente";
- }
- result+=" mit Verweisen auf ";
- if (!extractAll)
- {
- if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
- {
- result+="die Dokumentation zu jedem Element:";
- }
- else
- {
- result+="die Klassendokumentation zu jedem Element:";
- }
- }
- else
- {
- if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
- {
- result+="die zugehörigen Elemente:";
- }
- else
- {
- result+="die zugehörigen Klassen:";
- }
- }
- return result;
- }
-
- /*! This is an introduction to the page with all file members. */
- virtual QCString trFileMembersDescription(bool extractAll)
- {
- QCString result="Hier folgt die Aufzählung aller ";
- if (!extractAll) result+="dokumentierten ";
- if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
- {
- result+="Funktionen, Variablen, Makros, Aufzählungen und Typdefinitionen";
- }
- else
- {
- result+="Dateielemente";
- }
- result+=" mit Verweisen auf ";
- if (extractAll)
- result+="die Dokumentation zu jedem Element:";
- else
- result+="die zugehörigen Dateien:";
- return result;
- }
-
- /*! This is an introduction to the page with the list of all examples */
- virtual QCString trExamplesDescription()
- { return "Hier folgt eine Liste mit allen Beispielen:"; }
-
- /*! This is an introduction to the page with the list of related pages */
- virtual QCString trRelatedPagesDescription()
- { return "Hier folgt eine Liste mit zusammengehörigen Themengebieten:"; }
-
- /*! This is an introduction to the page with the list of class/file groups */
- virtual QCString trModulesDescription()
- { return "Hier folgt die Aufzählung aller Module:"; }
-
- // index titles (the project name is prepended for these)
-
- /*! This is used in HTML as the title of index.html. */
- virtual QCString trDocumentation()
- { return "Dokumentation"; }
-
- /*! This is used in LaTeX as the title of the chapter with the
- * index of all groups.
- */
- virtual QCString trModuleIndex()
- { return "Modul-Verzeichnis"; }
-
- /*! This is used in LaTeX as the title of the chapter with the
- * class hierarchy.
- */
- virtual QCString trHierarchicalIndex()
- { return "Hierarchie-Verzeichnis"; }
-
- /*! This is used in LaTeX as the title of the chapter with the
- * annotated compound index.
- */
- virtual QCString trCompoundIndex()
- {
- if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
- return "Datenstruktur-Verzeichnis";
- else
- return "Klassen-Verzeichnis";
- }
-
- /*! This is used in LaTeX as the title of the chapter with the
- * list of all files.
- */
- virtual QCString trFileIndex()
- { return "Datei-Verzeichnis"; }
-
- /*! This is used in LaTeX as the title of the chapter containing
- * the documentation of all groups.
- */
- virtual QCString trModuleDocumentation()
- { return "Modul-Dokumentation"; }
-
- /*! This is used in LaTeX as the title of the chapter containing
- * the documentation of all classes, structs and unions.
- */
- virtual QCString trClassDocumentation()
- {
- if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
- {
- return "Datenstruktur-Dokumentation";
- }
- else
- {
- return "Klassen-Dokumentation";
- }
- }
-
- /*! This is used in LaTeX as the title of the chapter containing
- * the documentation of all files.
- */
- virtual QCString trFileDocumentation()
- { return "Datei-Dokumentation"; }
-
- /*! This is used in LaTeX as the title of the chapter containing
- * the documentation of all examples.
- */
- virtual QCString trExampleDocumentation()
- { return "Dokumentation der Beispiele"; }
-
- /*! This is used in LaTeX as the title of the chapter containing
- * the documentation of all related pages.
- */
- virtual QCString trPageDocumentation()
- { return "Zusätzliche Informationen"; }
-
- /*! This is used in LaTeX as the title of the document */
- virtual QCString trReferenceManual()
- { return "Nachschlagewerk"; }
-
- /*! This is used in the documentation of a file as a header before the
- * list of defines
- */
- virtual QCString trDefines()
- { return "Makrodefinitionen"; }
-
- /*! This is used in the documentation of a file as a header before the
- * list of function prototypes
- */
- virtual QCString trFuncProtos()
- { return "Funktionsprototypen"; }
-
- /*! This is used in the documentation of a file as a header before the
- * list of typedefs
- */
- virtual QCString trTypedefs()
- { return "Typdefinitionen"; }
-
- /*! This is used in the documentation of a file as a header before the
- * list of enumerations
- */
- virtual QCString trEnumerations()
- { return "Aufzählungen"; }
-
- /*! This is used in the documentation of a file as a header before the
- * list of (global) functions
- */
- virtual QCString trFunctions()
- { return "Funktionen"; }
-
- /*! This is used in the documentation of a file as a header before the
- * list of (global) variables
- */
- virtual QCString trVariables()
- { return "Variablen"; }
-
- /*! This is used in the documentation of a file as a header before the
- * list of (global) variables
- */
- virtual QCString trEnumerationValues()
- { return "Aufzählungswerte"; }
-
- /*! This is used in the documentation of a file before the list of
- * documentation blocks for defines
- */
- virtual QCString trDefineDocumentation()
- { return "Makro-Dokumentation"; }
-
- /*! This is used in the documentation of a file/namespace before the list
- * of documentation blocks for function prototypes
- */
- virtual QCString trFunctionPrototypeDocumentation()
- { return "Funktionsprototypen Dokumentation"; }
-
- /*! This is used in the documentation of a file/namespace before the list
- * of documentation blocks for typedefs
- */
- virtual QCString trTypedefDocumentation()
- { return "Dokumentation der benutzerdefinierten Typen"; }
-
- /*! This is used in the documentation of a file/namespace before the list
- * of documentation blocks for enumeration types
- */
- virtual QCString trEnumerationTypeDocumentation()
- { return "Dokumentation der Aufzählungstypen"; }
-
- /*! This is used in the documentation of a file/namespace before the list
- * of documentation blocks for functions
- */
- virtual QCString trFunctionDocumentation()
- { return "Dokumentation der Funktionen"; }
-
- /*! This is used in the documentation of a file/namespace before the list
- * of documentation blocks for variables
- */
- virtual QCString trVariableDocumentation()
- { return "Variablen-Dokumentation"; }
-
- /*! This is used in the documentation of a file/namespace/group before
- * the list of links to documented compounds
- */
- virtual QCString trCompounds()
- {
- if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
- {
- return "Datenstrukturen";
- }
- else
- {
- return "Klassen";
- }
- }
-
- /*! This is used in the standard footer of each page and indicates when
- * the page was generated
- */
- virtual QCString trGeneratedAt(const char *date,const char *projName)
- {
- QCString result=(QCString)"Erzeugt am "+date;
- if (projName) result+=(QCString)" für "+projName;
- result+=(QCString)" von";
- return result;
- }
-
- /*! This is part of the sentence used in the standard footer of each page.
- */
- virtual QCString trWrittenBy()
- {
- return "geschrieben von";
- }
-
- /*! this text is put before a class diagram */
- virtual QCString trClassDiagram(const char *clName)
- {
- return (QCString)"Klassendiagramm für "+clName+":";
- }
-
- /*! this text is generated when the \\internal command is used. */
- virtual QCString trForInternalUseOnly()
- { return "Nur für den internen Gebrauch."; }
-
- /*! this text is generated when the \\warning command is used. */
- virtual QCString trWarning()
- { return "Warnung"; }
-
- /*! this text is generated when the \\version command is used. */
- virtual QCString trVersion()
- { return "Version"; }
-
- /*! this text is generated when the \\date command is used. */
- virtual QCString trDate()
- { return "Datum"; }
-
- /*! this text is generated when the \\return command is used. */
- virtual QCString trReturns()
- { return "Rückgabe"; }
-
- /*! this text is generated when the \\sa command is used. */
- virtual QCString trSeeAlso()
- { return "Siehe auch"; }
-
- /*! this text is generated when the \\param command is used. */
- virtual QCString trParameters()
- { return "Parameter"; }
-
- /*! this text is generated when the \\exception command is used. */
- virtual QCString trExceptions()
- { return "Ausnahmebehandlung"; }
-
- /*! this text is used in the title page of a LaTeX document. */
- virtual QCString trGeneratedBy()
- { return "Erzeugt von"; }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 0.49-990307
-//////////////////////////////////////////////////////////////////////////
-
- /*! used as the title of page containing all the index of all namespaces. */
- virtual QCString trNamespaceList()
- { return "Liste aller Namensbereiche"; }
-
- /*! used as an introduction to the namespace list */
- virtual QCString trNamespaceListDescription(bool extractAll)
- {
- QCString result="Liste aller ";
- if (!extractAll) result+="dokumentierten ";
- result+="Namensbereiche mit Kurzbeschreibung:";
- return result;
- }
-
- /*! used in the class documentation as a header before the list of all
- * friends of a class
- */
- virtual QCString trFriends()
- { return "Freundbeziehungen"; }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 0.49-990405
-//////////////////////////////////////////////////////////////////////////
-
- /*! used in the class documentation as a header before the list of all
- * related classes
- */
- virtual QCString trRelatedFunctionDocumentation()
- { return "Freundbeziehungen und Funktionsdokumentation"; }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 0.49-990425
-//////////////////////////////////////////////////////////////////////////
-
- /*! used as the title of the HTML page of a class/struct/union */
- virtual QCString trCompoundReference(const char *clName,
- ClassDef::CompoundType compType,
- bool isTemplate)
- {
- QCString result=(QCString)clName+" ";
- if (isTemplate) result+="Template-";
- switch(compType)
- {
- case ClassDef::Class: result+="Klassen"; break;
- case ClassDef::Struct: result+="Struktur"; break;
- case ClassDef::Union: result+="Varianten"; break;
- case ClassDef::Interface: result+="Schnittstellen"; break;
- case ClassDef::Protocol: result+="Protokoll"; break;
- case ClassDef::Category: result+="Kategorie"; break;
- case ClassDef::Exception: result+="Ausnahmen"; break;
- }
- result+="referenz";
- return result;
- }
-
- /*! used as the title of the HTML page of a file */
- virtual QCString trFileReference(const char *fileName)
- {
- QCString result=fileName;
- result+="-Dateireferenz";
- return result;
- }
-
- /*! used as the title of the HTML page of a namespace */
- virtual QCString trNamespaceReference(const char *namespaceName)
- {
- QCString result=namespaceName;
- result+="-Namensbereichsreferenz";
- return result;
- }
-
- virtual QCString trPublicMembers()
- { return "Öffentliche Methoden"; }
-
- virtual QCString trPublicSlots()
- { return "Öffentliche Slots"; }
-
- virtual QCString trSignals()
- { return "Signale"; }
-
- virtual QCString trStaticPublicMembers()
- { return "Öffentliche, statische Methoden"; }
-
- virtual QCString trProtectedMembers()
- { return "Geschützte Methoden"; }
-
- virtual QCString trProtectedSlots()
- { return "Geschützte Slots"; }
-
- virtual QCString trStaticProtectedMembers()
- { return "Geschützte, statische Methoden"; }
-
- virtual QCString trPrivateMembers()
- { return "Private Methoden"; }
-
- virtual QCString trPrivateSlots()
- { return "Private Slots"; }
-
- virtual QCString trStaticPrivateMembers()
- { return "Private, statische Methoden"; }
-
- /*! this function is used to produce a comma-separated list of items.
- * use generateMarker(i) to indicate where item i should be put.
- */
- virtual QCString trWriteList(int numEntries)
- {
- QCString result;
- int i;
- // the inherits list contain `numEntries' classes
- for (i=0;i<numEntries;i++)
- {
- // use generateMarker to generate placeholders for the class links!
- result+=generateMarker(i); // generate marker for entry i in the list
- // (order is left to right)
-
- if (i!=numEntries-1) // not the last entry, so we need a separator
- {
- if (i<numEntries-2) // not the fore last entry
- result+=", ";
- else // the fore last entry
- result+=" und ";
- }
- }
- return result;
- }
-
- /*! used in class documentation to produce a list of base classes,
- * if class diagrams are disabled.
- */
- virtual QCString trInheritsList(int numEntries)
- {
- return "Abgeleitet von "+trWriteList(numEntries)+".";
- }
-
- /*! used in class documentation to produce a list of super classes,
- * if class diagrams are disabled.
- */
- virtual QCString trInheritedByList(int numEntries)
- {
- return "Basisklasse für "+trWriteList(numEntries)+".";
- }
-
- /*! used in member documentation blocks to produce a list of
- * members that are hidden by this one.
- */
- virtual QCString trReimplementedFromList(int numEntries)
- {
- return "Erneute Implementation von "+trWriteList(numEntries)+".";
- }
-
- /*! used in member documentation blocks to produce a list of
- * all member that overwrite the implementation of this member.
- */
- virtual QCString trReimplementedInList(int numEntries)
- {
- return "Erneute Implementation in "+trWriteList(numEntries)+".";
- }
-
- /*! This is put above each page as a link to all members of namespaces. */
- virtual QCString trNamespaceMembers()
- { return "Elemente eines Namensbereiches"; }
-
- /*! This is an introduction to the page with all namespace members */
- virtual QCString trNamespaceMemberDescription(bool extractAll)
- {
- QCString result="Hier folgt die Aufzählung aller ";
- if (!extractAll) result+="dokumentierten ";
- result+="Namensbereichselemente mit Verweisen auf ";
- if (extractAll)
- result+="die Namensbereichsdokumentation für jedes Element:";
- else
- result+="die zugehörigen Dateien:";
- return result;
- }
-
- /*! This is used in LaTeX as the title of the chapter with the
- * index of all namespaces.
- */
- virtual QCString trNamespaceIndex()
- { return "Verzeichnis der Namensbereiche"; }
-
- /*! This is used in LaTeX as the title of the chapter containing
- * the documentation of all namespaces.
- */
- virtual QCString trNamespaceDocumentation()
- { return "Dokumentation der Namensbereiche"; }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 0.49-990522
-//////////////////////////////////////////////////////////////////////////
-
- /*! This is used in the documentation before the list of all
- * namespaces in a file.
- */
- virtual QCString trNamespaces()
- { return "Namensbereiche"; }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 0.49-990728
-//////////////////////////////////////////////////////////////////////////
-
- /*! This is put at the bottom of a class documentation page and is
- * followed by a list of files that were used to generate the page.
- */
- virtual QCString trGeneratedFromFiles(ClassDef::CompoundType compType,
- bool single)
- { // single is true implies a single file
- QCString result=(QCString)"Die Dokumentation für diese";
- switch(compType)
- {
- case ClassDef::Class: result+=" Klasse"; break;
- case ClassDef::Struct: result+=" Struktur"; break;
- case ClassDef::Union: result+=" Variante"; break;
- case ClassDef::Interface: result+=" Schnittstelle"; break;
- case ClassDef::Protocol: result+="s Protokoll"; break;
- case ClassDef::Category: result+=" Kategorie"; break;
- case ClassDef::Exception: result+=" Ausnahme"; break;
- }
- result+=" wurde erzeugt aufgrund der Datei";
- if (single) result+=":"; else result+="en:";
- return result;
- }
-
- /*! This is in the (quick) index as a link to the alphabetical compound
- * list.
- */
- virtual QCString trAlphabeticalList()
- { return "Alphabetische Liste"; }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 0.49-990901
-//////////////////////////////////////////////////////////////////////////
-
- /*! This is used as the heading text for the retval command. */
- virtual QCString trReturnValues()
- { return "Rückgabewerte"; }
-
- /*! This is in the (quick) index as a link to the main page (index.html)
- */
- virtual QCString trMainPage()
- { return "Hauptseite"; }
-
- /*! This is used in references to page that are put in the LaTeX
- * documentation. It should be an abbreviation of the word page.
- */
- virtual QCString trPageAbbreviation()
- { return "S."; }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 0.49-991003
-//////////////////////////////////////////////////////////////////////////
-
- virtual QCString trDefinedAtLineInSourceFile()
- {
- return "Definiert in Zeile @0 der Datei @1.";
- }
-
- virtual QCString trDefinedInSourceFile()
- {
- return "Definiert in Datei @0.";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 0.49-991205
-//////////////////////////////////////////////////////////////////////////
-
- virtual QCString trDeprecated()
- {
- return "Veraltet";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.0.0
-//////////////////////////////////////////////////////////////////////////
-
- /*! this text is put before a collaboration diagram */
- virtual QCString trCollaborationDiagram(const char *clName)
- {
- return (QCString)"Zusammengehörigkeiten von "+clName+":";
- }
-
- /*! this text is put before an include dependency graph */
- virtual QCString trInclDepGraph(const char *fName)
- {
- return (QCString)"Include-Abhängigkeitsdiagramm für "+fName+":";
- }
-
- /*! header that is put before the list of constructor/destructors. */
- virtual QCString trConstructorDocumentation()
- {
- return "Beschreibung der Konstruktoren und Destruktoren";
- }
-
- /*! Used in the file documentation to point to the corresponding sources. */
- virtual QCString trGotoSourceCode()
- {
- return "gehe zum Quellcode dieser Datei";
- }
-
- /*! Used in the file sources to point to the corresponding documentation. */
- virtual QCString trGotoDocumentation()
- {
- return "gehe zur Dokumentation dieser Datei";
- }
-
- /*! Text for the \\pre command */
- virtual QCString trPrecondition()
- {
- return "Vorbedingung";
- }
-
- /*! Text for the \\post command */
- virtual QCString trPostcondition()
- {
- return "Nachbedingung";
- }
-
- /*! Text for the \\invariant command */
- virtual QCString trInvariant()
- {
- return "Invariant";
- }
-
- /*! Text shown before a multi-line variable/enum initialization */
- virtual QCString trInitialValue()
- {
- return "Initialisierung:";
- }
-
- /*! Text used the source code in the file index */
- virtual QCString trCode()
- {
- return "code";
- }
-
- virtual QCString trGraphicalHierarchy()
- {
- return "Grafische Darstellung der Klassenhierarchie";
- }
-
- virtual QCString trGotoGraphicalHierarchy()
- {
- return "gehe zur grafischen Darstellung der Klassenhierarchie";
- }
-
- virtual QCString trGotoTextualHierarchy()
- {
- return "gehe zur textbasierten Darstellung der Klassenhierarchie";
- }
-
- virtual QCString trPageIndex()
- {
- return "Seitenindex";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.1.0
-//////////////////////////////////////////////////////////////////////////
-
- //RK: had to change here because of the new command \remark
- virtual QCString trNote()
- {
- return "Zu beachten";
- }
-
- virtual QCString trPublicTypes()
- {
- return "Öffentliche Typen";
- }
-
- virtual QCString trPublicAttribs()
- {
- if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
- {
- return "Datenfelder";
- }
- else
- {
- return "Öffentliche Attribute";
- }
- }
-
- virtual QCString trStaticPublicAttribs()
- {
- return "Statische öffentliche Attribute";
- }
-
- virtual QCString trProtectedTypes()
- {
- return "Geschützte Typen";
- }
-
- virtual QCString trProtectedAttribs()
- {
- return "Geschützte Attribute";
- }
-
- virtual QCString trStaticProtectedAttribs()
- {
- return "Statische geschützte Attribute";
- }
-
- virtual QCString trPrivateTypes()
- {
- return "Private Typen";
- }
-
- virtual QCString trPrivateAttribs()
- {
- return "Private Attribute";
- }
-
- virtual QCString trStaticPrivateAttribs()
- {
- return "Statische private Attribute";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.1.3
-//////////////////////////////////////////////////////////////////////////
-
- /*! Used as a marker that is put before a \\todo item */
- virtual QCString trTodo()
- {
- return "Noch zu erledigen";
- }
-
- /*! Used as the header of the todo list */
- virtual QCString trTodoList()
- {
- return "Ausstehende Aufgaben";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.1.4
-//////////////////////////////////////////////////////////////////////////
-
- virtual QCString trReferencedBy()
- {
- return "Wird benutzt von";
- }
-
- virtual QCString trRemarks()
- {
- return "Bemerkungen";
- }
-
- virtual QCString trAttention()
- {
- return "Achtung";
- }
-
- virtual QCString trInclByDepGraph()
- {
- return "Dieser Graph zeigt, welche Datei direkt oder "
- "indirekt diese Datei enthält:";
- }
-
- virtual QCString trSince()
- {
- return "Seit";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.1.5
-//////////////////////////////////////////////////////////////////////////
-
- /*! title of the graph legend page */
- virtual QCString trLegendTitle()
- {
- return "Erklärung des Graphen";
- }
-
- /*! page explaining how the dot graph's should be interpreted
- * The %A in the text below are to prevent link to classes called "A".
- */
- virtual QCString trLegendDocs()
- {
- return
- "Diese Seite erklärt die Interpretation der von doxygen "
- "erzeugten Graphen.<p>\n"
- "Beispiel:\n"
- "\\code\n"
- "/*! Wegen Verkürzung unsichtbare Klasse */\n"
- "class Invisible { };\n\n"
- "/*! Klasse verkürzt dargestellt, Vererbungsbeziehung ist versteckt */\n"
- "class Truncated : public Invisible { };\n\n"
- "/* Nicht mit doxygen-Kommentaren dokumentierte Klasse */\n"
- "class Undocumented { };\n\n"
- "/*! Mithilfe öffentlicher Vererbung vererbte Klasse */\n"
- "class PublicBase : public Truncated { };\n\n"
- "/*! Eine Template-Klasse */\n"
- "template<class T> class Templ { };\n\n"
- "/*! Mithilfe geschützter Vererbung vererbte Klasse */\n"
- "class ProtectedBase { };\n\n"
- "/*! Mithilfe privater Vererbung vererbte Klasse */\n"
- "class PrivateBase { };\n\n"
- "/*! Von der Klasse Inherited benutzte Klasse */\n"
- "class Used { };\n\n"
- "/*! Superklasse, die von mehreren anderen Klassen erbt */\n"
- "class Inherited : public PublicBase,\n"
- " protected ProtectedBase,\n"
- " private PrivateBase,\n"
- " public Undocumented,\n"
- " public Templ<int>\n"
- "{\n"
- " private:\n"
- " Used *m_usedClass;\n"
- "};\n"
- "\\endcode\n"
- "Dies liefert den folgenden Graphen:"
- "<p><center><img alt=\"\" src=\"graph_legend."+Config_getEnum("DOT_IMAGE_FORMAT")+"\"></center></p>\n"
- "<p>\n"
- "Die Rechtecke in obigem Graphen bedeuten:\n"
- "</p>\n"
- "<ul>\n"
- "<li>Ein grau gefülltes Rechteck stellt die Struktur oder "
- "Klasse dar, für die der Graph erzeugt wurde.</li>\n"
- "<li>Ein Rechteck mit schwarzem Rahmen kennzeichnet eine dokumentierte "
- "Struktur oder Klasse.</li>\n"
- "<li>Ein Rechteck mit grauem Rahmen kennzeichnet eine undokumentierte "
- "Struktur oder Klasse.</li>\n"
- "<li>Ein Rechteck mit rotem Rahmen kennzeichnet eine dokumentierte "
- "Struktur oder Klasse, für die nicht alle Vererbungs-/"
- "Enthaltenseinsbeziehungen dargestellt werden. Ein Graph wird gekürzt, "
- "wenn er nicht in die angegebenen Schranken passt.</li>\n"
- "</ul>\n"
- "<p>\n"
- "Die Pfeile bedeuten:\n"
- "</p>\n"
- "<ul>\n"
- "<li>Ein dunkelblauer Pfeil stellt eine öffentliche Vererbungsbeziehung "
- "zwischen zwei Klassen dar.</li>\n"
- "<li>Ein dunkelgrüner Pfeil stellt geschützte Vererbung dar.</li>\n"
- "<li>Ein dunkelroter Pfeil stellt private Vererbung dar.</li>\n"
- "<li>Ein gestrichelter violetter Pfeil bedeutet, dass eine Klasse in "
- "einer anderen enthalten ist oder von einer anderen benutzt wird. Am "
- "Pfeil stehen die Variable(n), mit deren Hilfe auf die Struktur oder "
- "Klasse an der Pfeilspitze zugegriffen werden kann.</li>\n"
- "<li>Ein gestrichelter gelber Pfeil kennzeichnet eine Verknüpfung "
- "zwischen einer Template Instanz und der Template Klasse von welcher "
- "es abstammt. Neben dem Pfeil sind die Template Parameter aufgeführt.</li>\n"
- "</ul>\n";
- }
-
- /*! text for the link to the legend page */
- virtual QCString trLegend()
- {
- return "Legende";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.2.0
-//////////////////////////////////////////////////////////////////////////
-
- /*! Used as a marker that is put before a test item */
- virtual QCString trTest()
- {
- return "Test";
- }
-
- /*! Used as the header of the test list */
- virtual QCString trTestList()
- {
- return "Test-Liste";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.2.1
-//////////////////////////////////////////////////////////////////////////
-
- /*! Used as a section header for KDE-2 IDL methods */
- virtual QCString trDCOPMethods()
- {
- return "DCOP Methoden";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.2.2
-//////////////////////////////////////////////////////////////////////////
-
- /*! Used as a section header for IDL properties */
- virtual QCString trProperties()
- {
- return "Propertys";
- }
-
- /*! Used as a section header for IDL property documentation */
- virtual QCString trPropertyDocumentation()
- {
- return "Dokumentation der Propertys";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.2.4
-//////////////////////////////////////////////////////////////////////////
-
- /*! Used for Java classes in the summary section of Java packages */
- virtual QCString trClasses()
- {
- if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
- return "Datenstrukturen";
- else
- return "Klassen";
- }
-
- /*! Used as the title of a Java package */
- virtual QCString trPackage(const char *name)
- {
- return (QCString)"Paket "+name;
- }
-
- /*! Title of the package index page */
- virtual QCString trPackageList()
- {
- return "Paketliste";
- }
-
- /*! The description of the package index page */
- virtual QCString trPackageListDescription()
- {
- return "Hier folgen die Pakete mit einer Kurzbeschreibung (wenn verfügbar):";
- }
-
- /*! The link name in the Quick links header for each page */
- virtual QCString trPackages()
- {
- return "Pakete";
- }
-
- /*! Text shown before a multi-line define */
- virtual QCString trDefineValue()
- {
- return "Wert:";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.2.5
-//////////////////////////////////////////////////////////////////////////
-
- /*! Used as a marker that is put before a \\bug item */
- virtual QCString trBug()
- {
- return "Fehler";
- }
-
- /*! Used as the header of the bug list */
- virtual QCString trBugList()
- {
- return "Liste der bekannten Fehler";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.2.6-20010422
-//////////////////////////////////////////////////////////////////////////
-
- /*! Used as ansicpg for RTF file. See translator_en.h for details. */
- virtual QCString trRTFansicp()
- {
- return "1252";
- }
-
- /*! Used as ansicpg for RTF fcharset
- * \see trRTFansicp() for a table of possible values.
- */
- virtual QCString trRTFCharSet()
- {
- return "0";
- }
-
- /*! Used as header RTF general index */
- virtual QCString trRTFGeneralIndex()
- {
- return "Index";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.2.7
-//////////////////////////////////////////////////////////////////////////
-
- /*! This is used for translation of the word that will possibly
- * be followed by a single name or by a list of names
- * of the category.
- */
- virtual QCString trClass(bool, bool singular)
- {
- QCString result("Klasse");
- if (!singular) result+="n";
- return result;
- }
-
- /*! This is used for translation of the word that will possibly
- * be followed by a single name or by a list of names
- * of the category.
- */
- virtual QCString trFile(bool, bool singular)
- {
- QCString result("Datei");
- if (!singular) result+="en";
- return result;
- }
-
- /*! This is used for translation of the word that will possibly
- * be followed by a single name or by a list of names
- * of the category.
- */
- virtual QCString trNamespace(bool, bool singular)
- {
- QCString result("Namensbereich");
- if (!singular) result+="e";
- return result;
- }
-
- /*! This is used for translation of the word that will possibly
- * be followed by a single name or by a list of names
- * of the category.
- */
- virtual QCString trGroup(bool, bool singular)
- {
- QCString result("Gruppe");
- if (!singular) result+="n";
- return result;
- }
-
- /*! This is used for translation of the word that will possibly
- * be followed by a single name or by a list of names
- * of the category.
- */
- virtual QCString trPage(bool, bool singular)
- {
- QCString result("Seite");
- if (!singular) result+="n";
- return result;
- }
-
- /*! This is used for translation of the word that will possibly
- * be followed by a single name or by a list of names
- * of the category.
- */
- virtual QCString trMember(bool, bool singular)
- {
- QCString result("Element");
- if (!singular) result+="e";
- return result;
- }
-
- /*! This is used for translation of the word that will possibly
- * be followed by a single name or by a list of names
- * of the category.
- */
- virtual QCString trGlobal(bool first_capital, bool singular)
- {
- QCString result((first_capital ? "Global" : "global")); // FIXME
- if (!singular) result+="";
- return result;
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.2.7-20010524
-//////////////////////////////////////////////////////////////////////////
-
- /*! This text is generated when the \\author command is used and
- * for the author section in man pages.
- */
- virtual QCString trAuthor(bool, bool singular)
- {
- QCString result("Autor");
- if (!singular) result+="en";
- return result;
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.2.11
-//////////////////////////////////////////////////////////////////////////
-
- /*! This text is put before the list of members referenced by a member
- */
- virtual QCString trReferences()
- {
- return "Benutzt";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.2.13
-//////////////////////////////////////////////////////////////////////////
-
- /*! used in member documentation blocks to produce a list of
- * members that are implemented by this one.
- */
- virtual QCString trImplementedFromList(int numEntries)
- {
- return "Implementiert " + trWriteList(numEntries) + ".";
- }
-
- /*! used in member documentation blocks to produce a list of
- * all members that implement this abstract member.
- */
- virtual QCString trImplementedInList(int numEntries)
- {
- return "Implementiert in " + trWriteList(numEntries) + ".";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.2.16
-//////////////////////////////////////////////////////////////////////////
-
- /*! used in RTF documentation as a heading for the Table
- * of Contents.
- */
- virtual QCString trRTFTableOfContents()
- {
- return "Inhaltsverzeichnis";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.2.17
-//////////////////////////////////////////////////////////////////////////
-
- /*! Used as the header of the list of item that have been
- * flagged deprecated
- */
- virtual QCString trDeprecatedList()
- {
- return "Veraltete Elemente";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.2.18
-//////////////////////////////////////////////////////////////////////////
-
- /*! Used as a header for declaration section of the events found in
- * a C# program
- */
- virtual QCString trEvents()
- {
- return "Ereignisse";
- }
-
- /*! Header used for the documentation section of a class' events. */
- virtual QCString trEventDocumentation()
- {
- return "Ereignisdokumentation";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.3
-//////////////////////////////////////////////////////////////////////////
-
- /*! Used as a heading for a list of Java class types with package scope.
- */
- virtual QCString trPackageTypes()
- {
- return "Pakettypen";
- }
-
- /*! Used as a heading for a list of Java class functions with package
- * scope.
- */
- virtual QCString trPackageMembers()
- {
- return "Paketfunktionen";
- }
-
- /*! Used as a heading for a list of static Java class functions with
- * package scope.
- */
- virtual QCString trStaticPackageMembers()
- {
- return "Statische Paketfunktionen";
- }
-
- /*! Used as a heading for a list of Java class variables with package
- * scope.
- */
- virtual QCString trPackageAttribs()
- {
- return "Paketattribute";
- }
-
- /*! Used as a heading for a list of static Java class variables with
- * package scope.
- */
- virtual QCString trStaticPackageAttribs()
- {
- return "Statische Paketattribute";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.3.1
-//////////////////////////////////////////////////////////////////////////
-
- /*! Used in the quick index of a class/file/namespace member list page
- * to link to the unfiltered list of all members.
- */
- virtual QCString trAll()
- {
- return "Alle";
- }
- /*! Put in front of the call graph for a function. */
- virtual QCString trCallGraph()
- {
- return "Hier ist ein Graph der zeigt, was diese Funktion aufruft:";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.3.3
-//////////////////////////////////////////////////////////////////////////
-
- /*! When the search engine is enabled this text is put in the header
- * of each page before the field where one can enter the text to search
- * for.
- */
- virtual QCString trSearchForIndex()
- {
- return "Suchen nach";
- }
- /*! This string is used as the title for the page listing the search
- * results.
- */
- virtual QCString trSearchResultsTitle()
- {
- return "Suchergebnisse";
- }
- /*! This string is put just before listing the search results. The
- * text can be different depending on the number of documents found.
- * Inside the text you can put the special marker $num to insert
- * the number representing the actual number of search results.
- * The @a numDocuments parameter can be either 0, 1 or 2, where the
- * value 2 represents 2 or more matches. HTML markup is allowed inside
- * the returned string.
- */
- virtual QCString trSearchResults(int numDocuments)
- {
- if (numDocuments==0)
- {
- return "Es wurden keine Dokumente zu Ihrer Suchanfrage gefunden.";
- }
- else if (numDocuments==1)
- {
- return "Es wurde <b>1</b> Dokument zu Ihrer Suchanfrage gefunden.";
- }
- else
- {
- return "Es wurden <b>$num</b> Dokumente zu Ihrer Suchanfrage "
- "gefunden. Die besten Treffer werden zuerst angezeigt.";
- }
- }
- /*! This string is put before the list of matched words, for each search
- * result. What follows is the list of words that matched the query.
- */
- virtual QCString trSearchMatches()
- {
- return "Treffer:";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.3.8
-//////////////////////////////////////////////////////////////////////////
-
- /*! This is used in HTML as the title of page with source code for file filename
- */
- virtual QCString trSourceFile(QCString& filename)
- {
- return filename + " Quellcode";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.3.9
-//////////////////////////////////////////////////////////////////////////
-
- /*! This is used as the name of the chapter containing the directory
- * hierarchy.
- */
- virtual QCString trDirIndex()
- { return "Verzeichnishierarchie"; }
-
- /*! This is used as the name of the chapter containing the documentation
- * of the directories.
- */
- virtual QCString trDirDocumentation()
- { return "Verzeichnisdokumentation"; }
-
- /*! This is used as the title of the directory index and also in the
- * Quick links of an HTML page, to link to the directory hierarchy.
- */
- virtual QCString trDirectories()
- { return "Verzeichnisse"; }
-
- /*! This returns a sentences that introduces the directory hierarchy.
- * and the fact that it is sorted alphabetically per level
- */
- virtual QCString trDirDescription()
- { return "Diese Verzeichnishierarchie ist -mit Einschränkungen- "
- "alphabetisch sortiert:";
- }
-
- /*! This returns the title of a directory page. The name of the
- * directory is passed via \a dirName.
- */
- virtual QCString trDirReference(const char *dirName)
- { QCString result=dirName; result+="-Verzeichnisreferenz"; return result; }
-
- /*! This returns the word directory with or without starting capital
- * (\a first_capital) and in sigular or plural form (\a singular).
- */
- virtual QCString trDir(bool, bool singular)
- {
- QCString result("Verzeichnis");
- if (!singular) result+="se";
- return result;
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.4.1
-//////////////////////////////////////////////////////////////////////////
-
- /*! This text is added to the documentation when the \\overload command
- * is used for a overloaded function.
- */
- virtual QCString trOverloadText()
- {
- return "Dies ist eine überladene Methode, die der Bequemlichkeit "
- "wegen bereitgestellt wird. Sie unterscheidet sich von der "
- "obigen Funktion nur in den Argumenten die sie unterstützt.";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.4.6
-//////////////////////////////////////////////////////////////////////////
-
- /*! This is used to introduce a caller (or called-by) graph */
- virtual QCString trCallerGraph()
- {
- return "Hier ist ein Graph der zeigt, wo diese Funktion aufgerufen wird:";
- }
-
- /*! This is used in the documentation of a file/namespace before the list
- * of documentation blocks for enumeration values
- */
- virtual QCString trEnumerationValueDocumentation()
- { return "Enumerator-Dokumentation"; }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.5.4 (mainly for Fortran)
-//////////////////////////////////////////////////////////////////////////
-
- /*! header that is put before the list of member subprograms (Fortran). */
- virtual QCString trMemberFunctionDocumentationFortran()
- { return "Elementfunktionen/Unterroutinen-Dokumentation"; }
-
- /*! This is put above each page as a link to the list of annotated data types (Fortran). */
- virtual QCString trCompoundListFortran()
- { return "Datentyp-Liste"; }
-
- /*! This is put above each page as a link to all members of compounds (Fortran). */
- virtual QCString trCompoundMembersFortran()
- { return "Datenfelder"; }
-
- /*! This is an introduction to the annotated compound list (Fortran). */
- virtual QCString trCompoundListDescriptionFortran()
- { return "Hier folgen die Datentypen mit Kurzbeschreibungen:"; }
-
- /*! This is an introduction to the page with all data types (Fortran). */
- virtual QCString trCompoundMembersDescriptionFortran(bool extractAll)
- {
- QCString result="Hier folgt eine Liste aller ";
- if (!extractAll)
- {
- result+="dokumentierten ";
- }
- result+="Datentypelemente";
- result+=" mit Links ";
- if (!extractAll)
- {
- result+="zur Datenstruktur-Dokumentation für jedes Element";
- }
- else
- {
- result+="zu den Datentypen, zu denen sie gehören:";
- }
- return result;
- }
-
- /*! This is used in LaTeX as the title of the chapter with the
- * annotated compound index (Fortran).
- */
- virtual QCString trCompoundIndexFortran()
- { return "Datentyp-Index"; }
-
- /*! This is used in LaTeX as the title of the chapter containing
- * the documentation of all data types (Fortran).
- */
- virtual QCString trTypeDocumentation()
- { return "Datentyp-Dokumentation"; }
-
- /*! This is used in the documentation of a file as a header before the
- * list of (global) subprograms (Fortran).
- */
- virtual QCString trSubprograms()
- { return "Funktionen/Unterroutinen"; }
-
- /*! This is used in the documentation of a file/namespace before the list
- * of documentation blocks for subprograms (Fortran)
- */
- virtual QCString trSubprogramDocumentation()
- { return "Funktionen/Unterroutinen-Dokumentation"; }
-
- /*! This is used in the documentation of a file/namespace/group before
- * the list of links to documented compounds (Fortran)
- */
- virtual QCString trDataTypes()
- { return "Datentypen"; }
-
- /*! used as the title of page containing all the index of all modules (Fortran). */
- virtual QCString trModulesList()
- { return "Modulliste"; }
-
- /*! used as an introduction to the modules list (Fortran) */
- virtual QCString trModulesListDescription(bool extractAll)
- {
- QCString result="Hier folgt eine Liste aller ";
- if (!extractAll) result+="dokumentierten ";
- result+="Module mit ihren Kurzbeschreibungen:";
- return result;
- }
-
- /*! used as the title of the HTML page of a module/type (Fortran) */
- virtual QCString trCompoundReferenceFortran(const char *clName,
- ClassDef::CompoundType compType,
- bool isTemplate)
- {
- QCString result=(QCString)clName;
- result += "-";
- switch(compType)
- {
- case ClassDef::Class: result+="Modul"; break;
- case ClassDef::Struct: result+="Typ"; break;
- case ClassDef::Union: result+="Union"; break;
- case ClassDef::Interface: result+="Interface"; break;
- case ClassDef::Protocol: result+="Protokoll"; break;
- case ClassDef::Category: result+="Kategorie"; break;
- case ClassDef::Exception: result+="Ausnahmen"; break;
- }
- if (isTemplate) result+="-Template";
- result+="-Referenz";
- return result;
- }
- /*! used as the title of the HTML page of a module (Fortran) */
- virtual QCString trModuleReference(const char *namespaceName)
- {
- QCString result=namespaceName;
- result+="-Modul-Referenz";
- return result;
- }
-
- /*! This is put above each page as a link to all members of modules. (Fortran) */
- virtual QCString trModulesMembers()
- { return "Modul-Elemente"; }
-
- /*! This is an introduction to the page with all modules members (Fortran) */
- virtual QCString trModulesMemberDescription(bool extractAll)
- {
- QCString result="Hier folgt eine Liste aller ";
- if (!extractAll) result+="dokumentierten ";
- result+="Modulelemente mit Links ";
- if (extractAll)
- {
- result+="zur Moduldokumentation für jedes Element:";
- }
- else
- {
- result+="zu den Modulen, zu denen sie gehören:";
- }
- return result;
- }
-
- /*! This is used in LaTeX as the title of the chapter with the
- * index of all modules (Fortran).
- */
- virtual QCString trModulesIndex()
- { return "Modul-Index"; }
-
- /*! This is used for translation of the word that will possibly
- * be followed by a single name or by a list of names
- * of the category.
- */
- virtual QCString trModule(bool /*first_capital*/, bool singular)
- {
- QCString result("Modul");
- if (!singular) result+="e";
- return result;
- }
-
- /*! This is put at the bottom of a module documentation page and is
- * followed by a list of files that were used to generate the page.
- */
- virtual QCString trGeneratedFromFilesFortran(ClassDef::CompoundType compType,
- bool single)
- {
- // single is true implies a single file
- QCString result=(QCString)"Die Dokumentation für ";
- switch(compType)
- {
- case ClassDef::Class: result+="dieses Modul"; break;
- case ClassDef::Struct: result+="diesen Typ"; break;
- case ClassDef::Union: result+="diese Union"; break;
- case ClassDef::Interface: result+="dieses Interface"; break;
- case ClassDef::Protocol: result+="dieses Protokoll"; break;
- case ClassDef::Category: result+="diese Kategorie"; break;
- case ClassDef::Exception: result+="diese Ausnahme"; break;
- }
- if (single)
- result+=" wurde aus der folgenden Datei erzeugt:";
- else
- result+=" wurde aus den folgenden Dateien erzeugt:";
- return result;
- }
-
- /*! This is used for translation of the word that will possibly
- * be followed by a single name or by a list of names
- * of the category.
- */
- virtual QCString trType(bool /*first_capital*/, bool singular)
- {
- QCString result("Typ");
- if (!singular) result+="en";
- return result;
- }
-
- /*! This is used for translation of the word that will possibly
- * be followed by a single name or by a list of names
- * of the category.
- */
- virtual QCString trSubprogram(bool /*first_capital*/, bool singular)
- {
- QCString result("Unterprogramm");
- if (!singular) result+="e";
- return result;
- }
-
- /*! C# Type Constraint list */
- virtual QCString trTypeConstraints()
- {
- return "Type Constraints";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.6.0 (mainly for the new search engine)
-//////////////////////////////////////////////////////////////////////////
-
- /*! directory relation for \a name */
- virtual QCString trDirRelation(const char *name)
- {
- return "Bezug " + QCString(name);
- }
-
- /*! Loading message shown when loading search results */
- virtual QCString trLoading()
- {
- return "Lade ...";
- }
-
- /*! Label used for search results in the global namespace */
- virtual QCString trGlobalNamespace()
- {
- return "Globaler Namensbereich";
- }
-
- /*! Message shown while searching */
- virtual QCString trSearching()
- {
- return "Suche ...";
- }
-
- /*! Text shown when no search results are found */
- virtual QCString trNoMatches()
- {
- return "Keine Treffer";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.6.3 (missing items for the directory pages)
-//////////////////////////////////////////////////////////////////////////
-
- /*! introduction text for the directory dependency graph */
- virtual QCString trDirDependency(const char *name)
- {
- return (QCString)"Diagramm der Verzeichnisabhängigkeiten für "+name;
- }
-
- /*! when clicking a directory dependency label, a page with a
- * table is shown. The heading for the first column mentions the
- * source file that has a relation to another file.
- */
- virtual QCString trFileIn(const char *name)
- {
- return (QCString)"Datei in "+name;
- }
-
- /*! when clicking a directory dependency label, a page with a
- * table is shown. The heading for the second column mentions the
- * destination file that is included.
- */
- virtual QCString trIncludesFileIn(const char *name)
- {
- return (QCString)"Include-Dateien in "+name;
- }
-
- /** Compiles a date string.
- * @param year Year in 4 digits
- * @param month Month of the year: 1=January
- * @param day Day of the Month: 1..31
- * @param dayOfWeek Day of the week: 1=Monday..7=Sunday
- * @param hour Hour of the day: 0..23
- * @param minutes Minutes in the hour: 0..59
- * @param seconds Seconds within the minute: 0..59
- * @param includeTime Include time in the result string?
- */
- virtual QCString trDateTime(int year,int month,int day,int dayOfWeek,
- int hour,int minutes,int seconds,
- bool includeTime)
- {
- static const char *days[] = { "Mon","Die","Mit","Don","Fre","Sam","Son" };
- static const char *months[] = { "Jan","Feb","Mär","Apr","Mai","Jun","Jul","Aug","Sep","Okt","Nov","Dez" };
- QCString sdate;
- sdate.sprintf("%s %s %d %d",days[dayOfWeek-1],months[month-1],day,year);
- if (includeTime)
- {
- QCString stime;
- stime.sprintf(" %.2d:%.2d:%.2d",hour,minutes,seconds);
- sdate+=stime;
- }
- return sdate;
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.7.5
-//////////////////////////////////////////////////////////////////////////
-
- /*! Header for the page with bibliographic citations */
- virtual QCString trCiteReferences()
- { return "Literaturverzeichnis"; }
-
- /*! Text for copyright paragraph */
- virtual QCString trCopyright()
- { return "Copyright"; }
-
- /*! Header for the graph showing the directory dependencies */
- virtual QCString trDirDepGraph(const char *name)
- { return QCString("Diagramm der Verzeichnisabhängigkeiten für ")+name+":"; }
-
-};
-
-#endif
diff --git a/trunk/src/translator_dk.h b/trunk/src/translator_dk.h
deleted file mode 100644
index 71beda7..0000000
--- a/trunk/src/translator_dk.h
+++ /dev/null
@@ -1,1834 +0,0 @@
-/*-*- c-basic-offset: 2; tab-width: 8 -*-*/
-/******************************************************************************
- *
- *
- *
- * Copyright (C) 1997-2012 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.
- *
- */
- /*! @file
- * @brief ´Danish translation
- */
-
-/*
- * Danish translation by
- * Erik Søe Sørensen <eriksoe@daimi.au.dk>
- *
- * First version (not complete) for Doxygen 1.2.7
- * Extended and revised for Doxygen 1.3
- * Extended and revised for Doxygen 1.3.4
- * Extended and revised for Doxygen 1.3.8
- */
-
-/* Translator's notes:
-
- Oversættelseskonventioner:
- (Konventioner for konventioner:
- '?' angiver oversættelser, jeg har været i tvivl om
- '??' angiver tvivlsomme oversættelser
- '..?' angiver ord, der endnu ikke er fundet en oversættelse til
- '(do.)' angiver ord, der med vilje ikke er oversat, idet jeg selv
- overvejende bruger det engelske udtryk
- '(-> _)' angiver ord, der er fundet en oversættelse til, men som jeg
- vægrer mig ved at oversætte.
- 'KLID:_' angiver ord, hvor jeg med overlæg har rettet mig efter
- KLID.dk's oversættelsesguide (enig eller ej).
- )
- bug -> 'kendt fejl'
- class -> klasse
- compound -> 'sammensat type'
- constructor -> konstruktør ?
- destructor -> destruktør ?
- directory -> KLID:katalog (kunne også være 'bibliotek','mappe','folder')
- event -> begivenhed ?
- exception (-> undtagelse ?)
- friend ..?
- interface -> grænseflade ?
- member -> medlem (TODO)
- namespace -> (do.)
- overloaded -> KLID:overdefineret
- private -> privat
- property -> egenskab?
- protected -> beskyttet ??
- public -> offentlig
- reference(vb) -> "indeholde referencer til" (?)
- slot ..?
- source code -> kildekode
- struct -> datastruktur
- template (-> skabelon ?)
- typedef -> typedefinition (?)
- todo -> (do.)
- union ..?
-
- Specielle forbindelser:
- 'Inheritance diagram' -> Stamtræ (selvom Nedarvningsdiagram også gik an)
-
-
- -----
-
- (Konstruktivt) input modtages med glæde!
- -- Erik Søe Sørensen <eriksoe@daimi.au.dk>
-
-
- links -> (links.)
- -- Poul-Erik Hansen
-
- */
-
-#ifndef TRANSLATOR_DK_H
-#define TRANSLATOR_DK_H
-
-class TranslatorDanish : public Translator
-{
- public:
-
- // --- Language control methods -------------------
-
- /*! Used for identification of the language. The identification
- * should not be translated. It should be replaced by the name
- * of the language in English using lower-case characters only
- * (e.g. "czech", "japanese", "russian", etc.). It should be equal to
- * the identification used in language.cpp.
- */
- virtual QCString idLanguage()
- { return "danish"; }
-
- /*! Used to get the LaTeX command(s) for the language support.
- * This method should return string with commands that switch
- * LaTeX to the desired language. For example
- * <pre>"\\usepackage[german]{babel}\n"
- * </pre>
- * or
- * <pre>"\\usepackage{polski}\n"
- * "\\usepackage[latin2]{inputenc}\n"
- * "\\usepackage[T1]{fontenc}\n"
- * </pre>
- */
- virtual QCString latexLanguageSupportCommand()
- {
- return
- "\\usepackage[danish]{babel}\n"
- "\\usepackage[T1]{fontenc}\n";
- }
-
- /*! return the language charset. This will be used for the HTML output */
- virtual QCString idLanguageCharset()
- {
- return "iso-8859-1";
- }
-
- // --- Language translation methods -------------------
-
- /*! used in the compound documentation before a list of related functions. */
- virtual QCString trRelatedFunctions()
- { return "Relaterede funktioner"; }
-
- /*! subscript for the related functions. */
- virtual QCString trRelatedSubscript()
- { return "(Bemærk at disse ikke er medlems-funktioner.)"; }
-
- /*! header that is put before the detailed description of files,
- * classes and namespaces. */
- virtual QCString trDetailedDescription()
- { return "Detaljeret beskrivelse"; }
-
- /*! header that is put before the list of typedefs. */
- virtual QCString trMemberTypedefDocumentation()
- { return "Dokumentation af medlems-typedefinitioner"; }
-
- /*! header that is put before the list of enumerations. */
- virtual QCString trMemberEnumerationDocumentation()
- { return "Dokumentation af medlems-enumerationer"; }
- // medlems-enumerationer -> 'indeholdte enumerationer'
-
- /*! header that is put before the list of member functions. */
- virtual QCString trMemberFunctionDocumentation()
- { return "Dokumentation af medlemsfunktioner"; }
-
- /*! header that is put before the list of member attributes. */
- virtual QCString trMemberDataDocumentation()
- {
- if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) {
- return "Felt-dokumentation";
- } else {
- return "Dokumentation af feltvariable";
- }
- }
-
- /*! this is the text of a link put after brief descriptions. */
- virtual QCString trMore()
- { return "Mere..."; }
-
- /*! put in the class documentation */
- virtual QCString trListOfAllMembers()
- { return "Liste over alle medlemmer."; }
-
- /*! used as the title of the "list of all members" page of a class */
- virtual QCString trMemberList()
- { return "Liste over medlemmer"; }
-
- /*! this is the first part of a sentence that is followed by a class name */
- virtual QCString trThisIsTheListOfAllMembers()
- { return "Dette er den komplette liste over medlemmer i "; }
-
- /*! this is the remainder of the sentence after the class name */
- virtual QCString trIncludingInheritedMembers()
- { return ", inklusive alle nedarvede medlemmer."; }
-
- /*! this is put at the author sections at the bottom of man pages.
- * parameter s is name of the project name.
- */
- virtual QCString trGeneratedAutomatically(const char *s)
- { QCString result="Automatisk genereret af Doxygen";
- if (s) result+=(QCString)" for "+s;
- result+=" ud fra kildekoden.";
- return result;
- }
-
- /*! put after an enum name in the list of all members */
- virtual QCString trEnumName()
- { return "enumerationsnavn"; }
-
- /*! put after an enum value in the list of all members */
- virtual QCString trEnumValue()
- { return "enumerationsværdi"; }
-
- /*! put after an undocumented member in the list of all members */
- virtual QCString trDefinedIn()
- { return "defineret i"; }
-
- // quick reference sections
-
- /*! This is put above each page as a link to the list of all groups of
- * compounds or files (see the \\group command).
- */
- virtual QCString trModules()
- { return "Moduler"; }
-
- /*! This is put above each page as a link to the class hierarchy */
- virtual QCString trClassHierarchy()
- { return "Klassehierarki"; }
-
- /*! This is put above each page as a link to the list of annotated classes */
- virtual QCString trCompoundList()
- {
- if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) {
- return "Datastrukturer";
- } else {
- return "Oversigt over sammensatte typer";
- }
- }
-
- /*! This is put above each page as a link to the list of documented files */
- virtual QCString trFileList()
- { return "Filoversigt"; }
-
- /*! This is put above each page as a link to all members of compounds. */
- virtual QCString trCompoundMembers()
- {
- if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) {
- return "Data-felter";
- } else {
- return "Felter i sammensatte typer";
- }
- }
-
- /*! This is put above each page as a link to all members of files. */
- virtual QCString trFileMembers()
- {
- if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) {
- return "Globale symboler";
- } else {
- return "Placering i filer"; // Fil-medlemmer"; //TODO
- //"Globale definitioner" ?
- }
- }
-
- /*! This is put above each page as a link to all related pages. */
- virtual QCString trRelatedPages()
- { return "Relaterede sider"; }
-
- /*! This is put above each page as a link to all examples. */
- virtual QCString trExamples()
- { return "Eksempler"; }
-
- /*! This is put above each page as a link to the search engine. */
- virtual QCString trSearch()
- { return "Søg"; }
-
- /*! This is an introduction to the class hierarchy. */
- virtual QCString trClassHierarchyDescription()
- { return "Denne nedarvningsliste er sorteret næsten - "
- "men ikke nødvendigvis helt - alfabetisk:";
- }
-
- /*! This is an introduction to the list with all files. */
- virtual QCString trFileListDescription(bool extractAll)
- {
- QCString result="Her er en liste over alle ";
- if (!extractAll) result+="dokumenterede ";
- result+="filer med korte beskrivelser:";
- return result;
- }
-
- /*! This is an introduction to the annotated compound list. */
- virtual QCString trCompoundListDescription()
- {
-
- if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) {
- return "Her er datastrukturerne med korte beskrivelser:";
- } else {
- return "Her er klasserne, datastrukturerne, "
- "unionerne og grænsefladerne med korte beskrivelser:";
- }
- }
-
- /*! This is an introduction to the page with all class members. */
- virtual QCString trCompoundMembersDescription(bool extractAll)
- {
- QCString result="Her er en liste over alle ";
- if (!extractAll) {
- result+="dokumenterede ";
- }
- if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) {
- result+="felter i datastrukturer og unioner";
- } else {
- result+="klassemedlemmer";
- }
- result+=" med links til ";
- if (!extractAll) {
- if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) {
- result+="datastruktur/unions-dokumentationen for hvert felt:";
- } else {
- result+="klassedokumentationen for hvert medlem:";
- }
- } else {
- if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) {
- result+="de datastrukturer/unioner, de hører til:";
- } else {
- result+="de klasser, de hører til:";
- }
- }
- return result;
- }
-
- /*! This is an introduction to the page with all file members. */
- virtual QCString trFileMembersDescription(bool extractAll)
- {
- QCString result="Her er en liste over alle ";
- if (!extractAll) result+="dokumenterede ";
-
- if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) {
- result+="funktioner, variable, #defines, enumerationer "
- "og typedefinitioner";
- } else {
- result+="fil-medlemmer";
- }
- result+=", med links til ";
- if (extractAll)
- result+="de filer, de tilhører:";
- else
- result+="deres dokumentation:";
- return result;
- }
-
- /*! This is an introduction to the page with the list of all examples */
- virtual QCString trExamplesDescription()
- { return "Her er en liste over alle eksempler:"; }
-
- /*! This is an introduction to the page with the list of related pages */
- virtual QCString trRelatedPagesDescription()
- { return "Her er en liste over alle relaterede dokumentationssider:"; }
-
- /*! This is an introduction to the page with the list of class/file groups */
- virtual QCString trModulesDescription()
- { return "Her er en liste over alle moduler:"; }
-
- /*! This is used in HTML as the title of index.html. */
- virtual QCString trDocumentation()
- { return "Dokumentation"; }
-
- /*! This is used in LaTeX as the title of the chapter with the
- * index of all groups.
- */
- virtual QCString trModuleIndex()
- { return "Modul-indeks"; }
-
- /*! This is used in LaTeX as the title of the chapter with the
- * class hierarchy.
- */
- virtual QCString trHierarchicalIndex()
- { return "Hierarkisk indeks"; }
-
- /*! This is used in LaTeX as the title of the chapter with the
- * annotated compound index.
- */
- virtual QCString trCompoundIndex()
- {
- if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) {
- return "Indeks over datastrukturer";
- } else {
- return "Indeks over sammensatte typer";
- }
- }
-
- /*! This is used in LaTeX as the title of the chapter with the
- * list of all files.
- */
- virtual QCString trFileIndex()
- { return "Fil-indeks"; }
-
- /*! This is used in LaTeX as the title of the chapter containing
- * the documentation of all groups.
- */
- virtual QCString trModuleDocumentation()
- { return "Modul-dokumentation"; }
-
- /*! This is used in LaTeX as the title of the chapter containing
- * the documentation of all classes, structs and unions.
- */
- virtual QCString trClassDocumentation()
- {
- if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) {
- return "Datastruktur-documentation";
- } else {
- return "Klasse-dokumentation";
- }
- }
-
- /*! This is used in LaTeX as the title of the chapter containing
- * the documentation of all files.
- */
- virtual QCString trFileDocumentation()
- { return "Fil-dokumentation"; }
-
- /*! This is used in LaTeX as the title of the chapter containing
- * the documentation of all examples.
- */
- virtual QCString trExampleDocumentation()
- { return "Eksempel-dokumentation"; }
-
- /*! This is used in LaTeX as the title of the chapter containing
- * the documentation of all related pages.
- */
- virtual QCString trPageDocumentation()
- { return "Side-dokumentation"; }
-
- /*! This is used in LaTeX as the title of the document */
- virtual QCString trReferenceManual()
- { return "Referencemanual"; }
-
- /*! This is used in the documentation of a file as a header before the
- * list of defines
- */
- virtual QCString trDefines()
- { return "#Defines"; }
-
- /*! This is used in the documentation of a file as a header before the
- * list of function prototypes
- */
- virtual QCString trFuncProtos()
- { return "Funktionsprototyper"; }
-
- /*! This is used in the documentation of a file as a header before the
- * list of typedefs
- */
- virtual QCString trTypedefs()
- { return "Typedefinitioner"; }
-
- /*! This is used in the documentation of a file as a header before the
- * list of enumerations
- */
- virtual QCString trEnumerations()
- { return "Enumerationer"; }
-
- /*! This is used in the documentation of a file as a header before the
- * list of (global) functions
- */
- virtual QCString trFunctions()
- { return "Funktioner"; }
-
- /*! This is used in the documentation of a file as a header before the
- * list of (global) variables
- */
- virtual QCString trVariables()
- { return "Variable"; }
-
- /*! This is used in the documentation of a file as a header before the
- * list of (global) variables
- */
- virtual QCString trEnumerationValues()
- { return "Enumerationsværdier"; }
-
- /*! This is used in the documentation of a file before the list of
- * documentation blocks for defines
- */
- virtual QCString trDefineDocumentation()
- { return "#Define-dokumentation"; }
-
- /*! This is used in the documentation of a file/namespace before the list
- * of documentation blocks for function prototypes
- */
- virtual QCString trFunctionPrototypeDocumentation()
- { return "Dokumentation af funktionsprototyper"; }
-
- /*! This is used in the documentation of a file/namespace before the list
- * of documentation blocks for typedefs
- */
- virtual QCString trTypedefDocumentation()
- { return "Dokumentation af typedefinitioner"; }
-
- /*! This is used in the documentation of a file/namespace before the list
- * of documentation blocks for enumeration types
- */
- virtual QCString trEnumerationTypeDocumentation()
- { return "Dokumentation af enumerations-typer"; }
-
- /*! This is used in the documentation of a file/namespace before the list
- * of documentation blocks for enumeration values
- */
- virtual QCString trEnumerationValueDocumentation()
- { return "Dokumentation af enumerations-værdier"; }
-
- /*! This is used in the documentation of a file/namespace before the list
- * of documentation blocks for functions
- */
- virtual QCString trFunctionDocumentation()
- { return "Funktions-dokumentation"; }
-
- /*! This is used in the documentation of a file/namespace before the list
- * of documentation blocks for variables
- */
- virtual QCString trVariableDocumentation()
- { return "Variabel-dokumentation"; }
-
- /*! This is used in the documentation of a file/namespace/group before
- * the list of links to documented compounds
- */
- virtual QCString trCompounds()
- {
- if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) {
- return "Datastrukturer";
- } else {
- return "Sammensatte typer";
- }
- }
-
- /*! This is used in the standard footer of each page and indicates when
- * the page was generated
- */
- virtual QCString trGeneratedAt(const char *date,const char *projName)
- {
- QCString result=(QCString)"Genereret "+date;
- if (projName) result+=(QCString)" for "+projName;
- result+=(QCString)" af";
- return result;
- }
- /*! This is part of the sentence used in the standard footer of each page.
- */
- virtual QCString trWrittenBy()
- { return "skrevet af"; }
-
- /*! this text is put before a class diagram */
- virtual QCString trClassDiagram(const char *clName)
- {
- return (QCString)"Stamtræ for "+clName+":";
- }
-
- /*! this text is generated when the \\internal command is used. */
- virtual QCString trForInternalUseOnly()
- { return "Kun til intern brug."; }
-
- /*! this text is generated when the \\warning command is used. */
- virtual QCString trWarning()
- { return "Advarsel"; }
-
- /*! this text is generated when the \\version command is used. */
- virtual QCString trVersion()
- { return "Version"; }
-
- /*! this text is generated when the \\date command is used. */
- virtual QCString trDate()
- { return "Dato"; }
-
- /*! this text is generated when the \\return command is used. */
- virtual QCString trReturns()
- { return "Returnerer"; }
-
- /*! this text is generated when the \\sa command is used. */
- virtual QCString trSeeAlso()
- { return "Se også"; }
-
- /*! this text is generated when the \\param command is used. */
- virtual QCString trParameters()
- { return "Parametre"; }
-
- /*! this text is generated when the \\exception command is used. */
- virtual QCString trExceptions()
- { return "Undtagelser"; } // "Exceptions"
-
- /*! this text is used in the title page of a LaTeX document. */
- virtual QCString trGeneratedBy()
- { return "Genereret af"; }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 0.49-990307
-//////////////////////////////////////////////////////////////////////////
-
- /*! used as the title of page containing all the index of all namespaces. */
- virtual QCString trNamespaceList()
- { return "Oversigt over namespaces"; }
-
- /*! used as an introduction to the namespace list */
- virtual QCString trNamespaceListDescription(bool extractAll)
- {
- QCString result="Her er en liste over alle ";
- if (!extractAll) result+="dokumenterede ";
- result+="namespaces med korte beskrivelser:";
- return result;
- }
-
- /*! used in the class documentation as a header before the list of all
- * friends of a class
- */
- virtual QCString trFriends()
- { return "Friends"; }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 0.49-990405
-//////////////////////////////////////////////////////////////////////////
-
- /*! used in the class documentation as a header before the list of all
- * related classes
- */
- virtual QCString trRelatedFunctionDocumentation()
- { return "Dokumentation af friends og af relaterede funktioner"; }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 0.49-990425
-//////////////////////////////////////////////////////////////////////////
-
- /*! used as the title of the HTML page of a class/struct/union */
- virtual QCString trCompoundReference(const char *clName,
- ClassDef::CompoundType compType,
- bool isTemplate)
- {
- QCString result=(QCString)clName+" ";
- switch(compType)
- {
- case ClassDef::Class: result+=" Klasse-"; break;
- case ClassDef::Struct: result+=" Datastruktur-"; break;
- case ClassDef::Union: result+=" Union-"; break;
- case ClassDef::Interface: result+=" Grænseflade-"; break;
- case ClassDef::Protocol: result+=" Protokol-"; break;
- case ClassDef::Category: result+=" Kategori-"; break; // " Category-"
- case ClassDef::Exception: result+=" Undtagelse-"; break; // " Exception"
- }
- if (isTemplate) result+="skabelon-"; // "template-"
- result+="reference";
- return result;
- }
-
- /*! used as the title of the HTML page of a file */
- virtual QCString trFileReference(const char *fileName)
- {
- QCString result=fileName;
- result+=" filreference";
- return result;
- }
-
- /*! used as the title of the HTML page of a namespace */
- virtual QCString trNamespaceReference(const char *namespaceName)
- {
- QCString result=namespaceName;
- result+=" namespace-reference";
- return result;
- }
-
- virtual QCString trPublicMembers()
- { return "Offentlige metoder"; }
- virtual QCString trPublicSlots()
- { return "Offentlige slots"; }
- virtual QCString trSignals()
- { return "Signaler"; }
- virtual QCString trStaticPublicMembers()
- { return "Statiske, offentlige metoder"; }
- virtual QCString trProtectedMembers()
- { return "Beskyttede metoder"; }
- virtual QCString trProtectedSlots()
- { return "Beskyttede slots"; }
- virtual QCString trStaticProtectedMembers()
- { return "Statiske, beskyttede metoder"; }
- virtual QCString trPrivateMembers()
- { return "Private metoder"; }
- virtual QCString trPrivateSlots()
- { return "Private slots"; }
- virtual QCString trStaticPrivateMembers()
- { return "Statiske, private metoder"; }
-
- /*! this function is used to produce a comma-separated list of items.
- * use generateMarker(i) to indicate where item i should be put.
- */
- virtual QCString trWriteList(int numEntries)
- {
- QCString result;
- int i;
- // the inherits list contain `numEntries' classes
- for (i=0;i<numEntries;i++) {
- // use generateMarker to generate placeholders for the class links!
- result+=generateMarker(i); // generate marker for entry i in the list
- // (order is left to right)
-
- if (i!=numEntries-1) { // not the last entry, so we need a separator
- if (i<numEntries-2) // not the fore last entry
- result+=", ";
- else // the fore last entry
- result+=" og ";
- }
- }
- return result;
- }
-
- /*! used in class documentation to produce a list of base classes,
- * if class diagrams are disabled.
- */
- virtual QCString trInheritsList(int numEntries)
- {
- return "Nedarver "+trWriteList(numEntries)+".";
- }
-
- /*! used in class documentation to produce a list of super classes,
- * if class diagrams are disabled.
- */
- virtual QCString trInheritedByList(int numEntries)
- {
- return "Nedarvet af "+trWriteList(numEntries)+".";
- }
-
- /*! used in member documentation blocks to produce a list of
- * members that are hidden by this one.
- */
- virtual QCString trReimplementedFromList(int numEntries)
- {
- return "Overskriver metode fra "+trWriteList(numEntries)+".";
- }
-
- /*! used in member documentation blocks to produce a list of
- * all member that overwrite the implementation of this member.
- */
- virtual QCString trReimplementedInList(int numEntries)
- {
- return "Reimplementeret i "+trWriteList(numEntries)+".";
- }
-
- /*! This is put above each page as a link to all members of namespaces. */
- virtual QCString trNamespaceMembers()
- { return "Namespace-medlemmer"; }
-
- /*! This is an introduction to the page with all namespace members */
- virtual QCString trNamespaceMemberDescription(bool extractAll)
- {
- QCString result="Her er en liste over alle ";
- if (!extractAll) result+="dokumenterede ";
- result+="namespace-medlemmer med links til ";
- if (extractAll)
- result+="namespace-dokumentationen for hvert medlem:";
- else
- result+="det namespace, de hører til:";
- return result;
- }
- /*! This is used in LaTeX as the title of the chapter with the
- * index of all namespaces.
- */
- virtual QCString trNamespaceIndex()
- { return "Namespace-indeks"; }
-
- /*! This is used in LaTeX as the title of the chapter containing
- * the documentation of all namespaces.
- */
- virtual QCString trNamespaceDocumentation()
- { return "Namespace-dokumentation"; }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 0.49-990522
-//////////////////////////////////////////////////////////////////////////
-
- /*! This is used in the documentation before the list of all
- * namespaces in a file.
- */
- virtual QCString trNamespaces()
- { return "Namespaces"; }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 0.49-990728
-//////////////////////////////////////////////////////////////////////////
-
- /*! This is put at the bottom of a class documentation page and is
- * followed by a list of files that were used to generate the page.
- */
- virtual QCString trGeneratedFromFiles(ClassDef::CompoundType compType,
- bool single)
- { // here s is one of " Class", " Struct" or " Union"
- // single is true implies a single file
- QCString result=(QCString)"Dokumentationen for denne ";
- switch(compType)
- {
- case ClassDef::Class: result+="klasse"; break;
- case ClassDef::Struct: result+="datastruktur"; break;
- case ClassDef::Union: result+="union"; break;
- case ClassDef::Interface: result+="grænseflade"; break;
- case ClassDef::Protocol: result+="protokol"; break; // "protocol"
- case ClassDef::Category: result+="kategori"; break; // "category"
- case ClassDef::Exception: result+="undtagelse"; break; // "exception"
- }
- result+=" blev genereret ud fra fil";
- if (single) result+="en:"; else result+="erne:";
- return result;
- }
-
- /*! This is in the (quick) index as a link to the alphabetical compound
- * list.
- */
- virtual QCString trAlphabeticalList()
- { return "Alfabetisk oversigt"; }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 0.49-990901
-//////////////////////////////////////////////////////////////////////////
-
- /*! This is used as the heading text for the retval command. */
- virtual QCString trReturnValues()
- { return "Returværdier"; }
-
- /*! This is in the (quick) index as a link to the main page (index.html)
- */
- virtual QCString trMainPage()
- { return "Hovedside"; }
-
- /*! This is used in references to page that are put in the LaTeX
- * documentation. It should be an abbreviation of the word page.
- */
- virtual QCString trPageAbbreviation()
- { return "s."; }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 0.49-991003
-//////////////////////////////////////////////////////////////////////////
-
- virtual QCString trDefinedAtLineInSourceFile()
- {
- return "Defineret på linje @0 i filen @1.";
- }
-
- virtual QCString trDefinedInSourceFile()
- {
- return "Defineret i filen @0.";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 0.49-991205
-//////////////////////////////////////////////////////////////////////////
-
- virtual QCString trDeprecated()
- {
- return "Frarådes - fortidslevn"; // ?? - What is the context?
- // "Ugleset" :)
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.0.0
-//////////////////////////////////////////////////////////////////////////
-
- /*! this text is put before a collaboration diagram */
- virtual QCString trCollaborationDiagram(const char *clName)
- {
- return (QCString)"Samarbejdsdiagram for "+clName+":";
- }
- /*! this text is put before an include dependency graph */
- virtual QCString trInclDepGraph(const char *fName)
- {
- return (QCString)"Inklusions-afhængighedsgraf for "+fName+":";
- }
- /*! header that is put before the list of constructor/destructors. */
- virtual QCString trConstructorDocumentation()
- {
- return "Dokumentation af konstruktører og destruktører";
- // "Constructor & Destructor dokumentation";
- }
-
- /*! Used in the file documentation to point to the corresponding sources. */
- virtual QCString trGotoSourceCode()
- { return "Hop til denne fils kildekode."; }
- /*! Used in the file sources to point to the corresponding documentation. */
- virtual QCString trGotoDocumentation()
- { return "Hop til denne fils dokumentation."; }
-
- /*! Text for the \\pre command */
- virtual QCString trPrecondition()
- { return "Forudsætninger (precondition)"; }
- /*! Text for the \\post command */
- virtual QCString trPostcondition()
- { return "Resultat (postcondition)"; }
- /*! Text for the \\invariant command */
- virtual QCString trInvariant()
- { return "Invariant"; }
-
- /*! Text shown before a multi-line variable/enum initialization */
- virtual QCString trInitialValue()
- { return "Startværdi:"; }
-
- /*! Text used the source code in the file index */
- virtual QCString trCode()
- { return "kildekode"; }
- virtual QCString trGraphicalHierarchy()
- { return "Grafisk klassehierarki"; }
- virtual QCString trGotoGraphicalHierarchy()
- { return "Hop til det grafiske klassehierarki"; }
- virtual QCString trGotoTextualHierarchy()
- { return "Hop til det tekstuelle klassehierarki"; }
- virtual QCString trPageIndex()
- { return "Sideindeks"; }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.1.0
-//////////////////////////////////////////////////////////////////////////
-
- virtual QCString trNote()
- { return "Note"; }
- virtual QCString trPublicTypes()
- { return "Offentlige typer"; }
-
- virtual QCString trPublicAttribs()
- {
- if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) {
- return "Datafelter";
- } else {
- return "Offentlige attributter";
- }
- }
-
- virtual QCString trStaticPublicAttribs()
- { return "Statiske, offentlige attributter"; }
- virtual QCString trProtectedTypes()
- { return "Beskyttede typer"; }
- virtual QCString trProtectedAttribs()
- { return "Beskyttede attributter"; }
- virtual QCString trStaticProtectedAttribs()
- { return "Statiske, beskyttede attributter"; }
- virtual QCString trPrivateTypes()
- { return "Private typer"; }
- virtual QCString trPrivateAttribs()
- { return "Private attributter"; }
- virtual QCString trStaticPrivateAttribs()
- { return "Statiske, private attributter"; }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.1.3
-//////////////////////////////////////////////////////////////////////////
-
- /*! Used as a marker that is put before a \\todo item */
- virtual QCString trTodo()
- {
- return "Todo";
- }
- /*! Used as the header of the todo list */
- virtual QCString trTodoList()
- {
- return "Todo-liste";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.1.4
-//////////////////////////////////////////////////////////////////////////
-
- virtual QCString trReferencedBy()
- {
- return "Refereret til af";
- }
- virtual QCString trRemarks()
- {
- return "Bemærkninger";
- }
- virtual QCString trAttention()
- {
- return "OBS";
- }
- virtual QCString trInclByDepGraph()
- {
- return
- "Denne graf viser, hvilke filer der direkte eller "
- "indirekte inkluderer denne fil:";
- }
- virtual QCString trSince()
- {
- return "Siden";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.1.5
-//////////////////////////////////////////////////////////////////////////
-
- /*! title of the graph legend page */
- virtual QCString trLegendTitle()
- {
- return "Graf-forklaring";
- }
- /*! page explaining how the dot graph's should be interpreted */
- virtual QCString trLegendDocs() //TODO
- {
- return
- "Denne side forklarer, hvordan man skal fortolke de grafer, "
- "der genereres af doxygen.<p>\n"
- "Tag følgende eksempel:\n"
- "\\code\n"
- "/*! Klasse der er usynlig pg.a. beskæring */\n"
- "class Invisible { };\n\n"
- "/*! Beskåret klasse: nedarvningsrelation er skjult */\n"
- "class Truncated : public Invisible { };\n\n"
- "/* Klasse der ikke er dokumenteret med doxygen-kommentarer */\n"
- "class Undocumented { };\n\n"
- "/*! Klasse der nedarves fra offentligt */\n"
- "class PublicBase : public Truncated { };\n\n"
- "/*! En template-klasse */\n"
- "template<class T> class Templ { };\n\n"
- "/*! Klasse der nedarves fra beskyttet */\n"
- "class ProtectedBase { };\n\n"
- "/*! Klasse der nedarves fra privat */\n"
- "class PrivateBase { };\n\n"
- "/*! Klasse der bruges af Inherited-klassen */\n"
- "class Used { };\n\n"
- "/*! Klasse der nedarver en masse andre klasser */\n"
- "class Inherited : public PublicBase,\n"
- " protected ProtectedBase,\n"
- " private PrivateBase,\n"
- " public Undocumented,\n"
- " public Templ<int>\n"
- "{\n"
- " private:\n"
- " Used *m_usedClass;\n"
- "};\n"
- "\\endcode\n"
- "Hvis \\c MAX_DOT_GRAPH_HEIGHT i konfigurationsfilen "
- "er sat til 240, vil dette resultere i følgende graf:"
- "<p><center><img src=\"graph_legend."+Config_getEnum("DOT_IMAGE_FORMAT")+"\"></center>\n"
- "<p>\n"
- "De forskellige slags kasser i ovenstående graf har følgende "
- "betydninger:\n"
- "<ul>\n"
- "<li>%En udfyldt sort kasse repræsenterer den datastruktur eller "
- "klasse, grafen er genereret for.\n"
- "<li>%En kasse med sort kant betegner en dokumenteret datastruktur "
- " eller klasse.\n"
- "<li>%En kasse med grå kant betegner en udokumenteret datastruktur "
- " eller klasse.\n"
- "<li>%En kasse med rød kant betegner en dokumenteret datastruktur "
- " eller klasse, for hvilken ikke alle "
- "nedarvnings- og indeholdelses-relationer er vist. "
- "%Grafer beskæres, hvis de fylder mere end de specificerede dimensioner.\n "
- "</ul>\n"
- "Pilene har følgende betydninger:\n"
- "<ul>\n"
- "<li>%En mørkeblå pil viser en offentlig nedarvningsrelation "
- "mellem to klasser.\n"
- "<li>%En mørkegrøn pil viser en beskyttet nedarvningsrelation.\n"
- "<li>%En mørkerød pil viser en privat nedarvningsrelation.\n"
- "<li>%En lilla, stiplet pil bruges, når en klasse er indeholdt i "
- "eller benyttes af en anden klasse. "
- "Ved pilen står navnet på den eller de variable, gennem hvilke(n) "
- "den klasse, pilen peger på, er tilgængelig.\n"
- "<li>%En gul, stiplet pil viser forholdet mellem en template-instans "
- "og den template-klasse, den er instantieret fra."
- "Ved pilen står template-parametrene brugt ved instantieringen.\n"
- "</ul>\n";
- }
- /*! text for the link to the legend page */
- virtual QCString trLegend()
- {
- return "forklaring til graf";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.2.0
-//////////////////////////////////////////////////////////////////////////
-
- /*! Used as a marker that is put before a test item */
- virtual QCString trTest()
- {
- return "Test";
- }
- /*! Used as the header of the test list */
- virtual QCString trTestList()
- {
- return "Testliste";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.2.1
-//////////////////////////////////////////////////////////////////////////
-
- /*! Used as a section header for KDE-2 IDL methods */
- virtual QCString trDCOPMethods()
- {
- return "DCOP-metoder";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.2.2
-//////////////////////////////////////////////////////////////////////////
-
- /*! Used as a section header for IDL properties */
- virtual QCString trProperties()
- {
- return "Egenskaber";
- }
- /*! Used as a section header for IDL property documentation */
- virtual QCString trPropertyDocumentation()
- {
- return "Egenskabsdokumentation";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.2.4
-//////////////////////////////////////////////////////////////////////////
-
- /*! Used for Java classes in the summary section of Java packages */
- virtual QCString trClasses()
- {
- if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) {
- return "Datastrukturer";
- } else {
- return "Klasser";
- }
- }
- /*! Used as the title of a Java package */
- virtual QCString trPackage(const char *name)
- {
- return (QCString)"Pakke "+name;
- }
- /*! Title of the package index page */
- virtual QCString trPackageList()
- {
- return "Pakkeoversigt";
- }
- /*! The description of the package index page */
- virtual QCString trPackageListDescription()
- {
- return
- "Her er en liste over pakkerne, med korte beskrivelser "
- "(hvor en sådan findes):";
- }
- /*! The link name in the Quick links header for each page */
- virtual QCString trPackages()
- {
- return "Pakker";
- }
- /*! Text shown before a multi-line define */
- virtual QCString trDefineValue()
- {
- return "Værdi:";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.2.5
-//////////////////////////////////////////////////////////////////////////
-
- /*! Used as a marker that is put before a \\bug item */
- virtual QCString trBug()
- {
- return "Kendte fejl";
- }
- /*! Used as the header of the bug list */
- virtual QCString trBugList()
- {
- return "Liste over kendte fejl";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.2.6
-//////////////////////////////////////////////////////////////////////////
-
- /*! Used as ansicpg for RTF file
- * (used table extract:)
- * <pre>
- * Charset Name Charset Value(hex) Codepage number
- * ------------------------------------------------------
- * ANSI_CHARSET 0 (x00) 1252
- * </pre>
- */
- virtual QCString trRTFansicp()
- {
- return "1252";
- }
-
- /*! Used as ansicpg for RTF fcharset */
- virtual QCString trRTFCharSet()
- {
- return "0";
- }
-
- /*! Used as header RTF general index */
- virtual QCString trRTFGeneralIndex()
- {
- return "Indeks";
- }
-
- /*! This is used for translation of the word that will possibly
- * be followed by a single name or by a list of names
- * of the category.
- */
- virtual QCString trClass(bool first_capital, bool singular)
- {
- return createNoun(first_capital, singular, "klasse", "r");
- }
-
- /*! This is used for translation of the word that will possibly
- * be followed by a single name or by a list of names
- * of the category.
- */
- virtual QCString trFile(bool first_capital, bool singular)
- {
- return createNoun(first_capital, singular, "fil", "er");
- }
-
- /*! This is used for translation of the word that will possibly
- * be followed by a single name or by a list of names
- * of the category.
- */
- virtual QCString trNamespace(bool first_capital, bool singular)
- {
- return createNoun(first_capital, singular, "namespace", "s");
- }
-
- /*! This is used for translation of the word that will possibly
- * be followed by a single name or by a list of names
- * of the category.
- */
- virtual QCString trGroup(bool first_capital, bool singular)
- {
- return createNoun(first_capital, singular, "gruppe", "r");
- }
-
- /*! This is used for translation of the word that will possibly
- * be followed by a single name or by a list of names
- * of the category.
- */
- virtual QCString trPage(bool first_capital, bool singular)
- {
- return createNoun(first_capital, singular, "side", "r");
- }
-
- /*! This is used for translation of the word that will possibly
- * be followed by a single name or by a list of names
- * of the category.
- */
- virtual QCString trMember(bool first_capital, bool singular)
- {
- return createNoun(first_capital, singular, "medlem", "mer");
- }
-
- /*! This is used for translation of the word that will possibly
- * be followed by a single name or by a list of names
- * of the category.
- */
- virtual QCString trGlobal(bool first_capital, bool singular)
- {
- return createNoun(first_capital, singular, "global", "e");
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.2.7
-//////////////////////////////////////////////////////////////////////////
-
- /*! This text is generated when the \\author command is used and
- * for the author section in man pages. */
- virtual QCString trAuthor(bool first_capital, bool singular)
- {
- return createNoun(first_capital, singular, "forfatter", "e");
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.2.11
-//////////////////////////////////////////////////////////////////////////
-
- /*! This text is put before the list of members referenced by a member
- */
- virtual QCString trReferences()
- {
- return "Indeholder referencer til";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.2.13
-//////////////////////////////////////////////////////////////////////////
-
- /*! used in member documentation blocks to produce a list of
- * members that are implemented by this one.
- */
- virtual QCString trImplementedFromList(int numEntries)
- {
- return "Implementerer "+trWriteList(numEntries)+".";
- }
-
- /*! used in member documentation blocks to produce a list of
- * all members that implement this abstract member.
- */
- virtual QCString trImplementedInList(int numEntries)
- {
- return "Implementeret i "+trWriteList(numEntries)+".";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.2.16
-//////////////////////////////////////////////////////////////////////////
-
- /*! used in RTF documentation as a heading for the Table
- * of Contents.
- */
- virtual QCString trRTFTableOfContents()
- {
- return "Indholdsfortegnelse";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.2.17
-//////////////////////////////////////////////////////////////////////////
-
- /*! Used as the header of the list of item that have been
- * flagged deprecated
- */
- virtual QCString trDeprecatedList()
- {
- return "Liste over fortidslevn, hvis brug frarådes";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.2.18
-//////////////////////////////////////////////////////////////////////////
-
- /*! Used as a header for declaration section of the events found in
- * a C# program
- */
- virtual QCString trEvents()
- {
- return "Begivenheder";
- }
- /*! Header used for the documentation section of a class' events. */
- virtual QCString trEventDocumentation()
- {
- return "Begivenhedsdokumentation";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.3
-//////////////////////////////////////////////////////////////////////////
-
- /* Java: Entities with package scope... */
- virtual QCString trPackageTypes()
- { return "Typer med pakke-scope"; }
- virtual QCString trPackageMembers()
- { return "Metoder med pakke-scope"; }
- virtual QCString trStaticPackageMembers()
- { return "Statiske metoder med pakke-scope"; }
- virtual QCString trPackageAttribs()
- { return "Attributter med pakke-scope"; }
- virtual QCString trStaticPackageAttribs()
- { return "Statiske attributter med pakke-scope"; }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.3.1
-//////////////////////////////////////////////////////////////////////////
-
- /*! Used in the quick index of a class/file/namespace member list page
- * to link to the unfiltered list of all members.
- */
- virtual QCString trAll()
- {
- return "Alle";
- }
-
- /*! Put in front of the call graph for a function. */
- virtual QCString trCallGraph()
- {
- return "Her er kald-grafen for denne funktion:";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.3.3
-//////////////////////////////////////////////////////////////////////////
-
- /*! When the search engine is enabled this text is put in the header
- * of each page before the field where one can enter the text to search
- * for.
- */
- virtual QCString trSearchForIndex()
- {
- return "Søg efter";
- }
-
- /*! This string is used as the title for the page listing the search
- * results.
- */
- virtual QCString trSearchResultsTitle()
- {
- return "Søgeresultater";
- }
-
- /*! This string is put just before listing the search results. The
- * text can be different depending on the number of documents found.
- * Inside the text you can put the special marker $num to insert
- * the number representing the actual number of search results.
- * The @a numDocuments parameter can be either 0, 1 or 2, where the
- * value 2 represents 2 or more matches. HTML markup is allowed inside
- * the returned string.
- */
- virtual QCString trSearchResults(int numDocuments)
- {
- if (numDocuments==0) {
- return "Beklager - ingen dokumenter passede til din forespørgsel.";
- } else if (numDocuments==1) {
- return "Fandt <b>1</b> dokument, der passer til din forespørgsel.";
- } else {
- return
- "Fandt <b>$num</b> dokumenter, der passer til din forespørgsel. "
- "De, der passer bedst, vises først.";
- }
- }
-
- /*! This string is put before the list of matched words, for each search
- * result. What follows is the list of words that matched the query.
- */
- virtual QCString trSearchMatches()
- {
- return "Fundne ord:"; //translation?
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.3.8
-//////////////////////////////////////////////////////////////////////////
-
- /*! This is used in HTML as the title of page with source code for
- * file filename
- */
- virtual QCString trSourceFile(QCString& filename)
- {
- return "Kildefilen " + filename;
- }
-
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.3.9
-//////////////////////////////////////////////////////////////////////////
-
- /*! This is used as the name of the chapter containing the directory
- * hierarchy.
- */
- virtual QCString trDirIndex()
- { return "Katalogstruktur"; }
-
- /*! This is used as the name of the chapter containing the documentation
- * of the directories.
- */
- virtual QCString trDirDocumentation()
- { return "Katalog-dokumentation"; }
-
- /*! This is used as the title of the directory index and also in the
- * Quick links of an HTML page, to link to the directory hierarchy.
- */
- virtual QCString trDirectories()
- { return "Kataloger"; }
-
- /*! This returns a sentences that introduces the directory hierarchy.
- * and the fact that it is sorted alphabetically per level
- */
- virtual QCString trDirDescription()
- { return "Denne katalogstruktur er sorteret næsten - "
- "men ikke nødvendigvis helt - alfabetisk:";
- }
-
- /*! This returns the title of a directory page. The name of the
- * directory is passed via \a dirName.
- */
- virtual QCString trDirReference(const char *dirName)
- { QCString result="Indhold af kataloget "; result+=dirName; return result;}
-
- /*! This returns the word directory with or without starting capital
- * (\a first_capital) and in sigular or plural form (\a singular).
- */
- virtual QCString trDir(bool first_capital, bool singular)
- {
- return createNoun(first_capital, singular, "katalog", "er");
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.4.1
-//////////////////////////////////////////////////////////////////////////
-
- /*! This text is added to the documentation when the \\overload command
- * is used for a overloaded function.
- */
- virtual QCString trOverloadText()
- {
- return "Dette er en overdefineret medlemsfunktion, "
- "defineret af bekvemmelighedshensyn. "
- "Den adskiller sig kun fra den ovenstående funktion i, "
- "hvilke argumenter den tager.";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.4.6
-//////////////////////////////////////////////////////////////////////////
-
- /*! This is used to introduce a caller (or called-by) graph */
- virtual QCString trCallerGraph()
- {
- return "Her er kalder-grafen for denne funktion:";
- }
-
- // None translated yet PEH 2010-11-27
- // Subroutine
-
- /*! header that is put before the list of member subprograms (Fortran). */
- virtual QCString trMemberFunctionDocumentationFortran()
- { return "Medlem Funktion/Subroutine Dokumentation"; } // "Member Function/Subroutine Documentation"
-
- /*! This is used in the documentation of a file/namespace before the list
- * of documentation blocks for enumeration values
- */
- /*
- virtual QCString trEnumerationValueDocumentation()
- { return "Enumerator-dokumentation"; } //TODO?
-*/
-
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.5.4 (mainly for Fortran)
-//////////////////////////////////////////////////////////////////////////
-
- /*! This is put above each page as a link to the list of annotated data types (Fortran). */
- virtual QCString trCompoundListFortran()
- { return "Data Type Liste"; } // "Data Types List"
-
- /*! This is put above each page as a link to all members of compounds (Fortran). */
- virtual QCString trCompoundMembersFortran()
- { return "Data felter"; } // "Data Fields"
-
- /*! This is an introduction to the annotated compound list (Fortran). */
- virtual QCString trCompoundListDescriptionFortran()
- { return "Her er de datatyper med kort beskrivelse:"; } // "Here are the data types with brief descriptions:"
-
- /*! This is an introduction to the page with all data types (Fortran). */
- virtual QCString trCompoundMembersDescriptionFortran(bool extractAll)
- {
- QCString result="Her er en liste af alle "; // "Here is a list of all "
- if (!extractAll)
- {
- result+="dokumenteret "; // "documented "
- }
- result+="datatype medlemmer"; // "data types members"
- result+=" med links til "; // " with links to "
- if (!extractAll)
- {
- result+="data strukturer dokumenteret for hver medlem"; // "the data structure documentation for each member"
- }
- else
- {
- result+="de datatyper som de tilhører:"; // "the data types they belong to:"
- }
- return result;
- }
-
- /*! This is used in LaTeX as the title of the chapter with the
- * annotated compound index (Fortran).
- */
- virtual QCString trCompoundIndexFortran()
- { return "Datatype indeks"; } // "Data Type Index"
-
- /*! This is used in LaTeX as the title of the chapter containing
- * the documentation of all data types (Fortran).
- */
- virtual QCString trTypeDocumentation()
- { return "Datatype dokumentation"; } // "Data Type Documentation"
-
- /*! This is used in the documentation of a file as a header before the
- * list of (global) subprograms (Fortran).
- */
- virtual QCString trSubprograms()
- { return "Funktioner/Subroutiner"; } // "Functions/Subroutines"
-
- /*! This is used in the documentation of a file/namespace before the list
- * of documentation blocks for subprograms (Fortran)
- */
- virtual QCString trSubprogramDocumentation()
- { return "Funktion/Subroutine dokumentation"; } // "Function/Subroutine Documentation"
-
- /*! This is used in the documentation of a file/namespace/group before
- * the list of links to documented compounds (Fortran)
- */
- virtual QCString trDataTypes()
- { return "Datatyper"; } // "Data Types"
-
- /*! used as the title of page containing all the index of all modules (Fortran). */
- virtual QCString trModulesList()
- { return "Modulliste"; } // "Modules List"
-
- /*! used as an introduction to the modules list (Fortran) */
- virtual QCString trModulesListDescription(bool extractAll)
- {
- QCString result="Her er en liste over alle "; // "Here is a list of all "
- if (!extractAll) result+="dokumenteret "; // "documented "
- result+="moduler med kort beskrivelse:"; // "modules with brief descriptions:"
- return result;
- }
-
- /*! used as the title of the HTML page of a module/type (Fortran) */
- virtual QCString trCompoundReferenceFortran(const char *clName,
- ClassDef::CompoundType compType,
- bool isTemplate)
- {
- QCString result=(QCString)clName;
- switch(compType)
- {
- case ClassDef::Class: result+=" Modul"; break; // " Module"
- case ClassDef::Struct: result+=" Type"; break; // " Type"
- case ClassDef::Union: result+=" Union"; break; // " Union"
- case ClassDef::Interface: result+=" Grænseflade"; break; // " Interface"
- case ClassDef::Protocol: result+=" Protocol"; break; // " Protocol"
- case ClassDef::Category: result+=" Kategori"; break; // " Category"
- case ClassDef::Exception: result+=" Undtagelse"; break; // " Exception"
- }
- if (isTemplate) result+=" Template";
- result+=" Reference";
- return result;
- }
-
- /*! used as the title of the HTML page of a module (Fortran) */
- virtual QCString trModuleReference(const char *namespaceName)
- {
- QCString result=namespaceName;
- result+=" Modulreference"; // " Module Reference"
- return result;
- }
-
- /*! This is put above each page as a link to all members of modules. (Fortran) */
- virtual QCString trModulesMembers()
- { return "Modulmedlemmer"; } // "Module Members"
-
- /*! This is an introduction to the page with all modules members (Fortran) */
- virtual QCString trModulesMemberDescription(bool extractAll)
- {
- QCString result="Her er en list over alle "; // "Here is a list of all "
- if (!extractAll) result+="Dokumentet "; // "documented "
- result+="modulmemlemmer med link til "; // "module members with links to "
- if (extractAll)
- {
- result+="dokumentation for hvert model medlem:"; // "the module documentation for each member:"
- }
- else
- {
- result+="moduler de tilhøre:"; // "the modules they belong to:"
- }
- return result;
- }
-
- /*! This is used in LaTeX as the title of the chapter with the
- * index of all modules (Fortran).
- */
- virtual QCString trModulesIndex()
- { return "Modulindekser"; } // "Modules Index"
-
- /*! This is used for translation of the word that will possibly
- * be followed by a single name or by a list of names
- * of the category.
- */
- virtual QCString trModule(bool first_capital, bool singular)
- {
- QCString result((first_capital ? "Modul" : "modul")); // "Module" : "module"));
- if (!singular) result+="er"; // "s";
- return result;
- }
-
- /*! This is put at the bottom of a module documentation page and is
- * followed by a list of files that were used to generate the page.
- */
- virtual QCString trGeneratedFromFilesFortran(ClassDef::CompoundType compType,
- bool single)
- {
- // single is true implies a single file
- QCString result=(QCString)"The documentation for this ";
- switch(compType)
- {
- case ClassDef::Class: result+="modul"; break; // "module"
- case ClassDef::Struct: result+="type"; break; // "type"
- case ClassDef::Union: result+="union"; break; // "union"
- case ClassDef::Interface: result+="grænseflade"; break; // "interface"
- case ClassDef::Protocol: result+="protokol"; break; // "protocol"
- case ClassDef::Category: result+="kategori"; break; // "category"
- case ClassDef::Exception: result+="undtagelse"; break; // "exception"
- }
- result+=" var lavet udfra følgende file"; // " was generated from the following file"
- if (single) result+=":"; else result+="r:"; // ":" / "s:"
- return result;
- }
-
- /*! This is used for translation of the word that will possibly
- * be followed by a single name or by a list of names
- * of the category.
- */
- virtual QCString trType(bool first_capital, bool singular)
- {
- QCString result((first_capital ? "Type" : "type")); // "Type" : "type"
- if (!singular) result+="r"; // "s"
- return result;
- }
-
- /*! This is used for translation of the word that will possibly
- * be followed by a single name or by a list of names
- * of the category.
- */
- virtual QCString trSubprogram(bool first_capital, bool singular)
- {
- QCString result((first_capital ? "Subprogram" : "subprogram")); // "Subprogram" : "subprogram"
- if (!singular) result+="er"; // "s"
- return result;
- }
-
- /*! C# Type Constraint list */
- virtual QCString trTypeConstraints()
- {
- return "typebegrænsninger"; // "Type Constraints"
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.6.0 (mainly for the new search engine)
-//////////////////////////////////////////////////////////////////////////
-
- /*! directory relation for \a name */
- virtual QCString trDirRelation(const char *name)
- {
- return QCString(name)+" Relation"; // " Relation"
- }
-
- /*! Loading message shown when loading search results */
- virtual QCString trLoading()
- {
- return "Indlæser..."; // "Loading..."
- }
-
- /*! Label used for search results in the global namespace */
- virtual QCString trGlobalNamespace()
- {
- return "Globalt Namespace"; // "Global Namespace"
- }
-
- /*! Message shown while searching */
- virtual QCString trSearching()
- {
- return "Søger..."; // "Searching..."
- }
-
- /*! Text shown when no search results are found */
- virtual QCString trNoMatches()
- {
- return "Ingen fund"; // "No Matches"
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.6.3 (missing items for the directory pages)
-//////////////////////////////////////////////////////////////////////////
-
- /*! introduction text for the directory dependency graph */
- virtual QCString trDirDependency(const char *name)
- {
- return (QCString)"Afhængighedsgraf for "+name; // "Directory dependency graph for "
- }
-
- /*! when clicking a directory dependency label, a page with a
- * table is shown. The heading for the first column mentions the
- * source file that has a relation to another file.
- */
- virtual QCString trFileIn(const char *name)
- {
- return (QCString)"File i "+name; // "File in "
- }
-
- /*! when clicking a directory dependency label, a page with a
- * table is shown. The heading for the second column mentions the
- * destination file that is included.
- */
- virtual QCString trIncludesFileIn(const char *name)
- {
- return (QCString)"Inkluderer file i "+name; // "Includes file in "
- }
-
- /** Compiles a date string.
- * @param year Year in 4 digits
- * @param month Month of the year: 1=January
- * @param day Day of the Month: 1..31
- * @param dayOfWeek Day of the week: 1=Monday..7=Sunday
- * @param hour Hour of the day: 0..23
- * @param minutes Minutes in the hour: 0..59
- * @param seconds Seconds within the minute: 0..59
- * @param includeTime Include time in the result string?
- */
- virtual QCString trDateTime(int year,int month,int day,int dayOfWeek,
- int hour,int minutes,int seconds,
- bool includeTime)
- {
- static const char *days[] = { "Man","Tir","Ons","Tor","Fre","Lør","Søn" }; // { "Mon","Tue","Wed","Thu","Fri","Sat","Sun" };
- static const char *months[] = { "Jan","Feb","Mar","Apr","Maj","Jun","Jul","Aug","Sep","Okt","Nov","Dec" }; // { "Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec" };
- QCString sdate;
- sdate.sprintf("%s %s %d %d",days[dayOfWeek-1],months[month-1],day,year);
- if (includeTime)
- {
- QCString stime;
- stime.sprintf(" %.2d:%.2d:%.2d",hour,minutes,seconds);
- sdate+=stime;
- }
- return sdate;
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.7.5
-//////////////////////////////////////////////////////////////////////////
-
- virtual QCString trCiteReferences()
- {
- return "Bibliografiske referencer";
- }
-
- virtual QCString trCopyright()
- {
- return "Copyright";
- }
-
- virtual QCString trDirDepGraph(const char *name)
- {
- return QCString("Afhængighedsgraf for katalog ")+name+":";
- }
-
-
-/*---------- For internal use: ----------------------------------------*/
- protected:
- /*! For easy flexible-noun implementation.
- * \internal
- */
- QCString createNoun(bool first_capital, bool singular,
- const char* base, const char* plurSuffix)
- {
- QCString result(base);
- if (first_capital) result.at(0) = toupper(result.at(0));
- if (!singular) result+=plurSuffix;
- return result;
- }
-};
-
-#endif
diff --git a/trunk/src/translator_en.h b/trunk/src/translator_en.h
deleted file mode 100644
index 0dfde48..0000000
--- a/trunk/src/translator_en.h
+++ /dev/null
@@ -1,1891 +0,0 @@
-/******************************************************************************
- *
- *
- *
- * Copyright (C) 1997-2012 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.
- *
- */
-
-#ifndef TRANSLATOR_EN_H
-#define TRANSLATOR_EN_H
-
-/*!
- When defining a translator class for the new language, follow
- the description in the documentation. One of the steps says
- that you should copy the translator_en.h (this) file to your
- translator_xx.h new file. Your new language should use the
- Translator class as the base class. This means that you need to
- implement exactly the same (pure virtual) methods as the
- TranslatorEnglish does. Because of this, it is a good idea to
- start with the copy of TranslatorEnglish and replace the strings
- one by one.
-
- It is not necessary to include "translator.h" or
- "translator_adapter.h" here. The files are included in the
- language.cpp correctly. Not including any of the mentioned
- files frees the maintainer from thinking about whether the
- first, the second, or both files should be included or not, and
- why. This holds namely for localized translators because their
- base class is changed occasionaly to adapter classes when the
- Translator class changes the interface, or back to the
- Translator class (by the local maintainer) when the localized
- translator is made up-to-date again.
-*/
-class TranslatorEnglish : public Translator
-{
- public:
-
- // --- Language control methods -------------------
-
- /*! Used for identification of the language. The identification
- * should not be translated. It should be replaced by the name
- * of the language in English using lower-case characters only
- * (e.g. "czech", "japanese", "russian", etc.). It should be equal to
- * the identification used in language.cpp.
- */
- virtual QCString idLanguage()
- { return "english"; }
-
- /*! Used to get the LaTeX command(s) for the language support.
- * This method should return string with commands that switch
- * LaTeX to the desired language. For example
- * <pre>"\\usepackage[german]{babel}\n"
- * </pre>
- * or
- * <pre>"\\usepackage{polski}\n"
- * "\\usepackage[latin2]{inputenc}\n"
- * "\\usepackage[T1]{fontenc}\n"
- * </pre>
- *
- * The English LaTeX does not use such commands. Because of this
- * the empty string is returned in this implementation.
- */
- virtual QCString latexLanguageSupportCommand()
- {
- return "";
- }
-
- /*! return the language charset. This will be used
- when transcoding the translatable strings in this file to UTF-8 */
- virtual QCString idLanguageCharset()
- {
- return "iso-8859-1";
- }
-
- // --- Language translation methods -------------------
-
- /*! used in the compound documentation before a list of related functions. */
- virtual QCString trRelatedFunctions()
- { return "Related Functions"; }
-
- /*! subscript for the related functions. */
- virtual QCString trRelatedSubscript()
- { return "(Note that these are not member functions.)"; }
-
- /*! header that is put before the detailed description of files, classes and namespaces. */
- virtual QCString trDetailedDescription()
- { return "Detailed Description"; }
-
- /*! header that is put before the list of typedefs. */
- virtual QCString trMemberTypedefDocumentation()
- { return "Member Typedef Documentation"; }
-
- /*! header that is put before the list of enumerations. */
- virtual QCString trMemberEnumerationDocumentation()
- { return "Member Enumeration Documentation"; }
-
- /*! header that is put before the list of member functions. */
- virtual QCString trMemberFunctionDocumentation()
- { return "Member Function Documentation"; }
-
- /*! header that is put before the list of member attributes. */
- virtual QCString trMemberDataDocumentation()
- {
- if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
- {
- return "Field Documentation";
- }
- else
- {
- return "Member Data Documentation";
- }
- }
-
- /*! this is the text of a link put after brief descriptions. */
- virtual QCString trMore()
- { return "More..."; }
-
- /*! put in the class documentation */
- virtual QCString trListOfAllMembers()
- { return "List of all members."; }
-
- /*! used as the title of the "list of all members" page of a class */
- virtual QCString trMemberList()
- { return "Member List"; }
-
- /*! this is the first part of a sentence that is followed by a class name */
- virtual QCString trThisIsTheListOfAllMembers()
- { return "This is the complete list of members for "; }
-
- /*! this is the remainder of the sentence after the class name */
- virtual QCString trIncludingInheritedMembers()
- { return ", including all inherited members."; }
-
- /*! this is put at the author sections at the bottom of man pages.
- * parameter s is name of the project name.
- */
- virtual QCString trGeneratedAutomatically(const char *s)
- { QCString result="Generated automatically by Doxygen";
- if (s) result+=(QCString)" for "+s;
- result+=" from the source code.";
- return result;
- }
-
- /*! put after an enum name in the list of all members */
- virtual QCString trEnumName()
- { return "enum name"; }
-
- /*! put after an enum value in the list of all members */
- virtual QCString trEnumValue()
- { return "enum value"; }
-
- /*! put after an undocumented member in the list of all members */
- virtual QCString trDefinedIn()
- { return "defined in"; }
-
- // quick reference sections
-
- /*! This is put above each page as a link to the list of all groups of
- * compounds or files (see the \\group command).
- */
- virtual QCString trModules()
- { return "Modules"; }
-
- /*! This is put above each page as a link to the class hierarchy */
- virtual QCString trClassHierarchy()
- { return "Class Hierarchy"; }
-
- /*! This is put above each page as a link to the list of annotated classes */
- virtual QCString trCompoundList()
- {
- if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
- {
- return "Data Structures";
- }
- else
- {
- return "Class List";
- }
- }
-
- /*! This is put above each page as a link to the list of documented files */
- virtual QCString trFileList()
- { return "File List"; }
-
- /*! This is put above each page as a link to all members of compounds. */
- virtual QCString trCompoundMembers()
- {
- if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
- {
- return "Data Fields";
- }
- else
- {
- return "Class Members";
- }
- }
-
- /*! This is put above each page as a link to all members of files. */
- virtual QCString trFileMembers()
- {
- if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
- {
- return "Globals";
- }
- else
- {
- return "File Members";
- }
- }
-
- /*! This is put above each page as a link to all related pages. */
- virtual QCString trRelatedPages()
- { return "Related Pages"; }
-
- /*! This is put above each page as a link to all examples. */
- virtual QCString trExamples()
- { return "Examples"; }
-
- /*! This is put above each page as a link to the search engine. */
- virtual QCString trSearch()
- { return "Search"; }
-
- /*! This is an introduction to the class hierarchy. */
- virtual QCString trClassHierarchyDescription()
- { return "This inheritance list is sorted roughly, "
- "but not completely, alphabetically:";
- }
-
- /*! This is an introduction to the list with all files. */
- virtual QCString trFileListDescription(bool extractAll)
- {
- QCString result="Here is a list of all ";
- if (!extractAll) result+="documented ";
- result+="files with brief descriptions:";
- return result;
- }
-
- /*! This is an introduction to the annotated compound list. */
- virtual QCString trCompoundListDescription()
- {
-
- if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
- {
- return "Here are the data structures with brief descriptions:";
- }
- else
- {
- return "Here are the classes, structs, "
- "unions and interfaces with brief descriptions:";
- }
- }
-
- /*! This is an introduction to the page with all class members. */
- virtual QCString trCompoundMembersDescription(bool extractAll)
- {
- QCString result="Here is a list of all ";
- if (!extractAll)
- {
- result+="documented ";
- }
- if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
- {
- result+="struct and union fields";
- }
- else
- {
- result+="class members";
- }
- result+=" with links to ";
- if (!extractAll)
- {
- if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
- {
- result+="the struct/union documentation for each field:";
- }
- else
- {
- result+="the class documentation for each member:";
- }
- }
- else
- {
- if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
- {
- result+="the structures/unions they belong to:";
- }
- else
- {
- result+="the classes they belong to:";
- }
- }
- return result;
- }
-
- /*! This is an introduction to the page with all file members. */
- virtual QCString trFileMembersDescription(bool extractAll)
- {
- QCString result="Here is a list of all ";
- if (!extractAll) result+="documented ";
-
- if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
- {
- result+="functions, variables, defines, enums, and typedefs";
- }
- else
- {
- result+="file members";
- }
- result+=" with links to ";
- if (extractAll)
- result+="the files they belong to:";
- else
- result+="the documentation:";
- return result;
- }
-
- /*! This is an introduction to the page with the list of all examples */
- virtual QCString trExamplesDescription()
- { return "Here is a list of all examples:"; }
-
- /*! This is an introduction to the page with the list of related pages */
- virtual QCString trRelatedPagesDescription()
- { return "Here is a list of all related documentation pages:"; }
-
- /*! This is an introduction to the page with the list of class/file groups */
- virtual QCString trModulesDescription()
- { return "Here is a list of all modules:"; }
-
- // index titles (the project name is prepended for these)
-
- /*! This is used in HTML as the title of index.html. */
- virtual QCString trDocumentation()
- { return "Documentation"; }
-
- /*! This is used in LaTeX as the title of the chapter with the
- * index of all groups.
- */
- virtual QCString trModuleIndex()
- { return "Module Index"; }
-
- /*! This is used in LaTeX as the title of the chapter with the
- * class hierarchy.
- */
- virtual QCString trHierarchicalIndex()
- { return "Hierarchical Index"; }
-
- /*! This is used in LaTeX as the title of the chapter with the
- * annotated compound index.
- */
- virtual QCString trCompoundIndex()
- {
- if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
- {
- return "Data Structure Index";
- }
- else
- {
- return "Class Index";
- }
- }
-
- /*! This is used in LaTeX as the title of the chapter with the
- * list of all files.
- */
- virtual QCString trFileIndex()
- { return "File Index"; }
-
- /*! This is used in LaTeX as the title of the chapter containing
- * the documentation of all groups.
- */
- virtual QCString trModuleDocumentation()
- { return "Module Documentation"; }
-
- /*! This is used in LaTeX as the title of the chapter containing
- * the documentation of all classes, structs and unions.
- */
- virtual QCString trClassDocumentation()
- {
- if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
- {
- return "Data Structure Documentation";
- }
- else
- {
- return "Class Documentation";
- }
- }
-
- /*! This is used in LaTeX as the title of the chapter containing
- * the documentation of all files.
- */
- virtual QCString trFileDocumentation()
- { return "File Documentation"; }
-
- /*! This is used in LaTeX as the title of the chapter containing
- * the documentation of all examples.
- */
- virtual QCString trExampleDocumentation()
- { return "Example Documentation"; }
-
- /*! This is used in LaTeX as the title of the chapter containing
- * the documentation of all related pages.
- */
- virtual QCString trPageDocumentation()
- { return "Page Documentation"; }
-
- /*! This is used in LaTeX as the title of the document */
- virtual QCString trReferenceManual()
- { return "Reference Manual"; }
-
- /*! This is used in the documentation of a file as a header before the
- * list of defines
- */
- virtual QCString trDefines()
- { return "Defines"; }
-
- /*! This is used in the documentation of a file as a header before the
- * list of function prototypes
- */
- virtual QCString trFuncProtos()
- { return "Function Prototypes"; }
-
- /*! This is used in the documentation of a file as a header before the
- * list of typedefs
- */
- virtual QCString trTypedefs()
- { return "Typedefs"; }
-
- /*! This is used in the documentation of a file as a header before the
- * list of enumerations
- */
- virtual QCString trEnumerations()
- { return "Enumerations"; }
-
- /*! This is used in the documentation of a file as a header before the
- * list of (global) functions
- */
- virtual QCString trFunctions()
- { return "Functions"; }
-
- /*! This is used in the documentation of a file as a header before the
- * list of (global) variables
- */
- virtual QCString trVariables()
- { return "Variables"; }
-
- /*! This is used in the documentation of a file as a header before the
- * list of (global) variables
- */
- virtual QCString trEnumerationValues()
- { return "Enumerator"; }
-
- /*! This is used in the documentation of a file before the list of
- * documentation blocks for defines
- */
- virtual QCString trDefineDocumentation()
- { return "Define Documentation"; }
-
- /*! This is used in the documentation of a file/namespace before the list
- * of documentation blocks for function prototypes
- */
- virtual QCString trFunctionPrototypeDocumentation()
- { return "Function Prototype Documentation"; }
-
- /*! This is used in the documentation of a file/namespace before the list
- * of documentation blocks for typedefs
- */
- virtual QCString trTypedefDocumentation()
- { return "Typedef Documentation"; }
-
- /*! This is used in the documentation of a file/namespace before the list
- * of documentation blocks for enumeration types
- */
- virtual QCString trEnumerationTypeDocumentation()
- { return "Enumeration Type Documentation"; }
-
- /*! This is used in the documentation of a file/namespace before the list
- * of documentation blocks for functions
- */
- virtual QCString trFunctionDocumentation()
- { return "Function Documentation"; }
-
- /*! This is used in the documentation of a file/namespace before the list
- * of documentation blocks for variables
- */
- virtual QCString trVariableDocumentation()
- { return "Variable Documentation"; }
-
- /*! This is used in the documentation of a file/namespace/group before
- * the list of links to documented compounds
- */
- virtual QCString trCompounds()
- {
- if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
- {
- return "Data Structures";
- }
- else
- {
- return "Classes";
- }
- }
-
- /*! This is used in the standard footer of each page and indicates when
- * the page was generated
- */
- virtual QCString trGeneratedAt(const char *date,const char *projName)
- {
- QCString result=(QCString)"Generated on "+date;
- if (projName) result+=(QCString)" for "+projName;
- result+=(QCString)" by";
- return result;
- }
- /*! This is part of the sentence used in the standard footer of each page.
- */
- virtual QCString trWrittenBy()
- {
- return "written by";
- }
-
- /*! this text is put before a class diagram */
- virtual QCString trClassDiagram(const char *clName)
- {
- return (QCString)"Inheritance diagram for "+clName+":";
- }
-
- /*! this text is generated when the \\internal command is used. */
- virtual QCString trForInternalUseOnly()
- { return "For internal use only."; }
-
- /*! this text is generated when the \\warning command is used. */
- virtual QCString trWarning()
- { return "Warning"; }
-
- /*! this text is generated when the \\version command is used. */
- virtual QCString trVersion()
- { return "Version"; }
-
- /*! this text is generated when the \\date command is used. */
- virtual QCString trDate()
- { return "Date"; }
-
- /*! this text is generated when the \\return command is used. */
- virtual QCString trReturns()
- { return "Returns"; }
-
- /*! this text is generated when the \\sa command is used. */
- virtual QCString trSeeAlso()
- { return "See also"; }
-
- /*! this text is generated when the \\param command is used. */
- virtual QCString trParameters()
- { return "Parameters"; }
-
- /*! this text is generated when the \\exception command is used. */
- virtual QCString trExceptions()
- { return "Exceptions"; }
-
- /*! this text is used in the title page of a LaTeX document. */
- virtual QCString trGeneratedBy()
- { return "Generated by"; }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 0.49-990307
-//////////////////////////////////////////////////////////////////////////
-
- /*! used as the title of page containing all the index of all namespaces. */
- virtual QCString trNamespaceList()
- { return "Namespace List"; }
-
- /*! used as an introduction to the namespace list */
- virtual QCString trNamespaceListDescription(bool extractAll)
- {
- QCString result="Here is a list of all ";
- if (!extractAll) result+="documented ";
- result+="namespaces with brief descriptions:";
- return result;
- }
-
- /*! used in the class documentation as a header before the list of all
- * friends of a class
- */
- virtual QCString trFriends()
- { return "Friends"; }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 0.49-990405
-//////////////////////////////////////////////////////////////////////////
-
- /*! used in the class documentation as a header before the list of all
- * related classes
- */
- virtual QCString trRelatedFunctionDocumentation()
- { return "Friends And Related Function Documentation"; }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 0.49-990425
-//////////////////////////////////////////////////////////////////////////
-
- /*! used as the title of the HTML page of a class/struct/union */
- virtual QCString trCompoundReference(const char *clName,
- ClassDef::CompoundType compType,
- bool isTemplate)
- {
- QCString result=(QCString)clName;
- switch(compType)
- {
- case ClassDef::Class: result+=" Class"; break;
- case ClassDef::Struct: result+=" Struct"; break;
- case ClassDef::Union: result+=" Union"; break;
- case ClassDef::Interface: result+=" Interface"; break;
- case ClassDef::Protocol: result+=" Protocol"; break;
- case ClassDef::Category: result+=" Category"; break;
- case ClassDef::Exception: result+=" Exception"; break;
- }
- if (isTemplate) result+=" Template";
- result+=" Reference";
- return result;
- }
-
- /*! used as the title of the HTML page of a file */
- virtual QCString trFileReference(const char *fileName)
- {
- QCString result=fileName;
- result+=" File Reference";
- return result;
- }
-
- /*! used as the title of the HTML page of a namespace */
- virtual QCString trNamespaceReference(const char *namespaceName)
- {
- QCString result=namespaceName;
- result+=" Namespace Reference";
- return result;
- }
-
- virtual QCString trPublicMembers()
- { return "Public Member Functions"; }
- virtual QCString trPublicSlots()
- { return "Public Slots"; }
- virtual QCString trSignals()
- { return "Signals"; }
- virtual QCString trStaticPublicMembers()
- { return "Static Public Member Functions"; }
- virtual QCString trProtectedMembers()
- { return "Protected Member Functions"; }
- virtual QCString trProtectedSlots()
- { return "Protected Slots"; }
- virtual QCString trStaticProtectedMembers()
- { return "Static Protected Member Functions"; }
- virtual QCString trPrivateMembers()
- { return "Private Member Functions"; }
- virtual QCString trPrivateSlots()
- { return "Private Slots"; }
- virtual QCString trStaticPrivateMembers()
- { return "Static Private Member Functions"; }
-
- /*! this function is used to produce a comma-separated list of items.
- * use generateMarker(i) to indicate where item i should be put.
- */
- virtual QCString trWriteList(int numEntries)
- {
- QCString result;
- int i;
- // the inherits list contain `numEntries' classes
- for (i=0;i<numEntries;i++)
- {
- // use generateMarker to generate placeholders for the class links!
- result+=generateMarker(i); // generate marker for entry i in the list
- // (order is left to right)
-
- if (i!=numEntries-1) // not the last entry, so we need a separator
- {
- if (i<numEntries-2) // not the fore last entry
- result+=", ";
- else // the fore last entry
- result+=", and ";
- }
- }
- return result;
- }
-
- /*! used in class documentation to produce a list of base classes,
- * if class diagrams are disabled.
- */
- virtual QCString trInheritsList(int numEntries)
- {
- return "Inherits "+trWriteList(numEntries)+".";
- }
-
- /*! used in class documentation to produce a list of super classes,
- * if class diagrams are disabled.
- */
- virtual QCString trInheritedByList(int numEntries)
- {
- return "Inherited by "+trWriteList(numEntries)+".";
- }
-
- /*! used in member documentation blocks to produce a list of
- * members that are hidden by this one.
- */
- virtual QCString trReimplementedFromList(int numEntries)
- {
- return "Reimplemented from "+trWriteList(numEntries)+".";
- }
-
- /*! used in member documentation blocks to produce a list of
- * all member that overwrite the implementation of this member.
- */
- virtual QCString trReimplementedInList(int numEntries)
- {
- return "Reimplemented in "+trWriteList(numEntries)+".";
- }
-
- /*! This is put above each page as a link to all members of namespaces. */
- virtual QCString trNamespaceMembers()
- { return "Namespace Members"; }
-
- /*! This is an introduction to the page with all namespace members */
- virtual QCString trNamespaceMemberDescription(bool extractAll)
- {
- QCString result="Here is a list of all ";
- if (!extractAll) result+="documented ";
- result+="namespace members with links to ";
- if (extractAll)
- result+="the namespace documentation for each member:";
- else
- result+="the namespaces they belong to:";
- return result;
- }
- /*! This is used in LaTeX as the title of the chapter with the
- * index of all namespaces.
- */
- virtual QCString trNamespaceIndex()
- { return "Namespace Index"; }
-
- /*! This is used in LaTeX as the title of the chapter containing
- * the documentation of all namespaces.
- */
- virtual QCString trNamespaceDocumentation()
- { return "Namespace Documentation"; }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 0.49-990522
-//////////////////////////////////////////////////////////////////////////
-
- /*! This is used in the documentation before the list of all
- * namespaces in a file.
- */
- virtual QCString trNamespaces()
- { return "Namespaces"; }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 0.49-990728
-//////////////////////////////////////////////////////////////////////////
-
- /*! This is put at the bottom of a class documentation page and is
- * followed by a list of files that were used to generate the page.
- */
- virtual QCString trGeneratedFromFiles(ClassDef::CompoundType compType,
- bool single)
- { // single is true implies a single file
- QCString result=(QCString)"The documentation for this ";
- switch(compType)
- {
- case ClassDef::Class: result+="class"; break;
- case ClassDef::Struct: result+="struct"; break;
- case ClassDef::Union: result+="union"; break;
- case ClassDef::Interface: result+="interface"; break;
- case ClassDef::Protocol: result+="protocol"; break;
- case ClassDef::Category: result+="category"; break;
- case ClassDef::Exception: result+="exception"; break;
- }
- result+=" was generated from the following file";
- if (single) result+=":"; else result+="s:";
- return result;
- }
-
- /*! This is in the (quick) index as a link to the alphabetical compound
- * list.
- */
- virtual QCString trAlphabeticalList()
- { return "Alphabetical List"; }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 0.49-990901
-//////////////////////////////////////////////////////////////////////////
-
- /*! This is used as the heading text for the retval command. */
- virtual QCString trReturnValues()
- { return "Return values"; }
-
- /*! This is in the (quick) index as a link to the main page (index.html)
- */
- virtual QCString trMainPage()
- { return "Main Page"; }
-
- /*! This is used in references to page that are put in the LaTeX
- * documentation. It should be an abbreviation of the word page.
- */
- virtual QCString trPageAbbreviation()
- { return "p."; }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 0.49-991003
-//////////////////////////////////////////////////////////////////////////
-
- virtual QCString trDefinedAtLineInSourceFile()
- {
- return "Definition at line @0 of file @1.";
- }
- virtual QCString trDefinedInSourceFile()
- {
- return "Definition in file @0.";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 0.49-991205
-//////////////////////////////////////////////////////////////////////////
-
- virtual QCString trDeprecated()
- {
- return "Deprecated";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.0.0
-//////////////////////////////////////////////////////////////////////////
-
- /*! this text is put before a collaboration diagram */
- virtual QCString trCollaborationDiagram(const char *clName)
- {
- return (QCString)"Collaboration diagram for "+clName+":";
- }
- /*! this text is put before an include dependency graph */
- virtual QCString trInclDepGraph(const char *fName)
- {
- return (QCString)"Include dependency graph for "+fName+":";
- }
- /*! header that is put before the list of constructor/destructors. */
- virtual QCString trConstructorDocumentation()
- {
- return "Constructor & Destructor Documentation";
- }
- /*! Used in the file documentation to point to the corresponding sources. */
- virtual QCString trGotoSourceCode()
- {
- return "Go to the source code of this file.";
- }
- /*! Used in the file sources to point to the corresponding documentation. */
- virtual QCString trGotoDocumentation()
- {
- return "Go to the documentation of this file.";
- }
- /*! Text for the \\pre command */
- virtual QCString trPrecondition()
- {
- return "Precondition";
- }
- /*! Text for the \\post command */
- virtual QCString trPostcondition()
- {
- return "Postcondition";
- }
- /*! Text for the \\invariant command */
- virtual QCString trInvariant()
- {
- return "Invariant";
- }
- /*! Text shown before a multi-line variable/enum initialization */
- virtual QCString trInitialValue()
- {
- return "Initial value:";
- }
- /*! Text used the source code in the file index */
- virtual QCString trCode()
- {
- return "code";
- }
- virtual QCString trGraphicalHierarchy()
- {
- return "Graphical Class Hierarchy";
- }
- virtual QCString trGotoGraphicalHierarchy()
- {
- return "Go to the graphical class hierarchy";
- }
- virtual QCString trGotoTextualHierarchy()
- {
- return "Go to the textual class hierarchy";
- }
- virtual QCString trPageIndex()
- {
- return "Page Index";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.1.0
-//////////////////////////////////////////////////////////////////////////
-
- virtual QCString trNote()
- {
- return "Note";
- }
- virtual QCString trPublicTypes()
- {
- return "Public Types";
- }
- virtual QCString trPublicAttribs()
- {
- if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
- {
- return "Data Fields";
- }
- else
- {
- return "Public Attributes";
- }
- }
- virtual QCString trStaticPublicAttribs()
- {
- return "Static Public Attributes";
- }
- virtual QCString trProtectedTypes()
- {
- return "Protected Types";
- }
- virtual QCString trProtectedAttribs()
- {
- return "Protected Attributes";
- }
- virtual QCString trStaticProtectedAttribs()
- {
- return "Static Protected Attributes";
- }
- virtual QCString trPrivateTypes()
- {
- return "Private Types";
- }
- virtual QCString trPrivateAttribs()
- {
- return "Private Attributes";
- }
- virtual QCString trStaticPrivateAttribs()
- {
- return "Static Private Attributes";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.1.3
-//////////////////////////////////////////////////////////////////////////
-
- /*! Used as a marker that is put before a \\todo item */
- virtual QCString trTodo()
- {
- return "Todo";
- }
- /*! Used as the header of the todo list */
- virtual QCString trTodoList()
- {
- return "Todo List";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.1.4
-//////////////////////////////////////////////////////////////////////////
-
- virtual QCString trReferencedBy()
- {
- return "Referenced by";
- }
- virtual QCString trRemarks()
- {
- return "Remarks";
- }
- virtual QCString trAttention()
- {
- return "Attention";
- }
- virtual QCString trInclByDepGraph()
- {
- return "This graph shows which files directly or "
- "indirectly include this file:";
- }
- virtual QCString trSince()
- {
- return "Since";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.1.5
-//////////////////////////////////////////////////////////////////////////
-
- /*! title of the graph legend page */
- virtual QCString trLegendTitle()
- {
- return "Graph Legend";
- }
- /*! page explaining how the dot graph's should be interpreted
- * The %A in the text below are to prevent link to classes called "A".
- */
- virtual QCString trLegendDocs()
- {
- return
- "This page explains how to interpret the graphs that are generated "
- "by doxygen.<p>\n"
- "Consider the following example:\n"
- "\\code\n"
- "/*! Invisible class because of truncation */\n"
- "class Invisible { };\n\n"
- "/*! Truncated class, inheritance relation is hidden */\n"
- "class Truncated : public Invisible { };\n\n"
- "/* Class not documented with doxygen comments */\n"
- "class Undocumented { };\n\n"
- "/*! Class that is inherited using public inheritance */\n"
- "class PublicBase : public Truncated { };\n\n"
- "/*! A template class */\n"
- "template<class T> class Templ { };\n\n"
- "/*! Class that is inherited using protected inheritance */\n"
- "class ProtectedBase { };\n\n"
- "/*! Class that is inherited using private inheritance */\n"
- "class PrivateBase { };\n\n"
- "/*! Class that is used by the Inherited class */\n"
- "class Used { };\n\n"
- "/*! Super class that inherits a number of other classes */\n"
- "class Inherited : public PublicBase,\n"
- " protected ProtectedBase,\n"
- " private PrivateBase,\n"
- " public Undocumented,\n"
- " public Templ<int>\n"
- "{\n"
- " private:\n"
- " Used *m_usedClass;\n"
- "};\n"
- "\\endcode\n"
- "This will result in the following graph:"
- "<p><center><img alt=\"\" src=\"graph_legend."+Config_getEnum("DOT_IMAGE_FORMAT")+"\"></center></p>\n"
- "<p>\n"
- "The boxes in the above graph have the following meaning:\n"
- "</p>\n"
- "<ul>\n"
- "<li>%A filled gray box represents the struct or class for which the "
- "graph is generated.</li>\n"
- "<li>%A box with a black border denotes a documented struct or class.</li>\n"
- "<li>%A box with a grey border denotes an undocumented struct or class.</li>\n"
- "<li>%A box with a red border denotes a documented struct or class for"
- "which not all inheritance/containment relations are shown. %A graph is "
- "truncated if it does not fit within the specified boundaries.</li>\n"
- "</ul>\n"
- "<p>\n"
- "The arrows have the following meaning:\n"
- "</p>\n"
- "<ul>\n"
- "<li>%A dark blue arrow is used to visualize a public inheritance "
- "relation between two classes.</li>\n"
- "<li>%A dark green arrow is used for protected inheritance.</li>\n"
- "<li>%A dark red arrow is used for private inheritance.</li>\n"
- "<li>%A purple dashed arrow is used if a class is contained or used "
- "by another class. The arrow is labeled with the variable(s) "
- "through which the pointed class or struct is accessible.</li>\n"
- "<li>%A yellow dashed arrow denotes a relation between a template instance and "
- "the template class it was instantiated from. The arrow is labeled with "
- "the template parameters of the instance.</li>\n"
- "</ul>\n";
- }
- /*! text for the link to the legend page */
- virtual QCString trLegend()
- {
- return "legend";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.2.0
-//////////////////////////////////////////////////////////////////////////
-
- /*! Used as a marker that is put before a test item */
- virtual QCString trTest()
- {
- return "Test";
- }
- /*! Used as the header of the test list */
- virtual QCString trTestList()
- {
- return "Test List";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.2.1
-//////////////////////////////////////////////////////////////////////////
-
- /*! Used as a section header for KDE-2 IDL methods */
- virtual QCString trDCOPMethods()
- {
- return "DCOP Member Functions";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.2.2
-//////////////////////////////////////////////////////////////////////////
-
- /*! Used as a section header for IDL properties */
- virtual QCString trProperties()
- {
- return "Properties";
- }
- /*! Used as a section header for IDL property documentation */
- virtual QCString trPropertyDocumentation()
- {
- return "Property Documentation";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.2.4
-//////////////////////////////////////////////////////////////////////////
-
- /*! Used for Java classes in the summary section of Java packages */
- virtual QCString trClasses()
- {
- if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
- {
- return "Data Structures";
- }
- else
- {
- return "Classes";
- }
- }
- /*! Used as the title of a Java package */
- virtual QCString trPackage(const char *name)
- {
- return (QCString)"Package "+name;
- }
- /*! Title of the package index page */
- virtual QCString trPackageList()
- {
- return "Package List";
- }
- /*! The description of the package index page */
- virtual QCString trPackageListDescription()
- {
- return "Here are the packages with brief descriptions (if available):";
- }
- /*! The link name in the Quick links header for each page */
- virtual QCString trPackages()
- {
- return "Packages";
- }
- /*! Text shown before a multi-line define */
- virtual QCString trDefineValue()
- {
- return "Value:";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.2.5
-//////////////////////////////////////////////////////////////////////////
-
- /*! Used as a marker that is put before a \\bug item */
- virtual QCString trBug()
- {
- return "Bug";
- }
- /*! Used as the header of the bug list */
- virtual QCString trBugList()
- {
- return "Bug List";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.2.6
-//////////////////////////////////////////////////////////////////////////
-
- /*! Used as ansicpg for RTF file
- *
- * The following table shows the correlation of Charset name, Charset Value and
- * <pre>
- * Codepage number:
- * Charset Name Charset Value(hex) Codepage number
- * ------------------------------------------------------
- * DEFAULT_CHARSET 1 (x01)
- * SYMBOL_CHARSET 2 (x02)
- * OEM_CHARSET 255 (xFF)
- * ANSI_CHARSET 0 (x00) 1252
- * RUSSIAN_CHARSET 204 (xCC) 1251
- * EE_CHARSET 238 (xEE) 1250
- * GREEK_CHARSET 161 (xA1) 1253
- * TURKISH_CHARSET 162 (xA2) 1254
- * BALTIC_CHARSET 186 (xBA) 1257
- * HEBREW_CHARSET 177 (xB1) 1255
- * ARABIC _CHARSET 178 (xB2) 1256
- * SHIFTJIS_CHARSET 128 (x80) 932
- * HANGEUL_CHARSET 129 (x81) 949
- * GB2313_CHARSET 134 (x86) 936
- * CHINESEBIG5_CHARSET 136 (x88) 950
- * </pre>
- *
- */
- virtual QCString trRTFansicp()
- {
- return "1252";
- }
-
-
- /*! Used as ansicpg for RTF fcharset
- * \see trRTFansicp() for a table of possible values.
- */
- virtual QCString trRTFCharSet()
- {
- return "0";
- }
-
- /*! Used as header RTF general index */
- virtual QCString trRTFGeneralIndex()
- {
- return "Index";
- }
-
- /*! This is used for translation of the word that will possibly
- * be followed by a single name or by a list of names
- * of the category.
- */
- virtual QCString trClass(bool first_capital, bool singular)
- {
- QCString result((first_capital ? "Class" : "class"));
- if (!singular) result+="es";
- return result;
- }
-
- /*! This is used for translation of the word that will possibly
- * be followed by a single name or by a list of names
- * of the category.
- */
- virtual QCString trFile(bool first_capital, bool singular)
- {
- QCString result((first_capital ? "File" : "file"));
- if (!singular) result+="s";
- return result;
- }
-
- /*! This is used for translation of the word that will possibly
- * be followed by a single name or by a list of names
- * of the category.
- */
- virtual QCString trNamespace(bool first_capital, bool singular)
- {
- QCString result((first_capital ? "Namespace" : "namespace"));
- if (!singular) result+="s";
- return result;
- }
-
- /*! This is used for translation of the word that will possibly
- * be followed by a single name or by a list of names
- * of the category.
- */
- virtual QCString trGroup(bool first_capital, bool singular)
- {
- QCString result((first_capital ? "Group" : "group"));
- if (!singular) result+="s";
- return result;
- }
-
- /*! This is used for translation of the word that will possibly
- * be followed by a single name or by a list of names
- * of the category.
- */
- virtual QCString trPage(bool first_capital, bool singular)
- {
- QCString result((first_capital ? "Page" : "page"));
- if (!singular) result+="s";
- return result;
- }
-
- /*! This is used for translation of the word that will possibly
- * be followed by a single name or by a list of names
- * of the category.
- */
- virtual QCString trMember(bool first_capital, bool singular)
- {
- QCString result((first_capital ? "Member" : "member"));
- if (!singular) result+="s";
- return result;
- }
-
- /*! This is used for translation of the word that will possibly
- * be followed by a single name or by a list of names
- * of the category.
- */
- virtual QCString trGlobal(bool first_capital, bool singular)
- {
- QCString result((first_capital ? "Global" : "global"));
- if (!singular) result+="s";
- return result;
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.2.7
-//////////////////////////////////////////////////////////////////////////
-
- /*! This text is generated when the \\author command is used and
- * for the author section in man pages. */
- virtual QCString trAuthor(bool first_capital, bool singular)
- {
- QCString result((first_capital ? "Author" : "author"));
- if (!singular) result+="s";
- return result;
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.2.11
-//////////////////////////////////////////////////////////////////////////
-
- /*! This text is put before the list of members referenced by a member
- */
- virtual QCString trReferences()
- {
- return "References";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.2.13
-//////////////////////////////////////////////////////////////////////////
-
- /*! used in member documentation blocks to produce a list of
- * members that are implemented by this one.
- */
- virtual QCString trImplementedFromList(int numEntries)
- {
- return "Implements "+trWriteList(numEntries)+".";
- }
-
- /*! used in member documentation blocks to produce a list of
- * all members that implement this abstract member.
- */
- virtual QCString trImplementedInList(int numEntries)
- {
- return "Implemented in "+trWriteList(numEntries)+".";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.2.16
-//////////////////////////////////////////////////////////////////////////
-
- /*! used in RTF documentation as a heading for the Table
- * of Contents.
- */
- virtual QCString trRTFTableOfContents()
- {
- return "Table of Contents";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.2.17
-//////////////////////////////////////////////////////////////////////////
-
- /*! Used as the header of the list of item that have been
- * flagged deprecated
- */
- virtual QCString trDeprecatedList()
- {
- return "Deprecated List";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.2.18
-//////////////////////////////////////////////////////////////////////////
-
- /*! Used as a header for declaration section of the events found in
- * a C# program
- */
- virtual QCString trEvents()
- {
- return "Events";
- }
- /*! Header used for the documentation section of a class' events. */
- virtual QCString trEventDocumentation()
- {
- return "Event Documentation";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.3
-//////////////////////////////////////////////////////////////////////////
-
- /*! Used as a heading for a list of Java class types with package scope.
- */
- virtual QCString trPackageTypes()
- {
- return "Package Types";
- }
- /*! Used as a heading for a list of Java class functions with package
- * scope.
- */
- virtual QCString trPackageMembers()
- {
- return "Package Functions";
- }
- /*! Used as a heading for a list of static Java class functions with
- * package scope.
- */
- virtual QCString trStaticPackageMembers()
- {
- return "Static Package Functions";
- }
- /*! Used as a heading for a list of Java class variables with package
- * scope.
- */
- virtual QCString trPackageAttribs()
- {
- return "Package Attributes";
- }
- /*! Used as a heading for a list of static Java class variables with
- * package scope.
- */
- virtual QCString trStaticPackageAttribs()
- {
- return "Static Package Attributes";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.3.1
-//////////////////////////////////////////////////////////////////////////
-
- /*! Used in the quick index of a class/file/namespace member list page
- * to link to the unfiltered list of all members.
- */
- virtual QCString trAll()
- {
- return "All";
- }
- /*! Put in front of the call graph for a function. */
- virtual QCString trCallGraph()
- {
- return "Here is the call graph for this function:";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.3.3
-//////////////////////////////////////////////////////////////////////////
-
- /*! When the search engine is enabled this text is put in the header
- * of each page before the field where one can enter the text to search
- * for.
- */
- virtual QCString trSearchForIndex()
- {
- return "Search for";
- }
- /*! This string is used as the title for the page listing the search
- * results.
- */
- virtual QCString trSearchResultsTitle()
- {
- return "Search Results";
- }
- /*! This string is put just before listing the search results. The
- * text can be different depending on the number of documents found.
- * Inside the text you can put the special marker $num to insert
- * the number representing the actual number of search results.
- * The @a numDocuments parameter can be either 0, 1 or 2, where the
- * value 2 represents 2 or more matches. HTML markup is allowed inside
- * the returned string.
- */
- virtual QCString trSearchResults(int numDocuments)
- {
- if (numDocuments==0)
- {
- return "Sorry, no documents matching your query.";
- }
- else if (numDocuments==1)
- {
- return "Found <b>1</b> document matching your query.";
- }
- else
- {
- return "Found <b>$num</b> documents matching your query. "
- "Showing best matches first.";
- }
- }
- /*! This string is put before the list of matched words, for each search
- * result. What follows is the list of words that matched the query.
- */
- virtual QCString trSearchMatches()
- {
- return "Matches:";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.3.8
-//////////////////////////////////////////////////////////////////////////
-
- /*! This is used in HTML as the title of page with source code for file filename
- */
- virtual QCString trSourceFile(QCString& filename)
- {
- return filename + " Source File";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.3.9
-//////////////////////////////////////////////////////////////////////////
-
- /*! This is used as the name of the chapter containing the directory
- * hierarchy.
- */
- virtual QCString trDirIndex()
- { return "Directory Hierarchy"; }
-
- /*! This is used as the name of the chapter containing the documentation
- * of the directories.
- */
- virtual QCString trDirDocumentation()
- { return "Directory Documentation"; }
-
- /*! This is used as the title of the directory index and also in the
- * Quick links of an HTML page, to link to the directory hierarchy.
- */
- virtual QCString trDirectories()
- { return "Directories"; }
-
- /*! This returns a sentences that introduces the directory hierarchy.
- * and the fact that it is sorted alphabetically per level
- */
- virtual QCString trDirDescription()
- { return "This directory hierarchy is sorted roughly, "
- "but not completely, alphabetically:";
- }
-
- /*! This returns the title of a directory page. The name of the
- * directory is passed via \a dirName.
- */
- virtual QCString trDirReference(const char *dirName)
- { QCString result=dirName; result+=" Directory Reference"; return result; }
-
- /*! This returns the word directory with or without starting capital
- * (\a first_capital) and in sigular or plural form (\a singular).
- */
- virtual QCString trDir(bool first_capital, bool singular)
- {
- QCString result((first_capital ? "Director" : "director"));
- if (singular) result+="y"; else result+="ies";
- return result;
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.4.1
-//////////////////////////////////////////////////////////////////////////
-
- /*! This text is added to the documentation when the \\overload command
- * is used for a overloaded function.
- */
- virtual QCString trOverloadText()
- {
- return "This is an overloaded member function, "
- "provided for convenience. It differs from the above "
- "function only in what argument(s) it accepts.";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.4.6
-//////////////////////////////////////////////////////////////////////////
-
- /*! This is used to introduce a caller (or called-by) graph */
- virtual QCString trCallerGraph()
- {
- return "Here is the caller graph for this function:";
- }
-
- /*! This is used in the documentation of a file/namespace before the list
- * of documentation blocks for enumeration values
- */
- virtual QCString trEnumerationValueDocumentation()
- { return "Enumerator Documentation"; }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.5.4 (mainly for Fortran)
-//////////////////////////////////////////////////////////////////////////
-
- /*! header that is put before the list of member subprograms (Fortran). */
- virtual QCString trMemberFunctionDocumentationFortran()
- { return "Member Function/Subroutine Documentation"; }
-
- /*! This is put above each page as a link to the list of annotated data types (Fortran). */
- virtual QCString trCompoundListFortran()
- { return "Data Types List"; }
-
- /*! This is put above each page as a link to all members of compounds (Fortran). */
- virtual QCString trCompoundMembersFortran()
- { return "Data Fields"; }
-
- /*! This is an introduction to the annotated compound list (Fortran). */
- virtual QCString trCompoundListDescriptionFortran()
- { return "Here are the data types with brief descriptions:"; }
-
- /*! This is an introduction to the page with all data types (Fortran). */
- virtual QCString trCompoundMembersDescriptionFortran(bool extractAll)
- {
- QCString result="Here is a list of all ";
- if (!extractAll)
- {
- result+="documented ";
- }
- result+="data types members";
- result+=" with links to ";
- if (!extractAll)
- {
- result+="the data structure documentation for each member";
- }
- else
- {
- result+="the data types they belong to:";
- }
- return result;
- }
-
- /*! This is used in LaTeX as the title of the chapter with the
- * annotated compound index (Fortran).
- */
- virtual QCString trCompoundIndexFortran()
- { return "Data Type Index"; }
-
- /*! This is used in LaTeX as the title of the chapter containing
- * the documentation of all data types (Fortran).
- */
- virtual QCString trTypeDocumentation()
- { return "Data Type Documentation"; }
-
- /*! This is used in the documentation of a file as a header before the
- * list of (global) subprograms (Fortran).
- */
- virtual QCString trSubprograms()
- { return "Functions/Subroutines"; }
-
- /*! This is used in the documentation of a file/namespace before the list
- * of documentation blocks for subprograms (Fortran)
- */
- virtual QCString trSubprogramDocumentation()
- { return "Function/Subroutine Documentation"; }
-
- /*! This is used in the documentation of a file/namespace/group before
- * the list of links to documented compounds (Fortran)
- */
- virtual QCString trDataTypes()
- { return "Data Types"; }
-
- /*! used as the title of page containing all the index of all modules (Fortran). */
- virtual QCString trModulesList()
- { return "Modules List"; }
-
- /*! used as an introduction to the modules list (Fortran) */
- virtual QCString trModulesListDescription(bool extractAll)
- {
- QCString result="Here is a list of all ";
- if (!extractAll) result+="documented ";
- result+="modules with brief descriptions:";
- return result;
- }
-
- /*! used as the title of the HTML page of a module/type (Fortran) */
- virtual QCString trCompoundReferenceFortran(const char *clName,
- ClassDef::CompoundType compType,
- bool isTemplate)
- {
- QCString result=(QCString)clName;
- switch(compType)
- {
- case ClassDef::Class: result+=" Module"; break;
- case ClassDef::Struct: result+=" Type"; break;
- case ClassDef::Union: result+=" Union"; break;
- case ClassDef::Interface: result+=" Interface"; break;
- case ClassDef::Protocol: result+=" Protocol"; break;
- case ClassDef::Category: result+=" Category"; break;
- case ClassDef::Exception: result+=" Exception"; break;
- }
- if (isTemplate) result+=" Template";
- result+=" Reference";
- return result;
- }
- /*! used as the title of the HTML page of a module (Fortran) */
- virtual QCString trModuleReference(const char *namespaceName)
- {
- QCString result=namespaceName;
- result+=" Module Reference";
- return result;
- }
-
- /*! This is put above each page as a link to all members of modules. (Fortran) */
- virtual QCString trModulesMembers()
- { return "Module Members"; }
-
- /*! This is an introduction to the page with all modules members (Fortran) */
- virtual QCString trModulesMemberDescription(bool extractAll)
- {
- QCString result="Here is a list of all ";
- if (!extractAll) result+="documented ";
- result+="module members with links to ";
- if (extractAll)
- {
- result+="the module documentation for each member:";
- }
- else
- {
- result+="the modules they belong to:";
- }
- return result;
- }
-
- /*! This is used in LaTeX as the title of the chapter with the
- * index of all modules (Fortran).
- */
- virtual QCString trModulesIndex()
- { return "Modules Index"; }
-
- /*! This is used for translation of the word that will possibly
- * be followed by a single name or by a list of names
- * of the category.
- */
- virtual QCString trModule(bool first_capital, bool singular)
- {
- QCString result((first_capital ? "Module" : "module"));
- if (!singular) result+="s";
- return result;
- }
-
- /*! This is put at the bottom of a module documentation page and is
- * followed by a list of files that were used to generate the page.
- */
- virtual QCString trGeneratedFromFilesFortran(ClassDef::CompoundType compType,
- bool single)
- {
- // single is true implies a single file
- QCString result=(QCString)"The documentation for this ";
- switch(compType)
- {
- case ClassDef::Class: result+="module"; break;
- case ClassDef::Struct: result+="type"; break;
- case ClassDef::Union: result+="union"; break;
- case ClassDef::Interface: result+="interface"; break;
- case ClassDef::Protocol: result+="protocol"; break;
- case ClassDef::Category: result+="category"; break;
- case ClassDef::Exception: result+="exception"; break;
- }
- result+=" was generated from the following file";
- if (single) result+=":"; else result+="s:";
- return result;
- }
-
- /*! This is used for translation of the word that will possibly
- * be followed by a single name or by a list of names
- * of the category.
- */
- virtual QCString trType(bool first_capital, bool singular)
- {
- QCString result((first_capital ? "Type" : "type"));
- if (!singular) result+="s";
- return result;
- }
-
- /*! This is used for translation of the word that will possibly
- * be followed by a single name or by a list of names
- * of the category.
- */
- virtual QCString trSubprogram(bool first_capital, bool singular)
- {
- QCString result((first_capital ? "Subprogram" : "subprogram"));
- if (!singular) result+="s";
- return result;
- }
-
- /*! C# Type Constraint list */
- virtual QCString trTypeConstraints()
- {
- return "Type Constraints";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.6.0 (mainly for the new search engine)
-//////////////////////////////////////////////////////////////////////////
-
- /*! directory relation for \a name */
- virtual QCString trDirRelation(const char *name)
- {
- return QCString(name)+" Relation";
- }
-
- /*! Loading message shown when loading search results */
- virtual QCString trLoading()
- {
- return "Loading...";
- }
-
- /*! Label used for search results in the global namespace */
- virtual QCString trGlobalNamespace()
- {
- return "Global Namespace";
- }
-
- /*! Message shown while searching */
- virtual QCString trSearching()
- {
- return "Searching...";
- }
-
- /*! Text shown when no search results are found */
- virtual QCString trNoMatches()
- {
- return "No Matches";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.6.3 (missing items for the directory pages)
-//////////////////////////////////////////////////////////////////////////
-
- /*! introduction text for the directory dependency graph */
- virtual QCString trDirDependency(const char *name)
- {
- return (QCString)"Directory dependency graph for "+name;
- }
-
- /*! when clicking a directory dependency label, a page with a
- * table is shown. The heading for the first column mentions the
- * source file that has a relation to another file.
- */
- virtual QCString trFileIn(const char *name)
- {
- return (QCString)"File in "+name;
- }
-
- /*! when clicking a directory dependency label, a page with a
- * table is shown. The heading for the second column mentions the
- * destination file that is included.
- */
- virtual QCString trIncludesFileIn(const char *name)
- {
- return (QCString)"Includes file in "+name;
- }
-
- /** Compiles a date string.
- * @param year Year in 4 digits
- * @param month Month of the year: 1=January
- * @param day Day of the Month: 1..31
- * @param dayOfWeek Day of the week: 1=Monday..7=Sunday
- * @param hour Hour of the day: 0..23
- * @param minutes Minutes in the hour: 0..59
- * @param seconds Seconds within the minute: 0..59
- * @param includeTime Include time in the result string?
- */
- virtual QCString trDateTime(int year,int month,int day,int dayOfWeek,
- int hour,int minutes,int seconds,
- bool includeTime)
- {
- static const char *days[] = { "Mon","Tue","Wed","Thu","Fri","Sat","Sun" };
- static const char *months[] = { "Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec" };
- QCString sdate;
- sdate.sprintf("%s %s %d %d",days[dayOfWeek-1],months[month-1],day,year);
- if (includeTime)
- {
- QCString stime;
- stime.sprintf(" %.2d:%.2d:%.2d",hour,minutes,seconds);
- sdate+=stime;
- }
- return sdate;
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.7.5
-//////////////////////////////////////////////////////////////////////////
-
- /*! Header for the page with bibliographic citations */
- virtual QCString trCiteReferences()
- { return "Bibliographic References"; }
-
- /*! Text for copyright paragraph */
- virtual QCString trCopyright()
- { return "Copyright"; }
-
- /*! Header for the graph showing the directory dependencies */
- virtual QCString trDirDepGraph(const char *name)
- { return QCString("Directory dependency graph for ")+name+":"; }
-
-};
-
-#endif
diff --git a/trunk/src/translator_eo.h b/trunk/src/translator_eo.h
deleted file mode 100644
index c273791..0000000
--- a/trunk/src/translator_eo.h
+++ /dev/null
@@ -1,1880 +0,0 @@
-/******************************************************************************
- *
- *
- *
- * Copyright (C) 1997-2012 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.
- *
- */
-
- /* Tradukita kaj Äisdatigata de Ander Martinez. */
-
-#ifndef TRANSLATOR_EO_H
-#define TRANSLATOR_EO_H
-
-/*!
- When defining a translator class for the new language, follow
- the description in the documentation. One of the steps says
- that you should copy the translator_en.h (this) file to your
- translator_xx.h new file. Your new language should use the
- Translator class as the base class. This means that you need to
- implement exactly the same (pure virtual) methods as the
- TranslatorEnglish does. Because of this, it is a good idea to
- start with the copy of TranslatorEnglish and replace the strings
- one by one.
-
- It is not necessary to include "translator.h" or
- "translator_adapter.h" here. The files are included in the
- language.cpp correctly. Not including any of the mentioned
- files frees the maintainer from thinking about whether the
- first, the second, or both files should be included or not, and
- why. This holds namely for localized translators because their
- base class is changed occasionaly to adapter classes when the
- Translator class changes the interface, or back to the
- Translator class (by the local maintainer) when the localized
- translator is made up-to-date again.
-*/
-class TranslatorEsperanto : public TranslatorAdapter_1_7_5
-{
- public:
-
- // --- Language control methods -------------------
-
- /*! Used for identification of the language. The identification
- * should not be translated. It should be replaced by the name
- * of the language in English using lower-case characters only
- * (e.g. "czech", "japanese", "russian", etc.). It should be equal to
- * the identification used in language.cpp.
- */
- virtual QCString idLanguage()
- { return "esperanto"; }
-
- /*! Used to get the LaTeX command(s) for the language support.
- * This method should return string with commands that switch
- * LaTeX to the desired language. For example
- * <pre>"\\usepackage[german]{babel}\n"
- * </pre>
- * or
- * <pre>"\\usepackage{polski}\n"
- * "\\usepackage[latin2]{inputenc}\n"
- * "\\usepackage[T1]{fontenc}\n"
- * </pre>
- *
- * The English LaTeX does not use such commands. Because of this
- * the empty string is returned in this implementation.
- */
- virtual QCString latexLanguageSupportCommand()
- {
- return "\\usepackage[esperanto]{babel}\n";
- }
-
- /*! return the language charset. This will be used for the HTML output */
- virtual QCString idLanguageCharset()
- {
- return "utf-8";
- }
-
- // --- Language translation methods -------------------
-
- /*! used in the compound documentation before a list of related functions. */
- virtual QCString trRelatedFunctions()
- { return "Rilataj Funkcioj"; }
-
- /*! subscript for the related functions. */
- virtual QCString trRelatedSubscript()
- { return "(Atentu ke tiuj ĉi ne estas membraj funkcioj.)"; }
-
- /*! header that is put before the detailed description of files, classes and namespaces. */
- virtual QCString trDetailedDescription()
- { return "Detala Priskribo"; }
-
- /*! header that is put before the list of typedefs. */
- virtual QCString trMemberTypedefDocumentation()
- { return "Dokumentado de la Membraj Tipodifinoj"; }
-
- /*! header that is put before the list of enumerations. */
- virtual QCString trMemberEnumerationDocumentation()
- { return "Dokumentado de la Membraj Enumeracioj"; }
-
- /*! header that is put before the list of member functions. */
- virtual QCString trMemberFunctionDocumentation()
- { return "Dokumentado de la Membraj Funkcioj"; }
-
- /*! header that is put before the list of member attributes. */
- virtual QCString trMemberDataDocumentation()
- {
- if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
- {
- return "Kampa Dokumentado";
- }
- else
- {
- return "Dokumentado de la Membraj Datumoj";
- }
- }
-
- /*! this is the text of a link put after brief descriptions. */
- virtual QCString trMore()
- { return "Pli..."; }
-
- /*! put in the class documentation */
- virtual QCString trListOfAllMembers()
- { return "Listo de ĉiuj membroj."; }
-
- /*! used as the title of the "list of all members" page of a class */
- virtual QCString trMemberList()
- { return "Membra Listo"; }
-
- /*! this is the first part of a sentence that is followed by a class name */
- virtual QCString trThisIsTheListOfAllMembers()
- { return "Tiu ĉi estas la kompleta membraro de "; }
-
- /*! this is the remainder of the sentence after the class name */
- virtual QCString trIncludingInheritedMembers()
- { return ", inkluzive ĉiujn hereditajn membrojn."; }
-
- /*! this is put at the author sections at the bottom of man pages.
- * parameter s is name of the project name.
- */
- virtual QCString trGeneratedAutomatically(const char *s)
- { QCString result="Generita aÅ­tomate de Doxygen";
- if (s) result+=(QCString)" por "+s;
- result+=" el la fontkodo.";
- return result;
- }
-
- /*! put after an enum name in the list of all members */
- virtual QCString trEnumName()
- { return "enum nomo"; }
-
- /*! put after an enum value in the list of all members */
- virtual QCString trEnumValue()
- { return "enum valoro"; }
-
- /*! put after an undocumented member in the list of all members */
- virtual QCString trDefinedIn()
- { return "difinita en"; }
-
- // quick reference sections
-
- /*! This is put above each page as a link to the list of all groups of
- * compounds or files (see the \\group command).
- */
- virtual QCString trModules()
- { return "Moduloj"; }
-
- /*! This is put above each page as a link to the class hierarchy */
- virtual QCString trClassHierarchy()
- { return "Klasa Hierarkio"; }
-
- /*! This is put above each page as a link to the list of annotated classes */
- virtual QCString trCompoundList()
- {
- if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
- {
- return "Datumstruktoroj";
- }
- else
- {
- return "Klasaro";
- }
- }
-
- /*! This is put above each page as a link to the list of documented files */
- virtual QCString trFileList()
- { return "Dosieraro"; }
-
- /*! This is put above each page as a link to all members of compounds. */
- virtual QCString trCompoundMembers()
- {
- if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
- {
- return "Datumkampoj";
- }
- else
- {
- return "Klasaj membroj";
- }
- }
-
- /*! This is put above each page as a link to all members of files. */
- virtual QCString trFileMembers()
- {
- if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
- {
- return "Mallokalaĵoj";
- }
- else
- {
- return "Dosieraj Membroj";
- }
- }
-
- /*! This is put above each page as a link to all related pages. */
- virtual QCString trRelatedPages()
- { return "Rilataj PaÄoj"; }
-
- /*! This is put above each page as a link to all examples. */
- virtual QCString trExamples()
- { return "Ekzemploj"; }
-
- /*! This is put above each page as a link to the search engine. */
- virtual QCString trSearch()
- { return "Serĉi"; }
-
- /*! This is an introduction to the class hierarchy. */
- virtual QCString trClassHierarchyDescription()
- { return "Tiu ĉi heredada listo estas plimalpli, "
- "sed ne tute, ordigita alfabete:";
- }
-
- /*! This is an introduction to the list with all files. */
- virtual QCString trFileListDescription(bool extractAll)
- {
- QCString result="Jen listo de ĉiuj ";
- if (!extractAll) result+="dokumentitaj ";
- result+="dosieroj kun mallongaj priskriboj:";
- return result;
- }
-
- /*! This is an introduction to the annotated compound list. */
- virtual QCString trCompoundListDescription()
- {
-
- if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
- {
- return "Jen datumstrukturoj kun mallongaj priskriboj:";
- }
- else
- {
- return "Jen la klasoj, strukturoj, kunigoj kaj interfacoj "
- "kun mallongaj priskriboj:";
- }
- }
-
- /*! This is an introduction to the page with all class members. */
- virtual QCString trCompoundMembersDescription(bool extractAll)
- {
- QCString result="Jen listo de ĉiuj ";
- if (!extractAll)
- {
- result+="dokumentitaj ";
- }
- if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
- {
- result+="strukturaj kaj kunigaj kampoj";
- }
- else
- {
- result+="klasaj membroj";
- }
- result+=" kun ligiloj al ";
- if (!extractAll)
- {
- if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
- {
- result+="la struktura/kuniga dokumentado por ĉiu kampo:";
- }
- else
- {
- result+="la klasa dokumentado por ĉiu membro:";
- }
- }
- else
- {
- if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
- {
- result+="la strukturoj/kunigoj al kiuj ili apartenas:";
- }
- else
- {
- result+="la klasoj al kiuj ili apartenas:";
- }
- }
- return result;
- }
-
- /*! This is an introduction to the page with all file members. */
- virtual QCString trFileMembersDescription(bool extractAll)
- {
- QCString result="Jen listo de ĉiuj ";
- if (!extractAll) result+="dokumentitaj ";
-
- if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
- {
- result+="funkcioj, variabloj, difinoj, enumeracioj kaj tipodifinoj";
- }
- else
- {
- result+="dosieraj membroj";
- }
- result+=" kun ligiloj al ";
- if (extractAll)
- result+="la dosieroj al kiuj ili apartenas:";
- else
- result+="la dokumentado:";
- return result;
- }
-
- /*! This is an introduction to the page with the list of all examples */
- virtual QCString trExamplesDescription()
- { return "Jen listo de ĉiuj la ekzemploj:"; }
-
- /*! This is an introduction to the page with the list of related pages */
- virtual QCString trRelatedPagesDescription()
- { return "Jen listo de ĉiuj rilataj dokumentadaj paÄoj:"; }
-
- /*! This is an introduction to the page with the list of class/file groups */
- virtual QCString trModulesDescription()
- { return "Jen listo de ĉiuj la moduloj:"; }
-
- // index titles (the project name is prepended for these)
-
- /*! This is used in HTML as the title of index.html. */
- virtual QCString trDocumentation()
- { return "Dokumentado"; }
-
- /*! This is used in LaTeX as the title of the chapter with the
- * index of all groups.
- */
- virtual QCString trModuleIndex()
- { return "Modula Indekso"; }
-
- /*! This is used in LaTeX as the title of the chapter with the
- * class hierarchy.
- */
- virtual QCString trHierarchicalIndex()
- { return "Hierarkia Indekso"; }
-
- /*! This is used in LaTeX as the title of the chapter with the
- * annotated compound index.
- */
- virtual QCString trCompoundIndex()
- {
- if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
- {
- return "Datumstruktura Indekso";
- }
- else
- {
- return "Klasa Indekso";
- }
- }
-
- /*! This is used in LaTeX as the title of the chapter with the
- * list of all files.
- */
- virtual QCString trFileIndex()
- { return "Dosiera Indekso"; }
-
- /*! This is used in LaTeX as the title of the chapter containing
- * the documentation of all groups.
- */
- virtual QCString trModuleDocumentation()
- { return "Modula Dokumentado"; }
-
- /*! This is used in LaTeX as the title of the chapter containing
- * the documentation of all classes, structs and unions.
- */
- virtual QCString trClassDocumentation()
- {
- if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
- {
- return "Datumstruktura Dokumentado";
- }
- else
- {
- return "Klasa Dokumentado";
- }
- }
-
- /*! This is used in LaTeX as the title of the chapter containing
- * the documentation of all files.
- */
- virtual QCString trFileDocumentation()
- { return "Dosiera Dokumentado"; }
-
- /*! This is used in LaTeX as the title of the chapter containing
- * the documentation of all examples.
- */
- virtual QCString trExampleDocumentation()
- { return "Ekzempla Dokumentado"; }
-
- /*! This is used in LaTeX as the title of the chapter containing
- * the documentation of all related pages.
- */
- virtual QCString trPageDocumentation()
- { return "PaÄa Dokumentado"; }
-
- /*! This is used in LaTeX as the title of the document */
- virtual QCString trReferenceManual()
- { return "Referenca Manlibro"; }
-
- /*! This is used in the documentation of a file as a header before the
- * list of defines
- */
- virtual QCString trDefines()
- { return "Difinoj"; }
-
- /*! This is used in the documentation of a file as a header before the
- * list of function prototypes
- */
- virtual QCString trFuncProtos()
- { return "Funkciaj Prototipoj"; }
-
- /*! This is used in the documentation of a file as a header before the
- * list of typedefs
- */
- virtual QCString trTypedefs()
- { return "Tipdifinoj"; }
-
- /*! This is used in the documentation of a file as a header before the
- * list of enumerations
- */
- virtual QCString trEnumerations()
- { return "Enumeracioj"; }
-
- /*! This is used in the documentation of a file as a header before the
- * list of (global) functions
- */
- virtual QCString trFunctions()
- { return "Funkcioj"; }
-
- /*! This is used in the documentation of a file as a header before the
- * list of (global) variables
- */
- virtual QCString trVariables()
- { return "Variabloj"; }
-
- /*! This is used in the documentation of a file as a header before the
- * list of (global) variables
- */
- virtual QCString trEnumerationValues()
- { return "Enumeraciilo"; }
-
- /*! This is used in the documentation of a file before the list of
- * documentation blocks for defines
- */
- virtual QCString trDefineDocumentation()
- { return "Difina Dokumentado"; }
-
- /*! This is used in the documentation of a file/namespace before the list
- * of documentation blocks for function prototypes
- */
- virtual QCString trFunctionPrototypeDocumentation()
- { return "Dokumentado de Funkciaj Prototipoj"; }
-
- /*! This is used in the documentation of a file/namespace before the list
- * of documentation blocks for typedefs
- */
- virtual QCString trTypedefDocumentation()
- { return "Tipdifina Dokumentado"; }
-
- /*! This is used in the documentation of a file/namespace before the list
- * of documentation blocks for enumeration types
- */
- virtual QCString trEnumerationTypeDocumentation()
- { return "Enumeracitipa Dokumentado"; }
-
- /*! This is used in the documentation of a file/namespace before the list
- * of documentation blocks for functions
- */
- virtual QCString trFunctionDocumentation()
- { return "Funkcia Dokumentado"; }
-
- /*! This is used in the documentation of a file/namespace before the list
- * of documentation blocks for variables
- */
- virtual QCString trVariableDocumentation()
- { return "Variabla Dokumentado"; }
-
- /*! This is used in the documentation of a file/namespace/group before
- * the list of links to documented compounds
- */
- virtual QCString trCompounds()
- {
- if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
- {
- return "Datumstrukturoj";
- }
- else
- {
- return "Klasoj";
- }
- }
-
- /*! This is used in the standard footer of each page and indicates when
- * the page was generated
- */
- virtual QCString trGeneratedAt(const char *date,const char *projName)
- {
- QCString result=(QCString)"Generita la "+date;
- if (projName) result+=(QCString)" por "+projName;
- result+=(QCString)" de";
- return result;
- }
- /*! This is part of the sentence used in the standard footer of each page.
- */
- virtual QCString trWrittenBy()
- {
- return "skribita de";
- }
-
- /*! this text is put before a class diagram */
- virtual QCString trClassDiagram(const char *clName)
- {
- return (QCString)"Heredada diagramo por "+clName+":";
- }
-
- /*! this text is generated when the \\internal command is used. */
- virtual QCString trForInternalUseOnly()
- { return "Nur por ena uzado."; }
-
- /*! this text is generated when the \\warning command is used. */
- virtual QCString trWarning()
- { return "Averto"; }
-
- /*! this text is generated when the \\version command is used. */
- virtual QCString trVersion()
- { return "Versio"; }
-
- /*! this text is generated when the \\date command is used. */
- virtual QCString trDate()
- { return "Dato"; }
-
- /*! this text is generated when the \\return command is used. */
- virtual QCString trReturns()
- { return "Liveras"; }
-
- /*! this text is generated when the \\sa command is used. */
- virtual QCString trSeeAlso()
- { return "Vido ankaÅ­"; }
-
- /*! this text is generated when the \\param command is used. */
- virtual QCString trParameters()
- { return "Parametroj"; }
-
- /*! this text is generated when the \\exception command is used. */
- virtual QCString trExceptions()
- { return "Esceptoj"; }
-
- /*! this text is used in the title page of a LaTeX document. */
- virtual QCString trGeneratedBy()
- { return "Generita de"; }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 0.49-990307
-//////////////////////////////////////////////////////////////////////////
-
- /*! used as the title of page containing all the index of all namespaces. */
- virtual QCString trNamespaceList()
- { return "Nomspacaro"; }
-
- /*! used as an introduction to the namespace list */
- virtual QCString trNamespaceListDescription(bool extractAll)
- {
- QCString result="Jen listo de ĉiuj ";
- if (!extractAll) result+="dokumentitaj ";
- result+="nomspacoj kun mallongaj priskriboj:";
- return result;
- }
-
- /*! used in the class documentation as a header before the list of all
- * friends of a class
- */
- virtual QCString trFriends()
- { return "Amikoj"; }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 0.49-990405
-//////////////////////////////////////////////////////////////////////////
-
- /*! used in the class documentation as a header before the list of all
- * related classes
- */
- virtual QCString trRelatedFunctionDocumentation()
- { return "Dokumentado pri amikoj kaj rilatitaj funkcioj"; }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 0.49-990425
-//////////////////////////////////////////////////////////////////////////
-
- /*! used as the title of the HTML page of a class/struct/union */
- virtual QCString trCompoundReference(const char *clName,
- ClassDef::CompoundType compType,
- bool isTemplate)
- {
- QCString result="Referenco de la ";
- if (isTemplate) result+=" Åablono de la ";
- switch(compType)
- {
- case ClassDef::Class: result+="klaso "; break;
- case ClassDef::Struct: result+="strukturo "; break;
- case ClassDef::Union: result+="kunigo "; break;
- case ClassDef::Interface: result+="interfaco "; break;
- case ClassDef::Protocol: result+="protokolo "; break;
- case ClassDef::Category: result+="kategorio "; break;
- case ClassDef::Exception: result+="escepto "; break;
- }
- result+=(QCString)clName;
- return result;
- }
-
- /*! used as the title of the HTML page of a file */
- virtual QCString trFileReference(const char *fileName)
- {
- QCString result=fileName;
- result+=" Dosiera referenco";
- return result;
- }
-
- /*! used as the title of the HTML page of a namespace */
- virtual QCString trNamespaceReference(const char *namespaceName)
- {
- QCString result=namespaceName;
- result+=" Nomspaca referenco";
- return result;
- }
-
- virtual QCString trPublicMembers()
- { return "Publikaj Membraj Funkcioj"; }
- virtual QCString trPublicSlots()
- { return "Pubikaj Ingoj"; }
- virtual QCString trSignals()
- { return "Signaloj"; }
- virtual QCString trStaticPublicMembers()
- { return "Statikaj Publikaj Membraj Funkcioj"; }
- virtual QCString trProtectedMembers()
- { return "Protektitaj Membraj Funkcioj"; }
- virtual QCString trProtectedSlots()
- { return "Protektitaj Ingoj"; }
- virtual QCString trStaticProtectedMembers()
- { return "Statikaj Protektitaj Membraj Funkcioj"; }
- virtual QCString trPrivateMembers()
- { return "Privataj Membraj Funkcioj"; }
- virtual QCString trPrivateSlots()
- { return "Privataj Ingoj"; }
- virtual QCString trStaticPrivateMembers()
- { return "Statikaj Privataj Membraj Funkcioj"; }
-
- /*! this function is used to produce a comma-separated list of items.
- * use generateMarker(i) to indicate where item i should be put.
- */
- virtual QCString trWriteList(int numEntries)
- {
- QCString result;
- int i;
- // the inherits list contain `numEntries' classes
- for (i=0;i<numEntries;i++)
- {
- // use generateMarker to generate placeholders for the class links!
- result+=generateMarker(i); // generate marker for entry i in the list
- // (order is left to right)
-
- if (i!=numEntries-1) // not the last entry, so we need a separator
- {
- if (i<numEntries-2) // not the fore last entry
- result+=", ";
- else // the fore last entry
- result+=", kaj ";
- }
- }
- return result;
- }
-
- /*! used in class documentation to produce a list of base classes,
- * if class diagrams are disabled.
- */
- virtual QCString trInheritsList(int numEntries)
- {
- return "Heredas de "+trWriteList(numEntries)+".";
- }
-
- /*! used in class documentation to produce a list of super classes,
- * if class diagrams are disabled.
- */
- virtual QCString trInheritedByList(int numEntries)
- {
- return "Heredita de "+trWriteList(numEntries)+".";
- }
-
- /*! used in member documentation blocks to produce a list of
- * members that are hidden by this one.
- */
- virtual QCString trReimplementedFromList(int numEntries)
- {
- return "Rerealigita el "+trWriteList(numEntries)+".";
- }
-
- /*! used in member documentation blocks to produce a list of
- * all member that overwrite the implementation of this member.
- */
- virtual QCString trReimplementedInList(int numEntries)
- {
- return "Rerealigita en "+trWriteList(numEntries)+".";
- }
-
- /*! This is put above each page as a link to all members of namespaces. */
- virtual QCString trNamespaceMembers()
- { return "Nomspacaj Membroj"; }
-
- /*! This is an introduction to the page with all namespace members */
- virtual QCString trNamespaceMemberDescription(bool extractAll)
- {
- QCString result="Jen listo de ĉiuj ";
- if (!extractAll) result+="dokumentitaj ";
- result+="nomspacaj membroj kun ligiloj al ";
- if (extractAll)
- result+="la nomspaca dokumentado de ĉiu membro:";
- else
- result+="la nomspacoj al kiuj ili apartenas:";
- return result;
- }
- /*! This is used in LaTeX as the title of the chapter with the
- * index of all namespaces.
- */
- virtual QCString trNamespaceIndex()
- { return "Nomspaca Indekso"; }
-
- /*! This is used in LaTeX as the title of the chapter containing
- * the documentation of all namespaces.
- */
- virtual QCString trNamespaceDocumentation()
- { return "Nomspaca Dokumentado"; }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 0.49-990522
-//////////////////////////////////////////////////////////////////////////
-
- /*! This is used in the documentation before the list of all
- * namespaces in a file.
- */
- virtual QCString trNamespaces()
- { return "Nomspacoj"; }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 0.49-990728
-//////////////////////////////////////////////////////////////////////////
-
- /*! This is put at the bottom of a class documentation page and is
- * followed by a list of files that were used to generate the page.
- */
- virtual QCString trGeneratedFromFiles(ClassDef::CompoundType compType,
- bool single)
- { // single is true implies a single file
- QCString result=(QCString)"La dokumentado por tiu ĉi ";
- switch(compType)
- {
- case ClassDef::Class: result+="klaso"; break;
- case ClassDef::Struct: result+="strukturo"; break;
- case ClassDef::Union: result+="kunigo"; break;
- case ClassDef::Interface: result+="interfaco"; break;
- case ClassDef::Protocol: result+="protokolo"; break;
- case ClassDef::Category: result+="kategorio"; break;
- case ClassDef::Exception: result+="escepto"; break;
- }
- result+=" generitas el la ";
- if (single) result+="sekva dosiero:";
- else result+="sekvaj dosieroj:";
- return result;
- }
-
- /*! This is in the (quick) index as a link to the alphabetical compound
- * list.
- */
- virtual QCString trAlphabeticalList()
- { return "Alfabeta Listo"; }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 0.49-990901
-//////////////////////////////////////////////////////////////////////////
-
- /*! This is used as the heading text for the retval command. */
- virtual QCString trReturnValues()
- { return "Liveraĵoj"; }
-
- /*! This is in the (quick) index as a link to the main page (index.html)
- */
- virtual QCString trMainPage()
- { return "Ĉefa PaÄo"; }
-
- /*! This is used in references to page that are put in the LaTeX
- * documentation. It should be an abbreviation of the word page.
- */
- virtual QCString trPageAbbreviation()
- { return "p."; }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 0.49-991003
-//////////////////////////////////////////////////////////////////////////
-
- virtual QCString trDefinedAtLineInSourceFile()
- {
- return "Difinita sur la lineo @0 de la dosiero @1.";
- }
- virtual QCString trDefinedInSourceFile()
- {
- return "Difinita en la dosiero @0.";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 0.49-991205
-//////////////////////////////////////////////////////////////////////////
-
- virtual QCString trDeprecated()
- {
- return "Evitinda";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.0.0
-//////////////////////////////////////////////////////////////////////////
-
- /*! this text is put before a collaboration diagram */
- virtual QCString trCollaborationDiagram(const char *clName)
- {
- return (QCString)"Kunlaborada diagramo por "+clName+":";
- }
- /*! this text is put before an include dependency graph */
- virtual QCString trInclDepGraph(const char *fName)
- {
- return (QCString)"Inkluzivaĵa dependeca diagramo por "+fName+":";
- }
- /*! header that is put before the list of constructor/destructors. */
- virtual QCString trConstructorDocumentation()
- {
- return "Konstruila kaj Detruila Dokumentado";
- }
- /*! Used in the file documentation to point to the corresponding sources. */
- virtual QCString trGotoSourceCode()
- {
- return "Iri al la fontkodo de tiu ĉi dosiero.";
- }
- /*! Used in the file sources to point to the corresponding documentation. */
- virtual QCString trGotoDocumentation()
- {
- return "Iri al la dokumentado de tiu ĉi dosiero.";
- }
- /*! Text for the \\pre command */
- virtual QCString trPrecondition()
- {
- return "Antaŭkondiĉo";
- }
- /*! Text for the \\post command */
- virtual QCString trPostcondition()
- {
- return "Postkondiĉo";
- }
- /*! Text for the \\invariant command */
- virtual QCString trInvariant()
- {
- return "Malvariaĵo";
- }
- /*! Text shown before a multi-line variable/enum initialization */
- virtual QCString trInitialValue()
- {
- return "Komenca valoro:";
- }
- /*! Text used the source code in the file index */
- virtual QCString trCode()
- {
- return "kodo";
- }
- virtual QCString trGraphicalHierarchy()
- {
- return "Grafika Klasa Hierarkio";
- }
- virtual QCString trGotoGraphicalHierarchy()
- {
- return "Iri al la grafika klasa hierarkio";
- }
- virtual QCString trGotoTextualHierarchy()
- {
- return "Iri al la teksta klasa hierarkio";
- }
- virtual QCString trPageIndex()
- {
- return "PaÄa Indekso";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.1.0
-//////////////////////////////////////////////////////////////////////////
-
- virtual QCString trNote()
- {
- return "Noto";
- }
- virtual QCString trPublicTypes()
- {
- return "Publikaj Tipoj";
- }
- virtual QCString trPublicAttribs()
- {
- if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
- {
- return "Datumkampoj";
- }
- else
- {
- return "Publikaj Atributoj";
- }
- }
- virtual QCString trStaticPublicAttribs()
- {
- return "Statikaj Publikaj Atributoj";
- }
- virtual QCString trProtectedTypes()
- {
- return "Protektitaj Tipoj";
- }
- virtual QCString trProtectedAttribs()
- {
- return "Protektitaj Atributoj";
- }
- virtual QCString trStaticProtectedAttribs()
- {
- return "Statikaj Protektitaj Atributoj";
- }
- virtual QCString trPrivateTypes()
- {
- return "Privataj Tipoj";
- }
- virtual QCString trPrivateAttribs()
- {
- return "Privataj Atributoj";
- }
- virtual QCString trStaticPrivateAttribs()
- {
- return "Statikaj Privataj Atributoj";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.1.3
-//////////////////////////////////////////////////////////////////////////
-
- /*! Used as a marker that is put before a \\todo item */
- virtual QCString trTodo()
- {
- return "Farendaĵo";
- }
- /*! Used as the header of the todo list */
- virtual QCString trTodoList()
- {
- return "Farendaĵaro";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.1.4
-//////////////////////////////////////////////////////////////////////////
-
- virtual QCString trReferencedBy()
- {
- return "Referencita de";
- }
- virtual QCString trRemarks()
- {
- return "Rimarkoj";
- }
- virtual QCString trAttention()
- {
- return "Atentu";
- }
- virtual QCString trInclByDepGraph()
- {
- return "Tiu ĉi diagramo montras kiuj dosieroj rekte aŭ malrekte "
- "inkluzivas tiun ĉi dosieron:";
- }
- virtual QCString trSince()
- {
- return "De";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.1.5
-//////////////////////////////////////////////////////////////////////////
-
- /*! title of the graph legend page */
- virtual QCString trLegendTitle()
- {
- return "Diagrama Klarigeto";
- }
- /*! page explaining how the dot graph's should be interpreted
- * The %A in the text below are to prevent link to classes called "A".
- */
- virtual QCString trLegendDocs()
- {
- return
- "Tiu ĉi paÄo klarigas kiel interpreti la diagramojn generitajn "
- "de doxygen.<p>\n"
- "Konsideru la sekvan ekzemplon:\n"
- "\\code\n"
- "/*! Nevidebla klaso pro trunkado */\n"
- "class Invisible { };\n\n"
- "/*! Trunkita klaso, hereda rilato kaÅiÄas */\n"
- "class Truncated : public Invisible { };\n\n"
- "/* Klaso ne dokumentita per komentoj de doxygen */\n"
- "class Undocumented { };\n\n"
- "/*! Klaso de kiu herediÄas per publika heredado */\n"
- "class PublicBase : public Truncated { };\n\n"
- "/*! Åœablona klaso */\n"
- "template<class T> class Templ { };\n\n"
- "/*! Klaso de kiu herediÄas per protektita heredado */\n"
- "class ProtectedBase { };\n\n"
- "/*! Klaso de kiu herediÄas per privata heredado */\n"
- "class PrivateBase { };\n\n"
- "/*! Klaso uzata de la klaso Inherited */\n"
- "class Used { };\n\n"
- "/*! Supra klaso kiu heredas de kelkaj aliaj klasoj */\n"
- "class Inherited : public PublicBase,\n"
- " protected ProtectedBase,\n"
- " private PrivateBase,\n"
- " public Undocumented,\n"
- " public Templ<int>\n"
- "{\n"
- " private:\n"
- " Used *m_usedClass;\n"
- "};\n"
- "\\endcode\n"
- "Tio ĉi liveros la sekvan diagramon:"
- "<p><center><img alt=\"\" src=\"graph_legend."+Config_getEnum("DOT_IMAGE_FORMAT")+"\"></center>\n"
- "<p>\n"
- "La skatoloj de la supra diagramo havas la sekvajn signifojn:\n"
- "<ul>\n"
- "<li>%Plene griza skatolo reprezentas la strukturon aÅ­ klason "
- "kies diagramo generiÄis.\n"
- "<li>%Skatolo kun nigra bordero montras dokumentitan strukturon aÅ­ klason.\n"
- "<li>%Skatolo kun griza bordero montras nedokumentitan strukturon aÅ­ klason.\n"
- "<li>%Skatolo kun ruÄa bordero montras dokumentitan strukturon aÅ­ klason por "
- "kiu ne ĉiuj heredadoj/enhavoj montriÄas. %Diagramo estas trunkota "
- "se Äi ne adaptiÄas en la donitajn limojn.\n"
- "</ul>\n"
- "La sagoj havas la sekvajn signifojn:\n"
- "<ul>\n"
- "<li>%Malhelblua sago uzatas por montri publika heredado "
- "inter du klasoj.\n"
- "<li>%Malhelverda sago uzatas por protektita heredado.\n"
- "<li>%MalhelruÄa sago uzatas por privata heredado.\n"
- "<li>%Purpura streka sago uzatas se klaso enhavatas aÅ­ uzatas "
- "de alia klaso. La sago estas etikedatas kun la variablo(j) "
- "tra kiu la montrita klaso aÅ­ strukturo estas alirebla.\n"
- "<li>%Flava streka sago montras rilato inter Åablona apero kaj "
- "la Åablona klaso el kiu Äi realigitas. La sago etikeditas kun "
- "la parametroj de la Åablona apero.\n"
- "</ul>\n";
- }
- /*! text for the link to the legend page */
- virtual QCString trLegend()
- {
- return "klarigeto";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.2.0
-//////////////////////////////////////////////////////////////////////////
-
- /*! Used as a marker that is put before a test item */
- virtual QCString trTest()
- {
- return "Testo";
- }
- /*! Used as the header of the test list */
- virtual QCString trTestList()
- {
- return "Testa Listo";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.2.1
-//////////////////////////////////////////////////////////////////////////
-
- /*! Used as a section header for KDE-2 IDL methods */
- virtual QCString trDCOPMethods()
- {
- return "DCOP Membraj Funkcioj";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.2.2
-//////////////////////////////////////////////////////////////////////////
-
- /*! Used as a section header for IDL properties */
- virtual QCString trProperties()
- {
- return "Atributoj";
- }
- /*! Used as a section header for IDL property documentation */
- virtual QCString trPropertyDocumentation()
- {
- return "Atributa Dokumentado";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.2.4
-//////////////////////////////////////////////////////////////////////////
-
- /*! Used for Java classes in the summary section of Java packages */
- virtual QCString trClasses()
- {
- if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
- {
- return "Datumstrukturoj";
- }
- else
- {
- return "Klasoj";
- }
- }
- /*! Used as the title of a Java package */
- virtual QCString trPackage(const char *name)
- {
- return (QCString)"Pakaĵo "+name;
- }
- /*! Title of the package index page */
- virtual QCString trPackageList()
- {
- return "Pakaĵa Listo";
- }
- /*! The description of the package index page */
- virtual QCString trPackageListDescription()
- {
- return "Jen listo de pakaĵoj kun mallongaj priskriboj (se ekzistas):";
- }
- /*! The link name in the Quick links header for each page */
- virtual QCString trPackages()
- {
- return "Pakaĵoj";
- }
- /*! Text shown before a multi-line define */
- virtual QCString trDefineValue()
- {
- return "Valoro:";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.2.5
-//////////////////////////////////////////////////////////////////////////
-
- /*! Used as a marker that is put before a \\bug item */
- virtual QCString trBug()
- {
- return "Cimo";
- }
- /*! Used as the header of the bug list */
- virtual QCString trBugList()
- {
- return "Cima Listo";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.2.6
-//////////////////////////////////////////////////////////////////////////
-
- /*! Used as ansicpg for RTF file
- *
- * The following table shows the correlation of Charset name, Charset Value and
- * <pre>
- * Codepage number:
- * Charset Name Charset Value(hex) Codepage number
- * ------------------------------------------------------
- * DEFAULT_CHARSET 1 (x01)
- * SYMBOL_CHARSET 2 (x02)
- * OEM_CHARSET 255 (xFF)
- * ANSI_CHARSET 0 (x00) 1252
- * RUSSIAN_CHARSET 204 (xCC) 1251
- * EE_CHARSET 238 (xEE) 1250
- * GREEK_CHARSET 161 (xA1) 1253
- * TURKISH_CHARSET 162 (xA2) 1254
- * BALTIC_CHARSET 186 (xBA) 1257
- * HEBREW_CHARSET 177 (xB1) 1255
- * ARABIC _CHARSET 178 (xB2) 1256
- * SHIFTJIS_CHARSET 128 (x80) 932
- * HANGEUL_CHARSET 129 (x81) 949
- * GB2313_CHARSET 134 (x86) 936
- * CHINESEBIG5_CHARSET 136 (x88) 950
- * </pre>
- *
- */
- virtual QCString trRTFansicp()
- {
- return "";
- }
-
-
- /*! Used as ansicpg for RTF fcharset
- * \see trRTFansicp() for a table of possible values.
- */
- virtual QCString trRTFCharSet()
- {
- return "1";
- }
-
- /*! Used as header RTF general index */
- virtual QCString trRTFGeneralIndex()
- {
- return "Indekso";
- }
-
- /*! This is used for translation of the word that will possibly
- * be followed by a single name or by a list of names
- * of the category.
- */
- virtual QCString trClass(bool first_capital, bool singular)
- {
- QCString result((first_capital ? "Klaso" : "klaso"));
- if (!singular) result+="j";
- return result;
- }
-
- /*! This is used for translation of the word that will possibly
- * be followed by a single name or by a list of names
- * of the category.
- */
- virtual QCString trFile(bool first_capital, bool singular)
- {
- QCString result((first_capital ? "Dosiero" : "dosiero"));
- if (!singular) result+="j";
- return result;
- }
-
- /*! This is used for translation of the word that will possibly
- * be followed by a single name or by a list of names
- * of the category.
- */
- virtual QCString trNamespace(bool first_capital, bool singular)
- {
- QCString result((first_capital ? "Nomspaco" : "nomspaco"));
- if (!singular) result+="j";
- return result;
- }
-
- /*! This is used for translation of the word that will possibly
- * be followed by a single name or by a list of names
- * of the category.
- */
- virtual QCString trGroup(bool first_capital, bool singular)
- {
- QCString result((first_capital ? "Grupo" : "grupo"));
- if (!singular) result+="j";
- return result;
- }
-
- /*! This is used for translation of the word that will possibly
- * be followed by a single name or by a list of names
- * of the category.
- */
- virtual QCString trPage(bool first_capital, bool singular)
- {
- QCString result((first_capital ? "PaÄo" : "paÄo"));
- if (!singular) result+="j";
- return result;
- }
-
- /*! This is used for translation of the word that will possibly
- * be followed by a single name or by a list of names
- * of the category.
- */
- virtual QCString trMember(bool first_capital, bool singular)
- {
- QCString result((first_capital ? "Membro" : "membro"));
- if (!singular) result+="j";
- return result;
- }
-
- /*! This is used for translation of the word that will possibly
- * be followed by a single name or by a list of names
- * of the category.
- */
- virtual QCString trGlobal(bool first_capital, bool singular)
- {
- QCString result((first_capital ? "Mallokalaĵo" : "mallokalaĵo"));
- if (!singular) result+="j";
- return result;
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.2.7
-//////////////////////////////////////////////////////////////////////////
-
- /*! This text is generated when the \\author command is used and
- * for the author section in man pages. */
- virtual QCString trAuthor(bool first_capital, bool singular)
- {
- QCString result((first_capital ? "AÅ­toro" : "aÅ­toro"));
- if (!singular) result+="j";
- return result;
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.2.11
-//////////////////////////////////////////////////////////////////////////
-
- /*! This text is put before the list of members referenced by a member
- */
- virtual QCString trReferences()
- {
- return "Referencoj";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.2.13
-//////////////////////////////////////////////////////////////////////////
-
- /*! used in member documentation blocks to produce a list of
- * members that are implemented by this one.
- */
- virtual QCString trImplementedFromList(int numEntries)
- {
- return "Realigas "+trWriteList(numEntries)+".";
- }
-
- /*! used in member documentation blocks to produce a list of
- * all members that implement this abstract member.
- */
- virtual QCString trImplementedInList(int numEntries)
- {
- return "Realigita en "+trWriteList(numEntries)+".";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.2.16
-//////////////////////////////////////////////////////////////////////////
-
- /*! used in RTF documentation as a heading for the Table
- * of Contents.
- */
- virtual QCString trRTFTableOfContents()
- {
- return "Enhava Tabelo";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.2.17
-//////////////////////////////////////////////////////////////////////////
-
- /*! Used as the header of the list of item that have been
- * flagged deprecated
- */
- virtual QCString trDeprecatedList()
- {
- return "Evitindaĵa Listo";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.2.18
-//////////////////////////////////////////////////////////////////////////
-
- /*! Used as a header for declaration section of the events found in
- * a C# program
- */
- virtual QCString trEvents()
- {
- return "Eventoj";
- }
- /*! Header used for the documentation section of a class' events. */
- virtual QCString trEventDocumentation()
- {
- return "Eventa Dokumentado";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.3
-//////////////////////////////////////////////////////////////////////////
-
- /*! Used as a heading for a list of Java class types with package scope.
- */
- virtual QCString trPackageTypes()
- {
- return "Pakaĵaj Tipoj";
- }
- /*! Used as a heading for a list of Java class functions with package
- * scope.
- */
- virtual QCString trPackageMembers()
- {
- return "Pakaĵaj Funkcioj";
- }
- /*! Used as a heading for a list of static Java class functions with
- * package scope.
- */
- virtual QCString trStaticPackageMembers()
- {
- return "Statikaj Pakaĵaj Funkcioj";
- }
- /*! Used as a heading for a list of Java class variables with package
- * scope.
- */
- virtual QCString trPackageAttribs()
- {
- return "Pakaĵaj Atributoj";
- }
- /*! Used as a heading for a list of static Java class variables with
- * package scope.
- */
- virtual QCString trStaticPackageAttribs()
- {
- return "Statikaj Pakaĵaj Atributoj";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.3.1
-//////////////////////////////////////////////////////////////////////////
-
- /*! Used in the quick index of a class/file/namespace member list page
- * to link to the unfiltered list of all members.
- */
- virtual QCString trAll()
- {
- return "Ĉiuj";
- }
- /*! Put in front of the call graph for a function. */
- virtual QCString trCallGraph()
- {
- return "Jen la vokdiagramo por tiu ĉi funkcio:";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.3.3
-//////////////////////////////////////////////////////////////////////////
-
- /*! When the search engine is enabled this text is put in the header
- * of each page before the field where one can enter the text to search
- * for.
- */
- virtual QCString trSearchForIndex()
- {
- return "Serĉi";
- }
- /*! This string is used as the title for the page listing the search
- * results.
- */
- virtual QCString trSearchResultsTitle()
- {
- return "Serĉaj Rezultoj";
- }
- /*! This string is put just before listing the search results. The
- * text can be different depending on the number of documents found.
- * Inside the text you can put the special marker $num to insert
- * the number representing the actual number of search results.
- * The @a numDocuments parameter can be either 0, 1 or 2, where the
- * value 2 represents 2 or more matches. HTML markup is allowed inside
- * the returned string.
- */
- virtual QCString trSearchResults(int numDocuments)
- {
- if (numDocuments==0)
- {
- return "Pardonu, nenio dokumento kongruas vian peton.";
- }
- else if (numDocuments==1)
- {
- return "Trafita <b>unu</b> dokumenton kongruantan vian peton.";
- }
- else
- {
- return "Trafitaj <b>$num</b> dokumentojn kongruantajn vian peton. "
- "MontriÄos plej bonaj kongruoj unue.";
- }
- }
- /*! This string is put before the list of matched words, for each search
- * result. What follows is the list of words that matched the query.
- */
- virtual QCString trSearchMatches()
- {
- return "Kongruoj:";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.3.8
-//////////////////////////////////////////////////////////////////////////
-
- /*! This is used in HTML as the title of page with source code for file filename
- */
- virtual QCString trSourceFile(QCString& filename)
- {
- return filename + " Fonta Dosiero";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.3.9
-//////////////////////////////////////////////////////////////////////////
-
- /*! This is used as the name of the chapter containing the directory
- * hierarchy.
- */
- virtual QCString trDirIndex()
- { return "Dosieruja Hierarkio"; }
-
- /*! This is used as the name of the chapter containing the documentation
- * of the directories.
- */
- virtual QCString trDirDocumentation()
- { return "Dosieruja Dokumentado"; }
-
- /*! This is used as the title of the directory index and also in the
- * Quick links of an HTML page, to link to the directory hierarchy.
- */
- virtual QCString trDirectories()
- { return "Dosierujoj"; }
-
- /*! This returns a sentences that introduces the directory hierarchy.
- * and the fact that it is sorted alphabetically per level
- */
- virtual QCString trDirDescription()
- { return "Tiu ĉi dosieruja hierarkio estas plimalpli, "
- "sed ne tute, ordigita alfabete:";
- }
-
- /*! This returns the title of a directory page. The name of the
- * directory is passed via \a dirName.
- */
- virtual QCString trDirReference(const char *dirName)
- { QCString result=dirName; result+=" Dosieruja Referenco"; return result; }
-
- /*! This returns the word directory with or without starting capital
- * (\a first_capital) and in sigular or plural form (\a singular).
- */
- virtual QCString trDir(bool first_capital, bool singular)
- {
- QCString result((first_capital ? "Dosierujo" : "dosierujo"));
- if (!singular) result+="j";
- return result;
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.4.1
-//////////////////////////////////////////////////////////////////////////
-
- /*! This text is added to the documentation when the \\overload command
- * is used for a overloaded function.
- */
- virtual QCString trOverloadText()
- {
- return "Tiu ĉi estas superÅarÄita membra funkcio, "
- "donita por faciligo. Äœi nur malsamas de la supra "
- "funkcio nur pro la argumento(j) kiujn ili akceptas.";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.4.6
-//////////////////////////////////////////////////////////////////////////
-
- /*! This is used to introduce a caller (or called-by) graph */
- virtual QCString trCallerGraph()
- {
- return "Jen la vokdiagramo por tiu ĉi funkcio:";
- }
-
- /*! This is used in the documentation of a file/namespace before the list
- * of documentation blocks for enumeration values
- */
- virtual QCString trEnumerationValueDocumentation()
- { return "Enumeraciila Dokumentado"; }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.5.4 (mainly for Fortran)
-//////////////////////////////////////////////////////////////////////////
-
- /*! header that is put before the list of member subprograms (Fortran). */
- virtual QCString trMemberFunctionDocumentationFortran()
- { return "Dokumentado de Membraj Funkcioj/Subrutinoj"; }
-
- /*! This is put above each page as a link to the list of annotated data types (Fortran). */
- virtual QCString trCompoundListFortran()
- { return "Datumtipa Listo"; }
-
- /*! This is put above each page as a link to all members of compounds (Fortran). */
- virtual QCString trCompoundMembersFortran()
- { return "Datumkampoj"; }
-
- /*! This is an introduction to the annotated compound list (Fortran). */
- virtual QCString trCompoundListDescriptionFortran()
- { return "Jen la datumtipoj kun mallongaj priskriboj:"; }
-
- /*! This is an introduction to the page with all data types (Fortran). */
- virtual QCString trCompoundMembersDescriptionFortran(bool extractAll)
- {
- QCString result="Jen listo de ĉiuj ";
- if (!extractAll)
- {
- result+="dokumentitaj ";
- }
- result+="datumtipaj membroj";
- result+=" kun ligiloj al ";
- if (!extractAll)
- {
- result+="la datumstruktura dokumentado de ĉiu membro";
- }
- else
- {
- result+="la datumtipoj al kiuj ili apartenas:";
- }
- return result;
- }
-
- /*! This is used in LaTeX as the title of the chapter with the
- * annotated compound index (Fortran).
- */
- virtual QCString trCompoundIndexFortran()
- { return "Datumtipa Indekso"; }
-
- /*! This is used in LaTeX as the title of the chapter containing
- * the documentation of all data types (Fortran).
- */
- virtual QCString trTypeDocumentation()
- { return "Datumtipa Dokumentado"; }
-
- /*! This is used in the documentation of a file as a header before the
- * list of (global) subprograms (Fortran).
- */
- virtual QCString trSubprograms()
- { return "Funkcioj/Subrutinoj"; }
-
- /*! This is used in the documentation of a file/namespace before the list
- * of documentation blocks for subprograms (Fortran)
- */
- virtual QCString trSubprogramDocumentation()
- { return "Funkcia/Subrutina Dokumentado"; }
-
- /*! This is used in the documentation of a file/namespace/group before
- * the list of links to documented compounds (Fortran)
- */
- virtual QCString trDataTypes()
- { return "Datumtipoj"; }
-
- /*! used as the title of page containing all the index of all modules (Fortran). */
- virtual QCString trModulesList()
- { return "Modula Listo"; }
-
- /*! used as an introduction to the modules list (Fortran) */
- virtual QCString trModulesListDescription(bool extractAll)
- {
- QCString result="Jen listo de ĉiuj ";
- if (!extractAll) result+="dokumentitaj ";
- result+="moduloj kun mallongaj priskriboj:";
- return result;
- }
-
- /*! used as the title of the HTML page of a module/type (Fortran) */
- virtual QCString trCompoundReferenceFortran(const char *clName,
- ClassDef::CompoundType compType,
- bool isTemplate)
- {
- QCString result="Referenco de la ";
- if (isTemplate) result+=" Åablono de la ";
- switch(compType)
- {
- case ClassDef::Class: result+="modulo "; break;
- case ClassDef::Struct: result+="tipo "; break;
- case ClassDef::Union: result+="kunigo "; break;
- case ClassDef::Interface: result+="interfaco "; break;
- case ClassDef::Protocol: result+="protokolo "; break;
- case ClassDef::Category: result+="kategorio "; break;
- case ClassDef::Exception: result+="escepto "; break;
- }
- result+=(QCString)clName;
- return result;
- }
- /*! used as the title of the HTML page of a module (Fortran) */
- virtual QCString trModuleReference(const char *namespaceName)
- {
- QCString result=namespaceName;
- result+=" Modula Referenco";
- return result;
- }
-
- /*! This is put above each page as a link to all members of modules. (Fortran) */
- virtual QCString trModulesMembers()
- { return "Modulaj Membroj"; }
-
- /*! This is an introduction to the page with all modules members (Fortran) */
- virtual QCString trModulesMemberDescription(bool extractAll)
- {
- QCString result="Jen listo de ĉiuj ";
- if (!extractAll) result+="dokumentitaj ";
- result+="modulaj membroj kun ligiloj al la ";
- if (extractAll)
- {
- result+="modula dokumentado de ĉiu membro:";
- }
- else
- {
- result+="moduloj al kiuj ili apartenas:";
- }
- return result;
- }
-
- /*! This is used in LaTeX as the title of the chapter with the
- * index of all modules (Fortran).
- */
- virtual QCString trModulesIndex()
- { return "Indekso de Moduloj"; }
-
- /*! This is used for translation of the word that will possibly
- * be followed by a single name or by a list of names
- * of the category.
- */
- virtual QCString trModule(bool first_capital, bool singular)
- {
- QCString result((first_capital ? "Modulo" : "modulo"));
- if (!singular) result+="j";
- return result;
- }
- /*! This is put at the bottom of a module documentation page and is
- * followed by a list of files that were used to generate the page.
- */
- virtual QCString trGeneratedFromFilesFortran(ClassDef::CompoundType compType,
- bool single)
- {
- // single is true implies a single file
- QCString result=(QCString)"La dokumentado por tiu ĉi ";
- switch(compType)
- {
- case ClassDef::Class: result+="modulo"; break;
- case ClassDef::Struct: result+="tipo"; break;
- case ClassDef::Union: result+="kunigo"; break;
- case ClassDef::Interface: result+="interfaco"; break;
- case ClassDef::Protocol: result+="protokolo"; break;
- case ClassDef::Category: result+="kategorio"; break;
- case ClassDef::Exception: result+="escepto"; break;
- }
- result+=" kreiÄis el la ";
- if (single) result+="sekva dosiero:"; else result+="sekvaj dosieroj:";
- return result;
- }
- /*! This is used for translation of the word that will possibly
- * be followed by a single name or by a list of names
- * of the category.
- */
- virtual QCString trType(bool first_capital, bool singular)
- {
- QCString result((first_capital ? "Tipo" : "tipo"));
- if (!singular) result+="j";
- return result;
- }
- /*! This is used for translation of the word that will possibly
- * be followed by a single name or by a list of names
- * of the category.
- */
- virtual QCString trSubprogram(bool first_capital, bool singular)
- {
- QCString result((first_capital ? "Subprogramo" : "subprogramo"));
- if (!singular) result+="j";
- return result;
- }
-
- /*! C# Type Constraint list */
- virtual QCString trTypeConstraints()
- {
- return "Tipaj Limigoj";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.6.0 (mainly for the new search engine)
-//////////////////////////////////////////////////////////////////////////
-
- /*! directory relation for \a name */
- virtual QCString trDirRelation(const char *name)
- {
- return QCString(name)+" Rilato";
- }
-
- /*! Loading message shown when loading search results */
- virtual QCString trLoading()
- {
- return "ÅœarÄante...";
- }
-
- /*! Label used for search results in the global namespace */
- virtual QCString trGlobalNamespace()
- {
- return "Malloka Nomspaco";
- }
-
- /*! Message shown while searching */
- virtual QCString trSearching()
- {
- return "Serĉante...";
- }
-
- /*! Text shown when no search results are found */
- virtual QCString trNoMatches()
- {
- return "Nenia kongruo";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.6.3 (missing items for the directory pages)
-//////////////////////////////////////////////////////////////////////////
-
- /*! introduction text for the directory dependency graph */
- virtual QCString trDirDependency(const char *name)
- {
- return (QCString)"Diagramo de dependecoj dosierujaj por "+name;
- }
-
- /*! when clicking a directory dependency label, a page with a
- * table is shown. The heading for the first column mentions the
- * source file that has a relation to another file.
- */
- virtual QCString trFileIn(const char *name)
- {
- return (QCString)"Dosiero en "+name;
- }
-
- /*! when clicking a directory dependency label, a page with a
- * table is shown. The heading for the second column mentions the
- * destination file that is included.
- */
- virtual QCString trIncludesFileIn(const char *name)
- {
- return (QCString)"Inkluzivas dosieron en "+name;
- }
-
- /** Compiles a date string.
- * @param year Year in 4 digits
- * @param month Month of the year: 1=January
- * @param day Day of the Month: 1..31
- * @param dayOfWeek Day of the week: 1=Monday..7=Sunday
- * @param hour Hour of the day: 0..23
- * @param minutes Minutes in the hour: 0..59
- * @param seconds Seconds within the minute: 0..59
- * @param includeTime Include time in the result string?
- */
- virtual QCString trDateTime(int year,int month,int day,int dayOfWeek,
- int hour,int minutes,int seconds,
- bool includeTime)
- {
- static const char *days[] = { "lundo","mardo","merkredo",
- "ĵaŭdo","vendredo","sabato",
- "dimanĉo" };
-
- static const char *months[] = { "Januaro", "Februaro", "Marto",
- "Aprilo", "Majo", "Junio",
- "Julio", "AÅ­gusto", "Septembro",
- "Oktobro", "Novembro",
- "Decembro"
- };
- QCString sdate;
- sdate.sprintf("%s, %d-a de %s %d",days[dayOfWeek-1],day,months[month-1],year);
- if (includeTime)
- {
- QCString stime;
- stime.sprintf(" %.2d:%.2d:%.2d",hour,minutes,seconds);
- sdate+=stime;
- }
- return sdate;
- }
-
-
-};
-
-#endif
diff --git a/trunk/src/translator_es.h b/trunk/src/translator_es.h
deleted file mode 100644
index eebfddd..0000000
--- a/trunk/src/translator_es.h
+++ /dev/null
@@ -1,1935 +0,0 @@
-/******************************************************************************
- *
- *
- *
- * Copyright (C) 1997-2012 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.
- *
- */
-
-/*
- * translator_es.h modified by Lucas Cruz (7-julio-2000)
- * Some notes:
- * - It's posible that some sentences haven't got meaning because
- * some words haven't got translate in spanish.
- * Updated from 1.3.8 to 1.4.6 by Guillermo Ballester Valor (May-05-2006)
- * Updated to 1.5.1 by Bartomeu Creus Navarro (22-enero-2007)
- * Updated to 1.5.5 by Bartomeu Creus Navarro (5-febrero-2008)
- * Updated to 1.5.8 by Bartomeu Creus Navarro (10-abril-2009)
- * Updated to 1.6.3 by Bartomeu Creus Navarro (3-marzo-2010)
- * Updated to 1.6.4 by Bartomeu Creus Navarro (26-mayo-2010) [(16-jun-2010) grabado en UTF-8]
- */
-
-#ifndef TRANSLATOR_ES_H
-#define TRANSLATOR_ES_H
-
-class TranslatorSpanish : public TranslatorAdapter_1_7_5
-{
-
- public:
-
- // --- Language control methods -------------------
-
- /*! Used for identification of the language. The identification
- * should not be translated. It should be replaced by the name
- * of the language in English using lower-case characters only
- * (e.g. "czech", "japanese", "russian", etc.). It should be equal to
- * the identification used in language.cpp.
- */
- virtual QCString idLanguage()
- { return "spanish"; }
-
- /*! Used to get the LaTeX command(s) for the language support.
- * This method should return string with commands that switch
- * LaTeX to the desired language. For example
- * <pre>"\\usepackage[german]{babel}\n"
- * </pre>
- * or
- * <pre>"\\usepackage{polski}\n"
- * "\\usepackage[latin2]{inputenc}\n"
- * "\\usepackage[T1]{fontenc}\n"
- * </pre>
- *
- * The English LaTeX does not use such commands. Because of this
- * the empty string is returned in this implementation.
- */
- virtual QCString latexLanguageSupportCommand()
- {
- return "\\usepackage[spanish]{babel}";
- }
-
- /*! return the language charset. This will be used for the HTML output */
- virtual QCString idLanguageCharset()
- {
- return "utf-8";
- }
-
- // --- Language translation methods -------------------
-
- /*! used in the compound documentation before a list of related functions. */
- virtual QCString trRelatedFunctions()
- { return "Funciones relacionadas"; }
-
- /*! subscript for the related functions. */
- virtual QCString trRelatedSubscript()
- { return "(Observar que estas no son funciones miembro.)"; }
-
- /*! header that is put before the detailed description of files, classes and namespaces. */
- virtual QCString trDetailedDescription()
- { return "Descripción detallada"; }
-
- /*! header that is put before the list of typedefs. */
- virtual QCString trMemberTypedefDocumentation()
- { return "Documentación de los 'Typedef' miembros de la clase"; }
-
- /*! header that is put before the list of enumerations. */
- virtual QCString trMemberEnumerationDocumentation()
- { return "Documentación de las enumeraciones miembro de la clase"; }
-
- /*! header that is put before the list of member functions. */
- virtual QCString trMemberFunctionDocumentation()
- { return "Documentación de las funciones miembro"; }
-
- /*! header that is put before the list of member attributes. */
- virtual QCString trMemberDataDocumentation()
- {
- if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
- {
- return "Documentación de los campos";
- }
- else
- {
- return "Documentación de los datos miembro";
- }
- }
-
- /*! this is the text of a link put after brief descriptions. */
- virtual QCString trMore()
- { return "Más..."; }
-
- /*! put in the class documentation */
- virtual QCString trListOfAllMembers()
- { return "Lista de todos los miembros."; }
-
- /*! used as the title of the "list of all members" page of a class */
- virtual QCString trMemberList()
- { return "Lista de los miembros"; }
-
- /*! this is the first part of a sentence that is followed by a class name */
- virtual QCString trThisIsTheListOfAllMembers()
- { return "Lista completa de los miembros de "; }
-
- /*! this is the remainder of the sentence after the class name */
- virtual QCString trIncludingInheritedMembers()
- { return ", incluyendo todos los heredados:"; }
-
- /*! this is put at the author sections at the bottom of man pages.
- * parameter s is name of the project name.
- */
- virtual QCString trGeneratedAutomatically(const char *s)
- { QCString result="Generado automáticamente por Doxygen";
- if (s) result+=(QCString)" para "+s;
- result+=" del código fuente.";
- return result;
- }
-
- /*! put after an enum name in the list of all members */
- virtual QCString trEnumName()
- { return "nombre de la enumeración"; }
-
- /*! put after an enum value in the list of all members */
- virtual QCString trEnumValue()
- { return "valor enumerado"; }
-
- /*! put after an undocumented member in the list of all members */
- virtual QCString trDefinedIn()
- { return "definido en"; }
-
- // quick reference sections
-
- /*! This is put above each page as a link to the list of all groups of
- * compounds or files (see the \\group command).
- */
- virtual QCString trModules()
- { return "Módulos"; }
-
- /*! This is put above each page as a link to the class hierarchy */
- virtual QCString trClassHierarchy()
- { return "Jerarquía de la clase"; }
-
- /*! This is put above each page as a link to the list of annotated classes */
- virtual QCString trCompoundList()
- {
- if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
- {
- return "Estructura de datos";
- }
- else
- {
- return "Lista de clases";
- }
- }
-
- /*! This is put above each page as a link to the list of documented files */
- virtual QCString trFileList()
- { return "Lista de archivos"; }
-
- /*! This is put above each page as a link to all members of compounds. */
- virtual QCString trCompoundMembers()
- {
- if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
- {
- return "Campos de datos";
- }
- else
- {
- return "Miembros de las clases";
- }
- }
-
- /*! This is put above each page as a link to all members of files. */
- virtual QCString trFileMembers()
- {
- if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
- {
- return "Globales";
- }
- else
- {
- return "Miembros de los ficheros";
- }
- }
-
- /*! This is put above each page as a link to all related pages. */
- virtual QCString trRelatedPages()
- { return "Páginas relacionadas"; }
-
- /*! This is put above each page as a link to all examples. */
- virtual QCString trExamples()
- { return "Ejemplos"; }
-
- /*! This is put above each page as a link to the search engine. */
- virtual QCString trSearch()
- { return "Buscar"; }
-
- /*! This is an introduction to the class hierarchy. */
- virtual QCString trClassHierarchyDescription()
- { return "Esta lista de herencias esta ordenada "
- "aproximadamente por orden alfabético:";
- }
-
- /*! This is an introduction to the list with all files. */
- virtual QCString trFileListDescription(bool extractAll)
- {
- QCString result="Lista de todos los archivos ";
- if (!extractAll) result+="documentados y ";
- result+="con descripciones breves:";
- return result;
- }
-
- /*! This is an introduction to the annotated compound list. */
- virtual QCString trCompoundListDescription()
- {
- if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
- {
- return "Lista de estructuras con una breve descripción:";
- }
- else
- {
- return "Lista de las clases, estructuras, "
- "uniones e interfaces con una breve descripción:";
- }
- }
-
- /*! This is an introduction to the page with all class members. */
- virtual QCString trCompoundMembersDescription(bool extractAll)
- {
- QCString result="Lista de todos los ";
- if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
- {
- result+="campos de estructuras y uniones";
- }
- else
- {
- result+="campos de clases";
- }
- if (!extractAll)
- {
- result+=" documentados";
- }
- result+=" con enlaces a ";
- if (!extractAll)
- {
- if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
- {
- result+="la documentación de la estructura/unión para cada campo:";
- }
- else
- {
- result+="la documentación de la clase para cada miembro:";
- }
- }
- else
- {
- if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
- {
- result+="las estructuras/uniones a que pertenecen:";
- }
- else
- {
- result+="las classes a que pertenecen:";
- }
- }
- return result;
- }
-
- /*! This is an introduction to the page with all file members. */
- virtual QCString trFileMembersDescription(bool extractAll)
- {
- QCString result="Lista de ";
- if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
- {
- result+="todas las funciones, variables, 'defines', enumeraciones y 'typedefs'";
- }
- else
- {
- result+="todos los mienbros de los ficheros";
- }
- if (!extractAll) result+=" documentados";
- result+=" con enlaces ";
- if (extractAll)
- result+="a los ficheros a los que corresponden:";
- else
- result+="a la documentación:";
- return result;
- }
-
- /*! This is an introduction to the page with the list of all examples */
- virtual QCString trExamplesDescription()
- { return "Lista de todos los ejemplos:"; }
-
- /*! This is an introduction to the page with the list of related pages */
- virtual QCString trRelatedPagesDescription()
- { return "Lista de toda la documentación relacionada:"; }
-
- /*! This is an introduction to the page with the list of class/file groups */
- virtual QCString trModulesDescription()
- { return "Lista de todos los módulos:"; }
-
- // index titles (the project name is prepended for these)
-
- /*! This is used in HTML as the title of index.html. */
- virtual QCString trDocumentation()
- { return "Documentación"; }
-
- /*! This is used in LaTeX as the title of the chapter with the
- * index of all groups.
- */
- virtual QCString trModuleIndex()
- { return "Indice de módulos"; }
-
- /*! This is used in LaTeX as the title of the chapter with the
- * class hierarchy.
- */
- virtual QCString trHierarchicalIndex()
- { return "Indice jerárquico"; }
-
- /*! This is used in LaTeX as the title of the chapter with the
- * annotated compound index.
- */
- virtual QCString trCompoundIndex()
- {
- if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
- {
- return "Ãndice de estructura de datos";
- }
- else
- {
- return "Ãndice de clases";
- }
- }
-
- /*! This is used in LaTeX as the title of the chapter with the
- * list of all files.
- */
- virtual QCString trFileIndex()
- { return "Indice de archivos"; }
-
- /*! This is used in LaTeX as the title of the chapter containing
- * the documentation of all groups.
- */
- virtual QCString trModuleDocumentation()
- { return "Documentación de módulos"; }
-
- /*! This is used in LaTeX as the title of the chapter containing
- * the documentation of all classes, structs and unions.
- */
- virtual QCString trClassDocumentation()
- {
- if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
- {
- return "Documentación de las estructuras de datos";
- }
- else
- {
- return "Documentación de las clases";
- }
- }
-
- /*! This is used in LaTeX as the title of the chapter containing
- * the documentation of all files.
- */
- virtual QCString trFileDocumentation()
- { return "Documentación de archivos"; }
-
- /*! This is used in LaTeX as the title of the chapter containing
- * the documentation of all examples.
- */
- virtual QCString trExampleDocumentation()
- { return "Documentación de ejemplos"; }
-
- /*! This is used in LaTeX as the title of the chapter containing
- * the documentation of all related pages.
- */
- virtual QCString trPageDocumentation()
- { return "Documentación de páginas"; }
-
- /*! This is used in LaTeX as the title of the document */
- virtual QCString trReferenceManual()
- { return "Manual de referencia"; }
-
- /*! This is used in the documentation of a file as a header before the
- * list of defines
- */
- virtual QCString trDefines()
- { return "'defines'"; }
-
- /*! This is used in the documentation of a file as a header before the
- * list of function prototypes
- */
- virtual QCString trFuncProtos()
- { return "Funciones prototipo"; }
-
- /*! This is used in the documentation of a file as a header before the
- * list of typedefs
- */
- virtual QCString trTypedefs()
- { return "'typedefs'"; }
-
- /*! This is used in the documentation of a file as a header before the
- * list of enumerations
- */
- virtual QCString trEnumerations()
- { return "Enumeraciones"; }
-
- /*! This is used in the documentation of a file as a header before the
- * list of (global) functions
- */
- virtual QCString trFunctions()
- { return "Funciones"; }
-
- /*! This is used in the documentation of a file as a header before the
- * list of (global) variables
- */
- virtual QCString trVariables()
- { return "Variables"; }
-
- /*! This is used in the documentation of a file as a header before the
- * list of (global) variables
- */
- virtual QCString trEnumerationValues()
- { return "Valores de enumeraciones"; }
-
- /*! This is used in the documentation of a file before the list of
- * documentation blocks for defines
- */
- virtual QCString trDefineDocumentation()
- { return "Documentación de los 'defines'"; }
-
- /*! This is used in the documentation of a file/namespace before the list
- * of documentation blocks for function prototypes
- */
- virtual QCString trFunctionPrototypeDocumentation()
- { return "Documentación de las funciones prototipo"; }
-
- /*! This is used in the documentation of a file/namespace before the list
- * of documentation blocks for typedefs
- */
- virtual QCString trTypedefDocumentation()
- { return "Documentación de los 'typedefs'"; }
-
- /*! This is used in the documentation of a file/namespace before the list
- * of documentation blocks for enumeration types
- */
- virtual QCString trEnumerationTypeDocumentation()
- { return "Documentación de las enumeraciones"; }
-
- /*! This is used in the documentation of a file/namespace before the list
- * of documentation blocks for functions
- */
- virtual QCString trFunctionDocumentation()
- { return "Documentación de las funciones"; }
-
- /*! This is used in the documentation of a file/namespace before the list
- * of documentation blocks for variables
- */
- virtual QCString trVariableDocumentation()
- { return "Documentación de las variables"; }
-
- /*! This is used in the documentation of a file/namespace/group before
- * the list of links to documented compounds
- */
- virtual QCString trCompounds()
- {
- if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
- {
- return "Estructuras de datos";
- }
- else
- {
- return "Clases";
- }
- }
-
- /*! This is used in the standard footer of each page and indicates when
- * the page was generated
- */
- virtual QCString trGeneratedAt(const char *date,const char *projName)
- {
- QCString result=(QCString)"Generado el "+date;
- if (projName) result+=(QCString)" para "+projName;
- result+=(QCString)" por";
- return result;
- }
-
- /*! This is part of the sentence used in the standard footer of each page.
- */
- virtual QCString trWrittenBy()
- {
- return "escrito por";
- }
-
- /*! this text is put before a class diagram */
- virtual QCString trClassDiagram(const char *clName)
- {
- return (QCString)"Diagrama de herencias de "+clName;
- }
-
- /*! this text is generated when the \\internal command is used. */
- virtual QCString trForInternalUseOnly()
- { return "Sólo para uso interno."; }
-
- /*! this text is generated when the \\warning command is used. */
- virtual QCString trWarning()
- { return "Atención"; }
-
- /*! this text is generated when the \\version command is used. */
- virtual QCString trVersion()
- { return "Versión"; }
-
- /*! this text is generated when the \\date command is used. */
- virtual QCString trDate()
- { return "Fecha"; }
-
- /*! this text is generated when the \\return command is used. */
- virtual QCString trReturns()
- { return "Devuelve"; }
-
- /*! this text is generated when the \\sa command is used. */
- virtual QCString trSeeAlso()
- { return "Ver también"; }
-
- /*! this text is generated when the \\param command is used. */
- virtual QCString trParameters()
- { return "Parámetros"; }
-
- /*! this text is generated when the \\exception command is used. */
- virtual QCString trExceptions()
- { return "Excepciones"; }
-
- /*! this text is used in the title page of a LaTeX document. */
- virtual QCString trGeneratedBy()
- { return "Generado por"; }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 0.49-990307
-//////////////////////////////////////////////////////////////////////////
-
- /*! used as the title of page containing all the index of all namespaces. */
- virtual QCString trNamespaceList()
- { return "Lista de 'namespaces'"; }
-
- /*! used as an introduction to the namespace list */
- virtual QCString trNamespaceListDescription(bool extractAll)
- {
- QCString result="Lista de ";
- if (!extractAll) result+="toda la documentación de ";
- result+="los 'namespaces', con una breve descripción:";
- return result;
- }
-
- /*! used in the class documentation as a header before the list of all
- * friends of a class
- */
- virtual QCString trFriends()
- { return "Amigas"; }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 0.49-990405
-//////////////////////////////////////////////////////////////////////////
-
- /*! used in the class documentation as a header before the list of all
- * related classes
- */
- virtual QCString trRelatedFunctionDocumentation()
- { return "Documentación de las funciones relacionadas y clases amigas"; }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 0.49-990425
-//////////////////////////////////////////////////////////////////////////
-
- /*! used as the title of the HTML page of a class/struct/union */
- virtual QCString trCompoundReference(const char *clName,
- ClassDef::CompoundType compType,
- bool isTemplate)
- {
- QCString result="Referencia de";
- if (isTemplate) result+=" la plantilla de";
- switch(compType)
- {
- case ClassDef::Class: result+=" la Clase "; break;
- case ClassDef::Struct: result+=" la Estructura "; break;
- case ClassDef::Union: result+=" la Unión "; break;
- case ClassDef::Interface: result+=" la Interfaz "; break;
- case ClassDef::Protocol: result+="l Protocolo "; break;
- case ClassDef::Category: result+=" la Categoria "; break;
- case ClassDef::Exception: result+=" la Excepción "; break;
- }
- result+=(QCString)clName;
- return result;
- }
-
- /*! used as the title of the HTML page of a file */
- virtual QCString trFileReference(const char *fileName)
- {
- QCString result="Referencia del Archivo ";
- result+=fileName;
- return result;
- }
-
- /*! used as the title of the HTML page of a namespace */
- virtual QCString trNamespaceReference(const char *namespaceName)
- {
- QCString result="Referencia del Namespace ";
- result+=namespaceName;
- return result;
- }
-
- virtual QCString trPublicMembers()
- { return "Métodos públicos"; }
-
- virtual QCString trPublicSlots()
- { return "Slots públicos"; }
-
- virtual QCString trSignals()
- { return "Señales"; }
-
- virtual QCString trStaticPublicMembers()
- { return "Métodos públicos estáticos"; }
-
- virtual QCString trProtectedMembers()
- { return "Métodos protegidos"; }
-
- virtual QCString trProtectedSlots()
- { return "Slots protegidos"; }
-
- virtual QCString trStaticProtectedMembers()
- { return "Métodos protegidos estáticos"; }
-
- virtual QCString trPrivateMembers()
- { return "Métodos privados"; }
-
- virtual QCString trPrivateSlots()
- { return "Slots privados"; }
-
- virtual QCString trStaticPrivateMembers()
- { return "Métodos privados estáticos"; }
-
- /*! this function is used to produce a comma-separated list of items.
- * use generateMarker(i) to indicate where item i should be put.
- */
- virtual QCString trWriteList(int numEntries)
- {
- QCString result;
- int i;
- // the inherits list contain `numEntries' classes
- for (i=0;i<numEntries;i++)
- {
- // use generateMarker to generate placeholders for the class links!
- result+=generateMarker(i); // generate marker for entry i in the list
- // (order is left to right)
-
- if (i!=numEntries-1) // not the last entry, so we need a separator
- {
- if (i<numEntries-2) // not the fore last entry
- result+=", ";
- else // the fore last entry
- result+=" y ";
- }
- }
- return result;
- }
-
- /*! used in class documentation to produce a list of base classes,
- * if class diagrams are disabled.
- */
- virtual QCString trInheritsList(int numEntries)
- {
- return "Herencias "+trWriteList(numEntries)+".";
- }
-
- /*! used in class documentation to produce a list of super classes,
- * if class diagrams are disabled.
- */
- virtual QCString trInheritedByList(int numEntries)
- {
- return "Heredado por "+trWriteList(numEntries)+".";
- }
-
- /*! used in member documentation blocks to produce a list of
- * members that are hidden by this one.
- */
- virtual QCString trReimplementedFromList(int numEntries)
- {
- return "Reimplementado de "+trWriteList(numEntries)+".";
- }
-
- /*! used in member documentation blocks to produce a list of
- * all member that overwrite the implementation of this member.
- */
- virtual QCString trReimplementedInList(int numEntries)
- {
- return "Reimplementado en "+trWriteList(numEntries)+".";
- }
-
- /*! This is put above each page as a link to all members of namespaces. */
- virtual QCString trNamespaceMembers()
- { return "Miembros del Namespace "; }
-
- /*! This is an introduction to the page with all namespace members */
- virtual QCString trNamespaceMemberDescription(bool extractAll)
- {
- QCString result="Lista de ";
- if (!extractAll) result+="toda la documentación de ";
- result+="los miembros del namespace con enlace a ";
- if (extractAll)
- result+="los namespace de cada miembro:";
- else
- result+="la documentación de los namespaces pertenecientes a:";
- return result;
- }
- /*! This is used in LaTeX as the title of the chapter with the
- * index of all namespaces.
- */
- virtual QCString trNamespaceIndex()
- { return "Indice de namespaces"; }
-
- /*! This is used in LaTeX as the title of the chapter containing
- * the documentation of all namespaces.
- */
- virtual QCString trNamespaceDocumentation()
- { return "Documentación de namespaces"; }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 0.49-990522
-//////////////////////////////////////////////////////////////////////////
-
- /*! This is used in the documentation before the list of all
- * namespaces in a file.
- */
- virtual QCString trNamespaces()
- { return "Namespaces"; }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 0.49-990728
-//////////////////////////////////////////////////////////////////////////
-
- /*! This is put at the bottom of a class documentation page and is
- * followed by a list of files that were used to generate the page.
- */
- virtual QCString trGeneratedFromFiles(ClassDef::CompoundType compType,
- bool single)
- { // here s is one of " Class", " Struct" or " Union"
- // single is true implies a single file
- QCString result=(QCString)"La documentación para est";
- switch(compType)
- {
- case ClassDef::Class: result+="a clase"; break;
- case ClassDef::Struct: result+="a estructura"; break;
- case ClassDef::Union: result+="a unión"; break;
- case ClassDef::Interface: result+="e interfaz"; break;
- case ClassDef::Protocol: result+="e protocolo"; break;
- case ClassDef::Category: result+="a categoría"; break;
- case ClassDef::Exception: result+="a excepción"; break;
- }
- result+=" fue generada a partir de";
- if (single) result+="l siguiente fichero:";
- else result+=" los siguientes ficheros:";
- return result;
- }
-
- /*! This is in the (quick) index as a link to the alphabetical compound
- * list.
- */
- virtual QCString trAlphabeticalList()
- { return "Lista alfabética"; }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 0.49-990901
-//////////////////////////////////////////////////////////////////////////
-
- /*! This is used as the heading text for the retval command. */
- virtual QCString trReturnValues()
- { return "Valores devueltos"; }
-
- /*! This is in the (quick) index as a link to the main page (index.html)
- */
- virtual QCString trMainPage()
- { return "Página principal"; }
-
- /*! This is used in references to page that are put in the LaTeX
- * documentation. It should be an abbreviation of the word page.
- */
- virtual QCString trPageAbbreviation()
- { return "p."; }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 0.49-991003
-//////////////////////////////////////////////////////////////////////////
-
- virtual QCString trDefinedAtLineInSourceFile()
- {
- return "Definición en la línea @0 del archivo @1.";
- }
- virtual QCString trDefinedInSourceFile()
- {
- return "Definición en el archivo @0.";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 0.49-991205
-//////////////////////////////////////////////////////////////////////////
-
- virtual QCString trDeprecated()
- {
- return "Obsoleto";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.0.0
-//////////////////////////////////////////////////////////////////////////
-
- /*! this text is put before a collaboration diagram */
- virtual QCString trCollaborationDiagram(const char *clName)
- {
- return (QCString)"Diagrama de colaboración para "+clName+":";
- }
-
- /*! this text is put before an include dependency graph */
- virtual QCString trInclDepGraph(const char *fName)
- {
- return (QCString)"Dependencia gráfica adjunta para "+fName+":";
- }
-
- /*! header that is put before the list of constructor/destructors. */
- virtual QCString trConstructorDocumentation()
- {
- return "Documentación del constructor y destructor";
- }
-
- /*! Used in the file documentation to point to the corresponding sources. */
- virtual QCString trGotoSourceCode()
- {
- return "Ir al código fuente de este archivo.";
- }
-
- /*! Used in the file sources to point to the corresponding documentation. */
- virtual QCString trGotoDocumentation()
- {
- return "Ir a la documentación de este archivo.";
- }
-
- /*! Text for the \\pre command */
- virtual QCString trPrecondition()
- {
- return "Precondición";
- }
-
- /*! Text for the \\post command */
- virtual QCString trPostcondition()
- {
- return "Postcondición";
- }
-
- /*! Text for the \\invariant command */
- virtual QCString trInvariant()
- {
- return "Invariante";
- }
-
- /*! Text shown before a multi-line variable/enum initialization */
- virtual QCString trInitialValue()
- {
- return "Valor inicial:";
- }
-
- /*! Text used the source code in the file index */
- virtual QCString trCode()
- {
- return "código";
- }
-
- virtual QCString trGraphicalHierarchy()
- {
- return "Representación gráfica de la clase";
- }
-
- virtual QCString trGotoGraphicalHierarchy()
- {
- return "Ir a la representación gráfica de la jerarquía de la clase";
- }
-
- virtual QCString trGotoTextualHierarchy()
- {
- return "Ir a la jerarquía textual de la clase";
- }
-
- virtual QCString trPageIndex()
- {
- return "Página indice";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.1.0
-//////////////////////////////////////////////////////////////////////////
-
- virtual QCString trNote()
- {
- return "Nota";
- }
-
- virtual QCString trPublicTypes()
- {
- return "Tipos públicos";
- }
-
- virtual QCString trPublicAttribs()
- {
- if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
- {
- return "Campos de datos";
- }
- else
- {
- return "Atributos públicos";
- }
- }
-
- virtual QCString trStaticPublicAttribs()
- {
- return "Atributos públicos estáticos";
- }
-
- virtual QCString trProtectedTypes()
- {
- return "Tipos protegidos";
- }
-
- virtual QCString trProtectedAttribs()
- {
- return "Atributos protegidos";
- }
-
- virtual QCString trStaticProtectedAttribs()
- {
- return "Atributos protegidos estáticos";
- }
-
- virtual QCString trPrivateTypes()
- {
- return "Tipos privados";
- }
-
- virtual QCString trPrivateAttribs()
- {
- return "Atributos privados";
- }
-
- virtual QCString trStaticPrivateAttribs()
- {
- return "Atributos privados estáticos";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.1.3
-//////////////////////////////////////////////////////////////////////////
-
- /*! Used as a marker that is put before a \\todo item */
- virtual QCString trTodo()
- {
- return "Tareas pendientes";
- }
-
- /*! Used as the header of the todo list */
- virtual QCString trTodoList()
- {
- return "Lista de tareas pendientes";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.1.4
-//////////////////////////////////////////////////////////////////////////
-
- virtual QCString trReferencedBy()
- {
- return "Referenciado por";
- }
-
- virtual QCString trRemarks()
- {
- return "Comentarios";
- }
-
- virtual QCString trAttention()
- {
- return "Atención";
- }
-
- virtual QCString trInclByDepGraph()
- {
- return "Gráfico de los archivos que directa o "
- "indirectamente incluyen a este archivo:";
- }
-
- virtual QCString trSince()
- {
- return "Desde";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.1.5
-//////////////////////////////////////////////////////////////////////////
-
- /*! title of the graph legend page */
- QCString trLegendTitle()
- {
- return "Colores y flechas del Gráfico";
- }
-
- /*! page explaining how the dot graph's should be interpreted
- * The %A in the text below are to prevent link to classes called "A".
- */
- virtual QCString trLegendDocs()
- {
- return
- "Esta página explica como interpretar los gráficos que son generados "
- "por doxygen.<p>\n"
- "Considere el siguiente ejemplo:\n"
- "\\code\n"
- "/*! Clase invisible por truncamiento */\n"
- "class Invisible { };\n\n"
- "/*! Clase truncada, relación de herencia escondida */\n"
- "class Truncated : public Invisible { };\n\n"
- "/* Clase no documentada con comentarios de doxygen */\n"
- "class Undocumented { };\n\n"
- "/*! Clase que es heredera usando herencia publica */\n"
- "class PublicBase : public Truncated { };\n\n"
- "/*! Clase plantilla */\n"
- "template<class T> class Templ { };\n\n"
- "/*! Clase que es heredera usando herencia protegida */\n"
- "class ProtectedBase { };\n\n"
- "/*! Clase que es heredera usando herencia privada */\n"
- "class PrivateBase { };\n\n"
- "/*! Clase que es usada por la clase hija */\n"
- "class Used { };\n\n"
- "/*! Super-Clase que hereda de varias otras clases */\n"
- "class Inherited : public PublicBase,\n"
- " protected ProtectedBase,\n"
- " private PrivateBase,\n"
- " public Undocumented,\n"
- " public Templ<int>\n"
- "{\n"
- " private:\n"
- " Used *m_usedClass;\n"
- "};\n"
- "\\endcode\n"
- "Si la etiqueta \\c MAX_DOT_GRAPH_HEIGHT en el archivo de configuración "
- "tiene valor 240 resultará en el siguiente gráfico:"
- "<p><center><img alt=\"\" src=\"graph_legend."+Config_getEnum("DOT_IMAGE_FORMAT")+"\"></center>\n"
- "<p>\n"
- "Las cajas en el gráfico arriba tienen el siguiente significado:\n"
- "<ul>\n"
- "<li>Una caja llena negra representa la estructura o clase para la cuál"
- "se generó el gráfico.\n"
- "<li>Una caja con borde negro señala una estructura o clase documentada.\n"
- "<li>Una caja con borde griz señala una estructura o clase no documentada.\n"
- "<li>una caja con borde rojo señala una estructura o clase documentada"
- " de la cuál no toda las relaciones de jerarquía/contenido son "
- "mostradas. El gráfico sera truncado si este no calza dentro de los "
- "límites especificados."
- "</ul>\n"
- "Las flechas tienen el siguiente significado:\n"
- "<ul>\n"
- "<li>Una flecha azul oscuro es usada para visualizar una relación herencia publica entre dos clases.\n"
- "<li>Una flecha verde oscuro es usada para herencia protegida.\n"
- "<li>Una flecha rojo oscuro es usada para herencia privada.\n"
- "<li>Una flecha segmentada púrpura se usa si la clase es contenida o "
- "usada por otra clase. La flecha está etiquetada por la variable "
- "con que se accede a la clase o estructura apuntada. \n"
- "<li>Una flecha segmentada amarilla indica la relación entre una instancia template y la clase template de la que se ha instanciado."
- " La flecha se etiqueta con los parámetros con que se llama al template.\n"
- "</ul>\n";
- }
-
- /*! text for the link to the legend page */
- virtual QCString trLegend()
- {
- return "significado de colores y flechas";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.2.0
-//////////////////////////////////////////////////////////////////////////
-
- /*! Used as a marker that is put before a test item */
- virtual QCString trTest()
- {
- return "Prueba";
- }
-
- /*! Used as the header of the test list */
- virtual QCString trTestList()
- {
- return "Lista de pruebas";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.2.1
-//////////////////////////////////////////////////////////////////////////
-
- /*! Used as a section header for KDE-2 IDL methods */
- virtual QCString trDCOPMethods()
- {
- return "Métodos DCOP";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.2.2
-//////////////////////////////////////////////////////////////////////////
-
- /*! Used as a section header for IDL properties */
- virtual QCString trProperties()
- {
- return "Propiedades";
- }
-
- /*! Used as a section header for IDL property documentation */
- virtual QCString trPropertyDocumentation()
- {
- return "Documentación de propiedades";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.2.4
-//////////////////////////////////////////////////////////////////////////
-
- /*! Used for Java classes in the summary section of Java packages */
- virtual QCString trClasses()
- {
- if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
- {
- return "Estructuras de Datos";
- }
- else
- {
- return "Clases";
- }
- }
-
- /*! Used as the title of a Java package */
- virtual QCString trPackage(const char *name)
- {
- return (QCString)"Paquetes "+name;
- }
-
- /*! Title of the package index page */
- virtual QCString trPackageList()
- {
- return "Lista de Paquetes ";
- }
-
- /*! The description of the package index page */
- virtual QCString trPackageListDescription()
- {
- return "Aquí van los paquetes con una breve descripción (si etá disponible):";
- }
-
- /*! The link name in the Quick links header for each page */
- virtual QCString trPackages()
- {
- return "Paquetes";
- }
-
- /*! Text shown before a multi-line define */
- virtual QCString trDefineValue()
- {
- return "Valor:";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.2.5
-//////////////////////////////////////////////////////////////////////////
-
- /*! Used as a marker that is put before a \\bug item */
- virtual QCString trBug()
- {
- return "Bug";
- }
-
- /*! Used as the header of the bug list */
- virtual QCString trBugList()
- {
- return "Lista de bugs";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.2.6
-//////////////////////////////////////////////////////////////////////////
-
- /*! Used as ansicpg for RTF file
- *
- * The following table shows the correlation of Charset name, Charset Value and
- * <pre>
- * Codepage number:
- * Charset Name Charset Value(hex) Codepage number
- * ------------------------------------------------------
- * DEFAULT_CHARSET 1 (x01)
- * SYMBOL_CHARSET 2 (x02)
- * OEM_CHARSET 255 (xFF)
- * ANSI_CHARSET 0 (x00) 1252
- * RUSSIAN_CHARSET 204 (xCC) 1251
- * EE_CHARSET 238 (xEE) 1250
- * GREEK_CHARSET 161 (xA1) 1253
- * TURKISH_CHARSET 162 (xA2) 1254
- * BALTIC_CHARSET 186 (xBA) 1257
- * HEBREW_CHARSET 177 (xB1) 1255
- * ARABIC _CHARSET 178 (xB2) 1256
- * SHIFTJIS_CHARSET 128 (x80) 932
- * HANGEUL_CHARSET 129 (x81) 949
- * GB2313_CHARSET 134 (x86) 936
- * CHINESEBIG5_CHARSET 136 (x88) 950
- * </pre>
- *
- */
- virtual QCString trRTFansicp()
- {
- return "1252";
- }
-
-
- /*! Used as ansicpg for RTF fcharset
- * \see trRTFansicp() for a table of possible values.
- */
- virtual QCString trRTFCharSet()
- {
- return "0";
- }
-
- /*! Used as header RTF general index */
- virtual QCString trRTFGeneralIndex()
- {
- return "Ãndice";
- }
-
- /*! This is used for translation of the word that will possibly
- * be followed by a single name or by a list of names
- * of the category.
- */
- virtual QCString trClass(bool first_capital, bool singular)
- {
- QCString result((first_capital ? "Clase" : "clase"));
- if (!singular) result+="s";
- return result;
- }
-
- /*! This is used for translation of the word that will possibly
- * be followed by a single name or by a list of names
- * of the category.
- */
- virtual QCString trFile(bool first_capital, bool singular)
- {
- QCString result((first_capital ? "Archivo" : "archivo"));
- if (!singular) result+="s";
- return result;
- }
-
- /*! This is used for translation of the word that will possibly
- * be followed by a single name or by a list of names
- * of the category.
- */
- virtual QCString trNamespace(bool first_capital, bool singular)
- {
- QCString result((first_capital ? "Namespace" : "namespace"));
- if (!singular) result+="s";
- return result;
- }
-
- /*! This is used for translation of the word that will possibly
- * be followed by a single name or by a list of names
- * of the category.
- */
- virtual QCString trGroup(bool first_capital, bool singular)
- {
- QCString result((first_capital ? "Grupo" : "grupo"));
- if (!singular) result+="s";
- return result;
- }
-
- /*! This is used for translation of the word that will possibly
- * be followed by a single name or by a list of names
- * of the category.
- */
- virtual QCString trPage(bool first_capital, bool singular)
- {
- QCString result((first_capital ? "Página" : "página"));
- if (!singular) result+="s";
- return result;
- }
-
- /*! This is used for translation of the word that will possibly
- * be followed by a single name or by a list of names
- * of the category.
- */
- virtual QCString trMember(bool first_capital, bool singular)
- {
- QCString result((first_capital ? "Miembro" : "miembro"));
- if (!singular) result+="s";
- return result;
- }
-
- /*! This is used for translation of the word that will possibly
- * be followed by a single name or by a list of names
- * of the category.
- */
- virtual QCString trGlobal(bool first_capital, bool singular)
- {
- QCString result((first_capital ? "Global" : "global"));
- if (!singular) result+="es";
- return result;
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.2.7
-//////////////////////////////////////////////////////////////////////////
-
- /*! This text is generated when the \\author command is used and
- * for the author section in man pages. */
- virtual QCString trAuthor(bool first_capital, bool singular)
- {
- QCString result((first_capital ? "Autor" : "autor"));
- if (!singular) result+="es";
- return result;
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.2.11
-//////////////////////////////////////////////////////////////////////////
-
- /*! This text is put before the list of members referenced by a member
- */
- virtual QCString trReferences()
- {
- return "Hace referencia a";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.2.13
-//////////////////////////////////////////////////////////////////////////
-
- /*! used in member documentation blocks to produce a list of
- * members that are implemented by this one.
- */
- virtual QCString trImplementedFromList(int numEntries)
- {
- return "Implementa "+trWriteList(numEntries)+".";
- }
-
- /*! used in member documentation blocks to produce a list of
- * all members that implement this abstract member.
- */
- virtual QCString trImplementedInList(int numEntries)
- {
- return "Implementado en "+trWriteList(numEntries)+".";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.2.16
-//////////////////////////////////////////////////////////////////////////
-
- /*! used in RTF documentation as a heading for the Table
- * of Contents.
- */
- virtual QCString trRTFTableOfContents()
- {
- return "Tabla de contenidos";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.2.17
-//////////////////////////////////////////////////////////////////////////
-
- /*! Used as the header of the list of item that have been
- * flagged deprecated
- */
- virtual QCString trDeprecatedList()
- {
- return "Lista de obsoletos";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.2.18
-//////////////////////////////////////////////////////////////////////////
-
- /*! Used as a header for declaration section of the events found in
- * a C# program
- */
- virtual QCString trEvents()
- {
- return "Eventos";
- }
-
- /*! Header used for the documentation section of a class' events. */
- virtual QCString trEventDocumentation()
- {
- return "Documentación de los eventos";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.3
-//////////////////////////////////////////////////////////////////////////
-
- /*! Used as a heading for a list of Java class types with package scope.
- */
- virtual QCString trPackageTypes()
- {
- return "Tipos del 'package'";
- }
-
- /*! Used as a heading for a list of Java class functions with package
- * scope.
- */
- virtual QCString trPackageMembers()
- {
- return "Funciones del 'package'";
- }
-
- /*! Used as a heading for a list of static Java class functions with
- * package scope.
- */
- virtual QCString trStaticPackageMembers()
- {
- return "Funciones estáticas del 'package'";
- }
-
- /*! Used as a heading for a list of Java class variables with package
- * scope.
- */
- virtual QCString trPackageAttribs()
- {
- return "Atributos del 'package'";
- }
-
- /*! Used as a heading for a list of static Java class variables with
- * package scope.
- */
- virtual QCString trStaticPackageAttribs()
- {
- return "Atributos Estáticos del 'package'";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.3.1
-//////////////////////////////////////////////////////////////////////////
-
- /*! Used in the quick index of a class/file/namespace member list page
- * to link to the unfiltered list of all members.
- */
- virtual QCString trAll()
- {
- return "Todo";
- }
-
- /*! Put in front of the call graph for a function. */
- virtual QCString trCallGraph()
- {
- return "Gráfico de llamadas para esta función:";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.3.3
-//////////////////////////////////////////////////////////////////////////
-
- /*! When the search engine is enabled this text is put in the header
- * of each page before the field where one can enter the text to search
- * for.
- */
- virtual QCString trSearchForIndex()
- {
- return "Buscar";
- }
-
- /*! This string is used as the title for the page listing the search
- * results.
- */
- virtual QCString trSearchResultsTitle()
- {
- return "Resultados de la Búsqueda";
- }
-
- /*! This string is put just before listing the search results. The
- * text can be different depending on the number of documents found.
- * Inside the text you can put the special marker $num to insert
- * the number representing the actual number of search results.
- * The @a numDocuments parameter can be either 0, 1 or 2, where the
- * value 2 represents 2 or more matches. HTML markup is allowed inside
- * the returned string.
- */
- virtual QCString trSearchResults(int numDocuments)
- {
- if (numDocuments==0)
- {
- return "Disculpe, no se encontraron documentos que coincidan con su búsqueda.";
- }
- else if (numDocuments==1)
- {
- return "Se encontró <b>1</b> documento que coincide con su búsqueda.";
- }
- else
- {
- return "Se encontraron <b>$num</b> documentos que coinciden con su búsqueda. "
- "Se muestran los mejores resultados primero.";
- }
- }
-
- /*! This string is put before the list of matched words, for each search
- * result. What follows is the list of words that matched the query.
- */
- virtual QCString trSearchMatches()
- {
- return "Coincidencias:";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.3.8
-//////////////////////////////////////////////////////////////////////////
-
- /*! This is used in HTML as the title of page with source code for file filename
- */
- virtual QCString trSourceFile(QCString& filename)
- {
- return "Fichero Fuente " + filename;
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.3.9
-//////////////////////////////////////////////////////////////////////////
-
- /*! This is used as the name of the chapter containing the directory
- * hierarchy.
- */
- virtual QCString trDirIndex()
- { return "Jerarquía de directorios"; }
-
- /*! This is used as the name of the chapter containing the documentation
- * of the directories.
- */
- virtual QCString trDirDocumentation()
- { return "Documentación de directorios"; }
-
- /*! This is used as the title of the directory index and also in the
- * Quick links of an HTML page, to link to the directory hierarchy.
- */
- virtual QCString trDirectories()
- { return "Directorios"; }
-
- /*! This returns a sentences that introduces the directory hierarchy.
- * and the fact that it is sorted alphabetically per level
- */
- virtual QCString trDirDescription()
- { return "La jeraquía de este directorio está ordenada"
- " alfabéticamente, de manera aproximada:";
- }
-
- /*! This returns the title of a directory page. The name of the
- * directory is passed via \a dirName.
- */
- virtual QCString trDirReference(const char *dirName)
- {
- QCString result="Referencia del directorio ";
- result+=dirName;
- return result;
- }
-
- /*! This returns the word directory with or without starting capital
- * (\a first_capital) and in sigular or plural form (\a singular).
- */
- virtual QCString trDir(bool first_capital, bool singular)
- {
- QCString result((first_capital ? "Directorio" : "directorio"));
- if (!singular) result+="s";
- return result;
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.4.1
-//////////////////////////////////////////////////////////////////////////
-
- /*! This text is added to the documentation when the \\overload command
- * is used for a overloaded function.
- */
- virtual QCString trOverloadText()
- {
- return "Esta es una función miembro sobrecargada que se "
- "suministra por conveniencia. Difiere de la anterior "
- "función solamente en los argumentos que acepta.";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.4.6
-//////////////////////////////////////////////////////////////////////////
-
- /*! This is used to introduce a caller (or called-by) graph */
- virtual QCString trCallerGraph()
- {
- return "Gráfico de llamadas a esta función:";
- }
-
- /*! This is used in the documentation of a file/namespace before the list
- * of documentation blocks for enumeration values
- */
- virtual QCString trEnumerationValueDocumentation()
- { return "Documentación de los valores de la enumeración"; }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.5.4 (mainly for Fortran)
-//////////////////////////////////////////////////////////////////////////
- // De parte de Bartomeu:
- // No conozco el Fortran, salvo un par de ejercicios en la universidad
- // hace muchos años. Por lo tanto, las traducciones son del inglés
- // al español, no de un usuario de Fortran que puede que haya cosas que no
- // traduzca o traduzca de otra forma. Que los usuarios de Fortran disculpen
- // y espero se animen a mejorar mi traducción.
-
- /*! header that is put before the list of member subprograms (Fortran). */
- virtual QCString trMemberFunctionDocumentationFortran()
- { return "Documetación de miembros Function/Subroutine"; }
-
- /*! This is put above each page as a link to the list of annotated data types (Fortran). */
- virtual QCString trCompoundListFortran()
- { return "Lista de tipos de datos"; }
-
- /*! This is put above each page as a link to all members of compounds (Fortran). */
- virtual QCString trCompoundMembersFortran()
- { return "Etiquetas de datos"; }
-
- /*! This is an introduction to the annotated compound list (Fortran). */
- virtual QCString trCompoundListDescriptionFortran()
- { return "Aquí están los tipos de datos con una breve descripción:"; }
-
- /*! This is an introduction to the page with all data types (Fortran). */
- virtual QCString trCompoundMembersDescriptionFortran(bool extractAll)
- {
- QCString result="Aquí está una lista de todos ";
- result+="los miembros de los tipos de datos ";
- if (!extractAll)
- {
- result+="documentados ";
- }
- result+="con enlaces a ";
- if (!extractAll)
- {
- result+="la documentación de la estructura de datos para cada miembro";
- }
- else
- {
- result+="los tipos de dato a que pertenece:";
- }
- return result;
- }
-
- /*! This is used in LaTeX as the title of the chapter with the
- * annotated compound index (Fortran).
- */
- virtual QCString trCompoundIndexFortran()
- { return "Ãndice de tipos de datos"; }
-
- /*! This is used in LaTeX as the title of the chapter containing
- * the documentation of all data types (Fortran).
- */
- virtual QCString trTypeDocumentation()
- { return "Documentación de tipos de datos"; }
-
- /*! This is used in the documentation of a file as a header before the
- * list of (global) subprograms (Fortran).
- */
- virtual QCString trSubprograms()
- { return "Funciones/Subprogramas"; }
-
- /*! This is used in the documentation of a file/namespace before the list
- * of documentation blocks for subprograms (Fortran)
- */
- virtual QCString trSubprogramDocumentation()
- { return "Documentación de Funciones/Subprogramas"; }
-
- /*! This is used in the documentation of a file/namespace/group before
- * the list of links to documented compounds (Fortran)
- */
- virtual QCString trDataTypes()
- { return "Tipos de datos"; }
-
- /*! used as the title of page containing all the index of all modules (Fortran). */
- virtual QCString trModulesList()
- { return "Lista de módulos"; }
-
- /*! used as an introduction to the modules list (Fortran) */
- virtual QCString trModulesListDescription(bool extractAll)
- {
- QCString result="Lista de todos los módulos ";
- if (!extractAll) result+="documentados ";
- result+="con una breve descripción:";
- return result;
- }
-
- /*! used as the title of the HTML page of a module/type (Fortran) */
- virtual QCString trCompoundReferenceFortran(const char *clName,
- ClassDef::CompoundType compType,
- bool isTemplate)
- {
- QCString result="Referencia de";
- if (isTemplate) result+=" la plantilla de";
- switch(compType)
- {
- case ClassDef::Class: result+="l módulo"; break;
- case ClassDef::Struct: result+="l tipo"; break;
- case ClassDef::Union: result+=" la unión"; break;
- case ClassDef::Interface: result+=" la interfaz"; break;
- case ClassDef::Protocol: result+="l protocolo"; break;
- case ClassDef::Category: result+=" la categoría"; break;
- case ClassDef::Exception: result+=" la excepción"; break;
- }
- result+=(QCString)clName;
- return result;
- }
-
- /*! used as the title of the HTML page of a module (Fortran) */
- virtual QCString trModuleReference(const char *namespaceName)
- {
- QCString result="Referencia módulo ";
- result+=namespaceName;
- return result;
- }
-
- /*! This is put above each page as a link to all members of modules. (Fortran) */
- virtual QCString trModulesMembers()
- { return "Miembros módulo"; }
-
- /*! This is an introduction to the page with all modules members (Fortran) */
- virtual QCString trModulesMemberDescription(bool extractAll)
- {
- QCString result="Lista de todos los miembros del módulo ";
- if (!extractAll) result+="documentados ";
- result+="con enlaces ";
- if (extractAll)
- {
- result+="a la documentación del módulo para cada uno:";
- }
- else
- {
- result+="al módulo al que pertenecen:";
- }
- return result;
- }
-
- /*! This is used in LaTeX as the title of the chapter with the
- * index of all modules (Fortran).
- */
- virtual QCString trModulesIndex()
- { return "Ãndice de módulos"; }
-
- /*! This is used for translation of the word that will possibly
- * be followed by a single name or by a list of names
- * of the category.
- */
- virtual QCString trModule(bool first_capital, bool singular)
- {
- QCString result((first_capital ? "Módulo" : "módulo"));
- if (!singular) result+="s";
- return result;
- }
-
- /*! This is put at the bottom of a module documentation page and is
- * followed by a list of files that were used to generate the page.
- */
- virtual QCString trGeneratedFromFilesFortran(ClassDef::CompoundType compType,
- bool single)
- { // here s is one of " Module", " Struct" or " Union"
- // single is true implies a single file
- QCString result=(QCString)"La documentación para est";
- switch(compType)
- {
- case ClassDef::Class: result+="e módulo"; break;
- case ClassDef::Struct: result+="e tipo"; break;
- case ClassDef::Union: result+="a unión"; break;
- case ClassDef::Interface: result+="e interfaz"; break;
- case ClassDef::Protocol: result+="e protocolo"; break;
- case ClassDef::Category: result+="a categoría"; break;
- case ClassDef::Exception: result+="a excepción"; break;
- }
- result+=" fue generada de";
- if (single) result+="l siguiente fichero:";
- else result+=" los siguientes ficheros:";
- return result;
- }
-
- /*! This is used for translation of the word that will possibly
- * be followed by a single name or by a list of names
- * of the category.
- */
- virtual QCString trType(bool first_capital, bool singular)
- {
- QCString result((first_capital ? "Tipo" : "tipo"));
- if (!singular) result+="s";
- return result;
- }
-
- /*! This is used for translation of the word that will possibly
- * be followed by a single name or by a list of names
- * of the category.
- */
- virtual QCString trSubprogram(bool first_capital, bool singular)
- {
- QCString result((first_capital ? "Subprograma" : "subprograma"));
- if (!singular) result+="s";
- return result;
- }
-
- /*! C# Type Constraint list */
- virtual QCString trTypeConstraints()
- {
- return "Restriciones de tipo";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.6.0 (mainly for the new search engine)
-//////////////////////////////////////////////////////////////////////////
-
- /*! directory relation for \a name */
- virtual QCString trDirRelation(const char *name)
- {
- return QCString(name)+" relación";
- }
-
- /*! Loading message shown when loading search results */
- virtual QCString trLoading()
- {
- return "Cargando...";
- }
-
- /*! Label used for search results in the global namespace */
- virtual QCString trGlobalNamespace()
- {
- return "Namespace global";
- }
-
- /*! Message shown while searching */
- virtual QCString trSearching()
- {
- return "Buscando...";
- }
-
- /*! Text shown when no search results are found */
- virtual QCString trNoMatches()
- {
- return "Nada coincide";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.6.3 (missing items for the directory pages)
-//////////////////////////////////////////////////////////////////////////
-
- /*! introduction text for the directory dependency graph */
- virtual QCString trDirDependency(const char *name)
- {
- return (QCString)"Gráfico de dependencias para el directorio "+name;
- }
-
- /*! when clicking a directory dependency label, a page with a
- * table is shown. The heading for the first column mentions the
- * source file that has a relation to another file.
- */
- virtual QCString trFileIn(const char *name)
- {
- return (QCString)"Fichero en "+name;
- }
-
- /*! when clicking a directory dependency label, a page with a
- * table is shown. The heading for the second column mentions the
- * destination file that is included.
- */
- virtual QCString trIncludesFileIn(const char *name)
- {
- return (QCString)"Incluye ficheros en "+name;
- }
-
- /** Compiles a date string.
- * @param year Year in 4 digits
- * @param month Month of the year: 1=January
- * @param day Day of the Month: 1..31
- * @param dayOfWeek Day of the week: 1=Monday..7=Sunday
- * @param hour Hour of the day: 0..23
- * @param minutes Minutes in the hour: 0..59
- * @param seconds Seconds within the minute: 0..59
- * @param includeTime Include time in the result string?
- */
- virtual QCString trDateTime(int year,int month,int day,int dayOfWeek,
- int hour,int minutes,int seconds,
- bool includeTime)
- {
- static const char *days[] = { "Lunes","Martes","Miércoles","Jueves",
- "Viernes","Sábado","Domingo" };
- static const char *months[] = { "Enero","Febrero","Marzo","Abril",
- "Mayo","Junio","Julio","Agosto",
- "Septiembre","Octubre","Noviembre","Diciembre" };
- QCString sdate;
- sdate.sprintf("%s, %d de %s de %d",days[dayOfWeek-1],day,months[month-1],year);
- if (includeTime)
- {
- QCString stime;
- stime.sprintf(" %.2d:%.2d:%.2d",hour,minutes,seconds);
- sdate+=stime;
- }
- return sdate;
- }
-
-
-};
-
-#endif
diff --git a/trunk/src/translator_fa.h b/trunk/src/translator_fa.h
deleted file mode 100644
index dbfafca..0000000
--- a/trunk/src/translator_fa.h
+++ /dev/null
@@ -1,1834 +0,0 @@
-/******************************************************************************
- *
- *
- *
- * Copyright (C) 1997-2012 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.
- *
- *
- * Description : Doxygen Persian (Farsi) Translator
- * Author : Ali Nadalizadeh < nadalizadeh at gmail dot com >
- *
- * ChangeLog :
- * Thu 06 Jul 2006 11:54:09 PM IRDT <nadalizadeh at gmail dot com>
- * >> First version of persian language support has been completed.
- *
- * Mon 04 Feb 2008 11:52:09 AM IRDT <nadalizadeh at gmail dot com>
- * >> Obsolete methods removed. Translated more string(s) to persian. Upgraded to 1_5_4 adapter.
- *
- * Fri 04 Jun 2010 04:05:24 PM IRDT <nadalizadeh at gmail dot com>
- * >> Implement missing new methods since 1.6.0.
- * >> Add English to Persian digit convertor. (for date/time digits)
- *
- * Translation feedbacks are really appreciated.
- */
-
-#ifndef TRANSLATOR_FA_H
-#define TRANSLATOR_FA_H
-
-#define HtmlRightToLeft QCString("<div dir=\"rtl\">")
-#define HtmlLeftToRight QCString("<div dir=\"rtl\">")
-#define HtmlDivEnd QCString("</div>")
-
-
-class TranslatorPersian : public TranslatorAdapter_1_7_5
-{
- private:
- /** Converts english digits of an input string to persian equivalents.
- */
- QCString convertDigitsToFarsi(QCString str)
- {
- QCString output;
- const char * PersianDigits[] = { "Û°", "Û±", "Û²", "Û³", "Û´", "Ûµ", "Û¶", "Û·", "Û¸", "Û¹" };
- for(unsigned i=0; i<str.length(); i++)
- {
- if (str.at(i) >= '0' && str.at(i) <= '9')
- output += PersianDigits[ str.at(i) - '0' ];
- else
- output += str.at(i);
- }
-
- return output;
- }
-
- public:
-
- // --- Language control methods -------------------
-
- /*! Used for identification of the language. The identification
- * should not be translated. It should be replaced by the name
- * of the language in Persian using lower-case characters only
- * (e.g. "czech", "japanese", "russian", etc.). It should be equal to
- * the identification used in language.cpp.
- */
- virtual QCString idLanguage()
- { return "persian"; }
-
- /*! Used to get the LaTeX command(s) for the language support.
- * This method should return string with commands that switch
- * LaTeX to the desired language. For example
- * <pre>"\\usepackage[german]{babel}\n"
- * </pre>
- * or
- * <pre>"\\usepackage{polski}\n"
- * "\\usepackage[latin2]{inputenc}\n"
- * "\\usepackage[T1]{fontenc}\n"
- * </pre>
- *
- * The Persian LaTeX does not use such commands. Because of this
- * the empty string is returned in this implementation.
- */
- virtual QCString latexLanguageSupportCommand()
- {
- return "";
- }
-
- /*! return the language charset. This will be used for the HTML output */
- virtual QCString idLanguageCharset()
- {
- return "utf-8";
- }
-
- // --- Language translation methods -------------------
-
- /*! used in the compound documentation before a list of related functions. */
- virtual QCString trRelatedFunctions()
- { return "توابع مربوط"; }
-
- /*! subscript for the related functions. */
- virtual QCString trRelatedSubscript()
- { return "(لازم به ذکر است که اينها توابع عضو نيستند)"; }
-
- /*! header that is put before the detailed description of files, classes and namespaces. */
- virtual QCString trDetailedDescription()
- { return "توضيحات جزئی"; }
-
- /*! header that is put before the list of typedefs. */
- virtual QCString trMemberTypedefDocumentation()
- { return "مستندات تعری٠گونه ها"; }
-
- /*! header that is put before the list of enumerations. */
- virtual QCString trMemberEnumerationDocumentation()
- { return "های عضو Enumeration مستندات"; }
-
- /*! header that is put before the list of member functions. */
- virtual QCString trMemberFunctionDocumentation()
- { return "توضيحات توابع عضو"; }
-
- /*! header that is put before the list of member attributes. */
- virtual QCString trMemberDataDocumentation()
- {
- if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
- {
- return "Field مستندات";
- }
- else
- {
- return "مستندات متغيير های عضو";
- }
- }
-
- /*! this is the text of a link put after brief descriptions. */
- virtual QCString trMore()
- { return "بيشتر..."; }
-
- /*! put in the class documentation */
- virtual QCString trListOfAllMembers()
- { return "ليست تمام اعضاء ."; }
-
- /*! used as the title of the "list of all members" page of a class */
- virtual QCString trMemberList()
- { return "ليست اعضاء"; }
-
- /*! this is the first part of a sentence that is followed by a class name */
- virtual QCString trThisIsTheListOfAllMembers()
- { return "اين ليستی کامل از همه اعضای "; }
-
- /*! this is the remainder of the sentence after the class name */
- virtual QCString trIncludingInheritedMembers()
- { return "شامل همه ی اعضای به ارث برده شده می باشد."; }
-
- /*! this is put at the author sections at the bottom of man pages.
- * parameter s is name of the project name.
- */
- virtual QCString trGeneratedAutomatically(const char *s)
- { QCString result="تولید شده توسط نرم اÙزار دی اکسیژن ";
- if (s) result+=(QCString)" برای "+s;
- result+=" از کد برنامه ";
- return result;
- }
-
- /*! put after an enum name in the list of all members */
- virtual QCString trEnumName()
- { return "enum نام"; }
-
- /*! put after an enum value in the list of all members */
- virtual QCString trEnumValue()
- { return "enum مقدار"; }
-
- /*! put after an undocumented member in the list of all members */
- virtual QCString trDefinedIn()
- { return "تعری٠شده در"; }
-
- // quick reference sections
-
- /*! This is put above each page as a link to the list of all groups of
- * compounds or files (see the \\group command).
- */
- virtual QCString trModules()
- { return "Modules"; }
-
- /*! This is put above each page as a link to the class hierarchy */
- virtual QCString trClassHierarchy()
- { return "سلسله مراتب کلاس ها"; }
-
- /*! This is put above each page as a link to the list of annotated classes */
- virtual QCString trCompoundList()
- {
- if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
- {
- return "ساختار های داده ";
- }
- else
- {
- return "ليست کلاس ها ";
- }
- }
-
- /*! This is put above each page as a link to the list of documented files */
- virtual QCString trFileList()
- { return "ليست Ùايل ها"; }
-
- /*! This is put above each page as a link to all members of compounds. */
- virtual QCString trCompoundMembers()
- {
- if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
- {
- return "Ùضاهای داده ها";
- }
- else
- {
- return "اعضاء کلاس ها";
- }
- }
-
- /*! This is put above each page as a link to all members of files. */
- virtual QCString trFileMembers()
- {
- if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
- {
- return "Globals";
- }
- else
- {
- return "اعضاء پرونده";
- }
- }
-
- /*! This is put above each page as a link to all related pages. */
- virtual QCString trRelatedPages()
- { return "صÙحات مربوط"; }
-
- /*! This is put above each page as a link to all examples. */
- virtual QCString trExamples()
- { return "مثال ها"; }
-
- /*! This is put above each page as a link to the search engine. */
- virtual QCString trSearch()
- { return "جستجو"; }
-
- /*! This is an introduction to the class hierarchy. */
- virtual QCString trClassHierarchyDescription()
- { return "ليست و سلسله مراتب درختی کلاس ها به صورت مرتب شده :";
- }
-
- /*! This is an introduction to the list with all files. */
- virtual QCString trFileListDescription(bool extractAll)
- {
- QCString result="ليست همه ي پرونده های ";
- if (!extractAll) result+="(مستند شده) ";
- result+=" :";
- return result;
- }
-
- /*! This is an introduction to the annotated compound list. */
- virtual QCString trCompoundListDescription()
- {
-
- if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
- {
- return "ليست ساختارهای داده به همراه توضيحی کوتاه :";
- }
- else
- {
- return "ليست کلاس ها ، ساختارهای داده و ... به همراه توضيحات مختصر راجع به آنها :";
- }
- }
-
- /*! This is an introduction to the page with all class members. */
- virtual QCString trCompoundMembersDescription(bool extractAll)
- {
- QCString result=" در ذيل ليست ";
- if (!extractAll)
- {
- result+="آن اعضايي که مستند شده اند ";
- }
- else
- {
- result+="همه ی اعضاء ";
- }
- result+=" به همراه ارتباطشان با ";
- if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
- {
- result+="ساختارهای داده ";
- }
- else
- {
- result+="كلاس ها ";
- }
-
- if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
- {
- result+="و مستندات ساختار داده برای هر عضو ";
- }
- else
- {
- result+="و مستندات کلاس برای هر عضو ";
- }
- result+="را مشاهده ميکنيد :";
- return result;
- }
-
- /*! This is an introduction to the page with all file members. */
- virtual QCString trFileMembersDescription(bool extractAll)
- {
- QCString result="ليست همه ی توابع ، متغيير ها، تعاري٠و ... ";
- if (!extractAll) result+="(مستند شده) ";
-
- result+=" به همراه ارتباط آنها ";
- result+="با پرونده هايی که به آن مربوط اند :";
- return result;
- }
-
- /*! This is an introduction to the page with the list of all examples */
- virtual QCString trExamplesDescription()
- { return "ليست همه ی مثال ها :"; }
-
- /*! This is an introduction to the page with the list of related pages */
- virtual QCString trRelatedPagesDescription()
- { return "لیست تمام صÙحات Ùˆ مستندات مربوطه :"; }
-
- /*! This is an introduction to the page with the list of class/file groups */
- virtual QCString trModulesDescription()
- { return "لیست تمام ماژول ها:"; }
-
- // index titles (the project name is prepended for these)
-
-
- /*! This is used in HTML as the title of index.html. */
- virtual QCString trDocumentation()
- { return "مستندات"; }
-
- /*! This is used in LaTeX as the title of the chapter with the
- * index of all groups.
- */
- virtual QCString trModuleIndex()
- { return "Ùهرست ماژول ها"; }
-
- /*! This is used in LaTeX as the title of the chapter with the
- * class hierarchy.
- */
- virtual QCString trHierarchicalIndex()
- { return "Ùهرست سلسله مراتب"; }
-
- /*! This is used in LaTeX as the title of the chapter with the
- * annotated compound index.
- */
- virtual QCString trCompoundIndex()
- {
- if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
- {
- return "Ùهرست ساختار داده ها";
- }
- else
- {
- return "Ùهرست کلاس های";
- }
- }
-
- /*! This is used in LaTeX as the title of the chapter with the
- * list of all files.
- */
- virtual QCString trFileIndex()
- { return "Ùهرست پرونده ها"; }
-
- /*! This is used in LaTeX as the title of the chapter containing
- * the documentation of all groups.
- */
- virtual QCString trModuleDocumentation()
- { return "مستندات ماژول"; }
-
- /*! This is used in LaTeX as the title of the chapter containing
- * the documentation of all classes, structs and unions.
- */
- virtual QCString trClassDocumentation()
- {
- if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
- {
- return "مستندات ساختار داده ها";
- }
- else
- {
- return "مستندات کلاس ها";
- }
- }
-
- /*! This is used in LaTeX as the title of the chapter containing
- * the documentation of all files.
- */
- virtual QCString trFileDocumentation()
- { return "مستندات Ùایل"; }
-
- /*! This is used in LaTeX as the title of the chapter containing
- * the documentation of all examples.
- */
- virtual QCString trExampleDocumentation()
- { return "مستندات مثال"; }
-
- /*! This is used in LaTeX as the title of the chapter containing
- * the documentation of all related pages.
- */
- virtual QCString trPageDocumentation()
- { return "مستندات صÙحه"; }
-
- /*! This is used in LaTeX as the title of the document */
- virtual QCString trReferenceManual()
- { return "راهنمای مرجع"; }
-
- /*! This is used in the documentation of a file as a header before the
- * list of defines
- */
- virtual QCString trDefines()
- { return "تعاريÙ"; }
-
- /*! This is used in the documentation of a file as a header before the
- * list of function prototypes
- */
- virtual QCString trFuncProtos()
- { return "پیش تعری٠های توابع"; }
-
- /*! This is used in the documentation of a file as a header before the
- * list of typedefs
- */
- virtual QCString trTypedefs()
- { return "تعری٠گونه ها"; }
-
- /*! This is used in the documentation of a file as a header before the
- * list of enumerations
- */
- virtual QCString trEnumerations()
- { return "تعاريÙ"; }
-
- /*! This is used in the documentation of a file as a header before the
- * list of (global) functions
- */
- virtual QCString trFunctions()
- { return "توابع"; }
-
- /*! This is used in the documentation of a file as a header before the
- * list of (global) variables
- */
- virtual QCString trVariables()
- { return "متغيير ها"; }
-
- /*! This is used in the documentation of a file as a header before the
- * list of (global) variables
- */
- virtual QCString trEnumerationValues()
- { return "معر٠ها"; }
-
- /*! This is used in the documentation of a file before the list of
- * documentation blocks for defines
- */
- virtual QCString trDefineDocumentation()
- { return "Define Documentation"; }
-
- /*! This is used in the documentation of a file/namespace before the list
- * of documentation blocks for function prototypes
- */
- virtual QCString trFunctionPrototypeDocumentation()
- { return "مستندات تعاری٠اولیه توابع"; }
-
- /*! This is used in the documentation of a file/namespace before the list
- * of documentation blocks for typedefs
- */
- virtual QCString trTypedefDocumentation()
- { return "Typedef"; }
-
- /*! This is used in the documentation of a file/namespace before the list
- * of documentation blocks for enumeration types
- */
- virtual QCString trEnumerationTypeDocumentation()
- { return "مستندات تعريÙ"; }
-
- /*! This is used in the documentation of a file/namespace before the list
- * of documentation blocks for enumeration values
- */
- virtual QCString trEnumerationValueDocumentation()
- { return "مستندات معرÙ"; }
-
- /*! This is used in the documentation of a file/namespace before the list
- * of documentation blocks for functions
- */
- virtual QCString trFunctionDocumentation()
- { return "توضيح تابع"; }
-
- /*! This is used in the documentation of a file/namespace before the list
- * of documentation blocks for variables
- */
- virtual QCString trVariableDocumentation()
- { return "توضيح متغير"; }
-
- /*! This is used in the documentation of a file/namespace/group before
- * the list of links to documented compounds
- */
- virtual QCString trCompounds()
- {
- if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
- {
- return "ساختارهای داده";
- }
- else
- {
- return "کلاس ها";
- }
- }
-
- /*! This is used in the standard footer of each page and indicates when
- * the page was generated
- */
- virtual QCString trGeneratedAt(const char *date,const char *projName)
- {
- QCString result = HtmlDivEnd + HtmlRightToLeft + QCString("توليد شده در ") +date ;
- if (projName) result+=(QCString)" برای "+projName;
- result+=(QCString)" توسط";
- return result;
- }
- /*! This is part of the sentence used in the standard footer of each page.
- */
- virtual QCString trWrittenBy()
- {
- return "نوشته شده توسط";
- }
-
- /*! this text is put before a class diagram */
- virtual QCString trClassDiagram(const char *clName)
- {
- return (QCString)""+clName+" نمودار وراثت برای :";
- }
-
- /*! this text is generated when the \\internal command is used. */
- virtual QCString trForInternalUseOnly()
- { return ".Ùقط برای استعمال داخلی"; }
-
- /*! this text is generated when the \\warning command is used. */
- virtual QCString trWarning()
- { return "اخطار"; }
-
- /*! this text is generated when the \\version command is used. */
- virtual QCString trVersion()
- { return "نسخه"; }
-
- /*! this text is generated when the \\date command is used. */
- virtual QCString trDate()
- { return "تاريخ"; }
-
- /*! this text is generated when the \\return command is used. */
- virtual QCString trReturns()
- { return "خروجی"; }
-
- /*! this text is generated when the \\sa command is used. */
- virtual QCString trSeeAlso()
- { return "See also"; }
-
- /*! this text is generated when the \\param command is used. */
- virtual QCString trParameters()
- { return "پارامترها"; }
-
- /*! this text is generated when the \\exception command is used. */
- virtual QCString trExceptions()
- { return "استثناء ها"; }
-
- /*! this text is used in the title page of a LaTeX document. */
- virtual QCString trGeneratedBy()
- { return "توليد شده توسط"; }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 0.49-990307
-//////////////////////////////////////////////////////////////////////////
-
- /*! used as the title of page containing all the index of all namespaces. */
- virtual QCString trNamespaceList()
- { return "ليست Ùضاهای نام"; }
-
- /*! used as an introduction to the namespace list */
- virtual QCString trNamespaceListDescription(bool extractAll)
- {
- QCString result="در ذيل ليستی از همه ÛŒ Ùضاهای نام ";
- if (!extractAll) result+="(مستند سازی شده) ";
- result+="به همراه توضيح کوتاه آنها مشاهده می کنيد :";
- return result;
- }
-
- /*! used in the class documentation as a header before the list of all
- * friends of a class
- */
- virtual QCString trFriends()
- { return "کلاس های دوست"; }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 0.49-990405
-//////////////////////////////////////////////////////////////////////////
-
- /*! used in the class documentation as a header before the list of all
- * related classes
- */
- virtual QCString trRelatedFunctionDocumentation()
- { return "مستندات توابع مربوط و دوست"; }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 0.49-990425
-//////////////////////////////////////////////////////////////////////////
-
- /*! used as the title of the HTML page of a class/struct/union */
- virtual QCString trCompoundReference(const char *clName,
- ClassDef::CompoundType compType,
- bool isTemplate)
- {
- QCString result;
- switch(compType)
- {
- case ClassDef::Class: result=" کلاس"; break;
- case ClassDef::Struct: result=" ساختار داده"; break;
- case ClassDef::Union: result=" Union"; break;
- case ClassDef::Interface: result=" Interface"; break;
- case ClassDef::Protocol: result=" Protocol"; break;
- case ClassDef::Category: result=" Category"; break;
- case ClassDef::Exception: result=" استثناء"; break;
- }
- if (isTemplate) result+=" قالب";
- result=QCString(clName) + " مرجع" +result ;
- return result;
- }
-
- /*! used as the title of the HTML page of a file */
- virtual QCString trFileReference(const char *fileName)
- {
- QCString result=fileName;
- result+=" مرجع پرونده";
- return result;
- }
-
- /*! used as the title of the HTML page of a namespace */
- virtual QCString trNamespaceReference(const char *namespaceName)
- {
- QCString result=namespaceName;
- result+=" مرجع Ùضای نام";
- return result;
- }
-
- virtual QCString trPublicMembers()
- { return "توابع عمومی عضو کلاس"; }
- virtual QCString trPublicSlots()
- { return "های عمومی Slot"; }
- virtual QCString trSignals()
- { return "سيگنال ها"; }
- virtual QCString trStaticPublicMembers()
- { return "توابع ثابت عمومی عضو کلاس"; }
- virtual QCString trProtectedMembers()
- { return "توابع خصوصی عضو کلاس"; }
- virtual QCString trProtectedSlots()
- { return "های محاÙظت شده Slot"; }
- virtual QCString trStaticProtectedMembers()
- { return "توابع ثابت محاÙظت شده عضو کلاس"; }
- virtual QCString trPrivateMembers()
- { return "توابع خصوصی عضو کلاس"; }
- virtual QCString trPrivateSlots()
- { return "های خصوصی Slot"; }
- virtual QCString trStaticPrivateMembers()
- { return "توابع خصوصی ثابت عضو کلاس"; }
-
- /*! this function is used to produce a comma-separated list of items.
- * use generateMarker(i) to indicate where item i should be put.
- */
- virtual QCString trWriteList(int numEntries)
- {
- QCString result;
- int i;
- // the inherits list contain `numEntries' classes
- for (i=0;i<numEntries;i++)
- {
- // use generateMarker to generate placeholders for the class links!
- result+=generateMarker(i); // generate marker for entry i in the list
- // (order is left to right)
-
- if (i!=numEntries-1) // not the last entry, so we need a separator
- {
- if (i<numEntries-2) // not the fore last entry
- result+=", ";
- else // the fore last entry
- result+=" Ùˆ ";
- }
- }
- return result;
- }
-
- /*! used in class documentation to produce a list of base classes,
- * if class diagrams are disabled.
- */
- virtual QCString trInheritsList(int numEntries)
- {
- return ".را به ارث می برد "+trWriteList(numEntries)+".";
- }
-
- /*! used in class documentation to produce a list of super classes,
- * if class diagrams are disabled.
- */
- virtual QCString trInheritedByList(int numEntries)
- {
- return ".اين کلاس را به ارث برده است "+trWriteList(numEntries)+".";
- }
-
- /*! used in member documentation blocks to produce a list of
- * members that are hidden by this one.
- */
- virtual QCString trReimplementedFromList(int numEntries)
- {
- return "Reimplemented from "+trWriteList(numEntries)+".";
- }
-
- /*! used in member documentation blocks to produce a list of
- * all member that overwrite the implementation of this member.
- */
- virtual QCString trReimplementedInList(int numEntries)
- {
- return "تعری٠شده است "+trWriteList(numEntries)+"دوباره در ";
- }
-
- /*! This is put above each page as a link to all members of namespaces. */
- virtual QCString trNamespaceMembers()
- { return "اعضای Ùضاهای نام"; }
-
- /*! This is an introduction to the page with all namespace members */
- virtual QCString trNamespaceMemberDescription(bool extractAll)
- {
- QCString result="ليست همه اعضای Ùضای نام ";
- if (!extractAll) result+="(مستند شده) ";
- result+=" با ارتباطشان با";
- result+="Ùضاهای نامی Ú©Ù‡ به آن مربوط اند را مشاهده ميکنيد :";
- return result;
- }
- /*! This is used in LaTeX as the title of the chapter with the
- * index of all namespaces.
- */
- virtual QCString trNamespaceIndex()
- { return "Ùهرست Ùضاهای نام"; }
-
- /*! This is used in LaTeX as the title of the chapter containing
- * the documentation of all namespaces.
- */
- virtual QCString trNamespaceDocumentation()
- { return "توضيحات Ùضای نام"; }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 0.49-990522
-//////////////////////////////////////////////////////////////////////////
-
- /*! This is used in the documentation before the list of all
- * namespaces in a file.
- */
- virtual QCString trNamespaces()
- { return "Ùضاهای نام"; }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 0.49-990728
-//////////////////////////////////////////////////////////////////////////
-
- /*! This is put at the bottom of a class documentation page and is
- * followed by a list of files that were used to generate the page.
- */
- virtual QCString trGeneratedFromFiles(ClassDef::CompoundType compType,
- bool single)
- { // here s is one of " Class", " Struct" or " Union"
- // single is true implies a single file
- QCString result=(QCString)"مستندات اين ";
- switch(compType)
- {
- case ClassDef::Class: result+="کلاس"; break;
- case ClassDef::Struct: result+="ساختار داده"; break;
- case ClassDef::Union: result+="union"; break;
- case ClassDef::Interface: result+="interface"; break;
- case ClassDef::Protocol: result+="protocol"; break;
- case ClassDef::Category: result+="category"; break;
- case ClassDef::Exception: result+="exception"; break;
- }
- result+=" از روی پرونده ";
- if (single) result+=""; else result+="های ";
- result+="زير توليد شده است :";
- return result;
- }
-
- /*! This is in the (quick) index as a link to the alphabetical compound
- * list.
- */
- virtual QCString trAlphabeticalList()
- { return "ليست الÙبايي"; }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 0.49-990901
-//////////////////////////////////////////////////////////////////////////
-
- /*! This is used as the heading text for the retval command. */
- virtual QCString trReturnValues()
- { return "مقادير بازگشتی"; }
-
- /*! This is in the (quick) index as a link to the main page (index.html)
- */
- virtual QCString trMainPage()
- { return "صÙحه ÛŒ اصلی"; }
-
- /*! This is used in references to page that are put in the LaTeX
- * documentation. It should be an abbreviation of the word page.
- */
- virtual QCString trPageAbbreviation()
- { return "ص."; }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 0.49-991003
-//////////////////////////////////////////////////////////////////////////
- virtual QCString trDefinedAtLineInSourceFile()
- {
- return ".در خط @0 از پرونده @1 تعري٠شده است";
- }
- virtual QCString trDefinedInSourceFile()
- {
- return ".در Ùايل @0 تعري٠شده است";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 0.49-991205
-//////////////////////////////////////////////////////////////////////////
-
- virtual QCString trDeprecated()
- {
- return "منسوخ شده";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.0.0
-//////////////////////////////////////////////////////////////////////////
-
- /*! this text is put before a collaboration diagram */
- virtual QCString trCollaborationDiagram(const char *clName)
- {
- return (QCString)"Collaboration diagram for "+clName+":";
- }
- /*! this text is put before an include dependency graph */
- virtual QCString trInclDepGraph(const char *fName)
- {
- return (QCString)"نمودار شامل شدن ها برای "+fName+":";
- }
- /*! header that is put before the list of constructor/destructors. */
- virtual QCString trConstructorDocumentation()
- {
- return "مستندات توباع آغازین و پایانی";
- }
- /*! Used in the file documentation to point to the corresponding sources. */
- virtual QCString trGotoSourceCode()
- {
- return "کد منبع اين پرونده.";
- }
- /*! Used in the file sources to point to the corresponding documentation. */
- virtual QCString trGotoDocumentation()
- {
- return "توضيحات اين پرونده.";
- }
- /*! Text for the \\pre command */
- virtual QCString trPrecondition()
- {
- return "پیش شرط";
- }
- /*! Text for the \\post command */
- virtual QCString trPostcondition()
- {
- return "پس شرط";
- }
- /*! Text for the \\invariant command */
- virtual QCString trInvariant()
- {
- return "Invariant";
- }
- /*! Text shown before a multi-line variable/enum initialization */
- virtual QCString trInitialValue()
- {
- return "مقدار اوليه :";
- }
- /*! Text used the source code in the file index */
- virtual QCString trCode()
- {
- return "کد";
- }
- virtual QCString trGraphicalHierarchy()
- {
- return "سلسله مراتب گراÙÙŠÚ©ÛŒ کلاس";
- }
- virtual QCString trGotoGraphicalHierarchy()
- {
- return "نمایش نمودار درختی گراÙیکی کلاس";
- }
- virtual QCString trGotoTextualHierarchy()
- {
- return "نمایش نمودار درختی متنی کلاس";
- }
- virtual QCString trPageIndex()
- {
- return "Ùهرست صÙحات";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.1.0
-//////////////////////////////////////////////////////////////////////////
-
- virtual QCString trNote()
- {
- return "نکته";
- }
- virtual QCString trPublicTypes()
- {
- return "های عمومی Type";
- }
- virtual QCString trPublicAttribs()
- {
- if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
- {
- return "Ùضاهای داده ها";
- }
- else
- {
- return "خواص (متغييرهای) عمومی";
- }
- }
- virtual QCString trStaticPublicAttribs()
- {
- return "خواص (متغييرهای) عمومی ثابت";
- }
- virtual QCString trProtectedTypes()
- {
- return "های Ø­Ùاظت شده Type";
- }
- virtual QCString trProtectedAttribs()
- {
- return "خواص (متغييرهای) Ø­Ùاظت شده";
- }
- virtual QCString trStaticProtectedAttribs()
- {
- return "خواص (متغييرهای) Ø­Ùاظت شده ثابت";
- }
- virtual QCString trPrivateTypes()
- {
- return "های خصوصی Type";
- }
- virtual QCString trPrivateAttribs()
- {
- return "خواص (متغييرهای) خصوصی";
- }
- virtual QCString trStaticPrivateAttribs()
- {
- return "خواص (متغييرهای) خصوصی ثابت";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.1.3
-//////////////////////////////////////////////////////////////////////////
-
- /*! Used as a marker that is put before a \\todo item */
- virtual QCString trTodo()
- {
- return "برای انجام";
- }
- /*! Used as the header of the todo list */
- virtual QCString trTodoList()
- {
- return "ليست کارهاي آينده";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.1.4
-//////////////////////////////////////////////////////////////////////////
-
- virtual QCString trReferencedBy()
- {
- return " استÙاده شده توسط ";
- }
- virtual QCString trRemarks()
- {
- return "ملاحظات";
- }
- virtual QCString trAttention()
- {
- return "توجه";
- }
- virtual QCString trInclByDepGraph()
- {
- return "این نمودار Ùایل هایی را Ú©Ù‡ این Ùایل را به طور مستقیم یا غیر مستقیم استÙاده کرده اند نشان Ù…ÛŒ دهد";
- }
- virtual QCString trSince()
- {
- return "از";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.1.5
-//////////////////////////////////////////////////////////////////////////
-
- /*! title of the graph legend page */
- virtual QCString trLegendTitle()
- {
- return "راهنمای نمودار";
- }
- /*! page explaining how the dot graph's should be interpreted
- * The %A in the text below are to prevent link to classes called "A".
- */
- virtual QCString trLegendDocs()
- {
- return
- "This page explains how to interpret the graphs that are generated "
- "by doxygen.<p>\n"
- "Consider the following example:\n"
- "\\code\n"
- "/*! Invisible class because of truncation */\n"
- "class Invisible { };\n\n"
- "/*! Truncated class, inheritance relation is hidden */\n"
- "class Truncated : public Invisible { };\n\n"
- "/* Class not documented with doxygen comments */\n"
- "class Undocumented { };\n\n"
- "/*! Class that is inherited using public inheritance */\n"
- "class PublicBase : public Truncated { };\n\n"
- "/*! A template class */\n"
- "template<class T> class Templ { };\n\n"
- "/*! Class that is inherited using protected inheritance */\n"
- "class ProtectedBase { };\n\n"
- "/*! Class that is inherited using private inheritance */\n"
- "class PrivateBase { };\n\n"
- "/*! Class that is used by the Inherited class */\n"
- "class Used { };\n\n"
- "/*! Super class that inherits a number of other classes */\n"
- "class Inherited : public PublicBase,\n"
- " protected ProtectedBase,\n"
- " private PrivateBase,\n"
- " public Undocumented\n"
- " public Templ<int>\n"
- "{\n"
- " private:\n"
- " Used *m_usedClass;\n"
- "};\n"
- "\\endcode\n"
- "If the \\c MAX_DOT_GRAPH_HEIGHT tag in the configuration file "
- "is set to 240 this will result in the following graph:"
- "<p><center><img alt=\"\" src=\"graph_legend."+Config_getEnum("DOT_IMAGE_FORMAT")+"\"></center>\n"
- "<p>\n"
- "The boxes in the above graph have the following meaning:\n"
- "<ul>\n"
- "<li>%A filled black box represents the struct or class for which the "
- "graph is generated.\n"
- "<li>%A box with a black border denotes a documented struct or class.\n"
- "<li>%A box with a grey border denotes an undocumented struct or class.\n"
- "<li>%A box with a red border denotes a documented struct or class for"
- "which not all inheritance/containment relations are shown. %A graph is "
- "truncated if it does not fit within the specified boundaries.\n"
- "</ul>\n"
- "The arrows have the following meaning:\n"
- "<ul>\n"
- "<li>%A dark blue arrow is used to visualize a public inheritance "
- "relation between two classes.\n"
- "<li>%A dark green arrow is used for protected inheritance.\n"
- "<li>%A dark red arrow is used for private inheritance.\n"
- "<li>%A purple dashed arrow is used if a class is contained or used "
- "by another class. The arrow is labeled with the variable(s) "
- "through which the pointed class or struct is accessible.\n"
- "<li>%A yellow dashed arrow denotes a relation between a template instance and "
- "the template class it was instantiated from. The arrow is labeled with "
- "the template parameters of the instance.\n"
- "</ul>\n";
- }
- /*! text for the link to the legend page */
- virtual QCString trLegend()
- {
- return "راهنما";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.2.0
-//////////////////////////////////////////////////////////////////////////
-
- /*! Used as a marker that is put before a test item */
- virtual QCString trTest()
- {
- return "تست";
- }
- /*! Used as the header of the test list */
- virtual QCString trTestList()
- {
- return "Test List";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.2.1
-//////////////////////////////////////////////////////////////////////////
-
- /*! Used as a section header for KDE-2 IDL methods */
- virtual QCString trDCOPMethods()
- {
- return "DCOP توابع عضو";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.2.2
-//////////////////////////////////////////////////////////////////////////
-
- /*! Used as a section header for IDL properties */
- virtual QCString trProperties()
- {
- return "خاصیت ها";
- }
- /*! Used as a section header for IDL property documentation */
- virtual QCString trPropertyDocumentation()
- {
- return "مستندات خاصیت";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.2.4
-//////////////////////////////////////////////////////////////////////////
-
- /*! Used for Java classes in the summary section of Java packages */
- virtual QCString trClasses()
- {
- if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
- {
- return "ساختار های داده";
- }
- else
- {
- return "كلاس ها";
- }
- }
- /*! Used as the title of a Java package */
- virtual QCString trPackage(const char *name)
- {
- return (QCString)"Package "+name;
- }
- /*! Title of the package index page */
- virtual QCString trPackageList()
- {
- return "لیست بسته ها";
- }
- /*! The description of the package index page */
- virtual QCString trPackageListDescription()
- {
- return "لیست بسته ها به همراه توضیح مختر در صورت وجود :";
- }
- /*! The link name in the Quick links header for each page */
- virtual QCString trPackages()
- {
- return "بسته ها";
- }
- /*! Text shown before a multi-line define */
- virtual QCString trDefineValue()
- {
- return "مقدار:";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.2.5
-//////////////////////////////////////////////////////////////////////////
-
- /*! Used as a marker that is put before a \\bug item */
- virtual QCString trBug()
- {
- return "اشکال";
- }
- /*! Used as the header of the bug list */
- virtual QCString trBugList()
- {
- return "ليست اشکالات";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.2.6
-//////////////////////////////////////////////////////////////////////////
-
- /*! Used as ansicpg for RTF file
- *
- * The following table shows the correlation of Charset name, Charset Value and
- * <pre>
- * Codepage number:
- * Charset Name Charset Value(hex) Codepage number
- * ------------------------------------------------------
- * DEFAULT_CHARSET 1 (x01)
- * SYMBOL_CHARSET 2 (x02)
- * OEM_CHARSET 255 (xFF)
- * ANSI_CHARSET 0 (x00) 1252
- * RUSSIAN_CHARSET 204 (xCC) 1251
- * EE_CHARSET 238 (xEE) 1250
- * GREEK_CHARSET 161 (xA1) 1253
- * TURKISH_CHARSET 162 (xA2) 1254
- * BALTIC_CHARSET 186 (xBA) 1257
- * HEBREW_CHARSET 177 (xB1) 1255
- * ARABIC _CHARSET 178 (xB2) 1256
- * SHIFTJIS_CHARSET 128 (x80) 932
- * HANGEUL_CHARSET 129 (x81) 949
- * GB2313_CHARSET 134 (x86) 936
- * CHINESEBIG5_CHARSET 136 (x88) 950
- * </pre>
- *
- */
- virtual QCString trRTFansicp()
- {
- return "1256";
- }
-
-
- /*! Used as ansicpg for RTF fcharset
- * \see trRTFansicp() for a table of possible values.
- */
- virtual QCString trRTFCharSet()
- {
- return "0";
- }
-
- /*! Used as header RTF general index */
- virtual QCString trRTFGeneralIndex()
- {
- return "Ùهرست";
- }
-
- /*! This is used for translation of the word that will possibly
- * be followed by a single name or by a list of names
- * of the category.
- */
- virtual QCString trClass(bool first_capital, bool singular)
- {
- QCString result((first_capital ? "کلاس" : "کلاس"));
- if (!singular) result+="ها";
- return result;
- }
-
- /*! This is used for translation of the word that will possibly
- * be followed by a single name or by a list of names
- * of the category.
- */
- virtual QCString trFile(bool /*first_capital*/, bool singular)
- {
- QCString result("پرونده");
- if (!singular) result=result+" ها";
- return result;
- }
-
- /*! This is used for translation of the word that will possibly
- * be followed by a single name or by a list of names
- * of the category.
- */
- virtual QCString trNamespace(bool first_capital, bool singular)
- {
- QCString result((first_capital ? "Ùضای نام " : "Ùضای نام "));
- if (!singular) result+="ها";
- return result;
- }
-
- /*! This is used for translation of the word that will possibly
- * be followed by a single name or by a list of names
- * of the category.
- */
- virtual QCString trGroup(bool first_capital, bool singular)
- {
- QCString result((first_capital ? "Group" : "group"));
- if (!singular) result+="s";
- return result;
- }
-
- /*! This is used for translation of the word that will possibly
- * be followed by a single name or by a list of names
- * of the category.
- */
- virtual QCString trPage(bool first_capital, bool singular)
- {
- QCString result((first_capital ? "صÙحه" : "صÙحه"));
- if (!singular) result+=" ها ";
- return result;
- }
-
- /*! This is used for translation of the word that will possibly
- * be followed by a single name or by a list of names
- * of the category.
- */
- virtual QCString trMember(bool first_capital, bool singular)
- {
- QCString result((first_capital ? "عضو" : "عضو"));
- if (!singular) result+="ها";
- return result;
- }
-
- /*! This is used for translation of the word that will possibly
- * be followed by a single name or by a list of names
- * of the category.
- */
- virtual QCString trGlobal(bool first_capital, bool singular)
- {
- QCString result((first_capital ? "Global" : "global"));
- if (!singular) result+="s";
- return result;
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.2.7
-//////////////////////////////////////////////////////////////////////////
-
- /*! This text is generated when the \\author command is used and
- * for the author section in man pages. */
- virtual QCString trAuthor(bool first_capital, bool singular)
- {
- QCString result((first_capital ? "Author" : "author"));
- if (!singular) result+="s";
- return result;
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.2.11
-//////////////////////////////////////////////////////////////////////////
-
- /*! This text is put before the list of members referenced by a member
- */
- virtual QCString trReferences()
- {
- return "را استÙاده ميکند ";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.2.13
-//////////////////////////////////////////////////////////////////////////
-
- /*! used in member documentation blocks to produce a list of
- * members that are implemented by this one.
- */
- virtual QCString trImplementedFromList(int numEntries)
- {
- return "را تکميل می کند "+trWriteList(numEntries)+".";
- }
-
- /*! used in member documentation blocks to produce a list of
- * all members that implement this abstract member.
- */
- virtual QCString trImplementedInList(int numEntries)
- {
- return ".تکميل شده است "+trWriteList(numEntries)+" در";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.2.16
-//////////////////////////////////////////////////////////////////////////
-
- /*! used in RTF documentation as a heading for the Table
- * of Contents.
- */
- virtual QCString trRTFTableOfContents()
- {
- return "Ùهرست";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.2.17
-//////////////////////////////////////////////////////////////////////////
-
- /*! Used as the header of the list of item that have been
- * flagged deprecated
- */
- virtual QCString trDeprecatedList()
- {
- return "لیست آیتم های از رده خارج";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.2.18
-//////////////////////////////////////////////////////////////////////////
-
- /*! Used as a header for declaration section of the events found in
- * a C# program
- */
- virtual QCString trEvents()
- {
- return "رویداد ها";
- }
- /*! Header used for the documentation section of a class' events. */
- virtual QCString trEventDocumentation()
- {
- return "مستندات رویداد";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.3
-//////////////////////////////////////////////////////////////////////////
-
- /*! Used as a heading for a list of Java class types with package scope.
- */
- virtual QCString trPackageTypes()
- {
- return "انواع بسته ها";
- }
- /*! Used as a heading for a list of Java class functions with package
- * scope.
- */
- virtual QCString trPackageMembers()
- {
- return "توابع بسته ها";
- }
- /*! Used as a heading for a list of static Java class functions with
- * package scope.
- */
- virtual QCString trStaticPackageMembers()
- {
- return "Static Package Functions";
- }
- /*! Used as a heading for a list of Java class variables with package
- * scope.
- */
- virtual QCString trPackageAttribs()
- {
- return "خواص بسته ها";
- }
- /*! Used as a heading for a list of static Java class variables with
- * package scope.
- */
- virtual QCString trStaticPackageAttribs()
- {
- return "Static Package Attributes";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.3.1
-//////////////////////////////////////////////////////////////////////////
-
- /*! Used in the quick index of a class/file/namespace member list page
- * to link to the unfiltered list of all members.
- */
- virtual QCString trAll()
- {
- return "همه";
- }
- /*! Put in front of the call graph for a function. */
- virtual QCString trCallGraph()
- {
- return "نمودار صدا زدن برای این تابع :";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.3.3
-//////////////////////////////////////////////////////////////////////////
-
- /*! When the search engine is enabled this text is put in the header
- * of each page before the field where one can enter the text to search
- * for.
- */
- virtual QCString trSearchForIndex()
- {
- return "جستجو برای";
- }
- /*! This string is used as the title for the page listing the search
- * results.
- */
- virtual QCString trSearchResultsTitle()
- {
- return "نتايج جستجو";
- }
- /*! This string is put just before listing the search results. The
- * text can be different depending on the number of documents found.
- * Inside the text you can put the special marker $num to insert
- * the number representing the actual number of search results.
- * The @a numDocuments parameter can be either 0, 1 or 2, where the
- * value 2 represents 2 or more matches. HTML markup is allowed inside
- * the returned string.
- */
- virtual QCString trSearchResults(int numDocuments)
- {
- if (numDocuments==0)
- {
- return "متاسÙانه هیچ صÙحه ای برای جستجو ÛŒ شما یاÙت نشد.";
- }
- else if (numDocuments==1)
- {
- return "یک سند برای این مورد یاÙت شد.";
- }
- else
- {
- return "Found <b>$num</b> documents matching your query. "
- "Showing best matches first.";
- }
- }
- /*! This string is put before the list of matched words, for each search
- * result. What follows is the list of words that matched the query.
- */
- virtual QCString trSearchMatches()
- {
- return "Matches:";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.3.8
-//////////////////////////////////////////////////////////////////////////
-
- /*! This is used in HTML as the title of page with source code for file filename
- */
- virtual QCString trSourceFile(QCString& filename)
- {
- return filename + " کد و پرونده منبع";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.3.9
-//////////////////////////////////////////////////////////////////////////
-
- /*! This is used as the name of the chapter containing the directory
- * hierarchy.
- */
- virtual QCString trDirIndex()
- { return "ساختار و سلسله مراتب شاخه ها"; }
-
- /*! This is used as the name of the chapter containing the documentation
- * of the directories.
- */
- virtual QCString trDirDocumentation()
- { return "مستندات دايرکتوری"; }
-
- /*! This is used as the title of the directory index and also in the
- * Quick links of an HTML page, to link to the directory hierarchy.
- */
- virtual QCString trDirectories()
- { return "شاخه ها"; }
-
- /*! This returns a sentences that introduces the directory hierarchy.
- * and the fact that it is sorted alphabetically per level
- */
- virtual QCString trDirDescription()
- { return "در ذيل ساختار شاخه ها و دايرکتوری ها را نسبتا مرتب شده می بينيد :";
- }
-
- /*! This returns the title of a directory page. The name of the
- * directory is passed via \a dirName.
- */
- virtual QCString trDirReference(const char *dirName)
- { QCString result=dirName; result+=" مرجع شاخه ی"; return result; }
-
- /*! This returns the word directory with or without starting capital
- * (\a first_capital) and in sigular or plural form (\a singular).
- */
- virtual QCString trDir(bool /*first_capital*/, bool singular)
- {
- QCString result("شاخه");
- if (singular) result+=" ها "+result;
- return result;
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.4.1
-//////////////////////////////////////////////////////////////////////////
-
- /*! This text is added to the documentation when the \\overload command
- * is used for a overloaded function.
- */
- virtual QCString trOverloadText()
- {
- return "This is an overloaded member function, "
- "provided for convenience. It differs from the above "
- "function only in what argument(s) it accepts.";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.4.6
-//////////////////////////////////////////////////////////////////////////
-
- /*! This is used to introduce a caller (or called-by) graph */
- virtual QCString trCallerGraph()
- {
- return "نمودار صدا زننده های این تابع:";
- }
-//////////////////////////////////////////////////////////////////////////
-// new since 1.5.4 (mainly for Fortran)
-//////////////////////////////////////////////////////////////////////////
-
- /*! header that is put before the list of member subprograms (Fortran). */
- virtual QCString trMemberFunctionDocumentationFortran()
- { return "مستندات توابع عضو"; }
-
- /*! This is put above each page as a link to the list of annotated data types (Fortran). */
- virtual QCString trCompoundListFortran()
- { return "لیست ساختار های داده"; }
-
- /*! This is put above each page as a link to all members of compounds (Fortran). */
- virtual QCString trCompoundMembersFortran()
- { return "Ùیلدهای اطلاعات"; }
-
- /*! This is an introduction to the annotated compound list (Fortran). */
- virtual QCString trCompoundListDescriptionFortran()
- { return "ساختارهای داده به همراه توضیح کوتاه :"; }
-
- /*! This is an introduction to the page with all data types (Fortran). */
- virtual QCString trCompoundMembersDescriptionFortran(bool)
- {
- return "توضیحات اعضا ساختارها به همراه مستندات ساختار داده ی مربوطه";
- }
-
- /*! This is used in LaTeX as the title of the chapter with the
- * annotated compound index (Fortran).
- */
- virtual QCString trCompoundIndexFortran()
- { return "Data Type Index"; }
-
- /*! This is used in LaTeX as the title of the chapter containing
- * the documentation of all data types (Fortran).
- */
- virtual QCString trTypeDocumentation()
- { return "Data Type Documentation"; }
-
- /*! This is used in the documentation of a file as a header before the
- * list of (global) subprograms (Fortran).
- */
- virtual QCString trSubprograms()
- { return "توابع و زیربرنامه ها"; }
-
- /*! This is used in the documentation of a file/namespace before the list
- * of documentation blocks for subprograms (Fortran)
- */
- virtual QCString trSubprogramDocumentation()
- { return "مستندات توابع و زیربرنامه ها"; }
-
- /*! This is used in the documentation of a file/namespace/group before
- * the list of links to documented compounds (Fortran)
- */
- virtual QCString trDataTypes()
- { return "ساختار های داده"; }
-
- /*! used as the title of page containing all the index of all modules (Fortran). */
- virtual QCString trModulesList()
- { return "لیست ماژول ها"; }
-
- /*! used as an introduction to the modules list (Fortran) */
- virtual QCString trModulesListDescription(bool)
- {
- QCString result="لیست ماژول ها به همراه توضیحات کوتاه";
- return result;
- }
-
- /*! used as the title of the HTML page of a module/type (Fortran) */
- virtual QCString trCompoundReferenceFortran(const char *clName,
- ClassDef::CompoundType compType,
- bool isTemplate)
- {
- QCString result=(QCString)clName;
- switch(compType)
- {
- case ClassDef::Class: result+=" Module"; break;
- case ClassDef::Struct: result+=" Type"; break;
- case ClassDef::Union: result+=" Union"; break;
- case ClassDef::Interface: result+=" Interface"; break;
- case ClassDef::Protocol: result+=" Protocol"; break;
- case ClassDef::Category: result+=" Category"; break;
- case ClassDef::Exception: result+=" Exception"; break;
- }
- if (isTemplate) result+=" Template";
- result+=" Reference";
- return result;
- }
- /*! used as the title of the HTML page of a module (Fortran) */
- virtual QCString trModuleReference(const char *namespaceName)
- {
- QCString result=namespaceName;
- result+=" Module Reference";
- return result;
- }
-
- /*! This is put above each page as a link to all members of modules. (Fortran) */
- virtual QCString trModulesMembers()
- { return "اعضاء ماژول"; }
-
- /*! This is an introduction to the page with all modules members (Fortran) */
- virtual QCString trModulesMemberDescription(bool)
- {
- QCString result="لیست اعضاء ماژول ها به همراه مستندات ماژول مربوطه";
- return result;
- }
-
- /*! This is used in LaTeX as the title of the chapter with the
- * index of all modules (Fortran).
- */
- virtual QCString trModulesIndex()
- { return "Modules Index"; }
-
- /*! This is used for translation of the word that will possibly
- * be followed by a single name or by a list of names
- * of the category.
- */
- virtual QCString trModule(bool, bool singular)
- {
- QCString result("ماژول");
- if (!singular) result+=" ها";
- return result;
- }
- /*! This is put at the bottom of a module documentation page and is
- * followed by a list of files that were used to generate the page.
- */
- virtual QCString trGeneratedFromFilesFortran(ClassDef::CompoundType compType,
- bool single)
- { // here s is one of " Module", " Struct" or " Union"
- // single is true implies a single file
- QCString result=(QCString)"The documentation for this ";
- switch(compType)
- {
- case ClassDef::Class: result+="module"; break;
- case ClassDef::Struct: result+="type"; break;
- case ClassDef::Union: result+="union"; break;
- case ClassDef::Interface: result+="interface"; break;
- case ClassDef::Protocol: result+="protocol"; break;
- case ClassDef::Category: result+="category"; break;
- case ClassDef::Exception: result+="exception"; break;
- }
- result+=" was generated from the following file";
- if (single) result+=":"; else result+="s:";
- return result;
- }
- /*! This is used for translation of the word that will possibly
- * be followed by a single name or by a list of names
- * of the category.
- */
- virtual QCString trType(bool first_capital, bool singular)
- {
- QCString result((first_capital ? "Type" : "type"));
- if (!singular) result+="s";
- return result;
- }
- /*! This is used for translation of the word that will possibly
- * be followed by a single name or by a list of names
- * of the category.
- */
- virtual QCString trSubprogram(bool, bool singular)
- {
- QCString result("زیربرنامه");
- if (!singular) result+=" ها ";
- return result;
- }
-
- /*! C# Type Constraint list */
- virtual QCString trTypeConstraints()
- {
- return "Type Constraints";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.6.0 (mainly for the new search engine)
-//////////////////////////////////////////////////////////////////////////
-
- /*! directory relation for \a name */
- virtual QCString trDirRelation(const char *name)
- {
- return QCString(name) + " Relation";
- }
-
- /*! Loading message shown when loading search results */
- virtual QCString trLoading()
- {
- return "در حال بارگذاری...";
- }
-
- /*! Label used for search results in the global namespace */
- virtual QCString trGlobalNamespace()
- {
- return "Ùضای نام جهانی";
- }
-
- /*! Message shown while searching */
- virtual QCString trSearching()
- {
- return "در حال جستجو...";
- }
-
- /*! Text shown when no search results are found */
- virtual QCString trNoMatches()
- {
- return "یاÙت نشد";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.6.3 (missing items for the directory pages)
-//////////////////////////////////////////////////////////////////////////
-
- /*! introduction text for the directory dependency graph */
- virtual QCString trDirDependency(const char *name)
- {
- return (QCString)"نمودار وابستگی دایرکتوری ها برای "+name;
- }
-
- /*! when clicking a directory dependency label, a page with a
- * table is shown. The heading for the first column mentions the
- * source file that has a relation to another file.
- */
- virtual QCString trFileIn(const char *name)
- {
- return (QCString)"پرونده ای در "+name;
- }
-
- /*! when clicking a directory dependency label, a page with a
- * table is shown. The heading for the second column mentions the
- * destination file that is included.
- */
- virtual QCString trIncludesFileIn(const char *name)
- {
- return (QCString)"Includes file in "+name;
- }
-
- /** Compiles a date string.
- * @param year Year in 4 digits
- * @param month Month of the year: 1=January
- * @param day Day of the Month: 1..31
- * @param dayOfWeek Day of the week: 1=Monday..7=Sunday
- * @param hour Hour of the day: 0..23
- * @param minutes Minutes in the hour: 0..59
- * @param seconds Seconds within the minute: 0..59
- * @param includeTime Include time in the result string?
- */
- virtual QCString trDateTime(int year,int month,int day,int dayOfWeek,
- int hour,int minutes,int seconds,
- bool includeTime)
- {
- static const char *days[] = { "دوشنبه","سه‌شنبه","چهارشنبه","پنجشنبه","جمعه","شنبه","یکشنبه" };
- static const char *months[] = { "ژانویه","Ùوریه","مارس","آوریل","Ù…ÛŒ","جون","جولای","آگوست","سپتامبر","اکتبر","نوامبر","دسامبر" };
- QCString sdate;
- sdate.sprintf("%s %d %s %d",days[dayOfWeek-1],day,months[month-1],year);
- if (includeTime)
- {
- QCString stime;
- stime.sprintf(" %.2d:%.2d:%.2d",hour,minutes,seconds);
- sdate+=stime;
- }
- return convertDigitsToFarsi(sdate);
- }
-
-};
-
-#endif
diff --git a/trunk/src/translator_fi.h b/trunk/src/translator_fi.h
deleted file mode 100644
index 148b140..0000000
--- a/trunk/src/translator_fi.h
+++ /dev/null
@@ -1,1903 +0,0 @@
-/******************************************************************************
- *
- *
- *
- * Copyright (C) 1997-2012 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.
- *
- */
-/*
-==================================================================================
-Suomenkielinen käännös:
-Olli Korhonen ( -> 0.49-990425) <olli.korhonen@ccc.fi>
-Antti Laine (0.49-990425 -> ) <antti.a.laine@tut.fi>
-==================================================================================
-1999/10/19
-* Alustava käännös valmis.
-
-* Huom: Kaikille termeille on keksitty käännösvastine, mikä ei ehkä ole
- kaikissa tapauksissa hyvä ratkaisu, ja parempikin termi voi
- olla vakiintuneessa käytössä.
-
-2008-04-08
-* Käännetty versioon 1.5.5 asti.
-2008-08-26
-* MAX_DOT_GRAPH_HEIGHT poistettu, versio 1.5.6
-* Tekstit muutettu UTF-8:ksi
-2009-01-17
-* versio 1.5.8
-* Kantaluokka vaihdettu TranslatorEnglishistä Translatoriksi
-* Enumeraatio -> luettelotyyppi
-* Paranneltu kieltä ja poistettu kirjoitusvirheitä
-
-* Tehtävää:
- - Termien kokoaminen listaksi ja suomennosten järkevyyden tarkastelu. (lista on jo melko kattava)
- Author = Tekijä
- Class = Luokka
- Compound = Kooste
- Data = Data
- Documentation = Dokumentaatio
- Defines = Määrittelyt
- Description = Selite
- Detailed = Yksityiskohtainen
- Diagram = Kaavio
- Enum = Luettelotyyppi
- Exceptions = Poikkeukset
- File = Tiedosto
- Friends = Ystävät
- Functions = Funktiot
- Hierarchical = Hierarkinen
- Index = Indeksi
- Inherits = Perii
- Member = Jäsen
- Module = Moduli
- Namespace = Nimiavaruus
- Parameters = Parametrit
- Private = Yksityinen
- Protected = Suojattu
- Prototypes = Prototyypit
- Public = Julkinen
- Reference Manual= Käsikirja
- Reimplemented = Uudelleen toteutettu
- Related = Liittyvä
- Signals = Signaalit
- Slots = Vastineet
- Static = Staattinen
- Struct = Tietue
- Typedef = Tyyppimäärittely
- Union = Yhdiste
- Variables = Muuttujat
- - Taivutusmuotojen virheettömyyden tarkastelu prepositioiden korvauskohdissa.
- - Sanasta sanaan käännöskohtien mielekkyyden tarkastelu valmiista dokumentista.
- - umlaut vastineiden käyttö scandien kohdalla.
-
-positiiviset kommentit otetaan ilolla vastaan.
-===================================================================================
-*/
-
-#ifndef TRANSLATOR_FI_H
-#define TRANSLATOR_FI_H
-
-class TranslatorFinnish : public TranslatorAdapter_1_6_0
-{
- public:
- /*! This method is used to generate a warning message to signal
- * the user that the translation of his/her language of choice
- * needs updating.
- */
- /*virtual QCString updateNeededMessage()
- {
- return "Warning: The Finnish translator is really obsolete.\n"
- "It was not updated since version 1.0.0. As a result,\n"
- "some sentences may appear in English.\n\n";
- }*/
-
- // --- Language control methods -------------------
-
- /*! Used for identification of the language. The identification
- * should not be translated. It should be replaced by the name
- * of the language in English using lower-case characters only
- * (e.g. "czech", "japanese", "russian", etc.). It should be equal to
- * the identification used in language.cpp.
- */
- virtual QCString idLanguage()
- { return "finnish"; }
-
- /*! Used to get the LaTeX command(s) for the language support.
- * This method should return string with commands that switch
- * LaTeX to the desired language. For example
- * <pre>"\\usepackage[german]{babel}\n"
- * </pre>
- * or
- * <pre>"\\usepackage{polski}\n"
- * "\\usepackage[latin2]{inputenc}\n"
- * "\\usepackage[T1]{fontenc}\n"
- * </pre>
- *
- * The English LaTeX does not use such commands. Because of this
- * the empty string is returned in this implementation.
- */
- virtual QCString latexLanguageSupportCommand()
- {
- return "\\usepackage[finnish]{babel}\n";
- }
-
- /*! return the language charset. This will be used for the HTML output */
- virtual QCString idLanguageCharset()
- {
- return "utf-8";
- }
-
- // --- Language translation methods -------------------
-
- /*! used in the compound documentation before a list of related functions. */
- virtual QCString trRelatedFunctions()
- { return "Liittyvät funktiot"; } // "Related Functions";
-
- /*! subscript for the related functions. */
- virtual QCString trRelatedSubscript()
- { return "(Huomaa, että nämä eivät ole jäsenfunktioita.)"; } // "(Note that these are not member functions.)"
-
- /*! header that is put before the detailed description of files, classes and namespaces. */
- virtual QCString trDetailedDescription()
- { return "Yksityiskohtainen selite"; } // "Detailed Description"
-
- /*! header that is put before the list of typedefs. */
- virtual QCString trMemberTypedefDocumentation()
- // header that is put before the list of typedefs.
- { return "Jäsentyyppimäärittelyiden dokumentaatio"; } // "Member Typedef Documentation"
-
- /*! header that is put before the list of enumerations. */
- virtual QCString trMemberEnumerationDocumentation()
- { return "Jäsenluettelotyyppien dokumentaatio"; } // "Member Enumeration Documentation"
-
- /*! header that is put before the list of member functions. */
- virtual QCString trMemberFunctionDocumentation()
- { return "Jäsenfunktioiden dokumentaatio"; } // "Member Function Documentation"
-
- /*! header that is put before the list of member attributes. */
- virtual QCString trMemberDataDocumentation()
- {
- if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
- {
- return "Kenttien dokumentaatio"; // "Field Documentation";
- }
- else
- {
- return "Jäsendatan dokumentaatio"; // "Member Data Documentation"
- }
- }
-
- /*! this is the text of a link put after brief descriptions. */
- virtual QCString trMore()
- { return "Lisää..."; } // "More..."
-
- /*! put in the class documentation */
- virtual QCString trListOfAllMembers()
- { return "Lista kaikista jäsenistä."; } // "List of all members."
- virtual QCString trMemberList()
-
- /*! used as the title of the "list of all members" page of a class */
- { return "Jäsenlista"; } // "Member List"
-
- /*! this is the first part of a sentence that is followed by a class name */
- virtual QCString trThisIsTheListOfAllMembers()
- { return "Tämä on lista kaikista jäsenistä luokassa "; } // "This is the complete list of members for "
-
- /*! this is the remainder of the sentence after the class name */
- virtual QCString trIncludingInheritedMembers()
- { return ", sisältäen kaikki perityt jäsenet."; } // ", including all inherited members."
-
- /*! this is put at the author sections at the bottom of man pages.
- * parameter s is name of the project name.
- */
- virtual QCString trGeneratedAutomatically(const char *s)
- { QCString result=(QCString)"Automaattisesti luotu Doxygenilla "
- "lähdekoodista projektille "+s; // "Generated automatically by Doxygen" ... "for" ... "from the sourcecode"
- //if (s) result+=(QCString)" voor "+s;
- // tässä on ongelma, kuinka taivuttaa parametria, esim. "Jcad"+"in"; "IFC2VRML konversio"+"n"
- // mutta ratkaistaan ongelma kätevästi kaksoispisteellä -> "Jcad:n" / "IFC2VRML konversio:n"
- // lopputulos on vähemmän kökkö ja täysin luettava, mutta ei kuitenkaan täydellinen.
- //
- // kierretään ongelma taivuttamalla sanaa projekti :)
- return result;
- }
-
- /*! put after an enum name in the list of all members */
- virtual QCString trEnumName()
- { return "luettelotyypin nimi"; } // "enum name"
-
- /*! put after an enum value in the list of all members */
- virtual QCString trEnumValue()
- { return "luettelotyypin arvo"; } // "enum value"
-
- /*! put after an undocumented member in the list of all members */
- virtual QCString trDefinedIn()
- { return "määritelty"; } // "defined in"
-
- // quick reference sections
-
- /*! This is put above each page as a link to the list of all groups of
- * compounds or files (see the \\group command).
- */
- virtual QCString trModules()
- { return "Moduulit"; } // "Modules"
-
- /*! This is put above each page as a link to the class hierarchy */
- virtual QCString trClassHierarchy()
- { return "Luokkahierarkia"; } // "Class Hierarchy"
-
- /*! This is put above each page as a link to the list of annotated classes */
- virtual QCString trCompoundList()
- {
- if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
- {
- return "Tietueet"; // "Data Structures"
- }
- else
- {
- return "Luokkalista"; // "Class List"
- }
- }
-
- /*! This is put above each page as a link to the list of documented files */
- virtual QCString trFileList()
- { return "Tiedostolista"; } // "File List"
-
- /*! This is put above each page as a link to all members of compounds. */
- virtual QCString trCompoundMembers()
- {
- if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
- {
- return "Tietueen kentät"; // "Data Fields"
- }
- else
- {
- return "Luokan jäsenet"; // "Class Members"
- }
- }
-
- /*! This is put above each page as a link to all members of files. */
- virtual QCString trFileMembers()
- {
- if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
- {
- return "Globaalit"; // "Globals"
- }
- else
- {
- return "Tiedoston jäsenet"; // "File Members"
- }
- }
-
- /*! This is put above each page as a link to all related pages. */
- virtual QCString trRelatedPages()
- { return "Liittyvät sivut"; } // "Related Pages"
-
- /*! This is put above each page as a link to all examples. */
- virtual QCString trExamples()
- { return "Esimerkit"; } // "Examples"
-
- /*! This is put above each page as a link to the search engine. */
- virtual QCString trSearch()
- { return "Etsi"; } // "Search"
-
- /*! This is an introduction to the class hierarchy. */
- virtual QCString trClassHierarchyDescription()
- { return "Tämä periytymislista on päätasoltaan aakkostettu " // "This inheritance list is sorted roughly, "
- "mutta alijäsenet on aakkostettu itsenäisesti:"; // "but not completely, alphabetically:";
- }
-
- /*! This is an introduction to the list with all files. */
- virtual QCString trFileListDescription(bool extractAll)
- {
- QCString result="Tässä on lista kaikista ";
- if (!extractAll) result+="dokumentoiduista "; // "documented "
- result+="tiedostoista lyhyen selitteen kanssa:"; // "files with brief descriptions:"
- return result;
- }
-
- /*! This is an introduction to the annotated compound list. */
- virtual QCString trCompoundListDescription()
- {
-
- if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
- {
- return "Tässä ovat tietueet lyhyen selitteen kanssa:"; // "Here are the data structures with brief descriptions:"
- }
- else
- {
- return "Tässä ovat luokat, tietueet ja " // "Here are the classes, structs and "
- "yhdisteet lyhyen selitteen kanssa:"; // "unions with brief descriptions:"
- }
- }
-
- /*! This is an introduction to the page with all class members. */
- virtual QCString trCompoundMembersDescription(bool extractAll)
- {
- QCString result="Tässä on lista kaikista "; // "Here is a list of all "
- if (!extractAll)
- {
- result+="dokumentoiduista "; // "documented "
- }
- if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
- {
- result+="tietuiden ja yhdisteiden kentistä"; // "struct and union fields"
- }
- else
- {
- result+="luokkien jäsenistä"; // "class members"
- }
- result+=" linkitettyinä "; // " with links to "
- if (!extractAll)
- {
- if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
- {
- result+="jokaisen kentän tietueen/yhdisteen dokumentaatioon:"; // "the struct/union documentation for each field:"
- }
- else
- {
- result+="jokaisen jäsenen luokkadokumentaatioon:"; // "the class documentation for each member:"
- }
- }
- else
- {
- if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
- {
- result+= "tietueisiin/yhdisteisiin, joihin ne kuuluvat:"; // "the structures/unions they belong to:"
- }
- else
- {
- result+="luokkiin, joihin ne kuuluvat"; //"the classes they belong to:"
- }
- }
- return result;
- }
-
- /*! This is an introduction to the page with all file members. */
- virtual QCString trFileMembersDescription(bool extractAll)
- {
- QCString result="Tässä on lista kaikista "; // "Here is a list of all "
- if (!extractAll) result+="dokumentoiduista "; // "documented "
-
- if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
- {
- result+="funktioista, muuttujista, määrittelyistä, luettelotyypeistä ja tyyppimäärittelyistä"; // "functions, variables, defines, enums, and typedefs"
- }
- else
- {
- result+="tiedoston jäsenistä"; // "file members"
- }
- result+=" linkitettyinä "; // " with links to "
- if (extractAll)
- result+="tiedostoihin, joihin ne kuuluvat:"; // "the files they belong to:"
- else
- result+="dokumentaatioon:"; // "the documentation:"
- return result;
- }
-
- /*! This is an introduction to the page with the list of all examples */
- virtual QCString trExamplesDescription()
- { return "Tässä on lista kaikista esimerkeistä:"; } // "Here is a list of all examples:"
-
- /*! This is an introduction to the page with the list of related pages */
- virtual QCString trRelatedPagesDescription()
- { return "Tässä on lista kaikista liittyvistä dokumentaatiosivuista:"; } // "Here is a list of all related documentation pages:"
-
- /*! This is an introduction to the page with the list of class/file groups */
- virtual QCString trModulesDescription()
- { return "Tässä on lista kaikista moduleista:"; } // "Here is a list of all modules:"
-
- // index titles (the project name is prepended for these)
-
- /*! This is used in HTML as the title of index.html. */
- virtual QCString trDocumentation()
- { return "Dokumentaatio"; } // "Documentation"
-
- /*! This is used in LaTeX as the title of the chapter with the
- * index of all groups.
- */
- virtual QCString trModuleIndex()
- { return "Moduuliluettelo"; } // "Module Index"
-
- /*! This is used in LaTeX as the title of the chapter with the
- * class hierarchy.
- */
- virtual QCString trHierarchicalIndex()
- { return "Hierarkinen luettelo"; } // "Hierarchical Index"
-
- /*! This is used in LaTeX as the title of the chapter with the
- * annotated compound index.
- */
- virtual QCString trCompoundIndex()
- {
- if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
- {
- return "Tietueluettelo"; // "Data Structure Index"
- }
- else
- {
- return "Luokkaluettelo"; // "Class Index"
- }
- }
-
- /*! This is used in LaTeX as the title of the chapter with the
- * list of all files.
- */
- virtual QCString trFileIndex()
- { return "Tiedostoluettelo"; } // "File Index"
-
- /*! This is used in LaTeX as the title of the chapter containing
- * the documentation of all groups.
- */
- virtual QCString trModuleDocumentation()
- { return "Moduulien dokumentaatio"; } // "Module Documentation"
-
- /*! This is used in LaTeX as the title of the chapter containing
- * the documentation of all classes, structs and unions.
- */
- virtual QCString trClassDocumentation()
- {
- if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
- {
- return "Tietueiden dokumentaatio"; // "Data Structure Documentation"
- }
- else
- {
- return "Luokkien dokumentaatio"; // "Class Documentation"
- }
- }
-
- /*! This is used in LaTeX as the title of the chapter containing
- * the documentation of all files.
- */
- virtual QCString trFileDocumentation()
- { return "Tiedostojen dokumentaatio"; } // "File Documentation"
-
- /*! This is used in LaTeX as the title of the chapter containing
- * the documentation of all examples.
- */
- virtual QCString trExampleDocumentation()
- { return "Esimerkkien dokumentaatio"; } // "Example Documentation"
-
- /*! This is used in LaTeX as the title of the chapter containing
- * the documentation of all related pages.
- */
- virtual QCString trPageDocumentation()
- { return "Sivujen dokumentaatio"; } // "Page Documentation"
-
- /*! This is used in LaTeX as the title of the document */
- virtual QCString trReferenceManual()
- { return "Käsikirja"; } // "Reference Manual"
-
- /*! This is used in the documentation of a file as a header before the
- * list of defines
- */
- virtual QCString trDefines()
- { return "Määrittelyt"; } // "Defines"
-
- /*! This is used in the documentation of a file as a header before the
- * list of function prototypes
- */
- virtual QCString trFuncProtos()
- { return "Funktioiden prototyypit"; } // "Function Prototypes"
-
- /*! This is used in the documentation of a file as a header before the
- * list of typedefs
- */
- virtual QCString trTypedefs()
- { return "Tyyppimäärittelyt"; } // "Typedefs"
-
- /*! This is used in the documentation of a file as a header before the
- * list of enumerations
- */
- virtual QCString trEnumerations()
- { return "Luettelotyypit"; } // "Enumerations"
-
- /*! This is used in the documentation of a file as a header before the
- * list of (global) functions
- */
- virtual QCString trFunctions()
- { return "Funktiot"; } // "Functions"
-
- /*! This is used in the documentation of a file as a header before the
- * list of (global) variables
- */
- virtual QCString trVariables()
- { return "Muuttujat"; } // "Variables"
-
- /*! This is used in the documentation of a file as a header before the
- * list of (global) variables
- */
- virtual QCString trEnumerationValues()
- { return "Luettelotyyppien arvot"; } // "Enumerator"
-
- /*! This is used in the documentation of a file before the list of
- * documentation blocks for defines
- */
- virtual QCString trDefineDocumentation()
- { return "Määritysten dokumentointi"; } // "Define Documentation"
-
- /*! This is used in the documentation of a file/namespace before the list
- * of documentation blocks for function prototypes
- */
- virtual QCString trFunctionPrototypeDocumentation()
- { return "Funktioprototyyppien dokumentaatio"; } // "Function Prototype Documentation"
-
- /*! This is used in the documentation of a file/namespace before the list
- * of documentation blocks for typedefs
- */
- virtual QCString trTypedefDocumentation()
- { return "Tyyppimääritysten dokumentaatio"; } // "Typedef Documentation"
-
- /*! This is used in the documentation of a file/namespace before the list
- * of documentation blocks for enumeration types
- */
- virtual QCString trEnumerationTypeDocumentation()
- { return "Luettelotyyppien dokumentaatio"; } // "Enumeration Type Documentation"
-
- /*! This is used in the documentation of a file/namespace before the list
- * of documentation blocks for functions
- */
- virtual QCString trFunctionDocumentation()
- { return "Funktioiden dokumentaatio"; } // "Function Documentation"
-
- /*! This is used in the documentation of a file/namespace before the list
- * of documentation blocks for variables
- */
- virtual QCString trVariableDocumentation()
- { return "Muuttujien dokumentaatio"; } // "Variable Documentation"
-
- /*! This is used in the documentation of a file/namespace/group before
- * the list of links to documented compounds
- */
- virtual QCString trCompounds()
- {
- if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
- {
- return "Tietueet"; // "Data Structures"
- }
- else
- {
- return "Luokat"; // "Classes"
- }
- }
-
- /*! This is used in the standard footer of each page and indicates when
- * the page was generated
- */
- virtual QCString trGeneratedAt(const char *date,const char *projName)
- {
- // funktio on hiukan vaikea kääntää prepositioihin sidotun rakenteen vuoksi.
- // Muutetaan siis lauserakennetta suomalaisemmaksi
- // Generated on $date for $project by:
- // -> Generated for $project on $date by:
- QCString result=(QCString)"Generoinut ";
- if (projName) result+=(QCString)"projektille "+projName+" ";
- result+=(QCString)date+" ";
- return result;
- }
- /*! This is part of the sentence used in the standard footer of each page.
- */
- virtual QCString trWrittenBy()
- {
- return "kirjoittanut"; // "written by"
- }
-
- /*! this text is put before a class diagram */
- virtual QCString trClassDiagram(const char *clName)
- {
- return "Luokan "+(QCString)clName+" luokkakaavio"; // "Inheritance diagram for "
- }
-
- /*! this text is generated when the \\internal command is used. */
- virtual QCString trForInternalUseOnly()
- { return "Vain sisäiseen käyttöön."; } // "For internal use only."
-
- /*! this text is generated when the \\warning command is used. */
- virtual QCString trWarning()
- { return "Varoitus"; } // "Warning"
-
- /*! this text is generated when the \\version command is used. */
- virtual QCString trVersion()
- { return "Versio"; } // "Version"
-
- /*! this text is generated when the \\date command is used. */
- virtual QCString trDate()
- { return "Päiväys"; } // "Date"
-
- /*! this text is generated when the \\return command is used. */
- virtual QCString trReturns()
- { return "Palauttaa"; } // "Returns"
-
- /*! this text is generated when the \\sa command is used. */
- virtual QCString trSeeAlso()
- { return "Katso myös"; } // "See also"
-
- /*! this text is generated when the \\param command is used. */
- virtual QCString trParameters()
- { return "Parametrit"; } // "Parameters"
-
- /*! this text is generated when the \\exception command is used. */
- virtual QCString trExceptions()
- { return "Poikkeukset"; } // "Exceptions"
-
- /*! this text is used in the title page of a LaTeX document. */
- virtual QCString trGeneratedBy()
- { return "Generoinut"; } // "Generated by"
-
-//////////////////////////////////////////////////////////////////////////
-// new since 0.49-990307
-//////////////////////////////////////////////////////////////////////////
-
- /*! used as the title of page containing all the index of all namespaces. */
- virtual QCString trNamespaceList()
- { return "Nimiavaruus Lista"; } // "Namespace List"
-
- /*! used as an introduction to the namespace list */
- virtual QCString trNamespaceListDescription(bool extractAll)
- {
- QCString result="Tässä on lista kaikista "; // "Here is a list of all "
- if (!extractAll) result+="dokumentoiduista "; // "documented "
- result+="nimiavaruuksista lyhyen selitteen kanssa:"; // "namespaces with brief descriptions:"
- return result;
- }
-
- /*! used in the class documentation as a header before the list of all
- * friends of a class
- */
- virtual QCString trFriends()
- { return "Ystävät"; } // "Friends"
-
-//////////////////////////////////////////////////////////////////////////
-// new since 0.49-990405
-//////////////////////////////////////////////////////////////////////////
-
- /*! used in the class documentation as a header before the list of all
- * related classes
- */
- virtual QCString trRelatedFunctionDocumentation()
- { return "Ystävät ja niihin liittyvien funktioiden dokumentaatio"; } // "Friends And Related Function Documentation"
-
-//////////////////////////////////////////////////////////////////////////
-// new since 0.49-990425
-//////////////////////////////////////////////////////////////////////////
-
- /*! used as the title of the HTML page of a class/struct/union */
- virtual QCString trCompoundReference(const char *clName,
- ClassDef::CompoundType compType,
- bool isTemplate)
- {
- QCString result=(QCString)clName;
- switch(compType)
- {
- case ClassDef::Class: result+=" luokka"; break; // " Class"
- case ClassDef::Struct: result+=" tietue"; break; // " Struct"
- case ClassDef::Union: result+=" yhdiste"; break; // " Union"
- case ClassDef::Interface: result+=" rajapinta"; break; // " Interface"
- case ClassDef::Protocol: result+=" protokolla"; break; // " Protocol"
- case ClassDef::Category: result+=" kategoria"; break; // " Category"
- case ClassDef::Exception: result+=" poikkeus"; break; // " Exception"
- }
- if (isTemplate) result+="malli"; // " Template"
- result+="referenssi"; // " Reference"
- return result;
- }
-
- /*! used as the title of the HTML page of a file */
- virtual QCString trFileReference(const char *fileName)
- {
- QCString result=fileName;
- result+=" tiedostoreferenssi"; // " File Reference"
- return result;
- }
-
- /*! used as the title of the HTML page of a namespace */
- virtual QCString trNamespaceReference(const char *namespaceName)
- {
- QCString result=namespaceName;
- result+=" nimiavaruusreferenssi"; // " Namespace Reference"
- return result;
- }
-
- virtual QCString trPublicMembers()
- { return "Julkiset jäsenfunktiot"; } // "Public Member Functions"
- virtual QCString trPublicSlots()
- { return "Julkiset vastineet"; } // "Public Slots"
- virtual QCString trSignals()
- { return "Signaalit"; } // "Signals"
- virtual QCString trStaticPublicMembers()
- { return "Staattiset julkiset jäsenfunktiot"; } // "Static Public Member Functions"
- virtual QCString trProtectedMembers()
- { return "Suojatut jäsenfunktiot"; } // "Protected Member Functions"
- virtual QCString trProtectedSlots()
- { return "Suojatut vastineet"; } // "Protected Slots"
- virtual QCString trStaticProtectedMembers()
- { return "Staattiset suojatut jäsenfunktiot"; } // "Static Protected Member Functions"
- virtual QCString trPrivateMembers()
- { return "Yksityiset jäsenfunktiot"; } // "Private Member Functions"
- virtual QCString trPrivateSlots()
- { return "Yksityiset vastineet"; } // "Private Slots"
- virtual QCString trStaticPrivateMembers()
- { return "Staattiset yksityiset jäsenfunktiot"; } // "Static Private Member Functions"
-
- /*! this function is used to produce a comma-separated list of items.
- * use generateMarker(i) to indicate where item i should be put.
- */
- virtual QCString trWriteList(int numEntries)
- {
- QCString result;
- int i;
- // the inherits list contain `numEntries' classes
- for (i=0;i<numEntries;i++)
- {
- // use generateMarker to generate placeholders for the class links!
- result+=generateMarker(i); // generate marker for entry i in the list
- // (order is left to right)
-
- if (i!=numEntries-1) // not the last entry, so we need a separator
- {
- if (i<numEntries-2) // not the fore last entry
- result+=", ";
- else // the fore last entry
- result+=" ja "; // ", and "
- }
- }
- return result;
- }
-
- /*! used in class documentation to produce a list of base classes,
- * if class diagrams are disabled.
- */
- virtual QCString trInheritsList(int numEntries)
- {
- return (QCString)"Periytyy "+(numEntries > 1 ? "luokista " : "luokasta ")+trWriteList(numEntries)+"."; // "Inherits "
- }
-
- /*! used in class documentation to produce a list of super classes,
- * if class diagrams are disabled.
- */
- virtual QCString trInheritedByList(int numEntries)
- {
- return (QCString)"Periytetään "+(numEntries > 1 ? "luokissa " : "luokassa ")+trWriteList(numEntries)+"."; // "Inherited by "
- }
-
- /*! used in member documentation blocks to produce a list of
- * members that are hidden by this one.
- */
- virtual QCString trReimplementedFromList(int numEntries)
- {
- return (QCString)"Uudelleentoteuttaa "+(numEntries > 1 ? "luokat " : "luokan ")+trWriteList(numEntries)+"."; // "Reimplemented from "
- }
-
- /*! used in member documentation blocks to produce a list of
- * all member that overwrite the implementation of this member.
- */
- virtual QCString trReimplementedInList(int numEntries)
- {
- return (QCString)"Uudelleentoteutetaan "+(numEntries > 1 ? "luokissa " : "luokassa ")+trWriteList(numEntries)+"."; // "Reimplemented in "
- }
-
- /*! This is put above each page as a link to all members of namespaces. */
- virtual QCString trNamespaceMembers()
- { return "Nimiavaruuden jäsenet"; } // "Namespace Members"
-
- /*! This is an introduction to the page with all namespace members */
- virtual QCString trNamespaceMemberDescription(bool extractAll)
- {
- QCString result="Tässä on lista kaikista "; // "Here is a list of all "
- if (!extractAll) result+="dokumentoiduista "; // "documented "
- result+="nimiavaruuden jäsenistä linkitettynä "; // "namespace members with links to "
- if (extractAll)
- result+="nimiavaruuden dokumentaatioon johon ne kuuluvat:"; // "the namespace documentation for each member:";
- else
- result+="nimiavaruuksiin joihin ne kuuluvat:"; // "the namespaces they belong to:"
- return result;
- }
- /*! This is used in LaTeX as the title of the chapter with the
- * index of all namespaces.
- */
- virtual QCString trNamespaceIndex()
- { return "Nimiavaruuksien luettelo"; } // "Namespace Index"
-
- /*! This is used in LaTeX as the title of the chapter containing
- * the documentation of all namespaces.
- */
- virtual QCString trNamespaceDocumentation()
- { return "Nimiavaruuden dokumentaatio"; } // "Namespace Documentation"
-
-//////////////////////////////////////////////////////////////////////////
-// new since 0.49-990522
-//////////////////////////////////////////////////////////////////////////
-
- /*! This is used in the documentation before the list of all
- * namespaces in a file.
- */
- virtual QCString trNamespaces()
- { return "Nimiavaruudet"; } // "Namespaces"; }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 0.49-990728
-//////////////////////////////////////////////////////////////////////////
-
- /*! This is put at the bottom of a class documentation page and is
- * followed by a list of files that were used to generate the page.
- */
- virtual QCString trGeneratedFromFiles(ClassDef::CompoundType compType,
- bool single)
- { // here s is one of " Class", " Struct" or " Union"
- // single is true implies a single file
- QCString result=(QCString)"Dokumentaatio tälle "; // "The documentation for this "
- switch(compType)
- {
- case ClassDef::Class: result+="luokalle"; break; // "class"
- case ClassDef::Struct: result+="tietueelle"; break; // "struct"
- case ClassDef::Union: result+="yhdisteelle"; break; // "union"
- case ClassDef::Interface: result+="rajapinnalle"; break; // "interface"
- case ClassDef::Protocol: result+="protokollalle"; break; // "protocol"
- case ClassDef::Category: result+="kategorialle"; break; // "category"
- case ClassDef::Exception: result+="poikkeukselle"; break; // "exception"
- }
- if (single) result+=" luotiin seuraavasta tiedostosta:"; // " was generated from the following file"
- else result+=" luotiin seuraavista tiedostoista:"; // ":" or "s:"
- return result;
- }
-
- /*! This is in the (quick) index as a link to the alphabetical compound
- * list.
- */
- virtual QCString trAlphabeticalList()
- { return "Aakkosellinen lista"; } // "Alphabetical List"
-
-//////////////////////////////////////////////////////////////////////////
-// new since 0.49-990901
-//////////////////////////////////////////////////////////////////////////
-
- /*! This is used as the heading text for the retval command. */
- virtual QCString trReturnValues()
- { return "Paluuarvot"; } // "Return values"
-
- /*! This is in the (quick) index as a link to the main page (index.html)
- */
- virtual QCString trMainPage()
- { return "Pääsivu"; } // "Main Page"
-
- /*! This is used in references to page that are put in the LaTeX
- * documentation. It should be an abbreviation of the word page.
- */
- virtual QCString trPageAbbreviation()
- { return "s."; } // "p."
-
-//////////////////////////////////////////////////////////////////////////
-// new since 0.49-991003
-//////////////////////////////////////////////////////////////////////////
-
- virtual QCString trDefinedAtLineInSourceFile()
- {
- return "Määrittely tiedoston @1 rivillä @0."; // "Definition at line @0 of file @1."
- }
- virtual QCString trDefinedInSourceFile()
- {
- return "Määrittely tiedostossa @0."; // "Definition in file @0."
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 0.49-991205
-//////////////////////////////////////////////////////////////////////////
-
- virtual QCString trDeprecated()
- {
- return "Vanhentunut"; // "Deprecated"
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.0.0
-//////////////////////////////////////////////////////////////////////////
-
- /*! this text is put before a collaboration diagram */
- virtual QCString trCollaborationDiagram(const char *clName)
- {
- return (QCString)"Yhteistyökaavio luokalle "+clName+":"; // "Collaboration diagram for "+clName+":"
- }
- /*! this text is put before an include dependency graph */
- virtual QCString trInclDepGraph(const char *fName)
- {
- return (QCString)"Sisällytysriippuvuuskaavio tiedostolle "+fName+":"; // "Include dependency graph for "+fName+":"
- }
- /*! header that is put before the list of constructor/destructors. */
- virtual QCString trConstructorDocumentation()
- {
- return "Rakentajien & purkajien dokumentaatio"; // "Constructor & Destructor Documentation";
- }
- /*! Used in the file documentation to point to the corresponding sources. */
- virtual QCString trGotoSourceCode()
- {
- return "Siirry tämän tiedoston lähdekoodiin."; // "Go to the source code of this file."
- }
- /*! Used in the file sources to point to the corresponding documentation. */
- virtual QCString trGotoDocumentation()
- {
- return "Siirry tämän tiedoston dokumentaatioon."; // "Go to the documentation of this file."
- }
- /*! Text for the \\pre command */
- virtual QCString trPrecondition()
- {
- return "Esiehto"; //"Precondition"
- }
- /*! Text for the \\post command */
- virtual QCString trPostcondition()
- {
- return "Jälkiehto"; // "Postcondition"
- }
- /*! Text for the \\invariant command */
- virtual QCString trInvariant()
- {
- return "Invariantti"; // vai "Pysyväisväittämä"? "Invariant"
- }
- /*! Text shown before a multi-line variable/enum initialization */
- virtual QCString trInitialValue()
- {
- return "Alkuarvo:"; // "Initial value:"
- }
- /*! Text used the source code in the file index */
- virtual QCString trCode()
- {
- return "koodi"; // "code"
- }
- virtual QCString trGraphicalHierarchy()
- {
- return "Graafinen luokkahierarkia"; // "Graphical Class Hierarchy"
- }
- virtual QCString trGotoGraphicalHierarchy()
- {
- return "Siirry graafiseen luokkahierarkiaan"; // "Go to the graphical class hierarchy"
- }
- virtual QCString trGotoTextualHierarchy()
- {
- return "Siirry tekstimuotoiseen luokkahierarkiaan"; // "Go to the textual class hierarchy"
- }
- virtual QCString trPageIndex()
- {
- return "Sivuhakemisto"; // "Page Index"
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.1.0
-//////////////////////////////////////////////////////////////////////////
-
- virtual QCString trNote()
- {
- // FIXME: Missähän merkityksessä tätä käytetään?
- return "Huomautus"; // "Note"
- }
- virtual QCString trPublicTypes()
- {
- return "Julkiset tyypit"; // "Public Types"
- }
- virtual QCString trPublicAttribs()
- {
- if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
- {
- return "Tietueen kentät"; // "Data Fields"
- }
- else
- {
- return "Julkiset attribuutit"; // "Public Attributes"
- }
- }
- virtual QCString trStaticPublicAttribs()
- {
- return "Staattiset julkiset attribuutit"; // "Static Public Attributes"
- }
- virtual QCString trProtectedTypes()
- {
- return "Suojellut tyypit"; // "Protected Types"
- }
- virtual QCString trProtectedAttribs()
- {
- return "Suojellut attribuutit"; // "Protected Attributes"
- }
- virtual QCString trStaticProtectedAttribs()
- {
- return "Staattiset suojellut attribuutit"; // "Static Protected Attributes"
- }
- virtual QCString trPrivateTypes()
- {
- return "Yksityiset tyypit"; // "Private Types"
- }
- virtual QCString trPrivateAttribs()
- {
- return "Yksityiset attribuutit"; // "Private Attributes"
- }
- virtual QCString trStaticPrivateAttribs()
- {
- return "Staattiset yksityiset attribuutit"; // "Static Private Attributes"
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.1.3
-//////////////////////////////////////////////////////////////////////////
-
- /*! Used as a marker that is put before a \\todo item */
- virtual QCString trTodo()
- {
- return "Vielä tehtävänä"; // "Todo"
- }
- /*! Used as the header of the todo list */
- virtual QCString trTodoList()
- {
- return "Tehtävälista"; // "Todo List"
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.1.4
-//////////////////////////////////////////////////////////////////////////
-
- virtual QCString trReferencedBy()
- {
- return "Viitattu"; // "Referenced by"
- }
- virtual QCString trRemarks()
- {
- return "Huomioita"; // "Remarks"
- }
- virtual QCString trAttention()
- {
- return "Huomio"; // "Attention"
- }
- virtual QCString trInclByDepGraph()
- {
- return "Tämä kaavio näyttää, mitkä tiedostot suorasti "
- "tai epäsuorasti sisällyttävät tämän tiedoston";
- // "This graph shows which files directly or "
- // "indirectly include this file:"
- }
- virtual QCString trSince()
- {
- // FIXME: Missä merkityksessä tätä käytetään?
- return "Lähtien"; // "Since"
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.1.5
-//////////////////////////////////////////////////////////////////////////
-
- /*! title of the graph legend page */
- virtual QCString trLegendTitle()
- {
- return "Kaavion selite"; // "Graph Legend"
- }
- /*! page explaining how the dot graph's should be interpreted
- * The %A in the text below are to prevent link to classes called "A".
- */
- virtual QCString trLegendDocs()
- {
- return
- "Tämä sivu selittää, kuinka doxygenin luomia kaavioita tulkitaan.<p>\n"
- // "This page explains how to interpret the graphs that are generated "
- // "by doxygen.<p>\n"
- "Ajattele seuraavaa esimerkkiä:\n"
- // "Consider the following example:\n"
- "\\code\n"
- "/*! Näkymätön luokka katkaisun vuoksi */\n"
- // "/*! Invisible class because of truncation */\n"
- "class Nakymaton { };\n\n"
- // "class Invisible { };\n\n"
- "/*! Katkaistu luokka, periytymissuhde on piilotettu */\n"
- // "/*! Truncated class, inheritance relation is hidden */\n"
- "class Katkaistu : public Nakymaton { };\n\n"
- // "class Truncated : public Invisible { };\n\n"
- "/* Luokkaa ei ole dokumentoitu doxygen-kommenteilla */\n"
- // "/* Class not documented with doxygen comments */\n"
- "class Dokumentoimaton { };\n\n"
- // "class Undocumented { };\n\n"
- "/*! Julkista periyttämistä käyttäen periytetty luokka */\n"
- // "/*! Class that is inherited using public inheritance */\n"
- "class JulkinenKanta : public Katkaistu { };\n\n"
- // "class PublicBase : public Truncated { };\n\n"
- "/*! Malliluokka */\n"
- // "/*! A template class */\n"
- "template<class T> class Malli { };\n\n"
- // "template<class T> class Templ { };\n\n"
- "/*! Suojeltua periytymistä käyttäen periytetty luokka */\n"
- // "/*! Class that is inherited using protected inheritance */\n"
- "class SuojeltuKanta { };\n\n"
- // "class ProtectedBase { };\n\n"
- "/*! Yksityistä periytymistä käyttäen periytetty luokka */\n"
- // "/*! Class that is inherited using private inheritance */\n"
- "class YksityisKanta { };\n\n"
- // "class PrivateBase { };\n\n"
- "/*! Luokka jota periytetty luokka käyttää */\n"
- // "/*! Class that is used by the Inherited class */\n"
- "class Kaytetty { };\n\n"
- // "class Used { };\n\n"
- "/*! Kantaluokka joka periytyy useasta muusta luokasta */\n"
- // "/*! Super class that inherits a number of other classes */\n"
- "class Periytetty : public JulkinenKanta,\n"
- " : protected SuojeltuKanta,\n"
- " : private YksityisKanta,\n"
- " : public Dokumentoimaton,\n"
- " : public Malli<int>\n"
- "{\n"
- " private:\n"
- " Kaytetty *m_kaytettyLuokka;\n"
- "}\n";
- // "class Inherited : public PublicBase,\n"
- // " protected ProtectedBase,\n"
- // " private PrivateBase,\n"
- // " public Undocumented,\n"
- // " public Templ<int>\n"
- // "{\n"
- // " private:\n"
- // " Used *m_usedClass;\n"
- // "};\n"
- "\\endcode\n"
- "Tuloksena on seuraavanlainen kaavio:"
- //"This will result in the following graph:"
- "<p><center><img alt=\"\" src=\"graph_legend."+Config_getEnum("DOT_IMAGE_FORMAT")+"\"></center>\n"
- "<p>\n"
- "Ylläolevassa kaaviossa laatikoilla on seuraavat merkitykset\n:"
- // "The boxes in the above graph have the following meaning:\n"
- "<ul>\n"
- "<li>Täytetty harmaa laatikko esittää tietuetta tai luokkaa, jolle "
- // "<li>%A filled gray box represents the struct or class for which the "
- "kaavio on luotu.\n"
- // "graph is generated.\n"
- "<li>Mustareunainen laatikko merkitsee dokumentoitua tietuetta tai luokkaa.\n"
- // "<li>%A box with a black border denotes a documented struct or class.\n"
- "<li>Harmaareunainen laatikko merkitsee dokumentoimatonta tietuetta tai luokkaa.\n"
- // "<li>%A box with a grey border denotes an undocumented struct or class.\n"
- "<li>Punareunainen laatikko merkistee dokumentoitua luokkaa tai structia "
- // "<li>%A box with a red border denotes a documented struct or class for"
- "jolle ei näytetä kaikkia periytymis-/sisällyssuhteita. Kaavio "
- // "which not all inheritance/containment relations are shown. %A graph is "
- "katkaistaan, jos se ei mahdu määriteltyjen rajojen sisään.\n"
- // "truncated if it does not fit within the specified boundaries.\n"
- "</ul>\n"
- "Nuolilla on seuraavat merkitykset:\n"
- // "The arrows have the following meaning:\n"
- "<ul>\n"
- "<li>Tummansinistä nuolta käytetään osoittamaan julkista periytymis"
- // "<li>%A dark blue arrow is used to visualize a public inheritance "
- "suhdetta kahden luokan välillä.\n"
- // "relation between two classes.\n"
- "<li>Tummanvihreää nuolta käytetään suojellussa periytymisessä.\n"
- // "<li>%A dark green arrow is used for protected inheritance.\n"
- "<li>Tummanpunaista nuolta käytetään yksityisessä periytymisessä.\n"
- // "<li>%A dark red arrow is used for private inheritance.\n"
- "<li>Purppuranväristä katkoviivaa käytetään, jos luokka sisältyy tai "
- // "<li>%A purple dashed arrow is used if a class is contained or used "
- "on toisen luokan käyttämä. Nuoli nimetään sillä muuttujalla/muuttujilla "
- // "by another class. The arrow is labeled with the variable(s) "
- "jonka läpi osoitettua luokkaa tai tietuetta käytetään.\n"
- // "through which the pointed class or struct is accessible.\n"
- "<li>Keltainen katkoviivalla piirretty nuoli merkitsee suhdetta mallin esiintymän ja "
- // "<li>%A yellow dashed arrow denotes a relation between a template instance and "
- "malliluokan välillä. Nuoli nimetään "
- // "the template class it was instantiated from. The arrow is labeled with "
- "mallin esiintymän malliparametrilla.\n"
- // "the template parameters of the instance.\n"
- "</ul>\n";
- }
- /*! text for the link to the legend page */
- virtual QCString trLegend()
- {
- return "selite"; // "legend"
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.2.0
-//////////////////////////////////////////////////////////////////////////
-
- /*! Used as a marker that is put before a test item */
- virtual QCString trTest()
- {
- return "Testi"; // "Test"
- }
- /*! Used as the header of the test list */
- virtual QCString trTestList()
- {
- return "Testilista"; // "Test List"
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.2.1
-//////////////////////////////////////////////////////////////////////////
-
- /*! Used as a section header for KDE-2 IDL methods */
- virtual QCString trDCOPMethods()
- {
- return "DCOP-jäsenfunktiot"; // "DCOP Member Functions"
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.2.2
-//////////////////////////////////////////////////////////////////////////
-
- /*! Used as a section header for IDL properties */
- virtual QCString trProperties()
- {
- return "Ominaisuudet"; // "Properties"
- }
- /*! Used as a section header for IDL property documentation */
- virtual QCString trPropertyDocumentation()
- {
- return "Ominaisuuksien dokumentaatio"; // "Property Documentation"
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.2.4
-//////////////////////////////////////////////////////////////////////////
-
- /*! Used for Java classes in the summary section of Java packages */
- virtual QCString trClasses()
- {
- if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
- {
- return "Tietueet"; // "Data Structures"
- }
- else
- {
- return "Luokat"; // "Classes"
- }
- }
- /*! Used as the title of a Java package */
- virtual QCString trPackage(const char *name)
- {
- return (QCString)"Paketti "+name; // "Package "
- }
- /*! Title of the package index page */
- virtual QCString trPackageList()
- {
- return "Pakettilista"; // "Package List"
- }
- /*! The description of the package index page */
- virtual QCString trPackageListDescription()
- {
- return "Tässä ovat paketit lyhyiden selitysten kanssa (jos saatavilla):"; // "Here are the packages with brief descriptions (if available):"
- }
- /*! The link name in the Quick links header for each page */
- virtual QCString trPackages()
- {
- return "Paketit"; // "Packages"
- }
- /*! Text shown before a multi-line define */
- virtual QCString trDefineValue()
- {
- return "Arvo:"; // "Value:"
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.2.5
-//////////////////////////////////////////////////////////////////////////
-
- /*! Used as a marker that is put before a \\bug item */
- virtual QCString trBug()
- {
- return "Bugi"; // "Bug"
- }
- /*! Used as the header of the bug list */
- virtual QCString trBugList()
- {
- return "Bugilista"; // "Bug List"
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.2.6
-//////////////////////////////////////////////////////////////////////////
-
- /*! Used as ansicpg for RTF file
- *
- * The following table shows the correlation of Charset name, Charset Value and
- * <pre>
- * Codepage number:
- * Charset Name Charset Value(hex) Codepage number
- * ------------------------------------------------------
- * DEFAULT_CHARSET 1 (x01)
- * SYMBOL_CHARSET 2 (x02)
- * OEM_CHARSET 255 (xFF)
- * ANSI_CHARSET 0 (x00) 1252
- * RUSSIAN_CHARSET 204 (xCC) 1251
- * EE_CHARSET 238 (xEE) 1250
- * GREEK_CHARSET 161 (xA1) 1253
- * TURKISH_CHARSET 162 (xA2) 1254
- * BALTIC_CHARSET 186 (xBA) 1257
- * HEBREW_CHARSET 177 (xB1) 1255
- * ARABIC _CHARSET 178 (xB2) 1256
- * SHIFTJIS_CHARSET 128 (x80) 932
- * HANGEUL_CHARSET 129 (x81) 949
- * GB2313_CHARSET 134 (x86) 936
- * CHINESEBIG5_CHARSET 136 (x88) 950
- * </pre>
- *
- */
- virtual QCString trRTFansicp()
- {
- return "1252";
- }
-
-
- /*! Used as ansicpg for RTF fcharset
- * \see trRTFansicp() for a table of possible values.
- */
- virtual QCString trRTFCharSet()
- {
- return "0";
- }
-
- /*! Used as header RTF general index */
- virtual QCString trRTFGeneralIndex()
- {
- return "Hakemisto"; // "Index"
- }
-
- /*! This is used for translation of the word that will possibly
- * be followed by a single name or by a list of names
- * of the category.
- */
- virtual QCString trClass(bool first_capital, bool singular)
- {
- QCString result((first_capital ? "Luokka" : "luokka")); // "Class" / "class"
- if (!singular) result=(first_capital ? "Luokat" : "luokat"); // "+es" -> "Classes" / "classes"
- return result;
- }
-
- /*! This is used for translation of the word that will possibly
- * be followed by a single name or by a list of names
- * of the category.
- */
- virtual QCString trFile(bool first_capital, bool singular)
- {
- QCString result((first_capital ? "Tiedosto" : "tiedosto")); // "File" / "file"
- if (!singular) result+="t"; // "+s" -> "Files" / "files"
- return result;
- }
-
- /*! This is used for translation of the word that will possibly
- * be followed by a single name or by a list of names
- * of the category.
- */
- virtual QCString trNamespace(bool first_capital, bool singular)
- {
- QCString result((first_capital ? "Nimiavaruus" : "nimiavaruus")); // "Namespace" / "namespace"
- if (!singular) result=(first_capital ? "Nimiavaruudet" : "nimiavaruudet"); // "+s"
- return result;
- }
-
- /*! This is used for translation of the word that will possibly
- * be followed by a single name or by a list of names
- * of the category.
- */
- virtual QCString trGroup(bool first_capital, bool singular)
- {
- QCString result((first_capital ? "Ryhmä" : "ryhmä")); // "Group" / "group"
- if (!singular) result+="t"; // "+s"
- return result;
- }
-
- /*! This is used for translation of the word that will possibly
- * be followed by a single name or by a list of names
- * of the category.
- */
- virtual QCString trPage(bool first_capital, bool singular)
- {
- QCString result((first_capital ? "Sivu" : "sivu")); // "Page" / "page"
- if (!singular) result+="t"; // "+s"
- return result;
- }
-
- /*! This is used for translation of the word that will possibly
- * be followed by a single name or by a list of names
- * of the category.
- */
- virtual QCString trMember(bool first_capital, bool singular)
- {
- QCString result((first_capital ? "Jäsen" : "jäsen")); // "Member" / "member"
- if (!singular) result+="et"; // "+s"
- return result;
- }
-
- /*! This is used for translation of the word that will possibly
- * be followed by a single name or by a list of names
- * of the category.
- */
- virtual QCString trGlobal(bool first_capital, bool singular)
- {
- QCString result((first_capital ? "Globaali" : "globaali")); // "Global" / "global"
- if (!singular) result+="t"; // "+s"
- return result;
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.2.7
-//////////////////////////////////////////////////////////////////////////
-
- /*! This text is generated when the \\author command is used and
- * for the author section in man pages. */
- virtual QCString trAuthor(bool first_capital, bool singular)
- {
- QCString result((first_capital ? "Tekijä" : "tekijä")); // "Author" / "author"
- if (!singular) result+="t"; // "+s"
- return result;
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.2.11
-//////////////////////////////////////////////////////////////////////////
-
- /*! This text is put before the list of members referenced by a member
- */
- virtual QCString trReferences()
- {
- return "Viittaukset"; // "References"
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.2.13
-//////////////////////////////////////////////////////////////////////////
-
- /*! used in member documentation blocks to produce a list of
- * members that are implemented by this one.
- */
- virtual QCString trImplementedFromList(int numEntries)
- {
- return "Toteuttaa luokan "+trWriteList(numEntries)+"."; // "Implements "
- }
-
- /*! used in member documentation blocks to produce a list of
- * all members that implement this abstract member.
- */
- virtual QCString trImplementedInList(int numEntries)
- {
- return "Toteutettu luokassa "+trWriteList(numEntries)+"."; // "Implemented in "
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.2.16
-//////////////////////////////////////////////////////////////////////////
-
- /*! used in RTF documentation as a heading for the Table
- * of Contents.
- */
- virtual QCString trRTFTableOfContents()
- {
- return "Sisällysluettelo"; // "Table of Contents"
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.2.17
-//////////////////////////////////////////////////////////////////////////
-
- /*! Used as the header of the list of item that have been
- * flagged deprecated
- */
- virtual QCString trDeprecatedList()
- {
- return "Vanhentuneiden lista"; // "Deprecated List"
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.2.18
-//////////////////////////////////////////////////////////////////////////
-
- /*! Used as a header for declaration section of the events found in
- * a C# program
- */
- virtual QCString trEvents()
- {
- return "Tapahtumat"; // "Events"
- }
- /*! Header used for the documentation section of a class' events. */
- virtual QCString trEventDocumentation()
- {
- return "Tapahtumien dokumentaatio"; // "Event Documentation"
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.3
-//////////////////////////////////////////////////////////////////////////
-
- /*! Used as a heading for a list of Java class types with package scope.
- */
- virtual QCString trPackageTypes()
- {
- return "Paketin tyypit"; // "Package Types"
- }
- /*! Used as a heading for a list of Java class functions with package
- * scope.
- */
- virtual QCString trPackageMembers()
- {
- return "Paketin funktiot"; // "Package Functions"
- }
- /*! Used as a heading for a list of static Java class functions with
- * package scope.
- */
- virtual QCString trStaticPackageMembers()
- {
- return "Paketin staattiset funktiot"; // "Static Package Functions"
- }
- /*! Used as a heading for a list of Java class variables with package
- * scope.
- */
- virtual QCString trPackageAttribs()
- {
- return "Paketin attribuutit"; // "Package Attributes"
- }
- /*! Used as a heading for a list of static Java class variables with
- * package scope.
- */
- virtual QCString trStaticPackageAttribs()
- {
- return "Paketin staattiset attribuutit"; // "Static Package Attributes"
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.3.1
-//////////////////////////////////////////////////////////////////////////
-
- /*! Used in the quick index of a class/file/namespace member list page
- * to link to the unfiltered list of all members.
- */
- virtual QCString trAll()
- {
- return "Kaikki"; // "All"
- }
- /*! Put in front of the call graph for a function. */
- virtual QCString trCallGraph()
- {
- return "Tässä on kutsukaavio tälle funktiolle:"; // "Here is the call graph for this function:"
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.3.3
-//////////////////////////////////////////////////////////////////////////
-
- /*! When the search engine is enabled this text is put in the header
- * of each page before the field where one can enter the text to search
- * for.
- */
- virtual QCString trSearchForIndex()
- {
- return "Etsi"; // "Search for"
- }
- /*! This string is used as the title for the page listing the search
- * results.
- */
- virtual QCString trSearchResultsTitle()
- {
- return "Hakutulokset"; // "Search Results"
- }
- /*! This string is put just before listing the search results. The
- * text can be different depending on the number of documents found.
- * Inside the text you can put the special marker $num to insert
- * the number representing the actual number of search results.
- * The @a numDocuments parameter can be either 0, 1 or 2, where the
- * value 2 represents 2 or more matches. HTML markup is allowed inside
- * the returned string.
- */
- virtual QCString trSearchResults(int numDocuments)
- {
- if (numDocuments==0)
- {
- return "Valitettavasti yksikään dokumentti ei vastannut hakuasi."; // "Sorry, no documents matching your query."
- }
- else if (numDocuments==1)
- {
- return "Löytyi <b>1</b> dokumentti, joka vastasi hakuasi."; // "Found <b>1</b> document matching your query.";
- }
- else
- {
- return "Löytyi <b>$num</b> dokumenttia, jotka vastasivat hakuasi. " // "Found <b>$num</b> documents matching your query. "
- "Parhaat tulokset näytetään ensin."; // "Showing best matches first."
- }
- }
- /*! This string is put before the list of matched words, for each search
- * result. What follows is the list of words that matched the query.
- */
- virtual QCString trSearchMatches()
- {
- return "Osumat:"; // "Matches:"
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.3.8
-//////////////////////////////////////////////////////////////////////////
-
- /*! This is used in HTML as the title of page with source code for file filename
- */
- virtual QCString trSourceFile(QCString& filename)
- {
- return filename + " lähdekooditiedosto"; // " Source File"
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.3.9
-//////////////////////////////////////////////////////////////////////////
-
- /*! This is used as the name of the chapter containing the directory
- * hierarchy.
- */
- virtual QCString trDirIndex()
- { return "Hakemistohierarkia"; } // "Directory Hierarchy"
-
- /*! This is used as the name of the chapter containing the documentation
- * of the directories.
- */
- virtual QCString trDirDocumentation()
- { return "Hakemistojen dokumentaatio"; } // "Directory Documentation"
-
- /*! This is used as the title of the directory index and also in the
- * Quick links of an HTML page, to link to the directory hierarchy.
- */
- virtual QCString trDirectories()
- { return "Hakemistot"; } // "Directories"
-
- /*! This returns a sentences that introduces the directory hierarchy.
- * and the fact that it is sorted alphabetically per level
- */
- virtual QCString trDirDescription()
- { return "Tämä hakemistohierarkia on järjestetty aakkosellisesti tasoittain:";
- //This directory hierarchy is sorted roughly, "
- // "but not completely, alphabetically:";
- }
-
- /*! This returns the title of a directory page. The name of the
- * directory is passed via \a dirName.
- */
- virtual QCString trDirReference(const char *dirName)
- { QCString result=dirName; result+=" hakemistoreferenssi"; return result; }
- // " Directory Reference"
-
- /*! This returns the word directory with or without starting capital
- * (\a first_capital) and in sigular or plural form (\a singular).
- */
- virtual QCString trDir(bool first_capital, bool singular)
- {
- QCString result((first_capital ? "Hakemisto" : "hakemisto")); // "Director" / "director"
- if (singular) result+=""; else result+="t"; // "+y" / "+ies"
- return result;
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.4.1
-//////////////////////////////////////////////////////////////////////////
-
- /*! This text is added to the documentation when the \\overload command
- * is used for a overloaded function.
- */
- virtual QCString trOverloadText()
- {
- return "Tämä on ylikuormitettu jäsenfunktio, ja se tarjotaan "
- "käytön helpottamiseksi. Se eroaa ylläolevasta "
- "funktiosta ainoastaan hyväksymiltään parametreilta.";
- // "This is an overloaded member function, "
- // "provided for convenience. It differs from the above "
- // "function only in what argument(s) it accepts."
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.4.6
-//////////////////////////////////////////////////////////////////////////
-
- /*! This is used to introduce a caller (or called-by) graph */
- virtual QCString trCallerGraph()
- {
- return "Tässä on kutsukaavio tälle funktiolle:"; // "Here is the caller graph for this function:"
- }
-
- /*! This is used in the documentation of a file/namespace before the list
- * of documentation blocks for enumeration values
- */
- virtual QCString trEnumerationValueDocumentation()
- { return "Luettelotyypin dokumentaatio"; } // "Enumerator Documentation"
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.5.4 (mainly for Fortran)
-//////////////////////////////////////////////////////////////////////////
-
- /*! header that is put before the list of member subprograms (Fortran). */
- virtual QCString trMemberFunctionDocumentationFortran()
- { return "Jäsenfunktioiden/aliohjelmien dokumentaatio"; } // "Member Function/Subroutine Documentation"
-
- /*! This is put above each page as a link to the list of annotated data types (Fortran). */
- virtual QCString trCompoundListFortran()
- { return "Tietotyyppien lista"; } // "Data Types List"
-
- /*! This is put above each page as a link to all members of compounds (Fortran). */
- virtual QCString trCompoundMembersFortran()
- { return "Kentät"; } // "Data Fields";
-
- /*! This is an introduction to the annotated compound list (Fortran). */
- virtual QCString trCompoundListDescriptionFortran()
- { return "Tässä ovat tietotyypit lyhyiden selitysten kanssa:"; } // "Here are the data types with brief descriptions:"
-
- /*! This is an introduction to the page with all data types (Fortran). */
- virtual QCString trCompoundMembersDescriptionFortran(bool extractAll)
- {
- QCString result="Tässä on lista kaikista "; // "Here is a list of all "
- if (!extractAll)
- {
- result+="dokumentoiduista "; // "documented "
- }
- result+="tietotyyppien jäsenistä"; // "data types members"
- result+=", sekä linkit "; // " with links to "
- if (!extractAll)
- {
- result+="tietueen dokumentaatioon jokaiselle jäsenelle"; // "the data structure documentation for each member"
- }
- else
- {
- result+="tietotyyppeihin, joihin ne kuuluvat:"; // "the data types they belong to:"
- }
- return result;
- }
-
- /*! This is used in LaTeX as the title of the chapter with the
- * annotated compound index (Fortran).
- */
- virtual QCString trCompoundIndexFortran()
- { return "Tietotyyppien hakemisto"; } // "Data Type Index"
-
- /*! This is used in LaTeX as the title of the chapter containing
- * the documentation of all data types (Fortran).
- */
- virtual QCString trTypeDocumentation()
- { return "Tietotyyppien dokumentaatio"; } // "Data Type Documentation"
-
- /*! This is used in the documentation of a file as a header before the
- * list of (global) subprograms (Fortran).
- */
- virtual QCString trSubprograms()
- { return "Funktiot/aliohjelmat"; } // "Functions/Subroutines"
-
- /*! This is used in the documentation of a file/namespace before the list
- * of documentation blocks for subprograms (Fortran)
- */
- virtual QCString trSubprogramDocumentation()
- { return "Funktioiden/aliohjelmien dokumentaatio"; } // "Function/Subroutine Documentation"
-
- /*! This is used in the documentation of a file/namespace/group before
- * the list of links to documented compounds (Fortran)
- */
- virtual QCString trDataTypes()
- { return "Tietotyypit"; } // "Data Types"
-
- /*! used as the title of page containing all the index of all modules (Fortran). */
- virtual QCString trModulesList()
- { return "Moduulilista"; } // "Modules List"
-
- /*! used as an introduction to the modules list (Fortran) */
- virtual QCString trModulesListDescription(bool extractAll)
- {
- QCString result="Tässä on lista kaikista "; // "Here is a list of all "
- if (!extractAll) result+="dokumentoiduista "; // "documented "
- result+="moduuleista lyhyiden selitysten kanssa:"; // "modules with brief descriptions:"
- return result;
- }
-
- /*! used as the title of the HTML page of a module/type (Fortran) */
- virtual QCString trCompoundReferenceFortran(const char *clName,
- ClassDef::CompoundType compType,
- bool isTemplate)
- {
- QCString result=(QCString)clName;
- switch(compType)
- {
- case ClassDef::Class: result+=" moduuli"; break; // " Module"
- case ClassDef::Struct: result+=" tyyppi"; break; // " Type"
- case ClassDef::Union: result+=" yhdiste"; break; // " Union"
- case ClassDef::Interface: result+=" rajapinta"; break; // " Interface"
- case ClassDef::Protocol: result+=" protokolla"; break; // " Protocol"
- case ClassDef::Category: result+=" kategoria"; break; // " Category"
- case ClassDef::Exception: result+=" poikkeus"; break; // " Exception"
- }
- if (isTemplate) result+="malli"; // " Template"
- result+="referenssi"; // " Reference"
- return result;
- }
- /*! used as the title of the HTML page of a module (Fortran) */
- virtual QCString trModuleReference(const char *namespaceName)
- {
- QCString result=namespaceName;
- result+=" moduulin referenssi"; // " Module Reference"
- return result;
- }
-
- /*! This is put above each page as a link to all members of modules. (Fortran) */
- virtual QCString trModulesMembers()
- { return "Moduulin jäsenet"; } // "Module Members"
-
- /*! This is an introduction to the page with all modules members (Fortran) */
- virtual QCString trModulesMemberDescription(bool extractAll)
- {
- QCString result="Tässä on lista moduulin kaikista "; // "Here is a list of all "
- if (!extractAll) result+="dokumentoiduista"; // "documented "
- result+="jäsenistä, sekä linkit "; // "module members with links to "
- if (extractAll)
- {
- result+="moduulin dokumentaatioon jokaiselle jäsenelle:"; // "the module documentation for each member:"
- }
- else
- {
- result+="moduuleihin, joihin ne kuuluvat:"; // "the modules they belong to:"
- }
- return result;
- }
-
- /*! This is used in LaTeX as the title of the chapter with the
- * index of all modules (Fortran).
- */
- virtual QCString trModulesIndex()
- { return "Moduulien hakemisto"; } // "Modules Index"
-
- /*! This is used for translation of the word that will possibly
- * be followed by a single name or by a list of names
- * of the category.
- */
- virtual QCString trModule(bool first_capital, bool singular)
- {
- QCString result((first_capital ? "Moduuli" : "moduuli")); // "Module" / "module"
- if (!singular) result+="t"; // "+s"
- return result;
- }
- /*! This is put at the bottom of a module documentation page and is
- * followed by a list of files that were used to generate the page.
- */
- virtual QCString trGeneratedFromFilesFortran(ClassDef::CompoundType compType,
- bool single)
- { // here s is one of " Module", " Struct" or " Union"
- // single is true implies a single file
- QCString result=(QCString)"Dokumentaatio tälle "; // "The documentation for this "
- switch(compType)
- {
- case ClassDef::Class: result+="moduulille"; break; // "module"
- case ClassDef::Struct: result+="tyypille"; break; // "type"
- case ClassDef::Union: result+="yhdisteelle"; break; // "union"
- case ClassDef::Interface: result+="rajapinnalle"; break; // "interface"
- case ClassDef::Protocol: result+="protokollalle"; break; // "protocol"
- case ClassDef::Category: result+="kategorialle"; break; // "category"
- case ClassDef::Exception: result+="poikkeukselle"; break; // "exception"
- }
- result+=" luotiin "; // " was generated from the following file"
- if (single) result+="seuraavasta tiedostosta:"; else result+="seuraavista tiedostoista:"; // ":" / "s:"
- return result;
- }
- /*! This is used for translation of the word that will possibly
- * be followed by a single name or by a list of names
- * of the category.
- */
- virtual QCString trType(bool first_capital, bool singular)
- {
- QCString result((first_capital ? "Tyyppi" : "tyyppi")); // "Type" / "type"
- if (!singular) result=(first_capital ? "Tyypit" : "tyypit"); // "+s"
- return result;
- }
- /*! This is used for translation of the word that will possibly
- * be followed by a single name or by a list of names
- * of the category.
- */
- virtual QCString trSubprogram(bool first_capital, bool singular)
- {
- QCString result((first_capital ? "Aliohjelma" : "aliohjelma")); // "Subprogram" / "subprogram"
- if (!singular) result+="t"; // "+s"
- return result;
- }
-
- /*! C# Type Constraint list */
- virtual QCString trTypeConstraints()
- {
- return "Tyyppien rajoitteet"; // "Type Constraints"
- }
-
-};
-
-#endif
diff --git a/trunk/src/translator_fr.h b/trunk/src/translator_fr.h
deleted file mode 100644
index 4b654ce..0000000
--- a/trunk/src/translator_fr.h
+++ /dev/null
@@ -1,1950 +0,0 @@
-/******************************************************************************
- *
- *
- *
- * Copyright (C) 1997-2012 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.
- *
- * The translation into French was provided by
- * Christophe Bordeux (bordeux@lig.di.epfl.ch)
- * and after version 1.2.0 by Xavier Outhier (xouthier@yahoo.fr)
- * member of the non for profit association D2SET (http://d2set.free.fr)
- */
-
-/******************************************************************************
- * History of content
- *
- * Date | Description
- * ============+=============================================================
- * 2001-11-22 | Removed obsolet methods:
- * | QCString latexBabelPackage()
- * | QCString trAuthor()
- * | QCString trAuthors()
- * | QCString trFiles()
- * | QCString trIncludeFile()
- * | QCString trVerbatimText(const char *f)
- * -------------+------------------------------------------------------------
- * 2002-01-23 | Update for new since 1.2.13
- * -------------+------------------------------------------------------------
- * 2002-07-11 | Update for new since 1.2.16
- * -------------+------------------------------------------------------------
- * 2002-09-24 | Update for new since 1.2.17
- * -------------+------------------------------------------------------------
- * 2002-10-22 | Update for new since 1.2.18
- * -------------+------------------------------------------------------------
- * 2003-02-04 | Corrected typo. Thanks to Bertrand M. :)
- * -------------+------------------------------------------------------------
- * 2003-03-29 | Update for new since 1.3
- * -------------+------------------------------------------------------------
- * 2003-03-29 | Changed fonction into méthode.
- * -------------+------------------------------------------------------------
- * 2003-06-06 | Fixed code page problem appeared between 1.42 and 1.43 in CVS
- * -------------+------------------------------------------------------------
- * 2003-06-10 | Update for new since 1.3.1
- * -------------+------------------------------------------------------------
- * 2003-09-12 | Update for new since 1.3.3
- * -------------+------------------------------------------------------------
- * 2004-04-30 | Updates by Jacques Bouchard <jacques.bouchard@noos.fr>:
- * | - spaces between ':' removed (should be added by the renderer)
- * | - missing spaces added
- * | - missing tests for OPTIMIZE_OUTPUT_FOR_C added
- * | - translations corrected
- * | - translator_fr.h now conforms exactly to translator_en.h
- * | (try: gvim -d translator_en.h translator_fr.h)
- * -------------+------------------------------------------------------------
- * 2005-07-12 | Update for new since 1.4.1
- * -------------+------------------------------------------------------------
- * 2005-10-09 | Update for new since 1.4.6
- * | Added virtual QCString trCallerGraph()
- * | Removed virtual QCString trHeaderFilesDescription()
- * | Removed virtual QCString trField(bool first_capital, bool singular)
- * | Removed virtual QCString trPackageDocumentation()
- * | Removed virtual QCString trSources()
- * | Removed virtual QCString trReimplementedForInternalReasons()
- * | Removed virtual QCString trInterfaces()
- * | Removed virtual QCString trHeaderFiles()
- * | Removed virtual QCString trBugsAndLimitations()
- * | Removed virtual QCString trNoDescriptionAvailable()
- * | Corrected some misspelling thanx to Christophe C.
- * -------------+------------------------------------------------------------
- */
-
-#ifndef TRANSLATOR_FR_H
-#define TRANSLATOR_FR_H
-
-// When defining a translator class for the new language, follow
-// the description in the documentation. One of the steps says
-// that you should copy the translator_en.h (this) file to your
-// translator_xx.h new file. Your new language should use the
-// Translator class as the base class. This means that you need to
-// implement exactly the same (pure virtual) methods as the
-// TranslatorEnglish does. Because of this, it is a good idea to
-// start with the copy of TranslatorEnglish and replace the strings
-// one by one.
-//
-// It is not necessary to include "translator.h" or
-// "translator_adapter.h" here. The files are included in the
-// language.cpp correctly. Not including any of the mentioned
-// files frees the maintainer from thinking about whether the
-// first, the second, or both files should be included or not, and
-// why. This holds namely for localized translators because their
-// base class is changed occasionaly to adapter classes when the
-// Translator class changes the interface, or back to the
-// Translator class (by the local maintainer) when the localized
-// translator is made up-to-date again.
-
-class TranslatorFrench : public Translator
-{
- public:
-
- // --- Language control methods -------------------
-
- /*! Used for identification of the language. The identification
- * should not be translated. It should be replaced by the name
- * of the language in English using lower-case characters only
- * (e.g. "czech", "japanese", "russian", etc.). It should be equal to
- * the identification used in language.cpp.
- */
- virtual QCString idLanguage()
- { return "french"; }
-
- /*! Used to get the LaTeX command(s) for the language support.
- * This method should return string with commands that switch
- * LaTeX to the desired language. For example
- * <pre>"\\usepackage[german]{babel}\n"
- * </pre>
- * or
- * <pre>"\\usepackage{polski}\n"
- * "\\usepackage[latin2]{inputenc}\n"
- * "\\usepackage[T1]{fontenc}\n"
- * </pre>
- */
- virtual QCString latexLanguageSupportCommand()
- {
- return "\\usepackage[french]{babel}\n";
- }
-
- /*! return the language charset. This will be used
- when transcoding the translatable strings in this file to UTF-8 */
- virtual QCString idLanguageCharset()
- {
- return "iso-8859-1";
- }
-
- // --- Language translation methods -------------------
-
- /*! used in the compound documentation before a list of related functions. */
- virtual QCString trRelatedFunctions()
- { return "Fonctions associées"; }
-
- /*! subscript for the related functions. */
- virtual QCString trRelatedSubscript()
- { return "(Notez que ce ne sont pas des fonctions membres)"; }
-
- /*! header that is put before the detailed description of files, classes and namespaces. */
- virtual QCString trDetailedDescription()
- { return "Description détaillée"; }
-
- /*! header that is put before the list of typedefs. */
- virtual QCString trMemberTypedefDocumentation()
- { return "Documentation des définitions de type membres"; }
-
- /*! header that is put before the list of enumerations. */
- virtual QCString trMemberEnumerationDocumentation()
- { return "Documentation des énumérations membres"; }
-
- /*! header that is put before the list of member functions. */
- virtual QCString trMemberFunctionDocumentation()
- { return "Documentation des fonctions membres"; }
-
- /*! header that is put before the list of member attributes. */
- virtual QCString trMemberDataDocumentation()
- {
- if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
- {
- return "Documentation des champs";
- }
- else
- {
- return "Documentation des données membres";
- }
- }
-
- /*! this is the text of a link put after brief descriptions. */
- virtual QCString trMore()
- { return "Plus de détails..."; }
-
- /*! put in the class documentation */
- virtual QCString trListOfAllMembers()
- { return "Liste de tous les membres"; }
-
- /*! used as the title of the "list of all members" page of a class */
- virtual QCString trMemberList()
- { return "Liste des membres"; }
-
- /*! this is the first part of a sentence that is followed by a class name */
- virtual QCString trThisIsTheListOfAllMembers()
- { return "Liste complète des membres de "; }
-
- /*! this is the remainder of the sentence after the class name */
- virtual QCString trIncludingInheritedMembers()
- { return ", y compris les membres hérités :"; }
-
- /*! this is put at the author sections at the bottom of man pages.
- * parameter s is name of the project name.
- */
- virtual QCString trGeneratedAutomatically(const char *s)
- { QCString result="Généré automatiquement par Doxygen";
- if (s) result+=(QCString)" pour "+s;
- result+=" à partir du code source.";
- return result;
- }
-
- /*! put after an enum name in the list of all members */
- virtual QCString trEnumName()
- { return "énumération"; }
-
- /*! put after an enum value in the list of all members */
- virtual QCString trEnumValue()
- { return "valeur énumérée"; }
-
- /*! put after an undocumented member in the list of all members */
- virtual QCString trDefinedIn()
- { return "défini dans"; }
-
- // quick reference sections
-
- /*! This is put above each page as a link to the list of all groups of
- * compounds or files (see the \\group command).
- */
- virtual QCString trModules()
- { return "Modules"; }
-
- /*! This is put above each page as a link to the class hierarchy */
- virtual QCString trClassHierarchy()
- { return "Hiérarchie des classes"; }
-
- /*! This is put above each page as a link to the list of annotated classes */
- virtual QCString trCompoundList()
- {
- if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
- {
- return "Structures de données";
- }
- else
- {
- return "Liste des classes";
- }
- }
-
- /*! This is put above each page as a link to the list of documented files */
- virtual QCString trFileList()
- { return "Liste des fichiers"; }
-
- /*! This is put above each page as a link to all members of compounds. */
- virtual QCString trCompoundMembers()
- {
- if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
- {
- return "Champs de donnée";
- }
- else
- {
- return "Membres de classe";
- }
- }
-
- /*! This is put above each page as a link to all members of files. */
- virtual QCString trFileMembers()
- {
- if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
- {
- return "Variables globale";
- }
- else
- {
- return "Membres de fichier";
- }
- }
-
- /*! This is put above each page as a link to all related pages. */
- virtual QCString trRelatedPages()
- { return "Pages associées"; }
-
- /*! This is put above each page as a link to all examples. */
- virtual QCString trExamples()
- { return "Exemples"; }
-
- /*! This is put above each page as a link to the search engine. */
- virtual QCString trSearch()
- { return "Recherche"; }
-
- /*! This is an introduction to the class hierarchy. */
- virtual QCString trClassHierarchyDescription()
- { return "Cette liste d'héritage est classée "
- "approximativement par ordre alphabétique :";
- }
-
- /*! This is an introduction to the list with all files. */
- virtual QCString trFileListDescription(bool extractAll)
- {
- QCString result="Liste de tous les fichiers ";
- if (!extractAll) result+="documentés ";
- result+="avec une brève description :";
- return result;
- }
-
- /*! This is an introduction to the annotated compound list. */
- virtual QCString trCompoundListDescription()
- {
-
- if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
- {
- return "Liste des structures de données avec une brève description :";
- }
- else
- {
- return "Liste des classes, structures, "
- "unions et interfaces avec une brève description :";
- }
- }
-
- /*! This is an introduction to the page with all class members. */
- virtual QCString trCompoundMembersDescription(bool extractAll)
- {
- QCString result="Liste de tous les ";
- if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
- {
- result+="champs de structure et d'union ";
- }
- else
- {
- result+="membres de classe ";
- }
- if (!extractAll)
- {
- result+="documentés ";
- }
- result+="avec des liens vers ";
- if (!extractAll)
- {
- if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
- {
- result+="la documentation de structure/union de chaque champ :";
- }
- else
- {
- result+="la documentation de classe de chaque membre :";
- }
- }
- else
- {
- if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
- {
- result+="les structures/unions auxquelles ils appartiennent :";
- }
- else
- {
- result+="les classes auxquelles ils appartiennent :";
- }
- }
- return result;
- }
-
- /*! This is an introduction to the page with all file members. */
- virtual QCString trFileMembersDescription(bool extractAll)
- {
- QCString result="Liste ";
-
- if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
- {
- result+="de toutes les fonctions, variables, macros, enumérations, et définitions de type ";
- }
- else
- {
- result+="de tous les membres de fichier ";
- }
- if (!extractAll) result+="documentés ";
- result+="avec des liens vers ";
- if (extractAll)
- result+="les fichiers auxquels ils appartiennent :";
- else
- result+="la documentation :";
- return result;
- }
-
- /*! This is an introduction to the page with the list of all examples */
- virtual QCString trExamplesDescription()
- { return "Liste de tous les exemples :"; }
-
- /*! This is an introduction to the page with the list of related pages */
- virtual QCString trRelatedPagesDescription()
- { return "Liste de toutes les pages de documentation associées :"; }
-
- /*! This is an introduction to the page with the list of class/file groups */
- virtual QCString trModulesDescription()
- { return "Liste de tous les modules :"; }
-
- /*! This is used in HTML as the title of index.html. */
- virtual QCString trDocumentation()
- { return "Documentation"; }
-
- /*! This is used in LaTeX as the title of the chapter with the
- * index of all groups.
- */
- virtual QCString trModuleIndex()
- { return "Index des modules"; }
-
- /*! This is used in LaTeX as the title of the chapter with the
- * class hierarchy.
- */
- virtual QCString trHierarchicalIndex()
- { return "Index hiérarchique"; }
-
- /*! This is used in LaTeX as the title of the chapter with the
- * annotated compound index.
- */
- virtual QCString trCompoundIndex()
- {
- if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
- {
- return "Index des structures de données";
- }
- else
- {
- return "Index des classes";
- }
- }
-
- /*! This is used in LaTeX as the title of the chapter with the
- * list of all files.
- */
- virtual QCString trFileIndex()
- { return "Index des fichiers"; }
-
- /*! This is used in LaTeX as the title of the chapter containing
- * the documentation of all groups.
- */
- virtual QCString trModuleDocumentation()
- { return "Documentation des modules"; }
-
- /*! This is used in LaTeX as the title of the chapter containing
- * the documentation of all classes, structs and unions.
- */
- virtual QCString trClassDocumentation()
- {
- if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
- {
- return "Documentation des structures de données";
- }
- else
- {
- return "Documentation des classes";
- }
- }
-
- /*! This is used in LaTeX as the title of the chapter containing
- * the documentation of all files.
- */
- virtual QCString trFileDocumentation()
- { return "Documentation des fichiers"; }
-
- /*! This is used in LaTeX as the title of the chapter containing
- * the documentation of all examples.
- */
- virtual QCString trExampleDocumentation()
- { return "Documentation des exemples"; }
-
- /*! This is used in LaTeX as the title of the chapter containing
- * the documentation of all related pages.
- */
- virtual QCString trPageDocumentation()
- { return "Documentation des pages associées"; }
-
- /*! This is used in LaTeX as the title of the document */
- virtual QCString trReferenceManual()
- { return "Manuel de référence"; }
-
- /*! This is used in the documentation of a file as a header before the
- * list of defines
- */
- virtual QCString trDefines()
- { return "Macros"; }
-
- /*! This is used in the documentation of a file as a header before the
- * list of function prototypes
- */
- virtual QCString trFuncProtos()
- { return "Prototypes de fonction"; }
-
- /*! This is used in the documentation of a file as a header before the
- * list of typedefs
- */
- virtual QCString trTypedefs()
- { return "Définitions de type"; }
-
- /*! This is used in the documentation of a file as a header before the
- * list of enumerations
- */
- virtual QCString trEnumerations()
- { return "Énumérations"; }
-
- /*! This is used in the documentation of a file as a header before the
- * list of (global) functions
- */
- virtual QCString trFunctions()
- { return "Fonctions"; }
-
- /*! This is used in the documentation of a file as a header before the
- * list of (global) variables
- */
- virtual QCString trVariables()
- { return "Variables"; }
-
- /*! This is used in the documentation of a file as a header before the
- * list of (global) variables
- */
- virtual QCString trEnumerationValues()
- { return "Valeurs énumérées"; }
-
- /*! This is used in the documentation of a file before the list of
- * documentation blocks for defines
- */
- virtual QCString trDefineDocumentation()
- { return "Documentation des macros"; }
-
- /*! This is used in the documentation of a file/namespace before the list
- * of documentation blocks for function prototypes
- */
- virtual QCString trFunctionPrototypeDocumentation()
- { return "Documentation des prototypes de fonction"; }
-
- /*! This is used in the documentation of a file/namespace before the list
- * of documentation blocks for typedefs
- */
- virtual QCString trTypedefDocumentation()
- { return "Documentation des définitions de type"; }
-
- /*! This is used in the documentation of a file/namespace before the list
- * of documentation blocks for enumeration types
- */
- virtual QCString trEnumerationTypeDocumentation()
- { return "Documentation du type de l'énumération"; }
-
- /*! This is used in the documentation of a file/namespace before the list
- * of documentation blocks for functions
- */
- virtual QCString trFunctionDocumentation()
- { return "Documentation des fonctions"; }
-
- /*! This is used in the documentation of a file/namespace before the list
- * of documentation blocks for variables
- */
- virtual QCString trVariableDocumentation()
- { return "Documentation des variables"; }
-
- /*! This is used in the documentation of a file/namespace/group before
- * the list of links to documented compounds
- */
- virtual QCString trCompounds()
- {
- if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
- {
- return "Structures de données";
- }
- else
- {
- return "Classes";
- }
- }
-
- /*! This is used in the standard footer of each page and indicates when
- * the page was generated
- */
- virtual QCString trGeneratedAt(const char *date,const char *projName)
- {
- QCString result=(QCString)"Généré le "+date;
- if (projName) result+=(QCString)" pour "+projName;
- result+=(QCString)" par";
- return result;
- }
- /*! This is part of the sentence used in the standard footer of each page.
- */
- virtual QCString trWrittenBy()
- {
- return "écrit par";
- }
-
- /*! this text is put before a class diagram */
- virtual QCString trClassDiagram(const char *clName)
- {
- return (QCString)"Graphe d'héritage de "+clName+":";
- }
-
- /*! this text is generated when the \\internal command is used. */
- virtual QCString trForInternalUseOnly()
- { return "Pour un usage interne uniquement."; }
-
- /*! this text is generated when the \\warning command is used. */
- virtual QCString trWarning()
- { return "Avertissement"; }
-
- /*! this text is generated when the \\version command is used. */
- virtual QCString trVersion()
- { return "Version"; }
-
- /*! this text is generated when the \\date command is used. */
- virtual QCString trDate()
- { return "Date"; }
-
- /*! this text is generated when the \\return command is used. */
- virtual QCString trReturns()
- { return "Renvoie"; }
-
- /*! this text is generated when the \\sa command is used. */
- virtual QCString trSeeAlso()
- { return "Voir également"; }
-
- /*! this text is generated when the \\param command is used. */
- virtual QCString trParameters()
- { return "Paramètres"; }
-
- /*! this text is generated when the \\exception command is used. */
- virtual QCString trExceptions()
- { return "Exceptions"; }
-
- /*! this text is used in the title page of a LaTeX document. */
- virtual QCString trGeneratedBy()
- { return "Généré par"; }
-
- //////////////////////////////////////////////////////////////////////////
- // new since 0.49-990307
- //////////////////////////////////////////////////////////////////////////
-
- /*! used as the title of page containing all the index of all namespaces. */
- virtual QCString trNamespaceList()
- { return "Liste des espaces de nommage"; }
-
- /*! used as an introduction to the namespace list */
- virtual QCString trNamespaceListDescription(bool extractAll)
- {
- QCString result="Liste de tous les espaces de nommage ";
- if (!extractAll) result+="documentés ";
- result+="avec une brève description:";
- return result;
- }
-
- /*! used in the class documentation as a header before the list of all
- * friends of a class
- */
- virtual QCString trFriends()
- { return "Amis"; }
-
- //////////////////////////////////////////////////////////////////////////
- // new since 0.49-990405
- //////////////////////////////////////////////////////////////////////////
-
- /*! used in the class documentation as a header before the list of all
- * related classes
- */
- virtual QCString trRelatedFunctionDocumentation()
- { return "Documentation des fonctions amies et associées"; }
-
- //////////////////////////////////////////////////////////////////////////
- // new since 0.49-990425
- //////////////////////////////////////////////////////////////////////////
-
- /*! used as the title of the HTML page of a class/struct/union */
- virtual QCString trCompoundReference(const char *clName,
- ClassDef::CompoundType compType,
- bool isTemplate)
- {
- QCString result="Référence ";
- if (isTemplate) result+="du modèle ";
- result+="de ";
- switch(compType)
- {
- case ClassDef::Class: result+="la classe "; break;
- case ClassDef::Struct: result+="la structure "; break;
- case ClassDef::Union: result+="l'union "; break;
- case ClassDef::Interface: result+="l'interface "; break;
- case ClassDef::Protocol: result+="le protocol "; break;
- case ClassDef::Category: result+="la catégorie "; break;
- case ClassDef::Exception: result+="l'exception "; break;
- }
- result+=(QCString)clName;
- return result;
- }
-
- /*! used as the title of the HTML page of a file */
- virtual QCString trFileReference(const char *fileName)
- {
- QCString result= "Référence du fichier ";
- result+=fileName;
- return result;
- }
-
- /*! used as the title of the HTML page of a namespace */
- virtual QCString trNamespaceReference(const char *namespaceName)
- {
- QCString result= "Référence de l'espace de nommage ";
- result+=namespaceName;
- return result;
- }
-
- virtual QCString trPublicMembers()
- { return "Fonctions membres publiques"; }
- virtual QCString trPublicSlots()
- { return "Connecteurs publics"; }
- virtual QCString trSignals()
- { return "Signaux"; }
- virtual QCString trStaticPublicMembers()
- { return "Fonctions membres publiques statiques"; }
- virtual QCString trProtectedMembers()
- { return "Fonctions membres protégées"; }
- virtual QCString trProtectedSlots()
- { return "Connecteurs protégés"; }
- virtual QCString trStaticProtectedMembers()
- { return "Fonctions membres protégées statiques"; }
- virtual QCString trPrivateMembers()
- { return "Fonctions membres privées"; }
- virtual QCString trPrivateSlots()
- { return "Connecteurs privés"; }
- virtual QCString trStaticPrivateMembers()
- { return "Fonctions membres privées statiques"; }
-
- /*! this function is used to produce a comma-separated list of items.
- * use generateMarker(i) to indicate where item i should be put.
- */
- virtual QCString trWriteList(int numEntries)
- {
- QCString result;
- int i;
- // the inherits list contain `numEntries' classes
- for (i=0;i<numEntries;i++)
- {
- // use generateMarker to generate placeholders for the class links!
- result+=generateMarker(i); // generate marker for entry i in the list
- // (order is left to right)
-
- if (i!=numEntries-1) // not the last entry, so we need a separator
- {
- if (i<numEntries-2) // not the fore last entry
- result+=", ";
- else // the fore last entry
- result+=", et ";
- }
- }
- return result;
- }
-
- /*! used in class documentation to produce a list of base classes,
- * if class diagrams are disabled.
- */
- virtual QCString trInheritsList(int numEntries)
- {
- return "Est dérivée de "+trWriteList(numEntries)+".";
- }
-
- /*! used in class documentation to produce a list of super classes,
- * if class diagrams are disabled.
- */
- virtual QCString trInheritedByList(int numEntries)
- {
- return "Dérivée par "+trWriteList(numEntries)+".";
- }
-
- /*! used in member documentation blocks to produce a list of
- * members that are hidden by this one.
- */
- virtual QCString trReimplementedFromList(int numEntries)
- {
- return "Réimplémentée à partir de "+trWriteList(numEntries)+".";
- }
-
- /*! used in member documentation blocks to produce a list of
- * all member that overwrite the implementation of this member.
- */
- virtual QCString trReimplementedInList(int numEntries)
- {
- return "Réimplémentée dans "+trWriteList(numEntries)+".";
- }
-
- /*! This is put above each page as a link to all members of namespaces. */
- virtual QCString trNamespaceMembers()
- { return "Membres de l'espace de nommage"; }
-
- /*! This is an introduction to the page with all namespace members */
- virtual QCString trNamespaceMemberDescription(bool extractAll)
- {
- QCString result="Liste de tous les membres des espaces de nommage ";
- if (!extractAll) result+="documentés ";
- result+="avec des liens vers ";
- if (extractAll)
- result+="la documentation de namespace de chaque membre :";
- else
- result+="les espaces de nommage auxquels ils appartiennent :";
- return result;
- }
- /*! This is used in LaTeX as the title of the chapter with the
- * index of all namespaces.
- */
- virtual QCString trNamespaceIndex()
- { return "Index des espaces de nommage"; }
-
- /*! This is used in LaTeX as the title of the chapter containing
- * the documentation of all namespaces.
- */
- virtual QCString trNamespaceDocumentation()
- { return "Documentation des espaces de nommage"; }
-
- //////////////////////////////////////////////////////////////////////////
- // new since 0.49-990522
- //////////////////////////////////////////////////////////////////////////
-
- /*! This is used in the documentation before the list of all
- * namespaces in a file.
- */
- virtual QCString trNamespaces()
- { return "Espaces de nommage"; }
-
- //////////////////////////////////////////////////////////////////////////
- // new since 0.49-990728
- //////////////////////////////////////////////////////////////////////////
-
- /*! This is put at the bottom of a class documentation page and is
- * followed by a list of files that were used to generate the page.
- */
- virtual QCString trGeneratedFromFiles(ClassDef::CompoundType compType,
- bool single)
- { // here s is one of " Class", " Struct" or " Union"
- // single is true implies a single file
- bool female = true;
- QCString result=(QCString)"La documentation de ";
- switch(compType)
- {
- case ClassDef::Class: result+="cette classe"; break;
- case ClassDef::Struct: result+="cette structure"; break;
- case ClassDef::Union: result+="cette union"; break;
- case ClassDef::Interface: result+="cette interface"; break;
- case ClassDef::Protocol: result+="ce protocol"; female = false; break;
- case ClassDef::Category: result+="cette catégorie"; break;
- case ClassDef::Exception: result+="cette exception"; break;
- }
- if (female) result+= " a été générée à partir ";
- else result+=" a été généré à partir ";
- if (single) result+="du fichier suivant :";
- else result+="des fichiers suivants :";
- return result;
- }
-
- /*! This is in the (quick) index as a link to the alphabetical compound
- * list.
- */
- virtual QCString trAlphabeticalList()
- { return "Liste alphabétique"; }
-
- //////////////////////////////////////////////////////////////////////////
- // new since 0.49-990901
- //////////////////////////////////////////////////////////////////////////
-
- /*! This is used as the heading text for the retval command. */
- virtual QCString trReturnValues()
- { return "Valeurs retournées"; }
-
- /*! This is in the (quick) index as a link to the main page (index.html)
- */
- virtual QCString trMainPage()
- { return "Page principale"; }
-
- /*! This is used in references to page that are put in the LaTeX
- * documentation. It should be an abbreviation of the word page.
- */
- virtual QCString trPageAbbreviation()
- { return "p."; }
-
- //////////////////////////////////////////////////////////////////////////
- // new since 0.49-991003
- //////////////////////////////////////////////////////////////////////////
-
- virtual QCString trDefinedAtLineInSourceFile()
- {
- return "Définition à la ligne @0 du fichier @1.";
- }
- virtual QCString trDefinedInSourceFile()
- {
- return "Définition dans le fichier @0.";
- }
-
- //////////////////////////////////////////////////////////////////////////
- // new since 0.49-991205
- //////////////////////////////////////////////////////////////////////////
-
- virtual QCString trDeprecated()
- {
- return "Obsolète";
- }
-
- //////////////////////////////////////////////////////////////////////////
- // new since 1.0.0
- //////////////////////////////////////////////////////////////////////////
-
- /*! this text is put before a collaboration diagram */
- virtual QCString trCollaborationDiagram(const char *clName)
- {
- return (QCString)"Graphe de collaboration de "+clName+":";
- }
- /*! this text is put before an include dependency graph */
- virtual QCString trInclDepGraph(const char *fName)
- {
- return (QCString)"Graphe des dépendances par inclusion de "+fName+":";
- }
- /*! header that is put before the list of constructor/destructors. */
- virtual QCString trConstructorDocumentation()
- {
- return "Documentation des constructeurs et destructeur";
- }
- /*! Used in the file documentation to point to the corresponding sources. */
- virtual QCString trGotoSourceCode()
- {
- return "Aller au code source de ce fichier.";
- }
- /*! Used in the file sources to point to the corresponding documentation. */
- virtual QCString trGotoDocumentation()
- {
- return "Aller à la documentation de ce fichier.";
- }
- /*! Text for the \\pre command */
- virtual QCString trPrecondition()
- {
- return "Précondition";
- }
- /*! Text for the \\post command */
- virtual QCString trPostcondition()
- {
- return "Postcondition";
- }
- /*! Text for the \\invariant command */
- virtual QCString trInvariant()
- {
- return "Invariant";
- }
- /*! Text shown before a multi-line variable/enum initialization */
- virtual QCString trInitialValue()
- {
- return "Valeur initiale :";
- }
- /*! Text used the source code in the file index */
- virtual QCString trCode()
- {
- return "code";
- }
- virtual QCString trGraphicalHierarchy()
- {
- return "Graphe hiérarchique des classes";
- }
- virtual QCString trGotoGraphicalHierarchy()
- {
- return "Aller au graphe hiérarchique des classes";
- }
- virtual QCString trGotoTextualHierarchy()
- {
- return "Aller à la hiérarchie des classes en mode texte";
- }
- virtual QCString trPageIndex()
- {
- return "Index des pages";
- }
-
- //////////////////////////////////////////////////////////////////////////
- // new since 1.1.0
- //////////////////////////////////////////////////////////////////////////
-
- virtual QCString trNote()
- {
- return "Note";
- }
- virtual QCString trPublicTypes()
- {
- return "Types publics";
- }
- virtual QCString trPublicAttribs()
- {
- if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
- {
- return "Champs de données";
- }
- else
- {
- return "Attributs publics";
- }
- }
- virtual QCString trStaticPublicAttribs()
- {
- return "Attributs publics statiques";
- }
- virtual QCString trProtectedTypes()
- {
- return "Types protégés";
- }
- virtual QCString trProtectedAttribs()
- {
- return "Attributs protégés";
- }
- virtual QCString trStaticProtectedAttribs()
- {
- return "Attributs protégés statiques";
- }
- virtual QCString trPrivateTypes()
- {
- return "Types privés";
- }
- virtual QCString trPrivateAttribs()
- {
- return "Attributs privés";
- }
- virtual QCString trStaticPrivateAttribs()
- {
- return "Attributs privés statiques";
- }
-
- //////////////////////////////////////////////////////////////////////////
- // new since 1.1.3
- //////////////////////////////////////////////////////////////////////////
-
- /*! Used as a marker that is put before a \\todo item */
- virtual QCString trTodo()
- {
- return "A faire";
- }
- /*! Used as the header of the todo list */
- virtual QCString trTodoList()
- {
- return "Liste des choses à faire";
- }
-
- //////////////////////////////////////////////////////////////////////////
- // new since 1.1.4
- //////////////////////////////////////////////////////////////////////////
-
- virtual QCString trReferencedBy()
- {
- return "Référencé par";
- }
- virtual QCString trRemarks()
- {
- return "Remarques";
- }
- virtual QCString trAttention()
- {
- return "Attention";
- }
- virtual QCString trInclByDepGraph()
- {
- return "Ce graphe montre quels fichiers incluent directement "
- "ou indirectement ce fichier :";
- }
- virtual QCString trSince()
- {
- return "Depuis";
- }
-
- //////////////////////////////////////////////////////////////////////////
- // new since 1.1.5
- //////////////////////////////////////////////////////////////////////////
-
- /*! title of the graph legend page */
- virtual QCString trLegendTitle()
- {
- return "Légende du graphe";
- }
- /*! page explaining how the dot graph's should be interpreted
- * The %A in the text below are to prevent link to classes called "A".
- */
- virtual QCString trLegendDocs()
- {
- return
- "Cette page explique comment interpréter les graphes générés "
- "par doxygen.<p>\n"
- "Considérez l'exemple suivant :\n"
- "\\code\n"
- "/*! Classe invisible à cause d'une troncature */\n"
- "class Invisible { };\n\n"
- "/*! Classe tronquée, la relation d'héritage est masquée */\n"
- "class Truncated : public Invisible { };\n\n"
- "/*! Classe non documentée avec des commentaires Doxygen */\n"
- "class Undocumented { };\n\n"
- "/*! Classe dérivée par héritage public */\n"
- "class PublicBase : public Truncated { };\n\n"
- "/*! Un modèle de classe */\n"
- "template<class T> class Templ { };\n\n"
- "/*! Classe dérivée par héritage protégé */\n"
- "class ProtectedBase { };\n\n"
- "/*! Classe dérivée par héritage privé */\n"
- "class PrivateBase { };\n\n"
- "/*! Classe utilisée par la classe dérivée */\n"
- "class Used { };\n\n"
- "/*! Super-classe qui hérite de plusieurs autres classes */\n"
- "class Inherited : public PublicBase,\n"
- " protected ProtectedBase,\n"
- " private PrivateBase,\n"
- " public Undocumented,\n"
- " public Templ<int>\n"
- "{\n"
- " private:\n"
- " Used *m_usedClass;\n"
- "};\n"
- "\\endcode\n"
- "Si la valeur 240 est attribuée au tag \\c MAX_DOT_GRAPH_HEIGHT "
- "du fichier de configuration, cela génèrera le graphe suivant :"
- "<p><center><img alt=\"\" src=\"graph_legend."+Config_getEnum("DOT_IMAGE_FORMAT")+"\"></center>\n"
- "<p>\n"
- "Les rectangles du graphe ci-dessus ont la signification suivante :\n"
- "<ul>\n"
- "<li>Un rectangle plein noir représente la structure ou la classe pour laquelle "
- "le graphe est généré.\n"
- "<li>Un rectangle avec un bord noir indique une classe ou une structure documentée.\n"
- "<li>Un rectangle avec un bord gris indique une classe ou une structure non documentée.\n"
- "<li>Un rectangle avec un bord rouge indique une structure ou une classe documentée\n"
- "pour laquelle des relations d'héritage ou de collaboration manquent. Un graphe est "
- "tronqué s'il n'entre pas dans les limites spécifiées."
- "</ul>\n"
- "Les flèches ont la signification suivante :\n"
- "<ul>\n"
- "<li>Une flèche bleu foncé est utilisée pour visualiser une relation d'héritage publique "
- "entre deux classes.\n"
- "<li>Une flèche vert foncé est utilisée pour une relation d'héritage protégée.\n"
- "<li>Une flèche rouge foncé est utilisée pour une relation d'héritage privée.\n"
- "<li>Une flèche violette en pointillés est utilisée si une classe est contenue ou "
- "utilisée par une autre classe. La flèche est étiquetée avec la ou les variable(s) "
- "qui permettent d'accéder à la classe ou structure pointée. \n"
- "<li>Une flèche jaune en pointillés indique une relation entre un modèle d'instance et "
- "le modèle de classe duquel il est instancié. La flèche est étiquetée avec "
- "les paramètres de modèle de l'instance.\n"
- "</ul>\n";
- }
- /*! text for the link to the legend page */
- virtual QCString trLegend()
- {
- return "légende";
- }
-
- //////////////////////////////////////////////////////////////////////////
- // new since 1.2.0
- //////////////////////////////////////////////////////////////////////////
-
- /*! Used as a marker that is put before a test item */
- virtual QCString trTest()
- {
- return "Test";
- }
- /*! Used as the header of the test list */
- virtual QCString trTestList()
- {
- return "Liste des tests";
- }
-
- //////////////////////////////////////////////////////////////////////////
- // new since 1.2.1
- //////////////////////////////////////////////////////////////////////////
-
- /*! Used as a section header for KDE-2 IDL methods */
- virtual QCString trDCOPMethods()
- {
- return "Fonctions membres DCOP";
- }
-
- //////////////////////////////////////////////////////////////////////////
- // new since 1.2.2
- //////////////////////////////////////////////////////////////////////////
-
- /*! Used as a section header for IDL properties */
- virtual QCString trProperties()
- {
- return "Propriétés";
- }
- /*! Used as a section header for IDL property documentation */
- virtual QCString trPropertyDocumentation()
- {
- return "Documentation des propriétés";
- }
-
- //////////////////////////////////////////////////////////////////////////
- // new since 1.2.4
- //////////////////////////////////////////////////////////////////////////
-
- /*! Used for Java classes in the summary section of Java packages */
- virtual QCString trClasses()
- {
- if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
- {
- return "Structures de données";
- }
- else
- {
- return "Classes";
- }
- }
- /*! Used as the title of a Java package */
- virtual QCString trPackage(const char *name)
- {
- return (QCString)"Paquetage "+name;
- }
- /*! Title of the package index page */
- virtual QCString trPackageList()
- {
- return "Liste des paquetages";
- }
- /*! The description of the package index page */
- virtual QCString trPackageListDescription()
- {
- return "Liste des paquetages avec une brève description (si disponible) :";
- }
- /*! The link name in the Quick links header for each page */
- virtual QCString trPackages()
- {
- return "Paquetages";
- }
- /*! Text shown before a multi-line define */
- virtual QCString trDefineValue()
- {
- return "Valeur :";
- }
-
- //////////////////////////////////////////////////////////////////////////
- // new since 1.2.5
- //////////////////////////////////////////////////////////////////////////
-
- /*! Used as a marker that is put before a \\bug item */
- virtual QCString trBug()
- {
- return "Bogue";
- }
- /*! Used as the header of the bug list */
- virtual QCString trBugList()
- {
- return "Liste des bogues";
- }
-
- //////////////////////////////////////////////////////////////////////////
- // new since 1.2.6
- //////////////////////////////////////////////////////////////////////////
-
- /*! Used as ansicpg for RTF file
- *
- * The following table shows the correlation of Charset name, Charset Value and
- * <pre>
- * Codepage number:
- * Charset Name Charset Value(hex) Codepage number
- * ------------------------------------------------------
- * DEFAULT_CHARSET 1 (x01)
- * SYMBOL_CHARSET 2 (x02)
- * OEM_CHARSET 255 (xFF)
- * ANSI_CHARSET 0 (x00) 1252
- * RUSSIAN_CHARSET 204 (xCC) 1251
- * EE_CHARSET 238 (xEE) 1250
- * GREEK_CHARSET 161 (xA1) 1253
- * TURKISH_CHARSET 162 (xA2) 1254
- * BALTIC_CHARSET 186 (xBA) 1257
- * HEBREW_CHARSET 177 (xB1) 1255
- * ARABIC _CHARSET 178 (xB2) 1256
- * SHIFTJIS_CHARSET 128 (x80) 932
- * HANGEUL_CHARSET 129 (x81) 949
- * GB2313_CHARSET 134 (x86) 936
- * CHINESEBIG5_CHARSET 136 (x88) 950
- * </pre>
- *
- */
- virtual QCString trRTFansicp()
- {
- return "1252";
- }
-
-
- /*! Used as ansicpg for RTF fcharset
- * \see trRTFansicp() for a table of possible values.
- */
- virtual QCString trRTFCharSet()
- {
- return "0";
- }
-
- /*! Used as header RTF general index */
- virtual QCString trRTFGeneralIndex()
- {
- return "Index";
- }
-
- /*! This is used for translation of the word that will possibly
- * be followed by a single name or by a list of names
- * of the category.
- */
- virtual QCString trClass(bool first_capital, bool singular)
- {
- QCString result((first_capital ? "Classe" : "classe"));
- if (!singular) result+="s";
- return result;
- }
-
- /*! This is used for translation of the word that will possibly
- * be followed by a single name or by a list of names
- * of the category.
- */
- virtual QCString trFile(bool first_capital, bool singular)
- {
- QCString result((first_capital ? "Fichier" : "fichier"));
- if (!singular) result+="s";
- return result;
- }
-
- /*! This is used for translation of the word that will possibly
- * be followed by a single name or by a list of names
- * of the category.
- */
- virtual QCString trNamespace(bool first_capital, bool singular)
- {
- QCString result((first_capital ? "Espace" : "espace"));
- if (!singular) result+="s";
- result+=" de nommage";
- return result;
- }
-
- /*! This is used for translation of the word that will possibly
- * be followed by a single name or by a list of names
- * of the category.
- */
- virtual QCString trGroup(bool first_capital, bool singular)
- {
- QCString result((first_capital ? "Groupe" : "groupe"));
- if (!singular) result+="s";
- return result;
- }
-
- /*! This is used for translation of the word that will possibly
- * be followed by a single name or by a list of names
- * of the category.
- */
- virtual QCString trPage(bool first_capital, bool singular)
- {
- QCString result((first_capital ? "Page" : "page"));
- if (!singular) result+="s";
- return result;
- }
-
- /*! This is used for translation of the word that will possibly
- * be followed by a single name or by a list of names
- * of the category.
- */
- virtual QCString trMember(bool first_capital, bool singular)
- {
- QCString result((first_capital ? "Membre" : "membre"));
- if (!singular) result+="s";
- return result;
- }
-
- /*! This is used for translation of the word that will possibly
- * be followed by a single name or by a list of names
- * of the category.
- */
- virtual QCString trGlobal(bool first_capital, bool singular)
- {
- QCString result((first_capital ? "Globa" : "globa"));
- if (!singular) result+="ux(ales)"; else result+="l(e)";
- return result;
- }
-
- //////////////////////////////////////////////////////////////////////////
- // new since 1.2.7
- //////////////////////////////////////////////////////////////////////////
-
- /*! This text is generated when the \\author command is used and
- * for the author section in man pages. */
- virtual QCString trAuthor(bool first_capital, bool singular)
- {
- QCString result((first_capital ? "Auteur" : "auteur"));
- if (!singular) result+="s";
- return result;
- }
-
- //////////////////////////////////////////////////////////////////////////
- // new since 1.2.11
- //////////////////////////////////////////////////////////////////////////
-
- /*! This text is put before the list of members referenced by a member
- */
- virtual QCString trReferences()
- {
- return "Références";
- }
-
- //////////////////////////////////////////////////////////////////////////
- // new since 1.2.13
- //////////////////////////////////////////////////////////////////////////
-
- /*! used in member documentation blocks to produce a list of
- * members that are implemented by this one.
- */
- virtual QCString trImplementedFromList(int numEntries)
- {
- return "Implémente "+trWriteList(numEntries)+".";
- }
-
- /*! used in member documentation blocks to produce a list of
- * all members that implement this abstract member.
- */
- virtual QCString trImplementedInList(int numEntries)
- {
- return "Implémenté dans "+trWriteList(numEntries)+".";
- }
-
- //////////////////////////////////////////////////////////////////////////
- // new since 1.2.16
- //////////////////////////////////////////////////////////////////////////
-
- /*! used in RTF documentation as a heading for the Table
- * of Contents.
- */
- virtual QCString trRTFTableOfContents()
- {
- return "Table des matières";
- }
-
- //////////////////////////////////////////////////////////////////////////
- // new since 1.2.17
- //////////////////////////////////////////////////////////////////////////
-
- /*! Used as the header of the list of item that have been
- * flagged deprecated
- */
- virtual QCString trDeprecatedList()
- {
- return "Liste des éléments obsolètes";
- }
-
- //////////////////////////////////////////////////////////////////////////
- // new since 1.2.18
- //////////////////////////////////////////////////////////////////////////
-
- /*! Used as a header for declaration section of the events found in
- * a C# program
- */
- virtual QCString trEvents()
- {
- return "Événements";
- }
- /*! Header used for the documentation section of a class' events. */
- virtual QCString trEventDocumentation()
- {
- return "Documentation des événements";
- }
-
- //////////////////////////////////////////////////////////////////////////
- // new since 1.3
- //////////////////////////////////////////////////////////////////////////
-
- /*! Used as a heading for a list of Java class types with package scope.
- */
- virtual QCString trPackageTypes()
- {
- return "Types de paquetage";
- }
- /*! Used as a heading for a list of Java class functions with package
- * scope.
- */
- virtual QCString trPackageMembers()
- {
- return "Fonctions de paquetage";
- }
- /*! Used as a heading for a list of static Java class functions with
- * package scope.
- */
- virtual QCString trStaticPackageMembers()
- {
- return "Fonctions statiques de paquetage";
- }
- /*! Used as a heading for a list of Java class variables with package
- * scope.
- */
- virtual QCString trPackageAttribs()
- {
- return "Attributs de paquetage";
- }
- /*! Used as a heading for a list of static Java class variables with
- * package scope.
- */
- virtual QCString trStaticPackageAttribs()
- {
- return "Attributs statiques de paquetage";
- }
-
- //////////////////////////////////////////////////////////////////////////
- // new since 1.3.1
- //////////////////////////////////////////////////////////////////////////
-
- /*! Used in the quick index of a class/file/namespace member list page
- * to link to the unfiltered list of all members.
- */
- virtual QCString trAll()
- {
- return "Tout";
- }
- /*! Put in front of the call graph for a function. */
- virtual QCString trCallGraph()
- {
- return "Voici le graphe d'appel pour cette fonction :";
- }
-
- //////////////////////////////////////////////////////////////////////////
- // new since 1.3.3
- //////////////////////////////////////////////////////////////////////////
-
- /*! When the search engine is enabled this text is put in the header
- * of each page before the field where one can enter the text to search
- * for.
- */
- virtual QCString trSearchForIndex()
- {
- return "Rechercher";
- }
- /*! This string is used as the title for the page listing the search
- * results.
- */
- virtual QCString trSearchResultsTitle()
- {
- return "Résultats de la recherche";
- }
- /*! This string is put just before listing the search results. The
- * text can be different depending on the number of documents found.
- * Inside the text you can put the special marker $num to insert
- * the number representing the actual number of search results.
- * The @a numDocuments parameter can be either 0, 1 or 2, where the
- * value 2 represents 2 or more matches. HTML markup is allowed inside
- * the returned string.
- */
- virtual QCString trSearchResults(int numDocuments)
- {
- if (numDocuments==0)
- {
- return "Désolé, aucun document ne correspond à votre requête.";
- }
- else if (numDocuments==1)
- {
- return "Trouvé <b>1</b> document correspondant à votre requête.";
- }
- else
- {
- return "Trouvé <b>$num</b> documents correspondant à votre requête. "
- "Classé par ordre de pertinence décroissant.";
- }
- }
- /*! This string is put before the list of matched words, for each search
- * result. What follows is the list of words that matched the query.
- */
- virtual QCString trSearchMatches()
- {
- return "Correspondances :";
- }
-
- //////////////////////////////////////////////////////////////////////////
- // new since 1.3.8
- //////////////////////////////////////////////////////////////////////////
-
- /*! This is used in HTML as the title of page with source code for file filename
- */
- virtual QCString trSourceFile(QCString& filename)
- {
- return " Fichier source de " + filename;
- }
-
- //////////////////////////////////////////////////////////////////////////
- // new since 1.3.9
- //////////////////////////////////////////////////////////////////////////
-
- /*! This is used as the name of the chapter containing the directory
- * hierarchy.
- */
- virtual QCString trDirIndex()
- { return "Hiérarchie de répertoires"; }
-
- /*! This is used as the name of the chapter containing the documentation
- * of the directories.
- */
- virtual QCString trDirDocumentation()
- { return "Documentation des répertoires"; }
-
- /*! This is used as the title of the directory index and also in the
- * Quick links of a HTML page, to link to the directory hierarchy.
- */
- virtual QCString trDirectories()
- { return "Répertoires"; }
-
- /*! This returns a sentences that introduces the directory hierarchy.
- * and the fact that it is sorted alphabetically per level
- */
- virtual QCString trDirDescription()
- { return "Cette hiérarchie de répertoire est triée approximativement, "
- "mais pas complètement, par ordre alphabétique :";
- }
-
- /*! This returns the title of a directory page. The name of the
- * directory is passed via \a dirName.
- */
- virtual QCString trDirReference(const char *dirName)
- { QCString result="Répertoire de référence de "; result+=dirName; return result; }
-
- /*! This returns the word directory with or without starting capital
- * (\a first_capital) and in sigular or plural form (\a singular).
- */
- virtual QCString trDir(bool first_capital, bool singular)
- {
- QCString result((first_capital ? "Répertoire" : "répertoire"));
- if (singular) result+=""; else result+="s";
- return result;
- }
-
- //////////////////////////////////////////////////////////////////////////
- // new since 1.4.1
- //////////////////////////////////////////////////////////////////////////
-
- /*! This text is added to the documentation when the \\overload command
- * is used for a overloaded function.
- */
- virtual QCString trOverloadText()
- {
- return "Ceci est une fonction membre surchargée, "
- "proposée par commodité. Elle diffère de la fonction "
- "ci-dessus uniquement par le(s) argument(s) qu'elle accepte.";
- }
-
- //////////////////////////////////////////////////////////////////////////
- // new since 1.4.6
- //////////////////////////////////////////////////////////////////////////
-
- /*! This is used to introduce a caller (or called-by) graph */
- virtual QCString trCallerGraph()
- {
- return "Voici le graphe des appelants de cette fonction :";
- }
-
- /*! This is used in the documentation of a file/namespace before the list
- * of documentation blocks for enumeration values
- */
- virtual QCString trEnumerationValueDocumentation()
- { return "Documentation des énumérations"; }
-
- //////////////////////////////////////////////////////////////////////////
- // new since 1.5.4 (mainly for Fortran)
- //////////////////////////////////////////////////////////////////////////
-
- /*! header that is put before the list of member subprograms (Fortran). */
- virtual QCString trMemberFunctionDocumentationFortran()
- { return "Documentation des fonctions/subroutines membres"; }
-
- /*! This is put above each page as a link to the list of annotated data types (Fortran). */
- virtual QCString trCompoundListFortran()
- { return "Liste des types de données"; }
-
- /*! This is put above each page as a link to all members of compounds (Fortran). */
- virtual QCString trCompoundMembersFortran()
- { return "Champs de données"; }
-
- /*! This is an introduction to the annotated compound list (Fortran). */
- virtual QCString trCompoundListDescriptionFortran()
- { return "Liste des types de données avec une brève description :"; }
-
- /*! This is an introduction to the page with all data types (Fortran). */
- virtual QCString trCompoundMembersDescriptionFortran(bool extractAll)
- {
- QCString result="Liste de tous les membres de types de données ";
- if (!extractAll)
- {
- result+="documentés ";
- }
- result+="avec des liens vers ";
- if (!extractAll)
- {
- result+="la documentation de la structure des données de chaque membre :";
- }
- else
- {
- result+="les types des données auxquels ils appartiennent :";
- }
- return result;
- }
-
- /*! This is used in LaTeX as the title of the chapter with the
- * annotated compound index (Fortran).
- */
- virtual QCString trCompoundIndexFortran()
- { return "Index du type de données"; }
-
- /*! This is used in LaTeX as the title of the chapter containing
- * the documentation of all data types (Fortran).
- */
- virtual QCString trTypeDocumentation()
- { return "Documentation du type de données"; }
-
- /*! This is used in the documentation of a file as a header before the
- * list of (global) subprograms (Fortran).
- */
- virtual QCString trSubprograms()
- { return "Fonctions/Subroutines"; }
-
- /*! This is used in the documentation of a file/namespace before the list
- * of documentation blocks for subprograms (Fortran)
- */
- virtual QCString trSubprogramDocumentation()
- { return "Documentation de la fonction/subroutine"; }
-
- /*! This is used in the documentation of a file/namespace/group before
- * the list of links to documented compounds (Fortran)
- */
- virtual QCString trDataTypes()
- { return "Les types de données"; }
-
- /*! used as the title of page containing all the index of all modules (Fortran). */
- virtual QCString trModulesList()
- { return "Liste des modules"; }
-
- /*! used as an introduction to the modules list (Fortran) */
- virtual QCString trModulesListDescription(bool extractAll)
- {
- QCString result="Liste de tous les modules ";
- if (!extractAll) result+="documentés ";
- result+="avec une brève description :";
- return result;
- }
-
- /*! used as the title of the HTML page of a module/type (Fortran) */
- virtual QCString trCompoundReferenceFortran(const char *clName,
- ClassDef::CompoundType compType,
- bool isTemplate)
- {
- QCString result="Réference ";
- if (isTemplate) result+="du modèle ";
- switch(compType)
- {
- case ClassDef::Class: result+="du module "; break;
- case ClassDef::Struct: result+="du type "; break;
- case ClassDef::Union: result+="de l'union "; break;
- case ClassDef::Interface: result+="de l'interface "; break;
- case ClassDef::Protocol: result+="du protocole "; break;
- case ClassDef::Category: result+="de la catégorie "; break;
- case ClassDef::Exception: result+="de l'exception "; break;
- }
- result+=(QCString)clName;
- return result;
- }
- /*! used as the title of the HTML page of a module (Fortran) */
- virtual QCString trModuleReference(const char *namespaceName)
- {
- QCString result="Référence du module ";
- result+= namespaceName;
- return result;
- }
-
- /*! This is put above each page as a link to all members of modules. (Fortran) */
- virtual QCString trModulesMembers()
- { return "Membres du module"; }
-
- /*! This is an introduction to the page with all modules members (Fortran) */
- virtual QCString trModulesMemberDescription(bool extractAll)
- {
- QCString result="Liste de tous les membres ";
- if (!extractAll) result+="documentés ";
- result+="du module avec des liens vers ";
- if (extractAll)
- {
- result+="la documentation du module de chaque membre :";
- }
- else
- {
- result+="les modules auxquels ils appartiennent :";
- }
- return result;
- }
-
- /*! This is used in LaTeX as the title of the chapter with the
- * index of all modules (Fortran).
- */
- virtual QCString trModulesIndex()
- { return "Index des modules"; }
-
- /*! This is used for translation of the word that will possibly
- * be followed by a single name or by a list of names
- * of the category.
- */
- virtual QCString trModule(bool first_capital, bool singular)
- {
- QCString result((first_capital ? "Module" : "module"));
- if (!singular) result+="s";
- return result;
- }
-
- /*! This is put at the bottom of a module documentation page and is
- * followed by a list of files that were used to generate the page.
- */
- virtual QCString trGeneratedFromFilesFortran(ClassDef::CompoundType compType,
- bool single)
- {
- // single is true implies a single file
- QCString result=(QCString)"La documentation de ";
- switch(compType)
- {
- case ClassDef::Class: result+="ce module"; break;
- case ClassDef::Struct: result+="ce type"; break;
- case ClassDef::Union: result+="cette union"; break;
- case ClassDef::Interface: result+="cette interface"; break;
- case ClassDef::Protocol: result+="ce protocole"; break;
- case ClassDef::Category: result+="cette catégorie"; break;
- case ClassDef::Exception: result+="cette exception"; break;
- }
- result+=" a été générée à partir ";
- if (single) result+="du fichier suivant :"; else result+="des fichiers suivants :";
- return result;
- }
-
- /*! This is used for translation of the word that will possibly
- * be followed by a single name or by a list of names
- * of the category.
- */
- virtual QCString trType(bool first_capital, bool singular)
- {
- QCString result((first_capital ? "Type" : "type"));
- if (!singular) result+="s";
- return result;
- }
-
- /*! This is used for translation of the word that will possibly
- * be followed by a single name or by a list of names
- * of the category.
- */
- virtual QCString trSubprogram(bool first_capital, bool singular)
- {
- QCString result((first_capital ? "Sous-programme" : "sous-programme"));
- if (!singular) result+="s";
- return result;
- }
-
- /*! C# Type Constraint list */
- virtual QCString trTypeConstraints()
- {
- return "Contraintes de type";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.6.0 (mainly for the new search engine)
-//////////////////////////////////////////////////////////////////////////
-
- /*! directory relation for \a name */
- virtual QCString trDirRelation(const char *name)
- {
- return "Relation " + QCString(name);
- }
-
- /*! Loading message shown when loading search results */
- virtual QCString trLoading()
- {
- return "Chargement...";
- }
-
- /*! Label used for search results in the global namespace */
- virtual QCString trGlobalNamespace()
- {
- return "Espace de nommage global";
- }
-
- /*! Message shown while searching */
- virtual QCString trSearching()
- {
- return "Recherche...";
- }
-
- /*! Text shown when no search results are found */
- virtual QCString trNoMatches()
- {
- return "Aucune correspondance";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.6.3
-//////////////////////////////////////////////////////////////////////////
-
- /*! introduction text for the directory dependency graph */
- virtual QCString trDirDependency(const char *name)
- {
- return (QCString)"Graphe des dépendances de répertoire pour "+name;
- }
-
- /*! when clicking a directory dependency label, a page with a
- * table is shown. The heading for the first column mentions the
- * source file that has a relation to another file.
- */
- virtual QCString trFileIn(const char *name)
- {
- return (QCString)"Fichier dans "+name;
- }
-
- /*! when clicking a directory dependency label, a page with a
- * table is shown. The heading for the second column mentions the
- * destination file that is included.
- */
- virtual QCString trIncludesFileIn(const char *name)
- {
- return (QCString)"Inclut le fichier dans "+name;
- }
-
- /** Compiles a date string.
- * @param year Year in 4 digits
- * @param month Month of the year: 1=January
- * @param day Day of the Month: 1..31
- * @param dayOfWeek Day of the week: 1=Monday..7=Sunday
- * @param hour Hour of the day: 0..23
- * @param minutes Minutes in the hour: 0..59
- * @param seconds Seconds within the minute: 0..59
- * @param includeTime Include time in the result string?
- */
- virtual QCString trDateTime(int year,int month,int day,int dayOfWeek,
- int hour,int minutes,int seconds,
- bool includeTime)
- {
- static const char *days[] = { "Lundi","Mardi","Mercredi","Jeudi","Vendredi","Samedi","Dimanche" };
- static const char *months[] = { "Janvier","Février","Mars","Avril","Mai","Juin","Juillet","Août","Septembre","Octobre","Novembre","Décembre" };
- QCString sdate;
- sdate.sprintf("%s %s %d %d",days[dayOfWeek-1],months[month-1],day,year);
- if (includeTime)
- {
- QCString stime;
- stime.sprintf(" %.2d:%.2d:%.2d",hour,minutes,seconds);
- sdate+=stime;
- }
- return sdate;
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.7.5
-//////////////////////////////////////////////////////////////////////////
-
- /*! Header for the page with bibliographic citations */
- virtual QCString trCiteReferences()
- { return "Références bibliographiques"; }
-
- /*! Text for copyright paragraph */
- virtual QCString trCopyright()
- { return "Copyright"; }
-
- /*! Header for the graph showing the directory dependencies */
- virtual QCString trDirDepGraph(const char *name)
- { return QCString("Graphe des dépendances de répertoires pour ")+name+":"; }
-
-};
-
-#endif
diff --git a/trunk/src/translator_gr.h b/trunk/src/translator_gr.h
deleted file mode 100644
index bcf6b27..0000000
--- a/trunk/src/translator_gr.h
+++ /dev/null
@@ -1,1864 +0,0 @@
-/******************************************************************************
- *
- *
- *
- * Copyright (C) 1997-2012 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.
- *
- */
-
-/*
- * 15 Dec 2001 : Translation to greek by
- * Harry Kalogirou <no email>
- *
- * 01 Jan 2009 : Greek maintainance by
- * Paul Gessos <gessos.paul@yahoo.gr>
- */
-
-#ifndef TRANSLATOR_GR_H
-#define TRANSLATOR_GR_H
-
-class TranslatorGreek : public Translator
-{
- protected:
- friend class TranslatorAdapterBase;
-
- public:
-
- // --- Language control methods -------------------
-
- /*! Used for identification of the language. The identification
- * should not be translated. It should be replaced by the name
- * of the language in English using lower-case characters only
- * (e.g. "czech", "japanese", "russian", etc.). It should be equal to
- * the identification used in language.cpp.
- */
- virtual QCString idLanguage()
- { return "greek"; }
-
- virtual QCString latexLanguageSupportCommand()
- {
- //return "\\usepackage[greek,english]{babel}\n\\usepackage[iso-8859-7]{inputenc}\n";
- return "\\usepackage[greek,english]{babel}\n";
- }
-
- /*! return the language charset. This will be used for the HTML output */
- virtual QCString idLanguageCharset()
- {
- return "utf-8";
- }
-
- // --- Language translation methods -------------------
-
- /*! used in the compound documentation before a list of related functions. */
- virtual QCString trRelatedFunctions()
- { return "Σχετικές συναÏτήσεις"; }
-
- /*! subscript for the related functions. */
- virtual QCString trRelatedSubscript()
- { return "(Σημειώστε ότι αυτές δεν είναι συναÏτήσεις μέλη.)"; }
-
- /*! header that is put before the detailed description of files, classes and namespaces. */
- virtual QCString trDetailedDescription()
- { return "ΛεπτομεÏής ΠεÏιγÏαφή"; }
-
- /*! header that is put before the list of typedefs. */
- virtual QCString trMemberTypedefDocumentation()
- { return "ΤεκμηÏίωση Μελών Typedef"; }
-
- /*! header that is put before the list of enumerations. */
- virtual QCString trMemberEnumerationDocumentation()
- { return "ΤεκμηÏίωση ΑπαÏιθμήσεων Μελών"; }
-
- /*! header that is put before the list of member functions. */
- virtual QCString trMemberFunctionDocumentation()
- { return "ΤεκμηÏίωση ΣυναÏτήσεων Μελών"; }
-
- /*! header that is put before the list of member attributes. */
- virtual QCString trMemberDataDocumentation()
- {
- if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
- {
- return "ΤεκμηÏίωση Πεδίων";
- }
- else
- {
- return "ΤεκμηÏίωση Δεδομένων Μελών";
- }
- }
-
- /*! this is the text of a link put after brief descriptions. */
- virtual QCString trMore()
- { return "ΠεÏισσότεÏα..."; }
-
- /*! put in the class documentation */
- virtual QCString trListOfAllMembers()
- { return "Λίστα όλων των μελών."; }
-
- /*! used as the title of the "list of all members" page of a class */
- virtual QCString trMemberList()
- { return "Λίστα μελών"; }
-
- /*! this is the first part of a sentence that is followed by a class name */
- virtual QCString trThisIsTheListOfAllMembers()
- { return "Ακολουθεί η πλήÏης λίστα των μελών της"; }
-
- /*! this is the remainder of the sentence after the class name */
- virtual QCString trIncludingInheritedMembers()
- { return ", πεÏιλαμβανομένων όλων των κληÏονομημένων μελών."; }
-
- /*! this is put at the author sections at the bottom of man pages.
- * parameter s is name of the project name.
- */
- virtual QCString trGeneratedAutomatically(const char *s)
- { QCString result="ΔημιουÏγήθηκε αυτόματα από το Doxygen";
- if (s) result+=(QCString)" για "+s;
- result+=" από τον πηγαίο κώδικα.";
- return result;
- }
-
- /*! put after an enum name in the list of all members */
- virtual QCString trEnumName()
- { return "όνομα απαÏÏθμισης"; }
-
- /*! put after an enum value in the list of all members */
- virtual QCString trEnumValue()
- { return "τιμή απαÏίθμησης"; }
-
- /*! put after an undocumented member in the list of all members */
- virtual QCString trDefinedIn()
- { return "οÏισμένο στο "; }
-
- // quick reference sections
-
- /*! This is put above each page as a link to the list of all groups of
- * compounds or files (see the \\group command).
- */
- virtual QCString trModules()
- { return "Κομμάτια"; }
-
- /*! This is put above each page as a link to the class hierarchy */
- virtual QCString trClassHierarchy()
- { return "ΙεÏαÏχία Κλάσεων"; }
-
- /*! This is put above each page as a link to the list of annotated classes */
- virtual QCString trCompoundList()
- {
- if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
- {
- return "Δομές Δεδομένων";
- }
- else
- {
- return "Λίστα Κλάσεων";
- }
- }
-
- /*! This is put above each page as a link to the list of documented files */
- virtual QCString trFileList()
- { return "Λίστα ΑÏχείων"; }
-
- /*! This is put above each page as a link to all members of compounds. */
- virtual QCString trCompoundMembers()
- {
- if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
- {
- return "Μέλη Δομών Δεδομένων";
- }
- else
- {
- return "Μέλη Κλάσεων";
- }
- }
-
- /*! This is put above each page as a link to all members of files. */
- virtual QCString trFileMembers()
- {
- if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
- {
- return "Καθολικοί οÏισμοί";
- }
- else
- {
- return "Μέλη ΑÏχείων";
- }
- }
-
- /*! This is put above each page as a link to all related pages. */
- virtual QCString trRelatedPages()
- { return "Σχετικές Σελίδες"; }
-
- /*! This is put above each page as a link to all examples. */
- virtual QCString trExamples()
- { return "ΠαÏαδείγματα"; }
-
- /*! This is put above each page as a link to the search engine. */
- virtual QCString trSearch()
- { return "Αναζήτηση"; }
-
- /*! This is an introduction to the class hierarchy. */
- virtual QCString trClassHierarchyDescription()
- { return "Αυτή η λίστα κληÏονομικότητας είναι μεÏικώς ταξινομημένη αλφαβητικά:"; }
-
- /*! This is an introduction to the list with all files. */
- virtual QCString trFileListDescription(bool extractAll)
- {
- QCString result="Ακολουθεί μια λίστα όλων των ";
- if (!extractAll) result+="τεκμηÏιωμένων ";
- result+="αÏχείων με σÏντομες πεÏιγÏαφές:";
- return result;
- }
-
- /*! This is an introduction to the annotated compound list. */
- virtual QCString trCompoundListDescription()
- {
-
- if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
- {
- return "ΑκολουθοÏνε οι δομές δεδομένων με σÏντομες πεÏιγÏαφές:";
- }
- else
- {
- return "ΑκολουθοÏνε οι κλάσεις, δομές, "
- "ενώσεις και οι διασυνδέσεις με σÏντομες πεÏιγÏαφές:";
- }
- }
-
- /*! This is an introduction to the page with all class members. */
- virtual QCString trCompoundMembersDescription(bool extractAll)
- {
- QCString result="Ακολουθεί η λίστα όλων των ";
- if (!extractAll)
- {
- result+="τεκμηÏιωμένων ";
- }
- if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
- {
- result+="μελών δομών δεδομένων και ενώσεων ";
- }
- else
- {
- result+="κλάσεων";
- }
- result+=" με συνδέσμους ";
- if (!extractAll)
- {
- if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
- {
- result+="στην τεκμηÏίωση των δομών/ενώσεων για κάθε πεδίο:";
- }
- else
- {
- result+="στην τεκμηÏίωση των κλάσεων για κάθε πεδίο:";
- }
- }
- else
- {
- if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
- {
- result+="στις δομές/ενώσεις που ανήκουν:";
- }
- else
- {
- result+="στις κλάσεις που ανήκουν:";
- }
- }
- return result;
- }
-
- /*! This is an introduction to the page with all file members. */
- virtual QCString trFileMembersDescription(bool extractAll)
- {
- QCString result="Ακολουθεί η λίστα όλων των ";
- if (!extractAll) result+="τεκμηÏιωμένων ";
-
- if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
- {
- result+="συναÏτήσεων, μεταβλητών, οÏισμών, απαÏιθμήσεων, και οÏισμών Ï„Ïπων";
- }
- else
- {
- result+="μελών αÏχείων";
- }
- result+=" με συνδέσμους ";
- if (extractAll)
- result+="στα αÏχεία που ανήκουν:";
- else
- result+="στην τεκμηÏίωση:";
- return result;
- }
-
- /*! This is an introduction to the page with the list of all examples */
- virtual QCString trExamplesDescription()
- { return "Ακολουθεί η λίστα με τα παÏαδείγματα:"; }
-
- /*! This is an introduction to the page with the list of related pages */
- virtual QCString trRelatedPagesDescription()
- { return "Ακολουθεί η λίστα όλων των σχετικών σελίδων τεκμηÏίωσης:"; }
-
- /*! This is an introduction to the page with the list of class/file groups */
- virtual QCString trModulesDescription()
- { return "Ακολουθεί η λίστα όλων των μονάδων:"; }
-
- // index titles (the project name is prepended for these)
-
-
- /*! This is used in HTML as the title of index.html. */
- virtual QCString trDocumentation()
- { return "ΤεκμηÏίωση"; }
-
- /*! This is used in LaTeX as the title of the chapter with the
- * index of all groups.
- */
- virtual QCString trModuleIndex()
- { return "ΕυÏετήÏιο μονάδων"; }
-
- /*! This is used in LaTeX as the title of the chapter with the
- * class hierarchy.
- */
- virtual QCString trHierarchicalIndex()
- { return "ΙεÏαÏχικό ΕυÏετήÏιο"; }
-
- /*! This is used in LaTeX as the title of the chapter with the
- * annotated compound index.
- */
- virtual QCString trCompoundIndex()
- {
- if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
- {
- return "ΕυÏετήÏιο δομών δεδομένων";
- }
- else
- {
- return "Συμπαγές ΕυÏετήÏιο";
- }
- }
-
- /*! This is used in LaTeX as the title of the chapter with the
- * list of all files.
- */
- virtual QCString trFileIndex()
- { return "ΕυÏετήτιο ΑÏχείων"; }
-
- /*! This is used in LaTeX as the title of the chapter containing
- * the documentation of all groups.
- */
- virtual QCString trModuleDocumentation()
- { return "ΤεκμηÏίωση Μονάδων"; }
-
- /*! This is used in LaTeX as the title of the chapter containing
- * the documentation of all classes, structs and unions.
- */
- virtual QCString trClassDocumentation()
- {
- if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
- {
- return "ΤεκμηÏίωση Δομών Δεδομένων";
- }
- else
- {
- return "ΤεκμηÏίωση Κλάσεων";
- }
- }
-
- /*! This is used in LaTeX as the title of the chapter containing
- * the documentation of all files.
- */
- virtual QCString trFileDocumentation()
- { return "ΤεκμηÏίωση ΑÏχείων"; }
-
- /*! This is used in LaTeX as the title of the chapter containing
- * the documentation of all examples.
- */
- virtual QCString trExampleDocumentation()
- { return "ΤεκμηÏίωση ΠαÏαδειγμάτων"; }
-
- /*! This is used in LaTeX as the title of the chapter containing
- * the documentation of all related pages.
- */
- virtual QCString trPageDocumentation()
- { return "ΤεκμηÏίωση Σελίδων"; }
-
- /*! This is used in LaTeX as the title of the document */
- virtual QCString trReferenceManual()
- { return "ΕγχειÏίδιο ΑναφοÏάς"; }
-
- /*! This is used in the documentation of a file as a header before the
- * list of defines
- */
- virtual QCString trDefines()
- { return "ΟÏισμοί"; }
-
- /*! This is used in the documentation of a file as a header before the
- * list of function prototypes
- */
- virtual QCString trFuncProtos()
- { return "ΠÏωτοτυπήσεις ΣυναÏτήσεων"; }
-
- /*! This is used in the documentation of a file as a header before the
- * list of typedefs
- */
- virtual QCString trTypedefs()
- { return "ΟÏισμοί ΤÏπων"; }
-
- /*! This is used in the documentation of a file as a header before the
- * list of enumerations
- */
- virtual QCString trEnumerations()
- { return "ΑπαÏιθμήσεις"; }
-
- /*! This is used in the documentation of a file as a header before the
- * list of (global) functions
- */
- virtual QCString trFunctions()
- { return "ΣυναÏτήσεις"; }
-
- /*! This is used in the documentation of a file as a header before the
- * list of (global) variables
- */
- virtual QCString trVariables()
- { return "Μεταβλητές"; }
-
- /*! This is used in the documentation of a file as a header before the
- * list of (global) variables
- */
- virtual QCString trEnumerationValues()
- { return "Τιμές ΑπαÏιθμήσεων"; }
-
- /*! This is used in the documentation of a file before the list of
- * documentation blocks for defines
- */
- virtual QCString trDefineDocumentation()
- { return "ΤεκμηÏίωση ΟÏισμών"; }
-
- /*! This is used in the documentation of a file/namespace before the list
- * of documentation blocks for function prototypes
- */
- virtual QCString trFunctionPrototypeDocumentation()
- { return "ΤεκμηÏίωση ΠÏωτοτυπήσεων των ΣυναÏτήσεων"; }
-
- /*! This is used in the documentation of a file/namespace before the list
- * of documentation blocks for typedefs
- */
- virtual QCString trTypedefDocumentation()
- { return "ΤεκμηÏίωση ΟÏισμών ΤÏπων"; }
-
- /*! This is used in the documentation of a file/namespace before the list
- * of documentation blocks for enumeration types
- */
- virtual QCString trEnumerationTypeDocumentation()
- { return "ΤεκμηÏίωση ΑπαÏιθμήσεων"; }
-
- /*! This is used in the documentation of a file/namespace before the list
- * of documentation blocks for functions
- */
- virtual QCString trFunctionDocumentation()
- { return "ΤεκμηÏίωση ΣυναÏτήσεων"; }
-
- /*! This is used in the documentation of a file/namespace before the list
- * of documentation blocks for variables
- */
- virtual QCString trVariableDocumentation()
- { return "ΤεκμηÏίωση Μεταβλητών"; }
-
- /*! This is used in the documentation of a file/namespace/group before
- * the list of links to documented compounds
- */
- virtual QCString trCompounds()
- {
- if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
- {
- return "Δομές Δεδομένων";
- }
- else
- {
- return "Κλάσεις";
- }
- }
-
- /*! This is used in the standard footer of each page and indicates when
- * the page was generated
- */
- virtual QCString trGeneratedAt(const char *date,const char *projName)
- {
- QCString result=(QCString)"ΔημιουÏγήθηκε στις "+date;
- if (projName) result+=(QCString)" για "+projName;
- result+=(QCString)" από";
- return result;
- }
- /*! This is part of the sentence used in the standard footer of each page.
- */
- virtual QCString trWrittenBy()
- {
- return "γÏαμμένο από τον ";
- }
-
- /*! this text is put before a class diagram */
- virtual QCString trClassDiagram(const char *clName)
- {
- return (QCString)"ΔιάγÏαμμα κληÏονομικότητας για την "+clName+":";
- }
-
- /*! this text is generated when the \\internal command is used. */
- virtual QCString trForInternalUseOnly()
- { return "Μόνο για εσωτεÏική χÏήση."; }
-
- /*! this text is generated when the \\warning command is used. */
- virtual QCString trWarning()
- { return "ΠÏοειδοποίηση"; }
-
- /*! this text is generated when the \\version command is used. */
- virtual QCString trVersion()
- { return "Έκδοση"; }
-
- /*! this text is generated when the \\date command is used. */
- virtual QCString trDate()
- { return "Ημ/νια"; }
-
- /*! this text is generated when the \\return command is used. */
- virtual QCString trReturns()
- { return "ΕπιστÏέφει"; }
-
- /*! this text is generated when the \\sa command is used. */
- virtual QCString trSeeAlso()
- { return "Κοιτάξτε επίσης "; }
-
- /*! this text is generated when the \\param command is used. */
- virtual QCString trParameters()
- { return "ΠαÏάμετÏοι"; }
-
- /*! this text is generated when the \\exception command is used. */
- virtual QCString trExceptions()
- { return "ΕξαίÏεση"; }
-
- /*! this text is used in the title page of a LaTeX document. */
- virtual QCString trGeneratedBy()
- { return "ΔημιουÏγήθηκε από "; }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 0.49-990307
-//////////////////////////////////////////////////////////////////////////
-
- /*! used as the title of page containing all the index of all namespaces. */
- virtual QCString trNamespaceList()
- { return "Λίστα ΧώÏων Ονομάτων"; }
-
- /*! used as an introduction to the namespace list */
- virtual QCString trNamespaceListDescription(bool extractAll)
- {
- QCString result="Ακολουθέι η λίστα όλων των ";
- if (!extractAll) result+="τεκμηÏιωμένων ";
- result+="ΧώÏων Ονομάτων με σÏντομες πεÏιγÏαφές:";
- return result;
- }
-
- /*! used in the class documentation as a header before the list of all
- * friends of a class
- */
- virtual QCString trFriends()
- { return "Φίλοι"; }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 0.49-990405
-//////////////////////////////////////////////////////////////////////////
-
- /*! used in the class documentation as a header before the list of all
- * related classes
- */
- virtual QCString trRelatedFunctionDocumentation()
- { return "ΤεκμηÏίωση Φιλικών και Συσχετιζόμενων ΣυναÏτήσεων"; }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 0.49-990425
-//////////////////////////////////////////////////////////////////////////
-
- /*! used as the title of the HTML page of a class/struct/union */
- virtual QCString trCompoundReference(const char *clName,
- ClassDef::CompoundType compType,
- bool isTemplate)
- {
- QCString result=(QCString)"ΑναφοÏά";
- if (isTemplate) result+=" ΠÏοτÏπου";
- switch(compType)
- {
- case ClassDef::Class: result+=" Κλάσης"; break;
- case ClassDef::Struct: result+=" Δομής"; break;
- case ClassDef::Union: result+=" Ένωσης"; break;
- case ClassDef::Interface: result+=" ΔιαπÏοσωπίας"; break;
- case ClassDef::Protocol: result+=" ΠÏωτοκόλλου"; break;
- case ClassDef::Category: result+=" ΚατηγοÏίας"; break;
- case ClassDef::Exception: result+=" ΕξαίÏεσης"; break;
- }
- result+=clName;
- return result;
- }
-
- /*! used as the title of the HTML page of a file */
- virtual QCString trFileReference(const char *fileName)
- {
- QCString result="ΑναφοÏά ΑÏχείου ";
- result+=fileName;
- return result;
- }
-
- /*! used as the title of the HTML page of a namespace */
- virtual QCString trNamespaceReference(const char *namespaceName)
- {
- QCString result="ΑναφοÏά ΧώÏου Ονομάτων ";
- result+=namespaceName;
- return result;
- }
-
- virtual QCString trPublicMembers()
- { return "Δημόσιες Μέθοδοι"; }
- virtual QCString trPublicSlots()
- { return "Δημόσια Slots"; }
- virtual QCString trSignals()
- { return "Σήματα"; }
- virtual QCString trStaticPublicMembers()
- { return "Στατικές Δημόσιες Μέδοδοι"; }
- virtual QCString trProtectedMembers()
- { return "ΠÏοστατευμένες Μέδοδοι"; }
- virtual QCString trProtectedSlots()
- { return "ΠÏοστατευμένα Slots"; }
- virtual QCString trStaticProtectedMembers()
- { return "Στατικές ΠÏοστατευμένες Μέδοδοι"; }
- virtual QCString trPrivateMembers()
- { return "Ιδιωτικές Μέθοδοι"; }
- virtual QCString trPrivateSlots()
- { return "Ιδιοτικά Slots"; }
- virtual QCString trStaticPrivateMembers()
- { return "Στατικές Ιδιωτικές Μέθοδοι"; }
-
- /*! this function is used to produce a comma-separated list of items.
- * use generateMarker(i) to indicate where item i should be put.
- */
- virtual QCString trWriteList(int numEntries)
- {
- QCString result;
- int i;
- // the inherits list contain `numEntries' classes
- for (i=0;i<numEntries;i++)
- {
- // use generateMarker to generate placeholders for the class links!
- result+=generateMarker(i); // generate marker for entry i in the list
- // (order is left to right)
-
- if (i!=numEntries-1) // not the last entry, so we need a separator
- {
- if (i<numEntries-2) // not the fore last entry
- result+=", ";
- else // the fore last entry
- result+=", και ";
- }
- }
- return result;
- }
-
- /*! used in class documentation to produce a list of base classes,
- * if class diagrams are disabled.
- */
- virtual QCString trInheritsList(int numEntries)
- {
- return "ΚληÏονομεί "+trWriteList(numEntries)+".";
- }
-
- /*! used in class documentation to produce a list of super classes,
- * if class diagrams are disabled.
- */
- virtual QCString trInheritedByList(int numEntries)
- {
- return "ΚληÏονομείται από "+trWriteList(numEntries)+".";
- }
-
- /*! used in member documentation blocks to produce a list of
- * members that are hidden by this one.
- */
- virtual QCString trReimplementedFromList(int numEntries)
- {
- return "Επαναϋλοποιείται από "+trWriteList(numEntries)+".";
- }
-
- /*! used in member documentation blocks to produce a list of
- * all member that overwrite the implementation of this member.
- */
- virtual QCString trReimplementedInList(int numEntries)
- {
- return "Επαναϋλοποιείται στην "+trWriteList(numEntries)+".";
- }
-
- /*! This is put above each page as a link to all members of namespaces. */
- virtual QCString trNamespaceMembers()
- { return "Μέλη ΧώÏου Ονομάτων"; }
-
- /*! This is an introduction to the page with all namespace members */
- virtual QCString trNamespaceMemberDescription(bool extractAll)
- {
- QCString result="Ακολουθεί η λίστα όλων των ";
- if (!extractAll) result+="τεκμηÏιωμένων ";
- result+="μελών χώÏων ονομάτων με συνδέσμους ";
- if (extractAll)
- result+="στην τεκμηÏίωση του χώÏου ονομάτων για κάθε μέλος:";
- else
- result+="στους χώÏους ονομάτων που ανήκουν:";
- return result;
- }
- /*! This is used in LaTeX as the title of the chapter with the
- * index of all namespaces.
- */
- virtual QCString trNamespaceIndex()
- { return "ΕυÏετήÏιο ΧώÏων Ονομάτων"; }
-
- /*! This is used in LaTeX as the title of the chapter containing
- * the documentation of all namespaces.
- */
- virtual QCString trNamespaceDocumentation()
- { return "ΤεκμηÏίωση ΧώÏων Ονομάτων"; }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 0.49-990522
-//////////////////////////////////////////////////////////////////////////
-
- /*! This is used in the documentation before the list of all
- * namespaces in a file.
- */
- virtual QCString trNamespaces()
- { return "ΧώÏοι Ονομάτων"; }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 0.49-990728
-//////////////////////////////////////////////////////////////////////////
-
- /*! This is put at the bottom of a class documentation page and is
- * followed by a list of files that were used to generate the page.
- */
- virtual QCString trGeneratedFromFiles(ClassDef::CompoundType compType,
- bool single)
- { // here s is one of " Class", " Struct" or " Union"
- // single is true implies a single file
- QCString result=(QCString)"Η τεκμηÏίωση για ";
- switch(compType)
- {
- case ClassDef::Class: result+="αυτή την κλάση"; break;
- case ClassDef::Struct: result+="αυτή η δομή"; break;
- case ClassDef::Union: result+="αυτή η ένωση"; break;
- case ClassDef::Interface: result+="αυτή η διαπÏοσωπία"; break;
- case ClassDef::Protocol: result+="ΠÏωτόκολλο"; break;
- case ClassDef::Category: result+="ΚατηγοÏία"; break;
- case ClassDef::Exception: result+="αυτή η εξαίÏεση"; break;
- }
- result+=" δημιουÏγήθηκε απο Ï„";
- if (single) result+="ο ακόλουθο αÏχείο:"; else result+="α ακόλουθα αÏχεία:";
- return result;
- }
-
- /*! This is in the (quick) index as a link to the alphabetical compound
- * list.
- */
- virtual QCString trAlphabeticalList()
- { return "Αλφαβητική Λίστα"; }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 0.49-990901
-//////////////////////////////////////////////////////////////////////////
-
- /*! This is used as the heading text for the retval command. */
- virtual QCString trReturnValues()
- { return "Τιμές ΕπιστÏοφής"; }
-
- /*! This is in the (quick) index as a link to the main page (index.html)
- */
- virtual QCString trMainPage()
- { return "ΚÏÏια Σελίδα"; }
-
- /*! This is used in references to page that are put in the LaTeX
- * documentation. It should be an abbreviation of the word page.
- */
- virtual QCString trPageAbbreviation()
- { return "σελ."; }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 0.49-991003
-//////////////////////////////////////////////////////////////////////////
-
- virtual QCString trDefinedAtLineInSourceFile()
- {
- return "ΟÏισμός στη γÏαμμή @0 του αÏχείου @1.";
- }
- virtual QCString trDefinedInSourceFile()
- {
- return "ΟÏισμός στο αÏχείο @0.";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 0.49-991205
-//////////////////////////////////////////////////////////////////////////
-
- virtual QCString trDeprecated()
- {
- return "ΑποσυÏμένο";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.0.0
-//////////////////////////////////////////////////////////////////////////
-
- /*! this text is put before a collaboration diagram */
- virtual QCString trCollaborationDiagram(const char *clName)
- {
- return (QCString)"ΔίαγÏαμμα ΣυνεÏγασίας για την κλάση "+clName+":";
- }
- /*! this text is put before an include dependency graph */
- virtual QCString trInclDepGraph(const char *fName)
- {
- return (QCString)"ΔιάγÏαμμα εξάÏτησης αÏχείου συμπεÏίληψης για το "+fName+":";
- }
- /*! header that is put before the list of constructor/destructors. */
- virtual QCString trConstructorDocumentation()
- {
- return "ΤεκμηÏίωση Constructor & Destructor";
- }
- /*! Used in the file documentation to point to the corresponding sources. */
- virtual QCString trGotoSourceCode()
- {
- return "Πήγαινε στον πηγαίο κώδικα του αÏχείου.";
- }
- /*! Used in the file sources to point to the corresponding documentation. */
- virtual QCString trGotoDocumentation()
- {
- return "Πήγαινε στην τεκμηÏίωση του αÏχείου.";
- }
- /*! Text for the \\pre command */
- virtual QCString trPrecondition()
- {
- return "ΠÏοϋποθέσεις";
- }
- /*! Text for the \\post command */
- virtual QCString trPostcondition()
- {
- return "Μεταϋποθέσεις";
- }
- /*! Text for the \\invariant command */
- virtual QCString trInvariant()
- {
- return "Αμετάβλητα";
- }
- /*! Text shown before a multi-line variable/enum initialization */
- virtual QCString trInitialValue()
- {
- return "ΑÏχική τιμή:";
- }
- /*! Text used the source code in the file index */
- virtual QCString trCode()
- {
- return "κώδικας";
- }
- virtual QCString trGraphicalHierarchy()
- {
- return "ΓÏαφική ΑναπαÏάσταση Της ΙεÏαÏχίας Των Κλάσεων";
- }
- virtual QCString trGotoGraphicalHierarchy()
- {
- return "Πήγαινε στην γÏαφική αναπαÏάσταση της ιεÏαÏχίας των κλάσεων";
- }
- virtual QCString trGotoTextualHierarchy()
- {
- return "Πήγαινε στην με κείμενο αναπαÏάσταση της ιεÏαÏχίας των κλάσεων";
- }
- virtual QCString trPageIndex()
- {
- return "ΕυÏετήÏιο Σελίδων";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.1.0
-//////////////////////////////////////////////////////////////////////////
-
- virtual QCString trNote()
- {
- return "Σημείωση";
- }
- virtual QCString trPublicTypes()
- {
- return "Δημόσιοι Τυποι";
- }
- virtual QCString trPublicAttribs()
- {
- if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
- {
- return "Πεδία Δεδομένων";
- }
- else
- {
- return "Δημόσια ΧαÏακτηÏιστικά";
- }
- }
- virtual QCString trStaticPublicAttribs()
- {
- return "Στατικά Δημόσια ΧαÏακτηÏιστικά";
- }
- virtual QCString trProtectedTypes()
- {
- return "ΠÏοστατευμένοι ΤÏποι";
- }
- virtual QCString trProtectedAttribs()
- {
- return "ΠÏοστατευμένα ΧαÏακτηÏιστικά";
- }
- virtual QCString trStaticProtectedAttribs()
- {
- return "Στατικά ΠÏοστατευμένα ΧαÏακτηÏιστικά";
- }
- virtual QCString trPrivateTypes()
- {
- return "Ιδιωτικοί ΤÏποι";
- }
- virtual QCString trPrivateAttribs()
- {
- return "Ιδιωτικα ΧαÏακτηÏιστικά";
- }
- virtual QCString trStaticPrivateAttribs()
- {
- return "Στατικά Ιδιωτικα ΧαÏακτηÏιστικά";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.1.3
-//////////////////////////////////////////////////////////////////////////
-
- /*! Used as a marker that is put before a \\todo item */
- virtual QCString trTodo()
- {
- return "ΠÏος Υλοποίηση";
- }
- /*! Used as the header of the todo list */
- virtual QCString trTodoList()
- {
- return "Λίστα των ΠÏος Υλοποίηση";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.1.4
-//////////////////////////////////////////////////////////////////////////
-
- virtual QCString trReferencedBy()
- {
- return "ΑναφοÏά από";
- }
- virtual QCString trRemarks()
- {
- return "ΠαÏατήÏηση";
- }
- virtual QCString trAttention()
- {
- return "ΠÏοσοχή";
- }
- virtual QCString trInclByDepGraph()
- {
- return "Το διάγÏαμμα αυτό παÏουσιάζει ποιά αÏχεία άμεσα ή "
- "έμμεσα πεÏιλαμβάνουν αυτό το αÏχείο:";
- }
- virtual QCString trSince()
- {
- return "Από";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.1.5
-//////////////////////////////////////////////////////////////////////////
-
- /*! title of the graph legend page */
- virtual QCString trLegendTitle()
- {
- return "Υπόμνημα ΔιαγÏαμμάτων";
- }
- /*! page explaining how the dot graph's should be interpreted
- * The %A in the text below are to prevent link to classes called "A".
- */
- virtual QCString trLegendDocs()
- {
- return
- "Αυτή η σελίδα εξηγεί το πως εÏμηνεÏονται τα διαγÏάμματα που δημιουÏγοÏνται "
- "από το doxygen.<p>\n"
- "ΘεωÏείστε το παÏακάτω παÏάδειγμα:"
- "\\code\n"
- "/*! Invisible class because of truncation */\n"
- "class Invisible { };\n\n"
- "/*! Truncated class, inheritance relation is hidden */\n"
- "class Truncated : public Invisible { };\n\n"
- "/* Class not documented with doxygen comments */\n"
- "class Undocumented { };\n\n"
- "/*! Class that is inherited using public inheritance */\n"
- "class PublicBase : public Truncated { };\n\n"
- "/*! A template class */\n"
- "template<class T> class Templ { };\n\n"
- "/*! Class that is inherited using protected inheritance */\n"
- "class ProtectedBase { };\n\n"
- "/*! Class that is inherited using private inheritance */\n"
- "class PrivateBase { };\n\n"
- "/*! Class that is used by the Inherited class */\n"
- "class Used { };\n\n"
- "/*! Super class that inherits a number of other classes */\n"
- "class Inherited : public PublicBase,\n"
- " protected ProtectedBase,\n"
- " private PrivateBase,\n"
- " public Undocumented,\n"
- " public Templ<int>\n"
- "{\n"
- " private:\n"
- " Used *m_usedClass;\n"
- "};\n"
- "\\endcode\n"
- "Αυτό οδηγεί στο επόμενο διάγÏαμμα:"
- "<p><center><img alt=\"\" src=\"graph_legend."+Config_getEnum("DOT_IMAGE_FORMAT")+"\"></center></p>\n"
- "<p>\n"
- "Τα κουτιά στο παÏαπάνω διάγÏαμμα έχουν την ακόλουθη σημασία:\n"
- "</p>\n"
- "<ul>\n"
- "<li>Ένα γεμισμένο μαÏÏο κουτί αναπαÏιστά τη δομή ή την κλάση για την οποία"
- "αφοÏά το διάγÏαμμα.\n"
- "<li>Ένα κουτί με μαÏÏο πεÏίγÏαμμα αναπαÏιστά μία τεκμηÏιωμένη δομή ή κλάση.\n"
- "<li>Ένα κουτί με γκÏίζο πεÏίγÏαμμα αναπαÏιστά μία μη τεκμηÏιωμένη δομή ή κλάση.\n"
- "<li>Ένα κουτί με κόκκινο πεÏίγÏαμμα αναπαÏιστά μία τεκμηÏιωμένη δομή ή κλάση για "
- "την οποία δεν παÏουσιάζονται όλες οι σχέσεις κληÏονομικότητας και πεÏιεχομένου. %Ένα "
- "διάγÏαμμα μειώνεται αν δεν χωÏάει στις οÏισμένες διαστάσεις."
- "</ul>\n"
- "<p>\n"
- "Τα βέλη έχουν τις ακόλουθες σημασίες:\n"
- "</p>\n"
- "<ul>\n"
- "<li>Ένα Î²Î±Î¸Ï Î¼Ï€Î»Îµ βέλος χÏησιμοποιείται για να παÏουσιάσει μία δημόσια σχέση κληÏονομικότητας "
- "Î¼ÎµÏ„Î±Î¾Ï Î´Ïο κλάσεων.</li>\n"
- "<li>Ένα Î²Î±Î¸Ï Ï€Ïάσινο βέλος χÏησιμοποιείται για Ï€Ïοστατευμένη κληÏονομικότητα.</li>\n"
- "<li>Ένα Î²Î±Î¸Ï ÎºÏŒÎºÎºÎ¹Î½Î¿ βέλος χÏησιμοποιείται για ιδιωτική κληÏονομικότητα.</li>\n"
- "<li>Ένα μωβ διακεκομένο βέλος χÏησιμοποιείται αν μία κλάση πεÏιέχεται ή χÏησιμοποιείται "
- "από μία άλλη κλάση. Το βέλος ονομάζεται από το όνομα της μεταβλητής(ων) "
- "μέσω της οποίας η κλάση ή δομή είναι Ï€Ïοσβάσιμη.</li>\n"
- "<li>Ένα κίτÏινο διακεκομμένο βέλος χÏησιμοποιείται για μια σχέση Î¼ÎµÏ„Î±Î¾Ï ÎµÎ½ÏŒÏ‚ template αντικειμένου και "
- "της template κλάσης από την οποία δημιουÏγήθηκε. Το βέλος ονομάζεται με τις παÏαμέτÏους του template "
- "του αντικειμένου.</li>\n"
- "</ul>\n";
- }
- /*! text for the link to the legend page */
- virtual QCString trLegend()
- {
- return "υπόμνημα";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.2.0
-//////////////////////////////////////////////////////////////////////////
-
- /*! Used as a marker that is put before a test item */
- virtual QCString trTest()
- {
- return "Δοκιμαστικό";
- }
- /*! Used as the header of the test list */
- virtual QCString trTestList()
- {
- return "Λίστα Δοκιμαστικών";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.2.1
-//////////////////////////////////////////////////////////////////////////
-
- /*! Used as a section header for KDE-2 IDL methods */
- virtual QCString trDCOPMethods()
- {
- return "Μέδοδοι DCOP";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.2.2
-//////////////////////////////////////////////////////////////////////////
-
- /*! Used as a section header for IDL properties */
- virtual QCString trProperties()
- {
- return "Ιδιότητες";
- }
- /*! Used as a section header for IDL property documentation */
- virtual QCString trPropertyDocumentation()
- {
- return "ΤεκμηÏίωση Ιδιοτήτων";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.2.4
-//////////////////////////////////////////////////////////////////////////
-
- /*! Used for Java classes in the summary section of Java packages */
- virtual QCString trClasses()
- {
- if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
- {
- return "Δομές Δεδομένων";
- }
- else
- {
- return "Κλάσεις";
- }
- }
- /*! Used as the title of a Java package */
- virtual QCString trPackage(const char *name)
- {
- return (QCString)"Πακέτο "+name;
- }
- /*! Title of the package index page */
- virtual QCString trPackageList()
- {
- return "Λίστα Πακέτων";
- }
- /*! The description of the package index page */
- virtual QCString trPackageListDescription()
- {
- return "Ακολουθεί η λίστα των πακέτων με σÏντομη πεÏιγÏαφή (αν υπάÏχει):";
- }
- /*! The link name in the Quick links header for each page */
- virtual QCString trPackages()
- {
- return "Πακέτα";
- }
- /*! Text shown before a multi-line define */
- virtual QCString trDefineValue()
- {
- return "Τιμή:";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.2.5
-//////////////////////////////////////////////////////////////////////////
-
- /*! Used as a marker that is put before a \\bug item */
- virtual QCString trBug()
- {
- return "ΠÏόβλημα";
- }
- /*! Used as the header of the bug list */
- virtual QCString trBugList()
- {
- return "Λίστα ΠÏοβλημάτων";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.2.6
-//////////////////////////////////////////////////////////////////////////
-
- /*! Used as ansicpg for RTF file
- *
- * The following table shows the correlation of Charset name, Charset Value and
- * <pre>
- * Codepage number:
- * Charset Name Charset Value(hex) Codepage number
- * ------------------------------------------------------
- * DEFAULT_CHARSET 1 (x01)
- * SYMBOL_CHARSET 2 (x02)
- * OEM_CHARSET 255 (xFF)
- * ANSI_CHARSET 0 (x00) 1252
- * RUSSIAN_CHARSET 204 (xCC) 1251
- * EE_CHARSET 238 (xEE) 1250
- * GREEK_CHARSET 161 (xA1) 1253
- * TURKISH_CHARSET 162 (xA2) 1254
- * BALTIC_CHARSET 186 (xBA) 1257
- * HEBREW_CHARSET 177 (xB1) 1255
- * ARABIC _CHARSET 178 (xB2) 1256
- * SHIFTJIS_CHARSET 128 (x80) 932
- * HANGEUL_CHARSET 129 (x81) 949
- * GB2313_CHARSET 134 (x86) 936
- * CHINESEBIG5_CHARSET 136 (x88) 950
- * </pre>
- *
- */
- virtual QCString trRTFansicp()
- {
- return "1253";
- }
-
-
- /*! Used as ansicpg for RTF fcharset
- * \see trRTFansicp() for a table of possible values.
- */
- virtual QCString trRTFCharSet()
- {
- return "0";
- }
-
- /*! Used as header RTF general index */
- virtual QCString trRTFGeneralIndex()
- {
- return "ΕυÏετήÏιο";
- }
-
- /*! This is used for translation of the word that will possibly
- * be followed by a single name or by a list of names
- * of the category.
- */
- virtual QCString trClass(bool first_capital, bool singular)
- {
- QCString result((first_capital ? "Κλάση" : "κλάση"));
- if (!singular) result+="";
- return result;
- }
-
- /*! This is used for translation of the word that will possibly
- * be followed by a single name or by a list of names
- * of the category.
- */
- virtual QCString trFile(bool first_capital, bool singular)
- {
- QCString result((first_capital ? "ΑÏχεί" : "αÏχεί"));
- if (!singular) result+="α"; else result+="ο";
- return result;
- }
-
- /*! This is used for translation of the word that will possibly
- * be followed by a single name or by a list of names
- * of the category.
- */
- virtual QCString trNamespace(bool first_capital, bool singular)
- {
- QCString result((first_capital ? "Namespace" : "namespace"));
- if (!singular) result+="s";
- return result;
- }
-
- /*! This is used for translation of the word that will possibly
- * be followed by a single name or by a list of names
- * of the category.
- */
- virtual QCString trGroup(bool first_capital, bool singular)
- {
- QCString result((first_capital ? "Ομάδ" : "ομάδ"));
- if (!singular) result+="ες"; else result+="α";
- return result;
- }
-
- /*! This is used for translation of the word that will possibly
- * be followed by a single name or by a list of names
- * of the category.
- */
- virtual QCString trPage(bool first_capital, bool singular)
- {
- QCString result((first_capital ? "Σελίδ" : "σελίδ"));
- if (!singular) result+="ες"; else result+="α";
- return result;
- }
-
- /*! This is used for translation of the word that will possibly
- * be followed by a single name or by a list of names
- * of the category.
- */
- virtual QCString trMember(bool first_capital, bool singular)
- {
- QCString result((first_capital ? "Μέλ" : "μέλ"));
- if (!singular) result+="η"; else result+="ος";
- return result;
- }
-
- /*! This is used for translation of the word that will possibly
- * be followed by a single name or by a list of names
- * of the category.
- */
- virtual QCString trGlobal(bool first_capital, bool singular)
- {
- QCString result((first_capital ? "Καθολικ" : "καθολικ"));
- if (!singular) result+="ές"; else result+="ή";
- return result;
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.2.7
-//////////////////////////////////////////////////////////////////////////
-
- /*! This text is generated when the \\author command is used and
- * for the author section in man pages. */
- virtual QCString trAuthor(bool first_capital, bool singular)
- {
- QCString result((first_capital ? "ΣυγÏαφ" : "συγÏαφ"));
- if (!singular) result+=""; else result+="έας";
- return result;
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.2.11
-//////////////////////////////////////////////////////////////////////////
-
- /*! This text is put before the list of members referenced by a member
- */
- virtual QCString trReferences()
- {
- return "ΑναφοÏές";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.2.13
-//////////////////////////////////////////////////////////////////////////
-
- /*! used in member documentation blocks to produce a list of
- * members that are implemented by this one.
- */
- virtual QCString trImplementedFromList(int numEntries)
- {
- return "Υλοποιεί "+trWriteList(numEntries)+".";
- }
-
- /*! used in member documentation blocks to produce a list of
- * all members that implement this abstract member.
- */
- virtual QCString trImplementedInList(int numEntries)
- {
- return "Υλοποιείται από "+trWriteList(numEntries)+".";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.2.16
-//////////////////////////////////////////////////////////////////////////
-
- /*! used in RTF documentation as a heading for the Table
- * of Contents.
- */
- virtual QCString trRTFTableOfContents()
- {
- return "Πίνακας ΠεÏιεχομένων";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.2.17
-//////////////////////////////////////////////////////////////////////////
-
- /*! Used as the header of the list of item that have been
- * flagged deprecated
- */
- virtual QCString trDeprecatedList()
- {
- return "Λίστα ΚαταÏγημένων";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.2.18
-//////////////////////////////////////////////////////////////////////////
-
- /*! Used as a header for declaration section of the events found in
- * a C# program
- */
- virtual QCString trEvents()
- {
- return "Συμβάντα";
- }
- /*! Header used for the documentation section of a class' events. */
- virtual QCString trEventDocumentation()
- {
- return "ΤεκμηÏίωση Συμβάντων";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.3
-//////////////////////////////////////////////////////////////////////////
-
- /*! Used as a heading for a list of Java class types with package scope.
- */
- virtual QCString trPackageTypes()
- {
- return "ΤÏποι Πακέτων";
- }
- /*! Used as a heading for a list of Java class functions with package
- * scope.
- */
- virtual QCString trPackageMembers()
- {
- return "ΣυναÏτήσεις Πακέτου";
- }
- /*! Used as a heading for a list of static Java class functions with
- * package scope.
- */
- virtual QCString trStaticPackageMembers()
- {
- return "Στατικές ΣυναÏτήσεις Πακέτου";
- }
- /*! Used as a heading for a list of Java class variables with package
- * scope.
- */
- virtual QCString trPackageAttribs()
- {
- return "Μεταβλητές Πακέτου";
- }
- /*! Used as a heading for a list of static Java class variables with
- * package scope.
- */
- virtual QCString trStaticPackageAttribs()
- {
- return "Στατικές Μεταβλητές Πακέτου";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.3.1
-//////////////////////////////////////////////////////////////////////////
-
- /*! Used in the quick index of a class/file/namespace member list page
- * to link to the unfiltered list of all members.
- */
- virtual QCString trAll()
- {
- return "Όλα";
- }
- /*! Put in front of the call graph for a function. */
- virtual QCString trCallGraph()
- {
- return "Το διάγÏαμμα δείχνει ποιές συναÏτήσεις καλοÏνται από αυτή:";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.3.3
-//////////////////////////////////////////////////////////////////////////
-
- /*! When the search engine is enabled this text is put in the header
- * of each page before the field where one can enter the text to search
- * for.
- */
- virtual QCString trSearchForIndex()
- {
- return "Αναζήτηση για";
- }
- /*! This string is used as the title for the page listing the search
- * results.
- */
- virtual QCString trSearchResultsTitle()
- {
- return "Αποτελέσματα Αναζήτησης";
- }
- /*! This string is put just before listing the search results. The
- * text can be different depending on the number of documents found.
- * Inside the text you can put the special marker $num to insert
- * the number representing the actual number of search results.
- * The @a numDocuments parameter can be either 0, 1 or 2, where the
- * value 2 represents 2 or more matches. HTML markup is allowed inside
- * the returned string.
- */
- virtual QCString trSearchResults(int numDocuments)
- {
- if (numDocuments==0)
- {
- return "Συγγνώμη, δεν υπάÏχει κείμενο που να ταιÏιάζει με την αίτησή σας.";
- }
- else if (numDocuments==1)
- {
- return "Î’Ïέθηκε <b>1</b> κείμενο που ταιÏιάζει με την αίτησή σας.";
- }
- else
- {
- return "Î’Ïέθηκαν <b>$num</b> κείμενα που ταιÏιάζουν με την αίτησή σας. "
- "ΠÏώτα εμφανίζονται τα κείμενα που ταιÏιάζουν πιο πολÏ.";
- }
- }
- /*! This string is put before the list of matched words, for each search
- * result. What follows is the list of words that matched the query.
- */
- virtual QCString trSearchMatches()
- {
- return "ΤαίÏιαξαν:";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.3.8
-//////////////////////////////////////////////////////////////////////////
-
- /*! This is used in HTML as the title of page with source code for file filename
- */
- virtual QCString trSourceFile(QCString& filename)
- {
- return "ΑÏχείο κώδικα " + filename;
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.3.9
-//////////////////////////////////////////////////////////////////////////
-
- /*! This is used as the name of the chapter containing the directory
- * hierarchy.
- */
- virtual QCString trDirIndex()
- { return "ΙεÏαÏχία Καταλόγου"; }
-
- /*! This is used as the name of the chapter containing the documentation
- * of the directories.
- */
- virtual QCString trDirDocumentation()
- { return "ΤεκμηÏίωση Καταλόγου"; }
-
- /*! This is used as the title of the directory index and also in the
- * Quick links of an HTML page, to link to the directory hierarchy.
- */
- virtual QCString trDirectories()
- { return "Κατάλογοι"; }
-
- /*! This returns a sentences that introduces the directory hierarchy.
- * and the fact that it is sorted alphabetically per level
- */
- virtual QCString trDirDescription()
- {
- return "Η ιεÏαÏχία καταλόγων ταξινομήθηκε αλφαβητικά, αλλά όχι Ï€Î¿Î»Ï Î±Ï…ÏƒÏ„Î·Ïά:";
- }
-
- /*! This returns the title of a directory page. The name of the
- * directory is passed via \a dirName.
- */
- virtual QCString trDirReference(const char *dirName)
- { QCString result=QCString("ΑναφοÏά του Καταλόγου ") + dirName; return result; }
-
- /*! This returns the word directory with or without starting capital
- * (\a first_capital) and in sigular or plural form (\a singular).
- */
- virtual QCString trDir(bool first_capital, bool singular)
- {
- QCString result((first_capital ? "Κατάλογο" : "κατάλογο"));
- if (singular) result+="ς"; else result+="ι";
- return result;
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.4.1
-//////////////////////////////////////////////////////////////////////////
-
- /*! This text is added to the documentation when the \\overload command
- * is used for a overloaded function.
- */
- virtual QCString trOverloadText()
- {
- return "Αυτή είναι μια υπεÏφοÏτωμένη συνάÏτηση-μέλος, "
- "που παÏέχεται για ευκολία. ΔιαφέÏει από την παÏαπάνω "
- "συνάÏτηση μόνο στον Ï„Ïπο των παÏαμέτÏων που δέχεται.";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.4.6
-//////////////////////////////////////////////////////////////////////////
-
- /*! This is used to introduce a caller (or called-by) graph */
- virtual QCString trCallerGraph()
- {
- return "Το διάγÏαμμα δείχνει από ποιές συναÏτήσεις καλείται αυτή η συνάÏτηση:";
- }
-
- /*! This is used in the documentation of a file/namespace before the list
- * of documentation blocks for enumeration values
- */
- virtual QCString trEnumerationValueDocumentation()
- { return "Enumerator Documentation"; }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.5.4 (mainly for Fortran)
-//////////////////////////////////////////////////////////////////////////
-
- /*! header that is put before the list of member subprograms (Fortran). */
- virtual QCString trMemberFunctionDocumentationFortran()
- { return "ΤεκμηÏίωση ΣυνάÏτησης/ΥποÏουτίνας Μέλους"; }
-
- /*! This is put above each page as a link to the list of annotated data types (Fortran). */
- virtual QCString trCompoundListFortran()
- { return "Λίστα ΤÏπων Δεδομένων"; }
-
- /*! This is put above each page as a link to all members of compounds (Fortran). */
- virtual QCString trCompoundMembersFortran()
- { return "Πεδία Δεδομένων"; }
-
- /*! This is an introduction to the annotated compound list (Fortran). */
- virtual QCString trCompoundListDescriptionFortran()
- { return "Εδώ είναι οι Ï„Ïποι δεδομένων με σÏντομη πεÏιγÏαφή:"; }
-
- /*! This is an introduction to the page with all data types (Fortran). */
- virtual QCString trCompoundMembersDescriptionFortran(bool extractAll)
- {
- QCString result="Εδώ είναι η λίστα όλων των ";
- if (!extractAll)
- {
- result+="τεκμηÏιωμένων ";
- }
- result+="μελών Ï„Ïπων δεδομένων";
- result+=" με συνδέσεις ";
- if (!extractAll)
- {
- result+="στην τεκμηÏίωση της δομής δεδομένων για κάθε μέλος";
- }
- else
- {
- result+="στους Ï„Ïπους δεδομένων που ανήκουν:";
- }
- return result;
- }
-
- /*! This is used in LaTeX as the title of the chapter with the
- * annotated compound index (Fortran).
- */
- virtual QCString trCompoundIndexFortran()
- { return "ΠεÏιεχόμενα ΤÏπων Δεδομένων"; }
-
- /*! This is used in LaTeX as the title of the chapter containing
- * the documentation of all data types (Fortran).
- */
- virtual QCString trTypeDocumentation()
- { return "ΤεκμηÏίωση ΤÏπων Δεδομένων"; }
-
- /*! This is used in the documentation of a file as a header before the
- * list of (global) subprograms (Fortran).
- */
- virtual QCString trSubprograms()
- { return "ΣυναÏτήσεις/ΥποÏουτίνες"; }
-
- /*! This is used in the documentation of a file/namespace before the list
- * of documentation blocks for subprograms (Fortran)
- */
- virtual QCString trSubprogramDocumentation()
- { return "ΤεκμηÏίωση ΣυνάÏτησης/ΥποÏουτίνας"; }
-
- /*! This is used in the documentation of a file/namespace/group before
- * the list of links to documented compounds (Fortran)
- */
- virtual QCString trDataTypes()
- { return "ΤÏποι Δεδομένων"; }
-
- /*! used as the title of page containing all the index of all modules (Fortran). */
- virtual QCString trModulesList()
- { return "Λίστα Υπομονάδων"; }
-
- /*! used as an introduction to the modules list (Fortran) */
- virtual QCString trModulesListDescription(bool extractAll)
- {
- QCString result="Εδώ είναι μια λίστα με όλες τις ";
- if (!extractAll) result+="τεκμηÏιωμένες ";
- result+="υπομονάδες με σÏντομή πεÏιγÏαφή:";
- return result;
- }
-
- /*! used as the title of the HTML page of a module/type (Fortran) */
- virtual QCString trCompoundReferenceFortran(const char *clName,
- ClassDef::CompoundType compType,
- bool isTemplate)
- {
- QCString result=(QCString)clName;
- switch(compType)
- {
- case ClassDef::Class: result+=" Υπομονάδα"; break;
- case ClassDef::Struct: result+=" ΤÏπος"; break;
- case ClassDef::Union: result+=" Ένωση"; break;
- case ClassDef::Interface: result+=" Interface"; break;
- case ClassDef::Protocol: result+=" ΠÏωτόκολλο"; break;
- case ClassDef::Category: result+=" ΚατηγοÏία"; break;
- case ClassDef::Exception: result+=" ΕξαίÏεση"; break;
- }
- if (isTemplate) result+=" ΠÏότυπο";
- result+=" Δήλωση";
- return result;
- }
- /*! used as the title of the HTML page of a module (Fortran) */
- virtual QCString trModuleReference(const char *namespaceName)
- {
- QCString result=namespaceName;
- result+=" Δηλώσεις Υπομονάδων";
- return result;
- }
-
- /*! This is put above each page as a link to all members of modules. (Fortran) */
- virtual QCString trModulesMembers()
- { return "Υπομονάδες Μέλη"; }
-
- /*! This is an introduction to the page with all modules members (Fortran) */
- virtual QCString trModulesMemberDescription(bool extractAll)
- {
- QCString result="Εδώ είναι μια λίστα με όλες τις ";
- if (!extractAll) result+="τεκμηÏιωμένες ";
- result+="μέλη υπομονάδες με συνδέσεις ";
- if (extractAll)
- {
- result+="στην τεκμηÏίωση της υπομονάδας για κάθε μέλος:";
- }
- else
- {
- result+="στις υπομονάδες που ανήκουν:";
- }
- return result;
- }
-
- /*! This is used in LaTeX as the title of the chapter with the
- * index of all modules (Fortran).
- */
- virtual QCString trModulesIndex()
- { return "ΠεÏιεχόμενα Υπομονάδων"; }
-
- /*! This is used for translation of the word that will possibly
- * be followed by a single name or by a list of names
- * of the category.
- */
- virtual QCString trModule(bool first_capital, bool singular)
- {
- QCString result((first_capital ? "Υπομονάδ" : "υπομονάδ"));
- if (!singular) result+="ες"; else result+="α";
- return result;
- }
- /*! This is put at the bottom of a module documentation page and is
- * followed by a list of files that were used to generate the page.
- */
- virtual QCString trGeneratedFromFilesFortran(ClassDef::CompoundType compType,
- bool single)
- { // here s is one of " Module", " Struct" or " Union"
- // single is true implies a single file
- QCString result=(QCString)"Η τεκμηÏίωση για ";
- switch(compType)
- {
- case ClassDef::Class: result+="αυτή την υπομονάδα"; break;
- case ClassDef::Struct: result+="αυτό τον Ï„Ïπο δεδομένων"; break;
- case ClassDef::Union: result+="αυτή την ένωση"; break;
- case ClassDef::Interface: result+="αυτό το interface"; break;
- case ClassDef::Protocol: result+="αυτό το Ï€Ïωτόκολλο"; break;
- case ClassDef::Category: result+="αυτή την κατηγοÏία"; break;
- case ClassDef::Exception: result+="αυτή την εξαίÏεση"; break;
- }
- result+=" δημιουÏγήθηκε από ";
- if (single) result+="το παÏακάτω αÏχείο:"; else result+="τα παÏακάτω αÏχεία:";
- return result;
- }
- /*! This is used for translation of the word that will possibly
- * be followed by a single name or by a list of names
- * of the category.
- */
- virtual QCString trType(bool first_capital, bool singular)
- {
- QCString result((first_capital ? "ΤÏπο" : "Ï„Ïπο"));
- if (!singular) result+="ι"; else result+="ος";
- result+= first_capital ? " Δεδομένων" : " δεδομένων";
- return result;
- }
- /*! This is used for translation of the word that will possibly
- * be followed by a single name or by a list of names
- * of the category.
- */
- virtual QCString trSubprogram(bool first_capital, bool singular)
- {
- QCString result((first_capital ? "ΥποπÏ" : "υποπÏ"));
- if (!singular) result+="ογÏάμματα"; else result+="όγÏαμμα";
- return result;
- }
-
- /*! C# Type Constraint list */
- virtual QCString trTypeConstraints()
- {
- return "ΠεÏιοÏισμοί ΤÏπων Δεδομένων";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.6.0 (mainly for the new search engine)
-//////////////////////////////////////////////////////////////////////////
-
- /*! directory relation for \a name */
- virtual QCString trDirRelation(const char *name)
- {
- return "Σχέση του "+QCString(name);
- }
-
- /*! Loading message shown when loading search results */
- virtual QCString trLoading()
- {
- return "ΦόÏτωση...";
- }
-
- /*! Label used for search results in the global namespace */
- virtual QCString trGlobalNamespace()
- {
- return "Γενικός χώÏος ονομάτων";
- }
-
- /*! Message shown while searching */
- virtual QCString trSearching()
- {
- return "Αναζήτηση...";
- }
-
- /*! Text shown when no search results are found */
- virtual QCString trNoMatches()
- {
- return "Δεν βÏέθηκαν αποτελέσματα αναζήτησης";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.6.3 (missing items for the directory pages)
-//////////////////////////////////////////////////////////////////////////
-
- /*! introduction text for the directory dependency graph */
- virtual QCString trDirDependency(const char *name)
- {
- return (QCString)"ΔιάγÏαμμα εξάÏτησης φακέλου για το "+name;
- }
-
- /*! when clicking a directory dependency label, a page with a
- * table is shown. The heading for the first column mentions the
- * source file that has a relation to another file.
- */
- virtual QCString trFileIn(const char *name)
- {
- return (QCString)"ΑÏχείο σε "+name;
- }
-
- /*! when clicking a directory dependency label, a page with a
- * table is shown. The heading for the second column mentions the
- * destination file that is included.
- */
- virtual QCString trIncludesFileIn(const char *name)
- {
- return (QCString)"Εσωκλείει το αÏχείο στο "+name;
- }
-
- /** Compiles a date string.
- * @param year Year in 4 digits
- * @param month Month of the year: 1=January
- * @param day Day of the Month: 1..31
- * @param dayOfWeek Day of the week: 1=Monday..7=Sunday
- * @param hour Hour of the day: 0..23
- * @param minutes Minutes in the hour: 0..59
- * @param seconds Seconds within the minute: 0..59
- * @param includeTime Include time in the result string?
- */
- virtual QCString trDateTime(int year,int month,int day,int dayOfWeek,
- int hour,int minutes,int seconds,
- bool includeTime)
- {
- static const char *days[] = { "Δευ","ΤÏι","Τετ","Πεμ","ΠαÏ","Σαβ","ΚυÏ" };
- static const char *months[] = { "Ιαν","Φεβ","ΜαÏ","ΑπÏ","Μαι","Ιουν","Ιουλ","Αυγ","Σεπ","Οκτ","Îοε","Δεκ" };
- QCString sdate;
- sdate.sprintf("%s %.2d %s %d",days[dayOfWeek-1],day,months[month-1],year);
- if (includeTime)
- {
- QCString stime;
- stime.sprintf(" %.2d:%.2d:%.2d",hour,minutes,seconds);
- sdate+=stime;
- }
- return sdate;
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.7.5
-//////////////////////////////////////////////////////////////////////////
-
- /*! Header for the page with bibliographic citations */
- virtual QCString trCiteReferences()
- { return "ΑναφοÏές ΒιβλιογÏαφίας"; }
-
- /*! Text for copyright paragraph */
- virtual QCString trCopyright()
- { return "Copyright"; }
-
- /*! Header for the graph showing the directory dependencies */
- virtual QCString trDirDepGraph(const char *name)
- { return QCString("ΔιάγÏαμμα εξάÏτησης φακέλων για ")+name+":"; }
-
-};
-
-#endif
diff --git a/trunk/src/translator_hr.h b/trunk/src/translator_hr.h
deleted file mode 100644
index f193304..0000000
--- a/trunk/src/translator_hr.h
+++ /dev/null
@@ -1,1572 +0,0 @@
-/******************************************************************************
- *
- *
- *
- * Copyright (C) 1997-2012 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.
- *
-*/
-// translation by Boris Bralo <boris.bralo@gmail.com>
-// Updates:
-// --------
-// 2000/08/20
-// - Better handling of ISO-8859-2/ WIN 1250 stuff based on (actualy stolen from :-)) Czech translations
-// implemented by Petr Prikryl (prikrylp@skil.cz).
-// As opposed to Czech translation this one assumes that Doxygen strings are written in Linux ( it's true,
-// I don't have QT pro licence ) , and uses ISOToWin function when built in WIN32
-//
-// 2000/09/18
-// - Added strings from 1.2.1
-// - Removed unneeeded decode() calls
-// - Changed some CS terminology
-//
-// 2001/01/22
-// - Added strings from 1.2.4
-//
-// 2001/05/25
-// - Added strings and up to and including 1.2.7_20010524
-// - Removed obsolete method trFiles()
-// - Removed obsolete method trAuthor()
-// - Removed obsolete method trAuthor()
-// - Removed obsolete method trVerbatimHeadert()
-// - Method latexBabelPackage() removed, ude latexLanguageSupportCommand
-//
-// 2001/11/13
-// - inherits from Translator
-// - Added strings for 1.2.11
-// - better output for C documentation (trCompoundMembersDescription(), trClassDocumentation())
-//
-// 2001/11/13
-// - Added strings for 1.2.13
-//
-// 2003/02/26
-// - Added strings for 1.2.18
-//
-// 2003/04/29
-// - Added strings for 1.3.0
-//
-// 2004/06/21
-// - Added strings for 1.3.8
-//
-// 2004/09/15
-// - Added strings for 1.3.9
-//
-// 2005/02/28
-// - Removed obsolete (unused) methods
-//
-// 2005/03/21
-// - Added strings for 1.4.1
-//
-// 2006/06/11
-// - Added strings for 1.4.6
-//
-// 2009/01/09
-// - Updated trLegendDocs
-//
-// 2010/03/04
-// - Updates for "new since 1.6.0 (mainly for the new search engine)".
-// - UTF-8
-// - removed decode()
-//
-// 2010/05/27
-// - Updates for 1.6.3
-#ifndef TRANSLATOR_HR_H
-#define TRANSLATOR_HR_H
-
-class TranslatorCroatian : public Translator
-{
- private:
-
- public:
- QCString idLanguage()
- { return "croatian"; }
- QCString idLanguageCharset()
- {
- return "utf-8";
- }
- QCString latexLanguageSupportCommand()
- { return "\\usepackage[croatian]{babel}\n"; }
- QCString trRelatedFunctions()
- { return "Povezane funkcije"; }
- QCString trRelatedSubscript()
- { return "(To nisu member funkcije.)"; }
- QCString trDetailedDescription()
- { return "Detaljno objašnjenje"; }
- QCString trMemberTypedefDocumentation()
- { return "Dokumentacija typedef Älanova"; }
- QCString trMemberEnumerationDocumentation()
- { return "Dokumentacija enumeracijskih Älanova"; }
- QCString trMemberFunctionDocumentation()
- { return "Dokumentacija funkcija"; }
- QCString trMemberDataDocumentation()
- { return "Documentacija varijabli"; }
- QCString trMore()
- { return "Opširnije..."; }
- QCString trListOfAllMembers()
- { return "Popis svih Älanova."; }
- QCString trMemberList()
- { return "Popis Älanova."; }
- QCString trThisIsTheListOfAllMembers()
- { return "Ovo je popis svih Älanova"; }
- QCString trIncludingInheritedMembers()
- { return ", ukljuÄujući naslijeÄ‘ene Älanove."; }
- QCString trGeneratedAutomatically(const char *s)
- { QCString result="napravljeno automatski Doxygen-om";
- if (s) result+=(QCString)" za "+s;
- result+=" iz programskog koda.";
- return result;
- }
- QCString trEnumName()
- { return "enum ime"; }
- QCString trEnumValue()
- { return "enum vrijednost"; }
- QCString trDefinedIn()
- { return "definirano u"; }
- QCString trModules()
- { return "Moduli"; }
- QCString trClassHierarchy()
- { return "Stablo klasa"; }
- QCString trCompoundList()
- {
- if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
- {
- return "Sve strukture";
- }
- else
- {
- return "Sve klase";
- }
- }
- QCString trFileList()
- { return "Popis datoteka"; }
- QCString trCompoundMembers()
- {
- if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
- return "Svi Älanovi struktura";
- else
- return "Svi Älanovi klasa";
- }
- QCString trFileMembers()
- { return "Älanovi klasa u datoteci"; }
- QCString trRelatedPages()
- { return "Stranice povezane s ovom"; }
- QCString trExamples()
- { return "Primjeri"; }
- QCString trSearch()
- { return "Traži"; }
- QCString trClassHierarchyDescription()
- { return "Stablo naslijeđivanja je složeno "
- "približno po abecedi:";
- }
- QCString trFileListDescription(bool extractAll)
- {
- QCString result="Popis svih ";
- if (!extractAll) result+="dokumentiranih ";
- result+="datoteka, s kratkim opisom:";
- return result;
- }
- QCString trCompoundListDescription()
- { return "Popis svih klasa, unija i struktura "
- "s kratkim opisom :";
- }
- QCString trCompoundMembersDescription(bool extractAll)
- {
- QCString result="Popis svih ";
- if (!extractAll)
- result+="dokumentiranih ";
-
- if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
- result+="Älanova klasa s linkovima na ";
- else
- result+="Älanova struktura s linkovima na ";
-
- if (!extractAll)
- {
- result+="dokumentaciju svakog Älana:";
- }
- else
- {
- if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
- result+="dokumentaciju klase :";
- else
- result +="dokumentaciju strukture";
- }
- return result;
- }
- QCString trFileMembersDescription(bool extractAll)
- {
- QCString result="Popis svih ";
- if (!extractAll)
- result+="dokumentiranih ";
- result+="Älanova s linkovima na ";
- if (extractAll)
- result+="dokumentaciju datoteke u kojima se nalaze:";
- else
- result+="datoteke u kojima se nalaze:";
- return result;
- }
- QCString trExamplesDescription()
- { return "Popis primjera :"; }
- QCString trRelatedPagesDescription()
- { return "Popis povezanih stranica:"; }
- QCString trModulesDescription()
- { return "Popis svih modula:"; }
-
- QCString trDocumentation()
- { return "Dokumentacija"; }
- QCString trModuleIndex()
- { return "Kazalo modula"; }
- QCString trHierarchicalIndex()
- { return "Hijerarhijsko kazalo"; }
- QCString trCompoundIndex()
- {
- if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
- {
- return "Kazalo struktura podataka";
- }
- else
- {
- return "Skupno kazalo ";
- }
- }
- QCString trFileIndex()
- { return "Kazalo datoteka"; }
- QCString trModuleDocumentation()
- { return "Dokumentacija modula"; }
- QCString trClassDocumentation()
- {
- if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
- {
- return "Dokumentacija struktura podataka";
- }
- else
- {
- return "Dokumentacija klasa";
- }
- }
- QCString trFileDocumentation()
- { return "Dokumentacija datoteka"; }
- QCString trExampleDocumentation()
- { return "Dokumentacija primjera"; }
- QCString trPageDocumentation()
- { return "Dokumentacija vezane stranice"; }
- QCString trReferenceManual()
- { return "PriruÄnik"; }
-
- QCString trDefines()
- { return "Definicije"; }
- QCString trFuncProtos()
- { return "Prototipi funkcija"; }
- QCString trTypedefs()
- { return "Typedef-ovi"; }
- QCString trEnumerations()
- { return "Enumeracije"; }
- QCString trFunctions()
- { return "Funkcije"; }
- QCString trVariables()
- { return "Varijable"; }
- QCString trEnumerationValues()
- { return "Vrijednosti enumeracija"; }
- QCString trDefineDocumentation()
- { return "Dokumentacija definicija"; }
- QCString trFunctionPrototypeDocumentation()
- { return "Dokumentacija prototipa funkcije"; }
- QCString trTypedefDocumentation()
- { return "Dokumentacija typedef-a"; }
- QCString trEnumerationTypeDocumentation()
- { return "Dokumentacija enumeracijskog tipa"; }
- QCString trFunctionDocumentation()
- { return "Dokumentacije funkcija"; }
- QCString trVariableDocumentation()
- { return "Dokumentacija varijable"; }
- QCString trCompounds()
- { return "Strukture"; }
- QCString trGeneratedAt(const char *date,const char *projName)
- {
- QCString result=(QCString)"Napravljeno "+date;
- if (projName) result+=(QCString)" projekt: "+projName;
- result+=" generator: ";
- return result;
- }
- QCString trWrittenBy()
- {
- return "napisao ";
- }
- QCString trClassDiagram(const char *clName)
- {
- return QCString("Dijagram klasa za ")+clName;
- }
- QCString trForInternalUseOnly()
- { return "IskljuÄivo za internu uporabu."; }
- QCString trWarning()
- { return "Upozorenje"; }
- QCString trVersion()
- { return "Verzija"; }
- QCString trDate()
- { return "Datum"; }
- QCString trReturns()
- { return "Povratne vrijednosti"; }
- QCString trSeeAlso()
- { return "Vidi također"; }
- QCString trParameters()
- { return "Parametri"; }
- QCString trExceptions()
- { return "Iznimke"; }
- QCString trGeneratedBy()
- { return "Generirao"; }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 0.49-990307
-//////////////////////////////////////////////////////////////////////////
-
- QCString trNamespaceList()
- { return "Popis imenika"; }
- QCString trNamespaceListDescription(bool extractAll)
- {
- QCString result="Popis svih ";
- if (!extractAll) result+="dokumentiranih ";
- result+="imenika s kratkim opisom:";
- return result;
- }
- QCString trFriends()
- { return "Friend-ovi "; }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 0.49-990405
-//////////////////////////////////////////////////////////////////////////
-
- QCString trRelatedFunctionDocumentation()
- { return "Dokumentacija povezanih funkcija"; }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 0.49-990425
-//////////////////////////////////////////////////////////////////////////
-
- QCString trCompoundReference(const char *clName,
- ClassDef::CompoundType compType,
- bool /*isTemplate*/)
- // used as the title of the HTML page of a class/struct/union
- {
- QCString result="Opis ";
- switch(compType)
- {
- case ClassDef::Class: result+=" klase "; break;
- case ClassDef::Struct: result+=" strukture "; break;
- case ClassDef::Union: result+=" unije "; break;
- case ClassDef::Interface: result+=" suÄelja (interface) "; break;
- case ClassDef::Protocol: result+=" protokola "; break;
- case ClassDef::Category: result+=" kategorije "; break;
- case ClassDef::Exception: result+=" iznimke (exception) "; break;
- }
- result += clName;
-
- return result;
- }
- QCString trFileReference(const char *fileName)
- // used as the title of the HTML page of a file
- {
- QCString result="Opis datoteke ";
- result+=fileName;
- return result;
- }
- QCString trNamespaceReference(const char *namespaceName)
- // used as the title of the HTML page of a namespace
- {
- QCString result ="Opis imenika ";
- result+=namespaceName;
-
- return result;
- }
-
- // these are for the member sections of a class, struct or union
- QCString trPublicMembers()
- { return "Public Älanovi"; }
- QCString trPublicSlots()
- { return "Public slotovi"; }
- QCString trSignals()
- { return "Signali"; }
- QCString trStaticPublicMembers()
- { return "Static public Älanovi"; }
- QCString trProtectedMembers()
- { return "Protected Älanovi"; }
- QCString trProtectedSlots()
- { return "Protected slotovi"; }
- QCString trStaticProtectedMembers()
- { return "Static protected Älanovi"; }
- QCString trPrivateMembers()
- { return "Privatni Älanovi"; }
- QCString trPrivateSlots()
- { return "Privatni slotovi"; }
- QCString trStaticPrivateMembers()
- { return "StatiÄni privatni Älanovi"; }
- // end of member sections
-
- QCString trWriteList(int numEntries)
- {
- // this function is used to produce a comma-separated list of items.
- // use generateMarker(i) to indicate where item i should be put.
- QCString result;
- int i;
- // the inherits list contain `numEntries' classes
- for (i=0;i<numEntries;i++)
- {
- // use generateMarker to generate placeholders for the class links!
- result+=generateMarker(i); // generate marker for entry i in the list
- // (order is left to right)
-
- if (i!=numEntries-1) // not the last entry, so we need a separator
- {
- if (i<numEntries-2) // not the fore last entry
- result+=", ";
- else // the fore last entry
- result+="";
- }
- }
- return result;
- }
-
- QCString trInheritsList(int numEntries)
- // used in class documentation to produce a list of base classes,
- // if class diagrams are disabled.
- {
- return "Naslijeđuje od "+trWriteList(numEntries)+".";
- }
- QCString trInheritedByList(int numEntries)
- // used in class documentation to produce a list of super classes,
- // if class diagrams are disabled.
- {
- return "Naslijeđena u "+trWriteList(numEntries)+".";
- }
- QCString trReimplementedFromList(int numEntries)
- // used in member documentation blocks to produce a list of
- // members that are hidden by this one.
- {
- return "Reimplementirano od "+trWriteList(numEntries)+".";
- }
- QCString trReimplementedInList(int numEntries)
- {
- // used in member documentation blocks to produce a list of
- // all member that overwrite the implementation of this member.
- return "Reimplementacija u "+trWriteList(numEntries)+".";
- }
-
- QCString trNamespaceMembers()
- // This is put above each page as a link to all members of namespaces.
- { return "Älanovi imenika"; }
- QCString trNamespaceMemberDescription(bool extractAll)
- // This is an introduction to the page with all namespace members
- {
- QCString result="Lista svih ";
- if (!extractAll) result+="dokumentiranih ";
- result+="Älanova imenika s linkovima na ";
- if (extractAll)
- result+="imeniÄku dokumentaciju svakog Älana:";
- else
- result+="imenike kojima pripadaju:";
- return result;
- }
- QCString trNamespaceIndex()
- // This is used in LaTeX as the title of the chapter with the
- // index of all namespaces.
- { return "Kazalo imenika"; }
- QCString trNamespaceDocumentation()
- // This is used in LaTeX as the title of the chapter containing
- // the documentation of all namespaces.
- { return "Dokumentacija namespace-a"; }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 0.49-990522
-//////////////////////////////////////////////////////////////////////////
-
- /*! This is used in the documentation before the list of all
- * namespaces in a file.
- */
- QCString trNamespaces()
- {
- return "Imenici";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 0.49-990728
-//////////////////////////////////////////////////////////////////////////
-
- /*! This is put at the bottom of a class documentation page and is
- * followed by a list of files that were used to generate the page.
- */
- QCString trGeneratedFromFiles(ClassDef::CompoundType compType,
- bool single)
- { // here s is one of " Class", " Struct" or " Union"
- // single is true implies a single file
- QCString result="Dokumentacija ";
- switch(compType)
- {
- case ClassDef::Class: result+="klase"; break;
- case ClassDef::Struct: result+="strukture"; break;
- case ClassDef::Union: result+="unije"; break;
- case ClassDef::Interface: result+="suÄelja (interface)"; break;
- case ClassDef::Protocol: result+="protokola"; break;
- case ClassDef::Category: result+="kategorije"; break;
- case ClassDef::Exception: result+="iznimke (exception)"; break;
- }
- result+=" je napravljena iz " + trFile(FALSE, single) + ": ";
- return result;
- }
-
- /*! This is in the (quick) index as a link to the alphabetical compound
- * list.
- */
- QCString trAlphabeticalList()
- { return "Abecedni popis"; }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 0.49-990901
-//////////////////////////////////////////////////////////////////////////
-
- /*! This is used as the heading text for the retval command. */
- QCString trReturnValues()
- { return "Povratna vrijednost"; }
-
- /*! This is in the (quick) index as a link to the main page (index.html)
- */
- QCString trMainPage()
- { return "Glavna stranica"; }
-
- /*! This is used in references to page that are put in the LaTeX
- * documentation. It should be an abbreviation of the word page.
- */
- QCString trPageAbbreviation()
- { return "str."; }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 0.49-991106
-//////////////////////////////////////////////////////////////////////////
-
- QCString trDefinedAtLineInSourceFile()
- {
- return "Definirano u liniji @0 datoteke @1.";
- }
- QCString trDefinedInSourceFile()
- {
- return "Definirano u datoteci @0.";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 0.49-991205
-//////////////////////////////////////////////////////////////////////////
-
- QCString trDeprecated()
- {
- return "Zastarjelo";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.0.0
-//////////////////////////////////////////////////////////////////////////
-
- /*! this text is put before a collaboration diagram */
- QCString trCollaborationDiagram(const char *clName)
- {
- return (QCString)"Kolaboracijski dijagram za "+clName+ ":";
- }
- /*! this text is put before an include dependency graph */
- QCString trInclDepGraph(const char *fName)
- {
- return (QCString)"Graf include međuovisnosti za "+fName+":";
- }
- /*! header that is put before the list of constructor/destructors. */
- QCString trConstructorDocumentation()
- {
- return "Dokumentacija konstruktora i destruktora ";
- }
- /*! Used in the file documentation to point to the corresponding sources. */
- QCString trGotoSourceCode()
- {
- return "Izvorni kod";
- }
- /*! Used in the file sources to point to the corresponding documentation. */
- QCString trGotoDocumentation()
- {
- return "Dokumenacija za ovu datoteku.";
- }
- /*! Text for the \\pre command */
- QCString trPrecondition()
- {
- return "Preduvjeti";
- }
- /*! Text for the \\post command */
- QCString trPostcondition()
- {
- return "Postuvjeti";
- }
- /*! Text for the \\invariant command */
- QCString trInvariant()
- {
- return "Invarijanta";
- }
- /*! Text shown before a multi-line variable/enum initialization */
- QCString trInitialValue()
- {
- return "PoÄetna vrijednost:";
- }
- /*! Text used the source code in the file index */
- QCString trCode()
- {
- return "kod";
- }
- QCString trGraphicalHierarchy()
- {
- return "GrafiÄko stablo klasa";
- }
- QCString trGotoGraphicalHierarchy()
- {
- return "GrafiÄko stablo klasa";
- }
- QCString trGotoTextualHierarchy()
- {
- return "Tekstualno stablo klasa";
- }
- QCString trPageIndex()
- {
- return "Indeks stranice";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.1.0
-//////////////////////////////////////////////////////////////////////////
-
- QCString trNote()
- {
- return "Primjedba";
- }
- QCString trPublicTypes()
- {
- return "Public tipovi";
- }
- QCString trPublicAttribs()
- {
- return "Public atributi";
- }
- QCString trStaticPublicAttribs()
- {
- return "Static public atributi";
- }
- QCString trProtectedTypes()
- {
- return "Protected tipovi";
- }
- QCString trProtectedAttribs()
- {
- return "Protected atributi";
- }
- QCString trStaticProtectedAttribs()
- {
- return "Static protected atributi";
- }
- QCString trPrivateTypes()
- {
- return "Private tipovi";
- }
- QCString trPrivateAttribs()
- {
- return "Private atributi";
- }
- QCString trStaticPrivateAttribs()
- {
- return "Static private atributi";
- }
-//////////////////////////////////////////////////////////////////////////
-// new since 1.1.3
-//////////////////////////////////////////////////////////////////////////
-
- /*! Used as a marker that is put before a todo item */
- virtual QCString trTodo()
- {
- return "Za uraditi";
- }
- /*! Used as the header of the todo list */
- virtual QCString trTodoList()
- {
- return "Ostalo za uraditi";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.1.4
-//////////////////////////////////////////////////////////////////////////
-
- virtual QCString trReferencedBy()
- {
- return "Referencirano od";
- }
- virtual QCString trRemarks()
- {
- return "Napomene";
- }
- virtual QCString trAttention()
- {
- return "Pažnja";
- }
- virtual QCString trInclByDepGraph()
- {
- return "Ovaj graf pokazuje koje datoteke izravno "
- "ili neizravno ukljuÄuju ovu datoteku:";
- }
- virtual QCString trSince()
- {
- return "Od";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.1.5
-//////////////////////////////////////////////////////////////////////////
-
- /*! title of the graph legend page */
- virtual QCString trLegendTitle()
- {
- return "Legenda";
- }
- /*! page explaining how the dot graph's should be interpreted */
- virtual QCString trLegendDocs()
- {
- return
- "Ova stranica objašnjava kako interpretirati grafikone koje je generirao "
- "doxygen.<p>\n"
- "Na primjer:\n"
- "\\code\n"
- "/*! Nevidljiva klasa (neće stati na graf date visine) */\n"
- "class Invisible { };\n\n"
- "/*! Odrezana klasa, inheritance je skriven (klase se vidi na grafu, ali ne i sve bazne klase) */\n"
- "class Truncated : public Invisible { };\n\n"
- "/* Nedokumentirana klasa */\n"
- "class Undocumented { };\n\n"
- "/*! Klasa koja je naslijeđena public */\n"
- "class PublicBase : public Truncated { };\n\n"
- "/*! A template class */\n"
- "template<class T> class Templ { };\n\n"
- "/*! Klasa koje je naslijeđena protected */\n"
- "class ProtectedBase { };\n\n"
- "/*! Klasa koje je naslijeđena private */\n"
- "class PrivateBase { };\n\n"
- "/*! Klasa koja se koristi agregacijom */\n"
- "class Used { };\n\n"
- "/*! Super klasa koja naslijeđuje/koristi ostale */\n"
- "class Inherited : public PublicBase,\n"
- " protected ProtectedBase,\n"
- " private PrivateBase,\n"
- " public Undocumented,\n"
- " public Templ<int>\n"
- "{\n"
- " private:\n"
- " Used *m_usedClass;\n"
- "};\n"
- "\\endcode\n"
- "To će rezultirati grafikonom:"
- "<p><center><img src=\"graph_legend."+Config_getEnum("DOT_IMAGE_FORMAT")+"\"></center>\n"
- "<p>\n"
- "Pravokutnici imaju slijedeće znaÄenje:\n"
- "<ul>\n"
- "<li>Puni crni predstavlja klasu za koji je napravljen graf.\n"
- "<li>Pravokutnik s crnim rubom predstavlja dokumentiranu klasu.\n"
- "<li>Pravokutnik s sivim rubom predstavlja nedokumentiranu klasu.\n"
- "<li>Pravokutnik s crvenim rubom predstavlja dokumentiranu klasu\n"
- "Za koju nije prikazan graf naslijeđivanja. Graf je odrezan "
- "ako ne stane unutar određenih granica."
- "</ul>\n"
- "Strelice imaju slijedeće znaÄenje:\n"
- "<ul>\n"
- "<li>Tamnoplava strelica oznaÄava public naslijeÄ‘ivanje.\n"
- "<li>Tamnozelena strelica oznaÄava protected naslijeÄ‘ivanje.\n"
- "<li>Tamnocrvena strelica oznaÄava private naslijeÄ‘ivanje.\n"
- "<li>LjubiÄasta isprekidana strelica se koristi ako je klasa dio "
- "druge klase ili ako se klasa koristi u drugoj klasi. Natpis na "
- "strelici je ime varijable u drugoj klasi\n"
- "Strelica je oznaÄena imenom varijable.\n"
- "<li>Žuta isprekidana strelica oznaÄava relaciju izmeÄ‘u template instance "
- "i template klase. OznaÄena je imenom template parametra\n"
- "</ul>\n";
- }
- /*! text for the link to the legend page */
- virtual QCString trLegend()
- {
- return "legenda";
- }
-//////////////////////////////////////////////////////////////////////////
-// new since 1.2.0
-//////////////////////////////////////////////////////////////////////////
-
- /*! Used as a marker that is put before a test item */
- virtual QCString trTest()
- {
- return "Test";
- }
- /*! Used as the header of the test list */
- virtual QCString trTestList()
- {
- return "Test lista";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.2.1
-//////////////////////////////////////////////////////////////////////////
-
- /*! Used as a section header for KDE-2 IDL methods */
- virtual QCString trDCOPMethods()
- {
- return "DCOP metode";
- }
-//////////////////////////////////////////////////////////////////////////
-// new since 1.2.2
-//////////////////////////////////////////////////////////////////////////
-
- /*! Used as a section header for IDL properties */
- virtual QCString trProperties()
- {
- return "Svojstva (property)";
- }
- /*! Used as a section header for IDL property documentation */
- virtual QCString trPropertyDocumentation()
- {
- return "Dokumentacija svojstava";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.2.4
-//////////////////////////////////////////////////////////////////////////
-
- /*! Used for Java classes in the summary section of Java packages */
- virtual QCString trClasses()
- {
- return "Klase";
- }
- /*! Used as the title of a Java package */
- virtual QCString trPackage(const char *name)
- {
- return (QCString)"Paket "+name;
- }
- /*! Title of the package index page */
- virtual QCString trPackageList()
- {
- return "Lista paketa";
- }
- /*! The description of the package index page */
- virtual QCString trPackageListDescription()
- {
- return "Paketi s kratkim opisom (ukoliko postoji):";
- }
- /*! The link name in the Quick links header for each page */
- virtual QCString trPackages()
- {
- return "Paketi";
- }
- /*! Text shown before a multi-line define */
- virtual QCString trDefineValue()
- {
- return "Vrijednost:";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.2.5
-//////////////////////////////////////////////////////////////////////////
-
- /*! Used as a marker that is put before a \\bug item */
- virtual QCString trBug()
- {
- return "Greška";
- }
- /*! Used as the header of the bug list */
- virtual QCString trBugList()
- {
- return "Popis grešaka";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.2.6
-//////////////////////////////////////////////////////////////////////////
- /*! Used as ansicpg for RTF file */
- virtual QCString trRTFansicp()
- {
- return "1252";
- }
- /*! Used as ansicpg for RTF fcharset */
- virtual QCString trRTFCharSet()
- {
- return "238";
- }
- /*! Used as header RTF general index */
- virtual QCString trRTFGeneralIndex()
- {
- return "Sadržaj";
- }
-
- /*! This is used for translation of the word that will possibly
- * be followed by a single name or by a list of names
- * of the category.
- */
- virtual QCString trClass(bool first_capital, bool singular)
- {
- QCString result((first_capital ? "Klas" : "klas"));
- result+= (singular ? "a" : "e");
- return result;
- }
-
- /*! This is used for translation of the word that will possibly
- * be followed by a single name or by a list of names
- * of the category.
- */
- virtual QCString trFile(bool first_capital, bool singular)
- {
- QCString result((first_capital ? "Datotek" : "datotek"));
- result+= (singular ? "a" : "e");
- return result;
- }
-
- /*! This is used for translation of the word that will possibly
- * be followed by a single name or by a list of names
- * of the category.
- */
- virtual QCString trNamespace(bool first_capital, bool singular)
- {
- QCString result;
- if (singular)
- result = ((first_capital ? "Imenik" : "imenik"));
- else
- result = ((first_capital ? "Imenici" : "imenici"));
- return result;
- }
-
- /*! This is used for translation of the word that will possibly
- * be followed by a single name or by a list of names
- * of the category.
- */
- virtual QCString trGroup(bool first_capital, bool singular)
- {
- QCString result((first_capital ? "Grup" : "grup"));
- result+= (singular ? "a" : "e");
- return result;
- }
-
- /*! This is used for translation of the word that will possibly
- * be followed by a single name or by a list of names
- * of the category.
- */
- virtual QCString trPage(bool first_capital, bool singular)
- {
- QCString result((first_capital ? "Stranic" : "stranic"));
- result+= (singular ? "a" : "e");
- return result;
- }
-
- /*! This is used for translation of the word that will possibly
- * be followed by a single name or by a list of names
- * of the category.
- */
- virtual QCString trMember(bool first_capital, bool singular)
- {
- QCString result((first_capital ? "Älan" : "Älan"));
- if (!singular) result+="ovi";
- return result;
- }
-
- /*! This is used for translation of the word that will possibly
- * be followed by a single name or by a list of names
- * of the category.
- */
- virtual QCString trGlobal(bool first_capital, bool singular)
- {
- QCString result((first_capital ? "G" : "g"));
- if( singular )
- result += "lobalna varijabla";
- else
- result += "lobalne varijable";
-
- return result;
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.2.7
-//////////////////////////////////////////////////////////////////////////
-
- /*! This text is generated when the \\author command is used and
- * for the author section in man pages. */
- virtual QCString trAuthor(bool first_capital, bool singular)
- {
- QCString result((first_capital ? "Autor" : "autor"));
- if (!singular) result+="i";
- return result;
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.2.11
-//////////////////////////////////////////////////////////////////////////
-
- /*! This text is put before the list of members referenced by a member
- */
- virtual QCString trReferences()
- {
- return "Reference";
- }
-//////////////////////////////////////////////////////////////////////////
-// new since 1.2.13
-//////////////////////////////////////////////////////////////////////////
-
- /*! used in member documentation blocks to produce a list of
- * members that are implemented by this one.
- */
- virtual QCString trImplementedFromList(int numEntries)
- {
- return "Implementira "+trWriteList(numEntries)+".";
- }
-
- /*! used in member documentation blocks to produce a list of
- * all members that implementation this member.
- */
- virtual QCString trImplementedInList(int numEntries)
- {
- return "Implementirano u "+trWriteList(numEntries)+".";
- }
-//////////////////////////////////////////////////////////////////////////
-// new since 1.2.16
-//////////////////////////////////////////////////////////////////////////
-
- /*! used in RTF documentation as a heading for the Table
- * of Contents.
- */
- virtual QCString trRTFTableOfContents()
- {
- return "Sadržaj";
- }
-//////////////////////////////////////////////////////////////////////////
-// new since 1.2.17
-//////////////////////////////////////////////////////////////////////////
-
- /*! Used as the header of the list of item that have been
- * flagged deprecated
- */
- virtual QCString trDeprecatedList()
- {
- return "Popis zastarjelih metoda";
- }
-//////////////////////////////////////////////////////////////////////////
-// new since 1.2.18
-//////////////////////////////////////////////////////////////////////////
-
- /*! Used as a header for declaration section of the events found in
- * a C# program
- */
- virtual QCString trEvents()
- {
- return "Događaji";
- }
- /*! Header used for the documentation section of a class' events. */
- virtual QCString trEventDocumentation()
- {
- return "Dokumentacija događaja";
- }
-//////////////////////////////////////////////////////////////////////////
-// new since 1.3
-//////////////////////////////////////////////////////////////////////////
-
- /*! Used as a heading for a list of Java class types with package scope.
- */
- virtual QCString trPackageTypes()
- {
- return "Tipovi u paketu";
- }
- /*! Used as a heading for a list of Java class functions with package
- * scope.
- */
- virtual QCString trPackageMembers()
- {
- return "Funkcije u paketu";
- }
- /*! Used as a heading for a list of static Java class functions with
- * package scope.
- */
- virtual QCString trStaticPackageMembers()
- {
- return "StatiÄke funkcije u paketu";
- }
- /*! Used as a heading for a list of Java class variables with package
- * scope.
- */
- virtual QCString trPackageAttribs()
- {
- return "Atributi u paketu";
- }
- /*! Used as a heading for a list of static Java class variables with
- * package scope.
- */
- virtual QCString trStaticPackageAttribs()
- {
- return "StatiÄki atributi u paketu";
- }
- //////////////////////////////////////////////////////////////////////////
- // new since 1.3.1
- //////////////////////////////////////////////////////////////////////////
-
- /*! Used in the quick index of a class/file/namespace member list page
- * to link to the unfiltered list of all members.
- */
- virtual QCString trAll()
- {
- return "Sve";
- }
- /*! Put in front of the call graph for a function. */
- virtual QCString trCallGraph()
- {
- return "Ovo je dijagram poziva za ovu funkciju:";
- }
-
- //////////////////////////////////////////////////////////////////////////
- // new since 1.3.3
- //////////////////////////////////////////////////////////////////////////
-
- /*! When the search engine is enabled this text is put in the header
- * of each page before the field where one can enter the text to search
- * for.
- */
- virtual QCString trSearchForIndex()
- {
- return "Traži";
- }
- /*! This string is used as the title for the page listing the search
- * results.
- */
- virtual QCString trSearchResultsTitle()
- {
- return "Rezultati pretrage";
- }
- /*! This string is put just before listing the search results. The
- * text can be different depending on the number of documents found.
- * Inside the text you can put the special marker $num to insert
- * the number representing the actual number of search results.
- * The @a numDocuments parameter can be either 0, 1 or 2, where the
- * value 2 represents 2 or more matches. HTML markup is allowed inside
- * the returned string.
- */
- virtual QCString trSearchResults(int numDocuments)
- {
- if (numDocuments==0)
- {
- return "Nema dokumenta koji odgovaraju vašem upitu";
- }
- else if (numDocuments==1)
- {
- return "Nađen <b>1</b> dokument koji odgovara vašem upitu.";
- }
- else if (numDocuments<5)
- {
- // Croatian (AFAIK all Slavic languages except Macedonian and Bulgarian)
- // have different plural form for 2,3,4.
- return "Nađena <b>$num</b> dokumenta koji odgovaraju vašem upitu."
- "Najbolji su prikazani prvi.";
- }
- else
- {
- return "Nađeno <b>$num</b> dokumenata koji odgovaraju vašem upitu."
- "Najbolji su prikazani prvi.";
- }
- }
- /*! This string is put before the list of matched words, for each search
- * result. What follows is the list of words that matched the query.
- */
- virtual QCString trSearchMatches()
- {
- return "Pronađeno:";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.3.8
-//////////////////////////////////////////////////////////////////////////
-
- /*! This is used in HTML as the title of page with source code for file filename
- */
- virtual QCString trSourceFile(QCString& filename)
- {
- return "Izvorni kod datoteke " + filename;
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.3.9
-//////////////////////////////////////////////////////////////////////////
-
- /*! This is used as the name of the chapter containing the directory
- * hierarchy.
- */
- virtual QCString trDirIndex()
- { return "Stablo direktorija"; }
-
- /*! This is used as the name of the chapter containing the documentation
- * of the directories.
- */
- virtual QCString trDirDocumentation()
- { return "Dokumentacija direktorija"; }
-
- /*! This is used as the title of the directory index and also in the
- * Quick links of a HTML page, to link to the directory hierarchy.
- */
- virtual QCString trDirectories()
- { return "Direktoriji"; }
-
- /*! This returns a sentences that introduces the directory hierarchy.
- * and the fact that it is sorted alphabetically per level
- */
- virtual QCString trDirDescription()
- { return "Stablo direktorija sortirano abecednim redom:"; }
-
- /*! This returns the title of a directory page. The name of the
- * directory is passed via \a dirName.
- */
- virtual QCString trDirReference(const char *dirName)
- { QCString result= "Opis direktorija "; result += dirName; return result; }
-
- /*! This returns the word directory with or without starting capital
- * (\a first_capital) and in sigular or plural form (\a singular).
- */
- virtual QCString trDir(bool first_capital, bool singular)
- {
- QCString result((first_capital ? "Direktorij" : "direktorij"));
- if (!singular) result+="i";
- return result;
- }
-//////////////////////////////////////////////////////////////////////////
-// new since 1.4.1
-//////////////////////////////////////////////////////////////////////////
-
- /*! This text is added to the documentation when the \\overload command
- * is used for a overloaded function.
- */
- virtual QCString trOverloadText()
- {
- return "Ovo je preopterećena funkcija (overload). "
- "Razlikuje se od navedene metode "
- "samo po vrsti argumenata koje prihvaća.";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.4.6
-//////////////////////////////////////////////////////////////////////////
-
- /*! This is used to introduce a caller (or called-by) graph */
- virtual QCString trCallerGraph()
- {
- return "Ovo je graf funkcija koje pozivaju ovu funkciju:";
- }
-
- /*! This is used in the documentation of a file/namespace before the list
- * of documentation blocks for enumeration values
- */
- virtual QCString trEnumerationValueDocumentation()
- { return "Dokumentacija enumeracija"; }
-//////////////////////////////////////////////////////////////////////////
-// new since 1.5.4 (mainly for Fortran)
-//////////////////////////////////////////////////////////////////////////
-
- /*! header that is put before the list of member subprograms (Fortran). */
- virtual QCString trMemberFunctionDocumentationFortran()
- { return "Dokumentacija member funkcija/subrutina"; }
-
- /*! This is put above each page as a link to the list of annotated data types (Fortran). */
- virtual QCString trCompoundListFortran()
- { return "Lista tipova podataka"; }
-
- /*! This is put above each page as a link to all members of compounds (Fortran). */
- virtual QCString trCompoundMembersFortran()
- { return "Polja"; }
-
- /*! This is an introduction to the annotated compound list (Fortran). */
- virtual QCString trCompoundListDescriptionFortran()
- { return "Tipovi podataka s kratkim opisom:"; }
-
- /*! This is an introduction to the page with all data types (Fortran). */
- virtual QCString trCompoundMembersDescriptionFortran(bool extractAll)
- {
- QCString result="Lista svih ";
- if (!extractAll)
- {
- result+="dokumentiranih ";
- }
- result+="polja";
- result+=" s linkovima na ";
- if (!extractAll)
- {
- result+="dokumentaciju struktura podataka za svako polje";
- }
- else
- {
- result+="strukture kojima pripadaju:";
- }
- return result;
- }
-
- /*! This is used in LaTeX as the title of the chapter with the
- * annotated compound index (Fortran).
- */
- virtual QCString trCompoundIndexFortran()
- { return "Kazalo data tipova"; }
-
- /*! This is used in LaTeX as the title of the chapter containing
- * the documentation of all data types (Fortran).
- */
- virtual QCString trTypeDocumentation()
- { return "Dokumentacija tipova podataka"; }
-
- /*! This is used in the documentation of a file as a header before the
- * list of (global) subprograms (Fortran).
- */
- virtual QCString trSubprograms()
- { return "Funkcije/Subrutine"; }
-
- /*! This is used in the documentation of a file/namespace before the list
- * of documentation blocks for subprograms (Fortran)
- */
- virtual QCString trSubprogramDocumentation()
- { return "Documentacija funkcija/subrutina"; }
-
- /*! This is used in the documentation of a file/namespace/group before
- * the list of links to documented compounds (Fortran)
- */
- virtual QCString trDataTypes()
- { return "Tipovi podataka"; }
-
- /*! used as the title of page containing all the index of all modules (Fortran). */
- virtual QCString trModulesList()
- { return "Popis modula"; }
-
- /*! used as an introduction to the modules list (Fortran) */
- virtual QCString trModulesListDescription(bool extractAll)
- {
- QCString result="Lista svih ";
- if (!extractAll) result+="dokumentiranih ";
- result+="modula s kratkim opisom:";
- return result;
- }
-
- /*! used as the title of the HTML page of a module/type (Fortran) */
- virtual QCString trCompoundReferenceFortran(const char *clName,
- ClassDef::CompoundType compType,
- bool isTemplate)
- {
- QCString result=(QCString)clName;
- switch(compType)
- {
- case ClassDef::Class: result+=" Modul"; break;
- case ClassDef::Struct: result+=" Tip"; break;
- case ClassDef::Union: result+=" Unija"; break;
- case ClassDef::Interface: result+=" SuÄelje"; break;
- case ClassDef::Protocol: result+=" Protokol"; break;
- case ClassDef::Category: result+=" Kategorija"; break;
- case ClassDef::Exception: result+=" Iznimka"; break;
- }
- if (isTemplate) result+=" Predložak";
- result+=" Referenca";
- return result;
- }
- /*! used as the title of the HTML page of a module (Fortran) */
- virtual QCString trModuleReference(const char *namespaceName)
- {
- QCString result=namespaceName;
- result+=" - Sadržaj modula";
- return result;
- }
-
- /*! This is put above each page as a link to all members of modules. (Fortran) */
- virtual QCString trModulesMembers()
- { return "Älanovi modula"; }
-
- /*! This is an introduction to the page with all modules members (Fortran) */
- virtual QCString trModulesMemberDescription(bool extractAll)
- {
- QCString result="Lista svih ";
- if (!extractAll) result+="dokumentiranih ";
- result+="Älanova modula s linkovima na ";
- if (extractAll)
- {
- result+="dokumentaciju modula za svaki Älan:";
- }
- else
- {
- result+="modul kojem pripadaju:";
- }
- return result;
- }
-
- /*! This is used in LaTeX as the title of the chapter with the
- * index of all modules (Fortran).
- */
- virtual QCString trModulesIndex()
- { return "Kazalo modula"; }
-
- /*! This is used for translation of the word that will possibly
- * be followed by a single name or by a list of names
- * of the category.
- */
- virtual QCString trModule(bool first_capital, bool singular)
- {
- QCString result((first_capital ? "Modul" : "modul"));
- if (!singular) result+="i";
- return result;
- }
- /*! This is put at the bottom of a module documentation page and is
- * followed by a list of files that were used to generate the page.
- */
- virtual QCString trGeneratedFromFilesFortran(ClassDef::CompoundType compType,
- bool)
- { // here s is one of " Module", " Struct" or " Union"
- // single is true implies a single file
- QCString result=(QCString)"Dokumentacija ovog ";
- switch(compType)
- {
- case ClassDef::Class: result+="modula"; break;
- case ClassDef::Struct: result+="tipa"; break;
- case ClassDef::Union: result+="unije"; break;
- case ClassDef::Interface: result+="suÄelja"; break;
- case ClassDef::Protocol: result+="protokola"; break;
- case ClassDef::Category: result+="kategorije"; break;
- case ClassDef::Exception: result+="iznimke"; break;
- }
- result+=" je napravljena iz :";
- return result;
- }
- /*! This is used for translation of the word that will possibly
- * be followed by a single name or by a list of names
- * of the category.
- */
- virtual QCString trType(bool first_capital, bool singular)
- {
- QCString result((first_capital ? "Tip" : "tip"));
- if (!singular) result+="ovi";
- return result;
- }
- /*! This is used for translation of the word that will possibly
- * be followed by a single name or by a list of names
- * of the category.
- */
- virtual QCString trSubprogram(bool first_capital, bool singular)
- {
- QCString result((first_capital ? "Subprogram" : "subprogram"));
- if (!singular) result+="i";
- return result;
- }
-
- /*! C# Type Constraint list */
- virtual QCString trTypeConstraints()
- {
- return "OgraniÄenja tipova (Type Constraints)";
- }
- //////////////////////////////////////////////////////////////////////////
- // new since 1.6.0 (mainly for the new search engine)
- //////////////////////////////////////////////////////////////////////////
-
- /*! directory relation for \a name */
- virtual QCString trDirRelation(const char *name)
- {
- return QCString("Relacije ") + QCString(name);
- }
-
- /*! Loading message shown when loading search results */
- virtual QCString trLoading()
- {
- return "UÄitavam...";
- }
-
- /*! Label used for search results in the global namespace */
- virtual QCString trGlobalNamespace()
- {
- return "Globalni namespace";
- }
-
- /*! Message shown while searching */
- virtual QCString trSearching()
- {
- return "Tražim...";
- }
-
- /*! Text shown when no search results are found */
- virtual QCString trNoMatches()
- {
- return "Nema traženih podataka";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.6.3 (missing items for the directory pages)
-//////////////////////////////////////////////////////////////////////////
-
- /*! introduction text for the directory dependency graph */
- virtual QCString trDirDependency(const char *name)
- {
- return (QCString)"Graf povezanih direktorija za "+name;
- }
-
- /*! when clicking a directory dependency label, a page with a
- * table is shown. The heading for the first column mentions the
- * source file that has a relation to another file.
- */
- virtual QCString trFileIn(const char *name)
- {
- return (QCString)"Datoteka u "+name;
- }
-
- /*! when clicking a directory dependency label, a page with a
- * table is shown. The heading for the second column mentions the
- * destination file that is included.
- */
- virtual QCString trIncludesFileIn(const char *name)
- {
- return (QCString)"UkljuÄuje datotake u "+name;
- }
-
- /** Compiles a date string.
- * @param year Year in 4 digits
- * @param month Month of the year: 1=January
- * @param day Day of the Month: 1..31
- * @param dayOfWeek Day of the week: 1=Monday..7=Sunday
- * @param hour Hour of the day: 0..23
- * @param minutes Minutes in the hour: 0..59
- * @param seconds Seconds within the minute: 0..59
- * @param includeTime Include time in the result string?
- */
- virtual QCString trDateTime(int year,int month,int day,int dayOfWeek,
- int hour,int minutes,int seconds,
- bool includeTime)
- {
- static const char *days[] = { "Pon","Uto","Sri","ÄŒet","Pet","Sub","Ned" };
- static const char *months[] = { "Sje","Velj","Ožu","Tra","Svi","Lip","Srp","Kol","Ruj","Lis","Stu","Pro" };
- QCString sdate;
- sdate.sprintf("%s %s %d %d",days[dayOfWeek-1],months[month-1],day,year);
- if (includeTime)
- {
- QCString stime;
- stime.sprintf(" %.2d:%.2d:%.2d",hour,minutes,seconds);
- sdate+=stime;
- }
- return sdate;
- }
-//////////////////////////////////////////////////////////////////////////
-// new since 1.7.5
-//////////////////////////////////////////////////////////////////////////
-
- /*! Header for the page with bibliographic citations */
- virtual QCString trCiteReferences()
- { return "Bibliografija"; }
-
- /*! Text for copyright paragraph */
- virtual QCString trCopyright()
- { return "Copyright"; }
-
- /*! Header for the graph showing the directory dependencies */
- virtual QCString trDirDepGraph(const char *name)
- { return QCString("Direktoriji o kojima ovisi ")+name+":"; }
-
-};
-
-#endif
-
-
diff --git a/trunk/src/translator_hu.h b/trunk/src/translator_hu.h
deleted file mode 100644
index 70d7186..0000000
--- a/trunk/src/translator_hu.h
+++ /dev/null
@@ -1,1546 +0,0 @@
-/******************************************************************************
- *
- *
- *
- * Copyright (C) 1997-2012 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.
- *
- */
-
- /*
- * Original Hungarian translation by
- * György Földvári <foldvari@diatronltd.com>
- *
- * Extended, revised and updated by
- * Ákos Kiss <akiss@users.sourceforge.net>
- *
- * Further extended, revised and updated by
- * Tamási Ferenc <tf551@hszk.bme.hu>
- */
-
-#ifndef TRANSLATOR_HU_H
-#define TRANSLATOR_HU_H
-
-class TranslatorHungarian : public TranslatorAdapter_1_4_6
-{
- private:
- const char * zed(char c)
- {
- switch (c & ~('a' ^ 'A')) {
- case 'B': case 'C': case 'D': case 'F': case 'G':
- case 'H': case 'J': case 'K': case 'L': case 'M':
- case 'N': case 'P': case 'Q': case 'R': case 'S':
- case 'T': case 'V': case 'W': case 'X': case 'Z':
- return " ";
- default:
- return "z ";
- }
- }
- public:
-
- // --- Language control methods -------------------
- virtual QCString idLanguage()
- { return "hungarian"; }
- /*! Used to get the command(s) for the language support. This method
- * was designed for languages which do not prefer babel package.
- * If this methods returns empty string, then the latexBabelPackage()
- * method is used to generate the command for using the babel package.
- */
- virtual QCString latexLanguageSupportCommand()
- {
- return "\\usepackage[T2A]{fontenc}\n"
- "\\usepackage[magyar]{babel}\n";
- }
-
- /*! return the language charset. This will be used for the HTML output */
- virtual QCString idLanguageCharset()
- {
- return "iso-8859-2";
- }
-
- // --- Language translation methods -------------------
-
- /*! used in the compound documentation before a list of related functions. */
- virtual QCString trRelatedFunctions()
- { return "Kapcsolódó függvények"; }
-
- /*! subscript for the related functions. */
- virtual QCString trRelatedSubscript()
- { return "(Figyelem! Ezek a függvények nem tagjai az osztálynak!)"; }
-
- /*! header that is put before the detailed description of files, classes and namespaces. */
- virtual QCString trDetailedDescription()
- { return "Részletes leírás"; }
-
- /*! header that is put before the list of typedefs. */
- virtual QCString trMemberTypedefDocumentation()
- { return "Típusdefiníció-tagok dokumentációja"; }
-
- /*! header that is put before the list of enumerations. */
- virtual QCString trMemberEnumerationDocumentation()
- { return "Enumeráció-tagok dokumentációja"; }
-
- /*! header that is put before the list of member functions. */
- virtual QCString trMemberFunctionDocumentation()
- { return "Tagfüggvények dokumentációja"; }
-
- /*! header that is put before the list of member attributes. */
- virtual QCString trMemberDataDocumentation()
- {
- if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
- {
- return "Adatmezõk dokumentációja";
- }
- else
- {
- return "Adattagok dokumentációja";
- }
- }
-
- /*! this is the text of a link put after brief descriptions. */
- virtual QCString trMore()
- { return "Részletek..."; }
-
- /*! put in the class documentation */
- virtual QCString trListOfAllMembers()
- { return "A tagok teljes listája."; }
-
- /*! used as the title of the "list of all members" page of a class */
- virtual QCString trMemberList()
- { return "Taglista"; }
-
- /*! this is the first part of a sentence that is followed by a class name */
- virtual QCString trThisIsTheListOfAllMembers()
- { return "A(z) "; }
-
- /*! this is the remainder of the sentence after the class name */
- virtual QCString trIncludingInheritedMembers()
- { return " osztály tagjainak teljes listája, az örökölt tagokkal együtt."; }
-
- virtual QCString trGeneratedAutomatically(const char *s)
- { QCString result="Ezt a dokumentációt a Doxygen készítette ";
- if (s) result+=(QCString)" a" + zed(s[0])+s+(QCString)" projekthez";
- result+=" a forráskódból.";
- return result;
- }
-
- /*! put after an enum name in the list of all members */
- virtual QCString trEnumName()
- { return "enum"; }
-
- /*! put after an enum value in the list of all members */
- virtual QCString trEnumValue()
- { return "enum-érték"; }
-
- /*! put after an undocumented member in the list of all members */
- virtual QCString trDefinedIn()
- { return "definiálja:"; }
-
- // quick reference sections
-
- /*! This is put above each page as a link to the list of all groups of
- * compounds or files (see the \\group command).
- */
- virtual QCString trModules()
- { return "Modulok"; }
-
- /*! This is put above each page as a link to the class hierarchy */
- virtual QCString trClassHierarchy()
- { return "Osztályhierarchia"; }
-
- /*! This is put above each page as a link to the list of annotated classes */
- virtual QCString trCompoundList()
- {
- if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
- {
- return "Adatszerkezetek";
- }
- else
- {
- return "Osztálylista";
- }
- }
-
- /*! This is put above each page as a link to the list of documented files */
- virtual QCString trFileList()
- { return "Fájllista"; }
-
- /*! This is put above each page as a link to all members of compounds. */
- virtual QCString trCompoundMembers()
- {
- if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
- {
- return "Adatmezõk";
- }
- else
- {
- return "Osztálytagok";
- }
- }
-
- /*! This is put above each page as a link to all members of files. */
- virtual QCString trFileMembers()
- {
- if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
- {
- return "Globális elemek";
- }
- else
- {
- return "Fájlelemek";
- }
- }
-
- /*! This is put above each page as a link to all related pages. */
- virtual QCString trRelatedPages()
- { return "Kapcsolódó lapok"; }
-
- /*! This is put above each page as a link to all examples. */
- virtual QCString trExamples()
- { return "Példák"; }
-
- /*! This is put above each page as a link to the search engine. */
- virtual QCString trSearch()
- { return "Keresés"; }
-
- /*! This is an introduction to the class hierarchy. */
- virtual QCString trClassHierarchyDescription()
- { return "Majdnem (de nem teljesen) betûrendbe szedett "
- "leszármazási lista:";
- }
-
- /*! This is an introduction to the list with all files. */
- virtual QCString trFileListDescription(bool extractAll)
- {
- QCString result="Az összes ";
- if (!extractAll) result+="dokumentált ";
- result+="fájl listája rövid leírásokkal:";
- return result;
- }
-
- /*! This is an introduction to the annotated compound list. */
- virtual QCString trCompoundListDescription()
- {
-
- if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
- {
- return "Az összes adatszerkezet listája rövid leírásokkal:";
- }
- else
- {
- return "Az összes osztály, struktúra, unió és interfész "
- "listája rövid leírásokkal:";
- }
- }
-
- /*! This is an introduction to the page with all class members. */
- virtual QCString trCompoundMembersDescription(bool extractAll)
- {
- QCString result="Az összes ";
- if (!extractAll)
- {
- result+="dokumentált ";
- }
- if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
- {
- result+="struktúra- és úniómezõ";
- }
- else
- {
- result+="osztálytag";
- }
- result+=" listája, valamint hivatkozás ";
- if (!extractAll)
- {
- if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
- {
- result+="a megfelelõ struktúra-/úniódokumentációra minden mezõnél:";
- }
- else
- {
- result+="a megfelelõ osztálydokumentációra minden tagnál:";
- }
- }
- else
- {
- if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
- {
- result+="a struktúrákra/úniókra, amikhez tartoznak:";
- }
- else
- {
- result+="az osztályokra, amikhez tartoznak:";
- }
- }
- return result;
- }
-
- /*! This is an introduction to the page with all file members. */
- virtual QCString trFileMembersDescription(bool extractAll)
- {
- QCString result="Az összes ";
- if (!extractAll) result+="dokumentált ";
-
- if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
- {
- result+="függvény, változó, makródefiníció, enumeráció és típusdefiníció";
- }
- else
- {
- result+="fájlelem";
- }
- result+=" listája, valamint hivatkozás ";
- if (extractAll)
- result+="a fájlokra, amikhez tartoznak:";
- else
- result+="a dokumentációra:";
- return result;
- }
-
- /*! This is an introduction to the page with the list of all examples */
- virtual QCString trExamplesDescription()
- { return "A példák listája:"; }
-
- /*! This is an introduction to the page with the list of related pages */
- virtual QCString trRelatedPagesDescription()
- { return "A kapcsolódó dokumentációk listája:"; }
-
- /*! This is an introduction to the page with the list of class/file groups */
- virtual QCString trModulesDescription()
- { return "A modulok listája:"; }
-
- // index titles (the project name is prepended for these)
-
-
- /*! This is used in HTML as the title of index.html. */
- virtual QCString trDocumentation()
- { return "Dokumentáció"; }
-
- /*! This is used in LaTeX as the title of the chapter with the
- * index of all groups.
- */
- virtual QCString trModuleIndex()
- { return "Modulmutató"; }
-
- /*! This is used in LaTeX as the title of the chapter with the
- * class hierarchy.
- */
- virtual QCString trHierarchicalIndex()
- { return "Hierarchikus mutató"; }
-
- /*! This is used in LaTeX as the title of the chapter with the
- * annotated compound index.
- */
- virtual QCString trCompoundIndex()
- {
- if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
- {
- return "Adatszerkezet-mutató";
- }
- else
- {
- return "Osztálymutató";
- }
- }
-
- /*! This is used in LaTeX as the title of the chapter with the
- * list of all files.
- */
- virtual QCString trFileIndex()
- { return "Fájlmutató"; }
-
- /*! This is used in LaTeX as the title of the chapter containing
- * the documentation of all groups.
- */
- virtual QCString trModuleDocumentation()
- { return "Modulok dokumentációja"; }
-
- /*! This is used in LaTeX as the title of the chapter containing
- * the documentation of all classes, structs and unions.
- */
- virtual QCString trClassDocumentation()
- {
- if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
- {
- return "Adatszerkezetek dokumentációja";
- }
- else
- {
- return "Osztályok dokumentációja";
- }
- }
-
- /*! This is used in LaTeX as the title of the chapter containing
- * the documentation of all files.
- */
- virtual QCString trFileDocumentation()
- { return "Fájlok dokumentációja"; }
-
- /*! This is used in LaTeX as the title of the chapter containing
- * the documentation of all examples.
- */
- virtual QCString trExampleDocumentation()
- { return "Példák dokumentációja"; }
-
- /*! This is used in LaTeX as the title of the chapter containing
- * the documentation of all related pages.
- */
- virtual QCString trPageDocumentation()
- { return "Kapcsolódó dokumentációk"; }
-
- /*! This is used in LaTeX as the title of the document */
- virtual QCString trReferenceManual()
- { return "Referencia kézikönyv"; }
-
- /*! This is used in the documentation of a file as a header before the
- * list of defines
- */
- virtual QCString trDefines()
- { return "Makródefiníciók"; }
-
- /*! This is used in the documentation of a file as a header before the
- * list of function prototypes
- */
- virtual QCString trFuncProtos()
- { return "Függvény-prototípusok"; }
-
- /*! This is used in the documentation of a file as a header before the
- * list of typedefs
- */
- virtual QCString trTypedefs()
- { return "Típusdefiníciók"; }
-
- /*! This is used in the documentation of a file as a header before the
- * list of enumerations
- */
- virtual QCString trEnumerations()
- { return "Enumerációk"; }
-
- /*! This is used in the documentation of a file as a header before the
- * list of (global) functions
- */
- virtual QCString trFunctions()
- { return "Függvények"; }
-
- /*! This is used in the documentation of a file as a header before the
- * list of (global) variables
- */
- virtual QCString trVariables()
- { return "Változók"; }
-
- /*! This is used in the documentation of a file as a header before the
- * list of (global) variables
- */
- virtual QCString trEnumerationValues()
- { return "Enumeráció-értékek"; }
-
- /*! This is used in the documentation of a file before the list of
- * documentation blocks for defines
- */
- virtual QCString trDefineDocumentation()
- { return "Makródefiníciók dokumentációja"; }
-
- /*! This is used in the documentation of a file/namespace before the list
- * of documentation blocks for function prototypes
- */
- virtual QCString trFunctionPrototypeDocumentation()
- { return "Függvény-prototípusok dokumentációja"; }
-
- /*! This is used in the documentation of a file/namespace before the list
- * of documentation blocks for typedefs
- */
- virtual QCString trTypedefDocumentation()
- { return "Típusdefiníciók dokumentációja"; }
-
- /*! This is used in the documentation of a file/namespace before the list
- * of documentation blocks for enumeration types
- */
- virtual QCString trEnumerationTypeDocumentation()
- { return "Enumerációk dokumentációja"; }
-
- /*! This is used in the documentation of a file/namespace before the list
- * of documentation blocks for functions
- */
- virtual QCString trFunctionDocumentation()
- { return "Függvények dokumentációja"; }
-
- /*! This is used in the documentation of a file/namespace before the list
- * of documentation blocks for variables
- */
- virtual QCString trVariableDocumentation()
- { return "Változók dokumentációja"; }
-
- /*! This is used in the documentation of a file/namespace/group before
- * the list of links to documented compounds
- */
- virtual QCString trCompounds()
- {
- if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
- {
- return "Adatszerkezetek";
- }
- else
- {
- return "Osztályok";
- }
- }
-
- /*! This is used in the standard footer of each page and indicates when
- * the page was generated
- */
- virtual QCString trGeneratedAt(const char *date,const char *projName)
- {
- QCString result=(QCString)"";
- if (projName) result+=(QCString)"Projekt: "+projName;
- result+=(QCString)" Készült: "+date+" Készítette: ";
- return result;
- }
- /*! This is part of the sentence used in the standard footer of each page.
- */
- virtual QCString trWrittenBy()
- {
- return " melyet írt ";
- }
-
- /*! this text is put before a class diagram */
- virtual QCString trClassDiagram(const char *clName)
- {
- return (QCString)"A"+zed(clName[0])+clName+" osztály származási diagramja:";
- }
-
- /*! this text is generated when the \\internal command is used. */
- virtual QCString trForInternalUseOnly()
- { return "CSAK BELSÕ HASZNÁLATRA!"; }
-
- /*! this text is generated when the \\warning command is used. */
- virtual QCString trWarning()
- { return "Figyelmeztetés"; }
-
- /*! this text is generated when the \\version command is used. */
- virtual QCString trVersion()
- { return "Verzió"; }
-
- /*! this text is generated when the \\date command is used. */
- virtual QCString trDate()
- { return "Dátum"; }
-
- /*! this text is generated when the \\return command is used. */
- virtual QCString trReturns()
- { return "Visszatérési érték"; }
-
- /*! this text is generated when the \\sa command is used. */
- virtual QCString trSeeAlso()
- { return "Lásd még"; }
-
- /*! this text is generated when the \\param command is used. */
- virtual QCString trParameters()
- { return "Paraméterek"; }
-
- /*! this text is generated when the \\exception command is used. */
- virtual QCString trExceptions()
- { return "Kivételek"; }
-
- /*! this text is used in the title page of a LaTeX document. */
- virtual QCString trGeneratedBy()
- { return "Készítette"; }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 0.49-990307
-//////////////////////////////////////////////////////////////////////////
-
- /*! used as the title of page containing all the index of all namespaces. */
- virtual QCString trNamespaceList()
- { return "Névtérlista"; }
-
- /*! used as an introduction to the namespace list */
- virtual QCString trNamespaceListDescription(bool extractAll)
- {
- QCString result="Az összes ";
- if (!extractAll) result+="dokumentált ";
- result+="névtér listája rövid leírásokkal:";
- return result;
- }
-
- /*! used in the class documentation as a header before the list of all
- * friends of a class
- */
- virtual QCString trFriends()
- { return "Barátok"; }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 0.49-990405
-//////////////////////////////////////////////////////////////////////////
-
- /*! used in the class documentation as a header before the list of all
- * related classes
- */
- virtual QCString trRelatedFunctionDocumentation()
- { return "Barát és kapcsolódó függvények dokumentációja"; }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 0.49-990425
-//////////////////////////////////////////////////////////////////////////
-
- /*! used as the title of the HTML page of a class/struct/union */
- virtual QCString trCompoundReference(const char *clName,
- ClassDef::CompoundType compType,
- bool isTemplate)
- {
- QCString result=(QCString)clName;
- switch(compType)
- {
- case ClassDef::Class: result+=" osztály"; break;
- case ClassDef::Struct: result+=" struktúra"; break;
- case ClassDef::Union: result+=" unió"; break;
- case ClassDef::Interface: result+=" interfész"; break;
- case ClassDef::Protocol: result+=" protocol"; break; // translate me!
- case ClassDef::Category: result+=" category"; break; // translate me!
- case ClassDef::Exception: result+=" kivétel"; break;
- }
- if (isTemplate) result+="sablon-";
- result+="referencia";
- return result;
- }
-
- /*! used as the title of the HTML page of a file */
- virtual QCString trFileReference(const char *fileName)
- {
- QCString result=fileName;
- result+=" fájlreferencia";
- return result;
- }
-
- /*! used as the title of the HTML page of a namespace */
- virtual QCString trNamespaceReference(const char *namespaceName)
- {
- QCString result=namespaceName;
- result+=" névtér-referencia";
- return result;
- }
-
- virtual QCString trPublicMembers()
- { return "Publikus tagfüggvények"; }
- virtual QCString trPublicSlots()
- { return "Publikus rések"; }
- virtual QCString trSignals()
- { return "Szignálok"; }
- virtual QCString trStaticPublicMembers()
- { return "Statikus publikus tagfüggvények"; }
- virtual QCString trProtectedMembers()
- { return "Védett tagfüggvények"; }
- virtual QCString trProtectedSlots()
- { return "Védett rések"; }
- virtual QCString trStaticProtectedMembers()
- { return "Statikus védett tagfüggvények"; }
- virtual QCString trPrivateMembers()
- { return "Privát tagfüggvények"; }
- virtual QCString trPrivateSlots()
- { return "Privát rések"; }
- virtual QCString trStaticPrivateMembers()
- { return "Statikus privát tagfüggvények"; }
-
- /*! this function is used to produce a comma-separated list of items.
- * use generateMarker(i) to indicate where item i should be put.
- */
- virtual QCString trWriteList(int numEntries)
- {
- QCString result;
- int i;
- // the inherits list contain `numEntries' classes
- for (i=0;i<numEntries;i++)
- {
- // use generateMarker to generate placeholders for the class links!
- result+=generateMarker(i); // generate marker for entry i in the list
- // (order is left to right)
-
- if (i!=numEntries-1) // not the last entry, so we need a separator
- {
- if (i<numEntries-2) // not the fore last entry
- result+=", ";
- else // the fore last entry
- result+=" és ";
- }
- }
- return result;
- }
-
- /*! used in class documentation to produce a list of base classes,
- * if class diagrams are disabled.
- */
- virtual QCString trInheritsList(int numEntries)
- {
- return "Õsök: "+trWriteList(numEntries)+".";
- }
-
- /*! used in class documentation to produce a list of super classes,
- * if class diagrams are disabled.
- */
- virtual QCString trInheritedByList(int numEntries)
- {
- return "Leszármazottak: "+trWriteList(numEntries)+".";
- }
-
- /*! used in member documentation blocks to produce a list of
- * members that are hidden by this one.
- */
- virtual QCString trReimplementedFromList(int numEntries)
- {
- return "Újraimplementált õsök: "+trWriteList(numEntries)+".";
- }
-
- /*! used in member documentation blocks to produce a list of
- * all member that overwrite the implementation of this member.
- */
- virtual QCString trReimplementedInList(int numEntries)
- {
- return "Újraimplementáló leszármazottak: "+trWriteList(numEntries)+".";
- }
-
- /*! This is put above each page as a link to all members of namespaces. */
- virtual QCString trNamespaceMembers()
- { return "Névtértagok"; }
-
- /*! This is an introduction to the page with all namespace members */
- virtual QCString trNamespaceMemberDescription(bool extractAll)
- {
- QCString result="Az összes ";
- if (!extractAll) result+="dokumentált ";
- result+="névtér tagjainak listája, valamint hivatkozás ";
- if (extractAll)
- result+=" a megfelelõ névtér dokumentációra minden tagnál:";
- else
- result+=" a névterekre, amelynek tagjai:";
- return result;
- }
- /*! This is used in LaTeX as the title of the chapter with the
- * index of all namespaces.
- */
- virtual QCString trNamespaceIndex()
- { return "Névtérmutató"; }
-
- /*! This is used in LaTeX as the title of the chapter containing
- * the documentation of all namespaces.
- */
- virtual QCString trNamespaceDocumentation()
- { return "Névterek dokumentációja"; }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 0.49-990522
-//////////////////////////////////////////////////////////////////////////
-
- /*! This is used in the documentation before the list of all
- * namespaces in a file.
- */
- virtual QCString trNamespaces()
- { return "Névterek"; }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 0.49-990728
-//////////////////////////////////////////////////////////////////////////
-
- /*! This is put at the bottom of a class documentation page and is
- * followed by a list of files that were used to generate the page.
- */
- virtual QCString trGeneratedFromFiles(ClassDef::CompoundType compType,
- bool single)
- { // here s is one of " Class", " Struct" or " Union"
- // single is true implies a single file
- QCString result=(QCString)"Ez a dokumentáció ";
- switch(compType)
- {
- case ClassDef::Class: result+="az osztályról"; break;
- case ClassDef::Struct: result+="a struktúráról"; break;
- case ClassDef::Union: result+="az unióról"; break;
- case ClassDef::Interface: result+="az interfészrõl"; break;
- case ClassDef::Protocol: result+="protocol"; break; // translate me!
- case ClassDef::Category: result+="category"; break; // translate me!
- case ClassDef::Exception: result+="a kivételrõl"; break;
- }
- result+=" a következõ fájl";
- if (!single) result+="ok";
- result+=" alapján készült:";
- return result;
- }
-
- /*! This is in the (quick) index as a link to the alphabetical compound
- * list.
- */
- virtual QCString trAlphabeticalList()
- { return "Betûrendes lista"; }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 0.49-990901
-//////////////////////////////////////////////////////////////////////////
-
- /*! This is used as the heading text for the retval command. */
- virtual QCString trReturnValues()
- { return "Visszatérési értékek"; }
-
- /*! This is in the (quick) index as a link to the main page (index.html)
- */
- virtual QCString trMainPage()
- { return "Fõoldal"; }
-
- /*! This is used in references to page that are put in the LaTeX
- * documentation. It should be an abbreviation of the word page.
- */
- virtual QCString trPageAbbreviation()
- { return "o."; }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 0.49-991003
-//////////////////////////////////////////////////////////////////////////
-
- virtual QCString trDefinedAtLineInSourceFile()
- {
- return "Definíció a(z) @1 fájl @0. sorában.";
- }
- virtual QCString trDefinedInSourceFile()
- {
- return "Definíció a(z) @0 fájlban.";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 0.49-991205
-//////////////////////////////////////////////////////////////////////////
-
- virtual QCString trDeprecated()
- {
- return "Ellenjavallt";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.0.0
-//////////////////////////////////////////////////////////////////////////
-
- /*! this text is put before a collaboration diagram */
- virtual QCString trCollaborationDiagram(const char *clName)
- {
- return (QCString)"A"+zed(clName[0])+clName+" osztály együttmûködési diagramja:";
- }
- /*! this text is put before an include dependency graph */
- virtual QCString trInclDepGraph(const char *fName)
- {
- return (QCString)"A"+zed(fName[0])+fName+" definíciós fájl függési gráfja:";
- }
- /*! header that is put before the list of constructor/destructors. */
- virtual QCString trConstructorDocumentation()
- {
- return "Konstruktorok és destruktorok dokumentációja";
- }
- /*! Used in the file documentation to point to the corresponding sources. */
- virtual QCString trGotoSourceCode()
- {
- return "Ugrás a fájl forráskódjához.";
- }
- /*! Used in the file sources to point to the corresponding documentation. */
- virtual QCString trGotoDocumentation()
- {
- return "Ugrás a fájl dokumentációjához.";
- }
- /*! Text for the \\pre command */
- virtual QCString trPrecondition()
- {
- return "Elõfeltétel";
- }
- /*! Text for the \\post command */
- virtual QCString trPostcondition()
- {
- return "Utófeltétel";
- }
- /*! Text for the \\invariant command */
- virtual QCString trInvariant()
- {
- return "Invariáns";
- }
- /*! Text shown before a multi-line variable/enum initialization */
- virtual QCString trInitialValue()
- {
- return "Kezdõ érték:";
- }
- /*! Text used the source code in the file index */
- virtual QCString trCode()
- {
- return "forráskód";
- }
- virtual QCString trGraphicalHierarchy()
- {
- return "Osztályhierarchia-ábra";
- }
- virtual QCString trGotoGraphicalHierarchy()
- {
- return "Ugrás az osztályhierarchia-ábrához";
- }
- virtual QCString trGotoTextualHierarchy()
- {
- return "Ugrás az szöveges osztályhierarchiához";
- }
- virtual QCString trPageIndex()
- {
- return "Oldalmutató";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.1.0
-//////////////////////////////////////////////////////////////////////////
-
- virtual QCString trNote()
- {
- return "Megjegyzés";
- }
- virtual QCString trPublicTypes()
- {
- return "Publikus típusok";
- }
- virtual QCString trPublicAttribs()
- {
- if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
- {
- return "Adatmezõk";
- }
- else
- {
- return "Publikus attribútumok";
- }
- }
- virtual QCString trStaticPublicAttribs()
- {
- return "Statikus publikus attribútumok";
- }
- virtual QCString trProtectedTypes()
- {
- return "Védett típusok";
- }
- virtual QCString trProtectedAttribs()
- {
- return "Védett attribútumok";
- }
- virtual QCString trStaticProtectedAttribs()
- {
- return "Statikus védett attribútumok";
- }
- virtual QCString trPrivateTypes()
- {
- return "Privát típusok";
- }
- virtual QCString trPrivateAttribs()
- {
- return "Privát attribútumok";
- }
- virtual QCString trStaticPrivateAttribs()
- {
- return "Statikus privát attribútumok";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.1.3
-//////////////////////////////////////////////////////////////////////////
-
- /*! Used as a marker that is put before a todo item */
- virtual QCString trTodo()
- {
- return "Tennivaló";
- }
- /*! Used as the header of the todo list */
- virtual QCString trTodoList()
- {
- return "Tennivalók listája";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.1.4
-//////////////////////////////////////////////////////////////////////////
-
- virtual QCString trReferencedBy()
- {
- return "Hivatkozások:";
- }
- virtual QCString trRemarks()
- {
- return "Megjegyzések";
- }
- virtual QCString trAttention()
- {
- return "Figyelem";
- }
- virtual QCString trInclByDepGraph()
- {
- return "Ez az ábra azt mutatja, hogy mely fájlok ágyazzák be "
- "közvetve vagy közvetlenül ezt a fájlt:";
- }
- virtual QCString trSince()
- {
- return "Elõször bevezetve";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.1.5
-//////////////////////////////////////////////////////////////////////////
-
- /*! title of the graph legend page */
- virtual QCString trLegendTitle()
- {
- return "Jelmagyarázat";
- }
- /*! page explaining how the dot graph's should be interpreted */
- virtual QCString trLegendDocs()
- {
- return
- "Ez az oldal elmagyarázza hogyan kell értelmezni a "
- "doxygen által készített ábrákat.<p>\n"
- "Vegyük a következõ példát:\n"
- "\\code\n"
- "/*! Vágás miatt nem látható osztály */\n"
- "class Invisible { };\n\n"
- "/*! Levágott osztály, származása rejtett */\n"
- "class Truncated : public Invisible { };\n\n"
- "/* Doxygen kommentekkel nem dokumentált osztály */\n"
- "class Undocumented { };\n\n"
- "/*! Publikus származtatásal levezetett osztály */\n"
- "class PublicBase : public Truncated { };\n\n"
- "/*! Egy sablonosztály */\n"
- "template<class T> class Templ { };\n\n"
- "/*! Védett származtatásal levezetett osztály */\n"
- "class ProtectedBase { };\n\n"
- "/*! Privát származtatásal levezetett osztály */\n"
- "class PrivateBase { };\n\n"
- "/*! Osztály, melyet a származtatott osztály használ */\n"
- "class Used { };\n\n"
- "/*! Osztály, mely több másiknak leszármazottja */\n"
- "class Inherited : public PublicBase,\n"
- " protected ProtectedBase,\n"
- " private PrivateBase,\n"
- " public Undocumented,\n"
- " public Templ<int>\n"
- "{\n"
- " private:\n"
- " Used *m_usedClass;\n"
- "};\n"
- "\\endcode\n"
- "Ha a konfigurációs fájl \\c MAX_DOT_GRAPH_HEIGHT elemének értékét "
- "240-re állítjuk, az eredmény a következõ ábra lesz:"
- "<p><center><img src=\"graph_legend."+Config_getEnum("DOT_IMAGE_FORMAT")+"\"></center>\n"
- "<p>\n"
- "Az ábrán levõ dobozok jelentése:\n"
- "<ul>\n"
- "<li>Kitöltött fekete doboz jelzi azt az osztályt vagy struktúrát,"
- "amelyrõl az ábra szól.\n"
- "<li>Fekete keret jelzi a dokumentált osztályokat és struktúrákat.\n"
- "<li>Szürke keret jelzi a nem dokumentált osztályokat és struktúrákat.\n"
- "<li>Piros keret jelzi azokat az osztályokat és struktúrákat, amelyeknél vágás miatt nem látható "
- "az összes leszármaztatási kapcsolat. Egy ábra vágásra kerül, ha nem fér bele "
- "a megadott tartományba."
- "</ul>\n"
- "A nyilak jelentése:\n"
- "<ul>\n"
- "<li>Sötétkék nyíl jelzi a publikus származtatást.\n"
- "<li>Sötétzöld nyíl jelzi a védett származtatást.\n"
- "<li>Sötétvörös nyíl jelzi a privát származtatást.\n"
- "<li>Lila szaggatott nyíl jelzi, ha az osztály egy másikat használ vagy tartalmaz. "
- "A nyíl felirata jelzi a változó(k) nevét, amelyeken keresztül a másik osztály kapcsolódik.\n"
- "<li>Sárga szaggatott nyíl jelzi a kapcsolatot a sablonpéldány és a példányosított "
- "osztálysablon között. A nyíl felirata jelzi a pélány sablonparamétereit.\n"
- "</ul>\n";
-
- }
- /*! text for the link to the legend page */
- virtual QCString trLegend()
- {
- return "Jelmagyarázat";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.2.0
-//////////////////////////////////////////////////////////////////////////
-
- /*! Used as a marker that is put before a test item */
- virtual QCString trTest()
- {
- return "Teszt";
- }
- /*! Used as the header of the test list */
- virtual QCString trTestList()
- {
- return "Tesztlista";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.2.1
-//////////////////////////////////////////////////////////////////////////
-
- /*! Used as a section header for KDE-2 IDL methods */
- virtual QCString trDCOPMethods()
- {
- return "DCOP tagfüggvények";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.2.2
-//////////////////////////////////////////////////////////////////////////
-
- /*! Used as a section header for IDL properties */
- virtual QCString trProperties()
- {
- return "Tulajdonságok";
- }
- /*! Used as a section header for IDL property documentation */
- virtual QCString trPropertyDocumentation()
- {
- return "Tulajdonságok dokumentációjka";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.2.4
-//////////////////////////////////////////////////////////////////////////
-
- /*! Used for Java classes in the summary section of Java packages */
- virtual QCString trClasses()
- {
- if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
- {
- return "Adatszerkezetek";
- }
- else
- {
- return "Osztályok";
- }
- }
- /*! Used as the title of a Java package */
- virtual QCString trPackage(const char *name)
- {
- return name+(QCString)" csomag";
- }
- /*! Title of the package index page */
- virtual QCString trPackageList()
- {
- return "Csomaglista";
- }
- /*! The description of the package index page */
- virtual QCString trPackageListDescription()
- {
- return "A csomagok rövid leírásai (amennyiben léteznek):";
- }
- /*! The link name in the Quick links header for each page */
- virtual QCString trPackages()
- {
- return "Csomagok";
- }
- /*! Text shown before a multi-line define */
- virtual QCString trDefineValue()
- {
- return "Érték:";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.2.5
-//////////////////////////////////////////////////////////////////////////
-
- /*! Used as a marker that is put before a \\bug item */
- virtual QCString trBug()
- {
- return "Hiba";
- }
- /*! Used as the header of the bug list */
- virtual QCString trBugList()
- {
- return "Hiba lista";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.2.6
-//////////////////////////////////////////////////////////////////////////
-
- /*! Used as ansicpg for RTF file
- *
- * The following table shows the correlation of Charset name, Charset Value and
- * <pre>
- * Codepage number:
- * Charset Name Charset Value(hex) Codepage number
- * ------------------------------------------------------
- * DEFAULT_CHARSET 1 (x01)
- * SYMBOL_CHARSET 2 (x02)
- * OEM_CHARSET 255 (xFF)
- * ANSI_CHARSET 0 (x00) 1252
- * RUSSIAN_CHARSET 204 (xCC) 1251
- * EE_CHARSET 238 (xEE) 1250
- * GREEK_CHARSET 161 (xA1) 1253
- * TURKISH_CHARSET 162 (xA2) 1254
- * BALTIC_CHARSET 186 (xBA) 1257
- * HEBREW_CHARSET 177 (xB1) 1255
- * ARABIC _CHARSET 178 (xB2) 1256
- * SHIFTJIS_CHARSET 128 (x80) 932
- * HANGEUL_CHARSET 129 (x81) 949
- * GB2313_CHARSET 134 (x86) 936
- * CHINESEBIG5_CHARSET 136 (x88) 950
- * </pre>
- *
- */
- virtual QCString trRTFansicp()
- {
- return "1250";
- }
-
-
- /*! Used as ansicpg for RTF fcharset
- * \see trRTFansicp() for a table of possible values.
- */
- virtual QCString trRTFCharSet()
- {
- return "0";
- }
-
- /*! Used as header RTF general index */
- virtual QCString trRTFGeneralIndex()
- {
- return "Tárgymutató";
- }
-
- /*! This is used for translation of the word that will possibly
- * be followed by a single name or by a list of names
- * of the category.
- */
- virtual QCString trClass(bool first_capital, bool /*singular*/)
- {
- QCString result((first_capital ? "Osztály" : "osztály"));
- //if (!singular) result+="es";
- return result;
- }
-
- /*! This is used for translation of the word that will possibly
- * be followed by a single name or by a list of names
- * of the category.
- */
- virtual QCString trFile(bool first_capital, bool /*singular*/)
- {
- QCString result((first_capital ? "Fájl" : "fájl"));
- //if (!singular) result+="s";
- return result;
- }
-
- /*! This is used for translation of the word that will possibly
- * be followed by a single name or by a list of names
- * of the category.
- */
- virtual QCString trNamespace(bool first_capital, bool /*singular*/)
- {
- QCString result((first_capital ? "Névtér" : "névtér"));
- //if (!singular) result+="s";
- return result;
- }
-
- /*! This is used for translation of the word that will possibly
- * be followed by a single name or by a list of names
- * of the category.
- */
- virtual QCString trGroup(bool first_capital, bool /*singular*/)
- {
- QCString result((first_capital ? "Csoport" : "csoport"));
- //if (!singular) result+="s";
- return result;
- }
-
- /*! This is used for translation of the word that will possibly
- * be followed by a single name or by a list of names
- * of the category.
- */
- virtual QCString trPage(bool first_capital, bool /*singular*/)
- {
- QCString result((first_capital ? "Oldal" : "oldal"));
- //if (!singular) result+="s";
- return result;
- }
-
- /*! This is used for translation of the word that will possibly
- * be followed by a single name or by a list of names
- * of the category.
- */
- virtual QCString trMember(bool first_capital, bool /*singular*/)
- {
- QCString result((first_capital ? "Tag" : "tag"));
- //if (!singular) result+="s";
- return result;
- }
-
- /*! This is used for translation of the word that will possibly
- * be followed by a single name or by a list of names
- * of the category.
- */
- virtual QCString trGlobal(bool first_capital, bool /*singular*/)
- {
- QCString result((first_capital ? "Globális elem" : "globális elem"));
- //if (!singular) result+="s";
- return result;
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.2.7
-//////////////////////////////////////////////////////////////////////////
-
- /*! This text is generated when the \\author command is used and
- * for the author section in man pages. */
- virtual QCString trAuthor(bool first_capital, bool singular)
- {
- QCString result((first_capital ? "Szerzõ" : "szerzõ"));
- if (!singular) result+="k";
- return result;
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.2.11
-//////////////////////////////////////////////////////////////////////////
-
- /*! This text is put before the list of members referenced by a member
- */
- virtual QCString trReferences()
- {
- return "Hivatkozások";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.2.13
-//////////////////////////////////////////////////////////////////////////
-
- /*! used in member documentation blocks to produce a list of
- * members that are implemented by this one.
- */
- virtual QCString trImplementedFromList(int numEntries)
- {
- return "Megvalósítja a következõket: "+trWriteList(numEntries)+".";
- }
-
- /*! used in member documentation blocks to produce a list of
- * all members that implement this abstract member.
- */
- virtual QCString trImplementedInList(int numEntries)
- {
- return "Megvalósítják a következõk: "+trWriteList(numEntries)+".";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.2.16
-//////////////////////////////////////////////////////////////////////////
-
- /*! used in RTF documentation as a heading for the Table
- * of Contents.
- */
- virtual QCString trRTFTableOfContents()
- {
- return "Tartalomjegyzék";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.2.17
-//////////////////////////////////////////////////////////////////////////
-
- /*! Used as the header of the list of item that have been
- * flagged deprecated
- */
- virtual QCString trDeprecatedList()
- {
- return "Ellenjavallt elemek listája";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.2.18
-//////////////////////////////////////////////////////////////////////////
-
- /*! Used as a header for declaration section of the events found in
- * a C# program
- */
- virtual QCString trEvents()
- {
- return "Események";
- }
- /*! Header used for the documentation section of a class' events. */
- virtual QCString trEventDocumentation()
- {
- return "Események dokumentációja";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.3
-//////////////////////////////////////////////////////////////////////////
-
- /*! Used as a heading for a list of Java class types with package scope.
- */
- virtual QCString trPackageTypes()
- {
- return "Csomag típusok";
- }
- /*! Used as a heading for a list of Java class functions with package
- * scope.
- */
- virtual QCString trPackageMembers()
- {
- return "Csomag függvények";
- }
- /*! Used as a heading for a list of static Java class functions with
- * package scope.
- */
- virtual QCString trStaticPackageMembers()
- {
- return "Statikus csomag függvények";
- }
- /*! Used as a heading for a list of Java class variables with package
- * scope.
- */
- virtual QCString trPackageAttribs()
- {
- return "Csomag attribútumok";
- }
- /*! Used as a heading for a list of static Java class variables with
- * package scope.
- */
- virtual QCString trStaticPackageAttribs()
- {
- return "Statikus csomag attribútumok";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.3.1
-//////////////////////////////////////////////////////////////////////////
-
- /*! Used in the quick index of a class/file/namespace member list page
- * to link to the unfiltered list of all members.
- */
- virtual QCString trAll()
- {
- return "Összes";
- }
- /*! Put in front of the call graph for a function. */
- virtual QCString trCallGraph()
- {
- return "A függvény hívási gráfja:";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.3.3
-//////////////////////////////////////////////////////////////////////////
-
- /*! When the search engine is enabled this text is put in the header
- * of each page before the field where one can enter the text to search
- * for.
- */
- virtual QCString trSearchForIndex()
- {
- return "Keresési kulcs";
- }
- /*! This string is used as the title for the page listing the search
- * results.
- */
- virtual QCString trSearchResultsTitle()
- {
- return "A keresés eredménye";
- }
- /*! This string is put just before listing the search results. The
- * text can be different depending on the number of documents found.
- * Inside the text you can put the special marker $num to insert
- * the number representing the actual number of search results.
- * The @a numDocuments parameter can be either 0, 1 or 2, where the
- * value 2 represents 2 or more matches. HTML markup is allowed inside
- * the returned string.
- */
- virtual QCString trSearchResults(int numDocuments)
- {
- if (numDocuments==0)
- {
- return "Sajnos egy dokumentum sem felelt meg a keresési feltételeknek.";
- }
- else if (numDocuments==1)
- {
- return "<b>1</b> dokumentum felelt meg a keresési feltételeknek.";
- }
- else
- {
- return "<b>$num</b> dokumentum felelt meg a keresési feltételeknek."
- "Elsõnek a legjobb találatok vannak feltüntetve.";
- }
- }
- /*! This string is put before the list of matched words, for each search
- * result. What follows is the list of words that matched the query.
- */
- virtual QCString trSearchMatches()
- {
- return "Találatok:";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.3.8
-//////////////////////////////////////////////////////////////////////////
-
- /*! This is used in HTML as the title of page with source code for file filename
- */
- virtual QCString trSourceFile(QCString& filename)
- {
- return filename + " Forrásfájl";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.3.9
-//////////////////////////////////////////////////////////////////////////
-
- /*! This is used as the name of the chapter containing the directory
- * hierarchy.
- */
- virtual QCString trDirIndex()
- { return "Könyvtárhierarchia"; }
-
- /*! This is used as the name of the chapter containing the documentation
- * of the directories.
- */
- virtual QCString trDirDocumentation()
- { return "Könyvtárak dokumentációja"; }
-
- /*! This is used as the title of the directory index and also in the
- * Quick links of a HTML page, to link to the directory hierarchy.
- */
- virtual QCString trDirectories()
- { return "Könyvtárak"; }
-
- /*! This returns a sentences that introduces the directory hierarchy.
- * and the fact that it is sorted alphabetically per level
- */
- virtual QCString trDirDescription()
- { return "Majdnem (de nem teljesen) betûrendbe szedett "
- "könyvtárhierarchia:";
- }
-
- /*! This returns the title of a directory page. The name of the
- * directory is passed via \a dirName.
- */
- virtual QCString trDirReference(const char *dirName)
- { QCString result=dirName; result+=" könyvtárreferencia"; return result; }
-
- /*! This returns the word directory with or without starting capital
- * (\a first_capital) and in sigular or plural form (\a singular).
- */
- virtual QCString trDir(bool first_capital, bool /*singular*/)
- {
- QCString result((first_capital ? "Könyvtár" : "könyvtár"));
- //if (singular) result+="y"; else result+="ies";
- return result;
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.4.1
-//////////////////////////////////////////////////////////////////////////
-
- /*! This text is added to the documentation when the \\overload command
- * is used for a overloaded function.
- */
- virtual QCString trOverloadText()
- {
- return "Ez egy túlterhelt tagfüggvény."
- "A fenti függvénytõl csak argumentumaiban különbözik.";
- }
-};
-
-#endif
diff --git a/trunk/src/translator_id.h b/trunk/src/translator_id.h
deleted file mode 100644
index 2206906..0000000
--- a/trunk/src/translator_id.h
+++ /dev/null
@@ -1,1867 +0,0 @@
-/******************************************************************************
- *
- *
- *
- * Copyright (C) 1997-2012 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.
- *
- */
-
-#ifndef TRANSLATOR_ID_H
-#define TRANSLATOR_ID_H
-
-/**
- * Translasi berikut didasarkan pada versi translator_en.h dalam
- * Doxygen 1.7.5.1.
- *
- * Penterjemah: Adhi Hargo <cadmus_sw at yahoo.com>
- */
-class TranslatorIndonesian : public Translator
-{
- public:
-
- // --- Language control methods -------------------
-
- /*! Used for identification of the language. The identification
- * should not be translated. It should be replaced by the name
- * of the language in English using lower-case characters only
- * (e.g. "czech", "japanese", "russian", etc.). It should be equal to
- * the identification used in language.cpp.
- */
- virtual QCString idLanguage()
- { return "indonesian"; }
-
- /*! Used to get the LaTeX command(s) for the language support.
- * This method should return string with commands that switch
- * LaTeX to the desired language. For example
- * <pre>"\\usepackage[german]{babel}\n"
- * </pre>
- * or
- * <pre>"\\usepackage{polski}\n"
- * "\\usepackage[latin2]{inputenc}\n"
- * "\\usepackage[T1]{fontenc}\n"
- * </pre>
- *
- * The English LaTeX does not use such commands. Because of this
- * the empty string is returned in this implementation.
- */
- virtual QCString latexLanguageSupportCommand()
- {
- return "\\usepackage[bahasa]{babel}";
- }
-
- /*! return the language charset. This will be used for the HTML output */
- virtual QCString idLanguageCharset()
- {
- return "iso-8859-1";
- }
-
- // --- Language translation methods -------------------
-
- /*! used in the compound documentation before a list of related functions. */
- virtual QCString trRelatedFunctions()
- { return "Fungsi-fungsi Terkait"; }
-
- /*! subscript for the related functions. */
- virtual QCString trRelatedSubscript()
- { return "(Perhatikan bahwa fungsi-fungsi tersebut bukan fungsi anggota.)"; }
-
- /*! header that is put before the detailed description of files, classes and namespaces. */
- virtual QCString trDetailedDescription()
- { return "Keterangan Lengkap"; }
-
- /*! header that is put before the list of typedefs. */
- virtual QCString trMemberTypedefDocumentation()
- { return "Dokumentasi Anggota: Tipe"; }
-
- /*! header that is put before the list of enumerations. */
- virtual QCString trMemberEnumerationDocumentation()
- { return "Dokumentasi Anggota: Enumerasi"; }
-
- /*! header that is put before the list of member functions. */
- virtual QCString trMemberFunctionDocumentation()
- { return "Dokumentasi Anggota: Fungsi"; }
-
- /*! header that is put before the list of member attributes. */
- virtual QCString trMemberDataDocumentation()
- {
- if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
- {
- return "Dokumentasi Variabel";
- }
- else
- {
- return "Dokumentasi Anggota: Data";
- }
- }
-
- /*! this is the text of a link put after brief descriptions. */
- virtual QCString trMore()
- { return "Selengkapnya..."; }
-
- /*! put in the class documentation */
- virtual QCString trListOfAllMembers()
- { return "Daftar semua anggota."; }
-
- /*! used as the title of the "list of all members" page of a class */
- virtual QCString trMemberList()
- { return "Daftar anggota"; }
-
- /*! this is the first part of a sentence that is followed by a class name */
- virtual QCString trThisIsTheListOfAllMembers()
- { return "Berikut ini daftar lengkap anggota untuk "; }
-
- /*! this is the remainder of the sentence after the class name */
- virtual QCString trIncludingInheritedMembers()
- { return ", termasuk semua anggota yang diwariskan."; }
-
- /*! this is put at the author sections at the bottom of man pages.
- * parameter s is name of the project name.
- */
- virtual QCString trGeneratedAutomatically(const char *s)
- { QCString result="Dibangkitkan secara otomatis oleh Doxygen";
- if (s) result+=(QCString)" untuk "+s;
- result+=" dari kode sumber.";
- return result;
- }
-
- /*! put after an enum name in the list of all members */
- virtual QCString trEnumName()
- { return "nama enumerasi"; }
-
- /*! put after an enum value in the list of all members */
- virtual QCString trEnumValue()
- { return "nilai enumerasi"; }
-
- /*! put after an undocumented member in the list of all members */
- virtual QCString trDefinedIn()
- { return "didefinisikan di"; }
-
- // quick reference sections
-
- /*! This is put above each page as a link to the list of all groups of
- * compounds or files (see the \\group command).
- */
- virtual QCString trModules()
- { return "Modul"; }
-
- /*! This is put above each page as a link to the class hierarchy */
- virtual QCString trClassHierarchy()
- { return "Hierarki Kelas"; }
-
- /*! This is put above each page as a link to the list of annotated classes */
- virtual QCString trCompoundList()
- {
- if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
- {
- return "Struktur Data";
- }
- else
- {
- return "Daftar Kelas";
- }
- }
-
- /*! This is put above each page as a link to the list of documented files */
- virtual QCString trFileList()
- { return "Daftar File"; }
-
- /*! This is put above each page as a link to all members of compounds. */
- virtual QCString trCompoundMembers()
- {
- if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
- {
- return "Variabel Data";
- }
- else
- {
- return "Daftar Anggota Kelas";
- }
- }
-
- /*! This is put above each page as a link to all members of files. */
- virtual QCString trFileMembers()
- {
- if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
- {
- return "Daftar Definisi Global";
- }
- else
- {
- return "Daftar Anggota File";
- }
- }
-
- /*! This is put above each page as a link to all related pages. */
- virtual QCString trRelatedPages()
- { return "Halaman Terkait"; }
-
- /*! This is put above each page as a link to all examples. */
- virtual QCString trExamples()
- { return "Contoh"; }
-
- /*! This is put above each page as a link to the search engine. */
- virtual QCString trSearch()
- { return "Cari"; }
-
- /*! This is an introduction to the class hierarchy. */
- virtual QCString trClassHierarchyDescription()
- { return "Hierarki kelas ini diurutkan kurang-lebih"
- " berdasarkan abjad:";
- }
-
- /*! This is an introduction to the list with all files. */
- virtual QCString trFileListDescription(bool extractAll)
- {
- QCString result="Berikut ini daftar seluruh file";
- if (!extractAll) result+=" yang didokumentasikan";
- result += ", dengan penjelasan singkat:";
- return result;
- }
-
- /*! This is an introduction to the annotated compound list. */
- virtual QCString trCompoundListDescription()
- {
-
- if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
- {
- return "Berikut ini daftar struktur data, dengan penjelasan singkat:";
- }
- else
- {
- return "Berikut ini daftar kelas, struct, union, dan interface, dengan penjelasan singkat:";
- }
- }
-
- /*! This is an introduction to the page with all class members. */
- virtual QCString trCompoundMembersDescription(bool extractAll)
- {
- QCString result="Berikut ini daftar seluruh ";
- if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
- {
- result+="variabel anggota struct dan union";
- }
- else
- {
- result+="kelas";
- }
- if (!extractAll)
- {
- result+=" yang didokumentasikan";
- }
- result+=", dengan tautan ke ";
- if (!extractAll)
- {
- if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
- {
- result+="dokumentasi struct/union untuk setiap variabel:";
- }
- else
- {
- result+="dokumentasi kelas untuk setiap anggota:";
- }
- }
- else
- {
- if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
- {
- result+="struct/union yang memuatnya:";
- }
- else
- {
- result+="kelas yang memuatnya:";
- }
- }
- return result;
- }
-
- /*! This is an introduction to the page with all file members. */
- virtual QCString trFileMembersDescription(bool extractAll)
- {
- QCString result="Berikut ini daftar ";
-
- if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
- {
- result+="fungsi, variabel, makro definisi, enumerasi, dan tipe";
- }
- else
- {
- result+="file";
- }
- if (!extractAll) result+=" yang didokumentasikan";
- result+=", dengan tautan ke ";
- if (extractAll)
- result+="file yang memuatnya:";
- else
- result+="dokumentasinya:";
- return result;
- }
-
- /*! This is an introduction to the page with the list of all examples */
- virtual QCString trExamplesDescription()
- { return "Berikut ini daftar semua contoh:"; }
-
- /*! This is an introduction to the page with the list of related pages */
- virtual QCString trRelatedPagesDescription()
- { return "Berikut ini daftar semua halaman dokumentasi yang terkait:"; }
-
- /*! This is an introduction to the page with the list of class/file groups */
- virtual QCString trModulesDescription()
- { return "Berikut ini daftar semua modul:"; }
-
- // index titles (the project name is prepended for these)
-
- /*! This is used in HTML as the title of index.html. */
- virtual QCString trDocumentation()
- { return "Dokumentasi"; }
-
- /*! This is used in LaTeX as the title of the chapter with the
- * index of all groups.
- */
- virtual QCString trModuleIndex()
- { return "Indeks Modul"; }
-
- /*! This is used in LaTeX as the title of the chapter with the
- * class hierarchy.
- */
- virtual QCString trHierarchicalIndex()
- { return "Indeks Hierarki Kelas"; }
-
- /*! This is used in LaTeX as the title of the chapter with the
- * annotated compound index.
- */
- virtual QCString trCompoundIndex()
- {
- if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
- {
- return "Indeks Struktur Data";
- }
- else
- {
- return "Indeks Kelas";
- }
- }
-
- /*! This is used in LaTeX as the title of the chapter with the
- * list of all files.
- */
- virtual QCString trFileIndex()
- { return "Indeks File"; }
-
- /*! This is used in LaTeX as the title of the chapter containing
- * the documentation of all groups.
- */
- virtual QCString trModuleDocumentation()
- { return "Dokumentasi Modul"; }
-
- /*! This is used in LaTeX as the title of the chapter containing
- * the documentation of all classes, structs and unions.
- */
- virtual QCString trClassDocumentation()
- {
- if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
- {
- return "Dokumentasi Struktur Data";
- }
- else
- {
- return "Dokumentasi Kelas";
- }
- }
-
- /*! This is used in LaTeX as the title of the chapter containing
- * the documentation of all files.
- */
- virtual QCString trFileDocumentation()
- { return "Dokumentasi File"; }
-
- /*! This is used in LaTeX as the title of the chapter containing
- * the documentation of all examples.
- */
- virtual QCString trExampleDocumentation()
- { return "Dokumentasi Contoh"; }
-
- /*! This is used in LaTeX as the title of the chapter containing
- * the documentation of all related pages.
- */
- virtual QCString trPageDocumentation()
- { return "Dokumentasi Halaman"; }
-
- /*! This is used in LaTeX as the title of the document */
- virtual QCString trReferenceManual()
- { return "Dokumen Referensi"; }
-
- /*! This is used in the documentation of a file as a header before the
- * list of defines
- */
- virtual QCString trDefines()
- { return "Makro Definisi"; }
-
- /*! This is used in the documentation of a file as a header before the
- * list of function prototypes
- */
- virtual QCString trFuncProtos()
- { return "Prototipe Fungsi"; }
-
- /*! This is used in the documentation of a file as a header before the
- * list of typedefs
- */
- virtual QCString trTypedefs()
- { return "Definisi Tipe"; }
-
- /*! This is used in the documentation of a file as a header before the
- * list of enumerations
- */
- virtual QCString trEnumerations()
- { return "Enumerasi"; }
-
- /*! This is used in the documentation of a file as a header before the
- * list of (global) functions
- */
- virtual QCString trFunctions()
- { return "Fungsi"; }
-
- /*! This is used in the documentation of a file as a header before the
- * list of (global) variables
- */
- virtual QCString trVariables()
- { return "Variabel"; }
-
- /*! This is used in the documentation of a file as a header before the
- * list of (global) variables
- */
- virtual QCString trEnumerationValues()
- { return "Nilai enumerasi"; }
-
- /*! This is used in the documentation of a file before the list of
- * documentation blocks for defines
- */
- virtual QCString trDefineDocumentation()
- { return "Dokumentasi Makro Definisi"; }
-
- /*! This is used in the documentation of a file/namespace before the list
- * of documentation blocks for function prototypes
- */
- virtual QCString trFunctionPrototypeDocumentation()
- { return "Dokumentasi Prototipe Fungsi"; }
-
- /*! This is used in the documentation of a file/namespace before the list
- * of documentation blocks for typedefs
- */
- virtual QCString trTypedefDocumentation()
- { return "Dokumentasi Definisi Tipe"; }
-
- /*! This is used in the documentation of a file/namespace before the list
- * of documentation blocks for enumeration types
- */
- virtual QCString trEnumerationTypeDocumentation()
- { return "Dokumentasi Tipe Enumerasi"; }
-
- /*! This is used in the documentation of a file/namespace before the list
- * of documentation blocks for functions
- */
- virtual QCString trFunctionDocumentation()
- { return "Dokumentasi Fungsi"; }
-
- /*! This is used in the documentation of a file/namespace before the list
- * of documentation blocks for variables
- */
- virtual QCString trVariableDocumentation()
- { return "Dokumentasi Variabel"; }
-
- /*! This is used in the documentation of a file/namespace/group before
- * the list of links to documented compounds
- */
- virtual QCString trCompounds()
- {
- if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
- {
- return "Struktur Data";
- }
- else
- {
- return "Kelas";
- }
- }
-
- /*! This is used in the standard footer of each page and indicates when
- * the page was generated
- */
- virtual QCString trGeneratedAt(const char *date,const char *projName)
- {
- QCString result=(QCString)"Dibangkitkan pada tanggal "+date;
- if (projName) result+=(QCString)" untuk "+projName;
- result+=(QCString)" oleh";
- return result;
- }
- /*! This is part of the sentence used in the standard footer of each page.
- */
- virtual QCString trWrittenBy()
- {
- return "ditulis oleh";
- }
-
- /*! this text is put before a class diagram */
- virtual QCString trClassDiagram(const char *clName)
- {
- return (QCString)"Diagram hierarki kelas untuk "+clName+":";
- }
-
- /*! this text is generated when the \\internal command is used. */
- virtual QCString trForInternalUseOnly()
- { return "Hanya untuk digunakan secara internal."; }
-
- /*! this text is generated when the \\warning command is used. */
- virtual QCString trWarning()
- { return "Peringatan"; }
-
- /*! this text is generated when the \\version command is used. */
- virtual QCString trVersion()
- { return "Versi"; }
-
- /*! this text is generated when the \\date command is used. */
- virtual QCString trDate()
- { return "Tanggal"; }
-
- /*! this text is generated when the \\return command is used. */
- virtual QCString trReturns()
- { return "Mengembalikan"; }
-
- /*! this text is generated when the \\sa command is used. */
- virtual QCString trSeeAlso()
- { return "Lihat juga"; }
-
- /*! this text is generated when the \\param command is used. */
- virtual QCString trParameters()
- { return "Parameter"; }
-
- /*! this text is generated when the \\exception command is used. */
- virtual QCString trExceptions()
- { return "Eksepsi"; }
-
- /*! this text is used in the title page of a LaTeX document. */
- virtual QCString trGeneratedBy()
- { return "Dibangkitkan oleh"; }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 0.49-990307
-//////////////////////////////////////////////////////////////////////////
-
- /*! used as the title of page containing all the index of all namespaces. */
- virtual QCString trNamespaceList()
- { return "Daftar Namespace"; }
-
- /*! used as an introduction to the namespace list */
- virtual QCString trNamespaceListDescription(bool extractAll)
- {
- QCString result="Berikut ini daftar namespace";
- if (!extractAll) result+=" yang didokumentasikan";
- result+=", dengan keterangan singkat:";
- return result;
- }
-
- /*! used in the class documentation as a header before the list of all
- * friends of a class
- */
- virtual QCString trFriends()
- { return "Friend"; }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 0.49-990405
-//////////////////////////////////////////////////////////////////////////
-
- /*! used in the class documentation as a header before the list of all
- * related classes
- */
- virtual QCString trRelatedFunctionDocumentation()
- { return "Dokumentasi Friend Dan Fungsi Terkait"; }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 0.49-990425
-//////////////////////////////////////////////////////////////////////////
-
- /*! used as the title of the HTML page of a class/struct/union */
- virtual QCString trCompoundReference(const char *clName,
- ClassDef::CompoundType compType,
- bool isTemplate)
- {
- QCString result="Referensi";
- switch(compType)
- {
- case ClassDef::Class: result+=" Kelas "; break;
- case ClassDef::Struct: result+=" Struct "; break;
- case ClassDef::Union: result+=" Union "; break;
- case ClassDef::Interface: result+=" Interface "; break;
- case ClassDef::Protocol: result+=" Protokol "; break;
- case ClassDef::Category: result+=" Kategori "; break;
- case ClassDef::Exception: result+=" Eksepsi "; break;
- }
- if (isTemplate) result+=" Template ";
- result+=(QCString)clName;
- return result;
- }
-
- /*! used as the title of the HTML page of a file */
- virtual QCString trFileReference(const char *fileName)
- {
- QCString result="Referensi File ";
- result+=fileName;
- return result;
- }
-
- /*! used as the title of the HTML page of a namespace */
- virtual QCString trNamespaceReference(const char *namespaceName)
- {
- QCString result="Referensi Namespace ";
- result+=namespaceName;
- return result;
- }
-
- virtual QCString trPublicMembers()
- { return "Fungsi Anggota Publik"; }
- virtual QCString trPublicSlots()
- { return "Slot Publik"; }
- virtual QCString trSignals()
- { return "Signal"; }
- virtual QCString trStaticPublicMembers()
- { return "Fungsi Anggota Publik Statis"; }
- virtual QCString trProtectedMembers()
- { return "Fungsi Anggota Diproteksi"; }
- virtual QCString trProtectedSlots()
- { return "Slot Diproteksi"; }
- virtual QCString trStaticProtectedMembers()
- { return "Fungsi Anggota Diproteksi Statis"; }
- virtual QCString trPrivateMembers()
- { return "Fungsi Anggota Privat"; }
- virtual QCString trPrivateSlots()
- { return "Slot Privat"; }
- virtual QCString trStaticPrivateMembers()
- { return "Fungsi Anggota Privat Statis"; }
-
- /*! this function is used to produce a comma-separated list of items.
- * use generateMarker(i) to indicate where item i should be put.
- */
- virtual QCString trWriteList(int numEntries)
- {
- QCString result;
- int i;
- // the inherits list contain `numEntries' classes
- for (i=0;i<numEntries;i++)
- {
- // use generateMarker to generate placeholders for the class links!
- result+=generateMarker(i); // generate marker for entry i in the list
- // (order is left to right)
-
- if (i!=numEntries-1) // not the last entry, so we need a separator
- {
- if (i<numEntries-2) // not the fore last entry
- result+=", ";
- else // the fore last entry
- result+=", dan ";
- }
- }
- return result;
- }
-
- /*! used in class documentation to produce a list of base classes,
- * if class diagrams are disabled.
- */
- virtual QCString trInheritsList(int numEntries)
- {
- return "Mewarisi "+trWriteList(numEntries)+".";
- }
-
- /*! used in class documentation to produce a list of super classes,
- * if class diagrams are disabled.
- */
- virtual QCString trInheritedByList(int numEntries)
- {
- return "Diwariskan ke "+trWriteList(numEntries)+".";
- }
-
- /*! used in member documentation blocks to produce a list of
- * members that are hidden by this one.
- */
- virtual QCString trReimplementedFromList(int numEntries)
- {
- return "Di-reimplementasikan dari "+trWriteList(numEntries)+".";
- }
-
- /*! used in member documentation blocks to produce a list of
- * all member that overwrite the implementation of this member.
- */
- virtual QCString trReimplementedInList(int numEntries)
- {
- return "Diimplementasikan ulang di "+trWriteList(numEntries)+".";
- }
-
- /*! This is put above each page as a link to all members of namespaces. */
- virtual QCString trNamespaceMembers()
- { return "Anggota Namespace"; }
-
- /*! This is an introduction to the page with all namespace members */
- virtual QCString trNamespaceMemberDescription(bool extractAll)
- {
- QCString result="Berikut ini daftar anggota namespace";
- if (!extractAll) result+=" yang didokumentasikan";
- result+=", dengan tautan ke ";
- if (extractAll)
- result+="dokumentasi namespace untuk setiap anggota:";
- else
- result+="namespace yang memuatnya:";
- return result;
- }
- /*! This is used in LaTeX as the title of the chapter with the
- * index of all namespaces.
- */
- virtual QCString trNamespaceIndex()
- { return "Indeks Namespace"; }
-
- /*! This is used in LaTeX as the title of the chapter containing
- * the documentation of all namespaces.
- */
- virtual QCString trNamespaceDocumentation()
- { return "Dokumentasi Namespace"; }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 0.49-990522
-//////////////////////////////////////////////////////////////////////////
-
- /*! This is used in the documentation before the list of all
- * namespaces in a file.
- */
- virtual QCString trNamespaces()
- { return "Daftar Namespace"; }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 0.49-990728
-//////////////////////////////////////////////////////////////////////////
-
- /*! This is put at the bottom of a class documentation page and is
- * followed by a list of files that were used to generate the page.
- */
- virtual QCString trGeneratedFromFiles(ClassDef::CompoundType compType,
- bool single)
- { // here s is one of " Class", " Struct" or " Union"
- // single is true implies a single file
- QCString result=(QCString)"Dokumentasi untuk ";
- switch(compType)
- {
- case ClassDef::Class: result+="kelas"; break;
- case ClassDef::Struct: result+="struct"; break;
- case ClassDef::Union: result+="union"; break;
- case ClassDef::Interface: result+="interface"; break;
- case ClassDef::Protocol: result+="protokol"; break;
- case ClassDef::Category: result+="kategori"; break;
- case ClassDef::Exception: result+="eksepsi"; break;
- }
- result+=" ini dibangkitkan dari file";
- result+=single ? "" : "-file";
- result+=" berikut:";
- return result;
- }
-
- /*! This is in the (quick) index as a link to the alphabetical compound
- * list.
- */
- virtual QCString trAlphabeticalList()
- { return "Daftar Berdasarkan Abjad"; }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 0.49-990901
-//////////////////////////////////////////////////////////////////////////
-
- /*! This is used as the heading text for the retval command. */
- virtual QCString trReturnValues()
- { return "Nilai kembali"; }
-
- /*! This is in the (quick) index as a link to the main page (index.html)
- */
- virtual QCString trMainPage()
- { return "Halaman Utama"; }
-
- /*! This is used in references to page that are put in the LaTeX
- * documentation. It should be an abbreviation of the word page.
- */
- virtual QCString trPageAbbreviation()
- { return "hal."; }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 0.49-991003
-//////////////////////////////////////////////////////////////////////////
-
- virtual QCString trDefinedAtLineInSourceFile()
- {
- return "Definisi pada baris @0 dalam file @1.";
- }
- virtual QCString trDefinedInSourceFile()
- {
- return "Definisi dalam file @0.";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 0.49-991205
-//////////////////////////////////////////////////////////////////////////
-
- virtual QCString trDeprecated()
- {
- return "Kadaluarsa";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.0.0
-//////////////////////////////////////////////////////////////////////////
-
- /*! this text is put before a collaboration diagram */
- virtual QCString trCollaborationDiagram(const char *clName)
- {
- return (QCString)"Diagram kolaborasi untuk "+clName+":";
- }
- /*! this text is put before an include dependency graph */
- virtual QCString trInclDepGraph(const char *fName)
- {
- return (QCString)"Bagan kebergantungan pemuatan untuk "+fName+":";
- }
- /*! header that is put before the list of constructor/destructors. */
- virtual QCString trConstructorDocumentation()
- {
- return "Dokumentasi Konstruktor & Destruktor";
- }
- /*! Used in the file documentation to point to the corresponding sources. */
- virtual QCString trGotoSourceCode()
- {
- return "Ke kode sumber file ini.";
- }
- /*! Used in the file sources to point to the corresponding documentation. */
- virtual QCString trGotoDocumentation()
- {
- return "Ke dokumentasi file ini.";
- }
- /*! Text for the \\pre command */
- virtual QCString trPrecondition()
- {
- return "Kondisi Awal";
- }
- /*! Text for the \\post command */
- virtual QCString trPostcondition()
- {
- return "Kondisi Akhir";
- }
- /*! Text for the \\invariant command */
- virtual QCString trInvariant()
- {
- return "Invarian";
- }
- /*! Text shown before a multi-line variable/enum initialization */
- virtual QCString trInitialValue()
- {
- return "Nilai awal:";
- }
- /*! Text used the source code in the file index */
- virtual QCString trCode()
- {
- return "kode";
- }
- virtual QCString trGraphicalHierarchy()
- {
- return "Hierarki Kelas Secara Grafis";
- }
- virtual QCString trGotoGraphicalHierarchy()
- {
- return "Ke bagan grafis hierarki kelas";
- }
- virtual QCString trGotoTextualHierarchy()
- {
- return "Ke bagan tekstual hierarki kelas";
- }
- virtual QCString trPageIndex()
- {
- return "Indeks Halaman";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.1.0
-//////////////////////////////////////////////////////////////////////////
-
- virtual QCString trNote()
- {
- return "Catatan";
- }
- virtual QCString trPublicTypes()
- {
- return "Tipe Publik";
- }
- virtual QCString trPublicAttribs()
- {
- if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
- {
- return "Variabel Data";
- }
- else
- {
- return "Atribut Publik";
- }
- }
- virtual QCString trStaticPublicAttribs()
- {
- return "Atribut Publik Statis";
- }
- virtual QCString trProtectedTypes()
- {
- return "Tipe Diproteksi";
- }
- virtual QCString trProtectedAttribs()
- {
- return "Atribut Diproteksi";
- }
- virtual QCString trStaticProtectedAttribs()
- {
- return "Atribut Diproteksi Statis";
- }
- virtual QCString trPrivateTypes()
- {
- return "Tipe Privat";
- }
- virtual QCString trPrivateAttribs()
- {
- return "Atribut Privat";
- }
- virtual QCString trStaticPrivateAttribs()
- {
- return "Atribut Privat Statis";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.1.3
-//////////////////////////////////////////////////////////////////////////
-
- /*! Used as a marker that is put before a \\todo item */
- virtual QCString trTodo()
- {
- return "Tugas";
- }
- /*! Used as the header of the todo list */
- virtual QCString trTodoList()
- {
- return "Daftar Tugas";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.1.4
-//////////////////////////////////////////////////////////////////////////
-
- virtual QCString trReferencedBy()
- {
- return "Direferensikan oleh";
- }
- virtual QCString trRemarks()
- {
- return "Keterangan";
- }
- virtual QCString trAttention()
- {
- return "Perhatian";
- }
- virtual QCString trInclByDepGraph()
- {
- return "Bagan ini menunjukkan file-file yang memuat"
- " atau menggunakan file ini baik secara langsung maupun"
- " tidak langsung:";
- }
- virtual QCString trSince()
- {
- return "Sejak";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.1.5
-//////////////////////////////////////////////////////////////////////////
-
- /*! title of the graph legend page */
- virtual QCString trLegendTitle()
- {
- return "Keterangan Bagan";
- }
- /*! page explaining how the dot graph's should be interpreted
- * The %A in the text below are to prevent link to classes called "A".
- */
- virtual QCString trLegendDocs()
- {
- return
- "Halaman ini berisi keterangan cara membaca bagan yang dibangkitkan "
- "oleh doxygen.<p>\n"
- "Contoh:\n"
- "\\code\n"
- "/*! Invisible class because of truncation */\n"
- "class Invisible { };\n\n"
- "/*! Truncated class, inheritance relation is hidden */\n"
- "class Truncated : public Invisible { };\n\n"
- "/* Class not documented with doxygen comments */\n"
- "class Undocumented { };\n\n"
- "/*! Class that is inherited using public inheritance */\n"
- "class PublicBase : public Truncated { };\n\n"
- "/*! A template class */\n"
- "template<class T> class Templ { };\n\n"
- "/*! Class that is inherited using protected inheritance */\n"
- "class ProtectedBase { };\n\n"
- "/*! Class that is inherited using private inheritance */\n"
- "class PrivateBase { };\n\n"
- "/*! Class that is used by the Inherited class */\n"
- "class Used { };\n\n"
- "/*! Super class that inherits a number of other classes */\n"
- "class Inherited : public PublicBase,\n"
- " protected ProtectedBase,\n"
- " private PrivateBase,\n"
- " public Undocumented,\n"
- " public Templ<int>\n"
- "{\n"
- " private:\n"
- " Used *m_usedClass;\n"
- "};\n"
- "\\endcode\n"
- "Apabila tag \\c MAX_DOT_GRAPH_HEIGHT di file konfigurasi "
- "diset ke 240 kode di atas akan menghasilkan bagan berikut:"
- "<p><center><img alt=\"\" src=\"graph_legend."+Config_getEnum("DOT_IMAGE_FORMAT")+"\"></center>\n"
- "<p>\n"
- "Kotak-kotak pada bagan di atas mempunyai arti sebagai berikut:\n"
- "<ul>\n"
- "<li>%Kotak hitam merupakan struct atau kelas yang bersangkutan.\n"
- "<li>%Kotak berbingkai hitam adalah struct atau kelas yang mempunyai dokumentasi.\n"
- "<li>%Kotak dengan bingkai abu-abu adalah struct atau kelas tanpa dokumentasi.\n"
- "<li>%Kotak dengan bingkai merah merupakan struct atau kelas yang didokumentasikan tetapi"
- "tidak semua relasinya ditampilkan. %Sebuah bagan "
- "akan terpotong apabila lebih besar daripada ukuran yang ditentukan.\n"
- "</ul>\n"
- "Arti dari tanda-tanda panah adalah sebagai berikut:\n"
- "<ul>\n"
- "<li>%Panah biru tua menandakan pewarisan publik.\n"
- "<li>%Panah hijau tua untuk pewarisan diproteksi.\n"
- "<li>%Panah merah tua untuk pewarisan privat.\n"
- "<li>%Panah ungu putus-putus menandakan kelas tersebut berhubungan dengan kelas lain. "
- "Panah tersebut diberi judul sesuai dengan kelas atau struct tujuan.\n"
- "<li>%Panah kuning putus-putus menandakan hubungan antara sebuah template kelas dan "
- "instance dari template tersebut. Panah tersebut diberi judul sesuai dengan "
- "parameter template yang digunakan.\n"
- "</ul>\n";
- }
- /*! text for the link to the legend page */
- virtual QCString trLegend()
- {
- return "keterangan";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.2.0
-//////////////////////////////////////////////////////////////////////////
-
- /*! Used as a marker that is put before a test item */
- virtual QCString trTest()
- {
- return "Tes";
- }
- /*! Used as the header of the test list */
- virtual QCString trTestList()
- {
- return "Daftar Tes";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.2.1
-//////////////////////////////////////////////////////////////////////////
-
- /*! Used as a section header for KDE-2 IDL methods */
- virtual QCString trDCOPMethods()
- {
- return "Fungsi Anggota: DCOP";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.2.2
-//////////////////////////////////////////////////////////////////////////
-
- /*! Used as a section header for IDL properties */
- virtual QCString trProperties()
- {
- return "Daftar Property";
- }
- /*! Used as a section header for IDL property documentation */
- virtual QCString trPropertyDocumentation()
- {
- return "Dokumentasi Property";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.2.4
-//////////////////////////////////////////////////////////////////////////
-
- /*! Used for Java classes in the summary section of Java packages */
- virtual QCString trClasses()
- {
- if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
- {
- return "Struktur Data";
- }
- else
- {
- return "Daftar Kelas";
- }
- }
- /*! Used as the title of a Java package */
- virtual QCString trPackage(const char *name)
- {
- return (QCString)"Paket "+name;
- }
- /*! Title of the package index page */
- virtual QCString trPackageList()
- {
- return "Daftar Paket";
- }
- /*! The description of the package index page */
- virtual QCString trPackageListDescription()
- {
- return "Berikut ini daftar paket, dengan keterangan singkat (apabila tersedia):";
- }
- /*! The link name in the Quick links header for each page */
- virtual QCString trPackages()
- {
- return "Daftar Paket";
- }
- /*! Text shown before a multi-line define */
- virtual QCString trDefineValue()
- {
- return "Nilai:";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.2.5
-//////////////////////////////////////////////////////////////////////////
-
- /*! Used as a marker that is put before a \\bug item */
- virtual QCString trBug()
- {
- return "Bug";
- }
- /*! Used as the header of the bug list */
- virtual QCString trBugList()
- {
- return "Daftar Bug";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.2.6
-//////////////////////////////////////////////////////////////////////////
-
- /*! Used as ansicpg for RTF file
- *
- * The following table shows the correlation of Charset name, Charset Value and
- * <pre>
- * Codepage number:
- * Charset Name Charset Value(hex) Codepage number
- * ------------------------------------------------------
- * DEFAULT_CHARSET 1 (x01)
- * SYMBOL_CHARSET 2 (x02)
- * OEM_CHARSET 255 (xFF)
- * ANSI_CHARSET 0 (x00) 1252
- * RUSSIAN_CHARSET 204 (xCC) 1251
- * EE_CHARSET 238 (xEE) 1250
- * GREEK_CHARSET 161 (xA1) 1253
- * TURKISH_CHARSET 162 (xA2) 1254
- * BALTIC_CHARSET 186 (xBA) 1257
- * HEBREW_CHARSET 177 (xB1) 1255
- * ARABIC _CHARSET 178 (xB2) 1256
- * SHIFTJIS_CHARSET 128 (x80) 932
- * HANGEUL_CHARSET 129 (x81) 949
- * GB2313_CHARSET 134 (x86) 936
- * CHINESEBIG5_CHARSET 136 (x88) 950
- * </pre>
- *
- */
- virtual QCString trRTFansicp()
- {
- return "1252";
- }
-
-
- /*! Used as ansicpg for RTF fcharset
- * \see trRTFansicp() for a table of possible values.
- */
- virtual QCString trRTFCharSet()
- {
- return "0";
- }
-
- /*! Used as header RTF general index */
- virtual QCString trRTFGeneralIndex()
- {
- return "Indeks";
- }
-
- /*! This is used for translation of the word that will possibly
- * be followed by a single name or by a list of names
- * of the category.
- */
- virtual QCString trClass(bool first_capital, bool singular)
- {
- QCString result((first_capital ? "Kelas" : "kelas"));
- if (!singular) result+="-kelas";
- return result;
- }
-
- /*! This is used for translation of the word that will possibly
- * be followed by a single name or by a list of names
- * of the category.
- */
- virtual QCString trFile(bool first_capital, bool singular)
- {
- QCString result((first_capital ? "File" : "file"));
- if (!singular) result+="-file";
- return result;
- }
-
- /*! This is used for translation of the word that will possibly
- * be followed by a single name or by a list of names
- * of the category.
- */
- virtual QCString trNamespace(bool first_capital, bool)
- {
- QCString result((first_capital ? "Namespace" : "namespace"));
- return result;
- }
-
- /*! This is used for translation of the word that will possibly
- * be followed by a single name or by a list of names
- * of the category.
- */
- virtual QCString trGroup(bool first_capital, bool singular)
- {
- QCString result((first_capital ? "Kelompok" : "kelompok"));
- if (!singular) result+="-kelompok";
- return result;
- }
-
- /*! This is used for translation of the word that will possibly
- * be followed by a single name or by a list of names
- * of the category.
- */
- virtual QCString trPage(bool first_capital, bool singular)
- {
- QCString result((first_capital ? "Halaman" : "halaman"));
- if (!singular) result+="-halaman";
- return result;
- }
-
- /*! This is used for translation of the word that will possibly
- * be followed by a single name or by a list of names
- * of the category.
- */
- virtual QCString trMember(bool first_capital, bool singular)
- {
- QCString result((first_capital ? "Anggota" : "anggota"));
- if (!singular) result+="-anggota";
- return result;
- }
-
- /*! This is used for translation of the word that will possibly
- * be followed by a single name or by a list of names
- * of the category.
- */
- virtual QCString trGlobal(bool first_capital, bool singular)
- {
- QCString result((first_capital ? "Definisi" : "definisi"));
- if (!singular) result+="-definisi";
- result += " global";
- return result;
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.2.7
-//////////////////////////////////////////////////////////////////////////
-
- /*! This text is generated when the \\author command is used and
- * for the author section in man pages. */
- virtual QCString trAuthor(bool first_capital, bool)
- {
- QCString result((first_capital ? "Penulis" : "penulis"));
- //if (!singular) result+="s";
- return result;
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.2.11
-//////////////////////////////////////////////////////////////////////////
-
- /*! This text is put before the list of members referenced by a member
- */
- virtual QCString trReferences()
- {
- return "Referensi";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.2.13
-//////////////////////////////////////////////////////////////////////////
-
- /*! used in member documentation blocks to produce a list of
- * members that are implemented by this one.
- */
- virtual QCString trImplementedFromList(int numEntries)
- {
- return "Mengimplementasikan "+trWriteList(numEntries)+".";
- }
-
- /*! used in member documentation blocks to produce a list of
- * all members that implement this abstract member.
- */
- virtual QCString trImplementedInList(int numEntries)
- {
- return "Diimplementasikan di "+trWriteList(numEntries)+".";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.2.16
-//////////////////////////////////////////////////////////////////////////
-
- /*! used in RTF documentation as a heading for the Table
- * of Contents.
- */
- virtual QCString trRTFTableOfContents()
- {
- return "Daftar Isi";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.2.17
-//////////////////////////////////////////////////////////////////////////
-
- /*! Used as the header of the list of item that have been
- * flagged deprecated
- */
- virtual QCString trDeprecatedList()
- {
- return "Daftar Kadaluarsa";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.2.18
-//////////////////////////////////////////////////////////////////////////
-
- /*! Used as a header for declaration section of the events found in
- * a C# program
- */
- virtual QCString trEvents()
- {
- return "Event";
- }
- /*! Header used for the documentation section of a class' events. */
- virtual QCString trEventDocumentation()
- {
- return "Dokumentasi Event";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.3
-//////////////////////////////////////////////////////////////////////////
-
- /*! Used as a heading for a list of Java class types with package scope.
- */
- virtual QCString trPackageTypes()
- {
- return "Jenis Paket";
- }
- /*! Used as a heading for a list of Java class functions with package
- * scope.
- */
- virtual QCString trPackageMembers()
- {
- return "Daftar Fungsi Paket";
- }
- /*! Used as a heading for a list of static Java class functions with
- * package scope.
- */
- virtual QCString trStaticPackageMembers()
- {
- return "Daftar Fungsi Statis Paket";
- }
- /*! Used as a heading for a list of Java class variables with package
- * scope.
- */
- virtual QCString trPackageAttribs()
- {
- return "Daftar Atribut Paket";
- }
- /*! Used as a heading for a list of static Java class variables with
- * package scope.
- */
- virtual QCString trStaticPackageAttribs()
- {
- return "Daftar Atribut Statis Paket";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.3.1
-//////////////////////////////////////////////////////////////////////////
-
- /*! Used in the quick index of a class/file/namespace member list page
- * to link to the unfiltered list of all members.
- */
- virtual QCString trAll()
- {
- return "Semua";
- }
- /*! Put in front of the call graph for a function. */
- virtual QCString trCallGraph()
- {
- return "Berikut ini bagan fungsi-terpanggil untuk fungsi ini:";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.3.3
-//////////////////////////////////////////////////////////////////////////
-
- /*! When the search engine is enabled this text is put in the header
- * of each page before the field where one can enter the text to search
- * for.
- */
- virtual QCString trSearchForIndex()
- {
- return "Cari";
- }
- /*! This string is used as the title for the page listing the search
- * results.
- */
- virtual QCString trSearchResultsTitle()
- {
- return "Hasil Pencarian";
- }
- /*! This string is put just before listing the search results. The
- * text can be different depending on the number of documents found.
- * Inside the text you can put the special marker $num to insert
- * the number representing the actual number of search results.
- * The @a numDocuments parameter can be either 0, 1 or 2, where the
- * value 2 represents 2 or more matches. HTML markup is allowed inside
- * the returned string.
- */
- virtual QCString trSearchResults(int numDocuments)
- {
- if (numDocuments==0)
- {
- return "Maaf, tidak ada dokumen yang cocok.";
- }
- else if (numDocuments==1)
- {
- return "Ditemukan <b>1</b> dokumen yang cocok.";
- }
- else
- {
- return "Ditemukan <b>$num</b> documents yang cocok. "
- "Menampilkan hasil terbaik lebih awal.";
- }
- }
- /*! This string is put before the list of matched words, for each search
- * result. What follows is the list of words that matched the query.
- */
- virtual QCString trSearchMatches()
- {
- return "Kecocokan:";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.3.8
-//////////////////////////////////////////////////////////////////////////
-
- /*! This is used in HTML as the title of page with source code for file filename
- */
- virtual QCString trSourceFile(QCString& filename)
- {
- return "Kode Sumber:" + filename;
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.3.9
-//////////////////////////////////////////////////////////////////////////
-
- /*! This is used as the name of the chapter containing the directory
- * hierarchy.
- */
- virtual QCString trDirIndex()
- { return "Hierarki Direktori"; }
-
- /*! This is used as the name of the chapter containing the documentation
- * of the directories.
- */
- virtual QCString trDirDocumentation()
- { return "Dokumentasi Direktori"; }
-
- /*! This is used as the title of the directory index and also in the
- * Quick links of an HTML page, to link to the directory hierarchy.
- */
- virtual QCString trDirectories()
- { return "Daftar Direktori"; }
-
- /*! This returns a sentences that introduces the directory hierarchy.
- * and the fact that it is sorted alphabetically per level
- */
- virtual QCString trDirDescription()
- { return "Struktur direktori ini diurutkan hampir berdasarkan abjad:";
- }
-
- /*! This returns the title of a directory page. The name of the
- * directory is passed via \a dirName.
- */
- virtual QCString trDirReference(const char *dirName)
- { QCString result="Referensi Direktori "; result+=dirName; return result; }
-
- /*! This returns the word directory with or without starting capital
- * (\a first_capital) and in sigular or plural form (\a singular).
- */
- virtual QCString trDir(bool first_capital, bool)
- {
- QCString result((first_capital ? "Direktori" : "direktori"));
- //if (singular) result+="y"; else result+="ies";
- return result;
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.4.1
-//////////////////////////////////////////////////////////////////////////
-
- /*! This text is added to the documentation when the \\overload command
- * is used for a overloaded function.
- */
- virtual QCString trOverloadText()
- {
- return "Ini adalah fungsi anggota yang di-overload"
- " untuk kemudahan. Perbedaannya dengan fungsi di atas"
- " hanya pada parameter-parameter yang diterima.";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.4.6
-//////////////////////////////////////////////////////////////////////////
-
- /*! This is used to introduce a caller (or called-by) graph */
- virtual QCString trCallerGraph()
- {
- return "Berikut ini bagan fungsi-pemanggil untuk fungsi ini:";
- }
-
- /*! This is used in the documentation of a file/namespace before the list
- * of documentation blocks for enumeration values
- */
- virtual QCString trEnumerationValueDocumentation()
- { return "Dokumentasi Nilai Enumerasi"; }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.5.4 (mainly for Fortran)
-//////////////////////////////////////////////////////////////////////////
-
- /*! header that is put before the list of member subprograms (Fortran). */
- virtual QCString trMemberFunctionDocumentationFortran()
- { return "Dokumentasi Fungsi/Subrutin Anggota"; }
-
- /*! This is put above each page as a link to the list of annotated data types (Fortran). */
- virtual QCString trCompoundListFortran()
- { return "Daftar Tipe Data"; }
-
- /*! This is put above each page as a link to all members of compounds (Fortran). */
- virtual QCString trCompoundMembersFortran()
- { return "Variabel Data"; }
-
- /*! This is an introduction to the annotated compound list (Fortran). */
- virtual QCString trCompoundListDescriptionFortran()
- { return "Berikut daftar tipe data, dengan penjelasan singkat:"; }
-
- /*! This is an introduction to the page with all data types (Fortran). */
- virtual QCString trCompoundMembersDescriptionFortran(bool extractAll)
- {
- QCString result="Berikut daftar semua anggota tipe data ";
- if (!extractAll)
- {
- result+="terdokumentasi ";
- }
- result+=" dengan tautan ke ";
- if (!extractAll)
- {
- result+="dokumentasi struktur data untuk setiap anggota:";
- }
- else
- {
- result+="tipe data yang memuatnya:";
- }
- return result;
- }
-
- /*! This is used in LaTeX as the title of the chapter with the
- * annotated compound index (Fortran).
- */
- virtual QCString trCompoundIndexFortran()
- { return "Indeks Tipe Data"; }
-
- /*! This is used in LaTeX as the title of the chapter containing
- * the documentation of all data types (Fortran).
- */
- virtual QCString trTypeDocumentation()
- { return "Dokumentasi Tipe Data"; }
-
- /*! This is used in the documentation of a file as a header before the
- * list of (global) subprograms (Fortran).
- */
- virtual QCString trSubprograms()
- { return "Fungsi/Subrutin"; }
-
- /*! This is used in the documentation of a file/namespace before the list
- * of documentation blocks for subprograms (Fortran)
- */
- virtual QCString trSubprogramDocumentation()
- { return "Dokumentasi Fungsi/Subrutin"; }
-
- /*! This is used in the documentation of a file/namespace/group before
- * the list of links to documented compounds (Fortran)
- */
- virtual QCString trDataTypes()
- { return "Tipe Data"; }
-
- /*! used as the title of page containing all the index of all modules (Fortran). */
- virtual QCString trModulesList()
- { return "Modules List"; }
-
- /*! used as an introduction to the modules list (Fortran) */
- virtual QCString trModulesListDescription(bool extractAll)
- {
- QCString result="Berikut daftar semua modul";
- if (!extractAll) result+=" terdokumentasi";
- result+=", dengan penjelasan singkat:";
- return result;
- }
-
- /*! used as the title of the HTML page of a module/type (Fortran) */
- virtual QCString trCompoundReferenceFortran(const char *clName,
- ClassDef::CompoundType compType,
- bool isTemplate)
- {
- QCString result="Referensi ";
- if (isTemplate) result+="Template ";
- switch(compType)
- {
- case ClassDef::Class: result+="Modul "; break;
- case ClassDef::Struct: result+="Tipe "; break;
- case ClassDef::Union: result+="Union "; break;
- case ClassDef::Interface: result+="Antarmuka "; break;
- case ClassDef::Protocol: result+="Protokol "; break;
- case ClassDef::Category: result+="Kategori "; break;
- case ClassDef::Exception: result+="Eksepsi "; break;
- }
- result+=(QCString)clName;
- return result;
- }
- /*! used as the title of the HTML page of a module (Fortran) */
- virtual QCString trModuleReference(const char *namespaceName)
- {
- QCString result="Referensi Modul ";
- result+=namespaceName;
- return result;
- }
-
- /*! This is put above each page as a link to all members of modules. (Fortran) */
- virtual QCString trModulesMembers()
- { return "Anggota Modul"; }
-
- /*! This is an introduction to the page with all modules members (Fortran) */
- virtual QCString trModulesMemberDescription(bool extractAll)
- {
- QCString result="Berikut daftar semua anggota modul ";
- if (!extractAll) result+="terdokumentasi ";
- result+="dengan tautan ke ";
- if (extractAll)
- {
- result+="dokumentasi modul untuk setiap anggota:";
- }
- else
- {
- result+="modul yang memuatnya:";
- }
- return result;
- }
-
- /*! This is used in LaTeX as the title of the chapter with the
- * index of all modules (Fortran).
- */
- virtual QCString trModulesIndex()
- { return "Indeks Modul"; }
-
- /*! This is used for translation of the word that will possibly
- * be followed by a single name or by a list of names
- * of the category.
- */
- virtual QCString trModule(bool first_capital, bool singular)
- {
- QCString result((first_capital ? "Modul" : "modul"));
- if (!singular) result+="-modul";
- return result;
- }
- /*! This is put at the bottom of a module documentation page and is
- * followed by a list of files that were used to generate the page.
- */
- virtual QCString trGeneratedFromFilesFortran(ClassDef::CompoundType compType,
- bool single)
- { // here s is one of " Module", " Struct" or " Union"
- // single is true implies a single file
- QCString result=(QCString)"Dokumentasi untuk ";
- switch(compType)
- {
- case ClassDef::Class: result+="module"; break;
- case ClassDef::Struct: result+="type"; break;
- case ClassDef::Union: result+="union"; break;
- case ClassDef::Interface: result+="interface"; break;
- case ClassDef::Protocol: result+="protocol"; break;
- case ClassDef::Category: result+="category"; break;
- case ClassDef::Exception: result+="exception"; break;
- }
- result+=" ini dibangkitkan dari file";
- if (!single) result+="-file ";
- result+="berikut:";
- return result;
- }
- /*! This is used for translation of the word that will possibly
- * be followed by a single name or by a list of names
- * of the category.
- */
- virtual QCString trType(bool first_capital, bool singular)
- {
- QCString result((first_capital ? "Tipe" : "tipe"));
- if (!singular) result+="-tipe";
- return result;
- }
- /*! This is used for translation of the word that will possibly
- * be followed by a single name or by a list of names
- * of the category.
- */
- virtual QCString trSubprogram(bool first_capital, bool singular)
- {
- QCString result((first_capital ? "Subprogram" : "subprogram"));
- if (!singular) result+="-subprogram";
- return result;
- }
-
- /*! C# Type Constraint list */
- virtual QCString trTypeConstraints()
- {
- return "Batasan Tipe";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.6.0 (mainly for the new search engine)
-//////////////////////////////////////////////////////////////////////////
-
- /*! directory relation for \a name */
- virtual QCString trDirRelation(const char *name)
- {
- return "Relasi "+QCString(name);
- }
-
- /*! Loading message shown when loading search results */
- virtual QCString trLoading()
- {
- return "Memuat...";
- }
-
- /*! Label used for search results in the global namespace */
- virtual QCString trGlobalNamespace()
- {
- return "Namespace Global";
- }
-
- /*! Message shown while searching */
- virtual QCString trSearching()
- {
- return "Mencari...";
- }
-
- /*! Text shown when no search results are found */
- virtual QCString trNoMatches()
- {
- return "Tidak Ditemukan";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.6.3 (missing items for the directory pages)
-//////////////////////////////////////////////////////////////////////////
-
- /*! introduction text for the directory dependency graph */
- virtual QCString trDirDependency(const char *name)
- {
- return (QCString)"Bagan dependensi direktori untuk "+name;
- }
-
- /*! when clicking a directory dependency label, a page with a
- * table is shown. The heading for the first column mentions the
- * source file that has a relation to another file.
- */
- virtual QCString trFileIn(const char *name)
- {
- return (QCString)"File dimuat dalam "+name;
- }
-
- /*! when clicking a directory dependency label, a page with a
- * table is shown. The heading for the second column mentions the
- * destination file that is included.
- */
- virtual QCString trIncludesFileIn(const char *name)
- {
- return (QCString)"Memuat file dalam "+name;
- }
-
- /** Compiles a date string.
- * @param year Year in 4 digits
- * @param month Month of the year: 1=January
- * @param day Day of the Month: 1..31
- * @param dayOfWeek Day of the week: 1=Monday..7=Sunday
- * @param hour Hour of the day: 0..23
- * @param minutes Minutes in the hour: 0..59
- * @param seconds Seconds within the minute: 0..59
- * @param includeTime Include time in the result string?
- */
- virtual QCString trDateTime(int year,int month,int day,int dayOfWeek,
- int hour,int minutes,int seconds,
- bool includeTime)
- {
- static const char *days[] = { "Senin","Selasa","Rabu","Kamis","Jumat","Sabtu","Minggu" };
- static const char *months[] = { "Januari","Februari","Maret","April","Mei","Juni","Juli","Agustus","September","Oktober","November","Desember" };
- QCString sdate;
- sdate.sprintf("%s %d %s %d",days[dayOfWeek-1],day,months[month-1],year);
- if (includeTime)
- {
- QCString stime;
- stime.sprintf(" %.2d:%.2d:%.2d",hour,minutes,seconds);
- sdate+=stime;
- }
- return sdate;
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.7.5
-//////////////////////////////////////////////////////////////////////////
-
- /*! Header for the page with bibliographic citations */
- virtual QCString trCiteReferences()
- { return "Daftar Pustaka"; }
-
- /*! Text for copyright paragraph */
- virtual QCString trCopyright()
- { return "Hak Cipta"; }
-
- /*! Header for the graph showing the directory dependencies */
- virtual QCString trDirDepGraph(const char *name)
- { return QCString("Bagan dependensi directori untuk ")+name+":"; }
-
-};
-
-#endif
diff --git a/trunk/src/translator_it.h b/trunk/src/translator_it.h
deleted file mode 100644
index 037d408..0000000
--- a/trunk/src/translator_it.h
+++ /dev/null
@@ -1,1853 +0,0 @@
-/******************************************************************************
- *
- *
- *
- * Copyright (C) 1997-2012 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.
- *
- */
-
-/******************************************************************************
- *
- * Revision history
- *
- * 2010/08: updated translation of new items used since version 1.6.0 and 1.6.3
- * completely reviewed the translation in the trLegendDocs() function
- * corrected some typos all around
- * reviewed some translations all around
- * 2007/11: updated translation of new items used since version 1.5.4
- * 2007/10: Included corrections provided by Arialdo Martini <arialdomartini@bebox.it>, updated some strings marked with 'translate me' comment
- * 2006/10: made class to derive directly from Translator class (reported in Petr Prikryl October 9 translator report)
- * 2006/06: updated translation of new items used since version 1.4.6
- * 2006/05: translated new items used since version 1.4.6
- * corrected typo in trPackageMembers method
- * 2005/03: translated new items used since version 1.4.1
- * removed unused methods listed in Petr Prikryl February 28 translator report
- * 2004/09: translated new items used since version 1.3.9
- * 2004/06: translated new items used since version 1.3.8
- * 2003/11: translated new items used since version 1.3.3
- * 2003/06: translated new items used since version 1.3.1
- * 2003/04: translated new items used since version 1.3
- * 2002/11: translated new items used since version 1.2.18
- * 2002/08: translated new items used since version 1.2.17
- * 2002/07: translated new items used since version 1.2.16
- * 2002/06: modified trRelatedPagesDescription() method
- * corrected typo in trInclByDepGraph() method
- * 2002/01: translated new items used since version 1.2.13
- * updated e-mail address
- * 2001/11: corrected the translation fixing the issues reported by the translator.pl script
- * translated new items used since version 1.2.11
- * 2001/08: corrected the translation fixing the issues reported by the translator.pl script
- * translated new items used since version 1.2.7
- * 2001/05: adopted new translation mechanism (trough adapters),
- * translated new items used since version 1.2.5 and 1.2.6,
- * revised those function returning strings in OPTIMIZE_OTPUT_FOR_C case,
- * corrections regarding the plurals of some english terms mantained in the translation,
- * changed some terms to better suit the sense
- * 2001/02: translated new items used since version 1.2.4
- * 2000/11: modified slightly the translation in trLegendDocs() function,
- * translated new items used since version 1.2.1 and 1.2.2
- * 2000/08: translated new items used since version 1.1.3, 1.1.4, 1.1.5 and 1.2.0
- * 2000/03: translated new items used since version 1.0 and 1.1.0
- * 1999/19: entirely rewritten the translation to correct small variations due
- * to feature additions and to conform to the layout of the latest
- * commented translator.h for the english language
- * 1999/09: corrected some small typos in the "new since 0.49-990425" section
- * added the "new since 0.49-990728" section
- * 1999/06: revised and completed by Alessandro Falappa (current mantainer)
- * 1999/??: initial italian translation by Ahmed Aldo Faisal
- */
-
-/******************************************************************************
- *
- * Note sui criteri adottati per la traduzione
- *
- * Nella traduzione non si sono tradotti alcuni termini inglesi ormai entrati
- * a far parte del "gergo" informatico (per es. file o namespace)
- *
- * Il plurale dei termini inglesi non tradotti è stato reso con il singolare
- * della parola inglese secondo una convenzione spesso ritrovata nella documentazione
- * tecnica (ad es. "lista dei file" e non "lista dei files")
- *
- * Se avete suggerimenti sulla traduzione di alcuni termini o volete segnalare
- * eventuali sviste potete scrivermi all'indirizzo: alessandro@falappa.net
- */
-
-#ifndef TRANSLATOR_IT_H
-#define TRANSLATOR_IT_H
-
-class TranslatorItalian : public TranslatorAdapter_1_7_5
-{
- public:
-
- // --- Language control methods -------------------
-
- /*! Used for identification of the language. The identification
- * should not be translated. It should be replaced by the name
- * of the language in English using lower-case characters only
- * (e.g. "czech", "japanese", "russian", etc.). It should be equal to
- * the identification used in language.cpp.
- */
- virtual QCString idLanguage()
- { return "italian"; }
-
- /*! Used to get the LaTeX command(s) for the language support. This method
- * was designed for languages which do wish to use a babel package.
- */
- virtual QCString latexLanguageSupportCommand()
- {
- return "\\usepackage[italian]{babel}\n";
- }
-
- /*! return the language charset. This will be used for the HTML output */
- virtual QCString idLanguageCharset()
- {
- return "UTF-8";
- }
-
- // --- Language translation methods -------------------
-
- /*! used in the compound documentation before a list of related functions. */
- QCString trRelatedFunctions()
- { return "Funzioni collegate"; }
-
- /*! subscript for the related functions. */
- QCString trRelatedSubscript()
- { return "(Si noti che queste non sono funzioni membro.)"; }
-
- /*! header that is put before the detailed description of files, classes and namespaces. */
- QCString trDetailedDescription()
- { return "Descrizione dettagliata"; }
-
- /*! header that is put before the list of typedefs. */
- QCString trMemberTypedefDocumentation()
- { return "Documentazione delle ridefinizioni dei tipi (typedef)"; }
-
- /*! header that is put before the list of enumerations. */
- QCString trMemberEnumerationDocumentation()
- { return "Documentazione dei tipi enumerati (enum)"; }
-
- /*! header that is put before the list of member functions. */
- QCString trMemberFunctionDocumentation()
- { return "Documentazione delle funzioni membro"; }
-
- /*! header that is put before the list of member attributes. */
- QCString trMemberDataDocumentation()
- {
- if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
- {
- return "Documentazione dei campi";
- }
- else
- {
- return "Documentazione dei membri dato";
- }
- }
-
- /*! this is the text of a link put after brief descriptions. */
- QCString trMore()
- { return "Continua..."; }
-
- /*! put in the class documentation */
- QCString trListOfAllMembers()
- { return "Elenco di tutti i membri."; }
-
- /*! used as the title of the "list of all members" page of a class */
- QCString trMemberList()
- { return "Elenco dei membri"; }
-
- /*! this is the first part of a sentence that is followed by a class name */
- QCString trThisIsTheListOfAllMembers()
- { return "Questo è l'elenco completo di tutti i membri di "; }
-
- /*! this is the remainder of the sentence after the class name */
- QCString trIncludingInheritedMembers()
- { return ", inclusi tutti i membri ereditati."; }
-
- /*! this is put at the author sections at the bottom of man pages.
- * parameter s is name of the project name.
- */
- QCString trGeneratedAutomatically(const char *s)
- {
- QCString result="Generato automaticamente da Doxygen";
- if (s) result+=(QCString)" per "+s;
- result+=" a partire dal codice sorgente.";
- return result;
- }
-
- /*! put after an enum name in the list of all members */
- QCString trEnumName()
- { return "nome di tipo enumerato"; }
-
- /*! put after an enum value in the list of all members */
- QCString trEnumValue()
- { return "valore di tipo enumerato"; }
-
- /*! put after an undocumented member in the list of all members */
- QCString trDefinedIn()
- { return "definito in"; }
-
- // quick reference sections
-
- /*! This is put above each page as a link to the list of all groups of
- * compounds or files (see the \\group command).
- */
- QCString trModules()
- { return "Moduli"; }
-
- /*! This is put above each page as a link to the class hierarchy */
- QCString trClassHierarchy()
- { return "Gerarchia delle classi"; }
-
- /*! This is put above each page as a link to the list of annotated classes */
- QCString trCompoundList()
- {
- if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
- {
- return "Strutture dati";
- }
- else
- {
- return "Elenco dei tipi composti";
- }
- }
-
- /*! This is put above each page as a link to the list of documented files */
- QCString trFileList()
- { return "Elenco dei file"; }
-
- /*! This is put above each page as a link to all members of compounds. */
- QCString trCompoundMembers()
- {
- if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
- {
- return "Campi dei dati";
- }
- else
- {
- return "Membri dei composti";
- }
- }
-
- /*! This is put above each page as a link to all members of files. */
- QCString trFileMembers()
- {
- if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
- {
- return "Elementi globali";
- }
- else
- {
- return "Elementi dei file";
- }
- }
-
- /*! This is put above each page as a link to all related pages. */
- QCString trRelatedPages()
- { return "Pagine collegate"; }
-
- /*! This is put above each page as a link to all examples. */
- QCString trExamples()
- { return "Esempi"; }
-
- /*! This is put above each page as a link to the search engine. */
- QCString trSearch()
- { return "Cerca"; }
-
- /*! This is an introduction to the class hierarchy. */
- QCString trClassHierarchyDescription()
- {
- return "Questo elenco di ereditarietà è ordinato "
- "approssimativamente, ma non completamente, in ordine alfabetico:";
- }
-
- /*! This is an introduction to the list with all files. */
- QCString trFileListDescription(bool extractAll)
- {
- QCString result="Questo è un elenco ";
- if (!extractAll) result+="dei file documentati ";
- else result+="di tutti i file ";
- result+="con una loro breve descrizione:";
- return result;
- }
-
- /*! This is an introduction to the annotated compound list. */
- QCString trCompoundListDescription()
- {
-
- if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
- {
- return "Queste sono le strutture dati con una loro breve descrizione:";
- }
- else
- {
- return "Queste sono le classi, le struct, le union e le interfacce con una loro breve descrizione:";
- }
- }
-
- /*! This is an introduction to the page with all class members. */
- QCString trCompoundMembersDescription(bool extractAll)
- {
- QCString result="Questo è un elenco ";
- if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
- {
- if (!extractAll) result+="delle struct e delle union documentate ";
- else result+="di tutte le struct e le union ";
- }
- else
- {
- if (!extractAll) result+="dei membri documentati ";
- else result+="di tutti i membri ";
- }
- result+="con collegamenti alla documentazione ";
- if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
- {
- if (extractAll) result+="della struct/union per ciascun campo:";
- else result+="delle struct/union a cui appartengono:";
- }
- else
- {
- if (extractAll) result+="della classe a cui appartengono:";
- else result+="delle classi a cui appartengono:";
- }
- return result;
- }
-
- /*! This is an introduction to the page with all file members. */
- QCString trFileMembersDescription(bool extractAll)
- {
- QCString result="Questo è un elenco ";
- if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
- {
- if (!extractAll) result+="delle funzioni, delle variabili, delle define, dei tipi enumerati e delle ridefinizioni dei tipi (typedef) documentate ";
- else result+="di tutte le funzioni, variabili, define, tipi enumerati, e ridefinizioni dei tipi (typedef) ";
- }
- else
- {
- if (!extractAll) result+="degli elementi documentati dei file ";
- else result+="di tutti gli elementi dei file ";
- }
- result+="con collegamenti alla documentazione";
- if (extractAll) result+=" del file a cui appartengono:";
- else result+=":";
- return result;
- }
-
- /*! This is an introduction to the page with the list of all examples */
- QCString trExamplesDescription()
- { return "Questo è l'elenco di tutti gli esempi:"; }
-
- /*! This is an introduction to the page with the list of related pages */
- QCString trRelatedPagesDescription()
- { return "Questo è l'elenco di tutte le pagine di documentazione collegate:"; }
-
- /*! This is an introduction to the page with the list of class/file groups */
- QCString trModulesDescription()
- { return "Questo è l'elenco di tutti i moduli:"; }
-
- // index titles (the project name is prepended for these)
-
- /*! This is used in HTML as the title of index.html. */
- QCString trDocumentation()
- { return "Documentazione"; }
-
- /*! This is used in LaTeX as the title of the chapter with the
- * index of all groups.
- */
- QCString trModuleIndex()
- { return "Indice dei moduli"; }
-
- /*! This is used in LaTeX as the title of the chapter with the
- * class hierarchy.
- */
- QCString trHierarchicalIndex()
- { return "Indice della gerarchia"; }
-
- /*! This is used in LaTeX as the title of the chapter with the
- * annotated compound index.
- */
- QCString trCompoundIndex()
- {
- if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
- {
- return "Indice delle strutture dati";
- }
- else
- {
- return "Indice dei tipi composti";
- }
- }
-
- /*! This is used in LaTeX as the title of the chapter with the
- * list of all files.
- */
- QCString trFileIndex()
- { return "Indice dei file"; }
-
- /*! This is used in LaTeX as the title of the chapter containing
- * the documentation of all groups.
- */
- QCString trModuleDocumentation()
- { return "Documentazione dei moduli"; }
-
- /*! This is used in LaTeX as the title of the chapter containing
- * the documentation of all classes, structs and unions.
- */
- QCString trClassDocumentation()
- { return "Documentazione delle classi"; }
-
- /*! This is used in LaTeX as the title of the chapter containing
- * the documentation of all files.
- */
- QCString trFileDocumentation()
- { return "Documentazione dei file"; }
-
- /*! This is used in LaTeX as the title of the chapter containing
- * the documentation of all examples.
- */
- QCString trExampleDocumentation()
- { return "Documentazione degli esempi"; }
-
- /*! This is used in LaTeX as the title of the chapter containing
- * the documentation of all related pages.
- */
- QCString trPageDocumentation()
- { return "Documentazione delle pagine tra loro collegate "; }
-
- /*! This is used in LaTeX as the title of the document */
- QCString trReferenceManual()
- { return "Manuale di riferimento"; }
-
- /*! This is used in the documentation of a file as a header before the
- * list of defines
- */
- QCString trDefines()
- { return "Definizioni"; }
-
- /*! This is used in the documentation of a file as a header before the
- * list of function prototypes
- */
- QCString trFuncProtos()
- { return "Prototipi delle funzioni"; }
-
- /*! This is used in the documentation of a file as a header before the
- * list of typedefs
- */
- QCString trTypedefs()
- { return "Ridefinizioni di tipo (typedef)"; }
-
- /*! This is used in the documentation of a file as a header before the
- * list of enumerations
- */
- QCString trEnumerations()
- { return "Tipi enumerati (enum)"; }
-
- /*! This is used in the documentation of a file as a header before the
- * list of (global) functions
- */
- QCString trFunctions()
- { return "Funzioni"; }
-
- /*! This is used in the documentation of a file as a header before the
- * list of (global) variables
- */
- QCString trVariables()
- { return "Variabili"; }
-
- /*! This is used in the documentation of a file as a header before the
- * list of (global) variables
- */
- QCString trEnumerationValues()
- { return "Valori del tipo enumerato"; }
-
- /*! This is used in the documentation of a file before the list of
- * documentation blocks for defines
- */
- QCString trDefineDocumentation()
- { return "Documentazione delle definizioni"; }
-
- /*! This is used in the documentation of a file/namespace before the list
- * of documentation blocks for function prototypes
- */
- QCString trFunctionPrototypeDocumentation()
- { return "Documentazione dei prototipi delle funzioni"; }
-
- /*! This is used in the documentation of a file/namespace before the list
- * of documentation blocks for typedefs
- */
- QCString trTypedefDocumentation()
- { return "Documentazione delle ridefinizioni di tipo (typedef)"; }
-
- /*! This is used in the documentation of a file/namespace before the list
- * of documentation blocks for enumeration types
- */
- QCString trEnumerationTypeDocumentation()
- { return "Documentazione dei tipi enumerati"; }
-
- /*! This is used in the documentation of a file/namespace before the list
- * of documentation blocks for functions
- */
- QCString trFunctionDocumentation()
- { return "Documentazione delle funzioni"; }
-
- /*! This is used in the documentation of a file/namespace before the list
- * of documentation blocks for variables
- */
- QCString trVariableDocumentation()
- { return "Documentazione delle variabili"; }
-
- /*! This is used in the documentation of a file/namespace/group before
- * the list of links to documented compounds
- */
- QCString trCompounds()
- {
- if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
- {
- return "Strutture dati";
- }
- else
- {
- return "Composti";
- }
- }
-
- /*! This is used in the standard footer of each page and indicates when
- * the page was generated
- */
- QCString trGeneratedAt(const char *date,const char *projName)
- {
- QCString result=(QCString)"Generato "+date;
- if (projName) result+=(QCString)" per "+projName;
- result+=(QCString)" da";
- return result;
- }
- /*! This is part of the sentence used in the standard footer of each page.
- */
- QCString trWrittenBy()
- {
- return "scritto da";
- }
-
- /*! this text is put before a class diagram */
- QCString trClassDiagram(const char *clName)
- {
- return (QCString)"Diagramma delle classi per "+clName;
- }
-
- /*! this text is generated when the \\internal command is used. */
- QCString trForInternalUseOnly()
- { return "Solo per uso interno."; }
-
- /*! this text is generated when the \\warning command is used. */
- QCString trWarning()
- { return "Avvertimento"; }
-
- /*! this text is generated when the \\version command is used. */
- QCString trVersion()
- { return "Versione"; }
-
- /*! this text is generated when the \\date command is used. */
- QCString trDate()
- { return "Data"; }
-
- /*! this text is generated when the \\return command is used. */
- QCString trReturns()
- { return "Restituisce"; }
-
- /*! this text is generated when the \\sa command is used. */
- QCString trSeeAlso()
- { return "Si veda anche"; }
-
- /*! this text is generated when the \\param command is used. */
- QCString trParameters()
- { return "Parametri"; }
-
- /*! this text is generated when the \\exception command is used. */
- QCString trExceptions()
- { return "Eccezioni"; }
-
- /*! this text is used in the title page of a LaTeX document. */
- QCString trGeneratedBy()
- { return "Generato da"; }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 0.49-990307
-//////////////////////////////////////////////////////////////////////////
-
- /*! used as the title of page containing all the index of all namespaces. */
- QCString trNamespaceList()
- { return "Lista dei namespace"; }
-
- /*! used as an introduction to the namespace list */
- QCString trNamespaceListDescription(bool extractAll)
- {
- QCString result="Questa è l'elenco ";
- if (!extractAll) result+="dei namespace documentati, ";
- else result+="di tutti i namespace ";
- result+="con una loro breve descrizione:";
- return result;
- }
-
- /*! used in the class documentation as a header before the list of all
- * friends of a class
- */
- QCString trFriends()
- { return "Friend"; }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 0.49-990405
-//////////////////////////////////////////////////////////////////////////
-
- /*! used in the class documentation as a header before the list of all
- * related classes
- */
- QCString trRelatedFunctionDocumentation()
- { return "Documentazione dei friend e delle funzioni collegate"; }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 0.49-990425
-//////////////////////////////////////////////////////////////////////////
-
- /*! used as the title of the HTML page of a class/struct/union */
- QCString trCompoundReference(const char *clName,
- ClassDef::CompoundType compType,
- bool isTemplate)
- {
- QCString result="Riferimenti per ";
- if (isTemplate) result="Template per ";
- switch(compType)
- {
- case ClassDef::Class: result+="la classe "; break;
- case ClassDef::Struct: result+="la struct "; break;
- case ClassDef::Union: result+="la union "; break;
- case ClassDef::Interface: result+="l'interfaccia "; break;
- case ClassDef::Protocol: result+="il protocollo "; break;
- case ClassDef::Category: result+="la categoria "; break;
- case ClassDef::Exception: result+="l'eccezione "; break;
- }
- result+=(QCString)clName;
- return result;
-
- }
-
- /*! used as the title of the HTML page of a file */
- QCString trFileReference(const char *fileName)
- {
- QCString result="Riferimenti per il file ";
- result+=(QCString)fileName;
- return result;
- }
-
- /*! used as the title of the HTML page of a namespace */
- QCString trNamespaceReference(const char *namespaceName)
- {
- QCString result="Riferimenti per il namespace ";
- result+=(QCString)namespaceName;
- return result;
- }
-
- /* these are for the member sections of a class, struct or union */
- QCString trPublicMembers()
- { return "Membri pubblici"; }
- QCString trPublicSlots()
- { return "Slot pubblici"; }
- QCString trSignals()
- { return "Signal"; }
- QCString trStaticPublicMembers()
- { return "Membri pubblici statici"; }
- QCString trProtectedMembers()
- { return "Membri protetti"; }
- QCString trProtectedSlots()
- { return "Slot protetti"; }
- QCString trStaticProtectedMembers()
- { return "Membri protetti statici"; }
- QCString trPrivateMembers()
- { return "Membri privati"; }
- QCString trPrivateSlots()
- { return "Slot privati"; }
- QCString trStaticPrivateMembers()
- { return "Membri privati statici"; }
-
- /*! this function is used to produce a comma-separated list of items.
- * use generateMarker(i) to indicate where item i should be put.
- */
- QCString trWriteList(int numEntries)
- {
- QCString result;
- int i;
- // the inherits list contain `numEntries' classes
- for (i=0;i<numEntries;i++)
- {
- // use generateMarker to generate placeholders for the class links!
- result+=generateMarker(i); // generate marker for entry i in the list
- // (order is left to right)
-
- if (i!=numEntries-1) // not the last entry, so we need a separator
- {
- if (i<numEntries-2) // not the fore last entry
- result+=", ";
- else // the fore last entry
- result+=", e ";
- }
- }
- return result;
- }
-
- /*! used in class documentation to produce a list of base classes,
- * if class diagrams are disabled.
- */
- QCString trInheritsList(int numEntries)
- {
- return "Eredita da "+trWriteList(numEntries)+".";
- }
-
- /*! used in class documentation to produce a list of super classes,
- * if class diagrams are disabled.
- */
- QCString trInheritedByList(int numEntries)
- {
- return "Base per "+trWriteList(numEntries)+".";
- }
-
- /*! used in member documentation blocks to produce a list of
- * members that are hidden by this one.
- */
- QCString trReimplementedFromList(int numEntries)
- {
- return "Reimplementa "+trWriteList(numEntries)+".";
- }
-
- /*! used in member documentation blocks to produce a list of
- * all member that overwrite the implementation of this member.
- */
- QCString trReimplementedInList(int numEntries)
- {
- return "Reimplementata in "+trWriteList(numEntries)+".";
- }
-
- /*! This is put above each page as a link to all members of namespaces. */
- QCString trNamespaceMembers()
- { return "Membri dei namespace"; }
-
- /*! This is an introduction to the page with all namespace members */
- QCString trNamespaceMemberDescription(bool extractAll)
- {
- QCString result="Questa è la lista ";
- if (!extractAll) result+="dei membri documentati del namespace, ";
- else result+="di tutti i membri del namespace ";
- result+="con collegamenti ";
- if (extractAll)
- result+="alla documentazione del namespace per ciascun membro:";
- else
- result+="ai namespace a cui appartengono:";
- return result;
- }
- /*! This is used in LaTeX as the title of the chapter with the
- * index of all namespaces.
- */
- QCString trNamespaceIndex()
- { return "Indice dei namespace"; }
-
- /*! This is used in LaTeX as the title of the chapter containing
- * the documentation of all namespaces.
- */
- QCString trNamespaceDocumentation()
- { return "Documentazione dei namespace"; }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 0.49-990522
-//////////////////////////////////////////////////////////////////////////
-
- /*! This is used in the documentation before the list of all
- * namespaces in a file.
- */
- QCString trNamespaces()
- { return "Namespace"; }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 0.49-990728
-//////////////////////////////////////////////////////////////////////////
-
- /*! This is put at the bottom of a class documentation page and is
- * followed by a list of files that were used to generate the page.
- */
- QCString trGeneratedFromFiles(ClassDef::CompoundType compType,
- bool single)
- { // here s is one of " Class", " Struct" or " Union"
- // single is true implies a single file
- QCString result=(QCString)"La documentazione per quest";
- switch(compType)
- {
- case ClassDef::Class: result+="a classe"; break;
- case ClassDef::Struct: result+="a struct"; break;
- case ClassDef::Union: result+="a union"; break;
- case ClassDef::Interface: result+="a interfaccia"; break;
- case ClassDef::Protocol: result+="o protocollo"; break;
- case ClassDef::Category: result+="a categoria"; break;
- case ClassDef::Exception: result+="a eccezione"; break;
- }
- result+=" è stata generata a partire ";
- if (single) result+="dal seguente file:";
- else result+="dai seguenti file:";
- return result;
- }
-
- /*! This is in the (quick) index as a link to the alphabetical compound
- * list.
- */
- QCString trAlphabeticalList()
- { return "Lista in ordine alfabetico";}
-
-//////////////////////////////////////////////////////////////////////////
-// new since 0.49-990901
-//////////////////////////////////////////////////////////////////////////
-
- /*! This is used as the heading text for the retval command. */
- QCString trReturnValues()
- { return "Valori di ritorno"; }
-
- /*! This is in the (quick) index as a link to the main page (index.html)
- */
- QCString trMainPage()
- { return "Pagina Principale"; }
-
- /*! This is used in references to page that are put in the LaTeX
- * documentation. It should be an abbreviation of the word page.
- */
- QCString trPageAbbreviation()
- { return "pag."; }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 0.49-991003
-//////////////////////////////////////////////////////////////////////////
-
- QCString trDefinedAtLineInSourceFile()
- {
- return "Definizione alla linea @0 del file @1.";
- }
- QCString trDefinedInSourceFile()
- {
- return "Definizione nel file @0.";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 0.49-991205
-//////////////////////////////////////////////////////////////////////////
-
- QCString trDeprecated()
- {
- return "Deprecato";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.0.0
-//////////////////////////////////////////////////////////////////////////
-
- /*! this text is put before a collaboration diagram */
- QCString trCollaborationDiagram(const char *clName)
- {
- return (QCString)"Diagramma di collaborazione per "+clName+":";
- }
- /*! this text is put before an include dependency graph */
- QCString trInclDepGraph(const char *fName)
- {
- return (QCString)"Grafo delle dipendenze di inclusione per "+fName+":";
- }
- /*! header that is put before the list of constructor/destructors. */
- QCString trConstructorDocumentation()
- {
- return "Documentazione dei costruttori e dei distruttori";
- }
- /*! Used in the file documentation to point to the corresponding sources. */
- QCString trGotoSourceCode()
- {
- return "Vai al codice sorgente di questo file.";
- }
- /*! Used in the file sources to point to the corresponding documentation. */
- QCString trGotoDocumentation()
- {
- return "Vai alla documentazione di questo file.";
- }
- /*! Text for the \\pre command */
- QCString trPrecondition()
- {
- return "Precondizione";
- }
- /*! Text for the \\post command */
- QCString trPostcondition()
- {
- return "Postcondizione";
- }
- /*! Text for the \\invariant command */
- QCString trInvariant()
- {
- return "Invariante";
- }
- /*! Text shown before a multi-line variable/enum initialization */
- QCString trInitialValue()
- {
- return "Valore iniziale:";
- }
- /*! Text used the source code in the file index */
- QCString trCode()
- {
- return "codice";
- }
- QCString trGraphicalHierarchy()
- {
- return "Grafico della gerarchia delle classi";
- }
- QCString trGotoGraphicalHierarchy()
- {
- return "Vai al grafico della gerarchia delle classi";
- }
- QCString trGotoTextualHierarchy()
- {
- return "Vai alla gerarchia delle classi (testuale)";
- }
- QCString trPageIndex()
- {
- return "Indice delle pagine";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.1.0
-//////////////////////////////////////////////////////////////////////////
-
- QCString trNote()
- {
- return "Nota";
- }
- QCString trPublicTypes()
- {
- return "Tipi pubblici";
- }
- QCString trPublicAttribs()
- {
- if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
- {
- return "Campi";
- }
- else
- {
- return "Attributi pubblici";
- }
- }
-
- QCString trStaticPublicAttribs()
- {
- return "Attributi pubblici statici";
- }
- QCString trProtectedTypes()
- {
- return "Tipi protetti";
- }
- QCString trProtectedAttribs()
- {
- return "Attributi protetti";
- }
- QCString trStaticProtectedAttribs()
- {
- return "Attributi protetti statici";
- }
- QCString trPrivateTypes()
- {
- return "Tipi privati";
- }
- QCString trPrivateAttribs()
- {
- return "Attributi privati";
- }
- QCString trStaticPrivateAttribs()
- {
- return "Attributi privati statici";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.1.3
-//////////////////////////////////////////////////////////////////////////
-
- /*! Used as a marker that is put before a todo item */
- virtual QCString trTodo()
- {
- return "Da fare";
- }
- /*! Used as the header of the todo list */
- virtual QCString trTodoList()
- {
- return "Elenco delle cose da fare";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.1.4
-//////////////////////////////////////////////////////////////////////////
-
- virtual QCString trReferencedBy()
- {
- return "Referenziato da";
- }
- virtual QCString trRemarks()
- {
- return "Osservazioni";
- }
- virtual QCString trAttention()
- {
- return "Attenzione";
- }
- virtual QCString trInclByDepGraph()
- {
- return "Questo grafo mostra quali altri file includono direttamente o indirettamente questo file:";
- }
- virtual QCString trSince()
- {
- return "A partire da";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.1.5
-//////////////////////////////////////////////////////////////////////////
-
- /*! title of the graph legend page */
- virtual QCString trLegendTitle()
- {
- return "Legenda del grafo";
- }
- /*! page explaining how the dot graph's should be interpreted */
- virtual QCString trLegendDocs()
- {
- return
- "Questa pagina spiega come interpretare i grafi generati da doxygen.<p>\n"
- "Si consideri l'esempio seguente:\n"
- "\\code\n"
- "/*! Classe invisibile per troncamento */\n"
- "class Invisible { };\n\n"
- "/*! Classe tronca, la relazione di ereditarietà è nascosta */\n"
- "class Truncated : public Invisible { };\n\n"
- "/* Classe non documentata con i commenti speciali di doxygen*/\n"
- "class Undocumented { };\n\n"
- "/*! Classe estesa mediante ereditarietà pubblica */\n"
- "class PublicBase : public Truncated { };\n\n"
- "/*! Classe templatizzata */\n"
- "template<class T> class Templ { };\n\n"
- "/*! Classe estesa mediante ereditarietà protetta*/\n"
- "class ProtectedBase { };\n\n"
- "/*! Classe estesa mediante ereditarietà privata*/\n"
- "class PrivateBase { };\n\n"
- "/*! Classe utilizzata dalla classe Inherited */\n"
- "class Used { };\n\n"
- "/*! Classe che eredita da varie classi*/\n"
- "class Inherited : public PublicBase,\n"
- " protected ProtectedBase,\n"
- " private PrivateBase,\n"
- " public Undocumented,\n"
- " public Templ<int>\n"
- "{\n"
- " private:\n"
- " Used *m_usedClass;\n"
- "};\n"
- "\\endcode\n"
- "Verrà prodotto il grafo seguente:"
- "<p><center><img src=\"graph_legend."+Config_getEnum("DOT_IMAGE_FORMAT")+"\"></center></p>\n"
- "<p>\n"
- "I riquadri nel grafo qui sopra hanno il seguente significato:\n"
- "</p>\n"
- "<ul>\n"
- "<li>Il riquadro grigio pieno rappresenta la struct o la classe per la quale il grafo è stato generato.</li>\n"
- "<li>Un riquadro con un bordo nero denota una struct o una classe documentata.</li>\n"
- "<li>Un riquadro con un bordo grigio indica una struct o una classe non documentata.</li>\n"
- "<li>Un riquadro con un bordo rosso indica una struct o una classe per la quale non sono mostrate tutte le relazioni di ereditarietà/contenimento (un grafo viene troncato se non rientra nei limiti prestabiliti).</li>\n"
- "</ul>\n"
- "<p>\n"
- "Le frecce hanno il seguente significato:\n"
- "</p>\n"
- "<ul>\n"
- "<li>Una freccia blu scuro indica una relazione di ereditarietà pubblica tra due classi.</li>\n"
- "<li>Una freccia verde indica un'ereditarietà protetta.</li>\n"
- "<li>Una freccia rossa indica un'ereditarietà privata.</li>\n"
- "<li>Una freccia viola tratteggiata indica che una classe è contenuta o usata da un'altra classe."
- " La freccia viene etichettata con la o le variabili attraverso cui la struct o la classe puntata dalla freccia è accessibile.</li>\n"
- "<li>Una freccia gialla tratteggiata indica la relazione tra una istanza di un template e la classe templatizzata da cui è stata istanziata."
- " La freccia viene etichettata con i parametri di template dell'istanza.</li>\n"
- "</ul>\n";
- }
- /*! text for the link to the legend page */
- virtual QCString trLegend()
- {
- return "legenda";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.2.0
-//////////////////////////////////////////////////////////////////////////
-
- /*! Used as a marker that is put before a test item */
- virtual QCString trTest()
- {
- return "Test";
- }
- /*! Used as the header of the test list */
- virtual QCString trTestList()
- {
- return "Lista dei test";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.2.1
-//////////////////////////////////////////////////////////////////////////
-
- /*! Used as a section header for KDE-2 IDL methods */
- virtual QCString trDCOPMethods()
- {
- return "Metodi DCOP";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.2.2
-//////////////////////////////////////////////////////////////////////////
-
- /*! Used as a section header for IDL properties */
- virtual QCString trProperties()
- {
- return "Proprietà";
- }
- /*! Used as a section header for IDL property documentation */
- virtual QCString trPropertyDocumentation()
- {
- return "Documentazione delle proprietà";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.2.4
-//////////////////////////////////////////////////////////////////////////
-
- /*! Used for Java classes in the summary section of Java packages */
- virtual QCString trClasses()
- {
- if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
- {
- return "Strutture dati";
- }
- else
- {
- return "Classi";
- }
- }
- /*! Used as the title of a Java package */
- virtual QCString trPackage(const char *name)
- {
- return (QCString)"Package "+name;
- }
- /*! Title of the package index page */
- virtual QCString trPackageList()
- {
- return "Lista dei package";
- }
- /*! The description of the package index page */
- virtual QCString trPackageListDescription()
- {
- return "Questi sono i package e una loro breve descrizione (se disponibile):";
- }
- /*! The link name in the Quick links header for each page */
- virtual QCString trPackages()
- {
- return "Package";
- }
- /*! Text shown before a multi-line define */
- virtual QCString trDefineValue()
- {
- return "Valore:";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.2.5
-//////////////////////////////////////////////////////////////////////////
-
- /*! Used as a marker that is put before a \\bug item */
- virtual QCString trBug()
- {
- return "Bug";
- }
- /*! Used as the header of the bug list */
- virtual QCString trBugList()
- {
- return "Lista dei bug";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.2.6
-//////////////////////////////////////////////////////////////////////////
-
- /*! Used as ansicpg for RTF file */
- virtual QCString trRTFansicp()
- {
- return "1252";
- }
-
- /*! Used as ansicpg for RTF fcharset */
- virtual QCString trRTFCharSet()
- {
- return "0";
- }
-
- /*! Used as header RTF general index */
- virtual QCString trRTFGeneralIndex()
- {
- return "Indice";
- }
-
- /*! This is used for translation of the word that will possibly
- * be followed by a single name or by a list of names
- * of the category.
- */
- virtual QCString trClass(bool first_capital, bool singular)
- {
- QCString result((first_capital ? "Class" : "class"));
- result+=(singular ? "e" : "i");
- return result;
- }
-
- /*! This is used for translation of the word that will possibly
- * be followed by a single name or by a list of names
- * of the category.
- */
- virtual QCString trFile(bool first_capital, bool)
- {
- QCString result((first_capital ? "File" : "file"));
- return result;
- }
-
- /*! This is used for translation of the word that will possibly
- * be followed by a single name or by a list of names
- * of the category.
- */
- virtual QCString trNamespace(bool first_capital, bool)
- {
- QCString result((first_capital ? "Namespace" : "namespace"));
- return result;
- }
-
- /*! This is used for translation of the word that will possibly
- * be followed by a single name or by a list of names
- * of the category.
- */
- virtual QCString trGroup(bool first_capital, bool singular)
- {
- QCString result((first_capital ? "Grupp" : "grupp"));
- result+=(singular ? "o" : "i");
- return result;
- }
-
- /*! This is used for translation of the word that will possibly
- * be followed by a single name or by a list of names
- * of the category.
- */
- virtual QCString trPage(bool first_capital, bool singular)
- {
- QCString result((first_capital ? "Pagin" : "pagin"));
- result+=(singular ? "a" : "e");
- return result;
- }
-
- /*! This is used for translation of the word that will possibly
- * be followed by a single name or by a list of names
- * of the category.
- */
- virtual QCString trMember(bool first_capital, bool singular)
- {
- QCString result((first_capital ? "Membr" : "membr"));
- result+=(singular ? "o" : "i");
- return result;
- }
-
- /*! This is used for translation of the word that will possibly
- * be followed by a single name or by a list of names
- * of the category.
- */
- virtual QCString trGlobal(bool first_capital, bool singular)
- {
- QCString result((first_capital ? "Global" : "global"));
- result+=(singular ? "e" : "i");
- return result;
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.2.7
-//////////////////////////////////////////////////////////////////////////
-
- /*! This text is generated when the \\author command is used and
- * for the author section in man pages. */
- virtual QCString trAuthor(bool first_capital, bool singular)
- {
- QCString result((first_capital ? "Autor" : "autor"));
- result+=(singular ? "e" : "i");
- return result;
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.2.11
-//////////////////////////////////////////////////////////////////////////
-
- /*! This text is put before the list of members referenced by a member
- */
- virtual QCString trReferences()
- {
- return "Referenzia";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.2.13
-//////////////////////////////////////////////////////////////////////////
-
- /*! used in member documentation blocks to produce a list of
- * members that are implemented by this one.
- */
- virtual QCString trImplementedFromList(int numEntries)
- {
- return "Implementa "+trWriteList(numEntries)+".";
- }
-
- /*! used in member documentation blocks to produce a list of
- * all members that implementation this member.
- */
- virtual QCString trImplementedInList(int numEntries)
- {
- return "Implementato in "+trWriteList(numEntries)+".";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.2.16
-//////////////////////////////////////////////////////////////////////////
-
- /*! used in RTF documentation as a heading for the Table
- * of Contents.
- */
- virtual QCString trRTFTableOfContents()
- {
- return "Sommario";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.2.17
-//////////////////////////////////////////////////////////////////////////
-
- /*! Used as the header of the list of item that have been
- * flagged deprecated
- */
- virtual QCString trDeprecatedList()
- {
- return "Lista degli elementi deprecati";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.2.18
-//////////////////////////////////////////////////////////////////////////
-
- /*! Used as a header for declaration section of the events found in
- * a C# program
- */
- virtual QCString trEvents()
- {
- return "Eventi";
- }
- /*! Header used for the documentation section of a class' events. */
- virtual QCString trEventDocumentation()
- {
- return "Documentazione degli eventi";
- }
-
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.3
-//////////////////////////////////////////////////////////////////////////
-
- /*! Used as a heading for a list of Java class types with package scope.
- */
- virtual QCString trPackageTypes()
- {
- return "Tipi con visibilità di package";
- }
- /*! Used as a heading for a list of Java class functions with package
- * scope.
- */
- virtual QCString trPackageMembers()
- {
- return "Funzioni con visibilità di package";
- }
- /*! Used as a heading for a list of static Java class functions with
- * package scope.
- */
- virtual QCString trStaticPackageMembers()
- {
- return "Funzioni statiche con visibilità di package";
- }
- /*! Used as a heading for a list of Java class variables with package
- * scope.
- */
- virtual QCString trPackageAttribs()
- {
- return "Attributi con visibilità di package";
- }
- /*! Used as a heading for a list of static Java class variables with
- * package scope.
- */
- virtual QCString trStaticPackageAttribs()
- {
- return "Attributi statici con visibilità di package";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.3.1
-//////////////////////////////////////////////////////////////////////////
-
- /*! Used in the quick index of a class/file/namespace member list page
- * to link to the unfiltered list of all members.
- */
- virtual QCString trAll()
- {
- return "Tutto";
- }
- /*! Put in front of the call graph for a function. */
- virtual QCString trCallGraph()
- {
- return "Questo è il grafo delle chiamate per questa funzione:";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.3.3
-//////////////////////////////////////////////////////////////////////////
-
- /*! When the search engine is enabled this text is put in the header
- * of each page before the field where one can enter the text to search
- * for.
- */
- virtual QCString trSearchForIndex()
- {
- return "Cerca";
- }
- /*! This string is used as the title for the page listing the search
- * results.
- */
- virtual QCString trSearchResultsTitle()
- {
- return "Risultati della ricerca";
- }
- /*! This string is put just before listing the search results. The
- * text can be different depending on the number of documents found.
- * Inside the text you can put the special marker $num to insert
- * the number representing the actual number of search results.
- * The @a numDocuments parameter can be either 0, 1 or 2, where the
- * value 2 represents 2 or more matches. HTML markup is allowed inside
- * the returned string.
- */
- virtual QCString trSearchResults(int numDocuments)
- {
- if (numDocuments==0)
- {
- return "Nessun documento soddisfa la tua richiesta.";
- }
- else if (numDocuments==1)
- {
- return "Trovato <b>1</b> documento che soddisfa la tua richiesta.";
- }
- else
- {
- return "Trovati <b>$num</b> documenti che soddisfano la tua richiesta. "
- "Le corrispondenze migliori sono in testa.";
- }
- }
- /*! This string is put before the list of matched words, for each search
- * result. What follows is the list of words that matched the query.
- */
- virtual QCString trSearchMatches()
- {
- return "Corrispondenze:";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.3.8
-//////////////////////////////////////////////////////////////////////////
-
- /*! This is used in HTML as the title of page with source code for file filename
- */
- virtual QCString trSourceFile(QCString& filename)
- {
- return " File sorgente " + filename ;
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.3.9
-//////////////////////////////////////////////////////////////////////////
-
- /*! This is used as the name of the chapter containing the directory
- * hierarchy.
- */
- virtual QCString trDirIndex()
- { return "Gerarchia delle directory"; }
-
- /*! This is used as the name of the chapter containing the documentation
- * of the directories.
- */
- virtual QCString trDirDocumentation()
- { return "Documentazione delle directory"; }
-
- /*! This is used as the title of the directory index and also in the
- * Quick links of a HTML page, to link to the directory hierarchy.
- */
- virtual QCString trDirectories()
- { return "Directory"; }
-
- /*! This returns a sentences that introduces the directory hierarchy.
- * and the fact that it is sorted alphabetically per level
- */
- virtual QCString trDirDescription()
- { return "Questa gerarchia di directory è approssimativamente, "
- "ma non completamente, ordinata in ordine alfabetico:";
- }
-
- /*! This returns the title of a directory page. The name of the
- * directory is passed via \a dirName.
- */
- virtual QCString trDirReference(const char *dirName)
- { QCString result="Riferimenti per la directory "; result+=dirName; return result; }
-
- /*! This returns the word directory with or without starting capital
- * (\a first_capital) and in sigular or plural form (\a singular).
- */
- virtual QCString trDir(bool first_capital, bool)
- {
- QCString result((first_capital ? "Directory" : "directory"));
- return result;
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.4.1
-//////////////////////////////////////////////////////////////////////////
-
- /*! This text is added to the documentation when the \\overload command
- * is used for a overloaded function.
- */
- virtual QCString trOverloadText()
- {
- return "Questa è una funzione membro sovraccaricata (overloaded), "
- "fornita per comodità. Differisce dalla funzione di cui sopra "
- "unicamente per gli argomenti passati.";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.4.6
-//////////////////////////////////////////////////////////////////////////
-
- /*! This is used to introduce a caller (or called-by) graph */
- virtual QCString trCallerGraph()
- {
- return "Questo è il grafo dei chiamanti di questa funzione:";
- }
-
- /*! This is used in the documentation of a file/namespace before the list
- * of documentation blocks for enumeration values
- */
- virtual QCString trEnumerationValueDocumentation()
- { return "Documentazione dei tipi enumerati"; }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.5.4 (mainly for Fortran)
-//////////////////////////////////////////////////////////////////////////
-
- /*! header that is put before the list of member subprograms (Fortran). */
- virtual QCString trMemberFunctionDocumentationFortran()
- { return "Documentazione delle funzioni membro/subroutine"; }
-
- /*! This is put above each page as a link to the list of annotated data types (Fortran). */
- virtual QCString trCompoundListFortran()
- { return "Elenco dei tipi di dato"; }
-
- /*! This is put above each page as a link to all members of compounds (Fortran). */
- virtual QCString trCompoundMembersFortran()
- { return "Membri dei tipi di dato"; }
-
- /*! This is an introduction to the annotated compound list (Fortran). */
- virtual QCString trCompoundListDescriptionFortran()
- { return "Questi sono i tipi dato con una loro breve descrizione:"; }
-
- /*! This is an introduction to the page with all data types (Fortran). */
- virtual QCString trCompoundMembersDescriptionFortran(bool extractAll)
- {
- QCString result="Questa è una lista di tutti i membri ";
- if (!extractAll)
- {
- result+="documentati ";
- }
- result+="dei tipi di dato con collegamenti ";
- if (!extractAll)
- {
- result+="alla documentazione della struttura dati per ciascun membro:";
- }
- else
- {
- result+="ai tipi dato a cui appartengono:";
- }
- return result;
- }
-
- /*! This is used in LaTeX as the title of the chapter with the
- * annotated compound index (Fortran).
- */
- virtual QCString trCompoundIndexFortran()
- { return "Indice dei tipi dati"; }
-
- /*! This is used in LaTeX as the title of the chapter containing
- * the documentation of all data types (Fortran).
- */
- virtual QCString trTypeDocumentation()
- { return "Documentazione dei tipi dato"; }
-
- /*! This is used in the documentation of a file as a header before the
- * list of (global) subprograms (Fortran).
- */
- virtual QCString trSubprograms()
- { return "Funzioni/Subroutine"; }
-
- /*! This is used in the documentation of a file/namespace before the list
- * of documentation blocks for subprograms (Fortran)
- */
- virtual QCString trSubprogramDocumentation()
- { return "Documentazione funzioni/subroutine"; }
-
- /*! This is used in the documentation of a file/namespace/group before
- * the list of links to documented compounds (Fortran)
- */
- virtual QCString trDataTypes()
- { return "Tipi di dato"; }
-
- /*! used as the title of page containing all the index of all modules (Fortran). */
- virtual QCString trModulesList()
- { return "Elenco dei moduli"; }
-
- /*! used as an introduction to the modules list (Fortran) */
- virtual QCString trModulesListDescription(bool extractAll)
- {
- QCString result="Questa è una lista di tutti i moduli ";
- if (!extractAll) result+="documentati ";
- result+="con una loro breve descrizione:";
- return result;
- }
-
- /*! used as the title of the HTML page of a module/type (Fortran) */
- virtual QCString trCompoundReferenceFortran(const char *clName,
- ClassDef::CompoundType compType,
- bool isTemplate)
- {
- QCString result="Riferimenti per ";
- if (isTemplate) result="Template per ";
- switch(compType)
- {
- case ClassDef::Class: result+=" il modulo"; break;
- case ClassDef::Struct: result+=" il tipo dato"; break;
- case ClassDef::Union: result+=" l'union"; break;
- case ClassDef::Interface: result+=" l'nterfaccia"; break;
- case ClassDef::Protocol: result+=" il protocollo"; break;
- case ClassDef::Category: result+=" la categoria"; break;
- case ClassDef::Exception: result+=" l'eccezione"; break;
- }
- result+=(QCString)clName;
- return result;
- }
-
- /*! used as the title of the HTML page of a module (Fortran) */
- virtual QCString trModuleReference(const char *namespaceName)
- {
- QCString result="Riferimenti per il modulo ";
- result+=namespaceName;
- return result;
- }
-
- /*! This is put above each page as a link to all members of modules. (Fortran) */
- virtual QCString trModulesMembers()
- { return "Membri del modulo"; }
-
- /*! This is an introduction to the page with all modules members (Fortran) */
- virtual QCString trModulesMemberDescription(bool extractAll)
- {
- QCString result="Questo è un elenco di tutti i membri dei moduli ";
- if (!extractAll) result+="documentati ";
- result+="con collegamenti ";
- if (extractAll)
- {
- result+="alla documentazione del modulo per ciascun membro:";
- }
- else
- {
- result+="al modulo a cui appartengono:";
- }
- return result;
- }
-
- /*! This is used in LaTeX as the title of the chapter with the
- * index of all modules (Fortran).
- */
- virtual QCString trModulesIndex()
- { return "Indice dei moduli"; }
-
- /*! This is used for translation of the word that will possibly
- * be followed by a single name or by a list of names
- * of the category.
- */
- virtual QCString trModule(bool first_capital, bool singular)
- {
- QCString result((first_capital ? "Modul" : "modul"));
- if (singular) result+="o";
- else result+="i";
- return result;
- }
- /*! This is put at the bottom of a module documentation page and is
- * followed by a list of files that were used to generate the page.
- */
- virtual QCString trGeneratedFromFilesFortran(ClassDef::CompoundType compType,
- bool single)
- { // here s is one of " Module", " Struct" or " Union"
- // single is true implies a single file
- QCString result=(QCString)"La documentazione per quest";
- switch(compType)
- {
- case ClassDef::Class: result+="o modulo"; break;
- case ClassDef::Struct: result+="o tipo"; break;
- case ClassDef::Union: result+="a union"; break;
- case ClassDef::Interface: result+="a interfaccia"; break;
- case ClassDef::Protocol: result+="o protocollo"; break;
- case ClassDef::Category: result+="a categoria"; break;
- case ClassDef::Exception: result+="a eccezione"; break;
- }
- result+=" è stata generata a partire ";
- if (single) result+="dal seguente file:"; else result+="dai seguenti file:";
- return result;
- }
- /*! This is used for translation of the word that will possibly
- * be followed by a single name or by a list of names
- * of the category.
- */
- virtual QCString trType(bool first_capital, bool singular)
- {
- QCString result((first_capital ? "Tip" : "tip"));
- if (singular) result+="o";
- else result+="i";
- return result;
- }
- /*! This is used for translation of the word that will possibly
- * be followed by a single name or by a list of names
- * of the category.
- */
- virtual QCString trSubprogram(bool first_capital, bool singular)
- {
- QCString result((first_capital ? "Sottoprogramm" : "sottoprogramm"));
- if (singular) result+="a";
- else result+="i";
- return result;
- }
-
- /*! C# Type Contraint list */
- virtual QCString trTypeConstraints()
- {
- return "Vincoli dei tipi";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.6.0 (mainly for the new search engine)
-//////////////////////////////////////////////////////////////////////////
-
- /*! directory relation for \a name */
- virtual QCString trDirRelation(const char *name)
- {
- return "Relazione per "+QCString(name);
- }
-
- /*! Loading message shown when loading search results */
- virtual QCString trLoading()
- {
- return "Caricamento in corso...";
- }
-
- /*! Label used for search results in the global namespace */
- virtual QCString trGlobalNamespace()
- {
- return "Namespace globale";
- }
-
- /*! Message shown while searching */
- virtual QCString trSearching()
- {
- return "Ricerca in corso...";
- }
-
- /*! Text shown when no search results are found */
- virtual QCString trNoMatches()
- {
- return "Nessun risultato";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.6.3 (missing items for the directory pages)
-//////////////////////////////////////////////////////////////////////////
-
- /*! introduction text for the directory dependency graph */
- virtual QCString trDirDependency(const char *name)
- {
- return (QCString)"Grafo di dipendenza delle directory per "+name;
- }
-
- /*! when clicking a directory dependency label, a page with a
- * table is shown. The heading for the first column mentions the
- * source file that has a relation to another file.
- */
- virtual QCString trFileIn(const char *name)
- {
- return (QCString)"File in "+name;
- }
-
- /*! when clicking a directory dependency label, a page with a
- * table is shown. The heading for the second column mentions the
- * destination file that is included.
- */
- virtual QCString trIncludesFileIn(const char *name)
- {
- return (QCString)"Include il file in "+name;
- }
-
- /** Compiles a date string.
- * @param year Year in 4 digits
- * @param month Month of the year: 1=January
- * @param day Day of the Month: 1..31
- * @param dayOfWeek Day of the week: 1=Monday..7=Sunday
- * @param hour Hour of the day: 0..23
- * @param minutes Minutes in the hour: 0..59
- * @param seconds Seconds within the minute: 0..59
- * @param includeTime Include time in the result string?
- */
- virtual QCString trDateTime(int year,int month,int day,int dayOfWeek,
- int hour,int minutes,int seconds,
- bool includeTime)
- {
- static const char *days[] = { "Lun","Mar","Mer","Gio","Ven","Sab","Dom" };
- static const char *months[] = { "Gen","Feb","Mar","Apr","Mag","Giu","Lug","Ago","Set","Ott","Nov","Dic" };
- QCString sdate;
- sdate.sprintf("%s %d %s %d",days[dayOfWeek-1],day,months[month-1],year);
- if (includeTime)
- {
- QCString stime;
- stime.sprintf(" %.2d:%.2d:%.2d",hour,minutes,seconds);
- sdate+=stime;
- }
- return sdate;
- }
-
-};
-
-#endif
-
diff --git a/trunk/src/translator_je.h b/trunk/src/translator_je.h
deleted file mode 100644
index 09bb066..0000000
--- a/trunk/src/translator_je.h
+++ /dev/null
@@ -1,67 +0,0 @@
-/******************************************************************************
- *
- *
- *
- * Copyright (C) 1997-2012 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.
- *
- */
-
-/*
- * translator_jp.h
- *
- * 1.2.5)
- * First Translation
- * by Kenji Nagamatsu
- * 1.2.12)
- * Update and Shift-Jis(_WIN32)
- * by Ryunosuke Sato (30-Dec-2001)
- */
-
-#ifndef TRANSLATOR_JE_H
-#define TRANSLATOR_JE_H
-
-class TranslatorJapaneseEn : public TranslatorEnglish
-{
- public:
- virtual QCString idLanguage()
- { return "japanese-en"; }
- virtual QCString latexLanguageSupportCommand()
- {
- return "platex";
- }
- /*! returns the name of the package that is included by LaTeX */
- virtual QCString idLanguageCharset()
- {
- //if (Config_getBool("USE_WINDOWS_ENCODING"))
- //{
- // return "Shift_JIS";
- //}
- //else
- //{
- return "euc-jp";
- //}
- }
- virtual QCString trRTFansicp()
- {
- return "932";
- }
-
- /*! Used as ansicpg for RTF fcharset
- * \see trRTFansicp() for a table of possible values.
- */
- virtual QCString trRTFCharSet()
- {
- return "128";
- }
-};
-
-#endif
diff --git a/trunk/src/translator_jp.h b/trunk/src/translator_jp.h
deleted file mode 100644
index 1ba24bc..0000000
--- a/trunk/src/translator_jp.h
+++ /dev/null
@@ -1,1772 +0,0 @@
-/******************************************************************************
- *
- *
- *
- * Copyright (C) 1997-2012 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.
- *
- */
-
-/*
- * translator_jp.h
- * Updates:
- * 1.2.5)
- * First Translation
- * by Kenji Nagamatsu
- * 1.2.12)
- * Update and Shift-Jis(_WIN32)
- * by Ryunosuke Sato (30-Dec-2001)
- * 1.5.8)
- * Translation for 1.5.8.
- * by Hiroki Iseri (18-Feb-2009)
- */
-
-#ifndef TRANSLATOR_JP_H
-#define TRANSLATOR_JP_H
-
-class TranslatorJapanese : public TranslatorAdapter_1_6_0
-{
- private:
- /*! The decode() can change euc into sjis */
- inline QCString decode(const QCString & sInput)
- {
- //if (Config_getBool("USE_WINDOWS_ENCODING"))
- //{
- // return JapaneseEucToSjis(sInput);
- //}
- //else
- //{
- return sInput;
- //}
- }
- public:
- virtual QCString idLanguage()
- { return "japanese"; }
- virtual QCString latexLanguageSupportCommand()
- {
- return "";
- }
- /*! returns the name of the package that is included by LaTeX */
- virtual QCString idLanguageCharset()
- {
- //if (Config_getBool("USE_WINDOWS_ENCODING"))
- //{
- // return "Shift_JIS";
- //}
- //else
- //{
- return "euc-jp";
- //}
- }
-
- /*! used in the compound documentation before a list of related functions. */
- virtual QCString trRelatedFunctions()
- { return decode("´ØÏ¢¤¹¤ë´Ø¿ô"); }
-
- /*! subscript for the related functions. */
- virtual QCString trRelatedSubscript()
- { return decode("¡Ê¤³¤ì¤é¤Ï¥á¥½¥Ã¥É¤Ç¤Ê¤¤¤³¤È¤ËÃí°Õ¡Ë"); }
-
- /*! header that is put before the detailed description of files, classes and namespaces. */
- virtual QCString trDetailedDescription()
- { return decode("ÀâÌÀ"); }
-
- /*! header that is put before the list of typedefs. */
- virtual QCString trMemberTypedefDocumentation()
- { return decode("·¿ÄêµÁ"); }
-
- /*! header that is put before the list of enumerations. */
- virtual QCString trMemberEnumerationDocumentation()
- { return decode("Îóµó·¿"); }
-
- /*! header that is put before the list of member functions. */
- virtual QCString trMemberFunctionDocumentation()
- {
- if( Config_getBool("OPTIMIZE_OUTPUT_JAVA"))
- {
- return decode("¥á¥½¥Ã¥É");
- }
- else
- {
- return decode("´Ø¿ô");
- }
- }
-
- /*! header that is put before the list of member attributes. */
- virtual QCString trMemberDataDocumentation()
- {
- if( Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
- {
- return decode("¹½Â¤ÂÎ");
- }
- else
- {
- return decode("ÊÑ¿ô");
- }
- }
-
- /*! this is the text of a link put after brief descriptions. */
- virtual QCString trMore()
- { return decode("[¾ÜºÙ]"); }
-
- /*! put in the class documentation */
- virtual QCString trListOfAllMembers()
- { return decode("¤¹¤Ù¤Æ¤Î¥á¥ó¥Ð°ìÍ÷"); }
-
- /*! used as the title of the "list of all members" page of a class */
- virtual QCString trMemberList()
- { return decode("¥á¥ó¥Ð°ìÍ÷"); }
-
- /*! this is the first part of a sentence that is followed by a class name */
- virtual QCString trThisIsTheListOfAllMembers()
- { return decode("¤³¤ì¤ÏÁ´¥á¥ó¥Ð¤Î°ìÍ÷¤Ç¤¹¡£"); }
-
- /*! this is the remainder of the sentence after the class name */
- virtual QCString trIncludingInheritedMembers()
- { return decode("·Ñ¾µ¥á¥ó¥Ð¤â´Þ¤ó¤Ç¤¤¤Þ¤¹¡£"); }
-
- /*! this is put at the author sections at the bottom of man pages.
- * parameter s is name of the project name.
- */
- virtual QCString trGeneratedAutomatically(const char *s)
- { QCString result;
- if (s) result=(QCString)s+decode("¤Î");
- result+=decode("¥½¡¼¥¹¤«¤é Doxygen ¤Ë¤è¤êÀ¸À®¤·¤Þ¤·¤¿¡£");
- return result;
- }
-
- /*! put after an enum name in the list of all members */
- virtual QCString trEnumName()
- { return decode("Enum"); }
-
- /*! put after an enum value in the list of all members */
- virtual QCString trEnumValue()
- { return decode("Enum ÃÍ"); }
-
- /*! put after an undocumented member in the list of all members */
- virtual QCString trDefinedIn()
- { return decode("¼¡¤ÇÄêµÁ¤µ¤ì¤Æ¤¤¤Þ¤¹¡£"); }
-
- // quick reference sections
-
- /*! This is put above each page as a link to the list of all groups of
- * compounds or files (see the \\group command).
- */
- virtual QCString trModules()
- { return decode("¥â¥¸¥å¡¼¥ë"); }
-
- /*! This is put above each page as a link to the class hierarchy */
- virtual QCString trClassHierarchy()
- { return decode("¥¯¥é¥¹³¬ÁØ"); }
-
- /*! This is put above each page as a link to the list of annotated classes */
- virtual QCString trCompoundList()
- {
- if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
- {
- return decode("¥Ç¡¼¥¿¹½Â¤");
- }
- else
- {
- return decode("¹½À®");
- }
- }
-
- /*! This is put above each page as a link to the list of documented files */
- virtual QCString trFileList()
- { return decode("¥Õ¥¡¥¤¥ë°ìÍ÷"); }
-
- /*! This is put above each page as a link to the list of all verbatim headers */
- virtual QCString trHeaderFiles()
- { return decode("¥Ø¥Ã¥À¥Õ¥¡¥¤¥ë"); }
-
- /*! This is put above each page as a link to all members of compounds. */
- virtual QCString trCompoundMembers()
- {
- if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
- {
- return decode("¥Ç¡¼¥¿¥Õ¥£¡¼¥ë¥É");
- }
- else
- {
- return decode("¹½À®¥á¥ó¥Ð");
- }
- }
-
- /*! This is put above each page as a link to all members of files. */
- virtual QCString trFileMembers()
- {
- if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
- {
- return decode("¥°¥í¡¼¥Ð¥ë");
- }
- else
- {
- return decode("¥Õ¥¡¥¤¥ë¥á¥ó¥Ð");
- }
- }
- /*! This is put above each page as a link to all related pages. */
- virtual QCString trRelatedPages()
- { return decode("´ØÏ¢¥Ú¡¼¥¸"); }
-
- /*! This is put above each page as a link to all examples. */
- virtual QCString trExamples()
- { return decode("Îã"); }
-
- /*! This is put above each page as a link to the search engine. */
- virtual QCString trSearch()
- { return decode("¸¡º÷"); }
-
- /*! This is an introduction to the class hierarchy. */
- virtual QCString trClassHierarchyDescription()
- { return decode("¤³¤Î·Ñ¾µ°ìÍ÷¤Ï¤ª¤ª¤Þ¤«¤Ë¤Ï¥½¡¼¥È¤µ¤ì¤Æ¤¤¤Þ¤¹¤¬¡¢"
- "´°Á´¤Ë¥¢¥ë¥Õ¥¡¥Ù¥Ã¥È½ç¤Ç¥½¡¼¥È¤µ¤ì¤Æ¤Ï¤¤¤Þ¤»¤ó¡£");
- }
-
- /*! This is an introduction to the list with all files. */
- virtual QCString trFileListDescription(bool /*extractAll*/)
- {
- QCString result=decode("¤³¤ì¤Ï");
- result+=decode("¥Õ¥¡¥¤¥ë°ìÍ÷¤Ç¤¹¡£");
- return result;
- }
-
- /*! This is an introduction to the annotated compound list. */
- virtual QCString trCompoundListDescription()
- {
- if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
- {
- return decode("¥Ç¡¼¥¿¹½Â¤¤ÎÀâÌÀ¤Ç¤¹¡£");
- }
- else
- {
- return decode("¥¯¥é¥¹¡¢¹½Â¤ÂΡ¢¶¦ÍÑÂΡ¢¥¤¥ó¥¿¥Õ¥§¡¼¥¹¤ÎÀâÌÀ¤Ç¤¹¡£");
- }
- }
-
- /*! This is an introduction to the page with all class members. */
- virtual QCString trCompoundMembersDescription(bool extractAll)
- {
- QCString result=decode("¤³¤ì¤Ï");
- if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
- {
- result+=decode("¥Õ¥£¡¼¥ë¥É¤Î°ìÍ÷¤Ç¤½¤ì¤¾¤ì");
- if (extractAll) result+=decode("¤¬Â°¤·¤Æ¤¤¤ë¹½Â¤ÂÎ/¶¦ÍÑÂÎ");
- }
- else
- {
- result+=decode("¥¯¥é¥¹¥á¥ó¥Ð¤Î°ìÍ÷¤Ç¡¢¤½¤ì¤¾¤ì");
- if (extractAll) result+=decode("¤¬Â°¤·¤Æ¤¤¤ë¥¯¥é¥¹");
- }
- result+=decode("¤ÎÀâÌÀ¤Ø¥ê¥ó¥¯¤·¤Æ¤¤¤Þ¤¹¡£");
- return result;
- }
-
- /*! This is an introduction to the page with all file members. */
- virtual QCString trFileMembersDescription(bool /*extractAll*/)
- {
- QCString result=decode("¤³¤ì¤Ï");
- if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
- {
- result+=decode("´Ø¿ô¡¢ÊÑ¿ô¡¢¥Þ¥¯¥í¡¢Enum¡¢Typedef ¤Î");
- }
- else
- {
- result+=decode("¥Õ¥¡¥¤¥ë¥á¥ó¥Ð¤Î");
- }
- result+=decode("°ìÍ÷¤Ç¤¹¡£¤½¤ì¤¾¤ì¤¬Â°¤·¤Æ¤¤¤ë¥Õ¥¡¥¤¥ë¤ÎÀâÌÀ¤Ø¥ê¥ó¥¯¤·¤Æ¤¤¤Þ¤¹¡£");
- return result;
- }
-
- /*! This is an introduction to the page with the list of all header files. */
- virtual QCString trHeaderFilesDescription()
- { return decode("API¤ò¹½À®¤¹¤ë¥Ø¥Ã¥À¥Õ¥¡¥¤¥ë¤Ç¤¹¡£"); }
-
- /*! This is an introduction to the page with the list of all examples */
- virtual QCString trExamplesDescription()
- { return decode("¤¹¤Ù¤Æ¤ÎÎã¤Î°ìÍ÷¤Ç¤¹¡£"); }
-
- /*! This is an introduction to the page with the list of related pages */
- virtual QCString trRelatedPagesDescription()
- { return decode("´ØÏ¢¥Ú¡¼¥¸¤Î°ìÍ÷¤Ç¤¹¡£"); }
-
- /*! This is an introduction to the page with the list of class/file groups */
- virtual QCString trModulesDescription()
- { return decode("¤¹¤Ù¤Æ¤Î¥â¥¸¥å¡¼¥ë¤Î°ìÍ÷¤Ç¤¹¡£"); }
-
- /*! This sentences is used in the annotated class/file lists if no brief
- * description is given.
- */
- virtual QCString trNoDescriptionAvailable()
- { return decode("¥É¥­¥å¥á¥ó¥È¤¬µ­½Ò¤µ¤ì¤Æ¤¤¤Þ¤»¤ó¡£"); }
-
- // index titles (the project name is prepended for these)
-
-
- /*! This is used in HTML as the title of index.html. */
- virtual QCString trDocumentation()
- { return decode("¥É¥­¥å¥á¥ó¥È"); }
-
- /*! This is used in LaTeX as the title of the chapter with the
- * index of all groups.
- */
- virtual QCString trModuleIndex()
- { return decode("¥â¥¸¥å¡¼¥ëº÷°ú"); }
-
- /*! This is used in LaTeX as the title of the chapter with the
- * class hierarchy.
- */
- virtual QCString trHierarchicalIndex()
- { return decode("³¬Áغ÷°ú"); }
-
- /*! This is used in LaTeX as the title of the chapter with the
- * annotated compound index.
- */
- virtual QCString trCompoundIndex()
- {
- if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
- {
- return decode("¥Ç¡¼¥¿¹½Â¤º÷°ú");
- }
- else
- {
- return decode("¹½À®º÷°ú");
- }
- }
-
- /*! This is used in LaTeX as the title of the chapter with the
- * list of all files.
- */
- virtual QCString trFileIndex()
- { return decode("¥Õ¥¡¥¤¥ëº÷°ú"); }
-
- /*! This is used in LaTeX as the title of the chapter containing
- * the documentation of all groups.
- */
- virtual QCString trModuleDocumentation()
- { return decode("¥â¥¸¥å¡¼¥ë"); }
-
- /*! This is used in LaTeX as the title of the chapter containing
- * the documentation of all classes, structs and unions.
- */
- virtual QCString trClassDocumentation()
- {
- if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
- {
- return decode("¥Ç¡¼¥¿¹½Â¤");
- }
- else
- {
- return decode("¥¯¥é¥¹");
- }
- }
-
- /*! This is used in LaTeX as the title of the chapter containing
- * the documentation of all files.
- */
- virtual QCString trFileDocumentation()
- { return decode("¥Õ¥¡¥¤¥ë"); }
-
- /*! This is used in LaTeX as the title of the chapter containing
- * the documentation of all examples.
- */
- virtual QCString trExampleDocumentation()
- { return decode("Îã"); }
-
- /*! This is used in LaTeX as the title of the chapter containing
- * the documentation of all related pages.
- */
- virtual QCString trPageDocumentation()
- { return decode("¥Ú¡¼¥¸"); }
-
- /*! This is used in LaTeX as the title of the document */
- virtual QCString trReferenceManual()
- { return decode("¥ê¥Õ¥¡¥ì¥ó¥¹¥Þ¥Ë¥å¥¢¥ë"); }
-
- /*! This is used in the documentation of a file as a header before the
- * list of defines
- */
- virtual QCString trDefines()
- { return decode("¥Þ¥¯¥íÄêµÁ"); }
-
- /*! This is used in the documentation of a file as a header before the
- * list of function prototypes
- */
- virtual QCString trFuncProtos()
- { return decode("´Ø¿ô¥×¥í¥È¥¿¥¤¥×"); }
-
- /*! This is used in the documentation of a file as a header before the
- * list of typedefs
- */
- virtual QCString trTypedefs()
- { return decode("·¿ÄêµÁ"); }
-
- /*! This is used in the documentation of a file as a header before the
- * list of enumerations
- */
- virtual QCString trEnumerations()
- { return decode("Îóµó·¿"); }
-
- /*! This is used in the documentation of a file as a header before the
- * list of (global) functions
- */
- virtual QCString trFunctions()
- { return decode("´Ø¿ô"); }
-
- /*! This is used in the documentation of a file as a header before the
- * list of (global) variables
- */
- virtual QCString trVariables()
- { return decode("ÊÑ¿ô"); }
-
- /*! This is used in the documentation of a file as a header before the
- * list of (global) variables
- */
- virtual QCString trEnumerationValues()
- { return decode("Îóµó·¿¤ÎÃÍ"); }
- /*! This is used in the documentation of a file before the list of
- * documentation blocks for defines
- */
- virtual QCString trDefineDocumentation()
- { return decode("¥Þ¥¯¥íÄêµÁ"); }
-
- /*! This is used in the documentation of a file/namespace before the list
- * of documentation blocks for function prototypes
- */
- virtual QCString trFunctionPrototypeDocumentation()
- { return decode("´Ø¿ô¥×¥í¥È¥¿¥¤¥×"); }
-
- /*! This is used in the documentation of a file/namespace before the list
- * of documentation blocks for typedefs
- */
- virtual QCString trTypedefDocumentation()
- { return decode("·¿ÄêµÁ"); }
-
- /*! This is used in the documentation of a file/namespace before the list
- * of documentation blocks for enumeration types
- */
- virtual QCString trEnumerationTypeDocumentation()
- { return decode("Îóµó·¿"); }
-
- /*! This is used in the documentation of a file/namespace before the list
- * of documentation blocks for functions
- */
- virtual QCString trFunctionDocumentation()
- { return decode("´Ø¿ô"); }
-
- /*! This is used in the documentation of a file/namespace before the list
- * of documentation blocks for variables
- */
- virtual QCString trVariableDocumentation()
- { return decode("ÊÑ¿ô"); }
-
- /*! This is used in the documentation of a file/namespace/group before
- * the list of links to documented compounds
- */
- virtual QCString trCompounds()
- {
- if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
- {
- return decode("¥Ç¡¼¥¿¹½Â¤");
- }
- else
- {
- return decode("¹½À®");
- }
- }
- /*! This is used in the standard footer of each page and indicates when
- * the page was generated
- */
- virtual QCString trGeneratedAt(const char *date,const char *projName)
- {
- QCString result;
- if (projName) result+=(QCString)projName+decode("¤ËÂФ·¤Æ");
- result+=(QCString)date+decode("¤ËÀ¸À®¤µ¤ì¤Þ¤·¤¿¡£");
- return result;
- }
- /*! This is part of the sentence used in the standard footer of each page.
- */
- virtual QCString trWrittenBy()
- {
- return decode("ºî¼Ô");
- }
-
- /*! this text is put before a class diagram */
- virtual QCString trClassDiagram(const char *clName)
- {
- return (QCString)clName+decode("¤ËÂФ¹¤ë·Ñ¾µ¥°¥é¥Õ");
- }
-
- /*! this text is generated when the \\internal command is used. */
- virtual QCString trForInternalUseOnly()
- { return decode("ÆâÉô»ÈÍѤΤߡ£"); }
-
- /*! this text is generated when the \\reimp command is used. */
- virtual QCString trReimplementedForInternalReasons()
- { return decode("ÆâÉôŪ¤ÊÍýͳ¤Ë¤è¤êºÆ¼ÂÁõ¤µ¤ì¤Þ¤·¤¿¤¬¡¢API¤Ë¤Ï±Æ¶Á¤·¤Þ¤»¤ó¡£");
- }
-
- /*! this text is generated when the \\warning command is used. */
- virtual QCString trWarning()
- { return decode("·Ù¹ð"); }
-
- /*! this text is generated when the \\bug command is used. */
- virtual QCString trBugsAndLimitations()
- { return decode("¥Ð¥°¤ÈÀ©¸Â"); }
-
- /*! this text is generated when the \\version command is used. */
- virtual QCString trVersion()
- { return decode("¥Ð¡¼¥¸¥ç¥ó"); }
-
- /*! this text is generated when the \\date command is used. */
- virtual QCString trDate()
- { return decode("ÆüÉÕ"); }
-
- /*! this text is generated when the \\return command is used. */
- virtual QCString trReturns()
- { return decode("Ìá¤êÃÍ"); }
-
- /*! this text is generated when the \\sa command is used. */
- virtual QCString trSeeAlso()
- { return decode("»²¾È"); }
-
- /*! this text is generated when the \\param command is used. */
- virtual QCString trParameters()
- { return decode("°ú¿ô"); }
-
- /*! this text is generated when the \\exception command is used. */
- virtual QCString trExceptions()
- { return decode("Îã³°"); }
-
- /*! this text is used in the title page of a LaTeX document. */
- virtual QCString trGeneratedBy()
- { return decode("ºîÀ®¡§"); }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 0.49-990307
-//////////////////////////////////////////////////////////////////////////
-
- /*! used as the title of page containing all the index of all namespaces. */
- virtual QCString trNamespaceList()
- { return decode("¥Í¡¼¥à¥¹¥Ú¡¼¥¹°ìÍ÷"); }
-
- /*! used as an introduction to the namespace list */
- virtual QCString trNamespaceListDescription(bool /*extractAll*/)
- {
- QCString result=decode("");
- result+=decode("¥Í¡¼¥à¥¹¥Ú¡¼¥¹¤Î°ìÍ÷¤Ç¤¹¡£");
- return result;
- }
-
- /*! used in the class documentation as a header before the list of all
- * friends of a class
- */
- virtual QCString trFriends()
- { return decode("¥Õ¥ì¥ó¥É"); }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 0.49-990405
-//////////////////////////////////////////////////////////////////////////
-
- /*! used in the class documentation as a header before the list of all
- * related classes
- */
- virtual QCString trRelatedFunctionDocumentation()
- { return decode("¥Õ¥ì¥ó¥É¤È´ØÏ¢¤¹¤ë´Ø¿ô"); }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 0.49-990425
-//////////////////////////////////////////////////////////////////////////
-
- /*! used as the title of the HTML page of a class/struct/union */
- virtual QCString trCompoundReference(const char *clName,
- ClassDef::CompoundType compType,
- bool isTemplate)
- {
- QCString result="";
- switch(compType)
- {
- case ClassDef::Class: result+=decode("¥¯¥é¥¹ "); break;
- case ClassDef::Struct: result+=decode("¹½Â¤ÂÎ "); break;
- case ClassDef::Union: result+=decode("¶¦ÍÑÂÎ "); break;
- case ClassDef::Interface: result+=decode("¥¤¥ó¥¿¥Õ¥§¡¼¥¹ "); break;
- case ClassDef::Protocol: result+=decode("¥×¥í¥È¥³¥ë "); break;
- case ClassDef::Category: result+=decode("¥«¥Æ¥´¥ê "); break;
- case ClassDef::Exception: result+=decode("Îã³° "); break;
- }
- if (isTemplate) result+=decode("¥Æ¥ó¥×¥ì¡¼¥È ");
- result+=(QCString)clName;
- return result;
- }
-
- /*! used as the title of the HTML page of a file */
- virtual QCString trFileReference(const char *fileName)
- {
- QCString result=decode("")+(QCString)fileName;
- return result;
- }
-
- /*! used as the title of the HTML page of a namespace */
- virtual QCString trNamespaceReference(const char *namespaceName)
- {
- QCString result=decode("¥Í¡¼¥à¥¹¥Ú¡¼¥¹ ")+(QCString)namespaceName;
- return result;
- }
-
- /* these are for the member sections of a class, struct or union */
- virtual QCString trPublicMembers()
- { return decode("Public ¥á¥½¥Ã¥É"); }
- virtual QCString trPublicSlots()
- { return decode("Public ¥¹¥í¥Ã¥È"); }
- virtual QCString trSignals()
- { return decode("¥·¥°¥Ê¥ë"); }
- virtual QCString trStaticPublicMembers()
- { return decode("Static Public ¥á¥½¥Ã¥É"); }
- virtual QCString trProtectedMembers()
- { return decode("Protected ¥á¥½¥Ã¥É"); }
- virtual QCString trProtectedSlots()
- { return decode("Protected ¥¹¥í¥Ã¥È"); }
- virtual QCString trStaticProtectedMembers()
- { return decode("Static Protected ¥á¥½¥Ã¥É"); }
- virtual QCString trPrivateMembers()
- { return decode("Private ¥á¥½¥Ã¥É"); }
- virtual QCString trPrivateSlots()
- { return decode("Private ¥¹¥í¥Ã¥È"); }
- virtual QCString trStaticPrivateMembers()
- { return decode("Static Private ¥á¥½¥Ã¥É"); }
-
- /*! this function is used to produce a comma-separated list of items.
- * use generateMarker(i) to indicate where item i should be put.
- */
- virtual QCString trWriteList(int numEntries)
- {
- QCString result;
- int i;
- // the inherits list contain `numEntries' classes
- for (i=0;i<numEntries;i++)
- {
- // use generateMarker to generate placeholders for the class links!
- result+=generateMarker(i); // generate marker for entry i in the list
- // (order is left to right)
-
- if (i!=numEntries-1) // not the last entry, so we need a separator
- {
- if (i<numEntries-2) // not the fore last entry
- result+=decode(", ");
- else // the fore last entry
- result+=decode(", ¤È ");
- }
- }
- return result;
- }
-
- /*! used in class documentation to produce a list of base classes,
- * if class diagrams are disabled.
- */
- virtual QCString trInheritsList(int numEntries)
- {
- return trWriteList(numEntries)+decode("¤ò·Ñ¾µ¤·¤Æ¤¤¤Þ¤¹¡£");
- }
-
- /*! used in class documentation to produce a list of super classes,
- * if class diagrams are disabled.
- */
- virtual QCString trInheritedByList(int numEntries)
- {
- return trWriteList(numEntries)+decode("¤Ë·Ñ¾µ¤µ¤ì¤Æ¤¤¤Þ¤¹¡£");
- }
-
- /*! used in member documentation blocks to produce a list of
- * members that are hidden by this one.
- */
- virtual QCString trReimplementedFromList(int numEntries)
- {
- return trWriteList(numEntries)+decode("¤òºÆÄêµÁ¤·¤Æ¤¤¤Þ¤¹¡£");
- }
-
- /*! used in member documentation blocks to produce a list of
- * all member that overwrite the implementation of this member.
- */
- virtual QCString trReimplementedInList(int numEntries)
- {
- return trWriteList(numEntries)+decode("¤ÇºÆÄêµÁ¤µ¤ì¤Æ¤¤¤Þ¤¹¡£");
- }
-
- /*! This is put above each page as a link to all members of namespaces. */
- virtual QCString trNamespaceMembers()
- { return decode("¥Í¡¼¥à¥¹¥Ú¡¼¥¹¥á¥ó¥Ð"); }
-
- /*! This is an introduction to the page with all namespace members */
- virtual QCString trNamespaceMemberDescription(bool extractAll)
- {
- QCString result=decode("¤³¤ì¤Ï");
- result+=decode("¥Í¡¼¥à¥¹¥Ú¡¼¥¹¤Î°ìÍ÷¤Ç¤¹¡£¤½¤ì¤¾¤ì");
- if (extractAll)
- result+=decode("¤Î¥Í¡¼¥à¥¹¥Ú¡¼¥¹");
- else
- result+=decode("¤¬Â°¤·¤Æ¤¤¤ë¥Í¡¼¥à¥¹¥Ú¡¼¥¹");
- result+=decode("¤Ø¥ê¥ó¥¯¤·¤Æ¤¤¤Þ¤¹¡£");
- return result;
- }
- /*! This is used in LaTeX as the title of the chapter with the
- * index of all namespaces.
- */
- virtual QCString trNamespaceIndex()
- { return decode("¥Í¡¼¥à¥¹¥Ú¡¼¥¹º÷°ú"); }
-
- /*! This is used in LaTeX as the title of the chapter containing
- * the documentation of all namespaces.
- */
- virtual QCString trNamespaceDocumentation()
- { return decode("¥Í¡¼¥à¥¹¥Ú¡¼¥¹"); }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 0.49-990522
-//////////////////////////////////////////////////////////////////////////
-
- /*! This is used in the documentation before the list of all
- * namespaces in a file.
- */
- virtual QCString trNamespaces()
- { return decode("¥Í¡¼¥à¥¹¥Ú¡¼¥¹"); }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 0.49-990728
-//////////////////////////////////////////////////////////////////////////
-
- /*! This is put at the bottom of a class documentation page and is
- * followed by a list of files that were used to generate the page.
- */
- virtual QCString trGeneratedFromFiles(ClassDef::CompoundType compType,
- bool)
- { // here s is one of " Class", " Struct" or " Union"
- // single is true implies a single file
- QCString result=(QCString)decode("¤³¤Î");
- switch(compType)
- {
- case ClassDef::Class: result+=decode("¥¯¥é¥¹"); break;
- case ClassDef::Struct: result+=decode("¹½Â¤ÂÎ"); break;
- case ClassDef::Union: result+=decode("¶¦ÍÑÂÎ"); break;
- case ClassDef::Interface: result+=decode("¥¤¥ó¥¿¥Õ¥§¡¼¥¹"); break;
- case ClassDef::Protocol: result+=decode("¥×¥í¥È¥³¥ë"); break;
- case ClassDef::Category: result+=decode("¥«¥Æ¥´¥ê"); break;
- case ClassDef::Exception: result+=decode("Îã³°"); break;
- }
- result+=decode("¤ÎÀâÌÀ¤Ï¼¡¤Î¥Õ¥¡¥¤¥ë¤«¤éÀ¸À®¤µ¤ì¤Þ¤·¤¿:");
- return result;
- }
-
- /*! This is in the (quick) index as a link to the alphabetical compound
- * list.
- */
- virtual QCString trAlphabeticalList()
- { return decode("¥¢¥ë¥Õ¥¡¥Ù¥Ã¥È½ç°ìÍ÷"); }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 0.49-990901
-//////////////////////////////////////////////////////////////////////////
-
- /*! This is used as the heading text for the retval command. */
- virtual QCString trReturnValues()
- { return decode("Ìá¤êÃÍ"); }
-
- /*! This is in the (quick) index as a link to the main page (index.html)
- */
- virtual QCString trMainPage()
- { return decode("¥á¥¤¥ó¥Ú¡¼¥¸"); }
-
- /*! This is used in references to page that are put in the LaTeX
- * documentation. It should be an abbreviation of the word page.
- */
- virtual QCString trPageAbbreviation()
- { return decode("p."); }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 0.49-991003
-//////////////////////////////////////////////////////////////////////////
-
- virtual QCString trSources()
- {
- return decode("¥½¡¼¥¹");
- }
- virtual QCString trDefinedAtLineInSourceFile()
- {
- return decode(" @1 ¤Î @0 ¹Ô¤ÇÄêµÁ¤µ¤ì¤Æ¤¤¤Þ¤¹¡£");
- }
- virtual QCString trDefinedInSourceFile()
- {
- return decode(" @0 ¤ÇÄêµÁ¤µ¤ì¤Æ¤¤¤Þ¤¹¡£");
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.0.0
-//////////////////////////////////////////////////////////////////////////
-
- virtual QCString trDeprecated()
- {
- return decode("Èó¿ä¾©");
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.1.0
-//////////////////////////////////////////////////////////////////////////
-
- /*! this text is put before a collaboration diagram */
- virtual QCString trCollaborationDiagram(const char *clName)
- {
- return (QCString)clName+decode("¤Î¥³¥é¥Ü¥ì¡¼¥·¥ç¥ó¿Þ");
- }
- /*! this text is put before an include dependency graph */
- virtual QCString trInclDepGraph(const char *fName)
- {
- return (QCString)fName+decode("¤Î¥¤¥ó¥¯¥ë¡¼¥É°Í¸´Ø·¸¿Þ");
- }
- /*! header that is put before the list of constructor/destructors. */
- virtual QCString trConstructorDocumentation()
- {
- return decode("¥³¥ó¥¹¥È¥é¥¯¥¿¤È¥Ç¥¹¥È¥é¥¯¥¿");
- }
- /*! Used in the file documentation to point to the corresponding sources. */
- virtual QCString trGotoSourceCode()
- {
- return decode("¥½¡¼¥¹¥³¡¼¥É¤ò¸«¤ë¡£");
- }
- /*! Used in the file sources to point to the corresponding documentation. */
- virtual QCString trGotoDocumentation()
- {
- return decode("ÀâÌÀ¤ò¸«¤ë¡£");
- }
- /*! Text for the \\pre command */
- virtual QCString trPrecondition()
- {
- return decode("»öÁ°¾ò·ï");
- }
- /*! Text for the \\post command */
- virtual QCString trPostcondition()
- {
- return decode("»ö¸å¾ò·ï");
- }
- /*! Text for the \\invariant command */
- virtual QCString trInvariant()
- {
- return decode("ÉÔÊÑ");
- }
- /*! Text shown before a multi-line variable/enum initialization */
- virtual QCString trInitialValue()
- {
- return decode("½é´üÃÍ:");
- }
- /*! Text used the source code in the file index */
- virtual QCString trCode()
- {
- return decode("¥³¡¼¥É");
- }
- virtual QCString trGraphicalHierarchy()
- {
- return decode("¥¯¥é¥¹³¬ÁØ¿Þ");
- }
- virtual QCString trGotoGraphicalHierarchy()
- {
- return decode("¥¯¥é¥¹³¬ÁØ¿Þ¤ò¸«¤ë¡£");
- }
- virtual QCString trGotoTextualHierarchy()
- {
- return decode("¥¯¥é¥¹³¬ÁØ¿Þ¤ò¸«¤ë¡£");
- }
- virtual QCString trPageIndex()
- {
- return decode("¥Ú¡¼¥¸º÷°ú");
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.1.0
-//////////////////////////////////////////////////////////////////////////
-
- virtual QCString trNote()
- {
- return decode("³Ð¤¨½ñ¤­");
- }
- virtual QCString trPublicTypes()
- {
- return decode("Public ·¿");
- }
- virtual QCString trPublicAttribs()
- {
- if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
- {
- return decode("ÊÑ¿ô");
- }
- else
- {
- return decode("Public ÊÑ¿ô");
- }
- }
- virtual QCString trStaticPublicAttribs()
- {
- return decode("Static Public ÊÑ¿ô");
- }
- virtual QCString trProtectedTypes()
- {
- return decode("Protected ·¿");
- }
- virtual QCString trProtectedAttribs()
- {
- return decode("Protected ÊÑ¿ô");
- }
- virtual QCString trStaticProtectedAttribs()
- {
- return decode("Static Protected ÊÑ¿ô");
- }
- virtual QCString trPrivateTypes()
- {
- return decode("Private ·¿");
- }
- virtual QCString trPrivateAttribs()
- {
- return decode("Private ÊÑ¿ô");
- }
- virtual QCString trStaticPrivateAttribs()
- {
- return decode("Static Private ÊÑ¿ô");
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.1.3
-//////////////////////////////////////////////////////////////////////////
-
- /*! Used as a marker that is put before a todo item */
- virtual QCString trTodo()
- {
- return decode("TODO");
- }
- /*! Used as the header of the todo list */
- virtual QCString trTodoList()
- {
- return decode("TODO°ìÍ÷");
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.1.4
-//////////////////////////////////////////////////////////////////////////
-
- virtual QCString trReferencedBy()
- {
- return decode("»²¾È¸µ");
- }
- virtual QCString trRemarks()
- {
- return decode("°Õ¸«");
- }
- virtual QCString trAttention()
- {
- return decode("Ãí°Õ");
- }
- virtual QCString trInclByDepGraph()
- {
- return decode("¤³¤Î¥°¥é¥Õ¤Ï¡¢¤É¤Î¥Õ¥¡¥¤¥ë¤«¤éľÀÜ¡¢´ÖÀÜŪ¤Ë"
- "¥¤¥ó¥¯¥ë¡¼¥É¤µ¤ì¤Æ¤¤¤ë¤«¤ò¼¨¤·¤Æ¤¤¤Þ¤¹¡£");
- }
- virtual QCString trSince()
- {
- return decode("¤«¤é");
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.1.5
-//////////////////////////////////////////////////////////////////////////
-
- /*! title of the graph legend page */
- virtual QCString trLegendTitle()
- {
- return decode("¥°¥é¥Õ¤ÎËÞÎã");
- }
- /*! page explaining how the dot graph's should be interpreted */
- virtual QCString trLegendDocs()
- {
- return
- decode("¤³¤Î¥Ú¡¼¥¸¤Ç¤Ï¡¢doxygen ¤ÇÀ¸À®¤µ¤ì¤¿¥°¥é¥Õ¤ò¤É¤Î¤è¤¦¤Ë¤ß¤¿¤é¤è¤¤¤«¤ò"
- "ÀâÌÀ¤·¤Þ¤¹¡£<p>\n"
- "¼¡¤ÎÎã¤ò¹Í¤¨¤Æ¤ß¤Þ¤¹¡£\n"
- "\\code\n"
- "/*! ¾Êά¤µ¤ì¤Æ¸«¤¨¤Ê¤¤¥¯¥é¥¹ */\n"
- "class Invisible { };\n\n"
- "/*! ¾Êά¤µ¤ì¤¿¥¯¥é¥¹(·Ñ¾µ´Ø·¸¤Ï±£¤µ¤ì¤Æ¤¤¤ë) */\n"
- "class Truncated : public Invisible { };\n\n"
- "/* doxygen ¥³¥á¥ó¥È¤Ë¤è¤ë¥É¥­¥å¥á¥ó¥È¤¬¤Ê¤¤¥¯¥é¥¹ */\n"
- "class Undocumented { };\n\n"
- "/*! public ¤Ç·Ñ¾µ¤µ¤ì¤¿¥¯¥é¥¹ */\n"
- "class PublicBase : public Truncated { };\n\n"
- "/*! A template class */\n"
- "template<class T> class Templ { };\n\n"
- "/*! protected ¤Ç·Ñ¾µ¤µ¤ì¤¿¥¯¥é¥¹ */\n"
- "class ProtectedBase { };\n\n"
- "/*! private ¤Ç·Ñ¾µ¤µ¤ì¤¿¥¯¥é¥¹ */\n"
- "class PrivateBase { };\n\n"
- "/*! ·Ñ¾µ¤µ¤ì¤¿¥¯¥é¥¹¤Ç»È¤ï¤ì¤Æ¤¤¤ë¥¯¥é¥¹ */\n"
- "class Used { };\n\n"
- "/*! Ê£¿ô¤Î¥¯¥é¥¹¤ò·Ñ¾µ¤·¤Æ¤¤¤ë¾å°Ì¥¯¥é¥¹ */\n"
- "class Inherited : public PublicBase,\n"
- " protected ProtectedBase,\n"
- " private PrivateBase,\n"
- " public Undocumented,\n"
- " public Templ<int>\n"
- "{\n"
- " private:\n"
- " Used *m_usedClass;\n"
- "};\n"
- "\\endcode\n"
- "ÀßÄê¥Õ¥¡¥¤¥ëÃæ¤Ç¡¢¥¿¥° \\c MAX_DOT_GRAPH_HEIGHT ¤¬ 200 ¤Ë¥»¥Ã¥È¤µ¤ì¤¿"
- "¾ì¹ç¡¢¼¡¤Î¤è¤¦¤Ê¥°¥é¥Õ¤È¤Ê¤ê¤Þ¤¹¡£"
- "<p><center><img src=\"graph_legend."+Config_getEnum("DOT_IMAGE_FORMAT")+"\"></center>\n"
- "<p>\n"
- "¾å¤Î¥°¥é¥ÕÆâ¤Î¥Ü¥Ã¥¯¥¹¤Ë¤Ï¼¡¤Î¤è¤¦¤Ê°ÕÌ£¤¬¤¢¤ê¤Þ¤¹¡£\n"
- "<ul>\n"
- "<li>¹õ¤¯Åɤê¤Ä¤Ö¤µ¤ì¤¿¥Ü¥Ã¥¯¥¹¤Ï¡¢¤³¤Î¥°¥é¥Õ¤ËÂбþ¤¹¤ë¹½Â¤ÂΤ䥯¥é¥¹¤ò"
- "ɽ¤·¤Þ¤¹¡£\n"
- "<li>¹õÏȤΥܥ寥¹¤Ï¥É¥­¥å¥á¥ó¥È¤¬¤¢¤ë¹½Â¤ÂΤ䥯¥é¥¹¤òɽ¤·¤Þ¤¹¡£\n"
- "<li>³¥¿§¤ÎÏȤΥܥ寥¹¤Ï¥É¥­¥å¥á¥ó¥È¤¬¤Ê¤¤¹½Â¤ÂΤ䥯¥é¥¹¤òɽ¤·¤Þ¤¹¡£\n"
- "<li>ÀÖÏȤΥܥ寥¹¤Ï¥É¥­¥å¥á¥ó¥È¤¬¤¢¤ë¹½Â¤ÂΤ䥯¥é¥¹¤òɽ¤·¤Þ¤¹¤¬¡¢"
- "»ØÄꤵ¤ì¤¿¥µ¥¤¥º¤Ë¼ý¤Þ¤é¤Ê¤¤¤¿¤á¤Ë·Ñ¾µ¡¦Êñ´Þ´Ø·¸¤ò¤¹¤Ù¤Æ¿Þ¼¨¤¹¤ë"
- "¤³¤È¤¬¤Ç¤­¤Ê¤«¤Ã¤¿¤³¤È¤ò¼¨¤·¤Þ¤¹¡£"
- "</ul>\n"
- "Ìð°õ¤Ë¤Ï¼¡¤Î¤è¤¦¤Ê°ÕÌ£¤¬¤¢¤ê¤Þ¤¹¡£\n"
- "<ul>\n"
- "<li>ÀĤ¤Ìð°õ¤ÏÆó¤Ä¤Î¥¯¥é¥¹´Ö¤Î public ·Ñ¾µ´Ø·¸¤ò¼¨¤·¤Þ¤¹¡£\n"
- "<li>ÎФÎÌð°õ¤Ï protected ·Ñ¾µ´Ø·¸¤ò¼¨¤·¤Þ¤¹¡£\n"
- "<li>ÀÖ¤ÎÌð°õ¤Ï private ·Ñ¾µ´Ø·¸¤ò¼¨¤·¤Þ¤¹¡£\n"
- "<li>»ç¤ÎÇËÀþÌð°õ¤Ï¡¢¤½¤Î¥¯¥é¥¹¤¬Â¾¤Î¥¯¥é¥¹¤Ë´Þ¤Þ¤ì¤Æ¤¤¤¿¤ê¡¢"
- "ÍøÍѤµ¤ì¤Æ¤¤¤ë¤³¤È¤ò¼¨¤·¤Þ¤¹¡£¤Þ¤¿¡¢Ìð°õ¤¬»Ø¤·¤Æ¤¤¤ë¥¯¥é¥¹¤ä¹½Â¤ÂΤò"
- "¤É¤ÎÊÑ¿ô¤Ç¥¢¥¯¥»¥¹¤Ç¤­¤ë¤«¤òÌð°õ¤Î¥é¥Ù¥ë¤È¤·¤Æ¼¨¤·¤Æ¤¤¤Þ¤¹¡£\n"
- "</ul>\n");
- }
- /*! text for the link to the legend page */
- virtual QCString trLegend()
- {
- return decode("ËÞÎã");
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.2.0
-//////////////////////////////////////////////////////////////////////////
-
- /*! Used as a marker that is put before a test item */
- virtual QCString trTest()
- {
- return decode("¥Æ¥¹¥È");
- }
- /*! Used as the header of the test list */
- virtual QCString trTestList()
- {
- return decode("¥Æ¥¹¥È°ìÍ÷");
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.2.1
-//////////////////////////////////////////////////////////////////////////
-
- /*! Used as a section header for KDE-2 IDL methods */
- virtual QCString trDCOPMethods()
- {
- return decode("DCOP¥á¥½¥Ã¥É");
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.2.2
-//////////////////////////////////////////////////////////////////////////
-
- /*! Used as a section header for IDL properties */
- virtual QCString trProperties()
- {
- return decode("¥×¥í¥Ñ¥Æ¥£");
- }
- /*! Used as a section header for IDL property documentation */
- virtual QCString trPropertyDocumentation()
- {
- return decode("¥×¥í¥Ñ¥Æ¥£");
- }
-
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.2.4
-//////////////////////////////////////////////////////////////////////////
-
- /*! Used for Java interfaces in the summary section of Java packages */
- virtual QCString trInterfaces()
- {
- return decode("¥¤¥ó¥¿¡¼¥Õ¥§¡¼¥¹");
- }
- /*! Used for Java classes in the summary section of Java packages */
- virtual QCString trClasses()
- {
- if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
- {
- return decode("¥Ç¡¼¥¿¹½Â¤");
- }
- else
- {
- return decode("¥¯¥é¥¹");
- }
- }
- /*! Used as the title of a Java package */
- virtual QCString trPackage(const char *name)
- {
- return (QCString)decode("¥Ñ¥Ã¥±¡¼¥¸ ")+name;
- }
- /*! Title of the package index page */
- virtual QCString trPackageList()
- {
- return decode("¥Ñ¥Ã¥±¡¼¥¸°ìÍ÷");
- }
- /*! The description of the package index page */
- virtual QCString trPackageListDescription()
- {
- return decode("¤³¤ì¤Ï¥Ñ¥Ã¥±¡¼¥¸°ìÍ÷¤Ç¤¹¡£");
- }
- /*! The link name in the Quick links header for each page */
- virtual QCString trPackages()
- {
- return decode("¥Ñ¥Ã¥±¡¼¥¸");
- }
- /*! Used as a chapter title for Latex & RTF output */
- virtual QCString trPackageDocumentation()
- {
- return decode("¥Ñ¥Ã¥±¡¼¥¸");
- }
- /*! Text shown before a multi-line define */
- virtual QCString trDefineValue()
- {
- return decode("ÃÍ:");
- }
-
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.2.5
-//////////////////////////////////////////////////////////////////////////
-
- /*! Used as a marker that is put before a \\bug item */
- virtual QCString trBug()
- {
- return decode("¥Ð¥°");
- }
- /*! Used as the header of the bug list */
- virtual QCString trBugList()
- {
- return decode("¥Ð¥°°ìÍ÷");
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.2.6
-//////////////////////////////////////////////////////////////////////////
-
- /*! Used as ansicpg for RTF file
- *
- * The following table shows the correlation of Charset name, Charset Value and
- * <pre>
- * Codepage number:
- * Charset Name Charset Value(hex) Codepage number
- * ------------------------------------------------------
- * DEFAULT_CHARSET 1 (x01)
- * SYMBOL_CHARSET 2 (x02)
- * OEM_CHARSET 255 (xFF)
- * ANSI_CHARSET 0 (x00) 1252
- * RUSSIAN_CHARSET 204 (xCC) 1251
- * EE_CHARSET 238 (xEE) 1250
- * GREEK_CHARSET 161 (xA1) 1253
- * TURKISH_CHARSET 162 (xA2) 1254
- * BALTIC_CHARSET 186 (xBA) 1257
- * HEBREW_CHARSET 177 (xB1) 1255
- * ARABIC _CHARSET 178 (xB2) 1256
- * SHIFTJIS_CHARSET 128 (x80) 932
- * HANGEUL_CHARSET 129 (x81) 949
- * GB2313_CHARSET 134 (x86) 936
- * CHINESEBIG5_CHARSET 136 (x88) 950
- * </pre>
- *
- */
- virtual QCString trRTFansicp()
- {
- return "932";
- }
-
-
- /*! Used as ansicpg for RTF fcharset
- * \see trRTFansicp() for a table of possible values.
- */
- virtual QCString trRTFCharSet()
- {
- return "128";
- }
-
- /*! Used as header RTF general index */
- virtual QCString trRTFGeneralIndex()
- {
- return decode("º÷°ú");
- }
-
- /*! This is used for translation of the word that will possibly
- * be followed by a single name or by a list of names
- * of the category.
- */
- virtual QCString trClass(bool first_capital, bool singular)
- {
- first_capital = first_capital;
- singular = singular;
- QCString result(decode("¥¯¥é¥¹"));
- return result;
- }
-
- /*! This is used for translation of the word that will possibly
- * be followed by a single name or by a list of names
- * of the category.
- */
- virtual QCString trFile(bool first_capital, bool singular)
- {
- first_capital = first_capital;
- singular = singular;
- QCString result(decode("¥Õ¥¡¥¤¥ë"));
- return result;
- }
-
- /*! This is used for translation of the word that will possibly
- * be followed by a single name or by a list of names
- * of the category.
- */
- virtual QCString trNamespace(bool first_capital, bool singular)
- {
- first_capital = first_capital;
- singular = singular;
- QCString result(decode("¥Í¡¼¥à¥¹¥Ú¡¼¥¹"));
- return result;
- }
-
- /*! This is used for translation of the word that will possibly
- * be followed by a single name or by a list of names
- * of the category.
- */
- virtual QCString trGroup(bool first_capital, bool singular)
- {
- first_capital = first_capital;
- singular = singular;
- QCString result(decode("¥°¥ë¡¼¥×"));
- return result;
- }
-
- /*! This is used for translation of the word that will possibly
- * be followed by a single name or by a list of names
- * of the category.
- */
- virtual QCString trPage(bool first_capital, bool singular)
- {
- first_capital = first_capital;
- singular = singular;
- QCString result(decode("¥Ú¡¼¥¸"));
- return result;
- }
-
- /*! This is used for translation of the word that will possibly
- * be followed by a single name or by a list of names
- * of the category.
- */
- virtual QCString trMember(bool first_capital, bool singular)
- {
- first_capital = first_capital;
- singular = singular;
- QCString result(decode("¥á¥ó¥Ð"));
- return result;
- }
-
- /*! This is used for translation of the word that will possibly
- * be followed by a single name or by a list of names
- * of the category.
- */
- virtual QCString trField(bool first_capital, bool singular)
- {
- first_capital = first_capital;
- singular = singular;
- QCString result(decode("¥Õ¥£¡¼¥ë¥É"));
- return result;
- }
-
- /*! This is used for translation of the word that will possibly
- * be followed by a single name or by a list of names
- * of the category.
- */
- virtual QCString trGlobal(bool first_capital, bool singular)
- {
- first_capital = first_capital;
- singular = singular;
- QCString result(decode("¥°¥í¡¼¥Ð¥ë"));
- return result;
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.2.7
-//////////////////////////////////////////////////////////////////////////
-
- /*! This text is generated when the \\author command is used and
- * for the author section in man pages. */
- virtual QCString trAuthor(bool first_capital, bool singular)
- {
- first_capital = first_capital;
- singular = singular;
- QCString result(decode("ºî¼Ô"));
- return result;
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.2.11
-//////////////////////////////////////////////////////////////////////////
-
- /*! This text is put before the list of members referenced by a member
- */
- virtual QCString trReferences()
- {
- return decode("»²¾ÈÀè");
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.2.13
-//////////////////////////////////////////////////////////////////////////
-
- /*! used in member documentation blocks to produce a list of
- * members that are implemented by this one.
- */
- virtual QCString trImplementedFromList(int numEntries)
- {
- return trWriteList(numEntries)+decode("¤ò¼ÂÁõ¤·¤Æ¤¤¤Þ¤¹¡£");
- }
-
- /*! used in member documentation blocks to produce a list of
- * all members that implement this abstract member.
- */
- virtual QCString trImplementedInList(int numEntries)
- {
- return trWriteList(numEntries)+decode("¤Ç¼ÂÁõ¤µ¤ì¤Æ¤¤¤Þ¤¹¡£");
- }
-//////////////////////////////////////////////////////////////////////////
-// new since 1.2.16
-//////////////////////////////////////////////////////////////////////////
-
- /*! used in RTF documentation as a heading for the Table
- * of Contents.
- */
- virtual QCString trRTFTableOfContents()
- {
- return decode("Ìܼ¡");
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.2.17
-//////////////////////////////////////////////////////////////////////////
-
- /*! Used as the header of the list of item that have been
- * flagged deprecated
- */
- virtual QCString trDeprecatedList()
- {
- return decode("Èó¿ä¾©°ìÍ÷");
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.2.18
-//////////////////////////////////////////////////////////////////////////
-
- /*! Used as a header for declaration section of the events found in
- * a C# program
- */
- virtual QCString trEvents()
- {
- return decode("¥¤¥Ù¥ó¥È");
- }
- /*! Header used for the documentation section of a class' events. */
- virtual QCString trEventDocumentation()
- {
- return decode("¥¤¥Ù¥ó¥È");
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.3
-//////////////////////////////////////////////////////////////////////////
-
- /*! Used as a heading for a list of Java class types with package scope.
- */
- virtual QCString trPackageTypes()
- {
- return decode("¥Ñ¥Ã¥±¡¼¥¸Æâ¤Î·¿ÄêµÁ");
- }
- /*! Used as a heading for a list of Java class functions with package
- * scope.
- */
- virtual QCString trPackageMembers()
- {
- return decode("´Ø¿ô");
- }
- /*! Used as a heading for a list of static Java class functions with
- * package scope.
- */
- virtual QCString trStaticPackageMembers()
- {
- return decode("¥¹¥¿¥Æ¥£¥Ã¥¯´Ø¿ô");
- }
- /*! Used as a heading for a list of Java class variables with package
- * scope.
- */
- virtual QCString trPackageAttribs()
- {
- return decode("ÊÑ¿ô");
- }
- /*! Used as a heading for a list of static Java class variables with
- * package scope.
- */
- virtual QCString trStaticPackageAttribs()
- {
- return decode("¥¹¥¿¥Æ¥£¥Ã¥¯ÊÑ¿ô");
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.3.1
-//////////////////////////////////////////////////////////////////////////
-
- /*! Used in the quick index of a class/file/namespace member list page
- * to link to the unfiltered list of all members.
- */
- virtual QCString trAll()
- {
- return decode("Á´¤Æ");
- }
- /*! Put in front of the call graph for a function. */
- virtual QCString trCallGraph()
- {
- return decode("´Ø¿ô¤Î¸Æ¤Ó½Ð¤·¥°¥é¥Õ:");
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.3.3
-//////////////////////////////////////////////////////////////////////////
-
- /*! When the search engine is enabled this text is put in the header
- * of each page before the field where one can enter the text to search
- * for.
- */
- virtual QCString trSearchForIndex()
- {
- return decode("¸¡º÷");
- }
- /*! This string is used as the title for the page listing the search
- * results.
- */
- virtual QCString trSearchResultsTitle()
- {
- return decode("¸¡º÷·ë²Ì");
- }
- /*! This string is put just before listing the search results. The
- * text can be different depending on the number of documents found.
- * Inside the text you can put the special marker $num to insert
- * the number representing the actual number of search results.
- * The @a numDocuments parameter can be either 0, 1 or 2, where the
- * value 2 represents 2 or more matches. HTML markup is allowed inside
- * the returned string.
- */
- virtual QCString trSearchResults(int numDocuments)
- {
- if (numDocuments==0)
- {
- return decode("ÆþÎϤµ¤ì¤¿¾ò·ï¤Ë¥Þ¥Ã¥Á¤¹¤ë¥É¥­¥å¥á¥ó¥È¤¬¤¢¤ê¤Þ¤»¤ó¤Ç¤·¤¿.");
- }
- else if (numDocuments==1)
- {
- return decode("ÆþÎϤµ¤ì¤¿¾ò·ï¤Ë¥Þ¥Ã¥Á¤¹¤ë¥É¥­¥å¥á¥ó¥È¤¬ <b>1</b> ·ï¤ß¤Ä¤«¤ê¤Þ¤·¤¿.");
- }
- else
- {
- return decode("ÆþÎϤµ¤ì¤¿¾ò·ï¤Ë¥Þ¥Ã¥Á¤¹¤ë¥É¥­¥å¥á¥ó¥È¤¬ <b>$num</b> ·ï¤ß¤Ä¤«¤ê¤Þ¤·¤¿. "
- "ºÇ¤â°ìÃפ·¤Æ¤¤¤ë¤â¤Î¤«¤éɽ¼¨¤µ¤ì¤Þ¤¹.");
- }
- }
- /*! This string is put before the list of matched words, for each search
- * result. What follows is the list of words that matched the query.
- */
- virtual QCString trSearchMatches()
- {
- return decode("¥Þ¥Ã¥Á¤·¤¿Ã±¸ì:");
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.3.8
-//////////////////////////////////////////////////////////////////////////
-
- /*! This is used in HTML as the title of page with source code for file filename
- */
- virtual QCString trSourceFile(QCString& filename)
- {
- return filename + decode(" ¥½¡¼¥¹¥Õ¥¡¥¤¥ë");
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.3.9
-//////////////////////////////////////////////////////////////////////////
-
- /*! This is used as the name of the chapter containing the directory
- * hierarchy.
- */
- virtual QCString trDirIndex()
- { return decode("¥Ç¥£¥ì¥¯¥È¥êº÷°ú"); }
-
- /*! This is used as the name of the chapter containing the documentation
- * of the directories.
- */
- virtual QCString trDirDocumentation()
- { return decode("¥Ç¥£¥ì¥¯¥È¥ê¹½À®"); }
-
- /*! This is used as the title of the directory index and also in the
- * Quick links of an HTML page, to link to the directory hierarchy.
- */
- virtual QCString trDirectories()
- { return decode("¥Ç¥£¥ì¥¯¥È¥ê"); }
-
- /*! This returns a sentences that introduces the directory hierarchy.
- * and the fact that it is sorted alphabetically per level
- */
- virtual QCString trDirDescription()
- { return decode("¤³¤Î¥Ç¥£¥ì¥¯¥È¥ê°ìÍ÷¤Ï¤ª¤ª¤Þ¤«¤Ë¤Ï¥½¡¼¥È¤µ¤ì¤Æ¤¤¤Þ¤¹¤¬¡¢"
- "´°Á´¤Ë¥¢¥ë¥Õ¥¡¥Ù¥Ã¥È½ç¤Ç¥½¡¼¥È¤µ¤ì¤Æ¤Ï¤¤¤Þ¤»¤ó¡£");
- }
-
- /*! This returns the title of a directory page. The name of the
- * directory is passed via \a dirName.
- */
- virtual QCString trDirReference(const char *dirName)
- { QCString result=dirName; result+=decode(" ¥Ç¥£¥ì¥¯¥È¥ê¥ê¥Õ¥¡¥ì¥ó¥¹"); return result; }
-
- /*! This returns the word directory with or without starting capital
- * (\a first_capital) and in sigular or plural form (\a singular).
- */
- virtual QCString trDir(bool, bool)
- {
- return decode("¥Ç¥£¥ì¥¯¥È¥ê");
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.4.1
-//////////////////////////////////////////////////////////////////////////
-
- /*! This text is added to the documentation when the \\overload command
- * is used for a overloaded function.
- */
- virtual QCString trOverloadText()
- {
- return decode("¤³¤ì¤Ï¥ª¡¼¥Ð¡¼¥í¡¼¥É¤µ¤ì¤¿¥á¥ó¥Ð´Ø¿ô¤Ç¤¹¡£"
- "ÍøÊØÀ­¤Î¤¿¤á¤ËÍÑ°Õ¤µ¤ì¤Æ¤¤¤Þ¤¹¡£"
- "¸µ¤Î´Ø¿ô¤È¤Î°ã¤¤¤Ï°ú¤­¿ô¤Î¤ß¤Ç¤¹¡£");
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.4.6
-//////////////////////////////////////////////////////////////////////////
-
- /*! This is used to introduce a caller (or called-by) graph */
- virtual QCString trCallerGraph()
- {
- // return "Here is the caller graph for this function:";
- return decode("¸Æ½Ð¤·¥°¥é¥Õ:");
- }
-
- /*! This is used in the documentation of a file/namespace before the list
- * of documentation blocks for enumeration values
- */
- virtual QCString trEnumerationValueDocumentation()
- { return decode("Îóµó·¿"); }
-
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.5.4 (mainly for Fortran)
-//////////////////////////////////////////////////////////////////////////
-
- /*! header that is put before the list of member subprograms (Fortran). */
- virtual QCString trMemberFunctionDocumentationFortran()
- { return decode("´Ø¿ô/¥µ¥Ö¥ë¡¼¥Á¥ó"); }
-
- /*! This is put above each page as a link to the list of annotated data types (Fortran). */
- virtual QCString trCompoundListFortran()
- { return decode("¥Ç¡¼¥¿·¿"); }
-
- /*! This is put above each page as a link to all members of compounds (Fortran). */
- virtual QCString trCompoundMembersFortran()
- { return decode("¥Ç¡¼¥¿¥Õ¥£¡¼¥ë¥É"); }
-
- /*! This is an introduction to the annotated compound list (Fortran). */
- virtual QCString trCompoundListDescriptionFortran()
- { return decode("¤³¤ì¤Ï¥Ç¡¼¥¿·¿¤Î°ìÍ÷¤Ç¤¹"); }
-
- /*! This is an introduction to the page with all data types (Fortran). */
- virtual QCString trCompoundMembersDescriptionFortran(bool extractAll)
- {
- QCString result=decode("¤³¤ì¤Ï");
- result+=decode("¥Õ¥£¡¼¥ë¥É¤Î°ìÍ÷¤Ç¤¹¡£¤½¤ì¤¾¤ì");
- if (extractAll)
- {
- result+=decode("¤¬Â°¤·¤Æ¤¤¤ë¥Ç¡¼¥¿·¿");
- }
- result+=decode("¤ÎÀâÌÀ¤Ø¥ê¥ó¥¯¤·¤Æ¤¤¤Þ¤¹¡£");
- return result;
- }
-
- /*! This is used in LaTeX as the title of the chapter with the
- * annotated compound index (Fortran).
- */
- virtual QCString trCompoundIndexFortran()
- { return decode("¥Ç¡¼¥¿·¿º÷°ú"); }
-
- /*! This is used in LaTeX as the title of the chapter containing
- * the documentation of all data types (Fortran).
- */
- virtual QCString trTypeDocumentation()
- { return decode("¥Ç¡¼¥¿·¿"); }
-
- /*! This is used in the documentation of a file as a header before the
- * list of (global) subprograms (Fortran).
- */
- virtual QCString trSubprograms()
- { return decode("´Ø¿ô/¥µ¥Ö¥ë¡¼¥Á¥ó"); }
-
-
- /*! This is used in the documentation of a file/namespace before the list
- * of documentation blocks for subprograms (Fortran)
- */
- virtual QCString trSubprogramDocumentation()
- { return decode("´Ø¿ô/¥µ¥Ö¥ë¡¼¥Á¥ó"); }
-
- /*! This is used in the documentation of a file/namespace/group before
- * the list of links to documented compounds (Fortran)
- */
- virtual QCString trDataTypes()
- { return decode("¥Ç¡¼¥¿·¿"); }
-
- /*! used as the title of page containing all the index of all modules (Fortran). */
- virtual QCString trModulesList()
- { return decode("¥â¥¸¥å¡¼¥ë°ìÍ÷"); }
-
- /*! used as an introduction to the modules list (Fortran) */
- virtual QCString trModulesListDescription(bool extractAll)
- {
- QCString result=decode("¤³¤ì¤Ï");
- if (!extractAll) result+=decode("À¸À®¤µ¤ì¤¿");
- result+=decode("¥â¥¸¥å¡¼¥ë°ìÍ÷¤Ç¤¹");
- return result;
- }
-
- /*! used as the title of the HTML page of a module/type (Fortran) */
- virtual QCString trCompoundReferenceFortran(const char *clName,
- ClassDef::CompoundType compType,
- bool isTemplate)
- {
- QCString result="";
- switch(compType)
- {
- case ClassDef::Class: result+=decode("¥â¥¸¥å¡¼¥ë "); break;
- case ClassDef::Struct: result+=decode("TYPE "); break;
- case ClassDef::Union: result+=decode("¶¦ÍÑÂÎ "); break;
- case ClassDef::Interface: result+=decode("¥¤¥ó¥¿¡¼¥Õ¥§¡¼¥¹ "); break;
- case ClassDef::Protocol: result+=decode("¥×¥í¥È¥³¥ë "); break;
- case ClassDef::Category: result+=decode("¥«¥Æ¥´¥ê "); break;
- case ClassDef::Exception: result+=decode("Îã³° "); break;
- }
- if (isTemplate) result += decode("¥Æ¥ó¥×¥ì¡¼¥È ");
- result+=(QCString)clName;
- return result;
- }
- /*! used as the title of the HTML page of a module (Fortran) */
- virtual QCString trModuleReference(const char *namespaceName)
- {
- QCString result=namespaceName;
- result+=decode("¥â¥¸¥å¡¼¥ë");
- return result;
- }
-
- /*! This is put above each page as a link to all members of modules. (Fortran) */
- virtual QCString trModulesMembers()
- { return decode("¥â¥¸¥å¡¼¥ë¥á¥ó¥Ð"); }
-
- /*! This is an introduction to the page with all modules members (Fortran) */
- virtual QCString trModulesMemberDescription(bool extractAll)
- {
- QCString result=decode("¤³¤ì¤Ï¥â¥¸¥å¡¼¥ë¥á¥ó¥Ð°ìÍ÷¤Ç¤¹¡£¤½¤ì¤¾¤ì ");
- if (extractAll)
- {
- result+=decode("°¤·¤Æ¤¤¤ë¥â¥¸¥å¡¼¥ë");
- }
- result+=decode("¤ÎÀâÌÀ¤Ø¥ê¥ó¥¯¤·¤Æ¤¤¤Þ¤¹¡£");
- return result;
- }
-
- /*! This is used in LaTeX as the title of the chapter with the
- * index of all modules (Fortran).
- */
- virtual QCString trModulesIndex()
- { return decode("¥â¥¸¥å¡¼¥ëº÷°ú"); }
-
- /*! This is used for translation of the word that will possibly
- * be followed by a single name or by a list of names
- * of the category.
- */
- virtual QCString trModule(bool /*first_capital*/, bool /*singular*/)
- {
- return decode("¥â¥¸¥å¡¼¥ë");
- }
- /*! This is put at the bottom of a module documentation page and is
- * followed by a list of files that were used to generate the page.
- */
- virtual QCString trGeneratedFromFilesFortran(ClassDef::CompoundType compType,
- bool /*single*/)
- { // here s is one of " Module", " Struct" or " Union"
- // single is true implies a single file
- QCString result="";
- switch(compType)
- {
- case ClassDef::Class: result+=decode("¥â¥¸¥å¡¼¥ë"); break;
- case ClassDef::Struct: result+=decode("TYPE"); break;
- case ClassDef::Union: result+=decode("¶¦ÍÑÂÎ"); break;
- case ClassDef::Interface: result+=decode("¥¤¥ó¥¿¡¼¥Õ¥§¡¼¥¹"); break;
- case ClassDef::Protocol: result+=decode("¥×¥í¥È¥³¥ë"); break;
- case ClassDef::Category: result+=decode("¥«¥Æ¥´¥ê"); break;
- case ClassDef::Exception: result+=decode("Îã³°"); break;
- }
- result+=decode(decode("¤ÎÀâÌÀ¤Ï¼¡¤Î¥Õ¥¡¥¤¥ë¤«¤éÀ¸À®¤µ¤ì¤Þ¤·¤¿:"));
- return result;
- }
- /*! This is used for translation of the word that will possibly
- * be followed by a single name or by a list of names
- * of the category.
- */
- virtual QCString trType(bool /*first_capital*/, bool /*singular*/)
- {
- QCString result = decode("TYPE");
- return result;
- }
- /*! This is used for translation of the word that will possibly
- * be followed by a single name or by a list of names
- * of the category.
- */
- virtual QCString trSubprogram(bool /*first_capital*/, bool /*singular*/)
- {
- QCString result = decode("¥µ¥Ö¥×¥í¥°¥é¥à");
- return result;
- }
-
- /*! C# Type Constraint list */
- virtual QCString trTypeConstraints()
- {
- return decode("·¿À©Ìó");
- }
-
-};
-
-#endif
diff --git a/trunk/src/translator_ke.h b/trunk/src/translator_ke.h
deleted file mode 100644
index 4874a5c..0000000
--- a/trunk/src/translator_ke.h
+++ /dev/null
@@ -1,59 +0,0 @@
-/******************************************************************************
- *
- *
- *
- * Copyright (C) 1997-2012 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.
- *
- */
-
-//
-// Update:
-//
-// 2004.12.22 (SooYoung Jung: jung5000@gmail.com)
-// - LaTex and RTF were not generated correctly.
-// Corrected trRTFansicp and trRTFCharSet.
-// It was wrong.
-//
-//
-
-#ifndef TRANSLATOR_KE_H
-#define TRANSLATOR_KE_H
-
-class TranslatorKoreanEn : public TranslatorEnglish
-{
- public:
- virtual QCString idLanguage()
- { return "korean-en"; }
- virtual QCString latexLanguageSupportCommand()
- {
- return "\\usepackage{hfont}\n";
- }
- /*! returns the name of the package that is included by LaTeX */
- virtual QCString idLanguageCharset()
- {
- return "euc-kr";
- }
- virtual QCString trRTFansicp()
- {
- return "949";
- }
-
- /*! Used as ansicpg for RTF fcharset
- * \see trRTFansicp() for a table of possible values.
- */
- virtual QCString trRTFCharSet()
- {
- return "129";
- }
-};
-
-#endif
diff --git a/trunk/src/translator_kr.h b/trunk/src/translator_kr.h
deleted file mode 100644
index acaf8ee..0000000
--- a/trunk/src/translator_kr.h
+++ /dev/null
@@ -1,1889 +0,0 @@
-/******************************************************************************
- *
- *
- *
- * Copyright (C) 1997-2012 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.
- *
- */
-
-#ifndef TRANSLATOR_KR_H
-#define TRANSLATOR_KR_H
-
-
-/* Korean translators
- * doxygen-svn
- * * fly1004@gmail.com
- * doxygen-1.5.3
- * * Astromaker(http://ngps.net/)
- * * gpgiki(http://www.gpgstudy.com/gpgiki/)
- * doxygen-1.2.11
- * * ryk */
-
-/*!
- When defining a translator class for the new language, follow
- the description in the documentation. One of the steps says
- that you should copy the translator_en.h (this) file to your
- translator_xx.h new file. Your new language should use the
- Translator class as the base class. This means that you need to
- implement exactly the same (pure virtual) methods as the
- TranslatorEnglish does. Because of this, it is a good idea to
- start with the copy of TranslatorEnglish and replace the strings
- one by one.
-
- It is not necessary to include "translator.h" or
- "translator_adapter.h" here. The files are included in the
- language.cpp correctly. Not including any of the mentioned
- files frees the maintainer from thinking about whether the
- first, the second, or both files should be included or not, and
- why. This holds namely for localized translators because their
- base class is changed occasionaly to adapter classes when the
- Translator class changes the interface, or back to the
- Translator class (by the local maintainer) when the localized
- translator is made up-to-date again.
-*/
-class TranslatorKorean : public TranslatorAdapter_1_7_5
-{
- protected:
- friend class TranslatorAdapterBase;
- virtual ~TranslatorKorean() {}
-
- public:
-
- // --- Language control methods -------------------
-
- /*! Used for identification of the language. The identification
- * should not be translated. It should be replaced by the name
- * of the language in English using lower-case characters only
- * (e.g. "czech", "japanese", "russian", etc.). It should be equal to
- * the identification used in language.cpp.
- */
- virtual QCString idLanguage()
- { return "korean"; }
-
- /*! Used to get the LaTeX command(s) for the language support.
- * This method should return string with commands that switch
- * LaTeX to the desired language. For example
- * <pre>"\\usepackage[german]{babel}\n"
- * </pre>
- * or
- * <pre>"\\usepackage{polski}\n"
- * "\\usepackage[latin2]{inputenc}\n"
- * "\\usepackage[T1]{fontenc}\n"
- * </pre>
- *
- * The English LaTeX does not use such commands. Because of this
- * the empty string is returned in this implementation.
- */
- virtual QCString latexLanguageSupportCommand()
- {
- // I'm not sure what this should be.
- // When I figure it out, I'll update this.
- // see http://www.ktug.or.kr/jsboard/read.php?table=operate&no=4422&page=1
- return "\\usepackage{hfont}\n";
- }
-
- /*! return the language charset. This will be used for the HTML output */
- virtual QCString idLanguageCharset()
- {
- return "euc-kr";
- }
-
- // --- Language translation methods -------------------
-
- /*! used in the compound documentation before a list of related functions. */
- virtual QCString trRelatedFunctions()
- { return "°ü·ÃµÈ ÇÔ¼öµé"; }
-
- /*! subscript for the related functions. */
- virtual QCString trRelatedSubscript()
- { return "(´ÙÀ½Àº ¸â¹ö ÇÔ¼öµéÀÌ ¾Æ´Õ´Ï´Ù. ÁÖÀÇÇϽʽÿÀ.)"; }
-
- /*! header that is put before the detailed description of files, classes and namespaces. */
- virtual QCString trDetailedDescription()
- { return "»ó¼¼ÇÑ ¼³¸í"; }
-
- /*! header that is put before the list of typedefs. */
- virtual QCString trMemberTypedefDocumentation()
- { return "¸â¹ö ŸÀÔÁ¤ÀÇ ¹®¼­È­"; }
-
- /*! header that is put before the list of enumerations. */
- virtual QCString trMemberEnumerationDocumentation()
- { return "¸â¹ö ¿­°ÅÇü ¹®¼­È­"; }
-
- /*! header that is put before the list of member functions. */
- virtual QCString trMemberFunctionDocumentation()
- { return "¸â¹ö ÇÔ¼ö ¹®¼­È­"; }
-
- /*! header that is put before the list of member attributes. */
- virtual QCString trMemberDataDocumentation()
- {
- if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
- {
- return "ÇÊµå ¹®¼­È­";
- }
- else
- {
- return "¸â¹ö µ¥ÀÌŸ ¹®¼­È­";
- }
- }
-
- /*! this is the text of a link put after brief descriptions. */
- virtual QCString trMore()
- { return "´õ ÀÚ¼¼È÷ ..."; }
-
- /*! put in the class documentation */
- virtual QCString trListOfAllMembers()
- { return "¸ðµç ¸â¹ö ¸ñ·Ï"; }
-
- /*! used as the title of the "list of all members" page of a class */
- virtual QCString trMemberList()
- { return "¸â¹ö ¸ñ·Ï"; }
-
- /*! this is the first part of a sentence that is followed by a class name */
- virtual QCString trThisIsTheListOfAllMembers()
- { return "´ÙÀ½¿¡ ´ëÇÑ ¸ðµç ¸â¹öÀÇ ¸ñ·ÏÀÔ´Ï´Ù : "; }
-
- /*! this is the remainder of the sentence after the class name */
- virtual QCString trIncludingInheritedMembers()
- { return " (¸ðµç »ó¼ÓµÈ ¸â¹öµéµµ Æ÷ÇÔÇÕ´Ï´Ù.)"; }
-
- /*! this is put at the author sections at the bottom of man pages.
- * parameter s is name of the project name.
- */
- virtual QCString trGeneratedAutomatically(const char *s)
- { QCString result="¼Ò½º ÄÚµå·ÎºÎÅÍ ";
- if (s) result+=s+(QCString)"¸¦ À§ÇØ ";
- result+="Doxygen¿¡ ÀÇÇØ ÀÚµ¿À¸·Î »ý¼ºµÊ.";
- return result;
- }
-
- /*! put after an enum name in the list of all members */
- virtual QCString trEnumName()
- { return "¿­°ÅÇü À̸§"; }
-
- /*! put after an enum value in the list of all members */
- virtual QCString trEnumValue()
- { return "¿­°ÅÇü °ª"; }
-
- /*! put after an undocumented member in the list of all members */
- virtual QCString trDefinedIn()
- { return "´ÙÀ½¿¡¼­ Á¤ÀÇµÊ :"; }
-
- // quick reference sections
-
- /*! This is put above each page as a link to the list of all groups of
- * compounds or files (see the \\group command).
- */
- virtual QCString trModules()
- { return "¸ðµâ"; }
-
- /*! This is put above each page as a link to the class hierarchy */
- virtual QCString trClassHierarchy()
- { return "Ŭ·¡½º °èÅëµµ"; }
-
- /*! This is put above each page as a link to the list of annotated classes */
- virtual QCString trCompoundList()
- {
- if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
- {
- return "µ¥ÀÌŸ ±¸Á¶";
- }
- else
- {
- return "Ŭ·¡½º ¸ñ·Ï";
- }
- }
-
- /*! This is put above each page as a link to the list of documented files */
- virtual QCString trFileList()
- { return "ÆÄÀÏ ¸ñ·Ï"; }
-
- /*! This is put above each page as a link to all members of compounds. */
- virtual QCString trCompoundMembers()
- {
- if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
- {
- return "µ¥ÀÌŸ Çʵå";
- }
- else
- {
- return "Ŭ·¡½º ¸â¹ö";
- }
- }
-
- /*! This is put above each page as a link to all members of files. */
- virtual QCString trFileMembers()
- {
- if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
- {
- return "Àü¿ª";
- }
- else
- {
- return "ÆÄÀÏ ¸â¹ö";
- }
- }
-
- /*! This is put above each page as a link to all related pages. */
- virtual QCString trRelatedPages()
- { return "°ü·ÃµÈ ÆäÀÌÁö"; }
-
- /*! This is put above each page as a link to all examples. */
- virtual QCString trExamples()
- { return "¿¹Á¦"; }
-
- /*! This is put above each page as a link to the search engine. */
- virtual QCString trSearch()
- { return "°Ë»ö"; }
-
- /*! This is an introduction to the class hierarchy. */
- virtual QCString trClassHierarchyDescription()
- { return "ÀÌ »ó¼Ó ¸ñ·ÏÀº ¿ÏÀüÇÏÁø ¾ÊÁö¸¸ ¾ËÆĺª¼øÀ¸·Î ´ë·«ÀûÀ¸·Î Á¤·ÄµÇ¾îÀÖ½À´Ï´Ù.:";
- }
-
- /*! This is an introduction to the list with all files. */
- virtual QCString trFileListDescription(bool extractAll)
- {
- QCString result="´ÙÀ½Àº ";
- if (!extractAll) result+="¹®¼­È­µÈ ";
- result+="¸ðµç ÆÄÀÏ¿¡ ´ëÇÑ ¸ñ·ÏÀÔ´Ï´Ù. (°£·«ÇÑ ¼³¸í¸¸À» º¸¿©ÁÝ´Ï´Ù) :";
- return result;
- }
-
- /*! This is an introduction to the annotated compound list. */
- virtual QCString trCompoundListDescription()
- {
-
- if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
- {
- return "´ÙÀ½Àº µ¥ÀÌŸ ±¸Á¶µéÀÔ´Ï´Ù. (°£·«ÇÑ ¼³¸í¸¸À» º¸¿©ÁÝ´Ï´Ù) :";
- }
- else
- {
- return "´ÙÀ½Àº Ŭ·¡½º, ±¸Á¶Ã¼, °ø¿ëü ±×¸®°í ÀÎÅÍÆäÀ̽ºµéÀÔ´Ï´Ù. "
- "(°£·«ÇÑ ¼³¸í¸¸À» º¸¿©ÁÝ´Ï´Ù) :";
- }
- }
-
- /*! This is an introduction to the page with all class members. */
- virtual QCString trCompoundMembersDescription(bool extractAll)
- {
- QCString result="´ÙÀ½Àº ";
- if (!extractAll)
- {
- result+="¹®¼­È­µÈ ";
- }
- if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
- {
- result+="¸ðµç ±¸Á¶Ã¼¿Í °ø¿ëüÀÇ Çʵåµé";
- }
- else
- {
- result+="¸ðµç Ŭ·¡½º ¸â¹öµé";
- }
- result+="ÀÇ ¸ñ·ÏÀÔ´Ï´Ù. ";
-
- if (!extractAll)
- {
- if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
- {
- result+="°¢ ÇʵåµéÀº ÇØ´ç Çʵ忡 ´ëÇÑ ±¸Á¶Ã¼¿Í °ø¿ëüÀÇ "
- "¹®¼­È­ ÆäÀÌÁöÀÇ ¸µÅ©¸¦ °¡Áö°í ÀÖ½À´Ï´Ù. :";
- }
- else
- {
- result+="°¢ ¸â¹öµéÀº ÇØ´ç ¸â¹ö¿¡ ´ëÇÑ Å¬·¡½ºÀÇ ¹®¼­È­ ÆäÀÌÁöÀÇ "
- "¸µÅ©¸¦ °¡Áö°í ÀÖ½À´Ï´Ù. :";
- }
- }
- else
- {
- if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
- {
- result+="°¢ ÇʵåµéÀº ÇØ´ç Çʵ尡 ¼ÓÇØ ÀÖ´Â ±¸Á¶Ã¼¿Í °ø¿ëü¿¡ "
- "´ëÇÑ ¸µÅ©¸¦ °¡Áö°í ÀÖ½À´Ï´Ù. :";
- }
- else
- {
- result+="°¢ ¸â¹öµéÀº ÇØ´ç ¸â¹ö°¡ ¼ÓÇØ Àִ Ŭ·¡½º¿¡ ´ëÇÑ "
- "¸µÅ©¸¦ °¡Áö°í ÀÖ½À´Ï´Ù. :";
- }
- }
- return result;
- }
-
- /*! This is an introduction to the page with all file members. */
- virtual QCString trFileMembersDescription(bool extractAll)
- {
- QCString result="´ÙÀ½Àº ";
- if (!extractAll) result+="¹®¼­È­µÈ ";
-
- if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
- {
- result+="¸ðµç ÇÔ¼ö, º¯¼ö, ¸ÅÅ©·Î, ¿­°ÅÇü, ŸÀÔÁ¤Àǵé";
- }
- else
- {
- result+="ÆÄÀÏ ¸â¹öµé";
- }
- result+="ÀÇ ¸ñ·ÏÀÔ´Ï´Ù. ";
-
- result+="°¢ Ç׸ñÀº ";
- if (extractAll)
- result+="±×µéÀÌ ¼ÓÇÑ ÆÄÀÏ ÆäÀÌÁöÀÇ ¸µÅ©¸¦ °¡Áö°í ÀÖ½À´Ï´Ù. :";
- else
- result+="±×µé¿¡ ´ëÇÑ ¹®¼­È­ ÆäÀÌÁöÀÇ ¸µÅ©¸¦ °¡Áö°í ÀÖ½À´Ï´Ù. :";
- return result;
- }
-
- /*! This is an introduction to the page with the list of all examples */
- virtual QCString trExamplesDescription()
- { return "´ÙÀ½Àº ¸ðµç ¿¹Á¦µéÀÇ ¸ñ·ÏÀÔ´Ï´Ù.:"; }
-
- /*! This is an introduction to the page with the list of related pages */
- virtual QCString trRelatedPagesDescription()
- { return "´ÙÀ½Àº °ü·ÃµÈ ¸ðµç ¹®¼­È­ ÆäÀÌÁöµéÀÇ ¸ñ·ÏÀÔ´Ï´Ù.:"; }
-
- /*! This is an introduction to the page with the list of class/file groups */
- virtual QCString trModulesDescription()
- { return "´ÙÀ½Àº ¸ðµç ¸ðµâµéÀÇ ¸ñ·ÏÀÔ´Ï´Ù.:"; }
-
- // index titles (the project name is prepended for these)
-
- /*! This is used in HTML as the title of index.html. */
- virtual QCString trDocumentation()
- { return "¹®¼­È­"; }
-
- /*! This is used in LaTeX as the title of the chapter with the
- * index of all groups.
- */
- virtual QCString trModuleIndex()
- { return "¸ðµâ »öÀÎ"; }
-
- /*! This is used in LaTeX as the title of the chapter with the
- * class hierarchy.
- */
- virtual QCString trHierarchicalIndex()
- { return "°èÅëµµ »öÀÎ"; }
-
- /*! This is used in LaTeX as the title of the chapter with the
- * annotated compound index.
- */
- virtual QCString trCompoundIndex()
- {
- if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
- {
- return "µ¥ÀÌŸ ±¸Á¶ »öÀÎ";
- }
- else
- {
- return "Ŭ·¡½º »öÀÎ";
- }
- }
-
- /*! This is used in LaTeX as the title of the chapter with the
- * list of all files.
- */
- virtual QCString trFileIndex()
- { return "ÆÄÀÏ »öÀÎ"; }
-
- /*! This is used in LaTeX as the title of the chapter containing
- * the documentation of all groups.
- */
- virtual QCString trModuleDocumentation()
- { return "¸ðµâ ¹®¼­È­"; }
-
- /*! This is used in LaTeX as the title of the chapter containing
- * the documentation of all classes, structs and unions.
- */
- virtual QCString trClassDocumentation()
- {
- if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
- {
- return "µ¥ÀÌŸ ±¸Á¶ ¹®¼­È­";
- }
- else
- {
- return "Ŭ·¡½º ¹®¼­È­";
- }
- }
-
- /*! This is used in LaTeX as the title of the chapter containing
- * the documentation of all files.
- */
- virtual QCString trFileDocumentation()
- { return "ÆÄÀÏ ¹®¼­È­"; }
-
- /*! This is used in LaTeX as the title of the chapter containing
- * the documentation of all examples.
- */
- virtual QCString trExampleDocumentation()
- { return "¿¹Á¦ ¹®¼­È­"; }
-
- /*! This is used in LaTeX as the title of the chapter containing
- * the documentation of all related pages.
- */
- virtual QCString trPageDocumentation()
- { return "ÆäÀÌÁö ¹®¼­È­"; }
-
- /*! This is used in LaTeX as the title of the document */
- virtual QCString trReferenceManual()
- { return "ÂüÁ¶ ¸Å´º¾ó"; }
-
- /*! This is used in the documentation of a file as a header before the
- * list of defines
- */
- virtual QCString trDefines()
- { return "¸ÅÅ©·Î"; }
-
- /*! This is used in the documentation of a file as a header before the
- * list of function prototypes
- */
- virtual QCString trFuncProtos()
- { return "ÇÔ¼ö ¿øÇü"; }
-
- /*! This is used in the documentation of a file as a header before the
- * list of typedefs
- */
- virtual QCString trTypedefs()
- { return "ŸÀÔÁ¤ÀÇ"; }
-
- /*! This is used in the documentation of a file as a header before the
- * list of enumerations
- */
- virtual QCString trEnumerations()
- { return "¿­°ÅÇü ŸÀÔ"; }
-
- /*! This is used in the documentation of a file as a header before the
- * list of (global) functions
- */
- virtual QCString trFunctions()
- { return "ÇÔ¼ö"; }
-
- /*! This is used in the documentation of a file as a header before the
- * list of (global) variables
- */
- virtual QCString trVariables()
- { return "º¯¼ö"; }
-
- /*! This is used in the documentation of a file as a header before the
- * list of (global) variables
- */
- virtual QCString trEnumerationValues()
- { return "¿­°ÅÇü ¸â¹ö"; }
-
- /*! This is used in the documentation of a file before the list of
- * documentation blocks for defines
- */
- virtual QCString trDefineDocumentation()
- { return "¸ÅÅ©·Î ¹®¼­È­"; }
-
- /*! This is used in the documentation of a file/namespace before the list
- * of documentation blocks for function prototypes
- */
- virtual QCString trFunctionPrototypeDocumentation()
- { return "ÇÔ¼ö ¿øÇü ¹®¼­È­"; }
-
- /*! This is used in the documentation of a file/namespace before the list
- * of documentation blocks for typedefs
- */
- virtual QCString trTypedefDocumentation()
- { return "ŸÀÔÁ¤ÀÇ ¹®¼­È­"; }
-
- /*! This is used in the documentation of a file/namespace before the list
- * of documentation blocks for enumeration types
- */
- virtual QCString trEnumerationTypeDocumentation()
- { return "¿­°ÅÇü ŸÀÔ ¹®¼­È­"; }
-
- /*! This is used in the documentation of a file/namespace before the list
- * of documentation blocks for functions
- */
- virtual QCString trFunctionDocumentation()
- { return "ÇÔ¼ö ¹®¼­È­"; }
-
- /*! This is used in the documentation of a file/namespace before the list
- * of documentation blocks for variables
- */
- virtual QCString trVariableDocumentation()
- { return "º¯¼ö ¹®¼­È­"; }
-
- /*! This is used in the documentation of a file/namespace/group before
- * the list of links to documented compounds
- */
- virtual QCString trCompounds()
- {
- if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
- {
- return "µ¥ÀÌŸ ±¸Á¶";
- }
- else
- {
- return "Ŭ·¡½º";
- }
- }
-
- /*! This is used in the standard footer of each page and indicates when
- * the page was generated
- */
- virtual QCString trGeneratedAt(const char *date,const char *projName)
- {
- QCString result=(QCString)"»ý¼º½Ã°£ : "+date;
- if (projName) result+=(QCString)", ÇÁ·ÎÁ§Æ®¸í : "+projName;
- result+=(QCString)", »ý¼ºÀÚ : ";
- return result;
- }
- /*! This is part of the sentence used in the standard footer of each page.
- */
- virtual QCString trWrittenBy()
- {
- return "ÀÛ¼ºÀÚ : ";
- }
-
- /*! this text is put before a class diagram */
- virtual QCString trClassDiagram(const char *clName)
- {
- return (QCString)clName+"¿¡ ´ëÇÑ »ó¼Ó ´ÙÀ̾î±×·¥ : ";
- }
-
- /*! this text is generated when the \\internal command is used. */
- virtual QCString trForInternalUseOnly()
- { return "³»ºÎÀûÀûÀ¸·Î¸¸ »ç¿ëÇϱâ À§ÇØ."; }
-
- /*! this text is generated when the \\warning command is used. */
- virtual QCString trWarning()
- { return "°æ°í"; }
-
- /*! this text is generated when the \\version command is used. */
- virtual QCString trVersion()
- { return "¹öÀü"; }
-
- /*! this text is generated when the \\date command is used. */
- virtual QCString trDate()
- { return "³¯Â¥"; }
-
- /*! this text is generated when the \\return command is used. */
- virtual QCString trReturns()
- { return "¹Ýȯ°ª"; }
-
- /*! this text is generated when the \\sa command is used. */
- virtual QCString trSeeAlso()
- { return "Âü°í"; }
-
- /*! this text is generated when the \\param command is used. */
- virtual QCString trParameters()
- { return "¸Å°³º¯¼ö"; }
-
- /*! this text is generated when the \\exception command is used. */
- virtual QCString trExceptions()
- { return "¿¹¿Ü"; }
-
- /*! this text is used in the title page of a LaTeX document. */
- virtual QCString trGeneratedBy()
- { return "´ÙÀ½¿¡ ÀÇÇØ »ý¼ºµÊ : "; }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 0.49-990307
-//////////////////////////////////////////////////////////////////////////
-
- /*! used as the title of page containing all the index of all namespaces. */
- virtual QCString trNamespaceList()
- { return "³×ÀÓ½ºÆäÀ̽º ¸ñ·Ï"; }
-
- /*! used as an introduction to the namespace list */
- virtual QCString trNamespaceListDescription(bool extractAll)
- {
- QCString result="´ÙÀ½Àº ";
- if (!extractAll) result+="¹®¼­È­µÈ ";
- result+="¸ðµç ³×ÀÓ½ºÆäÀ̽º¿¡ ´ëÇÑ ¸ñ·ÏÀÔ´Ï´Ù. (°£·«ÇÑ ¼³¸í¸¸À» º¸¿©ÁÝ´Ï´Ù) :";
- return result;
- }
-
- /*! used in the class documentation as a header before the list of all
- * friends of a class
- */
- virtual QCString trFriends()
- { return "Friends"; }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 0.49-990405
-//////////////////////////////////////////////////////////////////////////
-
- /*! used in the class documentation as a header before the list of all
- * related classes
- */
- virtual QCString trRelatedFunctionDocumentation()
- { return "Friend, ±×¸®°í °ü·ÃµÈ ÇÔ¼ö ¹®¼­È­"; }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 0.49-990425
-//////////////////////////////////////////////////////////////////////////
-
- /*! used as the title of the HTML page of a class/struct/union */
- virtual QCString trCompoundReference(const char *clName,
- ClassDef::CompoundType compType,
- bool isTemplate)
- {
- QCString result=(QCString)clName;
- switch(compType)
- {
- case ClassDef::Class: result+=" Ŭ·¡½º"; break;
- case ClassDef::Struct: result+=" ±¸Á¶Ã¼"; break;
- case ClassDef::Union: result+=" °ø¿ëü"; break;
- case ClassDef::Interface: result+=" ÀÎÅÍÆäÀ̽º"; break;
- case ClassDef::Protocol: result+=" ÇÁ·ÎÅäÄÝ"; break;
- case ClassDef::Category: result+=" Ä«Å×°í¸®"; break;
- case ClassDef::Exception: result+=" ¿¹¿Ü"; break;
- }
- if (isTemplate) result+=" ÅÛÇø´";
- result+=" ÂüÁ¶";
- return result;
- }
-
- /*! used as the title of the HTML page of a file */
- virtual QCString trFileReference(const char *fileName)
- {
- QCString result=fileName;
- result+=" ÆÄÀÏ ÂüÁ¶";
- return result;
- }
-
- /*! used as the title of the HTML page of a namespace */
- virtual QCString trNamespaceReference(const char *namespaceName)
- {
- QCString result=namespaceName;
- result+=" ³×ÀÓ½ºÆäÀ̽º ÂüÁ¶";
- return result;
- }
-
- virtual QCString trPublicMembers()
- { return "Public ¸â¹ö ÇÔ¼ö"; }
- virtual QCString trPublicSlots()
- { return "Public Slots"; }
- virtual QCString trSignals()
- { return "Signals"; }
- virtual QCString trStaticPublicMembers()
- { return "Á¤Àû Public ¸â¹ö ÇÔ¼ö"; }
- virtual QCString trProtectedMembers()
- { return "Protected ¸â¹ö ÇÔ¼ö"; }
- virtual QCString trProtectedSlots()
- { return "Protected Slots"; }
- virtual QCString trStaticProtectedMembers()
- { return "Á¤Àû Protected ¸â¹ö ÇÔ¼ö"; }
- virtual QCString trPrivateMembers()
- { return "Private ¸â¹ö ÇÔ¼ö"; }
- virtual QCString trPrivateSlots()
- { return "Private Slots"; }
- virtual QCString trStaticPrivateMembers()
- { return "Á¤Àû Private ¸â¹ö ÇÔ¼ö"; }
-
- /*! this function is used to produce a comma-separated list of items.
- * use generateMarker(i) to indicate where item i should be put.
- */
- virtual QCString trWriteList(int numEntries)
- {
- QCString result;
- int i;
- // the inherits list contain `numEntries' classes
- for (i=0;i<numEntries;i++)
- {
- // use generateMarker to generate placeholders for the class links!
- result+=generateMarker(i); // generate marker for entry i in the list
- // (order is left to right)
-
- if (i!=numEntries-1) // not the last entry, so we need a separator
- {
- if (i<numEntries-2) // not the fore last entry
- result+=", ";
- else // the fore last entry
- result+=", ";
- }
- }
- return result;
- }
-
- /*! used in class documentation to produce a list of base classes,
- * if class diagrams are disabled.
- */
- virtual QCString trInheritsList(int numEntries)
- {
- return trWriteList(numEntries)+"¸¦(À») »ó¼ÓÇß½À´Ï´Ù.";
- }
-
- /*! used in class documentation to produce a list of super classes,
- * if class diagrams are disabled.
- */
- virtual QCString trInheritedByList(int numEntries)
- {
- return trWriteList(numEntries)+"¿¡ ÀÇÇØ »ó¼ÓµÇ¾ú½À´Ï´Ù.";
- }
-
- /*! used in member documentation blocks to produce a list of
- * members that are hidden by this one.
- */
- virtual QCString trReimplementedFromList(int numEntries)
- {
- return trWriteList(numEntries)+"(À¸)·ÎºÎÅÍ À籸ÇöµÇ¾ú½À´Ï´Ù.";
- }
-
- /*! used in member documentation blocks to produce a list of
- * all member that overwrite the implementation of this member.
- */
- virtual QCString trReimplementedInList(int numEntries)
- {
- return trWriteList(numEntries)+"¿¡¼­ À籸ÇöµÇ¾ú½À´Ï´Ù.";
- }
-
- /*! This is put above each page as a link to all members of namespaces. */
- virtual QCString trNamespaceMembers()
- { return "³×ÀÓ½ºÆäÀ̽º ¸â¹ö"; }
-
- /*! This is an introduction to the page with all namespace members */
- virtual QCString trNamespaceMemberDescription(bool extractAll)
- {
- QCString result="´ÙÀ½Àº ";
- if (!extractAll) result+="¹®¼­È­µÈ ";
- result+="¸ðµç ³×ÀÓ½ºÆäÀ̽º ¸â¹öµéÀÇ ¸ñ·ÏÀÔ´Ï´Ù. ";
- if (extractAll)
- result+="°¢ ¸â¹öµéÀº ÇØ´ç ¸â¹öÀÇ ³×ÀÓ½ºÆäÀ̽º ¹®¼­È­ ÆäÀÌÁöÀÇ ¸µÅ©¸¦ °¡Áö°í ÀÖ½À´Ï´Ù. :";
- else
- result+="°¢ ¸â¹öµéÀº ÇØ´ç ¸â¹ö°¡ ¼ÓÇÑ ³×ÀÓ½ºÆäÀ̽º ÆäÀÌÁöÀÇ ¸µÅ©¸¦ °¡Áö°í ÀÖ½À´Ï´Ù. :";
- return result;
- }
- /*! This is used in LaTeX as the title of the chapter with the
- * index of all namespaces.
- */
- virtual QCString trNamespaceIndex()
- { return "³×ÀÓ½ºÆäÀ̽º »öÀÎ"; }
-
- /*! This is used in LaTeX as the title of the chapter containing
- * the documentation of all namespaces.
- */
- virtual QCString trNamespaceDocumentation()
- { return "³×ÀÓ½ºÆäÀ̽º ¹®¼­È­"; }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 0.49-990522
-//////////////////////////////////////////////////////////////////////////
-
- /*! This is used in the documentation before the list of all
- * namespaces in a file.
- */
- virtual QCString trNamespaces()
- { return "³×ÀÓ½ºÆäÀ̽º"; }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 0.49-990728
-//////////////////////////////////////////////////////////////////////////
-
- /*! This is put at the bottom of a class documentation page and is
- * followed by a list of files that were used to generate the page.
- */
- virtual QCString trGeneratedFromFiles(ClassDef::CompoundType compType,
- bool single)
- { // here s is one of " Class", " Struct" or " Union"
- // single is true implies a single file
- QCString result=(QCString)"ÀÌ ";
- switch(compType)
- {
- case ClassDef::Class: result+="Ŭ·¡½º"; break;
- case ClassDef::Struct: result+="±¸Á¶Ã¼"; break;
- case ClassDef::Union: result+="°ø¿ëü"; break;
- case ClassDef::Interface: result+="ÀÎÅÍÆäÀ̽º"; break;
- case ClassDef::Protocol: result+="ÇÁ·ÎÅäÄÝ"; break;
- case ClassDef::Category: result+="Ä«Å×°í¸®"; break;
- case ClassDef::Exception: result+="¿¹¿Ü"; break;
- }
- result+="¿¡ ´ëÇÑ ¹®¼­È­ ÆäÀÌÁö´Â ´ÙÀ½ÀÇ ÆÄÀÏ";
- if (!single) result+="µé";
- result+="·ÎºÎÅÍ »ý¼ºµÇ¾ú½À´Ï´Ù.:";
- return result;
- }
-
- /*! This is in the (quick) index as a link to the alphabetical compound
- * list.
- */
- virtual QCString trAlphabeticalList()
- { return "¾ËÆĺª¼ø ¸ñ·Ï"; }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 0.49-990901
-//////////////////////////////////////////////////////////////////////////
-
- /*! This is used as the heading text for the retval command. */
- virtual QCString trReturnValues()
- { return "¹Ýȯ°ª"; }
-
- /*! This is in the (quick) index as a link to the main page (index.html)
- */
- virtual QCString trMainPage()
- { return "¸ÞÀÎ ÆäÀÌÁö"; }
-
- /*! This is used in references to page that are put in the LaTeX
- * documentation. It should be an abbreviation of the word page.
- */
- virtual QCString trPageAbbreviation()
- { return "ÆäÀÌÁö"; }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 0.49-991003
-//////////////////////////////////////////////////////////////////////////
-
- virtual QCString trDefinedAtLineInSourceFile()
- {
- return "@1 ÆÄÀÏÀÇ @0 ¹ø° ¶óÀο¡¼­ Á¤ÀǵǾú½À´Ï´Ù.";
- }
- virtual QCString trDefinedInSourceFile()
- {
- return "@0 ÆÄÀÏ¿¡¼­ Á¤ÀǵǾú½À´Ï´Ù.";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 0.49-991205
-//////////////////////////////////////////////////////////////////////////
-
- virtual QCString trDeprecated()
- {
- return "À߸øµÈ ÄÚµå";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.0.0
-//////////////////////////////////////////////////////////////////////////
-
- /*! this text is put before a collaboration diagram */
- virtual QCString trCollaborationDiagram(const char *clName)
- {
- return (QCString)clName+"¿¡ ´ëÇÑ Çù·Â ´ÙÀ̾î±×·¥:";
- }
- /*! this text is put before an include dependency graph */
- virtual QCString trInclDepGraph(const char *fName)
- {
- return (QCString)fName+"¿¡ ´ëÇÑ include ÀÇÁ¸ ±×·¡ÇÁ";
- }
- /*! header that is put before the list of constructor/destructors. */
- virtual QCString trConstructorDocumentation()
- {
- return "»ý¼ºÀÚ & ¼Ò¸êÀÚ ¹®¼­È­";
- }
- /*! Used in the file documentation to point to the corresponding sources. */
- virtual QCString trGotoSourceCode()
- {
- return "ÀÌ ÆÄÀÏÀÇ ¼Ò½º ÄÚµå ÆäÀÌÁö·Î °¡±â";
- }
- /*! Used in the file sources to point to the corresponding documentation. */
- virtual QCString trGotoDocumentation()
- {
- return "ÀÌ ÆÄÀÏÀÇ ¹®¼­È­ ÆäÀÌÁö·Î °¡±â";
- }
- /*! Text for the \\pre command */
- virtual QCString trPrecondition()
- {
- return "ÀüÁ¦Á¶°Ç";
- }
- /*! Text for the \\post command */
- virtual QCString trPostcondition()
- {
- return "ÈĹÌÁ¶°Ç";
- }
- /*! Text for the \\invariant command */
- virtual QCString trInvariant()
- {
- return "º¯ÇÏÁö ¾Ê´Â";
- }
- /*! Text shown before a multi-line variable/enum initialization */
- virtual QCString trInitialValue()
- {
- return "ÃʱⰪ:";
- }
- /*! Text used the source code in the file index */
- virtual QCString trCode()
- {
- return "ÄÚµå";
- }
- virtual QCString trGraphicalHierarchy()
- {
- return "±×·¡ÇÈÄÃÇÑ Å¬·¡½º °èÅëµµ";
- }
- virtual QCString trGotoGraphicalHierarchy()
- {
- return "±×·¡ÇÈÄÃÇÑ Å¬·¡½º °èÅëµµ ÆäÀÌÁö·Î °¡±â";
- }
- virtual QCString trGotoTextualHierarchy()
- {
- return "ÅؽºÆ® Çü½ÄÀÇ Å¬·¡½º °èÅëµµ ÆäÀÌÁö·Î °¡±â";
- }
- virtual QCString trPageIndex()
- {
- return "ÆäÀÌÁö »öÀÎ";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.1.0
-//////////////////////////////////////////////////////////////////////////
-
- virtual QCString trNote()
- {
- return "ÁÖÀÇ";
- }
- virtual QCString trPublicTypes()
- {
- return "Public ŸÀÔ";
- }
- virtual QCString trPublicAttribs()
- {
- if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
- {
- return "µ¥ÀÌŸ Çʵå";
- }
- else
- {
- return "Public ¼Ó¼º";
- }
- }
- virtual QCString trStaticPublicAttribs()
- {
- return "Á¤Àû Public ¼Ó¼º";
- }
- virtual QCString trProtectedTypes()
- {
- return "Protected ŸÀÔ";
- }
- virtual QCString trProtectedAttribs()
- {
- return "Protected ¼Ó¼º";
- }
- virtual QCString trStaticProtectedAttribs()
- {
- return "Á¤Àû Protected ¼Ó¼º";
- }
- virtual QCString trPrivateTypes()
- {
- return "Private ŸÀÔ";
- }
- virtual QCString trPrivateAttribs()
- {
- return "Private ¼Ó¼º";
- }
- virtual QCString trStaticPrivateAttribs()
- {
- return "Á¤Àû Private ¼Ó¼º";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.1.3
-//////////////////////////////////////////////////////////////////////////
-
- /*! Used as a marker that is put before a \\todo item */
- virtual QCString trTodo()
- {
- return "ÇÒÀÏ";
- }
- /*! Used as the header of the todo list */
- virtual QCString trTodoList()
- {
- return "ÇÒÀÏ ¸ñ·Ï";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.1.4
-//////////////////////////////////////////////////////////////////////////
-
- virtual QCString trReferencedBy()
- {
- return "´ÙÀ½¿¡ ÀÇÇؼ­ ÂüÁ¶µÊ : ";
- }
- virtual QCString trRemarks()
- {
- return "Remarks";
- }
- virtual QCString trAttention()
- {
- return "ÁÖÀÇ";
- }
- virtual QCString trInclByDepGraph()
- {
- return "ÀÌ ±×·¡ÇÁ´Â ÀÌ ÆÄÀÏÀ» Á÷/°£Á¢ÀûÀ¸·Î include ÇÏ´Â ÆÄÀϵéÀ» º¸¿©ÁÝ´Ï´Ù.:";
- }
- virtual QCString trSince()
- {
- return "Since";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.1.5
-//////////////////////////////////////////////////////////////////////////
-
- /*! title of the graph legend page */
- virtual QCString trLegendTitle()
- {
- return "±×·¡ÇÁ ¹ü·Ê";
- }
- /*! page explaining how the dot graph's should be interpreted
- * The %A in the text below are to prevent link to classes called "A".
- */
- virtual QCString trLegendDocs()
- {
- return
- "ÀÌ ÆäÀÌÁö´Â doxygen¿¡ ÀÇÇØ »ý¼ºµÈ ±×·¡ÇÁµéÀ» ÀÌÇØÇÏ´Â ¹æ¹ýÀ» ¼³¸íÇÕ´Ï´Ù.<p>\n"
- "´ÙÀ½ÀÇ ¿¹Á¦¸¦ Âü°íÇϽʽÿÀ.:\n"
- "\\code\n"
- "/*! »ý·«µÇ¾ú±â ¶§¹®¿¡ º¸ÀÌÁö ¾Ê´Â Ŭ·¡½º */\n"
- "class Invisible { };\n\n"
- "/*! Truncated Ŭ·¡½º, »ó¼Ó°ü°è°¡ ¼û°ÜÁü */\n"
- "class Truncated : public Invisible { };\n\n"
- "/* doxygen ÁÖ¼®¿¡ ÀÇÇؼ­ ¹®¼­È­µÇÁö ¾Ê´Â Ŭ·¡½º */\n"
- "class Undocumented { };\n\n"
- "/*! public »ó¼ÓÀ» ÅëÇؼ­ »ó¼ÓµÈ Ŭ·¡½º */\n"
- "class PublicBase : public Truncated { };\n\n"
- "/*! ÅÛÇø´ Ŭ·¡½º */\n"
- "template<class T> class Templ { };\n\n"
- "/*! protected »ó¼ÓÀ» ÅëÇؼ­ »ó¼ÓµÈ Ŭ·¡½º */\n"
- "class ProtectedBase { };\n\n"
- "/*! private »ó¼ÓÀ» ÅëÇؼ­ »ó¼ÓµÈ Ŭ·¡½º */\n"
- "class PrivateBase { };\n\n"
- "/*! »ó¼ÓµÇ¾îÁø Ŭ·¡½º¿¡ ÀÇÇØ (¸â¹ö·Î) »ç¿ëµÇ¾îÁö´Â Ŭ·¡½º */\n"
- "class Used { };\n\n"
- "/*! ´Ù¸¥ Ŭ·¡½ºµéÀ» »ó¼ÓÇÏ´Â ½´ÆÛ Å¬·¡½º */\n"
- "class Inherited : public PublicBase,\n"
- " protected ProtectedBase,\n"
- " private PrivateBase,\n"
- " public Undocumented,\n"
- " public Templ<int>\n"
- "{\n"
- " private:\n"
- " Used *m_usedClass;\n"
- "};\n"
- "\\endcode\n"
- "´ÙÀ½°ú °°Àº ±×·¡ÇÁ°¡ Ãâ·ÂµÉ °ÍÀÔ´Ï´Ù. :"
- "<p><center><img alt=\"\" src=\"graph_legend."+Config_getEnum("DOT_IMAGE_FORMAT")+"\"></center>\n"
- "<p>\n"
- "À§ ±×·¡ÇÁÀÇ ¹Ú½ºµéÀº ´ÙÀ½°ú °°Àº Àǹ̸¦ °¡Áý´Ï´Ù. :\n"
- "<ul>\n"
- "<li>%A ȸ»öÀ¸·Î ä¿öÁø ¹Ú½º´Â ÀÌ ±×·¡ÇÁ¸¦ »ý¼ºÇØ ³½ ±¸Á¶Ã¼³ª Ŭ·¡½º¸¦ ÀǹÌÇÕ´Ï´Ù.\n"
- "<li>%A °ËÀº»ö Å׵θ®ÀÇ ¹Ú½º´Â ¹®¼­È­µÈ ±¸Á¶Ã¼³ª Ŭ·¡½º¸¦ ÀǹÌÇÕ´Ï´Ù.\n"
- "<li>%A ȸ»ö Å׵θ®ÀÇ ¹Ú½º´Â ¹®¼­È­µÇÁö ¾ÊÀº ±¸Á¶Ã¼³ª Ŭ·¡½º¸¦ ÀǹÌÇÕ´Ï´Ù.\n"
- "<li>%A »¡°£»ö Å׵θ®ÀÇ ¹Ú½º´Â ¸ðµç »ó¼ÓÀ̳ª Æ÷ÇÔ°ü°è°¡ º¸¿©ÁöÁö ¾Ê´Â "
- "±¸Á¶Ã¼³ª Ŭ·¡½º¸¦ ÀǹÌÇÕ´Ï´Ù."
- "%A ¸¸¾à ±×·¡ÇÁ°¡ ÁöÁ¤µÈ °æ°è³»¿¡ ¸ÂÁö ¾ÊÀ¸¸é, ±×·¡ÇÁ°¡ Àß·ÁÁý´Ï´Ù.\n"
- "</ul>\n"
- "È­»ìÇ¥µéÀº ´ÙÀ½°ú °°Àº Àǹ̸¦ °¡Áý´Ï´Ù. :\n"
- "<ul>\n"
- "<li>%A ¾îµÎ¿î ÆĶû»ö È­»ìÇ¥´Â µÎ Ŭ·¡½ºµé °£¿¡ public »ó¼ÓÀÌ ÀÖÀ½À» ÀǹÌÇÕ´Ï´Ù.\n"
- "<li>%A ¾îµÎ¿î ¿¬µÎ»ö È­»ìÇ¥´Â protected »ó¼ÓÀÌ ÀÖÀ½À» ÀǹÌÇÕ´Ï´Ù.\n"
- "<li>%A ¾îµÎ¿î »¡°£»ö È­»ìÇ¥´Â private »ó¼ÓÀÌ ÀÖÀ½À» ÀǹÌÇÕ´Ï´Ù.\n"
- "<li>%A º¸¶ó»ö Á¡¼± È­»ìÇ¥´Â ´Ù¸¥ Ŭ·¡½º¿¡ ÀÇÇØ Æ÷ÇԵǰųª »ç¿ëµÇ¾îÁüÀ» ÀǹÌÇÕ´Ï´Ù. "
- "È­»ìÇ¥ÀÇ ¶óº§Àº È­»ìÇ¥°¡ °¡¸®Å°´Â Ŭ·¡½º³ª ±¸Á¶Ã¼·Î Á¢±ÙÇÏ´Â º¯¼ö¸í(µé)À¸·Î ºÙ½À´Ï´Ù.\n"
- "<li>%A ³ë¶õ»ö Á¡¼± È­»ìÇ¥´Â ÅÛÇø´ ÀνºÅϽº¿Í ÅÛÇÁ¸´ Ŭ·¡½º¿¡ ´ëÇÑ °ü°è¸¦ ÀǹÌÇÕ´Ï´Ù. "
- "È­»ìÇ¥ÀÇ ¶óº§Àº ÀνºÅϽºÀÇ ÅÛÇø´ ÆĶó¸ÞÅÍ·Î ºÙ½À´Ï´Ù.\n"
- "</ul>\n";
- }
- /*! text for the link to the legend page */
- virtual QCString trLegend()
- {
- return "¹ü·Ê";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.2.0
-//////////////////////////////////////////////////////////////////////////
-
- /*! Used as a marker that is put before a test item */
- virtual QCString trTest()
- {
- return "Å×½ºÆ®";
- }
- /*! Used as the header of the test list */
- virtual QCString trTestList()
- {
- return "Å×½ºÆ® ¸ñ·Ï";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.2.1
-//////////////////////////////////////////////////////////////////////////
-
- /*! Used as a section header for KDE-2 IDL methods */
- virtual QCString trDCOPMethods()
- {
- return "DCOP ¸â¹ö ÇÔ¼ö";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.2.2
-//////////////////////////////////////////////////////////////////////////
-
- /*! Used as a section header for IDL properties */
- virtual QCString trProperties()
- {
- return "¼Ó¼º";
- }
- /*! Used as a section header for IDL property documentation */
- virtual QCString trPropertyDocumentation()
- {
- return "¼Ó¼º ¹®¼­È­";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.2.4
-//////////////////////////////////////////////////////////////////////////
-
- /*! Used for Java classes in the summary section of Java packages */
- virtual QCString trClasses()
- {
- if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
- {
- return "µ¥ÀÌŸ ±¸Á¶";
- }
- else
- {
- return "Ŭ·¡½º";
- }
- }
- /*! Used as the title of a Java package */
- virtual QCString trPackage(const char *name)
- {
- return name+(QCString)" ÆÐÅ°Áö";
- }
- /*! Title of the package index page */
- virtual QCString trPackageList()
- {
- return "ÆÐÅ°Áö ¸ñ·Ï";
- }
- /*! The description of the package index page */
- virtual QCString trPackageListDescription()
- {
- return "´ÙÀ½Àº ÆÐÅ°ÁöµéÀÔ´Ï´Ù. (°¡´ÉÇÑÇÑ °£·«ÇÑ ¼³¸í¸¸À» º¸¿©ÁÝ´Ï´Ù) :";
- }
- /*! The link name in the Quick links header for each page */
- virtual QCString trPackages()
- {
- return "ÆÐÅ°Áö";
- }
- /*! Text shown before a multi-line define */
- virtual QCString trDefineValue()
- {
- return "°ª:";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.2.5
-//////////////////////////////////////////////////////////////////////////
-
- /*! Used as a marker that is put before a \\bug item */
- virtual QCString trBug()
- {
- return "¹ö±×";
- }
- /*! Used as the header of the bug list */
- virtual QCString trBugList()
- {
- return "¹ö±× ¸ñ·Ï";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.2.6
-//////////////////////////////////////////////////////////////////////////
-
- /*! Used as ansicpg for RTF file
- *
- * The following table shows the correlation of Charset name, Charset Value and
- * <pre>
- * Codepage number:
- * Charset Name Charset Value(hex) Codepage number
- * ------------------------------------------------------
- * DEFAULT_CHARSET 1 (x01)
- * SYMBOL_CHARSET 2 (x02)
- * OEM_CHARSET 255 (xFF)
- * ANSI_CHARSET 0 (x00) 1252
- * RUSSIAN_CHARSET 204 (xCC) 1251
- * EE_CHARSET 238 (xEE) 1250
- * GREEK_CHARSET 161 (xA1) 1253
- * TURKISH_CHARSET 162 (xA2) 1254
- * BALTIC_CHARSET 186 (xBA) 1257
- * HEBREW_CHARSET 177 (xB1) 1255
- * ARABIC _CHARSET 178 (xB2) 1256
- * SHIFTJIS_CHARSET 128 (x80) 932
- * HANGEUL_CHARSET 129 (x81) 949
- * GB2313_CHARSET 134 (x86) 936
- * CHINESEBIG5_CHARSET 136 (x88) 950
- * </pre>
- *
- */
- virtual QCString trRTFansicp()
- {
- return "949";
- }
-
-
- /*! Used as ansicpg for RTF fcharset
- * \see trRTFansicp() for a table of possible values.
- */
- virtual QCString trRTFCharSet()
- {
- return "129";
- }
-
- /*! Used as header RTF general index */
- virtual QCString trRTFGeneralIndex()
- {
- return "»öÀÎ";
- }
-
- /*! This is used for translation of the word that will possibly
- * be followed by a single name or by a list of names
- * of the category.
- */
- virtual QCString trClass(bool first_capital, bool singular)
- {
- QCString result((first_capital ? "Ŭ·¡½º" : "Ŭ·¡½º"));
- if (!singular) result+="µé";
- return result;
- }
-
- /*! This is used for translation of the word that will possibly
- * be followed by a single name or by a list of names
- * of the category.
- */
- virtual QCString trFile(bool first_capital, bool singular)
- {
- QCString result((first_capital ? "ÆÄÀÏ" : "ÆÄÀÏ"));
- if (!singular) result+="µé";
- return result;
- }
-
- /*! This is used for translation of the word that will possibly
- * be followed by a single name or by a list of names
- * of the category.
- */
- virtual QCString trNamespace(bool first_capital, bool singular)
- {
- QCString result((first_capital ? "³×ÀÓ½ºÆäÀ̽º" : "³×ÀÓ½ºÆäÀ̽º"));
- if (!singular) result+="µé";
- return result;
- }
-
- /*! This is used for translation of the word that will possibly
- * be followed by a single name or by a list of names
- * of the category.
- */
- virtual QCString trGroup(bool first_capital, bool singular)
- {
- QCString result((first_capital ? "±×·ì" : "±×·ì"));
- if (!singular) result+="µé";
- return result;
- }
-
- /*! This is used for translation of the word that will possibly
- * be followed by a single name or by a list of names
- * of the category.
- */
- virtual QCString trPage(bool first_capital, bool singular)
- {
- QCString result((first_capital ? "ÆäÀÌÁö" : "ÆäÀÌÁö"));
- if (!singular) result+="µé";
- return result;
- }
-
- /*! This is used for translation of the word that will possibly
- * be followed by a single name or by a list of names
- * of the category.
- */
- virtual QCString trMember(bool first_capital, bool singular)
- {
- QCString result((first_capital ? "¸â¹ö" : "¸â¹ö"));
- if (!singular) result+="µé";
- return result;
- }
-
- /*! This is used for translation of the word that will possibly
- * be followed by a single name or by a list of names
- * of the category.
- */
- virtual QCString trGlobal(bool first_capital, bool singular)
- {
- QCString result((first_capital ? "Àü¿ª" : "Àü¿ª"));
- if (!singular) result+="";
- return result;
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.2.7
-//////////////////////////////////////////////////////////////////////////
-
- /*! This text is generated when the \\author command is used and
- * for the author section in man pages. */
- virtual QCString trAuthor(bool first_capital, bool singular)
- {
- QCString result((first_capital ? "ÀÛ¼ºÀÚ" : "ÀÛ¼ºÀÚ"));
- if (!singular) result+="µé";
- return result;
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.2.11
-//////////////////////////////////////////////////////////////////////////
-
- /*! This text is put before the list of members referenced by a member
- */
- virtual QCString trReferences()
- {
- return "´ÙÀ½À» ÂüÁ¶ÇÔ : ";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.2.13
-//////////////////////////////////////////////////////////////////////////
-
- /*! used in member documentation blocks to produce a list of
- * members that are implemented by this one.
- */
- virtual QCString trImplementedFromList(int numEntries)
- {
- return trWriteList(numEntries)+"¸¦ ±¸Çö.";
- }
-
- /*! used in member documentation blocks to produce a list of
- * all members that implement this abstract member.
- */
- virtual QCString trImplementedInList(int numEntries)
- {
- return trWriteList(numEntries)+"¿¡¼­ ±¸ÇöµÇ¾ú½À´Ï´Ù.";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.2.16
-//////////////////////////////////////////////////////////////////////////
-
- /*! used in RTF documentation as a heading for the Table
- * of Contents.
- */
- virtual QCString trRTFTableOfContents()
- {
- return "¸ñÂ÷";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.2.17
-//////////////////////////////////////////////////////////////////////////
-
- /*! Used as the header of the list of item that have been
- * flagged deprecated
- */
- virtual QCString trDeprecatedList()
- {
- return "À߸øµÈ ÄÚµå ¸ñ·Ï";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.2.18
-//////////////////////////////////////////////////////////////////////////
-
- /*! Used as a header for declaration section of the events found in
- * a C# program
- */
- virtual QCString trEvents()
- {
- return "À̺¥Æ®";
- }
- /*! Header used for the documentation section of a class' events. */
- virtual QCString trEventDocumentation()
- {
- return "À̺¥Æ® ¹®¼­È­";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.3
-//////////////////////////////////////////////////////////////////////////
-
- /*! Used as a heading for a list of Java class types with package scope.
- */
- virtual QCString trPackageTypes()
- {
- return "ÆÐÅ°Áö ŸÀÔ";
- }
- /*! Used as a heading for a list of Java class functions with package
- * scope.
- */
- virtual QCString trPackageMembers()
- {
- return "ÆÐÅ°Áö ÇÔ¼ö";
- }
- /*! Used as a heading for a list of static Java class functions with
- * package scope.
- */
- virtual QCString trStaticPackageMembers()
- {
- return "Á¤Àû ÆÐÅ°Áö ÇÔ¼ö";
- }
- /*! Used as a heading for a list of Java class variables with package
- * scope.
- */
- virtual QCString trPackageAttribs()
- {
- return "ÆÐÅ°Áö ¼Ó¼º";
- }
- /*! Used as a heading for a list of static Java class variables with
- * package scope.
- */
- virtual QCString trStaticPackageAttribs()
- {
- return "Á¤Àû ÆÐÅ°Áö ¼Ó¼º";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.3.1
-//////////////////////////////////////////////////////////////////////////
-
- /*! Used in the quick index of a class/file/namespace member list page
- * to link to the unfiltered list of all members.
- */
- virtual QCString trAll()
- {
- return "¸ðµÎ";
- }
- /*! Put in front of the call graph for a function. */
- virtual QCString trCallGraph()
- {
- return "ÀÌ ÇÔ¼ö ³»ºÎ¿¡¼­ È£ÃâÇÏ´Â ÇÔ¼öµé¿¡ ´ëÇÑ ±×·¡ÇÁÀÔ´Ï´Ù.:";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.3.3
-//////////////////////////////////////////////////////////////////////////
-
- /*! When the search engine is enabled this text is put in the header
- * of each page before the field where one can enter the text to search
- * for.
- */
- virtual QCString trSearchForIndex()
- {
- return "°Ë»ö";
- }
- /*! This string is used as the title for the page listing the search
- * results.
- */
- virtual QCString trSearchResultsTitle()
- {
- return "°Ë»ö °á°ú";
- }
- /*! This string is put just before listing the search results. The
- * text can be different depending on the number of documents found.
- * Inside the text you can put the special marker $num to insert
- * the number representing the actual number of search results.
- * The @a numDocuments parameter can be either 0, 1 or 2, where the
- * value 2 represents 2 or more matches. HTML markup is allowed inside
- * the returned string.
- */
- virtual QCString trSearchResults(int numDocuments)
- {
- if (numDocuments==0)
- {
- return "Á˼ÛÇÕ´Ï´Ù. ÁúÀÇ¿¡ ÀÏÄ¡ÇÏ´Â ¹®¼­°¡ ¾ø½À´Ï´Ù.";
- }
- else if (numDocuments==1)
- {
- return "ÁúÀÇ¿¡ ÀÏÄ¡ÇÏ´Â <b>1</b> °³ÀÇ ¹®¼­¸¦ ã¾Ò½À´Ï´Ù.";
- }
- else
- {
- return "ÁúÀÇ¿¡ ÀÏÄ¡ÇÏ´Â <b>$num</b> °³ÀÇ ¹®¼­¸¦ ã¾Ò½À´Ï´Ù. "
- "°¡Àå ¸¹ÀÌ ÀÏÄ¡ÇÏ´Â ¹®¼­¸¦ °¡Àå ¸ÕÀú º¸¿©ÁÝ´Ï´Ù.";
- }
- }
- /*! This string is put before the list of matched words, for each search
- * result. What follows is the list of words that matched the query.
- */
- virtual QCString trSearchMatches()
- {
- return "°á°ú:";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.3.8
-//////////////////////////////////////////////////////////////////////////
-
- /*! This is used in HTML as the title of page with source code for file filename
- */
- virtual QCString trSourceFile(QCString& filename)
- {
- return filename + " ¼Ò½º ÆÄÀÏ";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.3.9
-//////////////////////////////////////////////////////////////////////////
-
- /*! This is used as the name of the chapter containing the directory
- * hierarchy.
- */
- virtual QCString trDirIndex()
- { return "µð·ºÅ丮 °èÅëµµ"; }
-
- /*! This is used as the name of the chapter containing the documentation
- * of the directories.
- */
- virtual QCString trDirDocumentation()
- { return "µð·ºÅ丮 ¹®¼­È­"; }
-
- /*! This is used as the title of the directory index and also in the
- * Quick links of an HTML page, to link to the directory hierarchy.
- */
- virtual QCString trDirectories()
- { return "µð·ºÅ丮"; }
-
- /*! This returns a sentences that introduces the directory hierarchy.
- * and the fact that it is sorted alphabetically per level
- */
- virtual QCString trDirDescription()
- { return "ÀÌ µð·ºÅ丮 ¸ñ·ÏÀº ¿ÏÀüÇÏÁø ¾ÊÁö¸¸, (´ë·«ÀûÀ¸·Î) ¾ËÆĺª¼øÀ¸·Î Á¤·ÄµÇ¾îÀÖ½À´Ï´Ù.:";
- }
-
- /*! This returns the title of a directory page. The name of the
- * directory is passed via \a dirName.
- */
- virtual QCString trDirReference(const char *dirName)
- { QCString result=dirName; result+=" µð·ºÅ丮 ÂüÁ¶"; return result; }
-
- /*! This returns the word directory with or without starting capital
- * (\a first_capital) and in sigular or plural form (\a singular).
- */
- virtual QCString trDir(bool first_capital, bool singular)
- {
- QCString result((first_capital ? "µð·ºÅ丮" : "µð·ºÅ丮"));
- if (singular) result+=""; else result+="µé";
- return result;
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.4.1
-//////////////////////////////////////////////////////////////////////////
-
- /*! This text is added to the documentation when the \\overload command
- * is used for a overloaded function.
- */
- virtual QCString trOverloadText()
- {
- return "ÀÌ ÇÔ¼ö´Â ÆíÀǸ¦ Á¦°øÇϱâ À§ÇØ ¿À¹ö·ÎµåµÈ ¸â¹ö ÇÔ¼öÀÔ´Ï´Ù. "
- "À§ÀÇ ÇÔ¼ö¿Í Ʋ¸° Á¡Àº ´ÜÁö ¹Þ¾ÆµéÀÌ´Â ¾Æ±Ô¸ÕÆ®(argument)°¡ ´Ù¸£´Ù´Â °ÍÀÔ´Ï´Ù.";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.4.6
-//////////////////////////////////////////////////////////////////////////
-
- /*! This is used to introduce a caller (or called-by) graph */
- virtual QCString trCallerGraph()
- {
- return "ÀÌ ÇÔ¼ö¸¦ È£ÃâÇÏ´Â ÇÔ¼öµé¿¡ ´ëÇÑ ±×·¡ÇÁÀÔ´Ï´Ù.:";
- }
-
- /*! This is used in the documentation of a file/namespace before the list
- * of documentation blocks for enumeration values
- */
- virtual QCString trEnumerationValueDocumentation()
- { return "¿­°ÅÇü ¹®¼­È­"; }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.5.4 (mainly for Fortran)
-//////////////////////////////////////////////////////////////////////////
-
- /*! header that is put before the list of member subprograms (Fortran). */
- virtual QCString trMemberFunctionDocumentationFortran()
- { return "¸â¹ö ÇÔ¼ö/¼­ºê·çƾ ¹®¼­È­"; }
-
- /*! This is put above each page as a link to the list of annotated data types (Fortran). */
- virtual QCString trCompoundListFortran()
- { return "µ¥ÀÌŸ ŸÀÔ ¸ñ·Ï"; }
-
- /*! This is put above each page as a link to all members of compounds (Fortran). */
- virtual QCString trCompoundMembersFortran()
- { return "µ¥ÀÌŸ Çʵå"; }
-
- /*! This is an introduction to the annotated compound list (Fortran). */
- virtual QCString trCompoundListDescriptionFortran()
- { return "´ë·«ÀûÀÎ ¼³¸í°ú ÇÔ²² µ¥ÀÌŸ ŸÀÔµéÀÇ ¸ñ·ÏÀÔ´Ï´Ù.:"; }
-
- /*! This is an introduction to the page with all data types (Fortran). */
- virtual QCString trCompoundMembersDescriptionFortran(bool extractAll)
- {
- QCString result="´ÙÀ½Àº ";
- if (!extractAll)
- {
- result+="¹®¼­È­µÈ ";
- }
- result+="¸ðµç µ¥ÀÌŸ ŸÀÔ ¸â¹öµéÀÇ ¸ñ·ÏÀÔ´Ï´Ù. ";
-
- result+="°¢ Ç׸ñÀº ";
- if (!extractAll)
- {
- result+="°¢ ¸â¹ö¿¡ ´ëÇÑ µ¥ÀÌŸ ±¸Á¶ ¹®¼­È­ ÆäÀÌÁöÀÇ ¸µÅ©¸¦ °¡Áö°í ÀÖ½À´Ï´Ù.";
- }
- else
- {
- result+="±×µéÀÌ ¼ÓÇÑ µ¥ÀÌŸ ŸÀÔÀÇ ¸µÅ©¸¦ °¡Áö°í ÀÖ½À´Ï´Ù. :";
- }
- return result;
- }
-
- /*! This is used in LaTeX as the title of the chapter with the
- * annotated compound index (Fortran).
- */
- virtual QCString trCompoundIndexFortran()
- { return "µ¥ÀÌŸ ŸÀÔ »öÀÎ"; }
-
- /*! This is used in LaTeX as the title of the chapter containing
- * the documentation of all data types (Fortran).
- */
- virtual QCString trTypeDocumentation()
- { return "µ¥ÀÌŸ ŸÀÔ ¹®¼­È­"; }
-
- /*! This is used in the documentation of a file as a header before the
- * list of (global) subprograms (Fortran).
- */
- virtual QCString trSubprograms()
- { return "ÇÔ¼ö/¼­ºê·çƾ"; }
-
- /*! This is used in the documentation of a file/namespace before the list
- * of documentation blocks for subprograms (Fortran)
- */
- virtual QCString trSubprogramDocumentation()
- { return "ÇÔ¼ö/¼­ºê·çƾ ¹®¼­È­"; }
-
- /*! This is used in the documentation of a file/namespace/group before
- * the list of links to documented compounds (Fortran)
- */
- virtual QCString trDataTypes()
- { return "µ¥ÀÌŸ ŸÀÔµé"; }
-
- /*! used as the title of page containing all the index of all modules (Fortran). */
- virtual QCString trModulesList()
- { return "¸ðµâ ¸ñ·Ï"; }
-
- /*! used as an introduction to the modules list (Fortran) */
- virtual QCString trModulesListDescription(bool extractAll)
- {
- QCString result="´ÙÀ½Àº ";
- if (!extractAll) result+="¹®¼­È­µÈ ";
- result+="¸ðµç ¸ðµâ¿¡ ´ëÇÑ ¸ñ·ÏÀÔ´Ï´Ù. (°£·«ÇÑ ¼³¸í¸¸À» º¸¿©ÁÝ´Ï´Ù) :";
- return result;
- }
-
- /*! used as the title of the HTML page of a module/type (Fortran) */
- virtual QCString trCompoundReferenceFortran(const char *clName,
- ClassDef::CompoundType compType,
- bool isTemplate)
- {
- QCString result=(QCString)clName;
- switch(compType)
- {
- case ClassDef::Class: result+=" ¸ðµâ"; break;
- case ClassDef::Struct: result+=" ŸÀÔ"; break;
- case ClassDef::Union: result+=" °ø¿ëü"; break;
- case ClassDef::Interface: result+=" ÀÎÅÍÆäÀ̽º"; break;
- case ClassDef::Protocol: result+=" ÇÁ·ÎÅäÄÝ"; break;
- case ClassDef::Category: result+=" Ä«Å×°í¸®"; break;
- case ClassDef::Exception: result+=" ¿¹¿Ü"; break;
- }
- if (isTemplate) result+=" ÅÛÇø´";
- result+=" ÂüÁ¶";
- return result;
- }
- /*! used as the title of the HTML page of a module (Fortran) */
- virtual QCString trModuleReference(const char *namespaceName)
- {
- QCString result=namespaceName;
- result+=" ¸ðµâ ÂüÁ¶";
- return result;
- }
-
- /*! This is put above each page as a link to all members of modules. (Fortran) */
- virtual QCString trModulesMembers()
- { return "¸ðµâ ¸â¹öµé"; }
-
- /*! This is an introduction to the page with all modules members (Fortran) */
- virtual QCString trModulesMemberDescription(bool extractAll)
- {
- QCString result="´ÙÀ½Àº ";
- if (!extractAll) result+="¹®¼­È­µÈ ";
- result+="¸ðµç ¸ðµâ ¸â¹öÀÇ ¸ñ·ÏÀÔ´Ï´Ù. ";
- if (extractAll)
- {
- result+="°¢ Ç׸ñÀº °¢ ¸â¹öÀÇ ¸ðµâ ¹®¼­È­ ÆäÀÌÁöÀÇ ¸µÅ©¸¦ °¡Áö°í ÀÖ½À´Ï´Ù. :";
- }
- else
- {
- result+="°¢ Ç׸ñÀº ±×µéÀÌ ¼ÓÇÑ ¸ðµâÀÇ ¸µÅ©¸¦ °¡Áö°í ÀÖ½À´Ï´Ù. :";
- }
- return result;
- }
-
- /*! This is used in LaTeX as the title of the chapter with the
- * index of all modules (Fortran).
- */
- virtual QCString trModulesIndex()
- { return "¸ðµâ »öÀÎ"; }
-
- /*! This is used for translation of the word that will possibly
- * be followed by a single name or by a list of names
- * of the category.
- */
- virtual QCString trModule(bool first_capital, bool singular)
- {
- QCString result((first_capital ? "¸ðµâ" : "¸ðµâ"));
- if (!singular) result+="µé";
- return result;
- }
- /*! This is put at the bottom of a module documentation page and is
- * followed by a list of files that were used to generate the page.
- */
- virtual QCString trGeneratedFromFilesFortran(ClassDef::CompoundType compType,
- bool single)
- { // here s is one of " Module", " Struct" or " Union"
- // single is true implies a single file
- QCString result=(QCString)"´ÙÀ½ ÆÄÀÏ";
- if (single) result+=""; else result+="µé";
- result+="·ÎºÎÅÍ »ý¼ºµÈ ";
- result+="ÀÌ ";
- switch(compType)
- {
- case ClassDef::Class: result+="¸ðµâ"; break;
- case ClassDef::Struct: result+="ŸÀÔ"; break;
- case ClassDef::Union: result+="°ø¿ëü"; break;
- case ClassDef::Interface: result+="ÀÎÅÍÆäÀ̽º"; break;
- case ClassDef::Protocol: result+="ÇÁ·ÎÅäÄÝ"; break;
- case ClassDef::Category: result+="Ä«Å×°í¸®"; break;
- case ClassDef::Exception: result+="¿¹¿Ü"; break;
- }
- result+="ÀÇ ¹®¼­È­ ÆäÀÌÁö:";
- return result;
- }
- /*! This is used for translation of the word that will possibly
- * be followed by a single name or by a list of names
- * of the category.
- */
- virtual QCString trType(bool first_capital, bool singular)
- {
- QCString result((first_capital ? "ŸÀÔ" : "ŸÀÔ"));
- if (!singular) result+="µé";
- return result;
- }
- /*! This is used for translation of the word that will possibly
- * be followed by a single name or by a list of names
- * of the category.
- */
- virtual QCString trSubprogram(bool first_capital, bool singular)
- {
- QCString result((first_capital ? "¼­ºêÇÁ·Î±×·¥" : "¼­ºêÇÁ·Î±×·¥"));
- if (!singular) result+="µé";
- return result;
- }
-
- /*! C# Type Constraint list */
- virtual QCString trTypeConstraints()
- {
- return "ŸÀÔ ÇÑÁ¤ÀÚµé";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.6.0 (mainly for the new search engine)
-//////////////////////////////////////////////////////////////////////////
-
- /*! directory relation for \a name */
- virtual QCString trDirRelation(const char *name)
- {
- return QCString(name)+" °ü°è";
- }
-
- /*! Loading message shown when loading search results */
- virtual QCString trLoading()
- {
- return "·ÎµùÁß...";
- }
-
- /*! Label used for search results in the global namespace */
- virtual QCString trGlobalNamespace()
- {
- return "Àü¿ª À̸§°ø°£";
- }
-
- /*! Message shown while searching */
- virtual QCString trSearching()
- {
- return "°Ë»öÁß...";
- }
-
- /*! Text shown when no search results are found */
- virtual QCString trNoMatches()
- {
- return "ÀÏÄ¡ÇÏ´Â°Í ¾øÀ½";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.6.3 (missing items for the directory pages)
-//////////////////////////////////////////////////////////////////////////
-
- /*! introduction text for the directory dependency graph */
- virtual QCString trDirDependency(const char *name)
- {
- return QCString(name) + "¿¡ ´ëÇÑ µð·ºÅ丮 ÀÇÁ¸ ±×·¡ÇÁ";
- }
-
- /*! when clicking a directory dependency label, a page with a
- * table is shown. The heading for the first column mentions the
- * source file that has a relation to another file.
- */
- virtual QCString trFileIn(const char *name)
- {
- return QCString(name) + "ÀÇ ÆÄÀÏ";
- }
-
- /*! when clicking a directory dependency label, a page with a
- * table is shown. The heading for the second column mentions the
- * destination file that is included.
- */
- virtual QCString trIncludesFileIn(const char *name)
- {
- return QCString(name) + "ÀÇ ÆÄÀÏ Æ÷ÇÔ";
- }
-
- /** Compiles a date string.
- * @param year Year in 4 digits
- * @param month Month of the year: 1=January
- * @param day Day of the Month: 1..31
- * @param dayOfWeek Day of the week: 1=Monday..7=Sunday
- * @param hour Hour of the day: 0..23
- * @param minutes Minutes in the hour: 0..59
- * @param seconds Seconds within the minute: 0..59
- * @param includeTime Include time in the result string?
- */
- virtual QCString trDateTime(int year,int month,int day,int dayOfWeek,
- int hour,int minutes,int seconds,
- bool includeTime)
- {
- static const char *days[] = { "¿ù","È­","¼ö","¸ñ","±Ý","Åä","ÀÏ" };
- static const char *months[] = { "1¿ù","2¿ù","3¿ù","4¿ù","5¿ù","6¿ù","7¿ù","8¿ù","9¿ù","10¿ù","11¿ù","12¿ù" };
- QCString sdate;
- sdate.sprintf("%s %s %d %d",days[dayOfWeek-1],months[month-1],day,year);
- if (includeTime)
- {
- QCString stime;
- stime.sprintf(" %.2d:%.2d:%.2d",hour,minutes,seconds);
- sdate+=stime;
- }
- return sdate;
- }
-
-
-};
-
-#endif
diff --git a/trunk/src/translator_lt.h b/trunk/src/translator_lt.h
deleted file mode 100644
index 3f1bcb6..0000000
--- a/trunk/src/translator_lt.h
+++ /dev/null
@@ -1,1563 +0,0 @@
-/******************************************************************************
- *
- *
- *
- * Copyright (C) 1997-2012 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.
- *
- */
-
-/* Translation from English to Lithanian by Tomas Simonaitis, Mindaugas Radzius and Aidas Berukstis
- * (haden@homelan.lt/mindaugasradzius@takas.lt/aidasber@takas.lt)
- * We tried to keep meaning close to original,
- * if you have any suggestions drop us an email
- * -------------------------------------------
- * Project start :13.May.2k4
- * Last Doxygen version covered : 1.4.3
- *
- * Revisions:
- * Updated to 1.3.9 25.Oct.2k4
- *
-*/
-
-#ifndef TRANSLATOR_LT_H
-#define TRANSLATOR_LT_H
-
-
-class TranslatorLithuanian : public TranslatorAdapter_1_4_6
-{
- public:
-
- // --- Language control methods -------------------
-
- /*! Used for identification of the language. The identification
- * should not be translated. It should be replaced by the name
- * of the language in English using lower-case characters only
- * (e.g. "czech", "japanese", "russian", etc.). It should be equal to
- * the identification used in language.cpp.
- */
- virtual QCString idLanguage()
- { return "lithuanian"; }
-
- /*! Used to get the LaTeX command(s) for the language support.
- * This method should return string with commands that switch
- * LaTeX to the desired language. For example
- * <pre>"\\usepackage[german]{babel}\n"
- * </pre>
- * or
- * <pre>"\\usepackage{polski}\n"
- * "\\usepackage[latin2]{inputenc}\n"
- * "\\usepackage[T1]{fontenc}\n"
- * </pre>
- *
- * The English LaTeX does not use such commands. Because of this
- * the empty string is returned in this implementation.
- */
- virtual QCString latexLanguageSupportCommand()
- {
- return "\\usepackage[T2A]{fontenc}\n"
- "\\usepackage[lithuanian]{babel}\n";
- }
-
- /*! return the language charset. This will be used for the HTML output */
- virtual QCString idLanguageCharset()
- {
- return "iso-8859-13";
- }
-
- // --- Language translation methods -------------------
-
- /*! used in the compound documentation before a list of related functions. */
- virtual QCString trRelatedFunctions()
- { return "Susijæ Funkcijos"; }
-
- /*! subscript for the related functions. */
- virtual QCString trRelatedSubscript()
- { return "Atkreipkite dëmesá, èià ne metodai"; }
-
- /*! header that is put before the detailed description of files, classes and namespaces. */
- virtual QCString trDetailedDescription()
- { return "Smulkus apraðymas"; }
-
- /*! header that is put before the list of typedefs. */
- virtual QCString trMemberTypedefDocumentation()
- { return "Tipo Apraðymo Dokumentacija"; }
-
- /*! header that is put before the list of enumerations. */
- virtual QCString trMemberEnumerationDocumentation()
- { return "Iðvardinimo Dokumentacija"; }
-
- /*! header that is put before the list of member functions. */
- virtual QCString trMemberFunctionDocumentation()
- { return "Metodø Dokumentacija"; }
-
- /*! header that is put before the list of member attributes. */
- virtual QCString trMemberDataDocumentation()
- {
- if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
- {
- return "Lauko apraðymas";
- }
- else
- {
- return "Atributø Dokumentacija";
- }
- }
-
- /*! this is the text of a link put after brief descriptions. */
- virtual QCString trMore()
- { return "Daugiau..."; }
-
- /*! put in the class documentation */
- virtual QCString trListOfAllMembers()
- { return "Visø nariø sàraðas."; }
-
- /*! used as the title of the "list of all members" page of a class */
- virtual QCString trMemberList()
- { return "Nariø sàraðas"; }
-
- /*! this is the first part of a sentence that is followed by a class name */
- virtual QCString trThisIsTheListOfAllMembers()
- { return "Tai galutinis nariø sàraðas "; }
-
- /*! this is the remainder of the sentence after the class name */
- virtual QCString trIncludingInheritedMembers()
- { return ", átraukiant visus paveldëtus narius."; }
-
- /*! this is put at the author sections at the bottom of man pages.
- * parameter s is name of the project name.
- */
- virtual QCString trGeneratedAutomatically(const char *s)
- { QCString result="Automatiðkai sugeneruota Doxygen árankiu";
- if (s) result+=(QCString)" "+s;
- result+=" ið programos kodo.";
- return result;
- }
-
- /*! put after an enum name in the list of all members */
- virtual QCString trEnumName()
- { return "iðvardinimo vardas"; }
-
- /*! put after an enum value in the list of all members */
- virtual QCString trEnumValue()
- { return "iðvardinimo reikðmë"; }
-
- /*! put after an undocumented member in the list of all members */
- virtual QCString trDefinedIn()
- { return "apibrëþta"; }
-
- // quick reference sections
-
- /*! This is put above each page as a link to the list of all groups of
- * compounds or files (see the \\group command).
- */
- virtual QCString trModules()
- { return "Moduliai"; }
-
- /*! This is put above each page as a link to the class hierarchy */
- virtual QCString trClassHierarchy()
- { return "Klasiø hierarchija"; }
-
- /*! This is put above each page as a link to the list of annotated classes */
- virtual QCString trCompoundList()
- {
- if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
- {
- return "Duomenø Struktûros";
- }
- else
- {
- return "Klasës";
- }
- }
-
- /*! This is put above each page as a link to the list of documented files */
- virtual QCString trFileList()
- { return "Failai"; }
-
- /*! This is put above each page as a link to all members of compounds. */
- virtual QCString trCompoundMembers()
- {
- if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
- {
- return "Duomenø Laukai";
- }
- else
- {
- return "Klasiø Nariai";
- }
- }
-
- /*! This is put above each page as a link to all members of files. */
- virtual QCString trFileMembers()
- {
- if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
- {
- return "Globalûs Nariai";
- }
- else
- {
- return "Globalûs Nariai";
- }
- }
-
- /*! This is put above each page as a link to all related pages. */
- virtual QCString trRelatedPages()
- { return "Susijæ Puslapiai"; }
-
- /*! This is put above each page as a link to all examples. */
- virtual QCString trExamples()
- { return "Pavyzdþiai"; }
-
- /*! This is put above each page as a link to the search engine. */
- virtual QCString trSearch()
- { return "Paieðka"; }
-
- /*! This is an introduction to the class hierarchy. */
- virtual QCString trClassHierarchyDescription()
- { return "Ðis paveldëjimo sàraðas yra beveik surikiuotas "
- "abëcëlës tvarka:";
- }
-
- /*! This is an introduction to the list with all files. */
- virtual QCString trFileListDescription(bool extractAll)
- {
- QCString result="Visø ";
- if (!extractAll) result+="dokumentuotø ";
- result+="failø sàraðas su trumpais apraðymais:";
- return result;
- }
-
- /*! This is an introduction to the annotated compound list. */
- virtual QCString trCompoundListDescription()
- {
-
- if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
- {
- return "Duomenø struktûros su trumpais apraðymais:";
- }
- else
- {
- return "Klasës, struktûros, "
- "sàjungos ir sàsajos su trumpais apraðymais:";
- }
- }
-
- /*! This is an introduction to the page with all class members. */
- virtual QCString trCompoundMembersDescription(bool extractAll)
- {
- QCString result="Visø ";
- if (!extractAll)
- {
- result+="dokumentuotø ";
- }
- if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
- {
- result+="struktûrø ir sàjungø laukø sàraðas";
- }
- else
- {
- result+="klasiø nariai";
- }
- result+=" su ryðiais á ";
- if (!extractAll)
- {
- if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
- {
- result+="struktûrø/sàjungø kiekvieno lauko dokumentacijà:";
- }
- else
- {
- result+="klasës dokumentacija kiekvienam nariui:";
- }
- }
- else
- {
- if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
- {
- result+="struktûros/sàjungos, kurios priklauso:";
- }
- else
- {
- result+="klasës, kurios priklauso:";
- }
- }
- return result;
- }
-
- /*! This is an introduction to the page with all file members. */
- virtual QCString trFileMembersDescription(bool extractAll)
- {
- QCString result="Sàraðas visø ";
- if (!extractAll) result+="dokumentuotø ";
-
- if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
- {
- result+="funkcijø, kintamøjø, apibrëþimø, iðvardinimø, ir tipø apibrëþimø";
- }
- else
- {
- result+="globaliø nariø";
- }
- result+=" su ryðiais á ";
- if (extractAll)
- result+="failus, kuriems jie priklauso:";
- else
- result+="dokumentacija:";
- return result;
- }
-
- /*! This is an introduction to the page with the list of all examples */
- virtual QCString trExamplesDescription()
- { return "Visø pavyzdþiø sàraðas:"; }
-
- /*! This is an introduction to the page with the list of related pages */
- virtual QCString trRelatedPagesDescription()
- { return "Visø susijusiø dokumentacijos puslapiø sàraðas:"; }
-
- /*! This is an introduction to the page with the list of class/file groups */
- virtual QCString trModulesDescription()
- { return "Visø moduliø sàraðas:"; }
-
- // index titles (the project name is prepended for these)
-
- /*! This is used in HTML as the title of index.html. */
- virtual QCString trDocumentation()
- { return "Dokumentacija"; }
-
- /*! This is used in LaTeX as the title of the chapter with the
- * index of all groups.
- */
- virtual QCString trModuleIndex()
- { return "Modulio Indeksas"; }
-
- /*! This is used in LaTeX as the title of the chapter with the
- * class hierarchy.
- */
- virtual QCString trHierarchicalIndex()
- { return "Hierarchijos Indeksas"; }
-
- /*! This is used in LaTeX as the title of the chapter with the
- * annotated compound index.
- */
- virtual QCString trCompoundIndex()
- {
- if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
- {
- return "Duomenø Struktûros Indeksas";
- }
- else
- {
- return "Klasës Indeksas";
- }
- }
-
- /*! This is used in LaTeX as the title of the chapter with the
- * list of all files.
- */
- virtual QCString trFileIndex()
- { return "Failo Indeksas"; }
-
- /*! This is used in LaTeX as the title of the chapter containing
- * the documentation of all groups.
- */
- virtual QCString trModuleDocumentation()
- { return "Modulio Dokumentacija"; }
-
- /*! This is used in LaTeX as the title of the chapter containing
- * the documentation of all classes, structs and unions.
- */
- virtual QCString trClassDocumentation()
- {
- if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
- {
- return "Duomenø Struktûros Dokumentacija";
- }
- else
- {
- return "Klasës Dokumentacija";
- }
- }
-
- /*! This is used in LaTeX as the title of the chapter containing
- * the documentation of all files.
- */
- virtual QCString trFileDocumentation()
- { return "Failo Dokumentacija"; }
-
- /*! This is used in LaTeX as the title of the chapter containing
- * the documentation of all examples.
- */
- virtual QCString trExampleDocumentation()
- { return "Pavyzdþio Dokumentacija"; }
-
- /*! This is used in LaTeX as the title of the chapter containing
- * the documentation of all related pages.
- */
- virtual QCString trPageDocumentation()
- { return "Puslapio Dokumentacija"; }
-
- /*! This is used in LaTeX as the title of the document */
- virtual QCString trReferenceManual()
- { return "Informacinis Vadovas"; }
-
- /*! This is used in the documentation of a file as a header before the
- * list of defines
- */
- virtual QCString trDefines()
- { return "Apibrëþimai"; }
-
- /*! This is used in the documentation of a file as a header before the
- * list of function prototypes
- */
- virtual QCString trFuncProtos()
- { return "Funkcijø Prototipai"; }
-
- /*! This is used in the documentation of a file as a header before the
- * list of typedefs
- */
- virtual QCString trTypedefs()
- { return "Tipø apibrëþimai"; }
-
- /*! This is used in the documentation of a file as a header before the
- * list of enumerations
- */
- virtual QCString trEnumerations()
- { return "Iðvardinimai"; }
-
- /*! This is used in the documentation of a file as a header before the
- * list of (global) functions
- */
- virtual QCString trFunctions()
- { return "Funkcijos"; }
-
- /*! This is used in the documentation of a file as a header before the
- * list of (global) variables
- */
- virtual QCString trVariables()
- { return "Kintamieji"; }
-
- /*! This is used in the documentation of a file as a header before the
- * list of (global) variables
- */
- virtual QCString trEnumerationValues()
- { return "Iðvardinimø reikðmës"; }
-
- /*! This is used in the documentation of a file before the list of
- * documentation blocks for defines
- */
- virtual QCString trDefineDocumentation()
- { return "Apibrëþimø Dokumentacija"; }
-
- /*! This is used in the documentation of a file/namespace before the list
- * of documentation blocks for function prototypes
- */
- virtual QCString trFunctionPrototypeDocumentation()
- { return "Funkcijø Prototipø Dokumentacija"; }
-
- /*! This is used in the documentation of a file/namespace before the list
- * of documentation blocks for typedefs
- */
- virtual QCString trTypedefDocumentation()
- { return "Tipø apibrëþimø Dokumentacija"; }
-
- /*! This is used in the documentation of a file/namespace before the list
- * of documentation blocks for enumeration types
- */
- virtual QCString trEnumerationTypeDocumentation()
- { return "Iðvardinimo Tipo Dokumentacija"; }
-
- /*! This is used in the documentation of a file/namespace before the list
- * of documentation blocks for functions
- */
- virtual QCString trFunctionDocumentation()
- { return "Funkcijos Dokumentacija"; }
-
- /*! This is used in the documentation of a file/namespace before the list
- * of documentation blocks for variables
- */
- virtual QCString trVariableDocumentation()
- { return "Kintamojo Dokumentacija"; }
-
- /*! This is used in the documentation of a file/namespace/group before
- * the list of links to documented compounds
- */
- virtual QCString trCompounds()
- {
- if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
- {
- return "Duomenø struktøros";
- }
- else
- {
- return "Klasës";
- }
- }
-
- /*! This is used in the standard footer of each page and indicates when
- * the page was generated
- */
- virtual QCString trGeneratedAt(const char *date,const char *projName)
- {
- QCString result=(QCString)"Sugeneruota "+date;/*FIXME*/
- if (projName) result+=(QCString)" "+projName;/*FIXME*/
- result+=(QCString)" ";/*FIXME*/
- return result;
- }
- /*! This is part of the sentence used in the standard footer of each page.
- */
- virtual QCString trWrittenBy()
- {
- return "paraðyta";
- }
-
- /*! this text is put before a class diagram */
- virtual QCString trClassDiagram(const char *clName)
- {
- return (QCString)"Paveldimumo diagrama "+clName+":"; /*FIXME*/
- }
-
- /*! this text is generated when the \\internal command is used. */
- virtual QCString trForInternalUseOnly()
- { return "Tiktai vidiniam naudojimui."; }
-
- /*! this text is generated when the \\warning command is used. */
- virtual QCString trWarning()
- { return "Áspëjimas"; }
-
- /*! this text is generated when the \\version command is used. */
- virtual QCString trVersion()
- { return "Versija"; }
-
- /*! this text is generated when the \\date command is used. */
- virtual QCString trDate()
- { return "Data"; }
-
- /*! this text is generated when the \\return command is used. */
- virtual QCString trReturns()
- { return "Graþina"; }
-
- /*! this text is generated when the \\sa command is used. */
- virtual QCString trSeeAlso()
- { return "Taip pat þiûrëti"; }
-
- /*! this text is generated when the \\param command is used. */
- virtual QCString trParameters()
- { return "Parametrai"; }
-
- /*! this text is generated when the \\exception command is used. */
- virtual QCString trExceptions()
- { return "Iðimtys"; }
-
- /*! this text is used in the title page of a LaTeX document. */
- virtual QCString trGeneratedBy()
- { return "Sugeneruota"; }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 0.49-990307
-//////////////////////////////////////////////////////////////////////////
-
- /*! used as the title of page containing all the index of all namespaces. */
- virtual QCString trNamespaceList()
- { return "Varø Srities Sàraðas"; }
-
- /*! used as an introduction to the namespace list */
- virtual QCString trNamespaceListDescription(bool extractAll)
- {
- QCString result="Sàraðas visø ";
- if (!extractAll) result+="dokumentuotø ";
- result+="vardø srièiø su trumpais apraðymais:";
- return result;
- }
-
- /*! used in the class documentation as a header before the list of all
- * friends of a class
- */
- virtual QCString trFriends()
- { return "Draugai"; }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 0.49-990405
-//////////////////////////////////////////////////////////////////////////
-
- /*! used in the class documentation as a header before the list of all
- * related classes
- */
- virtual QCString trRelatedFunctionDocumentation()
- { return "Draugiðkø Ir Susijusiø Funkcijø Dokumentacija"; }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 0.49-990425
-//////////////////////////////////////////////////////////////////////////
-
- /*! used as the title of the HTML page of a class/struct/union */
- virtual QCString trCompoundReference(const char *clName,
- ClassDef::CompoundType compType,
- bool isTemplate)
- {
- QCString result=(QCString)clName;
- switch(compType)
- {
- case ClassDef::Class: result+=" Klasë"; break;
- case ClassDef::Struct: result+=" Struktûra"; break;
- case ClassDef::Union: result+=" Sàjunga"; break;
- case ClassDef::Interface: result+=" Sàsaja"; break;
- case ClassDef::Protocol: result+=" Protokolas"; break;
- case ClassDef::Category: result+=" Kategorija"; break;
- case ClassDef::Exception: result+=" Iðimtis"; break;
- }
- if (isTemplate) result+=" Ðablonas";
- return result;
- }
-
- /*! used as the title of the HTML page of a file */
- virtual QCString trFileReference(const char *fileName)
- {
- QCString result=fileName;
- result+=" Failo Nuoroda";
- return result;
- }
-
- /*! used as the title of the HTML page of a namespace */
- virtual QCString trNamespaceReference(const char *namespaceName)
- {
- QCString result=namespaceName;
- result+=" Vardø Srities Nuoroda";
- return result;
- }
-
- virtual QCString trPublicMembers()
- { return "Vieði Metodai"; }
- virtual QCString trPublicSlots()
- { return "Vieði Slotai"; } /*FIXME*/
- virtual QCString trSignals()
- { return "Signalai"; }
- virtual QCString trStaticPublicMembers()
- { return "Statiniai Vieði Metodai"; }
- virtual QCString trProtectedMembers()
- { return "Apsaugoti Metodai"; }
- virtual QCString trProtectedSlots()
- { return "Apsaugoti Slotai"; }/*FIXME*/
- virtual QCString trStaticProtectedMembers()
- { return "Statiniai Apsaugoti Metodai"; }
- virtual QCString trPrivateMembers()
- { return "Privatatûs Metodai"; }
- virtual QCString trPrivateSlots()
- { return "Privatûs Slotai"; }/*FIXME*/
- virtual QCString trStaticPrivateMembers()
- { return "Statiniai Privatûs Metodai"; }
-
- /*! this function is used to produce a comma-separated list of items.
- * use generateMarker(i) to indicate where item i should be put.
- */
- virtual QCString trWriteList(int numEntries)
- {
- QCString result;
- int i;
- // the inherits list contain `numEntries' classes
- for (i=0;i<numEntries;i++)
- {
- // use generateMarker to generate placeholders for the class links!
- result+=generateMarker(i); // generate marker for entry i in the list
- // (order is left to right)
-
- if (i!=numEntries-1) // not the last entry, so we need a separator
- {
- if (i<numEntries-2) // not the fore last entry
- result+=", ";
- else // the fore last entry
- result+=", ir ";
- }
- }
- return result;
- }
-
- /*! used in class documentation to produce a list of base classes,
- * if class diagrams are disabled.
- */
- virtual QCString trInheritsList(int numEntries)
- {
- return "Paveldi "+trWriteList(numEntries)+".";
- }
-
- /*! used in class documentation to produce a list of super classes,
- * if class diagrams are disabled.
- */
- virtual QCString trInheritedByList(int numEntries)
- {
- return "Paveldëta "+trWriteList(numEntries)+".";
- }
-
- /*! used in member documentation blocks to produce a list of
- * members that are hidden by this one.
- */
- virtual QCString trReimplementedFromList(int numEntries)
- {
- return "Perkrauna metodà ið "+trWriteList(numEntries)+".";
- }
-
- /*! used in member documentation blocks to produce a list of
- * all member that overwrite the implementation of this member.
- */
- virtual QCString trReimplementedInList(int numEntries)
- {
- return "Metodas perkraunamas "+trWriteList(numEntries)+".";
- }
-
- /*! This is put above each page as a link to all members of namespaces. */
- virtual QCString trNamespaceMembers()
- { return "Vardø Srities Nariai"; }
-
- /*! This is an introduction to the page with all namespace members */
- virtual QCString trNamespaceMemberDescription(bool extractAll)
- {
- QCString result="Sàraðas visø ";
- if (!extractAll) result+="dokumentuotø ";
- result+="vardø srities nariø su nuorodomis á ";
- if (extractAll)
- result+="vardø srities dokumentacijà kiekvienam nariui:";
- else
- result+="vardø sritis, kurioms jos priklauso:";
- return result;
- }
- /*! This is used in LaTeX as the title of the chapter with the
- * index of all namespaces.
- */
- virtual QCString trNamespaceIndex()
- { return "Vardø Srities Indeksas"; }
-
- /*! This is used in LaTeX as the title of the chapter containing
- * the documentation of all namespaces.
- */
- virtual QCString trNamespaceDocumentation()
- { return "Vardø Srities Dokumentacija"; }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 0.49-990522
-//////////////////////////////////////////////////////////////////////////
-
- /*! This is used in the documentation before the list of all
- * namespaces in a file.
- */
- virtual QCString trNamespaces()
- { return "Vardø Sritys"; }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 0.49-990728
-//////////////////////////////////////////////////////////////////////////
-
- /*! This is put at the bottom of a class documentation page and is
- * followed by a list of files that were used to generate the page.
- */
- virtual QCString trGeneratedFromFiles(ClassDef::CompoundType compType,
- bool single)
- { // here s is one of " Class", " Struct" or " Union"
- // single is true implies a single file
- QCString result=(QCString)"Dokumentacija ";
- switch(compType)
- {
- case ClassDef::Class: result+="ðiai klasei"; break;
- case ClassDef::Struct: result+="ðiai struktûrai"; break;
- case ClassDef::Union: result+="ðiai sàjungai"; break;
- case ClassDef::Interface: result+="ðiai sàsajai"; break;
- case ClassDef::Protocol: result+="ðiam protocolui"; break;
- case ClassDef::Category: result+="ðiai kategorijai"; break;
- case ClassDef::Exception: result+="ðiai iðimèiai"; break;
- }
- result+=" sugeneruota ið ";
- if (single) result+="ðio failo:"; else result+="ðiø failø:";
- return result;
- }
-
- /*! This is in the (quick) index as a link to the alphabetical compound
- * list.
- */
- virtual QCString trAlphabeticalList()
- { return "Abëcëlinis Sàraðas"; }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 0.49-990901
-//////////////////////////////////////////////////////////////////////////
-
- /*! This is used as the heading text for the retval command. */
- virtual QCString trReturnValues()
- { return "Graþinamos reikðmës"; }
-
- /*! This is in the (quick) index as a link to the main page (index.html)
- */
- virtual QCString trMainPage()
- { return "Pagrindinis Puslapis"; }
-
- /*! This is used in references to page that are put in the LaTeX
- * documentation. It should be an abbreviation of the word page.
- */
- virtual QCString trPageAbbreviation()
- { return "psl."; }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 0.49-991003
-//////////////////////////////////////////////////////////////////////////
-
- virtual QCString trDefinedAtLineInSourceFile()
- {
- return "Apibrëþimas failo @1 eilutëje @0.";
- }
- virtual QCString trDefinedInSourceFile()
- {
- return "Apibrëþimas faile @0.";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 0.49-991205
-//////////////////////////////////////////////////////////////////////////
-
- virtual QCString trDeprecated()
- {
- return "Smerktina";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.0.0
-//////////////////////////////////////////////////////////////////////////
-
- /*! this text is put before a collaboration diagram */
- virtual QCString trCollaborationDiagram(const char *clName)
- {
- return (QCString)"Bendradarbiavimo diagrama "+clName+":";/*FIXME*/
- }
- /*! this text is put before an include dependency graph */
- virtual QCString trInclDepGraph(const char *fName)
- {
- return (QCString)"Átraukimo priklausomybiø diagrama "+fName+":";/*FIXME*/
- }
- /*! header that is put before the list of constructor/destructors. */
- virtual QCString trConstructorDocumentation()
- {
- return "Konstruktoriaus ir Destruktoriaus Dokumentacija";
- }
- /*! Used in the file documentation to point to the corresponding sources. */
- virtual QCString trGotoSourceCode()
- {
- return "Eiti á ðio failo programos kodà.";
- }
- /*! Used in the file sources to point to the corresponding documentation. */
- virtual QCString trGotoDocumentation()
- {
- return "Eiti á ðio failo dokumentacijà.";
- }
- /*! Text for the \\pre command */
- virtual QCString trPrecondition()
- {
- return "Iðakstinë sàlyga";
- }
- /*! Text for the \\post command */
- virtual QCString trPostcondition()
- {
- return "Postcondition";/*FIXME*/
- }
- /*! Text for the \\invariant command */
- virtual QCString trInvariant()
- {
- return "Pastovus";
- }
- /*! Text shown before a multi-line variable/enum initialization */
- virtual QCString trInitialValue()
- {
- return "Pradinë reikðmë:";
- }
- /*! Text used the source code in the file index */
- virtual QCString trCode()
- {
- return "tekstas";/*FIXME*/
- }
- virtual QCString trGraphicalHierarchy()
- {
- return "Grafinë Klasës Hierarchija";
- }
- virtual QCString trGotoGraphicalHierarchy()
- {
- return "Eiti á grafinæ klasës hierarchijà";
- }
- virtual QCString trGotoTextualHierarchy()
- {
- return "Eiti á tekstinæ klasës hierarchijà";
- }
- virtual QCString trPageIndex()
- {
- return "Puslapio Indeksas";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.1.0
-//////////////////////////////////////////////////////////////////////////
-
- virtual QCString trNote()
- {
- return "Pastaba";
- }
- virtual QCString trPublicTypes()
- {
- return "Vieði Tipai";
- }
- virtual QCString trPublicAttribs()
- {
- if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
- {
- return "Duomenø Laukai";
- }
- else
- {
- return "Vieði Atributai";
- }
- }
- virtual QCString trStaticPublicAttribs()
- {
- return "Statiniai Vieði Atributai";
- }
- virtual QCString trProtectedTypes()
- {
- return "Apsaugoti Tipai";
- }
- virtual QCString trProtectedAttribs()
- {
- return "Apsaugoti Atributai";
- }
- virtual QCString trStaticProtectedAttribs()
- {
- return "Statiniai Apsaugoti Atributai";
- }
- virtual QCString trPrivateTypes()
- {
- return "Privatûs Tipai";
- }
- virtual QCString trPrivateAttribs()
- {
- return "Privatûs Atributai";
- }
- virtual QCString trStaticPrivateAttribs()
- {
- return "Statiniai Privatûs Atributai";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.1.3
-//////////////////////////////////////////////////////////////////////////
-
- /*! Used as a marker that is put before a \\todo item */
- virtual QCString trTodo()
- {
- return "Daryti";
- }
- /*! Used as the header of the todo list */
- virtual QCString trTodoList()
- {
- return "Tolimesni Darbai";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.1.4
-//////////////////////////////////////////////////////////////////////////
-
- virtual QCString trReferencedBy()
- {
- return "Naudojamas";
- }
- virtual QCString trRemarks()
- {
- return "Pastabos";
- }
- virtual QCString trAttention()
- {
- return "Attention";
- }
- virtual QCString trInclByDepGraph()
- {
- return "Ðis grafas rodo, kuris failas tiesiogiai ar "
- "netiesiogiai átraukia ðá failà:";
- }
- virtual QCString trSince()
- {
- return "Nuo";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.1.5
-//////////////////////////////////////////////////////////////////////////
-
- /*! title of the graph legend page */
- virtual QCString trLegendTitle()
- {
- return "Grafo Legenda";
- }
- /*! page explaining how the dot graph's should be interpreted
- * The %A in the text below are to prevent link to classes called "A".
- */
- virtual QCString trLegendDocs()
- {
- return
- "Ðis puslapis paaiðkina, kaip interpretuoti sugeneruotus grafus "
- "su Doxygen árankiu.<p>\n"
- "Panagrinëkite pavyzdá:\n"
- "\\kodo pradþia\n"
- "/*! Invisible class because of truncation */\n"
- "class Invisible { };\n\n"
- "/*! Truncated class, inheritance relation is hidden */\n"
- "class Truncated : public Invisible { };\n\n"
- "/* Class not documented with doxygen comments */\n"
- "class Undocumented { };\n\n"
- "/*! Class that is inherited using public inheritance */\n"
- "class PublicBase : public Truncated { };\n\n"
- "/*! A template class */\n"
- "template<class T> class Templ { };\n\n"
- "/*! Class that is inherited using protected inheritance */\n"
- "class ProtectedBase { };\n\n"
- "/*! Class that is inherited using private inheritance */\n"
- "class PrivateBase { };\n\n"
- "/*! Class that is used by the Inherited class */\n"
- "class Used { };\n\n"
- "/*! Super class that inherits a number of other classes */\n"
- "class Inherited : public PublicBase,\n"
- " protected ProtectedBase,\n"
- " private PrivateBase,\n"
- " public Undocumented,\n"
- " public Templ<int>\n"
- "{\n"
- " private:\n"
- " Used *m_usedClass;\n"
- "};\n"
- "\\endcode\n"
- "If the \\c MAX_DOT_GRAPH_HEIGHT tag in the configuration file "
- "is set to 240 this will result in the following graph:"
- "<p><center><img alt=\"\" src=\"graph_legend."+Config_getEnum("DOT_IMAGE_FORMAT")+"\"></center>\n"
- "<p>\n"
- "The boxes in the above graph have the following meaning:\n"
- "<ul>\n"
- "<li>%A filled black box represents the struct or class for which the "
- "graph is generated.\n"
- "<li>%A box with a black border denotes a documented struct or class.\n"
- "<li>%A box with a grey border denotes an undocumented struct or class.\n"
- "<li>%A box with a red border denotes a documented struct or class for"
- "which not all inheritance/containment relations are shown. %A graph is "
- "truncated if it does not fit within the specified boundaries.\n"
- "</ul>\n"
- "The arrows have the following meaning:\n"
- "<ul>\n"
- "<li>%A dark blue arrow is used to visualize a public inheritance "
- "relation between two classes.\n"
- "<li>%A dark green arrow is used for protected inheritance.\n"
- "<li>%A dark red arrow is used for private inheritance.\n"
- "<li>%A purple dashed arrow is used if a class is contained or used "
- "by another class. The arrow is labeled with the variable(s) "
- "through which the pointed class or struct is accessible.\n"
- "<li>%A yellow dashed arrow denotes a relation between a template instance and "
- "the template class it was instantiated from. The arrow is labeled with "
- "the template parameters of the instance.\n"
- "</ul>\n";
- }
- /*! text for the link to the legend page */
- virtual QCString trLegend()
- {
- return "legenda";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.2.0
-//////////////////////////////////////////////////////////////////////////
-
- /*! Used as a marker that is put before a test item */
- virtual QCString trTest()
- {
- return "Testas";
- }
- /*! Used as the header of the test list */
- virtual QCString trTestList()
- {
- return "Testo Sàraðas";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.2.1
-//////////////////////////////////////////////////////////////////////////
-
- /*! Used as a section header for KDE-2 IDL methods */
- virtual QCString trDCOPMethods()
- {
- return "DCOP Metodai";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.2.2
-//////////////////////////////////////////////////////////////////////////
-
- /*! Used as a section header for IDL properties */
- virtual QCString trProperties()
- {
- return "Savybës";
- }
- /*! Used as a section header for IDL property documentation */
- virtual QCString trPropertyDocumentation()
- {
- return "Savybës Dokumentacija";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.2.4
-//////////////////////////////////////////////////////////////////////////
-
- /*! Used for Java classes in the summary section of Java packages */
- virtual QCString trClasses()
- {
- if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
- {
- return "Duomenø Struktûros";
- }
- else
- {
- return "Klasës";
- }
- }
- /*! Used as the title of a Java package */
- virtual QCString trPackage(const char *name)
- {
- return (QCString)"Paketas "+name;
- }
- /*! Title of the package index page */
- virtual QCString trPackageList()
- {
- return "Paketo Sàraðas";
- }
- /*! The description of the package index page */
- virtual QCString trPackageListDescription()
- {
- return "Paketai su trumpu apraðymu:";
- }
- /*! The link name in the Quick links header for each page */
- virtual QCString trPackages()
- {
- return "Paketai";
- }
- /*! Text shown before a multi-line define */
- virtual QCString trDefineValue()
- {
- return "Reikðmë:";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.2.5
-//////////////////////////////////////////////////////////////////////////
-
- /*! Used as a marker that is put before a \\bug item */
- virtual QCString trBug()
- {
- return "Klaida";
- }
- /*! Used as the header of the bug list */
- virtual QCString trBugList()
- {
- return "Klaidø Sàraðas";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.2.6
-//////////////////////////////////////////////////////////////////////////
-
- /*! Used as ansicpg for RTF file
- *
- * The following table shows the correlation of Charset name, Charset Value and
- * <pre>
- * Codepage number:
- * Charset Name Charset Value(hex) Codepage number
- * ------------------------------------------------------
- * DEFAULT_CHARSET 1 (x01)
- * SYMBOL_CHARSET 2 (x02)
- * OEM_CHARSET 255 (xFF)
- * ANSI_CHARSET 0 (x00) 1252
- * RUSSIAN_CHARSET 204 (xCC) 1251
- * EE_CHARSET 238 (xEE) 1250
- * GREEK_CHARSET 161 (xA1) 1253
- * TURKISH_CHARSET 162 (xA2) 1254
- * BALTIC_CHARSET 186 (xBA) 1257
- * HEBREW_CHARSET 177 (xB1) 1255
- * ARABIC _CHARSET 178 (xB2) 1256
- * SHIFTJIS_CHARSET 128 (x80) 932
- * HANGEUL_CHARSET 129 (x81) 949
- * GB2313_CHARSET 134 (x86) 936
- * CHINESEBIG5_CHARSET 136 (x88) 950
- * </pre>
- *
- */
- virtual QCString trRTFansicp()
- {
- return "1252";
- }
-
-
- /*! Used as ansicpg for RTF fcharset
- * \see trRTFansicp() for a table of possible values.
- */
- virtual QCString trRTFCharSet()
- {
- return "0";
- }
-
- /*! Used as header RTF general index */
- virtual QCString trRTFGeneralIndex()
- {
- return "Indeksas";
- }
-
- /*! This is used for translation of the word that will possibly
- * be followed by a single name or by a list of names
- * of the category.
- */
- virtual QCString trClass(bool first_capital, bool singular)
- {
- QCString result((first_capital ? "Klasë" : "klasë"));
- if (!singular) result+="s";
- return result;
- }
-
- /*! This is used for translation of the word that will possibly
- * be followed by a single name or by a list of names
- * of the category.
- */
- virtual QCString trFile(bool first_capital, bool singular)
- {
- QCString result((first_capital ? "Faila" : "faila"));
- if (!singular) result+="i";
- else result+="s";
- return result;
- }
-
- /*! This is used for translation of the word that will possibly
- * be followed by a single name or by a list of names
- * of the category.
- */
- virtual QCString trNamespace(bool first_capital, bool singular)
- {
- QCString result((first_capital ? "Vardø srit" : "vardø srit"));
- if (!singular) result+="ys";
- else result+="is";
- return result;
- }
-
- /*! This is used for translation of the word that will possibly
- * be followed by a single name or by a list of names
- * of the category.
- */
- virtual QCString trGroup(bool first_capital, bool singular)
- {
- QCString result((first_capital ? "Grupë" : "grupë"));
- if (!singular) result+="s";
- return result;
- }
-
- /*! This is used for translation of the word that will possibly
- * be followed by a single name or by a list of names
- * of the category.
- */
- virtual QCString trPage(bool first_capital, bool singular)
- {
- QCString result((first_capital ? "Puslapi" : "puslapi"));
- if (!singular) result+="ai";
- else result+="s";
- return result;
- }
-
- /*! This is used for translation of the word that will possibly
- * be followed by a single name or by a list of names
- * of the category.
- */
- virtual QCString trMember(bool first_capital, bool singular)
- {
- QCString result((first_capital ? "Nar" : "nar"));
- if (!singular) result+="iai";
- else result+="ys";
- return result;
- }
-
- /*! This is used for translation of the word that will possibly
- * be followed by a single name or by a list of names
- * of the category.
- */
- virtual QCString trGlobal(bool first_capital, bool singular)
- {
- QCString result((first_capital ? "Global" : "global"));
- if (!singular) result+="ûs";
- else result+="us";
- return result;
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.2.7
-//////////////////////////////////////////////////////////////////////////
-
- /*! This text is generated when the \\author command is used and
- * for the author section in man pages. */
- virtual QCString trAuthor(bool first_capital, bool singular)
- {
- QCString result((first_capital ? "Autori" : "autori"));
- if (!singular) result+="ai";
- else result+="us";
- return result;
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.2.11
-//////////////////////////////////////////////////////////////////////////
-
- /*! This text is put before the list of members referenced by a member
- */
- virtual QCString trReferences()
- {
- return "Ryðiai";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.2.13
-//////////////////////////////////////////////////////////////////////////
-
- /*! used in member documentation blocks to produce a list of
- * members that are implemented by this one.
- */
- virtual QCString trImplementedFromList(int numEntries)
- {
- return "Realizuoja "+trWriteList(numEntries)+".";
- }
-
- /*! used in member documentation blocks to produce a list of
- * all members that implement this abstract member.
- */
- virtual QCString trImplementedInList(int numEntries)
- {
- return "Realizuota "+trWriteList(numEntries)+".";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.2.16
-//////////////////////////////////////////////////////////////////////////
-
- /*! used in RTF documentation as a heading for the Table
- * of Contents.
- */
- virtual QCString trRTFTableOfContents()
- {
- return "Turinys";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.2.17
-//////////////////////////////////////////////////////////////////////////
-
- /*! Used as the header of the list of item that have been
- * flagged deprecated
- */
- virtual QCString trDeprecatedList()
- {
- return "Smerktinumø Sàraðas";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.2.18
-//////////////////////////////////////////////////////////////////////////
-
- /*! Used as a header for declaration section of the events found in
- * a C# program
- */
- virtual QCString trEvents()
- {
- return "Ávykiai";
- }
- /*! Header used for the documentation section of a class' events. */
- virtual QCString trEventDocumentation()
- {
- return "Ávykio Dokumentacija";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.3
-//////////////////////////////////////////////////////////////////////////
-
- /*! Used as a heading for a list of Java class types with package scope.
- */
- virtual QCString trPackageTypes()
- {
- return "Paketo Tipai";
- }
- /*! Used as a heading for a list of Java class functions with package
- * scope.
- */
- virtual QCString trPackageMembers()
- {
- return "Paketo Funkcijos";
- }
- /*! Used as a heading for a list of static Java class functions with
- * package scope.
- */
- virtual QCString trStaticPackageMembers()
- {
- return "Statinës Paketo Funkcijos";
- }
- /*! Used as a heading for a list of Java class variables with package
- * scope.
- */
- virtual QCString trPackageAttribs()
- {
- return "Paketo Atributai";
- }
- /*! Used as a heading for a list of static Java class variables with
- * package scope.
- */
- virtual QCString trStaticPackageAttribs()
- {
- return "Statiniai Paketo Atributai";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.3.1
-//////////////////////////////////////////////////////////////////////////
-
- /*! Used in the quick index of a class/file/namespace member list page
- * to link to the unfiltered list of all members.
- */
- virtual QCString trAll()
- {
- return "Visi";
- }
- /*! Put in front of the call graph for a function. */
- virtual QCString trCallGraph()
- {
- return "Funkcijos kvietimo grafas:";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.3.3
-//////////////////////////////////////////////////////////////////////////
-
- /*! When the search engine is enabled this text is put in the header
- * of each page before the field where one can enter the text to search
- * for.
- */
- virtual QCString trSearchForIndex()
- {
- return "Ieðkoti";
- }
- /*! This string is used as the title for the page listing the search
- * results.
- */
- virtual QCString trSearchResultsTitle()
- {
- return "Paieðkos Rezultatai";
- }
- /*! This string is put just before listing the search results. The
- * text can be different depending on the number of documents found.
- * Inside the text you can put the special marker $num to insert
- * the number representing the actual number of search results.
- * The @a numDocuments parameter can be either 0, 1 or 2, where the
- * value 2 represents 2 or more matches. HTML markup is allowed inside
- * the returned string.
- */
- virtual QCString trSearchResults(int numDocuments)
- {
- if (numDocuments==0)
- {
- return "Atsipraðome, jokiø dokumentø nerasta pagal Jûsø uþklausà.";
- }
- else if (numDocuments==1)
- {
- return "Surasta <b>1</b> dokumentas, atitinkantis Jûsø uþklausà.";
- }
- else
- {
- return "Surasta <b>$num</b> dokumentø, atitinkanèiø Jûsø uþklausà. "
- "Pirmiausiai rodomi labiausiai tenkinantys uþklausà.";
- }
- }
- /*! This string is put before the list of matched words, for each search
- * result. What follows is the list of words that matched the query.
- */
- virtual QCString trSearchMatches()
- {
- return "Atitikmenys:";
- }
-//////////////////////////////////////////////////////////////////////////
-// new since 1.3.8
-//////////////////////////////////////////////////////////////////////////
-
- /*! This is used in HTML as the title of page with source code for file filename
- */
- virtual QCString trSourceFile(QCString& filename)
- {
- return filename + " iðeities tekstas";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.3.9
-//////////////////////////////////////////////////////////////////////////
-
- /*! This is used as the name of the chapter containing the directory
- * hierarchy.
- */
- virtual QCString trDirIndex()
- { return "Direktorijø hierarchija"; }
-
- /*! This is used as the name of the chapter containing the documentation
- * of the directories.
- */
- virtual QCString trDirDocumentation()
- { return "Direktorijø dokumentacija"; }
-
- /*! This is used as the title of the directory index and also in the
- * Quick links of a HTML page, to link to the directory hierarchy.
- */
- virtual QCString trDirectories()
- { return "Direktorijos"; }
-
- /*! This returns a sentences that introduces the directory hierarchy.
- * and the fact that it is sorted alphabetically per level
- */
- virtual QCString trDirDescription()
- { return "Ði direktorjø strûktûra grubiai surikiuota abëcëlës tvarka:";
- }
-
- /*! This returns the title of a directory page. The name of the
- * directory is passed via \a dirName.
- */
- virtual QCString trDirReference(const char *dirName)
- { QCString result=dirName; result+=" Directorijos apraðas"; return result; }
-
- /*! This returns the word directory with or without starting capital
- * (\a first_capital) and in sigular or plural form (\a singular).
- */
- virtual QCString trDir(bool first_capital, bool singular)
- {
- QCString result((first_capital ? "Direktorij" : "direktorij"));
- if (singular) result+="a"; else result+="os";
- return result;
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.4.1
-//////////////////////////////////////////////////////////////////////////
-
- /*! This text is added to the documentation when the \\overload command
- * is used for a overloaded function.
- */
- virtual QCString trOverloadText()
- {
- return "Perkraunamas metodas sukurtas patogumui. "
- "Jis skiriasi nuo aukðèiau minëto tik argumetais.";
- }
-
-
-};
-
-#endif
diff --git a/trunk/src/translator_mk.h b/trunk/src/translator_mk.h
deleted file mode 100644
index d656609..0000000
--- a/trunk/src/translator_mk.h
+++ /dev/null
@@ -1,1767 +0,0 @@
-/******************************************************************************
- *
- *
- *
- * Copyright (C) 1997-2012 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.
- *
- */
-// Тranslated by Slave Jovanovski <slavejovanovski@yahoo.com>
-//
-// The cyrilic strings were entered using Macedonian language support in
-// Windows. The editor used was Eclipse 3.2. The file was saved in UTF-8.
-//
-// Updates:
-// --------
-// 2007/12/09
-// - Initial translation to Macedonian.
-//
-// 2008/05/22
-// - Translation for 1.5.4.
-//
-//
-
-#ifndef TRANSLATOR_MK_H
-#define TRANSLATOR_MK_H
-
-class TranslatorMacedonian : public TranslatorAdapter_1_6_0
-{
- public:
-
- // --- Language control methods -------------------
-
- /*! Used for identification of the language. The identification
- * should not be translated. It should be replaced by the name
- * of the language in English using lower-case characters only
- * (e.g. "czech", "japanese", "russian", etc.). It should be equal to
- * the identification used in language.cpp.
- */
- virtual QCString idLanguage()
- { return "macedonian"; }
-
- /*! Used to get the LaTeX command(s) for the language support.
- * This method should return string with commands that switch
- * LaTeX to the desired language. For example
- * <pre>"\\usepackage[german]{babel}\n"
- * </pre>
- * or
- * <pre>"\\usepackage{polski}\n"
- * "\\usepackage[latin2]{inputenc}\n"
- * "\\usepackage[T1]{fontenc}\n"
- * </pre>
- *
- * The English LaTeX does not use such commands. Because of this
- * the empty string is returned in this implementation.
- */
- virtual QCString latexLanguageSupportCommand()
- {
- return "\\usepackage[macedonian]{babel}\n";
- }
-
- /*! return the language charset. This will be used for the HTML output */
- virtual QCString idLanguageCharset()
- {
- return "UTF-8";
- }
-
- // --- Language translation methods -------------------
-
- /*! used in the compound documentation before a list of related functions. */
- virtual QCString trRelatedFunctions()
- { return "Поврзани Функции"; }
-
- /*! subscript for the related functions. */
- virtual QCString trRelatedSubscript()
- { return "(Овие функции не Ñе членови.)"; }
-
- /*! header that is put before the detailed description of files, classes and namespaces. */
- virtual QCString trDetailedDescription()
- { return "Детален опиÑ"; }
-
- /*! header that is put before the list of typedefs. */
- virtual QCString trMemberTypedefDocumentation()
- { return "Документација на членови дефиниции на тип"; }
-
- /*! header that is put before the list of enumerations. */
- virtual QCString trMemberEnumerationDocumentation()
- { return "Документација на набројани членови"; }
-
- /*! header that is put before the list of member functions. */
- virtual QCString trMemberFunctionDocumentation()
- { return "Документација на функции членови"; }
-
- /*! header that is put before the list of member attributes. */
- virtual QCString trMemberDataDocumentation()
- {
- //if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
- {
- return "Документација на членови";
- }
- }
-
- /*! this is the text of a link put after brief descriptions. */
- virtual QCString trMore()
- { return "Повеќе..."; }
-
- /*! put in the class documentation */
- virtual QCString trListOfAllMembers()
- { return "СпиÑок на Ñите членови."; }
-
- /*! used as the title of the "list of all members" page of a class */
- virtual QCString trMemberList()
- { return "СпиÑок на членови"; }
-
- /*! this is the first part of a sentence that is followed by a class name */
- virtual QCString trThisIsTheListOfAllMembers()
- { return "Ова е целоÑниот ÑпиÑок на членови на "; }
-
- /*! this is the remainder of the sentence after the class name */
- virtual QCString trIncludingInheritedMembers()
- { return ", вклучувајќи ги Ñите наÑледени членови."; }
-
- /*! this is put at the author sections at the bottom of man pages.
- * parameter s is name of the project name.
- */
- virtual QCString trGeneratedAutomatically(const char *s)
- { QCString result="ÐвтоматÑки Ñоздадено од Doxygen";
- if (s) result+=(QCString)" за "+s;
- result+=" изворниот код.";
- return result;
- }
-
- /*! put after an enum name in the list of all members */
- virtual QCString trEnumName()
- { return "име на набројан член"; }
-
- /*! put after an enum value in the list of all members */
- virtual QCString trEnumValue()
- { return "вредноÑÑ‚ на набројан член"; }
-
- /*! put after an undocumented member in the list of all members */
- virtual QCString trDefinedIn()
- { return "дефиниран во"; }
-
- // quick reference sections
-
- /*! This is put above each page as a link to the list of all groups of
- * compounds or files (see the \\group command).
- */
- virtual QCString trModules()
- { return "Модули"; }
-
- /*! This is put above each page as a link to the class hierarchy */
- virtual QCString trClassHierarchy()
- { return "Стебло на клаÑи"; }
-
- /*! This is put above each page as a link to the list of annotated classes */
- virtual QCString trCompoundList()
- {
- if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
- {
- return "СпиÑок на Структури";
- }
- else
- {
- return "СпиÑок на КлаÑи";
- }
- }
-
- /*! This is put above each page as a link to the list of documented files */
- virtual QCString trFileList()
- { return "СпиÑок на Датотеки"; }
-
- /*! This is put above each page as a link to all members of compounds. */
- virtual QCString trCompoundMembers()
- {
- if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
- {
- return "Членови";
- }
- else
- {
- return "Членови на КлаÑата";
- }
- }
-
- /*! This is put above each page as a link to all members of files. */
- virtual QCString trFileMembers()
- {
- if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
- {
- return "Глобални Членови";
- }
- else
- {
- return "Членови на Датотеката";
- }
- }
-
- /*! This is put above each page as a link to all related pages. */
- virtual QCString trRelatedPages()
- { return "Страници Поврзани Ñо Оваа"; }
-
- /*! This is put above each page as a link to all examples. */
- virtual QCString trExamples()
- { return "Примери"; }
-
- /*! This is put above each page as a link to the search engine. */
- virtual QCString trSearch()
- { return "Пребарај"; }
-
- /*! This is an introduction to the class hierarchy. */
- virtual QCString trClassHierarchyDescription()
- { return "Овој ÑпиÑок на наÑледување е приближно азбучно подреден:";
- }
-
- /*! This is an introduction to the list with all files. */
- virtual QCString trFileListDescription(bool extractAll)
- {
- QCString result="СпиÑок на Ñите ";
- if (!extractAll) result+="документирани ";
- result+="членови Ñо кратки опиÑи:";
- return result;
- }
-
- /*! This is an introduction to the annotated compound list. */
- virtual QCString trCompoundListDescription()
- {
-
- if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
- {
- return "СпиÑок на Ñтруктури Ñо кратки опиÑи:";
- }
- else
- {
- return "СпиÑок на клаÑи, Ñтруктури, унии и интерфејÑи "
- "Ñо кратки опиÑи:";
- }
- }
-
- /*! This is an introduction to the page with all class members. */
- virtual QCString trCompoundMembersDescription(bool extractAll)
- {
- QCString result="СпиÑок на Ñите ";
- if (!extractAll)
- {
- result+="документирани ";
- }
- if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
- {
- result+="Ñтруктури и унии";
- }
- else
- {
- result+="членови на клаÑата";
- }
- result+=" Ñо врÑки до ";
- if (!extractAll)
- {
- if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
- {
- result+="документацијата за Ñекој член на Ñтруктурата/унијата:";
- }
- else
- {
- result+="документацијата на Ñекој член на клаÑата:";
- }
- }
- else
- {
- if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
- {
- result+="Ñтруктурите/униите на кои што припаѓаат:";
- }
- else
- {
- result+="клаÑите на кои што припаѓаат:";
- }
- }
- return result;
- }
-
- /*! This is an introduction to the page with all file members. */
- virtual QCString trFileMembersDescription(bool extractAll)
- {
- QCString result="СпиÑок на Ñите ";
- if (!extractAll) result+="документирани ";
-
- if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
- {
- result+="функции, променливи, дефиниции, набројувања и дефиниции на тип";
- }
- else
- {
- result+="членови на датотеки";
- }
- result+=" Ñо врÑки до ";
- if (extractAll)
- result+="датотеките на кои што припаѓаат:";
- else
- result+="документацијата:";
- return result;
- }
-
- /*! This is an introduction to the page with the list of all examples */
- virtual QCString trExamplesDescription()
- { return "СпиÑок на Ñите примери:"; }
-
- /*! This is an introduction to the page with the list of related pages */
- virtual QCString trRelatedPagesDescription()
- { return "СпиÑок на Ñите Ñтраници поврзани Ñо оваа и нивна документација:"; }
-
- /*! This is an introduction to the page with the list of class/file groups */
- virtual QCString trModulesDescription()
- { return "СпиÑок на Ñите модули:"; }
-
- // index titles (the project name is prepended for these)
-
- /*! This is used in HTML as the title of index.html. */
- virtual QCString trDocumentation()
- { return "Документација"; }
-
- /*! This is used in LaTeX as the title of the chapter with the
- * index of all groups.
- */
- virtual QCString trModuleIndex()
- { return "ÐŸÐ¾Ð¿Ð¸Ñ Ð½Ð° Модули"; }
-
- /*! This is used in LaTeX as the title of the chapter with the
- * class hierarchy.
- */
- virtual QCString trHierarchicalIndex()
- { return "ÐŸÐ¾Ð¿Ð¸Ñ Ð½Ð° Стебло"; }
-
- /*! This is used in LaTeX as the title of the chapter with the
- * annotated compound index.
- */
- virtual QCString trCompoundIndex()
- {
- if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
- {
- return "ÐŸÐ¾Ð¿Ð¸Ñ Ð½Ð° Структури";
- }
- else
- {
- return "ÐŸÐ¾Ð¿Ð¸Ñ Ð½Ð° КлаÑи";
- }
- }
-
- /*! This is used in LaTeX as the title of the chapter with the
- * list of all files.
- */
- virtual QCString trFileIndex()
- { return "ÐŸÐ¾Ð¿Ð¸Ñ Ð½Ð° Датотеки"; }
-
- /*! This is used in LaTeX as the title of the chapter containing
- * the documentation of all groups.
- */
- virtual QCString trModuleDocumentation()
- { return "ÐŸÐ¾Ð¿Ð¸Ñ Ð½Ð° Документација"; }
-
- /*! This is used in LaTeX as the title of the chapter containing
- * the documentation of all classes, structs and unions.
- */
- virtual QCString trClassDocumentation()
- {
- if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
- {
- return "Документација на Структури";
- }
- else
- {
- return "Документација на КлаÑи";
- }
- }
-
- /*! This is used in LaTeX as the title of the chapter containing
- * the documentation of all files.
- */
- virtual QCString trFileDocumentation()
- { return "Документија на Датотеки"; }
-
- /*! This is used in LaTeX as the title of the chapter containing
- * the documentation of all examples.
- */
- virtual QCString trExampleDocumentation()
- { return "Документаија на Примери"; }
-
- /*! This is used in LaTeX as the title of the chapter containing
- * the documentation of all related pages.
- */
- virtual QCString trPageDocumentation()
- { return "Документација на Страници"; }
-
- /*! This is used in LaTeX as the title of the document */
- virtual QCString trReferenceManual()
- { return "Прирачник"; }
-
- /*! This is used in the documentation of a file as a header before the
- * list of defines
- */
- virtual QCString trDefines()
- { return "Дефинирања"; }
-
- /*! This is used in the documentation of a file as a header before the
- * list of function prototypes
- */
- virtual QCString trFuncProtos()
- { return "Прототипи на Функции"; }
-
- /*! This is used in the documentation of a file as a header before the
- * list of typedefs
- */
- virtual QCString trTypedefs()
- { return "Дефиниции на Тип"; }
-
- /*! This is used in the documentation of a file as a header before the
- * list of enumerations
- */
- virtual QCString trEnumerations()
- { return "Ðабројувања"; }
-
- /*! This is used in the documentation of a file as a header before the
- * list of (global) functions
- */
- virtual QCString trFunctions()
- { return "Функции"; }
-
- /*! This is used in the documentation of a file as a header before the
- * list of (global) variables
- */
- virtual QCString trVariables()
- { return "Променливи"; }
-
- /*! This is used in the documentation of a file as a header before the
- * list of (global) variables
- */
- virtual QCString trEnumerationValues()
- { return "ВредноÑти на Ðабројувањата"; }
-
- /*! This is used in the documentation of a file before the list of
- * documentation blocks for defines
- */
- virtual QCString trDefineDocumentation()
- { return "Документција на Дефиниции"; }
-
- /*! This is used in the documentation of a file/namespace before the list
- * of documentation blocks for function prototypes
- */
- virtual QCString trFunctionPrototypeDocumentation()
- { return "Документација на Прототип на Функции"; }
-
- /*! This is used in the documentation of a file/namespace before the list
- * of documentation blocks for typedefs
- */
- virtual QCString trTypedefDocumentation()
- { return "Документација на Дефиниции на Тип"; }
-
- /*! This is used in the documentation of a file/namespace before the list
- * of documentation blocks for enumeration types
- */
- virtual QCString trEnumerationTypeDocumentation()
- { return "Документација на Ðабројувања"; }
-
- /*! This is used in the documentation of a file/namespace before the list
- * of documentation blocks for functions
- */
- virtual QCString trFunctionDocumentation()
- { return "Документација на Функции"; }
-
- /*! This is used in the documentation of a file/namespace before the list
- * of documentation blocks for variables
- */
- virtual QCString trVariableDocumentation()
- { return "Документација на Променливи"; }
-
- /*! This is used in the documentation of a file/namespace/group before
- * the list of links to documented compounds
- */
- virtual QCString trCompounds()
- {
- if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
- {
- return "Структури";
- }
- else
- {
- return "КлаÑи";
- }
- }
-
- /*! This is used in the standard footer of each page and indicates when
- * the page was generated
- */
- virtual QCString trGeneratedAt(const char *date,const char *projName)
- {
- QCString result=(QCString)"Создадено на "+date;
- if (projName) result+=(QCString)" за "+projName;
- result+=(QCString)" од";
- return result;
- }
- /*! This is part of the sentence used in the standard footer of each page.
- */
- virtual QCString trWrittenBy()
- {
- return "напишано од";
- }
-
- /*! this text is put before a class diagram */
- virtual QCString trClassDiagram(const char *clName)
- {
- return (QCString)"Диаграм на наÑледување за "+clName+":";
- }
-
- /*! this text is generated when the \\internal command is used. */
- virtual QCString trForInternalUseOnly()
- { return "Само за интерна употреба."; }
-
- /*! this text is generated when the \\warning command is used. */
- virtual QCString trWarning()
- { return "Предупредување"; }
-
- /*! this text is generated when the \\version command is used. */
- virtual QCString trVersion()
- { return "Верзија"; }
-
- /*! this text is generated when the \\date command is used. */
- virtual QCString trDate()
- { return "Дата"; }
-
- /*! this text is generated when the \\return command is used. */
- virtual QCString trReturns()
- { return "Враќа"; }
-
- /*! this text is generated when the \\sa command is used. */
- virtual QCString trSeeAlso()
- { return "ИÑтотака погледнете"; }
-
- /*! this text is generated when the \\param command is used. */
- virtual QCString trParameters()
- { return "Параметри"; }
-
- /*! this text is generated when the \\exception command is used. */
- virtual QCString trExceptions()
- { return "ИÑклучоци"; }
-
- /*! this text is used in the title page of a LaTeX document. */
- virtual QCString trGeneratedBy()
- { return "Создадено од"; }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 0.49-990307
-//////////////////////////////////////////////////////////////////////////
-
- /*! used as the title of page containing all the index of all namespaces. */
- virtual QCString trNamespaceList()
- { return "СпиÑок на Имиња на ПроÑтор"; }
-
- /*! used as an introduction to the namespace list */
- virtual QCString trNamespaceListDescription(bool extractAll)
- {
- QCString result="СпиÑок на Ñите ";
- if (!extractAll) result+="документирани ";
- result+="имиња на проÑтор Ñо кратки опиÑи:";
- return result;
- }
-
- /*! used in the class documentation as a header before the list of all
- * friends of a class
- */
- virtual QCString trFriends()
- { return "Пријатели"; }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 0.49-990405
-//////////////////////////////////////////////////////////////////////////
-
- /*! used in the class documentation as a header before the list of all
- * related classes
- */
- virtual QCString trRelatedFunctionDocumentation()
- { return "Документација на Пријатели и Поврзани Функции"; }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 0.49-990425
-//////////////////////////////////////////////////////////////////////////
-
- /*! used as the title of the HTML page of a class/struct/union */
- virtual QCString trCompoundReference(const char *clName,
- ClassDef::CompoundType compType,
- bool isTemplate)
- {
- QCString result=(QCString)clName;
- switch(compType)
- {
- case ClassDef::Class: result+=" КлаÑа"; break;
- case ClassDef::Struct: result+=" Структура"; break;
- case ClassDef::Union: result+=" Унија"; break;
- case ClassDef::Interface: result+=" ИнтерфејÑ"; break;
- case ClassDef::Protocol: result+=" Протокол"; break;
- case ClassDef::Category: result+=" Категорија"; break;
- case ClassDef::Exception: result+=" ИÑклучок"; break;
- }
- if (isTemplate) result+=" Образец";
- result+=" Повикување";
- return result;
- }
-
- /*! used as the title of the HTML page of a file */
- virtual QCString trFileReference(const char *fileName)
- {
- QCString result = "ÐžÐ¿Ð¸Ñ Ð½Ð° Датотекaта ";
- result += fileName;
- return result;
- }
-
- /*! used as the title of the HTML page of a namespace */
- virtual QCString trNamespaceReference(const char *namespaceName)
- {
- QCString result = "ÐžÐ¿Ð¸Ñ Ð½Ð° Имeто на ПроÑтор ";
- result += namespaceName;
- return result;
- }
-
- virtual QCString trPublicMembers()
- { return "Јавни Функции Членови"; }
- virtual QCString trPublicSlots()
- { return "Јавни Слотови"; }
- virtual QCString trSignals()
- { return "Сигнали"; }
- virtual QCString trStaticPublicMembers()
- { return "Статични Јавни Функции Членови"; }
- virtual QCString trProtectedMembers()
- { return "Заштитени Функции Членови"; }
- virtual QCString trProtectedSlots()
- { return "Заштитени Слотови"; }
- virtual QCString trStaticProtectedMembers()
- { return "Статични Заштитени Функции Членови"; }
- virtual QCString trPrivateMembers()
- { return "Приватни Функции Членови"; }
- virtual QCString trPrivateSlots()
- { return "Приватни Слотови"; }
- virtual QCString trStaticPrivateMembers()
- { return "Статични Приватни Функции Членови"; }
-
- /*! this function is used to produce a comma-separated list of items.
- * use generateMarker(i) to indicate where item i should be put.
- */
- virtual QCString trWriteList(int numEntries)
- {
- QCString result;
- int i;
- // the inherits list contain `numEntries' classes
- for (i=0;i<numEntries;i++)
- {
- // use generateMarker to generate placeholders for the class links!
- result+=generateMarker(i); // generate marker for entry i in the list
- // (order is left to right)
-
- if (i!=numEntries-1) // not the last entry, so we need a separator
- {
- if (i<numEntries-2) // not the fore last entry
- result+=", ";
- else // the fore last entry
- result+=" и ";
- }
- }
- return result;
- }
-
- /*! used in class documentation to produce a list of base classes,
- * if class diagrams are disabled.
- */
- virtual QCString trInheritsList(int numEntries)
- {
- return "ÐаÑледува "+trWriteList(numEntries)+".";
- }
-
- /*! used in class documentation to produce a list of super classes,
- * if class diagrams are disabled.
- */
- virtual QCString trInheritedByList(int numEntries)
- {
- return "ÐаÑледено од "+trWriteList(numEntries)+".";
- }
-
- /*! used in member documentation blocks to produce a list of
- * members that are hidden by this one.
- */
- virtual QCString trReimplementedFromList(int numEntries)
- {
- return "Преприменето од "+trWriteList(numEntries)+".";
- }
-
- /*! used in member documentation blocks to produce a list of
- * all member that overwrite the implementation of this member.
- */
- virtual QCString trReimplementedInList(int numEntries)
- {
- return "Преприменето во "+trWriteList(numEntries)+".";
- }
-
- /*! This is put above each page as a link to all members of namespaces. */
- virtual QCString trNamespaceMembers()
- { return "Членови на Име на ПроÑтор"; }
-
- /*! This is an introduction to the page with all namespace members */
- virtual QCString trNamespaceMemberDescription(bool extractAll)
- {
- QCString result="СпиÑок на Ñите ";
- if (!extractAll) result+="документирани ";
- result+="членови на името на проÑтор Ñо врÑки до ";
- if (extractAll)
- result+="документацијата на Ñекој член:";
- else
- result+="името на проÑтор на кое што му припаѓаат:";
- return result;
- }
- /*! This is used in LaTeX as the title of the chapter with the
- * index of all namespaces.
- */
- virtual QCString trNamespaceIndex()
- { return "ÐŸÐ¾Ð¿Ð¸Ñ Ð½Ð° Имиња на ПроÑтор"; }
-
- /*! This is used in LaTeX as the title of the chapter containing
- * the documentation of all namespaces.
- */
- virtual QCString trNamespaceDocumentation()
- { return "Документација на Имиња на ПроÑтор"; }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 0.49-990522
-//////////////////////////////////////////////////////////////////////////
-
- /*! This is used in the documentation before the list of all
- * namespaces in a file.
- */
- virtual QCString trNamespaces()
- { return "Имиња на ПроÑтор"; }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 0.49-990728
-//////////////////////////////////////////////////////////////////////////
-
- /*! This is put at the bottom of a class documentation page and is
- * followed by a list of files that were used to generate the page.
- */
- virtual QCString trGeneratedFromFiles(ClassDef::CompoundType compType,
- bool single)
- { // here s is one of " Class", " Struct" or " Union"
- // single is true implies a single file
- QCString result=(QCString)"Документацијата за ";
- switch(compType)
- {
- case ClassDef::Class: result+="оваа клаÑа"; break;
- case ClassDef::Struct: result+="оваа Ñтруктура"; break;
- case ClassDef::Union: result+="оваа унија"; break;
- case ClassDef::Interface: result+="овој интерфејÑ"; break;
- case ClassDef::Protocol: result+="овој протокол"; break;
- case ClassDef::Category: result+="оваа категорија"; break;
- case ClassDef::Exception: result+="овој иÑклучок"; break;
- }
- result+=" беше Ñоздадена од ";
- if (single) result+="Ñледнава датотека:"; else result+="Ñледниве датотеки:";
- return result;
- }
-
- /*! This is in the (quick) index as a link to the alphabetical compound
- * list.
- */
- virtual QCString trAlphabeticalList()
- { return "Ðзбучен СпиÑок"; }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 0.49-990901
-//////////////////////////////////////////////////////////////////////////
-
- /*! This is used as the heading text for the retval command. */
- virtual QCString trReturnValues()
- { return "Вратена ВредноÑÑ‚"; }
-
- /*! This is in the (quick) index as a link to the main page (index.html)
- */
- virtual QCString trMainPage()
- { return "Главна Страна"; }
-
- /*! This is used in references to page that are put in the LaTeX
- * documentation. It should be an abbreviation of the word page.
- */
- virtual QCString trPageAbbreviation()
- { return "ÑÑ‚Ñ€."; }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 0.49-991003
-//////////////////////////////////////////////////////////////////////////
-
- virtual QCString trDefinedAtLineInSourceFile()
- {
- return "Дефиницијата е на линија @0 во датотека @1.";
- }
- virtual QCString trDefinedInSourceFile()
- {
- return "Дефинијата е во датотека @0.";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 0.49-991205
-//////////////////////////////////////////////////////////////////////////
-
- virtual QCString trDeprecated()
- {
- return "ЗаÑтарено";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.0.0
-//////////////////////////////////////////////////////////////////////////
-
- /*! this text is put before a collaboration diagram */
- virtual QCString trCollaborationDiagram(const char *clName)
- {
- return (QCString)"Диаграм на Ñоработка за "+clName+":";
- }
- /*! this text is put before an include dependency graph */
- virtual QCString trInclDepGraph(const char *fName)
- {
- return (QCString)"Вклучен дијаграм на завиÑноÑÑ‚ за "+fName+":";
- }
- /*! header that is put before the list of constructor/destructors. */
- virtual QCString trConstructorDocumentation()
- {
- return "Документација на КонÑтруктор и ДеÑтруктор";
- }
- /*! Used in the file documentation to point to the corresponding sources. */
- virtual QCString trGotoSourceCode()
- {
- return "Оди до изворниот код на оваа датотека.";
- }
- /*! Used in the file sources to point to the corresponding documentation. */
- virtual QCString trGotoDocumentation()
- {
- return "Оди до документацијата на оваа датотека.";
- }
- /*! Text for the \\pre command */
- virtual QCString trPrecondition()
- {
- return "ПредуÑлов";
- }
- /*! Text for the \\post command */
- virtual QCString trPostcondition()
- {
- return "ПоÑтуÑлов";
- }
- /*! Text for the \\invariant command */
- virtual QCString trInvariant()
- {
- return "Инваријанта";
- }
- /*! Text shown before a multi-line variable/enum initialization */
- virtual QCString trInitialValue()
- {
- return "ОÑновна вредноÑÑ‚:";
- }
- /*! Text used the source code in the file index */
- virtual QCString trCode()
- {
- return "код";
- }
- virtual QCString trGraphicalHierarchy()
- {
- return "Графичко Стебло на КлаÑи";
- }
- virtual QCString trGotoGraphicalHierarchy()
- {
- return "Оди до графичкото Ñтебло на клаÑи";
- }
- virtual QCString trGotoTextualHierarchy()
- {
- return "Оди до текÑтуалното Ñтебло на клаÑи";
- }
- virtual QCString trPageIndex()
- {
- return "ÐŸÐ¾Ð¿Ð¸Ñ Ð½Ð° Страници";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.1.0
-//////////////////////////////////////////////////////////////////////////
-
- virtual QCString trNote()
- {
- return "Забелешка";
- }
- virtual QCString trPublicTypes()
- {
- return "Јавни Типови";
- }
- virtual QCString trPublicAttribs()
- {
- if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
- {
- return "Членови";
- }
- else
- {
- return "Јавни Членови";
- }
- }
- virtual QCString trStaticPublicAttribs()
- {
- return "Статични Јавни Членови";
- }
- virtual QCString trProtectedTypes()
- {
- return "Заштитени Типови";
- }
- virtual QCString trProtectedAttribs()
- {
- return "Заштитени Членови";
- }
- virtual QCString trStaticProtectedAttribs()
- {
- return "Статични Заштитени Типови";
- }
- virtual QCString trPrivateTypes()
- {
- return "Приватни Типови";
- }
- virtual QCString trPrivateAttribs()
- {
- return "Приватни Членови";
- }
- virtual QCString trStaticPrivateAttribs()
- {
- return "Статични Приватни Членови";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.1.3
-//////////////////////////////////////////////////////////////////////////
-
- /*! Used as a marker that is put before a \\todo item */
- virtual QCString trTodo()
- {
- return "Ðезавршено";
- }
- /*! Used as the header of the todo list */
- virtual QCString trTodoList()
- {
- return "СпиÑок на Ðезавршени";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.1.4
-//////////////////////////////////////////////////////////////////////////
-
- virtual QCString trReferencedBy()
- {
- return "Повикано од";
- }
- virtual QCString trRemarks()
- {
- return "Забелешки";
- }
- virtual QCString trAttention()
- {
- return "Внимание";
- }
- virtual QCString trInclByDepGraph()
- {
- return "Овој дијаграм покажува кои датотеки Ñе "
- "директно или индеректно вклучени во оваа датотека:";
- }
- virtual QCString trSince()
- {
- return "Од";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.1.5
-//////////////////////////////////////////////////////////////////////////
-
- /*! title of the graph legend page */
- virtual QCString trLegendTitle()
- {
- return "Легенда на Дијаграмот";
- }
- /*! page explaining how the dot graph's should be interpreted
- * The %A in the text below are to prevent link to classes called "A".
- */
- virtual QCString trLegendDocs()
- {
- return
- "Оваа Ñтрана објаÑнува како да ги толкувате дијаграмите Ñоздадени"
- " од doxygen.<p>\n"
- "Ðа пример:\n"
- "\\code\n"
- "/*! Ðевидлива клаÑа заради ограничувања на дијаграмот */\n"
- "class Invisible { };\n\n"
- "/*! ОдÑечена клаÑа, врÑката на наÑледување е Ñкриена */\n"
- "class Truncated : public Invisible { };\n\n"
- "/* КлаÑата не е документирана Ñо doxygen коментари */\n"
- "class Undocumented { };\n\n"
- "/*! КлаÑа која е наÑледена Ñо јавно наÑледување */\n"
- "class PublicBase : public Truncated { };\n\n"
- "/*! КлаÑа Образец */\n"
- "template<class T> class Templ { };\n\n"
- "/*! КлаÑа која е наÑледена Ñо заштитено наÑледување */\n"
- "class ProtectedBase { };\n\n"
- "/*! КлаÑа која е наÑледена Ñо приватно наÑледување */\n"
- "class PrivateBase { };\n\n"
- "/*! КлаÑа која е кориÑтена од Ñтрана на наÑледената клаÑа */\n"
- "class Used { };\n\n"
- "/*! КлаÑа која наÑледува од повеќе други клаÑи */\n"
- "class Inherited : public PublicBase,\n"
- " protected ProtectedBase,\n"
- " private PrivateBase,\n"
- " public Undocumented,\n"
- " public Templ<int>\n"
- "{\n"
- " private:\n"
- " Used *m_usedClass;\n"
- "};\n"
- "\\endcode\n"
- "Ðко вредноÑта на \\c MAX_DOT_GRAPH_HEIGHT во конфигурациÑката датотека "
- "е 240 тогаш примерот ќе го Ñоздаде Ñледниов дијаграм:"
- "<p><center><img alt=\"\" src=\"graph_legend."+Config_getEnum("DOT_IMAGE_FORMAT")+"\"></center>\n"
- "<p>\n"
- "Правоаголниците во дијаграмот погоре го имаат Ñледново значење:\n"
- "<ul>\n"
- "<li>Полн Ñив правоаголник ја означува Ñтруктурата или клаÑата за "
- "којадијаграмот е Ñоздаден.\n"
- "<li>Правоаголник Ñо црна граница означува документирана Ñтруктура или клаÑа.\n"
- "<li>Правоаголник Ñо Ñива граница означува недокументирана Ñтруктура или клаÑа.\n"
- "<li>Правоаголник Ñо црвена граница означува документирана Ñтруктура или клаÑа "
- "за која не Ñите врÑки на наÑледување Ñе прикажани. Дијаграмот е одÑечен доколку "
- "не го Ñобира во зададените граници..\n"
- "</ul>\n"
- "Стрелките го имаат Ñледново значење:\n"
- "<ul>\n"
- "<li>Сина Ñтрелка означува врÑка на јавно наÑледување помеѓу две клаÑи.\n"
- "<li>Зелена Ñтрелка означува заштитено наÑледување.\n"
- "<li>Црвена Ñтрелка означува приватно наÑледување.\n"
- "<li>Виолетова иÑпрекината линија означува клаÑа која е кориÑтена или вклучена "
- "во друга клаÑа. Стрелаката е означена Ñо името на променливата преку "
- "која клаÑата е доÑтапна.\n"
- "<li>Жолта иÑпрекината линија означува врÑка меѓу примерок од образец клаÑа "
- "и клаÑата образец од која е Ñоздадена. Стрелката е означена Ñо имињата на "
- "параметрите на клаÑата.\n"
- "</ul>\n";
- }
- /*! text for the link to the legend page */
- virtual QCString trLegend()
- {
- return "Легенда";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.2.0
-//////////////////////////////////////////////////////////////////////////
-
- /*! Used as a marker that is put before a test item */
- virtual QCString trTest()
- {
- return "ТеÑÑ‚";
- }
- /*! Used as the header of the test list */
- virtual QCString trTestList()
- {
- return "ЛиÑта на ТеÑтови";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.2.1
-//////////////////////////////////////////////////////////////////////////
-
- /*! Used as a section header for KDE-2 IDL methods */
- virtual QCString trDCOPMethods()
- {
- return "DCOP Функции Членови";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.2.2
-//////////////////////////////////////////////////////////////////////////
-
- /*! Used as a section header for IDL properties */
- virtual QCString trProperties()
- {
- return "ОÑобини";
- }
- /*! Used as a section header for IDL property documentation */
- virtual QCString trPropertyDocumentation()
- {
- return "Документација на ОÑобини";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.2.4
-//////////////////////////////////////////////////////////////////////////
-
- /*! Used for Java classes in the summary section of Java packages */
- virtual QCString trClasses()
- {
- if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
- {
- return "Структури";
- }
- else
- {
- return "КлаÑи";
- }
- }
- /*! Used as the title of a Java package */
- virtual QCString trPackage(const char *name)
- {
- return (QCString)"Пакет "+name;
- }
- /*! Title of the package index page */
- virtual QCString trPackageList()
- {
- return "СпиÑок на Пакети";
- }
- /*! The description of the package index page */
- virtual QCString trPackageListDescription()
- {
- return "Пакети Ñо краток Ð¾Ð¿Ð¸Ñ (доколку доÑтапен):";
- }
- /*! The link name in the Quick links header for each page */
- virtual QCString trPackages()
- {
- return "Пакети";
- }
- /*! Text shown before a multi-line define */
- virtual QCString trDefineValue()
- {
- return "ВредноÑÑ‚:";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.2.5
-//////////////////////////////////////////////////////////////////////////
-
- /*! Used as a marker that is put before a \\bug item */
- virtual QCString trBug()
- {
- return "Дефект";
- }
- /*! Used as the header of the bug list */
- virtual QCString trBugList()
- {
- return "ЛиÑта на Дефекти";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.2.6
-//////////////////////////////////////////////////////////////////////////
-
- /*! Used as ansicpg for RTF file
- *
- * The following table shows the correlation of Charset name, Charset Value and
- * <pre>
- * Codepage number:
- * Charset Name Charset Value(hex) Codepage number
- * ------------------------------------------------------
- * DEFAULT_CHARSET 1 (x01)
- * SYMBOL_CHARSET 2 (x02)
- * OEM_CHARSET 255 (xFF)
- * ANSI_CHARSET 0 (x00) 1252
- * RUSSIAN_CHARSET 204 (xCC) 1251
- * EE_CHARSET 238 (xEE) 1250
- * GREEK_CHARSET 161 (xA1) 1253
- * TURKISH_CHARSET 162 (xA2) 1254
- * BALTIC_CHARSET 186 (xBA) 1257
- * HEBREW_CHARSET 177 (xB1) 1255
- * ARABIC _CHARSET 178 (xB2) 1256
- * SHIFTJIS_CHARSET 128 (x80) 932
- * HANGEUL_CHARSET 129 (x81) 949
- * GB2313_CHARSET 134 (x86) 936
- * CHINESEBIG5_CHARSET 136 (x88) 950
- * </pre>
- *
- */
- virtual QCString trRTFansicp()
- {
- return "1252";
- }
-
-
- /*! Used as ansicpg for RTF fcharset
- * \see trRTFansicp() for a table of possible values.
- */
- virtual QCString trRTFCharSet()
- {
- return "238";
- }
-
- /*! Used as header RTF general index */
- virtual QCString trRTFGeneralIndex()
- {
- return "ПопиÑ";
- }
-
- /*! This is used for translation of the word that will possibly
- * be followed by a single name or by a list of names
- * of the category.
- */
- virtual QCString trClass(bool first_capital, bool singular)
- {
- QCString result((first_capital ? "КлаÑ" : "клаÑ"));
- result += (singular ? "а" : "и");
- return result;
- }
-
- /*! This is used for translation of the word that will possibly
- * be followed by a single name or by a list of names
- * of the category.
- */
- virtual QCString trFile(bool first_capital, bool singular)
- {
- QCString result((first_capital ? "Датотек" : "датотек"));
- result += (singular ? "а" : "и");
- return result;
- }
-
- /*! This is used for translation of the word that will possibly
- * be followed by a single name or by a list of names
- * of the category.
- */
- virtual QCString trNamespace(bool first_capital, bool singular)
- {
- QCString result((first_capital ? "Им" : "им"));
- result += (singular ? "е на проÑтор" : "иња на проÑтори");
- return result;
- }
-
- /*! This is used for translation of the word that will possibly
- * be followed by a single name or by a list of names
- * of the category.
- */
- virtual QCString trGroup(bool first_capital, bool singular)
- {
- QCString result((first_capital ? "Груп" : "груп"));
- result += (singular ? "а" : "и");
- return result;
- }
-
- /*! This is used for translation of the word that will possibly
- * be followed by a single name or by a list of names
- * of the category.
- */
- virtual QCString trPage(bool first_capital, bool singular)
- {
- QCString result((first_capital ? "Стран" : "Ñтран"));
- result += (singular ? "а" : "и");
- return result;
- }
-
- /*! This is used for translation of the word that will possibly
- * be followed by a single name or by a list of names
- * of the category.
- */
- virtual QCString trMember(bool first_capital, bool singular)
- {
- QCString result((first_capital ? "Член" : "член"));
- if (!singular) result+="ови";
- return result;
- }
-
- /*! This is used for translation of the word that will possibly
- * be followed by a single name or by a list of names
- * of the category.
- */
- virtual QCString trGlobal(bool first_capital, bool singular)
- {
- QCString result((first_capital ? "Глобал" : "глобал"));
- result += (singular ? "ен" : "ни");
- return result;
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.2.7
-//////////////////////////////////////////////////////////////////////////
-
- /*! This text is generated when the \\author command is used and
- * for the author section in man pages. */
- virtual QCString trAuthor(bool first_capital, bool singular)
- {
- QCString result((first_capital ? "Ðвтор" : "автор"));
- if (!singular) result+="и";
- return result;
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.2.11
-//////////////////////////////////////////////////////////////////////////
-
- /*! This text is put before the list of members referenced by a member
- */
- virtual QCString trReferences()
- {
- return "Повикувања";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.2.13
-//////////////////////////////////////////////////////////////////////////
-
- /*! used in member documentation blocks to produce a list of
- * members that are implemented by this one.
- */
- virtual QCString trImplementedFromList(int numEntries)
- {
- return "Применува "+trWriteList(numEntries)+".";
- }
-
- /*! used in member documentation blocks to produce a list of
- * all members that implement this abstract member.
- */
- virtual QCString trImplementedInList(int numEntries)
- {
- return "Применето во "+trWriteList(numEntries)+".";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.2.16
-//////////////////////////////////////////////////////////////////////////
-
- /*! used in RTF documentation as a heading for the Table
- * of Contents.
- */
- virtual QCString trRTFTableOfContents()
- {
- return "Содржина";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.2.17
-//////////////////////////////////////////////////////////////////////////
-
- /*! Used as the header of the list of item that have been
- * flagged deprecated
- */
- virtual QCString trDeprecatedList()
- {
- return "СпиÑок на ЗаÑтарени";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.2.18
-//////////////////////////////////////////////////////////////////////////
-
- /*! Used as a header for declaration section of the events found in
- * a C# program
- */
- virtual QCString trEvents()
- {
- return "ÐаÑтани";
- }
- /*! Header used for the documentation section of a class' events. */
- virtual QCString trEventDocumentation()
- {
- return "Документација на ÐаÑтани";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.3
-//////////////////////////////////////////////////////////////////////////
-
- /*! Used as a heading for a list of Java class types with package scope.
- */
- virtual QCString trPackageTypes()
- {
- return "Типови во Пакетот";
- }
- /*! Used as a heading for a list of Java class functions with package
- * scope.
- */
- virtual QCString trPackageMembers()
- {
- return "Функции во Пакетот";
- }
- /*! Used as a heading for a list of static Java class functions with
- * package scope.
- */
- virtual QCString trStaticPackageMembers()
- {
- return "Статични Функции во Пакетот";
- }
- /*! Used as a heading for a list of Java class variables with package
- * scope.
- */
- virtual QCString trPackageAttribs()
- {
- return "Членови во Пакетот";
- }
- /*! Used as a heading for a list of static Java class variables with
- * package scope.
- */
- virtual QCString trStaticPackageAttribs()
- {
- return "Статични Членови во Пакетот";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.3.1
-//////////////////////////////////////////////////////////////////////////
-
- /*! Used in the quick index of a class/file/namespace member list page
- * to link to the unfiltered list of all members.
- */
- virtual QCString trAll()
- {
- return "Сите";
- }
- /*! Put in front of the call graph for a function. */
- virtual QCString trCallGraph()
- {
- return "Дијаграм на повикувања за оваа функција:";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.3.3
-//////////////////////////////////////////////////////////////////////////
-
- /*! When the search engine is enabled this text is put in the header
- * of each page before the field where one can enter the text to search
- * for.
- */
- virtual QCString trSearchForIndex()
- {
- return "Пребарај";
- }
- /*! This string is used as the title for the page listing the search
- * results.
- */
- virtual QCString trSearchResultsTitle()
- {
- return "Резултати од Пребарувањето";
- }
- /*! This string is put just before listing the search results. The
- * text can be different depending on the number of documents found.
- * Inside the text you can put the special marker $num to insert
- * the number representing the actual number of search results.
- * The @a numDocuments parameter can be either 0, 1 or 2, where the
- * value 2 represents 2 or more matches. HTML markup is allowed inside
- * the returned string.
- */
- virtual QCString trSearchResults(int numDocuments)
- {
- if (numDocuments==0)
- {
- return "Ðема документи кои Ñе поклопуваат Ñо вашето барање.";
- }
- else if (numDocuments==1)
- {
- return "Пронајден <b>1</b> документ кој Ñе поклопува Ñо вашето барање.";
- }
- else
- {
- return "Пронајдени <b>$num</b> документи кои Ñе поклопуваат Ñо вашето барање."
- "Ðајдобро поклопените документи Ñе прикажани први.";
- }
- }
- /*! This string is put before the list of matched words, for each search
- * result. What follows is the list of words that matched the query.
- */
- virtual QCString trSearchMatches()
- {
- return "Пронајдени:";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.3.8
-//////////////////////////////////////////////////////////////////////////
-
- /*! This is used in HTML as the title of page with source code for file filename
- */
- virtual QCString trSourceFile(QCString& filename)
- {
- return "Изворен код на датотеката " + filename;
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.3.9
-//////////////////////////////////////////////////////////////////////////
-
- /*! This is used as the name of the chapter containing the directory
- * hierarchy.
- */
- virtual QCString trDirIndex()
- { return "Стебло на Именикот"; }
-
- /*! This is used as the name of the chapter containing the documentation
- * of the directories.
- */
- virtual QCString trDirDocumentation()
- { return "Документација на Именикот"; }
-
- /*! This is used as the title of the directory index and also in the
- * Quick links of an HTML page, to link to the directory hierarchy.
- */
- virtual QCString trDirectories()
- { return "Именици"; }
-
- /*! This returns a sentences that introduces the directory hierarchy.
- * and the fact that it is sorted alphabetically per level
- */
- virtual QCString trDirDescription()
- { return "Ова Ñтебло на именици е приближно азбучно подреден:";}
-
- /*! This returns the title of a directory page. The name of the
- * directory is passed via \a dirName.
- */
- virtual QCString trDirReference(const char *dirName)
- { QCString result= "ÐžÐ¿Ð¸Ñ Ð½Ð° Именикот "; result += dirName; return result; }
-
- /*! This returns the word directory with or without starting capital
- * (\a first_capital) and in sigular or plural form (\a singular).
- */
- virtual QCString trDir(bool first_capital, bool singular)
- {
- QCString result((first_capital ? "Имени" : "имени"));
- if (singular) result+="к"; else result+="ци";
- return result;
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.4.1
-//////////////////////////////////////////////////////////////////////////
-
- /*! This text is added to the documentation when the \\overload command
- * is used for a overloaded function.
- */
- virtual QCString trOverloadText()
- {
- return "Оваа е преоптоварена фунција. Се разликува по "
- "типот и бројот на аргументи што ги прифаќа.";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.4.6
-//////////////////////////////////////////////////////////////////////////
-
- /*! This is used to introduce a caller (or called-by) graph */
- virtual QCString trCallerGraph()
- {
- return "Ова е графот на повикување за оваа фунција:";
- }
-
- /*! This is used in the documentation of a file/namespace before the list
- * of documentation blocks for enumeration values
- */
- virtual QCString trEnumerationValueDocumentation()
- { return "Документија на Ðабројувања"; }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.5.4 (mainly for Fortran)
-//////////////////////////////////////////////////////////////////////////
-
- /*! header that is put before the list of member subprograms (Fortran). */
- virtual QCString trMemberFunctionDocumentationFortran()
- { return "Документација на функции/процедури членови"; }
-
- /*! This is put above each page as a link to the list of annotated data types (Fortran). */
- virtual QCString trCompoundListFortran()
- { return "СпиÑок на Типови"; }
-
- /*! This is put above each page as a link to all members of compounds (Fortran). */
- virtual QCString trCompoundMembersFortran()
- { return "Членови"; }
-
- /*! This is an introduction to the annotated compound list (Fortran). */
- virtual QCString trCompoundListDescriptionFortran()
- { return "СпиÑок на типови Ñо кратки опиÑи:"; }
-
- /*! This is an introduction to the page with all data types (Fortran). */
- virtual QCString trCompoundMembersDescriptionFortran(bool extractAll)
- {
- QCString result="СпиÑок на Ñите ";
- if (!extractAll)
- {
- result+="документирани ";
- }
- result+="членови на типови";
- result+=" Ñо врÑки до ";
- if (!extractAll)
- {
- result+="документацијата за Ñекој член:";
- }
- else
- {
- result+="типовите на кои што припаѓаат:";
- }
- return result;
- }
-
- /*! This is used in LaTeX as the title of the chapter with the
- * annotated compound index (Fortran).
- */
- virtual QCString trCompoundIndexFortran()
- { return "ÐŸÐ¾Ð¿Ð¸Ñ Ð½Ð° Типови"; }
-
- /*! This is used in LaTeX as the title of the chapter containing
- * the documentation of all data types (Fortran).
- */
- virtual QCString trTypeDocumentation()
- { return "Документација на Типови"; }
-
- /*! This is used in the documentation of a file as a header before the
- * list of (global) subprograms (Fortran).
- */
- virtual QCString trSubprograms()
- { return "Функции/Процедури"; }
-
- /*! This is used in the documentation of a file/namespace before the list
- * of documentation blocks for subprograms (Fortran)
- */
- virtual QCString trSubprogramDocumentation()
- { return "Документација на Функции/Процедури"; }
-
- /*! This is used in the documentation of a file/namespace/group before
- * the list of links to documented compounds (Fortran)
- */
- virtual QCString trDataTypes()
- { return "Типови"; }
-
- /*! used as the title of page containing all the index of all modules (Fortran). */
- virtual QCString trModulesList()
- { return "ÐŸÐ¾Ð¿Ð¸Ñ Ð½Ð° Модули"; }
-
- /*! used as an introduction to the modules list (Fortran) */
- virtual QCString trModulesListDescription(bool extractAll)
- {
- QCString result="СпиÑок на Ñите ";
- if (!extractAll) result+="документирани ";
- result+="модули Ñо кратки опиÑи:";
- return result;
- }
-
- /*! used as the title of the HTML page of a module/type (Fortran) */
- virtual QCString trCompoundReferenceFortran(const char *clName,
- ClassDef::CompoundType compType,
- bool isTemplate)
- {
- QCString result=(QCString)clName + " - Повикување на";
- switch(compType)
- {
- case ClassDef::Class: result+=" КлаÑа"; break;
- case ClassDef::Struct: result+=" Тип"; break;
- case ClassDef::Union: result+=" Унија"; break;
- case ClassDef::Interface: result+=" ИнтерфејÑ"; break;
- case ClassDef::Protocol: result+=" Протокол"; break;
- case ClassDef::Category: result+=" Категорија"; break;
- case ClassDef::Exception: result+=" ИÑклучок"; break;
- }
- if (isTemplate) result+=" Образец";
- return result;
- }
- /*! used as the title of the HTML page of a module (Fortran) */
- virtual QCString trModuleReference(const char *namespaceName)
- {
- QCString result=namespaceName;
- result+=" - Содржина на Модул";
- return result;
- }
-
- /*! This is put above each page as a link to all members of modules. (Fortran) */
- virtual QCString trModulesMembers()
- { return "Членови на Модул"; }
-
- /*! This is an introduction to the page with all modules members (Fortran) */
- virtual QCString trModulesMemberDescription(bool extractAll)
- {
- QCString result="СпиÑок на Ñите ";
- if (!extractAll) result+="документирани ";
- result+="членови на модулот Ñо врÑки до ";
- if (extractAll)
- {
- result+="документацијата за Ñекој член:";
- }
- else
- {
- result+="модулите на кои што припаѓаат:";
- }
- return result;
- }
-
- /*! This is used in LaTeX as the title of the chapter with the
- * index of all modules (Fortran).
- */
- virtual QCString trModulesIndex()
- { return "ÐŸÐ¾Ð¿Ð¸Ñ Ð½Ð° Модули"; }
-
- /*! This is used for translation of the word that will possibly
- * be followed by a single name or by a list of names
- * of the category.
- */
- virtual QCString trModule(bool first_capital, bool singular)
- {
- QCString result((first_capital ? "Модул" : "модул"));
- if (!singular) result+="и";
- return result;
- }
- /*! This is put at the bottom of a module documentation page and is
- * followed by a list of files that were used to generate the page.
- */
- virtual QCString trGeneratedFromFilesFortran(ClassDef::CompoundType compType,
- bool single)
- { // here s is one of " Module", " Struct" or " Union"
- // single is true implies a single file
- QCString result=(QCString)"Документацијата за ";
- switch(compType)
- {
- case ClassDef::Class: result+="оваа клаÑа"; break;
- case ClassDef::Struct: result+="овој тип"; break;
- case ClassDef::Union: result+="оваа унија"; break;
- case ClassDef::Interface: result+="овој интерфејÑ"; break;
- case ClassDef::Protocol: result+="овој протокол"; break;
- case ClassDef::Category: result+="оваа категорија"; break;
- case ClassDef::Exception: result+="овој иÑклучок"; break;
- }
- result+=" беше Ñоздадена од ";
- if (single) result+="Ñледнава датотека:"; else result+="Ñледниве датотеки:";
- return result;
- }
- /*! This is used for translation of the word that will possibly
- * be followed by a single name or by a list of names
- * of the category.
- */
- virtual QCString trType(bool first_capital, bool singular)
- {
- QCString result((first_capital ? "Тип" : "тип"));
- if (!singular) result+="ови";
- return result;
- }
- /*! This is used for translation of the word that will possibly
- * be followed by a single name or by a list of names
- * of the category.
- */
- virtual QCString trSubprogram(bool first_capital, bool singular)
- {
- QCString result((first_capital ? "Потпрограм" : "потпрограм"));
- if (singular){
- result+="а";
- }else{
- result+="и";
- }
-
- return result;
- }
-
- /*! C# Type Constraint list */
- virtual QCString trTypeConstraints()
- {
- return "Ограничувања на Тип";
- }
-};
-
-#endif
diff --git a/trunk/src/translator_nl.h b/trunk/src/translator_nl.h
deleted file mode 100644
index f0cc795..0000000
--- a/trunk/src/translator_nl.h
+++ /dev/null
@@ -1,1470 +0,0 @@
-/******************************************************************************
- *
- *
- *
- * Copyright (C) 1997-2012 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.
- *
- */
-
-#ifndef TRANSLATOR_NL_H
-#define TRANSLATOR_NL_H
-
-class TranslatorDutch : public Translator
-{
- public:
- QCString idLanguage()
- { return "dutch"; }
- /*! Used to get the LaTeX command(s) for the language support.
- * This method should return string with commands that switch
- * LaTeX to the desired language. For example
- * <pre>"\\usepackage[german]{babel}\n"
- * </pre>
- * or
- * <pre>"\\usepackage{polski}\n"
- * "\\usepackage[latin2]{inputenc}\n"
- * "\\usepackage[T1]{fontenc}\n"
- * </pre>
- */
- QCString latexLanguageSupportCommand()
- {
- return "\\usepackage[dutch]{babel}\n";
- }
- /*! return the language charset. This will be used for the HTML output */
- QCString idLanguageCharset()
- {
- return "iso-8859-1";
- }
-
- QCString trRelatedFunctions()
- { return "Gerelateerde functies"; }
- QCString trRelatedSubscript()
- { return "(Merk op dat dit geen member functies zijn.)"; }
- QCString trDetailedDescription()
- { return "Gedetailleerde Beschrijving"; }
- QCString trMemberTypedefDocumentation()
- { return "Documentatie van type definitie members"; }
- QCString trMemberEnumerationDocumentation()
- { return "Documentatie van enumeratie members"; }
- QCString trMemberFunctionDocumentation()
- { return "Documentatie van functie members"; }
- QCString trMemberDataDocumentation()
- { return "Documentatie van data members"; }
- QCString trMore()
- { return "Meer..."; }
- QCString trListOfAllMembers()
- { return "Lijst van alle members."; }
- QCString trMemberList()
- { return "Member Lijst"; }
- QCString trThisIsTheListOfAllMembers()
- { return "Dit is de complete lijst van alle members voor"; }
- QCString trIncludingInheritedMembers()
- { return ", inclusief alle overge&euml;rfde members."; }
- QCString trGeneratedAutomatically(const char *s)
- { QCString result="Automatisch gegenereerd door Doxygen";
- if (s) result+=(QCString)" voor "+s;
- result+=" uit de programmatekst.";
- return result;
- }
- QCString trEnumName()
- { return "enum naam"; }
- QCString trEnumValue()
- { return "enum waarde"; }
- QCString trDefinedIn()
- { return "gedefinieerd in"; }
- QCString trModules()
- { return "Modules"; }
- QCString trClassHierarchy()
- { return "Klasse Hi&euml;rarchie"; }
- QCString trCompoundList()
- { return "Klasse Lijst"; }
- QCString trFileList()
- { return "Bestandslijst"; }
- QCString trCompoundMembers()
- { return "Klasse Members"; }
- QCString trFileMembers()
- { return "Bestand members"; }
- QCString trRelatedPages()
- { return "Gerelateerde pagina's"; }
- QCString trExamples()
- { return "Voorbeelden"; }
- QCString trSearch()
- { return "Zoeken"; }
- QCString trClassHierarchyDescription()
- { return "Deze inheritance lijst is min of meer alfabetisch "
- "gesorteerd:";
- }
- QCString trFileListDescription(bool extractAll)
- {
- QCString result="Hieronder volgt de lijst met alle ";
- if (!extractAll) result+="gedocumenteerde ";
- result+="bestanden, elk met een korte beschrijving:";
- return result;
- }
- QCString trCompoundListDescription()
- { return "Hieronder volgen de klassen, structs en "
- "unions met voor elk een korte beschrijving:";
- }
- QCString trCompoundMembersDescription(bool extractAll)
- {
- QCString result="Hieronder volgt de lijst met alle ";
- if (!extractAll) result+="gedocumenteerde ";
- result+="klasse members met links naar ";
- if (!extractAll) result+="de klasse documentatie voor elke member:";
- else result+="de klassen waartoe ze behoren:";
- return result;
- }
- QCString trFileMembersDescription(bool extractAll)
- {
- QCString result="Hieronder volgt de lijst met alle ";
- if (!extractAll) result+="gedocumenteerde ";
- result+="bestand members met links naar ";
- if (extractAll) result+="de bestand's documentatie voor elke member:";
- else result+="de bestanden waartoe ze behoren:";
- return result;
- }
- QCString trExamplesDescription()
- { return "Hieronder volgt de lijst met alle voorbeelden:"; }
- QCString trRelatedPagesDescription()
- { return "Hieronder volgt de lijst met alle pagina's die gerelateerde documentatie bevatten:"; }
- QCString trModulesDescription()
- { return "Hieronder volgt de lijst met alle modules:"; }
-
- QCString trDocumentation()
- { return "Documentatie"; }
- QCString trModuleIndex()
- { return "Module Index"; }
- QCString trHierarchicalIndex()
- { return "Hi&euml;rarchische Index"; }
- QCString trCompoundIndex()
- { return "Klasse Index"; }
- QCString trFileIndex()
- { return "Bestand Index"; }
- QCString trModuleDocumentation()
- { return "Module Documentatie"; }
- QCString trClassDocumentation()
- { return "Klassen Documentatie"; }
- QCString trFileDocumentation()
- { return "Bestand Documentatie"; }
- QCString trExampleDocumentation()
- { return "Documentatie van voorbeelden"; }
- QCString trPageDocumentation()
- { return "Documentatie van gerelateerde pagina's"; }
- QCString trReferenceManual()
- { return "Naslagwerk"; }
-
- QCString trDefines()
- { return "Defines"; }
- QCString trFuncProtos()
- { return "Functie Prototypes"; }
- QCString trTypedefs()
- { return "Typedefs"; }
- QCString trEnumerations()
- { return "Enumeraties"; }
- QCString trFunctions()
- { return "Functies"; }
- QCString trVariables()
- { return "Variabelen"; }
- QCString trEnumerationValues()
- { return "Enumeratie waarden"; }
- QCString trDefineDocumentation()
- { return "Documentatie van defines"; }
- QCString trFunctionPrototypeDocumentation()
- { return "Documentatie van functie Prototypes"; }
- QCString trTypedefDocumentation()
- { return "Documentatie van typedefs"; }
- QCString trEnumerationTypeDocumentation()
- { return "Documentatie van enumeratie types"; }
- QCString trEnumerationValueDocumentation()
- { return "Documentatie van enumeratie waarden"; }
- QCString trFunctionDocumentation()
- { return "Documentatie van functies"; }
- QCString trVariableDocumentation()
- { return "Documentatie van variabelen"; }
- QCString trCompounds()
- { return "Klassen"; }
- QCString trGeneratedAt(const char *date,const char *projName)
- {
- QCString result=(QCString)"Gegenereerd op "+date;
- if (projName) result+=(QCString)" voor "+projName;
- result+=(QCString)" door";
- return result;
- }
- QCString trWrittenBy()
- {
- return "geschreven door";
- }
- QCString trClassDiagram(const char *clName)
- {
- return (QCString)"Klasse diagram voor "+clName;
- }
- QCString trForInternalUseOnly()
- { return "Alleen voor intern gebruik."; }
- QCString trWarning()
- { return "Waarschuwing"; }
- QCString trVersion()
- { return "Versie"; }
- QCString trDate()
- { return "Datum"; }
- QCString trReturns()
- { return "Retourneert"; }
- QCString trSeeAlso()
- { return "Zie ook"; }
- QCString trParameters()
- { return "Parameters"; }
- QCString trExceptions()
- { return "Excepties"; }
- QCString trGeneratedBy()
- { return "Gegenereerd door"; }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 0.49-990307
-//////////////////////////////////////////////////////////////////////////
-
- QCString trNamespaceList()
- { return "Namespace Lijst"; }
- QCString trNamespaceListDescription(bool extractAll)
- {
- QCString result="Hier is een lijst met alle ";
- if (!extractAll) result+="gedocumenteerde ";
- result+="namespaces met voor elk een korte beschrijving:";
- return result;
- }
- QCString trFriends()
- { return "Friends"; }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 0.49-990405
-//////////////////////////////////////////////////////////////////////////
-
- QCString trRelatedFunctionDocumentation()
- { return "Documentatie van friends en gerelateerde functies"; }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 0.49-990425
-//////////////////////////////////////////////////////////////////////////
-
- QCString trCompoundReference(const char *clName,
- ClassDef::CompoundType compType,
- bool isTemplate)
- // used as the title of the HTML page of a class/struct/union
- {
- QCString result=(QCString)clName;
- if (isTemplate) result+=" Template";
- switch(compType)
- {
- case ClassDef::Class: result+=" Class"; break;
- case ClassDef::Struct: result+=" Struct"; break;
- case ClassDef::Union: result+=" Union"; break;
- case ClassDef::Interface: result+=" Interface"; break;
- case ClassDef::Protocol: result+=" Protocol"; break;
- case ClassDef::Category: result+=" Category"; break;
- case ClassDef::Exception: result+=" Exception"; break;
- }
- result+=" Referentie";
- return result;
- }
- QCString trFileReference(const char *fileName)
- // used as the title of the HTML page of a file
- {
- QCString result=fileName;
- result+=" Bestand Referentie";
- return result;
- }
- QCString trNamespaceReference(const char *namespaceName)
- // used as the title of the HTML page of a namespace
- {
- QCString result=namespaceName;
- result+=" Namespace Referentie";
- return result;
- }
-
- // these are for the member sections of a class, struct or union
- QCString trPublicMembers()
- { return "Public Members"; }
- QCString trPublicSlots()
- { return "Public Slots"; }
- QCString trSignals()
- { return "Signals"; }
- QCString trStaticPublicMembers()
- { return "Static Public Members"; }
- QCString trProtectedMembers()
- { return "Protected Members"; }
- QCString trProtectedSlots()
- { return "Protected Slots"; }
- QCString trStaticProtectedMembers()
- { return "Static Protected Members"; }
- QCString trPrivateMembers()
- { return "Private Members"; }
- QCString trPrivateSlots()
- { return "Private Slots"; }
- QCString trStaticPrivateMembers()
- { return "Static Private Members"; }
- // end of member sections
-
- QCString trWriteList(int numEntries)
- {
- // this function is used to produce a comma-separated list of items.
- // use generateMarker(i) to indicate where item i should be put.
- QCString result;
- int i;
- // the inherits list contain `numEntries' classes
- for (i=0;i<numEntries;i++)
- {
- // use generateMarker to generate placeholders for the class links!
- result+=generateMarker(i); // generate marker for entry i in the list
- // (order is left to right)
-
- if (i!=numEntries-1) // not the last entry, so we need a separator
- {
- if (i<numEntries-2) // not the fore last entry
- result+=", ";
- else // the fore last entry
- result+=" en ";
- }
- }
- return result;
- }
-
- QCString trInheritsList(int numEntries)
- // used in class documentation to produce a list of base classes,
- // if class diagrams are disabled.
- {
- return "Erft over van "+trWriteList(numEntries)+".";
- }
- QCString trInheritedByList(int numEntries)
- // used in class documentation to produce a list of super classes,
- // if class diagrams are disabled.
- {
- return "Wordt overge&euml;rfd door "+trWriteList(numEntries)+".";
- }
- QCString trReimplementedFromList(int numEntries)
- // used in member documentation blocks to produce a list of
- // members that are hidden by this one.
- {
- return "Nieuwe implementatie van "+trWriteList(numEntries)+".";
- }
- QCString trReimplementedInList(int numEntries)
- {
- // used in member documentation blocks to produce a list of
- // all member that overwrite the implementation of this member.
- return "Opnieuw ge&iuml;mplementeerd in "+trWriteList(numEntries)+".";
- }
-
- QCString trNamespaceMembers()
- // This is put above each page as a link to all members of namespaces.
- { return "Namespace Members"; }
- QCString trNamespaceMemberDescription(bool extractAll)
- // This is an introduction to the page with all namespace members
- {
- QCString result="Hier is een lijst van alle ";
- if (!extractAll) result+="gedocumenteerde ";
- result+="namespace members met links naar ";
- if (extractAll)
- result+="de namespace documentatie voor iedere member:";
- else
- result+="de namespaces waartoe ze behoren:";
- return result;
- }
- QCString trNamespaceIndex()
- // This is used in LaTeX as the title of the chapter with the
- // index of all namespaces.
- { return "Namespace Index"; }
- QCString trNamespaceDocumentation()
- // This is used in LaTeX as the title of the chapter containing
- // the documentation of all namespaces.
- { return "Namespace Documentatie"; }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 0.49-990522
-//////////////////////////////////////////////////////////////////////////
-
- /*! This is used in the documentation before the list of all
- * namespaces in a file.
- */
- QCString trNamespaces()
- {
- return "Namespaces";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 0.49-990728
-//////////////////////////////////////////////////////////////////////////
-
- /*! This is put at the bottom of a class documentation page and is
- * followed by a list of files that were used to generate the page.
- */
- QCString trGeneratedFromFiles(ClassDef::CompoundType compType,
- bool single)
- { // here s is one of " Class", " Struct" or " Union"
- // single is true implies a single file
- QCString result=(QCString)"De documentatie voor ";
- switch(compType)
- {
- case ClassDef::Class: result+="deze klasse"; break;
- case ClassDef::Struct: result+="deze struct"; break;
- case ClassDef::Union: result+="deze union"; break;
- case ClassDef::Interface: result+="dit interface"; break;
- case ClassDef::Protocol: result+="dit protocol"; break;
- case ClassDef::Category: result+="deze categorie"; break;
- case ClassDef::Exception: result+="deze exceptie"; break;
- }
- result+=" is gegenereerd op grond van het volgende bestand";
- if (single) result+=":"; else result+="s:";
- return result;
- }
-
- /*! This is in the (quick) index as a link to the alphabetical compound
- * list.
- */
- QCString trAlphabeticalList()
- { return "Alphabetical List"; }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 0.49-990901
-//////////////////////////////////////////////////////////////////////////
-
- /*! This is used as the heading text for the retval command. */
- QCString trReturnValues()
- { return "Retour waarden"; }
-
- /*! This is in the (quick) index as a link to the main page (index.html)
- */
- QCString trMainPage()
- { return "Hoofd Pagina"; }
-
- /*! This is used in references to page that are put in the LaTeX
- * documentation. It should be an abbreviation of the word page.
- */
- QCString trPageAbbreviation()
- { return "p."; }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 0.49-991106
-//////////////////////////////////////////////////////////////////////////
-
- QCString trDefinedAtLineInSourceFile()
- {
- return "De definitie bevindt zich op regel @0 in het bestand @1.";
- }
- QCString trDefinedInSourceFile()
- {
- return "De definitie bevindt zich in het bestand @0.";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 0.49-991205
-//////////////////////////////////////////////////////////////////////////
-
- QCString trDeprecated()
- {
- return "Verouderd";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.0.0
-//////////////////////////////////////////////////////////////////////////
-
- /*! this text is put before a collaboration diagram */
- QCString trCollaborationDiagram(const char *clName)
- {
- return (QCString)"Collaboratie diagram voor "+clName+":";
- }
- /*! this text is put before an include dependency graph */
- QCString trInclDepGraph(const char *fName)
- {
- return (QCString)"Include afhankelijkheidsgraaf voor "+fName+":";
- }
- /*! header that is put before the list of constructor/destructors. */
- QCString trConstructorDocumentation()
- {
- return "Constructor & Destructor Documentatie";
- }
- /*! Used in the file documentation to point to the corresponding sources. */
- QCString trGotoSourceCode()
- {
- return "Ga naar de broncode van dit bestand.";
- }
- /*! Used in the file sources to point to the corresponding documentation. */
- QCString trGotoDocumentation()
- {
- return "Ga naar de documentatie van dit bestand.";
- }
- /*! Text for the \\pre command */
- QCString trPrecondition()
- {
- return "Preconditie";
- }
- /*! Text for the \\post command */
- QCString trPostcondition()
- {
- return "Postconditie";
- }
- /*! Text for the \\invariant command */
- QCString trInvariant()
- {
- return "Invariant";
- }
- /*! Text shown before a multi-line variable/enum initialization */
- QCString trInitialValue()
- {
- return "Initi&euml;le waarde:";
- }
- /*! Text used the source code in the file index */
- QCString trCode()
- {
- return "code";
- }
- QCString trGraphicalHierarchy()
- {
- return "Grafische Klasse Hi&euml;rarchie";
- }
- QCString trGotoGraphicalHierarchy()
- {
- return "Ga naar de grafische klasse hi&euml;rarchie";
- }
- QCString trGotoTextualHierarchy()
- {
- return "Ga naar de tekstuele klasse hi&euml;rarchie";
- }
- QCString trPageIndex()
- {
- return "Pagina Index";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.1.0
-//////////////////////////////////////////////////////////////////////////
-
- QCString trNote()
- {
- return "Noot";
- }
- QCString trPublicTypes()
- {
- return "Public Typen";
- }
- QCString trPublicAttribs()
- {
- return "Public Attributen";
- }
- QCString trStaticPublicAttribs()
- {
- return "Static Public Attributen";
- }
- QCString trProtectedTypes()
- {
- return "Protected Typen";
- }
- QCString trProtectedAttribs()
- {
- return "Protected Attributen";
- }
- QCString trStaticProtectedAttribs()
- {
- return "Static Protected Attributen";
- }
- QCString trPrivateTypes()
- {
- return "Private Typen";
- }
- QCString trPrivateAttribs()
- {
- return "Private Attributen";
- }
- QCString trStaticPrivateAttribs()
- {
- return "Static Private Attributen";
- }
-
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.1.3
-//////////////////////////////////////////////////////////////////////////
-
- /*! Used as a marker that is put before a todo item */
- QCString trTodo()
- {
- return "Todo";
- }
- /*! Used as the header of the todo list */
- QCString trTodoList()
- {
- return "Todo Lijst";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.1.4
-//////////////////////////////////////////////////////////////////////////
-
- QCString trReferencedBy()
- {
- return "Wordt aangeroepen door";
- }
- QCString trRemarks()
- {
- return "Opmerkingen";
- }
- QCString trAttention()
- {
- return "Attentie";
- }
- QCString trInclByDepGraph()
- {
- return "Deze graaf geeft aan welke bestanden direct of "
- "indirect afhankelijk zijn van dit bestand:";
- }
- QCString trSince()
- {
- return "Sinds";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.1.5
-//////////////////////////////////////////////////////////////////////////
-
- /*! title of the graph legend page */
- QCString trLegendTitle()
- {
- return "Graaf Legenda";
- }
- /*! page explaining how the dot graph's should be interpreted */
- QCString trLegendDocs()
- {
- return
- "Deze pagina legt uit hoe de grafen die gegenereerd worden door doxygen "
- "ge&iuml;nterpreteerd dienen te worden.<p>\n"
- "Beschouw het volgende voorbeeld:\n"
- "\\code\n"
- "/*! Onzichtbare klasse vanwege afkappen van de graaf */\n"
- "class Invisible { };\n\n"
- "/*! Afgekapte klasse, overervingsrelatie is verborgen */\n"
- "class Truncated : public Invisible { };\n\n"
- "/* Klasse is niet gedocumenteerd met doxygen commentaar */\n"
- "class Undocumented { };\n\n"
- "/*! Klasse met public inheritance */\n"
- "class PublicBase : public Truncated { };\n\n"
- "/*! A template class */\n"
- "template<class T> class Templ { };\n\n"
- "/*! Klasse met protected inheritance */\n"
- "class ProtectedBase { };\n\n"
- "/*! Klasse met private inheritance */\n"
- "class PrivateBase { };\n\n"
- "/*! Klasse die wordt gebruikt door de klasse Inherited */\n"
- "class Used { };\n\n"
- "/*! Super klasse die overerft van een aantal andere klassen */\n"
- "class Inherited : public PublicBase,\n"
- " protected ProtectedBase,\n"
- " private PrivateBase,\n"
- " public Undocumented,\n"
- " public Templ<int>\n"
- "{\n"
- " private:\n"
- " Used *m_usedClass;\n"
- "};\n"
- "\\endcode\n"
- "Dit voorbeeld zal resulteren in de volgende graaf:"
- "<p><center><img src=\"graph_legend."+Config_getEnum("DOT_IMAGE_FORMAT")+"\"></center>\n"
- "<p>\n"
- "De rechthoeken in the bovenstaande graaf hebben de volgende betekenis:\n"
- "<ul>\n"
- "<li>Een gevulde grijze rechthoek representeert de structure of klasse waarvoor "
- "de graaf is gegeneerd.\n"
- "<li>Een rechthoek met een zwarte rand representeert een gedocumenteerde structure of klasse.\n"
- "<li>Een rechthoek met een grijze rand representeert een ongedocumenteerde structure of klasse.\n"
- "<li>Een rechthoek met een rode rand representeert een gedocumenteerde structure or klasse waarvoor\n"
- "niet alle overervings- of gebruiksrelaties konden worden getoond. Een graaf wordt "
- "afgekapt als hij niet past binnen de gespecificeerde grenzen."
- "</ul>\n"
- "De pijlen hebben de volgende betekenis:\n"
- "<ul>\n"
- "<li>Een donkerblauwe pijl visualizeert een public inheritance "
- "relatie tussen twee klassen.\n"
- "<li>Een donkergroene pijl wordt gebruikt voor protected inheritance.\n"
- "<li>Een donkerrode pijl wordt gebruikt voor private inheritance.\n"
- "<li>Een paars gestippelde pijl wordt gebruikt indien een klasse bevat is of gebruikt wordt "
- "door een andere klasse. De pijl is gelabeled met de variable(n) "
- "die toegang geven tot de aangewezen klasse of structure. \n"
- "<li>Een geel gestippelde pijl wordt gebruikt om een relatie tussen een \n"
- "template instantie en een template klasse aan te geven. De pijl is gelabeld met \n"
- "template parameters van de instantie.\n"
- "</ul>\n";
- }
- /*! text for the link to the legend page */
- QCString trLegend()
- {
- return "legenda";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.2.0
-//////////////////////////////////////////////////////////////////////////
-
- /*! Used as a marker that is put before a test item */
- QCString trTest()
- {
- return "Test";
- }
- /*! Used as the header of the test list */
- QCString trTestList()
- {
- return "Test Lijst";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.2.1
-//////////////////////////////////////////////////////////////////////////
-
- /*! Used as a section header for KDE-2 IDL methods */
- QCString trDCOPMethods()
- {
- return "DCOP Methoden";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.2.2
-//////////////////////////////////////////////////////////////////////////
-
- /*! Used as a section header for IDL properties */
- QCString trProperties()
- {
- return "Properties";
- }
- /*! Used as a section header for IDL property documentation */
- QCString trPropertyDocumentation()
- {
- return "Property Documentatie";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.2.4
-//////////////////////////////////////////////////////////////////////////
-
- /*! Used for Java classes in the summary section of Java packages */
- QCString trClasses()
- {
- return "Klassen";
- }
- /*! Used as the title of a Java package */
- QCString trPackage(const char *name)
- {
- return (QCString)"Package "+name;
- }
- /*! Title of the package index page */
- QCString trPackageList()
- {
- return "Package Lijst";
- }
- /*! The description of the package index page */
- QCString trPackageListDescription()
- {
- return "Hier volgen de packages, elk met een korte beschrijving (indien aanwezig):";
- }
- /*! The link name in the Quick links header for each page */
- QCString trPackages()
- {
- return "Packages";
- }
- /*! Text shown before a multi-line define */
- QCString trDefineValue()
- {
- return "Waarde:";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.2.5
-//////////////////////////////////////////////////////////////////////////
-
- /*! Used as a marker that is put before a \\bug item */
- QCString trBug()
- {
- return "Bug";
- }
- /*! Used as the header of the bug list */
- QCString trBugList()
- {
- return "Bug Lijst";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.2.6
-//////////////////////////////////////////////////////////////////////////
-
- /*! Used as ansicpg for RTF file
- *
- * The following table shows the correlation of Charset name, Charset Value and
- * <pre>
- * Codepage number:
- * Charset Name Charset Value(hex) Codepage number
- * ------------------------------------------------------
- * DEFAULT_CHARSET 1 (x01)
- * SYMBOL_CHARSET 2 (x02)
- * OEM_CHARSET 255 (xFF)
- * ANSI_CHARSET 0 (x00) 1252
- * RUSSIAN_CHARSET 204 (xCC) 1251
- * EE_CHARSET 238 (xEE) 1250
- * GREEK_CHARSET 161 (xA1) 1253
- * TURKISH_CHARSET 162 (xA2) 1254
- * BALTIC_CHARSET 186 (xBA) 1257
- * HEBREW_CHARSET 177 (xB1) 1255
- * ARABIC _CHARSET 178 (xB2) 1256
- * SHIFTJIS_CHARSET 128 (x80) 932
- * HANGEUL_CHARSET 129 (x81) 949
- * GB2313_CHARSET 134 (x86) 936
- * CHINESEBIG5_CHARSET 136 (x88) 950
- * </pre>
- *
- */
- virtual QCString trRTFansicp()
- {
- return "1252";
- }
-
-
- /*! Used as ansicpg for RTF fcharset
- * \see trRTFansicp() for a table of possible values.
- */
- virtual QCString trRTFCharSet()
- {
- return "0";
- }
-
- /*! Used as header RTF general index */
- virtual QCString trRTFGeneralIndex()
- {
- return "Index";
- }
-
- /*! This is used for translation of the word that will possibly
- * be followed by a single name or by a list of names
- * of the category.
- */
- virtual QCString trClass(bool first_capital, bool singular)
- {
- QCString result((first_capital ? "Klasse" : "klass"));
- if (!singular) result+="n";
- return result;
- }
-
- /*! This is used for translation of the word that will possibly
- * be followed by a single name or by a list of names
- * of the category.
- */
- virtual QCString trFile(bool first_capital, bool singular)
- {
- QCString result((first_capital ? "Bestand" : "bestand"));
- if (!singular) result+="en";
- return result;
- }
-
- /*! This is used for translation of the word that will possibly
- * be followed by a single name or by a list of names
- * of the category.
- */
- virtual QCString trNamespace(bool first_capital, bool singular)
- {
- QCString result((first_capital ? "Namespace" : "namespace"));
- if (!singular) result+="s";
- return result;
- }
-
- /*! This is used for translation of the word that will possibly
- * be followed by a single name or by a list of names
- * of the category.
- */
- virtual QCString trGroup(bool first_capital, bool singular)
- {
- QCString result((first_capital ? "Groep" : "groep"));
- if (!singular) result+="en";
- return result;
- }
-
- /*! This is used for translation of the word that will possibly
- * be followed by a single name or by a list of names
- * of the category.
- */
- virtual QCString trPage(bool first_capital, bool singular)
- {
- QCString result((first_capital ? "Pagina" : "pagina"));
- if (!singular) result+="s";
- return result;
- }
-
- /*! This is used for translation of the word that will possibly
- * be followed by a single name or by a list of names
- * of the category.
- */
- virtual QCString trMember(bool first_capital, bool singular)
- {
- QCString result((first_capital ? "Member" : "member"));
- if (!singular) result+="s";
- return result;
- }
-
- /*! This is used for translation of the word that will possibly
- * be followed by a single name or by a list of names
- * of the category.
- */
- virtual QCString trGlobal(bool first_capital, bool singular)
- {
- QCString result((first_capital ? "Globale member" : "globale member"));
- if (!singular) result+="s";
- return result;
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.2.7
-//////////////////////////////////////////////////////////////////////////
-
- /*! This text is generated when the \\author command is used and
- * for the author section in man pages. */
- virtual QCString trAuthor(bool first_capital, bool singular)
- {
- QCString result((first_capital ? "Auteur" : "auteur"));
- if (!singular) result+="s";
- return result;
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.2.11
-//////////////////////////////////////////////////////////////////////////
-
- /*! This text is put before the list of members referenced by a member
- */
- virtual QCString trReferences()
- {
- return "Gebruikt";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.2.13
-//////////////////////////////////////////////////////////////////////////
-
- /*! used in member documentation blocks to produce a list of
- * members that are implemented by this one.
- */
- virtual QCString trImplementedFromList(int numEntries)
- {
- return "Implementeert "+trWriteList(numEntries)+".";
- }
-
- /*! used in member documentation blocks to produce a list of
- * all members that implementation this member.
- */
- virtual QCString trImplementedInList(int numEntries)
- {
- return "Wordt ge&iuml;mplementeerd door "+trWriteList(numEntries)+".";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.2.16
-//////////////////////////////////////////////////////////////////////////
-
- virtual QCString trRTFTableOfContents()
- { return "Inhoudsopgave"; }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.2.17
-//////////////////////////////////////////////////////////////////////////
-
- /*! Used as the header of the list of item that have been
- * flagged deprecated
- */
- virtual QCString trDeprecatedList()
- {
- return "Deprecated Lijst";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.2.18
-//////////////////////////////////////////////////////////////////////////
-
- /*! Used as a header for a section of events found in a C# program
- */
- virtual QCString trEvents()
- {
- return "Events";
- }
- /*! Header used for the documentation section of a class' events. */
- virtual QCString trEventDocumentation()
- {
- return "Event Documentatie";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.3
-//////////////////////////////////////////////////////////////////////////
-
- /*! Used as a heading for a list of Java class types with package scope.
- */
- virtual QCString trPackageTypes()
- {
- return "Package Types";
- }
- /*! Used as a heading for a list of Java class functions with package
- * scope.
- */
- virtual QCString trPackageMembers()
- {
- return "Package Functies";
- }
- /*! Used as a heading for a list of static Java class functions with
- * package scope.
- */
- virtual QCString trStaticPackageMembers()
- {
- return "Statische Package Functies";
- }
- /*! Used as a heading for a list of Java class variables with package
- * scope.
- */
- virtual QCString trPackageAttribs()
- {
- return "Package Attributen";
- }
- /*! Used as a heading for a list of static Java class variables with
- * package scope.
- */
- virtual QCString trStaticPackageAttribs()
- {
- return "Statische Package Attributen";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.3.1
-//////////////////////////////////////////////////////////////////////////
-
- /*! Used in the quick index of a class/file/namespace member list page
- * to link to the unfiltered list of all members.
- */
- virtual QCString trAll()
- {
- return "Alle";
- }
- /*! Put in front of the call graph for a function. */
- virtual QCString trCallGraph()
- {
- return "Hier is de call graaf voor deze functie:";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.3.3
-//////////////////////////////////////////////////////////////////////////
-
- /*! When the search engine is enabled this text is put in the index
- * of each page before the search field.
- */
- virtual QCString trSearchForIndex()
- {
- return "Zoek naar";
- }
- /*! This string is used as the title for the page listing the search
- * results.
- */
- virtual QCString trSearchResultsTitle()
- {
- return "Zoek Resultaten";
- }
- /*! This string is put just before listing the search results. The
- * text can be different depending on the number of documents found.
- * Inside the text you can put the special marker $num to insert
- * the number representing the actual number of search results.
- * The @a numDocuments parameter can be either 0, 1 or 2, where the
- * value 2 represents 2 or more matches. HTML markup is allowed inside
- * the returned string.
- */
- virtual QCString trSearchResults(int numDocuments)
- {
- if (numDocuments==0)
- {
- return "Helaas, er zijn geen documenten gevonden die aan de zoekopdracht voldoen.";
- }
- else if (numDocuments==1)
- {
- return "Er is <b>1</b> document gevonden dat aan de zoekopdracht voldoet.";
- }
- else
- {
- return "Er zijn <b>$num</b> documenten gevonden die aan de zoekopdracht voldoen. "
- "De beste resultaten worden eerst getoond.";
- }
- }
- /*! This string is put before the list of matched words, for each search
- * result. What follows is the list of words that matched the query.
- */
- virtual QCString trSearchMatches()
- {
- return "Gevonden:";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.3.8
-//////////////////////////////////////////////////////////////////////////
-
- /*! This is used in HTML as the title of page with source code for file filename
- */
- virtual QCString trSourceFile(QCString& filename)
- {
- return filename + " Bron Bestand";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.3.9
-//////////////////////////////////////////////////////////////////////////
-
- /*! This is used as the name of the chapter containing the directory
- * hierarchy.
- */
- virtual QCString trDirIndex()
- { return "Folder Hi&euml;rarchie"; }
-
- /*! This is used as the name of the chapter containing the documentation
- * of the directories.
- */
- virtual QCString trDirDocumentation()
- { return "Folder Documentatie"; }
-
- /*! This is used as the title of the directory index and also in the
- * Quick links of a HTML page, to link to the directory hierarchy.
- */
- virtual QCString trDirectories()
- { return "Folders"; }
-
- /*! This returns a sentences that introduces the directory hierarchy.
- * and the fact that it is sorted alphabetically per level
- */
- virtual QCString trDirDescription()
- { return "Deze folder hi&euml;rarchie is min of meer alfabetisch "
- "gesorteerd:";
- }
-
- /*! This returns the title of a directory page. The name of the
- * directory is passed via \a dirName.
- */
- virtual QCString trDirReference(const char *dirName)
- { QCString result=dirName; result+=" Folder Referentie"; return result; }
-
- /*! This returns the word directory with or without starting capital
- * (\a first_capital) and in sigular or plural form (\a singular).
- */
- virtual QCString trDir(bool first_capital, bool singular)
- {
- QCString result((first_capital ? "Folder" : "folder"));
- if (!singular) result+="s";
- return result;
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.4.1
-//////////////////////////////////////////////////////////////////////////
-
- /*! This text is added to the documentation when the \\overload command
- * is used for a function.
- */
- virtual QCString trOverloadText()
- {
- return "Deze functie is overloaded en is beschikbaar gemaakt om het "
- "gebruik te vergemakkelijken. Ze verschilt alleen van de "
- "bovenstaande functie wat betreft de parameterlijst.";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.4.6
-//////////////////////////////////////////////////////////////////////////
-
- /*! Put in front of the call graph for a function. */
- virtual QCString trCallerGraph()
- {
- return "Hier is de caller graaf voor deze functie:";
- }
-
- /*! header that is put before the list of member subprograms (Fortran). */
- virtual QCString trMemberFunctionDocumentationFortran()
- { return "Member Functie/Subroutine Documentatie"; }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.5.4 (mainly for Fortran)
-//////////////////////////////////////////////////////////////////////////
-
- /*! This is put above each page as a link to the list of annotated data types (Fortran). */
- virtual QCString trCompoundListFortran()
- { return "Lijst met data types"; }
-
- /*! This is put above each page as a link to all members of compounds (Fortran). */
- virtual QCString trCompoundMembersFortran()
- { return "Data velden"; }
-
- /*! This is an introduction to the annotated compound list (Fortran). */
- virtual QCString trCompoundListDescriptionFortran()
- { return "Hieronder volgen de data types elk een korte beschrijving:"; }
-
- /*! This is an introduction to the page with all data types (Fortran). */
- virtual QCString trCompoundMembersDescriptionFortran(bool extractAll)
- {
- QCString result="Hieronder volgt de lijst met alle ";
- if (!extractAll) result+="gedocumenteerde ";
- result+="data types met links naar ";
- if (!extractAll) result+="de klasse documentatie voor elke member:";
- else result+="de klassen waartoe ze behoren:";
- return result;
- }
-
- /*! This is used in LaTeX as the title of the chapter with the
- * annotated compound index (Fortran).
- */
- virtual QCString trCompoundIndexFortran()
- { return "Data Type Index"; }
-
- /*! This is used in LaTeX as the title of the chapter containing
- * the documentation of all data types (Fortran).
- */
- virtual QCString trTypeDocumentation()
- { return "Data Type Documentatie"; }
-
- /*! This is used in the documentation of a file as a header before the
- * list of (global) subprograms (Fortran).
- */
- virtual QCString trSubprograms()
- { return "Functies/Subroutines"; }
-
- /*! This is used in the documentation of a file/namespace before the list
- * of documentation blocks for subprograms (Fortran)
- */
- virtual QCString trSubprogramDocumentation()
- { return "Functie/Subroutine Documentatie"; }
-
- /*! This is used in the documentation of a file/namespace/group before
- * the list of links to documented compounds (Fortran)
- */
- virtual QCString trDataTypes()
- { return "Data Types"; }
-
- /*! used as the title of page containing all the index of all modules (Fortran). */
- virtual QCString trModulesList()
- { return "Module Lijst"; }
-
- /*! used as an introduction to the modules list (Fortran) */
- virtual QCString trModulesListDescription(bool extractAll)
- {
- QCString result="Hieronder volgt de lijst met alle ";
- if (!extractAll) result+="gedocumenteerde ";
- result+="modulen, elk met een korte beschrijving:";
- return result;
- }
-
- /*! used as the title of the HTML page of a module/type (Fortran) */
- virtual QCString trCompoundReferenceFortran(const char *clName,
- ClassDef::CompoundType compType,
- bool isTemplate)
- {
- QCString result=(QCString)clName;
- switch(compType)
- {
- case ClassDef::Class: result+=" Module"; break;
- case ClassDef::Struct: result+=" Type"; break;
- case ClassDef::Union: result+=" Union"; break;
- case ClassDef::Interface: result+=" Interface"; break;
- case ClassDef::Protocol: result+=" Protocol"; break;
- case ClassDef::Category: result+=" Category"; break;
- case ClassDef::Exception: result+=" Exception"; break;
- }
- if (isTemplate) result+=" Template";
- result+=" Referentie";
- return result;
- }
- /*! used as the title of the HTML page of a module (Fortran) */
- virtual QCString trModuleReference(const char *namespaceName)
- {
- QCString result=namespaceName;
- result+=" Module Referentie";
- return result;
- }
-
- /*! This is put above each page as a link to all members of modules. (Fortran) */
- virtual QCString trModulesMembers()
- { return "Module Members"; }
-
- /*! This is an introduction to the page with all modules members (Fortran) */
- virtual QCString trModulesMemberDescription(bool extractAll)
- {
- QCString result="Hier is een lijst van alle ";
- if (!extractAll) result+="gedocumenteerde ";
- result+="module members met links naar ";
- if (extractAll)
- result+="de module documentatie voor iedere member:";
- else
- result+="de module waartoe ze behoren:";
- return result;
- }
-
- /*! This is used in LaTeX as the title of the chapter with the
- * index of all modules (Fortran).
- */
- virtual QCString trModulesIndex()
- { return "Module Index"; }
-
- /*! This is used for translation of the word that will possibly
- * be followed by a single name or by a list of names
- * of the category.
- */
- virtual QCString trModule(bool first_capital, bool singular)
- {
- QCString result((first_capital ? "Module" : "module"));
- if (!singular) result+="n";
- return result;
- }
- /*! This is put at the bottom of a module documentation page and is
- * followed by a list of files that were used to generate the page.
- */
- virtual QCString trGeneratedFromFilesFortran(ClassDef::CompoundType compType,
- bool single)
- { // here s is one of " Class", " Struct" or " Union"
- // single is true implies a single file
- QCString result=(QCString)"De documentatie voor ";
- switch(compType)
- {
- case ClassDef::Class: result+="deze module"; break;
- case ClassDef::Struct: result+="dit type"; break;
- case ClassDef::Union: result+="deze union"; break;
- case ClassDef::Interface: result+="dit interface"; break;
- case ClassDef::Protocol: result+="dit protocol"; break;
- case ClassDef::Category: result+="deze category"; break;
- case ClassDef::Exception: result+="deze exception"; break;
- }
- result+=" is gegenereerd op grond van het volgende bestand";
- if (single) result+=":"; else result+="s:";
- return result;
- }
- /*! This is used for translation of the word that will possibly
- * be followed by a single name or by a list of names
- * of the category.
- */
- virtual QCString trType(bool first_capital, bool singular)
- {
- QCString result((first_capital ? "Type" : "type"));
- if (!singular) result+="s";
- return result;
- }
- /*! This is used for translation of the word that will possibly
- * be followed by a single name or by a list of names
- * of the category.
- */
- virtual QCString trSubprogram(bool first_capital, bool singular)
- {
- QCString result((first_capital ? "Subprogramma" : "subprogramma"));
- if (!singular) result+="s";
- return result;
- }
-
- /*! C# Type Contraint list */
- virtual QCString trTypeConstraints()
- {
- return "Type Beperkingen";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.6.0
-//////////////////////////////////////////////////////////////////////////
-
- /*! directory relation for \a name */
- virtual QCString trDirRelation(const char *name)
- {
- return QCString(name)+" Relatie";
- }
-
- /*! Loading message shown when loading search results */
- virtual QCString trLoading()
- {
- return "Laden...";
- }
-
- /*! Label used for search results in the global namespace */
- virtual QCString trGlobalNamespace()
- {
- return "Globale Namespace";
- }
-
- /*! Message shown while searching */
- virtual QCString trSearching()
- {
- return "Zoeken...";
- }
-
- /*! Text shown when no search results are found */
- virtual QCString trNoMatches()
- {
- return "Niets gevonden";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.6.3 (missing items for the directory pages)
-//////////////////////////////////////////////////////////////////////////
-
- /*! introduction text for the directory dependency graph */
- virtual QCString trDirDependency(const char *name)
- {
- return (QCString)"Folder afhankelijkheidsgraaf voor "+name;
- }
-
- /*! when clicking a directory dependency label, a page with a
- * table is shown. The heading for the first column mentions the
- * source file that has a relation to another file.
- */
- virtual QCString trFileIn(const char *name)
- {
- return (QCString)"Bestand in "+name;
- }
-
- /*! when clicking a directory dependency label, a page with a
- * table is shown. The heading for the second column mentions the
- * destination file that is included.
- */
- virtual QCString trIncludesFileIn(const char *name)
- {
- return (QCString)"Includeert bestand in "+name;
- }
- virtual QCString trDateTime(int year,int month,int day,int dayOfWeek,
- int hour,int minutes,int seconds,
- bool includeTime)
- {
- static const char *days[] = { "Ma","Di","Wo","Do","Vr","Za","Zo" };
- static const char *months[] = { "Jan","Feb","Maa","Apr","Mei","Jun","Jul","Aug","Sep","Okt","Nov","Dec" };
- QCString sdate;
- sdate.sprintf("%s %d %s %d",days[dayOfWeek-1],day,months[month-1],year);
- if (includeTime)
- {
- QCString stime;
- stime.sprintf(" %.2d:%.2d:%.2d",hour,minutes,seconds);
- sdate+=stime;
- }
- return sdate;
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.7.5
-//////////////////////////////////////////////////////////////////////////
-
- /*! Header for the page with bibliographic citations */
- virtual QCString trCiteReferences()
- { return "Bibliografie"; }
-
- /*! Text for copyright paragraph */
- virtual QCString trCopyright()
- { return "Copyright"; }
-
- /*! Header for the graph showing the directory dependencies */
- virtual QCString trDirDepGraph(const char *name)
- { return QCString("Folder afhankelijkheidsgraaf voor ")+name+":"; }
-
-
-};
-
-#endif
diff --git a/trunk/src/translator_no.h b/trunk/src/translator_no.h
deleted file mode 100644
index 29b2648..0000000
--- a/trunk/src/translator_no.h
+++ /dev/null
@@ -1,1617 +0,0 @@
-/******************************************************************************
- *
- *
- *
- * Copyright (C) 1997-2012 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.
- *
- */
-
-/******************************************************************************
- * Norwegian translation by Lars Erik Jordet <lejordet@gmail.com>, parts by Frode Nilsen
- *
- * This is a new translation made from scratch, not based on my older Norwegian translation (for 1.2.2)
- *
- * Translation notes (in Norwegian)
- *
- * Jeg har stort sett brukt ord som ligger ganske nær de engelske ekvivalentene,
- * for eksempel "enumeration" -> "enumerasjon", og i enkelte tilfeller det engelske
- * ordet direkte, der jeg finner det mer naturlig enn å prøve å stable en setning
- * på beina på norsk, eller jeg selv foretrekker det engelske ordet (eks: "Header-fil").
- * Om noen ikke skulle like disse valgene, kontakt meg på mailadressen over.
- *
- * Doxygen har mange strings som består av sammensatte ord ("Member function description", for eksempel),
- * som ikke alltid ser like ryddig ut på norsk. Jeg har brukt bindestrek for å få
- * det til å se presentabelt ut, men om noen har en bedre idé, send til mailadressen over.
- *
- * 2006-03-06:
- * Jeg bruker ikke doxygen selv lenger, så det går nok litt i lengste laget mellom oppdateringer...
- *
- * Changelog
- *
- * 2003-12-18: Initial translation
- * 2004-07-19: Fixup to prepare for 1.3.8 (I had forgotten some functions)
- * 2006-03-06: Added a .diff from Frode Nilsen, now compatible with 1.4.6.
- */
-
-#ifndef TRANSLATOR_NO_H
-#define TRANSLATOR_NO_H
-
-class TranslatorNorwegian : public TranslatorAdapter_1_4_6
-{
- public:
-
- // --- Language control methods -------------------
-
- /*! Used for identification of the language. The identification
- * should not be translated. It should be replaced by the name
- * of the language in English using lower-case characters only
- * (e.g. "czech", "japanese", "russian", etc.). It should be equal to
- * the identification used in language.cpp.
- */
- virtual QCString idLanguage()
- { return "norwegian"; }
-
- /*! Used to get the LaTeX command(s) for the language support.
- * This method should return string with commands that switch
- * LaTeX to the desired language. For example
- * <pre>"\\usepackage[german]{babel}\n"
- * </pre>
- * or
- * <pre>"\\usepackage{polski}\n"
- * "\\usepackage[latin2]{inputenc}\n"
- * "\\usepackage[T1]{fontenc}\n"
- * </pre>
- */
- virtual QCString latexLanguageSupportCommand()
- {
- return
- "\\usepackage[norwegian]{babel}\n"
- "\\usepackage[T1]{fontenc}\n";
- }
-
- /*! return the language charset. This will be used for the HTML output */
- virtual QCString idLanguageCharset()
- {
- return "iso-8859-1";
- }
-
- // --- Language translation methods -------------------
-
- /*! used in the compound documentation before a list of related functions. */
- virtual QCString trRelatedFunctions()
- { return "Relaterte funksjoner"; }
-
- /*! subscript for the related functions. */
- virtual QCString trRelatedSubscript()
- { return "(Merk at disse ikke er medlemsfunksjoner.)"; }
-
- /*! header that is put before the detailed description of files, classes and namespaces. */
- virtual QCString trDetailedDescription()
- { return "Detaljert beskrivelse"; }
-
- /*! header that is put before the list of typedefs. */
- virtual QCString trMemberTypedefDocumentation()
- { return "Medlemstypedef-dokumentasjon"; }
-
- /*! header that is put before the list of enumerations. */
- virtual QCString trMemberEnumerationDocumentation()
- { return "Medlemsenumerasjon-dokumentasjon"; }
-
- /*! header that is put before the list of member functions. */
- virtual QCString trMemberFunctionDocumentation()
- { return "Medlemsfunksjon-dokumentasjon"; }
-
- /*! header that is put before the list of member attributes. */
- virtual QCString trMemberDataDocumentation()
- {
- if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
- {
- return "Feltdokumentasjon";
- }
- else
- {
- return "Medlemsdata-dokumentasjon";
- }
- }
-
- /*! this is the text of a link put after brief descriptions. */
- virtual QCString trMore()
- { return "Mer..."; }
-
- /*! put in the class documentation */
- virtual QCString trListOfAllMembers()
- { return "Liste over alle medlemmer."; }
-
- /*! used as the title of the "list of all members" page of a class */
- virtual QCString trMemberList()
- { return "Medlemsliste"; }
-
- /*! this is the first part of a sentence that is followed by a class name */
- virtual QCString trThisIsTheListOfAllMembers()
- { return "Dette er den fullstendige listen over medlemmer for "; }
-
- /*! this is the remainder of the sentence after the class name */
- virtual QCString trIncludingInheritedMembers()
- { return ", alle arvede medlemmer inkludert."; }
-
- /*! this is put at the author sections at the bottom of man pages.
- * parameter s is name of the project name.
- */
- virtual QCString trGeneratedAutomatically(const char *s)
- { QCString result="Generert automatisk av Doxygen";
- if (s) result+=(QCString)" for "+s;
- result+=" fra kildekoden.";
- return result;
- }
-
- /*! put after an enum name in the list of all members */
- virtual QCString trEnumName()
- { return "enum-navn"; }
-
- /*! put after an enum value in the list of all members */
- virtual QCString trEnumValue()
- { return "enum-verdi"; }
-
- /*! put after an undocumented member in the list of all members */
- virtual QCString trDefinedIn()
- { return "definert i"; }
-
- // quick reference sections
-
- /*! This is put above each page as a link to the list of all groups of
- * compounds or files (see the \\group command).
- */
- virtual QCString trModules()
- { return "Moduler"; }
-
- /*! This is put above each page as a link to the class hierarchy */
- virtual QCString trClassHierarchy()
- { return "Klassehierarki"; }
-
- /*! This is put above each page as a link to the list of annotated classes */
- virtual QCString trCompoundList()
- {
- if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
- {
- return "Datastrukturer";
- }
- else
- {
- return "Klasseliste";
- }
- }
-
- /*! This is put above each page as a link to the list of documented files */
- virtual QCString trFileList()
- { return "Fil-liste"; }
-
- /*! This is put above each page as a link to the list of all verbatim headers */
- virtual QCString trHeaderFiles()
- { return "Header-filer"; }
-
- /*! This is put above each page as a link to all members of compounds. */
- virtual QCString trCompoundMembers()
- {
- if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
- {
- return "Datafelt";
- }
- else
- {
- return "Klassemedlemmer";
- }
- }
-
- /*! This is put above each page as a link to all members of files. */
- virtual QCString trFileMembers()
- {
- if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
- {
- return "Globale";
- }
- else
- {
- return "Filmedlemmer";
- }
- }
-
- /*! This is put above each page as a link to all related pages. */
- virtual QCString trRelatedPages()
- { return "Relaterte sider"; }
-
- /*! This is put above each page as a link to all examples. */
- virtual QCString trExamples()
- { return "Eksempler"; }
-
- /*! This is put above each page as a link to the search engine. */
- virtual QCString trSearch()
- { return "Søk"; }
-
- /*! This is an introduction to the class hierarchy. */
- virtual QCString trClassHierarchyDescription()
- { return "Denne arvelisten er grovsortert alfabetisk "
- "(ikke nødvendigvis korrekt):";
- }
-
- /*! This is an introduction to the list with all files. */
- virtual QCString trFileListDescription(bool extractAll)
- {
- QCString result="Her er en liste over alle ";
- if (!extractAll) result+="dokumenterte ";
- result+="filer med korte beskrivelser:";
- return result;
- }
-
- /*! This is an introduction to the annotated compound list. */
- virtual QCString trCompoundListDescription()
- {
-
- if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
- {
- return "Her er datastrukturene med korte beskrivelser:";
- }
- else
- {
- return "Her er klasser, struct'er, "
- "unioner og interface'er med korte beskrivelser:";
- }
- }
-
- /*! This is an introduction to the page with all class members. */
- virtual QCString trCompoundMembersDescription(bool extractAll)
- {
- QCString result="Her er en liste over alle ";
- if (!extractAll)
- {
- result+="dokumenterte ";
- }
- if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
- {
- result+="struct- og unionfelter";
- }
- else
- {
- result+="klassemedlemmer";
- }
- result+=" med koblinger til ";
- if (!extractAll)
- {
- if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
- {
- result+="struct/union dokumentasjon for hvert felt:";
- }
- else
- {
- result+="klassedokumentasjonen for hvert medlem:";
- }
- }
- else
- {
- if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
- {
- result+="struct'ene/unionene de hører til:";
- }
- else
- {
- result+="klassene de hører til:";
- }
- }
- return result;
- }
- /*! This is an introduction to the page with all file members. */
- virtual QCString trFileMembersDescription(bool extractAll)
- {
- QCString result="Her er en liste over alle ";
- if (!extractAll) result+="dokumenterte ";
-
- if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
- {
- result+="funksjoner, variabler, definisjoner, enum'er, og typedef'er";
- }
- else
- {
- result+="filmedlemmer";
- }
- result+=" med koblinger til ";
- if (extractAll)
- result+="filene de hører til:";
- else
- result+="dokumentasjonen:";
- return result;
- }
-
- /*! This is an introduction to the page with the list of all header files. */
- virtual QCString trHeaderFilesDescription()
- { return "Her er alle header-filene som utgjør API'et:"; }
-
- /*! This is an introduction to the page with the list of all examples */
- virtual QCString trExamplesDescription()
- { return "Her er en liste over alle eksemplene:"; }
-
- /*! This is an introduction to the page with the list of related pages */
- virtual QCString trRelatedPagesDescription()
- { return "Her er en liste over alle relaterte dokumentasjonssider:"; }
-
- /*! This is an introduction to the page with the list of class/file groups */
- virtual QCString trModulesDescription()
- { return "Her er en liste over alle moduler:"; }
-
- /*! This sentences is used in the annotated class/file lists if no brief
- * description is given.
- */
- virtual QCString trNoDescriptionAvailable()
- { return "Ingen beskrivelse tilgjengelig"; }
-
- // index titles (the project name is prepended for these)
-
-
- /*! This is used in HTML as the title of index.html. */
- virtual QCString trDocumentation()
- { return "Dokumentasjon"; }
-
- /*! This is used in LaTeX as the title of the chapter with the
- * index of all groups.
- */
- virtual QCString trModuleIndex()
- { return "Modulindeks"; }
-
- /*! This is used in LaTeX as the title of the chapter with the
- * class hierarchy.
- */
- virtual QCString trHierarchicalIndex()
- { return "Hierarkisk indeks"; }
-
- /*! This is used in LaTeX as the title of the chapter with the
- * annotated compound index.
- */
- virtual QCString trCompoundIndex()
- {
- if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
- {
- return "Datastrukturindeks";
- }
- else
- {
- return "Klasseindeks";
- }
- }
-
- /*! This is used in LaTeX as the title of the chapter with the
- * list of all files.
- */
- virtual QCString trFileIndex()
- { return "Filindeks"; }
-
- /*! This is used in LaTeX as the title of the chapter containing
- * the documentation of all groups.
- */
- virtual QCString trModuleDocumentation()
- { return "Moduldokumentasjon"; }
-
- /*! This is used in LaTeX as the title of the chapter containing
- * the documentation of all classes, structs and unions.
- */
- virtual QCString trClassDocumentation()
- {
- if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
- {
- return "Datastrukturdokumentasjon";
- }
- else
- {
- return "Klassedokumentasjon";
- }
- }
-
- /*! This is used in LaTeX as the title of the chapter containing
- * the documentation of all files.
- */
- virtual QCString trFileDocumentation()
- { return "Fildokumentasjon"; }
-
- /*! This is used in LaTeX as the title of the chapter containing
- * the documentation of all examples.
- */
- virtual QCString trExampleDocumentation()
- { return "Eksempeldokumentasjon"; }
-
- /*! This is used in LaTeX as the title of the chapter containing
- * the documentation of all related pages.
- */
- virtual QCString trPageDocumentation()
- { return "Sidedokumentasjon"; }
-
- /*! This is used in LaTeX as the title of the document */
- virtual QCString trReferenceManual()
- { return "Referansemanual"; }
-
- /*! This is used in the documentation of a file as a header before the
- * list of defines
- */
- virtual QCString trDefines()
- { return "Definisjoner"; }
-
- /*! This is used in the documentation of a file as a header before the
- * list of function prototypes
- */
- virtual QCString trFuncProtos()
- { return "Funksjonprototyper"; }
-
- /*! This is used in the documentation of a file as a header before the
- * list of typedefs
- */
- virtual QCString trTypedefs()
- { return "Typedef'er"; }
-
- /*! This is used in the documentation of a file as a header before the
- * list of enumerations
- */
- virtual QCString trEnumerations()
- { return "Enumerasjoner"; }
-
- /*! This is used in the documentation of a file as a header before the
- * list of (global) functions
- */
- virtual QCString trFunctions()
- { return "Funksjoner"; }
-
- /*! This is used in the documentation of a file as a header before the
- * list of (global) variables
- */
- virtual QCString trVariables()
- { return "Variabler"; }
-
- /*! This is used in the documentation of a file as a header before the
- * list of (global) variables
- */
- virtual QCString trEnumerationValues()
- { return "Enumerasjonsverdier"; }
-
- /*! This is used in the documentation of a file before the list of
- * documentation blocks for defines
- */
- virtual QCString trDefineDocumentation()
- { return "Define-dokumentasjon"; }
-
- /*! This is used in the documentation of a file/namespace before the list
- * of documentation blocks for function prototypes
- */
- virtual QCString trFunctionPrototypeDocumentation()
- { return "Funksjonsprototypedokumentasjon"; }
-
- /*! This is used in the documentation of a file/namespace before the list
- * of documentation blocks for typedefs
- */
- virtual QCString trTypedefDocumentation()
- { return "Typedef-dokumentasjon"; }
-
- /*! This is used in the documentation of a file/namespace before the list
- * of documentation blocks for enumeration types
- */
- virtual QCString trEnumerationTypeDocumentation()
- { return "Enumerasjontype dokumentasjon"; }
-
- /*! This is used in the documentation of a file/namespace before the list
- * of documentation blocks for enumeration values
- */
- virtual QCString trEnumerationValueDocumentation()
- { return "Enumerasjonsverdi dokumentasjon"; }
-
- /*! This is used in the documentation of a file/namespace before the list
- * of documentation blocks for functions
- */
- virtual QCString trFunctionDocumentation()
- { return "Funksjonsdokumentasjon"; }
-
- /*! This is used in the documentation of a file/namespace before the list
- * of documentation blocks for variables
- */
- virtual QCString trVariableDocumentation()
- { return "Variabeldokumentasjon"; }
-
- /*! This is used in the documentation of a file/namespace/group before
- * the list of links to documented compounds
- */
- virtual QCString trCompounds()
- {
- if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
- {
- return "Datastrukturer";
- }
- else
- {
- return "Klasser";
- }
- }
-
- /*! This is used in the standard footer of each page and indicates when
- * the page was generated
- */
- virtual QCString trGeneratedAt(const char *date,const char *projName)
- {
- QCString result=(QCString)"Generert "+date;
- if (projName) result+=(QCString)" for "+projName;
- result+=(QCString)" av";
- return result;
- }
- /*! This is part of the sentence used in the standard footer of each page.
- */
- virtual QCString trWrittenBy()
- {
- return "skrevet av";
- }
-
- /*! this text is put before a class diagram */
- virtual QCString trClassDiagram(const char *clName)
- {
- return (QCString)"Arvediagram for "+clName+":";
- }
-
- /*! this text is generated when the \\internal command is used. */
- virtual QCString trForInternalUseOnly()
- { return "Kun for intern bruk."; }
-
- /*! this text is generated when the \\reimp command is used. */
- virtual QCString trReimplementedForInternalReasons()
- { return "Reimplementert av interne grunner; API er ikke påvirket."; }
-
- /*! this text is generated when the \\warning command is used. */
- virtual QCString trWarning()
- { return "Advarsel"; }
-
- /*! this text is generated when the \\bug command is used. */
- virtual QCString trBugsAndLimitations()
- { return "Feil og begrensninger"; }
-
- /*! this text is generated when the \\version command is used. */
- virtual QCString trVersion()
- { return "Versjon"; }
-
- /*! this text is generated when the \\date command is used. */
- virtual QCString trDate()
- { return "Dato"; }
-
- /*! this text is generated when the \\return command is used. */
- virtual QCString trReturns()
- { return "Returnerer"; }
-
- /*! this text is generated when the \\sa command is used. */
- virtual QCString trSeeAlso()
- { return "Se også"; }
-
- /*! this text is generated when the \\param command is used. */
- virtual QCString trParameters()
- { return "Parametre"; }
-
- /*! this text is generated when the \\exception command is used. */
- virtual QCString trExceptions()
- { return "Unntak"; }
-
- /*! this text is used in the title page of a LaTeX document. */
- virtual QCString trGeneratedBy()
- { return "Generert av"; }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 0.49-990307
-//////////////////////////////////////////////////////////////////////////
-
- /*! used as the title of page containing all the index of all namespaces. */
- virtual QCString trNamespaceList()
- { return "Navneromsliste"; }
-
- /*! used as an introduction to the namespace list */
- virtual QCString trNamespaceListDescription(bool extractAll)
- {
- QCString result="Her er en liste over alle ";
- if (!extractAll) result+="dokumenterte ";
- result+="navnerom med korte beskrivelser:";
- return result;
- }
-
- /*! used in the class documentation as a header before the list of all
- * friends of a class
- */
- virtual QCString trFriends()
- { return "Venner"; }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 0.49-990405
-//////////////////////////////////////////////////////////////////////////
-
- /*! used in the class documentation as a header before the list of all
- * related classes
- */
- virtual QCString trRelatedFunctionDocumentation()
- { return "Venner og relatert funksjonsdokumentasjon"; }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 0.49-990425
-//////////////////////////////////////////////////////////////////////////
-
- /*! used as the title of the HTML page of a class/struct/union */
- virtual QCString trCompoundReference(const char *clName,
- ClassDef::CompoundType compType,
- bool isTemplate)
- {
- QCString result=(QCString)clName;
- switch(compType)
- {
- case ClassDef::Class: result+=" Klasse"; break;
- case ClassDef::Struct: result+=" Struct"; break;
- case ClassDef::Union: result+=" Union"; break;
- case ClassDef::Interface: result+=" Grensesnitt"; break;
- case ClassDef::Exception: result+=" Unntak"; break;
- case ClassDef::Protocol: result+=" Protocol"; break;
- case ClassDef::Category: result+=" Category"; break;
- }
- if (isTemplate) result+=" Mal";
- result+=" Referanse";
- return result;
- }
-
- /*! used as the title of the HTML page of a file */
- virtual QCString trFileReference(const char *fileName)
- {
- QCString result=fileName;
- result+=" filreferanse";
- return result;
- }
-
- /*! used as the title of the HTML page of a namespace */
- virtual QCString trNamespaceReference(const char *namespaceName)
- {
- QCString result=namespaceName;
- result+=" navneromsreferanse";
- return result;
- }
-
- virtual QCString trPublicMembers()
- { return "Public medlemsfunksjoner"; }
- virtual QCString trPublicSlots()
- { return "Public slots"; }
- virtual QCString trSignals()
- { return "Signaler"; }
- virtual QCString trStaticPublicMembers()
- { return "Statiske public medlemsfunksjoner"; }
- virtual QCString trProtectedMembers()
- { return "Protected memdlemsfunksjoner"; }
- virtual QCString trProtectedSlots()
- { return "Protected slots"; }
- virtual QCString trStaticProtectedMembers()
- { return "Statiske protected medlemsfunksjoner"; }
- virtual QCString trPrivateMembers()
- { return "Private medlemsfunksjoner"; }
- virtual QCString trPrivateSlots()
- { return "Private slots"; }
- virtual QCString trStaticPrivateMembers()
- { return "Statiske private medlemsfunksjoner"; }
-
- /*! this function is used to produce a comma-separated list of items.
- * use generateMarker(i) to indicate where item i should be put.
- */
- virtual QCString trWriteList(int numEntries)
- {
- QCString result;
- int i;
- // the inherits list contain `numEntries' classes
- for (i=0;i<numEntries;i++)
- {
- // use generateMarker to generate placeholders for the class links!
- result+=generateMarker(i); // generate marker for entry i in the list
- // (order is left to right)
-
- if (i!=numEntries-1) // not the last entry, so we need a separator
- {
- if (i<numEntries-2) // not the fore last entry
- result+=", ";
- else // the fore last entry
- result+=", og ";
- }
- }
- return result;
- }
-
- /*! used in class documentation to produce a list of base classes,
- * if class diagrams are disabled.
- */
- virtual QCString trInheritsList(int numEntries)
- {
- return "Arver "+trWriteList(numEntries)+".";
- }
-
- /*! used in class documentation to produce a list of super classes,
- * if class diagrams are disabled.
- */
- virtual QCString trInheritedByList(int numEntries)
- {
- return "Arvet av "+trWriteList(numEntries)+".";
- }
-
- /*! used in member documentation blocks to produce a list of
- * members that are hidden by this one.
- */
- virtual QCString trReimplementedFromList(int numEntries)
- {
- return "Reimplementert fra "+trWriteList(numEntries)+".";
- }
-
- /*! used in member documentation blocks to produce a list of
- * all member that overwrite the implementation of this member.
- */
- virtual QCString trReimplementedInList(int numEntries)
- {
- return "Reimplementert i "+trWriteList(numEntries)+".";
- }
-
- /*! This is put above each page as a link to all members of namespaces. */
- virtual QCString trNamespaceMembers()
- { return "Navneromsmedlemmer"; }
-
- /*! This is an introduction to the page with all namespace members */
- virtual QCString trNamespaceMemberDescription(bool extractAll)
- {
- QCString result="Her er en liste over alle ";
- if (!extractAll) result+="dokumenterte ";
- result+="navneromsmedlemmer med koblinger til ";
- if (extractAll)
- result+="navneromsdokumentasjonen for hvert medlem:";
- else
- result+="navnerommet de hører til:";
- return result;
- }
- /*! This is used in LaTeX as the title of the chapter with the
- * index of all namespaces.
- */
- virtual QCString trNamespaceIndex()
- { return "Navneromsindeks"; }
-
- /*! This is used in LaTeX as the title of the chapter containing
- * the documentation of all namespaces.
- */
- virtual QCString trNamespaceDocumentation()
- { return "Navneromsdokumentasjon"; }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 0.49-990522
-//////////////////////////////////////////////////////////////////////////
-
- /*! This is used in the documentation before the list of all
- * namespaces in a file.
- */
- virtual QCString trNamespaces()
- { return "Navnerom"; }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 0.49-990728
-//////////////////////////////////////////////////////////////////////////
-
- /*! This is put at the bottom of a class documentation page and is
- * followed by a list of files that were used to generate the page.
- */
- virtual QCString trGeneratedFromFiles(ClassDef::CompoundType compType,
- bool single)
- { // here s is one of " Class", " Struct" or " Union"
- // single is true implies a single file
- QCString result=(QCString)"Dokumentasjonen for ";
- switch(compType)
- {
- case ClassDef::Class: result+="denne klasse"; break;
- case ClassDef::Struct: result+="denne struct"; break;
- case ClassDef::Union: result+="denne union"; break;
- case ClassDef::Interface: result+="dette interface"; break;
- case ClassDef::Exception: result+="dette unntak"; break;
- case ClassDef::Protocol: result+="denne protocol"; break;
- case ClassDef::Category: result+="denne category"; break;
- }
- result+=" ble generert fra følgende fil";
- if (single) result+=":"; else result+="er:";
- return result;
- }
-
- /*! This is in the (quick) index as a link to the alphabetical compound
- * list.
- */
- virtual QCString trAlphabeticalList()
- { return "Alfabetisk Liste"; }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 0.49-990901
-//////////////////////////////////////////////////////////////////////////
-
- /*! This is used as the heading text for the retval command. */
- virtual QCString trReturnValues()
- { return "Returverdier"; }
-
- /*! This is in the (quick) index as a link to the main page (index.html)
- */
- virtual QCString trMainPage()
- { return "Hovedside"; }
-
- /*! This is used in references to page that are put in the LaTeX
- * documentation. It should be an abbreviation of the word page.
- */
- virtual QCString trPageAbbreviation()
- { return "s."; }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 0.49-991003
-//////////////////////////////////////////////////////////////////////////
-
- virtual QCString trSources()
- {
- return "Kilder";
- }
- virtual QCString trDefinedAtLineInSourceFile()
- {
- return "Definisjon på linje @0 i filen @1.";
- }
- virtual QCString trDefinedInSourceFile()
- {
- return "Definisjon i filen @0.";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 0.49-991205
-//////////////////////////////////////////////////////////////////////////
-
- virtual QCString trDeprecated()
- {
- return "Foreldet";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.0.0
-//////////////////////////////////////////////////////////////////////////
-
- /*! this text is put before a collaboration diagram */
- virtual QCString trCollaborationDiagram(const char *clName)
- {
- return (QCString)"Samarbeidsdiagram for "+clName+":";
- }
- /*! this text is put before an include dependency graph */
- virtual QCString trInclDepGraph(const char *fName)
- {
- return (QCString)"Avhengighetsgraf for "+fName+":";
- }
-
- /*! header that is put before the list of constructor/destructors. */
- virtual QCString trConstructorDocumentation()
- {
- return "Konstruktør- & destruktør-dokumentasjon";
- }
- /*! Used in the file documentation to point to the corresponding sources. */
- virtual QCString trGotoSourceCode()
- {
- return "Gå til kildekoden til denne filen.";
- }
- /*! Used in the file sources to point to the corresponding documentation. */
- virtual QCString trGotoDocumentation()
- {
- return "Gå til dokumentasjonen til denne filen.";
- }
- /*! Text for the \\pre command */
- virtual QCString trPrecondition()
- {
- return "Forhåndsbetingelse";
- }
- /*! Text for the \\post command */
- virtual QCString trPostcondition()
- {
- return "Etterbetingelse";
- }
- /*! Text for the \\invariant command */
- virtual QCString trInvariant()
- {
- return "Invariant";
- }
- /*! Text shown before a multi-line variable/enum initialization */
- virtual QCString trInitialValue()
- {
- return "Startverdi:";
- }
- /*! Text used the source code in the file index */
- virtual QCString trCode()
- {
- return "kode";
- }
- virtual QCString trGraphicalHierarchy()
- {
- return "Grafisk klassehierarki";
- }
- virtual QCString trGotoGraphicalHierarchy()
- {
- return "Gå til det grafiske klasse hierarkiet";
- }
- virtual QCString trGotoTextualHierarchy()
- {
- return "Gå til tekst-klassehierarki";
- }
- virtual QCString trPageIndex()
- {
- return "Innhold";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.1.0
-//////////////////////////////////////////////////////////////////////////
-
- virtual QCString trNote()
- {
- return "Notat";
- }
- virtual QCString trPublicTypes()
- {
- return "Public typer";
- }
- virtual QCString trPublicAttribs()
- {
- if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
- {
- return "Datafelt";
- }
- else
- {
- return "Public attributter";
- }
- }
- virtual QCString trStaticPublicAttribs()
- {
- return "Statiske public attributter";
- }
- virtual QCString trProtectedTypes()
- {
- return "Protected typer";
- }
- virtual QCString trProtectedAttribs()
- {
- return "Protected attributter";
- }
- virtual QCString trStaticProtectedAttribs()
- {
- return "Statiske protected attributter";
- }
- virtual QCString trPrivateTypes()
- {
- return "Private typer";
- }
- virtual QCString trPrivateAttribs()
- {
- return "Private attributter";
- }
- virtual QCString trStaticPrivateAttribs()
- {
- return "Statiske private attributter";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.1.3
-//////////////////////////////////////////////////////////////////////////
-
- /*! Used as a marker that is put before a todo item */
- virtual QCString trTodo()
- {
- return "Todo";
- }
- /*! Used as the header of the todo list */
- virtual QCString trTodoList()
- {
- return "Todo-liste";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.1.4
-//////////////////////////////////////////////////////////////////////////
-
- virtual QCString trReferencedBy()
- {
- return "Referert av";
- }
- virtual QCString trRemarks()
- {
- return "Merknader";
- }
- virtual QCString trAttention()
- {
- return "Viktig";
- }
- virtual QCString trInclByDepGraph()
- {
- return "Denne grafen viser hvilke filer som direkte eller "
- "indirekte inkluderer denne filen:";
- }
- virtual QCString trSince()
- {
- return "Siden";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.1.5
-//////////////////////////////////////////////////////////////////////////
-
- /*! title of the graph legend page */
- virtual QCString trLegendTitle()
- {
- return "Symbolforklaring";
- }
- /*! page explaining how the dot graph's should be interpreted */
- virtual QCString trLegendDocs()
- {
- return
- "Denne siden forklarer hvordan man tolker grafene doxygen genererer.<p>\n"
- "Vi baserer oss på følgende eksempel:\n"
- "\\code\n"
- "/*! Usynlig klasse pga. trunkasjon */\n"
- "class Invisible { };\n\n"
- "/*! Trunkert klasse, arve-relasjon er skjult */\n"
- "class Truncated : public Invisible { };\n\n"
- "/* Klasse som ikke er dokumentert med doxygen-kommentarer */"
- "class Undocumented { };\n\n"
- "/*! Klasse med public-arv */\n"
- "class PublicBase : public Truncated { };\n\n"
- "/*! A template class */\n"
- "template<class T> class Templ { };\n\n"
- "/*! Klasse med protected-arv */\n"
- "class ProtectedBase { };\n\n"
- "/*! Klasse med private-arv */\n"
- "class PrivateBase { };\n\n"
- "/*! Klasse som blir brukt av klassen Inherited */\n"
- "class Used { };\n\n"
- "/*! Super-klasse som arver flere andre klasser */\n"
- "class Inherited : public PublicBase,\n"
- " protected ProtectedBase,\n"
- " private PrivateBase,\n"
- " public Undocumented,\n"
- " public Templ<int>\n"
- "{\n"
- " private:\n"
- " Used *m_usedClass;\n"
- "};\n"
- "\\endcode\n"
- "Hvis \\c MAX_DOT_GRAPH_HEIGHT er satt til 200 i "
- "konfigurasjonsfila vil dette resultere i følgende graf:"
- "<p><center><img src=\"graph_legend."+Config_getEnum("DOT_IMAGE_FORMAT")+"\"></center>\n"
- "<p>\n"
- "Boksene i grafen over betyr følgende:\n"
- "<ul>\n"
- "<li>En fylt svart boks representerer klassen grafen "
- "er generert for.\n"
- "<li>En boks med svart ramme angir en dokumentert struct eller klasse.\n"
- "<li>En boks med grå ramme angir en udokumentert struct eller klasse.\n"
- "<li>En boks med rød ramme angir en dokumentert struct eller klasse "
- "der ikke alle relasjoner er vist. En graf blir trunkert om den ikke "
- "passer innenfor de spesifiserte rammene.\n"
- "</ul>\n"
- "Pilene i grafen har følgende betydning:\n"
- "</ul>\n"
- "<li>En mørk blå pil brukes til å visualisere public-arv mellom to klasser.\n"
- "<li>En mørk grønn pil brukes for protected-arv.\n"
- "<li>En mørk rød pil angir private-arv.\n"
- "<li>En stiplet lilla pil angir at en klasse er inkludert eller brukt "
- "i en annen klasse. Pilen er merket med variablen(e) klassen "
- "er tilgjengelig gjennom.\n"
- "</ul>\n";
- }
- /*! text for the link to the legend page */
- virtual QCString trLegend()
- {
- return "symbolforklaring";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.2.0
-//////////////////////////////////////////////////////////////////////////
-
- /*! Used as a marker that is put before a test item */
- virtual QCString trTest()
- {
- return "Test";
- }
- /*! Used as the header of the test list */
- virtual QCString trTestList()
- {
- return "Test-liste";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.2.1
-//////////////////////////////////////////////////////////////////////////
-
- /*! Used as a section header for KDE-2 IDL methods */
- virtual QCString trDCOPMethods()
- {
- return "DCOP-metoder";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.2.1
-//////////////////////////////////////////////////////////////////////////
-
- /*! Used as a section header for IDL properties */
- virtual QCString trProperties()
- {
- return "Egenskaper";
- }
- /*! Used as a section header for IDL property documentation */
- virtual QCString trPropertyDocumentation()
- {
- return "Egenskaps-dokumentasjon";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.2.4
-//////////////////////////////////////////////////////////////////////////
-
- /*! Used for Java interfaces in the summary section of Java packages */
- virtual QCString trInterfaces()
- {
- return "Grensesnitt";
- }
- /*! Used for Java classes in the summary section of Java packages */
- virtual QCString trClasses()
- {
- if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
- {
- return "Datastrukturer";
- }
- else
- {
- return "Klasser";
- }
- }
- /*! Used as the title of a Java package */
- virtual QCString trPackage(const char *name)
- {
- return (QCString)"Package "+name;
- }
- /*! Title of the package index page */
- virtual QCString trPackageList()
- {
- return "Pakke-liste";
- }
- /*! The description of the package index page */
- virtual QCString trPackageListDescription()
- {
- return "Her er pakkene med korte beskrivelser (om tilgjengelig):";
- }
- /*! The link name in the Quick links header for each page */
- virtual QCString trPackages()
- {
- return "Pakker";
- }
- /*! Used as a chapter title for Latex & RTF output */
- virtual QCString trPackageDocumentation()
- {
- return "Pakke-dokumentasjon";
- }
- /*! Text shown before a multi-line define */
- virtual QCString trDefineValue()
- {
- return "Verdi:";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.2.5
-//////////////////////////////////////////////////////////////////////////
-
- /*! Used as a marker that is put before a \\bug item */
- virtual QCString trBug()
- {
- return "Feil";
- }
- /*! Used as the header of the bug list */
- virtual QCString trBugList()
- {
- return "Feil-liste";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.2.6
-//////////////////////////////////////////////////////////////////////////
-
- /*! Used as ansicpg for RTF file
- *
- * The following table shows the correlation of Charset name, Charset Value and
- * <pre>
- * Codepage number:
- * Charset Name Charset Value(hex) Codepage number
- * ------------------------------------------------------
- * DEFAULT_CHARSET 1 (x01)
- * SYMBOL_CHARSET 2 (x02)
- * OEM_CHARSET 255 (xFF)
- * ANSI_CHARSET 0 (x00) 1252
- * RUSSIAN_CHARSET 204 (xCC) 1251
- * EE_CHARSET 238 (xEE) 1250
- * GREEK_CHARSET 161 (xA1) 1253
- * TURKISH_CHARSET 162 (xA2) 1254
- * BALTIC_CHARSET 186 (xBA) 1257
- * HEBREW_CHARSET 177 (xB1) 1255
- * ARABIC _CHARSET 178 (xB2) 1256
- * SHIFTJIS_CHARSET 128 (x80) 932
- * HANGEUL_CHARSET 129 (x81) 949
- * GB2313_CHARSET 134 (x86) 936
- * CHINESEBIG5_CHARSET 136 (x88) 950
- * </pre>
- *
- */
- virtual QCString trRTFansicp()
- {
- return "1252";
- }
-
-
- /*! Used as ansicpg for RTF fcharset
- * \see trRTFansicp() for a table of possible values.
- */
- virtual QCString trRTFCharSet()
- {
- return "0";
- }
-
- /*! Used as header RTF general index */
- virtual QCString trRTFGeneralIndex()
- {
- return "Indeks";
- }
-
- /*! This is used for translation of the word that will possibly
- * be followed by a single name or by a list of names
- * of the category.
- */
- virtual QCString trClass(bool first_capital, bool singular)
- {
- QCString result((first_capital ? "Klasse" : "klasse"));
- if (!singular) result+="r";
- return result;
- }
-
- /*! This is used for translation of the word that will possibly
- * be followed by a single name or by a list of names
- * of the category.
- */
- virtual QCString trFile(bool first_capital, bool singular)
- {
- QCString result((first_capital ? "Fil" : "fil"));
- if (!singular) result+="er";
- return result;
- }
-
- /*! This is used for translation of the word that will possibly
- * be followed by a single name or by a list of names
- * of the category.
- */
- virtual QCString trNamespace(bool first_capital, bool singular)
- {
- QCString result((first_capital ? "Navnerom" : "navnerom"));
- if (!singular) result+="";
- return result;
- }
-
- /*! This is used for translation of the word that will possibly
- * be followed by a single name or by a list of names
- * of the category.
- */
- virtual QCString trGroup(bool first_capital, bool singular)
- {
- QCString result((first_capital ? "Gruppe" : "gruppe"));
- if (!singular) result+="r";
- return result;
- }
-
- /*! This is used for translation of the word that will possibly
- * be followed by a single name or by a list of names
- * of the category.
- */
- virtual QCString trPage(bool first_capital, bool singular)
- {
- QCString result((first_capital ? "Side" : "side"));
- if (!singular) result+="r";
- return result;
- }
-
- /*! This is used for translation of the word that will possibly
- * be followed by a single name or by a list of names
- * of the category.
- */
- virtual QCString trMember(bool first_capital, bool singular)
- {
- QCString result((first_capital ? "Medlem" : "medlem"));
- if (!singular) result+="mer";
- return result;
- }
-
- /*! This is used for translation of the word that will possibly
- * be followed by a single name or by a list of names
- * of the category.
- */
- virtual QCString trField(bool first_capital, bool singular)
- {
- QCString result((first_capital ? "Felt" : "felt"));
- if (!singular) result+="";
- return result;
- }
-
- /*! This is used for translation of the word that will possibly
- * be followed by a single name or by a list of names
- * of the category.
- */
- virtual QCString trGlobal(bool first_capital, bool singular)
- {
- QCString result((first_capital ? "Global" : "global"));
- if (!singular) result+="e";
- return result;
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.2.7
-//////////////////////////////////////////////////////////////////////////
-
- /*! This text is generated when the \\author command is used and
- * for the author section in man pages. */
- virtual QCString trAuthor(bool first_capital, bool singular)
- {
- QCString result((first_capital ? "Forfatter" : "forfatter"));
- if (!singular) result+="e";
- return result;
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.2.11
-//////////////////////////////////////////////////////////////////////////
-
- /*! This text is put before the list of members referenced by a member
- */
- virtual QCString trReferences()
- {
- return "Referanser";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.2.13
-//////////////////////////////////////////////////////////////////////////
-
- /*! used in member documentation blocks to produce a list of
- * members that are implemented by this one.
- */
- virtual QCString trImplementedFromList(int numEntries)
- {
- return "Implementerer "+trWriteList(numEntries)+".";
- }
-
- /*! used in member documentation blocks to produce a list of
- * all members that implement this abstract member.
- */
- virtual QCString trImplementedInList(int numEntries)
- {
- return "Implementert i "+trWriteList(numEntries)+".";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.2.16
-//////////////////////////////////////////////////////////////////////////
-
- /*! used in RTF documentation as a heading for the Table
- * of Contents.
- */
- virtual QCString trRTFTableOfContents()
- {
- return "Innholdsfortegnelse";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.2.17
-//////////////////////////////////////////////////////////////////////////
-
- /*! Used as the header of the list of item that have been
- * flagged deprecated
- */
- virtual QCString trDeprecatedList()
- {
- return "Liste over foreldede enheter";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.2.18
-//////////////////////////////////////////////////////////////////////////
-
- /*! Used as a header for declaration section of the events found in
- * a C# program
- */
- virtual QCString trEvents()
- {
- return "Hendelser";
- }
- /*! Header used for the documentation section of a class' events. */
- virtual QCString trEventDocumentation()
- {
- return "Hendelsesdokumentasjon";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.3
-//////////////////////////////////////////////////////////////////////////
-
- /*! Used as a heading for a list of Java class types with package scope.
- */
- virtual QCString trPackageTypes()
- {
- return "Pakketyper";
- }
- /*! Used as a heading for a list of Java class functions with package
- * scope.
- */
- virtual QCString trPackageMembers()
- {
- return "Pakkefunksjoner";
- }
- /*! Used as a heading for a list of static Java class functions with
- * package scope.
- */
- virtual QCString trStaticPackageMembers()
- {
- return "Statiske Pakkefunksjoner";
- }
- /*! Used as a heading for a list of Java class variables with package
- * scope.
- */
- virtual QCString trPackageAttribs()
- {
- return "Pakkeattributter";
- }
- /*! Used as a heading for a list of static Java class variables with
- * package scope.
- */
- virtual QCString trStaticPackageAttribs()
- {
- return "Statiske Pakkeattributter";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.3.1
-//////////////////////////////////////////////////////////////////////////
-
- /*! Used in the quick index of a class/file/namespace member list page
- * to link to the unfiltered list of all members.
- */
- virtual QCString trAll()
- {
- return "Alle";
- }
- /*! Put in front of the call graph for a function. */
- virtual QCString trCallGraph()
- {
- return "Her er kall-grafen for denne funksjonen:";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.3.3
-//////////////////////////////////////////////////////////////////////////
-
- /*! When the search engine is enabled this text is put in the header
- * of each page before the field where one can enter the text to search
- * for.
- */
- virtual QCString trSearchForIndex()
- {
- return "Søk etter";
- }
- /*! This string is used as the title for the page listing the search
- * results.
- */
- virtual QCString trSearchResultsTitle()
- {
- return "Søkeresultater";
- }
- /*! This string is put just before listing the search results. The
- * text can be different depending on the number of documents found.
- * Inside the text you can put the special marker $num to insert
- * the number representing the actual number of search results.
- * The @a numDocuments parameter can be either 0, 1 or 2, where the
- * value 2 represents 2 or more matches. HTML markup is allowed inside
- * the returned string.
- */
- virtual QCString trSearchResults(int numDocuments)
- {
- if (numDocuments==0)
- {
- return "Beklager, men ingen dokumenter ble funnet.";
- }
- else if (numDocuments==1)
- {
- return "Fant <b>ett</b> dokument som passet ditt søk.";
- }
- else
- {
- return "Fant <b>$num</b> dokumenter som passet ditt søk. "
- "Viser beste treff først.";
- }
- }
- /*! This string is put before the list of matched words, for each search
- * result. What follows is the list of words that matched the query.
- */
- virtual QCString trSearchMatches()
- {
- return "Treff:";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.3.8
-//////////////////////////////////////////////////////////////////////////
-
- /*! This is used in HTML as the title of page with source code for file filename
- */
- virtual QCString trSourceFile(QCString& filename)
- {
- return "Kildefil " + filename;
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.3.9
-//////////////////////////////////////////////////////////////////////////
-
- /*! This is used as the name of the chapter containing the directory
- * hierarchy.
- */
- virtual QCString trDirIndex()
- { return "Katalog hierarki"; }
-
- /*! This is used as the name of the chapter containing the documentation
- * of the directories.
- */
- virtual QCString trDirDocumentation()
- { return "Katalogdokumentasjon"; }
-
- /*! This is used as the title of the directory index and also in the
- * Quick links of an HTML page, to link to the directory hierarchy.
- */
- virtual QCString trDirectories()
- { return "Kataloger"; }
-
- /*! This returns a sentences that introduces the directory hierarchy.
- * and the fact that it is sorted alphabetically per level
- */
- virtual QCString trDirDescription()
- { return "Denne katalogen er grovsortert alfabetisk "
- "(ikke nødvendigvis korrekt).";
- }
-
- /*! This returns the title of a directory page. The name of the
- * directory is passed via \a dirName.
- */
- virtual QCString trDirReference(const char *dirName)
- { QCString result=dirName; result+=" Katalog referanse"; return result; }
-
- /*! This returns the word directory with or without starting capital
- * (\a first_capital) and in sigular or plural form (\a singular).
- */
- virtual QCString trDir(bool first_capital, bool singular)
- {
- QCString result((first_capital ? "Katalog" : "katalog"));
- if (!singular) result+="er";
- return result;
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.4.1
-//////////////////////////////////////////////////////////////////////////
-
- /*! This text is added to the documentation when the \\overload command
- * is used for a overloaded function.
- */
- virtual QCString trOverloadText()
- {
- return "Dette er en overloaded medlemsfunksjon, "
- "generert for deg. Den skiller seg ut fra "
- "funksjonen ovenfor i argument(ene) den aksepterer.";
- }
-};
-
-#endif
diff --git a/trunk/src/translator_pl.h b/trunk/src/translator_pl.h
deleted file mode 100644
index 038bd5e..0000000
--- a/trunk/src/translator_pl.h
+++ /dev/null
@@ -1,1804 +0,0 @@
-/******************************************************************************
- *
- *
- *
- * Copyright (C) 1997-2012 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.
- *
- * Polish translation was updated to version 1.3.9 by
- * Piotr Kaminski (Piotr.Kaminski@ctm.gdynia.pl)
- */
-
-#ifndef TRANSLATOR_PL_H
-#define TRANSLATOR_PL_H
-
-class TranslatorPolish : public TranslatorAdapter_1_6_3
-{
- public:
-
- // --- Language control methods -------------------
-
- /*! Used for identification of the language. May resemble
- * the string returned by latexBabelPackage(), but it is not used
- * for the same purpose. The identification should not be translated.
- * It should be replaced by the name of the language in English
- * (e.g. Czech, Japanese, Russian, etc.). It should be equal to
- * the identification in language.h.
- */
- QCString idLanguage()
- { return "polish"; }
- /*! Used to get the command(s) for the language support. This method
- * was designed for languages which do not prefer babel package.
- * If this methods returns empty string, then the latexBabelPackage()
- * method is used to generate the command for using the babel package.
- */
- QCString latexLanguageSupportCommand()
- {
- return "\\usepackage{polski}\n"
- "\\usepackage[T1]{fontenc}\n";
- }
-
- /*! return the language charset. This will be used for the HTML output */
- virtual QCString idLanguageCharset()
- {
- return "utf-8";
- }
-
- // --- Language translation methods -------------------
-
- /*! used in the compound documentation before a list of related functions. */
- QCString trRelatedFunctions()
- { return "Funkcje powiÄ…zane"; }
-
- /*! subscript for the related functions. */
- QCString trRelatedSubscript()
- { return "(Zauważ, że to nie są metody klas.)"; }
-
- /*! header that is put before the detailed description of files, classes and namespaces. */
- QCString trDetailedDescription()
- { return "Opis szczegółowy"; }
-
- /*! header that is put before the list of typedefs. */
- QCString trMemberTypedefDocumentation()
- { return "Dokumentacja składowych definicji typu"; }
-
- /*! header that is put before the list of enumerations. */
- QCString trMemberEnumerationDocumentation()
- { return "Dokumentacja składowych wyliczanych"; }
-
- /*! header that is put before the list of member functions. */
- QCString trMemberFunctionDocumentation()
- { return "Dokumentacja funkcji składowych"; }
-
- /*! header that is put before the list of member attributes. */
- QCString trMemberDataDocumentation()
- {
- if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
- {
- return "Dokumentacja pól";
- }
- else
- {
- return "Dokumentacja atrybutów składowych";
- }
- }
-
- /*! this is the text of a link put after brief descriptions. */
- QCString trMore()
- { return "Więcej..."; }
-
- /*! put in the class documentation */
- QCString trListOfAllMembers()
- { return "Lista wszystkich składowych."; }
-
- /*! used as the title of the "list of all members" page of a class */
- QCString trMemberList()
- { return "Lista składowych"; }
-
- /*! this is the first part of a sentence that is followed by a class name */
- QCString trThisIsTheListOfAllMembers()
- { return "To jest kompletna lista składowych dla "; }
-
- /*! this is the remainder of the sentence after the class name */
- QCString trIncludingInheritedMembers()
- { return ", uwzględniająca wszystkie dziedziczone składowe."; }
-
- /*! this is put at the author sections at the bottom of man pages.
- * parameter s is name of the project name.
- */
- QCString trGeneratedAutomatically(const char *s)
- { QCString result="Wygenerowano automatycznie z kodu źródłowego programem Doxygen";
- if (s) result+=(QCString)" dla "+s;
- result+=".";
- return result;
- }
-
- /*! put after an enum name in the list of all members */
- QCString trEnumName()
- { return "nazwa wyliczenia"; }
-
- /*! put after an enum value in the list of all members */
- QCString trEnumValue()
- { return "wartość wyliczenia"; }
-
- /*! put after an undocumented member in the list of all members */
- QCString trDefinedIn()
- { return "zdefiniowana w"; }
-
- // quick reference sections
-
- /*! This is put above each page as a link to the list of all groups of
- * compounds or files (see the \\group command).
- */
- QCString trModules()
- { return "Moduły"; }
-
- /*! This is put above each page as a link to the class hierarchy */
- QCString trClassHierarchy()
- { return "Hierarchia klas"; }
-
- /*! This is put above each page as a link to the list of annotated classes */
- QCString trCompoundList()
- {
- if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
- {
- return "Struktury danych";
- }
- else
- {
- return "Lista klas";
- }
- }
-
- /*! This is put above each page as a link to the list of documented files */
- QCString trFileList()
- { return "Lista plików"; }
-
- /*! This is put above each page as a link to the list of all verbatim headers */
- QCString trHeaderFiles()
- { return "Pliki nagłówkowe"; }
-
- /*! This is put above each page as a link to all members of compounds. */
- QCString trCompoundMembers()
- {
- if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
- {
- return "Pola danych";
- }
- else
- {
- return "Składowe klas";
- }
- }
-
- /*! This is put above each page as a link to all members of files. */
- QCString trFileMembers()
- {
- if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
- {
- return "Globalne";
- }
- else
- {
- return "Składowe plików";
- }
- }
-
- /*! This is put above each page as a link to all related pages. */
- QCString trRelatedPages()
- { return "Dodatkowe strony"; }
-
- /*! This is put above each page as a link to all examples. */
- QCString trExamples()
- { return "Przykłady"; }
-
- /*! This is put above each page as a link to the search engine. */
- QCString trSearch()
- { return "Szukaj"; }
-
- /*! This is an introduction to the class hierarchy. */
- QCString trClassHierarchyDescription()
- { return "Ta lista dziedziczenia posortowana jest z grubsza, "
- "choć nie całkowicie, alfabetycznie:";
- }
-
- /*! This is an introduction to the list with all files. */
- QCString trFileListDescription(bool extractAll)
- {
- QCString result="Tutaj znajduje siÄ™ lista wszystkich ";
- if (!extractAll) result+="udokumentowanych ";
- result+="plików z ich krótkimi opisami:";
- return result;
- }
-
- /*! This is an introduction to the annotated compound list. */
- QCString trCompoundListDescription()
- {
-
- if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
- {
- return "Tutaj znajdują się struktury danych wraz z ich krótkimi opisami:";
- }
- else
- {
- return "Tutaj znajdujÄ… siÄ™ klasy, struktury, "
- "unie i interfejsy wraz z ich krótkimi opisami:";
- }
- }
-
- /*! This is an introduction to the page with all class members. */
- QCString trCompoundMembersDescription(bool extractAll)
- {
- QCString result="Tutaj znajduje siÄ™ lista wszystkich ";
- if (!extractAll)
- {
- result+="udokumentowanych ";
- }
- if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
- {
- result+="pól struktur i unii";
- }
- else
- {
- result+="składowych";
- }
- result+=" wraz z odnośnikami do ";
- if (!extractAll)
- {
- if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
- {
- result+="dokumentacji struktur/unii dla każdego pola:";
- }
- else
- {
- result+="dokumentacji klas dla każdej składowej:";
- }
- }
- else
- {
- if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
- {
- result+="struktur/unii, do których dane pole należy:";
- }
- else
- {
- result+="klas, do których dana składowa należy:";
- }
- }
- return result;
- }
-
- /*! This is an introduction to the page with all file members. */
- QCString trFileMembersDescription(bool extractAll)
- {
- QCString result="Tutaj znajduje siÄ™ lista wszystkich ";
- if (!extractAll) result+="udokumentowanych ";
- if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
- {
- result+="funkcji, zmiennych, makr, wyliczeń i definicji typów";
- }
- else
- {
- result+="składowych plików";
- }
- result+=" wraz z odnośnikami do ";
- if (extractAll)
- result+="plików, do których one należą:";
- else
- result+="dokumentacji:";
- return result;
- }
-
- /*! This is an introduction to the page with the list of all header files. */
- QCString trHeaderFilesDescription()
- { return "Tutaj znajdują się pliki nagłówkowe tworzące API:"; }
-
- /*! This is an introduction to the page with the list of all examples */
- QCString trExamplesDescription()
- { return "Tutaj znajduje się lista wszystkich przykładów:"; }
-
- /*! This is an introduction to the page with the list of related pages */
- QCString trRelatedPagesDescription()
- { return "Tutaj znajduje siÄ™ lista wszystkich stron dokumentacji:"; }
-
- /*! This is an introduction to the page with the list of class/file groups */
- QCString trModulesDescription()
- { return "Tutaj znajduje siÄ™ lista wszystkich grup:"; }
-
- /*! This sentences is used in the annotated class/file lists if no brief
- * description is given.
- */
- QCString trNoDescriptionAvailable()
- { return "Brak opisu"; }
-
- // index titles (the project name is prepended for these)
-
-
- /*! This is used in HTML as the title of index.html. */
- QCString trDocumentation()
- { return "Dokumentacja"; }
-
- /*! This is used in LaTeX as the title of the chapter with the
- * index of all groups.
- */
- QCString trModuleIndex()
- { return "Indeks grup"; }
-
- /*! This is used in LaTeX as the title of the chapter with the
- * class hierarchy.
- */
- QCString trHierarchicalIndex()
- { return "Indeks hierarchiczny"; }
-
- /*! This is used in LaTeX as the title of the chapter with the
- * annotated compound index.
- */
- QCString trCompoundIndex()
- {
- if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
- {
- return "Indeks struktur danych";
- }
- else
- {
- return "Indeks klas";
- }
- }
-
- /*! This is used in LaTeX as the title of the chapter with the
- * list of all files.
- */
- QCString trFileIndex()
- { return "Indeks plików"; }
-
- /*! This is used in LaTeX as the title of the chapter containing
- * the documentation of all groups.
- */
- QCString trModuleDocumentation()
- { return "Dokumentacja grup"; }
-
- /*! This is used in LaTeX as the title of the chapter containing
- * the documentation of all classes, structs and unions.
- */
- QCString trClassDocumentation()
- {
- if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
- {
- return "Dokumentacja struktur danych";
- }
- else
- {
- return "Dokumentacja klas";
- }
- }
-
- /*! This is used in LaTeX as the title of the chapter containing
- * the documentation of all files.
- */
- QCString trFileDocumentation()
- { return "Dokumentacja plików"; }
-
- /*! This is used in LaTeX as the title of the chapter containing
- * the documentation of all examples.
- */
- QCString trExampleDocumentation()
- { return "Dokumentacja przykładów"; }
-
- /*! This is used in LaTeX as the title of the chapter containing
- * the documentation of all related pages.
- */
- QCString trPageDocumentation()
- { return "Dokumentacja stron"; }
-
- /*! This is used in LaTeX as the title of the document */
- QCString trReferenceManual()
- { return "Podręcznik"; }
-
- /*! This is used in the documentation of a file as a header before the
- * list of defines
- */
- QCString trDefines()
- { return "Definicje"; }
-
- /*! This is used in the documentation of a file as a header before the
- * list of function prototypes
- */
- QCString trFuncProtos()
- { return "Prototypy funkcji"; }
-
- /*! This is used in the documentation of a file as a header before the
- * list of typedefs
- */
- QCString trTypedefs()
- { return "Definicje typów"; }
-
- /*! This is used in the documentation of a file as a header before the
- * list of enumerations
- */
- QCString trEnumerations()
- { return "Wyliczenia"; }
-
- /*! This is used in the documentation of a file as a header before the
- * list of (global) functions
- */
- QCString trFunctions()
- { return "Funkcje"; }
-
- /*! This is used in the documentation of a file as a header before the
- * list of (global) variables
- */
- QCString trVariables()
- { return "Zmienne"; }
-
- /*! This is used in the documentation of a file as a header before the
- * list of (global) variables
- */
- QCString trEnumerationValues()
- { return "Wartości wyliczeń"; }
-
- /*! This is used in the documentation of a file before the list of
- * documentation blocks for defines
- */
- QCString trDefineDocumentation()
- { return "Dokumentacja definicji"; }
-
- /*! This is used in the documentation of a file/namespace before the list
- * of documentation blocks for function prototypes
- */
- QCString trFunctionPrototypeDocumentation()
- { return "Dokumentacja prototypów funkcji"; }
-
- /*! This is used in the documentation of a file/namespace before the list
- * of documentation blocks for typedefs
- */
- QCString trTypedefDocumentation()
- { return "Dokumentacja definicji typów"; }
-
- /*! This is used in the documentation of a file/namespace before the list
- * of documentation blocks for enumeration types
- */
- QCString trEnumerationTypeDocumentation()
- { return "Dokumentacja typów wyliczanych"; }
-
- /*! This is used in the documentation of a file/namespace before the list
- * of documentation blocks for functions
- */
- QCString trFunctionDocumentation()
- { return "Dokumentacja funkcji"; }
-
- /*! This is used in the documentation of a file/namespace before the list
- * of documentation blocks for variables
- */
- QCString trVariableDocumentation()
- { return "Dokumentacja zmiennych"; }
-
- /*! This is used in the documentation of a file/namespace/group before
- * the list of links to documented compounds
- */
- QCString trCompounds()
- {
- if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
- {
- return "Struktury danych";
- }
- else
- {
- return "Komponenty";
- }
- }
-
- /*! This is used in the standard footer of each page and indicates when
- * the page was generated
- */
- QCString trGeneratedAt(const char *date,const char *projName)
- {
- QCString result=(QCString)"Wygenerowano "+date;
- if (projName) result+=(QCString)" dla "+projName;
- result+=(QCString)" programem";
- return result;
- }
- /*! This is part of the sentence used in the standard footer of each page.
- */
- QCString trWrittenBy()
- {
- return "napisanym przez";
- }
-
- /*! this text is put before a class diagram */
- QCString trClassDiagram(const char *clName)
- {
- return (QCString)"Diagram dziedziczenia dla "+clName;
- }
-
- /*! this text is generated when the \\internal command is used. */
- QCString trForInternalUseOnly()
- { return "Tylko do użytku wewnętrznego."; }
-
- /*! this text is generated when the \\reimp command is used. */
- QCString trReimplementedForInternalReasons()
- { return "Reimplementowana z wewnętrzych przyczyn; nie dotyczy API."; }
-
- /*! this text is generated when the \\warning command is used. */
- QCString trWarning()
- { return "Ostrzeżenie"; }
-
- /*! this text is generated when the \\bug command is used. */
- QCString trBugsAndLimitations()
- { return "Błędy i ograniczenia"; }
-
- /*! this text is generated when the \\version command is used. */
- QCString trVersion()
- { return "Wersja"; }
-
- /*! this text is generated when the \\date command is used. */
- QCString trDate()
- { return "Data"; }
-
- /*! this text is generated when the \\return command is used. */
- QCString trReturns()
- { return "Zwraca"; }
-
- /*! this text is generated when the \\sa command is used. */
- QCString trSeeAlso()
- { return "Zobacz również"; }
-
- /*! this text is generated when the \\param command is used. */
- QCString trParameters()
- { return "Parametry"; }
-
- /*! this text is generated when the \\exception command is used. */
- QCString trExceptions()
- { return "WyjÄ…tki"; }
-
- /*! this text is used in the title page of a LaTeX document. */
- QCString trGeneratedBy()
- { return "Wygenerowano przez"; }
-
- // new since 0.49-990307
-
- /*! used as the title of page containing all the index of all namespaces. */
- QCString trNamespaceList()
- { return "Lista przestrzeni nazw"; }
-
- /*! used as an introduction to the namespace list */
- QCString trNamespaceListDescription(bool extractAll)
- {
- QCString result="Tutaj znajdujÄ… siÄ™ wszystkie ";
- if (!extractAll) result+="udokumentowane ";
- result+="przestrzenie nazw wraz z ich krótkimi opisami:";
- return result;
- }
-
- /*! used in the class documentation as a header before the list of all
- * friends of a class
- */
- QCString trFriends()
- { return "Przyjaciele"; }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 0.49-990405
-//////////////////////////////////////////////////////////////////////////
-
- /*! used in the class documentation as a header before the list of all
- * related classes
- */
- QCString trRelatedFunctionDocumentation()
- { return "Dokumentacja przyjaciół i funkcji związanych"; }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 0.49-990425
-//////////////////////////////////////////////////////////////////////////
-
- /*! used as the title of the HTML page of a class/struct/union */
- QCString trCompoundReference(const char *clName,
- ClassDef::CompoundType compType,
- bool isTemplate)
- {
- QCString result="Dokumentacja";
- if (isTemplate) result+=" szablonu";
- switch(compType)
- {
- case ClassDef::Class: result+=" klasy "; break;
- case ClassDef::Struct: result+=" struktury "; break;
- case ClassDef::Union: result+=" unii "; break;
- case ClassDef::Interface: result+=" interfejsu "; break;
- case ClassDef::Protocol: result+=" protokołu "; break;
- case ClassDef::Category: result+=" kategorii "; break;
- case ClassDef::Exception: result+=" wyjÄ…tku "; break;
- }
- result+=(QCString)clName;
- return result;
- }
-
- /*! used as the title of the HTML page of a file */
- QCString trFileReference(const char *fileName)
- {
- QCString result="Dokumentacja pliku ";
- result+=fileName;
- return result;
- }
-
- /*! used as the title of the HTML page of a namespace */
- QCString trNamespaceReference(const char *namespaceName)
- {
- QCString result="Dokumentacja przestrzeni nazw ";
- result+=namespaceName;
- return result;
- }
-
- /* these are for the member sections of a class, struct or union */
- QCString trPublicMembers()
- { return "Metody publiczne"; }
- QCString trPublicSlots()
- { return "Sloty publiczne"; }
- QCString trSignals()
- { return "Sygnały"; }
- QCString trStaticPublicMembers()
- { return "Statyczne metody publiczne"; }
- QCString trProtectedMembers()
- { return "Metody chronione"; }
- QCString trProtectedSlots()
- { return "Sloty chronione"; }
- QCString trStaticProtectedMembers()
- { return "Statyczne metody chronione"; }
- QCString trPrivateMembers()
- { return "Metody prywatne"; }
- QCString trPrivateSlots()
- { return "Sloty prywatne"; }
- QCString trStaticPrivateMembers()
- { return "Statyczne metody prywatne"; }
-
- /*! this function is used to produce a comma-separated list of items.
- * use generateMarker(i) to indicate where item i should be put.
- */
- QCString trWriteList(int numEntries)
- {
- QCString result;
- int i;
- // the inherits list contain `numEntries' classes
- for (i=0;i<numEntries;i++)
- {
- // use generateMarker to generate placeholders for the class links!
- result+=generateMarker(i); // generate marker for entry i in the list
- // (order is left to right)
-
- if (i!=numEntries-1) // not the last entry, so we need a separator
- {
- if (i<numEntries-2) // not the fore last entry
- result+=", ";
- else // the fore last entry
- result+=" i ";
- }
- }
- return result;
- }
-
- /*! used in class documentation to produce a list of base classes,
- * if class diagrams are disabled.
- */
- QCString trInheritsList(int numEntries)
- {
- return "Dziedziczy "+trWriteList(numEntries)+".";
- }
-
- /*! used in class documentation to produce a list of super classes,
- * if class diagrams are disabled.
- */
- QCString trInheritedByList(int numEntries)
- {
- return "Dziedziczona przez "+trWriteList(numEntries)+".";
- }
-
- /*! used in member documentation blocks to produce a list of
- * members that are hidden by this one.
- */
- QCString trReimplementedFromList(int numEntries)
- {
- return "Reimplementowana z "+trWriteList(numEntries)+".";
- }
-
- /*! used in member documentation blocks to produce a list of
- * all member that overwrite the implementation of this member.
- */
- QCString trReimplementedInList(int numEntries)
- {
- return "Reimplementowana w "+trWriteList(numEntries)+".";
- }
-
- /*! This is put above each page as a link to all members of namespaces. */
- QCString trNamespaceMembers()
- { return "Składowe przestrzeni nazw"; }
-
- /*! This is an introduction to the page with all namespace members */
- QCString trNamespaceMemberDescription(bool extractAll)
- {
- QCString result="Tutaj znajduje siÄ™ lista wszystkich ";
- if (!extractAll) result+="udokumentowanych ";
- result+="składowych wraz z odnośnikami do ";
- if (extractAll)
- result+="dokumentacji przestrzeni nazw dla każdej składowej:";
- else
- result+="przestrzeni nazw do których składowe te należą:";
- return result;
- }
- /*! This is used in LaTeX as the title of the chapter with the
- * index of all namespaces.
- */
- QCString trNamespaceIndex()
- { return "Indeks przestrzeni nazw"; }
-
- /*! This is used in LaTeX as the title of the chapter containing
- * the documentation of all namespaces.
- */
- QCString trNamespaceDocumentation()
- { return "Dokumentacja przestrzeni nazw"; }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 0.49-990522
-//////////////////////////////////////////////////////////////////////////
-
- /*! This is used in the documentation before the list of all
- * namespaces in a file.
- */
- QCString trNamespaces()
- { return "Przestrzenie nazw"; }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 0.49-990728
-//////////////////////////////////////////////////////////////////////////
-
- /*! This is put at the bottom of a class documentation page and is
- * followed by a list of files that were used to generate the page.
- */
- QCString trGeneratedFromFiles(ClassDef::CompoundType compType,
- bool single)
- { // here s is one of " Class", " Struct" or " Union"
- // single is true implies a single file
- QCString result=(QCString)"Dokumentacja dla te";
- switch(compType)
- {
- case ClassDef::Class: result+="j klasy"; break;
- case ClassDef::Struct: result+="j struktury"; break;
- case ClassDef::Union: result+="j unii"; break;
- case ClassDef::Interface: result+="go interfejsu"; break;
- case ClassDef::Protocol: result+="go protokołu"; break;
- case ClassDef::Category: result+="j kategorii"; break;
- case ClassDef::Exception: result+="go wyjÄ…tku"; break;
- }
- result+=" została wygenerowana z plik";
- if (single) result+="u:"; else result+="ów:";
- return result;
- }
-
- /*! This is in the (quick) index as a link to the alphabetical compound
- * list.
- */
- QCString trAlphabeticalList()
- { return "Lista alfabetyczna"; }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 0.49-990901
-//////////////////////////////////////////////////////////////////////////
-
- /*! This is used as the heading text for the retval command. */
- QCString trReturnValues()
- { return "Zwracane wartości"; }
-
- /*! This is in the (quick) index as a link to the main page (index.html)
- */
- QCString trMainPage()
- { return "Strona główna"; }
-
- /*! This is used in references to page that are put in the LaTeX
- * documentation. It should be an abbreviation of the word page.
- */
- QCString trPageAbbreviation()
- { return "str."; }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 0.49-991003
-//////////////////////////////////////////////////////////////////////////
-
- QCString trSources()
- {
- return "Źródła";
- }
- QCString trDefinedAtLineInSourceFile()
- {
- return "Definicja w linii @0 pliku @1.";
- }
- QCString trDefinedInSourceFile()
- {
- return "Definicja w pliku @0.";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 0.49-991205
-//////////////////////////////////////////////////////////////////////////
-
- QCString trDeprecated()
- {
- return "Do wycofania";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.0.0
-//////////////////////////////////////////////////////////////////////////
-
- /*! this text is put before a collaboration diagram */
- QCString trCollaborationDiagram(const char *clName)
- {
- return (QCString)"Diagram współpracy dla "+clName+":";
- }
- /*! this text is put before an include dependency graph */
- QCString trInclDepGraph(const char *fName)
- {
- return (QCString)"Wykres zależności załączania dla "+fName+":";
- }
- /*! header that is put before the list of constructor/destructors. */
- QCString trConstructorDocumentation()
- {
- return "Dokumentacja konstruktora i destruktora";
- }
- /*! Used in the file documentation to point to the corresponding sources. */
- QCString trGotoSourceCode()
- {
- return "Idź do kodu źródłowego tego pliku.";
- }
- /*! Used in the file sources to point to the corresponding documentation. */
- QCString trGotoDocumentation()
- {
- return "Idź do dokumentacji tego pliku.";
- }
- /*! Text for the \\pre command */
- QCString trPrecondition()
- {
- return "Warunek wstępny";
- }
- /*! Text for the \\post command */
- QCString trPostcondition()
- {
- return "Warunek końcowy";
- }
- /*! Text for the \\invariant command */
- QCString trInvariant()
- {
- return "Niezmiennik";
- }
- /*! Text shown before a multi-line variable/enum initialization */
- QCString trInitialValue()
- {
- return "Wartość początkowa:";
- }
- /*! Text used the source code in the file index */
- QCString trCode()
- {
- return "kod źródłowy";
- }
- QCString trGraphicalHierarchy()
- {
- return "Graficzna hierarchia klas";
- }
- QCString trGotoGraphicalHierarchy()
- {
- return "Idź do graficznej hierarchi klas";
- }
- QCString trGotoTextualHierarchy()
- {
- return "Idź do tekstowej hierarchi klas";
- }
- QCString trPageIndex()
- {
- return "Indeks stron";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.1.0
-//////////////////////////////////////////////////////////////////////////
-
- QCString trNote()
- {
- return "Nota";
- }
- QCString trPublicTypes()
- {
- return "Typy publiczne";
- }
- QCString trPublicAttribs()
- {
- if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
- {
- return "Pola danych";
- }
- else
- {
- return "Atrybuty publiczne";
- }
- }
- QCString trStaticPublicAttribs()
- {
- return "Statyczne atrybuty publiczne";
- }
- QCString trProtectedTypes()
- {
- return "Typy chronione";
- }
- QCString trProtectedAttribs()
- {
- return "Atrybuty chronione";
- }
- QCString trStaticProtectedAttribs()
- {
- return "Statyczne atrybuty chronione";
- }
- QCString trPrivateTypes()
- {
- return "Typy prywatne";
- }
- QCString trPrivateAttribs()
- {
- return "Atrybuty prywatne";
- }
- QCString trStaticPrivateAttribs()
- {
- return "Statyczne atrybuty prywatne";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.1.3
-//////////////////////////////////////////////////////////////////////////
-
- /*! Used as a marker that is put before a todo item */
- QCString trTodo()
- {
- return "Do zrobienia";
- }
- /*! Used as the header of the todo list */
- QCString trTodoList()
- {
- return "Lista rzeczy do zrobienia";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.1.4
-//////////////////////////////////////////////////////////////////////////
-
- QCString trReferencedBy()
- {
- return "Odwołania w";
- }
- QCString trRemarks()
- {
- return "Spostrzeżenia";
- }
- QCString trAttention()
- {
- return "Uwaga";
- }
- QCString trInclByDepGraph()
- {
- return "Ten wykres pokazuje, które pliki bezpośrednio lub "
- "pośrednio załączają ten plik:";
- }
- QCString trSince()
- {
- return "Od";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.1.5
-//////////////////////////////////////////////////////////////////////////
-
- /*! title of the graph legend page */
- QCString trLegendTitle()
- {
- return "Legenda wykresu";
- }
- /*! page explaining how the dot graph's should be interpreted */
- QCString trLegendDocs()
- {
- return
- "Ta strona wyjaśnia jak interpretować wykresy, które są wygenerowane "
- "przez doxygen.<p>\n"
- "Rozważ następujący przykład:\n"
- "\\code\n"
- "/*! Klasa Niewidzialna z powodu okrojenia */\n"
- "class Niewidzialna { };\n\n"
- "/*! Klasa Okrojona, relacja dziedziczenia jest ukryta */\n"
- "class Okrojona : public Niewidzialna { };\n\n"
- "/* Klasa nie udokumentowana komentarzami doxygen */\n"
- "class Nieudokumentowana { };\n\n"
- "/*! Klasa, która jest dziedziczona publicznie */\n"
- "class PublicznaBaza : public Okrojona { };\n\n"
- "/*! A template class */\n"
- "template<class T> class Templ { };\n\n"
- "/*! Klasa, która jest dziedziczona przy użyciu dziedziczenia chronionego */\n"
- "class ChronionaBaza { };\n\n"
- "/*! Klasa, która jest dziedziczona prywatnie */\n"
- "class PrywatnaBaza { };\n\n"
- "/*! Klasa, która jest użyta przez klasę Dziedziczona */\n"
- "class Uzyta { };\n\n"
- "/*! Superklasa, która dziedziczy kilka innych klas */\n"
- "class Dziedziczona : public PublicznaBaza,\n"
- " protected ChronionaBaza,\n"
- " private PrywatnaBaza,\n"
- " public Nieudokumentowana,\n"
- " public Templ<int>\n"
- "{\n"
- " private:\n"
- " Uzyta *m_usedClass;\n"
- "};\n"
- "\\endcode\n"
- "Rezultat na następującym wykresie:"
- "<p><center><img src=\"graph_legend."+Config_getEnum("DOT_IMAGE_FORMAT")+"\"></center></p>\n"
- "<p>\n"
- "Prostokąty w powyższym wykresie mają następujące znaczenie:\n"
- "</p>\n"
- "<ul>\n"
- "<li>Wypełniony czarny prostokąt reprezentuje strukturę lub klasę dla "
- "której został wygenerowany wykres.</li>\n"
- "<li>ProstokÄ…t z czarnÄ… obwolutÄ… oznacza udokumentowanÄ… strukturÄ™ lub klasÄ™.</li>\n"
- "<li>ProstokÄ…t z szarÄ… obwolutÄ… oznacza nieudokumentowanÄ… strukturÄ™ lub klasÄ™.</li>\n"
- "<li>ProstokÄ…t z czerwonÄ… obwolutÄ… oznacza udokumentowanÄ… strukturÄ™ lub klasÄ™ dla\n"
- "której nie są pokazane wszystkie relacje dziedziczenia/zawierania. Wykres jest "
- "okrojony, jeśli nie mieści się w określonych brzegach.</li>\n"
- "</ul>\n"
- "<p>\n"
- "Strzałki mają następujące znaczenie:\n"
- "<p>\n"
- "<ul>\n"
- "<li>Ciemno niebieska strzałka jest używana do wizualizacji relacji "
- "dziedziczenia publicznego pomiędzy dwiema klasami.</li>\n"
- "<li>Ciemno zielona strzałka jest używana dla dziedziczenia chronionego.</li>\n"
- "<li>Ciemno czerwona strzałka jest używana dla dziedziczenia prywatnego.</li>\n"
- "<li>Fioletowa przerywana strzałka jest używana jeśli klasa jest zawarta "
- "lub użyta przez inną klasę. Strzałka jest podpisana zmienną(ymi) "
- "przez które wskazywana klasa lub struktura jest dostępna. </li>\n"
- "</ul>\n";
- }
- /*! text for the link to the legend page */
- QCString trLegend()
- {
- return "legenda";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.2.0
-//////////////////////////////////////////////////////////////////////////
-
- /*! Used as a marker that is put before a test item */
- QCString trTest()
- {
- return "Test";
- }
- /*! Used as the header of the test list */
- QCString trTestList()
- {
- return "Lista testu";
- }
-//////////////////////////////////////////////////////////////////////////
-// new since 1.2.1
-//////////////////////////////////////////////////////////////////////////
-
- /*! Used as a section header for KDE-2 IDL methods */
- virtual QCString trDCOPMethods()
- {
- return "Metody DCOP";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.2.2
-//////////////////////////////////////////////////////////////////////////
-
- /*! Used as a section header for IDL properties */
- virtual QCString trProperties()
- {
- return "Właściwości";
- }
- /*! Used as a section header for IDL property documentation */
- virtual QCString trPropertyDocumentation()
- {
- return "Dokumentacja właściwości";
- }
-//////////////////////////////////////////////////////////////////////////
-// new since 1.2.4
-//////////////////////////////////////////////////////////////////////////
-
- /*! Used for Java interfaces in the summary section of Java packages */
- virtual QCString trInterfaces()
- {
- return "Interfejsy";
- }
- /*! Used for Java classes in the summary section of Java packages */
- virtual QCString trClasses()
- {
- if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
- {
- return "Struktury Danych";
- }
- else
- {
- return "Klasy";
- }
- }
- /*! Used as the title of a Java package */
- virtual QCString trPackage(const char *name)
- {
- return (QCString)"Pakiet "+name;
- }
- /*! Title of the package index page */
- virtual QCString trPackageList()
- {
- return "Lista Pakietów";
- }
- /*! The description of the package index page */
- virtual QCString trPackageListDescription()
- {
- return "Oto lista pakietów wraz z krótkim opisem (o ile jest dostępny):";
- }
- /*! The link name in the Quick links header for each page */
- virtual QCString trPackages()
- {
- return "Pakiety";
- }
- /*! Used as a chapter title for Latex & RTF output */
- virtual QCString trPackageDocumentation()
- {
- return "Dokumentacja Pakietu";
- }
- /*! Text shown before a multi-line define */
- virtual QCString trDefineValue()
- {
- return "Wartość:";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.2.5
-//////////////////////////////////////////////////////////////////////////
-
- /*! Used as a marker that is put before a \\bug item */
- virtual QCString trBug()
- {
- return "BÅ‚Ä…d";
- }
- /*! Used as the header of the bug list */
- virtual QCString trBugList()
- {
- return "Lista błędów";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.2.6-20010422
-//////////////////////////////////////////////////////////////////////////
-
- /*! Used as ansicpg for RTF file */
- virtual QCString trRTFansicp()
- {
- return "1250";
- }
-
- /*! Used as ansicpg for RTF fcharset */
- virtual QCString trRTFCharSet()
- {
- return "238";
- }
-
- /*! Used as header RTF general index */
- virtual QCString trRTFGeneralIndex()
- {
- return "Indeks";
- }
-
- /*! This is used for translation of the word that will possibly
- * be followed by a single name or by a list of names
- * of the category.
- */
- virtual QCString trClass(bool first_capital, bool singular)
- {
- QCString result((first_capital ? "Klas" : "klas"));
- result+=(singular ? "a" : "y");
- return result;
- }
-
- /*! This is used for translation of the word that will possibly
- * be followed by a single name or by a list of names
- * of the category.
- */
- virtual QCString trFile(bool first_capital, bool singular)
- {
- QCString result((first_capital ? "Plik" : "plik"));
- if (!singular) result+="i";
- return result;
- }
-
- /*! This is used for translation of the word that will possibly
- * be followed by a single name or by a list of names
- * of the category.
- */
- virtual QCString trNamespace(bool first_capital, bool singular)
- {
- QCString result((first_capital ? "Przestrze" : "przestrze"));
- result+=(singular ? "Å„" : "nie");
- result+=" nazw";
- return result;
- }
-
- /*! This is used for translation of the word that will possibly
- * be followed by a single name or by a list of names
- * of the category.
- */
- virtual QCString trGroup(bool first_capital, bool singular)
- {
- QCString result((first_capital ? "Grupa" : "grupa"));
- result+=(singular ? "a" : "y");
- return result;
- }
-
- /*! This is used for translation of the word that will possibly
- * be followed by a single name or by a list of names
- * of the category.
- */
- virtual QCString trPage(bool first_capital, bool singular)
- {
- QCString result((first_capital ? "Stron" : "stron"));
- result+=(singular ? "a" : "y");
- return result;
- }
-
- /*! This is used for translation of the word that will possibly
- * be followed by a single name or by a list of names
- * of the category.
- */
- virtual QCString trMember(bool first_capital, bool singular)
- {
- QCString result((first_capital ? "Składow" : "składow"));
- result+=(singular ? "a" : "e");
- return result;
- }
-
- /*! This is used for translation of the word that will possibly
- * be followed by a single name or by a list of names
- * of the category.
- */
- virtual QCString trField(bool first_capital, bool singular)
- {
- QCString result((first_capital ? "Pol" : "pol"));
- result+=(singular ? "e" : "a");
- return result;
- }
-
- /*! This is used for translation of the word that will possibly
- * be followed by a single name or by a list of names
- * of the category.
- */
- virtual QCString trGlobal(bool first_capital, bool singular)
- {
- QCString result((first_capital ? "Global" : "global"));
- result+=(singular ? "ny" : "ne");
- return result;
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.2.7
-//////////////////////////////////////////////////////////////////////////
-
- /*! This text is generated when the \\author command is used and
- * for the author section in man pages. */
- virtual QCString trAuthor(bool first_capital, bool singular)
- {
- QCString result((first_capital ? "Auto" : "auto"));
- result += (singular) ? "r" : "rzy";
- return result;
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.2.11
-//////////////////////////////////////////////////////////////////////////
-
- /*! This text is put before the list of members referenced by a member
- */
- virtual QCString trReferences()
- {
- return "Odwołuje się do";
- }
-
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.2.13
-//////////////////////////////////////////////////////////////////////////
-
-
- virtual QCString trImplementedFromList(int numEntries)
- {
- return "Implementuje "+trWriteList(numEntries)+".";
- }
-
- virtual QCString trImplementedInList(int numEntries)
- {
- return "Implementowany w "+trWriteList(numEntries)+".";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.2.16
-//////////////////////////////////////////////////////////////////////////
-
- /*! used in RTF documentation as a heading for the Table
- * of Contents.
- */
- virtual QCString trRTFTableOfContents()
- {
- return "Spis treści";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.2.17
-//////////////////////////////////////////////////////////////////////////
-
- /*! Used as the header of the list of item that have been
- * flagged deprecated
- */
- virtual QCString trDeprecatedList()
- {
- return "Lista elementów do wycofania";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.2.18
-//////////////////////////////////////////////////////////////////////////
-
- /*! Used as a header for declaration section of the events found in
- * a C# program
- */
- virtual QCString trEvents()
- {
- return "Zdarzenia";
- }
- /*! Header used for the documentation section of a class' events. */
- virtual QCString trEventDocumentation()
- {
- return "Dokumentacja zdarzeń";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.3
-//////////////////////////////////////////////////////////////////////////
-
- /*! Used as a heading for a list of Java class types with package scope.
- */
- virtual QCString trPackageTypes()
- {
- return "Typy pakietu";
- }
- /*! Used as a heading for a list of Java class functions with package
- * scope.
- */
- virtual QCString trPackageMembers()
- {
- return "Funkcje pakietu";
- }
- /*! Used as a heading for a list of static Java class functions with
- * package scope.
- */
- virtual QCString trStaticPackageMembers()
- {
- return "Statyczne funkcje pakietu";
- }
- /*! Used as a heading for a list of Java class variables with package
- * scope.
- */
- virtual QCString trPackageAttribs()
- {
- return "Atrybuty pakietu";
- }
- /*! Used as a heading for a list of static Java class variables with
- * package scope.
- */
- virtual QCString trStaticPackageAttribs()
- {
- return "Statyczne atrybuty pakietu";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.3.1
-//////////////////////////////////////////////////////////////////////////
-
- /*! Used in the quick index of a class/file/namespace member list page
- * to link to the unfiltered list of all members.
- */
- virtual QCString trAll()
- {
- return "All";
- }
- /*! Put in front of the call graph for a function. */
- virtual QCString trCallGraph()
- {
- return "Oto graf wywołań dla tej funkcji:";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.3.3
-//////////////////////////////////////////////////////////////////////////
-
- /*! When the search engine is enabled this text is put in the header
- * of each page before the field where one can enter the text to search
- * for.
- */
- virtual QCString trSearchForIndex()
- {
- return "Szukaj";
- }
- /*! This string is used as the title for the page listing the search
- * results.
- */
- virtual QCString trSearchResultsTitle()
- {
- return "Wyniki szukania";
- }
- /*! This string is put just before listing the search results. The
- * text can be different depending on the number of documents found.
- * Inside the text you can put the special marker $num to insert
- * the number representing the actual number of search results.
- * The @a numDocuments parameter can be either 0, 1 or 2, where the
- * value 2 represents 2 or more matches. HTML markup is allowed inside
- * the returned string.
- */
- virtual QCString trSearchResults(int numDocuments)
- {
- if (numDocuments==0)
- {
- return "Niestety żaden dokument nie pasuje do twojego zapytania.";
- }
- else if (numDocuments==1)
- {
- return "Znaleziono <b>1</b> dokument pasujÄ…cy do twojego zapytania.";
- }
- int count = numDocuments % 10;
- if ((count>=2) && (count<=4))
- {
- return "Znaleziono <b>$num</b> dokumenty pasujÄ…ce do twojego zapytania. "
- "Najlepiej pasujące dokumenty wyświetlane są na początku listy.";
- }
- else
- {
- return "Znaleziono <b>$num</b> dokumentów pasujących do twojego zapytania. "
- "Najlepiej pasujące dokumenty wyświetlane są na początku listy.";
- }
- }
- /*! This string is put before the list of matched words, for each search
- * result. What follows is the list of words that matched the query.
- */
- virtual QCString trSearchMatches()
- {
- return "Pasujące słowa:";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.3.8
-//////////////////////////////////////////////////////////////////////////
-
- /*! This is used in HTML as the title of page with source code for file filename
- */
- virtual QCString trSourceFile(QCString& filename)
- {
- return "Plik źródłowy " + filename;
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.3.9
-//////////////////////////////////////////////////////////////////////////
-
- /*! This is used as the name of the chapter containing the directory
- * hierarchy.
- */
- virtual QCString trDirIndex()
- { return "Struktura katalogów"; }
-
- /*! This is used as the name of the chapter containing the documentation
- * of the directories.
- */
- virtual QCString trDirDocumentation()
- { return "Dokumentacja katalogów"; }
-
- /*! This is used as the title of the directory index and also in the
- * Quick links of a HTML page, to link to the directory hierarchy.
- */
- virtual QCString trDirectories()
- { return "Katalogi"; }
-
- /*! This returns a sentences that introduces the directory hierarchy.
- * and the fact that it is sorted alphabetically per level
- */
- virtual QCString trDirDescription()
- {
- return "Ta struktura katalogów jest posortowana jest z grubsza, "
- "choć nie całkowicie, alfabetycznie:";
- }
-
- /*! This returns the title of a directory page. The name of the
- * directory is passed via \a dirName.
- */
- virtual QCString trDirReference(const char *dirName)
- { QCString result="Dokumentacja katalogu "; result+=dirName; return result; }
-
- /*! This returns the word directory with or without starting capital
- * (\a first_capital) and in sigular or plural form (\a singular).
- */
- virtual QCString trDir(bool first_capital, bool singular)
- {
- QCString result((first_capital ? "Katalog" : "katalog"));
- if (! singular) result+="i";
- return result;
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.4.1
-//////////////////////////////////////////////////////////////////////////
-
- /*! This text is added to the documentation when the \\overload command
- * is used for a overloaded function.
- */
- virtual QCString trOverloadText()
- {
- return "To jest metoda przeciążona, udostępniona dla wygody. "
- "Różni się od powyższej metody tylko zestawem akceptowanych argumentów.";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.4.6
-//////////////////////////////////////////////////////////////////////////
-
- /*! This is used to introduce a caller (or called-by) graph */
- virtual QCString trCallerGraph()
- {
- return "Oto graf wywoływań tej funkcji:";
- }
-
- /*! This is used in the documentation of a file/namespace before the list
- * of documentation blocks for enumeration values
- */
- virtual QCString trEnumerationValueDocumentation()
- { return "Dokumentacja wyliczeń"; } //TODO check if it is correct translation
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.5.4 (mainly for Fortran)
-//////////////////////////////////////////////////////////////////////////
-
- /*! header that is put before the list of member subprograms (Fortran). */
- virtual QCString trMemberFunctionDocumentationFortran()
- { return "Dokumentacja składowej funkcji/podprogramu"; }
-
- /*! This is put above each page as a link to the list of annotated data types (Fortran). */
- virtual QCString trCompoundListFortran()
- { return "Lista typów danych"; }
-
- /*! This is put above each page as a link to all members of compounds (Fortran). */
- virtual QCString trCompoundMembersFortran()
- { return "Pola danych"; }
-
- /*! This is an introduction to the annotated compound list (Fortran). */
- virtual QCString trCompoundListDescriptionFortran()
- { return "Tutaj znajdują się typy danych z ich krótkimi opisami:"; }
-
- /*! This is an introduction to the page with all data types (Fortran). */
- virtual QCString trCompoundMembersDescriptionFortran(bool extractAll)
- {
- QCString result="Tutaj znajduje siÄ™ lista wszystkich ";
- if (!extractAll)
- {
- result+="udokumentowanych ";
- }
- result+="składowych typów danych";
- result+=" wraz z odnośnikami do ";
- if (!extractAll)
- {
- result+="dokumentacji struktury danych dla każdej składowej";
- }
- else
- {
- result+="typów danych, do których dana składowa należy:";
- }
- return result;
- }
-
- /*! This is used in LaTeX as the title of the chapter with the
- * annotated compound index (Fortran).
- */
- virtual QCString trCompoundIndexFortran()
- { return "Indeks typów danych"; }
-
- /*! This is used in LaTeX as the title of the chapter containing
- * the documentation of all data types (Fortran).
- */
- virtual QCString trTypeDocumentation()
- { return "Dokumentacja typów danych"; }
-
- /*! This is used in the documentation of a file as a header before the
- * list of (global) subprograms (Fortran).
- */
- virtual QCString trSubprograms()
- { return "Funkcje/podprogramy"; }
-
- /*! This is used in the documentation of a file/namespace before the list
- * of documentation blocks for subprograms (Fortran)
- */
- virtual QCString trSubprogramDocumentation()
- { return "Dokumentacja funkcji/podprogramu"; }
-
- /*! This is used in the documentation of a file/namespace/group before
- * the list of links to documented compounds (Fortran)
- */
- virtual QCString trDataTypes()
- { return "Typy danych"; }
-
- /*! used as the title of page containing all the index of all modules (Fortran). */
- virtual QCString trModulesList()
- { return "Lista modułów"; }
-
- /*! used as an introduction to the modules list (Fortran) */
- virtual QCString trModulesListDescription(bool extractAll)
- {
- QCString result="Tutaj znajduje siÄ™ lista wszystkich ";
- if (!extractAll) result+="udokumentowanych ";
- result+="modułów z ich krótkimi opisami:";
- return result;
- }
-
- /*! used as the title of the HTML page of a module/type (Fortran) */
- virtual QCString trCompoundReferenceFortran(const char *clName,
- ClassDef::CompoundType compType,
- bool isTemplate)
- {
- QCString result="Dokumentacja";
- if (isTemplate) result+=" szablonu";
- switch(compType)
- {
- case ClassDef::Class: result+=" modułu "; break;
- case ClassDef::Struct: result+=" typu "; break;
- case ClassDef::Union: result+=" unii "; break;
- case ClassDef::Interface: result+=" interfejsu "; break;
- case ClassDef::Protocol: result+=" protokołu "; break;
- case ClassDef::Category: result+=" kategorii "; break;
- case ClassDef::Exception: result+=" wyjÄ…tku "; break;
- }
- result+=(QCString)clName;
- return result;
- }
- /*! used as the title of the HTML page of a module (Fortran) */
- virtual QCString trModuleReference(const char *namespaceName)
- {
- QCString result="Dokumentacja modułu ";
- result+=namespaceName;
- return result;
- }
-
- /*! This is put above each page as a link to all members of modules. (Fortran) */
- virtual QCString trModulesMembers()
- { return "Składowe modułu"; }
-
- /*! This is an introduction to the page with all modules members (Fortran) */
- virtual QCString trModulesMemberDescription(bool extractAll)
- {
- QCString result="Tutaj znajduje siÄ™ lista wszystkich ";
- if (!extractAll) result+="udokumentowanych ";
- result+="składowych modułów wraz z odnośnikami do ";
- if (extractAll)
- {
- result+="dokumentacji modułu dla każdej składowej:";
- }
- else
- {
- result+="modułów do których składowe te należą:";
- }
- return result;
- }
-
- /*! This is used in LaTeX as the title of the chapter with the
- * index of all modules (Fortran).
- */
- virtual QCString trModulesIndex()
- { return "Indeks modułu"; }
-
- /*! This is used for translation of the word that will possibly
- * be followed by a single name or by a list of names
- * of the category.
- */
- virtual QCString trModule(bool first_capital, bool singular)
- {
- QCString result((first_capital ? "Moduł" : "moduł"));
- if (!singular) result+="y";
- return result;
- }
- /*! This is put at the bottom of a module documentation page and is
- * followed by a list of files that were used to generate the page.
- */
- virtual QCString trGeneratedFromFilesFortran(ClassDef::CompoundType compType,
- bool single)
- {
- // single is true implies a single file
- QCString result=(QCString)"Dokumentacja dla te";
- switch(compType)
- {
- case ClassDef::Class: result+="go modułu"; break;
- case ClassDef::Struct: result+="go typu"; break;
- case ClassDef::Union: result+="j unii"; break;
- case ClassDef::Interface: result+="go interfejsu"; break;
- case ClassDef::Protocol: result+="go protokołu"; break;
- case ClassDef::Category: result+="j kategorii"; break;
- case ClassDef::Exception: result+="go wyjÄ…tku"; break;
- }
- result+=" została wygenerowana z plik";
- if (single) result+="u:"; else result+="ów:";
- return result;
- }
- /*! This is used for translation of the word that will possibly
- * be followed by a single name or by a list of names
- * of the category.
- */
- virtual QCString trType(bool first_capital, bool singular)
- {
- QCString result((first_capital ? "Typ" : "typ"));
- if (!singular) result+="y";
- return result;
- }
- /*! This is used for translation of the word that will possibly
- * be followed by a single name or by a list of names
- * of the category.
- */
- virtual QCString trSubprogram(bool first_capital, bool singular)
- {
- QCString result((first_capital ? "Podprogram" : "podprogram"));
- if (!singular) result+="y";
- return result;
- }
-
- /*! C# Type Constraint list */
- virtual QCString trTypeConstraints()
- {
- return "Więzy typów"; //TODO check if it is correct translation
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.6.0 (mainly for the new search engine)
-//////////////////////////////////////////////////////////////////////////
-
- /*! directory relation for \a name */
- virtual QCString trDirRelation(const char *name)
- {
- return "Relcja "+ QCString(name);
- }
-
- /*! Loading message shown when loading search results */
- virtual QCString trLoading()
- {
- return "Wczytywanie...";
- }
-
- /*! Label used for search results in the global namespace */
- virtual QCString trGlobalNamespace()
- {
- return "Globalna przestrzeń nazw";
- }
-
- /*! Message shown while searching */
- virtual QCString trSearching()
- {
- return "Szukanie...";
- }
-
- /*! Text shown when no search results are found */
- virtual QCString trNoMatches()
- {
- return "Brak dopasowań";
- }
-
-};
-
-#endif
diff --git a/trunk/src/translator_pt.h b/trunk/src/translator_pt.h
deleted file mode 100644
index fa60916..0000000
--- a/trunk/src/translator_pt.h
+++ /dev/null
@@ -1,1891 +0,0 @@
-/******************************************************************************
- * Copyright (C) 1997-2012 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.
- *
- * Portuguese translation version 20110428
- * Maintainer (from 04/28/2011):
- * Fabio "FJTC" Jun Takada Chino <jun-chino at uol.com.br>
- * Maintainer (until 04/28/2011):
- * Rui Godinho Lopes <rui at ruilopes.com>
- *
- * Notes about this translation:
- * Since I'm Brazilian, this translation may be odd or even incorect for
- * Portuguese (from Portugal) speakers. If you find any errors, feel free
- * to contact me.
- *
- * VERSION HISTORY
- * ---------------
- * History:
- * 20110628:
- * - Updated to 1.7.5;
- * - All obsolete methods have been removed;
- * 20110428
- * - Updated to doxygen 1.6.3 using the Brazilian Portuguese as the base.
- * Requires revision by a Portuguese (Portugal native speaker);
- * 007 09 june 2003
- * ! Updated for doxygen v1.3.1
- * 006 30 july 2002
- * ! Updated for doxygen v1.2.17
- * 005 10 july 2002
- * ! Updated for doxygen v1.2.16
- * 004 03 march 2002
- * ! Updated for doxygen v1.2.14
- * 003 23 november 2001
- * - Removed some obsolete methods (latexBabelPackage, trAuthor, trAuthors and trFiles)
- * 002 19 november 2001
- * ! Updated for doxygen v1.2.12
- * 001 20 july 2001
- * ! Updated for doxygen v1.2.8.1
- * 000 ?
- * + Initial translation for doxygen v1.1.5
- */
-
-#ifndef TRANSLATOR_PT_H
-#define TRANSLATOR_PT_H
-
-
-class TranslatorPortuguese : public Translator
-{
- public:
-
- // --- Language control methods -------------------
-
- /*! Used for identification of the language. The identification
- * should not be translated. It should be replaced by the name
- * of the language in English using lower-case characters only
- * (e.g. "czech", "japanese", "russian", etc.). It should be equal to
- * the identification used in language.cpp.
- */
- QCString idLanguage()
- { return "portuguese"; }
-
- /*! Used to get the LaTeX command(s) for the language support.
- * This method should return string with commands that switch
- * LaTeX to the desired language. For example
- * <pre>"\\usepackage[german]{babel}\n"
- * </pre>
- * or
- * <pre>"\\usepackage{polski}\n"
- * "\\usepackage[latin2]{inputenc}\n"
- * "\\usepackage[T1]{fontenc}\n"
- * </pre>
- *
- * The English LaTeX does not use such commands. Because of this
- * the empty string is returned in this implementation.
- */
- virtual QCString latexLanguageSupportCommand()
- { return "Portuguese"; }
-
- /*! return the language charset. This will be used for the HTML output */
- virtual QCString idLanguageCharset()
- { return "utf-8"; }
-
- // --- Language translation methods -------------------
-
- /*! used in the compound documentation before a list of related functions. */
- QCString trRelatedFunctions()
- { return "Funções associadas"; }
-
- /*! subscript for the related functions. */
- QCString trRelatedSubscript()
- { return "(Note que não são funções membro)"; }
-
- /*! header that is put before the detailed description of files, classes and namespaces. */
- QCString trDetailedDescription()
- { return "Descrição detalhada"; }
-
- /*! header that is put before the list of typedefs. */
- QCString trMemberTypedefDocumentation()
- { return "Documentação das definições de tipo"; }
-
- /*! header that is put before the list of enumerations. */
- QCString trMemberEnumerationDocumentation()
- { return "Documentação das enumerações"; }
-
- /*! header that is put before the list of member functions. */
- QCString trMemberFunctionDocumentation()
- { return "Documentação dos métodos"; }
-
- /*! header that is put before the list of member attributes. */
- QCString trMemberDataDocumentation()
- {
- if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
- {
- return "Documentação dos campos e atributos";
- }
- else
- {
- return "Documentação dos dados membro";
- }
- }
-
- /*! this is the text of a link put after brief descriptions. */
- QCString trMore()
- { return "Mais..."; }
-
- /*! put in the class documentation */
- QCString trListOfAllMembers()
- { return "Mostrar lista completa dos membros"; }
-
- /*! used as the title of the "list of all members" page of a class */
- QCString trMemberList()
- { return "Lista dos membros"; }
-
- /*! this is the first part of a sentence that is followed by a class name */
- QCString trThisIsTheListOfAllMembers()
- { return "Lista completa de todos os membros de "; }
-
- /*! this is the remainder of the sentence after the class name */
- QCString trIncludingInheritedMembers()
- { return ", incluindo todos os membros herdados."; }
-
- /*! this is put at the author sections at the bottom of man pages.
- * parameter s is name of the project name.
- */
- QCString trGeneratedAutomatically(const char *s)
- { QCString result="Gerado automaticamente por Doxygen";
- if (s) result+=(QCString)" para "+s;
- result+=" a partir do código fonte.";
- return result;
- }
-
- /*! put after an enum name in the list of all members */
- QCString trEnumName()
- { return "enumeração"; }
-
- /*! put after an enum value in the list of all members */
- QCString trEnumValue()
- { return "valor enumerado"; }
-
- /*! put after an undocumented member in the list of all members */
- QCString trDefinedIn()
- { return "definido em"; }
-
- // quick reference sections
-
- /*! This is put above each page as a link to the list of all groups of
- * compounds or files (see the \\group command).
- */
- QCString trModules()
- { return "Módulos"; }
-
- /*! This is put above each page as a link to the class hierarchy */
- QCString trClassHierarchy()
- { return "Hierarquia de classes"; }
-
- /*! This is put above each page as a link to the list of annotated classes */
- QCString trCompoundList()
- {
- if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
- {
- return "Estruturas de dados";
- }
- else
- {
- return "Lista de componentes";
- }
- }
-
- /*! This is put above each page as a link to the list of documented files */
- QCString trFileList()
- { return "Lista de ficheiros"; }
-
- /*! This is put above each page as a link to all members of compounds. */
- QCString trCompoundMembers()
- {
- if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
- {
- return "Campos de dados";
- }
- else
- {
- return "Componentes membro";
- }
- }
-
- /*! This is put above each page as a link to all members of files. */
- QCString trFileMembers()
- {
- if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
- {
- return "Globais";
- }
- else
- {
- return "Ficheiros membro";
- }
- }
-
- /*! This is put above each page as a link to all related pages. */
- QCString trRelatedPages()
- { return "Páginas relacionadas"; }
-
- /*! This is put above each page as a link to all examples. */
- QCString trExamples()
- { return "Exemplos"; }
-
- /*! This is put above each page as a link to the search engine. */
- QCString trSearch()
- { return "Localizar"; }
-
- /*! This is an introduction to the class hierarchy. */
- QCString trClassHierarchyDescription()
- { return "Esta lista de heranças está organizada, dentro do possível, por ordem alfabética:"; }
-
- /*! This is an introduction to the list with all files. */
- QCString trFileListDescription(bool extractAll)
- {
- QCString result="Lista de todos os ficheiros ";
- if (!extractAll) result+="documentados ";
- result+="com uma breve descrição:";
- return result;
- }
-
- /*! This is an introduction to the annotated compound list. */
- QCString trCompoundListDescription()
- {
- if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
- {
- return "Lista das estruturas de dados com uma breve descrição:";
- }
- else
- {
- return "Lista de classes, estruturas, uniões e interfaces com uma breve descrição:";
- }
- }
-
- /*! This is an introduction to the page with all class members. */
- QCString trCompoundMembersDescription(bool extractAll)
- {
- QCString result="Lista de todas as";
- if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
- {
- result+=" estruturas e campos de uniões";
- }
- else
- {
- result+=" classes membro";
- }
- if (!extractAll)
- {
- result+=" documentadas";
- }
- result+=" com referência para ";
- if (!extractAll)
- {
- if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
- {
- result+="a respectiva documentação:";
- }
- else
- {
- result+="a documentação de cada membro:";
- }
- }
- else
- {
- if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
- {
- result+="as estruturas/uniões a que pertencem:";
- }
- else
- {
- result+="as classes a que pertencem:";
- }
- }
- return result;
- }
-
- /*! This is an introduction to the page with all file members. */
- QCString trFileMembersDescription(bool extractAll)
- {
- QCString result="Lista de ";
- if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
- {
- result+="todas as funções, variáveis, definições, enumerações e definições de tipo ";
- if (!extractAll) result+="documentadas ";
- }
- else
- {
- result+="todos os ficheiros membro ";
- if (!extractAll) result+="documentados ";
- }
- result+="com referência para ";
- if (extractAll)
- result+="o ficheiro a que pertecem:";
- else
- result+="a respectiva documentação:";
- return result;
- }
-
- /*! This is an introduction to the page with the list of all examples */
- QCString trExamplesDescription()
- { return "Lista de todos os exemplos:"; }
-
- /*! This is an introduction to the page with the list of related pages */
- QCString trRelatedPagesDescription()
- { return "Lista de documentação relacionada:"; }
-
- /*! This is an introduction to the page with the list of class/file groups */
- QCString trModulesDescription()
- { return "Lista de todos os módulos:"; }
-
- // index titles (the project name is prepended for these)
-
-
- /*! This is used in HTML as the title of index.html. */
- QCString trDocumentation()
- { return "Documentação"; }
-
- /*! This is used in LaTeX as the title of the chapter with the
- * index of all groups.
- */
- QCString trModuleIndex()
- { return "Ãndice dos módulos"; }
-
- /*! This is used in LaTeX as the title of the chapter with the
- * class hierarchy.
- */
- QCString trHierarchicalIndex()
- { return "Ãndice da hierarquia"; }
-
- /*! This is used in LaTeX as the title of the chapter with the
- * annotated compound index.
- */
- QCString trCompoundIndex()
- {
- if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
- {
- return "Ãndice das estruturas de dados";
- }
- else
- {
- return "Ãndice dos componentes";
- }
- }
-
- /*! This is used in LaTeX as the title of the chapter with the
- * list of all files.
- */
- QCString trFileIndex()
- { return "Ãndice dos ficheiros"; }
-
- /*! This is used in LaTeX as the title of the chapter containing
- * the documentation of all groups.
- */
- QCString trModuleDocumentation()
- { return "Documentação do módulo"; }
-
- /*! This is used in LaTeX as the title of the chapter containing
- * the documentation of all classes, structs and unions.
- */
- QCString trClassDocumentation()
- { return "Documentação da classe"; }
-
- /*! This is used in LaTeX as the title of the chapter containing
- * the documentation of all files.
- */
- QCString trFileDocumentation()
- { return "Documentação do ficheiro"; }
-
- /*! This is used in LaTeX as the title of the chapter containing
- * the documentation of all examples.
- */
- QCString trExampleDocumentation()
- { return "Documentação do exemplo"; }
-
- /*! This is used in LaTeX as the title of the chapter containing
- * the documentation of all related pages.
- */
- QCString trPageDocumentation()
- { return "Documentação da página"; }
-
- /*! This is used in LaTeX as the title of the document */
- QCString trReferenceManual()
- { return "Manual de referência"; }
-
- /*! This is used in the documentation of a file as a header before the
- * list of defines
- */
- QCString trDefines()
- { return "Macros"; }
-
- /*! This is used in the documentation of a file as a header before the
- * list of function prototypes
- */
- QCString trFuncProtos()
- { return "Protótipos de funções"; }
-
- /*! This is used in the documentation of a file as a header before the
- * list of typedefs
- */
- QCString trTypedefs()
- { return "Definições de tipos"; }
-
- /*! This is used in the documentation of a file as a header before the
- * list of enumerations
- */
- QCString trEnumerations()
- { return "Enumerações"; }
-
- /*! This is used in the documentation of a file as a header before the
- * list of (global) functions
- */
- QCString trFunctions()
- { return "Funções"; }
-
- /*! This is used in the documentation of a file as a header before the
- * list of (global) variables
- */
- QCString trVariables()
- { return "Variáveis"; }
-
- /*! This is used in the documentation of a file as a header before the
- * list of (global) variables
- */
- QCString trEnumerationValues()
- { return "Valores da enumeração"; }
-
- /*! This is used in the documentation of a file before the list of
- * documentation blocks for defines
- */
- QCString trDefineDocumentation()
- { return "Documentação das macros"; }
-
- /*! This is used in the documentation of a file/namespace before the list
- * of documentation blocks for function prototypes
- */
- QCString trFunctionPrototypeDocumentation()
- { return "Documentação dos protótipos de funções"; }
-
- /*! This is used in the documentation of a file/namespace before the list
- * of documentation blocks for typedefs
- */
- QCString trTypedefDocumentation()
- { return "Documentação dos tipos"; }
-
- /*! This is used in the documentation of a file/namespace before the list
- * of documentation blocks for enumeration types
- */
- QCString trEnumerationTypeDocumentation()
- { return "Documentação dos valores da enumeração"; }
-
- /*! This is used in the documentation of a file/namespace before the list
- * of documentation blocks for functions
- */
- QCString trFunctionDocumentation()
- { return "Documentação das funções"; }
-
- /*! This is used in the documentation of a file/namespace before the list
- * of documentation blocks for variables
- */
- QCString trVariableDocumentation()
- { return "Documentação das variáveis"; }
-
- /*! This is used in the documentation of a file/namespace/group before
- * the list of links to documented compounds
- */
- QCString trCompounds()
- {
- if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
- {
- return "Estruturas de Dados";
- }
- else
- {
- return "Componentes";
- }
- }
-
- /*! This is used in the standard footer of each page and indicates when
- * the page was generated
- */
- QCString trGeneratedAt(const char *date,const char *projName)
- {
- QCString result=(QCString)"Gerado em "+date;
- if (projName) result+=(QCString)" para "+projName;
- result+=(QCString)" por";
- return result;
- }
- /*! This is part of the sentence used in the standard footer of each page.
- */
- QCString trWrittenBy()
- {
- return "escrito por";
- }
-
- /*! this text is put before a class diagram */
- QCString trClassDiagram(const char *clName)
- {
- return (QCString)"Diagrama de heranças da classe "+clName;
- }
-
- /*! this text is generated when the \\internal command is used. */
- QCString trForInternalUseOnly()
- { return "Apenas para uso interno."; }
-
- /*! this text is generated when the \\warning command is used. */
- QCString trWarning()
- { return "Aviso"; }
-
- /*! this text is generated when the \\version command is used. */
- QCString trVersion()
- { return "Versão"; }
-
- /*! this text is generated when the \\date command is used. */
- QCString trDate()
- { return "Data"; }
-
- /*! this text is generated when the \\return command is used. */
- QCString trReturns()
- { return "Retorna"; }
-
- /*! this text is generated when the \\sa command is used. */
- QCString trSeeAlso()
- { return "Veja também"; }
-
- /*! this text is generated when the \\param command is used. */
- QCString trParameters()
- { return "Parâmetros"; }
-
- /*! this text is generated when the \\exception command is used. */
- QCString trExceptions()
- { return "Excepções"; }
-
- /*! this text is used in the title page of a LaTeX document. */
- QCString trGeneratedBy()
- { return "Gerado por"; }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 0.49-990307
-//////////////////////////////////////////////////////////////////////////
-
- /*! used as the title of page containing all the index of all namespaces. */
- virtual QCString trNamespaceList()
- { return "Lista de namespaces"; }
-
- /*! used as an introduction to the namespace list */
- virtual QCString trNamespaceListDescription(bool extractAll)
- {
- QCString result="Lista ";
- if (!extractAll) result+="de toda a documentação ";
- result+="dos namespaces com uma breve descrição:";
- return result;
- }
-
- /*! used in the class documentation as a header before the list of all
- * friends of a class
- */
- virtual QCString trFriends()
- { return "Amigos"; }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 0.49-990405
-//////////////////////////////////////////////////////////////////////////
-
- /*! used in the class documentation as a header before the list of all
- * related classes
- */
- virtual QCString trRelatedFunctionDocumentation()
- { return "Documentação das classes amigas e funções relacionadas"; }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 0.49-990425
-//////////////////////////////////////////////////////////////////////////
-
- /*! used as the title of the HTML page of a class/struct/union */
- virtual QCString trCompoundReference(const char *clName,
- ClassDef::CompoundType compType,
- bool isTemplate)
- {
- QCString result="Referência ";
- switch(compType)
- {
- case ClassDef::Class: result+="à classe "; break;
- case ClassDef::Struct: result+="à estrutura "; break;
- case ClassDef::Union: result+="à união "; break;
- case ClassDef::Interface: result+="ao interface "; break;
- case ClassDef::Protocol: result+="ao protocolo "; break;
- case ClassDef::Category: result+="à categoria "; break;
- case ClassDef::Exception: result+="à excepção "; break;
- }
- if (isTemplate) result+="Template ";
- result+=(QCString)clName;
- return result;
- }
-
- /*! used as the title of the HTML page of a file */
- virtual QCString trFileReference(const char *fileName)
- {
- QCString result= "Referência ao ficheiro ";
- result += fileName;
- return result;
- }
-
- /*! used as the title of the HTML page of a namespace */
- virtual QCString trNamespaceReference(const char *namespaceName)
- {
- QCString result= "Referência ao namespace ";
- result += namespaceName;
- return result;
- }
-
- /* these are for the member sections of a class, struct or union */
- virtual QCString trPublicMembers()
- { return "Membros públicos"; }
- virtual QCString trPublicSlots()
- { return "Slots públicos"; }
- virtual QCString trSignals()
- { return "Sinais"; }
- virtual QCString trStaticPublicMembers()
- { return "Membros públicos estáticos"; }
- virtual QCString trProtectedMembers()
- { return "Membros protegidos"; }
- virtual QCString trProtectedSlots()
- { return "Slots protegidos"; }
- virtual QCString trStaticProtectedMembers()
- { return "Membros protegidos estáticos"; }
- virtual QCString trPrivateMembers()
- { return "Membros privados"; }
- virtual QCString trPrivateSlots()
- { return "Slots privados"; }
- virtual QCString trStaticPrivateMembers()
- { return "Membros privados estáticos"; }
-
- /*! this function is used to produce a comma-separated list of items.
- * use generateMarker(i) to indicate where item i should be put.
- */
- virtual QCString trWriteList(int numEntries)
- {
- QCString result;
- int i;
- // the inherits list contain `numEntries' classes
- for (i=0;i<numEntries;i++)
- {
- // use generateMarker to generate placeholders for the class links!
- result+=generateMarker(i); // generate marker for entry i in the list
- // (order is left to right)
-
- if (i!=numEntries-1) // not the last entry, so we need a separator
- {
- if (i<numEntries-2) // not the fore last entry
- result+=", ";
- else // the fore last entry
- result+=" e ";
- }
- }
- return result;
- }
-
- /*! used in class documentation to produce a list of base classes,
- * if class diagrams are disabled.
- */
- virtual QCString trInheritsList(int numEntries)
- {
- return "Derivada de "+trWriteList(numEntries)+".";
- }
-
- /*! used in class documentation to produce a list of super classes,
- * if class diagrams are disabled.
- */
- virtual QCString trInheritedByList(int numEntries)
- {
- return "Herdado por "+trWriteList(numEntries)+".";
- }
-
- /*! used in member documentation blocks to produce a list of
- * members that are hidden by this one.
- */
- virtual QCString trReimplementedFromList(int numEntries)
- {
- return "Reimplementado de "+trWriteList(numEntries)+".";
- }
-
- /*! used in member documentation blocks to produce a list of
- * all member that overwrite the implementation of this member.
- */
- virtual QCString trReimplementedInList(int numEntries)
- {
- return "Reimplementado em "+trWriteList(numEntries)+".";
- }
-
- /*! This is put above each page as a link to all members of namespaces. */
- virtual QCString trNamespaceMembers()
- { return "Membros do namespace"; }
-
- /*! This is an introduction to the page with all namespace members */
- virtual QCString trNamespaceMemberDescription(bool extractAll)
- {
- QCString result="Lista ";
- if (extractAll) result+="de todos os ";
- else result+="de toda a documentação dos ";
- result+="membros do namespace com referência para ";
- if (extractAll)
- result+="a documentação de cada membro:";
- else
- result+="o namespace correspondente:";
- return result;
- }
-
- /*! This is used in LaTeX as the title of the chapter with the
- * index of all namespaces.
- */
- virtual QCString trNamespaceIndex()
- { return "Ãndice dos namespaces"; }
-
- /*! This is used in LaTeX as the title of the chapter containing
- * the documentation of all namespaces.
- */
- virtual QCString trNamespaceDocumentation()
- { return "Documentação dos namespaces"; }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 0.49-990522
-//////////////////////////////////////////////////////////////////////////
-
- /*! This is used in the documentation before the list of all
- * namespaces in a file.
- */
- virtual QCString trNamespaces()
- { return "Namespaces"; }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 0.49-990728
-//////////////////////////////////////////////////////////////////////////
-
- /*! This is put at the bottom of a class documentation page and is
- * followed by a list of files that were used to generate the page.
- */
- virtual QCString trGeneratedFromFiles(ClassDef::CompoundType compType,
- bool single)
- { // here s is one of " Class", " Struct" or " Union"
- // single is true implies a single file
- QCString result=(QCString)"A documentação para ";
- switch(compType)
- {
- case ClassDef::Class: result+="esta classe"; break;
- case ClassDef::Struct: result+="esta estrutura"; break;
- case ClassDef::Union: result+="esta união"; break;
- case ClassDef::Interface: result+="este interface"; break;
- case ClassDef::Protocol: result+="este protocolo"; break;
- case ClassDef::Category: result+="esta categoria"; break;
- case ClassDef::Exception: result+="esta excepção"; break;
- }
- result+=" foi gerada a partir ";
- if (single) result+=" do seguinte ficheiro:";
- else result+="dos seguintes ficheiros:";
- return result;
- }
-
- /*! This is in the (quick) index as a link to the alphabetical compound
- * list.
- */
- virtual QCString trAlphabeticalList()
- {
- return "Lista alfabética";
- }
-
-
-//////////////////////////////////////////////////////////////////////////
-// new since 0.49-990901
-//////////////////////////////////////////////////////////////////////////
-
- /*! This is used as the heading text for the retval command. */
- virtual QCString trReturnValues()
- { return "Valores retornados"; }
-
- /*! This is in the (quick) index as a link to the main page (index.html)
- */
- virtual QCString trMainPage()
- { return "Página principal"; }
-
- /*! This is used in references to page that are put in the LaTeX
- * documentation. It should be an abbreviation of the word page.
- */
- virtual QCString trPageAbbreviation()
- { return "p. "; }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 0.49-991003
-//////////////////////////////////////////////////////////////////////////
-
- virtual QCString trDefinedAtLineInSourceFile()
- {
- return "Definido na linha @0 do ficheiro @1.";
- }
- virtual QCString trDefinedInSourceFile()
- {
- return "Definido no ficheiro @0.";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 0.49-991205
-//////////////////////////////////////////////////////////////////////////
-
- virtual QCString trDeprecated()
- {
- return "Desaprovado";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.0.0
-//////////////////////////////////////////////////////////////////////////
-
- /*! this text is put before a collaboration diagram */
- virtual QCString trCollaborationDiagram(const char *clName)
- {
- return (QCString)"Diagrama de colaboração para "+clName+":";
- }
- /*! this text is put before an include dependency graph */
- virtual QCString trInclDepGraph(const char *fName)
- {
- return (QCString)"Diagrama de dependências de inclusão para "+fName+":";
- }
- /*! header that is put before the list of constructor/destructors. */
- virtual QCString trConstructorDocumentation()
- {
- return "Documentação dos Construtores & Destrutor";
- }
- /*! Used in the file documentation to point to the corresponding sources. */
- virtual QCString trGotoSourceCode()
- {
- return "Ir para o código fonte deste ficheiro.";
- }
- /*! Used in the file sources to point to the corresponding documentation. */
- virtual QCString trGotoDocumentation()
- {
- return "Ir para a documentação deste ficheiro.";
- }
- /*! Text for the \\pre command */
- virtual QCString trPrecondition()
- {
- return "Precondição";
- }
- /*! Text for the \\post command */
- virtual QCString trPostcondition()
- {
- return "Poscondição";
- }
- /*! Text for the \\invariant command */
- virtual QCString trInvariant()
- {
- return "Invariante";
- }
- /*! Text shown before a multi-line variable/enum initialization */
- virtual QCString trInitialValue()
- {
- return "Valor inicial:";
- }
- /*! Text used the source code in the file index */
- virtual QCString trCode()
- {
- return "código";
- }
- virtual QCString trGraphicalHierarchy()
- {
- return "Representação gráfica da hiearquia da classe";
- }
- virtual QCString trGotoGraphicalHierarchy()
- {
- return "Ir para a representação gráfica da hierarquia da classe";
- }
- virtual QCString trGotoTextualHierarchy()
- {
- return "Ir para a representação textual da hierarquia da classe";
- }
- virtual QCString trPageIndex()
- {
- return "Ãndice da página";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.1.0
-//////////////////////////////////////////////////////////////////////////
-
- virtual QCString trNote()
- {
- return "Nota";
- }
- virtual QCString trPublicTypes()
- {
- return "Tipos Públicos";
- }
- virtual QCString trPublicAttribs()
- {
- if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
- {
- return "Campos de Dados";
- }
- else
- {
- return "Atributos Públicos";
- }
- }
- virtual QCString trStaticPublicAttribs()
- {
- return "Atributos Públicos Estáticos";
- }
- virtual QCString trProtectedTypes()
- {
- return "Tipos Protegidos";
- }
- virtual QCString trProtectedAttribs()
- {
- return "Atributos Protegidos";
- }
- virtual QCString trStaticProtectedAttribs()
- {
- return "Atributos Protegidos Estáticos";
- }
- virtual QCString trPrivateTypes()
- {
- return "Tipos Privados";
- }
- virtual QCString trPrivateAttribs()
- {
- return "Atributos Privados";
- }
- virtual QCString trStaticPrivateAttribs()
- {
- return "Atributos Privados Estáticos";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.1.3
-//////////////////////////////////////////////////////////////////////////
-
- /*! Used as a marker that is put before a todo item */
- virtual QCString trTodo()
- {
- return "Tarefa";
- }
- /*! Used as the header of the todo list */
- virtual QCString trTodoList()
- {
- return "Lista de tarefas";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.1.4
-//////////////////////////////////////////////////////////////////////////
-
- virtual QCString trReferencedBy()
- {
- return "Referenciado por";
- }
- virtual QCString trRemarks()
- {
- return "Observações";
- }
- virtual QCString trAttention()
- {
- return "Atenção";
- }
- virtual QCString trInclByDepGraph()
- {
- return "Este grafo mostra quais são os ficheiros que incluem directamente ou indirectamente este ficheiro:";
- }
- virtual QCString trSince()
- {
- return "Desde";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.1.5
-//////////////////////////////////////////////////////////////////////////
-
- /*! title of the graph legend page */
- virtual QCString trLegendTitle()
- {
- return "Legenda do grafo";
- }
- /*! page explaining how the dot graph's should be interpreted */
- virtual QCString trLegendDocs()
- {
- return
- "Esta página explica como interpretar os grafos gerados pelo doxygen.<p>\n"
- "Considere o seguinte exemplo:\n"
- "\\code\n"
- "/*! Esta classe vai estar escondida devido à truncação */\n"
- "class Invisible { };\n\n"
- "/*! Esta classe tem a relação de herança escondida */\n"
- "class Truncated : public Invisible { };\n\n"
- "/* Classe não documentada por comentários doxygen */\n"
- "class Undocumented { };\n\n"
- "/*! Classe derivada usando derivação pública */\n"
- "class PublicBase : public Truncated { };\n\n"
- "/*! A template class */\n"
- "template<class T> class Templ { };\n\n"
- "/*! Classe derivada usando derivação protegida */\n"
- "class ProtectedBase { };\n\n"
- "/*! Classe derivada usando derivação privada */\n"
- "class PrivateBase { };\n\n"
- "/*! Classe usada pela classe Inherited */\n"
- "class Used { };\n\n"
- "/*! Super classe que deriva de várias classes */\n"
- "class Inherited : public PublicBase,\n"
- " protected ProtectedBase,\n"
- " private PrivateBase,\n"
- " public Undocumented,\n"
- " public Templ<int>\n"
- "{\n"
- " private:\n"
- " Used *m_usedClass;\n"
- "};\n"
- "\\endcode\n"
- "Isto irá gerar o seguinte gráfo:"
- "<p><center><img src=\"graph_legend."+Config_getEnum("DOT_IMAGE_FORMAT")+"\"></center>\n"
- "<p>\n"
- "As caixas no grafo anterior têm as seguintes interpretações:\n"
- "<ul>\n"
- "<li>Uma caixa inteiramente preta representa a estrutura ou a classe para "
- "a qual o grafo foi gerado.\n"
- "<li>Uma caixa com borda preta representa uma estrutura ou classe documentada.\n"
- "<li>Uma caixa com borda cinzenta representa uma estrutura ou classe não documentada.\n"
- "<li>Uma caixa com borda vermelha representa uma estrutura ou classe documentada onde "
- "nem todas as relações de herança/encapsulamento são exibidas. Um grafo é truncado "
- "quando não cabe na sua área predefinida.\n"
- "</ul>\n"
- "As setas têm a seguinte interpretação:\n"
- "<ul>\n"
- "<li>Uma seta azul escura representa uma relação de herança pública entre duas classes.\n"
- "<li>Uma seta verde escura representa uma relação de herança protegida.\n"
- "<li>Uma seta vermelha escura representa uma relação de herança privada.\n"
- "<li>Uma seta rocha em tracejado representa uma relação de encapsulamento ou uso por "
- "parte de outra classe. A legenda da seta contém o nome da variável ou variáveis da "
- "relação. A seta aponta da classe que estabelece a relação para a classe ou estrutura que "
- "é acessível.\n"
- "</ul>\n";
- }
- /*! text for the link to the legend page */
- virtual QCString trLegend()
- {
- return "legenda";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.2.0
-//////////////////////////////////////////////////////////////////////////
-
- /*! Used as a marker that is put before a test item */
- virtual QCString trTest()
- {
- return "Teste";
- }
- /*! Used as the header of the test list */
- virtual QCString trTestList()
- {
- return "Lista de teste";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.2.1
-//////////////////////////////////////////////////////////////////////////
-
- /*! Used as a section header for KDE-2 IDL methods */
- virtual QCString trDCOPMethods()
- {
- return "Métodos DCOP";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.2.2
-//////////////////////////////////////////////////////////////////////////
-
- /*! Used as a section header for IDL properties */
- virtual QCString trProperties()
- {
- return "Propriedades";
- }
- /*! Used as a section header for IDL property documentation */
- virtual QCString trPropertyDocumentation()
- {
- return "Documentação das propriedades";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.2.4
-//////////////////////////////////////////////////////////////////////////
-
- /*! Used for Java classes in the summary section of Java packages */
- virtual QCString trClasses()
- {
- if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
- {
- return "Estruturas de dados";
- }
- else
- {
- return "Classes";
- }
- }
- /*! Used as the title of a Java package */
- virtual QCString trPackage(const char *name)
- {
- return (QCString)"Pacote "+name;
- }
- /*! Title of the package index page */
- virtual QCString trPackageList()
- {
- return "Lista de pacotes";
- }
- /*! The description of the package index page */
- virtual QCString trPackageListDescription()
- {
- return "Lista de pacotes com uma breve descrição (se disponível):";
- }
- /*! The link name in the Quick links header for each page */
- virtual QCString trPackages()
- {
- return "Pacotes";
- }
- /*! Text shown before a multi-line define */
- virtual QCString trDefineValue()
- {
- return "Valor:";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.2.5
-//////////////////////////////////////////////////////////////////////////
-
- /*! Used as a marker that is put before a \\bug item */
- virtual QCString trBug()
- {
- return "Bug";
- }
- /*! Used as the header of the bug list */
- virtual QCString trBugList()
- {
- return "Lista de Bugs";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.2.6
-//////////////////////////////////////////////////////////////////////////
-
- /*! Used as ansicpg for RTF file
- *
- * The following table shows the correlation of Charset name, Charset Value and
- * <pre>
- * Codepage number:
- * Charset Name Charset Value(hex) Codepage number
- * ------------------------------------------------------
- * DEFAULT_CHARSET 1 (x01)
- * SYMBOL_CHARSET 2 (x02)
- * OEM_CHARSET 255 (xFF)
- * ANSI_CHARSET 0 (x00) 1252
- * RUSSIAN_CHARSET 204 (xCC) 1251
- * EE_CHARSET 238 (xEE) 1250
- * GREEK_CHARSET 161 (xA1) 1253
- * TURKISH_CHARSET 162 (xA2) 1254
- * BALTIC_CHARSET 186 (xBA) 1257
- * HEBREW_CHARSET 177 (xB1) 1255
- * ARABIC _CHARSET 178 (xB2) 1256
- * SHIFTJIS_CHARSET 128 (x80) 932
- * HANGEUL_CHARSET 129 (x81) 949
- * GB2313_CHARSET 134 (x86) 936
- * CHINESEBIG5_CHARSET 136 (x88) 950
- * </pre>
- *
- */
- virtual QCString trRTFansicp()
- {
- return "1252";
- }
-
-
- /*! Used as ansicpg for RTF fcharset
- * \see trRTFansicp() for a table of possible values.
- */
- virtual QCString trRTFCharSet()
- {
- return "0";
- }
-
- /*! Used as header RTF general index */
- virtual QCString trRTFGeneralIndex()
- {
- return "Ãndice";
- }
-
- /*! This is used for translation of the word that will possibly
- * be followed by a single name or by a list of names
- * of the category.
- */
- virtual QCString trClass(bool first_capital, bool singular)
- {
- QCString result((first_capital ? "Classe" : "classe"));
- if (!singular) result+="s";
- return result;
- }
-
- /*! This is used for translation of the word that will possibly
- * be followed by a single name or by a list of names
- * of the category.
- */
- virtual QCString trFile(bool first_capital, bool singular)
- {
- QCString result((first_capital ? "Ficheiro" : "ficheiro"));
- if (!singular) result+="s";
- return result;
- }
-
- /*! This is used for translation of the word that will possibly
- * be followed by a single name or by a list of names
- * of the category.
- */
- virtual QCString trNamespace(bool first_capital, bool singular)
- {
- QCString result((first_capital ? "Namespace" : "namespace"));
- if (!singular) result+="s";
- return result;
- }
-
- /*! This is used for translation of the word that will possibly
- * be followed by a single name or by a list of names
- * of the category.
- */
- virtual QCString trGroup(bool first_capital, bool singular)
- {
- QCString result((first_capital ? "Grupo" : "grupo"));
- if (!singular) result+="s";
- return result;
- }
-
- /*! This is used for translation of the word that will possibly
- * be followed by a single name or by a list of names
- * of the category.
- */
- virtual QCString trPage(bool first_capital, bool singular)
- {
- QCString result((first_capital ? "Página" : "página"));
- if (!singular) result+="s";
- return result;
- }
-
- /*! This is used for translation of the word that will possibly
- * be followed by a single name or by a list of names
- * of the category.
- */
- virtual QCString trMember(bool first_capital, bool singular)
- {
- QCString result((first_capital ? "Membro" : "membro"));
- if (!singular) result+="s";
- return result;
- }
-
- /*! This is used for translation of the word that will possibly
- * be followed by a single name or by a list of names
- * of the category.
- */
- virtual QCString trGlobal(bool first_capital, bool singular)
- {
- QCString result((first_capital ? "Globa" : "globa"));
- result+= singular? "l" : "ais";
- return result;
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.2.7
-//////////////////////////////////////////////////////////////////////////
-
- /*! This text is generated when the \\author command is used and
- * for the author section in man pages. */
- virtual QCString trAuthor(bool first_capital, bool singular)
- {
- QCString result((first_capital ? "Autor" : "autor"));
- if (!singular) result+="es";
- return result;
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.2.11
-//////////////////////////////////////////////////////////////////////////
-
- /*! This text is put before the list of members referenced by a member
- */
- virtual QCString trReferences()
- {
- return "Referências";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.2.13
-//////////////////////////////////////////////////////////////////////////
-
- /*! used in member documentation blocks to produce a list of
- * members that are implemented by this one.
- */
- virtual QCString trImplementedFromList(int numEntries)
- {
- return "Implementa "+trWriteList(numEntries)+".";
- }
-
- /*! used in member documentation blocks to produce a list of
- * all members that implement this abstract member.
- */
- virtual QCString trImplementedInList(int numEntries)
- {
- return "Implementado em "+trWriteList(numEntries)+".";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.2.16
-//////////////////////////////////////////////////////////////////////////
-
- /*! used in RTF documentation as a heading for the Table
- * of Contents.
- */
- virtual QCString trRTFTableOfContents()
- {
- return "Ãndice";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.2.17
-//////////////////////////////////////////////////////////////////////////
-
- /*! Used as the header of the list of item that have been
- * flagged deprecated
- */
- virtual QCString trDeprecatedList()
- {
- return "Lista de Deprecados";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.2.18
-//////////////////////////////////////////////////////////////////////////
-
- /*! Used as a header for declaration section of the events found in
- * a C# program
- */
- virtual QCString trEvents()
- {
- return "Eventos";
- }
- /*! Header used for the documentation section of a class' events. */
- virtual QCString trEventDocumentation()
- {
- return "Documentação dos eventos";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.3
-//////////////////////////////////////////////////////////////////////////
-
- /*! Used as a heading for a list of Java class types with package scope.
- */
- virtual QCString trPackageTypes()
- {
- return "Tipos do Pacote";
- }
- /*! Used as a heading for a list of Java class functions with package
- * scope.
- */
- virtual QCString trPackageMembers()
- {
- return "Funções do Pacote";
- }
- /*! Used as a heading for a list of static Java class functions with
- * package scope.
- */
- virtual QCString trStaticPackageMembers()
- {
- return "Funções Estáticas do Pacote";
- }
- /*! Used as a heading for a list of Java class variables with package
- * scope.
- */
- virtual QCString trPackageAttribs()
- {
- return "Atributos do Pacote";
- }
- /*! Used as a heading for a list of static Java class variables with
- * package scope.
- */
- virtual QCString trStaticPackageAttribs()
- {
- return "Atributos Estáticos do Pacote";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.3.1
-//////////////////////////////////////////////////////////////////////////
-
- /*! Used in the quick index of a class/file/namespace member list page
- * to link to the unfiltered list of all members.
- */
- virtual QCString trAll()
- {
- return "Tudo";
- }
- /*! Put in front of the call graph for a function. */
- virtual QCString trCallGraph()
- {
- return "Grafo de chamadas desta função:";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.3.3 - Based on the Brazilian Portuguese Translation
-//////////////////////////////////////////////////////////////////////////
-
- /*! When the search engine is enabled this text is put in the header
- * of each page before the field where one can enter the text to search
- * for.
- */
- virtual QCString trSearchForIndex()
- {
- return "Procurar por";
- }
- /*! This string is used as the title for the page listing the search
- * results.
- */
- virtual QCString trSearchResultsTitle()
- {
- return "Resultado da Busca";
- }
- /*! This string is put just before listing the search results. The
- * text can be different depending on the number of documents found.
- * Inside the text you can put the special marker $num to insert
- * the number representing the actual number of search results.
- * The @a numDocuments parameter can be either 0, 1 or 2, where the
- * value 2 represents 2 or more matches. HTML markup is allowed inside
- * the returned string.
- */
- virtual QCString trSearchResults(int numDocuments)
- {
- if (numDocuments==0)
- {
- return "Nenhum documento foi encontrado.";
- }
- else if (numDocuments==1)
- {
- return "Apenas <b>1</b> documento foi encontrado.";
- }
- else
- {
- return "<b>$num</b> documentos encontrados. "
- "Os melhores resultados vem primeiro.";
- }
- }
- /*! This string is put before the list of matched words, for each search
- * result. What follows is the list of words that matched the query.
- */
- virtual QCString trSearchMatches()
- {
- return "Resultados:";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.3.8
-//////////////////////////////////////////////////////////////////////////
-
- /*! This is used in HTML as the title of page with source code for file filename
- */
- virtual QCString trSourceFile(QCString& filename)
- {
- return "Código-Fonte de " + filename;
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.3.9
-//////////////////////////////////////////////////////////////////////////
-
- /*! This is used as the name of the chapter containing the directory
- * hierarchy.
- */
- virtual QCString trDirIndex()
- { return "Hierarquia de Diretórios"; }
-
- /*! This is used as the name of the chapter containing the documentation
- * of the directories.
- */
- virtual QCString trDirDocumentation()
- { return "Documentação do Directório"; }
-
- /*! This is used as the title of the directory index and also in the
- * Quick links of a HTML page, to link to the directory hierarchy.
- */
- virtual QCString trDirectories()
- { return "Diretórios"; }
-
- /*! This returns a sentences that introduces the directory hierarchy.
- * and the fact that it is sorted alphabetically per level
- */
- virtual QCString trDirDescription()
- { return "Esta Hierarquia de Diretórios está parcialmente ordenada (ordem alfabética)"; }
-
- /*! This returns the title of a directory page. The name of the
- * directory is passed via \a dirName.
- */
- virtual QCString trDirReference(const char *dirName)
- {
- QCString result = "Referência do diretório ";
- result += dirName;
- return result;
- }
-
- /*! This returns the word directory with or without starting capital
- * (\a first_capital) and in sigular or plural form (\a singular).
- */
- virtual QCString trDir(bool first_capital, bool singular)
- {
- QCString result((first_capital ? "Diretório" : "diretório"));
- if (!singular) result+="s";
- return result;
- }
-//////////////////////////////////////////////////////////////////////////
-// new since 1.4.1
-//////////////////////////////////////////////////////////////////////////
-
- /*! This text is added to the documentation when the \\overload command
- * is used for a overloaded function.
- */
- virtual QCString trOverloadText()
- {
- return "Este é um método provido por conveniência. "
- "Ele difere do método acima apenas na lista de "
- "argumentos que devem ser utilizados.";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.4.6
-//////////////////////////////////////////////////////////////////////////
-
- /*! This is used to introduce a caller (or called-by) graph */
- virtual QCString trCallerGraph()
- {
- return "Este é o diagrama das funções que utilizam esta função:";
- }
-
- /*! This is used in the documentation of a file/namespace before the list
- * of documentation blocks for enumeration values
- */
- virtual QCString trEnumerationValueDocumentation()
- { return "Documentação da enumeração"; }
-
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.5.4 (mainly for Fortran)
-//////////////////////////////////////////////////////////////////////////
-
- /*! header that is put before the list of member subprograms (Fortran). */
- virtual QCString trMemberFunctionDocumentationFortran()
- { return "Documentação de Função Membro/Subrotina"; }
-
- /*! This is put above each page as a link to the list of annotated data types (Fortran). */
- virtual QCString trCompoundListFortran()
- { return "Lista de Tipos de Dados"; }
-
- /*! This is put above each page as a link to all members of compounds (Fortran). */
- virtual QCString trCompoundMembersFortran()
- { return "Campos de Dados"; }
-
- /*! This is an introduction to the annotated compound list (Fortran). */
- virtual QCString trCompoundListDescriptionFortran()
- { return "Aqui estão os tipos de dados com descrições resumidas:"; }
-
- /*! This is an introduction to the page with all data types (Fortran). */
- virtual QCString trCompoundMembersDescriptionFortran(bool extractAll)
- {
- QCString result="Esta é a lista de todos os membros ";
- if (!extractAll) result+="documentados ";
- result+="dos tipos de dados com links para ";
- if (extractAll)
- {
- result+="a documentação dos tipos de dados para cada membro:";
- }
- else
- {
- result+="os tipos de dados a que pertencem:";
- }
- return result;
- }
-
- /*! This is used in LaTeX as the title of the chapter with the
- * annotated compound index (Fortran).
- */
- virtual QCString trCompoundIndexFortran()
- { return "Ãndice de Tipos de Dados"; }
-
- /*! This is used in LaTeX as the title of the chapter containing
- * the documentation of all data types (Fortran).
- */
- virtual QCString trTypeDocumentation()
- { return "Documentação dos Tipos de Dados"; }
-
- /*! This is used in the documentation of a file as a header before the
- * list of (global) subprograms (Fortran).
- */
- virtual QCString trSubprograms()
- { return "Funções/Subrotinas"; }
-
- /*! This is used in the documentation of a file/namespace before the list
- * of documentation blocks for subprograms (Fortran)
- */
- virtual QCString trSubprogramDocumentation()
- { return "Documentação da Função/Subrotina"; }
-
- /*! This is used in the documentation of a file/namespace/group before
- * the list of links to documented compounds (Fortran)
- */
- virtual QCString trDataTypes()
- { return "Tipos de Dados"; }
-
- /*! used as the title of page containing all the index of all modules (Fortran). */
- virtual QCString trModulesList()
- { return "Lista de Módulos"; }
-
- /*! used as an introduction to the modules list (Fortran) */
- virtual QCString trModulesListDescription(bool extractAll)
- {
- QCString result="Esta é a lista de todos os módulos ";
- if (!extractAll) result+="documentados ";
- result+="com descrições resumidas:";
- return result;
- }
-
- /*! used as the title of the HTML page of a module/type (Fortran) */
- virtual QCString trCompoundReferenceFortran(const char *clName,
- ClassDef::CompoundType compType,
- bool isTemplate)
- {
- QCString result = (QCString)"Referência ";
-
- if (isTemplate) result+="da Template ";
-
- switch(compType)
- {
- case ClassDef::Class: result+="do Modulo "; break;
- case ClassDef::Struct: result+="do Tipo "; break;
- case ClassDef::Union: result+="da União "; break;
- case ClassDef::Interface: result+="da Interface "; break;
- case ClassDef::Protocol: result+="do Protocolo "; break;
- case ClassDef::Category: result+="da Categoria "; break;
- case ClassDef::Exception: result+="da Exceção "; break;
- }
- result += clName;
-
- return result;
- }
- /*! used as the title of the HTML page of a module (Fortran) */
- virtual QCString trModuleReference(const char *namespaceName)
- {
- QCString result = "Referência do Módulo ";
- result += namespaceName;
- return result;
- }
-
- /*! This is put above each page as a link to all members of modules. (Fortran) */
- virtual QCString trModulesMembers()
- { return "Membros do Módulo"; }
-
- /*! This is an introduction to the page with all modules members (Fortran) */
- virtual QCString trModulesMemberDescription(bool extractAll)
- {
- QCString result="Esta é a lista de todos os membros ";
- if (!extractAll) result+="documentados ";
- result+="dos módulos com links para ";
- if (extractAll)
- {
- result+="a documentação dos módulos para cada membro:";
- }
- else
- {
- result+="os módulos a que pertencem:";
- }
- return result;
- }
-
- /*! This is used in LaTeX as the title of the chapter with the
- * index of all modules (Fortran).
- */
- virtual QCString trModulesIndex()
- { return "Ãndice dos Módulos"; }
-
- /*! This is used for translation of the word that will possibly
- * be followed by a single name or by a list of names
- * of the category.
- */
- virtual QCString trModule(bool first_capital, bool singular)
- {
- QCString result((first_capital ? "Modulo" : "modulo"));
- if (!singular) result+="s";
- return result;
- }
- /*! This is put at the bottom of a module documentation page and is
- * followed by a list of files that were used to generate the page.
- */
- virtual QCString trGeneratedFromFilesFortran(ClassDef::CompoundType compType,
- bool single)
- { // here s is one of " Module", " Struct" or " Union"
- // single is true implies a single file
- QCString result=(QCString)"A documentação para ";
- switch(compType)
- {
- case ClassDef::Class: result+="este modulo "; break;
- case ClassDef::Struct: result+="este tipo "; break;
- case ClassDef::Union: result+="esta união "; break;
- case ClassDef::Interface: result+="esta interface "; break;
- case ClassDef::Protocol: result+="esto protocolo "; break;
- case ClassDef::Category: result+="esta categoria "; break;
- case ClassDef::Exception: result+="esta exceção "; break;
- }
-
- result+=" foi gerada a partir do";
- if (single)
- result+=" seguinte ficheiro:";
- else
- result+="s seguintes ficheiros:";
-
- return result;
- }
- /*! This is used for translation of the word that will possibly
- * be followed by a single name or by a list of names
- * of the category.
- */
- virtual QCString trType(bool first_capital, bool singular)
- {
- QCString result((first_capital ? "Tipo" : "tipo"));
- if (!singular) result+="s";
- return result;
- }
- /*! This is used for translation of the word that will possibly
- * be followed by a single name or by a list of names
- * of the category.
- */
- virtual QCString trSubprogram(bool first_capital, bool singular)
- {
- QCString result((first_capital ? "Subprograma" : "subprograma"));
- if (!singular) result+="s";
- return result;
- }
-
- /*! C# Type Contraint list */
- virtual QCString trTypeConstraints()
- {
- return "Restrições do Tipo";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.6.0 (mainly for the new search engine)
-//////////////////////////////////////////////////////////////////////////
-
- /*! directory relation for \a name
- */
- virtual QCString trDirRelation(const char *name)
- {
- return "Relação " + QCString(name);
- }
-
- /*! Loading message shown when loading search results */
- virtual QCString trLoading()
- {
- return "Carregando...";
- }
-
- /*! Label used for search results in the global namespace */
- virtual QCString trGlobalNamespace()
- {
- return "Namespace global";
- }
-
- /*! Message shown while searching */
- virtual QCString trSearching()
- {
- return "Procurando...";
- }
-
- /*! Text shown when no search results are found */
- virtual QCString trNoMatches()
- {
- return "Nenhuma entrada encontrada";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.6.3 (missing items for the directory pages)
-//////////////////////////////////////////////////////////////////////////
-
- /*! introduction text for the directory dependency graph */
- virtual QCString trDirDependency(const char *name)
- {
- return (QCString)"Grafo de dependência de diretórios para " + name;
- }
-
- /*! when clicking a directory dependency label, a page with a
- * table is shown. The heading for the first column mentions the
- * source file that has a relation to another file.
- */
- virtual QCString trFileIn(const char *name)
- {
- return (QCString)"Ficheiro em "+name;
- }
-
- /*! when clicking a directory dependency label, a page with a
- * table is shown. The heading for the second column mentions the
- * destination file that is included.
- */
- virtual QCString trIncludesFileIn(const char *name)
- {
- return (QCString)"Inclui ficheiro em "+name;
- }
-
- /** Compiles a date string.
- * @param year Year in 4 digits
- * @param month Month of the year: 1=January
- * @param day Day of the Month: 1..31
- * @param dayOfWeek Day of the week: 1=Monday..7=Sunday
- * @param hour Hour of the day: 0..23
- * @param minutes Minutes in the hour: 0..59
- * @param seconds Seconds within the minute: 0..59
- * @param includeTime Include time in the result string?
- */
- virtual QCString trDateTime(int year,int month,int day,int dayOfWeek,
- int hour,int minutes,int seconds,
- bool includeTime)
- {
- static const char *days[] = { "Segunda","Terça","Quarta","Quinta","Sexta","Sábado","Domingo" };
- static const char *months[] = { "Janeiro","Fevereiro","Março","Abril","Maio","Junho","Julho","Agosto","Setembro","Outubro","Novembro","Dezembro" };
- QCString sdate;
- sdate.sprintf("%s, %d de %s de %d",days[dayOfWeek-1],day,months[month-1],year);
- if (includeTime)
- {
- QCString stime;
- stime.sprintf(" %.2d:%.2d:%.2d",hour,minutes,seconds);
- sdate+=stime;
- }
- return sdate;
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.7.5
-//////////////////////////////////////////////////////////////////////////
-
- /*! Header for the page with bibliographic citations */
- virtual QCString trCiteReferences()
- { return "Referências Bibliográficas"; }
-
- /*! Text for copyright paragraph */
- virtual QCString trCopyright()
- {
- // Note: I will left it as is because "Direitos de autor" may not fit
- // in the text.
- return "Copyright";
- }
-
- /*! Header for the graph showing the directory dependencies */
- virtual QCString trDirDepGraph(const char *name)
- { return QCString("Grafo de dependências do directório ")+name+":"; }
-};
-
-#endif
diff --git a/trunk/src/translator_ro.h b/trunk/src/translator_ro.h
deleted file mode 100644
index 22b769d..0000000
--- a/trunk/src/translator_ro.h
+++ /dev/null
@@ -1,1797 +0,0 @@
-/******************************************************************************
- *
- *
- *
- * Copyright (C) 1997-2012 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.
- *
- */
-
-/* Original translation from English to Romanian by Alexandru Iosup [aiosup@yahoo.com].
- * Updated by Ionuţ Dumitraşcu [reddumy@yahoo.com]
- *
- * -------------------------------------------
- * Project start : 20.09.2000
- * Last Doxygen version covered : 1.5.8
- * Last revision : 15.01.2009
- * -------------------------------------------
- *
- * Revision history
- * ----------------
- * 15.01.2009 - Updated Romanian translation to Doxygen 1.5.8 and modified strings to UTF-8, as well as some other changes (Ionuţ Dumitraşcu)
- * 28.07.2008 - Updated version - covering Doxygen 1.5.6 - and some minor changes (Ionuţ Dumitraşcu)
- *
- * 01.Mar.2k5 Third revision, covering Doxygen 1.4.1
- *
- * 07.Mar.2k2 Second revision, covering Doxygen 1.2.14
- * - fixed some bugs
- *
- * 20.Sep.2k First version, covering Doxygen 1.2.1
- *
- */
-#ifndef TRANSLATOR_RO_H
-#define TRANSLATOR_RO_H
-
-
-class TranslatorRomanian : public TranslatorAdapter_1_6_0
-{
- public:
-
- // --- Language control methods -------------------
-
- /*! Used for identification of the language. The identification
- * should not be translated. It should be replaced by the name
- * of the language in English using lower-case characters only
- * (e.g. "czech", "japanese", "russian", etc.). It should be equal to
- * the identification used in language.cpp.
- */
- virtual QCString idLanguage()
- { return "romanian"; }
- /*! Used to get the LaTeX command(s) for the language support.
- * This method should return string with commands that switch
- * LaTeX to the desired language. For example
- * <pre>"\\usepackage[german]{babel}\n"
- * </pre>
- * or
- * <pre>"\\usepackage{polski}\n"
- * "\\usepackage[latin2]{inputenc}\n"
- * "\\usepackage[T1]{fontenc}\n"
- * </pre>
- *
- * The English LaTeX does not use such commands. Because of this
- * the empty string is returned in this implementation.
- */
- virtual QCString latexLanguageSupportCommand()
- {
- return "\\usepackage[romanian]{babel}\n";
- }
-
- /*! return the language charset. This will be used for the HTML output */
- virtual QCString idLanguageCharset()
- {
- return "utf-8";
- }
-
- // --- Language translation methods -------------------
-
- /*! used in the compound documentation before a list of related functions. */
- virtual QCString trRelatedFunctions()
- { return "Funcţii înrudite"; }
-
- /*! subscript for the related functions. */
- virtual QCString trRelatedSubscript()
- { return "(Atenţie: acestea nu sunt funcţii membre.)"; }
-
- /*! header that is put before the detailed description of files, classes and namespaces. */
- virtual QCString trDetailedDescription()
- { return "Descriere Detaliată"; }
-
- /*! header that is put before the list of typedefs. */
- virtual QCString trMemberTypedefDocumentation()
- { return "Documentaţia Definiţiilor de Tipuri (typedef) Membre"; }
-
- /*! header that is put before the list of enumerations. */
- virtual QCString trMemberEnumerationDocumentation()
- { return "Documentaţia Enumerărilor Membre"; }
-
- /*! header that is put before the list of member functions. */
- virtual QCString trMemberFunctionDocumentation()
- { return "Documentaţia Funcţiilor Membre"; }
-
- /*! header that is put before the list of member attributes. */
- virtual QCString trMemberDataDocumentation()
- {
- if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
- {
- return "Documentaţia Câmpurilor";
- }
- else
- {
- return "Documentaţia Datelor Membre";
- }
-
- }
-
- /*! this is the text of a link put after brief descriptions. */
- virtual QCString trMore()
- { return "Mai mult..."; }
-
- /*! put in the class documentation */
- virtual QCString trListOfAllMembers()
- { return "Lista tuturor membrilor."; }
-
- /*! used as the title of the "list of all members" page of a class */
- virtual QCString trMemberList()
- { return "Lista Membrilor"; }
-
- /*! this is the first part of a sentence that is followed by a class name */
- virtual QCString trThisIsTheListOfAllMembers()
- { return "Lista completă a membrilor din "; }
-
- /*! this is the remainder of the sentence after the class name */
- virtual QCString trIncludingInheritedMembers()
- { return ", inclusiv a tuturor membrilor moşteniţi."; }
-
- /*! this is put at the author sections at the bottom of man pages.
- * parameter s is name of the project name.
- */
- virtual QCString trGeneratedAutomatically(const char *s)
- { QCString result="Generat automat de Doxygen";
- if (s) result+=(QCString)" pentru "+s;
- result+=" din codul sursă.";
- return result;
- }
-
- /*! put after an enum name in the list of all members */
- virtual QCString trEnumName()
- { return "nume enumerare"; }
-
- /*! put after an enum value in the list of all members */
- virtual QCString trEnumValue()
- { return "valoare enumerare"; }
-
- /*! put after an undocumented member in the list of all members */
- virtual QCString trDefinedIn()
- { return "definit în"; }
-
- // quick reference sections
-
- /*! This is put above each page as a link to the list of all groups of
- * compounds or files (see the \\group command).
- */
- virtual QCString trModules()
- { return "Module"; }
-
- /*! This is put above each page as a link to the class hierarchy */
- virtual QCString trClassHierarchy()
- { return "Ierarhia Claselor"; }
-
- /*! This is put above each page as a link to the list of annotated classes */
- virtual QCString trCompoundList()
- {
- if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
- {
- return "Structuri de Date";
- }
- else
- {
- return "Lista Claselor";
- }
-
- }
-
- /*! This is put above each page as a link to the list of documented files */
- virtual QCString trFileList()
- { return "Lista fiÅŸierelor"; }
-
- /*! This is put above each page as a link to all members of compounds. */
- virtual QCString trCompoundMembers()
- {
- if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
- {
- return "Câmpurile de Date";
- }
- else
- {
- return "Membrii Componenţi"; //cu articol hotarat
- }
-
- }
-
- /*! This is put above each page as a link to all members of files. */
- virtual QCString trFileMembers()
- {
- if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
- {
- return "Globale";
- }
- else
- {
- return "Membrii din FiÅŸier"; //cu articol hotarat
- }
-
- }
-
- /*! This is put above each page as a link to all related pages. */
- virtual QCString trRelatedPages()
- { return "Pagini înrudite"; }
-
- /*! This is put above each page as a link to all examples. */
- virtual QCString trExamples()
- { return "Exemple"; }
-
- /*! This is put above each page as a link to the search engine. */
- virtual QCString trSearch()
- { return "Caută"; }
-
- /*! This is an introduction to the class hierarchy. */
- virtual QCString trClassHierarchyDescription()
- { return "Această listă de moşteniri este sortată în general, "
- "dar nu complet, în ordine alfabetică:";
- }
-
- /*! This is an introduction to the list with all files. */
- virtual QCString trFileListDescription(bool extractAll)
- {
- QCString result="Lista tuturor ";
- result+="fiÅŸierelor";
- if (!extractAll) result+=" documentate";
- result+=", cu scurte descrieri:";
- return result;
- }
-
- /*! This is an introduction to the annotated compound list. */
- virtual QCString trCompoundListDescription()
- {
- if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
- {
- return "Lista structurilor de date, cu scurte descrieri:";
- }
- else
- {
- return "Lista claselor, structurilor, uniunilor şi interfeţelor"
- ", cu scurte descrieri:";
- }
-
- }
-
- /*! This is an introduction to the page with all class members. */
- virtual QCString trCompoundMembersDescription(bool extractAll)
- {
- QCString result="Lista tuturor ";
-
- if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
- {
- result+="câmpurilor ";
- if (!extractAll) result+=" documentate ";
- result+="din structuri si uniuni ";
- }
- else
- {
- result+="membrilor ";
- if (!extractAll) result+="documentaţi ";
- result+="din toate clasele ";
- }
- result+=", cu legături către ";
- if (!extractAll)
- {
- if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
- {
- result+="documentaţia structurii/uniunii pentru fiecare câmp în parte:";
- }
- else
- {
- result+="documentaţia clasei pentru fiecare membru în parte:";
- }
- }
- else
- {
- if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
- {
- result+="structurile/uniunile de care aparţin:";
- }
- else
- {
- result+="clasele de care aparţin:";
- }
- }
-
- return result;
- }
-
- /*! This is an introduction to the page with all file members. */
- virtual QCString trFileMembersDescription(bool extractAll)
- {
- QCString result="Lista tuturor ";
- if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
- {
- result+="funcţiilor, variabilelor, definiţiilor, enumerărilor şi definiţiilor de tip";
- if (!extractAll) result+=" documentate";
- }
- else
- {
- result+="membrilor ";
- if (!extractAll) result+="documentaţi ";
- result+="din toate fiÅŸierele";
- }
- result+=", cu legături către ";
- if (extractAll)
- result+="fişierele de care aparţin:";
- else
- result+="documentaţia aferentă:";
-
- return result;
- }
-
- /*! This is an introduction to the page with the list of all examples */
- virtual QCString trExamplesDescription()
- { return "Lista tuturor exemplelor:"; }
-
- /*! This is an introduction to the page with the list of related pages */
- virtual QCString trRelatedPagesDescription()
- { return "Lista tuturor documentaţiilor înrudite:"; }
-
- /*! This is an introduction to the page with the list of class/file groups */
- virtual QCString trModulesDescription()
- { return "Lista tuturor modulelor:"; }
-
- // index titles (the project name is prepended for these)
-
-
- /*! This is used in HTML as the title of index.html. */
- virtual QCString trDocumentation()
- { return "Documentaţie"; }
-
- /*! This is used in LaTeX as the title of the chapter with the
- * index of all groups.
- */
- virtual QCString trModuleIndex()
- { return "Indexul Modulelor"; }
-
- /*! This is used in LaTeX as the title of the chapter with the
- * class hierarchy.
- */
- virtual QCString trHierarchicalIndex()
- { return "Index Ierarhic"; }
-
- /*! This is used in LaTeX as the title of the chapter with the
- * annotated compound index.
- */
- virtual QCString trCompoundIndex()
- {
- if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
- {
- return "Indexul Structurilor de Date";
- }
- else
- {
- return "Indexul Claselor";
- }
-
- }
-
- /*! This is used in LaTeX as the title of the chapter with the
- * list of all files.
- */
- virtual QCString trFileIndex()
- { return "Indexul FiÅŸierelor"; }
-
- /*! This is used in LaTeX as the title of the chapter containing
- * the documentation of all groups.
- */
- virtual QCString trModuleDocumentation()
- { return "Documentaţia Modulelor"; }
-
- /*! This is used in LaTeX as the title of the chapter containing
- * the documentation of all classes, structs and unions.
- */
- virtual QCString trClassDocumentation()
- {
- if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
- {
- return "Documentaţia Structurilor de Date";
- }
- else
- {
- return "Documentaţia Claselor";
- }
-
- }
-
- /*! This is used in LaTeX as the title of the chapter containing
- * the documentation of all files.
- */
- virtual QCString trFileDocumentation()
- { return "Documentaţia Fişierelor"; }
-
- /*! This is used in LaTeX as the title of the chapter containing
- * the documentation of all examples.
- */
- virtual QCString trExampleDocumentation()
- { return "Documentaţia Exemplelor"; }
-
- /*! This is used in LaTeX as the title of the chapter containing
- * the documentation of all related pages.
- */
- virtual QCString trPageDocumentation()
- { return "Documentaţii înrudite"; }
-
- /*! This is used in LaTeX as the title of the document */
- virtual QCString trReferenceManual()
- { return "Manual de utilizare"; }
-
- /*! This is used in the documentation of a file as a header before the
- * list of defines
- */
- virtual QCString trDefines()
- { return "Definiţii"; }
-
- /*! This is used in the documentation of a file as a header before the
- * list of function prototypes
- */
- virtual QCString trFuncProtos()
- { return "Prototipuri de funcţii"; }
-
- /*! This is used in the documentation of a file as a header before the
- * list of typedefs
- */
- virtual QCString trTypedefs()
- { return "Definiţii de tipuri"; }
-
- /*! This is used in the documentation of a file as a header before the
- * list of enumerations
- */
- virtual QCString trEnumerations()
- { return "Enumerări"; }
-
- /*! This is used in the documentation of a file as a header before the
- * list of (global) functions
- */
- virtual QCString trFunctions()
- { return "Funcţii"; }
-
- /*! This is used in the documentation of a file as a header before the
- * list of (global) variables
- */
- virtual QCString trVariables()
- { return "Variabile"; }
-
- /*! This is used in the documentation of a file as a header before the
- * list of (global) variables
- */
- virtual QCString trEnumerationValues()
- { return "Valori de enumerări"; }
-
- /*! This is used in the documentation of a file before the list of
- * documentation blocks for defines
- */
- virtual QCString trDefineDocumentation()
- { return "Documentaţia definiţiilor"; }
-
- /*! This is used in the documentation of a file/namespace before the list
- * of documentation blocks for function prototypes
- */
- virtual QCString trFunctionPrototypeDocumentation()
- { return "Documentaţia prototipurilor de funcţii"; }
-
- /*! This is used in the documentation of a file/namespace before the list
- * of documentation blocks for typedefs
- */
- virtual QCString trTypedefDocumentation()
- { return "Documentaţia definiţiilor de tipuri"; }
-
- /*! This is used in the documentation of a file/namespace before the list
- * of documentation blocks for enumeration types
- */
- virtual QCString trEnumerationTypeDocumentation()
- { return "Documentaţia enumerărilor"; }
-
- /*! This is used in the documentation of a file/namespace before the list
- * of documentation blocks for functions
- */
- virtual QCString trFunctionDocumentation()
- { return "Documentaţia funcţiilor"; }
-
- /*! This is used in the documentation of a file/namespace before the list
- * of documentation blocks for variables
- */
- virtual QCString trVariableDocumentation()
- { return "Documentaţia variabilelor"; }
-
- /*! This is used in the documentation of a file/namespace/group before
- * the list of links to documented compounds
- */
- virtual QCString trCompounds()
- {
- if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
- {
- return "Structuri de Date";
- }
- else
- {
- return "Membri";
- }
-
- }
-
- /*! This is used in the standard footer of each page and indicates when
- * the page was generated
- */
- virtual QCString trGeneratedAt(const char *date,const char *projName)
- {
- QCString result=(QCString)"Generat "+date;
- if (projName) result+=(QCString)" pentru "+projName;
- result+=(QCString)" de către";
- return result;
- }
- /*! This is part of the sentence used in the standard footer of each page.
- */
- virtual QCString trWrittenBy()
- {
- return "scris de";
- }
-
- /*! this text is put before a class diagram */
- virtual QCString trClassDiagram(const char *clName)
- {
- return (QCString)"Diagrama de relaţii pentru "+clName;
- }
-
- /*! this text is generated when the \\internal command is used. */
- virtual QCString trForInternalUseOnly()
- { return "Doar pentru uz intern."; }
-
- /*! this text is generated when the \\warning command is used. */
- virtual QCString trWarning()
- { return "Atenţie"; }
-
- /*! this text is generated when the \\version command is used. */
- virtual QCString trVersion()
- { return "Versiunea"; }
-
- /*! this text is generated when the \\date command is used. */
- virtual QCString trDate()
- { return "Data"; }
-
- /*! this text is generated when the \\return command is used. */
- virtual QCString trReturns()
- { return "ÃŽntoarce"; }
-
- /*! this text is generated when the \\sa command is used. */
- virtual QCString trSeeAlso()
- { return "Vezi ÅŸi"; }
-
- /*! this text is generated when the \\param command is used. */
- virtual QCString trParameters()
- { return "Parametri"; }
-
- /*! this text is generated when the \\exception command is used. */
- virtual QCString trExceptions()
- { return "Excepţii"; }
-
- /*! this text is used in the title page of a LaTeX document. */
- virtual QCString trGeneratedBy()
- { return "Generat de"; }
-
- // new since 0.49-990307
-
- /*! used as the title of page containing all the index of all namespaces. */
- virtual QCString trNamespaceList()
- { return "Lista de Namespace-uri"; }
-
- /*! used as an introduction to the namespace list */
- virtual QCString trNamespaceListDescription(bool extractAll)
- {
- QCString result="Lista tuturor ";
- result+="namespace-urilor ";
- if (!extractAll) result+="documentate ";
- result+=", cu scurte descrieri:";
- return result;
- }
-
- /*! used in the class documentation as a header before the list of all
- * friends of a class
- */
- virtual QCString trFriends()
- { return "Prieteni"; }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 0.49-990405
-//////////////////////////////////////////////////////////////////////////
-
- /*! used in the class documentation as a header before the list of all
- * related classes
- */
- virtual QCString trRelatedFunctionDocumentation()
- { return "Documentaţia funcţiilor prietene sau înrudite"; }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 0.49-990425
-//////////////////////////////////////////////////////////////////////////
-
- /*! used as the title of the HTML page of a class/struct/union */
- virtual QCString trCompoundReference(const char *clName,
- ClassDef::CompoundType compType,
- bool isTemplate)
- {
- QCString result="Referinţă la ";
- switch(compType)
- {
- case ClassDef::Class: result+="clasa "; break;
- case ClassDef::Struct: result+="structura "; break;
- case ClassDef::Union: result+="uniunea "; break;
- case ClassDef::Interface: result+="interfaţa "; break;
- case ClassDef::Protocol: result+="protocolul "; break;
- case ClassDef::Category: result+="categoria "; break;
- case ClassDef::Exception: result+="excepţia "; break;
- }
- if (isTemplate) result+=" (Template) ";
- result+=(QCString)clName;
-
- return result;
- }
-
- /*! used as the title of the HTML page of a file */
- virtual QCString trFileReference(const char *fileName)
- {
- QCString result="Referinţă la fişierul ";
- result+=fileName;
- return result;
- }
-
- /*! used as the title of the HTML page of a namespace */
- virtual QCString trNamespaceReference(const char *namespaceName)
- {
- QCString result="Referinţă la Namespace-ul ";
- result+=namespaceName;
- return result;
- }
-
- /* these are for the member sections of a class, struct or union */
- virtual QCString trPublicMembers()
- { return "Metode Publice"; }
- virtual QCString trPublicSlots()
- { return "Conectori (slots) Publici"; }
- virtual QCString trSignals()
- { return "Semnale"; }
- virtual QCString trStaticPublicMembers()
- { return "Metode Statice Publice"; }
- virtual QCString trProtectedMembers()
- { return "Metode Protejate"; }
- virtual QCString trProtectedSlots()
- { return "Conectori (slots) Protejaţi"; }
- virtual QCString trStaticProtectedMembers()
- { return "Metode Statice Protejate"; }
- virtual QCString trPrivateMembers()
- { return "Metode Private"; }
- virtual QCString trPrivateSlots()
- { return "Conectori (slots) Privaţi"; }
- virtual QCString trStaticPrivateMembers()
- { return "Metode Statice Private"; }
-
- /*! this function is used to produce a comma-separated list of items.
- * use generateMarker(i) to indicate where item i should be put.
- */
- virtual QCString trWriteList(int numEntries)
- {
- QCString result;
- int i;
- // the inherits list contain `numEntries' classes
- for (i=0;i<numEntries;i++)
- {
- // use generateMarker to generate placeholders for the class links!
- result+=generateMarker(i); // generate marker for entry i in the list
- // (order is left to right)
-
- if (i!=numEntries-1) // not the last entry, so we need a separator
- {
- if (i<numEntries-2) // not the fore last entry
- result+=", ";
- else // the fore last entry
- result+=" ÅŸi ";
- }
- }
- return result;
- }
-
- /*! used in class documentation to produce a list of base classes,
- * if class diagrams are disabled.
- */
- virtual QCString trInheritsList(int numEntries)
- {
- return "MoÅŸteneÅŸte "+trWriteList(numEntries)+".";
- }
-
- /*! used in class documentation to produce a list of super classes,
- * if class diagrams are disabled.
- */
- virtual QCString trInheritedByList(int numEntries)
- {
- return "MoÅŸtenit de "+trWriteList(numEntries)+".";
- }
-
- /*! used in member documentation blocks to produce a list of
- * members that are hidden by this one.
- */
- virtual QCString trReimplementedFromList(int numEntries)
- {
- return "Reimplementat din "+trWriteList(numEntries)+".";
- }
-
- /*! used in member documentation blocks to produce a list of
- * all member that overwrite the implementation of this member.
- */
- virtual QCString trReimplementedInList(int numEntries)
- {
- return "Reimplementat în "+trWriteList(numEntries)+".";
- }
-
- /*! This is put above each page as a link to all members of namespaces. */
- virtual QCString trNamespaceMembers()
- { return "Membrii Namespace-ului"; }
-
- /*! This is an introduction to the page with all namespace members */
- virtual QCString trNamespaceMemberDescription(bool extractAll)
- {
- QCString result="Lista tuturor membrilor ";
- if (!extractAll) result+="documentaţi ";
- result+="din toate namespace-urile, cu legături către ";
-
- if (extractAll)
- result+="documentaţia namespace-ului pentru fiecare membru în parte:";
- else
- result+="namespace-urile de care aparţin:";
- return result;
- }
- /*! This is used in LaTeX as the title of the chapter with the
- * index of all namespaces.
- */
- virtual QCString trNamespaceIndex()
- { return "Indexul Namespace-ului"; }
-
- /*! This is used in LaTeX as the title of the chapter containing
- * the documentation of all namespaces.
- */
- virtual QCString trNamespaceDocumentation()
- { return "Documentaţia Namespace-ului"; }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 0.49-990522
-//////////////////////////////////////////////////////////////////////////
-
- /*! This is used in the documentation before the list of all
- * namespaces in a file.
- */
- virtual QCString trNamespaces()
- { return "Namespace-uri"; }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 0.49-990728
-//////////////////////////////////////////////////////////////////////////
-
- /*! This is put at the bottom of a class documentation page and is
- * followed by a list of files that were used to generate the page.
- */
- virtual QCString trGeneratedFromFiles(ClassDef::CompoundType compType,
- bool single)
- { // here s is one of " Class", " Struct" or " Union"
- // single is true implies a single file
- QCString result=(QCString)"Documentaţia pentru această ";
- switch(compType)
- {
- case ClassDef::Class: result+="clasă"; break;
- case ClassDef::Struct: result+="structură"; break;
- case ClassDef::Union: result+="uniune"; break;
- case ClassDef::Interface: result+="interfaţă"; break;
- case ClassDef::Protocol: result+="protocol"; break;
- case ClassDef::Category: result+="categorie"; break;
- case ClassDef::Exception: result+="excepţie"; break;
- }
- result+=" a fost generată din fişier";
- if (single) result+="ul:"; else result+="ele:";
- return result;
- }
-
- /*! This is in the (quick) index as a link to the alphabetical compound
- * list.
- */
- virtual QCString trAlphabeticalList()
- { return "Listă Alfabetică"; }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 0.49-990901
-//////////////////////////////////////////////////////////////////////////
-
- /*! This is used as the heading text for the retval command. */
- virtual QCString trReturnValues()
- { return "Valori returnate"; }
-
- /*! This is in the (quick) index as a link to the main page (index.html)
- */
- virtual QCString trMainPage()
- { return "Pagina principală"; }
-
- /*! This is used in references to page that are put in the LaTeX
- * documentation. It should be an abbreviation of the word page.
- */
- virtual QCString trPageAbbreviation()
- { return "pg."; }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 0.49-991003
-//////////////////////////////////////////////////////////////////////////
-
- virtual QCString trDefinedAtLineInSourceFile()
- {
- return "Definiţia în linia @0 a fişierului @1.";
- }
- virtual QCString trDefinedInSourceFile()
- {
- return "Definiţia în fişierul @0.";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 0.49-991205
-//////////////////////////////////////////////////////////////////////////
-
- virtual QCString trDeprecated()
- {
- return "Învechită(Deprecated)";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.0.0
-//////////////////////////////////////////////////////////////////////////
-
- /*! this text is put before a collaboration diagram */
- virtual QCString trCollaborationDiagram(const char *clName)
- {
- return (QCString)"Diagrama de relaţii pentru "+clName+":";
- }
- /*! this text is put before an include dependency graph */
- virtual QCString trInclDepGraph(const char *fName)
- {
- return (QCString)"Graful dependenţelor prin incluziune pentru "+fName+":";
- }
- /*! header that is put before the list of constructor/destructors. */
- virtual QCString trConstructorDocumentation()
- {
- return "Documentaţia pentru Constructori şi Destructori";
- }
- /*! Used in the file documentation to point to the corresponding sources. */
- virtual QCString trGotoSourceCode()
- {
- return "Vezi sursele.";
- }
- /*! Used in the file sources to point to the corresponding documentation. */
- virtual QCString trGotoDocumentation()
- {
- return "Vezi documentaţia.";
- }
- /*! Text for the \\pre command */
- virtual QCString trPrecondition()
- {
- return "Precondiţie";
- }
- /*! Text for the \\post command */
- virtual QCString trPostcondition()
- {
- return "Postcondiţie";
- }
- /*! Text for the \\invariant command */
- virtual QCString trInvariant()
- {
- return "Invariant";
- }
- /*! Text shown before a multi-line variable/enum initialization */
- virtual QCString trInitialValue()
- {
- return "Valoarea iniţială:";
- }
- /*! Text used the source code in the file index */
- virtual QCString trCode()
- {
- return "cod";
- }
- virtual QCString trGraphicalHierarchy()
- {
- return "Ierarhia Claselor în mod grafic";
- }
- virtual QCString trGotoGraphicalHierarchy()
- {
- return "Vezi ierarhia claselor în mod grafic";
- }
- virtual QCString trGotoTextualHierarchy()
- {
- return "Vezi ierarhia claselor în mod text";
- }
- virtual QCString trPageIndex()
- {
- return "Indexul Paginilor";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.1.0
-//////////////////////////////////////////////////////////////////////////
-
- virtual QCString trNote()
- {
- return "Notă";
- }
- virtual QCString trPublicTypes()
- {
- return "Tipuri Publice";
- }
- virtual QCString trPublicAttribs()
- {
- if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
- {
- return "Câmpuri de Date";
- }
- else
- {
- return "Atribute Publice";
- }
-
- }
- virtual QCString trStaticPublicAttribs()
- {
- return "Atribute Statice Publice";
- }
- virtual QCString trProtectedTypes()
- {
- return "Tipuri Protejate";
- }
- virtual QCString trProtectedAttribs()
- {
- return "Atribute Protejate";
- }
- virtual QCString trStaticProtectedAttribs()
- {
- return "Atribute Statice Protejate";
- }
- virtual QCString trPrivateTypes()
- {
- return "Tipuri Private";
- }
- virtual QCString trPrivateAttribs()
- {
- return "Atribute Private";
- }
- virtual QCString trStaticPrivateAttribs()
- {
- return "Atribute Statice Private";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.1.3
-//////////////////////////////////////////////////////////////////////////
-
- /*! Used as a marker that is put before a todo item */
- virtual QCString trTodo()
- {
- return "De făcut";
- }
- /*! Used as the header of the todo list */
- virtual QCString trTodoList()
- {
- return "Lista lucrurilor de făcut";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.1.4
-//////////////////////////////////////////////////////////////////////////
-
- virtual QCString trReferencedBy()
- {
- return "Semnalat de";
- }
- virtual QCString trRemarks()
- {
- return "Observaţii";
- }
- virtual QCString trAttention()
- {
- return "Atenţie";
- }
- virtual QCString trInclByDepGraph()
- {
- return "Acest graf arată care fişiere includ, "
- "direct sau indirect, acest fiÅŸier:";
- }
- virtual QCString trSince()
- {
- return "Din";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.1.5
-//////////////////////////////////////////////////////////////////////////
-
- /*! title of the graph legend page */
- virtual QCString trLegendTitle()
- {
- return "Legenda grafului";
- }
- /*! page explaining how the dot graph's should be interpreted */
- virtual QCString trLegendDocs()
- {
- return
- "Această pagină arată modul în care trebuie să interpretaţi "
- "grafurile generate de doxygen.<p>\n"
- "Consideraţi următorul exemplu:\n"
- "\\code\n"
- "/*! Clasă invizibilă, tăiată din cauza depăşirii spaţiului */\n"
- "class Invisible { };\n\n"
- "/*! Altă clasă tăiată, relaţia de moştenire este ascunsă */\n"
- "class Truncated : public Invisible { };\n\n"
- "/* Clasă necomentată în stil doxygen */\n"
- "class Undocumented { };\n\n"
- "/*! Clasă care este moştenită în mod public */\n"
- "class PublicBase : public Truncated { };\n\n"
- "/*! Clasă template */\n"
- "template<class T> class Templ { };\n\n"
- "/*! Clasă care este moştenită în mod protejat */\n"
- "class ProtectedBase { };\n\n"
- "/*! Clasă care este moştenită în mod privat */\n"
- "class PrivateBase { };\n\n"
- "/*! Clasă care este folosită de clasa Inherited */\n"
- "class Used { };\n\n"
- "/*! Superclasă care moşteneşte un număr de alte clase */\n"
- "class Inherited : public PublicBase,\n"
- " protected ProtectedBase,\n"
- " private PrivateBase,\n"
- " public Undocumented,\n"
- " public Templ<int>\n"
- "{\n"
- " private:\n"
- " Used *m_usedClass;\n"
- "};\n"
- "\\endcode\n"
- "Dacă tagul \\c MAX_DOT_GRAPH_HEIGHT din fişierul de configurare "
- "este setat la 200, acesta este graful rezultat:"
- "<p><center><img src=\"graph_legend."+Config_getEnum("DOT_IMAGE_FORMAT")+"\"></center>\n"
- "<p>\n"
- "Căsuţele din partea de sus au următoarea semnificaţie:\n"
- "<ul>\n"
- "<li>O căsuţă neagră reprezintă structura sau clasa pentru care "
- "graful este generat.\n"
- "<li>O căsuţă cu marginea neagră reprezintă o structură sau o clasă documentate.\n"
- "<li>O căsuţă cu marginea gri reprezintă o structură sau o clasă nedocumentate.\n"
- "<li>O căsuţă cu marginea roşie reprezintă o structură sau o clasă documentate, pentru\n"
- "care nu toate relaţiile de moştenire/incluziune sunt arătate. Un graf este "
- "tăiat dacă nu încape în marginile specificate."
- "</ul>\n"
- "Săgeţile au următoarea semnificaţie:\n"
- "<ul>\n"
- "<li>O săgeată de un albastru închis este folosită când avem o relaţie de "
- "moştenire publică între două clase.\n"
- "<li>O săgeată de un verde închis este folosită când avem o moştenire protejată.\n"
- "<li>O săgeată de un roşu închis este folosită când avem o moştenire privată.\n"
- "<li>O săgeată violetă punctată este folosită pentru o clasă conţinută sau folosită "
- "de o altă clasă. Săgeata este marcată cu variabila(e) "
- "prin care este accesibilă clasa sau structura spre care este îndreptată. \n"
- "</ul>\n";
- }
- /*! text for the link to the legend page */
- virtual QCString trLegend()
- {
- return "legenda";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.2.0
-//////////////////////////////////////////////////////////////////////////
-
- /*! Used as a marker that is put before a test item */
- virtual QCString trTest()
- {
- return "Test";
- }
- /*! Used as the header of the test list */
- virtual QCString trTestList()
- {
- return "Listă de teste";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.2.1
-//////////////////////////////////////////////////////////////////////////
-
- /*! Used as a section header for KDE-2 IDL methods */
- virtual QCString trDCOPMethods()
- {
- return "Metode DCOP";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.2.2
-//////////////////////////////////////////////////////////////////////////
-
- /*! Used as a section header for IDL properties */
- virtual QCString trProperties()
- {
- return "Proprietăţi";
- }
- /*! Used as a section header for IDL property documentation */
- virtual QCString trPropertyDocumentation()
- {
- return "Documentaţia Proprietăţilor";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.2.4
-//////////////////////////////////////////////////////////////////////////
-
- /*! Used for Java classes in the summary section of Java packages */
- virtual QCString trClasses()
- {
- if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
- {
- return "Structuri de Date";
- }
- else
- {
- return "Clase";
- }
- }
- /*! Used as the title of a Java package */
- virtual QCString trPackage(const char *name)
- {
- return (QCString)"Pachet "+name;
- }
- /*! Title of the package index page */
- virtual QCString trPackageList()
- {
- return "Lista Pachetelor";
- }
- /*! The description of the package index page */
- virtual QCString trPackageListDescription()
- {
- return "Lista pachetelor, însoţită de scurte explicaţii, acolo unde acestea există:";
- }
- /*! The link name in the Quick links header for each page */
- virtual QCString trPackages()
- {
- return "Pachete";
- }
- /*! Text shown before a multi-line define */
- virtual QCString trDefineValue()
- {
- return "Valoare:";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.2.5
-//////////////////////////////////////////////////////////////////////////
-
- /*! Used as a marker that is put before a \\bug item */
- virtual QCString trBug()
- {
- return "Problema (Bug)";
- }
- /*! Used as the header of the bug list */
- virtual QCString trBugList()
- {
- return "Lista de Probleme (Bugs)";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.2.6
-//////////////////////////////////////////////////////////////////////////
-
- /*! Used as ansicpg for RTF file
- *
- * The following table shows the correlation of Charset name, Charset Value and
- * <pre>
- * Codepage number:
- * Charset Name Charset Value(hex) Codepage number
- * ------------------------------------------------------
- * DEFAULT_CHARSET 1 (x01)
- * SYMBOL_CHARSET 2 (x02)
- * OEM_CHARSET 255 (xFF)
- * ANSI_CHARSET 0 (x00) 1252
- * RUSSIAN_CHARSET 204 (xCC) 1251
- * EE_CHARSET 238 (xEE) 1250
- * GREEK_CHARSET 161 (xA1) 1253
- * TURKISH_CHARSET 162 (xA2) 1254
- * BALTIC_CHARSET 186 (xBA) 1257
- * HEBREW_CHARSET 177 (xB1) 1255
- * ARABIC _CHARSET 178 (xB2) 1256
- * SHIFTJIS_CHARSET 128 (x80) 932
- * HANGEUL_CHARSET 129 (x81) 949
- * GB2313_CHARSET 134 (x86) 936
- * CHINESEBIG5_CHARSET 136 (x88) 950
- * </pre>
- *
- */
- virtual QCString trRTFansicp()
- {
- return "1250"; //EASTEUROPE_CHARSET
- }
-
-
- /*! Used as ansicpg for RTF fcharset
- * \see trRTFansicp() for a table of possible values.
- */
- virtual QCString trRTFCharSet()
- {
- return "238";
- }
-
- /*! Used as header RTF general index */
- virtual QCString trRTFGeneralIndex()
- {
- return "Index";
- }
-
- /*! This is used for translation of the word that will possibly
- * be followed by a single name or by a list of names
- * of the category.
- */
- virtual QCString trClass(bool first_capital, bool singular)
- {
- QCString result((first_capital ? "Clas" : "clas"));
- result+= singular ? "a":"ele";
- return result;
- }
-
- /*! This is used for translation of the word that will possibly
- * be followed by a single name or by a list of names
- * of the category.
- */
- virtual QCString trFile(bool first_capital, bool singular)
- {
- QCString result((first_capital ? "FiÅŸier" : "fiÅŸier"));
- result+= singular ? "ul":"ele";
- return result;
- }
-
- /*! This is used for translation of the word that will possibly
- * be followed by a single name or by a list of names
- * of the category.
- */
- virtual QCString trNamespace(bool first_capital, bool singular)
- {
- QCString result((first_capital ? "Namespace" : "namespace"));
- result+= singular ? "-ul":"-urile";
- return result;
- }
-
- /*! This is used for translation of the word that will possibly
- * be followed by a single name or by a list of names
- * of the category.
- */
- virtual QCString trGroup(bool first_capital, bool singular)
- {
- QCString result((first_capital ? "Grupu" : "grupu"));
- result+= singular ? "l":"rile";
- return result;
- }
-
- /*! This is used for translation of the word that will possibly
- * be followed by a single name or by a list of names
- * of the category.
- */
- virtual QCString trPage(bool first_capital, bool singular)
- {
- QCString result((first_capital ? "Pagin" : "pagin"));
- result+= singular ? "a":"ile";
- return result;
- }
-
- /*! This is used for translation of the word that will possibly
- * be followed by a single name or by a list of names
- * of the category.
- */
- virtual QCString trMember(bool first_capital, bool singular)
- {
- QCString result((first_capital ? "Membr" : "membr"));
- result+= singular ? "ul":"ii";
- return result;
- }
-
- /*! This is used for translation of the word that will possibly
- * be followed by a single name or by a list of names
- * of the category.
- */
- virtual QCString trGlobal(bool first_capital, bool singular)
- {
- QCString result((first_capital ? "Global" : "global"));
- if (!singular) result+="e";
- return result;
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.2.7
-//////////////////////////////////////////////////////////////////////////
-
- /*! This text is generated when the \\author command is used and
- * for the author section in man pages. */
- virtual QCString trAuthor(bool first_capital, bool singular)
- {
- QCString result((first_capital ? "Autor" : "autor"));
- result+= singular ? "ul":"ii";
- return result;
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.2.11
-//////////////////////////////////////////////////////////////////////////
-
- /*! This text is put before the list of members referenced by a member
- */
- virtual QCString trReferences()
- {
- return "Referinţe";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.2.13
-//////////////////////////////////////////////////////////////////////////
-
- /*! used in member documentation blocks to produce a list of
- * members that are implemented by this one.
- */
- virtual QCString trImplementedFromList(int numEntries)
- {
- return "Implementează "+trWriteList(numEntries)+".";
- }
-
- /*! used in member documentation blocks to produce a list of
- * all members that implement this abstract member.
- */
- virtual QCString trImplementedInList(int numEntries)
- {
- return "Implementat în "+trWriteList(numEntries)+".";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.2.16
-//////////////////////////////////////////////////////////////////////////
-
- /*! used in RTF documentation as a heading for the Table
- * of Contents.
- */
- virtual QCString trRTFTableOfContents()
- {
- return "Cuprins";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.2.17
-//////////////////////////////////////////////////////////////////////////
-
- /*! Used as the header of the list of item that have been
- * flagged deprecated
- */
- virtual QCString trDeprecatedList()
- {
- return "Lista elementelor învechite (deprecated)";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.2.18
-//////////////////////////////////////////////////////////////////////////
-
- /*! Used as a header for declaration section of the events found in
- * a C# program
- */
- virtual QCString trEvents()
- {
- return "Evenimente";
- }
- /*! Header used for the documentation section of a class' events. */
- virtual QCString trEventDocumentation()
- {
- return "Documentaţia aferentă evenimentelor";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.3
-//////////////////////////////////////////////////////////////////////////
-
- /*! Used as a heading for a list of Java class types with package scope.
- */
- virtual QCString trPackageTypes()
- {
- return "Tipuri în pachet";
- }
- /*! Used as a heading for a list of Java class functions with package
- * scope.
- */
- virtual QCString trPackageMembers()
- {
- return "Funcţii în pachet";
- }
- /*! Used as a heading for a list of static Java class functions with
- * package scope.
- */
- virtual QCString trStaticPackageMembers()
- {
- return "Funcţii statice în pachet";
- }
- /*! Used as a heading for a list of Java class variables with package
- * scope.
- */
- virtual QCString trPackageAttribs()
- {
- return "Atribute în pachet";
- }
- /*! Used as a heading for a list of static Java class variables with
- * package scope.
- */
- virtual QCString trStaticPackageAttribs()
- {
- return "Atribute statice în pachet";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.3.1
-//////////////////////////////////////////////////////////////////////////
-
- /*! Used in the quick index of a class/file/namespace member list page
- * to link to the unfiltered list of all members.
- */
- virtual QCString trAll()
- {
- return "Toate";
- }
- /*! Put in front of the call graph for a function. */
- virtual QCString trCallGraph()
- {
- return "Graful de apel al acestei funcţii:";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.3.3
-//////////////////////////////////////////////////////////////////////////
-
- /*! When the search engine is enabled this text is put in the header
- * of each page before the field where one can enter the text to search
- * for.
- */
- virtual QCString trSearchForIndex()
- {
- return "Caută";
- }
- /*! This string is used as the title for the page listing the search
- * results.
- */
- virtual QCString trSearchResultsTitle()
- {
- return "Rezultatele căutarii";
- }
- /*! This string is put just before listing the search results. The
- * text can be different depending on the number of documents found.
- * Inside the text you can put the special marker $num to insert
- * the number representing the actual number of search results.
- * The @a numDocuments parameter can be either 0, 1 or 2, where the
- * value 2 represents 2 or more matches. HTML markup is allowed inside
- * the returned string.
- */
- virtual QCString trSearchResults(int numDocuments)
- {
- if (numDocuments==0)
- {
- return "Din păcate nu am găsit nici un document care să corespundă cererii.";
- }
- else if (numDocuments==1)
- {
- return "Am găsit <b>1</b> document corespunzând cererii.";
- }
- else
- {
- return "Am găsit <b>$num</b> documente corespunzând cererii. "
- "Lista documentelor găsite, sortate după relevanţă.";
- }
- }
- /*! This string is put before the list of matched words, for each search
- * result. What follows is the list of words that matched the query.
- */
- virtual QCString trSearchMatches()
- {
- return "Găsite:";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.3.8
-//////////////////////////////////////////////////////////////////////////
-
- /*! This is used in HTML as the title of page with source code for file filename
- */
- virtual QCString trSourceFile(QCString& filename)
- {
- return " Fişierul sursă " + filename;
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.3.9
-//////////////////////////////////////////////////////////////////////////
-
- /*! This is used as the name of the chapter containing the directory
- * hierarchy.
- */
- virtual QCString trDirIndex()
- { return "Ierarhia directoarelor"; }
-
- /*! This is used as the name of the chapter containing the documentation
- * of the directories.
- */
- virtual QCString trDirDocumentation()
- { return "Documentaţia directoarelor"; }
-
- /*! This is used as the title of the directory index and also in the
- * Quick links of a HTML page, to link to the directory hierarchy.
- */
- virtual QCString trDirectories()
- { return "Directoare"; }
-
- /*! This returns a sentences that introduces the directory hierarchy.
- * and the fact that it is sorted alphabetically per level
- */
- virtual QCString trDirDescription()
- { return "Această ierarhie de directoare este sortată în general, "
- "dar nu complet, în ordine alfabetică:";
- }
-
- /*! This returns the title of a directory page. The name of the
- * directory is passed via \a dirName.
- */
- virtual QCString trDirReference(const char *dirName)
- {
- QCString result="Director-referinţă "; result+=dirName;
- return result;
- }
-
- /*! This returns the word directory with or without starting capital
- * (\a first_capital) and in sigular or plural form (\a singular).
- */
- virtual QCString trDir(bool first_capital, bool singular)
- {
- QCString result((first_capital ? "Directo" : "directo"));
- if (singular) result+="r"; else result="are";
- return result;
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.4.1
-//////////////////////////////////////////////////////////////////////////
-
- /*! This text is added to the documentation when the \\overload command
- * is used for a overloaded function.
- */
- virtual QCString trOverloadText()
- {
- return "Aceasta este o funcţie membră suprascrisă. "
- "Diferă de funcţia de mai sus "
- "doar prin argumentele acceptate.";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.4.6
-//////////////////////////////////////////////////////////////////////////
-
- /*! This is used to introduce a caller (or called-by) graph */
- virtual QCString trCallerGraph()
- {
- return "Graful de apeluri pentru această funcţie:";
- }
-
- /*! This is used in the documentation of a file/namespace before the list
- * of documentation blocks for enumeration values
- */
- virtual QCString trEnumerationValueDocumentation()
- { return "Documentaţia Enumeratorilor"; }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.5.4 (mainly for Fortran)
-//////////////////////////////////////////////////////////////////////////
-
- /*! header that is put before the list of member subprograms (Fortran). */
- virtual QCString trMemberFunctionDocumentationFortran()
- { return "Documentaţia Funcţiei Membre/Subrutinei"; }
-
- /*! This is put above each page as a link to the list of annotated data types (Fortran). */
- virtual QCString trCompoundListFortran()
- { return "Lista Tipurilor de Date"; }
-
- /*! This is put above each page as a link to all members of compounds (Fortran). */
- virtual QCString trCompoundMembersFortran()
- { return "Câmpuri de date"; }
-
- /*! This is an introduction to the annotated compound list (Fortran). */
- virtual QCString trCompoundListDescriptionFortran()
- { return "Tipurile de date, cu scurte descrieri:"; }
-
- /*! This is an introduction to the page with all data types (Fortran). */
- virtual QCString trCompoundMembersDescriptionFortran(bool extractAll)
- {
- QCString result="Lista tuturor tipurilor de date ";
- if (!extractAll)
- {
- result+="documentate ";
- }
- result+=" cu legături către ";
- if (!extractAll)
- {
- result+="documentaţia structurii de date pentru fiecare membru";
- }
- else
- {
- result+="tipurile de date de care aparţin:";
- }
- return result;
- }
-
- /*! This is used in LaTeX as the title of the chapter with the
- * annotated compound index (Fortran).
- */
- virtual QCString trCompoundIndexFortran()
- { return "Indexul Tipurilor de Date"; }
-
- /*! This is used in LaTeX as the title of the chapter containing
- * the documentation of all data types (Fortran).
- */
- virtual QCString trTypeDocumentation()
- { return "Documentaţia Tipurilor de Date"; }
-
- /*! This is used in the documentation of a file as a header before the
- * list of (global) subprograms (Fortran).
- */
- virtual QCString trSubprograms()
- { return "Funcţii/Subrutine"; }
-
- /*! This is used in the documentation of a file/namespace before the list
- * of documentation blocks for subprograms (Fortran)
- */
- virtual QCString trSubprogramDocumentation()
- { return "Documentaţia Funcţiilor/Subrutinelor"; }
-
- /*! This is used in the documentation of a file/namespace/group before
- * the list of links to documented compounds (Fortran)
- */
- virtual QCString trDataTypes()
- { return "Tipuri de Date"; }
-
- /*! used as the title of page containing all the index of all modules (Fortran). */
- virtual QCString trModulesList()
- { return "Lista Modulelor"; }
-
- /*! used as an introduction to the modules list (Fortran) */
- virtual QCString trModulesListDescription(bool extractAll)
- {
- QCString result="Lista tuturor modulelor ";
- if (!extractAll) result+="documentate ";
- result+="cu scurte descrieri:";
- return result;
- }
-
- /*! used as the title of the HTML page of a module/type (Fortran) */
- virtual QCString trCompoundReferenceFortran(const char *clName,
- ClassDef::CompoundType compType,
- bool isTemplate)
- {
- QCString result="Referinţă la ";
- switch(compType)
- {
- case ClassDef::Class: result+="Modulul "; break;
- case ClassDef::Struct: result+="Tipul "; break;
- case ClassDef::Union: result+="Uniunea "; break;
- case ClassDef::Interface: result+="Interfaţa "; break;
- case ClassDef::Protocol: result+="Protocolul "; break;
- case ClassDef::Category: result+="Categoria "; break;
- case ClassDef::Exception: result+="Excepţia "; break;
- }
- if (isTemplate) result+="(Template) ";
- result+=(QCString)clName;
- return result;
- }
- /*! used as the title of the HTML page of a module (Fortran) */
- virtual QCString trModuleReference(const char *namespaceName)
- {
- QCString result="Referinţă la Modulul ";
- result += namespaceName;
- return result;
- }
-
- /*! This is put above each page as a link to all members of modules. (Fortran) */
- virtual QCString trModulesMembers()
- { return "Membrii Modulului"; }
-
- /*! This is an introduction to the page with all modules members (Fortran) */
- virtual QCString trModulesMemberDescription(bool extractAll)
- {
- QCString result="Lista tuturor membrilor ";
- if (!extractAll) result+="documentaţi ai ";
- result+="modulului cu legături către ";
- if (extractAll)
- {
- result+="documentaţia modulului pentru fiecare membru:";
- }
- else
- {
- result+="modulele de care aparţin:";
- }
- return result;
- }
-
- /*! This is used in LaTeX as the title of the chapter with the
- * index of all modules (Fortran).
- */
- virtual QCString trModulesIndex()
- { return "Indexul Modulelor"; }
-
- /*! This is used for translation of the word that will possibly
- * be followed by a single name or by a list of names
- * of the category.
- */
- virtual QCString trModule(bool first_capital, bool singular)
- {
- QCString result((first_capital ? "Modul" : "modul"));
- if (singular) result+="ul";
- else result += "ele";
- return result;
- }
- /*! This is put at the bottom of a module documentation page and is
- * followed by a list of files that were used to generate the page.
- */
- virtual QCString trGeneratedFromFilesFortran(ClassDef::CompoundType compType,
- bool single)
- { // here s is one of " Module", " Struct" or " Union"
- // single is true implies a single file
- QCString result=(QCString)"Documentaţia ";
- switch(compType)
- {
- case ClassDef::Class: result+="modulului"; break;
- case ClassDef::Struct: result+="tipului"; break;
- case ClassDef::Union: result+="uniunii"; break;
- case ClassDef::Interface: result+="interfeţei"; break;
- case ClassDef::Protocol: result+="protocolului"; break;
- case ClassDef::Category: result+="categoriei"; break;
- case ClassDef::Exception: result+="excepţiei"; break;
- }
- result+=" a fost generată din următo";
- if (single) result+="rul fiÅŸier:"; else result+="arele fiÅŸiere:";
- return result;
- }
- /*! This is used for translation of the word that will possibly
- * be followed by a single name or by a list of names
- * of the category.
- */
- virtual QCString trType(bool first_capital, bool singular)
- {
- QCString result((first_capital ? "Tip" : "tip"));
- if (singular) result+="ul";
- else result += "urile";
- return result;
- }
- /*! This is used for translation of the word that will possibly
- * be followed by a single name or by a list of names
- * of the category.
- */
- virtual QCString trSubprogram(bool first_capital, bool singular)
- {
- QCString result((first_capital ? "Subprogram" : "subprogram"));
- if (singular) result+="ul";
- else result += "urile";
- return result;
- }
-
- /*! C# Type Constraint list */
- virtual QCString trTypeConstraints()
- {
- return "Constrângerile de Tip";
- }
-
-};
-
-#endif
diff --git a/trunk/src/translator_ru.h b/trunk/src/translator_ru.h
deleted file mode 100644
index e7f7d95..0000000
--- a/trunk/src/translator_ru.h
+++ /dev/null
@@ -1,1846 +0,0 @@
-/******************************************************************************
- *
- *
- *
- * Copyright (C) 1997-2012 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.
- */
-
-/*
- *
- * Nickolay Semyonov
- * Andrey V. Stolyarov released Feb 14, 2001
- * Alexandr V. Chelpanov <cav@cryptopro.ru> released Sep 25, 2004
- * БлагодарноÑти: Vitaly A. Repin <vitaly@radio.hop.stu.neva.ru>,
- * Михаил Глушенков <bbman@mail.ru>
- */
-
-#ifndef TRANSLATOR_RU_H
-#define TRANSLATOR_RU_H
-
-class TranslatorRussian : public TranslatorAdapter_1_7_5
-{
- public:
- /*! Used for identification of the language. */
- virtual QCString idLanguage()
- { return "russian"; }
-
- /* Used to get the command(s) for the language support. */
- virtual QCString latexLanguageSupportCommand()
- {
- return "\\usepackage[T2A]{fontenc}\n\\usepackage[russian]{babel}\n";
- }
-
- /*! return the language charset. This will be used for the HTML output */
- virtual QCString idLanguageCharset()
- {
- return "utf-8";
- }
-
- // --- Language translation methods -------------------
-
- /*! used in the compound documentation before a list of related functions. */
- virtual QCString trRelatedFunctions()
- { return "ОтноÑÑщиеÑÑ Ðº клаÑÑу функции"; }
-
- /*! subscript for the related functions. */
- virtual QCString trRelatedSubscript()
- { return "(не члены клаÑÑа)"; }
-
- /*! header that is put before the detailed description of files, classes and namespaces. */
- virtual QCString trDetailedDescription()
- { return "Подробное опиÑание"; }
-
- /*! header that is put before the list of typedefs. */
- virtual QCString trMemberTypedefDocumentation()
- { return "ÐžÐ¿Ñ€ÐµÐ´ÐµÐ»ÐµÐ½Ð¸Ñ Ñ‚Ð¸Ð¿Ð¾Ð²"; }
-
- /*! header that is put before the list of enumerations. */
- virtual QCString trMemberEnumerationDocumentation()
- { return "ПеречиÑлениÑ"; }
-
- /*! header that is put before the list of member functions. */
- virtual QCString trMemberFunctionDocumentation()
- { return "Методы"; }
-
- /*! header that is put before the list of member attributes. */
- virtual QCString trMemberDataDocumentation()
- {
- if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
- {
- return "ПолÑ";
- }
- else
- {
- return "Данные клаÑÑа";
- }
- }
-
- /*! this is the text of a link put after brief descriptions. */
- virtual QCString trMore()
- { return "Подробнее..."; }
-
- /*! put in the class documentation */
- /* Dosn't use when optimization for C is on. */
- virtual QCString trListOfAllMembers()
- {
- return "Полный ÑпиÑок членов клаÑÑа";
- }
-
- /*! used as the title of the "list of all members" page of a class */
- /* Dosn't use when optimization for C is on. */
- virtual QCString trMemberList()
- {
- return "CпиÑок членов клаÑÑа";
- }
-
- /*! this is the first part of a sentence that is followed by a class name */
- /* Dosn't use when optimization for C is on. */
- virtual QCString trThisIsTheListOfAllMembers()
- { return "Полный ÑпиÑок членов клаÑÑа "; }
-
- /*! this is the remainder of the sentence after the class name */
- /* Dosn't use when optimization for C is on. */
- virtual QCString trIncludingInheritedMembers()
- { return ", Ð²ÐºÐ»ÑŽÑ‡Ð°Ñ Ð½Ð°Ñледуемые из базового клаÑÑа"; }
-
- /*! this is put at the author sections at the bottom of man pages.
- * parameter s is name of the project name.
- */
- virtual QCString trGeneratedAutomatically(const char *s)
- { QCString result="ÐвтоматичеÑки Ñоздано Doxygen";
- if (s) result+=QCString(" Ð´Ð»Ñ ")+s;
- result+=" из иÑходного текÑта.";
- return result;
- }
-
- /*! put after an enum name in the list of all members */
- virtual QCString trEnumName()
- { return "перечиÑление"; }
-
- /*! put after an enum value in the list of all members */
- virtual QCString trEnumValue()
- { return "Ñлементы перечиÑлениÑ"; }
-
- /*! put after an undocumented member in the list of all members */
- virtual QCString trDefinedIn()
- { return "определено в"; }
-
- // quick reference sections
-
- /*! This is put above each page as a link to the list of all groups of
- * compounds or files (see the \\group command).
- */
- virtual QCString trModules()
- { return "Группы"; }
-
- /*! This is put above each page as a link to the class hierarchy */
- virtual QCString trClassHierarchy()
- { return "Ð˜ÐµÑ€Ð°Ñ€Ñ…Ð¸Ñ ÐºÐ»Ð°ÑÑов"; }
-
- /*! This is put above each page as a link to the list of annotated classes */
- virtual QCString trCompoundList()
- {
- if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
- {
- return "Структуры данных";
- }
- else
- {
- return "КлаÑÑÑ‹";
- }
- }
-
- /*! This is put above each page as a link to the list of documented files */
- virtual QCString trFileList()
- { return "Файлы"; }
-
- /*! This is put above each page as a link to all members of compounds. */
- virtual QCString trCompoundMembers()
- {
- if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
- {
- return "ÐŸÐ¾Ð»Ñ Ñтруктур";
- }
- else
- {
- return "Члены клаÑÑов";
- }
- }
-
- /*! This is put above each page as a link to all members of files. */
- /*??*/
- virtual QCString trFileMembers()
- {
- return "СпиÑок членов вÑех файлов";
- }
-
- /*! This is put above each page as a link to all related pages. */
- virtual QCString trRelatedPages()
- /* ?? Вариант перевода "См. также: " более удачный, но не в заголовке,
- как в данном Ñлучае. */
- { return "ОпиÑаниÑ"; }
-
- /*! This is put above each page as a link to all examples. */
- virtual QCString trExamples()
- { return "Примеры"; }
-
- /*! This is put above each page as a link to the search engine. */
- virtual QCString trSearch()
- { return "ПоиÑк"; }
-
- /*! This is an introduction to the class hierarchy. */
- virtual QCString trClassHierarchyDescription()
- { return "Ð˜ÐµÑ€Ð°Ñ€Ñ…Ð¸Ñ ÐºÐ»Ð°ÑÑов."; }
-
- /*! This is an introduction to the list with all files. */
- virtual QCString trFileListDescription(bool extractAll)
- {
- QCString result="Полный ÑпиÑок ";
- if (!extractAll) result+="документированных ";
- result+="файлов.";
- return result;
- }
-
- /*! This is an introduction to the annotated compound list. */
- virtual QCString trCompoundListDescription()
- {
- if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
- {
- return "Структуры данных Ñ Ð¸Ñ… кратким опиÑанием.";
- }
- else
- {
- return "КлаÑÑÑ‹ Ñ Ð¸Ñ… кратким опиÑанием.";
- }
- }
-
- /*! This is an introduction to the page with all class members. */
- virtual QCString trCompoundMembersDescription(bool extractAll)
- {
- QCString result="СпиÑок вÑех ";
- if(!extractAll) result+="документированных ";
- if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
- result+="членов Ñтруктур данных Ñо ÑÑылками на ";
- else
- result+="членов клаÑÑов Ñо ÑÑылками на ";
- if(!extractAll)
- {
- if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
- result+="документацию по Ñтруктуре Ð´Ð»Ñ ÐºÐ°Ð¶Ð´Ð¾Ð³Ð¾ члена.";
- else
- result+="документацию по клаÑÑу Ð´Ð»Ñ ÐºÐ°Ð¶Ð´Ð¾Ð³Ð¾ члена.";
- }
- else
- {
- if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
- result += "Ñтруктуры";
- else
- result += "клаÑÑÑ‹";
- result+=", к которым они принадлежат.";
- }
- return result;
- }
-
- /*! This is an introduction to the page with all file members. */
- virtual QCString trFileMembersDescription(bool extractAll)
- {
- QCString result="СпиÑок вÑех ";
- if (!extractAll) result+="документированных ";
-
- if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
- {
- result+="функций, переменных, макроопределений, "
- "перечиÑлений и определений типов";
- }
- else
- {
- result+="членов файлов ";
- }
- result+=" Ñо ÑÑылками на ";
- if (extractAll)
- result+="файлы, к которым они принадлежат.";
- else
- result+="документацию.";
- return result;
- }
-
- /*! This is an introduction to the page with the list of all examples */
- virtual QCString trExamplesDescription()
- { return "Полный ÑпиÑок примеров."; }
-
- /*! This is an introduction to the page with the list of related pages */
- virtual QCString trRelatedPagesDescription()
- { return "Полный ÑпиÑок дополнительных опиÑаний."; }
-
- /*! This is an introduction to the page with the list of class/file groups */
- virtual QCString trModulesDescription()
- { return "Полный ÑпиÑок групп."; }
-
- // index titles (the project name is prepended for these)
-
-
- /*! This is used in HTML as the title of index.html. */
- virtual QCString trDocumentation()
- { return "ДокументациÑ"; }
-
- /*! This is used in LaTeX as the title of the chapter with the
- * index of all groups.
- */
- virtual QCString trModuleIndex()
- { return "Ðлфавитный указатель групп"; }
-
- /*! This is used in LaTeX as the title of the chapter with the
- * class hierarchy.
- */
- virtual QCString trHierarchicalIndex()
- { return "ИерархичеÑкий ÑпиÑок клаÑÑов"; }
-
- /*! This is used in LaTeX as the title of the chapter with the
- * annotated compound index.
- */
- virtual QCString trCompoundIndex()
- {
- if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
- {
- return "Ðлфавитный указатель Ñтруктур данных";
- }
- else
- {
- return "Ðлфавитный указатель клаÑÑов";
- }
- }
-
- /*! This is used in LaTeX as the title of the chapter with the
- * list of all files.
- */
- virtual QCString trFileIndex()
- { return "СпиÑок файлов"; }
-
- /*! This is used in LaTeX as the title of the chapter containing
- * the documentation of all groups.
- */
- virtual QCString trModuleDocumentation()
- { return "Группы"; }
-
- /*! This is used in LaTeX as the title of the chapter containing
- * the documentation of all classes, structs and unions.
- */
- virtual QCString trClassDocumentation()
- {
- if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
- {
- return "Структуры данных";
- }
- else
- {
- return "КлаÑÑÑ‹";
- }
- }
-
- /*! This is used in LaTeX as the title of the chapter containing
- * the documentation of all files.
- */
- virtual QCString trFileDocumentation()
- { return "Файлы"; }
-
- /*! This is used in LaTeX as the title of the chapter containing
- * the documentation of all examples.
- */
- virtual QCString trExampleDocumentation()
- { return "Примеры"; }
-
- /*! This is used in LaTeX as the title of the chapter containing
- * the documentation of all related pages.
- */
- virtual QCString trPageDocumentation()
- { return "ТематичеÑкие опиÑаниÑ"; }
-
- /*! This is used in LaTeX as the title of the document */
- virtual QCString trReferenceManual()
- { return "Оглавление"; }
-
- /*! This is used in the documentation of a file as a header before the
- * list of defines
- */
- virtual QCString trDefines()
- { return "МакроÑÑ‹"; }
-
- /*! This is used in the documentation of a file as a header before the
- * list of function prototypes
- */
- virtual QCString trFuncProtos()
- { return "Прототипы функций"; }
-
- /*! This is used in the documentation of a file as a header before the
- * list of typedefs
- */
- virtual QCString trTypedefs()
- { return "ÐžÐ¿Ñ€ÐµÐ´ÐµÐ»ÐµÐ½Ð¸Ñ Ñ‚Ð¸Ð¿Ð¾Ð²"; }
-
- /*! This is used in the documentation of a file as a header before the
- * list of enumerations
- */
- virtual QCString trEnumerations()
- { return "ПеречиÑлениÑ"; }
-
- /*! This is used in the documentation of a file as a header before the
- * list of (global) functions
- */
- virtual QCString trFunctions()
- { return "Функции"; }
-
- /*! This is used in the documentation of a file as a header before the
- * list of (global) variables
- */
- virtual QCString trVariables()
- { return "Переменные"; }
-
- /*! This is used in the documentation of a file as a header before the
- * list of (global) variables
- */
- virtual QCString trEnumerationValues()
- { return "Элементы перечиÑлений"; }
-
- /*! This is used in the documentation of a file before the list of
- * documentation blocks for defines
- */
- virtual QCString trDefineDocumentation()
- { return "МакроÑÑ‹"; }
-
- /*! This is used in the documentation of a file/namespace before the list
- * of documentation blocks for function prototypes
- */
- virtual QCString trFunctionPrototypeDocumentation()
- { return "Прототипы функций"; }
-
- /*! This is used in the documentation of a file/namespace before the list
- * of documentation blocks for typedefs
- */
- virtual QCString trTypedefDocumentation()
- { return "Типы"; }
-
- /*! This is used in the documentation of a file/namespace before the list
- * of documentation blocks for enumeration types
- */
- virtual QCString trEnumerationTypeDocumentation()
- { return "ПеречиÑлениÑ"; }
-
- /*! This is used in the documentation of a file/namespace before the list
- * of documentation blocks for functions
- */
- virtual QCString trFunctionDocumentation()
- { return "Функции"; }
-
- /*! This is used in the documentation of a file/namespace before the list
- * of documentation blocks for variables
- */
- virtual QCString trVariableDocumentation()
- { return "Переменные"; }
-
- /*! This is used in the documentation of a file/namespace/group before
- * the list of links to documented compounds
- */
- virtual QCString trCompounds()
- {
- if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
- {
- return "Структуры данных";
- }
- else
- {
- return "КлаÑÑÑ‹";
- }
-
- }
-
- /*! This is used in the documentation of a group before the list of
- * links to documented files
- */
- /*! This is used in the standard footer of each page and indicates when
- * the page was generated
- */
- virtual QCString trGeneratedAt(const char *date,const char *projName)
- {
- QCString result="Ð”Ð¾ÐºÑƒÐ¼ÐµÐ½Ñ‚Ð°Ñ†Ð¸Ñ ";
- if (projName) result+=QCString("по ")+projName;
- result+=QCString(". ПоÑледние изменениÑ: ")+date;
- result+=". Создано ÑиÑтемой";
- return result;
- }
- /*! This is part of the sentence used in the standard footer of each page.
- */
- virtual QCString trWrittenBy()
- {
- return "Ðвтор:";
- }
-
- /*! this text is put before a class diagram */
- virtual QCString trClassDiagram(const char *clName)
- {
- return QCString("Граф наÑледованиÑ:")+clName+":";
- }
-
- /*! this text is generated when the \\internal command is used. */
- virtual QCString trForInternalUseOnly()
- { return "Только Ð´Ð»Ñ Ð²Ð½ÑƒÑ‚Ñ€ÐµÐ½Ð½ÐµÐ³Ð¾ иÑпользованиÑ"; }
-
- /*! this text is generated when the \\warning command is used. */
- virtual QCString trWarning()
- { return "ПредупреждениÑ"; }
-
- /*! this text is generated when the \\version command is used. */
- virtual QCString trVersion()
- { return "ВерÑиÑ"; }
-
- /*! this text is generated when the \\date command is used. */
- virtual QCString trDate()
- { return "Дата"; }
-
- /*! this text is generated when the \\return command is used. */
- virtual QCString trReturns()
- { return "Возвращает"; }
-
- /*! this text is generated when the \\sa command is used. */
- virtual QCString trSeeAlso()
- { return "См. также"; }
-
- /*! this text is generated when the \\param command is used. */
- virtual QCString trParameters()
- { return "Ðргументы"; }
-
- /*! this text is generated when the \\exception command is used. */
- virtual QCString trExceptions()
- { return "ИÑключениÑ"; }
-
- /*! this text is used in the title page of a LaTeX document. */
- virtual QCString trGeneratedBy()
- { return "Создано ÑиÑтемой"; }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 0.49-990307
-//////////////////////////////////////////////////////////////////////////
-
- /*! used as the title of page containing all the index of all namespaces. */
- virtual QCString trNamespaceList()
- { return "ПроÑтранÑтва имен"; }
-
- /*! used as an introduction to the namespace list */
- virtual QCString trNamespaceListDescription(bool extractAll)
- {
- QCString result="Полный ÑпиÑок ";
- if (!extractAll) result+="документированных ";
- result+="проÑтранÑтв имен.";
- return result;
- }
-
- /*! used in the class documentation as a header before the list of all
- * friends of a class
- */
- virtual QCString trFriends()
- { return "ДрузьÑ"; }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 0.49-990405
-//////////////////////////////////////////////////////////////////////////
-
- /*! used in the class documentation as a header before the list of all
- * related classes
- */
- virtual QCString trRelatedFunctionDocumentation()
- { return "Ð”Ð¾ÐºÑƒÐ¼ÐµÐ½Ñ‚Ð°Ñ†Ð¸Ñ Ð¿Ð¾ друзьÑм клаÑÑа и функциÑм, отноноÑÑщимÑÑ"
- " к клаÑÑу"; }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 0.49-990425
-//////////////////////////////////////////////////////////////////////////
-
- /*! used as the title of the HTML page of a class/struct/union */
- virtual QCString trCompoundReference(const char *clName,
- ClassDef::CompoundType compType,
- bool isTemplate)
- {
- QCString result;
- if (isTemplate)
- {
- result="Шаблон ";
- switch(compType)
- {
- case ClassDef::Class: result+="клаÑÑа"; break;
- case ClassDef::Struct: result+="Ñтруктуры"; break;
- case ClassDef::Union: result+="объединениÑ"; break;
- case ClassDef::Interface: result+="интерфейÑа"; break;
- case ClassDef::Protocol: result+="протокола"; break;
- case ClassDef::Category: result+="категории"; break;
- case ClassDef::Exception: result+="иÑключениÑ"; break;
- }
- }
- else
- {
- switch(compType)
- {
- case ClassDef::Class: result+="КлаÑÑ"; break;
- case ClassDef::Struct: result+="Структура"; break;
- case ClassDef::Union: result+="Объединение"; break;
- case ClassDef::Interface: result+="ИнтерфейÑ"; break;
- case ClassDef::Protocol: result+="Протокол"; break;
- case ClassDef::Category: result+="КатегориÑ"; break;
- case ClassDef::Exception: result+="ИÑключение"; break;
- }
- }
- result+=" ";
- return result+clName;
- }
-
- /*! used as the title of the HTML page of a file */
- virtual QCString trFileReference(const char *fileName)
- {
- return QCString("Файл ")+fileName;
- }
-
- /*! used as the title of the HTML page of a namespace */
- virtual QCString trNamespaceReference(const char *namespaceName)
- {
- return QCString("ПроÑтранÑтво имен ")+namespaceName;
- }
-
- virtual QCString trPublicMembers()
- { return "Открытые члены"; }
- virtual QCString trPublicSlots()
- { return "Открытые Ñлоты"; }
- virtual QCString trSignals()
- { return "Сигналы"; }
- virtual QCString trStaticPublicMembers()
- { return "Открытые ÑтатичеÑкие члены"; }
- virtual QCString trProtectedMembers()
- { return "Защищенные члены"; }
- virtual QCString trProtectedSlots()
- { return "Защищенные Ñлоты"; }
- virtual QCString trStaticProtectedMembers()
- { return "Защищенные ÑтатичеÑкие члены"; }
- virtual QCString trPrivateMembers()
- { return "Закрытые члены"; }
- virtual QCString trPrivateSlots()
- { return "Закрытые Ñлоты"; }
- virtual QCString trStaticPrivateMembers()
- { return "Закрытые ÑтатичеÑкие члены"; }
-
- /*! this function is used to produce a comma-separated list of items.
- * use generateMarker(i) to indicate where item i should be put.
- */
- virtual QCString trWriteList(int numEntries)
- {
- QCString result;
- int i;
- // the inherits list contain `numEntries' classes
- for (i=0;i<numEntries;i++)
- {
- // use generateMarker to generate placeholders for the class links!
- result+=generateMarker(i); // generate marker for entry i in the list
- // (order is left to right)
-
- if (i!=numEntries-1) // not the last entry, so we need a separator
- {
- if (i<numEntries-2) // not the fore last entry
- result+=", ";
- else // the fore last entry
- result+=" и ";
- }
- }
- return result;
- }
-
- /*! used in class documentation to produce a list of base classes,
- * if class diagrams are disabled.
- */
- virtual QCString trInheritsList(int numEntries)
- {
- return "Базовые клаÑÑÑ‹:"+trWriteList(numEntries)+".";
- }
-
- /*! used in class documentation to produce a list of super classes,
- * if class diagrams are disabled.
- */
- virtual QCString trInheritedByList(int numEntries)
- {
- return "Производные клаÑÑÑ‹:"+trWriteList(numEntries)+".";
- }
-
- /*! used in member documentation blocks to produce a list of
- * members that are hidden by this one.
- */
- virtual QCString trReimplementedFromList(int numEntries)
- {
- QCString result="ПереопределÑет метод";
- if(numEntries>1)
- result+="ы предков";
- else
- result+=" предка";
- return result+" "+trWriteList(numEntries)+".";
- }
-
- /*! used in member documentation blocks to produce a list of
- * all member that overwrite the implementation of this member.
- */
- virtual QCString trReimplementedInList(int numEntries)
- {
- return "ПереопределÑетÑÑ Ð² "+trWriteList(numEntries)+".";
- }
-
- /*! This is put above each page as a link to all members of namespaces. */
- virtual QCString trNamespaceMembers()
- { return "Члены проÑтранÑтв имен"; }
-
- /*! This is an introduction to the page with all namespace members */
- virtual QCString trNamespaceMemberDescription(bool extractAll)
- {
- QCString result="Полный ÑпиÑок ";
- if (!extractAll) result+="документированных ";
- result+="членов проÑтанÑтв имен.";
- return result;
- }
-
- /*! This is used in LaTeX as the title of the chapter with the
- * index of all namespaces.
- */
- virtual QCString trNamespaceIndex()
- { return "Ðлфавитный указатель проÑтранÑтв имен"; }
-
- /*! This is used in LaTeX as the title of the chapter containing
- * the documentation of all namespaces.
- */
- virtual QCString trNamespaceDocumentation()
- { return "ПроÑтранÑтва имен"; }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 0.49-990522
-//////////////////////////////////////////////////////////////////////////
-
- /*! This is used in the documentation before the list of all
- * namespaces in a file.
- */
- virtual QCString trNamespaces()
- { return "ПроÑтранÑтва имен"; }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 0.49-990728
-//////////////////////////////////////////////////////////////////////////
-
- /*! This is put at the bottom of a class documentation page and is
- * followed by a list of files that were used to generate the page.
- */
- virtual QCString trGeneratedFromFiles(ClassDef::CompoundType compType,
- bool single)
- { // here s is one of " Class", " Struct" or " Union"
- // single is true implies a single file
- QCString result=QCString("ОбъÑÐ²Ð»ÐµÐ½Ð¸Ñ Ð¸ опиÑÐ°Ð½Ð¸Ñ Ñ‡Ð»ÐµÐ½Ð¾Ð² ");
- switch(compType)
- {
- case ClassDef::Class: result+="клаÑÑ";
- if (single) result+="а"; else result+="ов";
- break;
- case ClassDef::Struct: result+="Ñтруктур";
- if (single) result+="Ñ‹";
- break;
- case ClassDef::Union: result+="объединени";
- if (single) result+="Ñ"; else result+="й";
- break;
- case ClassDef::Interface: result+="интерфейÑ";
- if (single) result+="а"; else result+="ов";
- break;
- case ClassDef::Protocol: result+="протокол";
- if (single) result+="а"; else result+="ов";
- break;
- case ClassDef::Category: result+="категори";
- if (single) result+="и"; else result+="й";
- break;
- case ClassDef::Exception: result+="иÑключени";
- if (single) result+="Ñ"; else result+="й";
- break;
- }
- result+=" находÑÑ‚ÑÑ Ð² файл";
- if (single) result+="е:"; else result+="ах:";
- return result;
- }
-
- /*! This is in the (quick) index as a link to the alphabetical compound
- * list.
- */
- virtual QCString trAlphabeticalList()
- { return "Ðлфавитный указатель"; }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 0.49-990901
-//////////////////////////////////////////////////////////////////////////
-
- /*! This is used as the heading text for the retval command. */
- virtual QCString trReturnValues()
- { return "Возвращаемые значениÑ"; }
-
- /*! This is in the (quick) index as a link to the main page (index.html)
- */
- virtual QCString trMainPage()
- { return "Ð¢Ð¸Ñ‚ÑƒÐ»ÑŒÐ½Ð°Ñ Ñтраница"; }
-
- /*! This is used in references to page that are put in the LaTeX
- * documentation. It should be an abbreviation of the word page.
- */
- virtual QCString trPageAbbreviation()
- { return "ÑÑ‚Ñ€."; }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 0.49-991106
-//////////////////////////////////////////////////////////////////////////
-
- virtual QCString trDefinedAtLineInSourceFile()
- {
- return "См. определение в файле @1 Ñтрока @0";
- }
- virtual QCString trDefinedInSourceFile()
- {
- return "См. определение в файле @0";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 0.49-991205
-//////////////////////////////////////////////////////////////////////////
-
- virtual QCString trDeprecated()
- {
- return "УÑÑ‚.";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.0.0
-//////////////////////////////////////////////////////////////////////////
-
- /*! this text is put before a collaboration diagram */
- virtual QCString trCollaborationDiagram(const char *clName)
- {
- return (QCString)"Граф ÑвÑзей клаÑÑа "+clName+":";
- }
- /*! this text is put before an include dependency graph */
- virtual QCString trInclDepGraph(const char *fName)
- {
- return (QCString)"Граф включаемых заголовочных файлов Ð´Ð»Ñ "+fName+":";
- }
- /*! header that is put before the list of constructor/destructors. */
- virtual QCString trConstructorDocumentation()
- {
- return "КонÑтруктор(Ñ‹)";
- }
- /*! Used in the file documentation to point to the corresponding sources. */
- virtual QCString trGotoSourceCode()
- {
- return "См. иÑходные текÑÑ‚Ñ‹.";
- }
- /*! Used in the file sources to point to the corresponding documentation. */
- virtual QCString trGotoDocumentation()
- {
- return "См. документацию.";
- }
- /*! Text for the \\pre command */
- virtual QCString trPrecondition()
- {
- return "ПредуÑловие";
- }
- /*! Text for the \\post command */
- virtual QCString trPostcondition()
- {
- return "ПоÑтуÑловие";
- }
- /*! Text for the \\invariant command */
- virtual QCString trInvariant()
- {
- return "Инвариант";
- }
- /*! Text shown before a multi-line variable/enum initialization */
- virtual QCString trInitialValue()
- {
- return "Инициализатор";
- }
- /*! Text used the source code in the file index */
- virtual QCString trCode()
- {
- return "ИÑходные текÑÑ‚Ñ‹";
- }
- virtual QCString trGraphicalHierarchy()
- {
- return "Ð˜ÐµÑ€Ð°Ñ€Ñ…Ð¸Ñ ÐºÐ»Ð°ÑÑов. ГрафичеÑкий вид.";
- }
- virtual QCString trGotoGraphicalHierarchy()
- {
- return "Ñм. графичеÑкий вид.";
- }
- virtual QCString trGotoTextualHierarchy()
- {
- return "Ñм. текÑтовый вид.";
- }
- virtual QCString trPageIndex()
- {
- return "Ðлфавитный указатель тематичеÑких опиÑаний";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.1.0
-//////////////////////////////////////////////////////////////////////////
-
- virtual QCString trNote()
- {
- return "Заметки";
- }
- virtual QCString trPublicTypes()
- {
- return "Открытые типы";
- }
- virtual QCString trPublicAttribs()
- {
- if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
- {
- return "ÐŸÐ¾Ð»Ñ Ð´Ð°Ð½Ð½Ñ‹Ñ…";
- }
- else
- {
- return "Открытые атрибуты";
- }
- }
- virtual QCString trStaticPublicAttribs()
- {
- return "СтатичеÑкие открытые данные";
- }
- virtual QCString trProtectedTypes()
- {
- return "Защищенные типы";
- }
- virtual QCString trProtectedAttribs()
- {
- return "Защищенные данные";
- }
- virtual QCString trStaticProtectedAttribs()
- {
- return "СтатичеÑкие защищенные данные";
- }
- virtual QCString trPrivateTypes()
- {
- return "Закрытые типы";
- }
- virtual QCString trPrivateAttribs()
- {
- return "Закрытые данные";
- }
- virtual QCString trStaticPrivateAttribs()
- {
- return "Закрытые ÑтатичеÑкие данные";
- }
-
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.1.3
-//////////////////////////////////////////////////////////////////////////
-
- /*! Used as a marker that is put before a todo item */
- virtual QCString trTodo()
- /*??*/
- {
- return "Ðеобходимо Ñделать";
- }
- /*! Used as the header of the todo list */
- virtual QCString trTodoList()
- /*??*/
- {
- return "СпиÑок задач";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.1.4
-//////////////////////////////////////////////////////////////////////////
-
- virtual QCString trReferencedBy()
- {
- return "ИÑпользуетÑÑ Ð²";
- }
- virtual QCString trRemarks()
- {
- return "Прим.";
- }
- virtual QCString trAttention()
- {
- return "Внимание";
- }
- virtual QCString trInclByDepGraph()
- {
- return "Граф файлов, в которые включаетÑÑ Ñтот файл:";
- }
- virtual QCString trSince()
- /*??*/
- {
- return "ÐÐ°Ñ‡Ð¸Ð½Ð°Ñ Ñ";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.1.5
-//////////////////////////////////////////////////////////////////////////
-
- /*! title of the graph legend page */
- virtual QCString trLegendTitle()
- {
- return "Легенда";
- }
- /*! page explaining how the dot graph's should be interpreted */
- virtual QCString trLegendDocs()
- {
- return
- "ОбозначениÑ, иÑпользуемые в графах.<p>\n"
- "РаÑÑмотрим Ñледующий пример:\n"
- "\\code\n"
- "/*! Ðевидимый клаÑÑ Ð¸Ð·-за уÑÐµÑ‡ÐµÐ½Ð¸Ñ */\n"
- "class Invisible { };\n\n"
- "/*! УÑеченный клаÑÑ, отношение наÑÐ»ÐµÐ´Ð¾Ð²Ð°Ð½Ð¸Ñ Ñкрыто */\n"
- "class Truncated : public Invisible { };\n\n"
- "/* Ðедокументированный клаÑÑ */\n"
- "class Undocumented { };\n\n"
- "/*! Открытое наÑледование */\n"
- "class PublicBase : public Truncated { };\n\n"
- "/*! Шаблон клаÑÑа */\n"
- "template<class T> class Templ {};\n\n"
- "/*! Защищенное наÑледование */\n"
- "class ProtectedBase { };\n\n"
- "/*! Закрытое наÑледование */\n"
- "class PrivateBase { };\n\n"
- "/*! КлаÑÑ, иÑпользуемый клаÑÑом Inherited */\n"
- "class Used { };\n\n"
- "/*! КлаÑÑ, порожденный от других клаÑÑов */\n"
- "class Inherited : public PublicBase,\n"
- " protected ProtectedBase,\n"
- " private PrivateBase,\n"
- " public Undocumented,\n"
- " public Templ<int>\n"
- "{\n"
- " private:\n"
- " Used *m_usedClass;\n"
- "};\n"
- "\\endcode\n"
- "ЕÑли \\c MAX_DOT_GRAPH_HEIGHT в конфигурационном файле "
- "уÑтановлен в 240, получитÑÑ Ñледующий граф:"
- "<p><center><img src=\"graph_legend."+Config_getEnum("DOT_IMAGE_FORMAT")+"\"></center>\n"
- "<p>\n"
- "ПрÑмоугольники в Ñтом графе имеют Ñледующее значение:\n"
- "<ul>\n"
- "<li>Заполненный черный прÑмоугольник предÑтавлÑет Ñтруктуру или клаÑÑ, "
- "Ð´Ð»Ñ ÐºÐ¾Ñ‚Ð¾Ñ€Ð¾Ð³Ð¾ Ñоздан граф.\n"
- "<li>ПрÑмоугольник Ñ Ñ‡ÐµÑ€Ð½Ð¾Ð¹ границей обозначает документированную Ñтруктуру или клаÑÑ.\n"
- "<li>ПрÑмоугольник Ñ Ñерой границей обозначает недокументированную Ñтруктуру или клаÑÑ.\n"
- "<li>ПрÑмоугольник Ñ ÐºÑ€Ð°Ñной границей обозначает документированную Ñтруктуру или клаÑÑ, Ð´Ð»Ñ ÐºÐ¾Ñ‚Ð¾Ñ€Ð¾Ð³Ð¾\n"
- " не вÑе Ð¾Ñ‚Ð½Ð¾ÑˆÐµÐ½Ð¸Ñ Ð½Ð°ÑледованиÑ/ÑÐ¾Ð´ÐµÑ€Ð¶Ð°Ð½Ð¸Ñ Ð¿Ð¾ÐºÐ°Ð·Ð°Ð½Ñ‹. Граф уÑечен, "
- "еÑли он не помеÑтилÑÑ Ð² указанных границах.\n"
- "</ul>\n"
- "Стрелки имеют Ñледующее значение:\n"
- "<ul>\n"
- "<li>Темно-ÑинÑÑ Ñтрелка иÑпользуетÑÑ Ð´Ð»Ñ Ð¸Ð·Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð¸Ñ Ð¾Ñ‚Ð½Ð¾ÑˆÐµÐ½Ð¸Ñ Ð¾Ñ‚ÐºÑ€Ñ‹Ñ‚Ð¾Ð³Ð¾ наÑÐ»ÐµÐ´Ð¾Ð²Ð°Ð½Ð¸Ñ "
- "между Ð´Ð²ÑƒÐ¼Ñ ÐºÐ»Ð°ÑÑами.\n"
- "<li>Темно-Ð·ÐµÐ»ÐµÐ½Ð°Ñ Ñтрелка иÑпользуетÑÑ Ð¿Ñ€Ð¸ защищенном наÑледовании.\n"
- "<li>Темно-краÑÐ½Ð°Ñ Ñтрелка иÑпользуетÑÑ Ð¿Ñ€Ð¸ закрытом наÑледовании.\n"
- "<li>Ð¤Ð¸Ð¾Ð»ÐµÑ‚Ð¾Ð²Ð°Ñ Ñтрелка иÑпользуетÑÑ, еÑли клаÑÑ ÑодержитÑÑ Ð²"
- "другом клаÑе или иÑпользуетÑÑ Ð´Ñ€ÑƒÐ³Ð¸Ð¼ клаÑÑом."
- "Со Ñтрелкой указываетÑÑ Ð¿ÐµÑ€ÐµÐ¼ÐµÐ½Ð½Ð°Ñ, "
- "через которую доÑтупен указываемый клаÑÑ Ð¸Ð»Ð¸ Ñтруктура. \n"
- "<li>Ð–ÐµÐ»Ñ‚Ð°Ñ Ñтрелка иÑпользуетÑÑ Ð´Ð»Ñ ÑвÑзи подÑтановки шаблона и "
- "шаблона, на оÑнове которого Ñта подÑтановка выполнена. С шаблоном"
- "указываетÑÑ Ð¿Ð°Ñ€Ð°Ð¼ÐµÑ‚Ñ€ подÑтановки.\n"
- "</ul>\n";
- }
- /*! text for the link to the legend page */
- virtual QCString trLegend()
- {
- return "Ñм. легенду";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.2.0
-//////////////////////////////////////////////////////////////////////////
-
- /*! Used as a marker that is put before a test item */
- virtual QCString trTest()
- {
- return "ТеÑÑ‚";
- }
- /*! Used as the header of the test list */
- virtual QCString trTestList()
- {
- return "СпиÑок теÑтов";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.2.1
-//////////////////////////////////////////////////////////////////////////
-
- /*! Used as a section header for KDE-2 IDL methods */
- virtual QCString trDCOPMethods()
- {
- return "DCOP Методы";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.2.2
-//////////////////////////////////////////////////////////////////////////
-
- /*! Used as a section header for IDL properties */
- virtual QCString trProperties()
- {
- return "СвойÑтва";
- }
- /*! Used as a section header for IDL property documentation */
- virtual QCString trPropertyDocumentation()
- {
- return "Полный ÑпиÑок ÑвойÑтв";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.2.4
-//////////////////////////////////////////////////////////////////////////
-
- /*! Used for Java classes in the summary section of Java packages */
- virtual QCString trClasses()
- {
- if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
- {
- return "Структуры данных";
- }
- else
- {
- return "КлаÑÑÑ‹";
- }
- }
- /*! Used as the title of a Java package */
- virtual QCString trPackage(const char *name)
- {
- return QCString("Пакет ")+name;
- }
- /*! Title of the package index page */
- virtual QCString trPackageList()
- {
- return "Полный ÑпиÑок пакетов ";
- }
- /*! The description of the package index page */
- virtual QCString trPackageListDescription()
- {
- return "Полный ÑпиÑок документированных пакетов.";
- }
- /*! The link name in the Quick links header for each page */
- virtual QCString trPackages()
- {
- return "Пакеты";
- }
- /*! Text shown before a multi-line define */
- virtual QCString trDefineValue()
- {
- return "Макроопределение:";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.2.5
-//////////////////////////////////////////////////////////////////////////
-
- /*! Used as a marker that is put before a \\bug item */
- virtual QCString trBug()
- {
- return "Ошибка";
- }
- /*! Used as the header of the bug list */
- virtual QCString trBugList()
- {
- return "Ошибки";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.2.6
-//////////////////////////////////////////////////////////////////////////
- /*! Used as ansicpg for RTF file */
- virtual QCString trRTFansicp()
- {
- return "1251";
- }
- /*! Used as ansicpg for RTF fcharset */
- virtual QCString trRTFCharSet()
- {
- return "204";
- }
- /*! Used as header RTF general index */
- virtual QCString trRTFGeneralIndex()
- {
- return "Ðлфавитный указатель";
- }
-
- /*! This is used for translation of the word that will possibly
- * be followed by a single name or by a list of names
- * of the category.
- */
- virtual QCString trClass(bool first_capital, bool singular)
- {
- if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
- {
- QCString result((first_capital ? "Структуры данных" : "Ñтруктуры данных"));
- return result;
- }
- else
- {
- QCString result((first_capital ? "КлаÑÑ" : "клаÑÑ"));
- if(!singular) result+="Ñ‹";
- return result;
- }
- }
-
- /*! This is used for translation of the word that will possibly
- * be followed by a single name or by a list of names
- * of the category.
- */
- virtual QCString trFile(bool first_capital, bool singular)
- {
- QCString result((first_capital ? "Файл" : "файл"));
- if (!singular) result+="Ñ‹";
- return result;
- }
-
- /*! This is used for translation of the word that will possibly
- * be followed by a single name or by a list of names
- * of the category.
- */
- virtual QCString trNamespace(bool first_capital, bool singular)
- {
- QCString result((first_capital ? "ПроÑтранÑтв" : "проÑтранÑтв"));
- result+=(singular?"о имен":"а имен");
- return result;
- }
-
- /*! This is used for translation of the word that will possibly
- * be followed by a single name or by a list of names
- * of the category.
- */
- virtual QCString trGroup(bool first_capital, bool singular)
- {
- QCString result((first_capital ? "Групп" : "групп"));
- result+=(singular ? "а" : "ы");
- return result;
- }
-
- /*! This is used for translation of the word that will possibly
- * be followed by a single name or by a list of names
- * of the category.
- */
- virtual QCString trPage(bool first_capital, bool singular)
- {
- QCString result((first_capital ? "Страниц" : "Ñтраниц"));
- result+=(singular ? "а" : "ы");
- return result;
- }
-
- /*! This is used for translation of the word that will possibly
- * be followed by a single name or by a list of names
- * of the category.
- */
- virtual QCString trMember(bool first_capital, bool singular)
- {
- QCString result((first_capital ? "Член" : "член"));
- if (!singular) result+="Ñ‹";
- return result;
- }
-
- /*! This is used for translation of the word that will possibly
- * be followed by a single name or by a list of names
- * of the category.
- */
- virtual QCString trGlobal(bool first_capital, bool singular)
- {
- QCString result((first_capital ? "Глобальны" : "глобальны"));
- result+=(singular ? "й" : "е");
- return result;
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.2.7
-//////////////////////////////////////////////////////////////////////////
-
- /*! This text is generated when the \\author command is used and
- * for the author section in man pages. */
- virtual QCString trAuthor(bool first_capital, bool singular)
- {
- QCString result((first_capital ? "Ðвтор" : "автор"));
- if (!singular) result+="Ñ‹";
- return result;
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.2.11
-//////////////////////////////////////////////////////////////////////////
-
- /*! This text is put before the list of members referenced by a member
- */
- virtual QCString trReferences()
- {
- return "ПерекреÑтные ÑÑылки";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.2.13
-//////////////////////////////////////////////////////////////////////////
-
- /*! used in member documentation blocks to produce a list of
- * members that are implemented by this one.
- */
- virtual QCString trImplementedFromList(int numEntries)
- {
- return "Замещает "+trWriteList(numEntries)+".";
- }
-
- /*! used in member documentation blocks to produce a list of
- * all members that implementation this member.
- */
- virtual QCString trImplementedInList(int numEntries)
- {
- return "ЗамещаетÑÑ Ð² "+trWriteList(numEntries)+".";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.2.16
-//////////////////////////////////////////////////////////////////////////
-
- /*! used in RTF documentation as a heading for the Table
- * of Contents.
- */
- virtual QCString trRTFTableOfContents()
- {
- return "Оглавление";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.2.17
-//////////////////////////////////////////////////////////////////////////
-
- /*! Used as the header of the list of item that have been
- * flagged deprecated
- */
- virtual QCString trDeprecatedList()
- {
- return "СпиÑок уÑтаревших определений и опиÑаний";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.2.18
-//////////////////////////////////////////////////////////////////////////
-
- /*! Used as a header for declaration section of the events found in
- * a C# program
- */
- virtual QCString trEvents()
- {
- return "СобытиÑ";
- }
- /*! Header used for the documentation section of a class' events. */
- virtual QCString trEventDocumentation()
- {
- return "CобытиÑ";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.3
-//////////////////////////////////////////////////////////////////////////
-
- /*! Used as a heading for a list of Java class types with package scope.
- */
- virtual QCString trPackageTypes()
- {
- return "Типы Ñ Ð¾Ð±Ð»Ð°Ñтью видимоÑти пакета";
- }
- /*! Used as a heading for a list of Java class functions with package
- * scope.
- */
- virtual QCString trPackageMembers()
- {
- return "Функции Ñ Ð¾Ð±Ð»Ð°Ñтью видимоÑти пакета";
- }
- /*! Used as a heading for a list of static Java class functions with
- * package scope.
- */
- virtual QCString trStaticPackageMembers()
- {
- return "СтатичеÑкие функции Ñ Ð¾Ð±Ð»Ð°Ñтью видимоÑти пакета";
- }
- /*! Used as a heading for a list of Java class variables with package
- * scope.
- */
- virtual QCString trPackageAttribs()
- {
- return "Переменные Ñ Ð¾Ð±Ð»Ð°Ñтью видимоÑти пакета";
- }
- /*! Used as a heading for a list of static Java class variables with
- * package scope.
- */
- virtual QCString trStaticPackageAttribs()
- {
- return "СтатичеÑкие переменные Ñ Ð¾Ð±Ð»Ð°Ñтью видимоÑти пакета";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.3.1
-//////////////////////////////////////////////////////////////////////////
-
- /*! Used in the quick index of a class/file/namespace member list page
- * to link to the unfiltered list of all members.
- */
- virtual QCString trAll()
- {
- return "Указатель";
- }
- /*! Put in front of the call graph for a function. */
- virtual QCString trCallGraph()
- {
- return "Граф вызовов:";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.3.3
-//////////////////////////////////////////////////////////////////////////
-
- /*! When the search engine is enabled this text is put in the header
- * of each page before the field where one can enter the text to search
- * for.
- */
- virtual QCString trSearchForIndex()
- {
- return "ПоиÑк";
- }
- /*! This string is used as the title for the page listing the search
- * results.
- */
- virtual QCString trSearchResultsTitle()
- {
- return "Результаты поиÑка";
- }
- /*! This string is put just before listing the search results. The
- * text can be different depending on the number of documents found.
- * Inside the text you can put the special marker $num to insert
- * the number representing the actual number of search results.
- * The @a numDocuments parameter can be either 0, 1 or 2, where the
- * value 2 represents 2 or more matches. HTML markup is allowed inside
- * the returned string.
- */
- virtual QCString trSearchResults(int numDocuments)
- {
- if (numDocuments==0)
- {
- return "К Ñожалению, по Вашему запроÑу ничего не найдено.";
- }
- else if( numDocuments == 1 )
- {
- return "Ðайден 1 документ.";
- }
- else
- {
- return "Ðайден(о) <b>$num</b> документ(ов). "
- "Документы отÑортированы по релевантноÑти.";
- }
- }
- /*! This string is put before the list of matched words, for each search
- * result. What follows is the list of words that matched the query.
- */
- virtual QCString trSearchMatches()
- {
- return "Ðайдено:";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.3.8
-//////////////////////////////////////////////////////////////////////////
-
- /*! This is used in HTML as the title of page with source code for file filename
- */
- virtual QCString trSourceFile(QCString& filename)
- {
- return "ИÑходный файл " + filename;
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.3.9
-//////////////////////////////////////////////////////////////////////////
-
- /*! This is used as the name of the chapter containing the directory
- * hierarchy.
- */
- virtual QCString trDirIndex()
- { return "Дерево директорий"; }
-
- /*! This is used as the name of the chapter containing the documentation
- * of the directories.
- */
- virtual QCString trDirDocumentation()
- { return "Директории"; }
-
- /*! This is used as the title of the directory index and also in the
- * Quick links of a HTML page, to link to the directory hierarchy.
- */
- virtual QCString trDirectories()
- { return "Ðлфавитный указатель директорий"; }
-
- /*! This returns a sentences that introduces the directory hierarchy.
- * and the fact that it is sorted alphabetically per level
- */
- virtual QCString trDirDescription()
- { return "Дерево директорий"; }
-
- /*! This returns the title of a directory page. The name of the
- * directory is passed via \a dirName.
- */
- virtual QCString trDirReference(const char *dirName)
- { QCString result=QCString("Содержание директории ")+ dirName; return result; }
-
- /*! This returns the word directory with or without starting capital
- * (\a first_capital) and in sigular or plural form (\a singular).
- */
- virtual QCString trDir(bool first_capital, bool singular)
- {
- QCString result((first_capital ? "Директори" : "директори"));
- if (singular) result+="Ñ"; else result+="и";
- return result;
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.4.1
-//////////////////////////////////////////////////////////////////////////
-
- /*! This text is added to the documentation when the \\overload command
- * is used for a overloaded function.
- */
- virtual QCString trOverloadText()
- {
- return "Эта Ñ„ÑƒÐ½ÐºÑ†Ð¸Ñ Ð¿ÐµÑ€ÐµÐ³Ñ€ÑƒÐ¶ÐµÐ½Ð° и предоÑтавлÑетÑÑ Ð¸Ñключительно "
- "Ð´Ð»Ñ ÑƒÐ´Ð¾Ð±Ñтва иÑпользованиÑ. Она отличаетÑÑ Ð¾Ñ‚ вышеупомÑнутой "
- "только фактичеÑкими аргументами.";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.4.6
-//////////////////////////////////////////////////////////////////////////
-
- /*! This is used to introduce a caller (or called-by) graph */
- virtual QCString trCallerGraph()
- {
- return "Граф вызова функции:";
- }
-
- /*! This is used in the documentation of a file/namespace before the list
- * of documentation blocks for enumeration values
- */
- virtual QCString trEnumerationValueDocumentation()
- { return "Элементы перечиÑлений"; }
-
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.5.4 (mainly for Fortran)
-//////////////////////////////////////////////////////////////////////////
- // ПроÑтите переводчика, уже лет 20 не пиÑал на фортране...
- // Любые Ð·Ð°Ð¼ÐµÑ‡Ð°Ð½Ð¸Ñ Ð¿Ñ€Ð¸Ð¼Ñƒ Ñ Ð±Ð»Ð°Ð³Ð¾Ð´Ð°Ñ€Ð½Ð¾Ñтью.
-
- /*! header that is put before the list of member subprograms (Fortran). */
- virtual QCString trMemberFunctionDocumentationFortran()
- { return "Функции/подпрограммы"; }
-
- /*! This is put above each page as a link to the list of annotated data types (Fortran). */
- virtual QCString trCompoundListFortran()
- { return "Типы данных"; }
-
- /*! This is put above each page as a link to all members of compounds (Fortran). */
- virtual QCString trCompoundMembersFortran()
- { return "ÐŸÐ¾Ð»Ñ Ð´Ð°Ð½Ð½Ñ‹Ñ…"; }
-
- /*! This is an introduction to the annotated compound list (Fortran). */
- virtual QCString trCompoundListDescriptionFortran()
- { return "Ðннотированный ÑпиÑок типов данных:"; }
-
- /*! This is an introduction to the page with all data types (Fortran). */
- virtual QCString trCompoundMembersDescriptionFortran(bool extractAll)
- {
- QCString result="СпиÑок вÑех ";
- if (!extractAll)
- {
- result+="документированных ";
- }
- result+="членов типа Ñо ÑÑылками ";
- if (!extractAll)
- {
- result+="на документацию Ð´Ð»Ñ ÐºÐ°Ð¶Ð´Ð¾Ð³Ð¾ члена:";
- }
- else
- {
- result+="на Ñодержащую Ñтруктуру:";
- }
- return result;
- }
-
- /*! This is used in LaTeX as the title of the chapter with the
- * annotated compound index (Fortran).
- */
- virtual QCString trCompoundIndexFortran()
- { return "Типы данных"; }
-
- /*! This is used in LaTeX as the title of the chapter containing
- * the documentation of all data types (Fortran).
- */
- virtual QCString trTypeDocumentation()
- { return "Оглавление типов данных"; }
-
- /*! This is used in the documentation of a file as a header before the
- * list of (global) subprograms (Fortran).
- */
- virtual QCString trSubprograms()
- { return "Функции/подпрограммы"; }
-
- /*! This is used in the documentation of a file/namespace before the list
- * of documentation blocks for subprograms (Fortran)
- */
- virtual QCString trSubprogramDocumentation()
- { return "Функции/подпрограммы"; }
-
- /*! This is used in the documentation of a file/namespace/group before
- * the list of links to documented compounds (Fortran)
- */
- virtual QCString trDataTypes()
- { return "Типы данных"; }
-
- /*! used as the title of page containing all the index of all modules (Fortran). */
- virtual QCString trModulesList()
- { return "Указатель модулей"; }
-
- /*! used as an introduction to the modules list (Fortran) */
- virtual QCString trModulesListDescription(bool extractAll)
- {
- QCString result="Ðннотированный ÑпиÑок";
- if (!extractAll) result+="документированных ";
- result+="модулей:";
- return result;
- }
-
- /*! used as the title of the HTML page of a module/type (Fortran) */
- virtual QCString trCompoundReferenceFortran(const char *clName,
- ClassDef::CompoundType compType,
- bool isTemplate)
- {
- QCString result=(QCString)clName;
- if (isTemplate)
- {
- switch(compType)
- {
- case ClassDef::Class: result+=" Модуль"; break;
- case ClassDef::Struct: result+=" Тип"; break;
- case ClassDef::Union: result+=" Объединение"; break;
- case ClassDef::Interface: result+=" ИнтерфейÑ"; break;
- case ClassDef::Protocol: result+=" Протокол"; break;
- case ClassDef::Category: result+=" КатегориÑ"; break;
- case ClassDef::Exception: result+=" ИÑключение"; break;
- }
- }
- else
- {
- if (isTemplate) result+=" Шаблон ";
- switch(compType)
- {
- case ClassDef::Class: result+="модулÑ"; break;
- case ClassDef::Struct: result+="типа"; break;
- case ClassDef::Union: result+="объединениÑ"; break;
- case ClassDef::Interface: result+="интерфейÑа"; break;
- case ClassDef::Protocol: result+="протокола"; break;
- case ClassDef::Category: result+="категории"; break;
- case ClassDef::Exception: result+="иÑключениÑ"; break;
- }
- }
- return result;
- }
- /*! used as the title of the HTML page of a module (Fortran) */
- virtual QCString trModuleReference(const char *namespaceName)
- {
- return QCString("Модуль ") + namespaceName;
- }
-
- /*! This is put above each page as a link to all members of modules. (Fortran) */
- virtual QCString trModulesMembers()
- { return "Члены модулÑ"; }
-
- /*! This is an introduction to the page with all modules members (Fortran) */
- virtual QCString trModulesMemberDescription(bool extractAll)
- {
- QCString result="СпиÑок вÑех ";
- if (!extractAll) result+="документированных ";
- result+="модулей Ñо ÑÑылками ";
- if (extractAll)
- {
- result+="на документацию Ð´Ð»Ñ ÐºÐ°Ð¶Ð´Ð¾Ð³Ð¾ члена:";
- }
- else
- {
- result+="на модули, их Ñодержащие:";
- }
- return result;
- }
-
- /*! This is used in LaTeX as the title of the chapter with the
- * index of all modules (Fortran).
- */
- virtual QCString trModulesIndex()
- { return "Указатель модулей"; }
-
- /*! This is used for translation of the word that will possibly
- * be followed by a single name or by a list of names
- * of the category.
- */
- virtual QCString trModule(bool first_capital, bool singular)
- {
- QCString result((first_capital ? "Модул" : "модул"));
- if (singular) result+="ь"; else result+="и";
- return result;
- }
- /*! This is put at the bottom of a module documentation page and is
- * followed by a list of files that were used to generate the page.
- */
- virtual QCString trGeneratedFromFilesFortran(ClassDef::CompoundType compType,
- bool single)
- { // here s is one of " Module", " Struct" or " Union"
- // single is true implies a single file
- QCString result=(QCString)"Ð”Ð¾ÐºÑƒÐ¼ÐµÐ½Ñ‚Ð°Ñ†Ð¸Ñ Ð¿Ð¾ ";
- switch(compType)
- {
- case ClassDef::Class: result+="модулю"; break;
- case ClassDef::Struct: result+="типу"; break;
- case ClassDef::Union: result+="объединению"; break;
- case ClassDef::Interface: result+="интерфейÑу"; break;
- case ClassDef::Protocol: result+="протоколу"; break;
- case ClassDef::Category: result+="кетегории"; break;
- case ClassDef::Exception: result+="иÑключению"; break;
- }
- result+=" Ñгенерирована на оÑнове Ñледующ";
- if (single) result+="его файла:"; else result+="их файлов:";
- return result;
- }
- /*! This is used for translation of the word that will possibly
- * be followed by a single name or by a list of names
- * of the category.
- */
- virtual QCString trType(bool first_capital, bool singular)
- {
- QCString result((first_capital ? "Тип" : "тип"));
- if (!singular) result+="Ñ‹";
- return result;
- }
- /*! This is used for translation of the word that will possibly
- * be followed by a single name or by a list of names
- * of the category.
- */
- virtual QCString trSubprogram(bool first_capital, bool singular)
- {
- QCString result((first_capital ? "Подпрограмм" : "подпрограмм"));
- if (singular) result+="а"; else result+="ы";
- return result;
- }
-
- /*! C# Type Constraint list */
- virtual QCString trTypeConstraints()
- {
- return "СоглаÑование типов";
- }
-//////////////////////////////////////////////////////////////////////////
-// new since 1.6.0 (mainly for the new search engine)
-//////////////////////////////////////////////////////////////////////////
-
- /*! directory relation for \a name */
- virtual QCString trDirRelation(const char *name)
- {
- return QCString(name)+" СвÑзь";
- }
-
- /*! Loading message shown when loading search results */
- virtual QCString trLoading()
- {
- return "Загрузка...";
- }
-
- /*! Label used for search results in the global namespace */
- virtual QCString trGlobalNamespace()
- {
- return "Глобальное проÑтранÑтво имён";
- }
-
- /*! Message shown while searching */
- virtual QCString trSearching()
- {
- return "ПоиÑк...";
- }
-
- /*! Text shown when no search results are found */
- virtual QCString trNoMatches()
- {
- return "Ðе найдено";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.6.3 (missing items for the directory pages)
-//////////////////////////////////////////////////////////////////////////
-
- /*! introduction text for the directory dependency graph */
- virtual QCString trDirDependency(const char *name)
- {
- return (QCString)"Диаграмма каталогов Ð´Ð»Ñ "+name;
- }
-
- /*! when clicking a directory dependency label, a page with a
- * table is shown. The heading for the first column mentions the
- * source file that has a relation to another file.
- */
- virtual QCString trFileIn(const char *name)
- {
- return (QCString)"Файл в "+name;
- }
-
- /*! when clicking a directory dependency label, a page with a
- * table is shown. The heading for the second column mentions the
- * destination file that is included.
- */
- virtual QCString trIncludesFileIn(const char *name)
- {
- return (QCString)"Включает файл в "+name;
- }
-
- /** Compiles a date string.
- * @param year Year in 4 digits
- * @param month Month of the year: 1=January
- * @param day Day of the Month: 1..31
- * @param dayOfWeek Day of the week: 1=Monday..7=Sunday
- * @param hour Hour of the day: 0..23
- * @param minutes Minutes in the hour: 0..59
- * @param seconds Seconds within the minute: 0..59
- * @param includeTime Include time in the result string?
- */
- virtual QCString trDateTime(int year,int month,int day,int dayOfWeek,
- int hour,int minutes,int seconds,
- bool includeTime)
- {
- static const char *days[] = { "Пн","Ð’Ñ‚","Ср","Чт","Пт","Сб","Ð’Ñ" };
- static const char *months[] = { "Янв","Фев","Мар","Ðпр","Май","Июн","Июл","Ðвг","Сен","Окт","ÐоÑ","Дек" };
- QCString sdate;
- sdate.sprintf("%s %d %s %d",days[dayOfWeek-1],day,months[month-1],year);
- if (includeTime)
- {
- QCString stime;
- stime.sprintf(" %.2d:%.2d:%.2d",hour,minutes,seconds);
- sdate+=stime;
- }
- return sdate;
- }
-};
-
-#endif
diff --git a/trunk/src/translator_sc.h b/trunk/src/translator_sc.h
deleted file mode 100644
index 6555cf5..0000000
--- a/trunk/src/translator_sc.h
+++ /dev/null
@@ -1,1805 +0,0 @@
-/******************************************************************************
- *
- *
- *
- * Copyright (C) 1997-2012 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.
- *
- */
-
-#ifndef TRANSLATOR_SC_H
-#define TRANSLATOR_SC_H
-
-/*!
- When defining a translator class for the new language, follow
- the description in the documentation. One of the steps says
- that you should copy the translator_en.h (this) file to your
- translator_xx.h new file. Your new language should use the
- Translator class as the base class. This means that you need to
- implement exactly the same (pure virtual) methods as the
- TranslatorEnglish does. Because of this, it is a good idea to
- start with the copy of TranslatorEnglish and replace the strings
- one by one.
-
- It is not necessary to include "translator.h" or
- "translator_adapter.h" here. The files are included in the
- language.cpp correctly. Not including any of the mentioned
- files frees the maintainer from thinking about whether the
- first, the second, or both files should be included or not, and
- why. This holds namely for localized translators because their
- base class is changed occasionaly to adapter classes when the
- Translator class changes the interface, or back to the
- Translator class (by the local maintainer) when the localized
- translator is made up-to-date again.
-*/
-class TranslatorSerbianCyrilic : public TranslatorAdapter_1_6_0
-{
- public:
-
- // --- Language control methods -------------------
-
- /*! Used for identification of the language. The identification
- * should not be translated. It should be replaced by the name
- * of the language in English using lower-case characters only
- * (e.g. "czech", "japanese", "russian", etc.). It should be equal to
- * the identification used in language.cpp.
- */
- virtual QCString idLanguage()
- { return "serbiancyr"; }
-
- /*! Used to get the LaTeX command(s) for the language support.
- * This method should return string with commands that switch
- * LaTeX to the desired language. For example
- * <pre>"\\usepackage[german]{babel}\n"
- * </pre>
- * or
- * <pre>"\\usepackage{polski}\n"
- * "\\usepackage[latin2]{inputenc}\n"
- * "\\usepackage[T1]{fontenc}\n"
- * </pre>
- *
- * The English LaTeX does not use such commands. Because of this
- * the empty string is returned in this implementation.
- */
- virtual QCString latexLanguageSupportCommand()
- {
- return "";
- }
-
- /*! return the language charset. This will be used for the HTML output */
- virtual QCString idLanguageCharset()
- {
- return "utf-8";
- }
-
- // --- Language translation methods -------------------
-
- /*! used in the compound documentation before a list of related functions. */
- virtual QCString trRelatedFunctions()
- { return "Повезане функције"; }
-
- /*! subscript for the related functions. */
- virtual QCString trRelatedSubscript()
- { return "(Ðапомињемо да ово ниÑу функције чланице.)"; }
-
- /*! header that is put before the detailed description of files, classes and namespaces. */
- virtual QCString trDetailedDescription()
- { return "Опширније"; }
-
- /*! header that is put before the list of typedefs. */
- virtual QCString trMemberTypedefDocumentation()
- { return "Документација дефиниције типа"; }
-
- /*! header that is put before the list of enumerations. */
- virtual QCString trMemberEnumerationDocumentation()
- { return "Документација члана набрајања"; }
-
- /*! header that is put before the list of member functions. */
- virtual QCString trMemberFunctionDocumentation()
- { return "Документација функције чланице"; }
-
- /*! header that is put before the list of member attributes. */
- virtual QCString trMemberDataDocumentation()
- {
- if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
- {
- return "Документација поља";
- }
- else
- {
- return "Документација атрибута";
- }
- }
-
- /*! this is the text of a link put after brief descriptions. */
- virtual QCString trMore()
- { return "Још..."; }
-
- /*! put in the class documentation */
- virtual QCString trListOfAllMembers()
- { return "СпиÑак Ñвих чланова."; }
-
- /*! used as the title of the "list of all members" page of a class */
- virtual QCString trMemberList()
- { return "СпиÑак чланова"; }
-
- /*! this is the first part of a sentence that is followed by a class name */
- virtual QCString trThisIsTheListOfAllMembers()
- { return "Ово је ÑпиÑак Ñвих чланова од "; }
-
- /*! this is the remainder of the sentence after the class name */
- virtual QCString trIncludingInheritedMembers()
- { return ", укључујући Ñве наÑлеђене чланове."; }
-
- /*! this is put at the author sections at the bottom of man pages.
- * parameter s is name of the project name.
- */
- virtual QCString trGeneratedAutomatically(const char *s)
- { QCString result="ÐутоматÑки направљено помоћу Doxygen-а";
- if (s) result+=(QCString)" за "+s;
- result+=" из изворног кода.";
- return result;
- }
-
- /*! put after an enum name in the list of all members */
- virtual QCString trEnumName()
- { return "назив набрајања"; }
-
- /*! put after an enum value in the list of all members */
- virtual QCString trEnumValue()
- { return "вредноÑÑ‚ набрајања"; }
-
- /*! put after an undocumented member in the list of all members */
- virtual QCString trDefinedIn()
- { return "дефиниÑано у"; }
-
- // quick reference sections
-
- /*! This is put above each page as a link to the list of all groups of
- * compounds or files (see the \\group command).
- */
- virtual QCString trModules()
- { return "Модули"; }
-
- /*! This is put above each page as a link to the class hierarchy */
- virtual QCString trClassHierarchy()
- { return "Хијерархија клаÑа"; }
-
- /*! This is put above each page as a link to the list of annotated classes */
- virtual QCString trCompoundList()
- {
- if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
- {
- return "Структуре";
- }
- else
- {
- return "СпиÑак клаÑа";
- }
- }
-
- /*! This is put above each page as a link to the list of documented files */
- virtual QCString trFileList()
- { return "СпиÑак датотека"; }
-
- /*! This is put above each page as a link to all members of compounds. */
- virtual QCString trCompoundMembers()
- {
- if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
- {
- return "Поља";
- }
- else
- {
- return "Чланови клаÑе";
- }
- }
-
- /*! This is put above each page as a link to all members of files. */
- virtual QCString trFileMembers()
- {
- if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
- {
- return "Глобално";
- }
- else
- {
- return "Чланови датотеке";
- }
- }
-
- /*! This is put above each page as a link to all related pages. */
- virtual QCString trRelatedPages()
- { return "Повезане Ñтранице"; }
-
- /*! This is put above each page as a link to all examples. */
- virtual QCString trExamples()
- { return "Примери"; }
-
- /*! This is put above each page as a link to the search engine. */
- virtual QCString trSearch()
- { return "Тражи"; }
-
- /*! This is an introduction to the class hierarchy. */
- virtual QCString trClassHierarchyDescription()
- { return "Овај ÑпиÑак наÑлеђивања је уређен "
- "Ñкоро по абецеди:";
- }
-
- /*! This is an introduction to the list with all files. */
- virtual QCString trFileListDescription(bool extractAll)
- {
- QCString result="Овде је ÑпиÑак Ñвих ";
- if (!extractAll) result+="документованих ";
- result+="датотека Ñа кратким опиÑима:";
- return result;
- }
-
- /*! This is an introduction to the annotated compound list. */
- virtual QCString trCompoundListDescription()
- {
-
- if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
- {
- return "Овде Ñу Ñтруктуре Ñа кратким опиÑима:";
- }
- else
- {
- return "Овде Ñу клаÑе, Ñтруктуре, "
- "уније и интерфејÑи Ñа кратким опиÑима:";
- }
- }
-
- /*! This is an introduction to the page with all class members. */
- virtual QCString trCompoundMembersDescription(bool extractAll)
- {
- QCString result="Овде је ÑпиÑак Ñвих ";
- if (!extractAll)
- {
- result+="документованих ";
- }
- if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
- {
- result+="поља Ñтруктура и унија";
- }
- else
- {
- result+="чланова клаÑа";
- }
- result+=" Ñа везама ка ";
- if (!extractAll)
- {
- if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
- {
- result+="документацији Ñтруктуре/уније за Ñвако поље:";
- }
- else
- {
- result+="документацији клаÑе за Ñваки члан:";
- }
- }
- else
- {
- if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
- {
- result+="Ñтруктури/унији којој припадају:";
- }
- else
- {
- result+="клаÑи којој припадају:";
- }
- }
- return result;
- }
-
- /*! This is an introduction to the page with all file members. */
- virtual QCString trFileMembersDescription(bool extractAll)
- {
- QCString result="Овде је ÑпиÑак Ñвих ";
- if (!extractAll) result+="документованих ";
-
- if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
- {
- result+="фрункција, променљивих, макро замена, набрајања, и дефиниција типова";
- }
- else
- {
- result+="чланова датотеке";
- }
- result+=" Ñа везама ка ";
- if (extractAll)
- result+="датотекама којима припадају:";
- else
- result+="документацији:";
- return result;
- }
-
- /*! This is an introduction to the page with the list of all examples */
- virtual QCString trExamplesDescription()
- { return "Овде је ÑпиÑак Ñвих примера:"; }
-
- /*! This is an introduction to the page with the list of related pages */
- virtual QCString trRelatedPagesDescription()
- { return "Овде је ÑпиÑак Ñвих повезаних Ñтраница документације:"; }
-
- /*! This is an introduction to the page with the list of class/file groups */
- virtual QCString trModulesDescription()
- { return "Овде је ÑпиÑак Ñвих модула:"; }
-
- // index titles (the project name is prepended for these)
-
- /*! This is used in HTML as the title of index.html. */
- virtual QCString trDocumentation()
- { return "Документација"; }
-
- /*! This is used in LaTeX as the title of the chapter with the
- * index of all groups.
- */
- virtual QCString trModuleIndex()
- { return "Ð˜Ð½Ð´ÐµÐºÑ Ð¼Ð¾Ð´ÑƒÐ»Ð°"; }
-
- /*! This is used in LaTeX as the title of the chapter with the
- * class hierarchy.
- */
- virtual QCString trHierarchicalIndex()
- { return "ХијерархијÑки индекÑ"; }
-
- /*! This is used in LaTeX as the title of the chapter with the
- * annotated compound index.
- */
- virtual QCString trCompoundIndex()
- {
- if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
- {
- return "Ð˜Ð½Ð´ÐµÐºÑ Ñтруктура";
- }
- else
- {
- return "Ð˜Ð½Ð´ÐµÐºÑ ÐºÐ»Ð°Ñа";
- }
- }
-
- /*! This is used in LaTeX as the title of the chapter with the
- * list of all files.
- */
- virtual QCString trFileIndex()
- { return "Ð˜Ð½Ð´ÐµÐºÑ Ð´Ð°Ñ‚Ð¾Ñ‚ÐµÐºÐ°"; }
-
- /*! This is used in LaTeX as the title of the chapter containing
- * the documentation of all groups.
- */
- virtual QCString trModuleDocumentation()
- { return "Документација модула"; }
-
- /*! This is used in LaTeX as the title of the chapter containing
- * the documentation of all classes, structs and unions.
- */
- virtual QCString trClassDocumentation()
- {
- if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
- {
- return "Документација Ñтруктуре";
- }
- else
- {
- return "Документација клаÑе";
- }
- }
-
- /*! This is used in LaTeX as the title of the chapter containing
- * the documentation of all files.
- */
- virtual QCString trFileDocumentation()
- { return "Документација датотеке"; }
-
- /*! This is used in LaTeX as the title of the chapter containing
- * the documentation of all examples.
- */
- virtual QCString trExampleDocumentation()
- { return "Документација примера"; }
-
- /*! This is used in LaTeX as the title of the chapter containing
- * the documentation of all related pages.
- */
- virtual QCString trPageDocumentation()
- { return "Документација Ñтранице"; }
-
- /*! This is used in LaTeX as the title of the document */
- virtual QCString trReferenceManual()
- { return "Приручник"; }
-
- /*! This is used in the documentation of a file as a header before the
- * list of defines
- */
- virtual QCString trDefines()
- { return "Дефиниције"; }
-
- /*! This is used in the documentation of a file as a header before the
- * list of function prototypes
- */
- virtual QCString trFuncProtos()
- { return "Декларације функција"; }
-
- /*! This is used in the documentation of a file as a header before the
- * list of typedefs
- */
- virtual QCString trTypedefs()
- { return "Дефиниције типова"; }
-
- /*! This is used in the documentation of a file as a header before the
- * list of enumerations
- */
- virtual QCString trEnumerations()
- { return "Ðабрајања"; }
-
- /*! This is used in the documentation of a file as a header before the
- * list of (global) functions
- */
- virtual QCString trFunctions()
- { return "Функције"; }
-
- /*! This is used in the documentation of a file as a header before the
- * list of (global) variables
- */
- virtual QCString trVariables()
- { return "Променљиве"; }
-
- /*! This is used in the documentation of a file as a header before the
- * list of (global) variables
- */
- virtual QCString trEnumerationValues()
- { return "ВредноÑти набрајања"; }
-
- /*! This is used in the documentation of a file before the list of
- * documentation blocks for defines
- */
- virtual QCString trDefineDocumentation()
- { return "Документација дефиниције"; }
-
- /*! This is used in the documentation of a file/namespace before the list
- * of documentation blocks for function prototypes
- */
- virtual QCString trFunctionPrototypeDocumentation()
- { return "Документација декларације функције"; }
-
- /*! This is used in the documentation of a file/namespace before the list
- * of documentation blocks for typedefs
- */
- virtual QCString trTypedefDocumentation()
- { return "Документација дефиниције типа"; }
-
- /*! This is used in the documentation of a file/namespace before the list
- * of documentation blocks for enumeration types
- */
- virtual QCString trEnumerationTypeDocumentation()
- { return "Документација набрајања"; }
-
- /*! This is used in the documentation of a file/namespace before the list
- * of documentation blocks for functions
- */
- virtual QCString trFunctionDocumentation()
- { return "Документација функције"; }
-
- /*! This is used in the documentation of a file/namespace before the list
- * of documentation blocks for variables
- */
- virtual QCString trVariableDocumentation()
- { return "Документација променљиве"; }
-
- /*! This is used in the documentation of a file/namespace/group before
- * the list of links to documented compounds
- */
- virtual QCString trCompounds()
- {
- if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
- {
- return "Структуре";
- }
- else
- {
- return "КлаÑе";
- }
- }
-
- /*! This is used in the standard footer of each page and indicates when
- * the page was generated
- */
- virtual QCString trGeneratedAt(const char *date,const char *projName)
- {
- QCString result=(QCString)"Ðаправљено "+date;
- if (projName) result+=(QCString)" за "+projName;
- result+=(QCString)" помоћу";
- return result;
- }
- /*! This is part of the sentence used in the standard footer of each page.
- */
- virtual QCString trWrittenBy()
- {
- return "напиÑао";
- }
-
- /*! this text is put before a class diagram */
- virtual QCString trClassDiagram(const char *clName)
- {
- return (QCString)"Дијаграм наÑлеђивања за "+clName+":";
- }
-
- /*! this text is generated when the \\internal command is used. */
- virtual QCString trForInternalUseOnly()
- { return "Само за унутрашњу употребу."; }
-
- /*! this text is generated when the \\warning command is used. */
- virtual QCString trWarning()
- { return "Упозорење"; }
-
- /*! this text is generated when the \\version command is used. */
- virtual QCString trVersion()
- { return "Верзија"; }
-
- /*! this text is generated when the \\date command is used. */
- virtual QCString trDate()
- { return "Датум"; }
-
- /*! this text is generated when the \\return command is used. */
- virtual QCString trReturns()
- { return "Враћа"; }
-
- /*! this text is generated when the \\sa command is used. */
- virtual QCString trSeeAlso()
- { return "Види"; }
-
- /*! this text is generated when the \\param command is used. */
- virtual QCString trParameters()
- { return "Параметри"; }
-
- /*! this text is generated when the \\exception command is used. */
- virtual QCString trExceptions()
- { return "Изизеци"; }
-
- /*! this text is used in the title page of a LaTeX document. */
- virtual QCString trGeneratedBy()
- { return "Ðаправљено помоћу"; }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 0.49-990307
-//////////////////////////////////////////////////////////////////////////
-
- /*! used as the title of page containing all the index of all namespaces. */
- virtual QCString trNamespaceList()
- { return "СпиÑак проÑтора имена"; }
-
- /*! used as an introduction to the namespace list */
- virtual QCString trNamespaceListDescription(bool extractAll)
- {
- QCString result="Овде је ÑпиÑак Ñвих ";
- if (!extractAll) result+="документованих ";
- result+="проÑтора имена Ñа кратким опиÑима:";
- return result;
- }
-
- /*! used in the class documentation as a header before the list of all
- * friends of a class
- */
- virtual QCString trFriends()
- { return "Пријатељи"; }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 0.49-990405
-//////////////////////////////////////////////////////////////////////////
-
- /*! used in the class documentation as a header before the list of all
- * related classes
- */
- virtual QCString trRelatedFunctionDocumentation()
- { return "Документација за пријатеље и повезане функције"; }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 0.49-990425
-//////////////////////////////////////////////////////////////////////////
-
- /*! used as the title of the HTML page of a class/struct/union */
- virtual QCString trCompoundReference(const char *clName,
- ClassDef::CompoundType compType,
- bool isTemplate)
- {
- QCString result=(QCString)clName;
- if (isTemplate) {
- result+=" Шаблон";
- switch(compType)
- {
- case ClassDef::Class: result+="Ñка клаÑа"; break;
- case ClassDef::Struct: result+="Ñка Ñтруктура"; break;
- case ClassDef::Union: result+="Ñка унија"; break;
- case ClassDef::Interface: result+="Ñки интерфејÑ"; break;
- case ClassDef::Protocol: result+="Ñки протокол"; break;
- case ClassDef::Category: result+="Ñка категорија"; break;
- case ClassDef::Exception: result+="Ñки изузетак"; break;
- }
- } else {
- result+=" Референца";
- switch(compType)
- {
- case ClassDef::Class: result+=" клаÑе"; break;
- case ClassDef::Struct: result+=" Ñтруктуре"; break;
- case ClassDef::Union: result+=" уније"; break;
- case ClassDef::Interface: result+=" интерфејÑа"; break;
- case ClassDef::Protocol: result+=" протокола"; break;
- case ClassDef::Category: result+=" категорије"; break;
- case ClassDef::Exception: result+=" изузетка"; break;
- }
- }
- return result;
- }
-
- /*! used as the title of the HTML page of a file */
- virtual QCString trFileReference(const char *fileName)
- {
- QCString result=fileName;
- result+=" Референца датотеке";
- return result;
- }
-
- /*! used as the title of the HTML page of a namespace */
- virtual QCString trNamespaceReference(const char *namespaceName)
- {
- QCString result=namespaceName;
- result+=" Референца проÑтора имена";
- return result;
- }
-
- virtual QCString trPublicMembers()
- { return "Јавне функције чланице"; }
- virtual QCString trPublicSlots()
- { return "Јавни Ñлотови"; }
- virtual QCString trSignals()
- { return "Сигнали"; }
- virtual QCString trStaticPublicMembers()
- { return "Статичке јавне функције чланице"; }
- virtual QCString trProtectedMembers()
- { return "Заштићене функције чланице"; }
- virtual QCString trProtectedSlots()
- { return "Заштићени Ñлотови"; }
- virtual QCString trStaticProtectedMembers()
- { return "Статичке заштићене функције чланице"; }
- virtual QCString trPrivateMembers()
- { return "Приватне функције чланице"; }
- virtual QCString trPrivateSlots()
- { return "Приватни Ñлотови"; }
- virtual QCString trStaticPrivateMembers()
- { return "Статичке приватне функције чланице"; }
-
- /*! this function is used to produce a comma-separated list of items.
- * use generateMarker(i) to indicate where item i should be put.
- */
- virtual QCString trWriteList(int numEntries)
- {
- QCString result;
- int i;
- // the inherits list contain `numEntries' classes
- for (i=0;i<numEntries;i++)
- {
- // use generateMarker to generate placeholders for the class links!
- result+=generateMarker(i); // generate marker for entry i in the list
- // (order is left to right)
-
- if (i!=numEntries-1) // not the last entry, so we need a separator
- {
- if (i<numEntries-2) // not the fore last entry
- result+=", ";
- else // the fore last entry
- result+=" и ";
- }
- }
- return result;
- }
-
- /*! used in class documentation to produce a list of base classes,
- * if class diagrams are disabled.
- */
- virtual QCString trInheritsList(int numEntries)
- {
- return "ÐаÑлеђује "+trWriteList(numEntries)+".";
- }
-
- /*! used in class documentation to produce a list of super classes,
- * if class diagrams are disabled.
- */
- virtual QCString trInheritedByList(int numEntries)
- {
- return "ÐаÑлеђују "+trWriteList(numEntries)+".";
- }
-
- /*! used in member documentation blocks to produce a list of
- * members that are hidden by this one.
- */
- virtual QCString trReimplementedFromList(int numEntries)
- {
- return "Поново имплементирано од "+trWriteList(numEntries)+".";
- }
-
- /*! used in member documentation blocks to produce a list of
- * all member that overwrite the implementation of this member.
- */
- virtual QCString trReimplementedInList(int numEntries)
- {
- return "Поново имплементирано у "+trWriteList(numEntries)+".";
- }
-
- /*! This is put above each page as a link to all members of namespaces. */
- virtual QCString trNamespaceMembers()
- { return "Чланови проÑтора имена"; }
-
- /*! This is an introduction to the page with all namespace members */
- virtual QCString trNamespaceMemberDescription(bool extractAll)
- {
- QCString result="Овде је ÑпиÑак Ñвих ";
- if (!extractAll) result+="документованих ";
- result+="чланова проÑтора имена Ñа везама ка ";
- if (extractAll)
- result+="документацији проÑтора имена за Ñваки члан:";
- else
- result+="проÑторима имена којима припадају:";
- return result;
- }
- /*! This is used in LaTeX as the title of the chapter with the
- * index of all namespaces.
- */
- virtual QCString trNamespaceIndex()
- { return "Ð˜Ð½Ð´ÐµÐºÑ Ð¿Ñ€Ð¾Ñтора имена"; }
-
- /*! This is used in LaTeX as the title of the chapter containing
- * the documentation of all namespaces.
- */
- virtual QCString trNamespaceDocumentation()
- { return "Документација проÑтора имена"; }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 0.49-990522
-//////////////////////////////////////////////////////////////////////////
-
- /*! This is used in the documentation before the list of all
- * namespaces in a file.
- */
- virtual QCString trNamespaces()
- { return "ПроÑтори имена"; }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 0.49-990728
-//////////////////////////////////////////////////////////////////////////
-
- /*! This is put at the bottom of a class documentation page and is
- * followed by a list of files that were used to generate the page.
- */
- virtual QCString trGeneratedFromFiles(ClassDef::CompoundType compType,
- bool single)
- { // here s is one of " Class", " Struct" or " Union"
- // single is true implies a single file
- QCString result=(QCString)"Документација за ";
- switch(compType)
- {
- case ClassDef::Class: result+="ову клаÑу"; break;
- case ClassDef::Struct: result+="ову Ñтруктуру"; break;
- case ClassDef::Union: result+="ову унију"; break;
- case ClassDef::Interface: result+="овај интерфејÑ"; break;
- case ClassDef::Protocol: result+="овај протокол"; break;
- case ClassDef::Category: result+="ову категорију"; break;
- case ClassDef::Exception: result+="овај изузетак"; break;
- }
- result+=" је произведена из";
- if (single) result+="Ñледеће датотеке:"; else result+="Ñледећих датотека:";
- return result;
- }
-
- /*! This is in the (quick) index as a link to the alphabetical compound
- * list.
- */
- virtual QCString trAlphabeticalList()
- { return "Ðбецедни ÑпиÑак"; }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 0.49-990901
-//////////////////////////////////////////////////////////////////////////
-
- /*! This is used as the heading text for the retval command. */
- virtual QCString trReturnValues()
- { return "Враћене вредноÑти"; }
-
- /*! This is in the (quick) index as a link to the main page (index.html)
- */
- virtual QCString trMainPage()
- { return "Главна Ñтраница"; }
-
- /*! This is used in references to page that are put in the LaTeX
- * documentation. It should be an abbreviation of the word page.
- */
- virtual QCString trPageAbbreviation()
- { return "ÑÑ‚Ñ€."; }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 0.49-991003
-//////////////////////////////////////////////////////////////////////////
-
- virtual QCString trDefinedAtLineInSourceFile()
- {
- return "Дефиниција у линији @0 датотеке @1.";
- }
- virtual QCString trDefinedInSourceFile()
- {
- return "Дефиниција у датотеци @0.";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 0.49-991205
-//////////////////////////////////////////////////////////////////////////
-
- virtual QCString trDeprecated()
- {
- return "ЗаÑтарело";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.0.0
-//////////////////////////////////////////////////////////////////////////
-
- /*! this text is put before a collaboration diagram */
- virtual QCString trCollaborationDiagram(const char *clName)
- {
- return (QCString)"Дијаграм Ñарадње за "+clName+":";
- }
- /*! this text is put before an include dependency graph */
- virtual QCString trInclDepGraph(const char *fName)
- {
- return (QCString)"Дијаграм завиÑноÑти укључивања за "+fName+":";
- }
- /*! header that is put before the list of constructor/destructors. */
- virtual QCString trConstructorDocumentation()
- {
- return "Документација конÑтруктора и деÑтруктора";
- }
- /*! Used in the file documentation to point to the corresponding sources. */
- virtual QCString trGotoSourceCode()
- {
- return "Иди на изворни код овог фајла.";
- }
- /*! Used in the file sources to point to the corresponding documentation. */
- virtual QCString trGotoDocumentation()
- {
- return "Иди на документацију овог фајла.";
- }
- /*! Text for the \\pre command */
- virtual QCString trPrecondition()
- {
- return "УÑлов пре";
- }
- /*! Text for the \\post command */
- virtual QCString trPostcondition()
- {
- return "УÑлов поÑле";
- }
- /*! Text for the \\invariant command */
- virtual QCString trInvariant()
- {
- return "Инваријанта";
- }
- /*! Text shown before a multi-line variable/enum initialization */
- virtual QCString trInitialValue()
- {
- return "Почетна вредноÑÑ‚:";
- }
- /*! Text used the source code in the file index */
- virtual QCString trCode()
- {
- return "код";
- }
- virtual QCString trGraphicalHierarchy()
- {
- return "Графичка хијерархија клаÑа";
- }
- virtual QCString trGotoGraphicalHierarchy()
- {
- return "Иди на графичку хијерархију клаÑа";
- }
- virtual QCString trGotoTextualHierarchy()
- {
- return "Иди на текÑтуалну хијерархију клаÑа";
- }
- virtual QCString trPageIndex()
- {
- return "Ð˜Ð½Ð´ÐµÐºÑ Ñтрана";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.1.0
-//////////////////////////////////////////////////////////////////////////
-
- virtual QCString trNote()
- {
- return "Ðапомена";
- }
- virtual QCString trPublicTypes()
- {
- return "Јавни типови";
- }
- virtual QCString trPublicAttribs()
- {
- if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
- {
- return "Поља";
- }
- else
- {
- return "Јавни атрибути";
- }
- }
- virtual QCString trStaticPublicAttribs()
- {
- return "Статички јавни атрибути";
- }
- virtual QCString trProtectedTypes()
- {
- return "Заштићени типови";
- }
- virtual QCString trProtectedAttribs()
- {
- return "Заштићени атрибути";
- }
- virtual QCString trStaticProtectedAttribs()
- {
- return "Статички заштићени атрибути";
- }
- virtual QCString trPrivateTypes()
- {
- return "Приватни типови";
- }
- virtual QCString trPrivateAttribs()
- {
- return "Приватни атрибути";
- }
- virtual QCString trStaticPrivateAttribs()
- {
- return "Статички приватни атрибути";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.1.3
-//////////////////////////////////////////////////////////////////////////
-
- /*! Used as a marker that is put before a \\todo item */
- virtual QCString trTodo()
- {
- return "Урадити";
- }
- /*! Used as the header of the todo list */
- virtual QCString trTodoList()
- {
- return "ПодÑетник шта још урадити";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.1.4
-//////////////////////////////////////////////////////////////////////////
-
- virtual QCString trReferencedBy()
- {
- return "Референцирано од";
- }
- virtual QCString trRemarks()
- {
- return "Ðапомене";
- }
- virtual QCString trAttention()
- {
- return "Пажња";
- }
- virtual QCString trInclByDepGraph()
- {
- return "Овај граф показује које датотеке директно или "
- "или индиректно укључују овај фајл:";
- }
- virtual QCString trSince()
- {
- return "Од";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.1.5
-//////////////////////////////////////////////////////////////////////////
-
- /*! title of the graph legend page */
- virtual QCString trLegendTitle()
- {
- return "Легенда графова";
- }
- /*! page explaining how the dot graph's should be interpreted
- * The %A in the text below are to prevent link to classes called "A".
- */
- virtual QCString trLegendDocs()
- {
- return
- "Ова Ñтраница објашњава како тумачити графове који Ñу направљени "
- "doxygen-ом.<p>\n"
- "Размотримо Ñледећи пример:\n"
- "\\code\n"
- "/*! Ðевидљива клаÑа због одÑецања */\n"
- "class Invisible { };\n\n"
- "/*! ОдÑечена клаÑа, веза наÑлеђивања је Ñкривена */\n"
- "class Truncated : public Invisible { };\n\n"
- "/* КлаÑа која није документована doxygen коментарима */\n"
- "class Undocumented { };\n\n"
- "/*! КлаÑа која је наÑлеђена јавним наÑлеђивањем */\n"
- "class PublicBase : public Truncated { };\n\n"
- "/*! ШаблонÑка клаÑа */\n"
- "template<class T> class Templ { };\n\n"
- "/*! КлаÑа која је наÑлеђена заштићеним наÑлеђивањем */\n"
- "class ProtectedBase { };\n\n"
- "/*! КлаÑа која је наÑлеђена јавним наÑлеђивањем */\n"
- "class PrivateBase { };\n\n"
- "/*! КлаÑа коју кориÑти наÑлеђена клаÑа */\n"
- "class Used { };\n\n"
- "/*! ÐадклаÑа која наÑлеђује неки број других клаÑа */\n"
- "class Inherited : public PublicBase,\n"
- " protected ProtectedBase,\n"
- " private PrivateBase,\n"
- " public Undocumented,\n"
- " public Templ<int>\n"
- "{\n"
- " private:\n"
- " Used *m_usedClass;\n"
- "};\n"
- "\\endcode\n"
- "Ðко је \\c MAX_DOT_GRAPH_HEIGHT таг у конфигурационој датотеци "
- "подешен на 240, то ће резултовати на Ñледећи начин:"
- "<p><center><img alt=\"\" src=\"graph_legend."+Config_getEnum("DOT_IMAGE_FORMAT")+"\"></center>\n"
- "<p>\n"
- "Правоугаоници имају Ñледеће значење:\n"
- "<ul>\n"
- "<li>%Пуни Ñиви правоугаоник предÑтавља Ñтруктуру или клаÑу за коју је "
- "граф направљен.\n"
- "<li>%Правоугаоник Ñа црним оквиром означава документовану Ñтруктуру или клаÑу.\n"
- "<li>%Правоугаоник Ñа Ñивим оквиром означава недокументовану Ñтруктуру или клаÑу.\n"
- "<li>%Правоугаоник Ñа црвеним оквиром означава документовану Ñтруктуру или клаÑу за"
- "за коју ниÑу Ñве релације наÑлеђивања/Ñадржавања приказане. %Граф је "
- "одÑечен ако излази из Ñпецифицираних оквира.\n"
- "</ul>\n"
- "Стрелице имају Ñледећа значења:\n"
- "<ul>\n"
- "<li>%Тамноплава Ñтрелица Ñе кориÑти да прикаже релацију јавног извођења "
- "између двеју клаÑа.\n"
- "<li>%Тамнозелена Ñтрелица Ñе кориÑти за заштићено наÑлеђивање.\n"
- "<li>%Тамноцрвена Ñтрелица Ñе кориÑти за приватно наÑлеђивање.\n"
- "<li>%ЉубичаÑта иÑпрекидана Ñтрелица Ñе кориÑти ако клаÑа Ñадржи или кориÑти "
- "друга клаÑа. Стрелица је означена променљивом/променљивама "
- "кроз које је показивана клаÑа или Ñтруктура доÑтупна.\n"
- "<li>%Жута иÑпрекидана Ñтрелица означава везу између примерка шаблона и "
- "и шаблонÑке клаÑе из које је инÑтанцирана. Стрелица је означена "
- "параметрима примерка шаблона.\n"
- "</ul>\n";
- }
- /*! text for the link to the legend page */
- virtual QCString trLegend()
- {
- return "легенда";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.2.0
-//////////////////////////////////////////////////////////////////////////
-
- /*! Used as a marker that is put before a test item */
- virtual QCString trTest()
- {
- return "ТеÑÑ‚";
- }
- /*! Used as the header of the test list */
- virtual QCString trTestList()
- {
- return "СпиÑак теÑтова";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.2.1
-//////////////////////////////////////////////////////////////////////////
-
- /*! Used as a section header for KDE-2 IDL methods */
- virtual QCString trDCOPMethods()
- {
- return "DCOP функције чланице";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.2.2
-//////////////////////////////////////////////////////////////////////////
-
- /*! Used as a section header for IDL properties */
- virtual QCString trProperties()
- {
- return "СвоÑтва";
- }
- /*! Used as a section header for IDL property documentation */
- virtual QCString trPropertyDocumentation()
- {
- return "Документација ÑвоÑјтва";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.2.4
-//////////////////////////////////////////////////////////////////////////
-
- /*! Used for Java classes in the summary section of Java packages */
- virtual QCString trClasses()
- {
- if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
- {
- return "Структуре";
- }
- else
- {
- return "КлаÑе";
- }
- }
- /*! Used as the title of a Java package */
- virtual QCString trPackage(const char *name)
- {
- return (QCString)"Пакет "+name;
- }
- /*! Title of the package index page */
- virtual QCString trPackageList()
- {
- return "СпиÑак пакета";
- }
- /*! The description of the package index page */
- virtual QCString trPackageListDescription()
- {
- return "Овде Ñу пакети Ñа кратким опиÑима (ако Ñу доÑтупни):";
- }
- /*! The link name in the Quick links header for each page */
- virtual QCString trPackages()
- {
- return "Пакети";
- }
- /*! Text shown before a multi-line define */
- virtual QCString trDefineValue()
- {
- return "ВредноÑÑ‚:";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.2.5
-//////////////////////////////////////////////////////////////////////////
-
- /*! Used as a marker that is put before a \\bug item */
- virtual QCString trBug()
- {
- return "Грешка";
- }
- /*! Used as the header of the bug list */
- virtual QCString trBugList()
- {
- return "СпиÑак грешака";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.2.6
-//////////////////////////////////////////////////////////////////////////
-
- /*! Used as ansicpg for RTF file
- *
- * The following table shows the correlation of Charset name, Charset Value and
- * <pre>
- * Codepage number:
- * Charset Name Charset Value(hex) Codepage number
- * ------------------------------------------------------
- * DEFAULT_CHARSET 1 (x01)
- * SYMBOL_CHARSET 2 (x02)
- * OEM_CHARSET 255 (xFF)
- * ANSI_CHARSET 0 (x00) 1252
- * RUSSIAN_CHARSET 204 (xCC) 1251
- * EE_CHARSET 238 (xEE) 1250
- * GREEK_CHARSET 161 (xA1) 1253
- * TURKISH_CHARSET 162 (xA2) 1254
- * BALTIC_CHARSET 186 (xBA) 1257
- * HEBREW_CHARSET 177 (xB1) 1255
- * ARABIC _CHARSET 178 (xB2) 1256
- * SHIFTJIS_CHARSET 128 (x80) 932
- * HANGEUL_CHARSET 129 (x81) 949
- * GB2313_CHARSET 134 (x86) 936
- * CHINESEBIG5_CHARSET 136 (x88) 950
- * </pre>
- *
- */
- virtual QCString trRTFansicp()
- {
- return "1252";
- }
-
-
- /*! Used as ansicpg for RTF fcharset
- * \see trRTFansicp() for a table of possible values.
- */
- virtual QCString trRTFCharSet()
- {
- return "0";
- }
-
- /*! Used as header RTF general index */
- virtual QCString trRTFGeneralIndex()
- {
- return "ИндекÑ";
- }
-
- /*! This is used for translation of the word that will possibly
- * be followed by a single name or by a list of names
- * of the category.
- */
- virtual QCString trClass(bool first_capital, bool singular)
- {
- QCString result((first_capital ? "КлаÑ" : "клаÑ"));
- if (!singular) result+="e"; else result+="a";
- return result;
- }
-
- /*! This is used for translation of the word that will possibly
- * be followed by a single name or by a list of names
- * of the category.
- */
- virtual QCString trFile(bool first_capital, bool singular)
- {
- QCString result((first_capital ? "Датотек" : "датотек"));
- if (!singular) result+="e"; else result+="a";
- return result;
- }
-
- /*! This is used for translation of the word that will possibly
- * be followed by a single name or by a list of names
- * of the category.
- */
- virtual QCString trNamespace(bool first_capital, bool singular)
- {
- QCString result((first_capital ? "ПроÑтор" : "проÑтор"));
- if (!singular) result+="и имена"; else result+=" имена";
- return result;
- }
-
- /*! This is used for translation of the word that will possibly
- * be followed by a single name or by a list of names
- * of the category.
- */
- virtual QCString trGroup(bool first_capital, bool singular)
- {
- QCString result((first_capital ? "Груп" : "груп"));
- if (!singular) result+="е"; else result+="a";
- return result;
- }
-
- /*! This is used for translation of the word that will possibly
- * be followed by a single name or by a list of names
- * of the category.
- */
- virtual QCString trPage(bool first_capital, bool singular)
- {
- QCString result((first_capital ? "Страниц" : "Ñтраниц"));
- if (!singular) result+="е"; else result += "a";
- return result;
- }
-
- /*! This is used for translation of the word that will possibly
- * be followed by a single name or by a list of names
- * of the category.
- */
- virtual QCString trMember(bool first_capital, bool singular)
- {
- QCString result((first_capital ? "Члан" : "члан"));
- if (!singular) result+="ови";
- return result;
- }
-
- /*! This is used for translation of the word that will possibly
- * be followed by a single name or by a list of names
- * of the category.
- */
- virtual QCString trGlobal(bool first_capital, bool singular)
- {
- QCString result((first_capital ? "Глобалн" : "глобалн"));
- if (!singular) result+="а"; else result+="о";
- return result;
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.2.7
-//////////////////////////////////////////////////////////////////////////
-
- /*! This text is generated when the \\author command is used and
- * for the author section in man pages. */
- virtual QCString trAuthor(bool first_capital, bool singular)
- {
- QCString result((first_capital ? "Ðутор" : "аутор"));
- if (!singular) result+="и";
- return result;
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.2.11
-//////////////////////////////////////////////////////////////////////////
-
- /*! This text is put before the list of members referenced by a member
- */
- virtual QCString trReferences()
- {
- return "Референце";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.2.13
-//////////////////////////////////////////////////////////////////////////
-
- /*! used in member documentation blocks to produce a list of
- * members that are implemented by this one.
- */
- virtual QCString trImplementedFromList(int numEntries)
- {
- return "Имплементира "+trWriteList(numEntries)+".";
- }
-
- /*! used in member documentation blocks to produce a list of
- * all members that implement this abstract member.
- */
- virtual QCString trImplementedInList(int numEntries)
- {
- return "Имплементирано у "+trWriteList(numEntries)+".";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.2.16
-//////////////////////////////////////////////////////////////////////////
-
- /*! used in RTF documentation as a heading for the Table
- * of Contents.
- */
- virtual QCString trRTFTableOfContents()
- {
- return "Садржај";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.2.17
-//////////////////////////////////////////////////////////////////////////
-
- /*! Used as the header of the list of item that have been
- * flagged deprecated
- */
- virtual QCString trDeprecatedList()
- {
- return "СпиÑак заÑтарелог";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.2.18
-//////////////////////////////////////////////////////////////////////////
-
- /*! Used as a header for declaration section of the events found in
- * a C# program
- */
- virtual QCString trEvents()
- {
- return "Догађаји";
- }
- /*! Header used for the documentation section of a class' events. */
- virtual QCString trEventDocumentation()
- {
- return "Документација догажаја";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.3
-//////////////////////////////////////////////////////////////////////////
-
- /*! Used as a heading for a list of Java class types with package scope.
- */
- virtual QCString trPackageTypes()
- {
- return "Типови пакета";
- }
- /*! Used as a heading for a list of Java class functions with package
- * scope.
- */
- virtual QCString trPackageMembers()
- {
- return "Функције пакета";
- }
- /*! Used as a heading for a list of static Java class functions with
- * package scope.
- */
- virtual QCString trStaticPackageMembers()
- {
- return "Статичке функције пакета";
- }
- /*! Used as a heading for a list of Java class variables with package
- * scope.
- */
- virtual QCString trPackageAttribs()
- {
- return "Ðтрибути пакета";
- }
- /*! Used as a heading for a list of static Java class variables with
- * package scope.
- */
- virtual QCString trStaticPackageAttribs()
- {
- return "Статички атрибути пакета";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.3.1
-//////////////////////////////////////////////////////////////////////////
-
- /*! Used in the quick index of a class/file/namespace member list page
- * to link to the unfiltered list of all members.
- */
- virtual QCString trAll()
- {
- return "Све";
- }
- /*! Put in front of the call graph for a function. */
- virtual QCString trCallGraph()
- {
- return "Овде је граф позивања за ову функцију:";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.3.3
-//////////////////////////////////////////////////////////////////////////
-
- /*! When the search engine is enabled this text is put in the header
- * of each page before the field where one can enter the text to search
- * for.
- */
- virtual QCString trSearchForIndex()
- {
- return "Тражим";
- }
- /*! This string is used as the title for the page listing the search
- * results.
- */
- virtual QCString trSearchResultsTitle()
- {
- return "Резултати претраге";
- }
- /*! This string is put just before listing the search results. The
- * text can be different depending on the number of documents found.
- * Inside the text you can put the special marker $num to insert
- * the number representing the actual number of search results.
- * The @a numDocuments parameter can be either 0, 1 or 2, where the
- * value 2 represents 2 or more matches. HTML markup is allowed inside
- * the returned string.
- */
- virtual QCString trSearchResults(int numDocuments)
- {
- if (numDocuments==0)
- {
- return "Жао ми је, али нема докумената који одговарају упиту.";
- }
- else if (numDocuments==1)
- {
- return "Пронађен <b>1</b> документ који одговара упиту.";
- }
- else if (numDocuments==2)
- {
- return "Пронађена <b>а</b> документа која одговарају упиту.";
- }
- else if (numDocuments==3)
- {
- return "Пронађена <b>3</b> документа која одговарају упиту.";
- }
- else if (numDocuments==4)
- {
- return "Пронађена <b>4</b> документа која одговарају упиту.";
- }
- else
- {
- return "Пронађено <b>$num</b> докумената који одговарају упиту. "
- "Приказују Ñе прво најбољи поготци.";
- }
- }
- /*! This string is put before the list of matched words, for each search
- * result. What follows is the list of words that matched the query.
- */
- virtual QCString trSearchMatches()
- {
- return "Поготци:";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.3.8
-//////////////////////////////////////////////////////////////////////////
-
- /*! This is used in HTML as the title of page with source code for file filename
- */
- virtual QCString trSourceFile(QCString& filename)
- {
- return filename + " Изворна датотека";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.3.9
-//////////////////////////////////////////////////////////////////////////
-
- /*! This is used as the name of the chapter containing the directory
- * hierarchy.
- */
- virtual QCString trDirIndex()
- { return "Хијерархија директоријума"; }
-
- /*! This is used as the name of the chapter containing the documentation
- * of the directories.
- */
- virtual QCString trDirDocumentation()
- { return "Документација директоријума"; }
-
- /*! This is used as the title of the directory index and also in the
- * Quick links of an HTML page, to link to the directory hierarchy.
- */
- virtual QCString trDirectories()
- { return "Директоријуми"; }
-
- /*! This returns a sentences that introduces the directory hierarchy.
- * and the fact that it is sorted alphabetically per level
- */
- virtual QCString trDirDescription()
- { return "Ова хијерархија директоријума је уређена "
- "приближно по абецеди:";
- }
-
- /*! This returns the title of a directory page. The name of the
- * directory is passed via \a dirName.
- */
- virtual QCString trDirReference(const char *dirName)
- { QCString result=dirName; result+=" Референца директоријума"; return result; }
-
- /*! This returns the word directory with or without starting capital
- * (\a first_capital) and in sigular or plural form (\a singular).
- */
- virtual QCString trDir(bool first_capital, bool singular)
- {
- QCString result((first_capital ? "Директоријум" : "директоријум"));
- if (singular) result+=""; else result+="и";
- return result;
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.4.1
-//////////////////////////////////////////////////////////////////////////
-
- /*! This text is added to the documentation when the \\overload command
- * is used for a overloaded function.
- */
- virtual QCString trOverloadText()
- {
- return "Ово је преоптерећена функција чланица. "
- "Разликује Ñе од наведене Ñамо по врÑти аргумената кое прихвата";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.4.6
-//////////////////////////////////////////////////////////////////////////
-
- /*! This is used to introduce a caller (or called-by) graph */
- virtual QCString trCallerGraph()
- {
- return "Ово је граф функција које позивају ову функцију:";
- }
-
- /*! This is used in the documentation of a file/namespace before the list
- * of documentation blocks for enumeration values
- */
- virtual QCString trEnumerationValueDocumentation()
- { return "Документација вредноÑти набрајања"; }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.5.4 (mainly for Fortran)
-//////////////////////////////////////////////////////////////////////////
-
- /*! header that is put before the list of member subprograms (Fortran). */
- virtual QCString trMemberFunctionDocumentationFortran()
- { return "Документацијаr функције чланице, одноÑно потпрограма члана"; }
-
- /*! This is put above each page as a link to the list of annotated data types (Fortran). */
- virtual QCString trCompoundListFortran()
- { return "СпиÑак типова података"; }
-
- /*! This is put above each page as a link to all members of compounds (Fortran). */
- virtual QCString trCompoundMembersFortran()
- { return "Поља"; }
-
- /*! This is an introduction to the annotated compound list (Fortran). */
- virtual QCString trCompoundListDescriptionFortran()
- { return "Овде Ñу типови података Ñа кратким опиÑима:"; }
-
- /*! This is an introduction to the page with all data types (Fortran). */
- virtual QCString trCompoundMembersDescriptionFortran(bool extractAll)
- {
- QCString result="Овде је ÑпиÑак Ñвих ";
- if (!extractAll)
- {
- result+="документованих ";
- }
- result+="чланова типова података";
- result+=" Ñа везама ка ";
- if (!extractAll)
- {
- result+="документацији Ñтруктуре података за Ñваки члан";
- }
- else
- {
- result+="типовима података којима припадају:";
- }
- return result;
- }
-
- /*! This is used in LaTeX as the title of the chapter with the
- * annotated compound index (Fortran).
- */
- virtual QCString trCompoundIndexFortran()
- { return "Ð˜Ð½Ð´ÐµÐºÑ Ñ‚Ð¸Ð¿Ð¾Ð²Ð° података"; }
-
- /*! This is used in LaTeX as the title of the chapter containing
- * the documentation of all data types (Fortran).
- */
- virtual QCString trTypeDocumentation()
- { return "Документација типова података"; }
-
- /*! This is used in the documentation of a file as a header before the
- * list of (global) subprograms (Fortran).
- */
- virtual QCString trSubprograms()
- { return "Функције/потпрограми"; }
-
- /*! This is used in the documentation of a file/namespace before the list
- * of documentation blocks for subprograms (Fortran)
- */
- virtual QCString trSubprogramDocumentation()
- { return "Документација функције/потпрограма"; }
-
- /*! This is used in the documentation of a file/namespace/group before
- * the list of links to documented compounds (Fortran)
- */
- virtual QCString trDataTypes()
- { return "Типови података"; }
-
- /*! used as the title of page containing all the index of all modules (Fortran). */
- virtual QCString trModulesList()
- { return "СпиÑак модула"; }
-
- /*! used as an introduction to the modules list (Fortran) */
- virtual QCString trModulesListDescription(bool extractAll)
- {
- QCString result="Овде је ÑпиÑак Ñвих ";
- if (!extractAll) result+="документованих ";
- result+="модула Ñа кратким опиÑима:";
- return result;
- }
-
- /*! used as the title of the HTML page of a module/type (Fortran) */
- virtual QCString trCompoundReferenceFortran(const char *clName,
- ClassDef::CompoundType compType,
- bool isTemplate)
- {
- QCString result=(QCString)clName;
- if (isTemplate) result+=" Шаблон";
- result+=" Референца";
- switch(compType)
- {
- case ClassDef::Class: result+=" модула"; break;
- case ClassDef::Struct: result+=" типа"; break;
- case ClassDef::Union: result+=" уније"; break;
- case ClassDef::Interface: result+=" интерфејÑа"; break;
- case ClassDef::Protocol: result+=" протокола"; break;
- case ClassDef::Category: result+=" категорије"; break;
- case ClassDef::Exception: result+=" изузетка"; break;
- }
- return result;
- }
- /*! used as the title of the HTML page of a module (Fortran) */
- virtual QCString trModuleReference(const char *namespaceName)
- {
- QCString result=namespaceName;
- result+=" Референца модула";
- return result;
- }
-
- /*! This is put above each page as a link to all members of modules. (Fortran) */
- virtual QCString trModulesMembers()
- { return "Чланови модула"; }
-
- /*! This is an introduction to the page with all modules members (Fortran) */
- virtual QCString trModulesMemberDescription(bool extractAll)
- {
- QCString result="Овде је ÑпиÑак Ñвих ";
- if (!extractAll) result+="документованих ";
- result+="чланова модула Ñа везама ка ";
- if (extractAll)
- {
- result+="документацији модула за Ñваки члан:";
- }
- else
- {
- result+="модулима којима припадају:";
- }
- return result;
- }
-
- /*! This is used in LaTeX as the title of the chapter with the
- * index of all modules (Fortran).
- */
- virtual QCString trModulesIndex()
- { return "Ð˜Ð½Ð´ÐµÐºÑ Ð¼Ð¾Ð´ÑƒÐ»Ð°"; }
-
- /*! This is used for translation of the word that will possibly
- * be followed by a single name or by a list of names
- * of the category.
- */
- virtual QCString trModule(bool first_capital, bool singular)
- {
- QCString result((first_capital ? "Модул" : "модул"));
- if (!singular) result+="и";
- return result;
- }
- /*! This is put at the bottom of a module documentation page and is
- * followed by a list of files that were used to generate the page.
- */
- virtual QCString trGeneratedFromFilesFortran(ClassDef::CompoundType compType,
- bool single)
- { // here s is one of " Module", " Struct" or " Union"
- // single is true implies a single file
- QCString result=(QCString)"Документација за ";
- switch(compType)
- {
- case ClassDef::Class: result+="овај модул"; break;
- case ClassDef::Struct: result+="овај тип"; break;
- case ClassDef::Union: result+="ову унију"; break;
- case ClassDef::Interface: result+="овај интерфејÑ"; break;
- case ClassDef::Protocol: result+="овај протокол"; break;
- case ClassDef::Category: result+="ову категорију"; break;
- case ClassDef::Exception: result+="овај изузетак"; break;
- }
- result+=" је направљен из Ñледећ";
- if (single) result+="е датотеке:"; else result+="их датотека:";
- return result;
- }
- /*! This is used for translation of the word that will possibly
- * be followed by a single name or by a list of names
- * of the category.
- */
- virtual QCString trType(bool first_capital, bool singular)
- {
- QCString result((first_capital ? "Тип" : "тип"));
- if (!singular) result+="ови";
- return result;
- }
- /*! This is used for translation of the word that will possibly
- * be followed by a single name or by a list of names
- * of the category.
- */
- virtual QCString trSubprogram(bool first_capital, bool singular)
- {
- QCString result((first_capital ? "Потпрограм" : "потпрограм"));
- if (!singular) result+="и";
- return result;
- }
-
- /*! C# Type Constraint list */
- virtual QCString trTypeConstraints()
- {
- return "Ограничења типова";
- }
-
-};
-
-#endif
diff --git a/trunk/src/translator_si.h b/trunk/src/translator_si.h
deleted file mode 100644
index 5d0182a..0000000
--- a/trunk/src/translator_si.h
+++ /dev/null
@@ -1,1251 +0,0 @@
-/******************************************************************************
- *
- *
- *
- * Copyright (C) 1997-2012 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.
- *
- */
-
-// translation by Matjaz Ostroversnik <matjaz.ostroversnik@zrs-tk.si>
-
-#ifndef TRANSLATOR_SI_H
-#define TRANSLATOR_SI_H
-
-
-class TranslatorSlovene : public TranslatorAdapter_1_4_6
-//public TranslatorAdapter_1_2_16
-{
- protected:
- friend class TranslatorAdapterBase;
- virtual ~TranslatorSlovene() {}
- public:
- QCString idLanguage()
- { return "slovene"; }
- /*! Used to get the command(s) for the language support. This method
- * was designed for languages which do not prefer babel package.
- * If this methods returns empty string, then the latexBabelPackage()
- * method is used to generate the command for using the babel package.
- */
- QCString latexLanguageSupportCommand()
- {
- return "\\usepackage[slovene]{babel}\n\\usepackage[T1]{fontenc}\n";
- }
- QCString idLanguageCharset()
- {
-//#ifdef _WIN32
- return "windows-1250";
-//#else
-// return "iso-8859-2";
-//#endif
- }
- QCString trRelatedFunctions()
- { return "Povezane funkcije"; }
- QCString trRelatedSubscript()
- { return "(To niso metode.)"; }
- QCString trDetailedDescription()
- { return "Podroben opis"; }
- QCString trMemberTypedefDocumentation()
- { return "Opis uporabni¹ko definiranih tipov"; }
- QCString trMemberEnumerationDocumentation()
- { return "Opis komponent na¹tevnih tipov"; }
-/* QCString trEnumerationValueDocumentation() */
-/* { return "Opis vrednosti na¹tevnih tipov (enum) "; } */
- QCString trMemberFunctionDocumentation()
- { return "Opis metod"; }
- QCString trMemberDataDocumentation()
- { return "Opis atributov"; }
- QCString trMore()
- { return "..."; }
- QCString trListOfAllMembers()
- { return "Seznam vseh metod / atributov."; }
- QCString trMemberList()
- { return " - seznam metod in atributov."; }
- QCString trThisIsTheListOfAllMembers()
- { return "Seznam metod razreda "; }
- QCString trIncludingInheritedMembers()
- { return ", vkljuèujoè dedovane metode in atribute."; }
- QCString trGeneratedAutomatically(const char *s)
- { QCString result="zgenerirano z Doxygen-om";
- if (s) result+=(QCString)" za "+s;
- result+=" iz izvorne kode.";
- return result;
- }
- QCString trEnumName()
- { return "na¹tevno ime"; }
- QCString trEnumValue()
- { return "na¹tevna vrednost"; }
- QCString trDefinedIn()
- { return "definirano v"; }
- QCString trModules()
- { return "moduli"; }
- QCString trClassHierarchy()
- { return "dedovalna hierarhija"; }
- QCString trCompoundList()
- { return "kratek opis razredov"; }
- QCString trFileList()
- { return "seznam datotek"; }
-/* QCString trHeaderFiles() */
-/* { return "'Header' datoteka"; } */
- QCString trCompoundMembers()
- { return "metode in atributi"; }
- QCString trFileMembers()
- { return "komponente v datotekah"; }
- QCString trRelatedPages()
- { return "dodatni opisi"; }
- QCString trExamples()
- { return "Primeri"; }
- QCString trSearch()
- { return "I¹èi"; }
- QCString trClassHierarchyDescription()
- { return "Hierarhièno drevo je (okvirno) sortirano po abecedi. ";
- }
- QCString trFileListDescription(bool extractAll)
- {
- QCString result="Seznam vseh ";
- if (!extractAll) result+="dokumentiranih ";
- result+="datotek s kratkim opisom:";
- return result;
- }
- QCString trCompoundListDescription()
- { return "Seznam razredov, mno¾ic in struktur "
- "s kratkim opisom :";
- }
- QCString trCompoundMembersDescription(bool extractAll)
- {
- QCString result="Seznam vseh ";
- if (!extractAll) result+="dokumentiranih ";
- result+="metod in atributov s povezavami na ";
- if (extractAll) result+="opis posamezne metode in/ali atributa:";
- else result+="opis razreda :";
- return result;
- }
- QCString trFileMembersDescription(bool extractAll)
- {
- QCString result="Seznam ";
- if (!extractAll) result+="dokumentiranih ";
- result+="entitet v datotekah ";
- if (extractAll) result+="skupaj z opisom datoteke v kateri se nahajajo:";
- else result+="s povezavami na datoteke v katerih se nahajajo:";
- return result;
- }
-/* QCString trHeaderFilesDescription() */
-/* { return "Seznam header datotek, ki tvorijo aplikacijski vmesnik (API) :"; } */
- QCString trExamplesDescription()
- { return "Seznam primerov :"; }
- QCString trRelatedPagesDescription()
- { return "Seznam strani z dodatnimi opisi:"; }
- QCString trModulesDescription()
- { return "Seznam modulov:"; }
-/* QCString trNoDescriptionAvailable() */
-/* { return "Opis ni dostopen"; } */
-
- QCString trDocumentation()
- { return "Dokumentacija"; }
- QCString trModuleIndex()
- { return "seznam modulov"; }
- QCString trHierarchicalIndex()
- { return "Hierarhièni indeks"; }
- QCString trCompoundIndex()
- { return "abecedni seznam"; }
- QCString trFileIndex()
- { return "seznam datotek"; }
- QCString trModuleDocumentation()
- { return "Dokumentacija modulov"; }
- QCString trClassDocumentation()
- { return "Opis razreda"; }
- QCString trFileDocumentation()
- { return "Opis datoteke"; }
- QCString trExampleDocumentation()
- { return "Opis primera"; }
- QCString trPageDocumentation()
- { return "Opis povezanih strani"; }
- QCString trReferenceManual()
- { return "Priroènik"; }
-
- QCString trDefines()
- { return "Makro deklaracije"; }
- QCString trFuncProtos()
- { return "Prototipi funkcij"; }
- QCString trTypedefs()
- { return "Uporabni¹ko definirani tipi"; }
- QCString trEnumerations()
- { return "Na¹tevni tipi"; }
- QCString trFunctions()
- { return "Funkcije"; }
- QCString trVariables()
- { return "Spremenljivke"; }
- QCString trEnumerationValues()
- { return "Vrednosti na¹tevnih tipov"; }
- QCString trDefineDocumentation()
- { return "Opis makro definicije"; }
- QCString trFunctionPrototypeDocumentation()
- { return "Opis prototipa funkcije"; }
- QCString trTypedefDocumentation()
- { return "Opis uporabni¹ko definiranega tipa"; }
- QCString trEnumerationTypeDocumentation()
- { return "Opis na¹tevnega (enum) tipa"; }
- QCString trFunctionDocumentation()
- { return "Opis funkcije"; }
- QCString trVariableDocumentation()
- { return "Opis spremenljivke"; }
- QCString trCompounds()
- { return "Strukture"; }
- QCString trGeneratedAt(const char *date,const char *projName)
- {
- QCString result=(QCString)"Generirano "+date;
- if (projName) result+=(QCString)" projekt: "+projName;
- result+=(QCString)" generator: ";
- return result;
- }
- QCString trWrittenBy()
- {
- return "napisal ";
- }
- QCString trClassDiagram(const char *clName)
- {
- return (QCString)"Diagram razredov za "+clName;
- }
- QCString trForInternalUseOnly()
- { return "Samo za interno uporabo."; }
-/* QCString trReimplementedForInternalReasons() */
-/* { return "Ponovno implementirano zaradi internih razlogov. " */
-/* "Nima vpliva na API."; */
-/* } */
- QCString trWarning()
- { return "Opozorilo"; }
-/* QCString trBugsAndLimitations() */
-/* { return "Napake in omejtive"; } */
- QCString trVersion()
- { return "Verzija"; }
- QCString trDate()
- { return "Datum"; }
- QCString trReturns()
- { return "Rezultat(i)"; }
- QCString trSeeAlso()
- { return "Glej"; }
- QCString trParameters()
- { return "Parametri"; }
- QCString trExceptions()
- { return "Prekinitve"; }
- QCString trGeneratedBy()
- { return "Izdelano s pomoèjo"; }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 0.49-990307
-//////////////////////////////////////////////////////////////////////////
-
- QCString trNamespaceList()
- { return "imenski prostori"; }
- QCString trNamespaceListDescription(bool extractAll)
- {
- QCString result="Seznam ";
- if (!extractAll) result+="dokumentiranih ";
- result+="imenskih prostorov z opisom:";
- return result;
- }
- QCString trFriends()
- { return "Prijatelji (Friends) "; }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 0.49-990405
-//////////////////////////////////////////////////////////////////////////
-
- QCString trRelatedFunctionDocumentation()
- { return "Podatki o poveznih funkcijah"; }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 0.49-990425
-//////////////////////////////////////////////////////////////////////////
-
- QCString trCompoundReference(const char *clName,
- ClassDef::CompoundType compType,
- bool /*isTemplate*/)
- // used as the title of the HTML page of a class/struct/union
- {
- QCString result="";
- switch(compType)
- {
- case ClassDef::Class: result+=" Razred "; break;
- case ClassDef::Struct: result+=" Struktura "; break;
- case ClassDef::Union: result+=" Mno¾ica "; break;
- case ClassDef::Interface: result+=" IDL vmesnik "; break;
- case ClassDef::Protocol: result+=" protocol "; break; // translate me!
- case ClassDef::Category: result+=" category "; break; // translate me!
- case ClassDef::Exception: result+=" IDL prekinitev "; break;
- }
- result += (QCString)clName;
-
- return result;
- }
- QCString trFileReference(const char *fileName)
- // used as the title of the HTML page of a file
- {
- QCString result="Datoteka ";
- result+=fileName;
- return result;
- }
- QCString trNamespaceReference(const char *namespaceName)
- // used as the title of the HTML page of a namespace
- {
- QCString result ="Imenski prostor ";
- result+=namespaceName;
-
- return result;
- }
-
- // these are for the member sections of a class, struct or union
- QCString trPublicMembers()
- { return "Javne metode"; }
- QCString trPublicSlots()
- { return "Public slotovi"; }
- QCString trSignals()
- { return "Programske prekinitve"; }
- QCString trStaticPublicMembers()
- { return "Statiène javne metode in atributi"; }
- QCString trProtectedMembers()
- { return "Za¹èitene metode in atributi"; }
- QCString trProtectedSlots()
- { return "Za¹èiteni sloti"; }
- QCString trStaticProtectedMembers()
- { return "Statiène za¹èitene metode in atributi"; }
- QCString trPrivateMembers()
- { return "Skrite metode in atributi"; }
- QCString trPrivateSlots()
- { return "Skriti slotovi"; }
- QCString trStaticPrivateMembers()
- { return "Statiène skrite metode in atributi"; }
- // end of member sections
-
- QCString trWriteList(int numEntries)
- {
- // this function is used to produce a comma-separated list of items.
- // use generateMarker(i) to indicate where item i should be put.
- QCString result;
- int i;
- // the inherits list contain `numEntries' classes
- for (i=0;i<numEntries;i++)
- {
- // use generateMarker to generate placeholders for the class links!
- result+=generateMarker(i); // generate marker for entry i in the list
- // (order is left to right)
-
- if (i!=numEntries-1) // not the last entry, so we need a separator
- {
- if (i<numEntries-2) // not the fore last entry
- result+=", ";
- else // the fore last entry
- result+=" in ";
- }
- }
- return result;
- }
-
- QCString trInheritsList(int numEntries)
- // used in class documentation to produce a list of base classes,
- // if class diagrams are disabled.
- {
- return "Deduje od "+trWriteList(numEntries)+".";
- }
- QCString trInheritedByList(int numEntries)
- // used in class documentation to produce a list of super classes,
- // if class diagrams are disabled.
- {
- return "Naslijeðena u "+trWriteList(numEntries)+".";
- }
- QCString trReimplementedFromList(int numEntries)
- // used in member documentation blocks to produce a list of
- // members that are hidden by this one.
- {
- return "Skrije implementacijo iz "+trWriteList(numEntries)+".";
- }
- QCString trReimplementedInList(int numEntries)
- {
- // used in member documentation blocks to produce a list of
- // all member that overwrite the implementation of this member.
- return "Metodo skrijejo implementacije v razredih "+trWriteList(numEntries)+".";
- }
-
- QCString trNamespaceMembers()
- // This is put above each page as a link to all members of namespaces.
- { return "elementi imenskega prostora"; }
- QCString trNamespaceMemberDescription(bool extractAll)
- // This is an introduction to the page with all namespace members
- {
- QCString result="Seznam vseh ";
- if (!extractAll) result+="dokumentiranih ";
- result+="elementov imenskega prostora s povezavami na ";
- if (extractAll)
- result+="opis vsakega elementa:";
- else
- result+="imenski prostor, ki mu pripadajo:";
- return result;
- }
- QCString trNamespaceIndex()
- // This is used in LaTeX as the title of the chapter with the
- // index of all namespaces.
- { return "Indeks imenskih prostorov"; }
- QCString trNamespaceDocumentation()
- // This is used in LaTeX as the title of the chapter containing
- // the documentation of all namespaces.
- { return "Podatki o imenskih prostorih"; }
-//////////////////////////////////////////////////////////////////////////
-// new since 0.49-990522
-//////////////////////////////////////////////////////////////////////////
-
- /*! This is used in the documentation before the list of all
- * namespaces in a file.
- */
- virtual QCString trNamespaces()
- { return "Imenski prostori"; }
-
-
-//////////////////////////////////////////////////////////////////////////
-// new since 0.49-990728
-//////////////////////////////////////////////////////////////////////////
-
- /*! This is put at the bottom of a class documentation page and is
- * followed by a list of files that were used to generate the page.
- */
- QCString trGeneratedFromFiles(ClassDef::CompoundType compType,
- bool single)
- { // here s is one of " Class", " Struct" or " Union"
- // single is true implies a single file
- QCString result=(QCString)"Opis ";
- switch(compType)
- {
- case ClassDef::Class: result+="razreda"; break;
- case ClassDef::Struct: result+="strukture"; break;
- case ClassDef::Union: result+="unije"; break;
- case ClassDef::Interface: result+="vmesnika (interface)"; break;
- case ClassDef::Protocol: result+="protocol"; break; // translate me!
- case ClassDef::Category: result+="category"; break; // translate me!
- case ClassDef::Exception: result+="prekinitve (exception)"; break;
- }
- result+=" je zgrajen na podlagi naslednj";
- if (single) result+="e "; else result+="ih";
- result+=" datotek";
- if (single) result+="e :"; else result+=" :";
- return result;
- }
-
- /*! This is in the (quick) index as a link to the alphabetical compound
- * list.
- */
- QCString trAlphabeticalList()
- { return "abecedni seznam"; }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 0.49-990901
-//////////////////////////////////////////////////////////////////////////
-
- /*! This is used as the heading text for the retval command. */
- QCString trReturnValues()
- { return "Povratna vrednost"; }
-
- /*! This is in the (quick) index as a link to the main page (index.html)
- */
- QCString trMainPage()
- { return "prva stran"; }
-
- /*! This is used in references to page that are put in the LaTeX
- * documentation. It should be an abbreviation of the word page.
- */
- QCString trPageAbbreviation()
- { return "str."; }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 0.49-991106
-//////////////////////////////////////////////////////////////////////////
-
-/* QCString trSources() */
-/* { */
-/* return "Izvorne datoteke"; */
-/* } */
- QCString trDefinedAtLineInSourceFile()
- {
- return "Definirano v @0 vrstici datoteke @1.";
- }
- QCString trDefinedInSourceFile()
- {
- return "Definirano v datoteki @0.";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 0.49-991205
-//////////////////////////////////////////////////////////////////////////
-
- QCString trDeprecated()
- {
- return "Zastarelo";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.0.0
-//////////////////////////////////////////////////////////////////////////
-
- /*! this text is put before a collaboration diagram */
- QCString trCollaborationDiagram(const char *clName)
- {
- return (QCString)"Kolaboracijski diagram razreda "+clName+":";
- }
- /*! this text is put before an include dependency graph */
- QCString trInclDepGraph(const char *fName)
- {
- return (QCString)"Graf prikazuje seznam datotek, "
- "ki jih datoteka \""+fName+"\" "
- "direktno ali indirektno vkljuèuje. Pravokotniki ponazarjajo datoteke, pu¹èice "
- "predstavljajo relacije med njimi. "
- "Èrn pravokotnik ponazarja datoteko "+fName+". Pu¹èice A->B ponazarjajo "
- "usmerjeno relacijo \"A vkljuèuje B\"."
-;
- }
- /*! header that is put before the list of constructor/destructors. */
- QCString trConstructorDocumentation()
- {
- return "Opis konstruktorjev in destruktorjev ";
- }
- /*! Used in the file documentation to point to the corresponding sources. */
- QCString trGotoSourceCode()
- {
- return "izvorna koda";
- }
- /*! Used in the file sources to point to the corresponding documentation. */
- QCString trGotoDocumentation()
- {
- return "dokumenacija tekoèe datoteke.";
- }
- /*! Text for the \pre command */
- QCString trPrecondition()
- {
- return "Predpogoji (preconditions)";
- }
- /*! Text for the \post command */
- QCString trPostcondition()
- {
- return "Naknadni pogoji (posconditions)";
- }
- /*! Text for the \invariant command */
- QCString trInvariant()
- {
- return "Invarianta";
- }
- /*! Text shown before a multi-line variable/enum initialization */
- QCString trInitialValue()
- {
- return "Zaèetna vrednost / definicija :";
- }
- /*! Text used the source code in the file index */
- QCString trCode()
- {
- return "koda";
- }
- QCString trGraphicalHierarchy()
- {
- return "Hierarhija razredov v grafièni obliki";
- }
- QCString trGotoGraphicalHierarchy()
- {
- return "Dedovalna hierarhija v grafièni obliki";
- }
- QCString trGotoTextualHierarchy()
- {
- return "Dedovalna hierarhija v tekstovni obliki";
- }
- QCString trPageIndex()
- {
- return "Indeks strani";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.1.0
-//////////////////////////////////////////////////////////////////////////
-
- QCString trNote()
- {
- return "Opomba";
- }
- QCString trPublicTypes()
- {
- return "Javni tipi";
- }
- QCString trPublicAttribs()
- {
- return "Javni atributi";
- }
- QCString trStaticPublicAttribs()
- {
- return "Statièni javni atributi";
- }
- QCString trProtectedTypes()
- {
- return "Za¹èiteni tipi";
- }
- QCString trProtectedAttribs()
- {
- return "Za¹èiteni atributi";
- }
- QCString trStaticProtectedAttribs()
- {
- return "Statièni za¹èiteni tipi";
- }
- QCString trPrivateTypes()
- {
- return "Skriti tipi";
- }
- QCString trPrivateAttribs()
- {
- return "Skriti atributi";
- }
- QCString trStaticPrivateAttribs()
- {
- return "Statièni skriti atributi";
- }
-//////////////////////////////////////////////////////////////////////////
-// new since 1.1.3
-//////////////////////////////////////////////////////////////////////////
-
- /*! Used as a marker that is put before a todo item */
- virtual QCString trTodo()
- {
- return "TODO";
- }
- /*! Used as the header of the todo list */
- virtual QCString trTodoList()
- {
- return "Seznam nedokonèanih opravil";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.1.4
-//////////////////////////////////////////////////////////////////////////
-
- virtual QCString trReferencedBy()
- {
- return "Uporabniki entitete: ";
- }
- virtual QCString trRemarks()
- {
- return "Opomba";
- }
- virtual QCString trAttention()
- {
- return "Pozor";
- }
- virtual QCString trInclByDepGraph()
- {
- return "Graf prikazuje datoteke, ki posredno ali neposredno "
- "vkljuèujejo tekoèo datoteko. Pravokotniki simbolizirajo datoteke, "
- "pu¹èice pa relacije med datotekami. Tekoèa datoteka je prikazana "
- "kot pravokotnik s èrno podlago, ostale pa kot pravokotnik brez podlage. "
- "Smer pu¹èice A->B definira relacijo \"A vkljuèuje B\". "
- "Vse datoteke, ki torej mejijo na tekoèo (t.j. obstaja povezava med èrnim in "
- "praznim pravokotnikom), jo direktno vkljuèujejo, medtem, ko jo ostale vkljuèujejo "
- "le posredno. "
- ;
- }
- virtual QCString trSince()
- {
- return "Od";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.1.5
-//////////////////////////////////////////////////////////////////////////
-
- /*! title of the graph legend page */
- virtual QCString trLegendTitle()
- {
- return "Legenda grafa";
- }
- /*! page explaining how the dot graph's should be interpreted
- * The %A in the text below are to prevent link to classes called "A".
- */
- virtual QCString trLegendDocs()
- {
- return
- "Tekoèa stran pojasnjuje naèin interpretacije grafov, ki jih izri¹e "
- "doxygen.<p>\n"
- "Poglejmo si naslednji primer:\n"
- "\\code\n"
- "/*! Nevide razred zaradi rezanja */\n"
- "class Invisible { };\n\n"
- "/*! Odrezan razred, dedovalna relacija je skrita */\n"
- "class Truncated : public Invisible { };\n\n"
- "/* razred, ki ni opisan z doxygen komentarji */\n"
- "class Undocumented { };\n\n"
- "/*! Razred, ki ga dedujemo s pomoèjo javnega dedovanja */\n"
- "class PublicBase : public Truncated { };\n\n"
- "/*! A template class */\n"
- "template<class T> class Templ { };\n\n"
- "/*! Razred, ki ga dedujemo s pomoèjo za¹èitenega dedovanja */\n"
- "class ProtectedBase { };\n\n"
- "/*! Razred, ki ga dedujemo s pomoèjo skritega dedovanja */\n"
- "class PrivateBase { };\n\n"
- "/*! Razred, ki ga uporablja dedovani razred */\n"
- "class Used { };\n\n"
- "/*! Super class that inherits a number of other classes */\n"
- "class Inherited : public PublicBase,\n"
- " protected ProtectedBase,\n"
- " private PrivateBase,\n"
- " public Undocumented,\n"
- " public Templ<int>\n"
- "{\n"
- " private:\n"
- " Used *m_usedClass;\n"
- "};\n"
- "\\endcode\n"
- "If the \\c MAX_DOT_GRAPH_HEIGHT tag in the configuration file "
- "is set to 200 this will result in the following graph:"
- "<p><center><img src=\"graph_legend."+Config_getEnum("DOT_IMAGE_FORMAT")+"\"></center>\n"
- "<p>\n"
- "The boxes in the above graph have the following meaning:\n"
- "<ul>\n"
- "<li>%A filled black box represents the struct or class for which the "
- "graph is generated.\n"
- "<li>%A box with a black border denotes a documented struct or class.\n"
- "<li>%A box with a grey border denotes an undocumented struct or class.\n"
- "<li>%A box with a red border denotes a documented struct or class for\n"
- "which not all inheritance/containment relations are shown. %A graph is "
- "truncated if it does not fit within the specified boundaries."
- "</ul>\n"
- "The arrows have the following meaning:\n"
- "<ul>\n"
- "<li>%A dark blue arrow is used to visualize a public inheritance "
- "relation between two classes.\n"
- "<li>%A dark green arrow is used for protected inheritance.\n"
- "<li>%A dark red arrow is used for private inheritance.\n"
- "<li>%A purple dashed arrow is used if a class is contained or used "
- "by another class. The arrow is labeled with the variable(s) "
- "through which the pointed class or struct is accessible. \n"
- "</ul>\n";
- }
- /*! text for the link to the legend page */
- virtual QCString trLegend()
- {
- return "legenda";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.2.0
-//////////////////////////////////////////////////////////////////////////
-
- /*! Used as a marker that is put before a test item */
- virtual QCString trTest()
- {
- return "Test";
- }
- /*! Used as the header of the test list */
- virtual QCString trTestList()
- {
- return "Test List";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.2.1
-//////////////////////////////////////////////////////////////////////////
-
- /*! Used as a section header for KDE-2 IDL methods */
- virtual QCString trDCOPMethods()
- {
- return "DCOP metode";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.2.2
-//////////////////////////////////////////////////////////////////////////
-
- /*! Used as a section header for IDL properties */
- virtual QCString trProperties()
- {
- return "IDL Lastnosti";
- }
- /*! Used as a section header for IDL property documentation */
- virtual QCString trPropertyDocumentation()
- {
- return "Opis IDL lastnosti";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.2.4
-//////////////////////////////////////////////////////////////////////////
-
- /*! Used for Java interfaces in the summary section of Java packages */
-/* virtual QCString trInterfaces() */
-/* { */
-/* return "Vmesniki"; */
-/* } */
- /*! Used for Java classes in the summary section of Java packages */
- virtual QCString trClasses()
- {
- if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
- {
- return "Podatkovne strukture";
- }
- else
- {
- return "Razredi";
- }
- }
- /*! Used as the title of a Java package */
- virtual QCString trPackage(const char *name)
- {
- return (QCString)"JAVA paket "+name;
- }
- /*! Title of the package index page */
- virtual QCString trPackageList()
- {
- return "Seznam JAVA paketov";
- }
- /*! The description of the package index page */
- virtual QCString trPackageListDescription()
- {
- return "Seznam JAVA paketov in njihovih kratkih opisov v primeru, da obstajajo:";
- }
- /*! The link name in the Quick links header for each page */
- virtual QCString trPackages()
- {
- return "JAVA paketi";
- }
- /*! Used as a chapter title for Latex & RTF output */
-/* virtual QCString trPackageDocumentation() */
-/* { */
-/* return "Opisi JAVA paketov"; */
-/* } */
- /*! Text shown before a multi-line define */
- virtual QCString trDefineValue()
- {
- return "Vrednost:";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.2.5
-//////////////////////////////////////////////////////////////////////////
-
- /*! Used as a marker that is put before a \\bug item */
- virtual QCString trBug()
- {
- return "Programska napaka";
- }
- /*! Used as the header of the bug list */
- virtual QCString trBugList()
- {
- return "Seznam programskih napak";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.2.6
-//////////////////////////////////////////////////////////////////////////
-
- /*! Used as ansicpg for RTF file
- *
- * The following table shows the correlation of Charset name, Charset Value and
- * <pre>
- * Codepage number:
- * Charset Name Charset Value(hex) Codepage number
- * ------------------------------------------------------
- * DEFAULT_CHARSET 1 (x01)
- * SYMBOL_CHARSET 2 (x02)
- * OEM_CHARSET 255 (xFF)
- * ANSI_CHARSET 0 (x00) 1252
- * RUSSIAN_CHARSET 204 (xCC) 1251
- * EE_CHARSET 238 (xEE) 1250
- * GREEK_CHARSET 161 (xA1) 1253
- * TURKISH_CHARSET 162 (xA2) 1254
- * BALTIC_CHARSET 186 (xBA) 1257
- * HEBREW_CHARSET 177 (xB1) 1255
- * ARABIC _CHARSET 178 (xB2) 1256
- * SHIFTJIS_CHARSET 128 (x80) 932
- * HANGEUL_CHARSET 129 (x81) 949
- * GB2313_CHARSET 134 (x86) 936
- * CHINESEBIG5_CHARSET 136 (x88) 950
- * </pre>
- *
- */
- virtual QCString trRTFansicp()
- {
- return "1250";
- }
-
-
- /*! Used as ansicpg for RTF fcharset
- * \see trRTFansicp() for a table of possible values.
- */
- virtual QCString trRTFCharSet()
- {
- return "0";
- }
-
- /*! Used as header RTF general index */
- virtual QCString trRTFGeneralIndex()
- {
- return "Indeks";
- }
-
- /*! This is used for translation of the word that will possibly
- * be followed by a single name or by a list of names
- * of the category.
- */
- virtual QCString trClass(bool first_capital, bool singular)
- {
- QCString result((first_capital ? "Razred" : "razred"));
- if (!singular) result+="i";
- return result;
- }
-
- /*! This is used for translation of the word that will possibly
- * be followed by a single name or by a list of names
- * of the category.
- */
- virtual QCString trFile(bool first_capital, bool singular)
- {
- QCString result((first_capital ? "Datotek" : "datotek"));
- if (!singular) result+="e";
- else result += "a";
- return result;
- }
-
- /*! This is used for translation of the word that will possibly
- * be followed by a single name or by a list of names
- * of the category.
- */
- virtual QCString trNamespace(bool first_capital, bool singular)
- {
- QCString result((first_capital ? "Imenski prostor" : "imenski prostor"));
- if (!singular) result+="i";
- return result;
- }
-
- /*! This is used for translation of the word that will possibly
- * be followed by a single name or by a list of names
- * of the category.
- */
- virtual QCString trGroup(bool first_capital, bool singular)
- {
- QCString result((first_capital ? "Skupina" : "skupina"));
- if (!singular) result+="s";
- return result;
- }
-
- /*! This is used for translation of the word that will possibly
- * be followed by a single name or by a list of names
- * of the category.
- */
- virtual QCString trPage(bool first_capital, bool singular)
- {
- QCString result((first_capital ? "Stran" : "stran"));
- if (!singular) result+="i";
- return result;
- }
-
- /*! This is used for translation of the word that will possibly
- * be followed by a single name or by a list of names
- * of the category.
- */
- virtual QCString trMember(bool first_capital, bool singular)
- {
- QCString result((first_capital ? "Element" : "element"));
- if (!singular) result+="i";
- return result;
- }
-
- /*! This is used for translation of the word that will possibly
- * be followed by a single name or by a list of names
- * of the category.
- */
-/* virtual QCString trField(bool first_capital, bool singular) */
-/* { */
-/* QCString result((first_capital ? "Polj" : "polj")); */
-/* if (!singular) result+="a"; */
-/* else result += "e"; */
-/* return result; */
-/* } */
-
- /*! This is used for translation of the word that will possibly
- * be followed by a single name or by a list of names
- * of the category.
- */
- virtual QCString trGlobal(bool first_capital, bool singular)
- {
- QCString result((first_capital ? "Global" : "global"));
- if (!singular) result+="s";
- return result;
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.2.7
-//////////////////////////////////////////////////////////////////////////
-
- /*! This text is generated when the \\author command is used and
- * for the author section in man pages. */
- virtual QCString trAuthor(bool first_capital, bool singular)
- {
- QCString result((first_capital ? "Avtor" : "avtor"));
- if (!singular) result+="ji";
- return result;
- }
-//////////////////////////////////////////////////////////////////////////
-// new since 1.2.11
-//////////////////////////////////////////////////////////////////////////
-
- /*! This text is put before the list of members referenced by a member
- */
- virtual QCString trReferences()
- {
- return "Reference";
- }
-//////////////////////////////////////////////////////////////////////////
-// new since 1.2.13
-//////////////////////////////////////////////////////////////////////////
-
- /*! used in member documentation blocks to produce a list of
- * members that are implemented by this one.
- */
- virtual QCString trImplementedFromList(int numEntries)
- {
- return "Implementira "+trWriteList(numEntries)+".";
- }
-
- /*! used in member documentation blocks to produce a list of
- * all members that implement this abstract member.
- */
- virtual QCString trImplementedInList(int numEntries)
- {
- return "Implementirano v "+trWriteList(numEntries)+".";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.2.16
-//////////////////////////////////////////////////////////////////////////
-
- /*! used in RTF documentation as a heading for the Table
- * of Contents.
- */
- virtual QCString trRTFTableOfContents()
- {
- return "Vsebina";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.2.17
-//////////////////////////////////////////////////////////////////////////
-
- /*! Used as the header of the list of item that have been
- * flagged deprecated
- */
- virtual QCString trDeprecatedList()
- {
- return "Seznam opuÅ¡Äenih";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.2.18
-//////////////////////////////////////////////////////////////////////////
-
- /*! Used as a header for declaration section of the events found in
- * a C# program
- */
- virtual QCString trEvents()
- {
- return "Dogodki";
- }
- /*! Header used for the documentation section of a class' events. */
- virtual QCString trEventDocumentation()
- {
- return "Opisi dogodkov";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.3
-//////////////////////////////////////////////////////////////////////////
-
- /*! Used as a heading for a list of Java class types with package scope.
- */
- virtual QCString trPackageTypes()
- {
- return "Tipi paketov";
- }
- /*! Used as a heading for a list of Java class functions with package
- * scope.
- */
- virtual QCString trPackageMembers()
- {
- return "Funkcije paketa"; /* don't know the context */
- }
- /*! Used as a heading for a list of static Java class functions with
- * package scope.
- */
- virtual QCString trStaticPackageMembers()
- {
- return "StatiÄne funkcije paketa";
- }
- /*! Used as a heading for a list of Java class variables with package
- * scope.
- */
- virtual QCString trPackageAttribs()
- {
- return "Atributi paketa";
- }
- /*! Used as a heading for a list of static Java class variables with
- * package scope.
- */
- virtual QCString trStaticPackageAttribs()
- {
- return "StatiÄni atributi paketa";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.3.1
-//////////////////////////////////////////////////////////////////////////
-
- /*! Used in the quick index of a class/file/namespace member list page
- * to link to the unfiltered list of all members.
- */
- virtual QCString trAll()
- {
- return "Vse";
- }
- /*! Put in front of the call graph for a function. */
- virtual QCString trCallGraph()
- {
- return "Graf klicev tekoÄe funkcije:";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.3.3
-//////////////////////////////////////////////////////////////////////////
-
- /*! When the search engine is enabled this text is put in the header
- * of each page before the field where one can enter the text to search
- * for.
- */
- virtual QCString trSearchForIndex()
- {
- return "IÅ¡Äi";
- }
- /*! This string is used as the title for the page listing the search
- * results.
- */
- virtual QCString trSearchResultsTitle()
- {
- return "Rezultat(i) iskanja";
- }
- /*! This string is put just before listing the search results. The
- * text can be different depending on the number of documents found.
- * Inside the text you can put the special marker $num to insert
- * the number representing the actual number of search results.
- * The @a numDocuments parameter can be either 0, 1 or 2, where the
- * value 2 represents 2 or more matches. HTML markup is allowed inside
- * the returned string.
- */
- virtual QCString trSearchResults(int numDocuments)
- {
- if (numDocuments==0)
- {
- return "Oprostite, noben dokument ne ustreza vašemu povpraševanju.";
- }
- else if (numDocuments==1)
- {
- return "Našel sem <b>1</b> dokument, ki ustreza vašemu povpraševanju.";
- }
- else if (numDocuments==2)
- {
- return "Našel sem <b>2</b> dokumenta, ki ustrezata vašemu povpraševanju.";
- }
- else
- {
- return "Našel sem <b>$num</b> dokumentov, ki ustrezajo vašemu povpraševanju. "
- "Dokumenti z najboljÅ¡o stopnjo ujemanja se nahajajo na zaÄetku.";
- }
- }
- /*! This string is put before the list of matched words, for each search
- * result. What follows is the list of words that matched the query.
- */
- virtual QCString trSearchMatches()
- {
- return "Zadetki:";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.3.8
-//////////////////////////////////////////////////////////////////////////
-
- /*! This is used in HTML as the title of page with source code for file filename
- */
- virtual QCString trSourceFile(QCString& filename)
- {
- return filename + " izvorna koda";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.3.9
-//////////////////////////////////////////////////////////////////////////
-
- /*! This is used as the name of the chapter containing the directory
- * hierarchy.
- */
- virtual QCString trDirIndex()
- { return "Hierarhija imenikov"; }
-
- /*! This is used as the name of the chapter containing the documentation
- * of the directories.
- */
- virtual QCString trDirDocumentation()
- { return "Opisi imenikov"; }
-
- /*! This is used as the title of the directory index and also in the
- * Quick links of an HTML page, to link to the directory hierarchy.
- */
- virtual QCString trDirectories()
- { return "Imeniki"; }
-
- /*! This returns a sentences that introduces the directory hierarchy.
- * and the fact that it is sorted alphabetically per level
- */
- virtual QCString trDirDescription()
- { return "Imeniška hierarhija je urejena v glavnem, toda ne popolnoma, po abecedi, ";
- }
-
- /*! This returns the title of a directory page. The name of the
- * directory is passed via \a dirName.
- */
- virtual QCString trDirReference(const char *dirName)
- { QCString result=dirName;
- result+=" imeniške reference"; /* not sure for context */
- return result;
- }
-
- /*! This returns the word directory with or without starting capital
- * (\a first_capital) and in sigular or plural form (\a singular).
- */
- virtual QCString trDir(bool first_capital, bool singular)
- {
- QCString result((first_capital ? "Imenik" : "imenik"));
- if (singular) result+="i"; else result+="";
- return result;
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.4.1
-//////////////////////////////////////////////////////////////////////////
-
- /*! This text is added to the documentation when the \\overload command
- * is used for a overloaded function.
- */
- virtual QCString trOverloadText()
- {
- return "To je ponovno definirana metoda, " /* don't know Slovene expresion for overloaded */
- "podana je zaradi priroÄnosti. Metoda se od predhodnje razlikuje "
- "samo v Å¡tevilu in/ali tipu formalnih argumentov.";
- }
-};
-
-#endif
diff --git a/trunk/src/translator_sk.h b/trunk/src/translator_sk.h
deleted file mode 100644
index 904b609..0000000
--- a/trunk/src/translator_sk.h
+++ /dev/null
@@ -1,1854 +0,0 @@
-/******************************************************************************
- *
- *
- *
- * Copyright (C) 1997-2012 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.
- *
- * ----------------------------------------------------------------------------*/
-
-// Updates:
-// --------
-// 2011/07/28 - Updates for "new since 1.7.5".
-// 2010/06/04 - big leap from 1.2.18 to 1.6.3+
-//
-// Slovak translation started by Stanislav Kudlac (skudlac at pobox dot sk).
-// He resigned in March 2008 (thanks for the work). Until a "native Slovak"
-// maintainer is found, the TranslatorSlovak is maintained by Petr Prikryl with
-// Slovak speaking Kali and Laco Å vec.
-// ----------------------------------------------------------------------------
-
-#ifndef TRANSLATOR_SK_H
-#define TRANSLATOR_SK_H
-
-class TranslatorSlovak : public Translator
-{
- public:
- // --- Language control methods -------------------
-
- virtual QCString idLanguage()
- { return "slovak"; }
-
- virtual QCString latexLanguageSupportCommand()
- { return "\\usepackage[slovak]{babel}\n"; }
-
- /*! return the language charset. This will be used for the HTML output */
- virtual QCString idLanguageCharset()
- {
- return "utf-8";
- }
-
- // --- Language translation methods -------------------
-
- /*! used in the compound documentation before a list of related functions. */
- virtual QCString trRelatedFunctions()
- { return "Súvisiace funkcie"; }
-
- /*! subscript for the related functions. */
- virtual QCString trRelatedSubscript()
- { return "(Uvedené funkcie niesú Älenskými funkciami.)"; }
-
- /*! header that is put before the detailed description of files, classes and namespaces. */
- virtual QCString trDetailedDescription()
- { return "Detailný popis"; }
-
- /*! header that is put before the list of typedefs. */
- virtual QCString trMemberTypedefDocumentation()
- { return "Dokumentácia k Älenským typom"; }
-
- /*! header that is put before the list of enumerations. */
- virtual QCString trMemberEnumerationDocumentation()
- { return "Dokumentácia k Älenským enumeráciám"; }
-
- /*! header that is put before the list of member functions. */
- virtual QCString trMemberFunctionDocumentation()
- { return "Dokumentácia k metódam"; }
-
- /*! header that is put before the list of member attributes. */
- virtual QCString trMemberDataDocumentation()
- {
- if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
- {
- return "Dokumentácia k položkám";
- }
- else
- {
- return "Dokumentácia k dátovým Älenom";
- }
- }
-
- /*! this is the text of a link put after brief descriptions. */
- virtual QCString trMore()
- { return "..."; }
-
- /*! put in the class documentation */
- virtual QCString trListOfAllMembers()
- { return "Zoznam vÅ¡etkých Älenov."; }
-
- /*! used as the title of the "list of all members" page of a class */
- virtual QCString trMemberList()
- { return "Zoznam Älenov triedy"; }
-
- /*! this is the first part of a sentence that is followed by a class name */
- virtual QCString trThisIsTheListOfAllMembers()
- { return "Tu nájdete úplný zoznam Älenov triedy "; }
-
- /*! this is the remainder of the sentence after the class name */
- virtual QCString trIncludingInheritedMembers()
- { return ", vrátane vÅ¡etkých zdedených Älenov."; }
-
- /*! this is put at the author sections at the bottom of man pages.
- * parameter s is name of the project name.
- */
- virtual QCString trGeneratedAutomatically(const char *s)
- { QCString result("Generované automaticky programom Doxygen "
- "zo zdrojových textov");
- if (s)
- result+=(QCString)" projektu "+s;
- result+=".";
- return result;
- }
-
- /*! put after an enum name in the list of all members */
- virtual QCString trEnumName()
- { return "meno enumerácie"; }
-
- /*! put after an enum value in the list of all members */
- virtual QCString trEnumValue()
- { return "hodnota enumerácie"; }
-
- /*! put after an undocumented member in the list of all members */
- virtual QCString trDefinedIn()
- { return "definovaný v"; }
-
- // quick reference sections
-
- /*! This is put above each page as a link to the list of all groups of
- * compounds or files (see the \\group command).
- */
- virtual QCString trModules()
- { return "Moduly"; }
-
- /*! This is put above each page as a link to the class hierarchy */
- virtual QCString trClassHierarchy()
- { return "Hierarchia tried"; }
-
- /*! This is put above each page as a link to the list of annotated classes */
- virtual QCString trCompoundList()
- {
- if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
- {
- return "Dátové štruktúry";
- }
- else
- {
- return "Zoznam tried";
- }
- }
-
- /*! This is put above each page as a link to the list of documented files */
- virtual QCString trFileList()
- { return "Zoznam súborov"; }
-
- /*! This is put above each page as a link to all members of compounds. */
- virtual QCString trCompoundMembers()
- {
- if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
- {
- return "Dátové položky";
- }
- else
- {
- return "Zoznam Älenov tried";
- }
- }
-
- /*! This is put above each page as a link to all members of files. */
- virtual QCString trFileMembers()
- {
- if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
- {
- return "Globálne symboly";
- }
- else
- {
- return "Symboly v súboroch";
- }
- }
-
- /*! This is put above each page as a link to all related pages. */
- virtual QCString trRelatedPages()
- { return "Ostatné stránky"; }
-
- /*! This is put above each page as a link to all examples. */
- virtual QCString trExamples()
- { return "Príklady"; }
-
- /*! This is put above each page as a link to the search engine. */
- virtual QCString trSearch()
- { return "Hľadať"; }
-
- /*! This is an introduction to the class hierarchy. */
- virtual QCString trClassHierarchyDescription()
- { return "Tu nájdete zoznam, vyjadrujúci vzÅ¥ah dediÄnosti tried. "
- "Je zoradený približne (ale nie úplne) podľa abecedy:";
- }
-
- /*! This is an introduction to the list with all files. */
- virtual QCString trFileListDescription(bool extractAll)
- {
- QCString result("Tu nájdete zoznam všetkých ");
- if (!extractAll) result+="dokumentovaných ";
- result+="súborov so struÄnými popismi:";
- return result;
- }
-
- /*! This is an introduction to the annotated compound list. */
- virtual QCString trCompoundListDescription()
- {
- if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
- {
- return "Nasledujúci zoznam obsahuje identifikáciu dátových "
- "Å¡truktúr a ich struÄné popisy:";
- }
- else
- {
- return "Nasledujúci zoznam obsahuje predovšetkým identifikáciu "
- "tried, ale nachádzajú sa tu i ÄalÅ¡ie netriviálne prvky, "
- "ako sú štruktúry (struct), uniony (union) a rozhrania "
- "(interface). V zozname sú uvedené ich struÄné "
- "popisy:";
- }
- }
-
- /*! This is an introduction to the page with all class members. */
- virtual QCString trCompoundMembersDescription(bool extractAll)
- {
- QCString result= "Tu nájdete zoznam všetkých ";
- if (!extractAll)
- {
- result += "dokumentovaných ";
- }
-
- if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
- {
- result += "položiek štruktúr (struct) a unionov (union) ";
- }
- else
- {
- result += "Älenov tried ";
- }
-
- result += "s odkazmi na ";
-
- if (!extractAll)
- {
- if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
- {
- result += "dokumentáciu štruktúr/unionov, ku ktorým prislúchajú:";
- }
- else
- {
- result += "dokumentáciu tried, ku ktorým prislúchajú:";
- }
- }
- else
- {
- if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
- {
- result+="štruktúry/uniony, ku ktorým prislúchajú:";
- }
- else
- {
- result+="triedy, ku ktorým prislúchajú:";
- }
- }
-
- return result;
- }
-
- /*! This is an introduction to the page with all file members. */
- virtual QCString trFileMembersDescription(bool extractAll)
- {
- QCString result="Tu nájdete zoznam všetkých ";
- if (!extractAll) result+="dokumentovaných ";
-
- if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
- {
- result+="funkcií, premenných, makier, enumerácií a definícií typov (typedef) "
- "s odkazmi na ";
- }
- else
- {
- result+="symbolov, ktoré sú definované na úrovni svojich súborov. "
- "Pre každý symbol je uvedený odkaz na ";
- }
-
- if (extractAll)
- result+="súbory, ku ktorým prislúchajú:";
- else
- result+="dokumentáciu:";
-
- return result;
- }
-
- /*! This is an introduction to the page with the list of all examples */
- virtual QCString trExamplesDescription()
- { return "Tu nájdete zoznam všetkých príkladov:"; }
-
- /*! This is an introduction to the page with the list of related pages */
- virtual QCString trRelatedPagesDescription()
- { return "Nasledujúci zoznam odkazuje na ÄalÅ¡ie stránky projektu, "
- "ktoré majú charakter usporiadaných zoznamov informácií, "
- "pozbieraných z rôznych miest v zdrojových súboroch:"; }
-
- /*! This is an introduction to the page with the list of class/file groups */
- virtual QCString trModulesDescription()
- { return "Tu nájdete zoznam všetkých modulov:"; }
-
- // index titles (the project name is prepended for these)
-
- /*! This is used in HTML as the title of index.html. */
- virtual QCString trDocumentation()
- { return "Dokumentácia"; }
-
- /*! This is used in LaTeX as the title of the chapter with the
- * index of all groups.
- */
- virtual QCString trModuleIndex()
- { return "Register modulov"; }
-
- /*! This is used in LaTeX as the title of the chapter with the
- * class hierarchy.
- */
- virtual QCString trHierarchicalIndex()
- { return "Register hierarchie tried"; }
-
- /*! This is used in LaTeX as the title of the chapter with the
- * annotated compound index.
- */
- virtual QCString trCompoundIndex()
- {
- if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
- {
- return "Register dátových štruktúr";
- }
- else
- {
- return "Register tried";
- }
- }
-
- /*! This is used in LaTeX as the title of the chapter with the
- * list of all files.
- */
- virtual QCString trFileIndex()
- { return "Register súborov"; }
-
- /*! This is used in LaTeX as the title of the chapter containing
- * the documentation of all groups.
- */
- virtual QCString trModuleDocumentation()
- { return "Dokumentácia modulov"; }
-
- /*! This is used in LaTeX as the title of the chapter containing
- * the documentation of all classes, structs and unions.
- */
- virtual QCString trClassDocumentation()
- { return "Dokumentácia tried"; }
-
- /*! This is used in LaTeX as the title of the chapter containing
- * the documentation of all files.
- */
- virtual QCString trFileDocumentation()
- { return "Dokumentácia súborov"; }
-
- /*! This is used in LaTeX as the title of the chapter containing
- * the documentation of all examples.
- */
- virtual QCString trExampleDocumentation()
- { return "Dokumentácia príkladov"; }
-
- /*! This is used in LaTeX as the title of the chapter containing
- * the documentation of all related pages.
- */
- virtual QCString trPageDocumentation()
- { return "Dokumentácia súvisiacich stránok"; }
-
- /*! This is used in LaTeX as the title of the document */
- virtual QCString trReferenceManual()
- { return "ReferenÄná príruÄka"; }
-
- /*! This is used in the documentation of a file as a header before the
- * list of defines
- */
- virtual QCString trDefines()
- { return "Definícia makier"; }
-
- /*! This is used in the documentation of a file as a header before the
- * list of function prototypes
- */
- virtual QCString trFuncProtos()
- { return "Prototypy"; }
-
- /*! This is used in the documentation of a file as a header before the
- * list of typedefs
- */
- virtual QCString trTypedefs()
- { return "Definícia typov"; }
-
- /*! This is used in the documentation of a file as a header before the
- * list of enumerations
- */
- virtual QCString trEnumerations()
- { return "Enumerácie"; }
-
- /*! This is used in the documentation of a file as a header before the
- * list of (global) functions
- */
- virtual QCString trFunctions()
- { return "Funkcie"; }
-
- /*! This is used in the documentation of a file as a header before the
- * list of (global) variables
- */
- virtual QCString trVariables()
- { return "Premenné"; }
-
- /*! This is used in the documentation of a file as a header before the
- * list of (global) variables
- */
- virtual QCString trEnumerationValues()
- { return "Hodnoty enumerácií"; }
-
- /*! This is used in the documentation of a file before the list of
- * documentation blocks for defines
- */
- virtual QCString trDefineDocumentation()
- { return "Dokumentácia k definíciám makier"; }
-
- /*! This is used in the documentation of a file/namespace before the list
- * of documentation blocks for function prototypes
- */
- virtual QCString trFunctionPrototypeDocumentation()
- { return "Dokumentácia prototypov"; }
-
- /*! This is used in the documentation of a file/namespace before the list
- * of documentation blocks for typedefs
- */
- virtual QCString trTypedefDocumentation()
- { return "Dokumentácia definícií typov"; }
-
- /*! This is used in the documentation of a file/namespace before the list
- * of documentation blocks for enumeration types
- */
- virtual QCString trEnumerationTypeDocumentation()
- { return "Dokumentácia enumeraÄných typov"; }
-
- /*! This is used in the documentation of a file/namespace before the list
- * of documentation blocks for functions
- */
- virtual QCString trFunctionDocumentation()
- { return "Dokumentácia funkcií"; }
-
- /*! This is used in the documentation of a file/namespace before the list
- * of documentation blocks for variables
- */
- virtual QCString trVariableDocumentation()
- { return "Dokumentácia premenných"; }
-
- /*! This is used in the documentation of a file/namespace/group before
- * the list of links to documented compounds
- */
- virtual QCString trCompounds()
- {
- if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
- {
- return "Dátové štruktúry";
- }
- else
- {
- return "Triedy";
- }
- }
-
- /*! This is used in the standard footer of each page and indicates when
- * the page was generated
- */
- virtual QCString trGeneratedAt(const char *date,const char *projName)
- {
- QCString result=(QCString)"Generované "+date;
- if (projName) result+=(QCString)" pre projekt "+projName;
- result+=(QCString)" programom";
- return result;
- }
-
- /*! This is part of the sentence used in the standard footer of each page.
- */
- virtual QCString trWrittenBy()
- {
- return " -- autor ";
- }
-
- /*! this text is put before a class diagram */
- virtual QCString trClassDiagram(const char *clName)
- {
- return (QCString)"Diagram dediÄnosti pre triedu "+clName;
- }
-
- /*! this text is generated when the \\internal command is used. */
- virtual QCString trForInternalUseOnly()
- { return "Iba pre interné použitie."; }
-
- /*! this text is generated when the \\warning command is used. */
- virtual QCString trWarning()
- { return "Pozor"; }
-
- /*! this text is generated when the \\version command is used. */
- virtual QCString trVersion()
- { return "Verzia"; }
-
- /*! this text is generated when the \\date command is used. */
- virtual QCString trDate()
- { return "Dátum"; }
-
- /*! this text is generated when the \\return command is used. */
- virtual QCString trReturns()
- { return "Návratová hodnota"; }
-
- /*! this text is generated when the \\sa command is used. */
- virtual QCString trSeeAlso()
- { return "Viz tiež"; }
-
- /*! this text is generated when the \\param command is used. */
- virtual QCString trParameters()
- { return "Parametre"; }
-
- /*! this text is generated when the \\exception command is used. */
- virtual QCString trExceptions()
- { return "Výnimky"; }
-
- /*! this text is used in the title page of a LaTeX document. */
- virtual QCString trGeneratedBy()
- { return "Generované programom"; }
-
- // new since 0.49-990307
-
- /*! used as the title of page containing all the index of all namespaces. */
- virtual QCString trNamespaceList()
- { return "Zoznam priestorov mien"; }
-
- /*! used as an introduction to the namespace list */
- virtual QCString trNamespaceListDescription(bool extractAll)
- {
- QCString result="Tu nájdete zoznam všetkých ";
- if (!extractAll) result+="dokumentovaných ";
- result+="priestorov mien so struÄným popisom:";
- return result;
- }
-
- /*! used in the class documentation as a header before the list of all
- * friends of a class
- */
- virtual QCString trFriends()
- { return "Priatelia (friends)"; }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 0.49-990405
-//////////////////////////////////////////////////////////////////////////
-
- /*! used in the class documentation as a header before the list of all
- * related classes
- */
- virtual QCString trRelatedFunctionDocumentation()
- { return "Dokumentácia k priateľom (friends)"; }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 0.49-990425
-//////////////////////////////////////////////////////////////////////////
-
- /*! used as the title of the HTML page of a class/struct/union */
- virtual QCString trCompoundReference(const char *clName,
- ClassDef::CompoundType compType,
- bool isTemplate)
- {
- QCString result("Dokumentácia ");
- if (isTemplate) result+="šablóny ";
- switch(compType)
- {
- case ClassDef::Class: result+="triedy "; break;
- case ClassDef::Struct: result+="štruktúry "; break;
- case ClassDef::Union: result+="unionu "; break;
- case ClassDef::Interface: result+="rozhrania "; break;
- case ClassDef::Protocol: result+="protokol "; break;
- case ClassDef::Category: result+="kategória "; break;
- case ClassDef::Exception: result+="výnimky "; break;
- }
- result+=clName;
- return result;
- }
-
- /*! used as the title of the HTML page of a file */
- virtual QCString trFileReference(const char *fileName)
- {
- QCString result("Dokumentácia súboru ");
- result+=fileName;
- return result;
- }
-
- /*! used as the title of the HTML page of a namespace */
- virtual QCString trNamespaceReference(const char *namespaceName)
- {
- QCString result("Dokumentácia priestoru mien ");
- result+=namespaceName;
- return result;
- }
-
- /* these are for the member sections of a class, struct or union */
- virtual QCString trPublicMembers()
- { return "Verejné metódy"; }
- virtual QCString trPublicSlots()
- { return "Verejné sloty"; }
- virtual QCString trSignals()
- { return "Signály"; }
- virtual QCString trStaticPublicMembers()
- { return "Statické verejné metódy"; }
- virtual QCString trProtectedMembers()
- { return "Chránené metódy"; }
- virtual QCString trProtectedSlots()
- { return "Chránené sloty"; }
- virtual QCString trStaticProtectedMembers()
- { return "Statické chránené metódy"; }
- virtual QCString trPrivateMembers()
- { return "Privátne metódy"; }
- virtual QCString trPrivateSlots()
- { return "Privátne sloty"; }
- virtual QCString trStaticPrivateMembers()
- { return "Statické privátne metódy"; }
-
- /*! this function is used to produce a comma-separated list of items.
- * use generateMarker(i) to indicate where item i should be put.
- */
- virtual QCString trWriteList(int numEntries)
- {
- QCString result;
- int i;
- // the inherits list contain `numEntries' classes
- for (i=0;i<numEntries;i++)
- {
- // use generateMarker to generate placeholders for the class links!
- result+=generateMarker(i); // generate marker for entry i in the list
- // (order is left to right)
-
- if (i!=numEntries-1) // not the last entry, so we need a separator
- {
- if (i<numEntries-2) // not the fore last entry
- result+=", ";
- else // the fore last entry
- result+=" a ";
- }
- }
- return result;
- }
-
- /*! used in class documentation to produce a list of base classes,
- * if class diagrams are disabled.
- */
- virtual QCString trInheritsList(int numEntries)
- {
- QCString result("Dedí od ");
- result += (numEntries == 1) ? "bázovej triedy " : "bázových tried ";
- result += trWriteList(numEntries)+".";
- return result;
- }
-
- /*! used in class documentation to produce a list of super classes,
- * if class diagrams are disabled.
- */
- virtual QCString trInheritedByList(int numEntries)
- {
- QCString result("Zdedená ");
- result += (numEntries == 1) ? "triedou " : "triedami ";
- result += trWriteList(numEntries)+".";
- return result;
- }
-
- /*! used in member documentation blocks to produce a list of
- * members that are hidden by this one.
- */
- virtual QCString trReimplementedFromList(int numEntries)
- {
- QCString result("Reimplementuje ");
- result += (numEntries == 1) ? "metódu triedy " : "metódy tried ";
- result += trWriteList(numEntries)+".";
- return result;
- }
-
- /*! used in member documentation blocks to produce a list of
- * all member that overwrite the implementation of this member.
- */
- virtual QCString trReimplementedInList(int numEntries)
- {
- QCString result("Reimplementované ");
- result += (numEntries == 1) ? "triedou " : "triedami ";
- result += trWriteList(numEntries)+".";
- return result;
- }
-
- /*! This is put above each page as a link to all members of namespaces. */
- virtual QCString trNamespaceMembers()
- { return "Symboly v priestoroch mien"; }
-
- /*! This is an introduction to the page with all namespace members */
- virtual QCString trNamespaceMemberDescription(bool extractAll)
- {
- QCString result="Tu nájdete zoznam všetkých ";
- if (!extractAll) result+="dokumentovaných ";
- result+="symbolov, ktoré sú definované vo svojich priestoroch mien. "
- "U každého je uvedený odkaz na ";
- if (extractAll)
- result+="dokumentáciu príslušného priestoru mien:";
- else
- result+="príslušný priestor mien:";
- return result;
- }
- /*! This is used in LaTeX as the title of the chapter with the
- * index of all namespaces.
- */
- virtual QCString trNamespaceIndex()
- { return "Register priestorov mien"; }
-
- /*! This is used in LaTeX as the title of the chapter containing
- * the documentation of all namespaces.
- */
- virtual QCString trNamespaceDocumentation()
- { return "Dokumentácia priestorov mien"; }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 0.49-990522
-//////////////////////////////////////////////////////////////////////////
-
- /*! This is used in the documentation before the list of all
- * namespaces in a file.
- */
- virtual QCString trNamespaces()
- { return "Priestory mien"; }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 0.49-990728
-//////////////////////////////////////////////////////////////////////////
-
- /*! This is put at the bottom of a class documentation page and is
- * followed by a list of files that were used to generate the page.
- */
- virtual QCString trGeneratedFromFiles(ClassDef::CompoundType compType,
- bool single)
- { // here s is one of " Class", " Struct" or " Union"
- // single is true implies a single file
- QCString result=(QCString)"Dokumentácia pre ";
- switch(compType)
- {
- case ClassDef::Class: result+="túto triedu"; break;
- case ClassDef::Struct: result+="túto štruktúru (struct)"; break;
- case ClassDef::Union: result+="tento union"; break;
- case ClassDef::Interface: result+="toto rozhranie"; break;
- case ClassDef::Protocol: result+="protokol"; break;
- case ClassDef::Category: result+="kategória"; break;
- case ClassDef::Exception: result+="túto výnimku"; break;
- }
- result+=" bola generovaná z ";
- if (single) result+="nasledujúceho súboru:";
- else result+="nasledujúcich súborov:";
- return result;
- }
-
- /*! This is in the (quick) index as a link to the alphabetical compound
- * list.
- */
- virtual QCString trAlphabeticalList()
- { return "Register tried"; }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 0.49-990901
-//////////////////////////////////////////////////////////////////////////
-
- /*! This is used as the heading text for the retval command. */
- virtual QCString trReturnValues()
- { return "Návratové hodnoty"; }
-
- /*! This is in the (quick) index as a link to the main page (index.html)
- */
- virtual QCString trMainPage()
- { return "Hlavná stránka"; }
-
- /*! This is used in references to page that are put in the LaTeX
- * documentation. It should be an abbreviation of the word page.
- */
- virtual QCString trPageAbbreviation()
- { return "s."; }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 0.49-991003
-//////////////////////////////////////////////////////////////////////////
-
- virtual QCString trDefinedAtLineInSourceFile()
- {
- return "Definícia je uvedená na riadku @0 v súbore @1.";
- }
- virtual QCString trDefinedInSourceFile()
- {
- return "Definícia v súbore @0.";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 0.49-991205
-//////////////////////////////////////////////////////////////////////////
-
- virtual QCString trDeprecated()
- {
- return "Zastaralé";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.0.0
-//////////////////////////////////////////////////////////////////////////
-
- /*! this text is put before a collaboration diagram */
- virtual QCString trCollaborationDiagram(const char *clName)
- {
- return (QCString)"Diagram tried pre "+clName+":";
- }
- /*! this text is put before an include dependency graph */
- virtual QCString trInclDepGraph(const char *fName)
- {
- return (QCString)"Graf závislostí na vkladaných súboroch "
- "pre "+fName+":";
- }
- /*! header that is put before the list of constructor/destructors. */
- virtual QCString trConstructorDocumentation()
- {
- return "Dokumentácia konštruktoru a deštruktoru";
- }
- /*! Used in the file documentation to point to the corresponding sources. */
- virtual QCString trGotoSourceCode()
- {
- return "Zobraziť zdrojový text tohoto súboru.";
- }
- /*! Used in the file sources to point to the corresponding documentation. */
- virtual QCString trGotoDocumentation()
- {
- return "Zobraziť dokumentáciu tohoto súboru.";
- }
- /*! Text for the \\pre command */
- virtual QCString trPrecondition()
- {
- return "Prepodmienka";
- }
- /*! Text for the \\post command */
- virtual QCString trPostcondition()
- {
- return "Postpodmienka";
- }
- /*! Text for the \\invariant command */
- virtual QCString trInvariant()
- {
- return "Invariant";
- }
- /*! Text shown before a multi-line variable/enum initialization */
- virtual QCString trInitialValue()
- {
- return "Inicializátor:";
- }
- /*! Text used the source code in the file index */
- virtual QCString trCode()
- {
- return "zdrojový text";
- }
- virtual QCString trGraphicalHierarchy()
- {
- return "Grafické zobrazenie hierarchie tried";
- }
- virtual QCString trGotoGraphicalHierarchy()
- {
- return "Zobraziť grafickú podobu hierarchie tried";
- }
- virtual QCString trGotoTextualHierarchy()
- {
- return "Zobraziť textovú podobu hierarchie tried";
- }
- virtual QCString trPageIndex()
- {
- return "Register stránok";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.1.0
-//////////////////////////////////////////////////////////////////////////
-
- virtual QCString trNote()
- {
- return "Poznámka";
- }
- virtual QCString trPublicTypes()
- {
- return "Verejné typy";
- }
- virtual QCString trPublicAttribs()
- {
- if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
- {
- return "Dátové položky";
- }
- else
- {
- return "Verejné atribúty";
- }
- }
- virtual QCString trStaticPublicAttribs()
- {
- return "Statické verejné atribúty";
- }
- virtual QCString trProtectedTypes()
- {
- return "Chránené typy";
- }
- virtual QCString trProtectedAttribs()
- {
- return "Chránené atribúty";
- }
- virtual QCString trStaticProtectedAttribs()
- {
- return "Statické chránené atribúty";
- }
- virtual QCString trPrivateTypes()
- {
- return "Privátne typy";
- }
- virtual QCString trPrivateAttribs()
- {
- return "Privátne atribúty";
- }
- virtual QCString trStaticPrivateAttribs()
- {
- return "Statické privátne atribúty";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.1.3
-//////////////////////////////////////////////////////////////////////////
-
- /*! Used as a marker that is put before a todo item */
- virtual QCString trTodo()
- {
- return "Plánované úpravy";
- }
- /*! Used as the header of the todo list */
- virtual QCString trTodoList()
- {
- return "Zoznam plánovaných úprav";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.1.4
-//////////////////////////////////////////////////////////////////////////
-
- virtual QCString trReferencedBy()
- {
- return "Používa sa v";
- }
- virtual QCString trRemarks()
- {
- return "Poznámky";
- }
- virtual QCString trAttention()
- {
- return "Upozornenie";
- }
- virtual QCString trInclByDepGraph()
- {
- return "Nasledujúci graf ukazuje, ktoré súbory priamo alebo "
- "nepriamo vkladajú tento súbor:";
- }
- virtual QCString trSince()
- {
- return "Od";
- }
-
-////////////////////////////////////////////////////////////////////////////
-// new since 1.1.5
-//////////////////////////////////////////////////////////////////////////
-
- /*! title of the graph legend page */
- virtual QCString trLegendTitle()
- {
- return "Vysvetlivky ku grafu";
- }
- /*! page explaining how the dot graph's should be interpreted */
- virtual QCString trLegendDocs()
- {
- return
- "Tu nájdete vysvetlenie, ako majú byť interpretované grafy, "
- "ktoré boli generované programom doxygen.<p>\n"
- "Uvažujte nasledujúci príklad:\n"
- "\\code\n"
- "/*! Neviditelná trieda, ktorá sa v grafe nezobrazuje, pretože "
- "došlo k orezaniu grafu. */\n"
- "class Invisible { };\n\n"
- "/*! Trieda, u ktorej doÅ¡lo k orezaniu grafu. VzÅ¥ah dediÄnosti "
- "je skrytý. */\n"
- "class Truncated : public Invisible { };\n\n"
- "/* Trieda, ktorá nieje dokumentovaná komentármi programu doxygen. */\n"
- "class Undocumented { };\n\n"
- "/*! Odvodená trieda s verejným (public) dedením bázovej triedy. */\n"
- "class PublicBase : public Truncated { };\n\n"
- "/*! Šablóna triedy. */\n"
- "template<class T> class Templ { };\n\n"
- "/*! Odvodená trieda s chráneným (protected) dedením bázovej triedy. */\n"
- "class ProtectedBase { };\n\n"
- "/*! Odvodená trieda s privátnym dedením bázovej triedy. */\n"
- "class PrivateBase { };\n\n"
- "/*! Trieda, ktorá je využívaná triedou Inherited. */\n"
- "class Used { };\n\n"
- "/*! Odvodená trieda, ktorá rôznym spôsobom dedí od viacerých bázových "
- "tried. */\n"
- "class Inherited : public PublicBase,\n"
- " protected ProtectedBase,\n"
- " private PrivateBase,\n"
- " public Undocumented,\n"
- " public Templ<int>\n"
- "{\n"
- " private:\n"
- " Used *m_usedClass;\n"
- "};\n"
- "\\endcode\n"
- "K vyššie uvedenému bude vygenerovaný nasledujúci graf:"
- "<p><center><img src=\"graph_legend."+Config_getEnum("DOT_IMAGE_FORMAT")+"\"></center>\n"
- "<p>\n"
- "Bloky (tj. uzly) v uvedenom grafe majú nasledujúci význam:\n"
- "<ul>\n"
- "<li>Čierne vyplnený obdĺžnik reprezentuje štruktúru alebo triedu, "
- "pre ktorú bol graf generovaný.\n"
- "<li>Obdĺžnik s Äiernym obrysom oznaÄuje dokumentovanú "
- "štruktúru alebo triedu.\n"
- "<li>Obdĺžnik so Å¡edým obrysom oznaÄuje nedokumentovanú "
- "štruktúru alebo triedu.\n"
- "<li>Obdĺžnik s Äerveným obrysom oznaÄuje dokumentovanú "
- "štruktúru alebo triedu, pre ktorú\n"
- "niesú zobrazené vÅ¡etky vzÅ¥ahy dediÄnosti alebo obsiahnutia. "
- "Graf je orezaný v prípade, kedy ho\n"
- "nieje možné umiestniť do vymedzených hraníc.\n"
- "</ul>\n"
- "Šípky (tj. hrany grafu) majú nasledujúcí význam:\n"
- "<ul>\n"
- "<li>Tmavo modrá šípka sa používa pre oznaÄenie vzÅ¥ahu verejnej "
- "dediÄnosti medzi dvoma triedami.\n"
- "<li>Tmavo zelená šípka oznaÄuje vzÅ¥ah chránenej dediÄnosti "
- "(protected).\n"
- "<li>Tmavo Äervená šípka oznaÄuje vzÅ¥ah privátnej dediÄnosti.\n"
- "<li>Purpurová šípka kreslená Äiarkovane sa používa v prípade, "
- "ak je trieda obsiahnutá v inej triede,\n"
- "alebo ak je používaná inou triedou. Je oznaÄená identifikátorom "
- "jednej alebo viacerých premenných (objektov), cez ktoré\n"
- "je trieda alebo štruktúra zprístupnena.\n"
- "</ul>\n";
- }
- /*! text for the link to the legend page */
- virtual QCString trLegend()
- {
- return "vysvetlivky";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.2.0
-//////////////////////////////////////////////////////////////////////////
-
- /*! Used as a marker that is put before a test item */
- virtual QCString trTest()
- {
- return "Test";
- }
-
- /*! Used as the header of the test list */
- virtual QCString trTestList()
- {
- return "Zoznam testov";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.2.1
-//////////////////////////////////////////////////////////////////////////
-
- /*! Used as a section header for KDE-2 IDL methods */
- virtual QCString trDCOPMethods()
- {
- return "Metódy DCOP";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.2.2
-//////////////////////////////////////////////////////////////////////////
-
- /*! Used as a section header for IDL properties */
- virtual QCString trProperties()
- {
- return "Vlastnosti";
- }
- /*! Used as a section header for IDL property documentation */
- virtual QCString trPropertyDocumentation()
- {
- return "Dokumentácia k vlastnosti";
- }
-//////////////////////////////////////////////////////////////////////////
-// new since 1.2.4
-//////////////////////////////////////////////////////////////////////////
-
- /*! Used for Java classes in the summary section of Java packages */
- virtual QCString trClasses()
- {
- return "Triedy";
- }
- /*! Used as the title of a Java package */
- virtual QCString trPackage(const char *name)
- {
- return (QCString)"Balík "+name;
- }
- /*! Title of the package index page */
- virtual QCString trPackageList()
- {
- return "Zoznam balíkov";
- }
- /*! The description of the package index page */
- virtual QCString trPackageListDescription()
- {
- return "Tu nájdete zoznam balíkov so struÄným popisom "
- "(pokiaľ bol uvedený):";
- }
- /*! The link name in the Quick links header for each page */
- virtual QCString trPackages()
- {
- return "Balíky";
- }
- /*! Text shown before a multi-line define */
- virtual QCString trDefineValue()
- {
- return "Hodnota:";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.2.5
-//////////////////////////////////////////////////////////////////////////
-
- /*! Used as a marker that is put before a \\bug item */
- virtual QCString trBug()
- {
- return "Chyba";
- }
- /*! Used as the header of the bug list */
- virtual QCString trBugList()
- {
- return "Zoznam chýb";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.2.6-20010422
-//////////////////////////////////////////////////////////////////////////
-
- /*! Used as ansicpg for RTF file */
- virtual QCString trRTFansicp()
- {
- return "1250";
- }
-
- /*! Used as ansicpg for RTF fcharset */
- virtual QCString trRTFCharSet()
- {
- return "3";
- }
-
- /*! Used as header RTF general index */
- virtual QCString trRTFGeneralIndex()
- {
- return "Index";
- }
-
- /*! This is used for translation of the word that will possibly
- * be followed by a single name or by a list of names
- * of the category.
- */
- virtual QCString trClass(bool first_capital, bool singular)
- {
- QCString result((first_capital ? "Tried" : "tried"));
- result+=(singular ? "a" : "y");
- return result;
- }
-
- /*! This is used for translation of the word that will possibly
- * be followed by a single name or by a list of names
- * of the category.
- */
- virtual QCString trFile(bool first_capital, bool singular)
- {
- QCString result((first_capital ? "Súbor" : "súbor"));
- if (!singular) result+="y";
- return result;
- }
-
- /*! This is used for translation of the word that will possibly
- * be followed by a single name or by a list of names
- * of the category.
- */
- virtual QCString trNamespace(bool first_capital, bool singular)
- {
- QCString result((first_capital ? "Priestor" : "priestor"));
- if (!singular) result+="y";
- result+=" mien";
- return result;
- }
-
- /*! This is used for translation of the word that will possibly
- * be followed by a single name or by a list of names
- * of the category.
- */
- virtual QCString trGroup(bool first_capital, bool singular)
- {
- QCString result((first_capital ? "Skupin" : "skupin"));
- result+=(singular ? "a" : "y");
- return result;
- }
-
- /*! This is used for translation of the word that will possibly
- * be followed by a single name or by a list of names
- * of the category.
- */
- virtual QCString trPage(bool first_capital, bool singular)
- {
- QCString result((first_capital ? "Stránk" : "stránk"));
- result+=(singular ? "a" : "y");
- return result;
- }
-
- /*! This is used for translation of the word that will possibly
- * be followed by a single name or by a list of names
- * of the category.
- */
- virtual QCString trMember(bool first_capital, bool singular)
- {
- QCString result((first_capital ? "ÄŒlen" : "Älen"));
- if (!singular) result+="y";
- return result;
- }
-
- /*! This is used for translation of the word that will possibly
- * be followed by a single name or by a list of names
- * of the category.
- */
- virtual QCString trGlobal(bool first_capital, bool singular)
- {
- QCString result((first_capital ? "Globáln" : "globáln"));
- result+=(singular ? "y" : "e");
- return result;
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.2.7
-//////////////////////////////////////////////////////////////////////////
-
- /*! This text is generated when the \\author command is used and
- * for the author section in man pages. */
- virtual QCString trAuthor(bool first_capital, bool singular)
- {
- QCString result((first_capital ? "Auto" : "auto"));
- result += (singular) ? "r" : "ri";
- return result;
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.2.11
-//////////////////////////////////////////////////////////////////////////
-
- /*! This text is put before the list of members referenced by a member
- */
- virtual QCString trReferences()
- {
- return "Odkazuje sa na";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.2.13
-//////////////////////////////////////////////////////////////////////////
-
- /*! used in member documentation blocks to produce a list of
- * members that are implemented by this one.
- */
- virtual QCString trImplementedFromList(int numEntries)
- {
- return "Implementuje " + trWriteList(numEntries) + ".";
- }
-
- /*! used in member documentation blocks to produce a list of
- * all members that implement this member.
- */
- virtual QCString trImplementedInList(int numEntries)
- {
- return "Implementované v " + trWriteList(numEntries) + ".";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.2.16
-//////////////////////////////////////////////////////////////////////////
-
- /*! used in RTF documentation as a heading for the Table
- * of Contents.
- */
- virtual QCString trRTFTableOfContents()
- {
- return "Obsah";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.2.17
-//////////////////////////////////////////////////////////////////////////
-
- /*! Used as the header of the list of item that have been
- * flagged deprecated
- */
- virtual QCString trDeprecatedList()
- {
- return "Zastarané metódy";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.2.18
-//////////////////////////////////////////////////////////////////////////
-
- /*! Used as a header for declaration section of the events found in
- * a C# program
- */
- virtual QCString trEvents()
- {
- return "Udalosti";
- }
- /*! Header used for the documentation section of a class' events. */
- virtual QCString trEventDocumentation()
- {
- return "Dokumentácia udalostí";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.3
-//////////////////////////////////////////////////////////////////////////
-
- /*! Used as a heading for a list of Java class types with package scope.
- */
- virtual QCString trPackageTypes()
- {
- return "Typy v balíku";
- }
- /*! Used as a heading for a list of Java class functions with package
- * scope.
- */
- virtual QCString trPackageMembers()
- {
- return "Funkcie v balíku";
- }
- /*! Used as a heading for a list of static Java class functions with
- * package scope.
- */
- virtual QCString trStaticPackageMembers()
- {
- return "Statické funkcie v balíku";
- }
- /*! Used as a heading for a list of Java class variables with package
- * scope.
- */
- virtual QCString trPackageAttribs()
- {
- return "Atribúty balíku";
- }
- /*! Used as a heading for a list of static Java class variables with
- * package scope.
- */
- virtual QCString trStaticPackageAttribs()
- {
- return "Statické atribúty balíku";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.3.1
-//////////////////////////////////////////////////////////////////////////
-
- /*! Used in the quick index of a class/file/namespace member list page
- * to link to the unfiltered list of all members.
- */
- virtual QCString trAll()
- {
- return "VÅ¡etko";
- }
- /*! Put in front of the call graph for a function. */
- virtual QCString trCallGraph()
- {
- return "Táto funkcia volá...";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.3.3
-//////////////////////////////////////////////////////////////////////////
-
- /*! When the search engine is enabled this text is put in the index
- * of each page before the search field.
- */
- virtual QCString trSearchForIndex()
- {
- return "Vyhľadať";
- }
- /*! This string is used as the title for the page listing the search
- * results.
- */
- virtual QCString trSearchResultsTitle()
- {
- return "Výsledky vyhľadávania";
- }
- /*! This string is put just before listing the search results. The
- * text can be different depending on the number of documents found.
- * Inside the text you can put the special marker $num to insert
- * the number representing the actual number of search results.
- * The @a numDocuments parameter can be either 0, 1 or 2, where the
- * value 2 represents 2 or more matches. HTML markup is allowed inside
- * the returned string.
- */
- virtual QCString trSearchResults(int numDocuments)
- {
- if (numDocuments==0)
- {
- return "Ľutujem. Vášmu dotazu neodpovedá žiadny dokument.";
- }
- else if (numDocuments==1)
- {
- return "Bol nájdený jediný dokument, ktorý vyhovuje vášmu dotazu.";
- }
- else
- {
- return "Bolo nájdených <b>$num</b> dokumentov, ktoré vyhovujú vášmu "
- "dotazu. Najviac odpovedajúce dokumenty sú ako prvé.";
- }
- }
- /*! This string is put before the list of matched words, for each search
- * result. What follows is the list of words that matched the query.
- */
- virtual QCString trSearchMatches()
- {
- return "Nájdené slová:";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.3.8
-//////////////////////////////////////////////////////////////////////////
-
- /*! This is used in HTML as the title of page with source code for file filename
- */
- virtual QCString trSourceFile(QCString& filename)
- {
- return QCString("Zdrojový súbor ") + filename;
- }
-
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.3.9
-//////////////////////////////////////////////////////////////////////////
-
-
- /*! This is used as the name of the chapter containing the directory
- * hierarchy.
- */
- virtual QCString trDirIndex()
- { return "Hierarchia adresárov"; }
-
- /*! This is used as the name of the chapter containing the documentation
- * of the directories.
- */
- virtual QCString trDirDocumentation()
- { return "Dokumentácia k adresárom"; }
-
- /*! This is used as the title of the directory index and also in the
- * Quick links of a HTML page, to link to the directory hierarchy.
- */
- virtual QCString trDirectories()
- { return "Adresáre"; }
-
- /*! This returns a sentences that introduces the directory hierarchy.
- * and the fact that it is sorted alphabetically per level
- */
- virtual QCString trDirDescription()
- {
- return "Následujúca hierarchia adresárov je zhruba, "
- "ale nie úplne, zoradená podľa abecedy:";
- }
-
- /*! This returns the title of a directory page. The name of the
- * directory is passed via \a dirName.
- */
- virtual QCString trDirReference(const char *dirName)
- {
- QCString result = "Referencia k adresáru ";
- result += dirName;
- return result;
- }
-
- /*! This returns the word directory with or without starting capital
- * (\a first_capital) and in sigular or plural form (\a singular).
- */
- virtual QCString trDir(bool first_capital, bool singular)
- {
- QCString result((first_capital ? "Adresár" : "adresár"));
- if ( ! singular)
- result += "e";
- return result;
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.4.1
-//////////////////////////////////////////////////////////////////////////
-
- /*! This text is added to the documentation when the \\overload command
- * is used for a overloaded function.
- */
- virtual QCString trOverloadText()
- {
- return "Ide o preťaženú (overloaded) metódu, "
- "ktorá má uľahÄiÅ¥ používanie. Od vyÅ¡Å¡ie uvedenej metódy sa odliÅ¡uje "
- "iba inak zadávanými argumentami.";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.4.6
-//////////////////////////////////////////////////////////////////////////
-
- virtual QCString trCallerGraph()
- { return "Túto funkciu volajú..."; }
-
-
- /*! This is used in the documentation of a file/namespace before the list
- * of documentation blocks for enumeration values
- */
- virtual QCString trEnumerationValueDocumentation()
- { return "Dokumentácia enumeraÄných hodnôt"; }
-
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.5.4 (mainly for Fortran)
-//////////////////////////////////////////////////////////////////////////
-
- /*! header that is put before the list of member subprograms (Fortran). */
- virtual QCString trMemberFunctionDocumentationFortran()
- { return "Dokumentácia Älenských funkcií/podprogramov"; }
-
- /*! This is put above each page as a link to the list of annotated data types (Fortran). */
- virtual QCString trCompoundListFortran()
- { return "Zoznam dátových typov"; }
-
- /*! This is put above each page as a link to all members of compounds (Fortran). */
- virtual QCString trCompoundMembersFortran()
- { return "Dátové polia"; }
-
- /*! This is an introduction to the annotated compound list (Fortran). */
- virtual QCString trCompoundListDescriptionFortran()
- { return "Dátové typy so struÄnými popismi:"; }
-
- /*! This is an introduction to the page with all data types (Fortran). */
- virtual QCString trCompoundMembersDescriptionFortran(bool extractAll)
- {
-
- QCString result="Nasleduje zoznam všetkých ";
- if (!extractAll)
- {
- result+="dokumentovaných ";
- }
- result+="zložiek dátových typov";
- result+=" s odkazmi na ";
- if (!extractAll)
- {
- result+="dokumentáciu dátovej štruktúry pre každú zložku:";
- }
- else
- {
- result+="příslušné dátové typy:";
- }
- return result;
- }
-
- /*! This is used in LaTeX as the title of the chapter with the
- * annotated compound index (Fortran).
- */
- virtual QCString trCompoundIndexFortran()
- { return "Register dátových typov"; }
-
- /*! This is used in LaTeX as the title of the chapter containing
- * the documentation of all data types (Fortran).
- */
- virtual QCString trTypeDocumentation()
- { return "Dokumentácia k dátovým typom"; }
-
- /*! This is used in the documentation of a file as a header before the
- * list of (global) subprograms (Fortran).
- */
- virtual QCString trSubprograms()
- { return "Funkcie/podprogramy"; }
-
- /*! This is used in the documentation of a file/namespace before the list
- * of documentation blocks for subprograms (Fortran)
- */
- virtual QCString trSubprogramDocumentation()
- { return "Dokumentácia funkcie/podprogramu"; }
-
- /*! This is used in the documentation of a file/namespace/group before
- * the list of links to documented compounds (Fortran)
- */
- virtual QCString trDataTypes()
- { return "Dátové typy"; }
-
- /*! used as the title of page containing all the index of all modules (Fortran). */
- virtual QCString trModulesList()
- { return "Zoznam modulov"; }
-
- /*! used as an introduction to the modules list (Fortran) */
- virtual QCString trModulesListDescription(bool extractAll)
- {
- QCString result="Nasleduje zoznam všetkých ";
- if (!extractAll) result+="dokumentovaných ";
- result+="modulov so struÄnými popismi:";
- return result;
- }
-
- /*! used as the title of the HTML page of a module/type (Fortran) */
- virtual QCString trCompoundReferenceFortran(const char *clName,
- ClassDef::CompoundType compType,
- bool isTemplate)
- {
- QCString result("Dokumentácia ");
- if (isTemplate) result += "šablóny ";
- switch(compType)
- {
- case ClassDef::Class: result += "triedy "; break;
- case ClassDef::Struct: result += "typu "; break;
- case ClassDef::Union: result += "únie "; break;
- case ClassDef::Interface: result += "rozhrania "; break;
- case ClassDef::Protocol: result += "protokolu "; break;
- case ClassDef::Category: result += "kategórie "; break;
- case ClassDef::Exception: result += "výnimky "; break;
- }
- result += clName;
- return result;
-
- }
- /*! used as the title of the HTML page of a module (Fortran) */
- virtual QCString trModuleReference(const char *namespaceName)
- {
- QCString result="Dokumentácia modulu ";
- result += namespaceName;
- return result;
- }
-
- /*! This is put above each page as a link to all members of modules. (Fortran) */
- virtual QCString trModulesMembers()
- { return "ÄŒasti modulu"; }
-
- /*! This is an introduction to the page with all modules members (Fortran) */
- virtual QCString trModulesMemberDescription(bool extractAll)
- {
- QCString result="Nasleduje zoznam všetkých ";
- if (!extractAll) result+="dokumentovaných ";
- result+="Äastí modulov s odkazmi ";
- if (extractAll)
- {
- result+="na dokumentáciu modulov pre danú ÄasÅ¥:";
- }
- else
- {
- result+="na moduly, ku ktorým ÄasÅ¥ patrí:";
- }
- return result;
- }
-
- /*! This is used in LaTeX as the title of the chapter with the
- * index of all modules (Fortran).
- */
- virtual QCString trModulesIndex()
- { return "Register modulov"; }
-
- /*! This is used for translation of the word that will possibly
- * be followed by a single name or by a list of names
- * of the category.
- */
- virtual QCString trModule(bool first_capital, bool singular)
- {
- QCString result((first_capital ? "Modul" : "modul"));
- if (!singular) result+="y";
- return result;
- }
- /*! This is put at the bottom of a module documentation page and is
- * followed by a list of files that were used to generate the page.
- */
- virtual QCString trGeneratedFromFilesFortran(ClassDef::CompoundType compType,
- bool single)
- { // here s is one of " Module", " Struct" or " Union"
- // single is true implies a single file
- QCString result=(QCString)"Dokumentácia ";
- switch(compType)
- {
- case ClassDef::Class: result+="k tomuto modulu"; break;
- case ClassDef::Struct: result+="k tomuto typu"; break;
- case ClassDef::Union: result+="k tejto únii"; break;
- case ClassDef::Interface: result+="k tomuto rozhraniu"; break;
- case ClassDef::Protocol: result+="k tomuto protokolu"; break;
- case ClassDef::Category: result+="k tejto kategórii"; break;
- case ClassDef::Exception: result+="k tejto výnimke"; break;
- }
- result+=" bola vygenerovaná z ";
- if (single) result+="nasledujúceho súboru:";
- else result+="nasledujúcich súborov:";
- return result;
- }
- /*! This is used for translation of the word that will possibly
- * be followed by a single name or by a list of names
- * of the category.
- */
- virtual QCString trType(bool first_capital, bool singular)
- {
- QCString result((first_capital ? "Typ" : "typ"));
- if (!singular) result+="y";
- return result;
- }
- /*! This is used for translation of the word that will possibly
- * be followed by a single name or by a list of names
- * of the category.
- */
- virtual QCString trSubprogram(bool first_capital, bool singular)
- {
- QCString result((first_capital ? "Podprogram" : "podprogram"));
- if (!singular) result+="y";
- return result;
- }
-
- /*! C# Type Contraint list */
- virtual QCString trTypeConstraints()
- {
- return "Obmedzenie typov (Type Constraints)";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.6.0 (mainly for the new search engine)
-//////////////////////////////////////////////////////////////////////////
-
- /*! directory relation for \a name */
- virtual QCString trDirRelation(const char *name)
- {
- return "Relácia " + QCString(name);
- }
-
- /*! Loading message shown when loading search results */
- virtual QCString trLoading()
- {
- return "NaÄítam...";
- }
-
- /*! Label used for search results in the global namespace */
- virtual QCString trGlobalNamespace()
- {
- return "Globálny priestor mien";
- }
-
- /*! Message shown while searching */
- virtual QCString trSearching()
- {
- return "Vyhľadávam...";
- }
-
- /*! Text shown when no search results are found */
- virtual QCString trNoMatches()
- {
- return "NiÄ sa nenaÅ¡lo";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.6.3 (missing items for the directory pages)
-//////////////////////////////////////////////////////////////////////////
-
- /*! introduction text for the directory dependency graph */
- virtual QCString trDirDependency(const char *name)
- {
- return (QCString)"Graf závislosti adresárov pre "+name;
- }
-
- /*! when clicking a directory dependency label, a page with a
- * table is shown. The heading for the first column mentions the
- * source file that has a relation to another file.
- */
- virtual QCString trFileIn(const char *name)
- {
- return (QCString)"Súbor v "+name;
- }
-
- /*! when clicking a directory dependency label, a page with a
- * table is shown. The heading for the second column mentions the
- * destination file that is included.
- */
- virtual QCString trIncludesFileIn(const char *name)
- {
- return (QCString)"Vkladá (include) súbor z "+name;
- }
-
- /** Compiles a date string.
- * @param year Year in 4 digits
- * @param month Month of the year: 1=January
- * @param day Day of the Month: 1..31
- * @param dayOfWeek Day of the week: 1=Monday..7=Sunday
- * @param hour Hour of the day: 0..23
- * @param minutes Minutes in the hour: 0..59
- * @param seconds Seconds within the minute: 0..59
- * @param includeTime Include time in the result string?
- */
- virtual QCString trDateTime(int year,int month,int day,int dayOfWeek,
- int hour,int minutes,int seconds,
- bool includeTime)
- {
- static const char *days[] = { "po","ut","st","Å¡t","pi","so","ne" };
- static const char *months[] = { "jan","feb","mar","apr","máj","jún","júl","aug","sep","okt","nov","dec" };
- QCString sdate;
- sdate.sprintf("%s %d. %s %d",days[dayOfWeek-1],day,months[month-1],year);
- if (includeTime)
- {
- QCString stime;
- stime.sprintf(" %.2d.%.2d:%.2d",hour,minutes,seconds);
- sdate+=stime;
- }
- return sdate;
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.7.5
-//////////////////////////////////////////////////////////////////////////
-
- /*! Header for the page with bibliographic citations */
- virtual QCString trCiteReferences()
- { return "Odkazy na literatúru"; }
-
- /*! Text for copyright paragraph */
- virtual QCString trCopyright()
- { return "Copyright"; }
-
- /*! Header for the graph showing the directory dependencies */
- virtual QCString trDirDepGraph(const char *name)
- { return QCString("Graf závislosti na prieÄinkoch pre ")+name+":"; }
-
-
-};
-
-#endif // TRANSLATOR_SK_H
diff --git a/trunk/src/translator_sr.h b/trunk/src/translator_sr.h
deleted file mode 100644
index 15d6700..0000000
--- a/trunk/src/translator_sr.h
+++ /dev/null
@@ -1,1838 +0,0 @@
-/******************************************************************************
- *
- *
- *
- * Copyright (C) 1997-2012 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.
- *
- */
-
-#ifndef TRANSLATOR_SR_H
-#define TRANSLATOR_SR_H
-
-// translation by Dejan D. M. Milosavljevic <dmilos@email.com>;<dmilosx@ptt.yu>;<office@ddmrm.com>
-// // 10x 2 Ivana Miletic for grammatical consultation.
-
-// UTF-8 patch by Nenad Bulatovic <buletina@gmail.com>
-// translation update by Andrija M. Bosnjakovic <andrija@etf.bg.ac.yu>
-
-class TranslatorSerbian : public TranslatorAdapter_1_6_0
-{
-private:
- QCString decode(const QCString& sInput)
- {
-//#ifdef _WIN32
-// return ISO88592ToWin1250(sInput);
-//#else
- return sInput;
-//#endif
- }
-
-
- public:
-
- // --- Language control methods -------------------
-
- /*! Used for identification of the language. The identification
- * should not be translated. It should be replaced by the name
- * of the language in English using lower-case characters only
- * (e.g. "czech", "japanese", "russian", etc.). It should be equal to
- * the identification used in language.cpp.
- */
- virtual QCString idLanguage()
- { return "serbian"; }
-
- /*! Used to get the LaTeX command(s) for the language support.
- * This method should return string with commands that switch
- * LaTeX to the desired language. For example
- * <pre>"\\usepackage[german]{babel}\n"
- * </pre>
- * or
- * <pre>"\\usepackage{polski}\n"
- * "\\usepackage[latin2]{inputenc}\n"
- * "\\usepackage[T1]{fontenc}\n"
- * </pre>
- *
- * The English LaTeX does not use such commands. Because of this
- * the empty string is returned in this implementation.
- */
- virtual QCString latexLanguageSupportCommand()
- {
- QCString result="\\usepackage[serbian]{babel}\n";
- return result;
- }
-
- /*! return the language charset. This will be used for the HTML output */
- virtual QCString idLanguageCharset()
- {
-//#ifdef _WIN32
-// { return "windows-1250"; }
-//#else
- { return "UTF-8"; }
-//#endif
- }
-
- // --- Language translation methods -------------------
-
- /*! used in the compound documentation before a list of related functions. */
- virtual QCString trRelatedFunctions()
- //! Čini se da je ovako manje loše nego "Povezane funkcije",
- //! što uopšte ne izgleda dobro jer ta kartica sadrži prijatelje i globalne funkcije
- { return decode( "Relevantne funkcije" ); }
-
- /*! subscript for the related functions. */
- virtual QCString trRelatedSubscript()
- { return decode( "(To nisu funkcije Älanice.)" ); }
-
- /*! header that is put before the detailed description of files, classes and namespaces. */
- virtual QCString trDetailedDescription()
- { return decode( "Opširniji opis" ); }
-
- /*! header that is put before the list of typedefs. */
- virtual QCString trMemberTypedefDocumentation()
- { return decode( "Dokumentacija unutrašnjih definicija tipa" ); }
-
- /*! header that is put before the list of enumerations. */
- virtual QCString trMemberEnumerationDocumentation()
- //! Ovo je u skladu sa "unutrašnja klasa" što se može videti u knjizi.
- { return decode( "Dokumentacija unutrašnjih nabrajanja" ); }
-
- /*! header that is put before the list of member functions. */
- virtual QCString trMemberFunctionDocumentation()
- { return decode( "Dokumentacija funkcija Älanica" ); }
-
- /*! header that is put before the list of member attributes. */
- virtual QCString trMemberDataDocumentation()
- {
- if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
- {
- return decode( "Dokumentacija polja" );
- }
- else
- {
- return decode( "Dokumentacija atributa" );
- }
- }
-
- /*! this is the text of a link put after brief descriptions. */
- virtual QCString trMore()
- { return decode( "Još..." ); }
-
- /*! put in the class documentation */
- virtual QCString trListOfAllMembers()
- { return decode( "Spisak svih Älanova." ); }
-
- /*! used as the title of the "list of all members" page of a class */
- virtual QCString trMemberList()
- { return decode( "Spisak Älanova" ); }
-
- /*! this is the first part of a sentence that is followed by a class name */
- virtual QCString trThisIsTheListOfAllMembers()
- { return decode( "Ovo je spisak svih Älanova " ); }
-
- /*! this is the remainder of the sentence after the class name */
- virtual QCString trIncludingInheritedMembers()
- { return decode( ", ukljuÄujući nasleÄ‘ene Älanove." ); }
-
- /*! this is put at the author sections at the bottom of man pages.
- * parameter s is name of the project name.
- */
- virtual QCString trGeneratedAutomatically(const char *s)
- { QCString result="Napravljeno automatski korišćenjem alata Doxygen";
- if( s ) result+=(QCString)" za projekat " + s;
- result+=" od izvornog koda.";
- return decode( result );
- }
-
- /*! put after an enum name in the list of all members */
- virtual QCString trEnumName()
- { return decode( "ime nabrajanja " ); }
-
- /*! put after an enum value in the list of all members */
- virtual QCString trEnumValue()
- { return decode( "vrednost nabrojane konstante" ); }
-
- /*! put after an undocumented member in the list of all members */
- virtual QCString trDefinedIn()
- { return decode( "definicija u" ); }
-
- // quick reference sections
-
- /*! This is put above each page as a link to the list of all groups of
- * compounds or files (see the \\group command).
- */
- virtual QCString trModules()
- { return decode( "Moduli" ); }
-
- /*! This is put above each page as a link to the class hierarchy */
- virtual QCString trClassHierarchy()
- { return decode( "Hijerarhija klasa" ); }
-
- /*! This is put above each page as a link to the list of annotated classes */
- virtual QCString trCompoundList()
- {
- if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
- {
- return decode( "Spisak struktura" );
- }
- else
- {
- return decode( "Spisak klasa" );
- }
- }
-
- /*! This is put above each page as a link to the list of documented files */
- virtual QCString trFileList()
- { return decode( "Spisak datoteka" ); }
-
- /*! This is put above each page as a link to all members of compounds. */
- virtual QCString trCompoundMembers()
- {
- if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
- {
- return decode( "Sva polja struktura" );
- }
- else
- {
- return decode( "Svi Älanovi klasa" );
- }
- }
-
- /*! This is put above each page as a link to all members of files. */
- virtual QCString trFileMembers()
- {
- if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
- {
- return decode( "ÄŒlanovi datoteke" );
- }
- else
- {
- return decode( "ÄŒlanovi datoteke" );
- }
- }
-
- /*! This is put above each page as a link to all related pages. */
- virtual QCString trRelatedPages()
- { return decode( "Stranice koje imaju veze sa ovom stranicom" ); }
-
- /*! This is put above each page as a link to all examples. */
- virtual QCString trExamples()
- { return decode( "Primeri" ); }
-
- /*! This is put above each page as a link to the search engine. */
- virtual QCString trSearch()
- { return decode( "Traži" ); }
-
- /*! This is an introduction to the class hierarchy. */
- virtual QCString trClassHierarchyDescription()
- { return decode( "Hijerahija klasa uređena približno "
- "po abecedi:" );
- }
-
- /*! This is an introduction to the list with all files. */
- virtual QCString trFileListDescription(bool extractAll)
- {
- QCString result="Spisak svih ";
- if (!extractAll) result+="dokumentovanih ";
- result+="datoteka, sa kratkim opisima:";
- return decode( result );
- }
-
- /*! This is an introduction to the annotated compound list. */
- virtual QCString trCompoundListDescription()
- {
-
- if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
- {
- return decode( "Spisak struktura sa kratkim opisima:" );
- }
- else
- {
- return decode( "Spisak klasa, struktura, "
- "unija i interfejsa sa kratkim opisima:" );
- }
- }
-
- /*! This is an introduction to the page with all class members. */
- virtual QCString trCompoundMembersDescription(bool extractAll)
- {
- QCString result="Spisak svih ";
- if (!extractAll)
- {
- result+="dokumentovanih ";
- }
- if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
- {
- result+="Älanova struktura/unija";
- }
- else
- {
- result+="Älanova klasa";
- }
- result+=" sa vezama ka ";
- if (extractAll)
- {
- if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
- {
- result+="dokumentaciji svakog polja strukture/unije:";
- }
- else
- {
- result+="dokumentaciji svakog Älana klase:";
- }
- }
- else
- {
- if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
- {
- result+="strukturama/unijama kojima pripadaju:";
- }
- else
- {
- result+="klasama kojima pripadaju:";
- }
- }
- return decode( result );
- }
-
- /*! This is an introduction to the page with all file members. */
- virtual QCString trFileMembersDescription(bool extractAll)
- {
- QCString result="Spisak svih ";
- if (!extractAll) result+="dokumentovanih ";
-
- if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
- {
- result+="funkcija, promenljivih, makro zamena, nabrajanja i definicija tipa";
- }
- else
- {
- result+="Älanova";
- }
- result+=" sa vezama ka ";
- if (extractAll)
- result+="datotekama u kojima se nalaze:";
- else
- result+="dokumentaciji:";
- return decode( result );
- }
-
- /*! This is an introduction to the page with the list of all examples */
- virtual QCString trExamplesDescription()
- { return decode( "Spisak svih primera:" ); }
-
- /*! This is an introduction to the page with the list of related pages */
- virtual QCString trRelatedPagesDescription()
- { return decode( "Spisak stranica koje imaju veze sa ovom stranicom:" ); }
-
- /*! This is an introduction to the page with the list of class/file groups */
- virtual QCString trModulesDescription()
- { return decode( "Spisak svih modula:" ); }
-
- // index titles (the project name is prepended for these)
-
- /*! This is used in HTML as the title of index.html. */
- virtual QCString trDocumentation()
- { return decode("Dokumentacija" ); }
-
- /*! This is used in LaTeX as the title of the chapter with the
- * index of all groups.
- */
- virtual QCString trModuleIndex()
- { return decode( "Indeks modula" ); }
-
- /*! This is used in LaTeX as the title of the chapter with the
- * class hierarchy.
- */
- virtual QCString trHierarchicalIndex()
- { return decode( "Hijerarhijski sadržaj" ); }
-
- /*! This is used in LaTeX as the title of the chapter with the
- * annotated compound index.
- */
- virtual QCString trCompoundIndex()
- {
- if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
- {
- return decode( "Spisak struktura/unija" );
- }
- else
- {
- return decode( "Spisak klasa" );
- }
- }
-
- /*! This is used in LaTeX as the title of the chapter with the
- * list of all files.
- */
- virtual QCString trFileIndex()
- { return decode( "Indeks datoteka" ); }
-
- /*! This is used in LaTeX as the title of the chapter containing
- * the documentation of all groups.
- */
- virtual QCString trModuleDocumentation()
- { return decode( "Dokumentacija modula" ); }
-
- /*! This is used in LaTeX as the title of the chapter containing
- * the documentation of all classes, structs and unions.
- */
- virtual QCString trClassDocumentation()
- {
- if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
- {
- return decode( "Dokumentacija stuktura/unija" );
- }
- else
- {
- return decode( "Dokumentacija klasa" );
- }
- }
-
- /*! This is used in LaTeX as the title of the chapter containing
- * the documentation of all files.
- */
- virtual QCString trFileDocumentation()
- { return decode( "Dokumentacija datoteke" ); }
-
- /*! This is used in LaTeX as the title of the chapter containing
- * the documentation of all examples.
- */
- virtual QCString trExampleDocumentation()
- { return decode( "Dokumentacija primera" ); }
-
- /*! This is used in LaTeX as the title of the chapter containing
- * the documentation of all related pages.
- */
- virtual QCString trPageDocumentation()
- { return decode( "Dokumentacija stranice" ); }
-
- /*! This is used in LaTeX as the title of the document */
- virtual QCString trReferenceManual()
- { return decode( "PriruÄnik" ); }
-
- /*! This is used in the documentation of a file as a header before the
- * list of defines
- */
- virtual QCString trDefines()
- { return decode( "Makro zamene" ); }
-
- /*! This is used in the documentation of a file as a header before the
- * list of function prototypes
- */
- virtual QCString trFuncProtos()
- { return decode( "Deklaracije funkcija" ); }
-
- /*! This is used in the documentation of a file as a header before the
- * list of typedefs
- */
- virtual QCString trTypedefs()
- { return decode( "Definicije tipa" ); }
-
- /*! This is used in the documentation of a file as a header before the
- * list of enumerations
- */
- virtual QCString trEnumerations()
- { return decode( "Nabrajanja" ); }
-
- /*! This is used in the documentation of a file as a header before the
- * list of (global) functions
- */
- virtual QCString trFunctions()
- { return decode( "Funkcije" ); }
-
- /*! This is used in the documentation of a file as a header before the
- * list of (global) variables
- */
- virtual QCString trVariables()
- { return decode( "Promenljive" ); }
-
- /*! This is used in the documentation of a file as a header before the
- * list of (global) variables
- */
- virtual QCString trEnumerationValues()
- { return decode( "Vrednosti nabrojanih konstanti" ); }
-
- /*! This is used in the documentation of a file before the list of
- * documentation blocks for defines
- */
- virtual QCString trDefineDocumentation()
- { return decode( "Dokumentacija makro zamene" ); }
-
- /*! This is used in the documentation of a file/namespace before the list
- * of documentation blocks for function prototypes
- */
- virtual QCString trFunctionPrototypeDocumentation()
- { return decode( "Dokumentacija deklaracije funkcije" ); }
-
- /*! This is used in the documentation of a file/namespace before the list
- * of documentation blocks for typedefs
- */
- virtual QCString trTypedefDocumentation()
- { return decode( "Dokumentacija definicije tipa" ); }
-
- /*! This is used in the documentation of a file/namespace before the list
- * of documentation blocks for enumeration types
- */
- virtual QCString trEnumerationTypeDocumentation()
- { return decode( "Dokumentacija nabrajanja" ); }
-
- /*! This is used in the documentation of a file/namespace before the list
- * of documentation blocks for functions
- */
- virtual QCString trFunctionDocumentation()
- { return decode( "Dokumentacija funkcije" ); }
-
- /*! This is used in the documentation of a file/namespace before the list
- * of documentation blocks for variables
- */
- virtual QCString trVariableDocumentation()
- { return decode( "Dokumentacija promenljive" ); }
-
- /*! This is used in the documentation of a file/namespace/group before
- * the list of links to documented compounds
- */
- virtual QCString trCompounds()
- {
- if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
- {
- return decode( "Strukture i unije" );
- }
- else
- {
- return decode( "Klase, strukture i unije" );
- }
- }
-
- /*! This is used in the standard footer of each page and indicates when
- * the page was generated
- */
- virtual QCString trGeneratedAt(const char *date,const char *projName)
- {
- QCString result=(QCString)"[" + date + "] Napravljeno automatski ";
- if ( projName ) result+=(QCString)" za projekat " + projName;
- result+=(QCString)" upotrebom ";
- return decode( result );
- }
- /*! This is part of the sentence used in the standard footer of each page.
- */
- virtual QCString trWrittenBy()
- {
- return decode( "napisao" );
- }
-
- /*! this text is put before a class diagram */
- virtual QCString trClassDiagram(const char *clName)
- {
- return decode( QCString("Dijagram nasleđivanja za klasu ") + clName + ":" );
- }
-
- /*! this text is generated when the \\internal command is used. */
- virtual QCString trForInternalUseOnly()
- { return decode( "Samo za unutrašnju upotrebu." ); }
-
- /*! this text is generated when the \\warning command is used. */
- virtual QCString trWarning()
- { return decode( "Upozorenje" ); }
-
- /*! this text is generated when the \\version command is used. */
- virtual QCString trVersion()
- { return decode( "Verzija" ); }
-
- /*! this text is generated when the \\date command is used. */
- virtual QCString trDate()
- { return decode( "Datum" ); }
-
- /*! this text is generated when the \\return command is used. */
- virtual QCString trReturns()
- { return decode( "Vrednost funkcije" ); }
-
- /*! this text is generated when the \\sa command is used. */
- virtual QCString trSeeAlso()
- { return decode( "Takođe pogledati" ); }
-
- /*! this text is generated when the \\param command is used. */
- virtual QCString trParameters()
- { return decode( "Parametri" ); }
-
- /*! this text is generated when the \\exception command is used. */
- virtual QCString trExceptions()
- { return decode( "Izuzeci" ); }
-
- /*! this text is used in the title page of a LaTeX document. */
- virtual QCString trGeneratedBy()
- { return decode( "Napravio" ); }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 0.49-990307
-//////////////////////////////////////////////////////////////////////////
-
- /*! used as the title of page containing all the index of all namespaces. */
- virtual QCString trNamespaceList()
- { return decode( "Spisak prostora imena" ); }
-
- /*! used as an introduction to the namespace list */
- virtual QCString trNamespaceListDescription(bool extractAll)
- {
- QCString result="Spisak svih ";
- if (!extractAll) result+="dokumentovanih ";
- result+="prostora imena sa kratkim opisom:";
- return decode( result );
- }
-
- /*! used in the class documentation as a header before the list of all
- * friends of a class
- */
- virtual QCString trFriends()
- { return decode( "Prijatelji" ); }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 0.49-990405
-//////////////////////////////////////////////////////////////////////////
-
- /*! used in the class documentation as a header before the list of all
- * related classes
- */
- virtual QCString trRelatedFunctionDocumentation()
- { return decode( "Dokumentacija prijatelja i relevantnih funkcija" ); }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 0.49-990425
-//////////////////////////////////////////////////////////////////////////
-
- /*! used as the title of the HTML page of a class/struct/union */
- virtual QCString trCompoundReference(const char *clName,
- ClassDef::CompoundType compType,
- bool isTemplate)
- {
- QCString result( "Dokumentacija " );
- switch(compType)
- {
- case ClassDef::Class: result+="klase "; break;
- case ClassDef::Struct: result+="strukture "; break;
- case ClassDef::Union: result+="unije "; break;
- case ClassDef::Interface: result+="interfejsa "; break;
- case ClassDef::Protocol: result+="protokola "; break;
- case ClassDef::Category: result+="kategorije "; break;
- case ClassDef::Exception: result+="izuzetka "; break;
- }
- if (isTemplate) result += "Å¡ablona ";
- result += clName;
- return decode( result );
- }
-
- /*! used as the title of the HTML page of a file */
- virtual QCString trFileReference(const char *fileName)
- {
- QCString result = "Opis datoteke ";
- result += fileName;
- return decode( result );
- }
-
- /*! used as the title of the HTML page of a namespace */
- virtual QCString trNamespaceReference(const char *namespaceName)
- {
- QCString result="Opis prostora imena ";
- result += namespaceName;
- return decode( result );
- }
-
- virtual QCString trPublicMembers()
- { return decode("Javni Älanovi"); }
- virtual QCString trPublicSlots()
- { return decode( "Javni slotovi" ); }
- virtual QCString trSignals()
- { return decode( "Signali" ); }
- virtual QCString trStaticPublicMembers()
- { return decode("ZajedniÄki javni Älanovi"); }
- virtual QCString trProtectedMembers()
- { return decode("ZaÅ¡tićeni Älanovi"); }
- virtual QCString trProtectedSlots()
- { return decode("Zaštićeni slotovi"); }
- virtual QCString trStaticProtectedMembers()
- { return decode("ZajedniÄki zaÅ¡tićeni Älanovi"); }
- virtual QCString trPrivateMembers()
- { return decode("Privatni Älanovi"); }
- virtual QCString trPrivateSlots()
- { return decode("Privatni slotovi"); }
- virtual QCString trStaticPrivateMembers()
- { return decode("ZajedniÄki privatni Älanovi"); }
-
- /*! this function is used to produce a comma-separated list of items.
- * use generateMarker(i) to indicate where item i should be put.
- */
- virtual QCString trWriteList(int numEntries)
- {
- QCString result;
- int i;
- // the inherits list contain `numEntries' classes
- for (i=0;i<numEntries;i++)
- {
- // use generateMarker to generate placeholders for the class links!
- result+=generateMarker(i); // generate marker for entry i in the list
- // (order is left to right)
-
- if (i!=numEntries-1) // not the last entry, so we need a separator
- {
- if (i<numEntries-2) // not the fore last entry
- result+=", ";
- else // the fore last entry
- result+=" i ";
- }
- }
- return result;
- }
-
- /*! used in class documentation to produce a list of base classes,
- * if class diagrams are disabled.
- */
- virtual QCString trInheritsList(int numEntries)
- {
- return decode("Spisak osnovnih klasa: "+trWriteList(numEntries)+".");
- }
-
- /*! used in class documentation to produce a list of derived classes,
- * if class diagrams are disabled.
- */
- virtual QCString trInheritedByList(int numEntries)
- {
- return decode( "Spisak izvedenih klasa: "+trWriteList(numEntries)+"." );
- }
-
- /*! used in member documentation blocks to produce a list of
- * members that are hidden by this one.
- */
- virtual QCString trReimplementedFromList(int numEntries)
- {
- return decode("Menja definiciju iz "+trWriteList(numEntries)+"." );
- }
-
- /*! used in member documentation blocks to produce a list of
- * all member that overwrite the implementation of this member.
- */
- virtual QCString trReimplementedInList(int numEntries)
- { //! Ako već ne možemo jednu reÄ (redefinicija), da uskladimo sa prethodnim i izbacimo upotrebu roda
- return decode("Definicija je izmenjena u "+trWriteList(numEntries)+"." );
- }
-
- /*! This is put above each page as a link to all members of namespaces. */
- virtual QCString trNamespaceMembers()
- { return decode("ÄŒlanovi prostora imena"); }
-
- /*! This is an introduction to the page with all namespace members */
- virtual QCString trNamespaceMemberDescription(bool extractAll)
- {
- QCString result="Spisak svih ";
- if (!extractAll) result+="dokumentovanih ";
- result+="Älanova prostora imena sa vezama prema ";
- if (extractAll)
- result+="dokumentaciji svakog Älana prostora imena: ";
- else
- result+="prostorima imena kojima pripadaju: ";
- return decode( result );
- }
- /*! This is used in LaTeX as the title of the chapter with the
- * index of all namespaces.
- */
- virtual QCString trNamespaceIndex()
- { return decode( "Indeks prostora imena" ); }
-
- /*! This is used in LaTeX as the title of the chapter containing
- * the documentation of all namespaces.
- */
- virtual QCString trNamespaceDocumentation()
- { return decode( "Dokumentacija prostora imena" ); }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 0.49-990522
-//////////////////////////////////////////////////////////////////////////
-
- /*! This is used in the documentation before the list of all
- * namespaces in a file.
- */
- virtual QCString trNamespaces()
- { return decode( "Prostori imena" ); }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 0.49-990728
-//////////////////////////////////////////////////////////////////////////
-
- /*! This is put at the bottom of a class documentation page and is
- * followed by a list of files that were used to generate the page.
- */
- virtual QCString trGeneratedFromFiles(ClassDef::CompoundType compType,
- bool single)
- { // here s is one of " Class", " Struct" or " Union"
- // single is true implies a single file
- QCString result=(QCString)"Dokumentacija ";
- switch(compType)
- {
- case ClassDef::Class: result+="ove klase"; break;
- case ClassDef::Struct: result+="ove strukture"; break;
- case ClassDef::Union: result+="ove unije"; break;
- case ClassDef::Interface: result+="ovog interfejsa"; break;
- case ClassDef::Protocol: result+="ovog protokola"; break;
- case ClassDef::Category: result+="ove kategorije"; break;
- case ClassDef::Exception: result+="ovog izuzetka"; break;
- }
- result+=" je napravljena na osnovu ";
- if (single) result+="datoteke "; else result+="sledećih datoteka:";
- return decode( result );
- }
-
- /*! This is in the (quick) index as a link to the alphabetical compound
- * list.
- */
- virtual QCString trAlphabeticalList()
- { return decode( "Abecedni spisak" ); }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 0.49-990901
-//////////////////////////////////////////////////////////////////////////
-
- /*! This is used as the heading text for the retval command. */
- virtual QCString trReturnValues()
- { return decode( "KarakteristiÄne vrednosti funkcije" ); }
-
- /*! This is in the (quick) index as a link to the main page (index.html)
- */
- virtual QCString trMainPage()
- { return decode( "Glavna strana" ); }
-
- /*! This is used in references to page that are put in the LaTeX
- * documentation. It should be an abbreviation of the word page.
- */
- virtual QCString trPageAbbreviation()
- { return decode( "str." ); }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 0.49-991003
-//////////////////////////////////////////////////////////////////////////
-
- virtual QCString trDefinedAtLineInSourceFile()
- { //! Izbacujemo rod
- return decode( "Definicija je u redu @0 datoteke @1." );
- }
- virtual QCString trDefinedInSourceFile()
- { //! Izbacujemo rod
- return decode( "Definicija je u datoteci @0." );
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 0.49-991205
-//////////////////////////////////////////////////////////////////////////
-
- virtual QCString trDeprecated()
- {
- return decode( "Zastarelo" );
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.0.0
-//////////////////////////////////////////////////////////////////////////
-
- /*! this text is put before a collaboration diagram */
- virtual QCString trCollaborationDiagram(const char *clName)
- {
- return decode( (QCString)"Klasni dijagram za "+clName+":" );
- }
- /*! this text is put before an include dependency graph */
- virtual QCString trInclDepGraph(const char *fName)
- {
- return decode( (QCString)"Graf zavisnosti datoteka za "+fName+":" );
- }
- /*! header that is put before the list of constructor/destructors. */
- virtual QCString trConstructorDocumentation()
- {
- return decode( "Dokumentacija konstruktora i destruktora" );
- }
- /*! Used in the file documentation to point to the corresponding sources. */
- virtual QCString trGotoSourceCode()
- {
- return decode( "Izvorni kod." );
- }
- /*! Used in the file sources to point to the corresponding documentation. */
- virtual QCString trGotoDocumentation()
- {
- return decode( "Dokumentacija." );
- }
- /*! Text for the \\pre command */
- virtual QCString trPrecondition()
- {
- return decode( "Preduslovi" );
- }
- /*! Text for the \\post command */
- virtual QCString trPostcondition()
- {
- return decode( "Stanje po izvršenju" );
- }
- /*! Text for the \\invariant command */
- virtual QCString trInvariant()
- {
- return decode( "Invarijanta" );
- }
- /*! Text shown before a multi-line variable/enum initialization */
- virtual QCString trInitialValue()
- {
- return decode( "PoÄetna vrednost:" );
- }
- /*! Text used the source code in the file index */
- virtual QCString trCode()
- {
- return decode( "programski kod" );
- }
- virtual QCString trGraphicalHierarchy()
- {
- return decode( "Hijerarhija klasa u obliku grafa" );
- }
- virtual QCString trGotoGraphicalHierarchy()
- {
- return decode( "Prikaz hijerarhije klasa u obliku grafa" );
- }
- virtual QCString trGotoTextualHierarchy()
- {
- return decode( "Prikaz hijerarhije klasa u obliku nazubljenog teksta" );
- }
- virtual QCString trPageIndex()
- {
- return decode( "Indeks stranice" );
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.1.0
-//////////////////////////////////////////////////////////////////////////
-
- virtual QCString trNote()
- {
- return decode( "Beleška" );
- }
- virtual QCString trPublicTypes()
- {
- return decode( "Javni tipovi" );
- }
- virtual QCString trPublicAttribs()
- {
- if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
- {
- return decode( "Polja" );
- }
- else
- {
- return decode( "Javni Älanovi" );
- }
- }
- virtual QCString trStaticPublicAttribs()
- {
- return decode( "ZajedniÄki javni Älanovi");
- }
- virtual QCString trProtectedTypes()
- {
- return decode( "Zaštićeni tipovi" );
- }
- virtual QCString trProtectedAttribs()
- {
- return decode( "ZaÅ¡tićeni Älanovi" );
- }
- virtual QCString trStaticProtectedAttribs()
- {
- return decode( "ZajedniÄki zaÅ¡tićeni Älanovi" );
- }
- virtual QCString trPrivateTypes()
- {
- return decode( "Privatni tipovi" );
- }
- virtual QCString trPrivateAttribs()
- {
- return decode( "Privatni Älanovi" );
- }
- virtual QCString trStaticPrivateAttribs()
- {
- return decode( "ZajedniÄki privatni Älanovi" );
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.1.3
-//////////////////////////////////////////////////////////////////////////
-
- /*! Used as a marker that is put before a \\todo item */
- virtual QCString trTodo()
- {
- return decode( "Uraditi" );
- }
- /*! Used as the header of the todo list */
- virtual QCString trTodoList()
- {
- return decode("Spisak stvari koje treba uraditi");
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.1.4
-//////////////////////////////////////////////////////////////////////////
-
- virtual QCString trReferencedBy()
- { //! Izbegavanje roda. Uskladjivanje sa trReferences
- return decode( "Korisnici: " );
- }
- virtual QCString trRemarks()
- {
- return decode( "Napomene" );
- }
- virtual QCString trAttention()
- {
- return decode( "Pažnja" );
- }
- virtual QCString trInclByDepGraph()
- {
- return decode("Ovaj graf pokazuje koje datoteke direktno "
- "ili indirektno ukljuÄuju ovu datoteku: ");
- }
- virtual QCString trSince()
- {
- return decode( "Od" );
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.1.5
-//////////////////////////////////////////////////////////////////////////
-
- /*! title of the graph legend page */
- virtual QCString trLegendTitle()
- {
- return decode( "Objašnjenje korišćenih simbola" );
- }
- /*! page explaining how the dot graph's should be interpreted
- * The %A in the text below are to prevent link to classes called "A".
- */
- virtual QCString trLegendDocs()
- {
- return decode(
- "Ova stranica objaÅ¡njava kako tumaÄiti grafikone koje je napravio "
- "doxygen.<p>\n"
- "Na primer:\n"
- "\\code\n"
- "/*! Klasa nevidljiva zbog trenutnih ograniÄenja */\n"
- "class Invisible { };\n\n"
- "/*! Klasa kojoj se ne vidi naÄin izvoÄ‘enja */\n"
- "class Truncated : public Invisible { };\n\n"
- "/* Klasa bez doxygen komentara */\n"
- "class Undocumented { };\n\n"
- "/*! Klasa izvedena iz osnovne klase javnim izvođenjem */\n"
- "class PublicBase : public Truncated { };\n\n"
- "/*! Å ablonska klasa */\n"
- "template<class T> class Templ { };\n\n"
- "/*! Klasa izvedena iz osnovne klase zaštićenim izvođenjem */\n"
- "class ProtectedBase { };\n\n"
- "/*! Klasa izvedena iz osnovne klase privatnim izvođenjem */\n"
- "class PrivateBase { };\n\n"
- "/*! Klasa korišćena u nekoj/nekim od drugih klasa */\n"
- "class Used { };\n\n"
- "/*! Klasa izvedena iz više osnovnih klasa */\n"
- "class Inherited : public PublicBase,\n"
- " protected ProtectedBase,\n"
- " private PrivateBase,\n"
- " public Undocumented,\n"
- " public Templ<int>\n"
- "{\n"
- " private:\n"
- " Used *m_usedClass;\n"
- "};\n"
- "\\endcode\n"
- "Ako je \\c MAX_DOT_GRAPH_HEIGHT tag u konfiguracionoj datoteci "
- "postavljen na \\c 200 graf izvođenja će izgledati ovako:"
- "<p><center><img src=\"graph_legend."+Config_getEnum("DOT_IMAGE_FORMAT")+"\"></center>\n"
- "Graf će biti odseÄen ako ne stane unutar zadatih granica.\n"
- "<p>\n"
- "Pravougaonici imaju sledeća znaÄenja:\n"
- "<ul>\n"
- "<li>Puni sivi predstavlja strukturu ili klasu za koju je graf napravljen.\n"
- "<li>Sa crnom ivicom predstavlja dokumentovanu strukturu ili klasu.\n"
- "<li>Sa sivom ivicom predstavlja strukturu ili klasu bez doxygen komentara.\n"
- "<li>Sa crvenom ivicom predstavlja dokumentovanu strukturu ili klasu\n"
- "za koju nisu prikazani svi relevantni grafovi.\n"
- "</ul>"
- "Strelice imaju sledeća znaÄenja:\n"
- "<ul>\n"
- "<li>Tamnoplava strelica oznaÄava javno izvoÄ‘enje.\n"
- "<li>Tamnozelena strelica oznaÄava zaÅ¡tićeno izvoÄ‘enje.\n"
- "<li>Tamnocrvena strelica oznaÄava privatno izvoÄ‘enje.\n"
- "<li>LjubiÄasta isprekidana strelica oznaÄava da je klasa sadržana "
- "ili korišćena u drugoj klasi. Strelica je oznaÄena imenom atributa "
- "preko koga se pristupa klasi/strukturi na koju pokazuje.\n"
- "<li>Žuta isprekidana strelica oznaÄava vezu izmeÄ‘u primerka Å¡ablona i"
- " Å¡ablona klase od kojeg je primerak napravljen. "
- "Strelica je oznaÄena stvarnim argumentima Å¡ablona.\n"
- "</ul>\n"
- );
- }
- /*! text for the link to the legend page */
- virtual QCString trLegend()
- {
- return decode( "Objašnjenje korišćenih simbola" );
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.2.0
-//////////////////////////////////////////////////////////////////////////
-
- /*! Used as a marker that is put before a test item */
- virtual QCString trTest()
- {
- return decode( "Test" );
- }
- /*! Used as the header of the test list */
- virtual QCString trTestList()
- {
- return decode( "Spisak testova" );
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.2.1
-//////////////////////////////////////////////////////////////////////////
-
- /*! Used as a section header for KDE-2 IDL methods */
- virtual QCString trDCOPMethods()
- {
- return decode( "DCOP metode" );
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.2.2
-//////////////////////////////////////////////////////////////////////////
-
- /*! Used as a section header for IDL properties */
- virtual QCString trProperties()
- {
- return decode( "Osobine" );
- }
- /*! Used as a section header for IDL property documentation */
- virtual QCString trPropertyDocumentation()
- {
- return decode( "Dokumentacija osobina" );
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.2.4
-//////////////////////////////////////////////////////////////////////////
-
- /*! Used for Java classes in the summary section of Java packages */
- virtual QCString trClasses()
- {
- if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
- {
- return decode( "Strukture i unije" );
- }
- else
- {
- return decode( "Klase" );
- }
- }
- /*! Used as the title of a Java package */
- virtual QCString trPackage(const char *name)
- {
- return (QCString)"Paket "+name;
- }
- /*! Title of the package index page */
- virtual QCString trPackageList()
- {
- return decode( "Spisak paketa" );
- }
- /*! The description of the package index page */
- virtual QCString trPackageListDescription()
- {
- return decode( "Paketi s kratkim opisom (ukoliko postoji):" );
- }
- /*! The link name in the Quick links header for each page */
- virtual QCString trPackages()
- {
- return decode( "Paketi" );
- }
- /*! Text shown before a multi-line define */
- virtual QCString trDefineValue()
- {
- return decode( "Vrednost:" );
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.2.5
-//////////////////////////////////////////////////////////////////////////
-
- /*! Used as a marker that is put before a \\bug item */
- virtual QCString trBug()
- {
- return decode( "Greška" );
- }
- /*! Used as the header of the bug list */
- virtual QCString trBugList()
- {
- return decode( "Spisak grešaka" );
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.2.6
-//////////////////////////////////////////////////////////////////////////
-
- /*! Used as ansicpg for RTF file
- *
- * The following table shows the correlation of Charset name, Charset Value and
- * <pre>
- * Codepage number:
- * Charset Name Charset Value(hex) Codepage number
- * ------------------------------------------------------
- * DEFAULT_CHARSET 1 (x01)
- * SYMBOL_CHARSET 2 (x02)
- * OEM_CHARSET 255 (xFF)
- * ANSI_CHARSET 0 (x00) 1252
- * RUSSIAN_CHARSET 204 (xCC) 1251
- * EE_CHARSET 238 (xEE) 1250
- * GREEK_CHARSET 161 (xA1) 1253
- * TURKISH_CHARSET 162 (xA2) 1254
- * BALTIC_CHARSET 186 (xBA) 1257
- * HEBREW_CHARSET 177 (xB1) 1255
- * ARABIC _CHARSET 178 (xB2) 1256
- * SHIFTJIS_CHARSET 128 (x80) 932
- * HANGEUL_CHARSET 129 (x81) 949
- * GB2313_CHARSET 134 (x86) 936
- * CHINESEBIG5_CHARSET 136 (x88) 950
- * </pre>
- *
- */
- virtual QCString trRTFansicp()
- {
- return "1252";
- }
-
-
- /*! Used as ansicpg for RTF fcharset
- * \see trRTFansicp() for a table of possible values.
- */
- virtual QCString trRTFCharSet()
- {
- return "238";
- }
-
- /*! Used as header RTF general index */
- virtual QCString trRTFGeneralIndex()
- {
- return decode( "Sadržaj" );
- }
-
- /*! This is used for translation of the word that will possibly
- * be followed by a single name or by a list of names
- * of the category.
- */
- virtual QCString trClass(bool first_capital, bool singular)
- {
- QCString result( (first_capital ? "Klas" : "klas") );
- result+= (singular ? "a" : "e");
- return decode( result );
- }
-
- /*! This is used for translation of the word that will possibly
- * be followed by a single name or by a list of names
- * of the category.
- */
- virtual QCString trFile(bool first_capital, bool singular)
- {
- QCString result((first_capital ? "Datotek" : "datotek"));
- result+= (singular ? "a" : "e");
- return decode( result );
- }
-
- /*! This is used for translation of the word that will possibly
- * be followed by a single name or by a list of names
- * of the category.
- */
- virtual QCString trNamespace(bool first_capital, bool singular)
- {
- QCString result((first_capital ? "Prostor" : "prostor"));
- result += (singular ? "" : "i");
- result += " imena";
- return decode( result );
- }
-
- /*! This is used for translation of the word that will possibly
- * be followed by a single name or by a list of names
- * of the category.
- */
- virtual QCString trGroup(bool first_capital, bool singular)
- {
- QCString result((first_capital ? "Grup" : "grup"));
- result+= (singular ? "a" : "e");
- return decode( result );
- }
-
- /*! This is used for translation of the word that will possibly
- * be followed by a single name or by a list of names
- * of the category.
- */
- virtual QCString trPage(bool first_capital, bool singular)
- {
- QCString result((first_capital ? "Stran" : "stran"));
- result+= (singular ? "a" : "e");
- return decode( result );
- }
-
- /*! This is used for translation of the word that will possibly
- * be followed by a single name or by a list of names
- * of the category.
- */
- virtual QCString trMember(bool first_capital, bool singular)
- {
- QCString result((first_capital ? "ÄŒlan" : "Älan"));
- result+= (singular ? "" : "ovi");
- return decode( result );
- }
-
- /*! This is used for translation of the word that will possibly
- * be followed by a single name or by a list of names
- * of the category.
- */
- virtual QCString trGlobal(bool first_capital, bool singular)
- {
- QCString result((first_capital ? "Globalni " : "globalni "));
- result+= (singular ? "podatak" : "podaci");
- return decode( result );
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.2.7
-//////////////////////////////////////////////////////////////////////////
-
- /*! This text is generated when the \\author command is used and
- * for the author section in man pages. */
- virtual QCString trAuthor(bool first_capital, bool singular)
- {
- QCString result((first_capital ? "Autor" : "autor"));
- result+= (singular ? "" : "i");
- return decode( result );
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.2.11
-//////////////////////////////////////////////////////////////////////////
-
- /*! This text is put before the list of members referenced by a member
- */
- virtual QCString trReferences()
- {
- return decode( "Koristi" );
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.2.13
-//////////////////////////////////////////////////////////////////////////
-
- /*! used in member documentation blocks to produce a list of
- * members that are implemented by this one.
- */
- virtual QCString trImplementedFromList(int numEntries)
- { //! "Definiše" je previše kratko, ispada sa de definišu same apstraktne klase
- return decode( "Definiše apstraktnu funkciju deklarisanu u "+trWriteList(numEntries)+"." );
- }
-
- /*! used in member documentation blocks to produce a list of
- * all members that implement this abstract member.
- */
- virtual QCString trImplementedInList(int numEntries)
- { //! Izbegavanje roda
- return decode( "Definicija u " + trWriteList(numEntries) + "." );
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.2.16
-//////////////////////////////////////////////////////////////////////////
-
- /*! used in RTF documentation as a heading for the Table
- * of Contents.
- */
- virtual QCString trRTFTableOfContents()
- {
- return decode( "Sadržaj" );
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.2.17
-//////////////////////////////////////////////////////////////////////////
-
- /*! Used as the header of the list of item that have been
- * flagged deprecated
- */
- virtual QCString trDeprecatedList()
- {
- return decode( "Spisak zastarelih stvari" );
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.2.18
-//////////////////////////////////////////////////////////////////////////
-
- /*! Used as a header for declaration section of the events found in
- * a C# program
- */
- virtual QCString trEvents()
- {
- return decode( "Događaji" );
- }
- /*! Header used for the documentation section of a class' events. */
- virtual QCString trEventDocumentation()
- {
- return decode( "Dokumentacija događaja" );
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.3
-//////////////////////////////////////////////////////////////////////////
-
- /*! Used as a heading for a list of Java class types with package scope.
- */
- virtual QCString trPackageTypes()
- {
- return decode( "Tipovi u paketu" );
- }
- /*! Used as a heading for a list of Java class functions with package
- * scope.
- */
- virtual QCString trPackageMembers()
- {
- return decode( "Funkcije u paketu" );
- }
- /*! Used as a heading for a list of static Java class functions with
- * package scope.
- */
- virtual QCString trStaticPackageMembers()
- {
- return decode( "StatiÄke funkcije u paketu" ); // Zajednicke funkcije u paketu
- }
- /*! Used as a heading for a list of Java class variables with package
- * scope.
- */
- virtual QCString trPackageAttribs()
- {
- return decode( "Atributi u paketu" ); // Clanovi u paketu
- }
- /*! Used as a heading for a list of static Java class variables with
- * package scope.
- */
- virtual QCString trStaticPackageAttribs()
- {
- return decode( "StatiÄki atributi u paketu" ); // Zajednicki clanovi u paketu
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.3.1
-//////////////////////////////////////////////////////////////////////////
-
- /*! Used in the quick index of a class/file/namespace member list page
- * to link to the unfiltered list of all members.
- */
- virtual QCString trAll()
- {
- return decode( "Sve" );
- }
- /*! Put in front of the call graph for a function. */
- virtual QCString trCallGraph()
- {
- return decode( "Graf poziva iz ove funkcije:" );
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.3.3
-//////////////////////////////////////////////////////////////////////////
-
- /*! When the search engine is enabled this text is put in the header
- * of each page before the field where one can enter the text to search
- * for.
- */
- virtual QCString trSearchForIndex()
- {
- return decode("Traži");
- }
- /*! This string is used as the title for the page listing the search
- * results.
- */
- virtual QCString trSearchResultsTitle()
- {
- return decode( "Rezultati pretraživanja" );
- }
- /*! This string is put just before listing the search results. The
- * text can be different depending on the number of documents found.
- * Inside the text you can put the special marker $num to insert
- * the number representing the actual number of search results.
- * The @a numDocuments parameter can be either 0, 1 or 2, where the
- * value 2 represents 2 or more matches. HTML markup is allowed inside
- * the returned string.
- */
- virtual QCString trSearchResults(int numDocuments)
- {
- if (numDocuments==0)
- {
- return decode("Nema dokumenata koji odgovaraju Vašem upitu.");
- }
- else if (numDocuments==1)
- { return decode("Nađen je <b>1</b> dokument koji odgovara vašem upitu."); }
- else if (numDocuments<5)
- { return decode("Nađena su <b>$num</b> dokumenta koji odgovaraju vašem upitu."
- "Najbolji su prikazani prvi."); }
- else
- { return decode("Nađeno je <b>$num</b> dokumenata koji odgovaraju vašem upitu."
- "Najbolji su prikazani prvi.");
- }
- }
- /*! This string is put before the list of matched words, for each search
- * result. What follows is the list of words that matched the query.
- */
- virtual QCString trSearchMatches()
- {
- return decode( "Pronađeno:" );
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.3.8
-//////////////////////////////////////////////////////////////////////////
-
- /*! This is used in HTML as the title of page with source code for file filename
- */
- virtual QCString trSourceFile(QCString& filename)
- {
- return decode( "Izvorni kod datoteke " + filename ) ;
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.3.9
-//////////////////////////////////////////////////////////////////////////
-
- /*! This is used as the name of the chapter containing the directory
- * hierarchy.
- */
- virtual QCString trDirIndex()
- { return decode( "Hijerarhija direktorijuma" ); }
-
- /*! This is used as the name of the chapter containing the documentation
- * of the directories.
- */
- virtual QCString trDirDocumentation()
- { return decode( "Dokumentacija direktorijuma" ); }
-
- /*! This is used as the title of the directory index and also in the
- * Quick links of a HTML page, to link to the directory hierarchy.
- */
- virtual QCString trDirectories()
- { return decode( "Direktorijumi" ); }
-
- /*! This returns a sentences that introduces the directory hierarchy.
- * and the fact that it is sorted alphabetically per level
- */
- virtual QCString trDirDescription()
- { return decode( "Hijerarhija direktorijuma uređena približno "
- "po abecedi:" );
- }
-
- /*! This returns the title of a directory page. The name of the
- * directory is passed via \a dirName.
- */
- virtual QCString trDirReference(const char *dirName)
- { QCString result=dirName; result+="Opis direktorijuma"; return decode( result ); }
-
- /*! This returns the word directory with or without starting capital
- * (\a first_capital) and in sigular or plural form (\a singular).
- */
- virtual QCString trDir(bool first_capital, bool singular)
- {
- QCString result((first_capital ? "Direktorijum" : "direktorijum"));
- if (!singular) result+="i";
- return decode( result );
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.4.1
-//////////////////////////////////////////////////////////////////////////
-
- /*! This text is added to the documentation when the \\overload command
- * is used for a overloaded function.
- */
- virtual QCString trOverloadText()
- {
- return decode ( "Ovo je funkcija prekopljenog imena, razlikuje se "
- "od gore navedene samo po argumentima koje prihvata." );
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.4.6
-//////////////////////////////////////////////////////////////////////////
-
- /*! This is used to introduce a caller (or called-by) graph */
- virtual QCString trCallerGraph()
- { //! Možda je bolje "Graf pozivalaca ove funkcije"
- return decode( "Graf funkcija koje pozivaju ovu funkciju:" );
- }
-
- /*! This is used in the documentation of a file/namespace before the list
- * of documentation blocks for enumeration values
- */
- virtual QCString trEnumerationValueDocumentation()
- { return decode( "Dokumentacija enum vrednosti" ); }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.5.4 (mainly for Fortran)
-//////////////////////////////////////////////////////////////////////////
-
- /*! header that is put before the list of member subprograms (Fortran). */
- virtual QCString trMemberFunctionDocumentationFortran()
- { return "Dokumentacija funkcija i procedura"; }
-
- /*! This is put above each page as a link to the list of annotated data types (Fortran). */
- /*! @todo Koji je prevod za Compound u Fortran kontekstu */
- virtual QCString trCompoundListFortran()
- { return "Složeni tipovi podataka"; }
-
- /*! This is put above each page as a link to all members of compounds (Fortran). */
- virtual QCString trCompoundMembersFortran()
- { return "Polja u složenim tipovima podataka"; }
-
- /*! This is an introduction to the annotated compound list (Fortran). */
- virtual QCString trCompoundListDescriptionFortran()
- { return "Spisak složenih tipova podataka sa kratkim opisima:"; }
-
- /*! This is an introduction to the page with all data types (Fortran). */
- virtual QCString trCompoundMembersDescriptionFortran(bool extractAll)
- {
- QCString result=" Spisak svih ";
- if (!extractAll)
- {
- result+="dokumentovanih ";
- }
- result+="polja složenih tipova podataka";
- result+=" sa vezama ka ";
- if (!extractAll)
- {
- result+="dokumentaciji strukture podataka za svakog Älana";
- }
- else
- {
- result+="složenim tipovima podataka kojima pripadaju:";
- }
- return result;
- }
-
- /*! This is used in LaTeX as the title of the chapter with the
- * annotated compound index (Fortran).
- */
- virtual QCString trCompoundIndexFortran()
- { return "Sadržaj složenog tipa podataka"; }
-
- /*! This is used in LaTeX as the title of the chapter containing
- * the documentation of all data types (Fortran).
- */
- virtual QCString trTypeDocumentation()
- { return "Dokumentacija tipova podataka"; }
-
- /*! This is used in the documentation of a file as a header before the
- * list of (global) subprograms (Fortran).
- */
- virtual QCString trSubprograms()
- { return "Funkcije i procedure"; }
-
- /*! This is used in the documentation of a file/namespace before the list
- * of documentation blocks for subprograms (Fortran)
- */
- virtual QCString trSubprogramDocumentation()
- { return "Dokumentacija funkcija i procedura"; }
-
- /*! This is used in the documentation of a file/namespace/group before
- * the list of links to documented compounds (Fortran)
- */
- virtual QCString trDataTypes()
- { return "Složeni tipovi podataka"; }
-
- /*! used as the title of page containing all the index of all modules (Fortran). */
- virtual QCString trModulesList()
- { return "Spisak modula"; }
-
- /*! used as an introduction to the modules list (Fortran) */
- virtual QCString trModulesListDescription(bool extractAll)
- {
- QCString result="Spisak svih ";
- if (!extractAll) result+="dokumentovanih ";
- result+="modula sa kratkim opisima:";
- return result;
- }
-
- /*! used as the title of the HTML page of a module/type (Fortran) */
- virtual QCString trCompoundReferenceFortran(const char *clName,
- ClassDef::CompoundType compType,
- bool isTemplate)
- {
- QCString result=(QCString)clName;
- switch(compType)
- {
- case ClassDef::Class: result+=" Modul"; break;
- case ClassDef::Struct: result+=" Tip"; break;
- case ClassDef::Union: result+=" Unija"; break;
- case ClassDef::Interface: result+=" Interfejs"; break;
- case ClassDef::Protocol: result+=" Protokol"; break;
- case ClassDef::Category: result+=" Kategorija"; break;
- case ClassDef::Exception: result+=" Izuzetak"; break;
- }
- result+=" - sažet pregled";
- if (isTemplate) result+=" Å¡ablona";
- return result;
- }
- /*! used as the title of the HTML page of a module (Fortran) */
- virtual QCString trModuleReference(const char *namespaceName)
- {
- QCString result=namespaceName;
- result+=" - sažet pregled modula";
- return result;
- }
-
- /*! This is put above each page as a link to all members of modules. (Fortran) */
- virtual QCString trModulesMembers()
- { return "ÄŒlanovi modula"; }
-
- /*! This is an introduction to the page with all modules members (Fortran) */
- virtual QCString trModulesMemberDescription(bool extractAll)
- {
- QCString result="Spisak svih ";
- if (!extractAll) result+="dokumentovanih ";
- result+="Älanova modula sa vezama ka ";
- if (extractAll)
- {
- result+="dokumentaciji za svakog Älana modula:";
- }
- else
- {
- result+="modulima kojima pripadaju:";
- }
- return result;
- }
-
- /*! This is used in LaTeX as the title of the chapter with the
- * index of all modules (Fortran).
- */
- virtual QCString trModulesIndex()
- { return "Spisak modula"; }
-
- /*! This is used for translation of the word that will possibly
- * be followed by a single name or by a list of names
- * of the category.
- */
- virtual QCString trModule(bool first_capital, bool singular)
- {
- QCString result((first_capital ? "Modul" : "modul"));
- if (!singular) result+="i";
- return result;
- }
- /*! This is put at the bottom of a module documentation page and is
- * followed by a list of files that were used to generate the page.
- */
- virtual QCString trGeneratedFromFilesFortran(ClassDef::CompoundType compType,
- bool single)
- { // here s is one of " Module", " Struct" or " Union"
- // single is true implies a single file
- QCString result=(QCString)"Dokumentacija za ovaj ";
- switch(compType)
- {
- case ClassDef::Class: result+="modul"; break;
- case ClassDef::Struct: result+="tip"; break;
- case ClassDef::Union: result+="uniju"; break;
- case ClassDef::Interface: result+="interfejs"; break;
- case ClassDef::Protocol: result+="protokol"; break;
- case ClassDef::Category: result+="kategoriju"; break;
- case ClassDef::Exception: result+="izuzetak"; break;
- }
- result+=" napravljena je automatski od sledeć";
- if (single) result+="e datoteke:"; else result+="ih datoteka:";
- return result;
- }
- /*! This is used for translation of the word that will possibly
- * be followed by a single name or by a list of names
- * of the category.
- */
- virtual QCString trType(bool first_capital, bool singular)
- {
- QCString result((first_capital ? "Tip" : "tip"));
- if (!singular) result+="ovi";
- return result;
- }
- /*! This is used for translation of the word that will possibly
- * be followed by a single name or by a list of names
- * of the category.
- */
- virtual QCString trSubprogram(bool first_capital, bool singular)
- {
- QCString result((first_capital ? "Procedura" : "procedura"));
- if (!singular) result = (first_capital ? "Procedure" : "procedure");
- return result;
- }
-
- /*! C# Type Constraint list */
- virtual QCString trTypeConstraints()
- {
- return "OgraniÄenja tipova";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// following methods have no corresponding entry in translator_en.h
-//////////////////////////////////////////////////////////////////////////
-
-// /*! This is put above each page as a link to the list of all verbatim headers */
-// virtual QCString trHeaderFiles()
-// { return decode( "Zaglavlja" ); }
-//
-// /*! This is an introduction to the page with the list of all header files. */
-// virtual QCString trHeaderFilesDescription()
-// { return decode( "Zaglavlja koje izgraduju API:" ); }
-//
-// /*! This sentences is used in the annotated class/file lists if no brief
-// * description is given.
-// */
-// virtual QCString trNoDescriptionAvailable()
-// { return decode( "Opis nije dostupan" ); }
-//
-// /*! this text is generated when the \\reimp command is used. */
-// virtual QCString trReimplementedForInternalReasons()
-// { return decode("Preuradeno zbog unutrasnjih razloga; Nema uticaja na API." ); }
-//
-// /*! this text is generated when the \\bug command is used. */
-// virtual QCString trBugsAndLimitations()
-// { return decode( "Greske i ogranicenja" ); }
-//
-// virtual QCString trSources()
-// {
-// return decode("Izvorne datoteke" );
-// }
-//
-// /*! Used for Java interfaces in the summary section of Java packages */
-// virtual QCString trInterfaces()
-// {
-// return decode( "Interfejsi" ); //!< Radna okruzenja. Ali to je dve reci.
-// }
-//
-// /*! Used as a chapter title for Latex & RTF output */
-// virtual QCString trPackageDocumentation()
-// {
-// return decode( "Dokumentacija paketa" );
-// }
-//
-// /*! This is used for translation of the word that will possibly
-// * be followed by a single name or by a list of names
-// * of the category.
-// */
-// virtual QCString trField(bool first_capital, bool singular)
-// {
-// QCString result((first_capital ? "Polj" : "polj"));
-// result+= (singular ? "e" : "a");
-// return decode( result );
-// }
-
-};
-
-#endif
diff --git a/trunk/src/translator_sv.h b/trunk/src/translator_sv.h
deleted file mode 100644
index f262eda..0000000
--- a/trunk/src/translator_sv.h
+++ /dev/null
@@ -1,1662 +0,0 @@
-/******************************************************************************
- *
- *
- *
- * Copyright (C) 1997-2012 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.
- *
- */
-
-/*
-==================================================================================
-Svensk översättning av:
-Samuel Hägglund <sahag96@ite.mh.se>
-Xet Erixon <xet@xeqt.com>
-Mikael Hallin <mikaelhallin@yahoo.se> 2003-07-28
-==================================================================================
-Uppdateringar.
-1999/04/29
-* Omskrivningar av en hel del ordval, t.ex.
- ENG INNAN EFTER
- compound inhängnad sammansatt
- structs structs strukter
- unions unions unioner
-
- osv...
-
-* Alla översättnings-strängar returnerar i alla fall en något så när vettig
- förklaring...
-
-1999/05/27
-* Det verkade som vi glömt en del mellanslag i vissa strängar vilket resulterade
- i att en del ord blev ihopskrivna.
-
-* Bytt en del ordval igen...
- ENG INNAN EFTER
- reference manual Uppslagsbok referensmanual
-
-* Skrivit ihop en del ord som innan hade bindestreck
-* En del nya översättningar är tillagda.
-* Gamla översättningar borttagna
-
-===================================================================================
-Problem!
- Slot: nån hygglig svensk översättning???
-
- Skicka gärna synpunkter.
-===================================================================================
-1999/09/01
-* Det verkar som om "namnrymd" är en hyggligt vedertagen svensk översättning
- av "namespace", så jag kör med det från och med nu.
-* "interface" heter numera "gränssnitt"
-
-2003/07/28
-* Jag har updaterat översättningen efter ett par års träda..
-Problem!
- Deprecated: nån hygglig svensk översättning???
-
- Skicka gärna synpunkter.
-*/
-
-#ifndef TRANSLATOR_SE_H
-#define TRANSLATOR_SE_H
-
-class TranslatorSwedish : public TranslatorAdapter_1_6_0
-{
- public:
-
- virtual QCString idLanguage()
- { return "swedish"; }
-
- /*! Used to get the LaTeX command(s) for the language support.
- * This method should return string with commands that switch
- * LaTeX to the desired language. For example
- * <pre>"\\usepackage[german]{babel}\n"
- * </pre>
- * or
- * <pre>"\\usepackage{polski}\n"
- * "\\usepackage[latin2]{inputenc}\n"
- * "\\usepackage[T1]{fontenc}\n"
- * </pre>
- *
- * The English LaTeX does not use such commands. Because of this
- * the empty string is returned in this implementation.
- */
- virtual QCString latexLanguageSupportCommand()
- {
- return "\\usepackage[swedish]{babel}\n";
- }
-
- /*! return the language charset. This will be used for the HTML output */
- virtual QCString idLanguageCharset()
- {
- return "iso-8859-1";
- }
-
- virtual QCString trRelatedFunctions()
- { return "Besläktade funktioner"; }
-
- virtual QCString trRelatedSubscript()
- { return "(Observera att dessa inte är medlemsfunktioner)"; }
-
- virtual QCString trDetailedDescription()
- { return "Detaljerad beskrivning"; }
-
- virtual QCString trMemberTypedefDocumentation()
- { return "Dokumentation av typdefinierade medlemmar"; }
-
- virtual QCString trMemberEnumerationDocumentation()
- { return "Dokumentation av egenuppräknande medlemmar"; }
-
- virtual QCString trMemberFunctionDocumentation()
- { return "Dokumentation av medlemsfunktioner"; }
-
- virtual QCString trMemberDataDocumentation()
- {
- if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
- {
- return "Fält dokumentation";
- }
- else
- {
- return "Dokumentation av datamedlemmar";
- }
- }
-
- virtual QCString trMore()
- { return "Mer..."; }
-
- virtual QCString trListOfAllMembers()
- { return "Lista över alla medlemmar."; }
-
- virtual QCString trMemberList()
- { return "Medlemslista"; }
-
- virtual QCString trThisIsTheListOfAllMembers()
- { return "Det här är en fullständig lista över medlemmar för "; }
-
- virtual QCString trIncludingInheritedMembers()
- { return " med alla ärvda medlemmar."; }
-
- virtual QCString trGeneratedAutomatically(const char *s)
- { QCString result="Automatiskt skapad av Doxygen";
- if (s) result+=(QCString)" för "+s;
- result+=" från källkoden.";
- return result;
- }
-
- virtual QCString trEnumName()
- { return "enum namn"; }
-
- virtual QCString trEnumValue()
- { return "enum värde"; }
-
- virtual QCString trDefinedIn()
- { return "definierad i"; }
-
-/*
- QCString trVerbatimText(const char *f)
- { return (QCString)"Detta är den ordagranna texten från inkluderingsfilen "+f; }
-*/
- virtual QCString trModules()
- { return "Moduler"; }
-
- virtual QCString trClassHierarchy()
- { return "Klasshierarki"; }
-
- virtual QCString trCompoundList()
- {
- if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
- {
- return "Datastrukturer";
- }
- else
- {
- return "Sammansatt klasslista";
- }
- }
-
- virtual QCString trFileList()
- { return "Fillista"; }
-
- virtual QCString trCompoundMembers()
- {
- if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
- {
- return "Data fält";
- }
- else
- {
- return "Sammansatta klassmedlemmar";
- }
- }
-
- virtual QCString trFileMembers()
- {
- if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
- {
- return "Globala symboler";
- }
- else
- {
- return "Filmedlemmar";
- }
- }
-
- virtual QCString trRelatedPages()
- { return "Besläktade sidor"; }
-
- virtual QCString trExamples()
- { return "Exempel"; }
-
- virtual QCString trSearch()
- { return "Sök"; }
-
- virtual QCString trClassHierarchyDescription()
- { return "Denna lista över arv är grovt, men inte helt, "
- "sorterad i alfabetisk ordning:";
- }
-
- virtual QCString trFileListDescription(bool extractAll)
- {
- QCString result="Här följer en lista över alla ";
- if (!extractAll) result+="dokumenterade ";
- result+="filer, med en kort beskrivning:";
- return result;
- }
-
- virtual QCString trCompoundListDescription()
- {
-
- if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
- {
- return "Här följer datastrukturerna med korta beskrivningar:";
- }
- else
- {
- return "Här följer klasserna, strukterna, unionerna och "
- "gränssnitten med korta beskrivningar:";
- }
- }
-
- /*! This is an introduction to the page with all class members. */
- virtual QCString trCompoundMembersDescription(bool extractAll)
- {
- QCString result="Här är en lista över alla ";
- if (!extractAll)
- {
- result+="dokumenterade ";
- }
- if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
- {
- result+="struktur- och unions-fält";
- }
- else
- {
- result+="klassmedlemmar";
- }
- result+=" med länkar till ";
- if (!extractAll)
- {
- if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
- {
- result+="struktur/unions-dokumentationen för varje fält:";
- }
- else
- {
- result+="klassdokumentationen för varje medlem:";
- }
- }
- else
- {
- if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
- {
- result+=" strukturerna/unionerna de tillhör:";
- }
- else
- {
- result+="klasserna de tillhör:";
- }
- }
- return result;
- }
-
- virtual QCString trFileMembersDescription(bool extractAll)
- {
- QCString result="Här följer en lista över alla ";
- if (!extractAll) result+="dokumenterade ";
-
- if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
- {
- result+="funktioner, variabler, definitioner, enumerationer "
- "och typdefinitioner";
- }
- else
- {
- result+= "filmedlemmar";
- }
- result+= " med länkar till ";
- if (extractAll)
- result+= "filerna som de tillhör:";
- else
- result+= "dokumentationen:";
- return result;
- }
-
- virtual QCString trExamplesDescription()
- { return "Här följer en lista med alla exempel:"; }
-
- virtual QCString trRelatedPagesDescription()
- { return "Här följer en lista över alla besläktade dokumentationssidor:";}
-
- virtual QCString trModulesDescription()
- { return "Här följer en lista över alla moduler:"; }
-
- virtual QCString trDocumentation()
- { return "Dokumentation"; }
-
- virtual QCString trModuleIndex()
- { return "Modulindex"; }
-
- virtual QCString trHierarchicalIndex()
- { return "Hierarkiskt Index"; }
-
- /*! This is used in LaTeX as the title of the chapter with the
- * annotated compound index.
- */
- virtual QCString trCompoundIndex()
- {
- if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) {
- return "Index över datastrukturer";
- } else {
- return "Index över sammensatta typer";
- }
- }
-
- virtual QCString trFileIndex()
- { return "Filindex"; }
-
- virtual QCString trModuleDocumentation()
- { return "Dokumentation över moduler"; }
-
- /*! This is used in LaTeX as the title of the chapter containing
- * the documentation of all classes, structs and unions.
- */
- virtual QCString trClassDocumentation()
- {
- if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
- {
- return "Dokumentation över datastrukturer";
- }
- else
- {
- return "Documentation över klasser";
- }
- }
-
- virtual QCString trFileDocumentation()
- { return "Dokumentation över filer"; }
-
- virtual QCString trExampleDocumentation()
- { return "Dokumentation över exempel"; }
-
- virtual QCString trPageDocumentation()
- { return "Dokumentation av sidor"; }
-
- virtual QCString trReferenceManual()
- { return "Referensmanual"; }
-
- virtual QCString trDefines()
- { return "Definitioner"; }
- virtual QCString trFuncProtos()
- { return "Funktionsprototyper"; }
- virtual QCString trTypedefs()
- { return "Typdefinitioner"; }
- virtual QCString trEnumerations()
- { return "Egenuppräknande typer"; }
- virtual QCString trFunctions()
- { return "Funktioner"; }
- virtual QCString trVariables()
- { return "Variabler"; }
-
- virtual QCString trEnumerationValues()
- { return "Egenuppräknade typers värden"; }
-
- virtual QCString trDefineDocumentation()
- { return "Dokumentation över definitioner"; }
-
- virtual QCString trFunctionPrototypeDocumentation()
- { return "Dokumentation över funktionsprototyper"; }
-
- virtual QCString trTypedefDocumentation()
- { return "Dokumentation över typdefinitioner"; }
-
- virtual QCString trEnumerationTypeDocumentation()
- { return "Dokumentation över egenuppräknande typer"; }
-
- virtual QCString trFunctionDocumentation()
- { return "Dokumentation över funktioner"; }
-
- virtual QCString trVariableDocumentation()
- { return "Dokumentation över variabler"; }
-
- /*! This is used in the documentation of a file/namespace/group before
- * the list of links to documented compounds
- */
- virtual QCString trCompounds()
- {
- if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
- {
- return "Datastrukturer";
- }
- else
- {
- return "Sammansättning";
- }
- }
-
- virtual QCString trGeneratedAt(const char *date,const char *projName)
- {
- QCString result=(QCString)"Skapad "+date;
- if (projName) result+=(QCString)" för "+projName;
- result+=(QCString)" av";
- return result;
- }
-
- virtual QCString trWrittenBy()
- {
- return "skriven av";
- }
-
- virtual QCString trClassDiagram(const char *clName)
- {
- return (QCString)"Klassdiagram för "+clName;
- }
-
- virtual QCString trForInternalUseOnly()
- { return "Endast för internt bruk."; }
-
- virtual QCString trWarning()
- { return "Varning"; }
-
- virtual QCString trVersion()
- { return "Version"; }
-
- virtual QCString trDate()
- { return "Datum"; }
-
- virtual QCString trReturns()
- { return "Returnerar"; }
-
- virtual QCString trSeeAlso()
- { return "Se även"; }
-
- virtual QCString trParameters()
- { return "Parametrar"; }
-
- virtual QCString trExceptions()
- { return "Undantag"; }
-
- virtual QCString trGeneratedBy()
- { return "Skapad av"; }
-
-// new since 0.49-990307
-
- virtual QCString trNamespaceList()
- { return "Namnrymdslista"; }
-
- virtual QCString trNamespaceListDescription(bool extractAll)
- {
- QCString result="Här är en lista över alla ";
- if (!extractAll) result+="dokumenterade ";
- result+="namnrymder med en kort beskrivning:";
- return result;
- }
-
- virtual QCString trFriends()
- { return "Vänner"; }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 0.49-990405
-//////////////////////////////////////////////////////////////////////////
-
- virtual QCString trRelatedFunctionDocumentation()
- { return "Vänners och besläktade funktioners dokumentation"; }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 0.49-990425
-//////////////////////////////////////////////////////////////////////////
-
- virtual QCString trCompoundReference(const char *clName,
- ClassDef::CompoundType compType,
- bool isTemplate)
- {
- QCString result=(QCString)clName+" ";
- switch(compType)
- {
- case ClassDef::Class: result+=" klass"; break;
- case ClassDef::Struct: result+=" strukt"; break;
- case ClassDef::Union: result+=" union"; break;
- case ClassDef::Interface: result+=" gränssnitt"; break;
- case ClassDef::Protocol: result+=" protocol"; break; // translate me!
- case ClassDef::Category: result+=" category"; break; // translate me!
- case ClassDef::Exception: result+=" undantag"; break;
- }
- if (isTemplate) result+="template";
- result+="referens";
- return result;
- }
-
- virtual QCString trFileReference(const char *fileName)
- {
- QCString result=fileName;
- result+=" filreferens";
- return result;
- }
-
- virtual QCString trNamespaceReference(const char *namespaceName)
- {
- QCString result=namespaceName;
- result+=" namnrymdreferens";
- return result;
- }
-
- virtual QCString trPublicMembers()
- { return "Publika medlemmar"; }
- virtual QCString trPublicSlots()
- { return "Publika slots"; }
- virtual QCString trSignals()
- { return "Signaler"; }
- virtual QCString trStaticPublicMembers()
- { return "Statiska publika medlemmar"; }
- virtual QCString trProtectedMembers()
- { return "Skyddade medlemmar"; }
- virtual QCString trProtectedSlots()
- { return "Skyddade slots"; }
- virtual QCString trStaticProtectedMembers()
- { return "Statiska skyddade medlemmar"; }
- virtual QCString trPrivateMembers()
- { return "Privata medlemmar"; }
- virtual QCString trPrivateSlots()
- { return "Privata slots"; }
- virtual QCString trStaticPrivateMembers()
- { return "Statiska privata medlemmar"; }
- // end of member sections
-
- virtual QCString trWriteList(int numEntries)
- {
- // this function is used to produce a comma-separated list of items.
- // use generateMarker(i) to indicate where item i should be put.
- QCString result;
- int i;
- // the inherits list contain `numEntries' classes
- for (i=0;i<numEntries;i++)
- {
- // use generateMarker to generate placeholders for the class links!
- result+=generateMarker(i); // generate marker for entry i in the list
- // (order is left to right)
-
- if (i!=numEntries-1) // not the last entry, so we need a separator
- {
- if (i<numEntries-2) // not the fore last entry
- result+=", ";
- else // the fore last entry
- result+=", och ";
- }
- }
- return result;
- }
-
- virtual QCString trInheritsList(int numEntries)
- // used in class documentation to produce a list of base classes,
- // if class diagrams are disabled.
- {
- return "Ärver "+trWriteList(numEntries)+".";
- }
- virtual QCString trInheritedByList(int numEntries)
- // used in class documentation to produce a list of super classes,
- // if class diagrams are disabled.
- {
- return "Ärvd av "+trWriteList(numEntries)+".";
- }
- virtual QCString trReimplementedFromList(int numEntries)
- // used in member documentation blocks to produce a list of
- // members that are hidden by this one.
- {
- return "Återskapad från "+trWriteList(numEntries)+".";
- }
- virtual QCString trReimplementedInList(int numEntries)
- {
- // used in member documentation blocks to produce a list of
- // all member that overwrite the implementation of this member.
- return "Återskapad i "+trWriteList(numEntries)+".";
- }
-
- virtual QCString trNamespaceMembers()
- { return "Namnrymdsmedlemmar"; }
- virtual QCString trNamespaceMemberDescription(bool extractAll)
- {
- QCString result="Här är en lista över alla ";
- if (!extractAll) result+="dokumenterade ";
- result+="namnrymdsmedlemmar med länkar till ";
- if (extractAll)
- result+=" namnrymd-dokumentationen för varje medlem:";
- else
- result+="de namnrymder de tillhör:";
- return result;
- }
-
- virtual QCString trNamespaceIndex()
- { return "Namnrymdsindex"; }
-
- virtual QCString trNamespaceDocumentation()
- { return "Namnrymd-dokumentation"; }
- //////////////////////////////////////////////////////////////////////////
-// new since 0.49-990522
-//////////////////////////////////////////////////////////////////////////
-
- /*! This is used in the documentation before the list of all
- * namespaces in a file.
- */
- virtual QCString trNamespaces()
- { return "Namnrymder"; }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 0.49-990728
-//////////////////////////////////////////////////////////////////////////
-
- /*! This is put at the bottom of a class documentation page and is
- * followed by a list of files that were used to generate the page.
- */
- virtual QCString trGeneratedFromFiles(ClassDef::CompoundType compType,
- bool single)
- { // here s is one of " Class", " Struct" or " Union"
- // single is true implies a single file
- QCString result=(QCString)"Dokumentationen för ";
- switch(compType)
- {
- case ClassDef::Class: result+="denna klass "; break;
- case ClassDef::Struct: result+="denna strukt "; break;
- case ClassDef::Union: result+="denna union "; break;
- case ClassDef::Interface: result+="detta gränssnitt "; break;
- case ClassDef::Protocol: result+="protocol"; break; // translate me!
- case ClassDef::Category: result+="category"; break; // translate me!
- case ClassDef::Exception: result+="detta undantag "; break;
- }
- result+="var genererad från följande fil";
- if (single) result+=":"; else result+="er:";
- return result;
- }
-
- /*! This is in the (quick) index as a link to the alphabetical compound
- * list.
- */
- virtual QCString trAlphabeticalList()
- {
- return "Alfabetisk lista";
- }
-//////////////////////////////////////////////////////////////////////////
-// new since 0.49-990901
-//////////////////////////////////////////////////////////////////////////
-
- /*! This is used as the heading text for the retval command. */
- virtual QCString trReturnValues()
- { return "Returvärden"; }
-
- /*! This is in the (quick) index as a link to the main page (index.html)
- */
- virtual QCString trMainPage()
- { return "Huvudsida"; }
-
- /*! This is used in references to page that are put in the LaTeX
- * documentation. It should be an abbreviation of the word page.
- */
- virtual QCString trPageAbbreviation()
- { return "s."; }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 0.49-991003
-//////////////////////////////////////////////////////////////////////////
-
- virtual QCString trDefinedAtLineInSourceFile()
- {
- return "Definition på rad @0 i filen @1.";
- }
- virtual QCString trDefinedInSourceFile()
- {
- return "Definition i filen @0.";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 0.49-991205
-//////////////////////////////////////////////////////////////////////////
-
- virtual QCString trDeprecated()
- {
- return "Föråldrad";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.0.0
-//////////////////////////////////////////////////////////////////////////
-
- /*! this text is put before a collaboration diagram */
- virtual QCString trCollaborationDiagram(const char *clName)
- {
- return (QCString)"Samarbetsdiagram för "+clName+":";
- }
-
- /*! this text is put before an include dependency graph */
- virtual QCString trInclDepGraph(const char *fName)
- {
- return (QCString)"Include-beroendediagram för "+fName+":";
- }
-
- /*! header that is put before the list of constructor/destructors. */
- virtual QCString trConstructorDocumentation()
- {
- return "Dokumentation av konstruktorer och destruktorer";
- }
-
- /*! Used in the file documentation to point to the corresponding sources. */
- virtual QCString trGotoSourceCode()
- {
- return "Gå till denna fils källkod.";
- }
-
- /*! Used in the file sources to point to the corresponding documentation. */
- virtual QCString trGotoDocumentation()
- {
- return "Gå till denna fils dokumentation.";
- }
-
- /*! Text for the \\pre command */
- virtual QCString trPrecondition()
- {
- return "Förhandsvillkor";
- }
-
- /*! Text for the \\post command */
- virtual QCString trPostcondition()
- {
- return "Resultat"; //"Postcondition";
- }
-
- /*! Text for the \\invariant command */
- virtual QCString trInvariant()
- {
- return "Invariant";
- }
-
- /*! Text shown before a multi-line variable/enum initialization */
- virtual QCString trInitialValue()
- {
- return "Begynnelsevärde:";
- }
- /*! Text used the source code in the file index */
- virtual QCString trCode()
- {
- return "källkod";
- }
-
- virtual QCString trGraphicalHierarchy()
- {
- return "Grafisk klasshierarki";
- }
- virtual QCString trGotoGraphicalHierarchy()
- {
- return "Gå till den grafiska klasshierarkin";
- }
- virtual QCString trGotoTextualHierarchy()
- {
- return "Gå till den textbaserade klasshierarkin";
- }
- virtual QCString trPageIndex()
- {
- return "Sidindex";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.1.0
-//////////////////////////////////////////////////////////////////////////
-
- virtual QCString trNote()
- {
- return "Notera";
- }
- virtual QCString trPublicTypes()
- {
- return "Publika typer";
- }
- virtual QCString trPublicAttribs()
- {
- if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
- {
- return "Datafält";
- }
- else
- {
- return "Publika attribut";
- }
- }
- virtual QCString trStaticPublicAttribs()
- {
- return "Statiska publika attribut";
- }
- virtual QCString trProtectedTypes()
- {
- return "Skyddade typer";
- }
- virtual QCString trProtectedAttribs()
- {
- return "Skyddade attribut";
- }
- virtual QCString trStaticProtectedAttribs()
- {
- return "Statiska skyddade attribut";
- }
- virtual QCString trPrivateTypes()
- {
- return "Privata typer";
- }
- virtual QCString trPrivateAttribs()
- {
- return "Privata attribut";
- }
- virtual QCString trStaticPrivateAttribs()
- {
- return "Statiska privata attribut";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.1.3
-//////////////////////////////////////////////////////////////////////////
-
- /*! Used as a marker that is put before a \\todo item */
- virtual QCString trTodo()
- {
- return "Att-göra";
- }
- /*! Used as the header of the todo list */
- virtual QCString trTodoList()
- {
- return "Att-göra lista";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.1.4
-//////////////////////////////////////////////////////////////////////////
-
- virtual QCString trReferencedBy()
- {
- return "Refererad av";
- }
- virtual QCString trRemarks()
- {
- return "Lägg märke till";
- }
- virtual QCString trAttention()
- {
- return "Observera";
- }
- virtual QCString trInclByDepGraph()
- {
- return "Den här grafen visar vilka filer som direkt eller "
- "indirekt inkluderar denna filen.";
- }
- virtual QCString trSince()
- {
- return "Sedan";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.1.5
-//////////////////////////////////////////////////////////////////////////
-
- /*! title of the graph legend page */
- virtual QCString trLegendTitle()
- {
- return "Grafförklaring";
- }
-
- /*! page explaining how the dot graph's should be interpreted
- * The %A in the text below are to prevent link to classes called "A".
- */
- virtual QCString trLegendDocs()
- {
- return
- "Den här sidan förklarar hur man ska tolka de grafer som doxygen "
- "genererar.<p>\n"
- "Tag följande exempel:\n"
- "\\code\n"
- "/*! Osynlig klass på grund av stympning */\n"
- "class Invisible { };\n\n"
- "/*! Stympad klass, ärvningsrelationen är dold */\n"
- "class Truncated : public Invisible { };\n\n"
- "/* Klass utan doxygen-kommentarer */\n"
- "class Undocumented { };\n\n"
- "/*! Klass som ärvs med publikt arv */\n"
- "class PublicBase : public Truncated { };\n\n"
- "/*! En template-klass */\n"
- "template<class T> class Templ { };\n\n"
- "/*! Klass som ärvs med skyddat arv */\n"
- "class ProtectedBase { };\n\n"
- "/*! Klass som ärvs med privat arv */\n"
- "class PrivateBase { };\n\n"
- "/*! Klass som används av Inherited klassen */\n"
- "class Used { };\n\n"
- "/*! Super klassen som ärver ett antal andra klasser */\n"
- "class Inherited : public PublicBase,\n"
- " protected ProtectedBase,\n"
- " private PrivateBase,\n"
- " public Undocumented,\n"
- " public Templ<int>\n"
- "{\n"
- " private:\n"
- " Used *m_usedClass;\n"
- "};\n"
- "\\endcode\n"
- "Om \\c MAX_DOT_GRAPH_HEIGHT är satt till 240 i konfigurationsfilen, "
- "kommer följande graf att generas:"
- "<p><center><img alt=\"\" src=\"graph_legend."+Config_getEnum("DOT_IMAGE_FORMAT")+"\"></center>\n"
- "<p>\n"
- "Rektanglarna i den ovanstående grafen har följande betydelser:\n"
- "<ul>\n"
- "<li>%En fylld svart rektangel representerar den strukt eller klass "
- "som har genererat grafen.\n"
- "<li>%En rektangel med svart kant symboliserar en dokumenterad "
- "strukt eller klass.\n"
- "<li>%En rektangel med grå kant symboliserar en odokumenterad strukt "
- "eller klass.\n"
- "<li>%En klass med röd kant symboliserar en strukt eller klass där "
- "alla dess relationer inte visas. %En graf stympas om den inte får "
- "plats inom de givna gränserna.\n"
- "</ul>\n"
- "Pilarna har följande betydelser:\n"
- "<ul>\n"
- "<li>%En mörkblå pil används för att visualisera en publik arvrelation "
- "mellan två klasser.\n"
- "<li>%En mörkgrön pil används för en skyddad arvsrelation.\n"
- "<li>%En mörkröd pil används för en privat arvsrelation.\n"
- "<li>%En sträckad lila pil används om en klass är innesluten eller "
- "använd av en annan klass. Vid pilen står namnet på den eller de "
- "variabler som klassen pilen pekar på kommer åt.\n"
- "<li>%En sträckad gul pil symboliserar förhållandet mellan en "
- "template-instans och template-klassen, som den instantierades från.\n"
- "Vid pilen står instansens template-parametrar.\n"
- "</ul>\n";
- }
-
- /*! text for the link to the legend page */
- virtual QCString trLegend()
- {
- return "förklaring";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.2.0
-//////////////////////////////////////////////////////////////////////////
-
- /*! Used as a marker that is put before a test item */
- virtual QCString trTest()
- {
- return "Test";
- }
- /*! Used as the header of the test list */
- virtual QCString trTestList()
- {
- return "Testlista";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.2.1
-//////////////////////////////////////////////////////////////////////////
-
- /*! Used as a section header for KDE-2 IDL methods */
- virtual QCString trDCOPMethods()
- {
- return "DCOP metoder";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.2.2
-//////////////////////////////////////////////////////////////////////////
-
- /*! Used as a section header for IDL properties */
- virtual QCString trProperties()
- {
- return "Egenskaper";
- }
- /*! Used as a section header for IDL property documentation */
- virtual QCString trPropertyDocumentation()
- {
- return "Egenskapsdokumentation";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.2.4
-//////////////////////////////////////////////////////////////////////////
-
- /*! Used for Java classes in the summary section of Java packages */
- virtual QCString trClasses()
- {
- if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
- {
- return "Datastrukturer";
- }
- else
- {
- return "Klasser";
- }
- }
- /*! Used as the title of a Java package */
- virtual QCString trPackage(const char *name)
- {
- return (QCString)"Paket "+name;
- }
- /*! Title of the package index page */
- virtual QCString trPackageList()
- {
- return "Paketlista";
- }
- /*! The description of the package index page */
- virtual QCString trPackageListDescription()
- {
- return "Här är en lista över paketen med en kort beskrivning "
- "(om sådan finns):";
- }
- /*! The link name in the Quick links header for each page */
- virtual QCString trPackages()
- {
- return "Paket";
- }
- /*! Text shown before a multi-line define */
- virtual QCString trDefineValue()
- {
- return "Värde:";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.2.5
-//////////////////////////////////////////////////////////////////////////
-
- /*! Used as a marker that is put before a \\bug item */
- virtual QCString trBug()
- {
- return "Bugg";
- }
- /*! Used as the header of the bug list */
- virtual QCString trBugList()
- {
- return "Bugglista";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.2.6
-//////////////////////////////////////////////////////////////////////////
-
- /*! Used as ansicpg for RTF file
- * (used table extract:)
- * <pre>
- * Charset Name Charset Value(hex) Codepage number
- * ------------------------------------------------------
- * ANSI_CHARSET 0 (x00) 1252
- * </pre>
- */
- virtual QCString trRTFansicp()
- {
- return "1252";
- }
-
- /*! Used as ansicpg for RTF fcharset */
- virtual QCString trRTFCharSet()
- {
- return "0";
- }
-
- /*! Used as header RTF general index */
- virtual QCString trRTFGeneralIndex()
- {
- return "Index";
- }
-
- /*! This is used for translation of the word that will possibly
- * be followed by a single name or by a list of names
- * of the category.
- */
- virtual QCString trClass(bool first_capital, bool singular)
- {
- QCString result((first_capital ? "Klass" : "klass"));
- if (!singular) result+="er";
- return result;
- }
-
- /*! This is used for translation of the word that will possibly
- * be followed by a single name or by a list of names
- * of the category.
- */
- virtual QCString trFile(bool first_capital, bool singular)
- {
- QCString result((first_capital ? "Fil" : "fil"));
- if (!singular) result+="er";
- return result;
- }
-
- /*! This is used for translation of the word that will possibly
- * be followed by a single name or by a list of names
- * of the category.
- */
- virtual QCString trNamespace(bool first_capital, bool singular)
- {
- QCString result((first_capital ? "Namnrymd" : "namnrynd"));
- if (!singular) result+="er";
- return result;
- }
-
- /*! This is used for translation of the word that will possibly
- * be followed by a single name or by a list of names
- * of the category.
- */
- virtual QCString trGroup(bool first_capital, bool singular)
- {
- QCString result((first_capital ? "Grupp" : "grupp"));
- if (!singular) result+="er";
- return result;
- }
-
- /*! This is used for translation of the word that will possibly
- * be followed by a single name or by a list of names
- * of the category.
- */
- virtual QCString trPage(bool first_capital, bool singular)
- {
- QCString result((first_capital ? "Sid" : "sid"));
- if (singular)
- result+="a";
- else
- result+="or";
- return result;
- }
-
- /*! This is used for translation of the word that will possibly
- * be followed by a single name or by a list of names
- * of the category.
- */
- virtual QCString trMember(bool first_capital, bool singular)
- {
- QCString result((first_capital ? "Medlem" : "medlem"));
- if (!singular) result+="mar";
- return result;
- }
-
- /*! This is used for translation of the word that will possibly
- * be followed by a single name or by a list of names
- * of the category.
- */
- virtual QCString trGlobal(bool first_capital, bool singular)
- {
- QCString result((first_capital ? "Global" : "global"));
- if (!singular) result+="er";
- return result;
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.2.7
-//////////////////////////////////////////////////////////////////////////
-
- /*! This text is generated when the \\author command is used and
- * for the author section in man pages. */
- virtual QCString trAuthor(bool first_capital, bool /*singular*/)
- {
- QCString result((first_capital ? "Författare" : "författare"));
- return result;
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.2.11
-//////////////////////////////////////////////////////////////////////////
-
- /*! This text is put before the list of members referenced by a member
- */
- virtual QCString trReferences()
- {
- return "Referenser";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.2.13
-//////////////////////////////////////////////////////////////////////////
-
- /*! used in member documentation blocks to produce a list of
- * members that are implemented by this one.
- */
- virtual QCString trImplementedFromList(int numEntries)
- {
- return "Implementerar "+trWriteList(numEntries)+".";
- }
-
- /*! used in member documentation blocks to produce a list of
- * all members that implement this abstract member.
- */
- virtual QCString trImplementedInList(int numEntries)
- {
- return "Implementerad i "+trWriteList(numEntries)+".";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.2.16
-//////////////////////////////////////////////////////////////////////////
-
- /*! used in RTF documentation as a heading for the Table
- * of Contents.
- */
- virtual QCString trRTFTableOfContents()
- {
- return "Innehållsförteckning";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.2.17
-//////////////////////////////////////////////////////////////////////////
-
- /*! Used as the header of the list of item that have been
- * flagged deprecated
- */
- virtual QCString trDeprecatedList()
- {
- return "Lista över föråldrade";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.2.18
-//////////////////////////////////////////////////////////////////////////
-
- /*! Used as a header for declaration section of the events found in
- * a C# program
- */
- virtual QCString trEvents()
- {
- return "Händelser";
- }
- /*! Header used for the documentation section of a class' events. */
- virtual QCString trEventDocumentation()
- {
- return "Händelse Dokumentation";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.3
-//////////////////////////////////////////////////////////////////////////
-
- /*! Used as a heading for a list of Java class types with package scope.
- */
- virtual QCString trPackageTypes()
- {
- return "Paket typer";
- }
- /*! Used as a heading for a list of Java class functions with package
- * scope.
- */
- virtual QCString trPackageMembers()
- {
- return "Paket funktioner";
- }
- /*! Used as a heading for a list of static Java class functions with
- * package scope.
- */
- virtual QCString trStaticPackageMembers()
- {
- return "Statiska paket funktioner";
- }
- /*! Used as a heading for a list of Java class variables with package
- * scope.
- */
- virtual QCString trPackageAttribs()
- {
- return "Paket attribut";
- }
- /*! Used as a heading for a list of static Java class variables with
- * package scope.
- */
- virtual QCString trStaticPackageAttribs()
- {
- return "Statiska paket attribut";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.3.1
-//////////////////////////////////////////////////////////////////////////
-
- /*! Used in the quick index of a class/file/namespace member list page
- * to link to the unfiltered list of all members.
- */
- virtual QCString trAll()
- {
- return "Alla";
- }
- /*! Put in front of the call graph for a function. */
- virtual QCString trCallGraph()
- {
- return "Här är anropnings diagrammet för den här funktionen:";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.3.3
-//////////////////////////////////////////////////////////////////////////
-
- /*! When the search engine is enabled this text is put in the header
- * of each page before the field where one can enter the text to search
- * for.
- */
- virtual QCString trSearchForIndex()
- {
- return "Sök efter";
- }
- /*! This string is used as the title for the page listing the search
- * results.
- */
- virtual QCString trSearchResultsTitle()
- {
- return "Sökresultat";
- }
- /*! This string is put just before listing the search results. The
- * text can be different depending on the number of documents found.
- * Inside the text you can put the special marker $num to insert
- * the number representing the actual number of search results.
- * The @a numDocuments parameter can be either 0, 1 or 2, where the
- * value 2 represents 2 or more matches. HTML markup is allowed inside
- * the returned string.
- */
- virtual QCString trSearchResults(int numDocuments)
- {
- if (numDocuments==0)
- {
- return "Tyvärr finns det inga dokument som matchar din sökning.";
- }
- else if (numDocuments==1)
- {
- return "Hittade <b>1</b> dokument som matchar din sökning.";
- }
- else
- {
- return "Hittade <b>$num</b> dokument som matchar din sökning. "
- "Visar de bästa träffarna först.";
- }
- }
- /*! This string is put before the list of matched words, for each search
- * result. What follows is the list of words that matched the query.
- */
- virtual QCString trSearchMatches()
- {
- return "Träffar:";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.3.8
-//////////////////////////////////////////////////////////////////////////
-
- /*! This is used in HTML as the title of page with source code for file filename
- */
- virtual QCString trSourceFile(QCString& filename)
- {
- return "Källkodsfilen " + filename;
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.3.9
-//////////////////////////////////////////////////////////////////////////
-
- /*! This is used as the name of the chapter containing the directory
- * hierarchy.
- */
- virtual QCString trDirIndex()
- { return "Katalogstruktur"; }
-
- /*! This is used as the name of the chapter containing the documentation
- * of the directories.
- */
- virtual QCString trDirDocumentation()
- { return "Katalogdokumentation"; }
-
- /*! This is used as the title of the directory index and also in the
- * Quick links of a HTML page, to link to the directory hierarchy.
- */
- virtual QCString trDirectories()
- { return "Kataloger"; }
-
- /*! This returns a sentences that introduces the directory hierarchy.
- * and the fact that it is sorted alphabetically per level
- */
- virtual QCString trDirDescription()
- { return "Den här katalogen är grovt sorterad, "
- "men inte helt, i alfabetisk ordning:";
- }
-
- /*! This returns the title of a directory page. The name of the
- * directory is passed via \a dirName.
- */
- virtual QCString trDirReference(const char *dirName)
- { QCString result=dirName; result+=" Katalogreferens"; return result; }
-
- /*! This returns the word directory with or without starting capital
- * (\a first_capital) and in sigular or plural form (\a singular).
- */
- virtual QCString trDir(bool first_capital, bool singular)
- {
- QCString result((first_capital ? "Katalog" : "katalog"));
- if (!singular) result+="er";
- return result;
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.4.1
-//////////////////////////////////////////////////////////////////////////
-
- /*! This text is added to the documentation when the \\overload command
- * is used for a overloaded function.
- */
- virtual QCString trOverloadText()
- {
- return "Det här är en överlagrad medlemsfunktion "
- "tillhandahållen för bekvämlighet. Den enda som "
- "skiljer sig från ovanstående funktion är vilka "
- "argument den tar emot.";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.4.6
-//////////////////////////////////////////////////////////////////////////
-
- /*! This is used to introduce a caller (or called-by) graph */
- virtual QCString trCallerGraph()
- {
- return "Här är katalog-grafen för denna funktion:";
- }
-
- /*! This is used in the documentation of a file/namespace before the list
- * of documentation blocks for enumeration values
- */
- virtual QCString trEnumerationValueDocumentation()
- {
- return "Uppräknings-dokumentation";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.5.4 (mainly for Fortran)
-//////////////////////////////////////////////////////////////////////////
-
- /*! header that is put before the list of member subprograms (Fortran). */
- virtual QCString trMemberFunctionDocumentationFortran()
- { return "Memlems-function/Subroutins Dokumentation"; }
-
- /*! This is put above each page as a link to the list of annotated data types (Fortran). */
- virtual QCString trCompoundListFortran()
- { return "Datatyplista"; }
-
- /*! This is put above each page as a link to all members of compounds (Fortran). */
- virtual QCString trCompoundMembersFortran()
- { return "Data fält"; }
-
- /*! This is an introduction to the annotated compound list (Fortran). */
- virtual QCString trCompoundListDescriptionFortran()
- { return "Här är datatyperna med en kort beskrivning:"; }
-
- /*! This is an introduction to the page with all data types (Fortran). */
- virtual QCString trCompoundMembersDescriptionFortran(bool extractAll)
- {
- QCString result="Här är en lista av alla ";
- if (!extractAll)
- {
- result+="dokumenterade ";
- }
- result+="datatyps medlemmar";
- result+=" med länkar till ";
- if (!extractAll)
- {
- result+="datastrukturs documentation för varje medlem";
- }
- else
- {
- result+="klasserna de hör till:";
- }
- return result;
- }
-
- /*! This is used in LaTeX as the title of the chapter with the
- * annotated compound index (Fortran).
- */
- virtual QCString trCompoundIndexFortran()
- { return "Datatyps Index"; }
-
- /*! This is used in LaTeX as the title of the chapter containing
- * the documentation of all data types (Fortran).
- */
- virtual QCString trTypeDocumentation()
- { return "Dataryps Dokumentation"; }
-
- /*! This is used in the documentation of a file as a header before the
- * list of (global) subprograms (Fortran).
- */
- virtual QCString trSubprograms()
- { return "Funktions/Subroutins"; }
-
- /*! This is used in the documentation of a file/namespace before the list
- * of documentation blocks for subprograms (Fortran)
- */
- virtual QCString trSubprogramDocumentation()
- { return "Funktion/Subroutin Dokumentation"; }
-
- /*! This is used in the documentation of a file/namespace/group before
- * the list of links to documented compounds (Fortran)
- */
- virtual QCString trDataTypes()
- { return "Datatyper"; }
-
- /*! used as the title of page containing all the index of all modules (Fortran). */
- virtual QCString trModulesList()
- { return "Modullista"; }
-
- /*! used as an introduction to the modules list (Fortran) */
- virtual QCString trModulesListDescription(bool extractAll)
- {
- QCString result="Här är en lista på alla ";
- if (!extractAll) result+="dokumenterade ";
- result+="moduler med en kort beskrivning:";
- return result;
- }
-
- /*! used as the title of the HTML page of a module/type (Fortran) */
- virtual QCString trCompoundReferenceFortran(const char *clName,
- ClassDef::CompoundType compType,
- bool isTemplate)
- {
- QCString result=(QCString)clName;
- switch(compType)
- {
- case ClassDef::Class: result+=" Modul"; break;
- case ClassDef::Struct: result+=" Typ"; break;
- case ClassDef::Union: result+=" Union"; break;
- case ClassDef::Interface: result+=" Gränssnitt"; break;
- case ClassDef::Protocol: result+=" Protokoll"; break;
- case ClassDef::Category: result+=" Kategori"; break;
- case ClassDef::Exception: result+=" Undantag"; break;
- }
- if (isTemplate) result+=" Mall";
- result+=" Referens";
- return result;
- }
- /*! used as the title of the HTML page of a module (Fortran) */
- virtual QCString trModuleReference(const char *namespaceName)
- {
- QCString result=namespaceName;
- result+=" Modul Referens";
- return result;
- }
-
- /*! This is put above each page as a link to all members of modules. (Fortran) */
- virtual QCString trModulesMembers()
- { return "Modul Medlemmar"; }
-
- /*! This is an introduction to the page with all modules members (Fortran) */
- virtual QCString trModulesMemberDescription(bool extractAll)
- {
- QCString result="Här är en lista på alla ";
- if (!extractAll) result+="documented ";
- result+="modul medlemmar med länkar till ";
- if (extractAll)
- {
- result+="modul dokumentationen för varje medlem:";
- }
- else
- {
- result+="modulerna de hör till:";
- }
- return result;
- }
-
- /*! This is used in LaTeX as the title of the chapter with the
- * index of all modules (Fortran).
- */
- virtual QCString trModulesIndex()
- { return "Modul Index"; }
-
- /*! This is used for translation of the word that will possibly
- * be followed by a single name or by a list of names
- * of the category.
- */
- virtual QCString trModule(bool first_capital, bool singular)
- {
- return createNoun(first_capital, singular, "modul", "er");
- }
- /*! This is put at the bottom of a module documentation page and is
- * followed by a list of files that were used to generate the page.
- */
- virtual QCString trGeneratedFromFilesFortran(ClassDef::CompoundType compType,
- bool single)
- {
- // single is true implies a single file
- QCString result=(QCString)"Dokumentationen för denna ";
- switch(compType)
- {
- case ClassDef::Class: result+="modul"; break;
- case ClassDef::Struct: result+="typ"; break;
- case ClassDef::Union: result+="union"; break;
- case ClassDef::Interface: result+="gränssnitt"; break;
- case ClassDef::Protocol: result+="protokoll"; break;
- case ClassDef::Category: result+="kategori"; break;
- case ClassDef::Exception: result+="undantag"; break;
- }
- result+=" genererades från följade fil";
- if (single) result+=":"; else result+="er:";
- return result;
- }
- /*! This is used for translation of the word that will possibly
- * be followed by a single name or by a list of names
- * of the category.
- */
- virtual QCString trType(bool first_capital, bool singular)
- {
- return createNoun(first_capital, singular, "typ", "er");
- }
- /*! This is used for translation of the word that will possibly
- * be followed by a single name or by a list of names
- * of the category.
- */
- virtual QCString trSubprogram(bool first_capital, bool /*singular*/)
- {
- QCString result((first_capital ? "Subprogram" : "subprogram"));
- return result;
- }
-
- /*! C# Type Constraint list */
- virtual QCString trTypeConstraints()
- {
- return "Typbegränsningar";
- }
-
-/*---------- For internal use: ----------------------------------------*/
- protected:
- /*! For easy flexible-noun implementation.
- * \internal
- */
- QCString createNoun(bool first_capital, bool singular,
- const char* base, const char* plurSuffix)
- {
- QCString result(base);
- if (first_capital) result.at(0) = toupper(result.at(0));
- if (!singular) result+=plurSuffix;
- return result;
- }
-
-
-};
-
-#endif
diff --git a/trunk/src/translator_tr.h b/trunk/src/translator_tr.h
deleted file mode 100644
index 5906364..0000000
--- a/trunk/src/translator_tr.h
+++ /dev/null
@@ -1,1872 +0,0 @@
-/******************************************************************************
- *
- *
- *
- * Copyright (C) 1997-2012 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.
- *
- */
-
-#ifndef TRANSLATOR_TR_H
-#define TRANSLATOR_TR_H
-
-/*!
- When defining a translator class for the new language, follow
- the description in the documentation. One of the steps says
- that you should copy the translator_en.h (this) file to your
- translator_xx.h new file. Your new language should use the
- Translator class as the base class. This means that you need to
- implement exactly the same (pure virtual) methods as the
- TranslatorEnglish does. Because of this, it is a good idea to
- start with the copy of TranslatorEnglish and replace the strings
- one by one.
-
- It is not necessary to include "translator.h" or
- "translator_adapter.h" here. The files are included in the
- language.cpp correctly. Not including any of the mentioned
- files frees the maintainer from thinking about whether the
- first, the second, or both files should be included or not, and
- why. This holds namely for localized translators because their
- base class is changed occasionaly to adapter classes when the
- Translator class changes the interface, or back to the
- Translator class (by the local maintainer) when the localized
- translator is made up-to-date again.
-*/
-class TranslatorTurkish : public TranslatorAdapter_1_7_5
-{
- public:
-
- // --- Language control methods -------------------
-
- /*! Used for identification of the language. The identification
- * should not be translated. It should be replaced by the name
- * of the language in English using lower-case characters only
- * (e.g. "czech", "japanese", "russian", etc.). It should be equal to
- * the identification used in language.cpp.
- */
- virtual QCString idLanguage()
- { return "turkish"; }
-
- /*! Used to get the LaTeX command(s) for the language support.
- * This method should return string with commands that switch
- * LaTeX to the desired language. For example
- * <pre>"\\usepackage[german]{babel}\n"
- * </pre>
- * or
- * <pre>"\\usepackage{polski}\n"
- * "\\usepackage[latin2]{inputenc}\n"
- * "\\usepackage[T1]{fontenc}\n"
- * </pre>
- *
- * The English LaTeX does not use such commands. Because of this
- * the empty string is returned in this implementation.
- */
- virtual QCString latexLanguageSupportCommand()
- {
- return "";
- }
-
- /*! return the language charset. This will be used for the HTML output */
- virtual QCString idLanguageCharset()
- {
- return "utf-8";
- }
-
- // --- Language translation methods -------------------
-
- /*! used in the compound documentation before a list of related fonksiyonlar. */
- virtual QCString trRelatedFunctions()
- { return "Ä°lgili Fonksiyonlar"; }
-
- /*! subscript for the related fonksiyonlar. */
- virtual QCString trRelatedSubscript()
- { return "(Not: Bu fonksiyonlar üye fonksiyon değildir.)"; }
-
- /*! header that is put before the detailed description of files, classes and namespaces. */
- virtual QCString trDetailedDescription()
- { return "Ayrıntılı tanımlama"; }
-
- /*! header that is put before the list of typedefs. */
- virtual QCString trMemberTypedefDocumentation()
- { return "Üye Typedef Dokümantasyonu"; }
-
- /*! header that is put before the list of enumerations. */
- virtual QCString trMemberEnumerationDocumentation()
- { return "Üye Enümerasyon Dokümantasyonu"; }
-
- /*! header that is put before the list of member fonksiyonlar. */
- virtual QCString trMemberFunctionDocumentation()
- { return "Üye Fonksiyon Dokümantasyonu"; }
-
- /*! header that is put before the list of member attributes. */
- virtual QCString trMemberDataDocumentation()
- {
- if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
- {
- return "Alan Dokümantasyonu";
- }
- else
- {
- return "Üye Veri Dokümantasyonu";
- }
- }
-
- /*! this is the text of a link put after brief descriptions. */
- virtual QCString trMore()
- { return "Ayrıntılar..."; }
-
- /*! put in the class documentation */
- virtual QCString trListOfAllMembers()
- { return "Tüm üyelerin listesi."; }
-
- /*! used as the title of the "list of all members" page of a class */
- virtual QCString trMemberList()
- { return "Ãœye Listesi"; }
-
- /*! this is the first part of a sentence that is followed by a class name */
- virtual QCString trThisIsTheListOfAllMembers()
- { return "Şu sınıfın tüm üyelerinin listesidir: "; }
-
- /*! this is the remainder of the sentence after the class name */
- virtual QCString trIncludingInheritedMembers()
- { return " (kalıtımla gelen üyeleri de içerir)."; }
-
- /*! this is put at the author sections at the bottom of man pages.
- * parameter s is name of the project name.
- */
- virtual QCString trGeneratedAutomatically(const char *s)
- { QCString result="Doxygen tarafından";
- if (s) result+=s+(QCString)" için ";
- result+=" kaynak koddan otomatik üretilmiştir.";
- return result;
- }
-
- /*! put after an enum name in the list of all members */
- virtual QCString trEnumName()
- { return "enum adı"; }
-
- /*! put after an enum value in the list of all members */
- virtual QCString trEnumValue()
- { return "enum deÄŸeri"; }
-
- /*! put after an undocumented member in the list of all members */
- virtual QCString trDefinedIn()
- { return "tanımlandığı yer"; }
-
- // quick reference sections
-
- /*! This is put above each page as a link to the list of all groups of
- * compounds or files (see the \\group command).
- */
- virtual QCString trModules()
- { return "Modüller"; }
-
- /*! This is put above each page as a link to the class hierarchy */
- virtual QCString trClassHierarchy()
- { return "Sınıf Hiyerarşisi"; }
-
- /*! This is put above each page as a link to the list of annotated classes */
- virtual QCString trCompoundList()
- {
- if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
- {
- return "Veri Yapıları";
- }
- else
- {
- return "Sınıf Listesi";
- }
- }
-
- /*! This is put above each page as a link to the list of documented files */
- virtual QCString trFileList()
- { return "Dosya Listesi"; }
-
- /*! This is put above each page as a link to all members of compounds. */
- virtual QCString trCompoundMembers()
- {
- if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
- {
- return "Veri Alanları";
- }
- else
- {
- return "Sınıf Üyeleri";
- }
- }
-
- /*! This is put above each page as a link to all members of files. */
- virtual QCString trFileMembers()
- {
- if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
- {
- return "Globaller";
- }
- else
- {
- return "Dosya Ãœyeleri";
- }
- }
-
- /*! This is put above each page as a link to all related pages. */
- virtual QCString trRelatedPages()
- { return "Ä°lgili Sayfalar"; }
-
- /*! This is put above each page as a link to all examples. */
- virtual QCString trExamples()
- { return "Örnekler"; }
-
- /*! This is put above each page as a link to the search engine. */
- virtual QCString trSearch()
- { return "Ara"; }
-
- /*! This is an introduction to the class hierarchy. */
- virtual QCString trClassHierarchyDescription()
- { return "Bu kalıtım listesi tamamen olmasa da yaklaşık "
- "olarak alfabetik sıraya konulmuştur:";
- }
-
- /*! This is an introduction to the list with all files. */
- virtual QCString trFileListDescription(bool extractAll)
- {
- QCString result="Bu liste tüm ";
- if (!extractAll) result+="dokümante edilmiş ";
- result+="dosyaları kısa açıklamalarıyla göstermektedir:";
- return result;
- }
-
- /*! This is an introduction to the annotated compound list. */
- virtual QCString trCompoundListDescription()
- {
-
- if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
- {
- return "Kısa tanımlarıyla birlikte veri yapıları:";
- }
- else
- {
- return "Kısa tanımlarıyla sınıflar, yapılar (struct), "
- "birleşimler(union) ve arayüzler:";
- }
- }
-
- /*! This is an introduction to the page with all class members. */
- virtual QCString trCompoundMembersDescription(bool extractAll)
- {
- QCString result="Bu liste tüm ";
- if (!extractAll)
- {
- result+="dokümante edilmiş ";
- }
- if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
- {
- result+="yapı(struct) ve birleşim(union) yapılarını içerir";
- }
- else
- {
- result+="sınıf üyelerini içerir";
- }
- result+=" ve ";
- if (!extractAll)
- {
- if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
- {
- result+="her alanı yapı(struct)/birleşim(union) dokümantasyonuna bağlar:";
- }
- else
- {
- result+="her üye için sınıf dokümantasyonuna bağlar:";
- }
- }
- else
- {
- if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
- {
- result+="ait olduğu yapı(struct)/birleşime(union) bağlar:";
- }
- else
- {
- result+="ait olduğu sınıfa bağlar:";
- }
- }
- return result;
- }
-
- /*! This is an introduction to the page with all file members. */
- virtual QCString trFileMembersDescription(bool extractAll)
- {
- QCString result="Bu liste tüm ";
- if (!extractAll) result+="dokümante edilmiş ";
-
- if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
- {
- result+="fonksiyonları, değişkenleri, makroları, enümerasyonları ve typedef\'leri içerir";
- }
- else
- {
- result+="dosya üyelerini içerir";
- }
- result+=" ve ";
- if (extractAll)
- result+="ait olduÄŸu dosyalar baÄŸlar:";
- else
- result+="dokümantasyona bağlar:";
- return result;
- }
-
- /*! This is an introduction to the page with the list of all examples */
- virtual QCString trExamplesDescription()
- { return "Tüm örneklerin listesi aşağıdadır:"; }
-
- /*! This is an introduction to the page with the list of related pages */
- virtual QCString trRelatedPagesDescription()
- { return "İlgili tüm dokümantasyon sayfalarının listesi aşağıdadır:"; }
-
- /*! This is an introduction to the page with the list of class/file groups */
- virtual QCString trModulesDescription()
- { return "Tüm modüllerin listesi aşağıdadır:"; }
-
- // index titles (the project name is prepended for these)
-
- /*! This is used in HTML as the title of index.html. */
- virtual QCString trDocumentation()
- { return "Dokümantasyonu"; }
-
- /*! This is used in LaTeX as the title of the chapter with the
- * index of all groups.
- */
- virtual QCString trModuleIndex()
- { return "Modül İndeksi"; }
-
- /*! This is used in LaTeX as the title of the chapter with the
- * class hierarchy.
- */
- virtual QCString trHierarchicalIndex()
- { return "HiyerarÅŸik Ä°ndeksi"; }
-
- /*! This is used in LaTeX as the title of the chapter with the
- * annotated compound index.
- */
- virtual QCString trCompoundIndex()
- {
- if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
- {
- return "Veri Yapıları İndeksi";
- }
- else
- {
- return "Sınıf İndeksi";
- }
- }
-
- /*! This is used in LaTeX as the title of the chapter with the
- * list of all files.
- */
- virtual QCString trFileIndex()
- { return "Dosya Ä°ndeksi"; }
-
- /*! This is used in LaTeX as the title of the chapter containing
- * the documentation of all groups.
- */
- virtual QCString trModuleDocumentation()
- { return "Modül Dokümantasyonu"; }
-
- /*! This is used in LaTeX as the title of the chapter containing
- * the documentation of all classes, structs and unions.
- */
- virtual QCString trClassDocumentation()
- {
- if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
- {
- return "Veri Yapıları Dokümantasyonu";
- }
- else
- {
- return "Sınıf Dokümantasyonu";
- }
- }
-
- /*! This is used in LaTeX as the title of the chapter containing
- * the documentation of all files.
- */
- virtual QCString trFileDocumentation()
- { return "Dosya Dokümantasyonu"; }
-
- /*! This is used in LaTeX as the title of the chapter containing
- * the documentation of all examples.
- */
- virtual QCString trExampleDocumentation()
- { return "Örnek Dokümantasyonu"; }
-
- /*! This is used in LaTeX as the title of the chapter containing
- * the documentation of all related pages.
- */
- virtual QCString trPageDocumentation()
- { return "Sayfa Dokümantasyonu"; }
-
- /*! This is used in LaTeX as the title of the document */
- virtual QCString trReferenceManual()
- { return "Referans Kitabı"; }
-
- /*! This is used in the documentation of a file as a header before the
- * list of defines
- */
- virtual QCString trDefines()
- { return "Makrolar"; }
-
- /*! This is used in the documentation of a file as a header before the
- * list of function prototypes
- */
- virtual QCString trFuncProtos()
- { return "Fonksiyon Prototipleri"; }
-
- /*! This is used in the documentation of a file as a header before the
- * list of typedefs
- */
- virtual QCString trTypedefs()
- { return "Typedef\'ler"; }
-
- /*! This is used in the documentation of a file as a header before the
- * list of enumerations
- */
- virtual QCString trEnumerations()
- { return "Enümerasyonlar"; }
-
- /*! This is used in the documentation of a file as a header before the
- * list of (global) functions
- */
- virtual QCString trFunctions()
- { return "Fonksiyonlar"; }
-
- /*! This is used in the documentation of a file as a header before the
- * list of (global) variables
- */
- virtual QCString trVariables()
- { return "DeÄŸiÅŸkenler"; }
-
- /*! This is used in the documentation of a file as a header before the
- * list of (global) variables
- */
- virtual QCString trEnumerationValues()
- { return "Enümeratör"; }
-
- /*! This is used in the documentation of a file before the list of
- * documentation blocks for defines
- */
- virtual QCString trDefineDocumentation()
- { return "Makro Dokümantasyonu"; }
-
- /*! This is used in the documentation of a file/namespace before the list
- * of documentation blocks for function prototypes
- */
- virtual QCString trFunctionPrototypeDocumentation()
- { return "Fonksiyon Prototip Dokümantasyonu"; }
-
- /*! This is used in the documentation of a file/namespace before the list
- * of documentation blocks for typedefs
- */
- virtual QCString trTypedefDocumentation()
- { return "Typedef Dokümantasyonu"; }
-
- /*! This is used in the documentation of a file/namespace before the list
- * of documentation blocks for enumeration types
- */
- virtual QCString trEnumerationTypeDocumentation()
- { return "Enümerasyon Tipi Dokümantasyonu"; }
-
- /*! This is used in the documentation of a file/namespace before the list
- * of documentation blocks for functions
- */
- virtual QCString trFunctionDocumentation()
- { return "Fonksiyon Dokümantasyonu"; }
-
- /*! This is used in the documentation of a file/namespace before the list
- * of documentation blocks for variables
- */
- virtual QCString trVariableDocumentation()
- { return "Değişken Dokümantasyonu"; }
-
- /*! This is used in the documentation of a file/namespace/group before
- * the list of links to documented compounds
- */
- virtual QCString trCompounds()
- {
- if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
- {
- return "Veri Yapıları";
- }
- else
- {
- return "Sınıflar";
- }
- }
-
- /*! This is used in the standard footer of each page and indicates when
- * the page was generated
- */
- virtual QCString trGeneratedAt(const char *date,const char *projName)
- {
- QCString result=projName+(QCString)" için "+date;
- if (projName) result+=(QCString)" tarihinde ";
- result+=(QCString)" üreten: ";
- return result;
- }
- /*! This is part of the sentence used in the standard footer of each page.
- */
- virtual QCString trWrittenBy()
- {
- return "yazan";
- }
-
- /*! this text is put before a class diagram */
- virtual QCString trClassDiagram(const char *clName)
- {
- return clName+(QCString)" için kalıtım şeması:";
- }
-
- /*! this text is generated when the \\internal command is used. */
- virtual QCString trForInternalUseOnly()
- { return "İç kullanıma ayrılmıştır."; }
-
- /*! this text is generated when the \\warning command is used. */
- virtual QCString trWarning()
- { return "Uyarı"; }
-
- /*! this text is generated when the \\version command is used. */
- virtual QCString trVersion()
- { return "Sürüm"; }
-
- /*! this text is generated when the \\date command is used. */
- virtual QCString trDate()
- { return "Tarih"; }
-
- /*! this text is generated when the \\return command is used. */
- virtual QCString trReturns()
- { return "Döndürdüğü değer"; }
-
- /*! this text is generated when the \\sa command is used. */
- virtual QCString trSeeAlso()
- { return "Ayrıca Bakınız"; }
-
- /*! this text is generated when the \\param command is used. */
- virtual QCString trParameters()
- { return "Parametreler"; }
-
- /*! this text is generated when the \\exception command is used. */
- virtual QCString trExceptions()
- { return "Ä°stisnalar"; }
-
- /*! this text is used in the title page of a LaTeX document. */
- virtual QCString trGeneratedBy()
- { return "OluÅŸturan"; }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 0.49-990307
-//////////////////////////////////////////////////////////////////////////
-
- /*! used as the title of page containing all the index of all namespaces. */
- virtual QCString trNamespaceList()
- { return "Namespace Listesi"; }
-
- /*! used as an introduction to the namespace list */
- virtual QCString trNamespaceListDescription(bool extractAll)
- {
- QCString result="Tüm ";
- if (!extractAll) result+="dokümante edilmiş ";
- result+="namespace\'lerin kısa tanımlarıyla listesi aşağıdadır:";
- return result;
- }
-
- /*! used in the class documentation as a header before the list of all
- * friends of a class
- */
- virtual QCString trFriends()
- { return "Arkadaşları"; }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 0.49-990405
-//////////////////////////////////////////////////////////////////////////
-
- /*! used in the class documentation as a header before the list of all
- * related classes
- */
- virtual QCString trRelatedFunctionDocumentation()
- { return "Arkadaş Ve İlgili Fonksiyon Dokümantasyonu"; }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 0.49-990425
-//////////////////////////////////////////////////////////////////////////
-
- /*! used as the title of the HTML page of a class/struct/union */
- virtual QCString trCompoundReference(const char *clName,
- ClassDef::CompoundType compType,
- bool isTemplate)
- {
- QCString result=(QCString)clName;
- switch(compType)
- {
- case ClassDef::Class: result+=" Sınıf"; break;
- case ClassDef::Struct: result+=" Yapı(Struct)"; break;
- case ClassDef::Union: result+=" BirleÅŸim(Union)"; break;
- case ClassDef::Interface: result+=" Arayüz(Interface)"; break;
- case ClassDef::Protocol: result+=" Protokol"; break;
- case ClassDef::Category: result+=" Kategori"; break;
- case ClassDef::Exception: result+=" Ä°stisna"; break;
- }
- if (isTemplate) result+=" Åžablon";
- result+=" Referans";
- return result;
- }
-
- /*! used as the title of the HTML page of a file */
- virtual QCString trFileReference(const char *fileName)
- {
- QCString result=fileName;
- result+=" Dosya Referansı";
- return result;
- }
-
- /*! used as the title of the HTML page of a namespace */
- virtual QCString trNamespaceReference(const char *namespaceName)
- {
- QCString result=namespaceName;
- result+=" Namespace Referansı";
- return result;
- }
-
- virtual QCString trPublicMembers()
- { return "Public Ãœye Fonksiyonlar"; }
- virtual QCString trPublicSlots()
- { return "Public Slotlar"; }
- virtual QCString trSignals()
- { return "Sinyaller"; }
- virtual QCString trStaticPublicMembers()
- { return "Statik Public Ãœye Fonksiyonlar"; }
- virtual QCString trProtectedMembers()
- { return "Korumalı Üye Fonksiyonlar"; }
- virtual QCString trProtectedSlots()
- { return "Korumalı Slotlar"; }
- virtual QCString trStaticProtectedMembers()
- { return "Statik Korumalı Üye Fonksiyonlar"; }
- virtual QCString trPrivateMembers()
- { return "Özel Üye Fonksiyonlar"; }
- virtual QCString trPrivateSlots()
- { return "Özel Slotlar"; }
- virtual QCString trStaticPrivateMembers()
- { return "Statik Özel Üye Fonksiyonlar"; }
-
- /*! this function is used to produce a comma-separated list of items.
- * use generateMarker(i) to indicate where item i should be put.
- */
- virtual QCString trWriteList(int numEntries)
- {
- QCString result;
- int i;
- // the inherits list contain `numEntries' classes
- for (i=0;i<numEntries;i++)
- {
- // use generateMarker to generate placeholders for the class links!
- result+=generateMarker(i); // generate marker for entry i in the list
- // (order is left to right)
-
- if (i!=numEntries-1) // not the last entry, so we need a separator
- {
- if (i<numEntries-2) // not the fore last entry
- result+=", ";
- else // the fore last entry
- result+=" ve ";
- }
- }
- return result;
- }
-
- /*! used in class documentation to produce a list of base classes,
- * if class diagrams are disabled.
- */
- virtual QCString trInheritsList(int numEntries)
- {
- return "Şu sınıflardan türemiştir : "+trWriteList(numEntries)+".";
- }
-
- /*! used in class documentation to produce a list of super classes,
- * if class diagrams are disabled.
- */
- virtual QCString trInheritedByList(int numEntries)
- {
- return "Şu sınıfların atasıdır : "+trWriteList(numEntries)+".";
- }
-
- /*! used in member documentation blocks to produce a list of
- * members that are hidden by this one.
- */
- virtual QCString trReimplementedFromList(int numEntries)
- {
- return "Şu üyeleri yeniden tanımlar : "+trWriteList(numEntries)+".";
- }
-
- /*! used in member documentation blocks to produce a list of
- * all member that overwrite the implementation of this member.
- */
- virtual QCString trReimplementedInList(int numEntries)
- {
- return "Şu üyeler tarafından yeniden tanımlanmıştır : "+trWriteList(numEntries)+".";
- }
-
- /*! This is put above each page as a link to all members of namespaces. */
- virtual QCString trNamespaceMembers()
- { return "Namespace Ãœyeleri"; }
-
- /*! This is an introduction to the page with all namespace members */
- virtual QCString trNamespaceMemberDescription(bool extractAll)
- {
- QCString result="Bu liste tüm ";
- if (!extractAll) result+="dokümante edilmiş ";
- result+="namespace üyelerini listeler ve ";
- if (extractAll)
- result+="her üye için üye dokümantasyonuna bağlar:";
- else
- result+="ait olduÄŸu namespace\'lere baÄŸlar:";
- return result;
- }
- /*! This is used in LaTeX as the title of the chapter with the
- * index of all namespaces.
- */
- virtual QCString trNamespaceIndex()
- { return "Namespace Ä°ndeksi"; }
-
- /*! This is used in LaTeX as the title of the chapter containing
- * the documentation of all namespaces.
- */
- virtual QCString trNamespaceDocumentation()
- { return "Namespace Dokümantasyonu"; }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 0.49-990522
-//////////////////////////////////////////////////////////////////////////
-
- /*! This is used in the documentation before the list of all
- * namespaces in a file.
- */
- virtual QCString trNamespaces()
- { return "Namespace\'ler"; }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 0.49-990728
-//////////////////////////////////////////////////////////////////////////
-
- /*! This is put at the bottom of a class documentation page and is
- * followed by a list of files that were used to generate the page.
- */
- virtual QCString trGeneratedFromFiles(ClassDef::CompoundType compType,
- bool single)
- { // here s is one of " Class", " Struct" or " Union"
- // single is true implies a single file
- QCString result=(QCString)"Bu ";
- switch(compType)
- {
- case ClassDef::Class: result+="sınıf"; break;
- case ClassDef::Struct: result+="yapı(struct)"; break;
- case ClassDef::Union: result+="birleÅŸim(union)"; break;
- case ClassDef::Interface: result+="arayüz(interface)"; break;
- case ClassDef::Protocol: result+="protokol"; break;
- case ClassDef::Category: result+="kategori"; break;
- case ClassDef::Exception: result+="istisna"; break;
- }
- result+=" için dokümantasyon aşağıdaki dosya";
- if (single) result+=""; else result+="lar";
- result+="dan üretilmiştir:";
- return result;
- }
-
- /*! This is in the (quick) index as a link to the alphabetical compound
- * list.
- */
- virtual QCString trAlphabeticalList()
- { return "Alfabetik Liste"; }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 0.49-990901
-//////////////////////////////////////////////////////////////////////////
-
- /*! This is used as the heading text for the retval command. */
- virtual QCString trReturnValues()
- { return "Döndürdüğü değerler"; }
-
- /*! This is in the (quick) index as a link to the main page (index.html)
- */
- virtual QCString trMainPage()
- { return "Ana Sayfa"; }
-
- /*! This is used in references to page that are put in the LaTeX
- * documentation. It should be an abbreviation of the word page.
- */
- virtual QCString trPageAbbreviation()
- { return "sf."; }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 0.49-991003
-//////////////////////////////////////////////////////////////////////////
-
- virtual QCString trDefinedAtLineInSourceFile()
- {
- return "@1 dosyasının @0 numaralı satırında tanımlanmıştır.";
- }
- virtual QCString trDefinedInSourceFile()
- {
- return "@0 dosyasında tanımlanmıştır.";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 0.49-991205
-//////////////////////////////////////////////////////////////////////////
-
- virtual QCString trDeprecated()
- {
- return "Kullanımdan kalkmıştır";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.0.0
-//////////////////////////////////////////////////////////////////////////
-
- /*! this text is put before a collaboration diagram */
- virtual QCString trCollaborationDiagram(const char *clName)
- {
- return clName+(QCString)" için işbirliği (collaboration) şeması:";
- }
- /*! this text is put before an include dependency graph */
- virtual QCString trInclDepGraph(const char *fName)
- {
- return fName+(QCString)" için içerme bağımlılık grafiği:";
- }
- /*! header that is put before the list of constructor/destructors. */
- virtual QCString trConstructorDocumentation()
- {
- return "Constructor & Destructor Dokümantasyonu";
- }
- /*! Used in the file documentation to point to the corresponding sources. */
- virtual QCString trGotoSourceCode()
- {
- return "Bu dosyanın kaynak koduna git.";
- }
- /*! Used in the file sources to point to the corresponding documentation. */
- virtual QCString trGotoDocumentation()
- {
- return "Bu dosyanın dokümantasyonuna git.";
- }
- /*! Text for the \\pre command */
- virtual QCString trPrecondition()
- {
- return "Ön şart";
- }
- /*! Text for the \\post command */
- virtual QCString trPostcondition()
- {
- return "Son ÅŸart (Postcondition)";
- }
- /*! Text for the \\invariant command */
- virtual QCString trInvariant()
- {
- return "DeÄŸiÅŸmez(Invariant)";
- }
- /*! Text shown before a multi-line variable/enum initialization */
- virtual QCString trInitialValue()
- {
- return "Ä°lk deÄŸer:";
- }
- /*! Text used the source code in the file index */
- virtual QCString trCode()
- {
- return "kod";
- }
- virtual QCString trGraphicalHierarchy()
- {
- return "Grafiksel Sınıf Hiyerarşisi";
- }
- virtual QCString trGotoGraphicalHierarchy()
- {
- return "Grafiksel sınıf hiyerarşisine git";
- }
- virtual QCString trGotoTextualHierarchy()
- {
- return "Metinsel sınıf hiyerarşisine git";
- }
- virtual QCString trPageIndex()
- {
- return "Sayfa Ä°ndeksi";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.1.0
-//////////////////////////////////////////////////////////////////////////
-
- virtual QCString trNote()
- {
- return "Not";
- }
- virtual QCString trPublicTypes()
- {
- return "Public Tipler";
- }
- virtual QCString trPublicAttribs()
- {
- if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
- {
- return "Veri Alanları";
- }
- else
- {
- return "Public Özellikler(attribute)";
- }
- }
- virtual QCString trStaticPublicAttribs()
- {
- return "Statik Public Özellikler(attribute)";
- }
- virtual QCString trProtectedTypes()
- {
- return "Korumalı Tipler";
- }
- virtual QCString trProtectedAttribs()
- {
- return "Korumalı Özellikler(attribute)";
- }
- virtual QCString trStaticProtectedAttribs()
- {
- return "Statik Korumalı Attributes";
- }
- virtual QCString trPrivateTypes()
- {
- return "Özel Tipler";
- }
- virtual QCString trPrivateAttribs()
- {
- return "Özel Özellikler(attribute)";
- }
- virtual QCString trStaticPrivateAttribs()
- {
- return "Statik Özel Özellikler(attribute)";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.1.3
-//////////////////////////////////////////////////////////////////////////
-
- /*! Used as a marker that is put before a \\todo item */
- virtual QCString trTodo()
- {
- return "Yapılacak";
- }
- /*! Used as the header of the todo list */
- virtual QCString trTodoList()
- {
- return "Yapılacaklar Listesi";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.1.4
-//////////////////////////////////////////////////////////////////////////
-
- virtual QCString trReferencedBy()
- {
- return "Referans veren";
- }
- virtual QCString trRemarks()
- {
- return "Dipnotlar";
- }
- virtual QCString trAttention()
- {
- return "Dikkat";
- }
- virtual QCString trInclByDepGraph()
- {
- return "Bu şekil hangi dosyaların doğrudan ya da "
- "dolaylı olarak bu dosyayı içerdiğini gösterir:";
- }
- virtual QCString trSince()
- {
- return "Åžu zamandan beri";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.1.5
-//////////////////////////////////////////////////////////////////////////
-
- /*! title of the graph legend page */
- virtual QCString trLegendTitle()
- {
- return "Şekil Lejantı";
- }
- /*! page explaining how the dot graph's should be interpreted
- * The %A in the text below are to prevent link to classes called "A".
- */
- virtual QCString trLegendDocs()
- {
- return
- "Bu dosya doxygen tarafından üretilen grafiklerin nasıl anlaşılacağını "
- "açıklar.<p>\n"
- "Aşağıdaki örneğe bakalım:\n"
- "\\code\n"
- "/*! Sadeleşme yüzünden görünmeyen sınıf */\n"
- "class Invisible { };\n\n"
- "/*! Sadeleşmiş sınıf, kalıtım ilişkisi gizli */\n"
- "class Truncated : public Invisible { };\n\n"
- "/* Doxygen yorumlarıyla dokümante edilmemiş sınıf */\n"
- "class Undocumented { };\n\n"
- "/*! Public kalıtımla türetilen sınıf */\n"
- "class PublicBase : public Truncated { };\n\n"
- "/*! Bir şablon sınıfı */\n"
- "template<class T> class Templ { };\n\n"
- "/*! Korumalı kalıtımla türetilen sınıf */\n"
- "class ProtectedBase { };\n\n"
- "/*! Özel kalıtımla türetilen sınıf */\n"
- "class PrivateBase { };\n\n"
- "/*! Türetilen sınıf tarafından kullanılan sınıf */\n"
- "class Used { };\n\n"
- "/*! Pekçok sınıftan türeyen bir sınıf */\n"
- "class Inherited : public PublicBase,\n"
- " protected ProtectedBase,\n"
- " private PrivateBase,\n"
- " public Undocumented,\n"
- " public Templ<int>\n"
- "{\n"
- " private:\n"
- " Used *m_usedClass;\n"
- "};\n"
- "\\endcode\n"
- "Bu kod aşağıdaki şemayı oluşturur:"
- "<p><center><img alt=\"\" src=\"graph_legend."+Config_getEnum("DOT_IMAGE_FORMAT")+"\"></center>\n"
- "<p>\n"
- "Yukarıdaki şemadaki kutular aşağıda açıklanmıştır:\n"
- "<ul>\n"
- "<li>Dolu gri kutu şemanın ait olduğu yapı(struct) ya da sınıfı "
- "gösterir.\n"
- "<li>Siyah çerçeveli bir kutu dokümante edilmiş bir yapı(struct) ya da sınıfı gösterir.\n"
- "<li>Gri çerçeveli bir kutu dokümante edilmemiş bir yapı(struct) ya da sınıfı gösterir.\n"
- "<li>Kırmızı çerçeveli bir kutu tüm kalıtım/içerme ilişkileri gösterilmemiş ve dokümante "
- "edilmiş bir yapı(struct) ya da sınıfı gösterir. %A şema belirlenen sınırlara "
- "sığmıyorsa sadeleştirilir.\n"
- "</ul>\n"
- "Okların anlamı aşağıdaki gibidir:\n"
- "<ul>\n"
- "<li>Koyu mavi ok iki sınıf arasındaki public kalıtım ilişkisini "
- "göstermekte kullanılır.\n"
- "<li>Koyu yeşil ok korumalı kalıtımı gösterir.\n"
- "<li>Koyu kırmızı ok özel kalıtımı gösterir.\n"
- "<li>Mor kesikli çizgi bir sınıfın diğeri tarafından içeriliyor ya da kullanılıyor "
- "olduğunu gösterir. Ok işaret edilen sınıfın hangi değişken(ler) tarafından erişildiğini "
- "gösteren etiketle işaretleniştir.\n"
- "<li>Sarı kesikli çizgi şablondan üretilen bir sınıf ve ilgili şablon sınıfı "
- "arasındaki ilişkiyi gösterir. Ok türeyen sınıfın şablon parametreleriyle "
- "etiketlenmiÅŸtir.\n"
- "</ul>\n";
- }
- /*! text for the link to the legend page */
- virtual QCString trLegend()
- {
- return "lejant";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.2.0
-//////////////////////////////////////////////////////////////////////////
-
- /*! Used as a marker that is put before a test item */
- virtual QCString trTest()
- {
- return "Test";
- }
- /*! Used as the header of the test list */
- virtual QCString trTestList()
- {
- return "Test Listesi";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.2.1
-//////////////////////////////////////////////////////////////////////////
-
- /*! Used as a section header for KDE-2 IDL methods */
- virtual QCString trDCOPMethods()
- {
- return "DCOP Ãœye Fonksiyonlar";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.2.2
-//////////////////////////////////////////////////////////////////////////
-
- /*! Used as a section header for IDL properties */
- virtual QCString trProperties()
- {
- return "Özellikler";
- }
- /*! Used as a section header for IDL property documentation */
- virtual QCString trPropertyDocumentation()
- {
- return "Özellik Dokümantasyonu";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.2.4
-//////////////////////////////////////////////////////////////////////////
-
- /*! Used for Java classes in the summary section of Java packages */
- virtual QCString trClasses()
- {
- if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
- {
- return "Veri Yapıları";
- }
- else
- {
- return "Sınıflar";
- }
- }
- /*! Used as the title of a Java package */
- virtual QCString trPackage(const char *name)
- {
- return (QCString)"Paket "+name;
- }
- /*! Title of the package index page */
- virtual QCString trPackageList()
- {
- return "Paket Listesi";
- }
- /*! The description of the package index page */
- virtual QCString trPackageListDescription()
- {
- return "Paketler ve kısa tanımları (var ise):";
- }
- /*! The link name in the Quick links header for each page */
- virtual QCString trPackages()
- {
- return "Paketler";
- }
- /*! Text shown before a multi-line define */
- virtual QCString trDefineValue()
- {
- return "DeÄŸer:";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.2.5
-//////////////////////////////////////////////////////////////////////////
-
- /*! Used as a marker that is put before a \\bug item */
- virtual QCString trBug()
- {
- return "Hata";
- }
- /*! Used as the header of the bug list */
- virtual QCString trBugList()
- {
- return "Hata Listesi";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.2.6
-//////////////////////////////////////////////////////////////////////////
-
- /*! Used as ansicpg for RTF file
- *
- * The following table shows the correlation of Charset name, Charset Value and
- * <pre>
- * Codepage number:
- * Charset Name Charset Value(hex) Codepage number
- * ------------------------------------------------------
- * DEFAULT_CHARSET 1 (x01)
- * SYMBOL_CHARSET 2 (x02)
- * OEM_CHARSET 255 (xFF)
- * ANSI_CHARSET 0 (x00) 1252
- * RUSSIAN_CHARSET 204 (xCC) 1251
- * EE_CHARSET 238 (xEE) 1250
- * GREEK_CHARSET 161 (xA1) 1253
- * TURKISH_CHARSET 162 (xA2) 1254
- * BALTIC_CHARSET 186 (xBA) 1257
- * HEBREW_CHARSET 177 (xB1) 1255
- * ARABIC _CHARSET 178 (xB2) 1256
- * SHIFTJIS_CHARSET 128 (x80) 932
- * HANGEUL_CHARSET 129 (x81) 949
- * GB2313_CHARSET 134 (x86) 936
- * CHINESEBIG5_CHARSET 136 (x88) 950
- * </pre>
- *
- */
- virtual QCString trRTFansicp()
- {
- return "1254";
- }
-
-
- /*! Used as ansicpg for RTF fcharset
- * \see trRTFansicp() for a table of possible values.
- */
- virtual QCString trRTFCharSet()
- {
- return "162";
- }
-
- /*! Used as header RTF general index */
- virtual QCString trRTFGeneralIndex()
- {
- return "Ä°ndeks";
- }
-
- /*! This is used for translation of the word that will possibly
- * be followed by a single name or by a list of names
- * of the category.
- */
- virtual QCString trClass(bool first_capital, bool singular)
- {
- QCString result((first_capital ? "Sınıf" : "sınıf"));
- if (!singular) result+="lar";
- return result;
- }
-
- /*! This is used for translation of the word that will possibly
- * be followed by a single name or by a list of names
- * of the category.
- */
- virtual QCString trFile(bool first_capital, bool singular)
- {
- QCString result((first_capital ? "Dosya" : "dosya"));
- if (!singular) result+="lar";
- return result;
- }
-
- /*! This is used for translation of the word that will possibly
- * be followed by a single name or by a list of names
- * of the category.
- */
- virtual QCString trNamespace(bool first_capital, bool singular)
- {
- QCString result((first_capital ? "Namespace" : "namespace"));
- if (!singular) result+="\'ler";
- return result;
- }
-
- /*! This is used for translation of the word that will possibly
- * be followed by a single name or by a list of names
- * of the category.
- */
- virtual QCString trGroup(bool first_capital, bool singular)
- {
- QCString result((first_capital ? "Grup" : "grup"));
- if (!singular) result+="lar";
- return result;
- }
-
- /*! This is used for translation of the word that will possibly
- * be followed by a single name or by a list of names
- * of the category.
- */
- virtual QCString trPage(bool first_capital, bool singular)
- {
- QCString result((first_capital ? "Sayfa" : "sayfa"));
- if (!singular) result+="lar";
- return result;
- }
-
- /*! This is used for translation of the word that will possibly
- * be followed by a single name or by a list of names
- * of the category.
- */
- virtual QCString trMember(bool first_capital, bool singular)
- {
- QCString result((first_capital ? "Üye" : "üye"));
- if (!singular) result+="ler";
- return result;
- }
-
- /*! This is used for translation of the word that will possibly
- * be followed by a single name or by a list of names
- * of the category.
- */
- virtual QCString trGlobal(bool first_capital, bool singular)
- {
- QCString result((first_capital ? "Global deÄŸiÅŸken" : "global deÄŸiÅŸken"));
- if (!singular) result+="ler";
- return result;
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.2.7
-//////////////////////////////////////////////////////////////////////////
-
- /*! This text is generated when the \\author command is used and
- * for the author section in man pages. */
- virtual QCString trAuthor(bool first_capital, bool singular)
- {
- QCString result((first_capital ? "Yazar" : "yazar"));
- if (!singular) result+="lar";
- return result;
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.2.11
-//////////////////////////////////////////////////////////////////////////
-
- /*! This text is put before the list of members referenced by a member
- */
- virtual QCString trReferences()
- {
- return "Referanslar";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.2.13
-//////////////////////////////////////////////////////////////////////////
-
- /*! used in member documentation blocks to produce a list of
- * members that are implemented by this one.
- */
- virtual QCString trImplementedFromList(int numEntries)
- {
- return "Şu üyeleri gerçekler: "+trWriteList(numEntries)+".";
- }
-
- /*! used in member documentation blocks to produce a list of
- * all members that implement this abstract member.
- */
- virtual QCString trImplementedInList(int numEntries)
- {
- return "Şu üyelerce gerçeklenir: "+trWriteList(numEntries)+".";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.2.16
-//////////////////////////////////////////////////////////////////////////
-
- /*! used in RTF documentation as a heading for the Table
- * of Contents.
- */
- virtual QCString trRTFTableOfContents()
- {
- return "İçindekiler";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.2.17
-//////////////////////////////////////////////////////////////////////////
-
- /*! Used as the header of the list of item that have been
- * flagged deprecated
- */
- virtual QCString trDeprecatedList()
- {
- return "Kullanımdan Kalkanlar Listesl";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.2.18
-//////////////////////////////////////////////////////////////////////////
-
- /*! Used as a header for declaration section of the events found in
- * a C# program
- */
- virtual QCString trEvents()
- {
- return "Olaylar";
- }
- /*! Header used for the documentation section of a class' events. */
- virtual QCString trEventDocumentation()
- {
- return "Olay Dokümantasyonu";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.3
-//////////////////////////////////////////////////////////////////////////
-
- /*! Used as a heading for a list of Java class types with package scope.
- */
- virtual QCString trPackageTypes()
- {
- return "Paket Tipleri";
- }
- /*! Used as a heading for a list of Java class fonksiyonlar with package
- * scope.
- */
- virtual QCString trPackageMembers()
- {
- return "Paket Fonksiyonlar";
- }
- /*! Used as a heading for a list of static Java class fonksiyonlar with
- * package scope.
- */
- virtual QCString trStaticPackageMembers()
- {
- return "Static Pakat Fonksiyonları";
- }
- /*! Used as a heading for a list of Java class variables with package
- * scope.
- */
- virtual QCString trPackageAttribs()
- {
- return "Packet Özellikleri(attribute)";
- }
- /*! Used as a heading for a list of static Java class variables with
- * package scope.
- */
- virtual QCString trStaticPackageAttribs()
- {
- return "Statik Packet Özellikleri(attribute)";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.3.1
-//////////////////////////////////////////////////////////////////////////
-
- /*! Used in the quick index of a class/file/namespace member list page
- * to link to the unfiltered list of all members.
- */
- virtual QCString trAll()
- {
- return "Tümü";
- }
- /*! Put in front of the call graph for a function. */
- virtual QCString trCallGraph()
- {
- return "Bu fonksiyon için çağırılma şeması:";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.3.3
-//////////////////////////////////////////////////////////////////////////
-
- /*! When the search engine is enabled this text is put in the header
- * of each page before the field where one can enter the text to search
- * for.
- */
- virtual QCString trSearchForIndex()
- {
- return "Arama yapılacak metin";
- }
- /*! This string is used as the title for the page listing the search
- * results.
- */
- virtual QCString trSearchResultsTitle()
- {
- return "Arama sonuçları";
- }
- /*! This string is put just before listing the search results. The
- * text can be different depending on the number of documents found.
- * Inside the text you can put the special marker $num to insert
- * the number representing the actual number of search results.
- * The @a numDocuments parameter can be either 0, 1 or 2, where the
- * value 2 represents 2 or more matches. HTML markup is allowed inside
- * the returned string.
- */
- virtual QCString trSearchResults(int numDocuments)
- {
- if (numDocuments==0)
- {
- return "Üzgünüm, sorgunuzla eşleşen doküman bulunamadı.";
- }
- else if (numDocuments==1)
- {
- return "Sorgunuzla eşleşen <b>1</b> doküman bulundu.";
- }
- else
- {
- return "Sorgunuzla eşleşen <b>$num</b> doküman bulundu. "
- "Önce en iyi eşleşmeler gösteriliyor.";
- }
- }
- /*! This string is put before the list of matched words, for each search
- * result. What follows is the list of words that matched the query.
- */
- virtual QCString trSearchMatches()
- {
- return "EÅŸleÅŸme:";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.3.8
-//////////////////////////////////////////////////////////////////////////
-
- /*! This is used in HTML as the title of page with source code for file filename
- */
- virtual QCString trSourceFile(QCString& filename)
- {
- return filename + " Kaynak Dosyası";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.3.9
-//////////////////////////////////////////////////////////////////////////
-
- /*! This is used as the name of the chapter containing the directory
- * hierarchy.
- */
- virtual QCString trDirIndex()
- { return "Dizin HiyerarÅŸisi"; }
-
- /*! This is used as the name of the chapter containing the documentation
- * of the directories.
- */
- virtual QCString trDirDocumentation()
- { return "Dizin Dokümantasyonu"; }
-
- /*! This is used as the title of the directory index and also in the
- * Quick links of an HTML page, to link to the directory hierarchy.
- */
- virtual QCString trDirectories()
- { return "Dizinler"; }
-
- /*! This returns a sentences that introduces the directory hierarchy.
- * and the fact that it is sorted alphabetically per level
- */
- virtual QCString trDirDescription()
- { return "Bu dizin hiyerarşisi tamamen olmasa da yaklaşık "
- "olarak alfabetik sıraya konulmuştur:";
- }
-
- /*! This returns the title of a directory page. The name of the
- * directory is passed via \a dirName.
- */
- virtual QCString trDirReference(const char *dirName)
- { QCString result=dirName; result+=" Dizin Referansı"; return result; }
-
- /*! This returns the word directory with or without starting capital
- * (\a first_capital) and in sigular or plural form (\a singular).
- */
- virtual QCString trDir(bool first_capital, bool singular)
- {
- QCString result((first_capital ? "Dizin" : "dizin"));
- if (!singular) result+="ler";
- return result;
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.4.1
-//////////////////////////////////////////////////////////////////////////
-
- /*! This text is added to the documentation when the \\overload command
- * is used for a overloaded function.
- */
- virtual QCString trOverloadText()
- {
- return "Bu çok anlamlı (overloaded) bir üye fonksiyondur, "
- "tamamlık açısından burada verilmektedir. Yukarıdaki fonksiyondan "
- "sadece aldığı argüman(lar) açısından farklıdır.";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.4.6
-//////////////////////////////////////////////////////////////////////////
-
- /*! This is used to introduce a caller (or called-by) graph */
- virtual QCString trCallerGraph()
- {
- return "Bu fonksiyon için çağırılma şeması:";
- }
-
- /*! This is used in the documentation of a file/namespace before the list
- * of documentation blocks for enumeration values
- */
- virtual QCString trEnumerationValueDocumentation()
- { return "Enümerasyon Dokümantasyonu"; }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.5.4 (mainly for Fortran)
-//////////////////////////////////////////////////////////////////////////
-
- /*! header that is put before the list of member subprograms (Fortran). */
- virtual QCString trMemberFunctionDocumentationFortran()
- { return "Üye Fonksiyon/Subroutine Dokümantasyonu"; }
-
- /*! This is put above each page as a link to the list of annotated data types (Fortran). */
- virtual QCString trCompoundListFortran()
- { return "Veri Tipleri Listesi"; }
-
- /*! This is put above each page as a link to all members of compounds (Fortran). */
- virtual QCString trCompoundMembersFortran()
- { return "Veri Alanları"; }
-
- /*! This is an introduction to the annotated compound list (Fortran). */
- virtual QCString trCompoundListDescriptionFortran()
- { return "Kısa tanımlarıyla veri tipleri:"; }
-
- /*! This is an introduction to the page with all data types (Fortran). */
- virtual QCString trCompoundMembersDescriptionFortran(bool extractAll)
- {
- QCString result="Bu liste tüm ";
- if (!extractAll)
- {
- result+="dokümante edilmiş ";
- }
- result+="veri tiplerini içerir ve ";
- if (!extractAll)
- {
- result+="her üyeyi veri yapısı dokümantasyonuna bağlar:";
- }
- else
- {
- result+="ait oldukları veri tiplerine bağlar:";
- }
- return result;
- }
-
- /*! This is used in LaTeX as the title of the chapter with the
- * annotated compound index (Fortran).
- */
- virtual QCString trCompoundIndexFortran()
- { return "Veri Tipi Ä°ndeksi"; }
-
- /*! This is used in LaTeX as the title of the chapter containing
- * the documentation of all data types (Fortran).
- */
- virtual QCString trTypeDocumentation()
- { return "Veri Tipi Dokümantasyonu"; }
-
- /*! This is used in the documentation of a file as a header before the
- * list of (global) subprograms (Fortran).
- */
- virtual QCString trSubprograms()
- { return "Fonksiyonlar/Subroutine\'ler"; }
-
- /*! This is used in the documentation of a file/namespace before the list
- * of documentation blocks for subprograms (Fortran)
- */
- virtual QCString trSubprogramDocumentation()
- { return "Fonksiyon/Subroutine Dokümantasyonu"; }
-
- /*! This is used in the documentation of a file/namespace/group before
- * the list of links to documented compounds (Fortran)
- */
- virtual QCString trDataTypes()
- { return "Veri Tipleri"; }
-
- /*! used as the title of page containing all the index of all modules (Fortran). */
- virtual QCString trModulesList()
- { return "Modüller Listesi"; }
-
- /*! used as an introduction to the modules list (Fortran) */
- virtual QCString trModulesListDescription(bool extractAll)
- {
- QCString result="Bu liste tüm ";
- if (!extractAll) result+="dokümante edilmiş ";
- result+="modülleri kısa tanımlarıya içerir:";
- return result;
- }
-
- /*! used as the title of the HTML page of a module/type (Fortran) */
- virtual QCString trCompoundReferenceFortran(const char *clName,
- ClassDef::CompoundType compType,
- bool isTemplate)
- {
- QCString result=(QCString)clName;
- switch(compType)
- {
- case ClassDef::Class: result+=" Modül"; break;
- case ClassDef::Struct: result+=" Tip"; break;
- case ClassDef::Union: result+=" BirleÅŸim(Union)"; break;
- case ClassDef::Interface: result+=" Arayüz"; break;
- case ClassDef::Protocol: result+=" Protokol"; break;
- case ClassDef::Category: result+=" Kategori"; break;
- case ClassDef::Exception: result+=" Ä°stisna"; break;
- }
- if (isTemplate) result+=" Åžablon";
- result+=" Referans";
- return result;
- }
- /*! used as the title of the HTML page of a module (Fortran) */
- virtual QCString trModuleReference(const char *namespaceName)
- {
- QCString result=namespaceName;
- result+=" Modül Referansı";
- return result;
- }
-
- /*! This is put above each page as a link to all members of modules. (Fortran) */
- virtual QCString trModulesMembers()
- { return "Modül Üyeleri"; }
-
- /*! This is an introduction to the page with all modules members (Fortran) */
- virtual QCString trModulesMemberDescription(bool extractAll)
- {
- QCString result="Bu liste tüm ";
- if (!extractAll) result+="dokümante edilmiş ";
- result+="modül üyelerini içerir ve ";
- if (extractAll)
- {
- result+="her üyeyi modül dokümantasyonuna bağlar:";
- }
- else
- {
- result+="ait oldukları modüllere bağlar:";
- }
- return result;
- }
-
- /*! This is used in LaTeX as the title of the chapter with the
- * index of all modules (Fortran).
- */
- virtual QCString trModulesIndex()
- { return "Modüller Indeksi"; }
-
- /*! This is used for translation of the word that will possibly
- * be followed by a single name or by a list of names
- * of the category.
- */
- virtual QCString trModule(bool first_capital, bool singular)
- {
- QCString result((first_capital ? "Modül" : "modül"));
- if (!singular) result+="ler";
- return result;
- }
- /*! This is put at the bottom of a module documentation page and is
- * followed by a list of files that were used to generate the page.
- */
- virtual QCString trGeneratedFromFilesFortran(ClassDef::CompoundType compType,
- bool single)
- { // here s is one of " Module", " Struct" or " Union"
- // single is true implies a single file
- QCString result=(QCString)"Bu ";
- switch(compType)
- {
- case ClassDef::Class: result+="mdoül"; break;
- case ClassDef::Struct: result+="tip"; break;
- case ClassDef::Union: result+="birleÅŸim(union)"; break;
- case ClassDef::Interface: result+="arayüz"; break;
- case ClassDef::Protocol: result+="protokol"; break;
- case ClassDef::Category: result+="kategori"; break;
- case ClassDef::Exception: result+="istisna"; break;
- }
- result+=" için dokümantasyon aşağıdaki dosya";
- if (single) result+=":"; else result+="lar";
- result="dan üretilmiştir:";
- return result;
- }
- /*! This is used for translation of the word that will possibly
- * be followed by a single name or by a list of names
- * of the category.
- */
- virtual QCString trType(bool first_capital, bool singular)
- {
- QCString result((first_capital ? "Tip" : "tip"));
- if (!singular) result+="ler";
- return result;
- }
- /*! This is used for translation of the word that will possibly
- * be followed by a single name or by a list of names
- * of the category.
- */
- virtual QCString trSubprogram(bool first_capital, bool singular)
- {
- QCString result((first_capital ? "Alt program" : "alt program"));
- if (!singular) result+="lar";
- return result;
- }
-
- /*! C# Type Constraint list */
- virtual QCString trTypeConstraints()
- {
- return "Tip Sınırlamaları";
- }
-
-
- //////////////////////////////////////////////////////////////////////////
- // new since 1.6.0 (mainly for the new search engine)
- //////////////////////////////////////////////////////////////////////////
-
- /*! directory relation for \a name */
- virtual QCString trDirRelation(const char *name)
- {
- return QCString(name)+" Ä°liÅŸkisi";
- }
-
- /*! Loading message shown when loading search results */
- virtual QCString trLoading()
- {
- return "Yüklüyor...";
- }
-
- /*! Label used for search results in the global namespace */
- virtual QCString trGlobalNamespace()
- {
- return "En Ãœst Seviye";
- }
-
- /*! Message shown while searching */
- virtual QCString trSearching()
- {
- return "Arıyor...";
- }
-
- /*! Text shown when no search results are found */
- virtual QCString trNoMatches()
- {
- return "EÅŸleÅŸme Yok";
- }
-
- //////////////////////////////////////////////////////////////////////////
- // new since 1.6.3 (missing items for the directory pages)
- //////////////////////////////////////////////////////////////////////////
-
- /*! introduction text for the directory dependency graph */
- virtual QCString trDirDependency(const char *name)
- {
- return (QCString)(name) + (QCString)" için dizin bağımlılık grafiği";
- }
-
- /*! when clicking a directory dependency label, a page with a
- * table is shown. The heading for the first column mentions the
- * source file that has a relation to another file.
- */
- virtual QCString trFileIn(const char *name)
- {
- return (QCString)(name) + (QCString)" dizinindeki dosya";
- }
-
- /*! when clicking a directory dependency label, a page with a
- * table is shown. The heading for the second column mentions the
- * destination file that is included.
- */
- virtual QCString trIncludesFileIn(const char *name)
- {
- return (QCString)(name) + (QCString)" dizinindeki dosyayı kapsıyor";
- }
-
- /** Compiles a date string.
- * @param year Year in 4 digits
- * @param month Month of the year: 1=January
- * @param day Day of the Month: 1..31
- * @param dayOfWeek Day of the week: 1=Monday..7=Sunday
- * @param hour Hour of the day: 0..23
- * @param minutes Minutes in the hour: 0..59
- * @param seconds Seconds within the minute: 0..59
- * @param includeTime Include time in the result string?
- */
- virtual QCString trDateTime(int year,int month,int day,int dayOfWeek,
- int hour,int minutes,int seconds,
- bool includeTime)
- {
- static const char *days[] = { "Pzt","Sal","Çar","Per","Cma","Cmt","Pzr" };
- static const char *months[] = { "Oca","Åžub","Mar","Nis","May","Haz","Tem","AÄŸu","Eyl","Ekm","Kas","Ara" };
- QCString sdate;
- sdate.sprintf("%s %s %d %d",days[dayOfWeek-1],months[month-1],day,year);
- if (includeTime)
- {
- QCString stime;
- stime.sprintf(" %.2d:%.2d:%.2d",hour,minutes,seconds);
- sdate+=stime;
- }
- return sdate;
- }
-
-
-};
-
-#endif
diff --git a/trunk/src/translator_tw.h b/trunk/src/translator_tw.h
deleted file mode 100644
index 8777ae5..0000000
--- a/trunk/src/translator_tw.h
+++ /dev/null
@@ -1,1864 +0,0 @@
-/******************************************************************************
- *
- *
- *
- * Copyright (C) 1997-2012 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.
- *
- * The translation into Chinesetraditional was provided by
- * Daniel YC Lin (dlin.tw <at> gmail.com) since v1.2.16-v1.5.5
- */
-
-#ifndef TRANSLATOR_TW_H
-#define TRANSLATOR_TW_H
-
-// When defining a translator class for the new language, follow
-// the description in the documentation. One of the steps says
-// that you should copy the translator_en.h (this) file to your
-// translator_xx.h new file. Your new language should use the
-// Translator class as the base class. This means that you need to
-// implement exactly the same (pure virtual) methods as the
-// TranslatorEnglish does. Because of this, it is a good idea to
-// start with the copy of TranslatorEnglish and replace the strings
-// one by one.
-//
-// It is not necessary to include "translator.h" or
-// "translator_adapter.h" here. The files are included in the
-// language.cpp correctly. Not including any of the mentioned
-// files frees the maintainer from thinking about whether the
-// first, the second, or both files should be included or not, and
-// why. This holds namely for localized translators because their
-// base class is changed occasionaly to adapter classes when the
-// Translator class changes the interface, or back to the
-// Translator class (by the local maintainer) when the localized
-// translator is made up-to-date again.
-
-class TranslatorChinesetraditional : public Translator
-{
- public:
-
- // --- Language control methods -------------------
-
- /*! Used for identification of the language. The identification
- * should not be translated. It should be replaced by the name
- * of the language in English using lower-case characters only
- * (e.g. "czech", "japanese", "russian", etc.). It should be equal to
- * the identification used in language.cpp.
- */
- virtual QCString idLanguage()
- { return "chinese-traditional"; }
-
- /*! Used to get the LaTeX command(s) for the language support.
- * This method should return string with commands that switch
- * LaTeX to the desired language. For example
- * <pre>"\\usepackage[german]{babel}\n"
- * </pre>
- * or
- * <pre>"\\usepackage{polski}\n"
- * "\\usepackage[latin2]{inputenc}\n"
- * "\\usepackage[T1]{fontenc}\n"
- * </pre>
- *
- * The English LaTeX does not use such commands. Because of this
- * the empty string is returned in this implementation.
- */
- virtual QCString latexLanguageSupportCommand()
- {
- return "";
- }
-
- /*! return the language charset. This will be used for the HTML output */
- virtual QCString idLanguageCharset()
- {
- return "big5";
- }
-
- // --- Language translation methods -------------------
-
- /*! used in the compound documentation before a list of related functions. */
- virtual QCString trRelatedFunctions()
- { return "相關函å¼"; }
-
- /*! subscript for the related functions. */
- virtual QCString trRelatedSubscript()
- { return "(註:這些ä¸æ˜¯æˆå“¡å‡½å¼)"; }
-
- /*! header that is put before the detailed description of files, classes and namespaces. */
- virtual QCString trDetailedDescription()
- { return "詳細æè¿°"; }
-
- /*! header that is put before the list of typedefs. */
- virtual QCString trMemberTypedefDocumentation()
- { return "型態定義æˆå“¡èªªæ˜Žæ–‡ä»¶"; }
-
- /*! header that is put before the list of enumerations. */
- virtual QCString trMemberEnumerationDocumentation()
- { return "列舉型態æˆå“¡èªªæ˜Žæ–‡ä»¶"; }
-
- /*! header that is put before the list of member functions. */
- virtual QCString trMemberFunctionDocumentation()
- { return "函å¼æˆå“¡èªªæ˜Žæ–‡ä»¶"; }
-
- /*! header that is put before the list of member attributes. */
- virtual QCString trMemberDataDocumentation()
- {
- if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
- {
- return "欄ä½èªªæ˜Žæ–‡ä»¶";
- }
- else
- {
- return "資料æˆå“¡èªªæ˜Žæ–‡ä»¶";
- }
- }
-
- /*! this is the text of a link put after brief descriptions. */
- virtual QCString trMore()
- { return "更多..."; }
-
- /*! put in the class documentation */
- virtual QCString trListOfAllMembers()
- { return "全部æˆå“¡åˆ—表"; }
-
- /*! used as the title of the "list of all members" page of a class */
- virtual QCString trMemberList()
- { return "æˆå“¡åˆ—表"; }
-
- /*! this is the first part of a sentence that is followed by a class name */
- virtual QCString trThisIsTheListOfAllMembers()
- { return "完整æˆå“¡åˆ—表,類別為"; }
-
- /*! this is the remainder of the sentence after the class name */
- virtual QCString trIncludingInheritedMembers()
- { return ", 包å«æ‰€æœ‰ç¹¼æ‰¿çš„æˆå“¡"; }
-
- /*! this is put at the author sections at the bottom of man pages.
- * parameter s is name of the project name.
- */
- virtual QCString trGeneratedAutomatically(const char *s)
- { QCString result="本文件由Doxygen";
- if (s) result+=(QCString)" 自 "+s;
- result+=" 的原始碼中自動產生.";
- return result;
- }
-
- /*! put after an enum name in the list of all members */
- virtual QCString trEnumName()
- { return "列舉型態å稱"; }
-
- /*! put after an enum value in the list of all members */
- virtual QCString trEnumValue()
- { return "列舉值"; }
-
- /*! put after an undocumented member in the list of all members */
- virtual QCString trDefinedIn()
- { return "被定義於"; }
-
- // quick reference sections
-
- /*! This is put above each page as a link to the list of all groups of
- * compounds or files (see the \\group command).
- */
- virtual QCString trModules()
- { return "模組"; }
-
- /*! This is put above each page as a link to the class hierarchy */
- virtual QCString trClassHierarchy()
- { return "類別階層"; }
-
- /*! This is put above each page as a link to the list of annotated classes */
- virtual QCString trCompoundList()
- {
- if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
- {
- return "資料çµæ§‹";
- }
- else
- {
- return "複åˆåˆ—表";
- }
- }
-
- /*! This is put above each page as a link to the list of documented files */
- virtual QCString trFileList()
- { return "檔案列表"; }
-
- /*! This is put above each page as a link to all members of compounds. */
- virtual QCString trCompoundMembers()
- {
- if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
- {
- return "資料欄ä½";
- }
- else
- {
- return "複åˆæˆå“¡";
- }
- }
-
- /*! This is put above each page as a link to all members of files. */
- virtual QCString trFileMembers()
- {
- if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
- {
- return "全域資料";
- }
- else
- {
- return "檔案æˆå“¡";
- }
- }
-
- /*! This is put above each page as a link to all related pages. */
- virtual QCString trRelatedPages()
- { return "相關é é¢"; }
-
- /*! This is put above each page as a link to all examples. */
- virtual QCString trExamples()
- { return "範例"; }
-
- /*! This is put above each page as a link to the search engine. */
- virtual QCString trSearch()
- { return "æœå°‹"; }
-
- /*! This is an introduction to the class hierarchy. */
- virtual QCString trClassHierarchyDescription()
- { return "這個繼承列表經éŽç°¡ç•¥çš„å­—æ¯æŽ’åº: ";
- }
-
- /*! This is an introduction to the list with all files. */
- virtual QCString trFileListDescription(bool extractAll)
- {
- QCString result="這是附帶簡略說明";
- if (!extractAll) result+="且經éŽæ–‡ä»¶åŒ–";
- result+="的檔案列表:";
- return result;
- }
-
- /*! This is an introduction to the annotated compound list. */
- virtual QCString trCompoundListDescription()
- {
-
- if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
- {
- return "這是附帶簡略說明的資料çµæ§‹:";
- }
- else
- {
- return "這是附帶簡略說明的類別,çµæ§‹ï¼Œ"
- "è¯åˆåž‹æ…‹(unions)åŠä»‹é¢(interfaces):";
- }
- }
-
- /*! This is an introduction to the page with all class members. */
- virtual QCString trCompoundMembersDescription(bool extractAll)
- {
- QCString result="這是全部";
- if (!extractAll)
- {
- result+="文件化éŽ";
- }
- if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
- {
- result+="çµæ§‹åŠè¯åˆåž‹æ…‹æ¬„ä½";
- }
- else
- {
- result+="類別æˆå“¡";
- }
- result+=", 並且帶有連çµè‡³";
- if (!extractAll)
- {
- if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
- {
- result+="æ¯å€‹æ¬„ä½çš„çµæ§‹/è¯åˆåž‹æ…‹èªªæ˜Žæ–‡ä»¶:";
- }
- else
- {
- result+="æ¯å€‹æˆå“¡çš„類別說明文件:";
- }
- }
- else
- {
- if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
- {
- result+="這些çµæ§‹/è¯åˆåž‹æ…‹æ‰€å±¬:";
- }
- else
- {
- result+="這些類別所屬:";
- }
- }
- return result;
- }
-
- /*! This is an introduction to the page with all file members. */
- virtual QCString trFileMembersDescription(bool extractAll)
- {
- QCString result="這是全部";
- if (!extractAll) result+="文件化的";
-
- if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
- {
- result+="函å¼ï¼Œè®Šæ•¸ï¼Œå®šç¾©ï¼Œåˆ—舉,åŠåž‹æ…‹å®šç¾©";
- }
- else
- {
- result+="檔案æˆå“¡";
- }
- result+=",並且帶有連çµè‡³";
- if (extractAll)
- result+="這些檔案所屬:";
- else
- result+="說明文件:";
- return result;
- }
-
- /*! This is an introduction to the page with the list of all examples */
- virtual QCString trExamplesDescription()
- { return "所有範例列表:"; }
-
- /*! This is an introduction to the page with the list of related pages */
- virtual QCString trRelatedPagesDescription()
- { return "所有相關文件é é¢åˆ—表:"; }
-
- /*! This is an introduction to the page with the list of class/file groups */
- virtual QCString trModulesDescription()
- { return "所有模組列表:"; }
-
- // index titles (the project name is prepended for these)
-
-
- /*! This is used in HTML as the title of index.html. */
- virtual QCString trDocumentation()
- { return "說明文件"; }
-
- /*! This is used in LaTeX as the title of the chapter with the
- * index of all groups.
- */
- virtual QCString trModuleIndex()
- { return "模組索引"; }
-
- /*! This is used in LaTeX as the title of the chapter with the
- * class hierarchy.
- */
- virtual QCString trHierarchicalIndex()
- { return "階層索引"; }
-
- /*! This is used in LaTeX as the title of the chapter with the
- * annotated compound index.
- */
- virtual QCString trCompoundIndex()
- {
- if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
- {
- return "資料çµæ§‹ç´¢å¼•";
- }
- else
- {
- return "複åˆç´¢å¼•";
- }
- }
-
- /*! This is used in LaTeX as the title of the chapter with the
- * list of all files.
- */
- virtual QCString trFileIndex()
- { return "檔案索引"; }
-
- /*! This is used in LaTeX as the title of the chapter containing
- * the documentation of all groups.
- */
- virtual QCString trModuleDocumentation()
- { return "模組說明文件"; }
-
- /*! This is used in LaTeX as the title of the chapter containing
- * the documentation of all classes, structs and unions.
- */
- virtual QCString trClassDocumentation()
- {
- if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
- {
- return "資料çµæ§‹èªªæ˜Žæ–‡ä»¶";
- }
- else
- {
- return "類別說明文件";
- }
- }
-
- /*! This is used in LaTeX as the title of the chapter containing
- * the documentation of all files.
- */
- virtual QCString trFileDocumentation()
- { return "檔案說明文件"; }
-
- /*! This is used in LaTeX as the title of the chapter containing
- * the documentation of all examples.
- */
- virtual QCString trExampleDocumentation()
- { return "範例說明文件"; }
-
- /*! This is used in LaTeX as the title of the chapter containing
- * the documentation of all related pages.
- */
- virtual QCString trPageDocumentation()
- { return "é é¢èªªæ˜Žæ–‡ä»¶"; }
-
- /*! This is used in LaTeX as the title of the document */
- virtual QCString trReferenceManual()
- { return "åƒè€ƒæ‰‹å†Š"; }
-
- /*! This is used in the documentation of a file as a header before the
- * list of defines
- */
- virtual QCString trDefines()
- { return "定義"; }
-
- /*! This is used in the documentation of a file as a header before the
- * list of function prototypes
- */
- virtual QCString trFuncProtos()
- { return "函å¼åŽŸåž‹"; }
-
- /*! This is used in the documentation of a file as a header before the
- * list of typedefs
- */
- virtual QCString trTypedefs()
- { return "型態定義"; }
-
- /*! This is used in the documentation of a file as a header before the
- * list of enumerations
- */
- virtual QCString trEnumerations()
- { return "列舉型態"; }
-
- /*! This is used in the documentation of a file as a header before the
- * list of (global) functions
- */
- virtual QCString trFunctions()
- { return "函å¼"; }
-
- /*! This is used in the documentation of a file as a header before the
- * list of (global) variables
- */
- virtual QCString trVariables()
- { return "變數"; }
-
- /*! This is used in the documentation of a file as a header before the
- * list of (global) variables
- */
- virtual QCString trEnumerationValues()
- { return "列舉值"; }
-
- /*! This is used in the documentation of a file before the list of
- * documentation blocks for defines
- */
- virtual QCString trDefineDocumentation()
- { return "定義巨集說明文件"; }
-
- /*! This is used in the documentation of a file/namespace before the list
- * of documentation blocks for function prototypes
- */
- virtual QCString trFunctionPrototypeDocumentation()
- { return "函å¼åŽŸåž‹èªªæ˜Žæ–‡ä»¶"; }
-
- /*! This is used in the documentation of a file/namespace before the list
- * of documentation blocks for typedefs
- */
- virtual QCString trTypedefDocumentation()
- { return "型態定義說明文件"; }
-
- /*! This is used in the documentation of a file/namespace before the list
- * of documentation blocks for enumeration types
- */
- virtual QCString trEnumerationTypeDocumentation()
- { return "列舉型態說明文件"; }
-
- /*! This is used in the documentation of a file/namespace before the list
- * of documentation blocks for enumeration values
- */
- virtual QCString trEnumerationValueDocumentation()
- { return "列舉值說明文件"; }
-
- /*! This is used in the documentation of a file/namespace before the list
- * of documentation blocks for functions
- */
- virtual QCString trFunctionDocumentation()
- { return "函å¼èªªæ˜Žæ–‡ä»¶"; }
-
- /*! This is used in the documentation of a file/namespace before the list
- * of documentation blocks for variables
- */
- virtual QCString trVariableDocumentation()
- { return "變數說明文件"; }
-
- /*! This is used in the documentation of a file/namespace/group before
- * the list of links to documented compounds
- */
- virtual QCString trCompounds()
- {
- if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
- {
- return "資料çµæ§‹";
- }
- else
- {
- return "複åˆé …ç›®";
- }
- }
-
- /*! This is used in the standard footer of each page and indicates when
- * the page was generated
- */
- virtual QCString trGeneratedAt(const char *date,const char *projName)
- {
- QCString result=(QCString)"產生日期:"+date;
- if (projName) result+=(QCString)", 專案:"+projName;
- result+=(QCString)", 產生器:";
- return result;
- }
- /*! This is part of the sentence used in the standard footer of each page.
- */
- virtual QCString trWrittenBy()
- {
- return "撰寫人:";
- }
-
- /*! this text is put before a class diagram */
- virtual QCString trClassDiagram(const char *clName)
- {
- return (QCString)"類別"+clName+"的繼承圖:";
- }
-
- /*! this text is generated when the \\internal command is used. */
- virtual QCString trForInternalUseOnly()
- { return "僅供內部使用."; }
-
- /*! this text is generated when the \\warning command is used. */
- virtual QCString trWarning()
- { return "警告"; }
-
- /*! this text is generated when the \\version command is used. */
- virtual QCString trVersion()
- { return "版本"; }
-
- /*! this text is generated when the \\date command is used. */
- virtual QCString trDate()
- { return "日期"; }
-
- /*! this text is generated when the \\return command is used. */
- virtual QCString trReturns()
- { return "傳回值"; }
-
- /*! this text is generated when the \\sa command is used. */
- virtual QCString trSeeAlso()
- { return "åƒé–±"; }
-
- /*! this text is generated when the \\param command is used. */
- virtual QCString trParameters()
- { return "åƒæ•¸"; }
-
- /*! this text is generated when the \\exception command is used. */
- virtual QCString trExceptions()
- { return "例外"; }
-
- /*! this text is used in the title page of a LaTeX document. */
- virtual QCString trGeneratedBy()
- { return "產生者:"; }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 0.49-990307
-//////////////////////////////////////////////////////////////////////////
-
- /*! used as the title of page containing all the index of all namespaces. */
- virtual QCString trNamespaceList()
- { return "命å空間(name space)列表"; }
-
- /*! used as an introduction to the namespace list */
- virtual QCString trNamespaceListDescription(bool extractAll)
- {
- QCString result="這是所有附帶簡略說明的";
- if (!extractAll) result+="文件化的";
- result+="命å空間(namespaces):";
- return result;
- }
-
- /*! used in the class documentation as a header before the list of all
- * friends of a class
- */
- virtual QCString trFriends()
- { return "類別朋å‹(Friends)"; }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 0.49-990405
-//////////////////////////////////////////////////////////////////////////
-
- /*! used in the class documentation as a header before the list of all
- * related classes
- */
- virtual QCString trRelatedFunctionDocumentation()
- { return "類別朋å‹åŠç›¸é—œå‡½å¼èªªæ˜Žæ–‡ä»¶"; }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 0.49-990425
-//////////////////////////////////////////////////////////////////////////
-
- /*! used as the title of the HTML page of a class/struct/union */
- virtual QCString trCompoundReference(const char *clName,
- ClassDef::CompoundType compType,
- bool isTemplate)
- {
- QCString result=(QCString)clName+" ";
- switch(compType)
- {
- case ClassDef::Class: result+=" 類別"; break;
- case ClassDef::Struct: result+=" çµæ§‹"; break;
- case ClassDef::Union: result+=" è¯åˆ"; break;
- case ClassDef::Interface: result+=" 介é¢"; break;
- case ClassDef::Protocol: result+=" å”定"; break;
- case ClassDef::Category: result+=" 分類"; break;
- case ClassDef::Exception: result+=" 例外"; break;
- }
- if (isTemplate) result+=" 樣版";
- result+=" åƒè€ƒæ–‡ä»¶";
- return result;
- }
-
- /*! used as the title of the HTML page of a file */
- virtual QCString trFileReference(const char *fileName)
- {
- QCString result=fileName;
- result+=" 檔案åƒè€ƒæ–‡ä»¶";
- return result;
- }
-
- /*! used as the title of the HTML page of a namespace */
- virtual QCString trNamespaceReference(const char *namespaceName)
- {
- QCString result=namespaceName;
- result+=" 命å空間(Namespace)åƒè€ƒæ–‡ä»¶";
- return result;
- }
-
- virtual QCString trPublicMembers()
- { return "公開方法(Public Methods)"; }
- virtual QCString trPublicSlots()
- { return "公開æ’槽(Public Slots)"; }
- virtual QCString trSignals()
- { return "訊號(Signals)"; }
- virtual QCString trStaticPublicMembers()
- { return "éœæ…‹å…¬é–‹æ–¹æ³•(Static Public Methods)"; }
- virtual QCString trProtectedMembers()
- { return "ä¿è­·æ–¹æ³•(Protected Methods)"; }
- virtual QCString trProtectedSlots()
- { return "ä¿è­·æ’槽(Protected Slots)"; }
- virtual QCString trStaticProtectedMembers()
- { return "éœæ…‹ä¿è­·æ–¹æ³•(Static Protected Methods)"; }
- virtual QCString trPrivateMembers()
- { return "ç§æœ‰æ–¹æ³•(Private Methods)"; }
- virtual QCString trPrivateSlots()
- { return "ç§æœ‰æ’槽(Private Slots)"; }
- virtual QCString trStaticPrivateMembers()
- { return "éœæ…‹ç§æœ‰æ–¹æ³•(Static Private Methods)"; }
-
- /*! this function is used to produce a comma-separated list of items.
- * use generateMarker(i) to indicate where item i should be put.
- */
- virtual QCString trWriteList(int numEntries)
- {
- QCString result;
- int i;
- // the inherits list contain `numEntries' classes
- for (i=0;i<numEntries;i++)
- {
- // use generateMarker to generate placeholders for the class links!
- result+=generateMarker(i); // generate marker for entry i in the list
- // (order is left to right)
-
- if (i!=numEntries-1) // not the last entry, so we need a separator
- {
- if (i<numEntries-2) // not the fore last entry
- result+=", ";
- else // the fore last entry
- result+=", åŠ ";
- }
- }
- return result;
- }
-
- /*! used in class documentation to produce a list of base classes,
- * if class diagrams are disabled.
- */
- virtual QCString trInheritsList(int numEntries)
- {
- return "繼承自 "+trWriteList(numEntries)+".";
- }
-
- /*! used in class documentation to produce a list of super classes,
- * if class diagrams are disabled.
- */
- virtual QCString trInheritedByList(int numEntries)
- {
- return "被 "+trWriteList(numEntries)+"繼承.";
- }
-
- /*! used in member documentation blocks to produce a list of
- * members that are hidden by this one.
- */
- virtual QCString trReimplementedFromList(int numEntries)
- {
- return "ä¾æ“š"+trWriteList(numEntries)+"é‡æ–°å¯¦ä½œ.";
- }
-
- /*! used in member documentation blocks to produce a list of
- * all member that overwrite the implementation of this member.
- */
- virtual QCString trReimplementedInList(int numEntries)
- {
- return "在"+trWriteList(numEntries)+"é‡æ–°å¯¦ä½œ.";
- }
-
- /*! This is put above each page as a link to all members of namespaces. */
- virtual QCString trNamespaceMembers()
- { return "命å空間(Namespace)æˆå“¡"; }
-
- /*! This is an introduction to the page with all namespace members */
- virtual QCString trNamespaceMemberDescription(bool extractAll)
- {
- QCString result="此處列表為所有 ";
- if (!extractAll) result+="文件化的 ";
- result+="命å空間(namespace)æˆå“¡ï¼Œä¸¦ä¸”附帶連çµè‡³ ";
- if (extractAll)
- result+="æ¯å€‹æˆå“¡çš„說明文件:";
- else
- result+="該命å空間所屬之處:";
- return result;
- }
- /*! This is used in LaTeX as the title of the chapter with the
- * index of all namespaces.
- */
- virtual QCString trNamespaceIndex()
- { return "命å空間(Namespace)索引"; }
-
- /*! This is used in LaTeX as the title of the chapter containing
- * the documentation of all namespaces.
- */
- virtual QCString trNamespaceDocumentation()
- { return "命å空間(Namespace)說明文件"; }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 0.49-990522
-//////////////////////////////////////////////////////////////////////////
-
- /*! This is used in the documentation before the list of all
- * namespaces in a file.
- */
- virtual QCString trNamespaces()
- { return "命å空間(Namespaces)"; }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 0.49-990728
-//////////////////////////////////////////////////////////////////////////
-
- /*! This is put at the bottom of a class documentation page and is
- * followed by a list of files that were used to generate the page.
- */
- virtual QCString trGeneratedFromFiles(ClassDef::CompoundType compType,
- bool single)
- { // here s is one of " Class", " Struct" or " Union"
- // single is true implies a single file
- QCString result=(QCString)"æ­¤";
- switch(compType)
- {
- case ClassDef::Class: result+="類別(class)"; break;
- case ClassDef::Struct: result+="çµæ§‹(structure)"; break;
- case ClassDef::Union: result+="è¯åˆ(union)"; break;
- case ClassDef::Interface: result+="介é¢(interface)"; break;
- case ClassDef::Protocol: result+="å”定(protocol)"; break;
- case ClassDef::Category: result+="分類(category)"; break;
- case ClassDef::Exception: result+="例外(exception)"; break;
- }
- result+=" 文件是由下列檔案中產生";
- if (single) result+=":"; else result+=":";
- return result;
- }
-
- /*! This is in the (quick) index as a link to the alphabetical compound
- * list.
- */
- virtual QCString trAlphabeticalList()
- { return "å­—æ¯é †åºåˆ—表"; }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 0.49-990901
-//////////////////////////////////////////////////////////////////////////
-
- /*! This is used as the heading text for the retval command. */
- virtual QCString trReturnValues()
- { return "傳回值"; }
-
- /*! This is in the (quick) index as a link to the main page (index.html)
- */
- virtual QCString trMainPage()
- { return "主é é¢"; }
-
- /*! This is used in references to page that are put in the LaTeX
- * documentation. It should be an abbreviation of the word page.
- */
- virtual QCString trPageAbbreviation()
- { return "p."; }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 0.49-991003
-//////////////////////////////////////////////////////////////////////////
-
- virtual QCString trDefinedAtLineInSourceFile()
- {
- return "定義在 @1 檔案之第 @0 行.";
- }
- virtual QCString trDefinedInSourceFile()
- {
- return "定義在 @0 檔.";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 0.49-991205
-//////////////////////////////////////////////////////////////////////////
-
- virtual QCString trDeprecated()
- {
- return "éŽæ™‚";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.0.0
-//////////////////////////////////////////////////////////////////////////
-
- /*! this text is put before a collaboration diagram */
- virtual QCString trCollaborationDiagram(const char *clName)
- {
- return (QCString)""+clName+"çš„åˆä½œåœ–:";
- }
- /*! this text is put before an include dependency graph */
- virtual QCString trInclDepGraph(const char *fName)
- {
- return (QCString)""+fName+"的包å«ç›¸ä¾åœ–:";
- }
- /*! header that is put before the list of constructor/destructors. */
- virtual QCString trConstructorDocumentation()
- {
- return "建構å­èˆ‡è§£æ§‹å­èªªæ˜Žæ–‡ä»¶";
- }
- /*! Used in the file documentation to point to the corresponding sources. */
- virtual QCString trGotoSourceCode()
- {
- return "查看本檔案的原始碼.";
- }
- /*! Used in the file sources to point to the corresponding documentation. */
- virtual QCString trGotoDocumentation()
- {
- return "查看本檔案說明文件.";
- }
- /*! Text for the \\pre command */
- virtual QCString trPrecondition()
- {
- return "å‰ç½®æ¢ä»¶";
- }
- /*! Text for the \\post command */
- virtual QCString trPostcondition()
- {
- return "後置æ¢ä»¶";
- }
- /*! Text for the \\invariant command */
- virtual QCString trInvariant()
- {
- return "常數";
- }
- /*! Text shown before a multi-line variable/enum initialization */
- virtual QCString trInitialValue()
- {
- return "åˆå€¼:";
- }
- /*! Text used the source code in the file index */
- virtual QCString trCode()
- {
- return "程å¼ç¢¼";
- }
- virtual QCString trGraphicalHierarchy()
- {
- return "圖形化之類別階層";
- }
- virtual QCString trGotoGraphicalHierarchy()
- {
- return "查看圖形化之類別階層";
- }
- virtual QCString trGotoTextualHierarchy()
- {
- return "查看文字化之類別階層";
- }
- virtual QCString trPageIndex()
- {
- return "é é¢ç´¢å¼•";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.1.0
-//////////////////////////////////////////////////////////////////////////
-
- virtual QCString trNote()
- {
- return "註";
- }
- virtual QCString trPublicTypes()
- {
- return "公開型態";
- }
- virtual QCString trPublicAttribs()
- {
- if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
- {
- return "資料欄ä½";
- }
- else
- {
- return "公開屬性";
- }
- }
- virtual QCString trStaticPublicAttribs()
- {
- return "éœæ…‹å…¬é–‹å±¬æ€§";
- }
- virtual QCString trProtectedTypes()
- {
- return "ä¿è­·åž‹æ…‹";
- }
- virtual QCString trProtectedAttribs()
- {
- return "ä¿è­·å±¬æ€§";
- }
- virtual QCString trStaticProtectedAttribs()
- {
- return "éœæ…‹ä¿è­·å±¬æ€§";
- }
- virtual QCString trPrivateTypes()
- {
- return "ç§æœ‰åž‹æ…‹";
- }
- virtual QCString trPrivateAttribs()
- {
- return "ç§æœ‰å±¬æ€§";
- }
- virtual QCString trStaticPrivateAttribs()
- {
- return "éœæ…‹ç§æœ‰å±¬æ€§";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.1.3
-//////////////////////////////////////////////////////////////////////////
-
- /*! Used as a marker that is put before a \\todo item */
- virtual QCString trTodo()
- {
- return "待辦事項";
- }
- /*! Used as the header of the todo list */
- virtual QCString trTodoList()
- {
- return "待辦事項列表";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.1.4
-//////////////////////////////////////////////////////////////////////////
-
- virtual QCString trReferencedBy()
- {
- return "被åƒè€ƒæ–¼";
- }
- virtual QCString trRemarks()
- {
- return "備註";
- }
- virtual QCString trAttention()
- {
- return "注æ„";
- }
- virtual QCString trInclByDepGraph()
- {
- return "本圖顯示出哪些檔案直接或間接include本檔 "
- ":";
- }
- virtual QCString trSince()
- {
- return "自";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.1.5
-//////////////////////////////////////////////////////////////////////////
-
- /*! title of the graph legend page */
- virtual QCString trLegendTitle()
- {
- return "圖示";
- }
- /*! page explaining how the dot graph's should be interpreted
- * The %A in the text below are to prevent link to classes called "A".
- */
- virtual QCString trLegendDocs()
- {
- return
- "本é è§£é‡‹å¦‚何解譯這些由doxygen所產生的圖示 "
- ".<p>\n"
- "請看下é¢ç¯„例:\n"
- "\\code\n"
- "/*! 因為截斷的ä¸å¯è¦‹é¡žåˆ¥ */\n"
- "class Invisible { };\n\n"
- "/*! 截斷的類別, ç¹¼æ‰¿é—œä¿‚è¢«éš±è— */\n"
- "class Truncated : public Invisible { };\n\n"
- "/* 未經éŽdoxygen註解處ç†éŽçš„類別 */\n"
- "class Undocumented { };\n\n"
- "/*! 經éŽå…¬é–‹(Public)繼承的類別 */\n"
- "class PublicBase : public Truncated { };\n\n"
- "/*! 一個樣版類別 */\n"
- "template<class T> class Templ { };\n\n"
- "/*! 使用ä¿è­·(Protected)繼承的類別 */\n"
- "class ProtectedBase { };\n\n"
- "/*! 使用ç§æœ‰(Private)繼承的類別 */\n"
- "class PrivateBase { };\n\n"
- "/*! 由被繼承類別所使用的類別 */\n"
- "class Used { };\n\n"
- "/*! 由數個其他類別所繼承來的超類別(Super Class) */\n"
- "class Inherited : public PublicBase,\n"
- " protected ProtectedBase,\n"
- " private PrivateBase,\n"
- " public Undocumented,\n"
- " public Templ<int>\n"
- "{\n"
- " private:\n"
- " Used *m_usedClass;\n"
- "};\n"
- "\\endcode\n"
- "若在組態檔中的 \\c MAX_DOT_GRAPH_HEIGHT tag "
- "設為 240,將會產生下列的圖示:"
- "<p><center><img src=\"graph_legend."+Config_getEnum("DOT_IMAGE_FORMAT")+"\"></center>\n"
- "<p>\n"
- "上圖中的å„å€å¡Šæ„義如下:\n"
- "<ul>\n"
- "<li>%A 填滿黑色的å€å¡Šä»£è¡¨ç”¢ç”Ÿé€™å€‹åœ–示的類別或çµæ§‹ "
- ".\n"
- "<li>%A 黑邊的å€å¡Šä»£è¡¨æ–‡ä»¶åŒ–éŽçš„çµæ§‹æˆ–類別.\n"
- "<li>%A ç°é‚Šçš„å€å¡Šä»£è¡¨æœªç¶“文件化的çµæ§‹æˆ–是類別.\n"
- "<li>%A ç´…é‚Šçš„å€å¡Šä»£è¡¨æ–‡ä»¶åŒ–çš„çµæ§‹æˆ–是類別,"
- "這些çµæ§‹æˆ–類別的繼承或包å«é—œä¿‚ä¸æœƒå…¨éƒ¨é¡¯ç¤º. %A 圖示 "
- "若無法塞入指定的邊界中將會被截斷.\n"
- "</ul>\n"
- "箭頭具有下é¢çš„æ„義:\n"
- "<ul>\n"
- "<li>%A æ·±è—色箭頭用來代表兩個類別間的公開繼承 "
- "關係.\n"
- "<li>%A 深綠色箭頭代表ä¿è­·ç¹¼æ‰¿.\n"
- "<li>%A 深紅色箭頭代表ç§æœ‰ç¹¼æ‰¿.\n"
- "<li>%A 紫色箭頭用來表示類別被å¦ä¸€å€‹åŒ…å«æˆ–是使用."
- "箭頭上標示著å¯å­˜å–該類別或是çµæ§‹çš„å°æ‡‰è®Šæ•¸"
- ".\n"
- "<li>%A 黃色箭頭代表樣版實體與樣版類別之間的關係。"
- "箭頭上標記著樣版實體上的åƒæ•¸"
- ".\n"
- "</ul>\n";
- }
- /*! text for the link to the legend page */
- virtual QCString trLegend()
- {
- return "圖示";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.2.0
-//////////////////////////////////////////////////////////////////////////
-
- /*! Used as a marker that is put before a test item */
- virtual QCString trTest()
- {
- return "測試項目";
- }
- /*! Used as the header of the test list */
- virtual QCString trTestList()
- {
- return "測試項目列表";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.2.1
-//////////////////////////////////////////////////////////////////////////
-
- /*! Used as a section header for KDE-2 IDL methods */
- virtual QCString trDCOPMethods()
- {
- return "DCOP方法";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.2.2
-//////////////////////////////////////////////////////////////////////////
-
- /*! Used as a section header for IDL properties */
- virtual QCString trProperties()
- {
- return "屬性(properties)";
- }
- /*! Used as a section header for IDL property documentation */
- virtual QCString trPropertyDocumentation()
- {
- return "屬性(property)說明文件";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.2.4
-//////////////////////////////////////////////////////////////////////////
-
- /*! Used for Java classes in the summary section of Java packages */
- virtual QCString trClasses()
- {
- if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
- {
- return "資料çµæ§‹";
- }
- else
- {
- return "類別";
- }
- }
- /*! Used as the title of a Java package */
- virtual QCString trPackage(const char *name)
- {
- return (QCString)"Package "+name;
- }
- /*! Title of the package index page */
- virtual QCString trPackageList()
- {
- return "Package列表";
- }
- /*! The description of the package index page */
- virtual QCString trPackageListDescription()
- {
- return "此處為Package的概略說明(如果有的話):";
- }
- /*! The link name in the Quick links header for each page */
- virtual QCString trPackages()
- {
- return "Packages";
- }
-
- /*! Text shown before a multi-line define */
- virtual QCString trDefineValue()
- {
- return "巨集內容:";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.2.5
-//////////////////////////////////////////////////////////////////////////
-
- /*! Used as a marker that is put before a \\bug item */
- virtual QCString trBug()
- {
- return "臭蟲";
- }
- /*! Used as the header of the bug list */
- virtual QCString trBugList()
- {
- return "臭蟲列表";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.2.6
-//////////////////////////////////////////////////////////////////////////
-
- /*! Used as ansicpg for RTF file
- *
- * The following table shows the correlation of Charset name, Charset Value and
- * <pre>
- * Codepage number:
- * Charset Name Charset Value(hex) Codepage number
- * ------------------------------------------------------
- * DEFAULT_CHARSET 1 (x01)
- * SYMBOL_CHARSET 2 (x02)
- * OEM_CHARSET 255 (xFF)
- * ANSI_CHARSET 0 (x00) 1252
- * RUSSIAN_CHARSET 204 (xCC) 1251
- * EE_CHARSET 238 (xEE) 1250
- * GREEK_CHARSET 161 (xA1) 1253
- * TURKISH_CHARSET 162 (xA2) 1254
- * BALTIC_CHARSET 186 (xBA) 1257
- * HEBREW_CHARSET 177 (xB1) 1255
- * ARABIC _CHARSET 178 (xB2) 1256
- * SHIFTJIS_CHARSET 128 (x80) 932
- * HANGEUL_CHARSET 129 (x81) 949
- * GB2313_CHARSET 134 (x86) 936
- * CHINESEBIG5_CHARSET 136 (x88) 950
- * </pre>
- *
- */
- virtual QCString trRTFansicp()
- {
- return "950";
- }
-
-
- /*! Used as ansicpg for RTF fcharset
- * \see trRTFansicp() for a table of possible values.
- */
- virtual QCString trRTFCharSet()
- {
- return "136";
- }
-
- /*! Used as header RTF general index */
- virtual QCString trRTFGeneralIndex()
- {
- return "索引";
- }
-
- /*! This is used for translation of the word that will possibly
- * be followed by a single name or by a list of names
- * of the category.
- */
- virtual QCString trClass(bool /*first_capital*/, bool /*singular*/)
- {
- return QCString("類別");
- }
-
- /*! This is used for translation of the word that will possibly
- * be followed by a single name or by a list of names
- * of the category.
- */
- virtual QCString trFile(bool /*first_capital*/, bool /*singular*/)
- {
- return QCString("檔案");
- }
-
- /*! This is used for translation of the word that will possibly
- * be followed by a single name or by a list of names
- * of the category.
- */
- virtual QCString trNamespace(bool /*first_capital*/, bool /*singular*/)
- {
- return QCString("命å空間");
- }
-
- /*! This is used for translation of the word that will possibly
- * be followed by a single name or by a list of names
- * of the category.
- */
- virtual QCString trGroup(bool /*first_capital*/, bool /*singular*/)
- {
- return QCString("群組");
- }
-
- /*! This is used for translation of the word that will possibly
- * be followed by a single name or by a list of names
- * of the category.
- */
- virtual QCString trPage(bool /*first_capital*/, bool /*singular*/)
- {
- return QCString("é é¢");
- }
-
- /*! This is used for translation of the word that will possibly
- * be followed by a single name or by a list of names
- * of the category.
- */
- virtual QCString trMember(bool /*first_capital*/, bool /*singular*/)
- {
- return QCString("æˆå“¡");
- }
-
- /*! This is used for translation of the word that will possibly
- * be followed by a single name or by a list of names
- * of the category.
- */
- virtual QCString trGlobal(bool /*first_capital*/, bool /*singular*/)
- {
- return QCString("全域");
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.2.7
-//////////////////////////////////////////////////////////////////////////
-
- /*! This text is generated when the \\author command is used and
- * for the author section in man pages. */
- virtual QCString trAuthor(bool /*first_capital*/, bool /*singular*/)
- {
- return QCString("作者");
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.2.11
-//////////////////////////////////////////////////////////////////////////
-
- /*! This text is put before the list of members referenced by a member
- */
- virtual QCString trReferences()
- {
- return "åƒè€ƒ";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.2.13
-//////////////////////////////////////////////////////////////////////////
-
- /*! used in member documentation blocks to produce a list of
- * members that are implemented by this one.
- */
- virtual QCString trImplementedFromList(int numEntries)
- {
- return "實作 "+trWriteList(numEntries)+".";
- }
-
- /*! used in member documentation blocks to produce a list of
- * all members that implement this abstract member.
- */
- virtual QCString trImplementedInList(int numEntries)
- {
- return "實作於 "+trWriteList(numEntries)+".";
- }
-
- //////////////////////////////////////////////////////////////////////////
-// new since 1.2.16
-//////////////////////////////////////////////////////////////////////////
-
- /*! used in RTF documentation as a heading for the Table
- * of Contents.
- */
- virtual QCString trRTFTableOfContents()
- {
- return "目錄";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.2.17
-//////////////////////////////////////////////////////////////////////////
-
- /*! Used as the header of the list of item that have been
- * flagged deprecated
- */
- virtual QCString trDeprecatedList()
- {
- return "éŽæ™‚é …ç›®(Deprecated) 列表";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.2.18
-//////////////////////////////////////////////////////////////////////////
-
- /*! Used as a header for declaration section of the events found in
- * a C# program
- */
- virtual QCString trEvents()
- {
- return "Events";
- }
- /*! Header used for the documentation section of a class' events. */
- virtual QCString trEventDocumentation()
- {
- return "Event 文件";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.3
-//////////////////////////////////////////////////////////////////////////
-
- /*! Used as a heading for a list of Java class types with package scope.
- */
- virtual QCString trPackageTypes()
- {
- return "Package 型別";
- }
- /*! Used as a heading for a list of Java class functions with package
- * scope.
- */
- virtual QCString trPackageMembers()
- {
- return "Package 函數列表";
- }
- /*! Used as a heading for a list of static Java class functions with
- * package scope.
- */
- virtual QCString trStaticPackageMembers()
- {
- return "éœæ…‹ Package 函數列表";
- }
- /*! Used as a heading for a list of Java class variables with package
- * scope.
- */
- virtual QCString trPackageAttribs()
- {
- return "Package 屬性";
- }
- /*! Used as a heading for a list of static Java class variables with
- * package scope.
- */
- virtual QCString trStaticPackageAttribs()
- {
- return "éœæ…‹ Package 屬性";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.3.1
-//////////////////////////////////////////////////////////////////////////
-
- /*! Used in the quick index of a class/file/namespace member list page
- * to link to the unfiltered list of all members.
- */
- virtual QCString trAll()
- {
- return "全部";
- }
- /*! Put in front of the call graph for a function. */
- virtual QCString trCallGraph()
- {
- return "這是此函數的引用函數圖:";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.3.3
-//////////////////////////////////////////////////////////////////////////
-
- /*! When the search engine is enabled this text is put in the header
- * of each page before the field where one can enter the text to search
- * for.
- */
- virtual QCString trSearchForIndex()
- {
- return "æœå°‹ç´¢å¼•";
- }
- /*! This string is used as the title for the page listing the search
- * results.
- */
- virtual QCString trSearchResultsTitle()
- {
- return "æœå°‹çµæžœ";
- }
- /*! This string is put just before listing the search results. The
- * text can be different depending on the number of documents found.
- * Inside the text you can put the special marker $num to insert
- * the number representing the actual number of search results.
- * The @a numDocuments parameter can be either 0, 1 or 2, where the
- * value 2 represents 2 or more matches. HTML markup is allowed inside
- * the returned string.
- */
- virtual QCString trSearchResults(int numDocuments)
- {
- if (numDocuments==0)
- {
- return "找ä¸åˆ°ç¬¦åˆçš„資料.";
- }
- else if (numDocuments==1)
- {
- return "找到 <b>1</b> 筆符åˆçš„資料.";
- }
- else
- {
- return "找到 <b>$num</b> 筆符åˆçš„資料. "
- "越符åˆçš„çµæžœé¡¯ç¤ºåœ¨è¶Šå‰é¢.";
- }
- }
- /*! This string is put before the list of matched words, for each search
- * result. What follows is the list of words that matched the query.
- */
- virtual QCString trSearchMatches()
- {
- return "符åˆ:";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.3.8
-//////////////////////////////////////////////////////////////////////////
-
- /*! This is used in HTML as the title of page with source code for file filename
- */
- virtual QCString trSourceFile(QCString& filename)
- {
- return filename + " 原始程å¼æª”";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.3.9
-//////////////////////////////////////////////////////////////////////////
-
- /*! This is used as the name of the chapter containing the directory
- * hierarchy.
- */
- virtual QCString trDirIndex()
- { return "目錄階層"; }
-
- /*! This is used as the name of the chapter containing the documentation
- * of the directories.
- */
- virtual QCString trDirDocumentation()
- { return "目錄說明文件"; }
-
- /*! This is used as the title of the directory index and also in the
- * Quick links of a HTML page, to link to the directory hierarchy.
- */
- virtual QCString trDirectories()
- { return "目錄"; }
-
- /*! This returns a sentences that introduces the directory hierarchy.
- * and the fact that it is sorted alphabetically per level
- */
- virtual QCString trDirDescription()
- { return "這個目錄階層經éŽç°¡ç•¥çš„å­—æ¯æŽ’åº: ";
- }
-
- /*! This returns the title of a directory page. The name of the
- * directory is passed via \a dirName.
- */
- virtual QCString trDirReference(const char *dirName)
- { QCString result=dirName; result+=" 目錄åƒè€ƒæ–‡ä»¶"; return result; }
-
- /*! This returns the word directory with or without starting capital
- * (\a first_capital) and in sigular or plural form (\a singular).
- */
- virtual QCString trDir(bool /*first_capital*/, bool /*singular*/)
- {
- return QCString("目錄");
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.4.1
-//////////////////////////////////////////////////////////////////////////
-
- /*! This text is added to the documentation when the \\overload command
- * is used for a overloaded function.
- */
- virtual QCString trOverloadText()
- {
- return "這是一個為了便利性所æä¾› overload æˆå“¡å‡½æ•¸ï¼Œ"
- "åªæœ‰åœ¨æŽ¥å—çš„åƒæ•¸ä¸Šï¼Œèˆ‡å‰ä¸€å€‹å‡½æ•¸ä¸åŒ.";
- }
-//////////////////////////////////////////////////////////////////////////
-// new since 1.4.6
-//////////////////////////////////////////////////////////////////////////
-
- /*! This is used to introduce a caller (or called-by) graph */
- virtual QCString trCallerGraph()
- {
- return "呼å«æ­¤å‡½æ•¸çš„函數列表:";
- }
-
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.5.4 (mainly for Fortran)
-//////////////////////////////////////////////////////////////////////////
-
- /*! header that is put before the list of member subprograms (Fortran). */
- virtual QCString trMemberFunctionDocumentationFortran()
- { return "æˆå“¡å‡½æ•¸/å­ç¨‹åº 文件"; }
-
- /*! This is put above each page as a link to the list of annotated data types (Fortran). */
- virtual QCString trCompoundListFortran()
- { return "資料型態列表"; }
-
- /*! This is put above each page as a link to all members of compounds (Fortran). */
- virtual QCString trCompoundMembersFortran()
- { return "資料欄ä½"; }
-
- /*! This is an introduction to the annotated compound list (Fortran). */
- virtual QCString trCompoundListDescriptionFortran()
- { return "資料型態簡短說明列表:"; }
-
- /*! This is an introduction to the page with all data types (Fortran). */
- virtual QCString trCompoundMembersDescriptionFortran(bool extractAll)
- {
- QCString result="此處列出所有";
- if (!extractAll)
- {
- result+="有文件的";
- }
- result+="資料型別æˆå“¡å‡½æ•¸";
- result+=" 附帶連çµåˆ° ";
- if (!extractAll)
- {
- result+="æ¯å€‹æˆå“¡å‡½æ•¸çš„資料çµæ§‹æ–‡ä»¶";
- }
- else
- {
- result+="他們屬於的資料型別";
- }
- return result;
- }
-
- /*! This is used in LaTeX as the title of the chapter with the
- * annotated compound index (Fortran).
- */
- virtual QCString trCompoundIndexFortran()
- { return "資料型別索引"; }
-
- /*! This is used in LaTeX as the title of the chapter containing
- * the documentation of all data types (Fortran).
- */
- virtual QCString trTypeDocumentation()
- { return "資料型別文件"; }
-
- /*! This is used in the documentation of a file as a header before the
- * list of (global) subprograms (Fortran).
- */
- virtual QCString trSubprograms()
- { return "函數/å­ç¨‹åº"; }
-
- /*! This is used in the documentation of a file/namespace before the list
- * of documentation blocks for subprograms (Fortran)
- */
- virtual QCString trSubprogramDocumentation()
- { return "函數/å­ç¨‹åº 文件"; }
-
- /*! This is used in the documentation of a file/namespace/group before
- * the list of links to documented compounds (Fortran)
- */
- virtual QCString trDataTypes()
- { return "資料型別"; }
-
- /*! used as the title of page containing all the index of all modules (Fortran). */
- virtual QCString trModulesList()
- { return "模組列表"; }
-
- /*! used as an introduction to the modules list (Fortran) */
- virtual QCString trModulesListDescription(bool extractAll)
- {
- QCString result="此處列出所有";
- if (!extractAll) result+="有文件的";
- result+="模組附帶簡短說明:";
- return result;
- }
-
- /*! used as the title of the HTML page of a module/type (Fortran) */
- virtual QCString trCompoundReferenceFortran(const char *clName,
- ClassDef::CompoundType compType,
- bool isTemplate)
- {
- QCString result=(QCString)clName;
- switch(compType)
- {
- case ClassDef::Class: result+="模組"; break;
- case ClassDef::Struct: result+="åž‹æ…‹"; break;
- case ClassDef::Union: result+="è¯åˆ"; break;
- case ClassDef::Interface: result+="介é¢"; break;
- case ClassDef::Protocol: result+="å”è­°"; break;
- case ClassDef::Category: result+="分類"; break;
- case ClassDef::Exception: result+="例外"; break;
- }
- if (isTemplate) result+=" Template";
- result+="åƒè€ƒæ–‡ä»¶";
- return result;
- }
- /*! used as the title of the HTML page of a module (Fortran) */
- virtual QCString trModuleReference(const char *namespaceName)
- {
- QCString result=namespaceName;
- result+="模組åƒè€ƒæ–‡ä»¶";
- return result;
- }
-
- /*! This is put above each page as a link to all members of modules. (Fortran) */
- virtual QCString trModulesMembers()
- { return "模組æˆå“¡"; }
-
- /*! This is an introduction to the page with all modules members (Fortran) */
- virtual QCString trModulesMemberDescription(bool extractAll)
- {
- QCString result="此處列出所有";
- if (!extractAll) result+="有文件的";
- result+="模組æˆå“¡é™„帶連çµåˆ°";
- if (extractAll)
- {
- result+="æ¯å€‹å‡½æ•¸çš„模組文件:";
- }
- else
- {
- result+="他們所屬的模組:";
- }
- return result;
- }
-
- /*! This is used in LaTeX as the title of the chapter with the
- * index of all modules (Fortran).
- */
- virtual QCString trModulesIndex()
- { return "模組索引"; }
-
- /*! This is used for translation of the word that will possibly
- * be followed by a single name or by a list of names
- * of the category.
- */
- virtual QCString trModule(bool /* first_capital */, bool /* singular */)
- {
- QCString result("模組");
- return result;
- }
- /*! This is put at the bottom of a module documentation page and is
- * followed by a list of files that were used to generate the page.
- */
- virtual QCString trGeneratedFromFilesFortran(ClassDef::CompoundType compType,
- bool /* single */)
- { // here s is one of " Module", " Struct" or " Union"
- // single is true implies a single file
- QCString result=(QCString)"這個";
- switch(compType)
- {
- case ClassDef::Class: result+="模組"; break;
- case ClassDef::Struct: result+="åž‹æ…‹"; break;
- case ClassDef::Union: result+="è¯åˆ"; break;
- case ClassDef::Interface: result+="介é¢"; break;
- case ClassDef::Protocol: result+="å”è­°"; break;
- case ClassDef::Category: result+="分類"; break;
- case ClassDef::Exception: result+="例外"; break;
- }
- result+="文件由下列檔案產生";
- return result;
- }
- /*! This is used for translation of the word that will possibly
- * be followed by a single name or by a list of names
- * of the category.
- */
- virtual QCString trType(bool /* first_capital */, bool /* singular */)
- {
- QCString result("型別");
- return result;
- }
- /*! This is used for translation of the word that will possibly
- * be followed by a single name or by a list of names
- * of the category.
- */
- virtual QCString trSubprogram(bool /* first_capital */, bool /* singular */)
- {
- QCString result("å­ç¨‹å¼");
- return result;
- }
-
- /*! C# Type Constraint list */
- virtual QCString trTypeConstraints()
- {
- return "型別é™åˆ¶æ¢ä»¶";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.6.0 (mainly for the new search engine)
-//////////////////////////////////////////////////////////////////////////
-
- /*! directory relation for \a name */
- virtual QCString trDirRelation(const char *name)
- {
- return QCString(name)+" 關連";
- }
-
- /*! Loading message shown when loading search results */
- virtual QCString trLoading()
- {
- return "載入中...";
- }
-
- /*! Label used for search results in the global namespace */
- virtual QCString trGlobalNamespace()
- {
- return "全域命å空間";
- }
-
- /*! Message shown while searching */
- virtual QCString trSearching()
- {
- return "æœå°‹ä¸­...";
- }
-
- /*! Text shown when no search results are found */
- virtual QCString trNoMatches()
- {
- return "無符åˆé …ç›®";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.6.3 (missing items for the directory pages)
-//////////////////////////////////////////////////////////////////////////
-
- /*! introduction text for the directory dependency graph */
- virtual QCString trDirDependency(const char *name)
- {
- return (QCString)name+"的目錄關連圖";
- }
-
- /*! when clicking a directory dependency label, a page with a
- * table is shown. The heading for the first column mentions the
- * source file that has a relation to another file.
- */
- virtual QCString trFileIn(const char *name)
- {
- return (QCString)"檔案在"+name;
- }
-
- /*! when clicking a directory dependency label, a page with a
- * table is shown. The heading for the second column mentions the
- * destination file that is included.
- */
- virtual QCString trIncludesFileIn(const char *name)
- {
- return (QCString)"å«å…¥æª”案在"+name;
- }
-
- /** Compiles a date string.
- * @param year Year in 4 digits
- * @param month Month of the year: 1=January
- * @param day Day of the Month: 1..31
- * @param dayOfWeek Day of the week: 1=Monday..7=Sunday
- * @param hour Hour of the day: 0..23
- * @param minutes Minutes in the hour: 0..59
- * @param seconds Seconds within the minute: 0..59
- * @param includeTime Include time in the result string?
- */
- virtual QCString trDateTime(int year,int month,int day,int dayOfWeek,
- int hour,int minutes,int seconds,
- bool includeTime)
- {
- static const char *days[] = { "星期一","星期二","星期三","星期四","星期五","星期六","星期日" };
- static const char *months[] = { "1","2","3","4","5","6","7","8","9","10","11","12" };
- QCString sdate;
- sdate.sprintf("%d年%s月%d日 %s",year,months[month-1],day,days[dayOfWeek-1]);
- if (includeTime)
- {
- QCString stime;
- stime.sprintf(" %.2d:%.2d:%.2d",hour,minutes,seconds);
- sdate+=stime;
- }
- return sdate;
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.7.5
-//////////////////////////////////////////////////////////////////////////
-
- /*! Header for the page with bibliographic citations */
- virtual QCString trCiteReferences()
- { return "åƒè€ƒæ–‡ç»è³‡æ–™"; }
-
- /*! Text for copyright paragraph */
- virtual QCString trCopyright()
- { return "版權è²æ˜Ž"; }
-
- /*! Header for the graph showing the directory dependencies */
- virtual QCString trDirDepGraph(const char *name)
- { return QCString(name)+"的目錄關連圖"+":"; }
-
-};
-
-#endif
diff --git a/trunk/src/translator_ua.h b/trunk/src/translator_ua.h
deleted file mode 100644
index 022100d..0000000
--- a/trunk/src/translator_ua.h
+++ /dev/null
@@ -1,1589 +0,0 @@
-/******************************************************************************
- *
- *
- *
- * Copyright (C) 1997-2012 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.
- *
- * The translation into Ukrainian was provided by
- * Olexij Tkatchenko (olexij.tkatchenko@parcs.de)
- */
-
-#ifndef TRANSLATOR_UA_H
-#define TRANSLATOR_UA_H
-
-class TranslatorUkrainian : public TranslatorAdapter_1_4_1
-{
- private:
- /*! The Decode() inline assumes the source written in the
- Koi8-U encoding (maintainer dependent).
- */
- inline QCString decode(const QCString & sInput)
- {
-//#ifdef _WIN32
-// return Koi8RToWindows1251(sInput);
-//#else
- return sInput;
-//#endif
- }
-
- public:
- /*! Used for identification of the language. */
- virtual QCString idLanguage()
- { return "ukrainian"; }
-
- /* Used to get the command(s) for the language support. */
- virtual QCString latexLanguageSupportCommand()
- {
-//#ifdef _WIN32
-// return "\\usepackage[cp1251]{inputenc}\n\\usepackage[ukrainian]{babel}\n";
-//#else
- return "\\usepackage[T2A]{fontenc}\n\\usepackage[ukrainian]{babel}\n";
-//#endif
- }
-
- /*! return the language charset. This will be used for the HTML output */
- virtual QCString idLanguageCharset()
- {
-//#ifdef _WIN32
-// return "Windows-1251";
-//#else
- return "koi8-u";
-//#endif
- }
-
- // --- Language translation methods -------------------
-
- /*! used in the compound documentation before a list of related functions. */
- virtual QCString trRelatedFunctions()
- { return decode("óÐÏÒ¦ÄÎÅΦ ÆÕËæ§"); }
-
- /*! subscript for the related functions. */
- virtual QCString trRelatedSubscript()
- { return decode("(ÎÅ ÍÅÔÏÄÉ ËÏÍÐÏÎÅÎÔ)"); }
-
- /*! header that is put before the detailed description of files, classes and namespaces. */
- virtual QCString trDetailedDescription()
- { return decode("äÅÔÁÌØÎÉÊ ÏÐÉÓ"); }
-
- /*! header that is put before the list of typedefs. */
- virtual QCString trMemberTypedefDocumentation()
- { return decode("ïÐÉÓ ÔÉÐ¦× ËÏÒÉÓÔÕ×ÁÞÁ"); }
-
- /*! header that is put before the list of enumerations. */
- virtual QCString trMemberEnumerationDocumentation()
- { return decode("ïÐÉÓ ÐÅÒÅÌ¦Ë¦× ËÏÒÉÓÔÕ×ÁÞÁ"); }
-
- /*! header that is put before the list of member functions. */
- virtual QCString trMemberFunctionDocumentation()
- { return decode("ïÐÉÓ ÍÅÔÏÄ¦× ËÏÍÐÏÎÅÎÔ"); }
-
- /*! header that is put before the list of member attributes. */
- virtual QCString trMemberDataDocumentation()
- {
- if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
- {
- return decode( "ðÏÌÑ" );
- }
- else
- {
- return decode( "ëÏÍÐÏÎÅÎÔΦ ÄÁΦ" );
- }
- }
-
- /*! this is the text of a link put after brief descriptions. */
- virtual QCString trMore()
- { return decode("äÅÔÁÌØΦÛÅ..."); }
-
- /*! put in the class documentation */
- /* Dosn't use when optimization for C is on. */
- virtual QCString trListOfAllMembers()
- {
- return decode( "óÐÉÓÏË ×Ó¦È ÅÌÅÍÅÎÔ¦×" );
- }
-
- /*! used as the title of the "list of all members" page of a class */
- /* Dosn't use when optimization for C is on. */
- virtual QCString trMemberList()
- {
- return decode( "CÐÉÓÏË ÅÌÅÍÅÎÔ¦×" );
- }
-
- /*! this is the first part of a sentence that is followed by a class name */
- /* Dosn't use when optimization for C is on. */
- virtual QCString trThisIsTheListOfAllMembers()
- { return decode("ðÏ×ÎÉÊ ÓÐÉÓÏË ÅÌÅÍÅÎÔ¦×"); }
-
- /*! this is the remainder of the sentence after the class name */
- /* Dosn't use when optimization for C is on. */
- virtual QCString trIncludingInheritedMembers()
- { return decode(", ×ËÌÀÞÁÀÞÉ ×Ó¦ ÕÓÐÁÄËÏ×ÁΦ ÅÌÅÍÅÎÔÉ"); }
-
- /*! this is put at the author sections at the bottom of man pages.
- * parameter s is name of the project name.
- */
- virtual QCString trGeneratedAutomatically(const char *s)
- { QCString result=decode("á×ÔÏÍÁÔÉÞÎÏ ÓÔ×ÏÒÅÎÏ ÚÁ ÄÏÐÏÍÏÇÏÀ Doxygen");
- if (s) result+=decode(" ÄÌÑ ")+s;
- result+=decode(" Ú ÔÅËÓÔÕ ÐÒÏÇÒÁÍÉ.");
- return result;
- }
-
- /*! put after an enum name in the list of all members */
- virtual QCString trEnumName()
- { return decode("ðÅÒÅ̦Ë"); }
-
- /*! put after an enum value in the list of all members */
- virtual QCString trEnumValue()
- { return decode("åÌÅÍÅÎÔ ÐÅÒÅ̦ËÕ"); }
-
- /*! put after an undocumented member in the list of all members */
- virtual QCString trDefinedIn()
- { return decode("×ÉÚÎÁÞÅÎÏ × "); }
-
- // quick reference sections
-
- /*! This is put above each page as a link to the list of all groups of
- * compounds or files (see the \\group command).
- */
- virtual QCString trModules()
- { return decode("ðÒÏÇÒÁÍΦ ÍÏÄÕ̦"); }
-
- /*! This is put above each page as a link to the class hierarchy */
- virtual QCString trClassHierarchy()
- { return decode("¶¤ÒÁÒÈ¦Ñ ËÌÁÓ¦×"); }
-
- /*! This is put above each page as a link to the list of annotated classes */
- virtual QCString trCompoundList()
- {
- if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
- {
- return decode( "óÔÒÕËÔÕÒÉ ÄÁÎÉÈ" );
- }
- else
- {
- return decode( "ëÌÁÓÉ" );
- }
- }
-
- /*! This is put above each page as a link to the list of documented files */
- virtual QCString trFileList()
- { return decode("æÁÊÌÉ"); }
-
- /*! This is put above each page as a link to the list of all verbatim headers */
- virtual QCString trHeaderFiles()
- { return decode("úÁÇÏÌÏ×ÏÞΦ ÆÁÊÌÉ"); }
-
- /*! This is put above each page as a link to all members of compounds. */
- virtual QCString trCompoundMembers()
- {
- if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
- {
- return decode( "ðÏÌÑ ÓÔÒÕËÔÕÒ" );
- }
- else
- {
- return decode( "åÌÅÍÅÎÔÉ ËÌÁÓ¦×" );
- }
- }
-
- /*! This is put above each page as a link to all members of files. */
- /*??*/
- virtual QCString trFileMembers()
- {
- return decode( "åÌÅÍÅÎÔÉ ÆÁÊÌÕ" );
- }
-
- /*! This is put above each page as a link to all related pages. */
- virtual QCString trRelatedPages()
- /* ?? ÷ÁÒÉÁÎÔ ÐÅÒÅ×ÏÄÁ "óÍ. ÔÁËÖÅ: " ÂÏÌÅÅ ÕÄÁÞÎÙÊ, ÎÏ ÎÅ × ÚÁÇÏÌÏ×ËÅ,
- ËÁË × ÄÁÎÎÏÍ ÓÌÕÞÁÅ. */
- { return decode("äÏÄÁÔËÏ×Á ¦ÎÆÏÒÍÁæÑ"); }
-
- /*! This is put above each page as a link to all examples. */
- virtual QCString trExamples()
- { return decode("ðÒÉËÌÁÄÉ"); }
-
- /*! This is put above each page as a link to the search engine. */
- virtual QCString trSearch()
- { return decode("ðÏÛÕË"); }
-
- /*! This is an introduction to the class hierarchy. */
- virtual QCString trClassHierarchyDescription()
- { return decode("óÐÉÓÏË ÕÓÐÁÄËÕ×ÁÎØ ×ÐÏÒÑÄËÏ×ÁÎÏ ÎÁÂÌÉÖÅÎÏ ÄÏ ÁÌÆÁצÔÕ"); }
-
- /*! This is an introduction to the list with all files. */
- virtual QCString trFileListDescription(bool extractAll)
- {
- QCString result="ðÏ×ÎÉÊ ÓÐÉÓÏË ";
- if (!extractAll) result+="ÄÏËÕÍÅÎÔÏ×ÁÎÉÈ ";
- result+="ÆÁÊ̦×.";
- return decode(result);
- }
-
- /*! This is an introduction to the annotated compound list. */
- virtual QCString trCompoundListDescription()
- {
- if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
- {
- return decode( "óÔÒÕËÔÕÒÉ ÄÁÎÉÈ Ú ËÏÒÏÔËÉÍ ÏÐÉÓÏÍ." );
- }
- else
- {
- return decode( "ëÌÁÓÉ, ÓÔÒÕËÔÕÒÉ, ÏÂ'¤ÄÎÁÎÎÑ ÔÁ ¦ÎÔÅÒÆÅÊÓÉ Ú ËÏÒÏÔËÉÍ ÏÐÉÓÏÍ." );
- }
- }
-
- /*! This is an introduction to the page with all class members. */
- virtual QCString trCompoundMembersDescription(bool extractAll)
- {
- QCString result="óÐÉÓÏË ×Ó¦È ";
- if(!extractAll) result+="ÄÏËÕÍÅÎÔÏÁÎÉÈ ";
- if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
- result+="ÅÌÅÍÅÎÔ¦× ÓÔÒÕËÔÕÒ ÄÁÎÉÈ Ú ÐÏÓÉÌÁÎÎÑÍ ÎÁ ";
- else
- result+="ÅÌÅÍÅÎÔ¦× ËÌÁÓ¦× ÄÁÎÉÈ Ú ÐÏÓÉÌÁÎÎÑÍ ÎÁ ";
- if(extractAll)
- {
- if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
- result+="ÄÏËÕÍÅÎÔÁæÀ ÐÏ ÓÔÒÕËÔÕÒ¦/ÏÂ'¤ÄÎÁÎÎÀ ËÏÖÎÏÇÏ ÅÌÅÍÅÎÔÕ.";
- else
- result+="ÄÏËÕÍÅÎÔÁæÀ ÐÏ ËÌÁÓÕ ËÏÖÎÏÇÏ ÅÌÅÍÅÎÔÕ.";
- }
- else
- {
- if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
- result += "צÄÐÏצÄΦ ÓÔÒÕËÔÕÒÉ";
- else
- result += "צÄÐÏצÄΦ ËÌÁÓÉ";
- result+=", ÄÏ ÑËÉÈ ×ÏÎÉ ÎÁÌÅÖÁÔØ.";
- }
- return decode( result );
- }
-
- /*! This is an introduction to the page with all file members. */
- virtual QCString trFileMembersDescription(bool extractAll)
- {
- QCString result="óÐÉÓÏË ×Ó¦È ";
- if (!extractAll) result+="ÄÏËÕÍÅÎÔÏ×ÁÎÉÈ ";
-
- if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
- {
- result+="ÆÕÎËæÊ, ÚͦÎÎÉÈ, ÍÁËÒÏÏÚÎÁÞÅÎØ, "
- "ÐÅÒÅÌ¦Ë¦× ¦ ÏÚÎÁÞÅÎØ ÔÉЦ×";
- }
- else
- {
- result+="ÅÌÅÍÅÎÔ¦× ÆÁÊÌ¦× ";
- }
- result+=" Ú ÐÏÓÉÌÁÎÑÍ ÎÁ ";
- if (extractAll)
- result+="ÆÁÊÌÉ, ÄÏ ÑËÉÈ ×ÏÎÉ ÎÁÌÅÖÁÔØ.";
- else
- result+="ÄÏËÕÍÅÎÔÁæÀ.";
- return decode( result );
- }
-
- /*! This is an introduction to the page with the list of all header files. */
- virtual QCString trHeaderFilesDescription()
- { return decode("ðÏ×ÎÉÊ ÓÐÉÓÏË ÚÁÇÏÌÏ×ÏÞÎÉÈ ÆÁÊ̦×."); }
-
- /*! This is an introduction to the page with the list of all examples */
- virtual QCString trExamplesDescription()
- { return decode("ðÏ×ÎÉÊ ÓÐÉÓÏË ÐÒÉËÌÁĦ×."); }
-
- /*! This is an introduction to the page with the list of related pages */
- virtual QCString trRelatedPagesDescription()
- { return decode("ðÏ×ÎÉÊ ÓÐÉÓÏË ÄÏÄÁÔËÏ×ÉÈ ÏÐÉÓ¦×."); }
-
- /*! This is an introduction to the page with the list of class/file groups */
- virtual QCString trModulesDescription()
- { return decode("ðÏ×ÎÉÊ ÓÐÉÓÏË ÍÏÄÕ̦×."); }
-
- /*! This sentences is used in the annotated class/file lists if no brief
- * description is given.
- */
- virtual QCString trNoDescriptionAvailable()
- { return decode("ïÐÉÓ ×¦ÄÓÕÔΦÊ"); }
-
- // index titles (the project name is prepended for these)
-
-
- /*! This is used in HTML as the title of index.html. */
- virtual QCString trDocumentation()
- { return decode("äÏËÕÍÅÎÔÁæÑ"); }
-
- /*! This is used in LaTeX as the title of the chapter with the
- * index of all groups.
- */
- virtual QCString trModuleIndex()
- { return decode("áÌÆÁצÔÎÉÊ ÐÏËÁÖÞÉË ÍÏÄÕ̦×"); }
-
- /*! This is used in LaTeX as the title of the chapter with the
- * class hierarchy.
- */
- virtual QCString trHierarchicalIndex()
- { return decode("¶¤ÒÁÒȦÞÎÉÊ ÐÏËÁÖÞÉË ËÌÁÓ¦×"); }
-
- /*! This is used in LaTeX as the title of the chapter with the
- * annotated compound index.
- */
- virtual QCString trCompoundIndex()
- {
- if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
- {
- return decode( "áÌÆÁצÔÎÉÊ ÐÏËÁÖÞÉË ÓÔÒÕËÔÕÒ ÄÁÎÉÈ" );
- }
- else
- {
- return decode( "áÌÆÁצÔÎÉÊ ÐÏËÁÖÞÉË ËÌÁÓ¦×" );
- }
- }
-
- /*! This is used in LaTeX as the title of the chapter with the
- * list of all files.
- */
- virtual QCString trFileIndex()
- { return decode( "ðÏËÁÖÞÉË ÆÁÊÌ×" ); }
-
- /*! This is used in LaTeX as the title of the chapter containing
- * the documentation of all groups.
- */
- virtual QCString trModuleDocumentation()
- { return decode("ðÒÏÇÒÁÍΦ íÏÄÕ̦"); }
-
- /*! This is used in LaTeX as the title of the chapter containing
- * the documentation of all classes, structs and unions.
- */
- virtual QCString trClassDocumentation()
- {
- if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
- {
- return decode( "óÔÒÕËÔÕÒÉ ÄÁÎÉÈ" );
- }
- else
- {
- return decode( "ëÌÁÓÉ" );
- }
- }
-
- /*! This is used in LaTeX as the title of the chapter containing
- * the documentation of all files.
- */
- virtual QCString trFileDocumentation()
- { return decode("æÁÊÌÉ"); }
-
- /*! This is used in LaTeX as the title of the chapter containing
- * the documentation of all examples.
- */
- virtual QCString trExampleDocumentation()
- { return decode("ðÒÉËÌÁÄÉ"); }
-
- /*! This is used in LaTeX as the title of the chapter containing
- * the documentation of all related pages.
- */
- virtual QCString trPageDocumentation()
- { return decode("äÏËÕÍÅÎÔÁÃ¦Ñ ÐÏ ÔÅͦ"); }
-
- /*! This is used in LaTeX as the title of the document */
- virtual QCString trReferenceManual()
- { return decode("äÏצÄËÏ×ÉÊ ÐÏÓ¦ÂÎÉË"); }
-
- /*! This is used in the documentation of a file as a header before the
- * list of defines
- */
- virtual QCString trDefines()
- { return decode("íÁËÒÏÏÚÎÁÞÅÎÎÑ"); }
-
- /*! This is used in the documentation of a file as a header before the
- * list of function prototypes
- */
- virtual QCString trFuncProtos()
- { return decode("ðÒÏÔÏÔÉÐÉ ÆÕËæÊ"); }
-
- /*! This is used in the documentation of a file as a header before the
- * list of typedefs
- */
- virtual QCString trTypedefs()
- { return decode("ïÚÎÁÞÅÎÎÑ ÔÉЦ×"); }
-
- /*! This is used in the documentation of a file as a header before the
- * list of enumerations
- */
- virtual QCString trEnumerations()
- { return decode("ðÅÒÅ̦ËÉ"); }
-
- /*! This is used in the documentation of a file as a header before the
- * list of (global) functions
- */
- virtual QCString trFunctions()
- { return decode("æÕÎËæ§"); }
-
- /*! This is used in the documentation of a file as a header before the
- * list of (global) variables
- */
- virtual QCString trVariables()
- { return decode("úͦÎΦ"); }
-
- /*! This is used in the documentation of a file as a header before the
- * list of (global) variables
- */
- virtual QCString trEnumerationValues()
- { return decode("åÌÅÍÅÎÔÉ ÐÅÒÅ̦˦×"); }
-
- /*! This is used in the documentation of a file before the list of
- * documentation blocks for defines
- */
- virtual QCString trDefineDocumentation()
- { return decode("ïÐÉÓ ÍÁËÒÏÏÚÎÁÞÅÎØ"); }
-
- /*! This is used in the documentation of a file/namespace before the list
- * of documentation blocks for function prototypes
- */
- virtual QCString trFunctionPrototypeDocumentation()
- { return decode("ïÐÉÓ ÐÒÏÔÏÔÉÐ¦× ÆÕÎËæÊ"); }
-
- /*! This is used in the documentation of a file/namespace before the list
- * of documentation blocks for typedefs
- */
- virtual QCString trTypedefDocumentation()
- { return decode("ïÐÉÓ ÏÚÎÁÞÅÎØ ÔÉЦ×"); }
-
- /*! This is used in the documentation of a file/namespace before the list
- * of documentation blocks for enumeration types
- */
- virtual QCString trEnumerationTypeDocumentation()
- { return decode("ïÐÉÓ ÐÅÒÅ̦˦×"); }
-
- /*! This is used in the documentation of a file/namespace before the list
- * of documentation blocks for enumeration values
- */
- virtual QCString trEnumerationValueDocumentation()
- { return decode("ïÐÉÓ ÅÌÅÍÅÎÔ¦× ÐÅÒÅ̦ËÕ"); }
-
- /*! This is used in the documentation of a file/namespace before the list
- * of documentation blocks for functions
- */
- virtual QCString trFunctionDocumentation()
- { return decode("ïÐÉÓ ÆÕÎËæÊ"); }
-
- /*! This is used in the documentation of a file/namespace before the list
- * of documentation blocks for variables
- */
- virtual QCString trVariableDocumentation()
- { return decode("ïÐÉÓ ÚͦÎÎÉÈ"); }
-
- /*! This is used in the documentation of a file/namespace/group before
- * the list of links to documented compounds
- */
- virtual QCString trCompounds()
- {
- if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
- {
- return decode( "óÔÒÕËÔÕÒÉ ÄÁÎÉÈ" );
- }
- else
- {
- return decode( "ëÌÁÓÉ" );
- }
-
- }
-
- /*! This is used in the documentation of a group before the list of
- * links to documented files
- */
- /*! This is used in the standard footer of each page and indicates when
- * the page was generated
- */
- virtual QCString trGeneratedAt(const char *date,const char *projName)
- {
- QCString result=decode("äÏËÕÍÅÎÔÁÃ¦Ñ ");
- if (projName) result+=decode("ÄÏ ")+projName;
- result+=decode(" ÓÔ×ÏÒÅÎÁ ")+date;
- result+=decode(" ÓÉÓÔÅÍÏÀ");
- return result;
- }
- /*! This is part of the sentence used in the standard footer of each page.
- */
- virtual QCString trWrittenBy()
- {
- return decode("á×ÔÏÒ:");
- }
-
- /*! this text is put before a class diagram */
- virtual QCString trClassDiagram(const char *clName)
- {
- return decode("óÈÅÍÁ ÕÓÐÁÄËÕ×ÁÎØ ÄÌÑ ")+clName;
- }
-
- /*! this text is generated when the \\internal command is used. */
- virtual QCString trForInternalUseOnly()
- { return decode("ô¦ÌØËÉ ÄÌÑ ×ÎÕÔÒ¦ÛÎØÏÇÏ ËÏÒÉÓÔÕ×ÁÎÎÑ"); }
-
- /*! this text is generated when the \\reimp command is used. */
- virtual QCString trReimplementedForInternalReasons()
- /*??*/
- { return decode("úͦÎÅÎÏ Ú ×ÎÕÔÒ¦ÛÎ¦È ÐÒÉÞÉÎ. úͦÎÉ ÎÅ ÔÏÒËÁÀÔØÓÑ API.");
- }
-
- /*! this text is generated when the \\warning command is used. */
- virtual QCString trWarning()
- { return decode("úÁÓÔÅÒÅÖÅÎÎÑ"); }
-
- /*! this text is generated when the \\bug command is used. */
- virtual QCString trBugsAndLimitations()
- { return decode("ðÏÍÉÌËÉ ÔÁ ÏÂÍÅÖÅÎÎÑ ÚÁÓÔÏÓÕ×ÁÎÎÑ"); }
-
- /*! this text is generated when the \\version command is used. */
- virtual QCString trVersion()
- { return decode("÷ÅÒÓ¦Ñ"); }
-
- /*! this text is generated when the \\date command is used. */
- virtual QCString trDate()
- { return decode("äÁÔÁ"); }
-
- /*! this text is generated when the \\return command is used. */
- virtual QCString trReturns()
- { return decode("ðÏ×ÅÒÔÁ¤"); }
-
- /*! this text is generated when the \\sa command is used. */
- virtual QCString trSeeAlso()
- { return decode("äÉ×. ÔÁËÏÖ"); }
-
- /*! this text is generated when the \\param command is used. */
- virtual QCString trParameters()
- { return decode("áÒÇÕÍÅÎÔÉ"); }
-
- /*! this text is generated when the \\exception command is used. */
- virtual QCString trExceptions()
- { return decode("ïÂÒÏÂËÁ ×ÉÎÑÔËÏ×ÉÈ ÓÉÔÕÁæÊ"); }
-
- /*! this text is used in the title page of a LaTeX document. */
- virtual QCString trGeneratedBy()
- { return decode("óÔ×ÏÒÅÎÏ ÓÉÓÔÅÍÏÀ"); }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 0.49-990307
-//////////////////////////////////////////////////////////////////////////
-
- /*! used as the title of page containing all the index of all namespaces. */
- virtual QCString trNamespaceList()
- { return decode("ðÒÏÓÔ¦Ò ¦ÍÅÎ"); }
-
- /*! used as an introduction to the namespace list */
- virtual QCString trNamespaceListDescription(bool extractAll)
- {
- QCString result="ðÏ×ÎÉÊ ÐÅÒÅÌ¦Ë ";
- if (!extractAll) result+="ÄÏËÕÍÅÎÔÏ×ÁÎÉÈ ";
- result+="ÐÒÏÓÔÏÒ¦× ¦ÍÅÎ.";
- return decode(result);
- }
-
- /*! used in the class documentation as a header before the list of all
- * friends of a class
- */
- virtual QCString trFriends()
- { return decode("äÒÕÖΦ ËÌÁÓÉ"); }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 0.49-990405
-//////////////////////////////////////////////////////////////////////////
-
- /*! used in the class documentation as a header before the list of all
- * related classes
- */
- virtual QCString trRelatedFunctionDocumentation()
- { return decode("äÏËÕÍÅÎÔÁÃÉÑ ÄÏ ÄÒÕÖÎ¦È ËÌÁÓ¦× ÔÁ צÄÐÏצÄÎÉÈ ÆÕÎËæÊ"); }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 0.49-990425
-//////////////////////////////////////////////////////////////////////////
-
- /*! used as the title of the HTML page of a class/struct/union */
- virtual QCString trCompoundReference(const char *clName,
- ClassDef::CompoundType compType,
- bool isTemplate)
- {
- QCString result;
- if (isTemplate)
- {
- result="ûÁÂÌÏÎ ";
- switch(compType)
- {
- case ClassDef::Class: result+="ËÌÁÓÕ"; break;
- case ClassDef::Struct: result+="ÓÔÒÕËÔÕÒÉ"; break;
- case ClassDef::Union: result+="ÏÂ'¤ÄÎÁÎÎÑ"; break;
- case ClassDef::Interface: result+="¦ÎÔÅÒÆÅÊÓÕ"; break;
- case ClassDef::Protocol: result+="ÐÒÏÔÏËÏÌÕ"; break;
- case ClassDef::Category: result+="ËÁÔÅÇÏÒ¦§"; break;
- case ClassDef::Exception: result+="÷ÉÎÑÔÏË"; break;
- }
- }
- else
- {
- switch(compType)
- {
- case ClassDef::Class: result+="ëÌÁÓ"; break;
- case ClassDef::Struct: result+="óÔÒÕËÔÕÒÁ"; break;
- case ClassDef::Union: result+="ïÂ'¤ÄÎÁÎÎÑ"; break;
- case ClassDef::Interface: result+="¶ÎÔÅÒÆÅÊÓ"; break;
- case ClassDef::Protocol: result+="ðÒÏÔÏËÏÌ"; break;
- case ClassDef::Category: result+="ëÁÔÅÇÏÒ¦Ñ"; break;
- case ClassDef::Exception: result+="÷ÉÎÑÔÏË"; break;
- }
- }
- result+=" ";
- return decode(result)+clName;
- }
-
- /*! used as the title of the HTML page of a file */
- virtual QCString trFileReference(const char *fileName)
- {
- return decode("æÁÊÌ ")+fileName;
- }
-
- /*! used as the title of the HTML page of a namespace */
- virtual QCString trNamespaceReference(const char *namespaceName)
- {
- return decode("ðÒÏÓÔ¦Ò ¦ÍÅÎ ")+namespaceName;
- }
-
- virtual QCString trPublicMembers()
- { return decode("úÁÇÁÌØÎÏÄÏÓÔÕÐΦ ÅÌÅÍÅÎÔÉ"); }
- virtual QCString trPublicSlots()
- { return decode("úÁÇÁÌØÎÏÄÏÓÔÕÐΦ ÓÌÏÔÉ"); }
- virtual QCString trSignals()
- { return decode("óÉÇÎÁÌÉ"); }
- virtual QCString trStaticPublicMembers()
- { return decode("úÁÇÁÌØÎÏÄÏÓÔÕÐΦ ÓÔÁÔÉÞΦ ÅÌÅÍÅÎÔÉ"); }
- virtual QCString trProtectedMembers()
- { return decode("úÁÈÉÝÅΦ ÅÌÅÍÅÎÔÉ"); }
- virtual QCString trProtectedSlots()
- { return decode("úÁÈÉÝÅΦ ÓÌÏÔÉ"); }
- virtual QCString trStaticProtectedMembers()
- { return decode("úÁÈÉÝÅΦ ÓÔÁÔÉÞΦ ÅÌÅÍÅÎÔÉ"); }
- virtual QCString trPrivateMembers()
- { return decode("ðÒÉ×ÁÔΦ ÅÌÅÍÅÎÔÉ"); }
- virtual QCString trPrivateSlots()
- { return decode("ðÒÉ×ÁÔΦ ÓÌÏÔÉ"); }
- virtual QCString trStaticPrivateMembers()
- { return decode("ðÒÉ×ÁÔΦ ÓÔÁÔÉÞΦ ÅÌÅÍÅÎÔÉ"); }
-
- /*! this function is used to produce a comma-separated list of items.
- * use generateMarker(i) to indicate where item i should be put.
- */
- virtual QCString trWriteList(int numEntries)
- {
- QCString result;
- int i;
- // the inherits list contain `numEntries' classes
- for (i=0;i<numEntries;i++)
- {
- // use generateMarker to generate placeholders for the class links!
- result+=generateMarker(i); // generate marker for entry i in the list
- // (order is left to right)
-
- if (i!=numEntries-1) // not the last entry, so we need a separator
- {
- if (i<numEntries-2) // not the fore last entry
- result+=", ";
- else // the fore last entry
- result+=decode( " ¦ " );
- }
- }
- return result;
- }
-
- /*! used in class documentation to produce a list of base classes,
- * if class diagrams are disabled.
- */
- virtual QCString trInheritsList(int numEntries)
- {
- return decode("õÓÐÁÄËÏ×Õ¤ ËÌÁÓ ")+trWriteList(numEntries)+".";
- }
-
- /*! used in class documentation to produce a list of super classes,
- * if class diagrams are disabled.
- */
- virtual QCString trInheritedByList(int numEntries)
- {
- return decode("õÓÐÁÄËÏ×ÁÎÏ ËÌÁÓÁÍÉ ")+trWriteList(numEntries)+".";
- }
-
- /*! used in member documentation blocks to produce a list of
- * members that are hidden by this one.
- */
- virtual QCString trReimplementedFromList(int numEntries)
- {
- return decode("ðÅÒÅÏÚÎÁÞÅÎÎÑ Ú ")+trWriteList(numEntries)+".";
- }
-
- /*! used in member documentation blocks to produce a list of
- * all member that overwrite the implementation of this member.
- */
- virtual QCString trReimplementedInList(int numEntries)
- {
- return decode("ðÅÒÅÏÚÎÁÞÁ¤ÔØÓÑ × ")+trWriteList(numEntries)+".";
- }
-
- /*! This is put above each page as a link to all members of namespaces. */
- virtual QCString trNamespaceMembers()
- { return decode("åÌÅÍÅÎÔÉ ÐÒÏÓÔÏÒÕ ¦ÍÅÎ"); }
-
- /*! This is an introduction to the page with all namespace members */
- virtual QCString trNamespaceMemberDescription(bool extractAll)
- {
- QCString result="ðÏ×ÎÉÊ ÐÅÒÅÌ¦Ë ";
- if (!extractAll) result+="ÄÏËÕÍÅÎÔÏ×ÁÎÉÈ ";
- result+="ÅÌÅÍÅÔ¦× ÐÒÏÓÔÏÒÕ ¦ÍÅÎ Ú ÐÏÓÉÌÁÎÎÑÍ ";
- if (extractAll)
- result+="ÎÁ ÄÏËÕÍÅÎÔÁæÀ ÄÌÑ ËÏÖÎÏÇÏ ÅÌÅÍÅÎÔÕ:";
- else
- result+="ÎÁ ÐÒÏÓÔ¦Ò ¦ÍÅÎ ÄÏ ÑËÏÇÏ ×ÏÎÉ ÎÁÌÅÖÁÔØ:";
- return decode(result);
- }
-
- /*! This is used in LaTeX as the title of the chapter with the
- * index of all namespaces.
- */
- virtual QCString trNamespaceIndex()
- { return decode("áÌÆÁצÔÎÉÊ ÐÏËÁÖÞÉË ÐÒÏÓÔÏÒÕ ¦ÍÅÎ"); }
-
- /*! This is used in LaTeX as the title of the chapter containing
- * the documentation of all namespaces.
- */
- virtual QCString trNamespaceDocumentation()
- { return decode("ïÐÉÓ ÐÒÏÓÔÏÒÕ ¦ÍÅÎ"); }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 0.49-990522
-//////////////////////////////////////////////////////////////////////////
-
- /*! This is used in the documentation before the list of all
- * namespaces in a file.
- */
- virtual QCString trNamespaces()
- { return decode( "ðÒÏÓÔÏÒÉ ¦ÍÅÎ" ); }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 0.49-990728
-//////////////////////////////////////////////////////////////////////////
-
- /*! This is put at the bottom of a class documentation page and is
- * followed by a list of files that were used to generate the page.
- */
- virtual QCString trGeneratedFromFiles(ClassDef::CompoundType compType,
- bool single)
- { // here s is one of " Class", " Struct" or " Union"
- // single is true implies a single file
- QCString result=(QCString)"äÏËÕÍÅÎÔÁÃ¦Ñ ";
- switch(compType)
- {
- case ClassDef::Class:
- if (single) result+="ÃØÏÇÏ ËÌÁÓÕ"; else result+="ÃÉÈ ËÌÁÓ¦×";
- break;
- case ClassDef::Struct:
- if (single) result+="椧 ÓÔÒÕËÔÕÒÉ"; else result+="ÃÉÈ ÓÔÒÕËÔÕÒ";
- break;
- case ClassDef::Union:
- if (single) result+="ÃØÏÇÏ ÏÂ'¤ÄÎÁÎÎÑ"; else result+="ÃÉÈ ÏÂ'¤ÄÎÁÎØ";
- break;
- case ClassDef::Interface:
- if (single) result+="ÃØÏÇÏ ¦ÎÔÅÒÆÅÊÓÕ"; else result+="ÃÉÈ ¦ÎÔÅÒÆÅÊÓ¦×";
- break;
- case ClassDef::Protocol:
- if (single) result+="ÃØÏÇÏ ÐÒÏÔÏËÏÌÕ"; else result+="ÃÉÈ ÐÒÏÔÏËÏ̦×";
- break;
- case ClassDef::Category:
- if (single) result+="椧 ËÁÔÅÇÏÒ¦§"; else result+="ÃÉÈ ËÁÔÅÇÏÒ¦Ê";
- break;
- case ClassDef::Exception:
- if (single) result+="ÃØÏÇÏ ×ÉÎÑÔËÕ"; else result+="ÃÉÈ ×ÉÎÑÔ˦×";
- break;
- }
- result+=" ÂÕÌÁ ÓÔ×ÏÒÅÎÁ Ú ÆÁÊÌ";
- if (single) result+="Õ:"; else result+="¦×:";
- return decode(result);
- }
-
- /*! This is in the (quick) index as a link to the alphabetical compound
- * list.
- */
- virtual QCString trAlphabeticalList()
- { return decode("áÌÆÁצÔÎÉÊ ÐÏËÁÖÞÉË"); }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 0.49-990901
-//////////////////////////////////////////////////////////////////////////
-
- /*! This is used as the heading text for the retval command. */
- virtual QCString trReturnValues()
- { return decode("úÎÁÞÅÎÎÑ, ÝÏ ÐÏ×ÅÒÔÁÀÔØÓÑ"); }
-
- /*! This is in the (quick) index as a link to the main page (index.html)
- */
- virtual QCString trMainPage()
- { return decode("ôÉÔÕÌØÎÁ ÓÔÏÒ¦ÎËÁ"); }
-
- /*! This is used in references to page that are put in the LaTeX
- * documentation. It should be an abbreviation of the word page.
- */
- virtual QCString trPageAbbreviation()
- { return decode("ÓÔÏÒ."); }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 0.49-991106
-//////////////////////////////////////////////////////////////////////////
-
- virtual QCString trSources()
- {
- return decode("÷ÉȦÄΦ ÔÅËÓÔÉ.");
- }
- virtual QCString trDefinedAtLineInSourceFile()
- {
- return decode("äÉ×. ÏÚÎÁÞÅÎÎÑ × ÆÁÊ̦ @1, ÒÑÄÏË @0");
- }
- virtual QCString trDefinedInSourceFile()
- {
- return decode("äÉ×. ÏÚÎÁÞÅÎÎÑ × ÆÁÊ̦ @0");
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 0.49-991205
-//////////////////////////////////////////////////////////////////////////
-
- virtual QCString trDeprecated()
- {
- return decode("îÅ ÒÅËÏÍÅÎÄÏ×ÁÎÏ");
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.0.0
-//////////////////////////////////////////////////////////////////////////
-
- /*! this text is put before a collaboration diagram */
- virtual QCString trCollaborationDiagram(const char *clName)
- {
- return (QCString)decode("ä¦ÁÇÒÁÍÁ Ú×'ÑÚË¦× ËÌÁÓÕ ")+clName+":";
- }
- /*! this text is put before an include dependency graph */
- virtual QCString trInclDepGraph(const char *fName)
- {
- return decode("ä¦ÁÇÒÁÍÁ ×ËÌÀÞÅÎÉÈ ÚÁÇÏÌÏ×ÏÞÎÉÈ ÆÁÊÌ¦× ÄÌÑ ")+fName+":";
- }
- /*! header that is put before the list of constructor/destructors. */
- virtual QCString trConstructorDocumentation()
- {
- return decode("ëÏÎÓÔÒÕËÔÏÒ(É)");
- }
- /*! Used in the file documentation to point to the corresponding sources. */
- virtual QCString trGotoSourceCode()
- {
- return decode("äÉ×. ×ÉȦÄΦ ÔÅËÓÔÉ.");
- }
- /*! Used in the file sources to point to the corresponding documentation. */
- virtual QCString trGotoDocumentation()
- {
- return decode("äÉ×. ÄÏËÕÍÅÎÔÁæÀ.");
- }
- /*! Text for the \\pre command */
- virtual QCString trPrecondition()
- {
- return decode("ðÅÒÅÄÕÍÏ×É");
- }
- /*! Text for the \\post command */
- virtual QCString trPostcondition()
- {
- return decode("ð¦ÓÌÑÕÍÏ×É");
- }
- /*! Text for the \\invariant command */
- virtual QCString trInvariant()
- {
- return decode("¶Î×ÁÒ¦ÁÎÔ");
- }
- /*! Text shown before a multi-line variable/enum initialization */
- virtual QCString trInitialValue()
- {
- return decode("ðÏÞÁÔËÏצ ÚÎÁÞÅÎÎÑ");
- }
- /*! Text used the source code in the file index */
- virtual QCString trCode()
- {
- return decode("÷ÉȦÄΦ ÔÅËÓÔÉ");
- }
- virtual QCString trGraphicalHierarchy()
- {
- return decode("çÒÁƦÞÎÁ ¦¤ÒÁÒÈ¦Ñ ËÌÁÓ¦×");
- }
- virtual QCString trGotoGraphicalHierarchy()
- {
- return decode("ÄÉ×. ÇÒÁƦÞÎÕ ¦¤ÒÁÒȦÀ");
- }
- virtual QCString trGotoTextualHierarchy()
- {
- return decode("ÄÉ×. ÔÅËÓÔÏ×Õ ¦¤ÒÁÒȦÀ");
- }
- virtual QCString trPageIndex()
- {
- return decode("áÌÆÁצÔÎÉÊ ÐÏËÁÖÞÉË ÔÅÍÁÔÉÞÎÉÈ ÏÐÉÓ¦×");
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.1.0
-//////////////////////////////////////////////////////////////////////////
-
- virtual QCString trNote()
- {
- return decode("îÏÔÁÔËÉ");
- }
- virtual QCString trPublicTypes()
- {
- return decode("úÁÇÁÌØÎÏÄÏÓÔÕÐΦ ÔÉÐÉ");
- }
- virtual QCString trPublicAttribs()
- {
- if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
- {
- return decode( "ðÏÌÑ ÄÁÎÉÈ" );
- }
- else
- {
- return decode( "úÁÇÁÌØÎÏÄÏÓÔÕÐΦ ÁÔÒÉÂÕÔÉ" );
- }
- }
- virtual QCString trStaticPublicAttribs()
- {
- return decode("óÔÁÔÉÞΦ ÚÁÇÁÌØÎÏÄÏÓÔÕÐΦ ÄÁÎΦ");
- }
- virtual QCString trProtectedTypes()
- {
- return decode("úÁÈÉÝÅΦ ÔÉÐÉ");
- }
- virtual QCString trProtectedAttribs()
- {
- return decode("úÁÈÉÝÅΦ ÄÁΦ");
- }
- virtual QCString trStaticProtectedAttribs()
- {
- return decode("óÔÁÔÉÞΦ ÚÁÈÉÝÅΦ ÄÁΦ");
- }
- virtual QCString trPrivateTypes()
- {
- return decode("ðÒÉ×ÁÔΦ ÔÉÐÉ");
- }
- virtual QCString trPrivateAttribs()
- {
- return decode("ðÒÉ×ÁÔΦ ÄÁΦ");
- }
- virtual QCString trStaticPrivateAttribs()
- {
- return decode("ðÒÉ×ÁÔΦ ÓÔÁÔÉÞΦ ÄÁΦ");
- }
-
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.1.3
-//////////////////////////////////////////////////////////////////////////
-
- /*! Used as a marker that is put before a todo item */
- virtual QCString trTodo()
- /*??*/
- {
- return decode("îÅÏÂȦÄÎÏ ÚÒÏÂÉÔÉ");
- }
- /*! Used as the header of the todo list */
- virtual QCString trTodoList()
- /*??*/
- {
- return decode("ðÅÒÅÌ¦Ë ÚÁ×ÄÁÎØ");
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.1.4
-//////////////////////////////////////////////////////////////////////////
-
- virtual QCString trReferencedBy()
- {
- return decode("÷ÖÉ×Á¤ÔØÓÑ ×");
- }
- virtual QCString trRemarks()
- {
- return decode("ðÒÉÍ.");
- }
- virtual QCString trAttention()
- {
- return decode("õ×ÁÇÁ");
- }
- virtual QCString trInclByDepGraph()
- {
- return decode("çÒÁÆ ÆÁÊ̦×, Ñ˦ ×ËÌÀÞÁÀÔØ ÃÅÊ ÆÁÊÌ:");
- }
- virtual QCString trSince()
- /*??*/
- {
- return decode("ðÏÞÉÎÁÀÞÉ Ú");
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.1.5
-//////////////////////////////////////////////////////////////////////////
-
- /*! title of the graph legend page */
- virtual QCString trLegendTitle()
- {
- return decode("ìÅÇÅÎÄÁ");
- }
- /*! page explaining how the dot graph's should be interpreted */
- virtual QCString trLegendDocs()
- {
- return decode(
- "ðÏÚÎÁÞÅÎÎÑ, ÝÏ ×ÉËÏÒÉÓÔÏ×ÕÀÔØÓÑ Õ ÇÒÁÆÁÈ.<p>\n"
- "òÏÚÇÌÑÎÅÍÏ ÎÁÓÔÕÐÎÉÊ ÐÒÉËÌÁÄ:\n"
- "\\code\n"
- "/*! îÅ×ÉÄÉÍÉÊ ËÌÁÓ ÞÅÒÅÚ ÚÒ¦ÚÁÎÎÑ */\n"
- "class Invisible { };\n\n"
- "/*! ïÂÍÅÖÅÎÉÊ ËÌÁÓ, צÄÎÏÛÅÎÎÑ ÕÓÐÁÄËÕ×ÁÎÎÑ ÐÒÉÈÏ×ÁÎÅ */\n"
- "class Truncated : public Invisible { };\n\n"
- "/* îÅÄÏËÕÍÅÎÔÏ×ÁÎÉÊ ËÌÁÓ */\n"
- "class Undocumented { };\n\n"
- "/*! úÁÇÁÌØÎÏÄÏÓÔÕÐÎÅ ÕÓÐÁÄËÕ×ÁÎÎÑ */\n"
- "class PublicBase : public Truncated { };\n\n"
- "/*! A template class */\n"
- "template<class T> class Templ { };\n\n"
- "/*! úÁÈÉÝÅÎÅ ÕÓÐÁÄËÕ×ÁÎÎÑ */\n"
- "class ProtectedBase { };\n\n"
- "/*! ðÒÉ×ÁÔÎÅ ÕÓÐÁÄËÕ×ÁÎÎÑ */\n"
- "class PrivateBase { };\n\n"
- "/*! ëÌÁÓ, ÝÏ ×ÉËÏÒÉÓÔÏ×Õ¤ÔØÓÑ ËÌÁÓÏÍ Inherited */\n"
- "class Used { };\n\n"
- "/*! ëÌÁÓ, ÝÏ ÕÓÐÁÄËÏ×Õ¤ ¦ÎÛ¦ ËÌÁÓÉ */\n"
- "class Inherited : public PublicBase,\n"
- " protected ProtectedBase,\n"
- " private PrivateBase,\n"
- " public Undocumented,\n"
- " public Templ<int>\n"
- "{\n"
- " private:\n"
- " Used *m_usedClass;\n"
- "};\n"
- "\\endcode\n"
- "ñËÝÏ \\c MAX_DOT_GRAPH_HEIGHT × ËÏÎƦÇÕÒÁæÊÎÏÍÕ ÆÁÊ̦ "
- "ÕÓÔÁÎÏ×ÌÅÎÅ ÎÁ 200, ÏÔÒÉÍÁ¤ÍÏ ÎÁÓÔÕÐÎÉÊ ÇÒÁÆ:"
- "<p><center><img src=\"graph_legend."+Config_getEnum("DOT_IMAGE_FORMAT")+"\"></center>\n"
- "<p>\n"
- "ðÒÑÍÏËÕÔÎÉËÉ × ÃØÏÍÕ ÇÒÁƦ ÍÁÀÔØ ÎÁÓÔÕÐÎÉÊ ÚͦÓÔ:\n"
- "<ul>\n"
- "<li>úÁÐÏ×ÎÅÎÉÊ ÞÏÒÎÉÊ ÐÒÑÍÏËÕÔÎÉË ×¦ÄÏÂÒÁÖÁ¤ ÓÔÒÕËÔÕÒÕ ÁÂÏ ËÌÁÓ, "
- "ÄÌÑ ÑËÏÇÏ ÓÔ×ÏÒÅÎÏ ÇÒÁÆ.\n"
- "<li>ðÒÑÍÏËÕÔÎÉË Ú ÞÏÒÎÏÀ ÍÅÖÅÀ צÄÏÂÒÁÖÁ¤ ÄÏËÕÍÅÎÔÏ×ÁÎÕ ÓÔÒÕËÔÕÒÕ ÁÂÏ ËÌÁÓ.\n"
- "<li>ðÒÑÍÏËÕÔÎÉË Ú Ó¦ÒÏÀ ÍÅÖÅÀ צÄÏÂÒÁÖÁ¤ ÎÅÄÏËÕÍÅÎÔÏ×ÁÎÕ ÓÔÒÕËÔÕÒÕ ÁÂÏ ËÌÁÓ.\n"
- "<li>ðÒÑÍÏËÕÔÎÉË Ú ÞÅÒ×ÏÎÏÀ ÍÅÖÅÀ צÄÏÂÒÁÖÁ¤ ÄÏËÕÍÅÎÔÏ×ÁÎÕ ÓÔÒÕËÔÕÒÕ ÁÂÏ ËÌÁÓ, ÄÌÑ ÑËÉÈ\n"
- " ÎÅ ×Ó¦ ÓЦ×צÄÎÏÛÅÎÎÑ ÕÓÐÁÄËÕ×ÁÎÎÑ/ÚͦÓÔÕ ÐÏËÁÚÁΦ. çÒÁÆ ÚÒ¦ÚÁÎÉê, "
- "ÑËÝÏ ×¦Î ÎÅ ×ͦÝÁ¤ÔØÓÑ Õ ×ËÁÚÁΦ ÍÅÖ¦."
- "</ul>\n"
- "óÔÒ¦ÌËÉ ÍÁÀÔØ ÎÁÓÔÕÐÎÉÊ ÚͦÓÔ:\n"
- "<ul>\n"
- "<li>ôÅÍÎÏÓÉÎÑ ÓÔÒ¦ÌËÁ צÄÏÂÒÁÖÁ¤ צÄÎÏÛÅÎÎÑ ÚÁÇÁÌØÎÏÄÏÓÔÕÐÎÏÇÏ ÕÓÐÁÄËÕ×ÁÎÎÑ "
- "Í¦Ö Ä×ÏÍÁ ËÌÁÓÁÍÉ.\n"
- "<li>ôÅÍÎÏÚÅÌÅÎÁ ÓÔÒ¦ÌËÁ ×ÉËÏÒÉÓÔÏ×Õ¤ÔØÓÑ ÐÒÉ ÚÁÈÉÝÅÎÏÍÕ ÕÓÐÁÄËÕ×ÁÎΦ.\n"
- "<li>ôÅÍÎÏÞÅÒ×ÏÎÁ ÓÔÒ¦ÌËÁ ×ÉËÏÒÉÓÔÏ×Õ¤ÔØÓÑ ÐÒÉ ÐÒÉ×ÁÔÎÏÍÕ ÕÓÐÁÄËÕ×ÁÎΦ.\n"
- "<li>ðÕÒÐÕÒÎÁ ÓÔÒ¦ÌËÁ ×ÉËÏÒÉÓÔÏ×Õ¤ÔØÓÑ, ÑËÝÏ ËÌÁÓ Í¦ÓÔÉÔØÓÑ ×"
- "¦ÎÛÏÍÕ ËÌÁÓ¦ ÁÂÏ ÎÉÍ ×ÉËÏÒÉÓÔÏ×Õ¤ÔØÓÑ."
- "óÔÒ¦ÌËÁ ÅÔÉËÅÔÕ¤ÔØÓÑ ÚͦÎÎÏÀ, "
- "ÞÅÒÅÚ ÑËÕ ×¦ÄÂÕ×Á¤ÔØÓÑ ÄÏÓÔÕÐ ÄÏ ×ËÁÚÁÎϧ ÓÔÒÕËÔÕÒÉ ÁÂÏ ËÌÁÓÕ. \n"
- "</ul>\n");
- }
- /*! text for the link to the legend page */
- virtual QCString trLegend()
- {
- return decode("ÄÉ×. ÌÅÇÅÎÄÕ");
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.2.0
-//////////////////////////////////////////////////////////////////////////
-
- /*! Used as a marker that is put before a test item */
- virtual QCString trTest()
- {
- return decode("ôÅÓÔ");
- }
- /*! Used as the header of the test list */
- virtual QCString trTestList()
- {
- return decode("ðÅÒÅÌ¦Ë ÔÅÓÔ¦×");
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.2.1
-//////////////////////////////////////////////////////////////////////////
-
- /*! Used as a section header for KDE-2 IDL methods */
- virtual QCString trDCOPMethods()
- {
- return decode("DCOP íÅÔÏÄÉ");
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.2.2
-//////////////////////////////////////////////////////////////////////////
-
- /*! Used as a section header for IDL properties */
- virtual QCString trProperties()
- {
- return decode("÷ÌÁÓÔÉ×ÏÓÔ¦");
- }
- /*! Used as a section header for IDL property documentation */
- virtual QCString trPropertyDocumentation()
- {
- return decode("ðÏ×ÎÉÊ ÐÅÒÅÌ¦Ë ×ÌÁÓÔÉ×ÏÓÔÅÊ");
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.2.4
-//////////////////////////////////////////////////////////////////////////
-
- /*! Used for Java interfaces in the summary section of Java packages */
- virtual QCString trInterfaces()
- {
- return decode("¶ÎÔÅÒÆÅÊÓÉ");
- }
- /*! Used for Java classes in the summary section of Java packages */
- virtual QCString trClasses()
- {
- if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
- {
- return decode( "óÔÒÕËÔÕÒÉ ÄÁÎÉÈ" );
- }
- else
- {
- return decode( "ëÌÁÓÉ" );
- }
- }
- /*! Used as the title of a Java package */
- virtual QCString trPackage(const char *name)
- {
- return decode("ðÁËÅÔ ")+name;
- }
- /*! Title of the package index page */
- virtual QCString trPackageList()
- {
- return decode("ðÏ×ÎÉÊ ÐÅÒÅÌ¦Ë ÐÁËÅÔ¦×");
- }
- /*! The description of the package index page */
- virtual QCString trPackageListDescription()
- {
- return decode("ðÏ×ÎÉÊ ÐÅÒÅÌ¦Ë ÄÏËÕÍÅÎÔÏ×ÁÎÉÈ ÐÁËÅÔ¦×.");
- }
- /*! The link name in the Quick links header for each page */
- virtual QCString trPackages()
- {
- return decode("ðÁËÅÔÉ");
- }
- /*! Used as a chapter title for Latex & RTF output */
- virtual QCString trPackageDocumentation()
- {
- return decode("ïÐÉÓ ÐÁËÅÔ¦×");
- }
- /*! Text shown before a multi-line define */
- virtual QCString trDefineValue()
- {
- return decode("íÁËÒÏÏÚÎÁÞÅÎÎÑ:");
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.2.5
-//////////////////////////////////////////////////////////////////////////
-
- /*! Used as a marker that is put before a \\bug item */
- virtual QCString trBug()
- {
- return decode("äÅÆÅËÔ");
- }
- /*! Used as the header of the bug list */
- virtual QCString trBugList()
- {
- return decode("ðÅÒÅÌ¦Ë ÄÅÆÅËÔ¦×");
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.2.6
-//////////////////////////////////////////////////////////////////////////
- /*! Used as ansicpg for RTF file */
- virtual QCString trRTFansicp()
- {
- return "1251";
- }
- /*! Used as ansicpg for RTF fcharset */
- virtual QCString trRTFCharSet()
- {
- return "204";
- }
- /*! Used as header RTF general index */
- virtual QCString trRTFGeneralIndex()
- {
- return decode("ðÒÅÄÍÅÔÎÉÊ ÐÏËÁÖÞÉË");
- }
-
- /*! This is used for translation of the word that will possibly
- * be followed by a single name or by a list of names
- * of the category.
- */
- virtual QCString trClass(bool first_capital, bool singular)
- {
- if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
- {
- QCString result((first_capital ? "óÔÒÕËÔÕÒÉ ÄÁÎÉÈ" : "ÓÔÒÕËÔÕÒÉ ÄÁÎÉÈ"));
- return decode(result);
- }
- else
- {
- QCString result((first_capital ? "ëÌÁÓ" : "ËÌÁÓ"));
- if(!singular) result+="É";
- return decode(result);
- }
- }
-
- /*! This is used for translation of the word that will possibly
- * be followed by a single name or by a list of names
- * of the category.
- */
- virtual QCString trFile(bool first_capital, bool singular)
- {
- QCString result((first_capital ? "æÁÊÌ" : "ÆÁÊÌ"));
- if (!singular) result+="É";
- return decode(result);
- }
-
- /*! This is used for translation of the word that will possibly
- * be followed by a single name or by a list of names
- * of the category.
- */
- virtual QCString trNamespace(bool first_capital, bool singular)
- {
- QCString result((first_capital ? "ðÒÏÓÔ" : "ÐÒÏÓÔ"));
- result+=(singular?"¦Ò ¦ÍÅÎ":"ÏÒÉ ¦ÍÅÎ");
- return decode(result);
- }
-
- /*! This is used for translation of the word that will possibly
- * be followed by a single name or by a list of names
- * of the category.
- */
- virtual QCString trGroup(bool first_capital, bool singular)
- {
- QCString result((first_capital ? "çÒÕÐ" : "ÇÒÕÐ"));
- result+=(singular ? "Á" : "É");
- return decode(result);
- }
-
- /*! This is used for translation of the word that will possibly
- * be followed by a single name or by a list of names
- * of the category.
- */
- virtual QCString trPage(bool first_capital, bool singular)
- {
- QCString result((first_capital ? "óÔÏÒ¦ÎË" : "ÓÔÏÒ¦ÎË"));
- result+=(singular ? "Á" : "É");
- return decode(result);
- }
-
- /*! This is used for translation of the word that will possibly
- * be followed by a single name or by a list of names
- * of the category.
- */
- virtual QCString trMember(bool first_capital, bool singular)
- {
- QCString result((first_capital ? "åÌÅÍÅÎÔ" : "ÅÌÅÍÅÎÔ"));
- if (!singular) result+="É";
- return decode(result);
- }
-
- /*! This is used for translation of the word that will possibly
- * be followed by a single name or by a list of names
- * of the category.
- */
- virtual QCString trField(bool first_capital, bool singular)
- {
- QCString result((first_capital ? "ðÏÌ" : "ÐÏÌ"));
- result+=(singular ? "Å" : "Ñ");
- return decode(result);
- }
-
- /*! This is used for translation of the word that will possibly
- * be followed by a single name or by a list of names
- * of the category.
- */
- virtual QCString trGlobal(bool first_capital, bool singular)
- {
- QCString result((first_capital ? "çÌÏÂÁÌØÎ" : "ÇÌÏÂÁÌØÎ"));
- result+=(singular ? "ÉÊ" : "¦");
- return decode(result);
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.2.7
-//////////////////////////////////////////////////////////////////////////
-
- /*! This text is generated when the \\author command is used and
- * for the author section in man pages. */
- virtual QCString trAuthor(bool first_capital, bool singular)
- {
- QCString result((first_capital ? "á×ÔÏÒ" : "Á×ÔÏÒ"));
- if (!singular) result+="É";
- return decode(result);
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.2.11
-//////////////////////////////////////////////////////////////////////////
-
- /*! This text is put before the list of members referenced by a member
- */
- virtual QCString trReferences()
- {
- return "÷ÉËÏÒÉÓÔÏ×Õ¤";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.2.13
-//////////////////////////////////////////////////////////////////////////
-
- /*! used in member documentation blocks to produce a list of
- * members that are implemented by this one.
- */
- virtual QCString trImplementedFromList(int numEntries)
- {
- return "òÅÁ̦ÚÕ¤ " + trWriteList(numEntries) + ".";
- }
-
- /*! used in member documentation blocks to produce a list of
- * all members that implement this abstract member.
- */
- virtual QCString trImplementedInList(int numEntries)
- {
- return "òÅÁ̦ÚÕ¤ × " + trWriteList(numEntries) + ".";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.2.16
-//////////////////////////////////////////////////////////////////////////
-
- /*! used in RTF documentation as a heading for the Table
- * of Contents.
- */
- virtual QCString trRTFTableOfContents()
- {
- return "úͦÓÔ";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.2.17
-//////////////////////////////////////////////////////////////////////////
-
- /*! Used as the header of the list of item that have been
- * flagged deprecated
- */
- virtual QCString trDeprecatedList()
- {
- return "úÁÓÔÁҦ̦ ÅÌÅÍÅÎÔÉ";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.2.18
-//////////////////////////////////////////////////////////////////////////
-
- /*! Used as a header for declaration section of the events found in
- * a C# program
- */
- virtual QCString trEvents()
- {
- return "ðÏĦ§";
- }
-
- /*! Header used for the documentation section of a class' events. */
- virtual QCString trEventDocumentation()
- {
- return "äÏËÕÍÅÎÔÁÃ¦Ñ ÐÏĦÊ";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.3
-//////////////////////////////////////////////////////////////////////////
-
- /*! Used as a heading for a list of Java class types with package scope.
- */
- virtual QCString trPackageTypes()
- {
- return "ôÉÐÉ ÐÁËÅÔ¦×";
- }
-
- /*! Used as a heading for a list of Java class functions with package
- * scope.
- */
- virtual QCString trPackageMembers()
- {
- return "æÕÎËæ§ ÐÁËÅÔ¦×";
- }
-
- /*! Used as a heading for a list of static Java class functions with
- * package scope.
- */
- virtual QCString trStaticPackageMembers()
- {
- return "óÔÁÔÉÞΦ ÆÕÎËæÀ ÐÁËÅÔ¦×";
- }
-
- /*! Used as a heading for a list of Java class variables with package
- * scope.
- */
- virtual QCString trPackageAttribs()
- {
- return "áÔÒÉÂÕÔÉ ÐÁËÅÔ¦×";
- }
-
- /*! Used as a heading for a list of static Java class variables with
- * package scope.
- */
- virtual QCString trStaticPackageAttribs()
- {
- return "óÔÁÔÉÞΦ ÁÔÒÉÂÕÔÉ ÐÁËÅÔ¦×";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.3.1
-//////////////////////////////////////////////////////////////////////////
-
- /*! Used in the quick index of a class/file/namespace member list page
- * to link to the unfiltered list of all members.
- */
- virtual QCString trAll()
- {
- return "÷Ó¦";
- }
- /*! Put in front of the call graph for a function. */
- virtual QCString trCallGraph()
- {
- return "çÒÁÆ ×Ó¦È ×ÉËÌÉË¦× Ã¦¤§ ÆÕÎËæ§:";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.3.3
-//////////////////////////////////////////////////////////////////////////
-
- /*! When the search engine is enabled this text is put in the header
- * of each page before the field where one can enter the text to search
- * for.
- */
- virtual QCString trSearchForIndex()
- {
- return "ûÕËÁÔÉ";
- }
- /*! This string is used as the title for the page listing the search
- * results.
- */
- virtual QCString trSearchResultsTitle()
- {
- return "òÅÚÕÌØÔÁÔÉ ÐÏÛÕËÕ";
- }
- /*! This string is put just before listing the search results. The
- * text can be different depending on the number of documents found.
- * Inside the text you can put the special marker $num to insert
- * the number representing the actual number of search results.
- * The @a numDocuments parameter can be either 0, 1 or 2, where the
- * value 2 represents 2 or more matches. HTML markup is allowed inside
- * the returned string.
- */
- virtual QCString trSearchResults(int numDocuments)
- {
- if (numDocuments==0)
- {
- return "îÅ ÚÎÁÊÄÅÎÏ ÄÏËÕÍÅÎÔ¦× ×¦ÄÐÏצÄÎÏ ÄÏ ×ÁÛÏÇÏ ÚÁÐÉÔÕ.";
- }
- else if (numDocuments==1)
- {
- return "âÕÌÏ ÚÎÁÊÄÅÎÏ <b>1</b> ÄÏËÕÍÅÎÔ ×¦ÄÐÏצÄÎÏ ÄÏ ×ÁÛÏÇÏ ÚÁÐÉÔÕ.";
- }
- else
- {
- return "âÕÌÏ ÚÎÁÊÄÅÎÏ <b>$num</b> ÄÏËÕÍÅÎÔ¦× ×¦ÄÐÏצÄÎÏ ÄÏ ×ÁÛÏÇÏ ÚÁÐÉÔÕ. "
- "îÁÊËÒÁݦ צÄÐÏצÄÎÏÓÔ¦ ÐÏËÁÚÁÎÏ ÓÐÏÞÁÔËÕ.";
- }
- }
- /*! This string is put before the list of matched words, for each search
- * result. What follows is the list of words that matched the query.
- */
- virtual QCString trSearchMatches()
- {
- return "÷¦ÄÐÏצÄΦÓÔØ:";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.3.8
-//////////////////////////////////////////////////////////////////////////
-
- /*! This is used in HTML as the title of page with source code for file filename
- */
- virtual QCString trSourceFile(QCString& filename)
- {
- return "ôÅËÓÔ ÐÒÏÇÒÁÍÉ "+filename;
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.3.9
-//////////////////////////////////////////////////////////////////////////
-
- /*! This is used as the name of the chapter containing the directory
- * hierarchy.
- */
- virtual QCString trDirIndex()
- { return "äÅÒÅ×Ï ËÁÔÁÌÏǦ×"; }
-
- /*! This is used as the name of the chapter containing the documentation
- * of the directories.
- */
- virtual QCString trDirDocumentation()
- { return "äÏËÕÍÅÎÔÁÃ¦Ñ ËÁÔÁÌÏǦ×"; }
-
- /*! This is used as the title of the directory index and also in the
- * Quick links of a HTML page, to link to the directory hierarchy.
- */
- virtual QCString trDirectories()
- { return "ëÁÔÁÌÏÇÉ"; }
-
- /*! This returns a sentences that introduces the directory hierarchy.
- * and the fact that it is sorted alphabetically per level
- */
- virtual QCString trDirDescription()
- { return "äÅÒÅ×Ï ËÁÔÁÌÏÇ¦× ×ÐÏÒÑÄËÏ×ÁÎÏ ÎÁÂÌÉÖÅÎÏ "
- "ÄÏ ÁÌÆÁצÔÕ:";
- }
-
- /*! This returns the title of a directory page. The name of the
- * directory is passed via \a dirName.
- */
- virtual QCString trDirReference(const char *dirName)
- { QCString result="äÏצÄÎÉË ËÁÔÁÌÏÇÕ "; result+=dirName; return result; }
-
- /*! This returns the word directory with or without starting capital
- * (\a first_capital) and in sigular or plural form (\a singular).
- */
- virtual QCString trDir(bool, bool singular)
- {
- QCString result("ëÁÔÁÌÏÇ");
- if (!singular) result+="É";
- return result;
- }
-
-};
-
-#endif
-
diff --git a/trunk/src/translator_vi.h b/trunk/src/translator_vi.h
deleted file mode 100644
index 971f12b..0000000
--- a/trunk/src/translator_vi.h
+++ /dev/null
@@ -1,1787 +0,0 @@
-/******************************************************************************
- *
- *
- *
- * Copyright (C) 1997-2012 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.
- *
- */
-
-#ifndef TRANSLATOR_VI_H
-#define TRANSLATOR_VI_H
-
-/*
- * 17 Oct 2008 : Translation to Vietnamese by
- * Äặng Minh Tuấn <tuanvietkey@gmail.com>
- *
- */
-
-
-/*!
- When defining a translator class for the new language, follow
- the description in the documentation. One of the steps says
- that you should copy the translator_en.h (this) file to your
- translator_xx.h new file. Your new language should use the
- Translator class as the base class. This means that you need to
- implement exactly the same (pure virtual) methods as the
- TranslatorEnglish does. Because of this, it is a good idea to
- start with the copy of TranslatorEnglish and replace the strings
- one by one.
-
- It is not necessary to include "translator.h" or
- "translator_adapter.h" here. The files are included in the
- language.cpp correctly. Not including any of the mentioned
- files frees the maintainer from thinking about whether the
- first, the second, or both files should be included or not, and
- why. This holds namely for localized translators because their
- base class is changed occasionaly to adapter classes when the
- Translator class changes the interface, or back to the
- Translator class (by the local maintainer) when the localized
- translator is made up-to-date again.
-*/
-class TranslatorVietnamese : public TranslatorAdapter_1_6_0
-{
- public:
-
- // --- Language control methods -------------------
-
- /*! Used for identification of the language. The identification
- * should not be translated. It should be replaced by the name
- * of the language in English using lower-case characters only
- * (e.g. "czech", "japanese", "russian", etc.). It should be equal to
- * the identification used in language.cpp.
- */
- virtual QCString idLanguage()
- { return "vietnamese"; }
-
- /*! Used to get the LaTeX command(s) for the language support.
- * This method should return string with commands that switch
- * LaTeX to the desired language. For example
- * <pre>"\\usepackage[german]{babel}\n"
- * </pre>
- * or
- * <pre>"\\usepackage{polski}\n"
- * "\\usepackage[latin2]{inputenc}\n"
- * "\\usepackage[T1]{fontenc}\n"
- * </pre>
- *
- * The English LaTeX does not use such commands. Because of this
- * the empty string is returned in this implementation.
- */
- virtual QCString latexLanguageSupportCommand()
- {
- return "";
- }
-
- /*! return the language charset. This will be used for the HTML output */
- virtual QCString idLanguageCharset()
- {
- return "utf-8";
- }
-
- // --- Language translation methods -------------------
-
- /*! used in the compound documentation before a list of related functions. */
- virtual QCString trRelatedFunctions()
- { return "Những hàm liên quan"; }
-
- /*! subscript for the related functions. */
- virtual QCString trRelatedSubscript()
- { return "(Chú ý những hàm này không phải là hàm thành viên.)"; }
-
- /*! header that is put before the detailed description of files, classes and namespaces. */
- virtual QCString trDetailedDescription()
- { return "Mô tả chi tiết"; }
-
- /*! header that is put before the list of typedefs. */
- virtual QCString trMemberTypedefDocumentation()
- { return "Thông tin vỠMember Typedef"; }
-
- /*! header that is put before the list of enumerations. */
- virtual QCString trMemberEnumerationDocumentation()
- { return "Thông tin vỠMember Enumeration"; }
-
- /*! header that is put before the list of member functions. */
- virtual QCString trMemberFunctionDocumentation()
- { return "Thông tin vỠhàm thành viên"; }
-
- /*! header that is put before the list of member attributes. */
- virtual QCString trMemberDataDocumentation()
- {
- if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
- {
- return "Thông tin vá» trÆ°á»ng";
- }
- else
- {
- return "Thông tin vỠMember Data";
- }
- }
-
- /*! this is the text of a link put after brief descriptions. */
- virtual QCString trMore()
- { return "Tiếp..."; }
-
- /*! put in the class documentation */
- virtual QCString trListOfAllMembers()
- { return "Liệt kê tất cả các thành viên."; }
-
- /*! used as the title of the "list of all members" page of a class */
- virtual QCString trMemberList()
- { return "Danh sách thành viên"; }
-
- /*! this is the first part of a sentence that is followed by a class name */
- virtual QCString trThisIsTheListOfAllMembers()
- { return "Danh sách các thành viên đầy đủ cho "; }
-
- /*! this is the remainder of the sentence after the class name */
- virtual QCString trIncludingInheritedMembers()
- { return ", cùng với tất cả các thành viên kế thừa."; }
-
- /*! this is put at the author sections at the bottom of man pages.
- * parameter s is name of the project name.
- */
- virtual QCString trGeneratedAutomatically(const char *s)
- { QCString result="Äược tạo ra bởi Doxygen";
- if (s) result+=(QCString)" cho "+s;
- result+=" từ mã nguồn.";
- return result;
- }
-
- /*! put after an enum name in the list of all members */
- virtual QCString trEnumName()
- { return "tên enum"; }
-
- /*! put after an enum value in the list of all members */
- virtual QCString trEnumValue()
- { return "giá trị enum"; }
-
- /*! put after an undocumented member in the list of all members */
- virtual QCString trDefinedIn()
- { return "được định nghĩa trong"; }
-
- // quick reference sections
-
- /*! This is put above each page as a link to the list of all groups of
- * compounds or files (see the \\group command).
- */
- virtual QCString trModules()
- { return "Các Modules"; }
-
- /*! This is put above each page as a link to the class hierarchy */
- virtual QCString trClassHierarchy()
- { return "Kiến trúc Class"; }
-
- /*! This is put above each page as a link to the list of annotated classes */
- virtual QCString trCompoundList()
- {
- if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
- {
- return "Cấu trúc cơ sở dữ liệu (Data Structures)";
- }
- else
- {
- return "Danh mục các Class";
- }
- }
-
- /*! This is put above each page as a link to the list of documented files */
- virtual QCString trFileList()
- { return "Danh mục File"; }
-
- /*! This is put above each page as a link to all members of compounds. */
- virtual QCString trCompoundMembers()
- {
- if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
- {
- return "Các trÆ°á»ng dữ liệu";
- }
- else
- {
- return "Các thành viên của Class";
- }
- }
-
- /*! This is put above each page as a link to all members of files. */
- virtual QCString trFileMembers()
- {
- if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
- {
- return "Toàn cục";
- }
- else
- {
- return "File thành viên";
- }
- }
-
- /*! This is put above each page as a link to all related pages. */
- virtual QCString trRelatedPages()
- { return "Các trang liên quan"; }
-
- /*! This is put above each page as a link to all examples. */
- virtual QCString trExamples()
- { return "Các ví dụ"; }
-
- /*! This is put above each page as a link to the search engine. */
- virtual QCString trSearch()
- { return "Tìm kiếm"; }
-
- /*! This is an introduction to the class hierarchy. */
- virtual QCString trClassHierarchyDescription()
- { return "Danh sách kế thừa đã được sắp xếp theo ABC, "
- "nhưng chưa đầy đủ:";
- }
-
- /*! This is an introduction to the list with all files. */
- virtual QCString trFileListDescription(bool extractAll)
- {
- QCString result="Danh mục đầy đủ tất cả các ";
- if (!extractAll) result+="(đã được biên soạn) ";
- result+="files cùng với các mô tả tóm tắt:";
- return result;
- }
-
- /*! This is an introduction to the annotated compound list. */
- virtual QCString trCompoundListDescription()
- {
-
- if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
- {
- return "Äây là cấu trúc cÆ¡ sở dữ liệu vá»›i mô tả tóm tắt:";
- }
- else
- {
- return "Äây là các classes, structs, "
- "unions và interfaces với các mô tả tóm tắt:";
- }
- }
-
- /*! This is an introduction to the page with all class members. */
- virtual QCString trCompoundMembersDescription(bool extractAll)
- {
- QCString result="Danh mục tất cả các ";
- if (!extractAll)
- {
- result+="(đã được mô tả) ";
- }
- if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
- {
- result+="struct và union fields";
- }
- else
- {
- result+="class members";
- }
- result+=" cùng với các các liên kết đến ";
- if (!extractAll)
- {
- if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
- {
- result+="Thông tin vá» struct/union cho từng trÆ°á»ng:";
- }
- else
- {
- result+="Thông tin vỠclass cho từng thành viên:";
- }
- }
- else
- {
- if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
- {
- result+="các structures/unions thuộc:";
- }
- else
- {
- result+="các lớp thuộc:";
- }
- }
- return result;
- }
-
- /*! This is an introduction to the page with all file members. */
- virtual QCString trFileMembersDescription(bool extractAll)
- {
- QCString result="Danh sách tất cả các ";
- if (!extractAll) result+="(đã được mô tat) ";
-
- if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
- {
- result+="functions, variables, defines, enums, và typedefs";
- }
- else
- {
- result+="các file thành viên";
- }
- result+=" cùng với links tới ";
- if (extractAll)
- result+="các files thuộc:";
- else
- result+="tài liệu:";
- return result;
- }
-
- /*! This is an introduction to the page with the list of all examples */
- virtual QCString trExamplesDescription()
- { return "Danh sách tất cả các ví dụ:"; }
-
- /*! This is an introduction to the page with the list of related pages */
- virtual QCString trRelatedPagesDescription()
- { return "Danh sách tất cả các trang Thông tin có liên quan:"; }
-
- /*! This is an introduction to the page with the list of class/file groups */
- virtual QCString trModulesDescription()
- { return "Danh sách tất cả các thành viên:"; }
-
- // index titles (the project name is prepended for these)
-
- /*! This is used in HTML as the title of index.html. */
- virtual QCString trDocumentation()
- { return "Thông tin"; }
-
- /*! This is used in LaTeX as the title of the chapter with the
- * index of all groups.
- */
- virtual QCString trModuleIndex()
- { return "Chỉ mục (Index) Module"; }
-
- /*! This is used in LaTeX as the title of the chapter with the
- * class hierarchy.
- */
- virtual QCString trHierarchicalIndex()
- { return "Hierarchical Index"; }
-
- /*! This is used in LaTeX as the title of the chapter with the
- * annotated compound index.
- */
- virtual QCString trCompoundIndex()
- {
- if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
- {
- return "Index cấu trúc cơ sở dữ liệu";
- }
- else
- {
- return "Class Index";
- }
- }
-
- /*! This is used in LaTeX as the title of the chapter with the
- * list of all files.
- */
- virtual QCString trFileIndex()
- { return "File Index"; }
-
- /*! This is used in LaTeX as the title of the chapter containing
- * the documentation of all groups.
- */
- virtual QCString trModuleDocumentation()
- { return "Thông tin vỠcác Module"; }
-
- /*! This is used in LaTeX as the title of the chapter containing
- * the documentation of all classes, structs and unions.
- */
- virtual QCString trClassDocumentation()
- {
- if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
- {
- return "Thông tin vỠcấu trúc cơ sở dữ liệu";
- }
- else
- {
- return "Thông tin vỠClass";
- }
- }
-
- /*! This is used in LaTeX as the title of the chapter containing
- * the documentation of all files.
- */
- virtual QCString trFileDocumentation()
- { return "Thông tin vỠFile"; }
-
- /*! This is used in LaTeX as the title of the chapter containing
- * the documentation of all examples.
- */
- virtual QCString trExampleDocumentation()
- { return "Thông tin vỠcác ví dụ"; }
-
- /*! This is used in LaTeX as the title of the chapter containing
- * the documentation of all related pages.
- */
- virtual QCString trPageDocumentation()
- { return "Trang Thông tin"; }
-
- /*! This is used in LaTeX as the title of the document */
- virtual QCString trReferenceManual()
- { return "Thông tin tham chiếu"; }
-
- /*! This is used in the documentation of a file as a header before the
- * list of defines
- */
- virtual QCString trDefines()
- { return "Äịnh nghÄ©a"; }
-
- /*! This is used in the documentation of a file as a header before the
- * list of function prototypes
- */
- virtual QCString trFuncProtos()
- { return "Function Prototypes"; }
-
- /*! This is used in the documentation of a file as a header before the
- * list of typedefs
- */
- virtual QCString trTypedefs()
- { return "Typedefs"; }
-
- /*! This is used in the documentation of a file as a header before the
- * list of enumerations
- */
- virtual QCString trEnumerations()
- { return "Enumerations"; }
-
- /*! This is used in the documentation of a file as a header before the
- * list of (global) functions
- */
- virtual QCString trFunctions()
- { return "Các hàm"; }
-
- /*! This is used in the documentation of a file as a header before the
- * list of (global) variables
- */
- virtual QCString trVariables()
- { return "Các biến"; }
-
- /*! This is used in the documentation of a file as a header before the
- * list of (global) variables
- */
- virtual QCString trEnumerationValues()
- { return "Enumerator"; }
-
- /*! This is used in the documentation of a file before the list of
- * documentation blocks for defines
- */
- virtual QCString trDefineDocumentation()
- { return "Thông tin vỠđịnh nghĩa"; }
-
- /*! This is used in the documentation of a file/namespace before the list
- * of documentation blocks for function prototypes
- */
- virtual QCString trFunctionPrototypeDocumentation()
- { return "Thông tin vỠFunction Prototype"; }
-
- /*! This is used in the documentation of a file/namespace before the list
- * of documentation blocks for typedefs
- */
- virtual QCString trTypedefDocumentation()
- { return "Thông tin vỠTypedef"; }
-
- /*! This is used in the documentation of a file/namespace before the list
- * of documentation blocks for enumeration types
- */
- virtual QCString trEnumerationTypeDocumentation()
- { return "Thông tin vỠEnumeration Type"; }
-
- /*! This is used in the documentation of a file/namespace before the list
- * of documentation blocks for functions
- */
- virtual QCString trFunctionDocumentation()
- { return "Thông tin vỠhàm"; }
-
- /*! This is used in the documentation of a file/namespace before the list
- * of documentation blocks for variables
- */
- virtual QCString trVariableDocumentation()
- { return "Thông tin vỠcác biến"; }
-
- /*! This is used in the documentation of a file/namespace/group before
- * the list of links to documented compounds
- */
- virtual QCString trCompounds()
- {
- if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
- {
- return "Cấu trúc cơ sở dữ liệu";
- }
- else
- {
- return "Classes";
- }
- }
-
- /*! This is used in the standard footer of each page and indicates when
- * the page was generated
- */
- virtual QCString trGeneratedAt(const char *date,const char *projName)
- {
- QCString result=(QCString)"Äược biên soạn vào "+date;
- if (projName) result+=(QCString)" cho mã nguồn dự án "+projName;
- result+=(QCString)" bởi";
- return result;
- }
- /*! This is part of the sentence used in the standard footer of each page.
- */
- virtual QCString trWrittenBy()
- {
- return "được viết bởi";
- }
-
- /*! this text is put before a class diagram */
- virtual QCString trClassDiagram(const char *clName)
- {
- return (QCString)"Sơ đồ kế thừa cho "+clName+":";
- }
-
- /*! this text is generated when the \\internal command is used. */
- virtual QCString trForInternalUseOnly()
- { return "Chỉ cho sử dụng nội bộ."; }
-
- /*! this text is generated when the \\warning command is used. */
- virtual QCString trWarning()
- { return "Lưu ý"; }
-
- /*! this text is generated when the \\version command is used. */
- virtual QCString trVersion()
- { return "Phiên bản"; }
-
- /*! this text is generated when the \\date command is used. */
- virtual QCString trDate()
- { return "Ngày"; }
-
- /*! this text is generated when the \\return command is used. */
- virtual QCString trReturns()
- { return "Giá trị trả vá»"; }
-
- /*! this text is generated when the \\sa command is used. */
- virtual QCString trSeeAlso()
- { return "Xem thêm"; }
-
- /*! this text is generated when the \\param command is used. */
- virtual QCString trParameters()
- { return "Các tham số"; }
-
- /*! this text is generated when the \\exception command is used. */
- virtual QCString trExceptions()
- { return "Exceptions"; }
-
- /*! this text is used in the title page of a LaTeX document. */
- virtual QCString trGeneratedBy()
- { return "Äược biên soạn bởi"; }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 0.49-990307
-//////////////////////////////////////////////////////////////////////////
-
- /*! used as the title of page containing all the index of all namespaces. */
- virtual QCString trNamespaceList()
- { return "Danh sách Namespace"; }
-
- /*! used as an introduction to the namespace list */
- virtual QCString trNamespaceListDescription(bool extractAll)
- {
- QCString result="Danh sách tất cả các ";
- if (!extractAll) result+="(đã được biên tập) ";
- result+="namespaces với mô tả tóm tắt:";
- return result;
- }
-
- /*! used in the class documentation as a header before the list of all
- * friends of a class
- */
- virtual QCString trFriends()
- { return "Friends"; }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 0.49-990405
-//////////////////////////////////////////////////////////////////////////
-
- /*! used in the class documentation as a header before the list of all
- * related classes
- */
- virtual QCString trRelatedFunctionDocumentation()
- { return "Thông tin vỠFriends và các hàm liên quan"; }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 0.49-990425
-//////////////////////////////////////////////////////////////////////////
-
- /*! used as the title of the HTML page of a class/struct/union */
- virtual QCString trCompoundReference(const char *clName,
- ClassDef::CompoundType compType,
- bool isTemplate)
- {
- QCString result=(QCString)clName;
- switch(compType)
- {
- case ClassDef::Class: result+=" Class"; break;
- case ClassDef::Struct: result+=" Struct"; break;
- case ClassDef::Union: result+=" Union"; break;
- case ClassDef::Interface: result+=" Interface"; break;
- case ClassDef::Protocol: result+=" Protocol"; break;
- case ClassDef::Category: result+=" Category"; break;
- case ClassDef::Exception: result+=" Exception"; break;
- }
- if (isTemplate) result+=" Template";
- result+=" Tham chiếu";
- return result;
- }
-
- /*! used as the title of the HTML page of a file */
- virtual QCString trFileReference(const char *fileName)
- {
- QCString result=fileName;
- result+=" File Tham chiếu";
- return result;
- }
-
- /*! used as the title of the HTML page of a namespace */
- virtual QCString trNamespaceReference(const char *namespaceName)
- {
- QCString result=namespaceName;
- result+=" Namespace Tham chiếu";
- return result;
- }
-
- virtual QCString trPublicMembers()
- { return "Các hàm thành viên Public"; }
- virtual QCString trPublicSlots()
- { return "Public Slots"; }
- virtual QCString trSignals()
- { return "Signals"; }
- virtual QCString trStaticPublicMembers()
- { return "Các hàm Static Public"; }
- virtual QCString trProtectedMembers()
- { return "Các hàm thành viên Protected"; }
- virtual QCString trProtectedSlots()
- { return "Protected Slots"; }
- virtual QCString trStaticProtectedMembers()
- { return "Các hàm thành viên Static Protected"; }
- virtual QCString trPrivateMembers()
- { return "Các hàm thành viên Private"; }
- virtual QCString trPrivateSlots()
- { return "Private Slots"; }
- virtual QCString trStaticPrivateMembers()
- { return "Các hàm thành viên Static Private"; }
-
- /*! this function is used to produce a comma-separated list of items.
- * use generateMarker(i) to indicate where item i should be put.
- */
- virtual QCString trWriteList(int numEntries)
- {
- QCString result;
- int i;
- // the inherits list contain `numEntries' classes
- for (i=0;i<numEntries;i++)
- {
- // use generateMarker to generate placeholders for the class links!
- result+=generateMarker(i); // generate marker for entry i in the list
- // (order is left to right)
-
- if (i!=numEntries-1) // not the last entry, so we need a separator
- {
- if (i<numEntries-2) // not the fore last entry
- result+=", ";
- else // the fore last entry
- result+=", và ";
- }
- }
- return result;
- }
-
- /*! used in class documentation to produce a list of base classes,
- * if class diagrams are disabled.
- */
- virtual QCString trInheritsList(int numEntries)
- {
- return "Kế thừa "+trWriteList(numEntries)+".";
- }
-
- /*! used in class documentation to produce a list of super classes,
- * if class diagrams are disabled.
- */
- virtual QCString trInheritedByList(int numEntries)
- {
- return "Äược kế thừa bởi "+trWriteList(numEntries)+".";
- }
-
- /*! used in member documentation blocks to produce a list of
- * members that are hidden by this one.
- */
- virtual QCString trReimplementedFromList(int numEntries)
- {
- return "Äược thá»±c thi lại từ "+trWriteList(numEntries)+".";
- }
-
- /*! used in member documentation blocks to produce a list of
- * all member that overwrite the implementation of this member.
- */
- virtual QCString trReimplementedInList(int numEntries)
- {
- return "Äược thá»±c thi lại trong "+trWriteList(numEntries)+".";
- }
-
- /*! This is put above each page as a link to all members of namespaces. */
- virtual QCString trNamespaceMembers()
- { return "Thành viên Namespace"; }
-
- /*! This is an introduction to the page with all namespace members */
- virtual QCString trNamespaceMemberDescription(bool extractAll)
- {
- QCString result="Danh sách tất cả các ";
- if (!extractAll) result+="(đã được biên soạn) ";
- result+="các thành viên namespace cùng với link tới ";
- if (extractAll)
- result+="Thông tin namespace cho từng thành viên:";
- else
- result+=" namespaces mà phụ thuộc bởi:";
- return result;
- }
- /*! This is used in LaTeX as the title of the chapter with the
- * index of all namespaces.
- */
- virtual QCString trNamespaceIndex()
- { return "Namespace Index"; }
-
- /*! This is used in LaTeX as the title of the chapter containing
- * the documentation of all namespaces.
- */
- virtual QCString trNamespaceDocumentation()
- { return "Thông tin vỠNamespace"; }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 0.49-990522
-//////////////////////////////////////////////////////////////////////////
-
- /*! This is used in the documentation before the list of all
- * namespaces in a file.
- */
- virtual QCString trNamespaces()
- { return "Namespaces"; }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 0.49-990728
-//////////////////////////////////////////////////////////////////////////
-
- /*! This is put at the bottom of a class documentation page and is
- * followed by a list of files that were used to generate the page.
- */
- virtual QCString trGeneratedFromFiles(ClassDef::CompoundType compType,
- bool single)
- { // here s is one of " Class", " Struct" or " Union"
- // single is true implies a single file
- QCString result=(QCString)"Thông tin cho ";
- switch(compType)
- {
- case ClassDef::Class: result+="class"; break;
- case ClassDef::Struct: result+="struct"; break;
- case ClassDef::Union: result+="union"; break;
- case ClassDef::Interface: result+="interface"; break;
- case ClassDef::Protocol: result+="protocol"; break;
- case ClassDef::Category: result+="category"; break;
- case ClassDef::Exception: result+="exception"; break;
- }
- result+=" được biên soạn từ các file sau đây";
- if (single) result+=":"; else result+=":";
- return result;
- }
-
- /*! This is in the (quick) index as a link to the alphabetical compound
- * list.
- */
- virtual QCString trAlphabeticalList()
- { return "Danh sách theo ABC"; }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 0.49-990901
-//////////////////////////////////////////////////////////////////////////
-
- /*! This is used as the heading text for the retval command. */
- virtual QCString trReturnValues()
- { return "Các giá trị trả vá»"; }
-
- /*! This is in the (quick) index as a link to the main page (index.html)
- */
- virtual QCString trMainPage()
- { return "Tranh chính"; }
-
- /*! This is used in references to page that are put in the LaTeX
- * documentation. It should be an abbreviation of the word page.
- */
- virtual QCString trPageAbbreviation()
- { return "tr."; }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 0.49-991003
-//////////////////////////////////////////////////////////////////////////
-
- virtual QCString trDefinedAtLineInSourceFile()
- {
- return "Äịnh nghÄ©a tại dòng @0 trong file @1.";
- }
- virtual QCString trDefinedInSourceFile()
- {
- return "Äịnh nghÄ©a trong file @0.";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 0.49-991205
-//////////////////////////////////////////////////////////////////////////
-
- virtual QCString trDeprecated()
- {
- return "Không tán thành";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.0.0
-//////////////////////////////////////////////////////////////////////////
-
- /*! this text is put before a collaboration diagram */
- virtual QCString trCollaborationDiagram(const char *clName)
- {
- return (QCString)"Sơ đồ liên kết cho "+clName+":";
- }
- /*! this text is put before an include dependency graph */
- virtual QCString trInclDepGraph(const char *fName)
- {
- return (QCString)"Kèm theo graph phụ thuộc cho "+fName+":";
- }
- /*! header that is put before the list of constructor/destructors. */
- virtual QCString trConstructorDocumentation()
- {
- return "Thông tin vỠConstructor và Destructor";
- }
- /*! Used in the file documentation to point to the corresponding sources. */
- virtual QCString trGotoSourceCode()
- {
- return "Tới mã nguồn của file này.";
- }
- /*! Used in the file sources to point to the corresponding documentation. */
- virtual QCString trGotoDocumentation()
- {
- return "Tới Thông tin của file này.";
- }
- /*! Text for the \\pre command */
- virtual QCString trPrecondition()
- {
- return "Äiá»u kiện trÆ°á»›c";
- }
- /*! Text for the \\post command */
- virtual QCString trPostcondition()
- {
- return "Äiá»u kiện sau";
- }
- /*! Text for the \\invariant command */
- virtual QCString trInvariant()
- {
- return "Bất biến";
- }
- /*! Text shown before a multi-line variable/enum initialization */
- virtual QCString trInitialValue()
- {
- return "Giá trị khởi tạo:";
- }
- /*! Text used the source code in the file index */
- virtual QCString trCode()
- {
- return "mã nguồn";
- }
- virtual QCString trGraphicalHierarchy()
- {
- return "Kiến trúc đồ há»a của Class";
- }
- virtual QCString trGotoGraphicalHierarchy()
- {
- return "Tá»›i kiến trúc đồ há»a của Class";
- }
- virtual QCString trGotoTextualHierarchy()
- {
- return "Tới kiến trúc text của Class";
- }
- virtual QCString trPageIndex()
- {
- return "Chỉ mục trang";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.1.0
-//////////////////////////////////////////////////////////////////////////
-
- virtual QCString trNote()
- {
- return "Ghi chú";
- }
- virtual QCString trPublicTypes()
- {
- return "Public Types";
- }
- virtual QCString trPublicAttribs()
- {
- if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
- {
- return "các trÆ°á»ng đữ liệu";
- }
- else
- {
- return "Các thuộc tính Public";
- }
- }
- virtual QCString trStaticPublicAttribs()
- {
- return "Các thuộc tính Static Public";
- }
- virtual QCString trProtectedTypes()
- {
- return "Các kiểu Protected";
- }
- virtual QCString trProtectedAttribs()
- {
- return "các thuộc tính Protected";
- }
- virtual QCString trStaticProtectedAttribs()
- {
- return "Các thuộc tính Static Protected";
- }
- virtual QCString trPrivateTypes()
- {
- return "Các kiểu Private";
- }
- virtual QCString trPrivateAttribs()
- {
- return "Các thuộc tính Private";
- }
- virtual QCString trStaticPrivateAttribs()
- {
- return "Các thuộc tính Static Private";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.1.3
-//////////////////////////////////////////////////////////////////////////
-
- /*! Used as a marker that is put before a \\todo item */
- virtual QCString trTodo()
- {
- return "Mục tiêu";
- }
- /*! Used as the header of the todo list */
- virtual QCString trTodoList()
- {
- return "Danh sách hàng mục cần thực hiện";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.1.4
-//////////////////////////////////////////////////////////////////////////
-
- virtual QCString trReferencedBy()
- {
- return "Tham chiếu bởi";
- }
- virtual QCString trRemarks()
- {
- return "Ghi chú";
- }
- virtual QCString trAttention()
- {
- return "Chú ý";
- }
- virtual QCString trInclByDepGraph()
- {
- return "Äồ thị này biểu thị những file nào trá»±c tiếp hoặc"
- "không trực tiếp bao gồm file này:";
- }
- virtual QCString trSince()
- {
- return "Từ";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.1.5
-//////////////////////////////////////////////////////////////////////////
-
- /*! title of the graph legend page */
- virtual QCString trLegendTitle()
- {
- return "Chú giải Graph";
- }
- /*! page explaining how the dot graph's should be interpreted
- * The %A in the text below are to prevent link to classes called "A".
- */
- virtual QCString trLegendDocs()
- {
- return
- "Trang này giải nghĩa các biểu đồ được biên soạn bởi "
- " doxygen.<p>\n"
- "Hãy xem xét các ví dụ sau:\n"
- "\\code\n"
- "/*! Các lướp không thấy được bởi sự cắt ngắn */\n"
- "Lớp không nhìn thấy class { };\n\n"
- "/*! class bị cắt, quan hệ kế thừa bị ẩn */\n"
- "class bị cắt : bị ẩn toàn cục { };\n\n"
- "/* Class không được mô tả với các chú giải doxygen */\n"
- "class không được mô tả { };\n\n"
- "/*! Class được kế thừa sử dụng các kế thừa public */\n"
- "class PublicBase : public Truncated { };\n\n"
- "/*! template class */\n"
- "template<class T> class Templ { };\n\n"
- "/*! Class được kế thừa sử dụng kế thừa protected */\n"
- "class ProtectedBase { };\n\n"
- "/*! Class được kế thừa sử dụng kế thừa protected private */\n"
- "class PrivateBase { };\n\n"
- "/*! Class được sử dụng bởi các class kế thừa */\n"
- "class được sử dụng { };\n\n"
- "/*! Super class kế thừa một số các class khác */\n"
- "class được kế thừa : public PublicBase,\n"
- " protected ProtectedBase,\n"
- " private PrivateBase,\n"
- " public Undocumented,\n"
- " public Templ<int>\n"
- "{\n"
- " private:\n"
- " Used *m_usedClass;\n"
- "};\n"
- "\\endcode\n"
- "Kết quả trong biểu đồ sau đây:"
- "<p><center><img alt=\"\" src=\"graph_legend."+Config_getEnum("DOT_IMAGE_FORMAT")+"\"></center>\n"
- "<p>\n"
- "Các hộp trong biểu đồ trên có ý nghĩa như sau:\n"
- "<ul>\n"
- "<li>%Hộp màu xám biểu thị cấu trúc clas cho "
- "biểu đồ được thể hiện.\n"
- "<li>%Hộp có khung mầu đen biểu thị struct hoặc class được mô tả.\n"
- "<li>%Hộp có khung mầu xám biểu thị struct hoặc class chưa được mô tả.\n"
- "<li>%Hộp có khung mầu đỠbiểu thị struct hoặc class được mổ tả "
- "khi mà không phải tất cả các quan hệ kế thừa/containment được biển diễn.. %Biểu đồ bị "
- "cắt nếu nó không nằm trá»n trong các biên được cho trÆ°á»›c..\n"
- "</ul>\n"
- "Các mũi tên có ý nghĩa như sau::\n"
- "<ul>\n"
- "<li>%Mũi tên mầu xanh đậm biểu thị các quan hệ kế thừa công khai "
- "giữa 2 class.\n"
- "<li>%Mũi tên màu xanh lá cây đậm biểu thị kế thừa được bảo vỠ(protected).\n"
- "<li>%Mũi tên đỠđậm biểu thị kế thừa dạng private.\n"
- "<li>%Mũi tên màu hồng đứt quảng biểu thị class được sử dụng "
- "bởi class khác. Mũi tên được gán nhãn với các giá trị "
- "mà các calsss hoặc struct được truy cập tới.\n"
- "<li>%Mũi tên vàng đắt quãng được thị quan hệ giữa template instance và "
- "template class được dẫn xuất từ đó. Mũi tên được gán nhãn với "
- "tham số của template.\n"
- "</ul>\n";
- }
- /*! text for the link to the legend page */
- virtual QCString trLegend()
- {
- return "Chú giải";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.2.0
-//////////////////////////////////////////////////////////////////////////
-
- /*! Used as a marker that is put before a test item */
- virtual QCString trTest()
- {
- return "Test";
- }
- /*! Used as the header of the test list */
- virtual QCString trTestList()
- {
- return "Danh sách Test";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.2.1
-//////////////////////////////////////////////////////////////////////////
-
- /*! Used as a section header for KDE-2 IDL methods */
- virtual QCString trDCOPMethods()
- {
- return "Các hàm thành viên DCOP";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.2.2
-//////////////////////////////////////////////////////////////////////////
-
- /*! Used as a section header for IDL properties */
- virtual QCString trProperties()
- {
- return "Thuộc tính";
- }
- /*! Used as a section header for IDL property documentation */
- virtual QCString trPropertyDocumentation()
- {
- return "Thông tin thuộc tính (Property)";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.2.4
-//////////////////////////////////////////////////////////////////////////
-
- /*! Used for Java classes in the summary section of Java packages */
- virtual QCString trClasses()
- {
- if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
- {
- return "Cấu trúc dữ liệu";
- }
- else
- {
- return "Classes";
- }
- }
- /*! Used as the title of a Java package */
- virtual QCString trPackage(const char *name)
- {
- return (QCString)"Gói "+name;
- }
- /*! Title of the package index page */
- virtual QCString trPackageList()
- {
- return "Danh sách gói";
- }
- /*! The description of the package index page */
- virtual QCString trPackageListDescription()
- {
- return "Danh sách các gói cùng với mô tả tóm tắt (khi có thể có):";
- }
- /*! The link name in the Quick links header for each page */
- virtual QCString trPackages()
- {
- return "Các gói";
- }
- /*! Text shown before a multi-line define */
- virtual QCString trDefineValue()
- {
- return "Giá trị:";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.2.5
-//////////////////////////////////////////////////////////////////////////
-
- /*! Used as a marker that is put before a \\bug item */
- virtual QCString trBug()
- {
- return "Lá»—i";
- }
- /*! Used as the header of the bug list */
- virtual QCString trBugList()
- {
- return "Danh sách lỗi";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.2.6
-//////////////////////////////////////////////////////////////////////////
-
- /*! Used as ansicpg for RTF file
- *
- * The following table shows the correlation of Charset name, Charset Value and
- * <pre>
- * Codepage number:
- * Charset Name Charset Value(hex) Codepage number
- * ------------------------------------------------------
- * DEFAULT_CHARSET 1 (x01)
- * SYMBOL_CHARSET 2 (x02)
- * OEM_CHARSET 255 (xFF)
- * ANSI_CHARSET 0 (x00) 1252
- * RUSSIAN_CHARSET 204 (xCC) 1251
- * EE_CHARSET 238 (xEE) 1250
- * GREEK_CHARSET 161 (xA1) 1253
- * TURKISH_CHARSET 162 (xA2) 1254
- * BALTIC_CHARSET 186 (xBA) 1257
- * HEBREW_CHARSET 177 (xB1) 1255
- * ARABIC _CHARSET 178 (xB2) 1256
- * SHIFTJIS_CHARSET 128 (x80) 932
- * HANGEUL_CHARSET 129 (x81) 949
- * GB2313_CHARSET 134 (x86) 936
- * CHINESEBIG5_CHARSET 136 (x88) 950
- * </pre>
- *
- */
- virtual QCString trRTFansicp()
- {
- return "1252";
- }
-
-
- /*! Used as ansicpg for RTF fcharset
- * \see trRTFansicp() for a table of possible values.
- */
- virtual QCString trRTFCharSet()
- {
- return "0";
- }
-
- /*! Used as header RTF general index */
- virtual QCString trRTFGeneralIndex()
- {
- return "Chỉ số";
- }
-
- /*! This is used for translation of the word that will possibly
- * be followed by a single name or by a list of names
- * of the category.
- */
- virtual QCString trClass(bool first_capital, bool singular)
- {
- QCString result((first_capital ? "Class" : "class"));
- if (!singular) result+="es";
- return result;
- }
-
- /*! This is used for translation of the word that will possibly
- * be followed by a single name or by a list of names
- * of the category.
- */
- virtual QCString trFile(bool first_capital, bool singular)
- {
- QCString result((first_capital ? "File" : "file"));
- if (!singular) result+="s";
- return result;
- }
-
- /*! This is used for translation of the word that will possibly
- * be followed by a single name or by a list of names
- * of the category.
- */
- virtual QCString trNamespace(bool first_capital, bool singular)
- {
- QCString result((first_capital ? "Namespace" : "namespace"));
- if (!singular) result+="s";
- return result;
- }
-
- /*! This is used for translation of the word that will possibly
- * be followed by a single name or by a list of names
- * of the category.
- */
- virtual QCString trGroup(bool first_capital, bool singular)
- {
- QCString result((first_capital ? "Group" : "group"));
- if (!singular) result+="s";
- return result;
- }
-
- /*! This is used for translation of the word that will possibly
- * be followed by a single name or by a list of names
- * of the category.
- */
- virtual QCString trPage(bool first_capital, bool singular)
- {
- QCString result((first_capital ? "Trang" : "trang"));
- if (!singular) result+="";
- return result;
- }
-
- /*! This is used for translation of the word that will possibly
- * be followed by a single name or by a list of names
- * of the category.
- */
- virtual QCString trMember(bool first_capital, bool singular)
- {
- QCString result((first_capital ? "Member" : "member"));
- if (!singular) result+="s";
- return result;
- }
-
- /*! This is used for translation of the word that will possibly
- * be followed by a single name or by a list of names
- * of the category.
- */
- virtual QCString trGlobal(bool first_capital, bool singular)
- {
- QCString result((first_capital ? "Global" : "global"));
- if (!singular) result+="s";
- return result;
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.2.7
-//////////////////////////////////////////////////////////////////////////
-
- /*! This text is generated when the \\author command is used and
- * for the author section in man pages. */
- virtual QCString trAuthor(bool first_capital, bool singular)
- {
- QCString result((first_capital ? "Tác giả" : "tác giả"));
- if (!singular) result+="";
- return result;
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.2.11
-//////////////////////////////////////////////////////////////////////////
-
- /*! This text is put before the list of members referenced by a member
- */
- virtual QCString trReferences()
- {
- return "Tham chiếu";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.2.13
-//////////////////////////////////////////////////////////////////////////
-
- /*! used in member documentation blocks to produce a list of
- * members that are implemented by this one.
- */
- virtual QCString trImplementedFromList(int numEntries)
- {
- return "Thực hiện "+trWriteList(numEntries)+".";
- }
-
- /*! used in member documentation blocks to produce a list of
- * all members that implement this abstract member.
- */
- virtual QCString trImplementedInList(int numEntries)
- {
- return "Äược thá»±c hiện trong "+trWriteList(numEntries)+".";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.2.16
-//////////////////////////////////////////////////////////////////////////
-
- /*! used in RTF documentation as a heading for the Table
- * of Contents.
- */
- virtual QCString trRTFTableOfContents()
- {
- return "Mục lục";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.2.17
-//////////////////////////////////////////////////////////////////////////
-
- /*! Used as the header of the list of item that have been
- * flagged deprecated
- */
- virtual QCString trDeprecatedList()
- {
- return "Danh sách Deprecated";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.2.18
-//////////////////////////////////////////////////////////////////////////
-
- /*! Used as a header for declaration section of the events found in
- * a C# program
- */
- virtual QCString trEvents()
- {
- return "Sự kiện";
- }
- /*! Header used for the documentation section of a class' events. */
- virtual QCString trEventDocumentation()
- {
- return "Thông tin vỠsự kiện";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.3
-//////////////////////////////////////////////////////////////////////////
-
- /*! Used as a heading for a list of Java class types with package scope.
- */
- virtual QCString trPackageTypes()
- {
- return "Kiểu gói";
- }
- /*! Used as a heading for a list of Java class functions with package
- * scope.
- */
- virtual QCString trPackageMembers()
- {
- return "Các hàm Package";
- }
- /*! Used as a heading for a list of static Java class functions with
- * package scope.
- */
- virtual QCString trStaticPackageMembers()
- {
- return "Các hàm Static Package";
- }
- /*! Used as a heading for a list of Java class variables with package
- * scope.
- */
- virtual QCString trPackageAttribs()
- {
- return "Các thuộc tính Package";
- }
- /*! Used as a heading for a list of static Java class variables with
- * package scope.
- */
- virtual QCString trStaticPackageAttribs()
- {
- return "Các thuộc tính Static Package";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.3.1
-//////////////////////////////////////////////////////////////////////////
-
- /*! Used in the quick index of a class/file/namespace member list page
- * to link to the unfiltered list of all members.
- */
- virtual QCString trAll()
- {
- return "Tất cả";
- }
- /*! Put in front of the call graph for a function. */
- virtual QCString trCallGraph()
- {
- return "Biểu đồ các lá»i gá»i cho hàm này:";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.3.3
-//////////////////////////////////////////////////////////////////////////
-
- /*! When the search engine is enabled this text is put in the header
- * of each page before the field where one can enter the text to search
- * for.
- */
- virtual QCString trSearchForIndex()
- {
- return "Tìm kiếm cho";
- }
- /*! This string is used as the title for the page listing the search
- * results.
- */
- virtual QCString trSearchResultsTitle()
- {
- return "Kết quả tìm kiếm";
- }
- /*! This string is put just before listing the search results. The
- * text can be different depending on the number of documents found.
- * Inside the text you can put the special marker $num to insert
- * the number representing the actual number of search results.
- * The @a numDocuments parameter can be either 0, 1 or 2, where the
- * value 2 represents 2 or more matches. HTML markup is allowed inside
- * the returned string.
- */
- virtual QCString trSearchResults(int numDocuments)
- {
- if (numDocuments==0)
- {
- return "Không có tài liệu nào thá»a mãn các truy vấn của bạn.";
- }
- else if (numDocuments==1)
- {
- return "Tìm thấy <b>1</b> tài liệu thá»a mã truy vấn của bạn.";
- }
- else
- {
- return "Tìm thấy tất cả <b>$num</b> tài liệu thá»a mã truy vấn của bạn. "
- "Hiển thị những thá»a mãn tốt nhất trÆ°á»›c.";
- }
- }
- /*! This string is put before the list of matched words, for each search
- * result. What follows is the list of words that matched the query.
- */
- virtual QCString trSearchMatches()
- {
- return "Các kết quả thá»a mãn Ä‘k:";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.3.8
-//////////////////////////////////////////////////////////////////////////
-
- /*! This is used in HTML as the title of page with source code for file filename
- */
- virtual QCString trSourceFile(QCString& filename)
- {
- return filename + " File nguồn";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.3.9
-//////////////////////////////////////////////////////////////////////////
-
- /*! This is used as the name of the chapter containing the directory
- * hierarchy.
- */
- virtual QCString trDirIndex()
- { return "Cấu trúc thư mục"; }
-
- /*! This is used as the name of the chapter containing the documentation
- * of the directories.
- */
- virtual QCString trDirDocumentation()
- { return "Thông tin vỠthư mục"; }
-
- /*! This is used as the title of the directory index and also in the
- * Quick links of an HTML page, to link to the directory hierarchy.
- */
- virtual QCString trDirectories()
- { return "Các thư mục"; }
-
- /*! This returns a sentences that introduces the directory hierarchy.
- * and the fact that it is sorted alphabetically per level
- */
- virtual QCString trDirDescription()
- { return "Thư mục đã được sắp xếp theo al-pha-bê, "
- "nhưng chưa đầy đủ:";
- }
-
- /*! This returns the title of a directory page. The name of the
- * directory is passed via \a dirName.
- */
- virtual QCString trDirReference(const char *dirName)
- { QCString result=dirName; result+=" Tham chiếu thư mục"; return result; }
-
- /*! This returns the word directory with or without starting capital
- * (\a first_capital) and in sigular or plural form (\a singular).
- */
- virtual QCString trDir(bool first_capital, bool singular)
- {
- QCString result((first_capital ? "Thư mục" : "thư mục"));
- if (singular) result+=""; else result+="";
- return result;
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.4.1
-//////////////////////////////////////////////////////////////////////////
-
- /*! This text is added to the documentation when the \\overload command
- * is used for a overloaded function.
- */
- virtual QCString trOverloadText()
- {
- return "Hàm thành viên dạng overloaded, "
- "được chỉ ra cho việc tra cứu dễ dàng. Nó khác với hàm ở trên"
- "chỉ ở chỗ những tham số nào nó chấp nhận.";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.4.6
-//////////////////////////////////////////////////////////////////////////
-
- /*! This is used to introduce a caller (or called-by) graph */
- virtual QCString trCallerGraph()
- {
- return "Biểu đồ các lá»i gá»i cho hàm này:";
- }
-
- /*! This is used in the documentation of a file/namespace before the list
- * of documentation blocks for enumeration values
- */
- virtual QCString trEnumerationValueDocumentation()
- { return "Thông tin Enumerator"; }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.5.4 (mainly for Fortran)
-//////////////////////////////////////////////////////////////////////////
-
- /*! header that is put before the list of member subprograms (Fortran). */
- virtual QCString trMemberFunctionDocumentationFortran()
- { return "Thông tin vỠcác hàm và các thủ tục thành viên"; }
-
- /*! This is put above each page as a link to the list of annotated data types (Fortran). */
- virtual QCString trCompoundListFortran()
- { return "Danh sách kiêu dữ liệu"; }
-
- /*! This is put above each page as a link to all members of compounds (Fortran). */
- virtual QCString trCompoundMembersFortran()
- { return "TrÆ°á»ng dữ liệu"; }
-
- /*! This is an introduction to the annotated compound list (Fortran). */
- virtual QCString trCompoundListDescriptionFortran()
- { return "Kiểu dữ liệu với các mô tả tóm tắt:"; }
-
- /*! This is an introduction to the page with all data types (Fortran). */
- virtual QCString trCompoundMembersDescriptionFortran(bool extractAll)
- {
- QCString result="Danh sách tất cả ";
- if (!extractAll)
- {
- result+="(đã được mô tả) ";
- }
- result+="các kiểu dữ liệu thành viên";
- result+=" cùng với liên kết với ";
- if (!extractAll)
- {
- result+="Thông tin cấu trúc dữ liệu cho từng thành viên";
- }
- else
- {
- result+=" các kiểu dữ liệu thuộc:";
- }
- return result;
- }
-
- /*! This is used in LaTeX as the title of the chapter with the
- * annotated compound index (Fortran).
- */
- virtual QCString trCompoundIndexFortran()
- { return "Chỉ mục kiểu dữ liệu"; }
-
- /*! This is used in LaTeX as the title of the chapter containing
- * the documentation of all data types (Fortran).
- */
- virtual QCString trTypeDocumentation()
- { return "Thông tin vỠkiểu dữ liệu"; }
-
- /*! This is used in the documentation of a file as a header before the
- * list of (global) subprograms (Fortran).
- */
- virtual QCString trSubprograms()
- { return "Functions/Subroutines"; }
-
- /*! This is used in the documentation of a file/namespace before the list
- * of documentation blocks for subprograms (Fortran)
- */
- virtual QCString trSubprogramDocumentation()
- { return "Thông tin vỠFunction/Subroutine"; }
-
- /*! This is used in the documentation of a file/namespace/group before
- * the list of links to documented compounds (Fortran)
- */
- virtual QCString trDataTypes()
- { return "Kiểu dữ liệu"; }
-
- /*! used as the title of page containing all the index of all modules (Fortran). */
- virtual QCString trModulesList()
- { return "Danh sách Modules"; }
-
- /*! used as an introduction to the modules list (Fortran) */
- virtual QCString trModulesListDescription(bool extractAll)
- {
- QCString result="Danh sách tất cả ";
- if (!extractAll) result+="(đã được mô tả) ";
- result+="các module với mô tả tóm tắt:";
- return result;
- }
-
- /*! used as the title of the HTML page of a module/type (Fortran) */
- virtual QCString trCompoundReferenceFortran(const char *clName,
- ClassDef::CompoundType compType,
- bool isTemplate)
- {
- QCString result=(QCString)clName;
- switch(compType)
- {
- case ClassDef::Class: result+=" Module"; break;
- case ClassDef::Struct: result+=" Type"; break;
- case ClassDef::Union: result+=" Union"; break;
- case ClassDef::Interface: result+=" Interface"; break;
- case ClassDef::Protocol: result+=" Protocol"; break;
- case ClassDef::Category: result+=" Category"; break;
- case ClassDef::Exception: result+=" Exception"; break;
- }
- if (isTemplate) result+=" Template";
- result+=" Tham chiếu";
- return result;
- }
- /*! used as the title of the HTML page of a module (Fortran) */
- virtual QCString trModuleReference(const char *namespaceName)
- {
- QCString result=namespaceName;
- result+=" Tham chiếu Module";
- return result;
- }
-
- /*! This is put above each page as a link to all members of modules. (Fortran) */
- virtual QCString trModulesMembers()
- { return "Thành viên Module"; }
-
- /*! This is an introduction to the page with all modules members (Fortran) */
- virtual QCString trModulesMemberDescription(bool extractAll)
- {
- QCString result="Danh sách tất cả ";
- if (!extractAll) result+="(đã được mô tả) ";
- result+="các module thành viên cùng với liên kết tới ";
- if (extractAll)
- {
- result+="Thông tin module cho từng thành viên:";
- }
- else
- {
- result+="các module thuộc:";
- }
- return result;
- }
-
- /*! This is used in LaTeX as the title of the chapter with the
- * index of all modules (Fortran).
- */
- virtual QCString trModulesIndex()
- { return "Chỉ mục các Module"; }
-
- /*! This is used for translation of the word that will possibly
- * be followed by a single name or by a list of names
- * of the category.
- */
- virtual QCString trModule(bool first_capital, bool singular)
- {
- QCString result((first_capital ? "Module" : "module"));
- if (!singular) result+="";
- return result;
- }
- /*! This is put at the bottom of a module documentation page and is
- * followed by a list of files that were used to generate the page.
- */
- virtual QCString trGeneratedFromFilesFortran(ClassDef::CompoundType compType,
- bool single)
- { // here s is one of " Module", " Struct" or " Union"
- // single is true implies a single file
- QCString result=(QCString)"Thông tin cho ";
- switch(compType)
- {
- case ClassDef::Class: result+="module"; break;
- case ClassDef::Struct: result+="type"; break;
- case ClassDef::Union: result+="union"; break;
- case ClassDef::Interface: result+="interface"; break;
- case ClassDef::Protocol: result+="protocol"; break;
- case ClassDef::Category: result+="category"; break;
- case ClassDef::Exception: result+="exception"; break;
- }
- result+=" được biên soạn từ các file sau đây";
- if (single) result+=":"; else result+="s:";
- return result;
- }
- /*! This is used for translation of the word that will possibly
- * be followed by a single name or by a list of names
- * of the category.
- */
- virtual QCString trType(bool first_capital, bool singular)
- {
- QCString result((first_capital ? "Kiểu" : "kiểu"));
- if (!singular) result+="";
- return result;
- }
- /*! This is used for translation of the word that will possibly
- * be followed by a single name or by a list of names
- * of the category.
- */
- virtual QCString trSubprogram(bool first_capital, bool singular)
- {
- QCString result((first_capital ? "Chương trình con" : "chương trình con"));
- if (!singular) result+="";
- return result;
- }
-
- /*! C# Type Constraint list */
- virtual QCString trTypeConstraints()
- {
- return "Ràng buộc của kiểu (Type)";
- }
-
-};
-
-#endif
diff --git a/trunk/src/translator_za.h b/trunk/src/translator_za.h
deleted file mode 100644
index 46f5a05..0000000
--- a/trunk/src/translator_za.h
+++ /dev/null
@@ -1,1767 +0,0 @@
-/******************************************************************************
- *
- *
- *
- * Copyright (C) 1997-2012 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.
- *
- */
-
- /*
- * Bronne vir hierdie vertaling (Sources for this translation):
- * Die Stigting vir Afrikaans se rekenaartermelys:
- * - http://www.afrikaans.com/rekenaarterme.html
- * Werkgroep vir Afrikaanse IT-terme:
- * - http://www.vertaal.org/index.html
- */
-
-#ifndef TRANSLATOR_ZA_H
-#define TRANSLATOR_ZA_H
-
-class TranslatorAfrikaans : public TranslatorAdapter_1_6_0
-{
- public:
-
- // --- Language control methods -------------------
-
- /*! Used for identification of the language. The identification
- * should not be translated. It should be replaced by the name
- * of the language in English using lower-case characters only
- * (e.g. "czech", "japanese", "russian", etc.). It should be equal to
- * the identification used in language.cpp.
- */
- virtual QCString idLanguage()
- { return "afrikaans"; }
-
- /*! Used to get the LaTeX command(s) for the language support.
- * This method should return string with commands that switch
- * LaTeX to the desired language. For example
- * <pre>"\\usepackage[german]{babel}\n"
- * </pre>
- * or
- * <pre>"\\usepackage{polski}\n"
- * "\\usepackage[latin2]{inputenc}\n"
- * "\\usepackage[T1]{fontenc}\n"
- * </pre>
- *
- * The Afrikaans LaTeX does not use such commands. Because of this
- * the empty string is returned in this implementation.
- */
- virtual QCString latexLanguageSupportCommand()
- {
- //should we use return "\\usepackage[afrikaans]{babel}\n";
- // not sure - for now return an empty string
- return "";
- }
-
- /*! return the language charset. This will be used for the HTML output */
- virtual QCString idLanguageCharset()
- {
- return "iso-8859-1";
- }
-
- // --- Language translation methods -------------------
-
- /*! used in the compound documentation before a list of related functions. */
- virtual QCString trRelatedFunctions()
- { return "Verwante Funksies"; }
-
- /*! subscript for the related functions. */
- virtual QCString trRelatedSubscript()
- { return "(Let daarop dat hierdie nie lede funksies is nie.)"; }
-
- /*! header that is put before the detailed description of files, classes and namespaces. */
- virtual QCString trDetailedDescription()
- { return "Detail Beskrywing"; }
-
- /*! header that is put before the list of typedefs. */
- virtual QCString trMemberTypedefDocumentation()
- { return "Lede Typedef Dokumentasie"; }
-
- /*! header that is put before the list of enumerations. */
- virtual QCString trMemberEnumerationDocumentation()
- { return "Lede Enumerasie Dokumentasie"; }
-
- /*! header that is put before the list of member functions. */
- virtual QCString trMemberFunctionDocumentation()
- { return "Lede Funksie Dokumentasie"; }
-
- /*! header that is put before the list of member attributes. */
- virtual QCString trMemberDataDocumentation()
- {
- if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
- {
- return "Veld Dokumentasie";
- }
- else
- {
- return "Lede Data Dokumentasie";
- }
- }
-
- /*! this is the text of a link put after brief descriptions. */
- virtual QCString trMore()
- { return "Meer detail..."; }
-
- /*! put in the class documentation */
- virtual QCString trListOfAllMembers()
- { return "Lys van alle lede."; }
-
- /*! used as the title of the "list of all members" page of a class */
- virtual QCString trMemberList()
- { return "Lede Lys"; }
-
- /*! this is the first part of a sentence that is followed by a class name */
- virtual QCString trThisIsTheListOfAllMembers()
- { return "Hierdie is 'n volledige lys van lede vir "; }
-
- /*! this is the remainder of the sentence after the class name */
- virtual QCString trIncludingInheritedMembers()
- { return ", insluitend alle afgeleide lede."; }
-
- /*! this is put at the author sections at the bottom of man pages.
- * parameter s is name of the project name.
- */
- virtual QCString trGeneratedAutomatically(const char *s)
- { QCString result="Automaties gegenereer deur Doxygen";
- if (s) result+=(QCString)" vir "+s;
- result+=" van die bron kode af.";
- return result;
- }
-
- /*! put after an enum name in the list of all members */
- virtual QCString trEnumName()
- { return "enum naam"; }
-
- /*! put after an enum value in the list of all members */
- virtual QCString trEnumValue()
- { return "enum waarde"; }
-
- /*! put after an undocumented member in the list of all members */
- virtual QCString trDefinedIn()
- { return "gedefinie&euml;r in"; }
-
- // quick reference sections
-
- /*! This is put above each page as a link to the list of all groups of
- * compounds or files (see the \\group command).
- */
- virtual QCString trModules()
- { return "Modules"; }
-
- /*! This is put above each page as a link to the class hierarchy */
- virtual QCString trClassHierarchy()
- { return "Klas Hierargie"; }
-
- /*! This is put above each page as a link to the list of annotated classes */
- virtual QCString trCompoundList()
- {
- if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
- {
- return "Data Strukture";
- }
- else
- {
- return "Klas Lys";
- }
- }
-
- /*! This is put above each page as a link to the list of documented files */
- virtual QCString trFileList()
- { return "Le&euml;r Lys"; }
-
- /*! This is put above each page as a link to all members of compounds. */
- virtual QCString trCompoundMembers()
- {
- if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
- {
- return "Data Velde";
- }
- else
- {
- return "Klas Lede";
- }
- }
-
- /*! This is put above each page as a link to all members of files. */
- virtual QCString trFileMembers()
- {
- if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
- {
- return "Globals";
- }
- else
- {
- return "Le&euml;r Lede";
- }
- }
-
- /*! This is put above each page as a link to all related pages. */
- virtual QCString trRelatedPages()
- { return "Verwante Bladsye"; }
-
- /*! This is put above each page as a link to all examples. */
- virtual QCString trExamples()
- { return "Voorbeelde"; }
-
- /*! This is put above each page as a link to the search engine. */
- virtual QCString trSearch()
- { return "Soek"; }
-
- /*! This is an introduction to the class hierarchy. */
- virtual QCString trClassHierarchyDescription()
- {
- return "Hierdie afgeleide lys word rofweg gesorteer: ";
- }
-
- /*! This is an introduction to the list with all files. */
- virtual QCString trFileListDescription(bool extractAll)
- {
- QCString result="Hier is 'n lys van alle ";
- if (!extractAll) result+="gedokumenteerde ";
- result+="le&euml;rs met kort beskrywings:";
- return result;
- }
-
- /*! This is an introduction to the annotated compound list. */
- virtual QCString trCompoundListDescription()
- {
-
- if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
- {
- return " Data strukture met kort beskrywings:";
- }
- else
- {
- return "Klasse, structs, "
- "unions en intervlakke met kort beskrywings:";
- }
- }
-
- /*! This is an introduction to the page with all class members. */
- virtual QCString trCompoundMembersDescription(bool extractAll)
- {
- QCString result="'n Lys van alle ";
- if (!extractAll)
- {
- result+="gedokumenteerde ";
- }
- if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
- {
- result+="struct en union velde";
- }
- else
- {
- result+="klas lede";
- }
- result+=" met skakels na ";
- if (!extractAll)
- {
- if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
- {
- result+="die struct/union dokumentasie vir elke veld:";
- }
- else
- {
- result+="die klas dokumentasie vir elke lid:";
- }
- }
- else
- {
- if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
- {
- result+="die structures/unions waaraan hulle behoort:";
- }
- else
- {
- result+="die klasse waaraan hulle behoort:";
- }
- }
- return result;
- }
-
- /*! This is an introduction to the page with all file members. */
- virtual QCString trFileMembersDescription(bool extractAll)
- {
- QCString result="'n Lys van alle ";
- if (!extractAll) result+="gedokumenteerde ";
-
- if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
- {
- result+="funksies, veranderlikes, defines, enums, en typedefs";
- }
- else
- {
- result+="le&euml;r lede";
- }
- result+=" met skakels na ";
- if (extractAll)
- result+="die le&euml;rs waaraan hulle behoort:";
- else
- result+="die dokumentasie:";
- return result;
- }
-
- /*! This is an introduction to the page with the list of all examples */
- virtual QCString trExamplesDescription()
- { return "'n Lys van alle voorbeelde:"; }
-
- /*! This is an introduction to the page with the list of related pages */
- virtual QCString trRelatedPagesDescription()
- { return "'n Lys van alle verwante dokumentasie:"; }
-
- /*! This is an introduction to the page with the list of class/file groups */
- virtual QCString trModulesDescription()
- { return "'n Lys van alle modules:"; }
-
- /*! This is used in HTML as the title of index.html. */
- virtual QCString trDocumentation()
- { return "Dokumentasie"; }
-
- /*! This is used in LaTeX as the title of the chapter with the
- * index of all groups.
- */
- virtual QCString trModuleIndex()
- { return "Module Indeks"; }
-
- /*! This is used in LaTeX as the title of the chapter with the
- * class hierarchy.
- */
- virtual QCString trHierarchicalIndex()
- { return "Hierargiese Indeks"; }
-
- /*! This is used in LaTeX as the title of the chapter with the
- * annotated compound index.
- */
- virtual QCString trCompoundIndex()
- {
- if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
- {
- return "Data Strukture Indeks";
- }
- else
- {
- return "Klas Indeks";
- }
- }
-
- /*! This is used in LaTeX as the title of the chapter with the
- * list of all files.
- */
- virtual QCString trFileIndex()
- { return "Le&euml;r Indeks"; }
-
- /*! This is used in LaTeX as the title of the chapter containing
- * the documentation of all groups.
- */
- virtual QCString trModuleDocumentation()
- { return "Module Dokumentasie"; }
-
- /*! This is used in LaTeX as the title of the chapter containing
- * the documentation of all classes, structs and unions.
- */
- virtual QCString trClassDocumentation()
- {
- if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
- {
- return "Data Strukture Dokumentasie";
- }
- else
- {
- return "Klas Dokumentasie";
- }
- }
-
- /*! This is used in LaTeX as the title of the chapter containing
- * the documentation of all files.
- */
- virtual QCString trFileDocumentation()
- { return "Le&euml;r Dokumentasie"; }
-
- /*! This is used in LaTeX as the title of the chapter containing
- * the documentation of all examples.
- */
- virtual QCString trExampleDocumentation()
- { return "Voorbeeld Dokumentasie"; }
-
- /*! This is used in LaTeX as the title of the chapter containing
- * the documentation of all related pages.
- */
- virtual QCString trPageDocumentation()
- { return "Bladsy Dokumentasie"; }
-
- /*! This is used in LaTeX as the title of the document */
- virtual QCString trReferenceManual()
- { return "Verwysings Handleiding"; }
-
- /*! This is used in the documentation of a file as a header before the
- * list of defines
- */
- virtual QCString trDefines()
- { return "Definiesies"; }
-
- /*! This is used in the documentation of a file as a header before the
- * list of function prototypes
- */
- virtual QCString trFuncProtos()
- { return "Funksie Prototipes"; }
-
- /*! This is used in the documentation of a file as a header before the
- * list of typedefs
- */
- virtual QCString trTypedefs()
- { return "Typedefs"; }
-
- /*! This is used in the documentation of a file as a header before the
- * list of enumerations
- */
- virtual QCString trEnumerations()
- { return "Enumerations"; }
-
- /*! This is used in the documentation of a file as a header before the
- * list of (global) functions
- */
- virtual QCString trFunctions()
- { return "Funksies"; }
-
- /*! This is used in the documentation of a file as a header before the
- * list of (global) variables
- */
- virtual QCString trVariables()
- { return "Veranderlikes"; }
-
- /*! This is used in the documentation of a file as a header before the
- * list of (global) variables
- */
- virtual QCString trEnumerationValues()
- { return "Enumeration waardes"; }
-
- /*! This is used in the documentation of a file before the list of
- * documentation blocks for defines
- */
- virtual QCString trDefineDocumentation()
- { return "Define Documentation"; }
-
- /*! This is used in the documentation of a file/namespace before the list
- * of documentation blocks for function prototypes
- */
- virtual QCString trFunctionPrototypeDocumentation()
- { return "Funksie Prototipe Dokumentasie"; }
-
- /*! This is used in the documentation of a file/namespace before the list
- * of documentation blocks for typedefs
- */
- virtual QCString trTypedefDocumentation()
- { return "Typedef Dokumentasie"; }
-
- /*! This is used in the documentation of a file/namespace before the list
- * of documentation blocks for enumeration types
- */
- virtual QCString trEnumerationTypeDocumentation()
- { return "Enumeration Type Dokumentasie"; }
-
- /*! This is used in the documentation of a file/namespace before the list
- * of documentation blocks for functions
- */
- virtual QCString trFunctionDocumentation()
- { return "Funksie Dokumentasie"; }
-
- /*! This is used in the documentation of a file/namespace before the list
- * of documentation blocks for variables
- */
- virtual QCString trVariableDocumentation()
- { return "Veranderlike Dokumentasie"; }
-
- /*! This is used in the documentation of a file/namespace/group before
- * the list of links to documented compounds
- */
- virtual QCString trCompounds()
- {
- if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
- {
- return "Data Strukture";
- }
- else
- {
- return "Klasse";
- }
- }
-
- /*! This is used in the standard footer of each page and indicates when
- * the page was generated
- */
- virtual QCString trGeneratedAt(const char *date,const char *projName)
- {
- QCString result=(QCString)"Gegenereer op "+date;
- if (projName) result+=(QCString)" vir "+projName;
- result+=(QCString)" deur";
- return result;
- }
- /*! This is part of the sentence used in the standard footer of each page.
- */
- virtual QCString trWrittenBy()
- {
- return "geskryf deur";
- }
-
- /*! this text is put before a class diagram */
- virtual QCString trClassDiagram(const char *clName)
- {
- return (QCString)"Afleidings diagram vir "+clName+":";
- }
-
- /*! this text is generated when the \\internal command is used. */
- virtual QCString trForInternalUseOnly()
- { return "Slegs vir interne gebruik."; }
-
- /*! this text is generated when the \\warning command is used. */
- virtual QCString trWarning()
- { return "Waarskuwing"; }
-
- /*! this text is generated when the \\version command is used. */
- virtual QCString trVersion()
- { return "Weergawe"; }
-
- /*! this text is generated when the \\date command is used. */
- virtual QCString trDate()
- { return "Datum"; }
-
- /*! this text is generated when the \\return command is used. */
- virtual QCString trReturns()
- { return "Returns"; }
-
- /*! this text is generated when the \\sa command is used. */
- virtual QCString trSeeAlso()
- { return "Sien ook"; }
-
- /*! this text is generated when the \\param command is used. */
- virtual QCString trParameters()
- { return "Parameters"; }
-
- /*! this text is generated when the \\exception command is used. */
- virtual QCString trExceptions()
- { return "Exceptions"; }
-
- /*! this text is used in the title page of a LaTeX document. */
- virtual QCString trGeneratedBy()
- { return "Gegenereer deur"; }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 0.49-990307
-//////////////////////////////////////////////////////////////////////////
-
- /*! used as the title of page containing all the index of all namespaces. */
- virtual QCString trNamespaceList()
- { return "Namespace Lys"; }
-
- /*! used as an introduction to the namespace list */
- virtual QCString trNamespaceListDescription(bool extractAll)
- {
- QCString result="'n Lys van alle ";
- if (!extractAll) result+="gedokumenteerde ";
- result+="namespaces met kort beskrywings:";
- return result;
- }
-
- /*! used in the class documentation as a header before the list of all
- * friends of a class
- */
- virtual QCString trFriends()
- { return "Friends"; }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 0.49-990405
-//////////////////////////////////////////////////////////////////////////
-
- /*! used in the class documentation as a header before the list of all
- * related classes
- */
- virtual QCString trRelatedFunctionDocumentation()
- { return "Friends En Verwante Funksie Dokumentasie"; }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 0.49-990425
-//////////////////////////////////////////////////////////////////////////
-
- /*! used as the title of the HTML page of a class/struct/union */
- virtual QCString trCompoundReference(const char *clName,
- ClassDef::CompoundType compType,
- bool isTemplate)
- {
- QCString result=(QCString)clName;
- switch(compType)
- {
- case ClassDef::Class: result+=" klas"; break;
- case ClassDef::Struct: result+=" Struct"; break;
- case ClassDef::Union: result+=" Union"; break;
- case ClassDef::Interface: result+=" Intervlak"; break;
- case ClassDef::Protocol: result+=" Protocol"; break;
- case ClassDef::Category: result+=" Kategorie"; break;
- case ClassDef::Exception: result+=" Exception"; break;
- }
- if (isTemplate) result+=" Template";
- result+=" Verwysing";
- return result;
- }
-
- /*! used as the title of the HTML page of a file */
- virtual QCString trFileReference(const char *fileName)
- {
- QCString result=fileName;
- result+=" Le&euml;r Verwysing";
- return result;
- }
-
- /*! used as the title of the HTML page of a namespace */
- virtual QCString trNamespaceReference(const char *namespaceName)
- {
- QCString result=namespaceName;
- result+=" Namespace Verwysing";
- return result;
- }
-
- virtual QCString trPublicMembers()
- { return "Publieke Lede Funksies"; }
- virtual QCString trPublicSlots()
- { return "Publieke Slots"; }
- virtual QCString trSignals()
- { return "Signals"; }
- virtual QCString trStaticPublicMembers()
- { return "Statiese Publieke Lede Funksies"; }
- virtual QCString trProtectedMembers()
- { return "Beskermde Lede Funksies"; }
- virtual QCString trProtectedSlots()
- { return "Beskermde Slots"; }
- virtual QCString trStaticProtectedMembers()
- { return "Statiese Beskermde Lede Funksies"; }
- virtual QCString trPrivateMembers()
- { return "Private Lede Funksies"; }
- virtual QCString trPrivateSlots()
- { return "Private Slots"; }
- virtual QCString trStaticPrivateMembers()
- { return "Statiese Private Lede Funksies"; }
-
- /*! this function is used to produce a comma-separated list of items.
- * use generateMarker(i) to indicate where item i should be put.
- */
- virtual QCString trWriteList(int numEntries)
- {
- QCString result;
- int i;
- // the inherits list contain `numEntries' classes
- for (i=0;i<numEntries;i++)
- {
- // use generateMarker to generate placeholders for the class links!
- result+=generateMarker(i); // generate marker for entry i in the list
- // (order is left to right)
-
- if (i!=numEntries-1) // not the last entry, so we need a separator
- {
- if (i<numEntries-2) // not the fore last entry
- result+=", ";
- else // the fore last entry
- result+=", en ";
- }
- }
- return result;
- }
-
- /*! used in class documentation to produce a list of base classes,
- * if class diagrams are disabled.
- */
- virtual QCString trInheritsList(int numEntries)
- {
- return "Afgelei van"+trWriteList(numEntries)+".";
- }
-
- /*! used in class documentation to produce a list of super classes,
- * if class diagrams are disabled.
- */
- virtual QCString trInheritedByList(int numEntries)
- {
- return "Afgelei van"+trWriteList(numEntries)+".";
- }
-
- /*! used in member documentation blocks to produce a list of
- * members that are hidden by this one.
- */
- virtual QCString trReimplementedFromList(int numEntries)
- {
- return "Hergeimplimenteer van "+trWriteList(numEntries)+".";
- }
-
- /*! used in member documentation blocks to produce a list of
- * all member that overwrite the implementation of this member.
- */
- virtual QCString trReimplementedInList(int numEntries)
- {
- return "Hergeimplimenter in "+trWriteList(numEntries)+".";
- }
-
- /*! This is put above each page as a link to all members of namespaces. */
- virtual QCString trNamespaceMembers()
- { return "Namespace Lede"; }
-
- /*! This is an introduction to the page with all namespace members */
- virtual QCString trNamespaceMemberDescription(bool extractAll)
- {
- QCString result="'n Lys van alle ";
- if (!extractAll) result+="gedokumenteerde ";
- result+="namespace lede met skakels na ";
- if (extractAll)
- result+="die namespace dokumentasie vir elke lid:";
- else
- result+="die namespaces waaraan hulle behoort:";
- return result;
- }
- /*! This is used in LaTeX as the title of the chapter with the
- * index of all namespaces.
- */
- virtual QCString trNamespaceIndex()
- { return "Namespace Indeks"; }
-
- /*! This is used in LaTeX as the title of the chapter containing
- * the documentation of all namespaces.
- */
- virtual QCString trNamespaceDocumentation()
- { return "Namespace Dokumentasie"; }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 0.49-990522
-//////////////////////////////////////////////////////////////////////////
-
- /*! This is used in the documentation before the list of all
- * namespaces in a file.
- */
- virtual QCString trNamespaces()
- { return "Namespaces"; }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 0.49-990728
-//////////////////////////////////////////////////////////////////////////
-
- /*! This is put at the bottom of a class documentation page and is
- * followed by a list of files that were used to generate the page.
- */
- virtual QCString trGeneratedFromFiles(ClassDef::CompoundType compType,
- bool single)
- { // here s is one of " Class", " Struct" or " Union"
- // single is true implies a single file
- QCString result=(QCString)"Die dokumentasie vir hierdie ";
- switch(compType)
- {
- case ClassDef::Class: result+="klas"; break;
- case ClassDef::Struct: result+="struct"; break;
- case ClassDef::Union: result+="union"; break;
- case ClassDef::Interface: result+="intervlak"; break;
- case ClassDef::Protocol: result+="protokol"; break;
- case ClassDef::Category: result+="kategorie"; break;
- case ClassDef::Exception: result+="eksepsie"; break;
- }
- result+=" is gegenereer vanaf die volgende le&euml;r";
- if (single) result+=":"; else result+="s:";
- return result;
- }
-
- /*! This is in the (quick) index as a link to the alphabetical compound
- * list.
- */
- virtual QCString trAlphabeticalList()
- { return "Alfabetiese Lys"; }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 0.49-990901
-//////////////////////////////////////////////////////////////////////////
-
- /*! This is used as the heading text for the retval command. */
- virtual QCString trReturnValues()
- { return "Return waardes"; }
-
- /*! This is in the (quick) index as a link to the main page (index.html)
- */
- virtual QCString trMainPage()
- { return "Hoof Bladsy"; }
-
- /*! This is used in references to page that are put in the LaTeX
- * documentation. It should be an abbreviation of the word page.
- */
- virtual QCString trPageAbbreviation()
- { return "p."; }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 0.49-991003
-//////////////////////////////////////////////////////////////////////////
-
- virtual QCString trDefinedAtLineInSourceFile()
- {
- return "Gedefinie&euml;r by lyn @0 van le&euml;r @1.";
- }
- virtual QCString trDefinedInSourceFile()
- {
- return "Definisie in le&euml;r @0.";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 0.49-991205
-//////////////////////////////////////////////////////////////////////////
-
- virtual QCString trDeprecated()
- {
- return "Verouderd";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.0.0
-//////////////////////////////////////////////////////////////////////////
-
- /*! this text is put before a collaboration diagram */
- virtual QCString trCollaborationDiagram(const char *clName)
- {
- return (QCString)"Samewerkings diagram vir "+clName+":";
- }
- /*! this text is put before an include dependency graph */
- virtual QCString trInclDepGraph(const char *fName)
- {
- return (QCString)"Insluitings afhanklikheid diagram vir "+fName+":";
- }
- /*! header that is put before the list of constructor/destructors. */
- virtual QCString trConstructorDocumentation()
- {
- return "Konstruktor & Destruktor Dokumentasie";
- }
- /*! Used in the file documentation to point to the corresponding sources. */
- virtual QCString trGotoSourceCode()
- {
- return "Skakel na die bron kode van hierdie le&euml;r.";
- }
- /*! Used in the file sources to point to the corresponding documentation. */
- virtual QCString trGotoDocumentation()
- {
- return "Skakel na die dokumentasie van hierdie le&euml;r.";
- }
- /*! Text for the \\pre command */
- virtual QCString trPrecondition()
- {
- return "Prekondisie";
- }
- /*! Text for the \\post command */
- virtual QCString trPostcondition()
- {
- return "Postkondisie";
- }
- /*! Text for the \\invariant command */
- virtual QCString trInvariant()
- {
- return "Invariant";
- }
- /*! Text shown before a multi-line variable/enum initialization */
- virtual QCString trInitialValue()
- {
- return "Oorspronklike waarde:";
- }
- /*! Text used the source code in the file index */
- virtual QCString trCode()
- {
- return "kode";
- }
- virtual QCString trGraphicalHierarchy()
- {
- return "Grafiese Klasse Hierargie";
- }
- virtual QCString trGotoGraphicalHierarchy()
- {
- return "Skakel na die grafiese klasse hierargie";
- }
- virtual QCString trGotoTextualHierarchy()
- {
- return "Skakel na die teks klasse hierargie";
- }
- virtual QCString trPageIndex()
- {
- return "Bladsy Indeks";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.1.0
-//////////////////////////////////////////////////////////////////////////
-
- virtual QCString trNote()
- {
- return "Nota";
- }
- virtual QCString trPublicTypes()
- {
- return "Publieke Tipes";
- }
- virtual QCString trPublicAttribs()
- {
- if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
- {
- return "Data Velde";
- }
- else
- {
- return "Publieke Public Attributes";
- }
- }
- virtual QCString trStaticPublicAttribs()
- {
- return "Statiese Publieke Attribute";
- }
- virtual QCString trProtectedTypes()
- {
- return "Beskermde Tipes";
- }
- virtual QCString trProtectedAttribs()
- {
- return "Beskermde Attribute";
- }
- virtual QCString trStaticProtectedAttribs()
- {
- return "Statiese Beskermde Attribute";
- }
- virtual QCString trPrivateTypes()
- {
- return "Private Tipes";
- }
- virtual QCString trPrivateAttribs()
- {
- return "Private Attribute";
- }
- virtual QCString trStaticPrivateAttribs()
- {
- return "Statiese Private Attribute";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.1.3
-//////////////////////////////////////////////////////////////////////////
-
- /*! Used as a marker that is put before a \\todo item */
- virtual QCString trTodo()
- {
- return "Aksies";
- }
- /*! Used as the header of the todo list */
- virtual QCString trTodoList()
- {
- return "Aksie Lys";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.1.4
-//////////////////////////////////////////////////////////////////////////
-
- virtual QCString trReferencedBy()
- {
- return "Verwysing van";
- }
- virtual QCString trRemarks()
- {
- return "Opmerkings";
- }
- virtual QCString trAttention()
- {
- return "Aandag";
- }
- virtual QCString trInclByDepGraph()
- {
- return "Hierdie diagram verduidelik watter le&euml;rs direk of"
- "indirek hierdie le&euml;r insluit:";
- }
- virtual QCString trSince()
- {
- return "Sederd";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.1.5
-//////////////////////////////////////////////////////////////////////////
-
- /*! title of the graph legend page */
- virtual QCString trLegendTitle()
- {
- return "Diagram beskrywing";
- }
- /*! page explaining how the dot graph's should be interpreted
- * The %A in the text below are to prevent link to classes called "A".
- */
- virtual QCString trLegendDocs()
- {
- return
- "Hierdie bladsy beskryf die diagram konvensies wat gebruik word "
- "deur doxygen.<p>\n"
- "in hierdie voorbeeld:\n"
- "\\code\n"
- "/*! Onsigbare klas weens afkorting */\n"
- "class Invisible { };\n\n"
- "/*! Afgekorte klas, afgeleide verwantskap word versteek */\n"
- "class Truncated : public Invisible { };\n\n"
- "/* Ongedokumenteerde Klas, geen doxygen kommentaar nie */\n"
- "class Undocumented{ };\n\n"
- "/*! 'n Klas wat afgelei is met 'n publieke verwantskap */\n"
- "class PublicBase : public Truncated { };\n\n"
- "/*! 'n template klas */\n"
- "template<class T> class Templ { };\n\n"
- "/*! 'n Klas wat afgelei is met 'n beskermde verwantskap */\n"
- "class ProtectedBase { };\n\n"
- "/*! 'n Klas wat afgelei is met 'n private verwantskap */\n"
- "class PrivateBase { };\n\n"
- "/*! 'n Klas wat gebrui word deur die Afgeleide klas */\n"
- "class GebruikMy { };\n\n"
- "/*! 'n Super klas wat afgelei word van 'n aantal basis klasse */\n"
- "class Inherited : public PublicBase,\n"
- " protected ProtectedBase,\n"
- " private PrivateBase,\n"
- " public Ongedokumenteer,\n"
- " public Templ<int>\n"
- "{\n"
- " private:\n"
- " Used *m_usedClass;\n"
- "};\n"
- "\\endcode\n"
- "As die \\c MAX_DOT_GRAPH_HEIGHT merker in die konfigurasie le&euml;r "
- "aan 240 gelyk gestel is, word die volgende diagram geproduseer:"
- "<p><center><img alt=\"\" src=\"graph_legend."+Config_getEnum("DOT_IMAGE_FORMAT")+"\"></center>\n"
- "<p>\n"
- "Die reghoeke in die diagram het die volgende betekenis:\n"
- "<ul>\n"
- "<li>%'n Soliede swart reghoek verteenwoordig die klas waarvoor "
- "die diagram gegenereer is.\n"
- "<li>%'n Reghoek met 'n swart omlyning verteenwoordig 'n gedokumenteerde klas.\n"
- "<li>%'n Reghoek met 'n grys omlyning verteenwoordig 'n ongedokumenteerde klas.\n"
- "<li>%'n Reghoek met 'n rooi omlyning verteenwoordig 'n gedokumenteerde klas waarvoor"
- "alle verwante klasse (afgeleide of gebruik) nie getoon word nie. %'n Diagram word "
- "op hierie manier afgekort as dit nie in die gespesifiseerde raam pas nie.\n"
- "</ul>\n"
- "Die pyltjies het die volgende betekenis:\n"
- "<ul>\n"
- "<li>%'n Donker blou pyltjie verteenwoordig 'n publieke afgeleide "
- "verwantskap tussen twee klasse.\n"
- "<li>%'n Donker groen pyltjie word gebruik vir 'n beskermde verwantskap.\n"
- "<li>%'n Donker rooi pyltjie verteenwoordig private verwantskappe.\n"
- "<li>%'n Pers pyltjie word gebruik as 'n klas gebruik of bevat word "
- "deur 'n ander klas. Die pyltjie word gemerk met die veranderlike(s) waar deur "
- "die verwysde klass verkrygbaar is.\n"
- "<li>%'n Geel stippel pyl verteenwoordig die verwantslap tussen 'n template instansie en "
- "die template waarvan die klas vervaardig is. Die pyltjie word gemerk met die "
- "template parameters van die instansie.\n"
- "</ul>\n";
- }
- /*! text for the link to the legend page */
- virtual QCString trLegend()
- {
- return "beskrywing";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.2.0
-//////////////////////////////////////////////////////////////////////////
-
- /*! Used as a marker that is put before a test item */
- virtual QCString trTest()
- {
- return "Toets";
- }
- /*! Used as the header of the test list */
- virtual QCString trTestList()
- {
- return "Toets Lys";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.2.1
-//////////////////////////////////////////////////////////////////////////
-
- /*! Used as a section header for KDE-2 IDL methods */
- virtual QCString trDCOPMethods()
- {
- return "DCOP Lede Funksies";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.2.2
-//////////////////////////////////////////////////////////////////////////
-
- /*! Used as a section header for IDL properties */
- virtual QCString trProperties()
- {
- return "Eienskappe";
- }
- /*! Used as a section header for IDL property documentation */
- virtual QCString trPropertyDocumentation()
- {
- return "Eienskap Dokumentasie";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.2.4
-//////////////////////////////////////////////////////////////////////////
-
- /*! Used for Java classes in the summary section of Java packages */
- virtual QCString trClasses()
- {
- if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
- {
- return "Data Strukture";
- }
- else
- {
- return "Klasse";
- }
- }
- /*! Used as the title of a Java package */
- virtual QCString trPackage(const char *name)
- {
- return (QCString)"Pakket "+name;
- }
- /*! Title of the package index page */
- virtual QCString trPackageList()
- {
- return "Pakket Lys";
- }
- /*! The description of the package index page */
- virtual QCString trPackageListDescription()
- {
- return "Die pakkette met kort beskrywings (indien beskikbaar):";
- }
- /*! The link name in the Quick links header for each page */
- virtual QCString trPackages()
- {
- return "Pakkette";
- }
- /*! Text shown before a multi-line define */
- virtual QCString trDefineValue()
- {
- return "Waarde:";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.2.5
-//////////////////////////////////////////////////////////////////////////
-
- /*! Used as a marker that is put before a \\bug item */
- virtual QCString trBug()
- {
- return "Bug";
- }
- /*! Used as the header of the bug list */
- virtual QCString trBugList()
- {
- return "Bug Lys";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.2.6
-//////////////////////////////////////////////////////////////////////////
-
- /*! Used as ansicpg for RTF file
- *
- * The following table shows the correlation of Charset name, Charset Value and
- * <pre>
- * Codepage number:
- * Charset Name Charset Value(hex) Codepage number
- * ------------------------------------------------------
- * DEFAULT_CHARSET 1 (x01)
- * SYMBOL_CHARSET 2 (x02)
- * OEM_CHARSET 255 (xFF)
- * ANSI_CHARSET 0 (x00) 1252
- * RUSSIAN_CHARSET 204 (xCC) 1251
- * EE_CHARSET 238 (xEE) 1250
- * GREEK_CHARSET 161 (xA1) 1253
- * TURKISH_CHARSET 162 (xA2) 1254
- * BALTIC_CHARSET 186 (xBA) 1257
- * HEBREW_CHARSET 177 (xB1) 1255
- * ARABIC _CHARSET 178 (xB2) 1256
- * SHIFTJIS_CHARSET 128 (x80) 932
- * HANGEUL_CHARSET 129 (x81) 949
- * GB2313_CHARSET 134 (x86) 936
- * CHINESEBIG5_CHARSET 136 (x88) 950
- * </pre>
- *
- */
- virtual QCString trRTFansicp()
- {
- return "1252";
- }
-
-
- /*! Used as ansicpg for RTF fcharset
- * \see trRTFansicp() for a table of possible values.
- */
- virtual QCString trRTFCharSet()
- {
- return "0";
- }
-
- /*! Used as header RTF general index */
- virtual QCString trRTFGeneralIndex()
- {
- return "Indeks";
- }
-
- /*! This is used for translation of the word that will possibly
- * be followed by a single name or by a list of names
- * of the category.
- */
- virtual QCString trClass(bool first_capital, bool singular)
- {
- QCString result((first_capital ? "Klas" : "klas"));
- if (!singular) result+="se";
- return result;
- }
-
- /*! This is used for translation of the word that will possibly
- * be followed by a single name or by a list of names
- * of the category.
- */
- virtual QCString trFile(bool first_capital, bool singular)
- {
- QCString result((first_capital ? "Le&euml;r" : "le&euml;r"));
- if (!singular) result+="s";
- return result;
- }
-
- /*! This is used for translation of the word that will possibly
- * be followed by a single name or by a list of names
- * of the category.
- */
- virtual QCString trNamespace(bool first_capital, bool singular)
- {
- QCString result((first_capital ? "Namespace" : "namespace"));
- if (!singular) result+="s";
- return result;
- }
-
- /*! This is used for translation of the word that will possibly
- * be followed by a single name or by a list of names
- * of the category.
- */
- virtual QCString trGroup(bool first_capital, bool singular)
- {
- QCString result((first_capital ? "Groep" : "groep"));
- if (!singular) result+="e";
- return result;
- }
-
- /*! This is used for translation of the word that will possibly
- * be followed by a single name or by a list of names
- * of the category.
- */
- virtual QCString trPage(bool first_capital, bool singular)
- {
- QCString result((first_capital ? "Bladsy" : "bladsy"));
- if (!singular) result+="e";
- return result;
- }
-
- /*! This is used for translation of the word that will possibly
- * be followed by a single name or by a list of names
- * of the category.
- */
- virtual QCString trMember(bool first_capital, bool singular)
- {
- QCString result((first_capital ? "Lid" : "lid"));
- if (!singular) result = (first_capital ? "Lede" : "lede");
- return result;
- }
-
- /*! This is used for translation of the word that will possibly
- * be followed by a single name or by a list of names
- * of the category.
- */
- virtual QCString trGlobal(bool first_capital, bool singular)
- {
- QCString result((first_capital ? "Global" : "global"));
- if (!singular) result+="s";
- return result;
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.2.7
-//////////////////////////////////////////////////////////////////////////
-
- /*! This text is generated when the \\author command is used and
- * for the author section in man pages. */
- virtual QCString trAuthor(bool first_capital, bool singular)
- {
- QCString result((first_capital ? "Outeur" : "outeur"));
- if (!singular) result+="s";
- return result;
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.2.11
-//////////////////////////////////////////////////////////////////////////
-
- /*! This text is put before the list of members referenced by a member
- */
- virtual QCString trReferences()
- {
- return "Verwysings";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.2.13
-//////////////////////////////////////////////////////////////////////////
-
- /*! used in member documentation blocks to produce a list of
- * members that are implemented by this one.
- */
- virtual QCString trImplementedFromList(int numEntries)
- {
- return "Implimenteer "+trWriteList(numEntries)+".";
- }
-
- /*! used in member documentation blocks to produce a list of
- * all members that implement this abstract member.
- */
- virtual QCString trImplementedInList(int numEntries)
- {
- return "Geimplimenteer in "+trWriteList(numEntries)+".";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.2.16
-//////////////////////////////////////////////////////////////////////////
-
- /*! used in RTF documentation as a heading for the Table
- * of Contents.
- */
- virtual QCString trRTFTableOfContents()
- {
- return "Inhoudsopgawe";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.2.17
-//////////////////////////////////////////////////////////////////////////
-
- /*! Used as the header of the list of item that have been
- * flagged deprecated
- */
- virtual QCString trDeprecatedList()
- {
- return "Verouderde Lys";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.2.18
-//////////////////////////////////////////////////////////////////////////
-
- /*! Used as a header for declaration section of the events found in
- * a C# program
- */
- virtual QCString trEvents()
- {
- return "Events";
- }
- /*! Header used for the documentation section of a class' events. */
- virtual QCString trEventDocumentation()
- {
- return "Event Dokumentasie";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.3
-//////////////////////////////////////////////////////////////////////////
-
- /*! Used as a heading for a list of Java class types with package scope.
- */
- virtual QCString trPackageTypes()
- {
- return "Pakket Tipes";
- }
- /*! Used as a heading for a list of Java class functions with package
- * scope.
- */
- virtual QCString trPackageMembers()
- {
- return "Pakket Funksies";
- }
- /*! Used as a heading for a list of static Java class functions with
- * package scope.
- */
- virtual QCString trStaticPackageMembers()
- {
- return "Statiese Pakket Funksies";
- }
- /*! Used as a heading for a list of Java class variables with package
- * scope.
- */
- virtual QCString trPackageAttribs()
- {
- return "Pakket Eienskappe";
- }
- /*! Used as a heading for a list of static Java class variables with
- * package scope.
- */
- virtual QCString trStaticPackageAttribs()
- {
- return "Statiese Pakket Eienskappe";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.3.1
-//////////////////////////////////////////////////////////////////////////
-
- /*! Used in the quick index of a class/file/namespace member list page
- * to link to the unfiltered list of all members.
- */
- virtual QCString trAll()
- {
- return "Alle Lede";
- }
- /*! Put in front of the call graph for a function. */
- virtual QCString trCallGraph()
- {
- return "'n gebruiks diagram vir hierdie funksie:";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.3.3
-//////////////////////////////////////////////////////////////////////////
-
- /*! When the search engine is enabled this text is put in the header
- * of each page before the field where one can enter the text to search
- * for.
- */
- virtual QCString trSearchForIndex()
- {
- return "Soek vir";
- }
- /*! This string is used as the title for the page listing the search
- * results.
- */
- virtual QCString trSearchResultsTitle()
- {
- return "Soektog Resultate";
- }
- /*! This string is put just before listing the search results. The
- * text can be different depending on the number of documents found.
- * Inside the text you can put the special marker $num to insert
- * the number representing the actual number of search results.
- * The @a numDocuments parameter can be either 0, 1 or 2, where the
- * value 2 represents 2 or more matches. HTML markup is allowed inside
- * the returned string.
- */
- virtual QCString trSearchResults(int numDocuments)
- {
- if (numDocuments==0)
- {
- return "Geen dokumente na gelang van jou navraag nie.";
- }
- else if (numDocuments==1)
- {
- return "Die soektog het <b>1</b> dokument gevind na gelang van jou navraag.";
- }
- else
- {
- return "Die soektog het <b>$num</b> dokumente gevind na gelang van jou navraag. "
- "Beste resultate eerste.";
- }
- }
- /*! This string is put before the list of matched words, for each search
- * result. What follows is the list of words that matched the query.
- */
- virtual QCString trSearchMatches()
- {
- return "Teikens:";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.3.8
-//////////////////////////////////////////////////////////////////////////
-
- /*! This is used in HTML as the title of page with source code for file filename
- */
- virtual QCString trSourceFile(QCString& filename)
- {
- return filename + " Bron kode Le&euml;r";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.3.9
-//////////////////////////////////////////////////////////////////////////
-
- /*! This is used as the name of the chapter containing the directory
- * hierarchy.
- */
- virtual QCString trDirIndex()
- { return "Directory Hi&euml;rargie"; }
-
- /*! This is used as the name of the chapter containing the documentation
- * of the directories.
- */
- virtual QCString trDirDocumentation()
- { return "Directory Documentasie"; }
-
- /*! This is used as the title of the directory index and also in the
- * Quick links of a HTML page, to link to the directory hierarchy.
- */
- virtual QCString trDirectories()
- { return "Directories"; }
-
- /*! This returns a sentences that introduces the directory hierarchy.
- * and the fact that it is sorted alphabetically per level
- */
- virtual QCString trDirDescription()
- { return "Hierdie directory hi&euml;rargie is min of meer alfabeties "
- "gesorteer:";
- }
-
- /*! This returns the title of a directory page. The name of the
- * directory is passed via \a dirName.
- */
- virtual QCString trDirReference(const char *dirName)
- { QCString result=dirName; result+=" Directory Verwysing"; return result; }
-
- /*! This returns the word directory with or without starting capital
- * (\a first_capital) and in sigular or plural form (\a singular).
- */
- virtual QCString trDir(bool first_capital, bool singular)
- {
- QCString result((first_capital ? "Director" : "director"));
- if (singular) result+="y"; else result+="ies";
- return result;
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.4.1
-//////////////////////////////////////////////////////////////////////////
-
- /*! This text is added to the documentation when the \\overload command
- * is used for a overloaded function.
- */
- virtual QCString trOverloadText()
- {
- return "Hierdie is 'n oorlaaide lede funksie, "
- "vertoon vir volledigheid. Dit verskil slegs van die bogegewe "
- "funksie in die argument(e) wat dit aanvaar.";
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.4.6
-//////////////////////////////////////////////////////////////////////////
-
- /*! This is used to introduce a caller (or called-by) graph */
- virtual QCString trCallerGraph()
- {
- return "Hier is die roep skema vir die funksie:";
- }
-
- /*! This is used in the documentation of a file/namespace before the list
- * of documentation blocks for enumeration values
- */
- virtual QCString trEnumerationValueDocumentation()
- { return "Enumerator Dokumentasie"; }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.5.4 (mainly for Fortran)
-//////////////////////////////////////////////////////////////////////////
-
- /*! header that is put before the list of member subprograms (Fortran). */
- virtual QCString trMemberFunctionDocumentationFortran()
- { return "Lede Funksie/Subroetine Dokumentasie"; }
-
- /*! This is put above each page as a link to the list of annotated data types (Fortran). */
- virtual QCString trCompoundListFortran()
- { return "Data Tipes Lys"; }
-
- /*! This is put above each page as a link to all members of compounds (Fortran). */
- virtual QCString trCompoundMembersFortran()
- { return "Data Velde"; }
-
- /*! This is an introduction to the annotated compound list (Fortran). */
- virtual QCString trCompoundListDescriptionFortran()
- { return "Hier is die data tipes met kort beskrywings:"; }
-
- /*! This is an introduction to the page with all data types (Fortran). */
- virtual QCString trCompoundMembersDescriptionFortran(bool extractAll)
- {
- QCString result="Hier is 'n lys van alle ";
- if (!extractAll)
- {
- result+="gedokumenteerde ";
- }
- result+="data tipe lede";
- result+=" met skakels na ";
- if (!extractAll)
- {
- result+="die data strukture dokumentasie vir elke lid";
- }
- else
- {
- result+="die data tipes waaraan hulle behoort:";
- }
- return result;
- }
-
- /*! This is used in LaTeX as the title of the chapter with the
- * annotated compound index (Fortran).
- */
- virtual QCString trCompoundIndexFortran()
- { return "Data Tipe Indeks"; }
-
- /*! This is used in LaTeX as the title of the chapter containing
- * the documentation of all data types (Fortran).
- */
- virtual QCString trTypeDocumentation()
- { return "Data Tipe Dokumentasie"; }
-
- /*! This is used in the documentation of a file as a header before the
- * list of (global) subprograms (Fortran).
- */
- virtual QCString trSubprograms()
- { return "Funksies/Subroetines"; }
-
- /*! This is used in the documentation of a file/namespace before the list
- * of documentation blocks for subprograms (Fortran)
- */
- virtual QCString trSubprogramDocumentation()
- { return "Funksies/Subroetine Dokumentasie"; }
-
- /*! This is used in the documentation of a file/namespace/group before
- * the list of links to documented compounds (Fortran)
- */
- virtual QCString trDataTypes()
- { return "Data Tipes"; }
-
- /*! used as the title of page containing all the index of all modules (Fortran). */
- virtual QCString trModulesList()
- { return "Modules Lys"; }
-
- /*! used as an introduction to the modules list (Fortran) */
- virtual QCString trModulesListDescription(bool extractAll)
- {
- QCString result="Hier is 'n lys van alle ";
- if (!extractAll) result+="gedokumenteerde ";
- result+="modules met kort beskrywings:";
- return result;
- }
-
- /*! used as the title of the HTML page of a module/type (Fortran) */
- virtual QCString trCompoundReferenceFortran(const char *clName,
- ClassDef::CompoundType compType,
- bool isTemplate)
- {
- QCString result=(QCString)clName;
- switch(compType)
- {
- case ClassDef::Class: result+=" Module"; break;
- case ClassDef::Struct: result+=" Tipe"; break;
- case ClassDef::Union: result+=" Unie"; break;
- case ClassDef::Interface: result+=" Interflak"; break;
- case ClassDef::Protocol: result+=" Protokol"; break;
- case ClassDef::Category: result+=" Kategorie"; break;
- case ClassDef::Exception: result+=" Eksepsie"; break;
- }
- if (isTemplate) result+=" Template";
- result+=" Bron";
- return result;
- }
- /*! used as the title of the HTML page of a module (Fortran) */
- virtual QCString trModuleReference(const char *namespaceName)
- {
- QCString result=namespaceName;
- result+=" Module Bron";
- return result;
- }
-
- /*! This is put above each page as a link to all members of modules. (Fortran) */
- virtual QCString trModulesMembers()
- { return "Module Lede"; }
-
- /*! This is an introduction to the page with all modules members (Fortran) */
- virtual QCString trModulesMemberDescription(bool extractAll)
- {
- QCString result="Hier is 'n lys van alle ";
- if (!extractAll) result+="gedokumenteerde ";
- result+="module lede met skakels na ";
- if (extractAll)
- {
- result+="die module dokumentasie vir elke lid:";
- }
- else
- {
- result+="die modules waaraan hulle behoort:";
- }
- return result;
- }
-
- /*! This is used in LaTeX as the title of the chapter with the
- * index of all modules (Fortran).
- */
- virtual QCString trModulesIndex()
- { return "Modules Indeks"; }
-
- /*! This is used for translation of the word that will possibly
- * be followed by a single name or by a list of names
- * of the category.
- */
- virtual QCString trModule(bool first_capital, bool singular)
- {
- QCString result((first_capital ? "Module" : "module"));
- if (!singular) result+="s";
- return result;
- }
- /*! This is put at the bottom of a module documentation page and is
- * followed by a list of files that were used to generate the page.
- */
- virtual QCString trGeneratedFromFilesFortran(ClassDef::CompoundType compType,
- bool single)
- {
- // single is true implies a single file
- QCString result=(QCString)"The documentation for this ";
- switch(compType)
- {
- case ClassDef::Class: result+="module"; break;
- case ClassDef::Struct: result+="tipe"; break;
- case ClassDef::Union: result+="unie"; break;
- case ClassDef::Interface: result+="Interflak"; break;
- case ClassDef::Protocol: result+="protokcol"; break;
- case ClassDef::Category: result+="kategorie"; break;
- case ClassDef::Exception: result+="eksepsie"; break;
- }
- result+=" is gegenereer vanaf die foldende leer";
- if (single) result+=":"; else result+="s:";
- return result;
- }
- /*! This is used for translation of the word that will possibly
- * be followed by a single name or by a list of names
- * of the category.
- */
- virtual QCString trType(bool first_capital, bool singular)
- {
- QCString result((first_capital ? "Tipe" : "tipe"));
- if (!singular) result+="s";
- return result;
- }
- /*! This is used for translation of the word that will possibly
- * be followed by a single name or by a list of names
- * of the category.
- */
- virtual QCString trSubprogram(bool first_capital, bool singular)
- {
- QCString result((first_capital ? "Subprogram" : "subprogram"));
- if (!singular) result+="me";
- return result;
- }
-
- /*! C# Type Constraint list */
- virtual QCString trTypeConstraints()
- {
- return "Tipe Limiete";
- }
-
-};
-
-#endif
diff --git a/trunk/src/translatordecoder.h b/trunk/src/translatordecoder.h
deleted file mode 100644
index 07716fb..0000000
--- a/trunk/src/translatordecoder.h
+++ /dev/null
@@ -1,760 +0,0 @@
-/******************************************************************************
- *
- *
- *
- * Copyright (C) 1997-2012 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.
- *
- */
-
-#ifndef TRANSLATORDECODER_H
-#define TRANSLATORDECODER_H
-
-#include "translator.h"
-#include "portable.h"
-
-class TranslatorDecoder : public Translator
-{
- public:
-
- TranslatorDecoder(Translator *translator) : m_translator(translator)
- {
- m_toUtf8 = portable_iconv_open("UTF-8",translator->idLanguageCharset());
- m_fromUtf8 = portable_iconv_open(translator->idLanguageCharset(),"UTF-8");
- }
- virtual ~TranslatorDecoder()
- {
- if (m_toUtf8!=(void *)(-1)) portable_iconv_close(m_toUtf8);
- if (m_fromUtf8!=(void *)(-1)) portable_iconv_close(m_fromUtf8);
- delete m_translator;
- }
-
- /*! This method is used to provide warning message that is displayed
- * if the user chooses a language whose translation is not up to date.
- * It is implemented by the adapter classes.
- */
- virtual QCString updateNeededMessage() { return m_translator->updateNeededMessage(); }
-
- // Please, have a look at comments inside the translator_en.h file
- // to learn the meaning of the following methods. The translator_en.h
- // file contains the TranslatorEnglish implementation, which is
- // always up-to-date (by definition).
-
- // --- Language control methods -------------------
-
- QCString idLanguage()
- { return m_translator->idLanguage(); }
- QCString latexLanguageSupportCommand()
- { return m_translator->latexLanguageSupportCommand(); }
- QCString idLanguageCharset()
- { return m_translator->idLanguageCharset(); }
-
- QCString recode(const QCString &s,void *cd)
- {
- if (cd==(void*)(-1)) return s;
- int iSize = s.length();
- int oSize = iSize*4+1;
- QCString output(oSize);
- size_t iLeft = iSize;
- size_t oLeft = oSize;
- const char *iPtr = s.data();
- char *oPtr = output.data();
- if (!portable_iconv(cd,&iPtr,&iLeft,&oPtr,&oLeft))
- {
- oSize -= oLeft;
- output.resize(oSize+1);
- output.at(oSize)='\0';
- return output;
- }
- else
- {
- return s;
- }
- }
- QCString toUtf8(const QCString &s)
- {
- return recode(s,m_toUtf8);
- }
- QCString fromUtf8(const QCString &s)
- {
- return recode(s,m_fromUtf8);
- }
-
- // --- Language translation methods -------------------
-
- QCString trRelatedFunctions()
- { return toUtf8(m_translator->trRelatedFunctions()); }
- QCString trRelatedSubscript()
- { return toUtf8(m_translator->trRelatedSubscript()); }
- QCString trDetailedDescription()
- { return toUtf8(m_translator->trDetailedDescription()); }
- QCString trMemberTypedefDocumentation()
- { return toUtf8(m_translator->trMemberTypedefDocumentation()); }
- QCString trMemberEnumerationDocumentation()
- { return toUtf8(m_translator->trMemberEnumerationDocumentation()); }
-
- QCString trMemberFunctionDocumentation()
- { return toUtf8(m_translator->trMemberFunctionDocumentation()); }
- QCString trMemberDataDocumentation()
- { return toUtf8(m_translator->trMemberDataDocumentation()); }
- QCString trMore()
- { return toUtf8(m_translator->trMore()); }
- QCString trListOfAllMembers()
- { return toUtf8(m_translator->trListOfAllMembers()); }
- QCString trMemberList()
- { return toUtf8(m_translator->trMemberList()); }
- QCString trThisIsTheListOfAllMembers()
- { return toUtf8(m_translator->trThisIsTheListOfAllMembers()); }
- QCString trIncludingInheritedMembers()
- { return toUtf8(m_translator->trIncludingInheritedMembers()); }
- QCString trGeneratedAutomatically(const char *s)
- { return toUtf8(m_translator->trGeneratedAutomatically(fromUtf8(s))); }
- QCString trEnumName()
- { return toUtf8(m_translator->trEnumName()); }
- QCString trEnumValue()
- { return toUtf8(m_translator->trEnumValue()); }
- QCString trDefinedIn()
- { return toUtf8(m_translator->trDefinedIn()); }
-
- // quick reference sections
-
- QCString trModules()
- { return toUtf8(m_translator->trModules()); }
- QCString trClassHierarchy()
- { return toUtf8(m_translator->trClassHierarchy()); }
- QCString trCompoundList()
- { return toUtf8(m_translator->trCompoundList()); }
-
- QCString trFileList()
- { return toUtf8(m_translator->trFileList()); }
- QCString trCompoundMembers()
- { return toUtf8(m_translator->trCompoundMembers()); }
- QCString trFileMembers()
- { return toUtf8(m_translator->trFileMembers()); }
- QCString trRelatedPages()
- { return toUtf8(m_translator->trRelatedPages()); }
- QCString trExamples()
- { return toUtf8(m_translator->trExamples()); }
- QCString trSearch()
- { return toUtf8(m_translator->trSearch()); }
- QCString trClassHierarchyDescription()
- { return toUtf8(m_translator->trClassHierarchyDescription()); }
- QCString trFileListDescription(bool extractAll)
- { return toUtf8(m_translator->trFileListDescription(extractAll)); }
- QCString trCompoundListDescription()
- { return toUtf8(m_translator->trCompoundListDescription()); }
- QCString trCompoundMembersDescription(bool extractAll)
- { return toUtf8(m_translator->trCompoundMembersDescription(extractAll)); }
- QCString trFileMembersDescription(bool extractAll)
- { return toUtf8(m_translator->trFileMembersDescription(extractAll)); }
- QCString trExamplesDescription()
- { return toUtf8(m_translator->trExamplesDescription()); }
- QCString trRelatedPagesDescription()
- { return toUtf8(m_translator->trRelatedPagesDescription()); }
- QCString trModulesDescription()
- { return toUtf8(m_translator->trModulesDescription()); }
-
- // index titles (the project name is prepended for these)
-
- QCString trDocumentation()
- { return toUtf8(m_translator->trDocumentation()); }
- QCString trModuleIndex()
- { return toUtf8(m_translator->trModuleIndex()); }
- QCString trHierarchicalIndex()
- { return toUtf8(m_translator->trHierarchicalIndex()); }
- QCString trCompoundIndex()
- { return toUtf8(m_translator->trCompoundIndex()); }
- QCString trFileIndex()
- { return toUtf8(m_translator->trFileIndex()); }
- QCString trModuleDocumentation()
- { return toUtf8(m_translator->trModuleDocumentation()); }
- QCString trClassDocumentation()
- { return toUtf8(m_translator->trClassDocumentation()); }
- QCString trFileDocumentation()
- { return toUtf8(m_translator->trFileDocumentation()); }
- QCString trExampleDocumentation()
- { return toUtf8(m_translator->trExampleDocumentation()); }
- QCString trPageDocumentation()
- { return toUtf8(m_translator->trPageDocumentation()); }
- QCString trReferenceManual()
- { return toUtf8(m_translator->trReferenceManual()); }
- QCString trDefines()
- { return toUtf8(m_translator->trDefines()); }
- QCString trFuncProtos()
- { return toUtf8(m_translator->trFuncProtos()); }
- QCString trTypedefs()
- { return toUtf8(m_translator->trTypedefs()); }
- QCString trEnumerations()
- { return toUtf8(m_translator->trEnumerations()); }
- QCString trFunctions()
- { return toUtf8(m_translator->trFunctions()); }
- QCString trVariables()
- { return toUtf8(m_translator->trVariables()); }
- QCString trEnumerationValues()
- { return toUtf8(m_translator->trEnumerationValues()); }
- QCString trDefineDocumentation()
- { return toUtf8(m_translator->trDefineDocumentation()); }
- QCString trFunctionPrototypeDocumentation()
- { return toUtf8(m_translator->trFunctionPrototypeDocumentation()); }
- QCString trTypedefDocumentation()
- { return toUtf8(m_translator->trTypedefDocumentation()); }
- QCString trEnumerationTypeDocumentation()
- { return toUtf8(m_translator->trEnumerationTypeDocumentation()); }
- QCString trFunctionDocumentation()
- { return toUtf8(m_translator->trFunctionDocumentation()); }
- QCString trVariableDocumentation()
- { return toUtf8(m_translator->trVariableDocumentation()); }
- QCString trCompounds()
- { return toUtf8(m_translator->trCompounds()); }
- QCString trGeneratedAt(const char *date,const char *projName)
- { return toUtf8(m_translator->trGeneratedAt(fromUtf8(date),fromUtf8(projName))); }
- QCString trWrittenBy()
- { return toUtf8(m_translator->trWrittenBy()); }
- QCString trClassDiagram(const char *clName)
- { return toUtf8(m_translator->trClassDiagram(fromUtf8(clName))); }
- QCString trForInternalUseOnly()
- { return toUtf8(m_translator->trForInternalUseOnly()); }
- QCString trWarning()
- { return toUtf8(m_translator->trWarning()); }
- QCString trVersion()
- { return toUtf8(m_translator->trVersion()); }
- QCString trDate()
- { return toUtf8(m_translator->trDate()); }
- QCString trReturns()
- { return toUtf8(m_translator->trReturns()); }
- QCString trSeeAlso()
- { return toUtf8(m_translator->trSeeAlso()); }
- QCString trParameters()
- { return toUtf8(m_translator->trParameters()); }
- QCString trExceptions()
- { return toUtf8(m_translator->trExceptions()); }
- QCString trGeneratedBy()
- { return toUtf8(m_translator->trGeneratedBy()); }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 0.49-990307
-//////////////////////////////////////////////////////////////////////////
-
- QCString trNamespaceList()
- { return toUtf8(m_translator->trNamespaceList()); }
- QCString trNamespaceListDescription(bool extractAll)
- { return toUtf8(m_translator->trNamespaceListDescription(extractAll)); }
- QCString trFriends()
- { return toUtf8(m_translator->trFriends()); }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 0.49-990405
-//////////////////////////////////////////////////////////////////////////
-
- QCString trRelatedFunctionDocumentation()
- { return toUtf8(m_translator->trRelatedFunctionDocumentation()); }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 0.49-990425
-//////////////////////////////////////////////////////////////////////////
-
- QCString trCompoundReference(const char *clName,
- ClassDef::CompoundType compType,
- bool isTemplate)
- { return toUtf8(m_translator->trCompoundReference(fromUtf8(clName),compType,isTemplate)); }
-
-
- QCString trFileReference(const char *fileName)
- { return toUtf8(m_translator->trFileReference(fromUtf8(fileName))); }
- QCString trNamespaceReference(const char *namespaceName)
- { return toUtf8(m_translator->trNamespaceReference(fromUtf8(namespaceName))); }
-
- QCString trPublicMembers()
- { return toUtf8(m_translator->trPublicMembers()); }
- QCString trPublicSlots()
- { return toUtf8(m_translator->trPublicSlots()); }
- QCString trSignals()
- { return toUtf8(m_translator->trSignals()); }
- QCString trStaticPublicMembers()
- { return toUtf8(m_translator->trStaticPublicMembers()); }
- QCString trProtectedMembers()
- { return toUtf8(m_translator->trProtectedMembers()); }
- QCString trProtectedSlots()
- { return toUtf8(m_translator->trProtectedSlots()); }
- QCString trStaticProtectedMembers()
- { return toUtf8(m_translator->trStaticProtectedMembers()); }
- QCString trPrivateMembers()
- { return toUtf8(m_translator->trPrivateMembers()); }
- QCString trPrivateSlots()
- { return toUtf8(m_translator->trPrivateSlots()); }
- QCString trStaticPrivateMembers()
- { return toUtf8(m_translator->trStaticPrivateMembers()); }
- QCString trWriteList(int numEntries)
- { return toUtf8(m_translator->trWriteList(numEntries)); }
- QCString trInheritsList(int numEntries)
- { return toUtf8(m_translator->trInheritsList(numEntries)); }
- QCString trInheritedByList(int numEntries)
- { return toUtf8(m_translator->trInheritedByList(numEntries)); }
- QCString trReimplementedFromList(int numEntries)
- { return toUtf8(m_translator->trReimplementedFromList(numEntries)); }
- QCString trReimplementedInList(int numEntries)
- { return toUtf8(m_translator->trReimplementedInList(numEntries)); }
- QCString trNamespaceMembers()
- { return toUtf8(m_translator->trNamespaceMembers()); }
- QCString trNamespaceMemberDescription(bool extractAll)
- { return toUtf8(m_translator->trNamespaceMemberDescription(extractAll)); }
-
- QCString trNamespaceIndex()
- { return toUtf8(m_translator->trNamespaceIndex()); }
- QCString trNamespaceDocumentation()
- { return toUtf8(m_translator->trNamespaceDocumentation()); }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 0.49-990522
-//////////////////////////////////////////////////////////////////////////
-
- QCString trNamespaces()
- { return toUtf8(m_translator->trNamespaces()); }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 0.49-990728
-//////////////////////////////////////////////////////////////////////////
-
- QCString trGeneratedFromFiles(ClassDef::CompoundType compType,
- bool single)
- { return toUtf8(m_translator->trGeneratedFromFiles(compType,single)); }
-
-
- QCString trAlphabeticalList()
- { return toUtf8(m_translator->trAlphabeticalList()); }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 0.49-990901
-//////////////////////////////////////////////////////////////////////////
-
- QCString trReturnValues()
- { return toUtf8(m_translator->trReturnValues()); }
- QCString trMainPage()
- { return toUtf8(m_translator->trMainPage()); }
- QCString trPageAbbreviation()
- { return toUtf8(m_translator->trPageAbbreviation()); }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 0.49-991003
-//////////////////////////////////////////////////////////////////////////
-
- QCString trDefinedAtLineInSourceFile()
- { return toUtf8(m_translator->trDefinedAtLineInSourceFile()); }
- QCString trDefinedInSourceFile()
- { return toUtf8(m_translator->trDefinedInSourceFile()); }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 0.49-991205
-//////////////////////////////////////////////////////////////////////////
-
- QCString trDeprecated()
- { return toUtf8(m_translator->trDeprecated()); }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.0.0
-//////////////////////////////////////////////////////////////////////////
-
- QCString trCollaborationDiagram(const char *clName)
- { return toUtf8(m_translator->trCollaborationDiagram(fromUtf8(clName))); }
- QCString trInclDepGraph(const char *fName)
- { return toUtf8(m_translator->trInclDepGraph(fromUtf8(fName))); }
- QCString trConstructorDocumentation()
- { return toUtf8(m_translator->trConstructorDocumentation()); }
- QCString trGotoSourceCode()
- { return toUtf8(m_translator->trGotoSourceCode()); }
- QCString trGotoDocumentation()
- { return toUtf8(m_translator->trGotoDocumentation()); }
- QCString trPrecondition()
- { return toUtf8(m_translator->trPrecondition()); }
- QCString trPostcondition()
- { return toUtf8(m_translator->trPostcondition()); }
- QCString trInvariant()
- { return toUtf8(m_translator->trInvariant()); }
- QCString trInitialValue()
- { return toUtf8(m_translator->trInitialValue()); }
- QCString trCode()
- { return toUtf8(m_translator->trCode()); }
-
- QCString trGraphicalHierarchy()
- { return toUtf8(m_translator->trGraphicalHierarchy()); }
- QCString trGotoGraphicalHierarchy()
- { return toUtf8(m_translator->trGotoGraphicalHierarchy()); }
- QCString trGotoTextualHierarchy()
- { return toUtf8(m_translator->trGotoTextualHierarchy()); }
- QCString trPageIndex()
- { return toUtf8(m_translator->trPageIndex()); }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.1.0
-//////////////////////////////////////////////////////////////////////////
-
- QCString trNote()
- { return toUtf8(m_translator->trNote()); }
- QCString trPublicTypes()
- { return toUtf8(m_translator->trPublicTypes()); }
- QCString trPublicAttribs()
- { return toUtf8(m_translator->trPublicAttribs()); }
- QCString trStaticPublicAttribs()
- { return toUtf8(m_translator->trStaticPublicAttribs()); }
- QCString trProtectedTypes()
- { return toUtf8(m_translator->trProtectedTypes()); }
- QCString trProtectedAttribs()
- { return toUtf8(m_translator->trProtectedAttribs()); }
- QCString trStaticProtectedAttribs()
- { return toUtf8(m_translator->trStaticProtectedAttribs()); }
- QCString trPrivateTypes()
- { return toUtf8(m_translator->trPrivateTypes()); }
- QCString trPrivateAttribs()
- { return toUtf8(m_translator->trPrivateAttribs()); }
- QCString trStaticPrivateAttribs()
- { return toUtf8(m_translator->trStaticPrivateAttribs()); }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.1.3
-//////////////////////////////////////////////////////////////////////////
-
- QCString trTodo()
- { return toUtf8(m_translator->trTodo()); }
- QCString trTodoList()
- { return toUtf8(m_translator->trTodoList()); }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.1.4
-//////////////////////////////////////////////////////////////////////////
-
- QCString trReferencedBy()
- { return toUtf8(m_translator->trReferencedBy()); }
- QCString trRemarks()
- { return toUtf8(m_translator->trRemarks()); }
- QCString trAttention()
- { return toUtf8(m_translator->trAttention()); }
- QCString trInclByDepGraph()
- { return toUtf8(m_translator->trInclByDepGraph()); }
- QCString trSince()
- { return toUtf8(m_translator->trSince()); }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.1.5
-//////////////////////////////////////////////////////////////////////////
-
- QCString trLegendTitle()
- { return toUtf8(m_translator->trLegendTitle()); }
- QCString trLegendDocs()
- { return toUtf8(m_translator->trLegendDocs()); }
- QCString trLegend()
- { return toUtf8(m_translator->trLegend()); }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.2.0
-//////////////////////////////////////////////////////////////////////////
-
- QCString trTest()
- { return toUtf8(m_translator->trTest()); }
- QCString trTestList()
- { return toUtf8(m_translator->trTestList()); }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.2.1
-//////////////////////////////////////////////////////////////////////////
-
- QCString trDCOPMethods()
- { return toUtf8(m_translator->trDCOPMethods()); }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.2.2
-//////////////////////////////////////////////////////////////////////////
-
- QCString trProperties()
- { return toUtf8(m_translator->trProperties()); }
- QCString trPropertyDocumentation()
- { return toUtf8(m_translator->trPropertyDocumentation()); }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.2.4
-//////////////////////////////////////////////////////////////////////////
-
- QCString trClasses()
- { return toUtf8(m_translator->trClasses()); }
- QCString trPackage(const char *name)
- { return toUtf8(m_translator->trPackage(fromUtf8(name))); }
- QCString trPackageList()
- { return toUtf8(m_translator->trPackageList()); }
- QCString trPackageListDescription()
- { return toUtf8(m_translator->trPackageListDescription()); }
- QCString trPackages()
- { return toUtf8(m_translator->trPackages()); }
- QCString trDefineValue()
- { return toUtf8(m_translator->trDefineValue()); }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.2.5
-//////////////////////////////////////////////////////////////////////////
-
- QCString trBug()
- { return toUtf8(m_translator->trBug()); }
- QCString trBugList()
- { return toUtf8(m_translator->trBugList()); }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.2.6
-//////////////////////////////////////////////////////////////////////////
-
- QCString trRTFansicp()
- { return toUtf8(m_translator->trRTFansicp()); }
- QCString trRTFCharSet()
- { return toUtf8(m_translator->trRTFCharSet()); }
- QCString trRTFGeneralIndex()
- { return toUtf8(m_translator->trRTFGeneralIndex()); }
-
- // Translation of the word
-
- QCString trClass(bool first_capital, bool singular)
- { return toUtf8(m_translator->trClass(first_capital,singular)); }
- QCString trFile(bool first_capital, bool singular)
- { return toUtf8(m_translator->trFile(first_capital,singular)); }
- QCString trNamespace(bool first_capital, bool singular)
- { return toUtf8(m_translator->trNamespace(first_capital,singular)); }
-
- QCString trGroup(bool first_capital, bool singular)
- { return toUtf8(m_translator->trGroup(first_capital,singular)); }
- QCString trPage(bool first_capital, bool singular)
- { return toUtf8(m_translator->trPage(first_capital,singular)); }
- QCString trMember(bool first_capital, bool singular)
- { return toUtf8(m_translator->trMember(first_capital,singular)); }
- QCString trGlobal(bool first_capital, bool singular)
- { return toUtf8(m_translator->trGlobal(first_capital,singular)); }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.2.7
-//////////////////////////////////////////////////////////////////////////
-
- QCString trAuthor(bool first_capital, bool singular)
- { return toUtf8(m_translator->trAuthor(first_capital,singular)); }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.2.11
-//////////////////////////////////////////////////////////////////////////
-
- QCString trReferences()
- { return toUtf8(m_translator->trReferences()); }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.2.13
-//////////////////////////////////////////////////////////////////////////
-
- QCString trImplementedFromList(int numEntries)
- { return toUtf8(m_translator->trImplementedFromList(numEntries)); }
- QCString trImplementedInList(int numEntries)
- { return toUtf8(m_translator->trImplementedInList(numEntries)); }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.2.16
-//////////////////////////////////////////////////////////////////////////
-
- QCString trRTFTableOfContents()
- { return toUtf8(m_translator->trRTFTableOfContents()); }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.2.17
-//////////////////////////////////////////////////////////////////////////
-
- QCString trDeprecatedList()
- { return toUtf8(m_translator->trDeprecatedList()); }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.2.18
-//////////////////////////////////////////////////////////////////////////
-
- QCString trEvents()
- { return toUtf8(m_translator->trEvents()); }
- QCString trEventDocumentation()
- { return toUtf8(m_translator->trEventDocumentation()); }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.3
-//////////////////////////////////////////////////////////////////////////
-
- QCString trPackageTypes()
- { return toUtf8(m_translator->trPackageTypes()); }
- QCString trPackageMembers()
- { return toUtf8(m_translator->trPackageMembers()); }
- QCString trStaticPackageMembers()
- { return toUtf8(m_translator->trStaticPackageMembers()); }
- QCString trPackageAttribs()
- { return toUtf8(m_translator->trPackageAttribs()); }
- QCString trStaticPackageAttribs()
- { return toUtf8(m_translator->trStaticPackageAttribs()); }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.3.1
-//////////////////////////////////////////////////////////////////////////
-
- QCString trAll()
- { return toUtf8(m_translator->trAll()); }
- QCString trCallGraph()
- { return toUtf8(m_translator->trCallGraph()); }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.3.3
-//////////////////////////////////////////////////////////////////////////
-
- QCString trSearchForIndex()
- { return toUtf8(m_translator->trSearchForIndex()); }
- QCString trSearchResultsTitle()
- { return toUtf8(m_translator->trSearchResultsTitle()); }
- QCString trSearchResults(int numDocuments)
- { return toUtf8(m_translator->trSearchResults(numDocuments)); }
- QCString trSearchMatches()
- { return toUtf8(m_translator->trSearchMatches()); }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.3.8
-//////////////////////////////////////////////////////////////////////////
-
- QCString trSourceFile(QCString& filename)
- { return toUtf8(m_translator->trSourceFile(filename)); }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.3.9
-//////////////////////////////////////////////////////////////////////////
-
- QCString trDirIndex()
- { return toUtf8(m_translator->trDirIndex()); }
- QCString trDirDocumentation()
- { return toUtf8(m_translator->trDirDocumentation()); }
- QCString trDirectories()
- { return toUtf8(m_translator->trDirectories()); }
- QCString trDirDescription()
- { return toUtf8(m_translator->trDirDescription()); }
- QCString trDirReference(const char *dirName)
- { return toUtf8(m_translator->trDirReference(fromUtf8(dirName))); }
- QCString trDir(bool first_capital, bool singular)
- { return toUtf8(m_translator->trDir(first_capital,singular)); }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.4.1
-//////////////////////////////////////////////////////////////////////////
-
- QCString trOverloadText()
- { return toUtf8(m_translator->trOverloadText()); }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.4.6
-//////////////////////////////////////////////////////////////////////////
-
- QCString trCallerGraph()
- { return toUtf8(m_translator->trCallerGraph()); }
- QCString trEnumerationValueDocumentation()
- { return toUtf8(m_translator->trEnumerationValueDocumentation()); }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.5.4
-//////////////////////////////////////////////////////////////////////////
-
- QCString trMemberFunctionDocumentationFortran()
- { return toUtf8(m_translator->trMemberFunctionDocumentationFortran()); }
- QCString trCompoundListFortran()
- { return toUtf8(m_translator->trCompoundListFortran()); }
- QCString trCompoundMembersFortran()
- { return toUtf8(m_translator->trCompoundMembersFortran()); }
- QCString trCompoundListDescriptionFortran()
- { return toUtf8(m_translator->trCompoundListDescriptionFortran()); }
- QCString trCompoundMembersDescriptionFortran(bool extractAll)
- { return toUtf8(m_translator->trCompoundMembersDescriptionFortran(extractAll)); }
- QCString trCompoundIndexFortran()
- { return toUtf8(m_translator->trCompoundIndexFortran()); }
- QCString trTypeDocumentation()
- { return toUtf8(m_translator->trTypeDocumentation()); }
- QCString trSubprograms()
- { return toUtf8(m_translator->trSubprograms()); }
- QCString trSubprogramDocumentation()
- { return toUtf8(m_translator->trSubprogramDocumentation()); }
- QCString trDataTypes()
- { return toUtf8(m_translator->trDataTypes()); }
- QCString trModulesList()
- { return toUtf8(m_translator->trModulesList()); }
- QCString trModulesListDescription(bool extractAll)
- { return toUtf8(m_translator->trModulesListDescription(extractAll)); }
- QCString trCompoundReferenceFortran(const char *clName,
- ClassDef::CompoundType compType,
- bool isTemplate)
- { return toUtf8(m_translator->trCompoundReferenceFortran(fromUtf8(clName),compType,isTemplate)); }
- QCString trModuleReference(const char *namespaceName)
- { return toUtf8(m_translator->trModuleReference(fromUtf8(namespaceName))); }
- QCString trModulesMembers()
- { return toUtf8(m_translator->trModulesMembers()); }
- QCString trModulesMemberDescription(bool extractAll)
- { return toUtf8(m_translator->trModulesMemberDescription(extractAll)); }
- QCString trModulesIndex()
- { return toUtf8(m_translator->trModulesIndex()); }
- QCString trModule(bool first_capital, bool singular)
- { return toUtf8(m_translator->trModule(first_capital,singular)); }
- QCString trGeneratedFromFilesFortran(ClassDef::CompoundType compType,
- bool single)
- { return toUtf8(m_translator->trGeneratedFromFilesFortran(compType,single)); }
- QCString trType(bool first_capital, bool singular)
- { return toUtf8(m_translator->trType(first_capital,singular)); }
- QCString trSubprogram(bool first_capital, bool singular)
- { return toUtf8(m_translator->trSubprogram(first_capital,singular)); }
- QCString trTypeConstraints()
- { return toUtf8(m_translator->trTypeConstraints()); }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.6.0
-//////////////////////////////////////////////////////////////////////////
-
- QCString trDirRelation(const char *name)
- { return toUtf8(m_translator->trDirRelation(fromUtf8(name))); }
- QCString trLoading()
- { return toUtf8(m_translator->trLoading()); }
- QCString trGlobalNamespace()
- { return toUtf8(m_translator->trGlobalNamespace()); }
- QCString trSearching()
- { return toUtf8(m_translator->trSearching()); }
- QCString trNoMatches()
- { return toUtf8(m_translator->trNoMatches()); }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.6.3
-//////////////////////////////////////////////////////////////////////////
-
- QCString trDirDependency(const char *name)
- { return toUtf8(m_translator->trDirDependency(fromUtf8(name))); }
- QCString trFileIn(const char *name)
- { return toUtf8(m_translator->trFileIn(fromUtf8(name))); }
- QCString trIncludesFileIn(const char *name)
- { return toUtf8(m_translator->trIncludesFileIn(fromUtf8(name))); }
- QCString trDateTime(int year,int month,int day,int dayOfWeek,
- int hour,int minutes,int seconds,bool includeTime)
- { return toUtf8(m_translator->trDateTime(year,month,day,dayOfWeek,
- hour,minutes,seconds,includeTime));
- }
-
-//////////////////////////////////////////////////////////////////////////
-// new since 1.7.5
-//////////////////////////////////////////////////////////////////////////
-
- QCString trCiteReferences()
- { return toUtf8(m_translator->trCiteReferences()); }
- QCString trCopyright()
- { return toUtf8(m_translator->trCopyright()); }
- QCString trDirDepGraph(const char *name)
- { return toUtf8(m_translator->trDirDepGraph(fromUtf8(name))); }
-
-//////////////////////////////////////////////////////////////////////////
- private:
- Translator *m_translator;
- void *m_toUtf8;
- void *m_fromUtf8;
-
-};
-
-#endif
diff --git a/trunk/src/types.h b/trunk/src/types.h
deleted file mode 100644
index a8b2db6..0000000
--- a/trunk/src/types.h
+++ /dev/null
@@ -1,92 +0,0 @@
-/******************************************************************************
- *
- * Copyright (C) 1997-2012 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.
- *
- */
-
-#ifndef TYPES_H
-#define TYPES_H
-
-#include "qtbc.h"
-
-/** @file
- * @brief This file contains a number of basic enums and types.
- */
-
-enum Protection { Public, Protected, Private, Package } ;
-enum Specifier { Normal, Virtual, Pure } ;
-enum MethodTypes { Method, Signal, Slot, DCOP, Property, Event };
-enum RelatesType { Simple, Duplicate, MemberOf };
-enum Relationship { Member, Related, Foreign };
-enum SrcLangExt
-{
- SrcLangExt_Unknown = 0x00000,
- SrcLangExt_IDL = 0x00008,
- SrcLangExt_Java = 0x00010,
- SrcLangExt_CSharp = 0x00020,
- SrcLangExt_D = 0x00040,
- SrcLangExt_PHP = 0x00080,
- SrcLangExt_ObjC = 0x00100,
- SrcLangExt_Cpp = 0x00200,
- SrcLangExt_JS = 0x00400,
- SrcLangExt_Python = 0x00800,
- SrcLangExt_Fortran = 0x01000,
- SrcLangExt_VHDL = 0x02000,
- SrcLangExt_XML = 0x04000,
- SrcLangExt_Tcl = 0x08000,
- SrcLangExt_Markdown = 0x10000
-};
-
-struct Grouping
-{
- enum GroupPri_t
- {
- GROUPING_LOWEST,
- GROUPING_AUTO_WEAK = GROUPING_LOWEST, //!< membership in group was defined via \@weakgroup
- GROUPING_AUTO_ADD, //!< membership in group was defined via \@add[to]group
- GROUPING_AUTO_DEF, //!< membership in group was defined via \@defgroup
- GROUPING_AUTO_HIGHEST = GROUPING_AUTO_DEF,
- GROUPING_INGROUP, //!< membership in group was defined by \@ingroup
- GROUPING_HIGHEST = GROUPING_INGROUP
- };
-
- static const char *getGroupPriName( GroupPri_t priority )
- {
- switch( priority )
- {
- case GROUPING_AUTO_WEAK:
- return "@weakgroup";
- case GROUPING_AUTO_ADD:
- return "@addtogroup";
- case GROUPING_AUTO_DEF:
- return "@defgroup";
- case GROUPING_INGROUP:
- return "@ingroup";
- }
- return "???";
- }
-
- Grouping( const char *gn, GroupPri_t p ) : groupname(gn), pri(p) {}
- Grouping( const Grouping &g ) : groupname(g.groupname), pri(g.pri) {}
- QCString groupname; //!< name of the group
- GroupPri_t pri; //!< priority of this definition
-
-};
-
-struct ListItemInfo
-{
- QCString type;
- int itemId;
-};
-
-
-#endif
diff --git a/trunk/src/util.cpp b/trunk/src/util.cpp
deleted file mode 100644
index 41b2991..0000000
--- a/trunk/src/util.cpp
+++ /dev/null
@@ -1,7361 +0,0 @@
-/*****************************************************************************
- *
- *
- *
- * Copyright (C) 1997-2012 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.
- *
- */
-
-#include <stdlib.h>
-#include <ctype.h>
-#include <errno.h>
-#include <math.h>
-
-#include "md5.h"
-
-#include "qtbc.h"
-#include <qregexp.h>
-#include <qfileinfo.h>
-#include <qdir.h>
-#include <qdatetime.h>
-#include <qcache.h>
-
-#include "util.h"
-#include "message.h"
-#include "classdef.h"
-#include "filedef.h"
-#include "doxygen.h"
-#include "outputlist.h"
-#include "defargs.h"
-#include "language.h"
-#include "config.h"
-#include "htmlhelp.h"
-#include "example.h"
-#include "version.h"
-#include "groupdef.h"
-#include "reflist.h"
-#include "pagedef.h"
-#include "debug.h"
-#include "searchindex.h"
-#include "doxygen.h"
-#include "textdocvisitor.h"
-#include "portable.h"
-#include "parserintf.h"
-#include "bufstr.h"
-#include "image.h"
-#include "growbuf.h"
-#include "entry.h"
-#include "arguments.h"
-
-#define ENABLE_TRACINGSUPPORT 0
-
-#if defined(_OS_MAC_) && ENABLE_TRACINGSUPPORT
-#define TRACINGSUPPORT
-#endif
-
-#ifdef TRACINGSUPPORT
-#include <execinfo.h>
-#include <unistd.h>
-#endif
-
-
-//------------------------------------------------------------------------
-
-// selects one of the name to sub-dir mapping algorithms that is used
-// to select a sub directory when CREATE_SUBDIRS is set to YES.
-
-#define ALGO_COUNT 1
-#define ALGO_CRC16 2
-#define ALGO_MD5 3
-
-//#define MAP_ALGO ALGO_COUNT
-//#define MAP_ALGO ALGO_CRC16
-#define MAP_ALGO ALGO_MD5
-
-#define REL_PATH_TO_ROOT "../../"
-
-//------------------------------------------------------------------------
-// TextGeneratorOLImpl implementation
-//------------------------------------------------------------------------
-
-TextGeneratorOLImpl::TextGeneratorOLImpl(OutputDocInterface &od) : m_od(od)
-{
-}
-
-void TextGeneratorOLImpl::writeString(const char *s,bool keepSpaces) const
-{
- if (s==0) return;
- //printf("TextGeneratorOlImpl::writeString('%s',%d)\n",s,keepSpaces);
- if (keepSpaces)
- {
- const char *p=s;
- if (p)
- {
- char cs[2];
- char c;
- cs[1]='\0';
- while ((c=*p++))
- {
- if (c==' ') m_od.writeNonBreakableSpace(1);
- else cs[0]=c,m_od.docify(cs);
- }
- }
- }
- else
- {
- m_od.docify(s);
- }
-}
-
-void TextGeneratorOLImpl::writeBreak(int indent) const
-{
- m_od.lineBreak("typebreak");
- int i;
- for (i=0;i<indent;i++)
- {
- m_od.writeNonBreakableSpace(3);
- }
-}
-
-void TextGeneratorOLImpl::writeLink(const char *extRef,const char *file,
- const char *anchor,const char *text
- ) const
-{
- //printf("TextGeneratorOlImpl::writeLink('%s')\n",text);
- m_od.writeObjectLink(extRef,file,anchor,text);
-}
-
-//------------------------------------------------------------------------
-//------------------------------------------------------------------------
-
-// an inheritance tree of depth of 100000 should be enough for everyone :-)
-const int maxInheritanceDepth = 100000;
-
-/*!
- Removes all anonymous scopes from string s
- Possible examples:
-\verbatim
- "bla::@10::blep" => "bla::blep"
- "bla::@10::@11::blep" => "bla::blep"
- "@10::blep" => "blep"
- " @10::blep" => "blep"
- "@9::@10::blep" => "blep"
- "bla::@1" => "bla"
- "bla::@1::@2" => "bla"
- "bla @1" => "bla"
-\endverbatim
- */
-QCString removeAnonymousScopes(const QCString &s)
-{
- QCString result;
- if (s.isEmpty()) return result;
- static QRegExp re("[ :]*@[0-9]+[: ]*");
- int i,l,sl=s.length();
- int p=0;
- while ((i=re.match(s,p,&l))!=-1)
- {
- result+=s.mid(p,i-p);
- int c=i;
- bool b1=FALSE,b2=FALSE;
- while (c<i+l && s.at(c)!='@') if (s.at(c++)==':') b1=TRUE;
- c=i+l-1;
- while (c>=i && s.at(c)!='@') if (s.at(c--)==':') b2=TRUE;
- if (b1 && b2)
- {
- result+="::";
- }
- p=i+l;
- }
- result+=s.right(sl-p);
- //printf("removeAnonymousScopes(`%s')=`%s'\n",s.data(),result.data());
- return result;
-}
-
-// replace anonymous scopes with __anonymous__ or replacement if provided
-QCString replaceAnonymousScopes(const QCString &s,const char *replacement)
-{
- QCString result;
- if (s.isEmpty()) return result;
- static QRegExp re("@[0-9]+");
- int i,l,sl=s.length();
- int p=0;
- while ((i=re.match(s,p,&l))!=-1)
- {
- result+=s.mid(p,i-p);
- if (replacement)
- {
- result+=replacement;
- }
- else
- {
- result+="__anonymous__";
- }
- p=i+l;
- }
- result+=s.right(sl-p);
- //printf("replaceAnonymousScopes(`%s')=`%s'\n",s.data(),result.data());
- return result;
-}
-
-
-// strip anonymous left hand side part of the scope
-QCString stripAnonymousNamespaceScope(const QCString &s)
-{
- int i,p=0,l;
- QCString newScope;
- while ((i=getScopeFragment(s,p,&l))!=-1)
- {
- //printf("Scope fragment %s\n",s.mid(i,l).data());
- if (Doxygen::namespaceSDict->find(s.left(i+l))!=0)
- {
- if (s.at(i)!='@')
- {
- if (!newScope.isEmpty()) newScope+="::";
- newScope+=s.mid(i,l);
- }
- }
- else
- {
- if (!newScope.isEmpty()) newScope+="::";
- newScope+=s.right(s.length()-i);
- goto done;
- }
- p=i+l;
- }
-done:
- //printf("stripAnonymousNamespaceScope(`%s')=`%s'\n",s.data(),newScope.data());
- return newScope;
-}
-
-void writePageRef(OutputDocInterface &od,const char *cn,const char *mn)
-{
- od.pushGeneratorState();
-
- od.disable(OutputGenerator::Html);
- od.disable(OutputGenerator::Man);
- if (Config_getBool("PDF_HYPERLINKS")) od.disable(OutputGenerator::Latex);
- if (Config_getBool("RTF_HYPERLINKS")) od.disable(OutputGenerator::RTF);
- od.startPageRef();
- od.docify(theTranslator->trPageAbbreviation());
- od.endPageRef(cn,mn);
-
- od.popGeneratorState();
-}
-
-/*! Generate a place holder for a position in a list. Used for
- * translators to be able to specify different elements orders
- * depending on whether text flows from left to right or visa versa.
- */
-QCString generateMarker(int id)
-{
- QCString result;
- result.sprintf("@%d",id);
- return result;
-}
-
-static QCString stripFromPath(const QCString &path,QStrList &l)
-{
- // look at all the strings in the list and strip the longest match
- const char *s=l.first();
- QCString potential;
- unsigned int length = 0;
- while (s)
- {
- QCString prefix = s;
- if (prefix.length() > length &&
- stricmp(path.left(prefix.length()),prefix)==0) // case insensitive compare
- {
- length = prefix.length();
- potential = path.right(path.length()-prefix.length());
- }
- s = l.next();
- }
- if (length) return potential;
- return path;
-}
-
-/*! strip part of \a path if it matches
- * one of the paths in the Config_getList("STRIP_FROM_PATH") list
- */
-QCString stripFromPath(const QCString &path)
-{
- return stripFromPath(path,Config_getList("STRIP_FROM_PATH"));
-}
-
-/*! strip part of \a path if it matches
- * one of the paths in the Config_getList("INCLUDE_PATH") list
- */
-QCString stripFromIncludePath(const QCString &path)
-{
- return stripFromPath(path,Config_getList("STRIP_FROM_INC_PATH"));
-}
-
-/*! try to determine if \a name is a source or a header file name by looking
- * at the extension. A number of variations is allowed in both upper and
- * lower case) If anyone knows or uses another extension please let me know :-)
- */
-int guessSection(const char *name)
-{
- QCString n=((QCString)name).lower();
- if (n.right(2)==".c" || // source
- n.right(3)==".cc" ||
- n.right(4)==".cxx" ||
- n.right(4)==".cpp" ||
- n.right(4)==".c++" ||
- n.right(5)==".java" ||
- n.right(2)==".m" ||
- n.right(2)==".M" ||
- n.right(3)==".mm" ||
- n.right(3)==".ii" || // inline
- n.right(4)==".ixx" ||
- n.right(4)==".ipp" ||
- n.right(4)==".i++" ||
- n.right(4)==".inl" ||
- n.right(4)==".xml"
- ) return Entry::SOURCE_SEC;
- if (n.right(2)==".h" || // header
- n.right(3)==".hh" ||
- n.right(4)==".hxx" ||
- n.right(4)==".hpp" ||
- n.right(4)==".h++" ||
- n.right(4)==".idl" ||
- n.right(4)==".ddl" ||
- n.right(5)==".pidl"
- ) return Entry::HEADER_SEC;
- return 0;
-}
-
-QCString resolveTypeDef(Definition *context,const QCString &qualifiedName,
- Definition **typedefContext)
-{
- //printf("<<resolveTypeDef(%s,%s)\n",
- // context ? context->name().data() : "<none>",qualifiedName.data());
- QCString result;
- if (qualifiedName.isEmpty())
- {
- //printf(" qualified name empty!\n");
- return result;
- }
-
- Definition *mContext=context;
- if (typedefContext) *typedefContext=context;
-
- // see if the qualified name has a scope part
- int scopeIndex = qualifiedName.findRev("::");
- QCString resName=qualifiedName;
- if (scopeIndex!=-1) // strip scope part for the name
- {
- resName=qualifiedName.right(qualifiedName.length()-scopeIndex-2);
- if (resName.isEmpty())
- {
- // qualifiedName was of form A:: !
- //printf(" qualified name of form A::!\n");
- return result;
- }
- }
- MemberDef *md=0;
- while (mContext && md==0)
- {
- // step 1: get the right scope
- Definition *resScope=mContext;
- if (scopeIndex!=-1)
- {
- // split-off scope part
- QCString resScopeName = qualifiedName.left(scopeIndex);
- //printf("resScopeName=`%s'\n",resScopeName.data());
-
- // look-up scope in context
- int is,ps=0;
- int l;
- while ((is=getScopeFragment(resScopeName,ps,&l))!=-1)
- {
- QCString qualScopePart = resScopeName.mid(is,l);
- QCString tmp = resolveTypeDef(mContext,qualScopePart);
- if (!tmp.isEmpty()) qualScopePart=tmp;
- resScope = resScope->findInnerCompound(qualScopePart);
- //printf("qualScopePart=`%s' resScope=%p\n",qualScopePart.data(),resScope);
- if (resScope==0) break;
- ps=is+l;
- }
- }
- //printf("resScope=%s\n",resScope?resScope->name().data():"<none>");
-
- // step 2: get the member
- if (resScope) // no scope or scope found in the current context
- {
- //printf("scope found: %s, look for typedef %s\n",
- // resScope->qualifiedName().data(),resName.data());
- MemberNameSDict *mnd=0;
- if (resScope->definitionType()==Definition::TypeClass)
- {
- mnd=Doxygen::memberNameSDict;
- }
- else
- {
- mnd=Doxygen::functionNameSDict;
- }
- MemberName *mn=mnd->find(resName);
- if (mn)
- {
- MemberNameIterator mni(*mn);
- MemberDef *tmd=0;
- int minDist=-1;
- for (;(tmd=mni.current());++mni)
- {
- //printf("Found member %s resScope=%s outerScope=%s mContext=%p\n",
- // tmd->name().data(), resScope->name().data(),
- // tmd->getOuterScope()->name().data(), mContext);
- if (tmd->isTypedef() /*&& tmd->getOuterScope()==resScope*/)
- {
- int dist=isAccessibleFrom(resScope,0,tmd);
- if (dist!=-1 && (md==0 || dist<minDist))
- {
- md = tmd;
- minDist = dist;
- }
- }
- }
- }
- }
- mContext=mContext->getOuterScope();
- }
-
- // step 3: get the member's type
- if (md)
- {
- //printf(">>resolveTypeDef: Found typedef name `%s' in scope `%s' value=`%s' args='%s'\n",
- // qualifiedName.data(),context->name().data(),md->typeString(),md->argsString()
- // );
- result=md->typeString();
- QString args = md->argsString();
- if (args.find(")(")!=-1) // typedef of a function/member pointer
- {
- result+=args;
- }
- else if (args.find('[')!=-1) // typedef of an array
- {
- result+=args;
- }
- if (typedefContext) *typedefContext=md->getOuterScope();
- }
- else
- {
- //printf(">>resolveTypeDef: Typedef `%s' not found in scope `%s'!\n",
- // qualifiedName.data(),context ? context->name().data() : "<global>");
- }
- return result;
-
-}
-
-
-/*! Get a class definition given its name.
- * Returns 0 if the class is not found.
- */
-ClassDef *getClass(const char *name)
-{
- if (name==0 || name[0]=='\0') return 0;
- return Doxygen::classSDict->find(name);
-}
-
-NamespaceDef *getResolvedNamespace(const char *name)
-{
- if (name==0 || name[0]=='\0') return 0;
- QCString *subst = Doxygen::namespaceAliasDict[name];
- if (subst)
- {
- int count=0; // recursion detection guard
- QCString *newSubst;
- while ((newSubst=Doxygen::namespaceAliasDict[*subst]) && count<10)
- {
- subst=newSubst;
- count++;
- }
- if (count==10)
- {
- err("warning: possible recursive namespace alias detected for %s!\n",name);
- }
- return Doxygen::namespaceSDict->find(subst->data());
- }
- else
- {
- return Doxygen::namespaceSDict->find(name);
- }
-}
-
-static QDict<MemberDef> g_resolvedTypedefs;
-static QDict<Definition> g_visitedNamespaces;
-
-// forward declaration
-static ClassDef *getResolvedClassRec(Definition *scope,
- FileDef *fileScope,
- const char *n,
- MemberDef **pTypeDef,
- QCString *pTemplSpec,
- QCString *pResolvedType
- );
-int isAccessibleFromWithExpScope(Definition *scope,FileDef *fileScope,Definition *item,
- const QCString &explicitScopePart);
-
-/*! Returns the class representing the value of the typedef represented by \a md
- * within file \a fileScope.
- *
- * Example: typedef A T; will return the class representing A if it is a class.
- *
- * Example: typedef int T; will return 0, since "int" is not a class.
- */
-ClassDef *newResolveTypedef(FileDef *fileScope,MemberDef *md,
- MemberDef **pMemType,QCString *pTemplSpec,
- QCString *pResolvedType,
- ArgumentList *actTemplParams)
-{
- //printf("newResolveTypedef(md=%p,cachedVal=%p)\n",md,md->getCachedTypedefVal());
- bool isCached = md->isTypedefValCached(); // value already cached
- if (isCached)
- {
- //printf("Already cached %s->%s [%s]\n",
- // md->name().data(),
- // md->getCachedTypedefVal()?md->getCachedTypedefVal()->name().data():"<none>",
- // md->getCachedResolvedTypedef()?md->getCachedResolvedTypedef().data():"<none>");
-
- if (pTemplSpec) *pTemplSpec = md->getCachedTypedefTemplSpec();
- if (pResolvedType) *pResolvedType = md->getCachedResolvedTypedef();
- return md->getCachedTypedefVal();
- }
- //printf("new typedef\n");
- QCString qname = md->qualifiedName();
- if (g_resolvedTypedefs.find(qname)) return 0; // typedef already done
-
- g_resolvedTypedefs.insert(qname,md); // put on the trace list
-
- ClassDef *typeClass = md->getClassDef();
- QCString type = md->typeString(); // get the "value" of the typedef
- if (typeClass && typeClass->isTemplate() &&
- actTemplParams && actTemplParams->count()>0)
- {
- type = substituteTemplateArgumentsInString(type,
- typeClass->templateArguments(),actTemplParams);
- }
- QCString typedefValue = type;
- int tl=type.length();
- int ip=tl-1; // remove * and & at the end
- while (ip>=0 && (type.at(ip)=='*' || type.at(ip)=='&' || type.at(ip)==' '))
- {
- ip--;
- }
- type=type.left(ip+1);
- type.stripPrefix("const "); // strip leading "const"
- type.stripPrefix("struct "); // strip leading "struct"
- type.stripPrefix("union "); // strip leading "union"
- int sp=0;
- tl=type.length(); // length may have been changed
- while (sp<tl && type.at(sp)==' ') sp++;
- MemberDef *memTypeDef = 0;
- ClassDef *result = getResolvedClassRec(md->getOuterScope(),
- fileScope,type,&memTypeDef,0,pResolvedType);
- // if type is a typedef then return what it resolves to.
- if (memTypeDef && memTypeDef->isTypedef())
- {
- result=newResolveTypedef(fileScope,memTypeDef,pMemType,pTemplSpec);
- goto done;
- }
- else if (memTypeDef && memTypeDef->isEnumerate() && pMemType)
- {
- *pMemType = memTypeDef;
- }
-
- //printf("type=%s result=%p\n",type.data(),result);
- if (result==0)
- {
- // try unspecialized version if type is template
- int si=type.findRev("::");
- int i=type.find('<');
- if (si==-1 && i!=-1) // typedef of a template => try the unspecialized version
- {
- if (pTemplSpec) *pTemplSpec = type.mid(i);
- result = getResolvedClassRec(md->getOuterScope(),fileScope,
- type.left(i),0,0,pResolvedType);
- //printf("result=%p pRresolvedType=%s sp=%d ip=%d tl=%d\n",
- // result,pResolvedType?pResolvedType->data():"<none>",sp,ip,tl);
- }
- else if (si!=-1) // A::B
- {
- i=type.find('<',si);
- if (i==-1) // Something like A<T>::B => lookup A::B
- {
- i=type.length();
- }
- else // Something like A<T>::B<S> => lookup A::B, spec=<S>
- {
- if (pTemplSpec) *pTemplSpec = type.mid(i);
- }
- result = getResolvedClassRec(md->getOuterScope(),fileScope,
- stripTemplateSpecifiersFromScope(type.left(i),FALSE),0,0,
- pResolvedType);
- }
-
- //if (result) ip=si+sp+1;
- }
-
-done:
- if (pResolvedType)
- {
- if (result)
- {
- *pResolvedType=result->qualifiedName();
- //printf("*pResolvedType=%s\n",pResolvedType->data());
- if (sp>0) pResolvedType->prepend(typedefValue.left(sp));
- if (ip<tl-1) pResolvedType->append(typedefValue.right(tl-ip-1));
- }
- else
- {
- *pResolvedType=typedefValue;
- }
- }
-
- // remember computed value for next time
- if (result && result->getDefFileName()!="<code>")
- // this check is needed to prevent that temporary classes that are
- // introduced while parsing code fragments are being cached here.
- {
- //printf("setting cached typedef %p in result %p\n",md,result);
- //printf("==> %s (%s,%d)\n",result->name().data(),result->getDefFileName().data(),result->getDefLine());
- //printf("*pResolvedType=%s\n",pResolvedType?pResolvedType->data():"<none>");
- md->cacheTypedefVal(result,
- pTemplSpec ? *pTemplSpec : QCString(),
- pResolvedType ? *pResolvedType : QCString()
- );
- }
-
- g_resolvedTypedefs.remove(qname); // remove from the trace list
-
- return result;
-}
-
-/*! Substitutes a simple unqualified \a name within \a scope. Returns the
- * value of the typedef or \a name if no typedef was found.
- */
-static QCString substTypedef(Definition *scope,FileDef *fileScope,const QCString &name,
- MemberDef **pTypeDef=0)
-{
- QCString result=name;
- if (name.isEmpty()) return result;
-
- // lookup scope fragment in the symbol map
- DefinitionIntf *di = Doxygen::symbolMap->find(name);
- if (di==0) return result; // no matches
-
- MemberDef *bestMatch=0;
- if (di->definitionType()==DefinitionIntf::TypeSymbolList) // multi symbols
- {
- // search for the best match
- DefinitionListIterator dli(*(DefinitionList*)di);
- Definition *d;
- int minDistance=10000; // init at "infinite"
- for (dli.toFirst();(d=dli.current());++dli) // foreach definition
- {
- // only look at members
- if (d->definitionType()==Definition::TypeMember)
- {
- // that are also typedefs
- MemberDef *md = (MemberDef *)d;
- if (md->isTypedef()) // d is a typedef
- {
- // test accessibility of typedef within scope.
- int distance = isAccessibleFromWithExpScope(scope,fileScope,d,"");
- if (distance!=-1 && distance<minDistance)
- // definition is accessible and a better match
- {
- minDistance=distance;
- bestMatch = md;
- }
- }
- }
- }
- }
- else if (di->definitionType()==DefinitionIntf::TypeMember) // single symbol
- {
- Definition *d = (Definition*)di;
- // that are also typedefs
- MemberDef *md = (MemberDef *)di;
- if (md->isTypedef()) // d is a typedef
- {
- // test accessibility of typedef within scope.
- int distance = isAccessibleFromWithExpScope(scope,fileScope,d,"");
- if (distance!=-1) // definition is accessible
- {
- bestMatch = md;
- }
- }
- }
- if (bestMatch)
- {
- result = bestMatch->typeString();
- if (pTypeDef) *pTypeDef=bestMatch;
- }
-
- //printf("substTypedef(%s,%s)=%s\n",scope?scope->name().data():"<global>",
- // name.data(),result.data());
- return result;
-}
-
-static Definition *endOfPathIsUsedClass(SDict<Definition> *cl,const QCString &localName)
-{
- if (cl)
- {
- SDict<Definition>::Iterator cli(*cl);
- Definition *cd;
- for (cli.toFirst();(cd=cli.current());++cli)
- {
- if (cd->localName()==localName)
- {
- return cd;
- }
- }
- }
- return 0;
-}
-
-/*! Starting with scope \a start, the string \a path is interpreted as
- * a part of a qualified scope name (e.g. A::B::C), and the scope is
- * searched. If found the scope definition is returned, otherwise 0
- * is returned.
- */
-static Definition *followPath(Definition *start,FileDef *fileScope,const QCString &path)
-{
- int is,ps;
- int l;
- Definition *current=start;
- ps=0;
- //printf("followPath: start='%s' path='%s'\n",start?start->name().data():"<none>",path.data());
- // for each part of the explicit scope
- while ((is=getScopeFragment(path,ps,&l))!=-1)
- {
- // try to resolve the part if it is a typedef
- MemberDef *typeDef=0;
- QCString qualScopePart = substTypedef(current,fileScope,path.mid(is,l),&typeDef);
- //printf(" qualScopePart=%s\n",qualScopePart.data());
- if (typeDef)
- {
- ClassDef *type = newResolveTypedef(fileScope,typeDef);
- if (type)
- {
- //printf("Found type %s\n",type->name().data());
- return type;
- }
- }
- Definition *next = current->findInnerCompound(qualScopePart);
- //printf("++ Looking for %s inside %s result %s\n",
- // qualScopePart.data(),
- // current->name().data(),
- // next?next->name().data():"<null>");
- if (next==0) // failed to follow the path
- {
- //printf("==> next==0!\n");
- if (current->definitionType()==Definition::TypeNamespace)
- {
- next = endOfPathIsUsedClass(
- ((NamespaceDef *)current)->getUsedClasses(),qualScopePart);
- }
- else if (current->definitionType()==Definition::TypeFile)
- {
- next = endOfPathIsUsedClass(
- ((FileDef *)current)->getUsedClasses(),qualScopePart);
- }
- current = next;
- if (current==0) break;
- }
- else // continue to follow scope
- {
- current = next;
- //printf("==> current = %p\n",current);
- }
- ps=is+l;
- }
- //printf("followPath(start=%s,path=%s) result=%s\n",
- // start->name().data(),path.data(),current?current->name().data():"<null>");
- return current; // path could be followed
-}
-
-bool accessibleViaUsingClass(const SDict<Definition> *cl,
- FileDef *fileScope,
- Definition *item,
- const QCString &explicitScopePart=""
- )
-{
- //printf("accessibleViaUsingClass(%p)\n",cl);
- if (cl) // see if the class was imported via a using statement
- {
- SDict<Definition>::Iterator cli(*cl);
- Definition *ucd;
- bool explicitScopePartEmpty = explicitScopePart.isEmpty();
- for (cli.toFirst();(ucd=cli.current());++cli)
- {
- //printf("Trying via used class %s\n",ucd->name().data());
- Definition *sc = explicitScopePartEmpty ? ucd : followPath(ucd,fileScope,explicitScopePart);
- if (sc && sc==item) return TRUE;
- //printf("Try via used class done\n");
- }
- }
- return FALSE;
-}
-
-bool accessibleViaUsingNamespace(const NamespaceSDict *nl,
- FileDef *fileScope,
- Definition *item,
- const QCString &explicitScopePart="")
-{
- static QDict<void> visitedDict;
- if (nl) // check used namespaces for the class
- {
- NamespaceSDict::Iterator nli(*nl);
- NamespaceDef *und;
- int count=0;
- for (nli.toFirst();(und=nli.current());++nli,count++)
- {
- //printf("[Trying via used namespace %s: count=%d/%d\n",und->name().data(),
- // count,nl->count());
- Definition *sc = explicitScopePart.isEmpty() ? und : followPath(und,fileScope,explicitScopePart);
- if (sc && item->getOuterScope()==sc)
- {
- //printf("] found it\n");
- return TRUE;
- }
- QCString key=und->name();
- if (und->getUsedNamespaces() && visitedDict.find(key)==0)
- {
- visitedDict.insert(key,(void *)0x08);
-
- if (accessibleViaUsingNamespace(und->getUsedNamespaces(),fileScope,item,explicitScopePart))
- {
- //printf("] found it via recursion\n");
- return TRUE;
- }
-
- visitedDict.remove(key);
- }
- //printf("] Try via used namespace done\n");
- }
- }
- return FALSE;
-}
-
-const int MAX_STACK_SIZE = 1000;
-
-class AccessStack
-{
- public:
- AccessStack() : m_index(0) {}
- void push(Definition *scope,FileDef *fileScope,Definition *item)
- {
- if (m_index<MAX_STACK_SIZE)
- {
- m_elements[m_index].scope = scope;
- m_elements[m_index].fileScope = fileScope;
- m_elements[m_index].item = item;
- m_index++;
- }
- }
- void push(Definition *scope,FileDef *fileScope,Definition *item,const QCString &expScope)
- {
- if (m_index<MAX_STACK_SIZE)
- {
- m_elements[m_index].scope = scope;
- m_elements[m_index].fileScope = fileScope;
- m_elements[m_index].item = item;
- m_elements[m_index].expScope = expScope;
- m_index++;
- }
- }
- void pop()
- {
- if (m_index>0) m_index--;
- }
- bool find(Definition *scope,FileDef *fileScope, Definition *item)
- {
- int i=0;
- for (i=0;i<m_index;i++)
- {
- AccessElem *e = &m_elements[i];
- if (e->scope==scope && e->fileScope==fileScope && e->item==item)
- {
- return TRUE;
- }
- }
- return FALSE;
- }
- bool find(Definition *scope,FileDef *fileScope, Definition *item,const QCString &expScope)
- {
- int i=0;
- for (i=0;i<m_index;i++)
- {
- AccessElem *e = &m_elements[i];
- if (e->scope==scope && e->fileScope==fileScope && e->item==item && e->expScope==expScope)
- {
- return TRUE;
- }
- }
- return FALSE;
- }
-
- private:
- struct AccessElem
- {
- Definition *scope;
- FileDef *fileScope;
- Definition *item;
- QCString expScope;
- };
- int m_index;
- AccessElem m_elements[MAX_STACK_SIZE];
-};
-
-/* Returns the "distance" (=number of levels up) from item to scope, or -1
- * if item in not inside scope.
- */
-int isAccessibleFrom(Definition *scope,FileDef *fileScope,Definition *item)
-{
- //printf("<isAccesibleFrom(scope=%s,item=%s itemScope=%s)\n",
- // scope->name().data(),item->name().data(),item->getOuterScope()->name().data());
-
- static AccessStack accessStack;
- if (accessStack.find(scope,fileScope,item))
- {
- return -1;
- }
- accessStack.push(scope,fileScope,item);
-
- int result=0; // assume we found it
- int i;
-
- Definition *itemScope=item->getOuterScope();
-
- if (
- itemScope==scope || // same thing
- (item->definitionType()==Definition::TypeMember && // a member
- itemScope && itemScope->definitionType()==Definition::TypeClass && // of a class
- scope->definitionType()==Definition::TypeClass && // accessible
- ((ClassDef*)scope)->isAccessibleMember((MemberDef *)item) // from scope
- ) ||
- (item->definitionType()==Definition::TypeClass && // a nested class
- itemScope && itemScope->definitionType()==Definition::TypeClass && // inside a base
- scope->definitionType()==Definition::TypeClass && // class of scope
- ((ClassDef*)scope)->isBaseClass((ClassDef*)itemScope,TRUE)
- )
- )
- {
- //printf("> found it\n");
- }
- else if (scope==Doxygen::globalScope)
- {
- if (fileScope)
- {
- SDict<Definition> *cl = fileScope->getUsedClasses();
- if (accessibleViaUsingClass(cl,fileScope,item))
- {
- //printf("> found via used class\n");
- goto done;
- }
- NamespaceSDict *nl = fileScope->getUsedNamespaces();
- if (accessibleViaUsingNamespace(nl,fileScope,item))
- {
- //printf("> found via used namespace\n");
- goto done;
- }
- }
- //printf("> reached global scope\n");
- result=-1; // not found in path to globalScope
- }
- else // keep searching
- {
- // check if scope is a namespace, which is using other classes and namespaces
- if (scope->definitionType()==Definition::TypeNamespace)
- {
- NamespaceDef *nscope = (NamespaceDef*)scope;
- //printf(" %s is namespace with %d used classes\n",nscope->name().data(),nscope->getUsedClasses());
- SDict<Definition> *cl = nscope->getUsedClasses();
- if (accessibleViaUsingClass(cl,fileScope,item))
- {
- //printf("> found via used class\n");
- goto done;
- }
- NamespaceSDict *nl = nscope->getUsedNamespaces();
- if (accessibleViaUsingNamespace(nl,fileScope,item))
- {
- //printf("> found via used namespace\n");
- goto done;
- }
- }
- // repeat for the parent scope
- i=isAccessibleFrom(scope->getOuterScope(),fileScope,item);
- //printf("> result=%d\n",i);
- result= (i==-1) ? -1 : i+2;
- }
-done:
- accessStack.pop();
- //Doxygen::lookupCache.insert(key,new int(result));
- return result;
-}
-
-
-/* Returns the "distance" (=number of levels up) from item to scope, or -1
- * if item in not in this scope. The explicitScopePart limits the search
- * to scopes that match \a scope (or its parent scope(s)) plus the explicit part.
- * Example:
- *
- * class A { public: class I {}; };
- * class B { public: class J {}; };
- *
- * - Looking for item=='J' inside scope=='B' will return 0.
- * - Looking for item=='I' inside scope=='B' will return -1
- * (as it is not found in B nor in the global scope).
- * - Looking for item=='A::I' inside scope=='B', first the match B::A::I is tried but
- * not found and then A::I is searched in the global scope, which matches and
- * thus the result is 1.
- */
-int isAccessibleFromWithExpScope(Definition *scope,FileDef *fileScope,
- Definition *item,const QCString &explicitScopePart)
-{
- if (explicitScopePart.isEmpty())
- {
- // handle degenerate case where there is no explicit scope.
- return isAccessibleFrom(scope,fileScope,item);
- }
-
- static AccessStack accessStack;
- if (accessStack.find(scope,fileScope,item,explicitScopePart))
- {
- return -1;
- }
- accessStack.push(scope,fileScope,item,explicitScopePart);
-
-
- //printf(" <isAccessibleFromWithExpScope(%s,%s,%s)\n",scope?scope->name().data():"<global>",
- // item?item->name().data():"<none>",
- // explicitScopePart.data());
- int result=0; // assume we found it
- Definition *newScope = followPath(scope,fileScope,explicitScopePart);
- if (newScope) // explicitScope is inside scope => newScope is the result
- {
- Definition *itemScope = item->getOuterScope();
- //printf(" scope traversal successful %s<->%s!\n",itemScope->name().data(),newScope->name().data());
- //if (newScope && newScope->definitionType()==Definition::TypeClass)
- //{
- // ClassDef *cd = (ClassDef *)newScope;
- // printf("---> Class %s: bases=%p\n",cd->name().data(),cd->baseClasses());
- //}
- if (itemScope==newScope) // exact match of scopes => distance==0
- {
- //printf("> found it\n");
- }
- else if (itemScope && newScope &&
- itemScope->definitionType()==Definition::TypeClass &&
- newScope->definitionType()==Definition::TypeClass &&
- ((ClassDef*)newScope)->isBaseClass((ClassDef*)itemScope,TRUE,0)
- )
- {
- // inheritance is also ok. Example: looking for B::I, where
- // class A { public: class I {} };
- // class B : public A {}
- // but looking for B::I, where
- // class A { public: class I {} };
- // class B { public: class I {} };
- // will find A::I, so we still prefer a direct match and give this one a distance of 1
- result=1;
-
- //printf("scope(%s) is base class of newScope(%s)\n",
- // scope->name().data(),newScope->name().data());
- }
- else
- {
- int i=-1;
- if (newScope->definitionType()==Definition::TypeNamespace)
- {
- g_visitedNamespaces.insert(newScope->name(),newScope);
- // this part deals with the case where item is a class
- // A::B::C but is explicit referenced as A::C, where B is imported
- // in A via a using directive.
- //printf("newScope is a namespace: %s!\n",newScope->name().data());
- NamespaceDef *nscope = (NamespaceDef*)newScope;
- SDict<Definition> *cl = nscope->getUsedClasses();
- if (cl)
- {
- SDict<Definition>::Iterator cli(*cl);
- Definition *cd;
- for (cli.toFirst();(cd=cli.current());++cli)
- {
- //printf("Trying for class %s\n",cd->name().data());
- if (cd==item)
- {
- //printf("> class is used in this scope\n");
- goto done;
- }
- }
- }
- NamespaceSDict *nl = nscope->getUsedNamespaces();
- if (nl)
- {
- NamespaceSDict::Iterator nli(*nl);
- NamespaceDef *nd;
- for (nli.toFirst();(nd=nli.current());++nli)
- {
- if (g_visitedNamespaces.find(nd->name())==0)
- {
- //printf("Trying for namespace %s\n",nd->name().data());
- i = isAccessibleFromWithExpScope(scope,fileScope,item,nd->name());
- if (i!=-1)
- {
- //printf("> found via explicit scope of used namespace\n");
- goto done;
- }
- }
- }
- }
- }
- // repeat for the parent scope
- if (scope!=Doxygen::globalScope)
- {
- i = isAccessibleFromWithExpScope(scope->getOuterScope(),fileScope,
- item,explicitScopePart);
- }
- //printf(" | result=%d\n",i);
- result = (i==-1) ? -1 : i+2;
- }
- }
- else // failed to resolve explicitScope
- {
- //printf(" failed to resolve: scope=%s\n",scope->name().data());
- if (scope->definitionType()==Definition::TypeNamespace)
- {
- NamespaceDef *nscope = (NamespaceDef*)scope;
- NamespaceSDict *nl = nscope->getUsedNamespaces();
- if (accessibleViaUsingNamespace(nl,fileScope,item,explicitScopePart))
- {
- //printf("> found in used namespace\n");
- goto done;
- }
- }
- if (scope==Doxygen::globalScope)
- {
- if (fileScope)
- {
- NamespaceSDict *nl = fileScope->getUsedNamespaces();
- if (accessibleViaUsingNamespace(nl,fileScope,item,explicitScopePart))
- {
- //printf("> found in used namespace\n");
- goto done;
- }
- }
- //printf("> not found\n");
- result=-1;
- }
- else // continue by looking into the parent scope
- {
- int i=isAccessibleFromWithExpScope(scope->getOuterScope(),fileScope,
- item,explicitScopePart);
- //printf("> result=%d\n",i);
- result= (i==-1) ? -1 : i+2;
- }
- }
-
-done:
- //printf(" > result=%d\n",result);
- accessStack.pop();
- //Doxygen::lookupCache.insert(key,new int(result));
- return result;
-}
-
-int computeQualifiedIndex(const QCString &name)
-{
- int i = name.find('<');
- return name.findRev("::",i==-1 ? name.length() : i);
-}
-
-static void getResolvedSymbol(Definition *scope,
- FileDef *fileScope,
- Definition *d,
- const QCString &explicitScopePart,
- ArgumentList *actTemplParams,
- int &minDistance,
- ClassDef *&bestMatch,
- MemberDef *&bestTypedef,
- QCString &bestTemplSpec,
- QCString &bestResolvedType
- )
-{
- //printf(" => found type %x name=%s d=%p\n",
- // d->definitionType(),d->name().data(),d);
-
- // only look at classes and members that are enums or typedefs
- if (d->definitionType()==Definition::TypeClass ||
- (d->definitionType()==Definition::TypeMember &&
- (((MemberDef*)d)->isTypedef() || ((MemberDef*)d)->isEnumerate())
- )
- )
- {
- g_visitedNamespaces.clear();
- // test accessibility of definition within scope.
- int distance = isAccessibleFromWithExpScope(scope,fileScope,d,explicitScopePart);
- //printf(" %s; distance %s (%p) is %d\n",scope->name().data(),d->name().data(),d,distance);
- if (distance!=-1) // definition is accessible
- {
- // see if we are dealing with a class or a typedef
- if (d->definitionType()==Definition::TypeClass) // d is a class
- {
- ClassDef *cd = (ClassDef *)d;
- //printf("cd=%s\n",cd->name().data());
- if (!cd->isTemplateArgument()) // skip classes that
- // are only there to
- // represent a template
- // argument
- {
- //printf("is not a templ arg\n");
- if (distance<minDistance) // found a definition that is "closer"
- {
- minDistance=distance;
- bestMatch = cd;
- bestTypedef = 0;
- bestTemplSpec.resize(0);
- bestResolvedType = cd->qualifiedName();
- }
- else if (distance==minDistance &&
- fileScope && bestMatch &&
- fileScope->getUsedNamespaces() &&
- d->getOuterScope()->definitionType()==Definition::TypeNamespace &&
- bestMatch->getOuterScope()==Doxygen::globalScope
- )
- {
- // in case the distance is equal it could be that a class X
- // is defined in a namespace and in the global scope. When searched
- // in the global scope the distance is 0 in both cases. We have
- // to choose one of the definitions: we choose the one in the
- // namespace if the fileScope imports namespaces and the definition
- // found was in a namespace while the best match so far isn't.
- // Just a non-perfect heuristic but it could help in some situations
- // (kdecore code is an example).
- minDistance=distance;
- bestMatch = cd;
- bestTypedef = 0;
- bestTemplSpec.resize(0);
- bestResolvedType = cd->qualifiedName();
- }
- }
- else
- {
- //printf(" is a template argument!\n");
- }
- }
- else if (d->definitionType()==Definition::TypeMember)
- {
- MemberDef *md = (MemberDef *)d;
- //printf(" member isTypedef()=%d\n",md->isTypedef());
- if (md->isTypedef()) // d is a typedef
- {
- QCString args=md->argsString();
- if (args.isEmpty()) // do not expand "typedef t a[4];"
- {
- //printf(" found typedef!\n");
-
- // we found a symbol at this distance, but if it didn't
- // resolve to a class, we still have to make sure that
- // something at a greater distance does not match, since
- // that symbol is hidden by this one.
- if (distance<minDistance)
- {
- QCString spec;
- QCString type;
- minDistance=distance;
- MemberDef *enumType = 0;
- ClassDef *cd = newResolveTypedef(fileScope,md,&enumType,&spec,&type,actTemplParams);
- if (cd) // type resolves to a class
- {
- //printf(" bestTypeDef=%p spec=%s type=%s\n",md,spec.data(),type.data());
- bestMatch = cd;
- bestTypedef = md;
- bestTemplSpec = spec;
- bestResolvedType = type;
- }
- else if (enumType) // type resolves to a enum
- {
- //printf(" is enum\n");
- bestMatch = 0;
- bestTypedef = enumType;
- bestTemplSpec = "";
- bestResolvedType = enumType->qualifiedName();
- }
- else if (md->isReference()) // external reference
- {
- bestMatch = 0;
- bestTypedef = md;
- bestTemplSpec = spec;
- bestResolvedType = type;
- }
- else
- {
- bestMatch = 0;
- bestTypedef = md;
- bestTemplSpec.resize(0);
- bestResolvedType.resize(0);
- //printf(" no match\n");
- }
- }
- else
- {
- //printf(" not the best match %d min=%d\n",distance,minDistance);
- }
- }
- else
- {
- //printf(" not a simple typedef\n")
- }
- }
- else if (md->isEnumerate())
- {
- if (distance<minDistance)
- {
- minDistance=distance;
- bestMatch = 0;
- bestTypedef = md;
- bestTemplSpec = "";
- bestResolvedType = md->qualifiedName();
- }
- }
- }
- } // if definition accessible
- else
- {
- //printf(" Not accessible!\n");
- }
- } // if definition is a class or member
- //printf(" bestMatch=%p bestResolvedType=%s\n",bestMatch,bestResolvedType.data());
-}
-
-/* Find the fully qualified class name referred to by the input class
- * or typedef name against the input scope.
- * Loops through scope and each of its parent scopes looking for a
- * match against the input name. Can recursively call itself when
- * resolving typedefs.
- */
-static ClassDef *getResolvedClassRec(Definition *scope,
- FileDef *fileScope,
- const char *n,
- MemberDef **pTypeDef,
- QCString *pTemplSpec,
- QCString *pResolvedType
- )
-{
- //printf("[getResolvedClassRec(%s,%s)\n",scope?scope->name().data():"<global>",n);
- QCString name;
- QCString explicitScopePart;
- QCString strippedTemplateParams;
- name=stripTemplateSpecifiersFromScope
- (removeRedundantWhiteSpace(n),TRUE,
- &strippedTemplateParams);
- ArgumentList actTemplParams;
- if (!strippedTemplateParams.isEmpty()) // template part that was stripped
- {
- stringToArgumentList(strippedTemplateParams,&actTemplParams);
- }
-
- int qualifierIndex = computeQualifiedIndex(name);
- //printf("name=%s qualifierIndex=%d\n",name.data(),qualifierIndex);
- if (qualifierIndex!=-1) // qualified name
- {
- // split off the explicit scope part
- explicitScopePart=name.left(qualifierIndex);
- // todo: improve namespace alias substitution
- replaceNamespaceAliases(explicitScopePart,explicitScopePart.length());
- name=name.mid(qualifierIndex+2);
- }
-
- if (name.isEmpty())
- {
- //printf("] empty name\n");
- return 0; // empty name
- }
-
- //printf("Looking for symbol %s\n",name.data());
- DefinitionIntf *di = Doxygen::symbolMap->find(name);
- if (di==0)
- {
- di = Doxygen::symbolMap->find(name+"-g");
- if (di==0)
- {
- di = Doxygen::symbolMap->find(name+"-p");
- if (di==0)
- {
- //printf("no such symbol!\n");
- return 0;
- }
- }
- }
- //printf("found symbol!\n");
-
- bool hasUsingStatements =
- (fileScope && ((fileScope->getUsedNamespaces() &&
- fileScope->getUsedNamespaces()->count()>0) ||
- (fileScope->getUsedClasses() &&
- fileScope->getUsedClasses()->count()>0))
- );
- //printf("hasUsingStatements=%d\n",hasUsingStatements);
- // Since it is often the case that the same name is searched in the same
- // scope over an over again (especially for the linked source code generation)
- // we use a cache to collect previous results. This is possible since the
- // result of a lookup is deterministic. As the key we use the concatenated
- // scope, the name to search for and the explicit scope prefix. The speedup
- // achieved by this simple cache can be enormous.
- int scopeNameLen = scope->name().length()+1;
- int nameLen = name.length()+1;
- int explicitPartLen = explicitScopePart.length();
- int fileScopeLen = hasUsingStatements ? 1+fileScope->absFilePath().length() : 0;
-
- // below is a more efficient coding of
- // QCString key=scope->name()+"+"+name+"+"+explicitScopePart;
- QCString key(scopeNameLen+nameLen+explicitPartLen+fileScopeLen+1);
- char *p=key.data();
- qstrcpy(p,scope->name()); *(p+scopeNameLen-1)='+';
- p+=scopeNameLen;
- qstrcpy(p,name); *(p+nameLen-1)='+';
- p+=nameLen;
- qstrcpy(p,explicitScopePart);
- p+=explicitPartLen;
-
- // if a file scope is given and it contains using statements we should
- // also use the file part in the key (as a class name can be in
- // two different namespaces and a using statement in a file can select
- // one of them).
- if (hasUsingStatements)
- {
- // below is a more efficient coding of
- // key+="+"+fileScope->name();
- *p++='+';
- qstrcpy(p,fileScope->absFilePath());
- p+=fileScopeLen-1;
- }
- *p='\0';
-
- LookupInfo *pval=Doxygen::lookupCache->find(key);
- //printf("Searching for %s result=%p\n",key.data(),pval);
- if (pval)
- {
- //printf("LookupInfo %p %p '%s' %p\n",
- // pval->classDef, pval->typeDef, pval->templSpec.data(),
- // pval->resolvedType.data());
- if (pTemplSpec) *pTemplSpec=pval->templSpec;
- if (pTypeDef) *pTypeDef=pval->typeDef;
- if (pResolvedType) *pResolvedType=pval->resolvedType;
- //printf("] cachedMatch=%s\n",
- // pval->classDef?pval->classDef->name().data():"<none>");
- //if (pTemplSpec)
- // printf("templSpec=%s\n",pTemplSpec->data());
- return pval->classDef;
- }
- else // not found yet; we already add a 0 to avoid the possibility of
- // endless recursion.
- {
- Doxygen::lookupCache->insert(key,new LookupInfo);
- }
-
- ClassDef *bestMatch=0;
- MemberDef *bestTypedef=0;
- QCString bestTemplSpec;
- QCString bestResolvedType;
- int minDistance=10000; // init at "infinite"
-
- if (di->definitionType()==DefinitionIntf::TypeSymbolList) // not a unique name
- {
- //printf(" name is not unique\n");
- DefinitionListIterator dli(*(DefinitionList*)di);
- Definition *d;
- int count=0;
- for (dli.toFirst();(d=dli.current());++dli,++count) // foreach definition
- {
- getResolvedSymbol(scope,fileScope,d,explicitScopePart,&actTemplParams,
- minDistance,bestMatch,bestTypedef,bestTemplSpec,
- bestResolvedType);
- }
- }
- else // unique name
- {
- //printf(" name is unique\n");
- Definition *d = (Definition *)di;
- getResolvedSymbol(scope,fileScope,d,explicitScopePart,&actTemplParams,
- minDistance,bestMatch,bestTypedef,bestTemplSpec,
- bestResolvedType);
- }
-
- if (pTypeDef)
- {
- *pTypeDef = bestTypedef;
- }
- if (pTemplSpec)
- {
- *pTemplSpec = bestTemplSpec;
- }
- if (pResolvedType)
- {
- *pResolvedType = bestResolvedType;
- }
- //printf("getResolvedClassRec: bestMatch=%p pval->resolvedType=%s\n",
- // bestMatch,bestResolvedType.data());
-
- pval=Doxygen::lookupCache->find(key);
- if (pval)
- {
- pval->classDef = bestMatch;
- pval->typeDef = bestTypedef;
- pval->templSpec = bestTemplSpec;
- pval->resolvedType = bestResolvedType;
- }
- else
- {
- Doxygen::lookupCache->insert(key,new LookupInfo(bestMatch,bestTypedef,bestTemplSpec,bestResolvedType));
- }
- //printf("] bestMatch=%s distance=%d\n",
- // bestMatch?bestMatch->name().data():"<none>",minDistance);
- //if (pTemplSpec)
- // printf("templSpec=%s\n",pTemplSpec->data());
- return bestMatch;
-}
-
-/* Find the fully qualified class name referred to by the input class
- * or typedef name against the input scope.
- * Loops through scope and each of its parent scopes looking for a
- * match against the input name.
- */
-ClassDef *getResolvedClass(Definition *scope,
- FileDef *fileScope,
- const char *n,
- MemberDef **pTypeDef,
- QCString *pTemplSpec,
- bool mayBeUnlinkable,
- bool mayBeHidden,
- QCString *pResolvedType
- )
-{
- g_resolvedTypedefs.clear();
- if (scope==0 ||
- (scope->definitionType()!=Definition::TypeClass &&
- scope->definitionType()!=Definition::TypeNamespace
- ) ||
- (scope->getLanguage()==SrcLangExt_Java && QCString(n).find("::")!=-1)
- )
- {
- scope=Doxygen::globalScope;
- }
- //printf("------------ getResolvedClass(scope=%s,file=%s,name=%s,mayUnlinkable=%d)\n",
- // scope?scope->name().data():"<global>",
- // fileScope?fileScope->name().data():"<none>",
- // n,
- // mayBeUnlinkable
- // );
- ClassDef *result = getResolvedClassRec(scope,fileScope,n,pTypeDef,pTemplSpec,pResolvedType);
- if (!mayBeUnlinkable && result && !result->isLinkable())
- {
- if (!mayBeHidden || !result->isHidden())
- {
- //printf("result was %s\n",result?result->name().data():"<none>");
- result=0; // don't link to artificial/hidden classes unless explicitly allowed
- }
- }
- //printf("getResolvedClass(%s,%s)=%s\n",scope?scope->name().data():"<global>",
- // n,result?result->name().data():"<none>");
- return result;
-}
-
-//-------------------------------------------------------------------------
-//-------------------------------------------------------------------------
-//-------------------------------------------------------------------------
-//-------------------------------------------------------------------------
-
-static bool findOperator(const QCString &s,int i)
-{
- int b = s.findRev("operator",i);
- if (b==-1) return FALSE; // not found
- b+=8;
- while (b<i) // check if there are only spaces in between
- // the operator and the >
- {
- if (!isspace((uchar)s.at(b))) return FALSE;
- b++;
- }
- return TRUE;
-}
-
-static bool findOperator2(const QCString &s,int i)
-{
- int b = s.findRev("operator",i);
- if (b==-1) return FALSE; // not found
- b+=8;
- while (b<i) // check if there are only non-ascii
- // characters in front of the operator
- {
- if (isId((uchar)s.at(b))) return FALSE;
- b++;
- }
- return TRUE;
-}
-
-static const char constScope[] = { 'c', 'o', 'n', 's', 't', ':' };
-static const char virtualScope[] = { 'v', 'i', 'r', 't', 'u', 'a', 'l', ':' };
-
-// Note: this function is not reentrant due to the use of static buffer!
-QCString removeRedundantWhiteSpace(const QCString &s)
-{
- static bool cliSupport = Config_getBool("CPP_CLI_SUPPORT");
- if (s.isEmpty()) return s;
- static GrowBuf growBuf;
- //int resultLen = 1024;
- //int resultPos = 0;
- //QCString result(resultLen);
- // we use growBuf.addChar(c) instead of result+=c to
- // improve the performance of this function
- growBuf.clear();
- uint i;
- uint l=s.length();
- uint csp=0;
- uint vsp=0;
- for (i=0;i<l;i++)
- {
-nextChar:
- char c=s.at(i);
-
- // search for "const"
- if (csp<6 && c==constScope[csp] && // character matches substring "const"
- (csp>0 || // if it is the first character
- i==0 || // the previous may not be a digit
- !isId(s.at(i-1))
- )
- )
- csp++;
- else // reset counter
- csp=0;
-
- // search for "virtual"
- if (vsp<8 && c==virtualScope[vsp] && // character matches substring "virtual"
- (vsp>0 || // if it is the first character
- i==0 || // the previous may not be a digit
- !isId(s.at(i-1))
- )
- )
- vsp++;
- else // reset counter
- vsp=0;
-
- if (c=='"') // quoted string
- {
- i++;
- growBuf.addChar(c);
- while (i<l)
- {
- char cc=s.at(i);
- growBuf.addChar(cc);
- if (cc=='\\') // escaped character
- {
- growBuf.addChar(s.at(i+1));
- i+=2;
- }
- else if (cc=='"') // end of string
- { i++; goto nextChar; }
- else // any other character
- { i++; }
- }
- }
- else if (i<l-2 && c=='<' && // current char is a <
- (isId(s.at(i+1)) || isspace((uchar)s.at(i+1))) && // next char is an id char or space
- (i<8 || !findOperator(s,i)) // string in front is not "operator"
- )
- {
- growBuf.addChar('<');
- growBuf.addChar(' ');
- }
- else if (i>0 && c=='>' && // current char is a >
- (isId(s.at(i-1)) || isspace((uchar)s.at(i-1)) || s.at(i-1)=='*' || s.at(i-1)=='&') && // prev char is an id char or space
- (i<8 || !findOperator(s,i)) // string in front is not "operator"
- )
- {
- growBuf.addChar(' ');
- growBuf.addChar('>');
- }
- else if (i>0 && c==',' && !isspace((uchar)s.at(i-1))
- && ((i<l-1 && isId(s.at(i+1)))
- || (i<l-2 && s.at(i+1)=='$' && isId(s.at(i+2))) // for PHP
- || (i<l-3 && s.at(i+1)=='&' && s.at(i+2)=='$' && isId(s.at(i+3))))) // for PHP
- {
- growBuf.addChar(',');
- growBuf.addChar(' ');
- }
- else if (i>0 &&
- ((isId(s.at(i)) && s.at(i-1)==')') ||
- (s.at(i)=='\'' && s.at(i-1)==' ')
- )
- )
- {
- growBuf.addChar(' ');
- growBuf.addChar(s.at(i));
- }
- else if (c=='t' && csp==5 /*&& (i<5 || !isId(s.at(i-5)))*/ &&
- !(isId(s.at(i+1)) /*|| s.at(i+1)==' '*/ ||
- s.at(i+1)==')' ||
- s.at(i+1)==',' ||
- s.at(i+1)=='\0'
- )
- )
- // prevent const ::A from being converted to const::A
- {
- growBuf.addChar('t');
- growBuf.addChar(' ');
- if (s.at(i+1)==' ') i++;
- csp=0;
- }
- else if (c==':' && csp==6 /*&& (i<6 || !isId(s.at(i-6)))*/)
- // replace const::A by const ::A
- {
- growBuf.addChar(' ');
- growBuf.addChar(':');
- csp=0;
- }
- else if (c=='l' && vsp==7 /*&& (i<7 || !isId(s.at(i-7)))*/ &&
- !(isId(s.at(i+1)) /*|| s.at(i+1)==' '*/ ||
- s.at(i+1)==')' ||
- s.at(i+1)==',' ||
- s.at(i+1)=='\0'
- )
- )
- // prevent virtual ::A from being converted to virtual::A
- {
- growBuf.addChar('l');
- growBuf.addChar(' ');
- if (s.at(i+1)==' ') i++;
- vsp=0;
- }
- else if (c==':' && vsp==8 /*&& (i<8 || !isId(s.at(i-8)))*/)
- // replace virtual::A by virtual ::A
- {
- growBuf.addChar(' ');
- growBuf.addChar(':');
- vsp=0;
- }
- else if (!isspace((uchar)c) || // not a space
- ( i>0 && i<l-1 && // internal character
- (isId(s.at(i-1)) || s.at(i-1)==')' || s.at(i-1)==',' || s.at(i-1)=='>' || s.at(i-1)==']')
- && (isId(s.at(i+1)) || (i<l-2 && s.at(i+1)=='$' && isId(s.at(i+2)))
- || (i<l-3 && s.at(i+1)=='&' && s.at(i+2)=='$' && isId(s.at(i+3))))
- )
- )
- {
- if (c=='*' || c=='&' || c=='@' || c=='$')
- {
- //uint rl=result.length();
- uint rl=growBuf.getPos();
- if ((rl>0 && (isId(growBuf.at(rl-1)) || growBuf.at(rl-1)=='>')) &&
- ((c!='*' && c!='&') || !findOperator2(s,i)) // avoid splitting operator* and operator->* and operator&
- )
- {
- growBuf.addChar(' ');
- }
- }
- growBuf.addChar(c);
- if (cliSupport &&
- (c=='^' || c=='%') && i>1 && isId(s.at(i-1)) &&
- !findOperator(s,i)
- )
- {
- growBuf.addChar(' '); // C++/CLI: Type^ name and Type% name
- }
- }
- }
- //printf("removeRedundantWhiteSpace(`%s')=`%s'\n",s.data(),result.data());
- growBuf.addChar(0);
- //result.resize(resultPos);
- return growBuf.get();
-}
-
-bool rightScopeMatch(const QCString &scope, const QCString &name)
-{
- return (name==scope || // equal
- (scope.right(name.length())==name && // substring
- scope.at(scope.length()-name.length()-1)==':' // scope
- )
- );
-}
-
-bool leftScopeMatch(const QCString &scope, const QCString &name)
-{
- return (name==scope || // equal
- (scope.left(name.length())==name && // substring
- scope.at(name.length())==':' // scope
- )
- );
-}
-
-
-void linkifyText(const TextGeneratorIntf &out,Definition *scope,
- FileDef *fileScope,const char *,
- const char *text, bool autoBreak,bool external,
- bool keepSpaces,int indentLevel)
-{
- //printf("linkify=`%s'\n",text);
- static QRegExp regExp("[a-z_A-Z\\x80-\\xFF][~!a-z_A-Z0-9$\\\\.:\\x80-\\xFF]*");
- static QRegExp regExpSplit("(?!:),");
- QCString txtStr=text;
- int strLen = txtStr.length();
- //printf("linkifyText scope=%s fileScope=%s strtxt=%s strlen=%d\n",
- // scope?scope->name().data():"<none>",
- // fileScope?fileScope->name().data():"<none>",
- // txtStr.data(),strLen);
- int matchLen;
- int index=0;
- int newIndex;
- int skipIndex=0;
- int floatingIndex=0;
- if (strLen==0) return;
- // read a word from the text string
- while ((newIndex=regExp.match(txtStr,index,&matchLen))!=-1 &&
- (newIndex==0 || !(txtStr.at(newIndex-1)>='0' && txtStr.at(newIndex-1)<='9')) // avoid matching part of hex numbers
- )
- {
- // add non-word part to the result
- floatingIndex+=newIndex-skipIndex+matchLen;
- bool insideString=FALSE;
- int i;
- for (i=index;i<newIndex;i++)
- {
- if (txtStr.at(i)=='"') insideString=!insideString;
- }
-
- //printf("floatingIndex=%d strlen=%d autoBreak=%d\n",floatingIndex,strLen,autoBreak);
- if (strLen>35 && floatingIndex>30 && autoBreak) // try to insert a split point
- {
- QCString splitText = txtStr.mid(skipIndex,newIndex-skipIndex);
- int splitLength = splitText.length();
- int offset=1;
- i=splitText.find(regExpSplit,0);
- if (i==-1) { i=splitText.find('<'); if (i!=-1) offset=0; }
- if (i==-1) i=splitText.find('>');
- if (i==-1) i=splitText.find(' ');
- //printf("splitText=[%s] len=%d i=%d offset=%d\n",splitText.data(),splitLength,i,offset);
- if (i!=-1) // add a link-break at i in case of Html output
- {
- out.writeString(splitText.left(i+offset),keepSpaces);
- out.writeBreak(indentLevel==0 ? 0 : indentLevel+1);
- out.writeString(splitText.right(splitLength-i-offset),keepSpaces);
- floatingIndex=splitLength-i-offset+matchLen;
- }
- else
- {
- out.writeString(splitText,keepSpaces);
- }
- }
- else
- {
- //ol.docify(txtStr.mid(skipIndex,newIndex-skipIndex));
- out.writeString(txtStr.mid(skipIndex,newIndex-skipIndex),keepSpaces);
- }
- // get word from string
- QCString word=txtStr.mid(newIndex,matchLen);
- QCString matchWord = substitute(substitute(word,"\\","::"),".","::");
- //printf("linkifyText word=%s matchWord=%s scope=%s\n",
- // word.data(),matchWord.data(),scope?scope->name().data():"<none>");
- bool found=FALSE;
- if (!insideString)
- {
- ClassDef *cd=0;
- FileDef *fd=0;
- MemberDef *md=0;
- NamespaceDef *nd=0;
- GroupDef *gd=0;
- //printf("** Match word '%s'\n",matchWord.data());
-
- MemberDef *typeDef=0;
- cd=getResolvedClass(scope,fileScope,matchWord,&typeDef);
- if (typeDef) // First look at typedef then class, see bug 584184.
- {
- //printf("Found typedef %s\n",typeDef->name().data());
- if (external ? typeDef->isLinkable() : typeDef->isLinkableInProject())
- {
- out.writeLink(typeDef->getReference(),
- typeDef->getOutputFileBase(),
- typeDef->anchor(),
- word);
- found=TRUE;
- }
- }
- if (!found && cd)
- {
- //printf("Found class %s\n",cd->name().data());
- // add link to the result
- if (external ? cd->isLinkable() : cd->isLinkableInProject())
- {
- out.writeLink(cd->getReference(),cd->getOutputFileBase(),cd->anchor(),word);
- found=TRUE;
- }
- }
- else if ((cd=getClass(matchWord+"-p"))) // search for Obj-C protocols as well
- {
- // add link to the result
- if (external ? cd->isLinkable() : cd->isLinkableInProject())
- {
- out.writeLink(cd->getReference(),cd->getOutputFileBase(),cd->anchor(),word);
- found=TRUE;
- }
- }
- else if ((cd=getClass(matchWord+"-g"))) // C# generic as well
- {
- // add link to the result
- if (external ? cd->isLinkable() : cd->isLinkableInProject())
- {
- out.writeLink(cd->getReference(),cd->getOutputFileBase(),cd->anchor(),word);
- found=TRUE;
- }
- }
- else
- {
- //printf(" -> nothing\n");
- }
-
- int m = matchWord.findRev("::");
- QCString scopeName;
- if (scope &&
- (scope->definitionType()==Definition::TypeClass ||
- scope->definitionType()==Definition::TypeNamespace
- )
- )
- {
- scopeName=scope->name();
- }
- else if (m!=-1)
- {
- scopeName = matchWord.left(m);
- matchWord = matchWord.mid(m+2);
- }
-
- //printf("ScopeName=%s\n",scopeName.data());
- //if (!found) printf("Trying to link %s in %s\n",word.data(),scopeName.data());
- if (!found &&
- getDefs(scopeName,matchWord,0,md,cd,fd,nd,gd) &&
- //(md->isTypedef() || md->isEnumerate() ||
- // md->isReference() || md->isVariable()
- //) &&
- (external ? md->isLinkable() : md->isLinkableInProject())
- )
- {
- //printf("Found ref scope=%s\n",d?d->name().data():"<global>");
- //ol.writeObjectLink(d->getReference(),d->getOutputFileBase(),
- // md->anchor(),word);
- out.writeLink(md->getReference(),md->getOutputFileBase(),
- md->anchor(),word);
- //printf("found symbol %s\n",matchWord.data());
- found=TRUE;
- }
- }
-
- if (!found) // add word to the result
- {
- out.writeString(word,keepSpaces);
- }
- // set next start point in the string
- //printf("index=%d/%d\n",index,txtStr.length());
- skipIndex=index=newIndex+matchLen;
- }
- // add last part of the string to the result.
- //ol.docify(txtStr.right(txtStr.length()-skipIndex));
- out.writeString(txtStr.right(txtStr.length()-skipIndex),keepSpaces);
-}
-
-
-void writeExample(OutputList &ol,ExampleSDict *ed)
-{
- QCString exampleLine=theTranslator->trWriteList(ed->count());
-
- //bool latexEnabled = ol.isEnabled(OutputGenerator::Latex);
- //bool manEnabled = ol.isEnabled(OutputGenerator::Man);
- //bool htmlEnabled = ol.isEnabled(OutputGenerator::Html);
- QRegExp marker("@[0-9]+");
- int index=0,newIndex,matchLen;
- // now replace all markers in inheritLine with links to the classes
- while ((newIndex=marker.match(exampleLine,index,&matchLen))!=-1)
- {
- bool ok;
- ol.parseText(exampleLine.mid(index,newIndex-index));
- uint entryIndex = exampleLine.mid(newIndex+1,matchLen-1).toUInt(&ok);
- Example *e=ed->at(entryIndex);
- if (ok && e)
- {
- ol.pushGeneratorState();
- //if (latexEnabled) ol.disable(OutputGenerator::Latex);
- ol.disable(OutputGenerator::Latex);
- ol.disable(OutputGenerator::RTF);
- // link for Html / man
- //printf("writeObjectLink(file=%s)\n",e->file.data());
- ol.writeObjectLink(0,e->file,e->anchor,e->name);
- ol.popGeneratorState();
-
- ol.pushGeneratorState();
- //if (latexEnabled) ol.enable(OutputGenerator::Latex);
- ol.disable(OutputGenerator::Man);
- ol.disable(OutputGenerator::Html);
- // link for Latex / pdf with anchor because the sources
- // are not hyperlinked (not possible with a verbatim environment).
- ol.writeObjectLink(0,e->file,0,e->name);
- //if (manEnabled) ol.enable(OutputGenerator::Man);
- //if (htmlEnabled) ol.enable(OutputGenerator::Html);
- ol.popGeneratorState();
- }
- index=newIndex+matchLen;
- }
- ol.parseText(exampleLine.right(exampleLine.length()-index));
- ol.writeString(".");
-}
-
-
-QCString argListToString(ArgumentList *al,bool useCanonicalType,bool showDefVals)
-{
- QCString result;
- if (al==0) return result;
- Argument *a=al->first();
- result+="(";
- while (a)
- {
- QCString type1 = useCanonicalType && !a->canType.isEmpty() ?
- a->canType : a->type;
- QCString type2;
- int i=type1.find(")("); // hack to deal with function pointers
- if (i!=-1)
- {
- type2=type1.mid(i);
- type1=type1.left(i);
- }
- if (!a->attrib.isEmpty())
- {
- result+=a->attrib+" ";
- }
- if (!a->name.isEmpty() || !a->array.isEmpty())
- {
- result+= type1+" "+a->name+type2+a->array;
- }
- else
- {
- result+= type1+type2;
- }
- if (!a->defval.isEmpty() && showDefVals)
- {
- result+="="+a->defval;
- }
- a = al->next();
- if (a) result+=", ";
- }
- result+=")";
- if (al->constSpecifier) result+=" const";
- if (al->volatileSpecifier) result+=" volatile";
- return removeRedundantWhiteSpace(result);
-}
-
-QCString tempArgListToString(ArgumentList *al)
-{
- QCString result;
- if (al==0) return result;
- result="<";
- Argument *a=al->first();
- while (a)
- {
- if (!a->name.isEmpty()) // add template argument name
- {
- if (a->type.left(4)=="out") // C# covariance
- {
- result+="out ";
- }
- else if (a->type.left(3)=="in") // C# contravariance
- {
- result+="in ";
- }
- result+=a->name;
- }
- else // extract name from type
- {
- int i=a->type.length()-1;
- while (i>=0 && isId(a->type.at(i))) i--;
- if (i>0)
- {
- result+=a->type.right(a->type.length()-i-1);
- }
- else // nothing found -> take whole name
- {
- result+=a->type;
- }
- }
- a=al->next();
- if (a) result+=", ";
- }
- result+=">";
- return removeRedundantWhiteSpace(result);
-}
-
-
-// compute the HTML anchors for a list of members
-void setAnchors(ClassDef *cd,char id,MemberList *ml,int groupId)
-{
- int count=0;
- if (ml==0) return;
- MemberListIterator mli(*ml);
- MemberDef *md;
- for (;(md=mli.current());++mli)
- {
- if (!md->isReference())
- {
- QCString anchor;
- if (groupId==-1)
- anchor.sprintf("%c%d",id,count++);
- else
- anchor.sprintf("%c%d_%d",id,groupId,count++);
- if (cd) anchor.prepend(escapeCharsInString(cd->name(),FALSE));
- md->setAnchor(anchor);
- //printf("setAnchors(): Member %s outputFileBase=%s anchor %s result %s\n",
- // md->name().data(),md->getOutputFileBase().data(),anchor.data(),md->anchor().data());
- }
- }
-}
-
-//----------------------------------------------------------------------------
-
-/*! takes the \a buf of the given length \a len and converts CR LF (DOS)
- * or CR (MAC) line ending to LF (Unix). Returns the length of the
- * converted content (i.e. the same as \a len (Unix, MAC) or
- * smaller (DOS).
- */
-int filterCRLF(char *buf,int len)
-{
- int src = 0; // source index
- int dest = 0; // destination index
- char c; // current character
-
- while (src<len)
- {
- c = buf[src++]; // Remember the processed character.
- if (c == '\r') // CR to be solved (MAC, DOS)
- {
- c = '\n'; // each CR to LF
- if (src<len && buf[src] == '\n')
- ++src; // skip LF just after CR (DOS)
- }
- else if ( c == '\0' && src<len-1) // filter out internal \0 characters, as it will confuse the parser
- {
- c = ' '; // turn into a space
- }
- buf[dest++] = c; // copy the (modified) character to dest
- }
- return dest; // length of the valid part of the buf
-}
-
-static QCString getFilterFromList(const char *name,const QStrList &filterList,bool &found)
-{
- found=FALSE;
- // compare the file name to the filter pattern list
- QStrListIterator sli(filterList);
- char* filterStr;
- for (sli.toFirst(); (filterStr = sli.current()); ++sli)
- {
- QCString fs = filterStr;
- int i_equals=fs.find('=');
- if (i_equals!=-1)
- {
- QCString filterPattern = fs.left(i_equals);
- QRegExp fpat(filterPattern,portable_fileSystemIsCaseSensitive(),TRUE);
- if (fpat.match(name)!=-1)
- {
- // found a match!
- QCString filterName = fs.mid(i_equals+1);
- if (filterName.find(' ')!=-1)
- { // add quotes if the name has spaces
- filterName="\""+filterName+"\"";
- }
- found=TRUE;
- return filterName;
- }
- }
- }
-
- // no match
- return "";
-}
-
-/*! looks for a filter for the file \a name. Returns the name of the filter
- * if there is a match for the file name, otherwise an empty string.
- * In case \a inSourceCode is TRUE then first the source filter list is
- * considered.
- */
-QCString getFileFilter(const char* name,bool isSourceCode)
-{
- // sanity check
- if (name==0) return "";
-
- QStrList& filterSrcList = Config_getList("FILTER_SOURCE_PATTERNS");
- QStrList& filterList = Config_getList("FILTER_PATTERNS");
-
- QCString filterName;
- bool found=FALSE;
- if (isSourceCode && !filterSrcList.isEmpty())
- { // first look for source filter pattern list
- filterName = getFilterFromList(name,filterSrcList,found);
- }
- if (!found && filterName.isEmpty())
- { // then look for filter pattern list
- filterName = getFilterFromList(name,filterList,found);
- }
- if (!found)
- { // then use the generic input filter
- return Config_getString("INPUT_FILTER");
- }
- else
- {
- return filterName;
- }
-}
-
-
-QCString transcodeCharacterStringToUTF8(const QCString &input)
-{
- bool error=FALSE;
- static QCString inputEncoding = Config_getString("INPUT_ENCODING");
- const char *outputEncoding = "UTF-8";
- if (inputEncoding.isEmpty() || qstricmp(inputEncoding,outputEncoding)==0) return input;
- int inputSize=input.length();
- int outputSize=inputSize*4+1;
- QCString output(outputSize);
- void *cd = portable_iconv_open(outputEncoding,inputEncoding);
- if (cd==(void *)(-1))
- {
- err("error: unsupported character conversion: '%s'->'%s'\n",
- inputEncoding.data(),outputEncoding);
- error=TRUE;
- }
- if (!error)
- {
- size_t iLeft=inputSize;
- size_t oLeft=outputSize;
- const char *inputPtr = input.data();
- char *outputPtr = output.data();
- if (!portable_iconv(cd, &inputPtr, &iLeft, &outputPtr, &oLeft))
- {
- outputSize-=oLeft;
- output.resize(outputSize+1);
- output.at(outputSize)='\0';
- //printf("iconv: input size=%d output size=%d\n[%s]\n",size,newSize,srcBuf.data());
- }
- else
- {
- err("error: failed to translate characters from %s to %s: check INPUT_ENCODING\ninput=[%s]\n",
- inputEncoding.data(),outputEncoding,input.data());
- error=TRUE;
- }
- }
- portable_iconv_close(cd);
- return error ? input : output;
-}
-
-/*! reads a file with name \a name and returns it as a string. If \a filter
- * is TRUE the file will be filtered by any user specified input filter.
- * If \a name is "-" the string will be read from standard input.
- */
-QCString fileToString(const char *name,bool filter,bool isSourceCode)
-{
- if (name==0 || name[0]==0) return 0;
- QFile f;
-
- bool fileOpened=FALSE;
- if (name[0]=='-' && name[1]==0) // read from stdin
- {
- fileOpened=f.open(IO_ReadOnly,stdin);
- if (fileOpened)
- {
- const int bSize=4096;
- QCString contents(bSize);
- int totalSize=0;
- int size;
- while ((size=f.readBlock(contents.data()+totalSize,bSize))==bSize)
- {
- totalSize+=bSize;
- contents.resize(totalSize+bSize);
- }
- totalSize = filterCRLF(contents.data(),totalSize+size)+2;
- contents.resize(totalSize);
- contents.at(totalSize-2)='\n'; // to help the scanner
- contents.at(totalSize-1)='\0';
- return contents;
- }
- }
- else // read from file
- {
- QFileInfo fi(name);
- if (!fi.exists() || !fi.isFile())
- {
- err("error: file `%s' not found\n",name);
- return "";
- }
- QCString filterName = getFileFilter(name,isSourceCode);
- if (filterName.isEmpty() || !filter)
- {
- f.setName(name);
- fileOpened=f.open(IO_ReadOnly);
- if (fileOpened)
- {
- int fsize=f.size();
- QCString contents(fsize+2);
- f.readBlock(contents.data(),fsize);
- if (fsize==0 || contents[fsize-1]=='\n')
- contents[fsize]='\0';
- else
- contents[fsize]='\n'; // to help the scanner
- contents[fsize+1]='\0';
- f.close();
- int newSize = filterCRLF(contents.data(),fsize+2);
- if (newSize!=fsize+2)
- {
- contents.resize(newSize);
- }
- return transcodeCharacterStringToUTF8(contents);
- }
- }
- else // filter the input
- {
- QCString cmd=filterName+" \""+name+"\"";
- Debug::print(Debug::ExtCmd,0,"Executing popen(`%s`)\n",cmd.data());
- FILE *f=portable_popen(cmd,"r");
- if (!f)
- {
- err("error: could not execute filter %s\n",filterName.data());
- return "";
- }
- const int bSize=4096;
- QCString contents(bSize);
- int totalSize=0;
- int size;
- while ((size=fread(contents.data()+totalSize,1,bSize,f))==bSize)
- {
- totalSize+=bSize;
- contents.resize(totalSize+bSize);
- }
- totalSize = filterCRLF(contents.data(),totalSize+size)+2;
- contents.resize(totalSize);
- contents.at(totalSize-2)='\n'; // to help the scanner
- contents.at(totalSize-1)='\0';
- portable_pclose(f);
- Debug::print(Debug::FilterOutput, 0, "Filter output\n");
- Debug::print(Debug::FilterOutput,0,"-------------\n%s\n-------------\n",contents.data());
- return transcodeCharacterStringToUTF8(contents);
- }
- }
- if (!fileOpened)
- {
- err("error: cannot open file `%s' for reading\n",name);
- }
- return "";
-}
-
-QCString dateToString(bool includeTime)
-{
- QDateTime current = QDateTime::currentDateTime();
- return theTranslator->trDateTime(current.date().year(),
- current.date().month(),
- current.date().day(),
- current.date().dayOfWeek(),
- current.time().hour(),
- current.time().minute(),
- current.time().second(),
- includeTime);
-}
-
-QCString yearToString()
-{
- const QDate &d=QDate::currentDate();
- QCString result;
- result.sprintf("%d", d.year());
- return result;
-}
-
-//----------------------------------------------------------------------
-// recursive function that returns the number of branches in the
-// inheritance tree that the base class `bcd' is below the class `cd'
-
-int minClassDistance(const ClassDef *cd,const ClassDef *bcd,int level)
-{
- if (bcd->categoryOf()) // use class that is being extended in case of
- // an Objective-C category
- {
- bcd=bcd->categoryOf();
- }
- if (cd==bcd) return level;
- if (level==256)
- {
- err("error: Internal inconsistency: found class %s seem to have a recursive "
- "inheritance relation! Please send a bug report to dimitri@stack.nl\n",cd->name().data());
- return -1;
- }
- int m=maxInheritanceDepth;
- if (cd->baseClasses())
- {
-#if 0
- BaseClassListIterator bcli(*cd->baseClasses());
- for ( ; bcli.current() ; ++bcli)
- {
- //printf("class %s base class %s\n",cd->name().data(),bcli.current()->classDef->name().data());
- int mc=minClassDistance(bcli.current()->classDef,bcd,level+1);
- if (mc<m) m=mc;
- if (m<0) break;
- }
-#endif
- BaseClassDef *bcdi = cd->baseClasses()->first();
- while (bcdi)
- {
- int mc=minClassDistance(bcdi->classDef,bcd,level+1);
- if (mc<m) m=mc;
- if (m<0) break;
- bcdi = cd->baseClasses()->next();
- }
- }
- return m;
-}
-
-//static void printArgList(ArgumentList *al)
-//{
-// if (al==0) return;
-// ArgumentListIterator ali(*al);
-// Argument *a;
-// printf("(");
-// for (;(a=ali.current());++ali)
-// {
-// printf("t=`%s' n=`%s' v=`%s' ",a->type.data(),!a->name.isEmpty()>0?a->name.data():"",!a->defval.isEmpty()>0?a->defval.data():"");
-// }
-// printf(")");
-//}
-
-#ifndef NEWMATCH
-// strip any template specifiers that follow className in string s
-static QCString trimTemplateSpecifiers(
- const QCString &namespaceName,
- const QCString &className,
- const QCString &s
- )
-{
- //printf("trimTemplateSpecifiers(%s,%s,%s)\n",namespaceName.data(),className.data(),s.data());
- QCString scopeName=mergeScopes(namespaceName,className);
- ClassDef *cd=getClass(scopeName);
- if (cd==0) return s; // should not happen, but guard anyway.
-
- QCString result=s;
-
- int i=className.length()-1;
- if (i>=0 && className.at(i)=='>') // template specialization
- {
- // replace unspecialized occurrences in s, with their specialized versions.
- int count=1;
- int cl=i+1;
- while (i>=0)
- {
- char c=className.at(i);
- if (c=='>') count++,i--;
- else if (c=='<') { count--; if (count==0) break; }
- else i--;
- }
- QCString unspecClassName=className.left(i);
- int l=i;
- int p=0;
- while ((i=result.find(unspecClassName,p))!=-1)
- {
- if (result.at(i+l)!='<') // unspecialized version
- {
- result=result.left(i)+className+result.right(result.length()-i-l);
- l=cl;
- }
- p=i+l;
- }
- }
-
- //printf("result after specialization: %s\n",result.data());
-
- QCString qualName=cd->qualifiedNameWithTemplateParameters();
- //printf("QualifiedName = %s\n",qualName.data());
- // We strip the template arguments following className (if any)
- if (!qualName.isEmpty()) // there is a class name
- {
- int is,ps=0;
- int p=0,l,i;
-
- while ((is=getScopeFragment(qualName,ps,&l))!=-1)
- {
- QCString qualNamePart = qualName.right(qualName.length()-is);
- //printf("qualNamePart=%s\n",qualNamePart.data());
- while ((i=result.find(qualNamePart,p))!=-1)
- {
- int ql=qualNamePart.length();
- result=result.left(i)+cd->name()+result.right(result.length()-i-ql);
- p=i+cd->name().length();
- }
- ps=is+l;
- }
- }
- //printf("result=%s\n",result.data());
-
- return result.stripWhiteSpace();
-}
-
-/*!
- * @param pattern pattern to look for
- * @param s string to search in
- * @param p position to start
- * @param len resulting pattern length
- * @returns position on which string is found, or -1 if not found
- */
-static int findScopePattern(const QCString &pattern,const QCString &s,
- int p,int *len)
-{
- int sl=s.length();
- int pl=pattern.length();
- int sp=0;
- *len=0;
- while (p<sl)
- {
- sp=p; // start of match
- int pp=0; // pattern position
- while (p<sl && pp<pl)
- {
- if (s.at(p)=='<') // skip template arguments while matching
- {
- int bc=1;
- //printf("skipping pos=%d c=%c\n",p,s.at(p));
- p++;
- while (p<sl)
- {
- if (s.at(p)=='<') bc++;
- else if (s.at(p)=='>')
- {
- bc--;
- if (bc==0)
- {
- p++;
- break;
- }
- }
- //printf("skipping pos=%d c=%c\n",p,s.at(p));
- p++;
- }
- }
- else if (s.at(p)==pattern.at(pp))
- {
- //printf("match at position p=%d pp=%d c=%c\n",p,pp,s.at(p));
- p++;
- pp++;
- }
- else // no match
- {
- //printf("restarting at %d c=%c pat=%s\n",p,s.at(p),pattern.data());
- p=sp+1;
- break;
- }
- }
- if (pp==pl) // whole pattern matches
- {
- *len=p-sp;
- return sp;
- }
- }
- return -1;
-}
-
-static QCString trimScope(const QCString &name,const QCString &s)
-{
- int scopeOffset=name.length();
- QCString result=s;
- do // for each scope
- {
- QCString tmp;
- QCString scope=name.left(scopeOffset)+"::";
- //printf("Trying with scope=`%s'\n",scope.data());
-
- int i,p=0,l;
- while ((i=findScopePattern(scope,result,p,&l))!=-1) // for each occurrence
- {
- tmp+=result.mid(p,i-p); // add part before pattern
- p=i+l;
- }
- tmp+=result.right(result.length()-p); // add trailing part
-
- scopeOffset=name.findRev("::",scopeOffset-1);
- result = tmp;
- } while (scopeOffset>0);
- //printf("trimScope(name=%s,scope=%s)=%s\n",name.data(),s.data(),result.data());
- return result;
-}
-#endif
-
-void trimBaseClassScope(BaseClassList *bcl,QCString &s,int level=0)
-{
- //printf("trimBaseClassScope level=%d `%s'\n",level,s.data());
- BaseClassListIterator bcli(*bcl);
- BaseClassDef *bcd;
- for (;(bcd=bcli.current());++bcli)
- {
- ClassDef *cd=bcd->classDef;
- //printf("Trying class %s\n",cd->name().data());
- int spos=s.find(cd->name()+"::");
- if (spos!=-1)
- {
- s = s.left(spos)+s.right(
- s.length()-spos-cd->name().length()-2
- );
- }
- //printf("base class `%s'\n",cd->name().data());
- if (cd->baseClasses())
- trimBaseClassScope(cd->baseClasses(),s,level+1);
- }
-}
-
-#if 0
-/*! if either t1 or t2 contains a namespace scope, then remove that
- * scope. If neither or both have a namespace scope, t1 and t2 remain
- * unchanged.
- */
-static void trimNamespaceScope(QCString &t1,QCString &t2,const QCString &nsName)
-{
- int p1=t1.length();
- int p2=t2.length();
- for (;;)
- {
- int i1=p1==0 ? -1 : t1.findRev("::",p1);
- int i2=p2==0 ? -1 : t2.findRev("::",p2);
- if (i1==-1 && i2==-1)
- {
- return;
- }
- if (i1!=-1 && i2==-1) // only t1 has a scope
- {
- QCString scope=t1.left(i1);
- replaceNamespaceAliases(scope,i1);
-
- int so=nsName.length();
- do
- {
- QCString fullScope=nsName.left(so);
- if (!fullScope.isEmpty() && !scope.isEmpty()) fullScope+="::";
- fullScope+=scope;
- if (!fullScope.isEmpty() && Doxygen::namespaceSDict[fullScope]!=0) // scope is a namespace
- {
- t1 = t1.right(t1.length()-i1-2);
- return;
- }
- if (so==0)
- {
- so=-1;
- }
- else if ((so=nsName.findRev("::",so-1))==-1)
- {
- so=0;
- }
- }
- while (so>=0);
- }
- else if (i1==-1 && i2!=-1) // only t2 has a scope
- {
- QCString scope=t2.left(i2);
- replaceNamespaceAliases(scope,i2);
-
- int so=nsName.length();
- do
- {
- QCString fullScope=nsName.left(so);
- if (!fullScope.isEmpty() && !scope.isEmpty()) fullScope+="::";
- fullScope+=scope;
- if (!fullScope.isEmpty() && Doxygen::namespaceSDict[fullScope]!=0) // scope is a namespace
- {
- t2 = t2.right(t2.length()-i2-2);
- return;
- }
- if (so==0)
- {
- so=-1;
- }
- else if ((so=nsName.findRev("::",so-1))==-1)
- {
- so=0;
- }
- }
- while (so>=0);
- }
- p1 = QMAX(i1-2,0);
- p2 = QMAX(i2-2,0);
- }
-}
-#endif
-
-static void stripIrrelevantString(QCString &target,const QCString &str)
-{
- if (target==str) { target.resize(0); return; }
- int i,p=0;
- int l=str.length();
- bool changed=FALSE;
- while ((i=target.find(str,p))!=-1)
- {
- bool isMatch = (i==0 || !isId(target.at(i-1))) && // not a character before str
- (i+l==(int)target.length() || !isId(target.at(i+l))); // not a character after str
- if (isMatch)
- {
- int i1=target.find('*',i+l);
- int i2=target.find('&',i+l);
- if (i1==-1 && i2==-1)
- {
- // strip str from target at index i
- target=target.left(i)+target.right(target.length()-i-l);
- changed=TRUE;
- i-=l;
- }
- else if ((i1!=-1 && i<i1) || (i2!=-1 && i<i2)) // str before * or &
- {
- // move str to front
- target=str+" "+target.left(i)+target.right(target.length()-i-l);
- changed=TRUE;
- i++;
- }
- }
- p = i+l;
- }
- if (changed) target=target.stripWhiteSpace();
-}
-
-/*! According to the C++ spec and Ivan Vecerina:
-
- Parameter declarations that differ only in the presence or absence
- of const and/or volatile are equivalent.
-
- So the following example, show what is stripped by this routine
- for const. The same is done for volatile.
-
- \code
- const T param -> T param // not relevant
- const T& param -> const T& param // const needed
- T* const param -> T* param // not relevant
- const T* param -> const T* param // const needed
- \endcode
- */
-void stripIrrelevantConstVolatile(QCString &s)
-{
- //printf("stripIrrelevantConstVolatile(%s)=",s.data());
- stripIrrelevantString(s,"const");
- stripIrrelevantString(s,"volatile");
- //printf("%s\n",s.data());
-}
-
-
-// a bit of debug support for matchArguments
-#define MATCH
-#define NOMATCH
-//#define MATCH printf("Match at line %d\n",__LINE__);
-//#define NOMATCH printf("Nomatch at line %d\n",__LINE__);
-
-#ifndef NEWMATCH
-static bool matchArgument(const Argument *srcA,const Argument *dstA,
- const QCString &className,
- const QCString &namespaceName,
- NamespaceSDict *usingNamespaces,
- SDict<Definition> *usingClasses)
-{
- //printf("match argument start `%s|%s' <-> `%s|%s' using nsp=%p class=%p\n",
- // srcA->type.data(),srcA->name.data(),
- // dstA->type.data(),dstA->name.data(),
- // usingNamespaces,
- // usingClasses);
-
- // TODO: resolve any typedefs names that are part of srcA->type
- // before matching. This should use className and namespaceName
- // and usingNamespaces and usingClass to determine which typedefs
- // are in-scope, so it will not be very efficient :-(
-
- QCString srcAType=trimTemplateSpecifiers(namespaceName,className,srcA->type);
- QCString dstAType=trimTemplateSpecifiers(namespaceName,className,dstA->type);
- QCString srcAName=srcA->name.stripWhiteSpace();
- QCString dstAName=dstA->name.stripWhiteSpace();
- srcAType.stripPrefix("class ");
- dstAType.stripPrefix("class ");
-
- // allow distinguishing "const A" from "const B" even though
- // from a syntactic point of view they would be two names of the same
- // type "const". This is not fool prove of course, but should at least
- // catch the most common cases.
- if ((srcAType=="const" || srcAType=="volatile") && !srcAName.isEmpty())
- {
- srcAType+=" ";
- srcAType+=srcAName;
- }
- if ((dstAType=="const" || dstAType=="volatile") && !dstAName.isEmpty())
- {
- dstAType+=" ";
- dstAType+=dstAName;
- }
- if (srcAName=="const" || srcAName=="volatile")
- {
- srcAType+=srcAName;
- srcAName.resize(0);
- }
- else if (dstA->name=="const" || dstA->name=="volatile")
- {
- dstAType+=dstA->name;
- dstAName.resize(0);
- }
-
- stripIrrelevantConstVolatile(srcAType);
- stripIrrelevantConstVolatile(dstAType);
-
- // strip typename keyword
- if (strncmp(srcAType,"typename ",9)==0)
- {
- srcAType = srcAType.right(srcAType.length()-9);
- }
- if (strncmp(dstAType,"typename ",9)==0)
- {
- dstAType = dstAType.right(dstAType.length()-9);
- }
-
- srcAType = removeRedundantWhiteSpace(srcAType);
- dstAType = removeRedundantWhiteSpace(dstAType);
-
- //srcAType=stripTemplateSpecifiersFromScope(srcAType,FALSE);
- //dstAType=stripTemplateSpecifiersFromScope(dstAType,FALSE);
-
- //printf("srcA=`%s|%s' dstA=`%s|%s'\n",srcAType.data(),srcAName.data(),
- // dstAType.data(),dstAName.data());
-
- if (srcA->array!=dstA->array) // nomatch for char[] against char
- {
- NOMATCH
- return FALSE;
- }
- if (srcAType!=dstAType) // check if the argument only differs on name
- {
-
- // remove a namespace scope that is only in one type
- // (assuming a using statement was used)
- //printf("Trimming %s<->%s: %s\n",srcAType.data(),dstAType.data(),namespaceName.data());
- //trimNamespaceScope(srcAType,dstAType,namespaceName);
- //printf("After Trimming %s<->%s\n",srcAType.data(),dstAType.data());
-
- //QCString srcScope;
- //QCString dstScope;
-
- // strip redundant scope specifiers
- if (!className.isEmpty())
- {
- srcAType=trimScope(className,srcAType);
- dstAType=trimScope(className,dstAType);
- //printf("trimScope: `%s' <=> `%s'\n",srcAType.data(),dstAType.data());
- ClassDef *cd;
- if (!namespaceName.isEmpty())
- cd=getClass(namespaceName+"::"+className);
- else
- cd=getClass(className);
- if (cd && cd->baseClasses())
- {
- trimBaseClassScope(cd->baseClasses(),srcAType);
- trimBaseClassScope(cd->baseClasses(),dstAType);
- }
- //printf("trimBaseClassScope: `%s' <=> `%s'\n",srcAType.data(),dstAType.data());
- }
- if (!namespaceName.isEmpty())
- {
- srcAType=trimScope(namespaceName,srcAType);
- dstAType=trimScope(namespaceName,dstAType);
- }
- //printf("#usingNamespace=%d\n",usingNamespaces->count());
- if (usingNamespaces && usingNamespaces->count()>0)
- {
- NamespaceSDict::Iterator nli(*usingNamespaces);
- NamespaceDef *nd;
- for (;(nd=nli.current());++nli)
- {
- srcAType=trimScope(nd->name(),srcAType);
- dstAType=trimScope(nd->name(),dstAType);
- }
- }
- //printf("#usingClasses=%d\n",usingClasses->count());
- if (usingClasses && usingClasses->count()>0)
- {
- SDict<Definition>::Iterator cli(*usingClasses);
- Definition *cd;
- for (;(cd=cli.current());++cli)
- {
- srcAType=trimScope(cd->name(),srcAType);
- dstAType=trimScope(cd->name(),dstAType);
- }
- }
-
- //printf("2. srcA=%s|%s dstA=%s|%s\n",srcAType.data(),srcAName.data(),
- // dstAType.data(),dstAName.data());
-
- if (!srcAName.isEmpty() && !dstA->type.isEmpty() &&
- (srcAType+" "+srcAName)==dstAType)
- {
- MATCH
- return TRUE;
- }
- else if (!dstAName.isEmpty() && !srcA->type.isEmpty() &&
- (dstAType+" "+dstAName)==srcAType)
- {
- MATCH
- return TRUE;
- }
-
-
- uint srcPos=0,dstPos=0;
- bool equal=TRUE;
- while (srcPos<srcAType.length() && dstPos<dstAType.length() && equal)
- {
- equal=srcAType.at(srcPos)==dstAType.at(dstPos);
- if (equal) srcPos++,dstPos++;
- }
- uint srcATypeLen=srcAType.length();
- uint dstATypeLen=dstAType.length();
- if (srcPos<srcATypeLen && dstPos<dstATypeLen)
- {
- // if nothing matches or the match ends in the middle or at the
- // end of a string then there is no match
- if (srcPos==0 || dstPos==0)
- {
- NOMATCH
- return FALSE;
- }
- if (isId(srcAType.at(srcPos)) && isId(dstAType.at(dstPos)))
- {
- //printf("partial match srcPos=%d dstPos=%d!\n",srcPos,dstPos);
- // check if a name if already found -> if no then there is no match
- if (!srcAName.isEmpty() || !dstAName.isEmpty())
- {
- NOMATCH
- return FALSE;
- }
- // types only
- while (srcPos<srcATypeLen && isId(srcAType.at(srcPos))) srcPos++;
- while (dstPos<dstATypeLen && isId(dstAType.at(dstPos))) dstPos++;
- if (srcPos<srcATypeLen ||
- dstPos<dstATypeLen ||
- (srcPos==srcATypeLen && dstPos==dstATypeLen)
- )
- {
- NOMATCH
- return FALSE;
- }
- }
- else
- {
- // otherwise we assume that a name starts at the current position.
- while (srcPos<srcATypeLen && isId(srcAType.at(srcPos))) srcPos++;
- while (dstPos<dstATypeLen && isId(dstAType.at(dstPos))) dstPos++;
-
- // if nothing more follows for both types then we assume we have
- // found a match. Note that now `signed int' and `signed' match, but
- // seeing that int is not a name can only be done by looking at the
- // semantics.
-
- if (srcPos!=srcATypeLen || dstPos!=dstATypeLen)
- {
- NOMATCH
- return FALSE;
- }
- }
- }
- else if (dstPos<dstAType.length())
- {
- if (!isspace((uchar)dstAType.at(dstPos))) // maybe the names differ
- {
- if (!dstAName.isEmpty()) // dst has its name separated from its type
- {
- NOMATCH
- return FALSE;
- }
- while (dstPos<dstAType.length() && isId(dstAType.at(dstPos))) dstPos++;
- if (dstPos!=dstAType.length())
- {
- NOMATCH
- return FALSE; // more than a difference in name -> no match
- }
- }
- else // maybe dst has a name while src has not
- {
- dstPos++;
- while (dstPos<dstAType.length() && isId(dstAType.at(dstPos))) dstPos++;
- if (dstPos!=dstAType.length() || !srcAName.isEmpty())
- {
- NOMATCH
- return FALSE; // nope not a name -> no match
- }
- }
- }
- else if (srcPos<srcAType.length())
- {
- if (!isspace((uchar)srcAType.at(srcPos))) // maybe the names differ
- {
- if (!srcAName.isEmpty()) // src has its name separated from its type
- {
- NOMATCH
- return FALSE;
- }
- while (srcPos<srcAType.length() && isId(srcAType.at(srcPos))) srcPos++;
- if (srcPos!=srcAType.length())
- {
- NOMATCH
- return FALSE; // more than a difference in name -> no match
- }
- }
- else // maybe src has a name while dst has not
- {
- srcPos++;
- while (srcPos<srcAType.length() && isId(srcAType.at(srcPos))) srcPos++;
- if (srcPos!=srcAType.length() || !dstAName.isEmpty())
- {
- NOMATCH
- return FALSE; // nope not a name -> no match
- }
- }
- }
- }
- MATCH
- return TRUE;
-}
-
-
-/*!
- * Matches the arguments list srcAl with the argument list dstAl
- * Returns TRUE if the argument lists are equal. Two argument list are
- * considered equal if the number of arguments is equal and the types of all
- * arguments are equal. Furthermore the const and volatile specifiers
- * stored in the list should be equal.
- */
-bool matchArguments(ArgumentList *srcAl,ArgumentList *dstAl,
- const char *cl,const char *ns,bool checkCV,
- NamespaceSDict *usingNamespaces,
- SDict<Definition> *usingClasses)
-{
- QCString className=cl;
- QCString namespaceName=ns;
-
- // strip template specialization from class name if present
- //int til=className.find('<'),tir=className.find('>');
- //if (til!=-1 && tir!=-1 && tir>til)
- //{
- // className=className.left(til)+className.right(className.length()-tir-1);
- //}
-
- //printf("matchArguments(%s,%s) className=%s namespaceName=%s checkCV=%d usingNamespaces=%d usingClasses=%d\n",
- // srcAl ? argListToString(srcAl).data() : "",
- // dstAl ? argListToString(dstAl).data() : "",
- // cl,ns,checkCV,
- // usingNamespaces?usingNamespaces->count():0,
- // usingClasses?usingClasses->count():0
- // );
-
- if (srcAl==0 || dstAl==0)
- {
- bool match = srcAl==dstAl; // at least one of the members is not a function
- if (match)
- {
- MATCH
- return TRUE;
- }
- else
- {
- NOMATCH
- return FALSE;
- }
- }
-
- // handle special case with void argument
- if ( srcAl->count()==0 && dstAl->count()==1 &&
- dstAl->getFirst()->type=="void" )
- { // special case for finding match between func() and func(void)
- Argument *a=new Argument;
- a->type = "void";
- srcAl->append(a);
- MATCH
- return TRUE;
- }
- if ( dstAl->count()==0 && srcAl->count()==1 &&
- srcAl->getFirst()->type=="void" )
- { // special case for finding match between func(void) and func()
- Argument *a=new Argument;
- a->type = "void";
- dstAl->append(a);
- MATCH
- return TRUE;
- }
-
- if (srcAl->count() != dstAl->count())
- {
- NOMATCH
- return FALSE; // different number of arguments -> no match
- }
-
- if (checkCV)
- {
- if (srcAl->constSpecifier != dstAl->constSpecifier)
- {
- NOMATCH
- return FALSE; // one member is const, the other not -> no match
- }
- if (srcAl->volatileSpecifier != dstAl->volatileSpecifier)
- {
- NOMATCH
- return FALSE; // one member is volatile, the other not -> no match
- }
- }
-
- // so far the argument list could match, so we need to compare the types of
- // all arguments.
- ArgumentListIterator srcAli(*srcAl),dstAli(*dstAl);
- Argument *srcA,*dstA;
- for (;(srcA=srcAli.current(),dstA=dstAli.current());++srcAli,++dstAli)
- {
- if (!matchArgument(srcA,dstA,className,namespaceName,
- usingNamespaces,usingClasses))
- {
- NOMATCH
- return FALSE;
- }
- }
- MATCH
- return TRUE; // all arguments match
-}
-
-#endif
-
-#if 0
-static QCString resolveSymbolName(FileDef *fs,Definition *symbol,QCString &templSpec)
-{
- ASSERT(symbol!=0);
- if (symbol->definitionType()==Definition::TypeMember &&
- ((MemberDef*)symbol)->isTypedef()) // if symbol is a typedef then try
- // to resolve it
- {
- MemberDef *md = 0;
- ClassDef *cd = newResolveTypedef(fs,(MemberDef*)symbol,&md,&templSpec);
- if (cd)
- {
- return cd->qualifiedName()+templSpec;
- }
- else if (md)
- {
- return md->qualifiedName();
- }
- }
- return symbol->qualifiedName();
-}
-#endif
-
-static QCString stripDeclKeywords(const QCString &s)
-{
- int i=s.find(" class ");
- if (i!=-1) return s.left(i)+s.mid(i+6);
- i=s.find(" typename ");
- if (i!=-1) return s.left(i)+s.mid(i+9);
- i=s.find(" union ");
- if (i!=-1) return s.left(i)+s.mid(i+6);
- i=s.find(" struct ");
- if (i!=-1) return s.left(i)+s.mid(i+7);
- return s;
-}
-
-// forward decl for circular dependencies
-static QCString extractCanonicalType(Definition *d,FileDef *fs,QCString type);
-
-QCString getCanonicalTemplateSpec(Definition *d,FileDef *fs,const QCString& spec)
-{
-
- QCString templSpec = spec.stripWhiteSpace();
- // this part had been commented out before... but it is needed to match for instance
- // std::list<std::string> against list<string> so it is now back again!
- if (!templSpec.isEmpty() && templSpec.at(0) == '<')
- {
- templSpec = "< " + extractCanonicalType(d,fs,templSpec.right(templSpec.length()-1).stripWhiteSpace());
- }
- QCString resolvedType = resolveTypeDef(d,templSpec);
- if (!resolvedType.isEmpty()) // not known as a typedef either
- {
- templSpec = resolvedType;
- }
- //printf("getCanonicalTemplateSpec(%s)=%s\n",spec.data(),templSpec.data());
- return templSpec;
-}
-
-
-static QCString getCanonicalTypeForIdentifier(
- Definition *d,FileDef *fs,const QCString &word,
- QCString *tSpec,int count=0)
-{
- if (count>10) return word; // oops recursion
-
- QCString symName,scope,result,templSpec,tmpName;
- //DefinitionList *defList=0;
- if (tSpec && !tSpec->isEmpty())
- templSpec = stripDeclKeywords(getCanonicalTemplateSpec(d,fs,*tSpec));
-
- if (word.findRev("::")!=-1 && !(tmpName=stripScope(word)).isEmpty())
- {
- symName=tmpName; // name without scope
- }
- else
- {
- symName=word;
- }
- //printf("getCanonicalTypeForIdentifier(%s,[%s->%s]) start\n",
- // word.data(),tSpec?tSpec->data():"<none>",templSpec.data());
-
- ClassDef *cd = 0;
- MemberDef *mType = 0;
- QCString ts;
- QCString resolvedType;
-
- // lookup class / class template instance
- cd = getResolvedClass(d,fs,word+templSpec,&mType,&ts,TRUE,TRUE,&resolvedType);
- bool isTemplInst = cd && !templSpec.isEmpty();
- if (!cd && !templSpec.isEmpty())
- {
- // class template specialization not known, look up class template
- cd = getResolvedClass(d,fs,word,&mType,&ts,TRUE,TRUE,&resolvedType);
- }
- if (cd && cd->isUsedOnly()) cd=0; // ignore types introduced by usage relations
-
- //printf("cd=%p mtype=%p\n",cd,mType);
- //printf(" getCanonicalTypeForIdentifer: symbol=%s word=%s cd=%s d=%s fs=%s cd->isTemplate=%d\n",
- // symName.data(),
- // word.data(),
- // cd?cd->name().data():"<none>",
- // d?d->name().data():"<none>",
- // fs?fs->name().data():"<none>",
- // cd?cd->isTemplate():-1
- // );
-
- //printf(" >>>> word '%s' => '%s' templSpec=%s ts=%s tSpec=%s isTemplate=%d resolvedType=%s\n",
- // (word+templSpec).data(),
- // cd?cd->qualifiedName().data():"<none>",
- // templSpec.data(),ts.data(),
- // tSpec?tSpec->data():"<null>",
- // cd?cd->isTemplate():FALSE,
- // resolvedType.data());
-
- //printf(" mtype=%s\n",mType?mType->name().data():"<none>");
-
- if (cd) // resolves to a known class type
- {
- if (cd==d && tSpec) *tSpec="";
-
- if (mType && mType->isTypedef()) // but via a typedef
- {
- result = resolvedType;
- }
- else
- {
- if (isTemplInst)
- {
- // spec is already part of class type
- templSpec="";
- if (tSpec) *tSpec="";
- }
- else if (!ts.isEmpty() && templSpec.isEmpty())
- {
- // use formal template args for spec
- templSpec = stripDeclKeywords(getCanonicalTemplateSpec(d,fs,ts));
- }
-
- result = removeRedundantWhiteSpace(cd->qualifiedName() + templSpec);
-
- if (cd->isTemplate() && tSpec) //
- {
- if (!templSpec.isEmpty()) // specific instance
- {
- result=cd->name()+templSpec;
- }
- else // use template type
- {
- result=cd->qualifiedNameWithTemplateParameters();
- }
- // template class, so remove the template part (it is part of the class name)
- *tSpec="";
- }
- else if (ts.isEmpty() && !templSpec.isEmpty() && cd && !cd->isTemplate() && tSpec)
- {
- // obscure case, where a class is used as a template, but doxygen think it is
- // not (could happen when loading the class from a tag file).
- *tSpec="";
- }
- }
- }
- else if (mType && mType->isEnumerate()) // an enum
- {
- result = mType->qualifiedName();
- }
- else if (mType && mType->isTypedef()) // a typedef
- {
- //result = mType->qualifiedName(); // changed after 1.7.2
- //result = mType->typeString();
- //printf("word=%s typeString=%s\n",word.data(),mType->typeString());
- if (word!=mType->typeString())
- {
- result = getCanonicalTypeForIdentifier(d,fs,mType->typeString(),tSpec,count+1);
- }
- else
- {
- result = mType->typeString();
- }
- }
- else // fallback
- {
- resolvedType = resolveTypeDef(d,word);
- //printf("typedef [%s]->[%s]\n",word.data(),resolvedType.data());
- if (resolvedType.isEmpty()) // not known as a typedef either
- {
- result = word;
- }
- else
- {
- result = resolvedType;
- }
- }
- //printf("getCanonicalTypeForIdentifier [%s]->[%s]\n",word.data(),result.data());
- return result;
-}
-
-static QCString extractCanonicalType(Definition *d,FileDef *fs,QCString type)
-{
- type = type.stripWhiteSpace();
-
- // strip const and volatile keywords that are not relevant for the type
- stripIrrelevantConstVolatile(type);
-
- // strip leading keywords
- type.stripPrefix("class ");
- type.stripPrefix("struct ");
- type.stripPrefix("union ");
- type.stripPrefix("enum ");
- type.stripPrefix("typename ");
-
- type = removeRedundantWhiteSpace(type);
- //printf("extractCanonicalType(type=%s) start: def=%s file=%s\n",type.data(),
- // d ? d->name().data() : "<null>",fs ? fs->name().data() : "<null>");
-
- //static QRegExp id("[a-z_A-Z\\x80-\\xFF][:a-z_A-Z0-9\\x80-\\xFF]*");
-
- QCString canType;
- QCString templSpec,word;
- int i,p=0,pp=0;
- while ((i=extractClassNameFromType(type,p,word,templSpec))!=-1)
- // foreach identifier in the type
- {
- //printf(" i=%d p=%d\n",i,p);
- if (i>pp) canType += type.mid(pp,i-pp);
-
-
- QCString ct = getCanonicalTypeForIdentifier(d,fs,word,&templSpec);
-
- // in case the ct is empty it means that "word" represents scope "d"
- // and this does not need to be added to the canonical
- // type (it is redundant), so/ we skip it. This solves problem 589616.
- if (ct.isEmpty() && type.mid(p,2)=="::")
- {
- p+=2;
- }
- else
- {
- canType += ct;
- }
- //printf(" word=%s templSpec=%s canType=%s ct=%s\n",
- // word.data(),templSpec.data(),canType.data(),ct.data());
- if (!templSpec.isEmpty()) // if we didn't use up the templSpec already
- // (i.e. type is not a template specialization)
- // then resolve any identifiers inside.
- {
- static QRegExp re("[a-z_A-Z\\x80-\\xFF][a-z_A-Z0-9\\x80-\\xFF]*");
- int tp=0,tl,ti;
- // for each identifier template specifier
- //printf("adding resolved %s to %s\n",templSpec.data(),canType.data());
- while ((ti=re.match(templSpec,tp,&tl))!=-1)
- {
- canType += templSpec.mid(tp,ti-tp);
- canType += getCanonicalTypeForIdentifier(d,fs,templSpec.mid(ti,tl),0);
- tp=ti+tl;
- }
- canType+=templSpec.right(templSpec.length()-tp);
- }
-
- pp=p;
- }
- canType += type.right(type.length()-pp);
- //printf("extractCanonicalType = '%s'->'%s'\n",type.data(),canType.data());
-
- return removeRedundantWhiteSpace(canType);
-}
-
-static QCString extractCanonicalArgType(Definition *d,FileDef *fs,const Argument *arg)
-{
- QCString type = arg->type.stripWhiteSpace();
- QCString name = arg->name;
- //printf("----- extractCanonicalArgType(type=%s,name=%s)\n",type.data(),name.data());
- if ((type=="const" || type=="volatile") && !name.isEmpty())
- { // name is part of type => correct
- type+=" ";
- type+=name;
- }
- if (name=="const" || name=="volatile")
- { // name is part of type => correct
- if (!type.isEmpty()) type+=" ";
- type+=name;
- }
- if (!arg->array.isEmpty())
- {
- type+=arg->array;
- }
-
- return extractCanonicalType(d,fs,type);
-}
-
-static bool matchArgument2(
- Definition *srcScope,FileDef *srcFileScope,Argument *srcA,
- Definition *dstScope,FileDef *dstFileScope,Argument *dstA
- )
-{
- //printf(">> match argument: %s::`%s|%s' (%s) <-> %s::`%s|%s' (%s)\n",
- // srcScope ? srcScope->name().data() : "",
- // srcA->type.data(),srcA->name.data(),srcA->canType.data(),
- // dstScope ? dstScope->name().data() : "",
- // dstA->type.data(),dstA->name.data(),dstA->canType.data());
-
- //if (srcA->array!=dstA->array) // nomatch for char[] against char
- //{
- // NOMATCH
- // return FALSE;
- //}
- QCString sSrcName = " "+srcA->name;
- QCString sDstName = " "+dstA->name;
- QCString srcType = srcA->type;
- QCString dstType = dstA->type;
- stripIrrelevantConstVolatile(srcType);
- stripIrrelevantConstVolatile(dstType);
- //printf("'%s'<->'%s'\n",sSrcName.data(),dstType.right(sSrcName.length()).data());
- //printf("'%s'<->'%s'\n",sDstName.data(),srcType.right(sDstName.length()).data());
- if (sSrcName==dstType.right(sSrcName.length()))
- { // case "unsigned int" <-> "unsigned int i"
- srcA->type+=sSrcName;
- srcA->name="";
- srcA->canType=""; // invalidate cached type value
- }
- else if (sDstName==srcType.right(sDstName.length()))
- { // case "unsigned int i" <-> "unsigned int"
- dstA->type+=sDstName;
- dstA->name="";
- dstA->canType=""; // invalidate cached type value
- }
-
- if (srcA->canType.isEmpty())
- {
- srcA->canType = extractCanonicalArgType(srcScope,srcFileScope,srcA);
- }
- if (dstA->canType.isEmpty())
- {
- dstA->canType = extractCanonicalArgType(dstScope,dstFileScope,dstA);
- }
-
- if (srcA->canType==dstA->canType)
- {
- MATCH
- return TRUE;
- }
- else
- {
- //printf(" Canonical types do not match [%s]<->[%s]\n",
- // srcA->canType.data(),dstA->canType.data());
- NOMATCH
- return FALSE;
- }
-}
-
-
-// new algorithm for argument matching
-bool matchArguments2(Definition *srcScope,FileDef *srcFileScope,ArgumentList *srcAl,
- Definition *dstScope,FileDef *dstFileScope,ArgumentList *dstAl,
- bool checkCV
- )
-{
- //printf("*** matchArguments2\n");
- ASSERT(srcScope!=0 && dstScope!=0);
-
- if (srcAl==0 || dstAl==0)
- {
- bool match = srcAl==dstAl; // at least one of the members is not a function
- if (match)
- {
- MATCH
- return TRUE;
- }
- else
- {
- NOMATCH
- return FALSE;
- }
- }
-
- // handle special case with void argument
- if ( srcAl->count()==0 && dstAl->count()==1 &&
- dstAl->getFirst()->type=="void" )
- { // special case for finding match between func() and func(void)
- Argument *a=new Argument;
- a->type = "void";
- srcAl->append(a);
- MATCH
- return TRUE;
- }
- if ( dstAl->count()==0 && srcAl->count()==1 &&
- srcAl->getFirst()->type=="void" )
- { // special case for finding match between func(void) and func()
- Argument *a=new Argument;
- a->type = "void";
- dstAl->append(a);
- MATCH
- return TRUE;
- }
-
- if (srcAl->count() != dstAl->count())
- {
- NOMATCH
- return FALSE; // different number of arguments -> no match
- }
-
- if (checkCV)
- {
- if (srcAl->constSpecifier != dstAl->constSpecifier)
- {
- NOMATCH
- return FALSE; // one member is const, the other not -> no match
- }
- if (srcAl->volatileSpecifier != dstAl->volatileSpecifier)
- {
- NOMATCH
- return FALSE; // one member is volatile, the other not -> no match
- }
- }
-
- // so far the argument list could match, so we need to compare the types of
- // all arguments.
- ArgumentListIterator srcAli(*srcAl),dstAli(*dstAl);
- Argument *srcA,*dstA;
- for (;(srcA=srcAli.current(),dstA=dstAli.current());++srcAli,++dstAli)
- {
- if (!matchArgument2(srcScope,srcFileScope,srcA,
- dstScope,dstFileScope,dstA)
- )
- {
- NOMATCH
- return FALSE;
- }
- }
- MATCH
- return TRUE; // all arguments match
-}
-
-
-
-// merges the initializer of two argument lists
-// pre: the types of the arguments in the list should match.
-void mergeArguments(ArgumentList *srcAl,ArgumentList *dstAl,bool forceNameOverwrite)
-{
- //printf("mergeArguments `%s', `%s'\n",
- // argListToString(srcAl).data(),argListToString(dstAl).data());
-
- if (srcAl==0 || dstAl==0 || srcAl->count()!=dstAl->count())
- {
- return; // invalid argument lists -> do not merge
- }
-
- ArgumentListIterator srcAli(*srcAl),dstAli(*dstAl);
- Argument *srcA,*dstA;
- for (;(srcA=srcAli.current(),dstA=dstAli.current());++srcAli,++dstAli)
- {
- if (srcA->defval.isEmpty() && !dstA->defval.isEmpty())
- {
- //printf("Defval changing `%s'->`%s'\n",srcA->defval.data(),dstA->defval.data());
- srcA->defval=dstA->defval.copy();
- }
- else if (!srcA->defval.isEmpty() && dstA->defval.isEmpty())
- {
- //printf("Defval changing `%s'->`%s'\n",dstA->defval.data(),srcA->defval.data());
- dstA->defval=srcA->defval.copy();
- }
-
- // fix wrongly detected const or volatile specifiers before merging.
- // example: "const A *const" is detected as type="const A *" name="const"
- if (srcA->name=="const" || srcA->name=="volatile")
- {
- srcA->type+=" "+srcA->name;
- srcA->name.resize(0);
- }
- if (dstA->name=="const" || dstA->name=="volatile")
- {
- dstA->type+=" "+dstA->name;
- dstA->name.resize(0);
- }
-
- if (srcA->type==dstA->type)
- {
- //printf("1. merging %s:%s <-> %s:%s\n",srcA->type.data(),srcA->name.data(),dstA->type.data(),dstA->name.data());
- if (srcA->name.isEmpty() && !dstA->name.isEmpty())
- {
- //printf("type: `%s':=`%s'\n",srcA->type.data(),dstA->type.data());
- //printf("name: `%s':=`%s'\n",srcA->name.data(),dstA->name.data());
- srcA->type = dstA->type.copy();
- srcA->name = dstA->name.copy();
- }
- else if (!srcA->name.isEmpty() && dstA->name.isEmpty())
- {
- //printf("type: `%s':=`%s'\n",dstA->type.data(),srcA->type.data());
- //printf("name: `%s':=`%s'\n",dstA->name.data(),srcA->name.data());
- dstA->type = srcA->type.copy();
- dstA->name = dstA->name.copy();
- }
- else if (!srcA->name.isEmpty() && !dstA->name.isEmpty())
- {
- //printf("srcA->name=%s dstA->name=%s\n",srcA->name.data(),dstA->name.data());
- if (forceNameOverwrite)
- {
- srcA->name = dstA->name;
- }
- else
- {
- if (srcA->docs.isEmpty() && !dstA->docs.isEmpty())
- {
- srcA->name = dstA->name;
- }
- else if (!srcA->docs.isEmpty() && dstA->docs.isEmpty())
- {
- dstA->name = srcA->name;
- }
- }
- }
- }
- else
- {
- //printf("2. merging '%s':'%s' <-> '%s':'%s'\n",srcA->type.data(),srcA->name.data(),dstA->type.data(),dstA->name.data());
- srcA->type=srcA->type.stripWhiteSpace();
- dstA->type=dstA->type.stripWhiteSpace();
- if (srcA->type+" "+srcA->name==dstA->type) // "unsigned long:int" <-> "unsigned long int:bla"
- {
- srcA->type+=" "+srcA->name;
- srcA->name=dstA->name;
- }
- else if (dstA->type+" "+dstA->name==srcA->type) // "unsigned long int bla" <-> "unsigned long int"
- {
- dstA->type+=" "+dstA->name;
- dstA->name=srcA->name;
- }
- else if (srcA->name.isEmpty() && !dstA->name.isEmpty())
- {
- srcA->name = dstA->name;
- }
- else if (dstA->name.isEmpty() && !srcA->name.isEmpty())
- {
- dstA->name = srcA->name;
- }
- }
- int i1=srcA->type.find("::"),
- i2=dstA->type.find("::"),
- j1=srcA->type.length()-i1-2,
- j2=dstA->type.length()-i2-2;
- if (i1!=-1 && i2==-1 && srcA->type.right(j1)==dstA->type)
- {
- //printf("type: `%s':=`%s'\n",dstA->type.data(),srcA->type.data());
- //printf("name: `%s':=`%s'\n",dstA->name.data(),srcA->name.data());
- dstA->type = srcA->type.left(i1+2)+dstA->type;
- dstA->name = dstA->name.copy();
- }
- else if (i1==-1 && i2!=-1 && dstA->type.right(j2)==srcA->type)
- {
- //printf("type: `%s':=`%s'\n",srcA->type.data(),dstA->type.data());
- //printf("name: `%s':=`%s'\n",dstA->name.data(),srcA->name.data());
- srcA->type = dstA->type.left(i2+2)+srcA->type;
- srcA->name = dstA->name.copy();
- }
- if (srcA->docs.isEmpty() && !dstA->docs.isEmpty())
- {
- srcA->docs = dstA->docs.copy();
- }
- else if (dstA->docs.isEmpty() && !srcA->docs.isEmpty())
- {
- dstA->docs = srcA->docs.copy();
- }
- //printf("Merge argument `%s|%s' `%s|%s'\n",
- // srcA->type.data(),srcA->name.data(),
- // dstA->type.data(),dstA->name.data());
- }
-}
-
-static void findMembersWithSpecificName(MemberName *mn,
- const char *args,
- bool checkStatics,
- FileDef *currentFile,
- bool checkCV,
- const char *forceTagFile,
- QList<MemberDef> &members)
-{
- //printf(" Function with global scope name `%s' args=`%s'\n",
- // mn->memberName(),args);
- MemberListIterator mli(*mn);
- MemberDef *md;
- for (mli.toFirst();(md=mli.current());++mli)
- {
- FileDef *fd=md->getFileDef();
- GroupDef *gd=md->getGroupDef();
- //printf(" md->name()=`%s' md->args=`%s' fd=%p gd=%p current=%p ref=%s\n",
- // md->name().data(),args,fd,gd,currentFile,md->getReference().data());
- if (
- ((gd && gd->isLinkable()) || (fd && fd->isLinkable()) || md->isReference()) &&
- md->getNamespaceDef()==0 && md->isLinkable() &&
- (!checkStatics || (!md->isStatic() && !md->isDefine()) ||
- currentFile==0 || fd==currentFile) // statics must appear in the same file
- )
- {
- bool match=TRUE;
- ArgumentList *argList=0;
- if (args && !md->isDefine() && strcmp(args,"()")!=0)
- {
- argList=new ArgumentList;
- LockingPtr<ArgumentList> mdAl = md->argumentList();
- stringToArgumentList(args,argList);
- match=matchArguments2(
- md->getOuterScope(),fd,mdAl.pointer(),
- Doxygen::globalScope,fd,argList,
- checkCV);
- delete argList; argList=0;
- }
- if (match && (forceTagFile==0 || md->getReference()==forceTagFile))
- {
- //printf("Found match!\n");
- members.append(md);
- }
- }
- }
-}
-
-/*!
- * Searches for a member definition given its name `memberName' as a string.
- * memberName may also include a (partial) scope to indicate the scope
- * in which the member is located.
- *
- * The parameter `scName' is a string representing the name of the scope in
- * which the link was found.
- *
- * In case of a function args contains a string representation of the
- * argument list. Passing 0 means the member has no arguments.
- * Passing "()" means any argument list will do, but "()" is preferred.
- *
- * The function returns TRUE if the member is known and documented or
- * FALSE if it is not.
- * If TRUE is returned parameter `md' contains a pointer to the member
- * definition. Furthermore exactly one of the parameter `cd', `nd', or `fd'
- * will be non-zero:
- * - if `cd' is non zero, the member was found in a class pointed to by cd.
- * - if `nd' is non zero, the member was found in a namespace pointed to by nd.
- * - if `fd' is non zero, the member was found in the global namespace of
- * file fd.
- */
-bool getDefs(const QCString &scName,const QCString &memberName,
- const char *args,
- MemberDef *&md,
- ClassDef *&cd, FileDef *&fd, NamespaceDef *&nd, GroupDef *&gd,
- bool forceEmptyScope,
- FileDef *currentFile,
- bool checkCV,
- const char *forceTagFile
- )
-{
- fd=0, md=0, cd=0, nd=0, gd=0;
- if (memberName.isEmpty()) return FALSE; /* empty name => nothing to link */
-
- QCString scopeName=scName;
- scopeName = substitute(scopeName,"\\","::"); // for PHP
- //printf("Search for name=%s args=%s in scope=%s forceEmpty=%d\n",
- // memberName.data(),args,scopeName.data(),forceEmptyScope);
-
- int is,im=0,pm=0;
- // strip common part of the scope from the scopeName
- while ((is=scopeName.findRev("::"))!=-1 &&
- (im=memberName.find("::",pm))!=-1 &&
- (scopeName.right(scopeName.length()-is-2)==memberName.mid(pm,im-pm))
- )
- {
- scopeName=scopeName.left(is);
- pm=im+2;
- }
- //printf("result after scope corrections scope=%s name=%s\n",
- // scopeName.data(),memberName.data());
-
- QCString mName=memberName;
- QCString mScope;
- if (memberName.left(9)!="operator " && // treat operator conversion methods
- // as a special case
- (im=memberName.findRev("::"))!=-1 &&
- im<(int)memberName.length()-2 // not A::
- )
- {
- mScope=memberName.left(im);
- mName=memberName.right(memberName.length()-im-2);
- }
-
- // handle special the case where both scope name and member scope are equal
- if (mScope==scopeName) scopeName.resize(0);
-
- //printf("mScope=`%s' mName=`%s'\n",mScope.data(),mName.data());
-
- MemberName *mn = Doxygen::memberNameSDict->find(mName);
- //printf("mName=%s mn=%p\n",mName.data(),mn);
-
- if ((!forceEmptyScope || scopeName.isEmpty()) && // this was changed for bug638856, forceEmptyScope => empty scopeName
- mn && !(scopeName.isEmpty() && mScope.isEmpty()))
- {
- //printf(" >member name '%s' found\n",mName.data());
- int scopeOffset=scopeName.length();
- do
- {
- QCString className = scopeName.left(scopeOffset);
- if (!className.isEmpty() && !mScope.isEmpty())
- {
- className+="::"+mScope;
- }
- else if (!mScope.isEmpty())
- {
- className=mScope;
- }
-
- ClassDef *fcd=getResolvedClass(Doxygen::globalScope,0,className);
- //printf("Trying class scope %s: %p\n",className.data(),fcd);
- // todo: fill in correct fileScope!
- if (fcd && // is it a documented class
- fcd->isLinkable()
- )
- {
- //printf(" Found fcd=%p\n",fcd);
- MemberListIterator mmli(*mn);
- MemberDef *mmd;
- int mdist=maxInheritanceDepth;
- ArgumentList *argList=0;
- if (args)
- {
- argList=new ArgumentList;
- stringToArgumentList(args,argList);
- }
- for (mmli.toFirst();(mmd=mmli.current());++mmli)
- {
- //if (mmd->isLinkable())
- //{
- LockingPtr<ArgumentList> mmdAl = mmd->argumentList();
- bool match=args==0 ||
- matchArguments2(mmd->getOuterScope(),mmd->getFileDef(),mmdAl.pointer(),
- fcd,fcd->getFileDef(),argList,
- checkCV
- );
- //printf("match=%d\n",match);
- if (match)
- {
- ClassDef *mcd=mmd->getClassDef();
- if (mcd)
- {
- int m=minClassDistance(fcd,mcd);
- if (m<mdist && mcd->isLinkable())
- {
- mdist=m;
- cd=mcd;
- md=mmd;
- }
- }
- }
- //}
- }
- if (argList)
- {
- delete argList; argList=0;
- }
- if (mdist==maxInheritanceDepth && args && strcmp(args,"()")==0)
- // no exact match found, but if args="()" an arbitrary member will do
- {
- //printf(" >Searching for arbitrary member\n");
- for (mmli.toFirst();(mmd=mmli.current());++mmli)
- {
- //if (mmd->isLinkable())
- //{
- ClassDef *mcd=mmd->getClassDef();
- //printf(" >Class %s found\n",mcd->name().data());
- if (mcd)
- {
- int m=minClassDistance(fcd,mcd);
- if (m<mdist /* && mcd->isLinkable()*/ )
- {
- //printf("Class distance %d\n",m);
- mdist=m;
- cd=mcd;
- md=mmd;
- }
- }
- //}
- }
- }
- //printf(" >Succes=%d\n",mdist<maxInheritanceDepth);
- if (mdist<maxInheritanceDepth)
- {
- if (!md->isLinkable())
- {
- md=0; // avoid returning things we cannot link to
- cd=0;
- return FALSE; // match found, but was not linkable
- }
- else
- {
- gd=md->getGroupDef();
- if (gd) cd=0;
- return TRUE; /* found match */
- }
- }
- }
- /* go to the parent scope */
- if (scopeOffset==0)
- {
- scopeOffset=-1;
- }
- else if ((scopeOffset=scopeName.findRev("::",scopeOffset-1))==-1)
- {
- scopeOffset=0;
- }
- } while (scopeOffset>=0);
-
- }
- if (mn && scopeName.isEmpty() && mScope.isEmpty()) // Maybe a related function?
- {
- MemberListIterator mmli(*mn);
- MemberDef *mmd, *fuzzy_mmd = 0;
- ArgumentList *argList = 0;
- bool hasEmptyArgs = args && strcmp(args, "()") == 0;
-
- if (args)
- stringToArgumentList(args, argList = new ArgumentList);
-
- for (mmli.toFirst(); (mmd = mmli.current()); ++mmli)
- {
- if (!mmd->isLinkable() || (!mmd->isRelated() && !mmd->isForeign()) ||
- !mmd->getClassDef())
- continue;
-
- if (!args) break;
-
- QCString className = mmd->getClassDef()->name();
-
- LockingPtr<ArgumentList> mmdAl = mmd->argumentList();
- if (matchArguments2(mmd->getOuterScope(),mmd->getFileDef(),mmdAl.pointer(),
- Doxygen::globalScope,mmd->getFileDef(),argList,
- checkCV
- )
- ) break;
-
- if (!fuzzy_mmd && hasEmptyArgs)
- fuzzy_mmd = mmd;
- }
-
- if (argList) delete argList, argList = 0;
-
- mmd = mmd ? mmd : fuzzy_mmd;
-
- if (mmd)
- {
- md = mmd;
- cd = mmd->getClassDef();
- return TRUE;
- }
- }
-
-
- // maybe an namespace, file or group member ?
- //printf("Testing for global symbol scopeName=`%s' mScope=`%s' :: mName=`%s'\n",
- // scopeName.data(),mScope.data(),mName.data());
- if ((mn=Doxygen::functionNameSDict->find(mName))) // name is known
- {
- //printf(" >symbol name found\n");
- NamespaceDef *fnd=0;
- int scopeOffset=scopeName.length();
- do
- {
- QCString namespaceName = scopeName.left(scopeOffset);
- if (!namespaceName.isEmpty() && !mScope.isEmpty())
- {
- namespaceName+="::"+mScope;
- }
- else if (!mScope.isEmpty())
- {
- namespaceName=mScope.copy();
- }
- //printf("Trying namespace %s\n",namespaceName.data());
- if (!namespaceName.isEmpty() &&
- (fnd=Doxygen::namespaceSDict->find(namespaceName)) &&
- fnd->isLinkable()
- )
- {
- //printf("Function inside existing namespace `%s'\n",namespaceName.data());
- bool found=FALSE;
- MemberListIterator mmli(*mn);
- MemberDef *mmd;
- for (mmli.toFirst();((mmd=mmli.current()) && !found);++mmli)
- {
- //printf("mmd->getNamespaceDef()=%p fnd=%p\n",
- // mmd->getNamespaceDef(),fnd);
- if (mmd->getNamespaceDef()==fnd /* && mmd->isLinkable() */ )
- { // namespace is found
- bool match=TRUE;
- ArgumentList *argList=0;
- if (args && strcmp(args,"()")!=0)
- {
- argList=new ArgumentList;
- LockingPtr<ArgumentList> mmdAl = mmd->argumentList();
- stringToArgumentList(args,argList);
- match=matchArguments2(
- mmd->getOuterScope(),mmd->getFileDef(),mmdAl.pointer(),
- fnd,mmd->getFileDef(),argList,
- checkCV);
- }
- if (match)
- {
- nd=fnd;
- md=mmd;
- found=TRUE;
- }
- if (args)
- {
- delete argList; argList=0;
- }
- }
- }
- if (!found && args && !strcmp(args,"()"))
- // no exact match found, but if args="()" an arbitrary
- // member will do
- {
- for (mmli.toFirst();((mmd=mmli.current()) && !found);++mmli)
- {
- if (mmd->getNamespaceDef()==fnd /*&& mmd->isLinkable() */ )
- {
- nd=fnd;
- md=mmd;
- found=TRUE;
- }
- }
- }
- if (found)
- {
- if (!md->isLinkable())
- {
- md=0; // avoid returning things we cannot link to
- nd=0;
- return FALSE; // match found but not linkable
- }
- else
- {
- gd=md->getGroupDef();
- if (gd && gd->isLinkable()) nd=0; else gd=0;
- return TRUE;
- }
- }
- }
- if (scopeOffset==0)
- {
- scopeOffset=-1;
- }
- else if ((scopeOffset=scopeName.findRev("::",scopeOffset-1))==-1)
- {
- scopeOffset=0;
- }
- } while (scopeOffset>=0);
-
- //else // no scope => global function
- {
- QList<MemberDef> members;
- // search for matches with strict static checking
- findMembersWithSpecificName(mn,args,TRUE,currentFile,checkCV,forceTagFile,members);
- if (members.count()==0) // nothing found
- {
- // search again without strict static checking
- findMembersWithSpecificName(mn,args,FALSE,currentFile,checkCV,forceTagFile,members);
- }
- //printf("found %d members\n",members.count());
- if (members.count()!=1 && args && !strcmp(args,"()"))
- {
- // no exact match found, but if args="()" an arbitrary
- // member will do
- md=mn->last();
- while (md /* && md->isLinkable()*/)
- {
- //printf("Found member `%s'\n",md->name().data());
- //printf("member is linkable md->name()=`%s'\n",md->name().data());
- fd=md->getFileDef();
- gd=md->getGroupDef();
- if (
- (gd && gd->isLinkable()) || (fd && fd->isLinkable())
- )
- {
- members.append(md);
- }
- md=mn->prev();
- }
- }
- //printf("found %d candidate members\n",members.count());
- if (members.count()>0) // at least one match
- {
- md=members.last();
- }
- if (md) // found a matching global member
- {
- fd=md->getFileDef();
- gd=md->getGroupDef();
- //printf("fd=%p gd=%p gd->isLinkable()=%d\n",fd,gd,gd->isLinkable());
- if (gd && gd->isLinkable()) fd=0; else gd=0;
- return TRUE;
- }
- }
- }
-
- // no nothing found
- return FALSE;
-}
-
-/*!
- * Searches for a scope definition given its name as a string via parameter
- * `scope`.
- *
- * The parameter `docScope` is a string representing the name of the scope in
- * which the `scope` string was found.
- *
- * The function returns TRUE if the scope is known and documented or
- * FALSE if it is not.
- * If TRUE is returned exactly one of the parameter `cd`, `nd`
- * will be non-zero:
- * - if `cd` is non zero, the scope was a class pointed to by cd.
- * - if `nd` is non zero, the scope was a namespace pointed to by nd.
- */
-static bool getScopeDefs(const char *docScope,const char *scope,
- ClassDef *&cd, NamespaceDef *&nd)
-{
- cd=0;nd=0;
-
- QCString scopeName=scope;
- //printf("getScopeDefs: docScope=`%s' scope=`%s'\n",docScope,scope);
- if (scopeName.isEmpty()) return FALSE;
-
- bool explicitGlobalScope=FALSE;
- if (scopeName.at(0)==':' && scopeName.at(1)==':')
- {
- scopeName=scopeName.right(scopeName.length()-2);
- explicitGlobalScope=TRUE;
- }
-
- QCString docScopeName=docScope;
- int scopeOffset=explicitGlobalScope ? 0 : docScopeName.length();
-
- do // for each possible docScope (from largest to and including empty)
- {
- QCString fullName=scopeName.copy();
- if (scopeOffset>0) fullName.prepend(docScopeName.left(scopeOffset)+"::");
-
- if (((cd=getClass(fullName)) || // normal class
- (cd=getClass(fullName+"-p")) || // ObjC protocol
- (cd=getClass(fullName+"-g")) // C# generic
- ) && cd->isLinkable())
- {
- return TRUE; // class link written => quit
- }
- else if ((nd=Doxygen::namespaceSDict->find(fullName)) && nd->isLinkable())
- {
- return TRUE; // namespace link written => quit
- }
- if (scopeOffset==0)
- {
- scopeOffset=-1;
- }
- else if ((scopeOffset=docScopeName.findRev("::",scopeOffset-1))==-1)
- {
- scopeOffset=0;
- }
- } while (scopeOffset>=0);
-
- return FALSE;
-}
-
-static bool isLowerCase(QCString &s)
-{
- uchar *p=(uchar*)s.data();
- if (p==0) return TRUE;
- int c;
- while ((c=*p++)) if (!islower(c)) return FALSE;
- return TRUE;
-}
-
-/*! Returns an object to reference to given its name and context
- * @post return value TRUE implies *resContext!=0 or *resMember!=0
- */
-bool resolveRef(/* in */ const char *scName,
- /* in */ const char *name,
- /* in */ bool inSeeBlock,
- /* out */ Definition **resContext,
- /* out */ MemberDef **resMember,
- bool lookForSpecialization,
- FileDef *currentFile,
- bool checkScope
- )
-{
- QCString tsName = name;
- //bool memberScopeFirst = tsName.find('#')!=-1;
- QCString fullName = substitute(tsName,"#","::");
- fullName = removeRedundantWhiteSpace(substitute(fullName,".","::"));
-
- int bracePos=fullName.findRev('('); // reverse is needed for operator()(...)
- int endNamePos=bracePos!=-1 ? bracePos : fullName.length();
- int scopePos=fullName.findRev("::",endNamePos);
- bool explicitScope = fullName.left(2)=="::" && // ::scope or #scope
- (scopePos>2 || // ::N::A
- tsName.left(2)=="::" || // ::foo in local scope
- scName==0 // #foo in global scope
- );
-
- // default result values
- *resContext=0;
- *resMember=0;
-
- if (bracePos==-1) // simple name
- {
- ClassDef *cd=0;
- NamespaceDef *nd=0;
-
- // the following if() was commented out for releases in the range
- // 1.5.2 to 1.6.1, but has been restored as a result of bug report 594787.
- if (!inSeeBlock && scopePos==-1 && isLowerCase(tsName))
- { // link to lower case only name => do not try to autolink
- return FALSE;
- }
-
- //printf("scName=%s fullName=%s\n",scName,fullName.data());
-
- // check if this is a class or namespace reference
- if (scName!=fullName && getScopeDefs(scName,fullName,cd,nd))
- {
- if (cd) // scope matches that of a class
- {
- *resContext = cd;
- }
- else // scope matches that of a namespace
- {
- ASSERT(nd!=0);
- *resContext = nd;
- }
- return TRUE;
- }
- else if (scName==fullName || (!inSeeBlock && scopePos==-1))
- // nothing to link => output plain text
- {
- //printf("found scName=%s fullName=%s scName==fullName=%d "
- // "inSeeBlock=%d scopePos=%d!\n",
- // scName,fullName.data(),scName==fullName,inSeeBlock,scopePos);
- return FALSE;
- }
- // continue search...
- }
-
- // extract userscope+name
- QCString nameStr=fullName.left(endNamePos);
- if (explicitScope) nameStr=nameStr.mid(2);
-
- // extract arguments
- QCString argsStr;
- if (bracePos!=-1) argsStr=fullName.right(fullName.length()-bracePos);
-
- // strip template specifier
- // TODO: match against the correct partial template instantiation
- int templPos=nameStr.find('<');
- bool tryUnspecializedVersion = FALSE;
- if (templPos!=-1 && nameStr.find("operator")==-1)
- {
- int endTemplPos=nameStr.findRev('>');
- if (endTemplPos!=-1)
- {
- if (!lookForSpecialization)
- {
- nameStr=nameStr.left(templPos)+nameStr.right(nameStr.length()-endTemplPos-1);
- }
- else
- {
- tryUnspecializedVersion = TRUE;
- }
- }
- }
-
- QCString scopeStr=scName;
-
- MemberDef *md = 0;
- ClassDef *cd = 0;
- FileDef *fd = 0;
- NamespaceDef *nd = 0;
- GroupDef *gd = 0;
-
- // check if nameStr is a member or global.
- //printf("getDefs(scope=%s,name=%s,args=%s checkScope=%d)\n",
- // scopeStr.data(),nameStr.data(),argsStr.data(),checkScope);
- if (getDefs(scopeStr,nameStr,argsStr,
- md,cd,fd,nd,gd,
- //scopePos==0 && !memberScopeFirst, // forceEmptyScope
- explicitScope, // replaces prev line due to bug 600829
- currentFile,
- TRUE // checkCV
- )
- )
- {
- //printf("after getDefs checkScope=%d nameStr=%s cd=%p nd=%p\n",checkScope,nameStr.data(),cd,nd);
- if (checkScope && md && md->getOuterScope()==Doxygen::globalScope &&
- (!scopeStr.isEmpty() || nameStr.find("::")>0))
- {
- // we did find a member, but it is a global one while we were explicitly
- // looking for a scoped variable. See bug 616387 for an example why this check is needed.
- // note we do need to support autolinking to "::symbol" hence the >0
- //printf("not global member!\n");
- *resContext=0;
- *resMember=0;
- return FALSE;
- }
- //printf("after getDefs md=%p cd=%p fd=%p nd=%p gd=%p\n",md,cd,fd,nd,gd);
- if (md) { *resMember=md; *resContext=md; }
- else if (cd) *resContext=cd;
- else if (nd) *resContext=nd;
- else if (fd) *resContext=fd;
- else if (gd) *resContext=gd;
- else { *resContext=0; *resMember=0; return FALSE; }
- //printf("member=%s (md=%p) anchor=%s linkable()=%d context=%s\n",
- // md->name().data(),md,md->anchor().data(),md->isLinkable(),(*resContext)->name().data());
- return TRUE;
- }
- else if (inSeeBlock && !nameStr.isEmpty() && (gd=Doxygen::groupSDict->find(nameStr)))
- { // group link
- *resContext=gd;
- return TRUE;
- }
- else if (tsName.find('.')!=-1) // maybe a link to a file
- {
- bool ambig;
- fd=findFileDef(Doxygen::inputNameDict,tsName,ambig);
- if (fd && !ambig)
- {
- *resContext=fd;
- return TRUE;
- }
- }
-
- if (tryUnspecializedVersion)
- {
- return resolveRef(scName,name,inSeeBlock,resContext,resMember,FALSE,0,checkScope);
- }
- //printf("resolveRef: %s not found!\n",name);
-
- return FALSE;
-}
-
-QCString linkToText(SrcLangExt lang,const char *link,bool isFileName)
-{
- //static bool optimizeOutputJava = Config_getBool("OPTIMIZE_OUTPUT_JAVA");
- QCString result=link;
- if (!result.isEmpty())
- {
- // replace # by ::
- result=substitute(result,"#","::");
- // replace . by ::
- if (!isFileName) result=substitute(result,".","::");
- // strip leading :: prefix if present
- if (result.at(0)==':' && result.at(1)==':')
- {
- result=result.right(result.length()-2);
- }
- QCString sep = getLanguageSpecificSeparator(lang);
- if (sep!="::")
- {
- result=substitute(result,"::",sep);
- }
- }
- return result;
-}
-
-#if 0
-/*
- * generate a reference to a class, namespace or member.
- * `scName' is the name of the scope that contains the documentation
- * string that is returned.
- * `name' is the name that we want to link to.
- * `name' may have five formats:
- * 1) "ScopeName"
- * 2) "memberName()" one of the (overloaded) function or define
- * with name memberName.
- * 3) "memberName(...)" a specific (overloaded) function or define
- * with name memberName
- * 4) "::name a global variable or define
- * 4) "\#memberName member variable, global variable or define
- * 5) ("ScopeName::")+"memberName()"
- * 6) ("ScopeName::")+"memberName(...)"
- * 7) ("ScopeName::")+"memberName"
- * instead of :: the \# symbol may also be used.
- */
-
-bool generateRef(OutputDocInterface &od,const char *scName,
- const char *name,bool inSeeBlock,const char *rt)
-{
- //printf("generateRef(scName=%s,name=%s,inSee=%d,rt=%s)\n",scName,name,inSeeBlock,rt);
-
- Definition *compound;
- MemberDef *md;
-
- // create default link text
- QCString linkText = linkToText(rt,FALSE);
-
- if (resolveRef(scName,name,inSeeBlock,&compound,&md))
- {
- if (md && md->isLinkable()) // link to member
- {
- od.writeObjectLink(md->getReference(),
- md->getOutputFileBase(),
- md->anchor(),linkText);
- // generate the page reference (for LaTeX)
- if (!md->isReference())
- {
- writePageRef(od,md->getOutputFileBase(),md->anchor());
- }
- return TRUE;
- }
- else if (compound && compound->isLinkable()) // link to compound
- {
- if (rt==0 && compound->definitionType()==Definition::TypeGroup)
- {
- linkText=((GroupDef *)compound)->groupTitle();
- }
- if (compound && compound->definitionType()==Definition::TypeFile)
- {
- linkText=linkToText(rt,TRUE);
- }
- od.writeObjectLink(compound->getReference(),
- compound->getOutputFileBase(),
- 0,linkText);
- if (!compound->isReference())
- {
- writePageRef(od,compound->getOutputFileBase(),0);
- }
- return TRUE;
- }
- }
- od.docify(linkText);
- return FALSE;
-}
-#endif
-
-bool resolveLink(/* in */ const char *scName,
- /* in */ const char *lr,
- /* in */ bool /*inSeeBlock*/,
- /* out */ Definition **resContext,
- /* out */ QCString &resAnchor
- )
-{
- *resContext=0;
-
- QCString linkRef=lr;
- //printf("ResolveLink linkRef=%s inSee=%d\n",lr,inSeeBlock);
- FileDef *fd;
- GroupDef *gd;
- PageDef *pd;
- ClassDef *cd;
- DirDef *dir;
- NamespaceDef *nd;
- bool ambig;
- if (linkRef.isEmpty()) // no reference name!
- {
- return FALSE;
- }
- else if ((pd=Doxygen::pageSDict->find(linkRef))) // link to a page
- {
- GroupDef *gd = pd->getGroupDef();
- if (gd)
- {
- SectionInfo *si=0;
- if (!pd->name().isEmpty()) si=Doxygen::sectionDict[pd->name()];
- *resContext=gd;
- if (si) resAnchor = si->label;
- }
- else
- {
- *resContext=pd;
- }
- return TRUE;
- }
- else if ((pd=Doxygen::exampleSDict->find(linkRef))) // link to an example
- {
- *resContext=pd;
- return TRUE;
- }
- else if ((gd=Doxygen::groupSDict->find(linkRef))) // link to a group
- {
- *resContext=gd;
- return TRUE;
- }
- else if ((fd=findFileDef(Doxygen::inputNameDict,linkRef,ambig)) // file link
- && fd->isLinkable())
- {
- *resContext=fd;
- return TRUE;
- }
- else if ((cd=getClass(linkRef))) // class link
- {
- *resContext=cd;
- resAnchor=cd->anchor();
- return TRUE;
- }
- else if ((cd=getClass(linkRef+"-p"))) // Obj-C protocol link
- {
- *resContext=cd;
- resAnchor=cd->anchor();
- return TRUE;
- }
- else if ((cd=getClass(linkRef+"-g"))) // C# generic link
- {
- *resContext=cd;
- resAnchor=cd->anchor();
- return TRUE;
- }
- else if ((nd=Doxygen::namespaceSDict->find(linkRef)))
- {
- *resContext=nd;
- return TRUE;
- }
- else if ((dir=Doxygen::directories->find(QFileInfo(linkRef).absFilePath()+"/"))
- && dir->isLinkable()) // TODO: make this location independent like filedefs
- {
- *resContext=dir;
- return TRUE;
- }
- else // probably a member reference
- {
- MemberDef *md;
- bool res = resolveRef(scName,lr,TRUE,resContext,&md);
- if (md) resAnchor=md->anchor();
- return res;
- }
-}
-
-
-//----------------------------------------------------------------------
-// General function that generates the HTML code for a reference to some
-// file, class or member from text `lr' within the context of class `clName'.
-// This link has the text 'lt' (if not 0), otherwise `lr' is used as a
-// basis for the link's text.
-// returns TRUE if a link could be generated.
-
-bool generateLink(OutputDocInterface &od,const char *clName,
- const char *lr,bool inSeeBlock,const char *lt)
-{
- //printf("generateLink(clName=%s,lr=%s,lr=%s)\n",clName,lr,lt);
- Definition *compound;
- //PageDef *pageDef=0;
- QCString anchor,linkText=linkToText(SrcLangExt_Unknown,lt,FALSE);
- //printf("generateLink linkText=%s\n",linkText.data());
- if (resolveLink(clName,lr,inSeeBlock,&compound,anchor))
- {
- if (compound) // link to compound
- {
- if (lt==0 && anchor.isEmpty() && /* compound link */
- compound->definitionType()==Definition::TypeGroup /* is group */
- )
- {
- linkText=((GroupDef *)compound)->groupTitle(); // use group's title as link
- }
- else if (compound->definitionType()==Definition::TypeFile)
- {
- linkText=linkToText(compound->getLanguage(),lt,TRUE);
- }
- od.writeObjectLink(compound->getReference(),
- compound->getOutputFileBase(),anchor,linkText);
- if (!compound->isReference())
- {
- writePageRef(od,compound->getOutputFileBase(),anchor);
- }
- }
- else
- {
- err("%s:%d: Internal error: resolveLink successful but no compound found!",__FILE__,__LINE__);
- }
- return TRUE;
- }
- else // link could not be found
- {
- od.docify(linkText);
- return FALSE;
- }
-}
-
-void generateFileRef(OutputDocInterface &od,const char *name,const char *text)
-{
- //printf("generateFileRef(%s,%s)\n",name,text);
- QCString linkText = text ? text : name;
- //FileInfo *fi;
- FileDef *fd;
- bool ambig;
- if ((fd=findFileDef(Doxygen::inputNameDict,name,ambig)) &&
- fd->isLinkable())
- // link to documented input file
- od.writeObjectLink(fd->getReference(),fd->getOutputFileBase(),0,linkText);
- else
- od.docify(linkText);
-}
-
-//----------------------------------------------------------------------
-
-#if 0
-QCString substituteClassNames(const QCString &s)
-{
- int i=0,l,p;
- QCString result;
- if (s.isEmpty()) return result;
- QRegExp r("[a-z_A-Z][a-z_A-Z0-9]*");
- while ((p=r.match(s,i,&l))!=-1)
- {
- QCString *subst;
- if (p>i) result+=s.mid(i,p-i);
- if ((subst=substituteDict[s.mid(p,l)]))
- {
- result+=*subst;
- }
- else
- {
- result+=s.mid(p,l);
- }
- i=p+l;
- }
- result+=s.mid(i,s.length()-i);
- return result;
-}
-#endif
-
-//----------------------------------------------------------------------
-
-struct FindFileCacheElem
-{
- FindFileCacheElem(FileDef *fd,bool ambig) : fileDef(fd), isAmbig(ambig) {}
- FileDef *fileDef;
- bool isAmbig;
-};
-
-static QCache<FindFileCacheElem> g_findFileDefCache(5000);
-
-FileDef *findFileDef(const FileNameDict *fnDict,const char *n,bool &ambig)
-{
- ambig=FALSE;
- if (n==0) return 0;
-
- QCString key;
- key.sprintf("%p:",fnDict);
- key+=n;
-
- g_findFileDefCache.setAutoDelete(TRUE);
- FindFileCacheElem *cachedResult = g_findFileDefCache.find(key);
- //printf("key=%s cachedResult=%p\n",key.data(),cachedResult);
- if (cachedResult)
- {
- ambig = cachedResult->isAmbig;
- //printf("cached: fileDef=%p\n",cachedResult->fileDef);
- return cachedResult->fileDef;
- }
- else
- {
- cachedResult = new FindFileCacheElem(0,FALSE);
- }
-
- QCString name=convertToQCString(QDir::cleanDirPath(n));
- QCString path;
- int slashPos;
- FileName *fn;
- if (name.isEmpty()) goto exit;
- slashPos=QMAX(name.findRev('/'),name.findRev('\\'));
- if (slashPos!=-1)
- {
- path=name.left(slashPos+1);
- name=name.right(name.length()-slashPos-1);
- //printf("path=%s name=%s\n",path.data(),name.data());
- }
- if (name.isEmpty()) goto exit;
- if ((fn=(*fnDict)[name]))
- {
- //printf("fn->count()=%d\n",fn->count());
- if (fn->count()==1)
- {
- FileDef *fd = fn->getFirst();
-#if defined(_WIN32) || defined(__MACOSX__) // Windows or MacOSX
- bool isSamePath = fd->getPath().right(path.length()).lower()==path.lower();
-#else // Unix
- bool isSamePath = fd->getPath().right(path.length())==path;
-#endif
- if (path.isEmpty() || isSamePath)
- {
- cachedResult->fileDef = fd;
- g_findFileDefCache.insert(key,cachedResult);
- //printf("=1 ===> add to cache %p\n",fd);
- return fd;
- }
- }
- else // file name alone is ambiguous
- {
- int count=0;
- FileNameIterator fni(*fn);
- FileDef *fd;
- FileDef *lastMatch=0;
- QCString pathStripped = stripFromIncludePath(path);
- for (fni.toFirst();(fd=fni.current());++fni)
- {
- QCString fdStripPath = stripFromIncludePath(fd->getPath());
- if (path.isEmpty() || fdStripPath.right(pathStripped.length())==pathStripped)
- {
- count++;
- lastMatch=fd;
- }
- }
- //printf(">1 ===> add to cache %p\n",fd);
-
- ambig=(count>1);
- cachedResult->isAmbig = ambig;
- cachedResult->fileDef = lastMatch;
- g_findFileDefCache.insert(key,cachedResult);
- return lastMatch;
- }
- }
- else
- {
- //printf("not found!\n");
- }
-exit:
- //printf("0 ===> add to cache %p: %s\n",cachedResult,n);
- g_findFileDefCache.insert(key,cachedResult);
- //delete cachedResult;
- return 0;
-}
-
-//----------------------------------------------------------------------
-
-QCString showFileDefMatches(const FileNameDict *fnDict,const char *n)
-{
- QCString result;
- QCString name=n;
- QCString path;
- int slashPos=QMAX(name.findRev('/'),name.findRev('\\'));
- if (slashPos!=-1)
- {
- path=name.left(slashPos+1);
- name=name.right(name.length()-slashPos-1);
- }
- FileName *fn;
- if ((fn=(*fnDict)[name]))
- {
- FileNameIterator fni(*fn);
- FileDef *fd;
- for (fni.toFirst();(fd=fni.current());++fni)
- {
- if (path.isEmpty() || fd->getPath().right(path.length())==path)
- {
- result+=" "+fd->absFilePath()+"\n";
- }
- }
- }
- return result;
-}
-
-//----------------------------------------------------------------------
-
-QCString substituteKeywords(const QCString &s,const char *title,
- const char *projName,const char *projNum,const char *projBrief)
-{
- QCString result = s;
- if (title) result = substitute(result,"$title",title);
- result = substitute(result,"$datetime",dateToString(TRUE));
- result = substitute(result,"$date",dateToString(FALSE));
- result = substitute(result,"$year",yearToString());
- result = substitute(result,"$doxygenversion",versionString);
- result = substitute(result,"$projectname",projName);
- result = substitute(result,"$projectnumber",projNum);
- result = substitute(result,"$projectbrief",projBrief);
- result = substitute(result,"$projectlogo",stripPath(Config_getString("PROJECT_LOGO")));
- return result;
-}
-
-//----------------------------------------------------------------------
-
-/*! Returns the character index within \a name of the first prefix
- * in Config_getList("IGNORE_PREFIX") that matches \a name at the left hand side,
- * or zero if no match was found
- */
-int getPrefixIndex(const QCString &name)
-{
- if (name.isEmpty()) return 0;
- static QStrList &sl = Config_getList("IGNORE_PREFIX");
- char *s = sl.first();
- while (s)
- {
- const char *ps=s;
- const char *pd=name.data();
- int i=0;
- while (*ps!=0 && *pd!=0 && *ps==*pd) ps++,pd++,i++;
- if (*ps==0 && *pd!=0)
- {
- return i;
- }
- s = sl.next();
- }
- return 0;
-}
-
-//----------------------------------------------------------------------------
-
-static void initBaseClassHierarchy(BaseClassList *bcl)
-{
- if (bcl==0) return;
- BaseClassListIterator bcli(*bcl);
- for ( ; bcli.current(); ++bcli)
- {
- ClassDef *cd=bcli.current()->classDef;
- if (cd->baseClasses()==0) // no base classes => new root
- {
- initBaseClassHierarchy(cd->baseClasses());
- }
- cd->visited=FALSE;
- }
-}
-
-//----------------------------------------------------------------------------
-
-void initClassHierarchy(ClassSDict *cl)
-{
- ClassSDict::Iterator cli(*cl);
- ClassDef *cd;
- for ( ; (cd=cli.current()); ++cli)
- {
- cd->visited=FALSE;
- initBaseClassHierarchy(cd->baseClasses());
- }
-}
-
-//----------------------------------------------------------------------------
-
-bool hasVisibleRoot(BaseClassList *bcl)
-{
- if (bcl)
- {
- BaseClassListIterator bcli(*bcl);
- for ( ; bcli.current(); ++bcli)
- {
- ClassDef *cd=bcli.current()->classDef;
- if (cd->isVisibleInHierarchy()) return TRUE;
- hasVisibleRoot(cd->baseClasses());
- }
- }
- return FALSE;
-}
-
-//----------------------------------------------------------------------
-
-// note that this function is not reentrant due to the use of static growBuf!
-QCString escapeCharsInString(const char *name,bool allowDots,bool allowUnderscore)
-{
- static bool caseSenseNames = Config_getBool("CASE_SENSE_NAMES");
- static GrowBuf growBuf;
- growBuf.clear();
- char c;
- const char *p=name;
- while ((c=*p++)!=0)
- {
- switch(c)
- {
- case '_': if (allowUnderscore) growBuf.addChar('_'); else growBuf.addStr("__"); break;
- case '-': growBuf.addChar('-'); break;
- case ':': growBuf.addStr("_1"); break;
- case '/': growBuf.addStr("_2"); break;
- case '<': growBuf.addStr("_3"); break;
- case '>': growBuf.addStr("_4"); break;
- case '*': growBuf.addStr("_5"); break;
- case '&': growBuf.addStr("_6"); break;
- case '|': growBuf.addStr("_7"); break;
- case '.': if (allowDots) growBuf.addChar('.'); else growBuf.addStr("_8"); break;
- case '!': growBuf.addStr("_9"); break;
- case ',': growBuf.addStr("_00"); break;
- case ' ': growBuf.addStr("_01"); break;
- case '{': growBuf.addStr("_02"); break;
- case '}': growBuf.addStr("_03"); break;
- case '?': growBuf.addStr("_04"); break;
- case '^': growBuf.addStr("_05"); break;
- case '%': growBuf.addStr("_06"); break;
- case '(': growBuf.addStr("_07"); break;
- case ')': growBuf.addStr("_08"); break;
- case '+': growBuf.addStr("_09"); break;
- case '=': growBuf.addStr("_0A"); break;
- case '$': growBuf.addStr("_0B"); break;
- default:
- if (c<0)
- {
- static char map[] = "0123456789ABCDEF";
- char ids[5];
- unsigned char id = (unsigned char)c;
- ids[0]='_';
- ids[1]='x';
- ids[2]=map[id>>4];
- ids[3]=map[id&0xF];
- ids[4]=0;
- growBuf.addStr(ids);
- }
- else if (caseSenseNames || !isupper(c))
- {
- growBuf.addChar(c);
- }
- else
- {
- growBuf.addChar('_');
- growBuf.addChar(tolower(c));
- }
- break;
- }
- }
- growBuf.addChar(0);
- return growBuf.get();
-}
-
-/*! This function determines the file name on disk of an item
- * given its name, which could be a class name with template
- * arguments, so special characters need to be escaped.
- */
-QCString convertNameToFile(const char *name,bool allowDots,bool allowUnderscore)
-{
- static bool shortNames = Config_getBool("SHORT_NAMES");
- static bool createSubdirs = Config_getBool("CREATE_SUBDIRS");
- QCString result;
- if (shortNames) // use short names only
- {
- static QDict<int> usedNames(10007);
- usedNames.setAutoDelete(TRUE);
- static int count=1;
-
- int *value=usedNames.find(name);
- int num;
- if (value==0)
- {
- usedNames.insert(name,new int(count));
- num = count++;
- }
- else
- {
- num = *value;
- }
- result.sprintf("a%05d",num);
- }
- else // long names
- {
- result=escapeCharsInString(name,allowDots,allowUnderscore);
- int resultLen = result.length();
- if (resultLen>=128) // prevent names that cannot be created!
- {
- // third algorithm based on MD5 hash
- uchar md5_sig[16];
- QCString sigStr(33);
- MD5Buffer((const unsigned char *)result.data(),resultLen,md5_sig);
- MD5SigToString(md5_sig,sigStr.data(),33);
- result=result.left(128-32)+sigStr;
- }
- }
- if (createSubdirs)
- {
- int l1Dir=0,l2Dir=0;
-
-#if MAP_ALGO==ALGO_COUNT
- // old algorithm, has the problem that after regeneration the
- // output can be located in a different dir.
- if (Doxygen::htmlDirMap==0)
- {
- Doxygen::htmlDirMap=new QDict<int>(100003);
- Doxygen::htmlDirMap->setAutoDelete(TRUE);
- }
- static int curDirNum=0;
- int *dirNum = Doxygen::htmlDirMap->find(result);
- if (dirNum==0) // new name
- {
- Doxygen::htmlDirMap->insert(result,new int(curDirNum));
- l1Dir = (curDirNum)&0xf; // bits 0-3
- l2Dir = (curDirNum>>4)&0xff; // bits 4-11
- curDirNum++;
- }
- else // existing name
- {
- l1Dir = (*dirNum)&0xf; // bits 0-3
- l2Dir = ((*dirNum)>>4)&0xff; // bits 4-11
- }
-#elif MAP_ALGO==ALGO_CRC16
- // second algorithm based on CRC-16 checksum
- int dirNum = qChecksum(result,result.length());
- l1Dir = dirNum&0xf;
- l2Dir = (dirNum>>4)&0xff;
-#elif MAP_ALGO==ALGO_MD5
- // third algorithm based on MD5 hash
- uchar md5_sig[16];
- MD5Buffer((const unsigned char *)result.data(),result.length(),md5_sig);
- l1Dir = md5_sig[14]&0xf;
- l2Dir = md5_sig[15];
-#endif
- result.prepend(QCString().sprintf("d%x/d%02x/",l1Dir,l2Dir));
- }
- //printf("*** convertNameToFile(%s)->%s\n",name,result.data());
- return result;
-}
-
-QCString relativePathToRoot(const char *name)
-{
- QCString result;
- if (Config_getBool("CREATE_SUBDIRS"))
- {
- if (name==0)
- {
- return REL_PATH_TO_ROOT;
- }
- else
- {
- QCString n = name;
- int i = n.findRev('/');
- if (i!=-1)
- {
- result=REL_PATH_TO_ROOT;
- }
- }
- }
- return result;
-}
-
-void createSubDirs(QDir &d)
-{
- if (Config_getBool("CREATE_SUBDIRS"))
- {
- // create 4096 subdirectories
- int l1,l2;
- for (l1=0;l1<16;l1++)
- {
- d.mkdir(QString().sprintf("d%x",l1));
- for (l2=0;l2<256;l2++)
- {
- d.mkdir(QString().sprintf("d%x/d%02x",l1,l2));
- }
- }
- }
-}
-
-/*! Input is a scopeName, output is the scopename split into a
- * namespace part (as large as possible) and a classname part.
- */
-void extractNamespaceName(const QCString &scopeName,
- QCString &className,QCString &namespaceName,
- bool allowEmptyClass)
-{
- int i,p;
- QCString clName=scopeName;
- NamespaceDef *nd = 0;
- if (!clName.isEmpty() && (nd=getResolvedNamespace(clName)) && getClass(clName)==0)
- { // the whole name is a namespace (and not a class)
- namespaceName=nd->name().copy();
- className.resize(0);
- goto done;
- }
- p=clName.length()-2;
- while (p>=0 && (i=clName.findRev("::",p))!=-1)
- // see if the first part is a namespace (and not a class)
- {
- //printf("Trying %s\n",clName.left(i).data());
- if (i>0 && (nd=getResolvedNamespace(clName.left(i))) && getClass(clName.left(i))==0)
- {
- //printf("found!\n");
- namespaceName=nd->name().copy();
- className=clName.right(clName.length()-i-2);
- goto done;
- }
- p=i-2; // try a smaller piece of the scope
- }
- //printf("not found!\n");
-
- // not found, so we just have to guess.
- className=scopeName.copy();
- namespaceName.resize(0);
-
-done:
- if (className.isEmpty() && !namespaceName.isEmpty() && !allowEmptyClass)
- {
- // class and namespace with the same name, correct to return the class.
- className=namespaceName.copy();
- namespaceName.resize(0);
- }
- //printf("extractNamespace `%s' => `%s|%s'\n",scopeName.data(),
- // className.data(),namespaceName.data());
- return;
-}
-
-QCString insertTemplateSpecifierInScope(const QCString &scope,const QCString &templ)
-{
- QCString result=scope.copy();
- if (!templ.isEmpty() && scope.find('<')==-1)
- {
- int si,pi=0;
- ClassDef *cd=0;
- while (
- (si=scope.find("::",pi))!=-1 && !getClass(scope.left(si)+templ) &&
- ((cd=getClass(scope.left(si)))==0 || cd->templateArguments()==0)
- )
- {
- //printf("Tried `%s'\n",(scope.left(si)+templ).data());
- pi=si+2;
- }
- if (si==-1) // not nested => append template specifier
- {
- result+=templ;
- }
- else // nested => insert template specifier before after first class name
- {
- result=scope.left(si) + templ + scope.right(scope.length()-si);
- }
- }
- //printf("insertTemplateSpecifierInScope(`%s',`%s')=%s\n",
- // scope.data(),templ.data(),result.data());
- return result;
-}
-
-#if 0 // original version
-/*! Strips the scope from a name. Examples: A::B will return A
- * and A<T>::B<N::C<D> > will return A<T>.
- */
-QCString stripScope(const char *name)
-{
- QCString result = name;
- int l=result.length();
- int p=l-1;
- bool done;
- int count;
-
- while (p>=0)
- {
- char c=result.at(p);
- switch (c)
- {
- case ':':
- //printf("stripScope(%s)=%s\n",name,result.right(l-p-1).data());
- return result.right(l-p-1);
- case '>':
- count=1;
- done=FALSE;
- //printf("pos < = %d\n",p);
- p--;
- while (p>=0 && !done)
- {
- c=result.at(p--);
- switch (c)
- {
- case '>': count++; break;
- case '<': count--; if (count<=0) done=TRUE; break;
- default:
- //printf("c=%c count=%d\n",c,count);
- break;
- }
- }
- //printf("pos > = %d\n",p+1);
- break;
- default:
- p--;
- }
- }
- //printf("stripScope(%s)=%s\n",name,name);
- return name;
-}
-#endif
-
-// new version by Davide Cesari which also works for Fortran
-QCString stripScope(const char *name)
-{
- QCString result = name;
- int l=result.length();
- int p;
- bool done = FALSE;
- bool skipBracket=FALSE; // if brackets do not match properly, ignore them altogether
- int count=0;
-
- do
- {
- p=l-1; // start at the end of the string
- while (p>=0 && count>=0)
- {
- char c=result.at(p);
- switch (c)
- {
- case ':':
- // only exit in the case of ::
- //printf("stripScope(%s)=%s\n",name,result.right(l-p-1).data());
- if (p>0 && result.at(p-1)==':') return result.right(l-p-1);
- p--;
- break;
- case '>':
- if (skipBracket) // we don't care about brackets
- {
- p--;
- }
- else // count open/close brackets
- {
- if (p>0 && result.at(p-1)=='>') // skip >> operator
- {
- p-=2;
- break;
- }
- count=1;
- //printf("pos < = %d\n",p);
- p--;
- bool foundMatch=false;
- while (p>=0 && !foundMatch)
- {
- c=result.at(p--);
- switch (c)
- {
- case '>':
- count++;
- break;
- case '<':
- if (p>0)
- {
- if (result.at(p-1) == '<') // skip << operator
- {
- p--;
- break;
- }
- }
- count--;
- foundMatch = count==0;
- break;
- default:
- //printf("c=%c count=%d\n",c,count);
- break;
- }
- }
- }
- //printf("pos > = %d\n",p+1);
- break;
- default:
- p--;
- }
- }
- done = count==0 || skipBracket; // reparse if brackets do not match
- skipBracket=TRUE;
- }
- while (!done); // if < > unbalanced repeat ignoring them
- //printf("stripScope(%s)=%s\n",name,name);
- return name;
-}
-
-
-/*! Converts a string to an XML-encoded string */
-QCString convertToXML(const char *s)
-{
- static GrowBuf growBuf;
- growBuf.clear();
- if (s==0) return "";
- const char *p=s;
- char c;
- while ((c=*p++))
- {
- switch (c)
- {
- case '<': growBuf.addStr("&lt;"); break;
- case '>': growBuf.addStr("&gt;"); break;
- case '&': growBuf.addStr("&amp;"); break;
- case '\'': growBuf.addStr("&apos;"); break;
- case '"': growBuf.addStr("&quot;"); break;
- default: growBuf.addChar(c); break;
- }
- }
- growBuf.addChar(0);
- return growBuf.get();
-}
-
-/*! Converts a string to a HTML-encoded string */
-QCString convertToHtml(const char *s,bool keepEntities)
-{
- static GrowBuf growBuf;
- growBuf.clear();
- if (s==0) return "";
- const char *p=s;
- char c;
- while ((c=*p++))
- {
- switch (c)
- {
- case '<': growBuf.addStr("&lt;"); break;
- case '>': growBuf.addStr("&gt;"); break;
- case '&': if (keepEntities)
- {
- const char *e=p;
- char ce;
- while ((ce=*e++))
- {
- if (ce==';' || (!(isId(ce) || ce=='#'))) break;
- }
- if (ce==';') // found end of an entity
- {
- // copy entry verbatim
- growBuf.addChar(c);
- while (p<e) growBuf.addChar(*p++);
- }
- else
- {
- growBuf.addStr("&amp;");
- }
- }
- else
- {
- growBuf.addStr("&amp;");
- }
- break;
- case '\'': growBuf.addStr("&#39;"); break;
- case '"': growBuf.addStr("&quot;"); break;
- default: growBuf.addChar(c); break;
- }
- }
- growBuf.addChar(0);
- return growBuf.get();
-}
-
-QCString convertToJSString(const char *s)
-{
- static GrowBuf growBuf;
- growBuf.clear();
- if (s==0) return "";
- const char *p=s;
- char c;
- while ((c=*p++))
- {
- switch (c)
- {
- case '"': growBuf.addStr("\\\""); break;
- case '\\': growBuf.addStr("\\\\"); break;
- default: growBuf.addChar(c); break;
- }
- }
- growBuf.addChar(0);
- return growBuf.get();
-}
-
-
-QCString convertCharEntitiesToUTF8(const QCString &s)
-{
- static QDict<char> entityMap(67);
- static bool init=TRUE;
- QCString result;
- static QRegExp entityPat("&[a-zA-Z]+;");
-
- if (init)
- {
- entityMap.insert("copy", "\xC2\xA9");
- entityMap.insert("tm", "\xE2\x84\xA2");
- entityMap.insert("trade", "\xE2\x84\xA2");
- entityMap.insert("reg", "\xC2\xAE");
- entityMap.insert("lsquo", "\xE2\x80\x98");
- entityMap.insert("rsquo", "\xE2\x80\x99");
- entityMap.insert("ldquo", "\xE2\x80\x9C");
- entityMap.insert("rdquo", "\xE2\x80\x9D");
- entityMap.insert("ndash", "\xE2\x80\x93");
- entityMap.insert("mdash", "\xE2\x80\x94");
- entityMap.insert("Auml", "\xC3\x84");
- entityMap.insert("Euml", "\xC3\x8B");
- entityMap.insert("Iuml", "\xC3\x8F");
- entityMap.insert("Ouml", "\xC3\x96");
- entityMap.insert("Uuml", "\xC3\x9C");
- entityMap.insert("Yuml", "\xC5\xB8");
- entityMap.insert("auml", "\xC3\xA4");
- entityMap.insert("euml", "\xC3\xAB");
- entityMap.insert("iuml", "\xC3\xAF");
- entityMap.insert("ouml", "\xC3\xB6");
- entityMap.insert("uuml", "\xC3\xBC");
- entityMap.insert("yuml", "\xC3\xBF");
- entityMap.insert("Aacute","\xC3\x81");
- entityMap.insert("Eacute","\xC3\x89");
- entityMap.insert("Iacute","\xC3\x8D");
- entityMap.insert("Oacute","\xC3\x93");
- entityMap.insert("Uacute","\xC3\x9A");
- entityMap.insert("aacute","\xC3\xA1");
- entityMap.insert("eacute","\xC3\xA9");
- entityMap.insert("iacute","\xC3\xAD");
- entityMap.insert("oacute","\xC3\xB3");
- entityMap.insert("uacute","\xC3\xBA");
- entityMap.insert("Agrave","\xC3\x80");
- entityMap.insert("Egrave","\xC3\x88");
- entityMap.insert("Igrave","\xC3\x8C");
- entityMap.insert("Ograve","\xC3\x92");
- entityMap.insert("Ugrave","\xC3\x99");
- entityMap.insert("agrave","\xC3\xA0");
- entityMap.insert("egrave","\xC3\xA8");
- entityMap.insert("igrave","\xC3\xAC");
- entityMap.insert("ograve","\xC3\xB2");
- entityMap.insert("ugrave","\xC3\xB9");
- entityMap.insert("Acirc", "\xC3\x82");
- entityMap.insert("Ecirc", "\xC3\x8A");
- entityMap.insert("Icirc", "\xC3\x8E");
- entityMap.insert("Ocirc", "\xC3\x94");
- entityMap.insert("Ucirc", "\xC3\x9B");
- entityMap.insert("acirc", "\xC3\xA2");
- entityMap.insert("ecirc", "\xC3\xAA");
- entityMap.insert("icirc", "\xC3\xAE");
- entityMap.insert("ocirc", "\xC3\xB4");
- entityMap.insert("ucirc", "\xC3\xBB");
- entityMap.insert("Atilde","\xC3\x83");
- entityMap.insert("Ntilde","\xC3\x91");
- entityMap.insert("Otilde","\xC3\x95");
- entityMap.insert("atilde","\xC3\xA3");
- entityMap.insert("ntilde","\xC3\xB1");
- entityMap.insert("otilde","\xC3\xB5");
- entityMap.insert("szlig", "\xC3\x9F");
- entityMap.insert("Ccedil","\xC3\x87");
- entityMap.insert("ccedil","\xC3\xA7");
- entityMap.insert("Aring", "\xC3\x85");
- entityMap.insert("aring", "\xC3\xA5");
- entityMap.insert("nbsp", "\xC2\xA0");
- init=FALSE;
- }
-
- if (s==0) return result;
- int p,i=0,l;
- while ((p=entityPat.match(s,i,&l))!=-1)
- {
- if (p>i) result+=s.mid(i,p-i);
- QCString entity = s.mid(p+1,l-2);
- char *code = entityMap.find(entity);
- if (code)
- {
- result+=code;
- }
- else
- {
- result+=s.mid(p,l);
- }
- i=p+l;
- }
- result+=s.mid(i,s.length()-i);
- return result;
-}
-
-/*! Returns the standard string that is generated when the \\overload
- * command is used.
- */
-QCString getOverloadDocs()
-{
- return theTranslator->trOverloadText();
- //"This is an overloaded member function, "
- // "provided for convenience. It differs from the above "
- // "function only in what argument(s) it accepts.";
-}
-
-void addMembersToMemberGroup(MemberList *ml,
- MemberGroupSDict **ppMemberGroupSDict,
- Definition *context)
-{
- ASSERT(context!=0);
- //printf("addMemberToMemberGroup()\n");
- if (ml==0) return;
- MemberListIterator mli(*ml);
- MemberDef *md;
- uint index;
- for (index=0;(md=mli.current());)
- {
- if (md->isEnumerate()) // insert enum value of this enum into groups
- {
- LockingPtr<MemberList> fmdl=md->enumFieldList();
- if (fmdl!=0)
- {
- MemberDef *fmd=fmdl->first();
- while (fmd)
- {
- int groupId=fmd->getMemberGroupId();
- if (groupId!=-1)
- {
- MemberGroupInfo *info = Doxygen::memGrpInfoDict[groupId];
- //QCString *pGrpHeader = Doxygen::memberHeaderDict[groupId];
- //QCString *pDocs = Doxygen::memberDocDict[groupId];
- if (info)
- {
- if (*ppMemberGroupSDict==0)
- {
- *ppMemberGroupSDict = new MemberGroupSDict;
- (*ppMemberGroupSDict)->setAutoDelete(TRUE);
- }
- MemberGroup *mg = (*ppMemberGroupSDict)->find(groupId);
- if (mg==0)
- {
- mg = new MemberGroup(
- context,
- groupId,
- info->header,
- info->doc,
- info->docFile
- );
- (*ppMemberGroupSDict)->append(groupId,mg);
- }
- mg->insertMember(fmd); // insert in member group
- fmd->setMemberGroup(mg);
- }
- }
- fmd=fmdl->next();
- }
- }
- }
- int groupId=md->getMemberGroupId();
- if (groupId!=-1)
- {
- MemberGroupInfo *info = Doxygen::memGrpInfoDict[groupId];
- //QCString *pGrpHeader = Doxygen::memberHeaderDict[groupId];
- //QCString *pDocs = Doxygen::memberDocDict[groupId];
- if (info)
- {
- if (*ppMemberGroupSDict==0)
- {
- *ppMemberGroupSDict = new MemberGroupSDict;
- (*ppMemberGroupSDict)->setAutoDelete(TRUE);
- }
- MemberGroup *mg = (*ppMemberGroupSDict)->find(groupId);
- if (mg==0)
- {
- mg = new MemberGroup(
- context,
- groupId,
- info->header,
- info->doc,
- info->docFile
- );
- (*ppMemberGroupSDict)->append(groupId,mg);
- }
- md = ml->take(index); // remove from member list
- mg->insertMember(md); // insert in member group
- mg->setRefItems(info->m_sli);
- md->setMemberGroup(mg);
- continue;
- }
- }
- ++mli;++index;
- }
-}
-
-/*! Extracts a (sub-)string from \a type starting at \a pos that
- * could form a class. The index of the match is returned and the found
- * class \a name and a template argument list \a templSpec. If -1 is returned
- * there are no more matches.
- */
-int extractClassNameFromType(const QCString &type,int &pos,QCString &name,QCString &templSpec,SrcLangExt lang)
-{
- static const QRegExp re_norm("[a-z_A-Z\\x80-\\xFF][a-z_A-Z0-9:\\x80-\\xFF]*");
- static const QRegExp re_ftn("[a-z_A-Z\\x80-\\xFF][()=_a-z_A-Z0-9:\\x80-\\xFF]*");
- QRegExp re;
-
- if (lang == SrcLangExt_Fortran)
- {
- if (type.at(pos)==',') return -1;
- if (type.left(4).lower()=="type")
- {
- re = re_norm;
- }
- else
- {
- re = re_ftn;
- }
- }
- else
- {
- re = re_norm;
- }
-
- name.resize(0);
- templSpec.resize(0);
- int i,l;
- int typeLen=type.length();
- if (typeLen>0)
- {
- if ((i=re.match(type,pos,&l))!=-1) // for each class name in the type
- {
- int ts=i+l;
- int te=ts;
- int tl=0;
- while (type.at(ts)==' ' && ts<typeLen) ts++,tl++; // skip any whitespace
- if (type.at(ts)=='<') // assume template instance
- {
- // locate end of template
- te=ts+1;
- int brCount=1;
- while (te<typeLen && brCount!=0)
- {
- if (type.at(te)=='<')
- {
- if (te<typeLen-1 && type.at(te+1)=='<') te++; else brCount++;
- }
- if (type.at(te)=='>')
- {
- if (te<typeLen-1 && type.at(te+1)=='>') te++; else brCount--;
- }
- te++;
- }
- }
- name = type.mid(i,l);
- if (te>ts)
- {
- templSpec = type.mid(ts,te-ts),tl+=te-ts;
- pos=i+l+tl;
- }
- else // no template part
- {
- pos=i+l;
- }
- //printf("extractClassNameFromType([in] type=%s,[out] pos=%d,[out] name=%s,[out] templ=%s)=TRUE\n",
- // type.data(),pos,name.data(),templSpec.data());
- return i;
- }
- }
- pos = typeLen;
- //printf("extractClassNameFromType([in] type=%s,[out] pos=%d,[out] name=%s,[out] templ=%s)=FALSE\n",
- // type.data(),pos,name.data(),templSpec.data());
- return -1;
-}
-
-/*! Substitutes any occurrence of a formal argument from argument list
- * \a formalArgs in \a name by the corresponding actual argument in
- * argument list \a actualArgs. The result after substitution
- * is returned as a string. The argument \a name is used to
- * prevent recursive substitution.
- */
-QCString substituteTemplateArgumentsInString(
- const QCString &name,
- ArgumentList *formalArgs,
- ArgumentList *actualArgs)
-{
- //printf("substituteTemplateArgumentsInString(name=%s formal=%s actualArg=%s)\n",
- // name.data(),argListToString(formalArgs).data(),argListToString(actualArgs).data());
- if (formalArgs==0) return name;
- QCString result;
- static QRegExp re("[a-z_A-Z\\x80-\\xFF][a-z_A-Z0-9\\x80-\\xFF]*");
- int p=0,l,i;
- // for each identifier in the base class name (e.g. B<T> -> B and T)
- while ((i=re.match(name,p,&l))!=-1)
- {
- result += name.mid(p,i-p);
- QCString n = name.mid(i,l);
- ArgumentListIterator formAli(*formalArgs);
- Argument *formArg;
- Argument *actArg=actualArgs->first();
-
- // if n is a template argument, then we substitute it
- // for its template instance argument.
- bool found=FALSE;
- for (formAli.toFirst();
- (formArg=formAli.current()) && !found;
- ++formAli,actArg=actualArgs->next()
- )
- {
- if (formArg->type.left(6)=="class " && formArg->name.isEmpty())
- {
- formArg->name = formArg->type.mid(6);
- formArg->type = "class";
- }
- if (formArg->type.left(9)=="typename " && formArg->name.isEmpty())
- {
- formArg->name = formArg->type.mid(9);
- formArg->type = "typename";
- }
- if (formArg->type=="class" || formArg->type=="typename" || formArg->type.left(8)=="template")
- {
- //printf("n=%s formArg->type='%s' formArg->name='%s' formArg->defval='%s'\n",
- // n.data(),formArg->type.data(),formArg->name.data(),formArg->defval.data());
- //printf(">> formArg->name='%s' actArg->type='%s' actArg->name='%s'\n",
- // formArg->name.data(),actArg->type.data(),actArg->name.data()
- // );
- if (formArg->name==n && actArg && !actArg->type.isEmpty()) // base class is a template argument
- {
- // replace formal argument with the actual argument of the instance
- if (!leftScopeMatch(actArg->type,n))
- // the scope guard is to prevent recursive lockup for
- // template<class A> class C : public<A::T>,
- // where A::T would become A::T::T here,
- // since n==A and actArg->type==A::T
- // see bug595833 for an example
- {
- if (actArg->name.isEmpty())
- {
- result += actArg->type+" ";
- found=TRUE;
- }
- else
- // for case where the actual arg is something like "unsigned int"
- // the "int" part is in actArg->name.
- {
- result += actArg->type+" "+actArg->name+" ";
- found=TRUE;
- }
- }
- }
- else if (formArg->name==n &&
- actArg==0 &&
- !formArg->defval.isEmpty() &&
- formArg->defval!=name /* to prevent recursion */
- )
- {
- result += substituteTemplateArgumentsInString(formArg->defval,formalArgs,actualArgs)+" ";
- found=TRUE;
- }
- }
- else if (formArg->name==n &&
- actArg==0 &&
- !formArg->defval.isEmpty() &&
- formArg->defval!=name /* to prevent recursion */
- )
- {
- result += substituteTemplateArgumentsInString(formArg->defval,formalArgs,actualArgs)+" ";
- found=TRUE;
- }
- }
- if (!found) result += n;
- p=i+l;
- }
- result+=name.right(name.length()-p);
- //printf(" Inheritance relation %s -> %s\n",
- // name.data(),result.data());
- return result.stripWhiteSpace();
-}
-
-
-/*! Makes a deep copy of argument list \a src. Will allocate memory, that
- * is owned by the caller.
- */
-ArgumentList *copyArgumentList(const ArgumentList *src)
-{
- ASSERT(src!=0);
- ArgumentList *dst = new ArgumentList;
- dst->setAutoDelete(TRUE);
- ArgumentListIterator tali(*src);
- Argument *a;
- for (;(a=tali.current());++tali)
- {
- dst->append(new Argument(*a));
- }
- dst->constSpecifier = src->constSpecifier;
- dst->volatileSpecifier = src->volatileSpecifier;
- dst->pureSpecifier = src->pureSpecifier;
- return dst;
-}
-
-/*! Makes a deep copy of the list of argument lists \a srcLists.
- * Will allocate memory, that is owned by the caller.
- */
-QList<ArgumentList> *copyArgumentLists(const QList<ArgumentList> *srcLists)
-{
- ASSERT(srcLists!=0);
- QList<ArgumentList> *dstLists = new QList<ArgumentList>;
- dstLists->setAutoDelete(TRUE);
- QListIterator<ArgumentList> sli(*srcLists);
- ArgumentList *sl;
- for (;(sl=sli.current());++sli)
- {
- dstLists->append(copyArgumentList(sl));
- }
- return dstLists;
-}
-
-/*! Strips template specifiers from scope \a fullName, except those
- * that make up specialized classes. The switch \a parentOnly
- * determines whether or not a template "at the end" of a scope
- * should be considered, e.g. with \a parentOnly is \c TRUE, A<T>::B<S> will
- * try to strip \<T\> and not \<S\>, while \a parentOnly is \c FALSE will
- * strip both unless A<T> or B<S> are specialized template classes.
- */
-QCString stripTemplateSpecifiersFromScope(const QCString &fullName,
- bool parentOnly,
- QCString *pLastScopeStripped)
-{
- QCString result;
- int p=0;
- int l=fullName.length();
- int i=fullName.find('<');
- while (i!=-1)
- {
- //printf("1:result+=%s\n",fullName.mid(p,i-p).data());
- int e=i+1;
- bool done=FALSE;
- int count=1;
- while (e<l && !done)
- {
- char c=fullName.at(e++);
- if (c=='<')
- {
- count++;
- }
- else if (c=='>')
- {
- count--;
- done = count==0;
- }
- }
- int si= fullName.find("::",e);
-
- if (parentOnly && si==-1) break;
- // we only do the parent scope, so we stop here if needed
-
- result+=fullName.mid(p,i-p);
- //printf(" trying %s\n",(result+fullName.mid(i,e-i)).data());
- if (getClass(result+fullName.mid(i,e-i))!=0)
- {
- result+=fullName.mid(i,e-i);
- //printf(" 2:result+=%s\n",fullName.mid(i,e-i-1).data());
- }
- else if (pLastScopeStripped)
- {
- //printf(" last stripped scope '%s'\n",fullName.mid(i,e-i).data());
- *pLastScopeStripped=fullName.mid(i,e-i);
- }
- p=e;
- i=fullName.find('<',p);
- }
- result+=fullName.right(l-p);
- //printf("3:result+=%s\n",fullName.right(l-p).data());
- return result;
-}
-
-/*! Merges two scope parts together. The parts may (partially) overlap.
- * Example1: \c A::B and \c B::C will result in \c A::B::C <br>
- * Example2: \c A and \c B will be \c A::B <br>
- * Example3: \c A::B and B will be \c A::B
- *
- * @param leftScope the left hand part of the scope.
- * @param rightScope the right hand part of the scope.
- * @returns the merged scope.
- */
-QCString mergeScopes(const QCString &leftScope,const QCString &rightScope)
-{
- // case leftScope=="A" rightScope=="A::B" => result = "A::B"
- if (leftScopeMatch(rightScope,leftScope)) return rightScope;
- QCString result;
- int i=0,p=leftScope.length();
-
- // case leftScope=="A::B" rightScope=="B::C" => result = "A::B::C"
- // case leftScope=="A::B" rightScope=="B" => result = "A::B"
- bool found=FALSE;
- while ((i=leftScope.findRev("::",p))!=-1)
- {
- if (leftScopeMatch(rightScope,leftScope.right(leftScope.length()-i-2)))
- {
- result = leftScope.left(i+2)+rightScope;
- found=TRUE;
- }
- p=i-1;
- }
- if (found) return result;
-
- // case leftScope=="A" rightScope=="B" => result = "A::B"
- result=leftScope.copy();
- if (!result.isEmpty() && !rightScope.isEmpty()) result+="::";
- result+=rightScope;
- return result;
-}
-
-/*! Returns a fragment from scope \a s, starting at position \a p.
- *
- * @param s the scope name as a string.
- * @param p the start position (0 is the first).
- * @param l the resulting length of the fragment.
- * @returns the location of the fragment, or -1 if non is found.
- */
-int getScopeFragment(const QCString &s,int p,int *l)
-{
- int sl=s.length();
- int sp=p;
- int count=0;
- bool done;
- if (sp>=sl) return -1;
- while (sp<sl)
- {
- char c=s.at(sp);
- if (c==':') sp++,p++; else break;
- }
- while (sp<sl)
- {
- char c=s.at(sp);
- switch (c)
- {
- case ':': // found next part
- goto found;
- case '<': // skip template specifier
- count=1;sp++;
- done=FALSE;
- while (sp<sl && !done)
- {
- // TODO: deal with << and >> operators!
- char c=s.at(sp++);
- switch(c)
- {
- case '<': count++; break;
- case '>': count--; if (count==0) done=TRUE; break;
- default: break;
- }
- }
- break;
- default:
- sp++;
- break;
- }
- }
-found:
- *l=sp-p;
- //printf("getScopeFragment(%s,%d)=%s\n",s.data(),p,s.mid(p,*l).data());
- return p;
-}
-
-//----------------------------------------------------------------------------
-
-PageDef *addRelatedPage(const char *name,const QCString &ptitle,
- const QCString &doc,
- QList<SectionInfo> * /*anchors*/,
- const char *fileName,int startLine,
- const QList<ListItemInfo> *sli,
- GroupDef *gd,
- TagInfo *tagInfo,
- SrcLangExt lang
- )
-{
- PageDef *pd=0;
- //printf("addRelatedPage(name=%s gd=%p)\n",name,gd);
- if ((pd=Doxygen::pageSDict->find(name)) && !tagInfo)
- {
- // append documentation block to the page.
- pd->setDocumentation(doc,fileName,startLine);
- //printf("Adding page docs `%s' pi=%p name=%s\n",doc.data(),pi,name);
- }
- else // new page
- {
- QCString baseName=name;
- if (baseName.right(4)==".tex")
- baseName=baseName.left(baseName.length()-4);
- else if (baseName.right(Doxygen::htmlFileExtension.length())==Doxygen::htmlFileExtension)
- baseName=baseName.left(baseName.length()-Doxygen::htmlFileExtension.length());
-
- QCString title=ptitle.stripWhiteSpace();
- pd=new PageDef(fileName,startLine,baseName,doc,title);
-
- pd->setRefItems(sli);
- pd->setLanguage(lang);
-
- if (tagInfo)
- {
- pd->setReference(tagInfo->tagName);
- }
-
- pd->setFileName(convertNameToFile(pd->name(),FALSE,TRUE));
-
- //printf("Appending page `%s'\n",baseName.data());
- Doxygen::pageSDict->append(baseName,pd);
-
- if (gd) gd->addPage(pd);
-
- if (!pd->title().isEmpty())
- {
- //outputList->writeTitle(pi->name,pi->title);
-
- // a page name is a label as well!
- QCString file;
- if (gd)
- {
- file=gd->getOutputFileBase();
- }
- else
- {
- file=pd->getOutputFileBase();
- }
- SectionInfo *si=new SectionInfo(
- file,pd->name(),pd->title(),SectionInfo::Page,0,pd->getReference());
- //printf("si->label=`%s' si->definition=%s si->fileName=`%s'\n",
- // si->label.data(),si->definition?si->definition->name().data():"<none>",
- // si->fileName.data());
- //printf(" SectionInfo: sec=%p sec->fileName=%s\n",si,si->fileName.data());
- //printf("Adding section key=%s si->fileName=%s\n",pageName.data(),si->fileName.data());
- Doxygen::sectionDict.append(pd->name(),si);
- }
- }
- return pd;
-}
-
-//----------------------------------------------------------------------------
-
-void addRefItem(const QList<ListItemInfo> *sli,
- const char *key,
- const char *prefix, const char *name,const char *title,const char *args)
-{
- //printf("addRefItem(sli=%p,key=%s,prefix=%s,name=%s,title=%s,args=%s)\n",sli,key,prefix,name,title,args);
- if (sli)
- {
- QListIterator<ListItemInfo> slii(*sli);
- ListItemInfo *lii;
- for (slii.toFirst();(lii=slii.current());++slii)
- {
- RefList *refList = Doxygen::xrefLists->find(lii->type);
- if (refList
- &&
- (
- // either not a built-in list or the list is enabled
- (lii->type!="todo" || Config_getBool("GENERATE_TODOLIST")) &&
- (lii->type!="test" || Config_getBool("GENERATE_TESTLIST")) &&
- (lii->type!="bug" || Config_getBool("GENERATE_BUGLIST")) &&
- (lii->type!="deprecated" || Config_getBool("GENERATE_DEPRECATEDLIST"))
- )
- )
- {
- RefItem *item = refList->getRefItem(lii->itemId);
- ASSERT(item!=0);
-
- item->prefix = prefix;
- item->name = name;
- item->title = title;
- item->args = args;
-
- refList->insertIntoList(key,item);
-
- }
- }
- }
-}
-
-void addGroupListToTitle(OutputList &ol,Definition *d)
-{
- LockingPtr<GroupList> groups = d->partOfGroups();
- if (groups!=0) // write list of group to which this definition belongs
- {
- ol.pushGeneratorState();
- ol.disableAllBut(OutputGenerator::Html);
- ol.writeString("<div class=\"ingroups\">");
- GroupListIterator gli(*groups);
- GroupDef *gd;
- bool first=TRUE;
- for (gli.toFirst();(gd=gli.current());++gli)
- {
- if (!first) { ol.writeString(" &#124; "); } else first=FALSE;
- ol.writeObjectLink(gd->getReference(),
- gd->getOutputFileBase(),0,gd->groupTitle());
- }
- ol.writeString("</div>");
- ol.popGeneratorState();
- }
-}
-
-void filterLatexString(FTextStream &t,const char *str,
- bool insideTabbing,bool insidePre,bool insideItem)
-{
- if (str==0) return;
- //printf("filterLatexString(%s)\n",str);
- //if (strlen(str)<2) stackTrace();
- const unsigned char *p=(const unsigned char *)str;
- unsigned char c;
- unsigned char pc='\0';
- while (*p)
- {
- c=*p++;
-
- if (insidePre)
- {
- switch(c)
- {
- case '\\': t << "\\(\\backslash\\)"; break;
- case '{': t << "\\{"; break;
- case '}': t << "\\}"; break;
- case '_': t << "\\_"; break;
- default:
- t << (char)c;
- }
- }
- else
- {
- switch(c)
- {
- case '#': t << "\\#"; break;
- case '$': t << "\\$"; break;
- case '%': t << "\\%"; break;
- case '^': t << "$^\\wedge$"; break;
- case '&': t << "\\&"; break;
- case '*': t << "$\\ast$"; break;
- case '_': if (!insideTabbing) t << "\\-";
- t << "\\_";
- if (!insideTabbing) t << "\\-";
- break;
- case '{': t << "\\{"; break;
- case '}': t << "\\}"; break;
- case '<': t << "$<$"; break;
- case '>': t << "$>$"; break;
- case '|': t << "$|$"; break;
- case '~': t << "$\\sim$"; break;
- case '[': if (Config_getBool("PDF_HYPERLINKS") || insideItem)
- t << "\\mbox{[}";
- else
- t << "[";
- break;
- case ']': if (pc=='[') t << "$\\,$";
- if (Config_getBool("PDF_HYPERLINKS") || insideItem)
- t << "\\mbox{]}";
- else
- t << "]";
- break;
- case '-': t << "-\\/";
- break;
- case '\\': if (*p=='<')
- { t << "$<$"; p++; }
- else if (*p=='>')
- { t << "$>$"; p++; }
- else
- { t << "$\\backslash$"; }
- break;
- case '"': { t << "\\char`\\\"{}"; }
- break;
-
- default:
- //if (!insideTabbing && forceBreaks && c!=' ' && *p!=' ')
- if (!insideTabbing &&
- ((c>='A' && c<='Z' && pc!=' ' && pc!='\0') || (c==':' && pc!=':') || (pc=='.' && isId(c)))
- )
- {
- t << "\\-";
- }
- t << (char)c;
- }
- }
- pc = c;
- }
-}
-
-
-QCString rtfFormatBmkStr(const char *name)
-{
- static QCString g_nextTag( "AAAAAAAAAA" );
- static QDict<QCString> g_tagDict( 5003 );
-
- g_tagDict.setAutoDelete(TRUE);
-
- // To overcome the 40-character tag limitation, we
- // substitute a short arbitrary string for the name
- // supplied, and keep track of the correspondence
- // between names and strings.
- QCString key( name );
- QCString* tag = g_tagDict.find( key );
- if ( !tag )
- {
- // This particular name has not yet been added
- // to the list. Add it, associating it with the
- // next tag value, and increment the next tag.
- tag = new QCString( g_nextTag.copy() ); // Make sure to use a deep copy!
- g_tagDict.insert( key, tag );
-
- // This is the increment part
- char* nxtTag = g_nextTag.data() + g_nextTag.length() - 1;
- for ( unsigned int i = 0; i < g_nextTag.length(); ++i, --nxtTag )
- {
- if ( ( ++(*nxtTag) ) > 'Z' )
- {
- *nxtTag = 'A';
- }
- else
- {
- // Since there was no carry, we can stop now
- break;
- }
- }
- }
-
- return *tag;
-}
-
-QCString stripExtension(const char *fName)
-{
- QCString result=fName;
- if (result.right(Doxygen::htmlFileExtension.length())==Doxygen::htmlFileExtension)
- {
- result=result.left(result.length()-Doxygen::htmlFileExtension.length());
- }
- return result;
-}
-
-
-void replaceNamespaceAliases(QCString &scope,int i)
-{
- while (i>0)
- {
- QCString ns = scope.left(i);
- QCString *s = Doxygen::namespaceAliasDict[ns];
- if (s)
- {
- scope=*s+scope.right(scope.length()-i);
- i=s->length();
- }
- if (i>0 && ns==scope.left(i)) break;
- }
-}
-
-QCString stripPath(const char *s)
-{
- QCString result=s;
- int i=result.findRev('/');
- if (i!=-1)
- {
- result=result.mid(i+1);
- }
- return result;
-}
-
-/** returns \c TRUE iff string \a s contains word \a w */
-bool containsWord(const QCString &s,const QCString &word)
-{
- static QRegExp wordExp("[a-z_A-Z\\x80-\\xFF]+");
- int p=0,i,l;
- while ((i=wordExp.match(s,p,&l))!=-1)
- {
- if (s.mid(i,l)==word) return TRUE;
- p=i+l;
- }
- return FALSE;
-}
-
-bool findAndRemoveWord(QCString &s,const QCString &word)
-{
- static QRegExp wordExp("[a-z_A-Z\\x80-\\xFF]+");
- int p=0,i,l;
- while ((i=wordExp.match(s,p,&l))!=-1)
- {
- if (s.mid(i,l)==word)
- {
- if (i>0 && isspace((uchar)s.at(i-1)))
- i--,l++;
- else if (i+l<(int)s.length() && isspace(s.at(i+l)))
- l++;
- s = s.left(i)+s.mid(i+l); // remove word + spacing
- return TRUE;
- }
- p=i+l;
- }
- return FALSE;
-}
-
-/** Special version of QCString::stripWhiteSpace() that only strips
- * completely blank lines.
- * @param s the string to be stripped
- * @param docLine the line number corresponding to the start of the
- * string. This will be adjusted based on the number of lines stripped
- * from the start.
- * @returns The stripped string.
- */
-QCString stripLeadingAndTrailingEmptyLines(const QCString &s,int &docLine)
-{
- const char *p = s.data();
- if (p==0) return 0;
-
- // search for leading empty lines
- int i=0,li=-1,l=s.length();
- char c;
- while ((c=*p++))
- {
- if (c==' ' || c=='\t' || c=='\r') i++;
- else if (c=='\n') i++,li=i,docLine++;
- else break;
- }
-
- // search for trailing empty lines
- int b=l-1,bi=-1;
- p=s.data()+b;
- while (b>=0)
- {
- c=*p; p--;
- if (c==' ' || c=='\t' || c=='\r') b--;
- else if (c=='\n') bi=b,b--;
- else break;
- }
-
- // return whole string if no leading or trailing lines where found
- if (li==-1 && bi==-1) return s;
-
- // return substring
- if (bi==-1) bi=l;
- if (li==-1) li=0;
- if (bi<=li) return 0; // only empty lines
- return s.mid(li,bi-li);
-}
-
-#if 0
-void stringToSearchIndex(const QCString &docBaseUrl,const QCString &title,
- const QCString &str,bool priority,const QCString &anchor)
-{
- static bool searchEngine = Config_getBool("SEARCHENGINE");
- if (searchEngine)
- {
- Doxygen::searchIndex->setCurrentDoc(title,docBaseUrl,anchor);
- static QRegExp wordPattern("[a-z_A-Z\\x80-\\xFF][a-z_A-Z0-9\\x80-\\xFF]*");
- int i,p=0,l;
- while ((i=wordPattern.match(str,p,&l))!=-1)
- {
- Doxygen::searchIndex->addWord(str.mid(i,l),priority);
- p=i+l;
- }
- }
-}
-#endif
-
-//--------------------------------------------------------------------------
-
-static QDict<int> g_extLookup;
-
-static struct Lang2ExtMap
-{
- const char *langName;
- const char *parserName;
- SrcLangExt parserId;
-}
-g_lang2extMap[] =
-{
-// language parser parser option
- { "idl", "c", SrcLangExt_IDL },
- { "java", "c", SrcLangExt_Java },
- { "javascript", "c", SrcLangExt_JS },
- { "csharp", "c", SrcLangExt_CSharp },
- { "d", "c", SrcLangExt_D },
- { "php", "c", SrcLangExt_PHP },
- { "objective-c", "c", SrcLangExt_ObjC },
- { "c", "c", SrcLangExt_Cpp },
- { "c++", "c", SrcLangExt_Cpp },
- { "python", "python", SrcLangExt_Python },
- { "fortran", "fortran", SrcLangExt_Fortran },
- { "vhdl", "vhdl", SrcLangExt_VHDL },
- { "dbusxml", "dbusxml", SrcLangExt_XML },
- { "tcl", "tcl", SrcLangExt_Tcl },
- { "md", "md", SrcLangExt_Markdown },
- { 0, 0, (SrcLangExt)0 }
-};
-
-bool updateLanguageMapping(const QCString &extension,const QCString &language)
-{
- const Lang2ExtMap *p = g_lang2extMap;
- QCString langName = language.lower();
- while (p->langName)
- {
- if (langName==p->langName) break;
- p++;
- }
- if (!p->langName) return FALSE;
-
- // found the language
- SrcLangExt parserId = p->parserId;
- QCString extName = extension.lower();
- if (extName.isEmpty()) return FALSE;
- if (extName.at(0)!='.') extName.prepend(".");
- if (g_extLookup.find(extension)!=0) // language was already register for this ext
- {
- g_extLookup.remove(extension);
- }
- //printf("registering extension %s\n",extName.data());
- g_extLookup.insert(extName,new int(parserId));
- if (!Doxygen::parserManager->registerExtension(extName,p->parserName))
- {
- err("Failed to assign extension %s to parser %s for language %s\n",
- extName.data(),p->parserName,language.data());
- }
- else
- {
- //msg("Registered extension %s to language parser %s...\n",
- // extName.data(),language.data());
- }
- return TRUE;
-}
-
-void initDefaultExtensionMapping()
-{
- g_extLookup.setAutoDelete(TRUE);
- // extension parser id
- updateLanguageMapping(".idl", "idl");
- updateLanguageMapping(".ddl", "idl");
- updateLanguageMapping(".odl", "idl");
- updateLanguageMapping(".java", "java");
- updateLanguageMapping(".as", "javascript");
- updateLanguageMapping(".js", "javascript");
- updateLanguageMapping(".cs", "csharp");
- updateLanguageMapping(".d", "d");
- updateLanguageMapping(".php", "php");
- updateLanguageMapping(".php4", "php");
- updateLanguageMapping(".php5", "php");
- updateLanguageMapping(".inc", "php");
- updateLanguageMapping(".phtml", "php");
- updateLanguageMapping(".m", "objective-c");
- updateLanguageMapping(".M", "objective-c");
- updateLanguageMapping(".mm", "objective-c");
- updateLanguageMapping(".py", "python");
- updateLanguageMapping(".f", "fortran");
- updateLanguageMapping(".for", "fortran");
- updateLanguageMapping(".f90", "fortran");
- updateLanguageMapping(".vhd", "vhdl");
- updateLanguageMapping(".vhdl", "vhdl");
- updateLanguageMapping(".tcl", "tcl");
- updateLanguageMapping(".ucf", "vhdl");
- updateLanguageMapping(".qsf", "vhdl");
- updateLanguageMapping(".md", "md");
- updateLanguageMapping(".markdown", "md");
-
- //updateLanguageMapping(".xml", "dbusxml");
-}
-
-SrcLangExt getLanguageFromFileName(const QCString fileName)
-{
- int i = fileName.findRev('.');
- if (i!=-1) // name has an extension
- {
- QCString extStr=fileName.right(fileName.length()-i).lower();
- if (!extStr.isEmpty()) // non-empty extension
- {
- int *pVal=g_extLookup.find(extStr);
- if (pVal) // listed extension
- {
- //printf("getLanguageFromFileName(%s)=%x\n",extStr.data(),*pVal);
- return (SrcLangExt)*pVal;
- }
- }
- }
- //printf("getLanguageFromFileName(%s) not found!\n",fileName.data());
- return SrcLangExt_Cpp; // not listed => assume C-ish language.
-}
-
-//--------------------------------------------------------------------------
-
-MemberDef *getMemberFromSymbol(Definition *scope,FileDef *fileScope,
- const char *n)
-{
- if (scope==0 ||
- (scope->definitionType()!=Definition::TypeClass &&
- scope->definitionType()!=Definition::TypeNamespace
- )
- )
- {
- scope=Doxygen::globalScope;
- }
-
- QCString name = n;
- if (name.isEmpty())
- return 0; // no name was given
-
- DefinitionIntf *di = Doxygen::symbolMap->find(name);
- if (di==0)
- return 0; // could not find any matching symbols
-
- // mostly copied from getResolvedClassRec()
- QCString explicitScopePart;
- int qualifierIndex = computeQualifiedIndex(name);
- if (qualifierIndex!=-1)
- {
- explicitScopePart = name.left(qualifierIndex);
- replaceNamespaceAliases(explicitScopePart,explicitScopePart.length());
- name = name.mid(qualifierIndex+2);
- }
- //printf("explicitScopePart=%s\n",explicitScopePart.data());
-
- int minDistance = 10000;
- MemberDef *bestMatch = 0;
-
- if (di->definitionType()==DefinitionIntf::TypeSymbolList)
- {
- //printf("multiple matches!\n");
- // find the closest closest matching definition
- DefinitionListIterator dli(*(DefinitionList*)di);
- Definition *d;
- for (dli.toFirst();(d=dli.current());++dli)
- {
- if (d->definitionType()==Definition::TypeMember)
- {
- g_visitedNamespaces.clear();
- int distance = isAccessibleFromWithExpScope(scope,fileScope,d,explicitScopePart);
- if (distance!=-1 && distance<minDistance)
- {
- minDistance = distance;
- bestMatch = (MemberDef *)d;
- //printf("new best match %s distance=%d\n",bestMatch->qualifiedName().data(),distance);
- }
- }
- }
- }
- else if (di->definitionType()==Definition::TypeMember)
- {
- //printf("unique match!\n");
- Definition *d = (Definition *)di;
- g_visitedNamespaces.clear();
- int distance = isAccessibleFromWithExpScope(scope,fileScope,d,explicitScopePart);
- if (distance!=-1 && distance<minDistance)
- {
- minDistance = distance;
- bestMatch = (MemberDef *)d;
- //printf("new best match %s distance=%d\n",bestMatch->qualifiedName().data(),distance);
- }
- }
- return bestMatch;
-}
-
-/*! Returns true iff the given name string appears to be a typedef in scope. */
-bool checkIfTypedef(Definition *scope,FileDef *fileScope,const char *n)
-{
- MemberDef *bestMatch = getMemberFromSymbol(scope,fileScope,n);
-
- if (bestMatch && bestMatch->isTypedef())
- return TRUE; // closest matching symbol is a typedef
- else
- return FALSE;
-}
-
-
-int nextUtf8CharPosition(const QCString &utf8Str,int len,int startPos)
-{
- int bytes=1;
- if (startPos>=len) return len;
- char c = utf8Str[startPos];
- if (c<0) // multibyte utf-8 character
- {
- bytes++; // 1xxx.xxxx: >=2 byte character
- if (((uchar)c&0xE0)==0xE0)
- {
- bytes++; // 111x.xxxx: >=3 byte character
- }
- if (((uchar)c&0xF0)==0xF0)
- {
- bytes++; // 1111.xxxx: 4 byte character
- }
- }
- else if (c=='&') // skip over character entities
- {
- static QRegExp re1("&#[0-9]+;"); // numerical entity
- static QRegExp re2("&[A-Z_a-z]+;"); // named entity
- int l1,l2;
- int i1 = re1.match(utf8Str,startPos,&l1);
- int i2 = re2.match(utf8Str,startPos,&l2);
- if (i1!=-1)
- {
- bytes=l1;
- }
- else if (i2!=-1)
- {
- bytes=l2;
- }
- }
- return startPos+bytes;
-}
-
-QCString parseCommentAsText(const Definition *scope,const MemberDef *md,
- const QCString &doc,const QCString &fileName,int lineNr)
-{
- QGString s;
- if (doc.isEmpty()) return s.data();
- FTextStream t(&s);
- DocNode *root = validatingParseDoc(fileName,lineNr,
- (Definition*)scope,(MemberDef*)md,doc,FALSE,FALSE);
- TextDocVisitor *visitor = new TextDocVisitor(t);
- root->accept(visitor);
- delete visitor;
- delete root;
- QCString result = s.data();
- int i=0;
- int charCnt=0;
- int l=result.length();
- bool addEllipsis=FALSE;
- while ((i=nextUtf8CharPosition(result,l,i))<l)
- {
- charCnt++;
- if (charCnt>=80) break;
- }
- if (charCnt>=80) // try to truncate the string
- {
- while ((i=nextUtf8CharPosition(result,l,i))<l && charCnt<100)
- {
- charCnt++;
- if (result.at(i)>=0 && isspace(result.at(i)))
- {
- addEllipsis=TRUE;
- }
- else if (result.at(i)==',' ||
- result.at(i)=='.' ||
- result.at(i)=='?')
- {
- break;
- }
- }
- }
- if (addEllipsis || charCnt==100) result=result.left(i)+"...";
- return result.data();
-}
-
-//--------------------------------------------------------------------------------------
-
-static QDict<void> aliasesProcessed;
-
-static QCString expandAliasRec(const QCString s);
-
-struct Marker
-{
- Marker(int p, int n,int s) : pos(p),number(n),size(s) {}
- int pos; // position in the string
- int number; // argument number
- int size; // size of the marker
-};
-
-/** Replaces the markers in an alias definition \a aliasValue
- * with the corresponding values found in the comma separated argument
- * list \a argList and the returns the result after recursive alias expansion.
- */
-static QCString replaceAliasArguments(const QCString &aliasValue,const QCString &argList)
-{
- //printf("----- replaceAliasArguments(val=[%s],args=[%s])\n",aliasValue.data(),argList.data());
-
- // first make a list of arguments from the comma separated argument list
- QList<QCString> args;
- args.setAutoDelete(TRUE);
- int i,l=(int)argList.length();
- int s=0;
- for (i=0;i<l;i++)
- {
- if (argList.at(i)==',' && (i==0 || argList.at(i-1)!='\\'))
- {
- args.append(new QCString(argList.mid(s,i-s)));
- s=i+1; // start of next argument
- }
- }
- if (l>s) args.append(new QCString(argList.right(l-s)));
- //printf("found %d arguments\n",args.count());
-
- // next we look for the positions of the markers and add them to a list
- QList<Marker> markerList;
- markerList.setAutoDelete(TRUE);
- l = aliasValue.length();
- int markerStart=0;
- int markerEnd=0;
- for (i=0;i<l;i++)
- {
- if (markerStart==0 && aliasValue.at(i)=='\\') // start of a \xx marker
- {
- markerStart=i+1;
- }
- else if (markerStart>0 && aliasValue.at(i)>='0' && aliasValue.at(i)<='9')
- {
- // read digit that make up the marker number
- markerEnd=i+1;
- }
- else
- {
- if (markerStart>0 && markerEnd>markerStart) // end of marker
- {
- int markerLen = markerEnd-markerStart;
- markerList.append(new Marker(markerStart-1, // include backslash
- atoi(aliasValue.mid(markerStart,markerLen)),markerLen+1));
- //printf("found marker at %d with len %d and number %d\n",
- // markerStart-1,markerLen+1,atoi(aliasValue.mid(markerStart,markerLen)));
- }
- markerStart=0; // outside marker
- markerEnd=0;
- }
- }
- if (markerStart>0)
- {
- markerEnd=l;
- }
- if (markerStart>0 && markerEnd>markerStart)
- {
- int markerLen = markerEnd-markerStart;
- markerList.append(new Marker(markerStart-1, // include backslash
- atoi(aliasValue.mid(markerStart,markerLen)),markerLen+1));
- //printf("found marker at %d with len %d and number %d\n",
- // markerStart-1,markerLen+1,atoi(aliasValue.mid(markerStart,markerLen)));
- }
-
- // then we replace the markers with the corresponding arguments in one pass
- QCString result;
- int p=0;
- for (i=0;i<(int)markerList.count();i++)
- {
- Marker *m = markerList.at(i);
- result+=aliasValue.mid(p,m->pos-p);
- //printf("part before marker %d: '%s'\n",i,aliasValue.mid(p,m->pos-p).data());
- if (m->number>0 && m->number<=(int)args.count()) // valid number
- {
- result+=*args.at(m->number-1);
- //printf("marker index=%d pos=%d number=%d size=%d replacement %s\n",i,m->pos,m->number,m->size,
- // args.at(m->number-1)->data());
- }
- p=m->pos+m->size; // continue after the marker
- }
- result+=aliasValue.right(l-p); // append remainder
- //printf("string after replacement of markers: '%s'\n",result.data());
-
- // expand the result again
- result = substitute(result,"\\{","{");
- result = substitute(result,"\\}","}");
- result = expandAliasRec(substitute(result,"\\,",","));
-
- return result;
-}
-
-static QCString escapeCommas(const QCString &s)
-{
- QGString result;
- const char *p = s.data();
- char c,pc=0;
- while ((c=*p++))
- {
- if (c==',' && pc!='\\')
- {
- result+="\\,";
- }
- else
- {
- result+=c;
- }
- pc=c;
- }
- result+='\0';
- //printf("escapeCommas: '%s'->'%s'\n",s.data(),result.data());
- return result.data();
-}
-
-static QCString expandAliasRec(const QCString s)
-{
- QCString result;
- static QRegExp cmdPat("[\\\\@][a-z_A-Z][a-z_A-Z0-9]*");
- QCString value=s;
- int i,p=0,l;
- while ((i=cmdPat.match(value,p,&l))!=-1)
- {
- result+=value.mid(p,i-p);
- QCString args = extractAliasArgs(value,i+l);
- bool hasArgs = !args.isEmpty(); // found directly after command
- int argsLen = args.length();
- QCString cmd = value.mid(i+1,l-1);
- QCString cmdNoArgs = cmd;
- int numArgs=0;
- if (hasArgs)
- {
- numArgs = countAliasArguments(args);
- cmd += QCString().sprintf("{%d}",numArgs); // alias name + {n}
- }
- QCString *aliasText=Doxygen::aliasDict.find(cmd);
- if (numArgs>1 && aliasText==0)
- { // in case there is no command with numArgs parameters, but there is a command with 1 parameter,
- // we also accept all text as the argument of that command (so you don't have to escape commas)
- aliasText=Doxygen::aliasDict.find(cmdNoArgs+"{1}");
- if (aliasText)
- {
- cmd = cmdNoArgs+"{1}";
- args = escapeCommas(args); // escape , so that everything is seen as one argument
- }
- }
- //printf("Found command s='%s' cmd='%s' numArgs=%d args='%s' aliasText=%s\n",
- // s.data(),cmd.data(),numArgs,args.data(),aliasText?aliasText->data():"<none>");
- if (aliasesProcessed.find(cmd)==0 && aliasText) // expand the alias
- {
- //printf("is an alias!\n");
- aliasesProcessed.insert(cmd,(void *)0x8);
- QCString val = *aliasText;
- if (hasArgs)
- {
- val = replaceAliasArguments(val,args);
- //printf("replace '%s'->'%s' args='%s'\n",
- // aliasText->data(),val.data(),args.data());
- }
- result+=expandAliasRec(val);
- aliasesProcessed.remove(cmd);
- p=i+l;
- if (hasArgs) p+=argsLen+2;
- }
- else // command is not an alias
- {
- //printf("not an alias!\n");
- result+=value.mid(i,l);
- p=i+l;
- }
- }
- result+=value.right(value.length()-p);
-
- //printf("expandAliases '%s'->'%s'\n",s.data(),result.data());
- return result;
-}
-
-int countAliasArguments(const QCString argList)
-{
- int count=1;
- int l = argList.length();
- int i;
- for (i=0;i<l;i++)
- {
- if (argList.at(i)==',' && (i==0 || argList.at(i-1)!='\\')) count++;
- }
- return count;
-}
-
-QCString extractAliasArgs(const QCString &args,int pos)
-{
- int i;
- int bc=0;
- char prevChar=0;
- if (args.at(pos)=='{') // alias has argument
- {
- for (i=pos;i<(int)args.length();i++)
- {
- if (prevChar!='\\')
- {
- if (args.at(i)=='{') bc++;
- if (args.at(i)=='}') bc--;
- prevChar=args.at(i);
- }
- else
- {
- prevChar=0;
- }
-
- if (bc==0)
- {
- //printf("extractAliasArgs('%s')->'%s'\n",args.data(),args.mid(pos+1,i-pos-1).data());
- return args.mid(pos+1,i-pos-1);
- }
- }
- }
- return "";
-}
-
-QCString resolveAliasCmd(const QCString aliasCmd)
-{
- QCString result;
- aliasesProcessed.clear();
- //printf("Expanding: '%s'\n",aliasCmd.data());
- result = expandAliasRec(aliasCmd);
- //printf("Expanding result: '%s'->'%s'\n",aliasCmd.data(),result.data());
- return result;
-}
-
-QCString expandAlias(const QCString &aliasName,const QCString &aliasValue)
-{
- QCString result;
- aliasesProcessed.clear();
- // avoid expanding this command recursively
- aliasesProcessed.insert(aliasName,(void *)0x8);
- // expand embedded commands
- //printf("Expanding: '%s'->'%s'\n",aliasName.data(),aliasValue.data());
- result = expandAliasRec(aliasValue);
- //printf("Expanding result: '%s'->'%s'\n",aliasName.data(),result.data());
- return result;
-}
-
-void writeTypeConstraints(OutputList &ol,Definition *d,ArgumentList *al)
-{
- if (al==0) return;
- ol.startConstraintList(theTranslator->trTypeConstraints());
- ArgumentListIterator ali(*al);
- Argument *a;
- for (;(a=ali.current());++ali)
- {
- ol.startConstraintParam();
- ol.parseText(a->name);
- ol.endConstraintParam();
- ol.startConstraintType();
- linkifyText(TextGeneratorOLImpl(ol),d,0,0,a->type);
- ol.endConstraintType();
- ol.startConstraintDocs();
- ol.parseDoc(d->docFile(),d->docLine(),d,0,a->docs,TRUE,FALSE);
- ol.endConstraintDocs();
- }
- ol.endConstraintList();
-}
-
-bool usingTreeIndex()
-{
- static bool treeView = Config_getBool("USE_INLINE_TREES");
- return treeView;
-}
-
-void stackTrace()
-{
-#ifdef TRACINGSUPPORT
- void *backtraceFrames[128];
- int frameCount = backtrace(backtraceFrames, 128);
- static char cmd[40960];
- char *p = cmd;
- p += sprintf(p,"/usr/bin/atos -p %d ", (int)getpid());
- for (int x = 0; x < frameCount; x++)
- {
- p += sprintf(p,"%p ", backtraceFrames[x]);
- }
- fprintf(stderr,"========== STACKTRACE START ==============\n");
- if (FILE *fp = popen(cmd, "r"))
- {
- char resBuf[512];
- while (size_t len = fread(resBuf, 1, sizeof(resBuf), fp))
- {
- fwrite(resBuf, 1, len, stderr);
- }
- pclose(fp);
- }
- fprintf(stderr,"============ STACKTRACE END ==============\n");
- //fprintf(stderr,"%s\n", frameStrings[x]);
-#endif
-}
-
-static int transcodeCharacterBuffer(const char *fileName,BufStr &srcBuf,int size,
- const char *inputEncoding,const char *outputEncoding)
-{
- if (inputEncoding==0 || outputEncoding==0) return size;
- if (qstricmp(inputEncoding,outputEncoding)==0) return size;
- void *cd = portable_iconv_open(outputEncoding,inputEncoding);
- if (cd==(void *)(-1))
- {
- err("error: unsupported character conversion: '%s'->'%s': %s\n"
- "Check the INPUT_ENCODING setting in the config file!\n",
- inputEncoding,outputEncoding,strerror(errno));
- exit(1);
- }
- int tmpBufSize=size*4+1;
- BufStr tmpBuf(tmpBufSize);
- size_t iLeft=size;
- size_t oLeft=tmpBufSize;
- const char *srcPtr = srcBuf.data();
- char *dstPtr = tmpBuf.data();
- uint newSize=0;
- if (!portable_iconv(cd, &srcPtr, &iLeft, &dstPtr, &oLeft))
- {
- newSize = tmpBufSize-oLeft;
- srcBuf.shrink(newSize);
- strncpy(srcBuf.data(),tmpBuf.data(),newSize);
- //printf("iconv: input size=%d output size=%d\n[%s]\n",size,newSize,srcBuf.data());
- }
- else
- {
- err("%s: error: failed to translate characters from %s to %s: check INPUT_ENCODING\n",
- fileName,inputEncoding,outputEncoding);
- exit(1);
- }
- portable_iconv_close(cd);
- return newSize;
-}
-
-//! read a file name \a fileName and optionally filter and transcode it
-bool readInputFile(const char *fileName,BufStr &inBuf)
-{
- // try to open file
- int size=0;
- //uint oldPos = dest.curPos();
- //printf(".......oldPos=%d\n",oldPos);
-
- QFileInfo fi(fileName);
- if (!fi.exists()) return FALSE;
- QCString filterName = getFileFilter(fileName,FALSE);
- if (filterName.isEmpty())
- {
- QFile f(fileName);
- if (!f.open(IO_ReadOnly))
- {
- err("error: could not open file %s\n",fileName);
- return FALSE;
- }
- size=fi.size();
- // read the file
- inBuf.skip(size);
- if (f.readBlock(inBuf.data()/*+oldPos*/,size)!=size)
- {
- err("error: problems while reading file %s\n",fileName);
- return FALSE;
- }
- }
- else
- {
- QCString cmd=filterName+" \""+fileName+"\"";
- Debug::print(Debug::ExtCmd,0,"Executing popen(`%s`)\n",cmd.data());
- FILE *f=portable_popen(cmd,"r");
- if (!f)
- {
- err("error: could not execute filter %s\n",filterName.data());
- return FALSE;
- }
- const int bufSize=1024;
- char buf[bufSize];
- int numRead;
- while ((numRead=fread(buf,1,bufSize,f))>0)
- {
- //printf(">>>>>>>>Reading %d bytes\n",numRead);
- inBuf.addArray(buf,numRead),size+=numRead;
- }
- portable_pclose(f);
- inBuf.at(inBuf.curPos()) ='\0';
- Debug::print(Debug::FilterOutput, 0, "Filter output\n");
- Debug::print(Debug::FilterOutput,0,"-------------\n%s\n-------------\n",inBuf.data());
- }
-
- int start=0;
- if (size>=2 &&
- ((inBuf.at(0)==-1 && inBuf.at(1)==-2) || // Litte endian BOM
- (inBuf.at(0)==-2 && inBuf.at(1)==-1) // big endian BOM
- )
- ) // UCS-2 encoded file
- {
- transcodeCharacterBuffer(fileName,inBuf,inBuf.curPos(),
- "UCS-2","UTF-8");
- }
- else if (size>=3 &&
- (uchar)inBuf.at(0)==0xEF &&
- (uchar)inBuf.at(1)==0xBB &&
- (uchar)inBuf.at(2)==0xBF
- ) // UTF-8 encoded file
- {
- inBuf.dropFromStart(3); // remove UTF-8 BOM: no translation needed
- }
- else // transcode according to the INPUT_ENCODING setting
- {
- // do character transcoding if needed.
- transcodeCharacterBuffer(fileName,inBuf,inBuf.curPos(),
- Config_getString("INPUT_ENCODING"),"UTF-8");
- }
-
- inBuf.addChar('\n'); /* to prevent problems under Windows ? */
-
- // and translate CR's
- size=inBuf.curPos()-start;
- int newSize=filterCRLF(inBuf.data()+start,size);
- //printf("filter char at %p size=%d newSize=%d\n",dest.data()+oldPos,size,newSize);
- if (newSize!=size) // we removed chars
- {
- inBuf.shrink(newSize); // resize the array
- //printf(".......resizing from %d to %d result=[%s]\n",oldPos+size,oldPos+newSize,dest.data());
- }
- inBuf.at(inBuf.curPos())='\0';
- return TRUE;
-}
-
-// Replace %word by word in title
-QCString filterTitle(const QCString &title)
-{
- QCString tf;
- static QRegExp re("%[A-Z_a-z]");
- int p=0,i,l;
- while ((i=re.match(title,p,&l))!=-1)
- {
- tf+=title.mid(p,i-p);
- tf+=title.mid(i+1,l-1); // skip %
- p=i+l;
- }
- tf+=title.right(title.length()-p);
- return tf;
-}
-
-//----------------------------------------------------------------------------
-// returns TRUE if the name of the file represented by `fi' matches
-// one of the file patterns in the `patList' list.
-
-bool patternMatch(const QFileInfo &fi,const QStrList *patList)
-{
- bool found=FALSE;
- if (patList)
- {
- QStrListIterator it(*patList);
- QCString pattern;
- for (it.toFirst();(pattern=it.current());++it)
- {
- if (!pattern.isEmpty() && !found)
- {
- int i=pattern.find('=');
- if (i!=-1) pattern=pattern.left(i); // strip of the extension specific filter name
-
-#if defined(_WIN32) || defined(__MACOSX__) // Windows or MacOSX
- QRegExp re(pattern,FALSE,TRUE); // case insensitive match
-#else // unix
- QRegExp re(pattern,TRUE,TRUE); // case sensitive match
-#endif
- found = found || re.match(fi.fileName().data())!=-1 ||
- re.match(fi.filePath().data())!=-1 ||
- re.match(fi.absFilePath().data())!=-1;
- //printf("Matching `%s' against pattern `%s' found=%d\n",
- // fi->fileName().data(),pattern.data(),found);
- }
- }
- }
- return found;
-}
-
-void writeSummaryLink(OutputList &ol,const char *label,const char *title,
- bool &first)
-{
- if (first)
- {
- ol.writeString(" <div class=\"summary\">\n");
- first=FALSE;
- }
- else
- {
- ol.writeString(" &#124;\n");
- }
- ol.writeString("<a href=\"#");
- ol.writeString(label);
- ol.writeString("\">");
- ol.writeString(title);
- ol.writeString("</a>");
-}
-
-QCString externalLinkTarget()
-{
- static bool extLinksInWindow = Config_getBool("EXT_LINKS_IN_WINDOW");
- if (extLinksInWindow) return "target=\"_blank\" "; else return "";
-}
-
-QCString externalRef(const QCString &relPath,const QCString &ref,bool href)
-{
- QCString result;
- if (!ref.isEmpty())
- {
- QCString *dest = Doxygen::tagDestinationDict[ref];
- if (dest)
- {
- result = *dest;
- int l = result.length();
- if (!relPath.isEmpty() && l>0 && result.at(0)=='.')
- { // relative path -> prepend relPath.
- result.prepend(relPath);
- }
- if (!href) result.prepend("doxygen=\""+ref+":");
- if (l>0 && result.at(l-1)!='/') result+='/';
- if (!href) result.append("\" ");
- }
- }
- else
- {
- result = relPath;
- }
- return result;
-}
-
-/** Writes the intensity only bitmap representated by \a data as an image to
- * directory \a dir using the colors defined by HTML_COLORSTYLE_*.
- */
-void writeColoredImgData(const char *dir,ColoredImgDataItem data[])
-{
- static int hue = Config_getInt("HTML_COLORSTYLE_HUE");
- static int sat = Config_getInt("HTML_COLORSTYLE_SAT");
- static int gamma = Config_getInt("HTML_COLORSTYLE_GAMMA");
- while (data->name)
- {
- QCString fileName;
- fileName=(QCString)dir+"/"+data->name;
- QFile f(fileName);
- if (f.open(IO_WriteOnly))
- {
- ColoredImage img(data->width,data->height,data->content,data->alpha,
- sat,hue,gamma);
- img.save(fileName);
- }
- else
- {
- fprintf(stderr,"Warning: Cannot open file %s for writing\n",data->name);
- }
- Doxygen::indexList.addImageFile(data->name);
- data++;
- }
-}
-
-/** Replaces any markers of the form \#\#AA in input string \a str
- * by new markers of the form \#AABBCC, where \#AABBCC represents a
- * valid color, based on the intensity represented by hex number AA
- * and the current HTML_COLORSTYLE_* settings.
- */
-QCString replaceColorMarkers(const char *str)
-{
- QCString result;
- QCString s=str;
- if (s.isEmpty()) return result;
- static QRegExp re("##[0-9A-Fa-f][0-9A-Fa-f]");
- static const char hex[] = "0123456789ABCDEF";
- static int hue = Config_getInt("HTML_COLORSTYLE_HUE");
- static int sat = Config_getInt("HTML_COLORSTYLE_SAT");
- static int gamma = Config_getInt("HTML_COLORSTYLE_GAMMA");
- int i,l,sl=s.length(),p=0;
- while ((i=re.match(s,p,&l))!=-1)
- {
- result+=s.mid(p,i-p);
- QCString lumStr = s.mid(i+2,l-2);
-#define HEXTONUM(x) (((x)>='0' && (x)<='9') ? ((x)-'0') : \
- ((x)>='a' && (x)<='f') ? ((x)-'a'+10) : \
- ((x)>='A' && (x)<='F') ? ((x)-'A'+10) : 0)
-
- double r,g,b;
- int red,green,blue;
- int level = HEXTONUM(lumStr[0])*16+HEXTONUM(lumStr[1]);
- ColoredImage::hsl2rgb(hue/360.0,sat/255.0,
- pow(level/255.0,gamma/100.0),&r,&g,&b);
- red = (int)(r*255.0);
- green = (int)(g*255.0);
- blue = (int)(b*255.0);
- char colStr[8];
- colStr[0]='#';
- colStr[1]=hex[red>>4];
- colStr[2]=hex[red&0xf];
- colStr[3]=hex[green>>4];
- colStr[4]=hex[green&0xf];
- colStr[5]=hex[blue>>4];
- colStr[6]=hex[blue&0xf];
- colStr[7]=0;
- //printf("replacing %s->%s (level=%d)\n",lumStr.data(),colStr,level);
- result+=colStr;
- p=i+l;
- }
- result+=s.right(sl-p);
- return result;
-}
-
-/** Copies the contents of file with name \a src to the newly created
- * file with name \a dest. Returns TRUE if successful.
- */
-bool copyFile(const QCString &src,const QCString &dest)
-{
- QFile sf(src);
- if (sf.open(IO_ReadOnly))
- {
- QFileInfo fi(src);
- QFile df(dest);
- if (df.open(IO_WriteOnly))
- {
- char *buffer = new char[fi.size()];
- sf.readBlock(buffer,fi.size());
- df.writeBlock(buffer,fi.size());
- df.flush();
- delete[] buffer;
- }
- else
- {
- err("error: could not write to file %s\n",dest.data());
- return FALSE;
- }
- }
- else
- {
- err("error: could not open user specified file %s\n",src.data());
- return FALSE;
- }
- return TRUE;
-}
-
-/** Returns the section of text, in between a pair of markers.
- * Full lines are returned, excluding the lines on which the markers appear.
- */
-QCString extractBlock(const QCString text,const QCString marker)
-{
- QCString result;
- int p=0,i;
- bool found=FALSE;
-
- // find the character positions of the markers
- int m1 = text.find(marker);
- if (m1==-1) return result;
- int m2 = text.find(marker,m1+marker.length());
- if (m2==-1) return result;
-
- // find start and end line positions for the markers
- int l1=-1,l2=-1;
- while (!found && (i=text.find('\n',p))!=-1)
- {
- found = (p<=m1 && m1<i); // found the line with the start marker
- p=i+1;
- }
- l1=p;
- if (found)
- {
- while ((i=text.find('\n',p))!=-1)
- {
- if (p<=m2 && m2<i) // found the line with the end marker
- {
- l2=p;
- break;
- }
- p=i+1;
- }
- }
- //printf("text=[%s]\n",text.mid(l1,l2-l1).data());
- return text.mid(l1,l2-l1);
-}
-
-/** Returns a string representation of \a lang. */
-QCString langToString(SrcLangExt lang)
-{
- switch(lang)
- {
- case SrcLangExt_Unknown: return "Unknown";
- case SrcLangExt_IDL: return "IDL";
- case SrcLangExt_Java: return "Java";
- case SrcLangExt_CSharp: return "C#";
- case SrcLangExt_D: return "D";
- case SrcLangExt_PHP: return "PHP";
- case SrcLangExt_ObjC: return "Objective-C";
- case SrcLangExt_Cpp: return "C++";
- case SrcLangExt_JS: return "Javascript";
- case SrcLangExt_Python: return "Python";
- case SrcLangExt_Fortran: return "Fortran";
- case SrcLangExt_VHDL: return "VHDL";
- case SrcLangExt_XML: return "XML";
- case SrcLangExt_Tcl: return "Tcl";
- case SrcLangExt_Markdown: return "Markdown";
- }
- return "Unknown";
-}
-
-/** Returns the scope separator to use given the programming language \a lang */
-QCString getLanguageSpecificSeparator(SrcLangExt lang,bool classScope)
-{
- if (lang==SrcLangExt_Java || lang==SrcLangExt_CSharp || lang==SrcLangExt_VHDL || lang==SrcLangExt_Python)
- {
- return ".";
- }
- else if (lang==SrcLangExt_PHP && !classScope)
- {
- return "\\";
- }
- else
- {
- return "::";
- }
-}
-
-/** Corrects URL \a url according to the relative path \a relPath.
- * Returns the corrected URL. For absolute URLs no correction will be done.
- */
-QCString correctURL(const QCString &url,const QCString &relPath)
-{
- QCString result = url;
- if (!relPath.isEmpty() &&
- url.left(5)!="http:" && url.left(6)!="https:" &&
- url.left(4)!="ftp:" && url.left(5)!="file:")
- {
- result.prepend(relPath);
- }
- return result;
-}
-
-//---------------------------------------------------------------------------
-
-bool protectionLevelVisible(Protection prot)
-{
- static bool extractPrivate = Config_getBool("EXTRACT_PRIVATE");
- static bool extractPackage = Config_getBool("EXTRACT_PACKAGE");
-
- return (prot!=Private && prot!=Package) ||
- (prot==Private && extractPrivate) ||
- (prot==Package && extractPackage);
-}
-
diff --git a/trunk/src/util.h b/trunk/src/util.h
deleted file mode 100644
index 812122e..0000000
--- a/trunk/src/util.h
+++ /dev/null
@@ -1,407 +0,0 @@
-/******************************************************************************
- *
- *
- *
- * Copyright (C) 1997-2012 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.
- *
- */
-
-#ifndef UTIL_H
-#define UTIL_H
-
-/*! \file util.h
- * \brief A bunch of utility functions.
- */
-
-#include "qtbc.h"
-#include <qlist.h>
-#include <qtextstream.h>
-#include <ctype.h>
-#include "sortdict.h"
-#include "types.h"
-
-//--------------------------------------------------------------------
-
-class ClassDef;
-class FileDef;
-class MemberList;
-class NamespaceDef;
-class FileNameDict;
-class ArgumentList;
-class OutputList;
-class OutputDocInterface;
-class MemberDef;
-class ExampleSDict;
-class ClassSDict;
-class BaseClassList;
-class GroupDef;
-class NamespaceSDict;
-class ClassList;
-class MemberGroupSDict;
-struct TagInfo;
-class MemberNameInfoSDict;
-struct ListItemInfo;
-class PageDef;
-struct SectionInfo;
-class QDir;
-class Definition;
-class BufStr;
-class QFileInfo;
-class QStrList;
-class FTextStream;
-
-//--------------------------------------------------------------------
-
-class TextGeneratorIntf
-{
- public:
- virtual ~TextGeneratorIntf() {}
- virtual void writeString(const char *,bool) const = 0;
- virtual void writeBreak(int indent) const = 0;
- virtual void writeLink(const char *extRef,const char *file,
- const char *anchor,const char *text
- ) const = 0;
-};
-
-class TextGeneratorOLImpl : public TextGeneratorIntf
-{
- public:
- virtual ~TextGeneratorOLImpl() {}
- TextGeneratorOLImpl(OutputDocInterface &od);
- void writeString(const char *s,bool keepSpaces) const;
- void writeBreak(int indent) const;
- void writeLink(const char *extRef,const char *file,
- const char *anchor,const char *text
- ) const;
- private:
- OutputDocInterface &m_od;
-};
-
-//--------------------------------------------------------------------
-
-QCString langToString(SrcLangExt lang);
-QCString getLanguageSpecificSeparator(SrcLangExt lang,bool classScope=FALSE);
-
-//--------------------------------------------------------------------
-
-void linkifyText(const TextGeneratorIntf &ol,
- Definition *scope,
- FileDef *fileScope,
- const char *name,
- const char *text,
- bool autoBreak=FALSE,
- bool external=TRUE,
- bool keepSpaces=FALSE,
- int indentLevel=0
- );
-
-void setAnchors(ClassDef *cd,char id,MemberList *ml,int groupId=-1);
-
-QCString fileToString(const char *name,bool filter=FALSE,bool isSourceCode=FALSE);
-
-QCString dateToString(bool);
-
-bool getDefs(const QCString &scopeName,
- const QCString &memberName,
- const char *,
- MemberDef *&md,
- ClassDef *&cd,
- FileDef *&fd,
- NamespaceDef *&nd,
- GroupDef *&gd,
- bool forceEmptyScope=FALSE,
- FileDef *currentFile=0,
- bool checkCV=FALSE,
- const char *forceTagFile=0
- );
-
-QCString getFileFilter(const char* name,bool isSourceCode);
-
-bool resolveRef(/* in */ const char *scName,
- /* in */ const char *name,
- /* in */ bool inSeeBlock,
- /* out */ Definition **resContext,
- /* out */ MemberDef **resMember,
- /* in */ bool lookForSpecializations = TRUE,
- /* in */ FileDef *currentFile = 0,
- /* in */ bool checkScope = FALSE
- );
-
-bool resolveLink(/* in */ const char *scName,
- /* in */ const char *lr,
- /* in */ bool inSeeBlock,
- /* out */ Definition **resContext,
- /* out */ QCString &resAnchor
- );
-
-//bool generateRef(OutputDocInterface &od,const char *,
-// const char *,bool inSeeBlock,const char * =0);
-
-bool generateLink(OutputDocInterface &od,const char *,
- const char *,bool inSeeBlock,const char *);
-
-void generateFileRef(OutputDocInterface &od,const char *,
- const char *linkTxt=0);
-
-void writePageRef(OutputDocInterface &od,const char *cn,const char *mn);
-
-QCString getCanonicalTemplateSpec(Definition *d,FileDef *fs,const QCString& spec);
-
-bool matchArguments2(Definition *srcScope,FileDef *srcFileScope,ArgumentList *srcAl,
- Definition *dstScope,FileDef *dstFileScope,ArgumentList *dstAl,
- bool checkCV
- );
-
-void mergeArguments(ArgumentList *,ArgumentList *,bool forceNameOverwrite=FALSE);
-
-QCString substituteClassNames(const QCString &s);
-
-QCString substitute(const char *s,const char *src,const char *dst);
-
-QCString clearBlock(const char *s,const char *begin,const char *end);
-
-QCString selectBlock(const QCString& s,const QCString &name,bool which);
-
-QCString resolveDefines(const char *n);
-
-ClassDef *getClass(const char *key);
-
-ClassDef *getResolvedClass(Definition *scope,
- FileDef *fileScope,
- const char *key,
- MemberDef **pTypeDef=0,
- QCString *pTemplSpec=0,
- bool mayBeUnlinkable=FALSE,
- bool mayBeHidden=FALSE,
- QCString *pResolvedType=0);
-
-NamespaceDef *getResolvedNamespace(const char *key);
-
-FileDef *findFileDef(const FileNameDict *fnDict,const char *n,
- bool &ambig);
-
-QCString showFileDefMatches(const FileNameDict *fnDict,const char *n);
-
-int guessSection(const char *name);
-
-inline bool isId(int c)
-{
- return c=='_' || c>=128 || c<0 || isalnum(c);
-}
-
-QCString removeRedundantWhiteSpace(const QCString &s);
-
-QCString argListToString(ArgumentList *al,bool useCanonicalType=FALSE,bool showDefVals=TRUE);
-
-QCString tempArgListToString(ArgumentList *al);
-
-QCString generateMarker(int id);
-
-void writeExample(OutputList &ol,ExampleSDict *el);
-
-QCString stripAnonymousNamespaceScope(const QCString &s);
-
-QCString stripFromPath(const QCString &path);
-
-QCString stripFromIncludePath(const QCString &path);
-
-bool rightScopeMatch(const QCString &scope, const QCString &name);
-
-bool leftScopeMatch(const QCString &scope, const QCString &name);
-
-QCString substituteKeywords(const QCString &s,const char *title,
- const char *projName,const char *projNum,const char *projBrief);
-
-int getPrefixIndex(const QCString &name);
-
-QCString removeAnonymousScopes(const QCString &s);
-
-QCString replaceAnonymousScopes(const QCString &s,const char *replacement=0);
-
-void initClassHierarchy(ClassSDict *cl);
-
-bool hasVisibleRoot(BaseClassList *bcl);
-
-int minClassDistance(const ClassDef *cd,const ClassDef *bcd,int level=0);
-
-QCString convertNameToFile(const char *name,bool allowDots=FALSE,bool allowUnderscore=FALSE);
-
-void extractNamespaceName(const QCString &scopeName,
- QCString &className,QCString &namespaceName,
- bool allowEmptyClass=FALSE);
-
-QCString insertTemplateSpecifierInScope(const QCString &scope,const QCString &templ);
-
-QCString stripScope(const char *name);
-
-QCString convertToHtml(const char *s,bool keepEntities=TRUE);
-
-QCString convertToXML(const char *s);
-
-QCString convertToJSString(const char *s);
-
-QCString getOverloadDocs();
-
-void addMembersToMemberGroup(/* in */ MemberList *ml,
- /* in,out */ MemberGroupSDict **ppMemberGroupSDict,
- /* in */ Definition *context);
-
-int extractClassNameFromType(const QCString &type,int &pos,
- QCString &name,QCString &templSpec,SrcLangExt=SrcLangExt_Unknown);
-
-QCString substituteTemplateArgumentsInString(
- const QCString &name,
- ArgumentList *formalArgs,
- ArgumentList *actualArgs);
-
-ArgumentList *copyArgumentList(const ArgumentList *src);
-
-QList<ArgumentList> *copyArgumentLists(const QList<ArgumentList> *srcLists);
-
-QCString stripTemplateSpecifiersFromScope(const QCString &fullName,
- bool parentOnly=TRUE,
- QCString *lastScopeStripped=0);
-
-QCString resolveTypeDef(Definition *d,const QCString &name,
- Definition **typedefContext=0);
-
-QCString mergeScopes(const QCString &leftScope,const QCString &rightScope);
-
-int getScopeFragment(const QCString &s,int p,int *l);
-
-int filterCRLF(char *buf,int len);
-
-void addRefItem(const QList<ListItemInfo> *sli,const char *prefix,
- const char *key,
- const char *name,const char *title,const char *args);
-
-PageDef *addRelatedPage(const char *name,const QCString &ptitle,
- const QCString &doc,QList<SectionInfo> *anchors,
- const char *fileName,int startLine,
- const QList<ListItemInfo> *sli,
- GroupDef *gd=0,
- TagInfo *tagInfo=0,
- SrcLangExt lang=SrcLangExt_Unknown
- );
-
-QCString escapeCharsInString(const char *name,bool allowDots,bool allowUnderscore=FALSE);
-
-void addGroupListToTitle(OutputList &ol,Definition *d);
-
-void filterLatexString(FTextStream &t,const char *str,
- bool insideTabbing=FALSE,
- bool insidePre=FALSE,
- bool insideItem=FALSE);
-
-QCString rtfFormatBmkStr(const char *name);
-
-QCString linkToText(SrcLangExt lang,const char *link,bool isFileName);
-
-QCString stripExtension(const char *fName);
-
-void replaceNamespaceAliases(QCString &scope,int i);
-
-int isAccessibleFrom(Definition *scope,FileDef *fileScope,Definition *item);
-
-int isAccessibleFromWithExpScope(Definition *scope,FileDef *fileScope,Definition *item,
- const QCString &explicitScopePart);
-
-int computeQualifiedIndex(const QCString &name);
-
-void addDirPrefix(QCString &fileName);
-
-QCString relativePathToRoot(const char *name);
-
-void createSubDirs(QDir &d);
-
-QCString stripPath(const char *s);
-
-bool containsWord(const QCString &s,const QCString &word);
-
-bool findAndRemoveWord(QCString &s,const QCString &word);
-
-QCString stripLeadingAndTrailingEmptyLines(const QCString &s,int &docLine);
-
-//void stringToSearchIndex(const QCString &docUrlBase,const QCString &title,
-// const QCString &str, bool priority=FALSE,
-// const QCString &anchor="");
-
-bool updateLanguageMapping(const QCString &extension,const QCString &parser);
-SrcLangExt getLanguageFromFileName(const QCString fileName);
-void initDefaultExtensionMapping();
-
-MemberDef *getMemberFromSymbol(Definition *scope,FileDef *fileScope,
- const char *n);
-bool checkIfTypedef(Definition *scope,FileDef *fileScope,const char *n);
-
-ClassDef *newResolveTypedef(FileDef *fileScope,MemberDef *md,
- MemberDef **pMemType=0,QCString *pTemplSpec=0,
- QCString *pResolvedType=0,
- ArgumentList *actTemplParams=0);
-
-QCString parseCommentAsText(const Definition *scope,const MemberDef *member,const QCString &doc,const QCString &fileName,int lineNr);
-
-QCString transcodeCharacterStringToUTF8(const QCString &input);
-
-QCString recodeString(const QCString &str,const char *fromEncoding,const char *toEncoding);
-
-QCString extractAliasArgs(const QCString &args,int pos);
-
-int countAliasArguments(const QCString argList);
-
-//QCString replaceAliasArguments(const QCString &aliasValue,const QCString &argList);
-
-QCString resolveAliasCmd(const QCString aliasCmd);
-QCString expandAlias(const QCString &aliasName,const QCString &aliasValue);
-
-void writeTypeConstraints(OutputList &ol,Definition *d,ArgumentList *al);
-
-QCString convertCharEntitiesToUTF8(const QCString &s);
-
-bool usingTreeIndex();
-void stackTrace();
-
-bool readInputFile(const char *fileName,BufStr &inBuf);
-QCString filterTitle(const QCString &title);
-
-bool patternMatch(const QFileInfo &fi,const QStrList *patList);
-
-void writeSummaryLink(OutputList &ol,const char *label,const char *title,
- bool &first);
-
-QCString externalLinkTarget();
-QCString externalRef(const QCString &relPath,const QCString &ref,bool href);
-int nextUtf8CharPosition(const QCString &utf8Str,int len,int startPos);
-
-struct ColoredImgDataItem
-{
- const char *name;
- unsigned short width;
- unsigned short height;
- unsigned char *content;
- unsigned char *alpha;
-};
-
-void writeColoredImgData(const char *dir,ColoredImgDataItem data[]);
-QCString replaceColorMarkers(const char *str);
-
-bool copyFile(const QCString &src,const QCString &dest);
-QCString extractBlock(const QCString text,const QCString marker);
-
-QCString correctURL(const QCString &url,const QCString &relPath);
-
-QCString processMarkup(const QCString &s);
-
-bool protectionLevelVisible(Protection prot);
-
-#endif
-
diff --git a/trunk/src/version.h b/trunk/src/version.h
deleted file mode 100644
index 4752520..0000000
--- a/trunk/src/version.h
+++ /dev/null
@@ -1,23 +0,0 @@
-/******************************************************************************
- *
- *
- *
- * Copyright (C) 1997-2012 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.
- *
- */
-
-#ifndef VERSION_H
-#define VERSION_H
-
-extern char versionString[];
-
-#endif
diff --git a/trunk/src/vhdlcode.h b/trunk/src/vhdlcode.h
deleted file mode 100644
index e5df98e..0000000
--- a/trunk/src/vhdlcode.h
+++ /dev/null
@@ -1,18 +0,0 @@
-#ifndef VHDLCODE_H
-#define VHDLCODE_H
-
-#include "qtbc.h"
-#include <stdio.h>
-
-class CodeOutputInterface;
-class FileDef;
-class MemberDef;
-
-void parseVhdlCode(CodeOutputInterface &,const char *,const QCString &,
- bool ,const char *,FileDef *fd=0,
- int startLine=-1,int endLine=-1,bool inlineFragment=FALSE,
- MemberDef *memberDef=0,bool showLineNumbers=TRUE);
-void resetVhdlCodeParserState();
-void codeFreeVhdlScanner();
-
-#endif
diff --git a/trunk/src/vhdlcode.l b/trunk/src/vhdlcode.l
deleted file mode 100644
index 10b2018..0000000
--- a/trunk/src/vhdlcode.l
+++ /dev/null
@@ -1,1606 +0,0 @@
-/******************************************************************************
- *
- * Copyright (C) 1997-2012 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.
- *
- */
-/******************************************************************************
- * Parser for syntax hightlighting and references for vhdl subset
- * written by M. Kreis
- * supports VHDL-87
- * does not support VHDL-AMS
- ******************************************************************************/
-
-%{
-
-/*
- * includes
- */
-#include <stdio.h>
-#include <assert.h>
-#include <ctype.h>
-#include <qregexp.h>
-#include <qdir.h>
-#include <qstringlist.h>
-
-#include "qtbc.h"
-#include "entry.h"
-#include "doxygen.h"
-#include "message.h"
-#include "outputlist.h"
-#include "util.h"
-#include "membername.h"
-#include "searchindex.h"
-#include "vhdldocgen.h"
-#include "arguments.h"
-
-#define YY_NEVER_INTERACTIVE 1
-
-// Toggle for some debugging info
-//#define DBG_CTX(x) fprintf x
-#define DBG_CTX(x) do { } while(0)
-
-
-/* -----------------------------------------------------------------
- * statics
- */
-
-// ----------------- <vhdl> ----------------------------------
-
-//static bool isPackBody=FALSE;
-//static bool isStartMap;
-static bool isFuncProto=FALSE;
-static bool isComponent=FALSE;
-static bool isPackageBody=FALSE;
-static bool isProto = FALSE;
-
-static QCString g_PrevString;
-static QCString g_CurrClass;
-static QDict<QCString>g_vhdlKeyDict;
-static QCString g_tempClass;
-static QCString g_tempComp;
-static QCString g_PortMapComp;
-static MemberDef *g_vhdlMember;
-static QCString g_FuncProto;
-
-//-----------------------------------------------------------
-
-static CodeOutputInterface * g_code;
-static QCString g_curClassName;
-static QCString g_parmType;
-static QCString g_parmName;
-static const char * g_inputString; //!< the code fragment as text
-static int g_inputPosition; //!< read offset during parsing
-static int g_inputLines; //!< number of line in the code fragment
-static int g_yyLineNr; //!< current line number
-static bool g_needsTermination;
-
-static QCString g_exampleName;
-static QCString g_exampleFile;
-
-static QCString g_type;
-static QCString g_name;
-static QCString g_args;
-static QCString g_classScope;
-
-static QCString g_CurrScope;
-
-static FileDef * g_sourceFileDef;
-static Definition * g_currentDefinition;
-static MemberDef * g_currentMemberDef;
-static bool g_includeCodeFragment;
-static const char * g_currentFontClass;
-
-static bool g_lexInit = FALSE;
-static int g_braceCount=0;
-
-
-static void writeFont(const char *s,const char* text);
-static void generateMemLink(CodeOutputInterface &ol,QCString &clName,QCString& memberName);
-static bool writeColoredWord(QCString& word );
-static void generateClassOrGlobalLink(CodeOutputInterface &ol,const char *clName, bool typeOnly=FALSE);
-static void endFontClass();
-static void startFontClass(const char *s);
-//-------------------------------------------------------------------
-
-
-static void setCurrentDoc(const QCString &name,const QCString &base,const QCString &anchor="")
-{
- if (Doxygen::searchIndex)
- {
- Doxygen::searchIndex->setCurrentDoc(name,base,anchor);
- }
-}
-
-static bool checkVhdlString(QCString &name)
-{
- if (name.isEmpty()) return FALSE;
- static QRegExp regg("[\\s\"]");
-
- int len=name.length();
- if (name.at(0)=='"' && name.at(len-1)=='"' && len > 2)
- {
- QStringList qrl=QStringList::split(regg,name,FALSE);
- if (VhdlDocGen::isNumber((QCString)qrl[0]))
- {
- g_code->codify("\"");
- startFontClass("vhdllogic");
- QCString mid=name.mid(1,len-2); //" 1223 "
- g_code->codify(mid.data());
- endFontClass();
- g_code->codify("\"");
- }
- else
- {
- startFontClass("keyword");
- g_code->codify(name.data());
- endFontClass();
- }
- return TRUE;
- }
-
- if (VhdlDocGen::isNumber(name))
- {
- startFontClass("vhdllogic");
- g_code->codify(name.data());
- endFontClass();
- return TRUE;
- }
- return FALSE;
-}
-
-static void addToSearchIndex(const char *text)
-{
- if (Doxygen::searchIndex)
- {
- Doxygen::searchIndex->addWord(text,FALSE);
- }
-}
-
-
-/*! start a new line of code, inserting a line number if g_sourceFileDef
- * is TRUE. If a definition starts at the current line, then the line
- * number is linked to the documentation of that definition.
- */
-static void startCodeLine()
-{
- //if (g_currentFontClass) { g_code->endFontClass(); }
- if (g_sourceFileDef)
- {
- //QCString lineNumber,lineAnchor;
- //lineNumber.sprintf("%05d",g_yyLineNr);
- //lineAnchor.sprintf("l%05d",g_yyLineNr);
- // if ((g_yyLineNr % 500) == 0)
- // fprintf(stderr,"\n starting Line %d:",g_yyLineNr);
- Definition *d = g_sourceFileDef->getSourceDefinition(g_yyLineNr);
- //printf("startCodeLine %d d=%s\n", g_yyLineNr,d ? d->name().data() : "<null>");
- if (!g_includeCodeFragment && d)
- {
- g_currentDefinition = d;
- g_currentMemberDef = g_sourceFileDef->getSourceMember(g_yyLineNr);
- if (!g_tempComp.isEmpty() && g_currentMemberDef )
- {
- //ClassDef *cf=VhdlDocGen::getClass(g_tempComp.data());
- QCString nn=g_currentMemberDef->name();
- MemberDef* mdeff=VhdlDocGen::findMember(g_tempComp,nn);
- if (mdeff)
- {
- g_currentMemberDef=mdeff;
- }
- }
-
- g_parmType.resize(0);
- g_parmName.resize(0);
- QCString lineAnchor;
- lineAnchor.sprintf("l%05d",g_yyLineNr);
- if (g_currentMemberDef)
- {
- g_code->writeLineNumber(g_currentMemberDef->getReference(),
- g_currentMemberDef->getOutputFileBase(),
- g_currentMemberDef->anchor(),g_yyLineNr);
- setCurrentDoc(g_currentMemberDef->qualifiedName(),
- g_sourceFileDef->getSourceFileBase(),
- lineAnchor);
- }
- else if (d->isLinkableInProject())
- {
- g_code->writeLineNumber(d->getReference(),
- d->getOutputFileBase(),
- 0,g_yyLineNr);
- setCurrentDoc(d->qualifiedName(),
- g_sourceFileDef->getSourceFileBase(),
- lineAnchor);
- }
- }
- else
- {
- g_code->writeLineNumber(0,0,0,g_yyLineNr);
- }
- }
- g_code->startCodeLine();
- if (g_currentFontClass)
- {
- g_code->startFontClass(g_currentFontClass);
- }
-}
-
-static void endFontClass();
-static void endCodeLine()
-{
- endFontClass();
- g_code->endCodeLine();
-}
-
-static void nextCodeLine()
-{
- const char *fc = g_currentFontClass;
- endCodeLine();
- if (g_yyLineNr<g_inputLines)
- {
- g_currentFontClass = fc;
- startCodeLine();
- }
-}
-
-/*! writes a word to the output.
- * If curr_class is defined, the word belongs to a class
- * and will be linked.
- */
-
-static void writeWord(const char *word,const char* curr_class=0,bool classLink=FALSE)
-{
- bool found=FALSE;
- QCString temp;
- QCString tclass(curr_class);
- QCString ttt(word);
- if (ttt.isEmpty()) return;
- for (unsigned int j=0;j<ttt.length();j++)
- {
- char c=ttt.at(j);
- if (c==' '|| c==',' || c==';' || c==':' || c=='(' || c==')' || c=='\r' || c=='\t' || c=='.')
- {
- if (found)
- {
- if (!writeColoredWord(temp)) // is it a keyword ?
- {
- //if (VhdlDocGen::findKeyWord(temp))
- // writeFont("vhdlkeyword",temp.data());
- //printf("writeWord: %s\n",temp.data());
- if (!tclass.isEmpty())
- {
- if (!classLink)
- {
- generateMemLink(*g_code,tclass,temp);
- }
- else
- {
- generateClassOrGlobalLink(*g_code,temp);
- }
- }
- else
- {
- if (!checkVhdlString(temp))
- g_code->codify(temp.data());
- }
- }
- temp.resize(0);
- found=FALSE;
- }
-
- char cc[2];
- cc[0]=c;
- cc[1]=0;
- g_code->codify(cc);
- }
- else
- {
- found=TRUE;
- temp+=c;
- }
- } // for
-
- if (!temp.isEmpty())
- {
- if (!writeColoredWord(temp))
- {
- if (!tclass.isEmpty())
- {
- if (!classLink)
- {
- generateMemLink(*g_code,tclass,temp); // generateMemLink(*g_code,g_CurrClass,left);
- }
- else
- {
- generateClassOrGlobalLink(*g_code,temp);
- }
- }
- else
- {
- QCString qc(temp.data());
- if (VhdlDocGen::isNumber(qc)){
- startFontClass("vhdllogic");
- g_code->codify(temp.data());
- endFontClass();
- }
- else
- g_code->codify(temp.data());
- }
- }
- }
-}// writeWord
-
-
-/*! write a code fragment `text' that may span multiple lines, inserting
- * line numbers for each line.
- */
-static void codifyLines(const char *text,const char *cl=0,bool classlink=FALSE)
-{
- if (text==0) return;
- //printf("codifyLines(%d,\"%s\")\n",g_yyLineNr,text);
- const char *p=text,*sp=p;
- char c;
- bool done=FALSE;
- while (!done)
- {
- sp=p;
- while ((c=*p++) && c!='\n') {}
- if (c=='\n')
- {
- g_yyLineNr++;
- QCString line = sp;
- line = line.left(p-sp-1);
- //*(p-1)='\0';
- //g_code->codify(sp);
- writeWord(line,cl,classlink);
- nextCodeLine();
- }
- else
- {
- //g_code->codify(sp);
- writeWord(sp,cl,classlink);
- done=TRUE;
- }
- }
-}
-
-/*! writes a link to a fragment \a text that may span multiple lines, inserting
- * line numbers for each line. If \a text contains newlines, the link will be
- * split into multiple links with the same destination, one for each line.
- */
-static void writeMultiLineCodeLink(CodeOutputInterface &ol,
- const char *ref,const char *file,
- const char *anchor,const char *text,
- const char *tooltip)
-{
- bool done=FALSE;
- char *p=(char *)text;
- while (!done)
- {
- char *sp=p;
- char c;
- while ((c=*p++) && c!='\n') {}
- if (c=='\n')
- {
- g_yyLineNr++;
- *(p-1)='\0';
- // printf("writeCodeLink(%s,%s,%s,%s)\n",ref,file,anchor,sp);
- ol.writeCodeLink(ref,file,anchor,sp,tooltip);
- nextCodeLine();
- }
- else
- {
- ol.writeCodeLink(ref,file,anchor,sp,tooltip);
- done=TRUE;
- }
- }
-}
-
-static void setParameterList(MemberDef *md)
-{
- g_classScope = md->getClassDef() ? md->getClassDef()->name().data() : "";
- LockingPtr<ArgumentList> al = md->argumentList();
- if (al==0) return;
- Argument *a = al->first();
- while (a)
- {
- g_parmName = a->name.copy();
- g_parmType = a->type.copy();
- int i = g_parmType.find('*');
- if (i!=-1) g_parmType = g_parmType.left(i);
- i = g_parmType.find('&');
- if (i!=-1) g_parmType = g_parmType.left(i);
- g_parmType.stripPrefix("const ");
- g_parmType=g_parmType.stripWhiteSpace();
- // g_theVarContext.addVariable(g_parmType,g_parmName);
- a = al->next();
- }
-}
-
-
-/*! writes a link to a function or procedure
- */
-
-static void generateFuncLink(CodeOutputInterface &ol,MemberDef* mdef)
-{
-
- //printf("generateFuncLink(FuncName=%s)\n",mdef->name().data());
- QCString memberName=mdef->name();
-
- if (mdef && mdef->isLinkable()) // is it a linkable class
- {
- writeMultiLineCodeLink(ol,mdef->getReference(),
- mdef->getOutputFileBase(),
- mdef->anchor(),
- mdef->name(),
- mdef->briefDescriptionAsTooltip());
- addToSearchIndex(memberName);
- return;
- }
- ol.linkableSymbol(g_yyLineNr,memberName,0,g_currentMemberDef?g_currentMemberDef:g_currentDefinition);
- codifyLines(memberName.data());
- addToSearchIndex(memberName);
-} // generateFuncLink
-
-
-static void generateMemLink(CodeOutputInterface &ol,QCString &clName,QCString& memberName)
-{
- if (memberName.isEmpty()) return;
- if (clName.isEmpty())
- {
- codifyLines(memberName.data());
-
- return;
- }
-
- QCString className=clName;
-
- MemberDef *md=0;
- //MemberDef *comp=0;
- //bool isLocal=FALSE;
-
- md=VhdlDocGen::findMember(className,memberName);
- ClassDef *po=VhdlDocGen::getClass(className.data());
-
- if (md==0 && po && (VhdlDocGen::VhdlClasses)po->protection()==VhdlDocGen::PACKBODYCLASS)
- {
- QCString temp=className;//.stripPrefix("_");
- temp.stripPrefix("_");
- md=VhdlDocGen::findMember(temp,memberName);
- }
-
- if (md && md->isLinkable()) // is it a linkable class
- {
- writeMultiLineCodeLink(ol,md->getReference(),
- md->getOutputFileBase(),
- md->anchor(),
- memberName,
- md->briefDescriptionAsTooltip());
- addToSearchIndex(memberName);
- return;
- }
- // nothing found, just write out the word
- ol.linkableSymbol(g_yyLineNr,memberName,0,g_currentMemberDef?g_currentMemberDef:g_currentDefinition);
- codifyLines(memberName.data());
- addToSearchIndex(memberName);
-}// generateMemLink
-
-
-static void generateClassOrGlobalLink(CodeOutputInterface &ol,const char *clName, bool /*typeOnly*/)
-{
- QCString className=clName;
-
- if (className.isEmpty()) return;
-
- ClassDef *cd=0;
- //MemberDef *md=0;
- //bool isLocal=FALSE;
- className.stripPrefix("_");
- cd = getClass(className.data());
- while (cd)
- {
- //className.stripPrefix("_");
- QCString temp(clName);
- temp.stripPrefix("_");
- if (cd && cd->isLinkable()) // is it a linkable class
- {
- //if ((VhdlDocGen::VhdlClasses)cd->protection()==VhdlDocGen::ARCHITECTURECLASS)
- //{
- // temp=VhdlDocGen::getClassName(cd);
- //}
- ol.linkableSymbol(g_yyLineNr,temp,cd,
- g_currentMemberDef ?
- g_currentMemberDef :
- g_currentDefinition);
- writeMultiLineCodeLink(ol,cd->getReference(),
- cd->getOutputFileBase(),
- cd->anchor(),
- temp,
- cd->briefDescriptionAsTooltip());
- addToSearchIndex(className);
- return;
- }
- Definition *d = cd->getOuterScope();
- if (d && d->definitionType()==Definition::TypeClass)
- {
- cd = (ClassDef*)d;
- }
- else
- {
- cd = 0;
- }
- }
-
- // nothing found, just write out the word
- ol.linkableSymbol(g_yyLineNr,clName,0,g_currentMemberDef?g_currentMemberDef:g_currentDefinition);
- codifyLines(clName);
- addToSearchIndex(clName);
-}// generateClasss or global link
-
-
-/*! counts the number of lines in the input */
-static int countLines()
-{
- const char *p=g_inputString;
- char c;
- int count=1;
- while ((c=*p))
- {
- p++ ;
- if (c=='\n') count++;
- }
- if (p>g_inputString && *(p-1)!='\n')
- { // last line does not end with a \n, so we add an extra
- // line and explicitly terminate the line after parsing.
- count++,
- g_needsTermination=TRUE;
- }
- return count;
-}
-
-static void endFontClass()
-{
- if (g_currentFontClass)
- {
- g_code->endFontClass();
- g_currentFontClass=0;
- }
-}
-
-static void startFontClass(const char *s)
-{
- if (s==0) return;
- endFontClass();
- g_code->startFontClass(s);
- g_currentFontClass=s;
-}
-
-static void writeFont(const char *s,const char* text)
-{
- if (s==0 || text==0) return;
- //printf("writeFont(%d,\"%s\")\n",g_yyLineNr,text);
- g_code->startFontClass(s);
- g_code->codify(text);
- g_code->endFontClass();
-}
-
-//----------------------------------------------------------------------------
-
-static void appStringLower(QCString& qcs,const char* text)
-{
- qcs.resize(0);
- qcs.append(text);
- //qcs=qcs.lower();
- qcs=qcs.stripWhiteSpace();
-}
-
-//static void appString(QCString& qcs,const char* text)
-//{
-// qcs.resize(0);
-// qcs.append(text);
-//}
-
-static QCString g_temp;
-
-/* writes and links a port map statement */
-static void codifyMapLines(char *text)
-{
- if (text==0) return;
- g_temp.resize(0);
- //bool dot=FALSE;
- int wordCounter=0;
- QCString ctemp;
- //printf("codifyLines(%d,\"%s\")\n",g_yyLineNr,text);
- char *p=text; //,*sp=p;
- char c;
- bool done=FALSE;
- while (!done)
- {
- //sp=p;
- while ((c=*p++) && c!='\n' && c!=':' && c != ' ' && c != '(' && c!='\0' && c!='\t')
- {
- if (c!=0x9)
- g_temp+=c;
- }
- if (c=='\0') return;
- if (!g_temp.isEmpty()) wordCounter++;
-
- if (!g_temp.isEmpty())
- {
- // different kinds of component instantiations
- // xxx:yyy (generic/port) map(
- // xxx:(entity/component/configuration) yyy (generic/port) map(
- // xxx: entity yyy(zzz) (generic/port) map(
- if (wordCounter==2 || wordCounter==3)
- {
- QCString q=g_temp.lower(); // consider (upper/lower) cases
- if (q=="entity" || q=="component" || q=="configuration" || q=="port" || q=="generic")
- {
- generateMemLink(*g_code,g_CurrClass,g_temp);
- }
- else
- {
- g_PortMapComp=g_temp;
- generateClassOrGlobalLink(*g_code,g_temp);
- }
- }
- else
- {
- generateMemLink(*g_code,g_CurrClass,g_temp);
- }
- }
- ctemp.fill(c,1);
- codifyLines(ctemp.data());
- ctemp.resize(0);
- g_temp.resize(0);
- }//while
-}//codifymaplines
-
-/*
-* writes a function|procedure prototype and links the function|procedure name
-*/
-
-static void writeFuncProto()
-{
- QList<Argument> ql;
- QCString name,ret;
- VhdlDocGen::parseFuncProto(g_FuncProto,ql,name,ret,FALSE);
-
- if (name.isEmpty())
- {
- codifyLines(g_FuncProto.data(),g_CurrClass.data());
- return;
- }
- QStringList qlist=QStringList::split(name,g_FuncProto,FALSE);
- QCString temp=(QCString)qlist[0];
- codifyLines(temp.data(),g_CurrClass.data());
- g_FuncProto.stripPrefix(temp.data());
- temp.resize(0);
- temp=g_CurrClass;
- if (isPackageBody)
- {
- temp.stripPrefix("_");// _{package body name}
- }
- MemberDef *mdef=VhdlDocGen::findFunction(ql,name,temp,FALSE);
-
- if (mdef)
- {
- generateFuncLink(*g_code,mdef);
- g_FuncProto.stripPrefix(name.data());
- codifyLines(g_FuncProto.data(),g_CurrClass.data());
- }
- else
- {
- codifyLines(g_FuncProto.data(),g_CurrClass.data());
- }
-}// writeFuncProto
-
-/* writes a process prototype to the ouput */
-
- static void writeProcessProto(){
- codifyLines(g_FuncProto.data(),g_CurrClass.data());
- g_vhdlKeyDict.clear();
-}// writeProcessProto
-
-/* writes a keyword */
-
-static bool writeColoredWord(QCString& word )
-{
- QCString qcs=word.lower();
- QCString *ss=VhdlDocGen::findKeyWord(qcs);
- if (ss)
- {
- writeFont(ss->data(),word.data());
- return TRUE;
- }
- return FALSE;
-}
-
-#undef YY_INPUT
-#define YY_INPUT(buf,result,max_size) result=yyread(buf,max_size);
-
-static int yyread(char *buf,int max_size)
-{
- int c=0;
- while( c < max_size && g_inputString[g_inputPosition] )
- {
- *buf = g_inputString[g_inputPosition++] ;
- c++; buf++;
- }
- return c;
-}
-
-%}
-
-
-B [ \t]
-BN [ \t\n\r]
-STRING ["][^"\n]*["]
-NAME [a-z_A-Z][ a-z_A-Z0-9]*
-FUNCNAME [a-z_A-Z"][a-z_A-Z0-9+*"/=<>-]*
-ID "$"?[a-z_A-Z][a-z_A-Z0-9]*
-SPECSIGN [:;, +*&\/=<>'\t]*
-DIGITSS [0-9]+|[0-9]+("#")*[0-9_a-fA-F\+\.\-]+("#")*
-ALLTYPESMAP {B}*[_a-zA-Z0-9. ]+{BN}*
-ALLTYPESMAP1 {BN}*[_a-zA-Z0-9.() ]+{BN}*
-
-ARCHITECTURE ^{B}*("architecture"){BN}+{FUNCNAME}{BN}+("of"){BN}+{FUNCNAME}
-PROCESS ({BN}*{FUNCNAME}{BN}*[:]+{BN}*("process"){BN}*[(]*)|[^a-zA-Z]("process "|"process("){BN}*[ (]*|[^a-zA-Z]("process"){BN}+
-
-END1 {B}*("end "){BN}+("if"|"case"|"loop"|"generate"|"for")
-END2 [^a-zA-Z_]("end"){BN}*[;]
-END3 {BN}*[^a-zA-Z]("end"){BN}+{FUNCNAME}{BN}*[;]
-END4 {B}*("end"){BN}+"function"{BN}+{FUNCNAME}{BN}*[;]
-ENDEFUNC {END3}|{END4}|{END2}
-
-KEYWORD ("new"|"event"|"break"|"case"|"end"|"loop"|"else"|"for"|"goto"|"if"|"return"|"generate"|"is"|"while"|"in")
-TYPEKW ^{B}*("type"|"subtype"|"constant"|"attribute"|"signal"|"variable","alias","configuration")
-FUNC ^{B}*("function"|"procedure"){BN}*{FUNCNAME}{BN}*("(")
-
-ARITHOP "+"|"-"|"/"|"*"|"%"|"/="|":="
-ASSIGNOP "="|"*="|"/="|"%="|"+="|"-="|"<<="|">>="|"&="|"^="|"|="
-LOGICOP "=="|"!="|">"|"<"|">="|"<="|"&&"|"||"|"!"
-BITOP "&"|"|"|"^"|"<<"|">>"|"~"
-OPERATOR {ARITHOP}|{ASSIGNOP}|{LOGICOP}|{BITOP}
-
-PORT {B}*("port"){BN}*("(")
-GENERIC {B}*("generic"){BN}*("(")
-
-BRACEOPEN [(]{1}
-BRACECLOSE [)]{1}
-
-TEXTT {B}*"--"[^\n]*
-
-MAPCOMPONENT1 ({ALLTYPESMAP}[:]{ALLTYPESMAP}{TEXTT}*{BN}+("port"|"generic"){BN}+("map"){BN}*("("){1})
-MAPCOMPONENT2 {BN}*("port"|"generic"){BN}+("map"){BN}*("("){1}
-MAPCOMPONENT3 ({ALLTYPESMAP}[:]{BN}*{ALLTYPESMAP1}{TEXTT}*{BN}+("port"|"generic"){BN}+("map"){BN}*("("){1})
-MAPCOMPONENT4 ({ALLTYPESMAP}[:]{BN}*("entity"|"component"|"configuration"){BN}+{ALLTYPESMAP1}{TEXTT}*{BN}*("port"|"generic"){BN}*("map"){BN}*("("){1})
-
-XILINX "INST"|"NET"|"PIN"|"BLKNM"|"BUFG"|"COLLAPSE"|"CPLD"|"COMPGRP"|"CONFIG"|"CONFIG_MODE"|"COOL_CLK"|"DATA_GATE"|"DCI_VALUE"|"DISABLE"|"DRIVE"|"DROP_SPEC"|"ENABLE"|"FAST"|"FEEDBACK"|"FILE"|"FLOAT"|"FROM-THRU-TO"|"FROM-TO"|"HBLKNM"|"HU_SET"|"INREG"|"IOB"|"IOBDELAY"|"IOSTANDARD"|"KEEP"|"KEEPER"|"LOC"|"LOCATE"|"LOCK_PINS"|"MAP"|"MAXDELAY"|"MAXPT"|"MAXSKEW"|"NODELAY"|"NOREDUCE"|"OFFSET"|"OPEN_DRAIN"|"OPT_EFFORT"|"OPTIMIZE"|"PERIOD"|"PIN"|"PRIORITY"|"PROHIBIT"|"PULLDOWN"|"PULLUP"|"PWR_MODE"|"REG"|"RLOC"|"RLOC_ORIGIN"|"RLOC_RANGE"|"SAVE NET"|"FLAG"|"SYSTEM_JITTER"|"TEMPERATURE"|"TIMEGRP"|"TIMESPEC"|"VOLTAGE"
-
-%option noyywrap
-%option nounput
-
-%x Bases
-%x ParseType
-%x ParseFuncProto
-%x ParseComponent
-%x ParsePackage
-%x ParseProcessProto
-%x ClassName
-%x PackageName
-%x ClassVar
-%x ClassesName
-%x Map
-%x Body
-
-%%
-
-. {
- BEGIN(Bases);
- }
-
-<Map>{BRACEOPEN} {
- g_braceCount++;
- writeFont("vhdlchar",vhdlcodeYYtext);
- BEGIN(Map);
- }
-
-<Map>[^()\n,--]* { /* write and link a port map lines */
- QCString tt(vhdlcodeYYtext);
- VhdlDocGen::deleteAllChars(tt,',');
- QRegExp r("=>");
- QStringList ql=QStringList::split(r,tt,FALSE);
- if (ql.count()>=2)
- {
- unsigned int index=0;
- QCString t1=(QCString)ql[0];
- char cc=t1.at(index);
- while (cc==' ' || cc=='\t')
- {
- char c2[2];
- c2[0]=cc;
- c2[1]=0;
- g_code->codify(c2);
- index++;
- if (index>=t1.size()) break;
- cc=t1.at(index);
- }
-
- QCString s1=t1;
- s1=s1.stripWhiteSpace();
-
- // if (!g_PortMapComp.isEmpty())
- generateMemLink(*g_code,g_PortMapComp,s1);
- while (index++<t1.size())
- {
- char cc=t1.at(index);
- if (cc==' ' || cc=='\t')
- {
- char c2[2];
- c2[0]=cc;
- c2[1]=0;
- g_code->codify(c2);
- }
- }
- codifyLines("=>");
- index=0;
- QCString s2=(QCString)ql[1];
- t1=s2;
- cc=t1.at(index);
- while (cc==' ' || cc=='\t')
- {
- char c2[2];
- c2[0]=cc;
- c2[1]=0;
- g_code->codify(c2);
- index++;
- if (index>=t1.size()) break;
- cc=t1.at(index);
- }
- s2=s2.stripWhiteSpace();
- if (!checkVhdlString(s2))
- generateMemLink(*g_code,g_CurrClass,s2);
- while (index++<t1.size())
- {
- if (t1.at(index)==' ')
- {
- g_code->codify(" ");
- }
- }
- }
- else
- {
- codifyLines(vhdlcodeYYtext,g_CurrClass.data());
- }
- BEGIN(Map);
- }
-
-<Map>"\n"|"," {
- codifyLines(vhdlcodeYYtext);
- BEGIN(Map);
- }
-
-<Map>{BRACECLOSE} {
- g_braceCount--;
- writeFont("vhdlchar",vhdlcodeYYtext);
- if (g_braceCount==0)
- {
- BEGIN(Bases);
- }
- }
-
-<ParseFuncProto>{NAME} {
- QCString tmp(vhdlcodeYYtext);
- tmp=tmp.stripWhiteSpace();
- appStringLower(g_PrevString,vhdlcodeYYtext);
- g_vhdlKeyDict.insert(g_PrevString,new QCString(g_PrevString.data()));
- if (!writeColoredWord(tmp))
- {
- generateMemLink(*g_code,g_CurrClass,tmp);
- }
- BEGIN(Bases);
- }
-
-<ParseType>{STRING} {
- QCString qcs(vhdlcodeYYtext);
- VhdlDocGen::deleteAllChars(qcs,'"');
- VhdlDocGen::deleteAllChars(qcs,' ');
- if (VhdlDocGen::isNumber(qcs))
- writeFont("vhdllogic",vhdlcodeYYtext);
- else
- writeFont("keyword",vhdlcodeYYtext);
- }
-
-<ParseType>"\n" {
- g_FuncProto.append(vhdlcodeYYtext);
- if (isProto)
- {
- codifyLines(vhdlcodeYYtext);
- }
- BEGIN(ParseType);
- }
-
-
-<ParseType>{TEXTT} {
- g_FuncProto.append(vhdlcodeYYtext);
- if (isProto)
- {
- writeFont("keyword",vhdlcodeYYtext);
- }
- BEGIN(ParseType);
- }
-
-<ParseType>{ENDEFUNC} {
- QRegExp regg("[\\s]");
- QCString tt(vhdlcodeYYtext);
- codifyLines(vhdlcodeYYtext,g_CurrClass.data());
- tt=tt.lower();
- VhdlDocGen::deleteAllChars(tt,';');
- tt.stripWhiteSpace();
- QStringList ql=QStringList::split(regg,tt,FALSE);
- int index=ql.findIndex(QCString("if"))+1;
- index+=ql.findIndex(QCString("case"))+1;
- index+=ql.findIndex(QCString("loop"))+1;
- index+=ql.findIndex(QCString("generate"))+1;
- if (index==0)
- {
- BEGIN(Bases);
- }
- else
- {
- BEGIN(ParseType);
- }
- }
-
-<ParseType>{END1} {
- codifyLines(vhdlcodeYYtext,g_CurrClass.data());
- g_vhdlKeyDict.clear();
- }
-
-<ParseType>^{B}*("begin "|"begin") {
- codifyLines(vhdlcodeYYtext,g_CurrClass.data());
- isFuncProto=FALSE;
- }
-
-<ParseType>{SPECSIGN} {
- g_FuncProto.append(vhdlcodeYYtext);
- if (isProto)
- {
- codifyLines(vhdlcodeYYtext,g_CurrClass.data());
- }
- }
-
-<ParseType>["_a-zA-Z0-9]* {
- QCString val(vhdlcodeYYtext);
- g_FuncProto.append(vhdlcodeYYtext);
- appStringLower(g_PrevString,vhdlcodeYYtext);
-
- if (isFuncProto && g_braceCount==0)
- {
- g_vhdlKeyDict.insert(g_PrevString,new QCString(g_PrevString.data()));
- }
-
- if (isProto)
- {
- if (!writeColoredWord(val))
- {
- if (!isFuncProto && !g_vhdlKeyDict.find(g_PrevString))
- {
- val=val.stripWhiteSpace();
- if (VhdlDocGen::isNumber(val))
- {
- startFontClass("vhdllogic");
- codifyLines(vhdlcodeYYtext,g_CurrClass.data());
- endFontClass();
- }
- else
- generateMemLink(*g_code,g_CurrClass,val);
- }
- else
- {
- codifyLines(vhdlcodeYYtext,g_CurrClass.data());
- }
- }
- }
- BEGIN(ParseType);
- }
-
-<ParseType>{BRACEOPEN} {
- g_braceCount++;
- g_FuncProto+='(';
- if (isProto)
- {
- writeFont("vhdlchar",vhdlcodeYYtext);
- }
- BEGIN(ParseType);
- }
-
-<ParseType>{BRACECLOSE} {
- g_braceCount--;
- g_FuncProto+=')';
- if (isProto)
- {
- writeFont("vhdlchar",vhdlcodeYYtext);
- }
- if (g_braceCount==0 && !isProto)// && !isPackageBody)
- {
- isProto=TRUE;
- appStringLower(g_PrevString,vhdlcodeYYtext);
- writeFuncProto();
- BEGIN(Bases);
- }
- if (isPackageBody)
- {
- BEGIN(ParseType);
- }
- }
-
-
-<ClassesName>{FUNCNAME} {
- QDict<QCString> mem;
- appStringLower(g_PrevString,vhdlcodeYYtext);
- g_CurrClass.resize(0);
- g_CurrClass.append(vhdlcodeYYtext);
- g_CurrClass=g_CurrClass.stripWhiteSpace();
-
- if (!writeColoredWord(g_CurrScope))
- {
- generateClassOrGlobalLink(*g_code,vhdlcodeYYtext);
- }
- else
- {
- codifyLines(vhdlcodeYYtext,g_CurrClass.data());
- }
- BEGIN(Bases);
- }
-
-
-<ParseComponent>{BRACEOPEN} {
- g_braceCount++;
- g_code->codify(vhdlcodeYYtext);
- }
-
-
-<ParseComponent>{BRACECLOSE} {
- g_braceCount--;
- g_code->codify(vhdlcodeYYtext);
- if (g_braceCount==0 && !isComponent)
- {
- g_tempComp.resize(0);
- BEGIN(Bases);
- }
- else
- {
- BEGIN(ParseComponent);
- }
- }
-
-<ParseComponent>{B}*"-" {
- if (strlen(vhdlcodeYYtext)>=2) // found text ?
- {
- writeFont("keyword",vhdlcodeYYtext);
- }
- else
- {
- writeFont("vhdlchar",vhdlcodeYYtext);
- }
- }
-
-<ParseComponent>{SPECSIGN} {
- codifyLines(vhdlcodeYYtext);
- }
-
-
-
-<ParseComponent>"\n"|" " {
- codifyLines(vhdlcodeYYtext);
- }
-
-<ParseComponent>{DIGITSS} {
- startFontClass("vhdllogic");
- codifyLines(vhdlcodeYYtext);
- endFontClass();
- }
-
-<ParseComponent>{PORT} {
- codifyLines(vhdlcodeYYtext);
- g_braceCount=1;
- isComponent=FALSE;
- }
-
-<ParseComponent>{GENERIC} {
- codifyLines(vhdlcodeYYtext);
- g_braceCount=1;
- }
-
-<ParseComponent>[_a-zA_Z][_a-zA-Z0-9]* {
- QCString temp(vhdlcodeYYtext);
- appStringLower(g_PrevString,vhdlcodeYYtext);
- if (!checkVhdlString(temp)){
- if (!writeColoredWord(g_PrevString))
- {
- generateMemLink(*g_code,g_tempComp,temp);
- }
- }
- }
-
-<ParseComponent>{STRING} {
- QCString temp(vhdlcodeYYtext);
- if (!checkVhdlString(temp))
- codifyLines(vhdlcodeYYtext);
- }
-
-
-<ParseProcessProto>[^()]* {
- g_FuncProto.append(vhdlcodeYYtext);
- }
-
-
-
-<ParseProcessProto>{BRACEOPEN} {
- g_FuncProto.append(vhdlcodeYYtext);
- g_braceCount++;
- }
-
-<ParseProcessProto>{BRACECLOSE} {
- g_FuncProto.append(vhdlcodeYYtext);
- g_braceCount--;
- if (g_braceCount==0)
- {
- writeProcessProto();
- BEGIN(Bases);
- }
- }
-
-<ParsePackage>[^:;]* { //found package
- QCString temp(vhdlcodeYYtext);
- QStringList strl=QStringList::split(".",temp,FALSE);
-
- if (strl.count()>2)
- {
- QCString s1=(QCString)strl[0];
- QCString s2=(QCString)strl[1];
- QCString s3=(QCString)strl[2];
- s1.append(".");
- s3.prepend(".");
- codifyLines(s1.data(),g_CurrClass.data());
- ClassDef *cd=VhdlDocGen::getPackageName(s2);
- if (cd)
- {
- generateClassOrGlobalLink(*g_code,s2.data());
- }
- else
- {
- codifyLines(s2.data());
- }
- codifyLines(s3.data());
- }
- else
- {
- writeFont("keywordflow",vhdlcodeYYtext);
- }
- BEGIN(Bases);
- }
-
-<Bases>{MAPCOMPONENT1}|{MAPCOMPONENT2}|{MAPCOMPONENT3}|{MAPCOMPONENT4} { // found port or generic map
- QCString tt(vhdlcodeYYtext);
- /*
- if (tt.contains(':',FALSE))
- {
- isStartMap=TRUE;
- }
- else
- {
- isStartMap=FALSE;
- }
- */
- int j=tt.find('.');
-
- if (j>0)
- {
- QCString left=tt.left(j+1);
- codifyLines(left.data());
- tt=tt.right(tt.length()-j-1);
- left=VhdlDocGen::getIndexWord(tt.data(),0);
- if (!left.isEmpty())
- {
- if (left.contains('('))
- {
- j=left.find('(',FALSE);
- QCString name=left.left(j);
- generateClassOrGlobalLink(*g_code,name.data());
- g_PortMapComp=name;
- name=tt.right(tt.length()-name.length());
- codifyLines(name.data());
- }
- else
- {
- generateClassOrGlobalLink(*g_code,left.data());
- tt.stripPrefix(left.data()); //=tt.right(tt.length()-left.length()-1);
-
- g_PortMapComp=left;
- codifyLines(tt.data());
- }
- }
- }
- else
- {
- if (tt.contains(':',FALSE))
- codifyMapLines(tt.data());
- else
- codifyLines(tt.data());
- }
- g_braceCount=1;
- BEGIN(Map);
- }
-
-<Bases>^{B}*("component"){BN}+{FUNCNAME} { // found component
- appStringLower(g_PrevString,vhdlcodeYYtext);
- // writeFont("keywordflow",VhdlDocGen::getIndexWord(vhdlcodeYYtext,0).data());
- // writeFont("vhdlkeyword"," ");
- QCString temp=VhdlDocGen::getIndexWord(vhdlcodeYYtext,1);
- temp=temp.stripWhiteSpace();
- VhdlDocGen::deleteAllChars(temp,'\n');
- g_tempComp=temp;
- codifyLines(vhdlcodeYYtext,temp.data(),TRUE);
- g_braceCount=0;
-
- //if (getClass(temp.data()))
- // generateClassOrGlobalLink(*g_code,temp.data());
- //else
- // generateMemLink(*g_code,g_CurrClass,temp);
-
- isComponent=TRUE;
- BEGIN(ParseComponent);
- }
-
-
-
-<Bases>{ARCHITECTURE} { // found architecture
- g_PortMapComp.resize(0);
- // writeFont("vhdlkeyword",VhdlDocGen::getIndexWord(vhdlcodeYYtext,0).data());
- // writeFont("vhdlkeyword"," ");
- // writeFont("vhdlchar",VhdlDocGen::getIndexWord(vhdlcodeYYtext,1).data());
- // writeFont("vhdlkeyword"," ");
- // writeFont("vhdlkeyword",VhdlDocGen::getIndexWord(vhdlcodeYYtext,2).data());
- // writeFont("vhdlkeyword"," ");
- //QCString temp=VhdlDocGen::getIndexWord(vhdlcodeYYtext,1);
- //temp=temp.stripWhiteSpace();
- //temp+=("-");
- //temp+=VhdlDocGen::getIndexWord(vhdlcodeYYtext,3);
- QCString temp = VhdlDocGen::getIndexWord(vhdlcodeYYtext,3);
- temp+="::";
- temp+=VhdlDocGen::getIndexWord(vhdlcodeYYtext,1);
- g_CurrClass=temp;
- VhdlDocGen::deleteAllChars(temp,'\n');
- codifyLines(vhdlcodeYYtext,temp.data(),TRUE);
- //generateClassOrGlobalLink(*g_code,temp.data());
- isPackageBody=FALSE;
- BEGIN(ClassName);
- }
-
-
-<Bases>^{B}*("package "){BN}*("body"){BN}*{FUNCNAME} { // found package body
- QCString ss(vhdlcodeYYtext);
- QCString temp=VhdlDocGen::getIndexWord(vhdlcodeYYtext,2);
- QStringList ql=QStringList::split(temp,ss,FALSE);
- QCString ll=(QCString)ql[0];
- codifyLines(ll.data(),g_CurrClass.data());
- temp=temp.stripWhiteSpace();
- temp.prepend("_");
- generateClassOrGlobalLink(*g_code,temp.data());
- g_CurrClass.resize(0);
- g_CurrClass=temp;
- isProto=FALSE;
- isPackageBody=TRUE;
- // BEGIN(ClassesName);
- }
-
-<Bases>{PROCESS} { // found process
- isFuncProto=TRUE;
- g_FuncProto.resize(0);
- g_FuncProto.append(vhdlcodeYYtext);
- g_vhdlKeyDict.clear();
- appStringLower(g_PrevString,vhdlcodeYYtext);
- if (g_PrevString.contains('('))
- {
- g_braceCount=1;
- BEGIN(ParseProcessProto);
- }
- else
- {
- writeProcessProto();
- }
- }
-
-<Bases>("end"){BN}+("process") { // end of process
- isFuncProto=FALSE;
- codifyLines(vhdlcodeYYtext);
- BEGIN(Bases);
- }
-
-
-<Bases>^{B}*("begin "|"begin") {
- isFuncProto=FALSE;
- writeFont("vhdlkeyword",vhdlcodeYYtext);
- }
-
-<Bases>^{B}*("use"|"library"){BN}+ { //found package or library
- writeFont("vhdlkeyword",vhdlcodeYYtext);
- BEGIN(ParsePackage);
- }
-
-
-<Bases>^{B}*("use"){BN}+("configuration")[^\n]* {
- codifyLines(vhdlcodeYYtext);
- }
-
-
-
-<Bases>{FUNC} { // found function|procedure
- g_vhdlKeyDict.clear();
- g_FuncProto.resize(0);
- isProto=FALSE;
- g_FuncProto.append(vhdlcodeYYtext);
- g_braceCount=1;
- BEGIN(ParseType);
- }
-
-
-
-<Bases>^{B}*("entity"|"package"){BN}+ {
- appStringLower(g_PrevString,vhdlcodeYYtext);
- writeFont("keywordflow",vhdlcodeYYtext);
- isPackageBody=FALSE;
- BEGIN(ClassesName);
- }
-
-
-<Bases>{KEYWORD} { // found keyword
- QCString qcs(vhdlcodeYYtext);
- if (!writeColoredWord(qcs))
- {
- startFontClass("vhdlchar");
- g_code->codify(vhdlcodeYYtext);
- endFontClass();
- }
- }
-
-
-<Bases>{ID} {
- appStringLower(g_PrevString,vhdlcodeYYtext);
- QCString temp(vhdlcodeYYtext);
- temp=temp.stripWhiteSpace();
-
- if (!writeColoredWord(temp))
- {
- startFontClass("vhdlchar");
- generateMemLink(*g_code,g_CurrClass,temp);
- endFontClass();
- }
- }
-
-<Bases,ParseComponent>{DIGITSS} {
- startFontClass("vhdllogic");
- codifyLines(vhdlcodeYYtext);
- endFontClass();
- }
-
-<Bases>^{B}*("use"){BN}+("entity"|"component")[^\n]* {
- codifyLines(vhdlcodeYYtext,g_CurrClass.data(),TRUE);
- }
-
-
-<Bases>{TYPEKW} {
- codifyLines(vhdlcodeYYtext);
- if (isFuncProto)
- {
- BEGIN(ParseFuncProto);
- }
- else
- {
- BEGIN(Bases);
- }
- }
-
-<Bases>{OPERATOR} {
- startFontClass("vhdlchar");
- g_code->codify(vhdlcodeYYtext);
- endFontClass();
- }
-
-<Bases>","|"."|":"|"'"|"("|")" {
- startFontClass("vhdlchar");
- g_code->codify(vhdlcodeYYtext);
- endFontClass();
- }
-
-<Bases>{STRING} {
- QCString qcs(vhdlcodeYYtext);
- VhdlDocGen::deleteAllChars(qcs,'"');
- VhdlDocGen::deleteAllChars(qcs,' ');
-
- if (VhdlDocGen::isNumber(qcs))
- writeFont("vhdllogic",vhdlcodeYYtext);
- else
- writeFont("keyword",vhdlcodeYYtext);
- }
-
-<Bases>{B}*"#"[^\n]* {
- writeFont("keyword",vhdlcodeYYtext);
- }
-
-<Bases>^{B}*{XILINX}[^\n]* {
- writeWord(yytext);
- //codifyLines(vhdlcodeYYtext,g_CurrClass.data(),TRUE);
- }
-
-<Bases>^{B}*"set_"[^\n]* {
- writeWord(yytext);
- }
-
-<*>\n {
- codifyLines(vhdlcodeYYtext);
- BEGIN(Bases);
- }
-
-<*>. {
- g_code->codify(vhdlcodeYYtext);
- }
-
-<*>\n{TEXTT} { // found normal or special comment on its own line
- QCString text(vhdlcodeYYtext);
- int i=text.find("--");
- if (text.mid(i,3)=="--!" && // hide special comment
- Config_getBool("STRIP_CODE_COMMENTS"))
- {
- g_yyLineNr++; // skip complete line
- }
- else // normal comment
- {
- startFontClass("keyword");
- codifyLines(text);
- endFontClass();
- }
- }
-<*>{TEXTT} { // found normal or special comment after something
- QCString text(vhdlcodeYYtext);
- int i=text.find("--");
- if (text.mid(i,3)=="--!" &&
- Config_getBool("STRIP_CODE_COMMENTS"))
- {
- // hide special comment
- }
- else // normal comment
- {
- startFontClass("keyword");
- codifyLines(text);
- endFontClass();
- }
- }
-
-
-%%
-
-/*@ ----------------------------------------------------------------------------
- */
-
-void resetVhdlCodeParserState()
-{
- g_vhdlKeyDict.setAutoDelete(TRUE);
- g_vhdlKeyDict.clear();
-}
-
-void parseVhdlCode(CodeOutputInterface &od,const char *className,const QCString &s,
- bool exBlock, const char *exName,FileDef *fd,
- int startLine,int endLine,bool inlineFragment,
- MemberDef *memberDef,bool)
-{
- //printf("***parseCode() exBlock=%d exName=%s fd=%p\n",exBlock,exName,fd);
- if (s.isEmpty()) return;
- if (memberDef)
- {
- ClassDef *dd=memberDef->getClassDef();
- if (dd) g_CurrClass=dd->className();
- startLine--;
- }
- resetVhdlCodeParserState();
- g_code = &od;
- g_inputString = s;
- g_inputPosition = 0;
- g_currentFontClass = 0;
- g_needsTermination = FALSE;
-
- if (endLine!=-1)
- g_inputLines = endLine+1;
- else
- g_inputLines = countLines();
-
- if (startLine!=-1)
- g_yyLineNr = startLine;
- else
- g_yyLineNr = 1;
-
-
- // g_theCallContext.clear();
- g_classScope = className;
- g_exampleName = exName;
- g_sourceFileDef = fd;
- if (exBlock && fd==0)
- {
- // create a dummy filedef for the example
- g_sourceFileDef = new FileDef("",exName);
- }
- if (g_sourceFileDef)
- {
- setCurrentDoc(g_sourceFileDef->name(),g_sourceFileDef->getSourceFileBase());
- }
- g_currentDefinition = 0;
- g_currentMemberDef = 0;
- g_vhdlMember=0;
- if (!g_exampleName.isEmpty())
- {
- g_exampleFile = convertNameToFile(g_exampleName+"-example");
- }
- g_includeCodeFragment = inlineFragment;
- if (!memberDef)
- {
- startCodeLine();
- }
- // g_type.resize(0);
- // g_name.resize(0);
- // g_args.resize(0);
- g_parmName.resize(0);
- g_parmType.resize(0);
- if (memberDef)
- {
- setParameterList(memberDef);
- }
- int iLine=countLines();
- vhdlcodeYYrestart( vhdlcodeYYin );
- BEGIN( Bases );
- vhdlcodeYYlex();
- g_lexInit=TRUE;
- if (g_needsTermination)
- {
- endCodeLine();
- }
- if (exBlock && g_sourceFileDef)
- {
- // delete the temporary file definition used for this example
- delete g_sourceFileDef;
- g_sourceFileDef=0;
- }
- assert(g_yyLineNr==iLine);
- return;
-}
-
-void codeFreeVhdlScanner()
-{
-#if defined(YY_FLEX_SUBMINOR_VERSION)
- if (g_lexInit)
- {
- vhdlcodeYYlex_destroy();
- }
-#endif
-}
-
-#if !defined(YY_FLEX_SUBMINOR_VERSION)
-extern "C" { // some bogus code to keep the compiler happy
- void vhdlcodeYYdummy() { yy_flex_realloc(0,0); }
-}
-#elif YY_FLEX_SUBMINOR_VERSION<33
-#error "You seem to be using a version of flex newer than 2.5.4 but older than 2.5.33. These versions do NOT work with doxygen! Please use version <=2.5.4 or >=2.5.33 or expect things to be parsed wrongly!"
-#endif
-
-
-
-
diff --git a/trunk/src/vhdldocgen.cpp b/trunk/src/vhdldocgen.cpp
deleted file mode 100644
index 93f5699..0000000
--- a/trunk/src/vhdldocgen.cpp
+++ /dev/null
@@ -1,2785 +0,0 @@
-/******************************************************************************
- *
- * Copyright (C) 1997-2012 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.
- *
- */
-/******************************************************************************
- * Parser for VHDL subset
- * written by M. Kreis
- * supports VHDL-87/93/2002
- * does not support VHDL-AMS
- ******************************************************************************/
-
-// global includes
-#include <stdio.h>
-#include <stdlib.h>
-#include <assert.h>
-#include <string.h>
-#include <qcstring.h>
-#include <qfileinfo.h>
-#include <qstringlist.h>
-#include "memberdef.h"
-/* --------------------------------------------------------------- */
-
-// local includes
-#include "vhdldocgen.h"
-#include "message.h"
-#include "config.h"
-#include "doxygen.h"
-#include "util.h"
-#include "language.h"
-#include "commentscan.h"
-#include "index.h"
-#include "definition.h"
-#include "searchindex.h"
-#include "outputlist.h"
-#include "parserintf.h"
-#include "vhdlscanner.h"
-#include "layout.h"
-#include "arguments.h"
-
-
-#define theTranslator_vhdlType VhdlDocGen::trVhdlType
-
-static QDict<QCString> g_vhdlKeyDict0(17,FALSE);
-static QDict<QCString> g_vhdlKeyDict1(17,FALSE);
-static QDict<QCString> g_vhdlKeyDict2(17,FALSE);
-
-static QDict<QCString> g_xilinxUcfDict(17,FALSE);
-
-static void initUCF(Entry* root,const char* type,QCString & qcs,int line,QCString & fileName,QCString & brief);
-static void writeUCFLink(const MemberDef* mdef,OutputList &ol);
-static void assignConfiguration(ConfNode* ,QCString);
-static void assignBinding(ConfNode* conf,QCString label);
-static void addInstance(ClassDef* entity, ClassDef* arch, ClassDef *inst,Entry *cur,ClassDef* archBind=NULL);
-
-#if 0
-static ConfNode* findConfiguration(QCString config)
-{
- QList<ConfNode> confList= getVhdlConfiguration();
- uint size=confList.count();
- if (size==0) return NULL;
-
- for (uint i=0;i<size;i++)
- {
- ConfNode* conf= (ConfNode *)confList.at(i);
- QCString entity=VhdlDocGen::getIndexWord(conf->confVhdl.data(),1);
- if (entity==config)
- {
- return conf;
- }
- }
-
- return NULL;
-}
-#endif
-
-VhdlDocGen::VhdlDocGen()
-{
-}
-
-VhdlDocGen::~VhdlDocGen()
-{
-}
-
-void VhdlDocGen::init()
-{
-
- // vhdl keywords inlcuded VHDL 2008
-const char* g_vhdlKeyWordMap0[] =
-{
- "abs","access","after","alias","all","and","architecture","array","assert","assume","assume_guarantee","attribute",
- "begin","block","body","buffer","bus",
- "case","component","configuration","constant","context","cover",
- "default","disconnect","downto",
- "else","elsif","end","entity","exit",
- "fairness","file","for","force","function",
- "generate","generic","group","guarded",
- "if","impure","in","inertial","inout","is",
- "label","library","linkage","literal","loop",
- "map","mod",
- "nand","new","next","nor","not","null",
- "of","on","open","or","others","out",
- "package","parameter","port","postponed","procedure","process","property","proctected","pure",
- "range","record","register","reject","release","restrict","restrict_guarantee","rem","report","rol","ror","return",
- "select","sequence","severity","signal","shared","sla","sll","sra","srl","strong","subtype",
- "then","to","transport","type",
- "unaffected","units","until","use",
- "variable","vmode","vprop","vunit",
- "wait","when","while","with",
- "xor","xnor",
- 0
-};
-
-// type
-const char* g_vhdlKeyWordMap1[] =
-{
- "natural","unsigned","signed","string","boolean", "bit","bit_vector","character",
- "std_ulogic","std_ulogic_vector","std_logic","std_logic_vector","integer",
- "real","float","ufixed","sfixed","time",0
-};
-
-// logic
-const char* g_vhdlKeyWordMap2[] =
-{
- "abs","and","or","not","mod", "xor","rem","xnor","ror","rol","sla",
- "sll",0
-};
-
- int j=0;
- g_vhdlKeyDict0.setAutoDelete(TRUE);
- g_vhdlKeyDict1.setAutoDelete(TRUE);
- g_vhdlKeyDict2.setAutoDelete(TRUE);
-
- j=0;
- while (g_vhdlKeyWordMap0[j])
- {
- g_vhdlKeyDict0.insert(g_vhdlKeyWordMap0[j],
- new QCString(g_vhdlKeyWordMap0[j]));
- j++;
- }
-
- j=0;
- while (g_vhdlKeyWordMap1[j])
- {
- g_vhdlKeyDict1.insert(g_vhdlKeyWordMap1[j],
- new QCString(g_vhdlKeyWordMap1[j]));
- j++;
- }
-
- j=0;
- while (g_vhdlKeyWordMap2[j])
- {
- g_vhdlKeyDict2.insert(g_vhdlKeyWordMap2[j],
- new QCString(g_vhdlKeyWordMap2[j]));
- j++;
- }
-
-}// buildKeyMap
-
-/*!
- * returns the color of a keyword
- */
-
-QCString* VhdlDocGen::findKeyWord(const QCString& word)
-{
- static QCString g_vhdlkeyword("vhdlkeyword");
- static QCString g_vhdltype("comment");
- static QCString g_vhdllogic("vhdllogic");
-
- if (word.isEmpty() || word.at(0)=='\0') return 0;
- //printf("VhdlDocGen::findKeyWord(%s)\n",word.data());
-
- if (g_vhdlKeyDict0.find(word.lower()))
- return &g_vhdlkeyword;
-
- if (g_vhdlKeyDict1.find(word.lower()))
- return &g_vhdltype;
-
- if (g_vhdlKeyDict2.find(word.lower()))
- return &g_vhdllogic;
-
- return 0;
-}
-
-/*!
- * returns the parsed entry at line xxx
- */
-
-
-
-bool found =FALSE;
-static Entry eMerge;
-
-ClassDef *VhdlDocGen::getClass(const char *name)
-{
- if (name==0 || name[0]=='\0') return 0;
-
- ClassDef *cd=0;
- QCString temp(name);
- //temp=temp.lower();
- temp=temp.stripWhiteSpace();
- cd= Doxygen::classSDict->find(temp.data());
- return cd;
-}
-
-
-
-
-ClassDef* VhdlDocGen::getPackageName(const QCString & name)
-{
- ClassDef* cd=0;
- QStringList ql=QStringList::split(".",name,FALSE);
- cd=getClass(name);
-
- return cd;
-}
-
-MemberDef* VhdlDocGen::findMember(const QCString& className, const QCString& memName)
-{
- QDict<QCString> packages(17,FALSE);
- packages.setAutoDelete(TRUE);
- ClassDef* cd;
- MemberDef *mdef=0;
-
- cd=getClass(className);
- //printf("VhdlDocGen::findMember(%s,%s)=%p\n",className.data(),memName.data(),cd);
- if (cd==0) return 0;
-
- mdef=VhdlDocGen::findMemberDef(cd,memName,MemberList::variableMembers);
- if (mdef) return mdef;
- mdef=VhdlDocGen::findMemberDef(cd,memName,MemberList::pubMethods);
- if (mdef) return mdef;
-
- // nothing found so far
- // if we are an architecture or package body search in entitiy
-
- if ((VhdlDocGen::VhdlClasses)cd->protection()==VhdlDocGen::ARCHITECTURECLASS ||
- (VhdlDocGen::VhdlClasses)cd->protection()==VhdlDocGen::PACKBODYCLASS)
- {
- Definition *d = cd->getOuterScope();
- // searching upper/lower case names
-
- QCString tt=d->name();
- ClassDef *ecd =getClass(tt);
- if (!ecd)
- {
- tt=tt.upper();
- ecd =getClass(tt);
- }
- if (!ecd)
- {
- tt=tt.lower();
- ecd =getClass(tt);
- }
-
- if (ecd) //d && d->definitionType()==Definition::TypeClass)
- {
- //ClassDef *ecd = (ClassDef*)d;
- mdef=VhdlDocGen::findMemberDef(ecd,memName,MemberList::variableMembers);
- if (mdef) return mdef;
- mdef=VhdlDocGen::findMemberDef(cd,memName,MemberList::pubMethods);
- if (mdef) return mdef;
- }
- //cd=getClass(getClassName(cd));
- //if (!cd) return 0;
- }
- // nothing found , so we are now searching all included packages
- VhdlDocGen::findAllPackages(className,packages);
- //cd=getClass(className.data());
- if ((VhdlDocGen::VhdlClasses)cd->protection()==VhdlDocGen::ARCHITECTURECLASS ||
- (VhdlDocGen::VhdlClasses)cd->protection()==VhdlDocGen::PACKBODYCLASS)
- {
- Definition *d = cd->getOuterScope();
-
- QCString tt=d->name();
- ClassDef *ecd =getClass(tt);
- if (!ecd)
- {
- tt=tt.upper();
- ecd =getClass(tt);
- }
- if (!ecd)
- {
- tt=tt.lower();
- ecd =getClass(tt);
- }
-
- if (ecd) //d && d->definitionType()==Definition::TypeClass)
- {
- VhdlDocGen::findAllPackages(ecd->className(),packages);
- }
- }
-
- QDictIterator<QCString> packli(packages);
- QCString *curString;
- for (packli.toFirst();(curString=packli.current());++packli)
- {
- if (curString)
- {
- cd=VhdlDocGen::getPackageName(*curString);
- if (!cd)
- {
- *curString=curString->upper();
- cd=VhdlDocGen::getPackageName(*curString);
- }
- if (!cd)
- {
- *curString=curString->lower();
- cd=VhdlDocGen::getPackageName(*curString);
- }
- }
- if (cd)
- {
- mdef=VhdlDocGen::findMemberDef(cd,memName,MemberList::variableMembers);
- if (mdef) return mdef;
- mdef=VhdlDocGen::findMemberDef(cd,memName,MemberList::pubMethods);
- if (mdef) return mdef;
- }
- } // for
- return 0;
-}//findMember
-
-/**
- * This function returns the entity|package
- * in which the key (type) is found
- */
-
-MemberDef* VhdlDocGen::findMemberDef(ClassDef* cd,const QCString& key,MemberList::ListType type)
-{
- // return cd->getMemberByName(key);//does not work
- MemberDef *md=0;
-
- MemberList *ml= cd->getMemberList(type);
- if (ml==0) return 0;
-
- MemberListIterator fmni(*ml);
-
- for (fmni.toFirst();(md=fmni.current());++fmni)
- {
- if (stricmp(key.data(),md->name().data())==0)
- {
- return md;
- }
- }
- return 0;
-}//findMemberDef
-
-/*!
- * finds all included packages of an Entity or Package
- */
-
-void VhdlDocGen::findAllPackages(const QCString& className,QDict<QCString>& qdict)
-{
- ClassDef *cdef=getClass(className);
- if (cdef)
- {
- MemberList *mem=cdef->getMemberList(MemberList::variableMembers);
- MemberDef *md;
-
- if (mem)
- {
- MemberListIterator fmni(*mem);
- for (fmni.toFirst();(md=fmni.current());++fmni)
- {
- if (VhdlDocGen::isPackage(md))
- {
- QCString *temp1=new QCString(md->name().data());
- //*temp1=temp1->lower();
- QCString p(md->name().data());
- //p=p.lower();
- ClassDef* cd=VhdlDocGen::getPackageName(*temp1);
- if (cd)
- {
- QCString *ss=qdict.find(*temp1);
- if (ss==0)
- {
- qdict.insert(p,temp1);
- QCString tmp=cd->className();
- VhdlDocGen::findAllPackages(tmp,qdict);
- }
- else delete temp1;
- }
- else delete temp1;
- }
- }//for
- }//if
- }//cdef
-}// findAllPackages
-
-/*!
- * returns the function with the matching argument list
- * is called in vhdlcode.l
- */
-
-MemberDef* VhdlDocGen::findFunction(const QList<Argument> &ql,
- const QCString& funcname,
- const QCString& package, bool /*type*/)
-{
- MemberDef* mdef=0;
- //int funcType;
- ClassDef *cdef=getClass(package.data());
- if (cdef==0) return 0;
-
- //if (type)
- // funcType=VhdlDocGen::PROCEDURE;
- //else
- // funcType=VhdlDocGen::FUNCTION;
-
- MemberList *mem=cdef->getMemberList(MemberList::pubMethods);
-
- if (mem)
- {
- MemberListIterator fmni(*mem);
- for (fmni.toFirst();(mdef=fmni.current());++fmni)
- {
- QCString mname=mdef->name();
- if ((VhdlDocGen::isProcedure(mdef) || VhdlDocGen::isVhdlFunction(mdef)) && (VhdlDocGen::compareString(funcname,mname)==0))
- {
- LockingPtr<ArgumentList> alp = mdef->argumentList();
-
- // ArgumentList* arg2=mdef->getArgumentList();
- if (alp==0) break;
- ArgumentListIterator ali(*alp.pointer());
- ArgumentListIterator ali1(ql);
-
- if (ali.count() != ali1.count()) break;
-
- Argument *arg,*arg1;
- int equ=0;
-
- for (;(arg=ali.current());++ali)
- {
- arg1=ali1.current(); ++ali1;
- equ+=abs(VhdlDocGen::compareString(arg->type,arg1->type));
-
- QCString s1=arg->type;
- QCString s2=arg1->type;
- VhdlDocGen::deleteAllChars(s1,' ');
- VhdlDocGen::deleteAllChars(s2,' ');
- equ+=abs(VhdlDocGen::compareString(s1,s2));
- s1=arg->attrib;
- s2=arg1->attrib;
- VhdlDocGen::deleteAllChars(s1,' ');
- VhdlDocGen::deleteAllChars(s2,' ');
- equ+=abs(VhdlDocGen::compareString(s1,s2));
- // printf("\n 1. type [%s] name [%s] attrib [%s]",arg->type,arg->name,arg->attrib);
- // printf("\n 2. type [%s] name [%s] attrib [%s]",arg1->type,arg1->name,arg1->attrib);
- } // for
- if (equ==0) return mdef;
- }//if
- }//for
- }//if
- return mdef;
-} //findFunction
-
-
-
-
-/*!
- * returns the class title+ref
- */
-
-QCString VhdlDocGen::getClassTitle(const ClassDef *cd)
-{
- QCString pageTitle;
- if (cd==0) return "";
- pageTitle+=cd->displayName();
- pageTitle=VhdlDocGen::getClassName(cd);
- int ii=cd->protection();
- pageTitle+=" ";
- pageTitle+=theTranslator_vhdlType(ii+2,TRUE);
- pageTitle+=" ";
- return pageTitle;
-} // getClassTitle
-
-/* returns the class name without their prefixes */
-
-QCString VhdlDocGen::getClassName(const ClassDef* cd)
-{
- QCString temp;
- if (cd==0) return "";
-
- if ((VhdlDocGen::VhdlClasses)cd->protection()==VhdlDocGen::PACKBODYCLASS)
- {
- temp=cd->name();
- temp.stripPrefix("_");
- return temp;
- }
- //if ((VhdlDocGen::VhdlClasses)cd->protection()==VhdlDocGen::ARCHITECTURECLASS)
- //{
- // QStringList qlist=QStringList::split("-",cd->className(),FALSE);
- // if (qlist.count()>1)
- // return (QCString)qlist[1];
- // return "";
- //}
- return substitute(cd->className(),"::",".");
-}
-
-/*!
- * writes an inline link form entity|package to architecture|package body and vice verca
- */
-
-void VhdlDocGen::writeInlineClassLink(const ClassDef* cd ,OutputList& ol)
-{
- QList<QCString> ql;
- ql.setAutoDelete(TRUE);
- QCString nn=cd->className();
- int ii=(int)cd->protection()+2;
-
- QCString type;
- if (ii==VhdlDocGen::ENTITY)
- type+=theTranslator_vhdlType(VhdlDocGen::ARCHITECTURE,TRUE);
- else if (ii==VhdlDocGen::ARCHITECTURE)
- type+=theTranslator_vhdlType(VhdlDocGen::ENTITY,TRUE);
- else if (ii==VhdlDocGen::PACKAGE_BODY)
- type+=theTranslator_vhdlType(VhdlDocGen::PACKAGE,TRUE);
- else if (ii==VhdlDocGen::PACKAGE)
- type+=theTranslator_vhdlType(VhdlDocGen::PACKAGE_BODY,TRUE);
- else
- type+="";
-
- //type=type.lower();
- type+=" >> ";
- ol.disable(OutputGenerator::RTF);
- ol.disable(OutputGenerator::Man);
- ol.lineBreak();
- ol.lineBreak();
-
- if (ii==VhdlDocGen::PACKAGE_BODY)
- {
- nn.stripPrefix("_");
- cd=getClass(nn.data());
- }
- else if (ii==VhdlDocGen::PACKAGE)
- {
- nn.prepend("_");
- cd=getClass(nn.data());
- }
- else if (ii==VhdlDocGen::ARCHITECTURE)
- {
- QStringList qlist=QStringList::split("-",nn,FALSE);
- nn=qlist[1];
- cd=VhdlDocGen::getClass(nn.data());
- }
-
- QCString opp;
- if (ii==VhdlDocGen::ENTITY)
- {
- VhdlDocGen::findAllArchitectures(ql,cd);
- int j=ql.count();
- for (int i=0;i<j;i++)
- {
- QCString *temp=ql.at(i);
- QStringList qlist=QStringList::split("-",*temp,FALSE);
- QCString s1=(QCString)qlist[0];
- QCString s2=(QCString)qlist[1];
- s1.stripPrefix("_");
- if (j==1) s1.resize(0);
- ClassDef*cc = getClass(temp->data());
- if (cc)
- {
- VhdlDocGen::writeVhdlLink(cc,ol,type,s2,s1);
- }
- }
- }
- else
- {
- VhdlDocGen::writeVhdlLink(cd,ol,type,nn,opp);
- }
-
- ol.enable(OutputGenerator::Man);
- ol.enable(OutputGenerator::RTF);
-
-}// write
-
-/*
- * finds all architectures which belongs to an entiy
- */
-void VhdlDocGen::findAllArchitectures(QList<QCString>& qll,const ClassDef *cd)
-{
- ClassDef *citer;
- ClassSDict::Iterator cli(*Doxygen::classSDict);
- for ( ; (citer=cli.current()) ; ++cli )
- {
- QCString jj=citer->className();
- if (cd != citer && jj.contains('-')!=-1)
- {
- QStringList ql=QStringList::split("-",jj,FALSE);
- QCString temp=(QCString)ql[1];
- if (stricmp(cd->className().data(),temp.data())==0)
- {
- QCString *cl=new QCString(jj.data());
- qll.insert(0,cl);
- }
- }
- }// for
-}//findAllArchitectures
-
-ClassDef* VhdlDocGen::findArchitecture(const ClassDef *cd)
-{
- ClassDef *citer;
- QCString nn=cd->name();
- ClassSDict::Iterator cli(*Doxygen::classSDict);
-
- for ( ; (citer=cli.current()) ; ++cli )
- {
- QCString jj=citer->name();
- QStringList ql=QStringList::split(":",jj,FALSE);
- if (ql.count()>1)
- {
- if ((QCString)ql[0]==nn )
- {
- return citer;
- }
- }
- }
- return 0;
-}
-/*
- * writes the link entity >> .... or architecture >> ...
- */
-
-void VhdlDocGen::writeVhdlLink(const ClassDef* ccd ,OutputList& ol,QCString& type,QCString& nn,QCString& behav)
-{
- if (ccd==0) return;
- QCString temp=ccd->getOutputFileBase();
- ol.startBold();
- ol.docify(type.data());
- ol.endBold();
- nn.stripPrefix("_");
- ol.writeObjectLink(ccd->getReference(),ccd->getOutputFileBase(),0,nn.data());
-
- if (!behav.isEmpty())
- {
- behav.prepend(" ");
- ol.startBold();
- ol.docify(behav.data());
- ol.endBold();
- }
-
- ol.lineBreak();
-}
-
-bool VhdlDocGen::compareString(const QCString& s1,const QCString& s2)
-{
- QCString str1=s1.stripWhiteSpace();
- QCString str2=s2.stripWhiteSpace();
-
- return stricmp(str1.data(),str2.data());
-}
-
-
-/*!
- * strips the "--" prefixes of vhdl comments
- */
-void VhdlDocGen::prepareComment(QCString& qcs)
-{
- QCString temp;
- const char* s="--!";
- //const char *start="--!{";
- //const char *end="--!}";
- int index=0;
-
- while (TRUE)
- {
- index=qcs.find(s,0,TRUE);
- if (index<0) break;
- temp=qcs.remove(index,strlen(s));
- qcs=temp;
- }
- qcs=qcs.stripWhiteSpace();
-}
-
-
-/*!
- * parses a function proto
- * @param text function string
- * @param qlist stores the function types
- * @param name points to the function name
- * @param ret Stores the return type
- * @param doc ???
- */
-void VhdlDocGen::parseFuncProto(const char* text,QList<Argument>& qlist,
- QCString& name,QCString& ret,bool doc)
-{
- (void)qlist; //unused
- int index,end;
- QCString s1(text);
- QCString temp;
-
- index=s1.find("(");
- end=s1.findRev(")");
-
- if ((end-index)>0)
- {
- QCString tt=s1.mid(index,(end-index+1));
- temp=s1.mid(index+1,(end-index-1));
- //getFuncParams(qlist,temp);
- }
- if (doc)
- {
- name=s1.left(index);
- name=name.stripWhiteSpace();
- if ((end-index)>0)
- {
- ret="function";
- }
- return;
- }
- else
- {
- QCString s1(text);
- s1=s1.stripWhiteSpace();
- int i=s1.find("(",0,FALSE);
- int s=s1.find(QRegExp("[ \\t]"));
- if (i==-1 || i<s)
- s1=VhdlDocGen::getIndexWord(s1.data(),1);
- else // s<i, s=start of name, i=end of name
- s1=s1.mid(s,(i-s));
-
- name=s1.stripWhiteSpace();
- }
- index=s1.findRev("return",-1,FALSE);
- if (index !=-1)
- {
- ret=s1.mid(index+6,s1.length());
- ret=ret.stripWhiteSpace();
- VhdlDocGen::deleteCharRev(ret,';');
- }
-}
-
-/*
- * returns the n'th word of a string
- */
-
-QCString VhdlDocGen::getIndexWord(const char* c,int index)
-{
- QStringList ql;
- QCString temp(c);
- QRegExp reg("[\\s:|]");
-
- ql=QStringList::split(reg,temp,FALSE);
-
- if (ql.count() > (unsigned int)index)
- {
- return (QCString)ql[index];
- }
-
- return "";
-}
-
-
-QCString VhdlDocGen::getProtectionName(int prot)
-{
- if (prot==VhdlDocGen::ENTITYCLASS)
- return "entity";
- else if (prot==VhdlDocGen::ARCHITECTURECLASS)
- return "architecture";
- else if (prot==VhdlDocGen::PACKAGECLASS)
- return "package";
- else if (prot==VhdlDocGen::PACKBODYCLASS)
- return "package body";
-
- return "";
-}
-
-QCString VhdlDocGen::trTypeString(int type)
-{
- switch(type)
- {
- case VhdlDocGen::LIBRARY: return "Library";
- case VhdlDocGen::ENTITY: return "Entity";
- case VhdlDocGen::PACKAGE_BODY: return "Package Body";
- case VhdlDocGen::ATTRIBUTE: return "Attribute";
- case VhdlDocGen::PACKAGE: return "Package";
- case VhdlDocGen::SIGNAL: return "Signal";
- case VhdlDocGen::COMPONENT: return "Component";
- case VhdlDocGen::CONSTANT: return "Constant";
- case VhdlDocGen::TYPE: return "Type";
- case VhdlDocGen::SUBTYPE: return "Subtype";
- case VhdlDocGen::FUNCTION: return "Function";
- case VhdlDocGen::RECORD: return "Record";
- case VhdlDocGen::PROCEDURE: return "Procedure";
- case VhdlDocGen::ARCHITECTURE: return "Architecture";
- case VhdlDocGen::USE: return "Package";
- case VhdlDocGen::PROCESS: return "Process";
- case VhdlDocGen::PORT: return "Port";
- case VhdlDocGen::GENERIC: return "Generic";
- case VhdlDocGen::UNITS: return "Units";
- //case VhdlDocGen::PORTMAP: return "Port Map";
- case VhdlDocGen::SHAREDVARIABLE: return "Shared Variable";
- case VhdlDocGen::GROUP: return "Group";
- case VhdlDocGen::VFILE: return "File";
- case VhdlDocGen::INSTANTIATION: return "Instantiation";
- case VhdlDocGen::ALIAS: return "Alias";
- case VhdlDocGen::CONFIG: return "Configuration";
- case VhdlDocGen::MISCELLANEOUS: return "Miscellaneous";
- case VhdlDocGen::UCF_CONST: return "Constraints";
- default: return "";
- }
-} // convertType
-
-/*!
- * deletes a char backwards in a string
- */
-
-bool VhdlDocGen::deleteCharRev(QCString &s,char c)
-{
- int index=s.findRev(c,-1,FALSE);
- if (index > -1)
- {
- QString qcs=s.remove(index,1);
- s=qcs;
- return TRUE;
- }
- return FALSE;
-}
-
-void VhdlDocGen::deleteAllChars(QCString &s,char c)
-{
- int index=s.findRev(c,-1,FALSE);
- while (index > -1)
- {
- QString qcs=s.remove(index,1);
- s=qcs;
- index=s.findRev(c,-1,FALSE);
- }
-}
-
-
-static int recordCounter=0;
-
-/*!
- * returns the next number of a record|unit member
- */
-
-QCString VhdlDocGen::getRecordNumber()
-{
- char buf[12];
- sprintf(buf,"%d",recordCounter++);
- QCString qcs(&buf[0]);
- return qcs;
-}
-
-/*!
- * returns the next number of an anonymous process
- */
-
-QCString VhdlDocGen::getProcessNumber()
-{
- static int stringCounter;
- char buf[8];
- QCString qcs("PROCESS_");
- sprintf(buf,"%d",stringCounter++);
- qcs.append(&buf[0]);
- return qcs;
-}
-
-/*!
- * writes a colored and formatted string
- */
-
-void VhdlDocGen::writeFormatString(const QCString& s,OutputList&ol,const MemberDef* mdef)
-{
- QRegExp reg("[\\[\\]\\.\\/\\:\\<\\>\\:\\s\\,\\;\\'\\+\\-\\*\\|\\&\\=\\(\\)\"]");
- QCString qcs = s;
- qcs+=QCString(" ");// parsing the last sign
- QCString *ss;
- QCString find=qcs;
- QCString temp=qcs;
- char buf[2];
- buf[1]='\0';
-
- int j;
- int len;
- j = reg.match(temp.data(),0,&len);
-
- ol.startBold();
- if (j>=0)
- {
- while (j>=0)
- {
- find=find.left(j);
- buf[0]=temp[j];
- ss=VhdlDocGen::findKeyWord(find);
- bool k=VhdlDocGen::isNumber(find); // is this a number
- if (k)
- {
- ol.docify(" ");
- VhdlDocGen::startFonts(find,"vhdldigit",ol);
- ol.docify(" ");
- }
- else if (j != 0 && ss)
- {
- VhdlDocGen::startFonts(find,ss->data(),ol);
- }
- else
- {
- if (j>0)
- {
- VhdlDocGen::writeStringLink(mdef,find,ol);
- }
- }
- VhdlDocGen::startFonts(&buf[0],"vhdlchar",ol);
-
- QCString st=temp.remove(0,j+1);
- find=st;
- if (!find.isEmpty() && find.at(0)=='"')
- {
- int ii=find.find('"',2);
- if (ii>1)
- {
- QCString com=find.left(ii+1);
- VhdlDocGen::startFonts(com,"keyword",ol);
- temp=find.remove(0,ii+1);
- }
- }
- else
- {
- temp=st;
- }
- j = reg.match(temp.data(),0,&len);
- }//while
- }//if
- else
- {
- VhdlDocGen::startFonts(find,"vhdlchar",ol);
- }
- ol.endBold();
-}// writeFormatString
-
-/*!
- * returns TRUE if this string is a number
- */
-
-bool VhdlDocGen::isNumber(const QCString& s)
-{
- static QRegExp regg("[0-9][0-9eEfFbBcCdDaA_.#-+?xXzZ]*");
-
- if (s.isEmpty()) return FALSE;
- int j,len;
- j = regg.match(s.data(),0,&len);
- if ((j==0) && (len==(int)s.length())) return TRUE;
- return FALSE;
-
-}// isNumber
-
-void VhdlDocGen::startFonts(const QCString& q, const char *keyword,OutputList& ol)
-{
- ol.startFontClass(keyword);
- ol.docify(q.data());
- ol.endFontClass();
-}
-
-/*!
- * inserts white spaces for better readings
- * and writes a colored string to the output
- */
-
-void VhdlDocGen::formatString(const QCString &s, OutputList& ol,const MemberDef* mdef)
-{
- QCString qcs = s;
- QCString temp(qcs.length());
- qcs.stripPrefix(":");
- qcs.stripPrefix("is");
- qcs.stripPrefix("IS");
- qcs.stripPrefix("of");
- qcs.stripPrefix("OF");
-
- // VhdlDocGen::deleteCharRev(qcs,';');
- //char white='\t';
- int len = qcs.length();
- unsigned int index=1;//temp.length();
-
- for (int j=0;j<len;j++)
- {
- char c=qcs[j];
- char b=c;
- if (j>0) b=qcs[j-1];
- if (c=='"' || c==',' || c=='\''|| c=='(' || c==')' || c==':' || c=='[' || c==']' ) // || (c==':' && b!='=')) // || (c=='=' && b!='>'))
- {
- if (temp.at(index-1) != ' ')
- {
- temp+=" ";
- }
- temp+=c;
- temp+=" ";
- }
- else if (c=='=')
- {
- if (b==':') // := operator
- {
- temp.replace(index-1,1,"=");
- temp+=" ";
- }
- else // = operator
- {
- temp+=" ";
- temp+=c;
- temp+=" ";
- }
- }
- else
- {
- temp+=c;
- }
-
- index=temp.length();
- }// for
- temp=temp.stripWhiteSpace();
- // printf("\n [%s]",qcs.data());
- VhdlDocGen::writeFormatString(temp,ol,mdef);
-}
-
-/*!
- * writes a procedure prototype to the output
- */
-
-void VhdlDocGen::writeProcedureProto(OutputList& ol,const ArgumentList* al,const MemberDef* mdef)
-{
- ArgumentListIterator ali(*al);
- Argument *arg;
- bool sem=FALSE;
- int len=al->count();
- ol.docify("( ");
- if (len > 2)
- {
- ol.lineBreak();
- }
- for (;(arg=ali.current());++ali)
- {
- ol.startBold();
- if (sem && len <3)
- ol.writeChar(',');
-
- QCString nn=arg->name;
- nn+=": ";
-
- QCString *str=VhdlDocGen::findKeyWord(arg->defval);
- arg->defval+=" ";
- if (str)
- {
- VhdlDocGen::startFonts(arg->defval,str->data(),ol);
- }
- else
- {
- VhdlDocGen::startFonts(arg->defval,"vhdlchar",ol); // write type (variable,constant etc.)
- }
-
- VhdlDocGen::startFonts(nn,"vhdlchar",ol); // write name
- if (stricmp(arg->attrib.data(),arg->type.data()) != 0)
- VhdlDocGen::startFonts(arg->attrib.lower(),"stringliteral",ol); // write in|out
- ol.docify(" ");
- VhdlDocGen::formatString(arg->type,ol,mdef);
- sem=TRUE;
- ol.endBold();
- if (len > 2)
- {
- ol.lineBreak();
- ol.docify(" ");
- }
- }//for
-
- ol.docify(" )");
-
-
-}
-
-/*!
- * writes a function prototype to the output
- */
-
-void VhdlDocGen::writeFunctionProto(OutputList& ol,const ArgumentList* al,const MemberDef* mdef)
-{
- if (al==0) return;
- ArgumentListIterator ali(*al);
- Argument *arg;
- bool sem=FALSE;
- int len=al->count();
- ol.startBold();
- ol.docify(" ( ");
- ol.endBold();
- if (len>2)
- {
- ol.lineBreak();
- }
- for (;(arg=ali.current());++ali)
- {
- ol.startBold();
- QCString att=arg->defval;
- bool bGen=att.stripPrefix("gen!");
-
- if (sem && len < 3)
- {
- ol.docify(" , ");
- }
-
- if (bGen) {
- VhdlDocGen::formatString(QCString("generic "),ol,mdef);
- }
- if (!att.isEmpty())
- {
- QCString *str=VhdlDocGen::findKeyWord(att);
- att+=" ";
- if (str)
- VhdlDocGen::formatString(att,ol,mdef);
- else
- VhdlDocGen::startFonts(att,"vhdlchar",ol);
- }
-
- QCString nn=arg->name;
- nn+=": ";
- QCString ss=arg->type.stripWhiteSpace(); //.lower();
- QCString w=ss.stripWhiteSpace();//.upper();
- VhdlDocGen::startFonts(nn,"vhdlchar",ol);
- VhdlDocGen::startFonts("in ","stringliteral",ol);
- QCString *str=VhdlDocGen::findKeyWord(ss);
- if (str)
- VhdlDocGen::formatString(w,ol,mdef);
- else
- VhdlDocGen::startFonts(w,"vhdlchar",ol);
-
- if (arg->attrib)
- VhdlDocGen::startFonts(arg->attrib,"vhdlchar",ol);
-
-
- sem=TRUE;
- ol.endBold();
- if (len > 2)
- {
- ol.lineBreak();
- }
- }
- ol.startBold();
- ol.docify(" )");
- const char *exp=mdef->excpString();
- if (exp)
- {
- ol.insertMemberAlign();
- ol.startBold();
- ol.docify("[ ");
- ol.docify(exp);
- ol.docify(" ]");
- ol.endBold();
- }
- ol.endBold();
-}
-
-/*!
- * writes a process prototype to the output
- */
-
-void VhdlDocGen::writeProcessProto(OutputList& ol,const ArgumentList* al,const MemberDef* mdef)
-{
- if (al==0) return;
- ArgumentListIterator ali(*al);
- Argument *arg;
- bool sem=FALSE;
- ol.startBold();
- ol.docify(" ( ");
- for (;(arg=ali.current());++ali)
- {
- if (sem)
- {
- ol.docify(" , ");
- }
- QCString nn=arg->name;
- // VhdlDocGen::startFonts(nn,"vhdlchar",ol);
- VhdlDocGen::writeFormatString(nn,ol,mdef);
- sem=TRUE;
- }
- ol.docify(" )");
- ol.endBold();
-}
-
-
-/*!
- * writes a function|procedure documentation to the output
- */
-
-void VhdlDocGen::writeFuncProcDocu(
- const MemberDef *md,
- OutputList& ol,
- const ArgumentList* al,
- bool /*type*/)
-{
- if (al==0) return;
- //bool sem=FALSE;
- ol.enableAll();
-
- ArgumentListIterator ali(*al);
- int index=ali.count();
- if (index==0)
- {
- ol.docify(" ( ) ");
- return;
- }
- ol.startParameterList(TRUE);
- //ol.startParameterName(FALSE);
- Argument *arg;
- bool first=TRUE;
- for (;(arg=ali.current());++ali)
- {
- ol.startParameterType(first,"");
- // if (first) ol.writeChar('(');
- QCString attl=arg->defval;
- bool bGen=attl.stripPrefix("gen!");
- if (bGen)
- VhdlDocGen::writeFormatString(QCString("generic "),ol,md);
-
-
- if (VhdlDocGen::isProcedure(md))
- {
- startFonts(arg->defval,"keywordtype",ol);
- ol.docify(" ");
- }
- ol.endParameterType();
-
- ol.startParameterName(TRUE);
- VhdlDocGen::writeFormatString(arg->name,ol,md);
- ol.docify(" : ");
-
- if (VhdlDocGen::isProcedure(md))
- {
- startFonts(arg->attrib,"stringliteral",ol);
- }
- else if (VhdlDocGen::isVhdlFunction(md))
- {
- startFonts(QCString("in"),"stringliteral",ol);
- }
-
- ol.docify(" ");
- ol.disable(OutputGenerator::Man);
- ol.startEmphasis();
- ol.enable(OutputGenerator::Man);
- if (!VhdlDocGen::isProcess(md))
- {
- // startFonts(arg->type,"vhdlkeyword",ol);
- VhdlDocGen::writeFormatString(arg->type,ol,md);
- }
- ol.disable(OutputGenerator::Man);
- ol.endEmphasis();
- ol.enable(OutputGenerator::Man);
-
- if (--index)
- {
- ol.docify(" , ");
- }
- else
- {
- // ol.docify(" ) ");
- ol.endParameterName(TRUE,FALSE,TRUE);
- break;
- }
- ol.endParameterName(FALSE,FALSE,FALSE);
-
- //sem=TRUE;
- first=FALSE;
- }
- //ol.endParameterList();
-
-} // writeDocFunProc
-
-
-
-
-QCString VhdlDocGen::convertArgumentListToString(const ArgumentList* al,bool func)
-{
- QCString argString;
- bool sem=FALSE;
- ArgumentListIterator ali(*al);
- Argument *arg;
-
- for (;(arg=ali.current());++ali)
- {
- if (sem) argString.append(", ");
- if (func)
- {
- argString+=arg->name;
- argString+=":";
- argString+=arg->type;
- }
- else
- {
- argString+=arg->defval+" ";
- argString+=arg->name+" :";
- argString+=arg->attrib+" ";
- argString+=arg->type;
- }
- sem=TRUE;
- }
- return argString;
-}
-
-
-void VhdlDocGen::writeVhdlDeclarations(MemberList* ml,
- OutputList& ol,GroupDef* gd,ClassDef* cd,FileDef *fd,NamespaceDef* nd)
-{
- static ClassDef *cdef;
- //static GroupDef* gdef;
- if (cd && cdef!=cd)
- { // only one inline link
- VhdlDocGen::writeInlineClassLink(cd,ol);
- cdef=cd;
- }
-
- /*
- if (gd && gdef==gd) return;
- if (gd && gdef!=gd)
- {
- gdef=gd;
- }
- */
- VhdlDocGen::writeVHDLDeclarations(ml,ol,cd,nd,fd,gd,theTranslator_vhdlType(VhdlDocGen::LIBRARY,FALSE),0,FALSE,VhdlDocGen::LIBRARY);
- VhdlDocGen::writeVHDLDeclarations(ml,ol,cd,nd,fd,gd,theTranslator_vhdlType(VhdlDocGen::USE,FALSE),0,FALSE,VhdlDocGen::USE);
- VhdlDocGen::writeVHDLDeclarations(ml,ol,cd,nd,fd,gd,theTranslator_vhdlType(VhdlDocGen::FUNCTION,FALSE),0,FALSE,VhdlDocGen::FUNCTION);
- VhdlDocGen::writeVHDLDeclarations(ml,ol,cd,nd,fd,gd,theTranslator_vhdlType(VhdlDocGen::COMPONENT,FALSE),0,FALSE,VhdlDocGen::COMPONENT);
- VhdlDocGen::writeVHDLDeclarations(ml,ol,cd,nd,fd,gd,theTranslator_vhdlType(VhdlDocGen::CONSTANT,FALSE),0,FALSE,VhdlDocGen::CONSTANT);
- VhdlDocGen::writeVHDLDeclarations(ml,ol,cd,nd,fd,gd,theTranslator_vhdlType(VhdlDocGen::TYPE,FALSE),0,FALSE,VhdlDocGen::TYPE);
- VhdlDocGen::writeVHDLDeclarations(ml,ol,cd,nd,fd,gd,theTranslator_vhdlType(VhdlDocGen::SUBTYPE,FALSE),0,FALSE,VhdlDocGen::SUBTYPE);
- VhdlDocGen::writeVHDLDeclarations(ml,ol,cd,nd,fd,gd,theTranslator_vhdlType(VhdlDocGen::GENERIC,FALSE),0,FALSE,VhdlDocGen::GENERIC);
- VhdlDocGen::writeVHDLDeclarations(ml,ol,cd,nd,fd,gd,theTranslator_vhdlType(VhdlDocGen::PORT,FALSE),0,FALSE,VhdlDocGen::PORT);
- VhdlDocGen::writeVHDLDeclarations(ml,ol,cd,nd,fd,gd,theTranslator_vhdlType(VhdlDocGen::PROCESS,FALSE),0,FALSE,VhdlDocGen::PROCESS);
- VhdlDocGen::writeVHDLDeclarations(ml,ol,cd,nd,fd,gd,theTranslator_vhdlType(VhdlDocGen::SIGNAL,FALSE),0,FALSE,VhdlDocGen::SIGNAL);
- VhdlDocGen::writeVHDLDeclarations(ml,ol,cd,nd,fd,gd,theTranslator_vhdlType(VhdlDocGen::ATTRIBUTE,FALSE),0,FALSE,VhdlDocGen::ATTRIBUTE);
- VhdlDocGen::writeVHDLDeclarations(ml,ol,cd,nd,fd,gd,theTranslator_vhdlType(VhdlDocGen::PROCEDURE,FALSE),0,FALSE,VhdlDocGen::PROCEDURE);
- VhdlDocGen::writeVHDLDeclarations(ml,ol,cd,nd,fd,gd,theTranslator_vhdlType(VhdlDocGen::RECORD,FALSE),0,FALSE,VhdlDocGen::RECORD);
- VhdlDocGen::writeVHDLDeclarations(ml,ol,cd,nd,fd,gd,theTranslator_vhdlType(VhdlDocGen::UNITS,FALSE),0,FALSE,VhdlDocGen::UNITS);
- VhdlDocGen::writeVHDLDeclarations(ml,ol,cd,nd,fd,gd,theTranslator_vhdlType(VhdlDocGen::SHAREDVARIABLE,FALSE),0,FALSE,VhdlDocGen::SHAREDVARIABLE);
- VhdlDocGen::writeVHDLDeclarations(ml,ol,cd,nd,fd,gd,theTranslator_vhdlType(VhdlDocGen::VFILE,FALSE),0,FALSE,VhdlDocGen::VFILE);
- VhdlDocGen::writeVHDLDeclarations(ml,ol,cd,nd,fd,gd,theTranslator_vhdlType(VhdlDocGen::GROUP,FALSE),0,FALSE,VhdlDocGen::GROUP);
- VhdlDocGen::writeVHDLDeclarations(ml,ol,cd,nd,fd,gd,theTranslator_vhdlType(VhdlDocGen::INSTANTIATION,FALSE),0,FALSE,VhdlDocGen::INSTANTIATION);
- VhdlDocGen::writeVHDLDeclarations(ml,ol,cd,nd,fd,gd,theTranslator_vhdlType(VhdlDocGen::ALIAS,FALSE),0,FALSE,VhdlDocGen::ALIAS);
- VhdlDocGen::writeVHDLDeclarations(ml,ol,cd,nd,fd,gd,theTranslator_vhdlType(VhdlDocGen::MISCELLANEOUS),0,FALSE,VhdlDocGen::MISCELLANEOUS);
-
- // configurations must be added to global file definitions.
- VhdlDocGen::writeVHDLDeclarations(ml,ol,cd,nd,fd,gd,theTranslator_vhdlType(VhdlDocGen::CONFIG,FALSE),0,FALSE,VhdlDocGen::CONFIG);
- VhdlDocGen::writeVHDLDeclarations(ml,ol,cd,nd,fd,gd,theTranslator_vhdlType(VhdlDocGen::UCF_CONST,FALSE),0,FALSE,VhdlDocGen::UCF_CONST);
-
-}
-
-static void setGlobalType(MemberList *ml)
-{
- if (ml==0) return;
- MemberDef *mdd=0;
- MemberListIterator mmli(*ml);
- for ( ; (mdd=mmli.current()); ++mmli )
- {
- QCString l=mdd->typeString();
-
- if (strcmp(mdd->argsString(),"package")==0)
- {
- mdd->setMemberSpecifiers(VhdlDocGen::INSTANTIATION);
- }
- else if (strcmp(mdd->argsString(),"configuration")==0)
- {
- mdd->setMemberSpecifiers(VhdlDocGen::CONFIG);
- }
- else if (strcmp(mdd->typeString(),"library")==0)
- {
- mdd->setMemberSpecifiers(VhdlDocGen::LIBRARY);
- }
- else if (strcmp(mdd->typeString(),"use")==0)
- {
- mdd->setMemberSpecifiers(VhdlDocGen::USE);
- }
- else if (stricmp(mdd->typeString(),"misc")==0)
- {
- mdd->setMemberSpecifiers(VhdlDocGen::MISCELLANEOUS);
- }
- else if (stricmp(mdd->typeString(),"ucf_const")==0)
- {
- mdd->setMemberSpecifiers(VhdlDocGen::UCF_CONST);
- }
- }
-}
-
-/* writes a vhdl type documentation */
-void VhdlDocGen::writeVHDLTypeDocumentation(const MemberDef* mdef, const Definition *d, OutputList &ol)
-{
- ClassDef *cd=(ClassDef*)d;
-
- if (cd==0) return;
-
- QCString ttype=mdef->typeString();
- QCString largs=mdef->argsString();
-
- if ((VhdlDocGen::isVhdlFunction(mdef) || VhdlDocGen::isProcedure(mdef) || VhdlDocGen::isProcess(mdef)))
- {
- QCString nn=mdef->typeString();
- nn=nn.stripWhiteSpace();
- QCString na=cd->name();
- MemberDef* memdef=VhdlDocGen::findMember(na,nn);
- if (memdef && memdef->isLinkable())
- {
- ol.docify(" ");
-
- ol.startBold();
- //ol.writeObjectLink(cd->getReference(),cd->getOutputFileBase(),0,mdef->typeString());
- writeLink(memdef,ol);
- ol.endBold();
- ol.docify(" ");
- }
- else
- {
- ol.docify(" ");
- VhdlDocGen::formatString(ttype,ol,mdef);
- ol.docify(" ");
- }
- ol.docify(mdef->name());
- VhdlDocGen::writeFuncProcDocu(mdef,ol, mdef->argumentList().pointer());
- }
-
-
- if (mdef->isVariable())
- {
- //ol.docify(mdef->name().data());
- // QCString ttype;
- if (VhdlDocGen::isConstraint(mdef))
- {
-
- writeLink(mdef,ol);
- ol.docify(" ");
-
- largs=largs.replace(QRegExp("#")," ");
- VhdlDocGen::formatString(largs,ol,mdef);
- return;
- }
- else
- {
- writeLink(mdef,ol);
- ol.docify(" ");
- // ttype=mdef->typeString();
- }
-
- // QCString largs=mdef->argsString();
-
- bool c=largs=="context";
- bool brec=largs.stripPrefix("record") ;
-
- if (!brec && !c)
- VhdlDocGen::formatString(ttype,ol,mdef);
-
- if (c || brec || largs.stripPrefix("units"))
- {
- if (c)
- largs=ttype;
- VhdlDocGen::writeRecUnitDocu(mdef,ol,largs);
- return;
- }
-
- ol.docify(" ");
- if (VhdlDocGen::isPort(mdef) || VhdlDocGen::isGeneric(mdef))
- {
- // QCString largs=mdef->argsString();
- VhdlDocGen::formatString(largs,ol,mdef);
- ol.docify(" ");
- }
- }
-}
-
-/* writes a vhdl type declaration */
-
-void VhdlDocGen::writeVHDLDeclaration(MemberDef* mdef,OutputList &ol,
- ClassDef *cd,NamespaceDef *nd,FileDef *fd,GroupDef *gd,
- bool /*inGroup*/)
-{
- static QRegExp reg("[%]");
- LockingPtr<MemberDef> lock(mdef,mdef);
-
- Definition *d=0;
-
- /* some vhdl files contain only a configuration description
-
- library work;
- configuration cfg_tb_jtag_gotoBackup of tb_jtag_gotoBackup is
- for RTL
- end for;
- end cfg_tb_jtag_gotoBackup;
-
- in this case library work does not belong to an entity, package ...
-
- */
-
- ASSERT(cd!=0 || nd!=0 || fd!=0 || gd!=0 ||
- mdef->getMemberSpecifiers()==VhdlDocGen::LIBRARY ||
- mdef->getMemberSpecifiers()==VhdlDocGen::USE
- ); // member should belong to something
- if (cd) d=cd;
- else if (nd) d=nd;
- else if (fd) d=fd;
- else if (gd) d=gd;
- else d=(Definition*)mdef;
-
- // write tag file information of this member
- if (!Config_getString("GENERATE_TAGFILE").isEmpty())
- {
- Doxygen::tagFile << " <member kind=\"";
- if (VhdlDocGen::isGeneric(mdef)) Doxygen::tagFile << "generic";
- if (VhdlDocGen::isPort(mdef)) Doxygen::tagFile << "port";
- if (VhdlDocGen::isEntity(mdef)) Doxygen::tagFile << "entity";
- if (VhdlDocGen::isComponent(mdef)) Doxygen::tagFile << "component";
- if (VhdlDocGen::isVType(mdef)) Doxygen::tagFile << "type";
- if (VhdlDocGen::isConstant(mdef)) Doxygen::tagFile << "constant";
- if (VhdlDocGen::isSubType(mdef)) Doxygen::tagFile << "subtype";
- if (VhdlDocGen::isVhdlFunction(mdef)) Doxygen::tagFile << "function";
- if (VhdlDocGen::isProcedure(mdef)) Doxygen::tagFile << "procedure";
- if (VhdlDocGen::isProcess(mdef)) Doxygen::tagFile << "process";
- if (VhdlDocGen::isSignals(mdef)) Doxygen::tagFile << "signal";
- if (VhdlDocGen::isAttribute(mdef)) Doxygen::tagFile << "attribute";
- if (VhdlDocGen::isRecord(mdef)) Doxygen::tagFile << "record";
- if (VhdlDocGen::isLibrary(mdef)) Doxygen::tagFile << "library";
- if (VhdlDocGen::isPackage(mdef)) Doxygen::tagFile << "package";
- if (VhdlDocGen::isVariable(mdef)) Doxygen::tagFile << "shared variable";
- if (VhdlDocGen::isFile(mdef)) Doxygen::tagFile << "file";
- if (VhdlDocGen::isGroup(mdef)) Doxygen::tagFile << "group";
- if (VhdlDocGen::isCompInst(mdef)) Doxygen::tagFile << " instantiation";
- if (VhdlDocGen::isAlias(mdef)) Doxygen::tagFile << "alias";
- if (VhdlDocGen::isCompInst(mdef)) Doxygen::tagFile << "configuration";
-
- Doxygen::tagFile << "\">" << endl;
- Doxygen::tagFile << " <type>" << convertToXML(mdef->typeString()) << "</type>" << endl;
- Doxygen::tagFile << " <name>" << convertToXML(mdef->name()) << "</name>" << endl;
- Doxygen::tagFile << " <anchorfile>" << convertToXML(mdef->getOutputFileBase()+Doxygen::htmlFileExtension) << "</anchorfile>" << endl;
- Doxygen::tagFile << " <anchor>" << convertToXML(mdef->anchor()) << "</anchor>" << endl;
-
- if (VhdlDocGen::isVhdlFunction(mdef))
- Doxygen::tagFile << " <arglist>" << convertToXML(VhdlDocGen::convertArgumentListToString(mdef->argumentList().pointer(),TRUE)) << "</arglist>" << endl;
- else if (VhdlDocGen::isProcedure(mdef))
- Doxygen::tagFile << " <arglist>" << convertToXML(VhdlDocGen::convertArgumentListToString(mdef->argumentList().pointer(),FALSE)) << "</arglist>" << endl;
- else
- Doxygen::tagFile << " <arglist>" << convertToXML(mdef->argsString()) << "</arglist>" << endl;
-
- mdef->writeDocAnchorsToTagFile();
- Doxygen::tagFile << " </member>" << endl;
-
- }
-
- // write search index info
- if (Doxygen::searchIndex)
- {
- Doxygen::searchIndex->setCurrentDoc(mdef->qualifiedName(),mdef->getOutputFileBase(),mdef->anchor());
- Doxygen::searchIndex->addWord(mdef->localName(),TRUE);
- Doxygen::searchIndex->addWord(mdef->qualifiedName(),FALSE);
- }
-
- QCString cname = d->name();
- QCString cfname = d->getOutputFileBase();
-
- //HtmlHelp *htmlHelp=0;
- // bool hasHtmlHelp = Config_getBool("GENERATE_HTML") && Config_getBool("GENERATE_HTMLHELP");
- // if (hasHtmlHelp) htmlHelp = HtmlHelp::getInstance();
-
- // search for the last anonymous scope in the member type
- ClassDef *annoClassDef=mdef->getClassDefOfAnonymousType();
-
- // start a new member declaration
- bool isAnonymous = annoClassDef; // || m_impl->annMemb || m_impl->annEnumType;
- ///printf("startMemberItem for %s\n",name().data());
- ol.startMemberItem( mdef->anchor(), isAnonymous ); //? 1 : m_impl->tArgList ? 3 : 0);
-
- // If there is no detailed description we need to write the anchor here.
- bool detailsVisible = mdef->isDetailedSectionLinkable();
- if (!detailsVisible) // && !m_impl->annMemb)
- {
- QCString doxyName=mdef->name().copy();
- if (!cname.isEmpty()) doxyName.prepend(cname+"::");
- QCString doxyArgs=mdef->argsString();
- ol.startDoxyAnchor(cfname,cname,mdef->anchor(),doxyName,doxyArgs);
-
- ol.pushGeneratorState();
- ol.disable(OutputGenerator::Man);
- ol.disable(OutputGenerator::Latex);
- ol.docify("\n");
- ol.popGeneratorState();
-
- }
- // *** write type
- /*VHDL CHANGE */
- bool bRec,bUnit;
- QCString ltype(mdef->typeString());
- ltype=ltype.replace(reg," ");
- QCString largs(mdef->argsString());
- largs=largs.replace(reg," ");
- int mm=mdef->getMemberSpecifiers();
- mdef->setType(ltype.data());
- mdef->setArgsString(largs.data());
- //ClassDef * plo=mdef->getClassDef();
- ClassDef *kl=0;
- LockingPtr<ArgumentList> alp = mdef->argumentList();
- QCString nn;
- //VhdlDocGen::adjustRecordMember(mdef);
- if (gd) gd=0;
- switch(mm)
- {
- case VhdlDocGen::MISCELLANEOUS:
- VhdlDocGen::writeCodeFragment(mdef,ol);
- break;
- case VhdlDocGen::PROCEDURE:
- case VhdlDocGen::FUNCTION:
- ol.startBold();
- VhdlDocGen::formatString(ltype,ol,mdef);
- ol.endBold();
- ol.insertMemberAlign();
- ol.docify(" ");
-
- writeLink(mdef,ol);
- if (alp!=0 && mm==VhdlDocGen::FUNCTION)
- VhdlDocGen::writeFunctionProto(ol,alp.pointer(),mdef);
-
- if (alp!=0 && mm==VhdlDocGen::PROCEDURE)
- VhdlDocGen::writeProcedureProto(ol,alp.pointer(),mdef);
-
- break;
- case VhdlDocGen::USE:
- kl=VhdlDocGen::getClass(mdef->name());
- if (kl && ((VhdlDocGen::VhdlClasses)kl->protection()==VhdlDocGen::ENTITYCLASS)) break;
- writeLink(mdef,ol);
- ol.insertMemberAlign();
- ol.docify(" ");
-
- if (kl)
- {
- nn=kl->getOutputFileBase();
- ol.pushGeneratorState();
- ol.disableAllBut(OutputGenerator::Html);
- ol.docify(" ");
- QCString name=theTranslator_vhdlType(VhdlDocGen::PACKAGE,TRUE);
- ol.startBold();
- ol.docify(name.data());
- name.resize(0);
- ol.endBold();
- name+=" <"+mdef->name()+">";
- ol.startEmphasis();
- ol.writeObjectLink(kl->getReference(),kl->getOutputFileBase(),0,name.data());
- ol.popGeneratorState();
- }
- break;
- case VhdlDocGen::LIBRARY:
- writeLink(mdef,ol);
- ol.insertMemberAlign();
- if (largs=="context")
- {
- VhdlDocGen::writeRecorUnit(ltype,ol,mdef);
- }
-
- break;
-
- case VhdlDocGen::GENERIC:
- case VhdlDocGen::PORT:
- case VhdlDocGen::ALIAS:
-
- writeLink(mdef,ol);
- ol.docify(" ");
- ol.insertMemberAlign();
- if (mm==VhdlDocGen::GENERIC)
- {
- ol.startBold();
- VhdlDocGen::formatString(largs,ol,mdef);
- ol.endBold();
- }
- else
- {
- ol.docify(" ");
- ol.startBold();
- VhdlDocGen::formatString(ltype,ol,mdef);
- ol.endBold();
- ol.docify(" ");
- VhdlDocGen::formatString(largs,ol,mdef);
- }
- break;
- case VhdlDocGen::PROCESS:
- writeLink(mdef,ol);
- ol.insertMemberAlign();
- VhdlDocGen::writeProcessProto(ol,alp.pointer(),mdef);
- break;
- case VhdlDocGen::PACKAGE:
- case VhdlDocGen::ENTITY:
- case VhdlDocGen::COMPONENT:
- case VhdlDocGen::INSTANTIATION:
- case VhdlDocGen::CONFIG:
- if (VhdlDocGen::isCompInst(mdef) )
- {
- nn=largs;
- if(nn.stripPrefix("function") || nn.stripPrefix("package"))
- {
- VhdlDocGen::formatString(largs,ol,mdef);
- ol.insertMemberAlign();
- writeLink(mdef,ol);
- ol.docify(" ");
- VhdlDocGen::formatString(ltype,ol,mdef);
- break;
- }
-
- largs.prepend("::");
- largs.prepend(mdef->name().data());
- ol.writeObjectLink(mdef->getReference(),
- cfname,
- mdef->anchor(),
- mdef->name());
- }
- else
- writeLink(mdef,ol);
-
- ol.insertMemberAlign();
- ol.docify(" ");
-
- ol.startBold();
- ol.docify(ltype);
- ol.endBold();
- ol.docify(" ");
- if (VhdlDocGen::isComponent(mdef) ||
- VhdlDocGen::isConfig(mdef) ||
- VhdlDocGen::isCompInst(mdef))
- {
- if (VhdlDocGen::isConfig(mdef) || VhdlDocGen::isCompInst(mdef))
- {
- nn=mdef->getOutputFileBase();
- nn=ltype;
- }
- else
- {
- nn=mdef->name();
- }
- kl=getClass(nn.data());
- if (kl)
- {
- nn=kl->getOutputFileBase();
- ol.pushGeneratorState();
- ol.disableAllBut(OutputGenerator::Html);
- ol.startEmphasis();
- QCString name("<Entity ");
- if (VhdlDocGen::isConfig(mdef) || VhdlDocGen::isCompInst(mdef))
- {
- name+=ltype+">";
- }
- else
- {
- name+=mdef->name()+"> ";
- }
- ol.writeObjectLink(kl->getReference(),kl->getOutputFileBase(),0,name.data());
- ol.endEmphasis();
- ol.popGeneratorState();
- }
- }
- break;
- case VhdlDocGen::UCF_CONST:
- mm=mdef->name().findRev('_');
- if (mm>0)
- {
- mdef->setName(mdef->name().left(mm));
- }
- writeUCFLink(mdef,ol);
- break;
- case VhdlDocGen::SIGNAL:
- case VhdlDocGen::ATTRIBUTE:
- case VhdlDocGen::SUBTYPE:
- case VhdlDocGen::CONSTANT:
- case VhdlDocGen::SHAREDVARIABLE:
- case VhdlDocGen::VFILE:
- case VhdlDocGen::GROUP:
- writeLink(mdef,ol);
- ol.docify(" ");
- ol.insertMemberAlign();
- VhdlDocGen::formatString(ltype,ol,mdef);
- break;
- case VhdlDocGen::TYPE:
- bRec=largs.stripPrefix("record") ;
- bUnit=largs.stripPrefix("units") ;
- ol.startBold();
- if (bRec)
- ol.docify("record: ");
- if (bUnit)
- ol.docify("units: ");
- writeLink(mdef,ol);
- ol.insertMemberAlign();
- if (!bRec)
- VhdlDocGen::formatString(ltype,ol,mdef);
- if (bUnit) ol.lineBreak();
- if (bRec || bUnit)
- writeRecorUnit(largs,ol,mdef);
- ol.endBold();
- break;
-
- default: break;
- }
-
- bool htmlOn = ol.isEnabled(OutputGenerator::Html);
- if (htmlOn && Config_getBool("HTML_ALIGN_MEMBERS") && !ltype.isEmpty())
- {
- ol.disable(OutputGenerator::Html);
- }
- if (!ltype.isEmpty()) ol.docify(" ");
-
- if (htmlOn)
- {
- ol.enable(OutputGenerator::Html);
- }
-
- if (!detailsVisible)// && !m_impl->annMemb)
- {
- ol.endDoxyAnchor(cfname,mdef->anchor());
- }
-
- //printf("endMember %s annoClassDef=%p annEnumType=%p\n",
- // name().data(),annoClassDef,annEnumType);
- ol.endMemberItem();
- if (!mdef->briefDescription().isEmpty() && Config_getBool("BRIEF_MEMBER_DESC") /* && !annMemb */)
- {
- ol.startMemberDescription(mdef->anchor());
- ol.parseDoc(mdef->briefFile(),mdef->briefLine(),
- mdef->getOuterScope()?mdef->getOuterScope():d,
- mdef,mdef->briefDescription(),TRUE,FALSE,0,TRUE,FALSE);
- if (detailsVisible)
- {
- ol.pushGeneratorState();
- ol.disableAllBut(OutputGenerator::Html);
- //ol.endEmphasis();
- ol.docify(" ");
- if (mdef->getGroupDef()!=0 && gd==0) // forward link to the group
- {
- ol.startTextLink(mdef->getOutputFileBase(),mdef->anchor());
- }
- else // local link
- {
- ol.startTextLink(0,mdef->anchor());
- }
- ol.endTextLink();
- //ol.startEmphasis();
- ol.popGeneratorState();
- }
- //ol.newParagraph();
- ol.endMemberDescription();
- }
- mdef->warnIfUndocumented();
-
-}// end writeVhdlDeclaration
-
-
-void VhdlDocGen::writeLink(const MemberDef* mdef,OutputList &ol)
-{
- ol.writeObjectLink(mdef->getReference(),
- mdef->getOutputFileBase(),
- mdef->anchor(),
- mdef->name());
-}
-
-void VhdlDocGen::writePlainVHDLDeclarations(
- MemberList* mlist,OutputList &ol,
- ClassDef *cd,NamespaceDef *nd,FileDef *fd,GroupDef *gd,int specifier)
-{
-
- SDict<QCString> pack(1009);
-
- ol.pushGeneratorState();
-
- bool first=TRUE;
- MemberDef *md;
- MemberListIterator mli(*mlist);
- for ( ; (md=mli.current()); ++mli )
- {
- int mems=md->getMemberSpecifiers();
- if (md->isBriefSectionVisible() && (mems==specifier) && (mems!=VhdlDocGen::LIBRARY) )
- {
- if (first) {ol.startMemberList();first=FALSE;}
- VhdlDocGen::writeVHDLDeclaration(md,ol,cd,nd,fd,gd,FALSE);
- } //if
- else if (md->isBriefSectionVisible() && (mems==specifier))
- {
- if (!pack.find(md->name().data()))
- {
- if (first) ol.startMemberList(),first=FALSE;
- VhdlDocGen::writeVHDLDeclaration(md,ol,cd,nd,fd,gd,FALSE);
- pack.append(md->name().data(),new QCString(md->name().data()));
- }
- } //if
- } //for
- if (!first) ol.endMemberList();
- pack.clear();
-}//plainDeclaration
-
-bool VhdlDocGen::membersHaveSpecificType(MemberList *ml,int type)
-{
- if (ml==0) return FALSE;
- MemberDef *mdd=0;
- MemberListIterator mmli(*ml);
- for ( ; (mdd=mmli.current()); ++mmli )
- {
- if (mdd->getMemberSpecifiers()==type) //is type in class
- {
- return TRUE;
- }
- }
- if (ml->getMemberGroupList())
- {
- MemberGroupListIterator mgli(*ml->getMemberGroupList());
- MemberGroup *mg;
- while ((mg=mgli.current()))
- {
- if (mg->members())
- {
- if (membersHaveSpecificType(mg->members(),type)) return TRUE;
- }
- ++mgli;
- }
- }
- return FALSE;
-}
-
-void VhdlDocGen::writeVHDLDeclarations(MemberList* ml,OutputList &ol,
- ClassDef *cd,NamespaceDef *nd,FileDef *fd,GroupDef *gd,
- const char *title,const char *subtitle,bool /*showEnumValues*/,int type)
-{
- setGlobalType(ml);
- if (!membersHaveSpecificType(ml,type)) return;
-
- if (title)
- {
- ol.startMemberHeader(title);
- ol.parseText(title);
- ol.endMemberHeader();
- ol.docify(" ");
- }
- if (subtitle && subtitle[0]!=0)
- {
- ol.startMemberSubtitle();
- ol.parseDoc("[generated]",-1,0,0,subtitle,FALSE,FALSE,0,TRUE,FALSE);
- ol.endMemberSubtitle();
- } //printf("memberGroupList=%p\n",memberGroupList);
-
- VhdlDocGen::writePlainVHDLDeclarations(ml,ol,cd,nd,fd,gd,type);
-
- if (ml->getMemberGroupList())
- {
- MemberGroupListIterator mgli(*ml->getMemberGroupList());
- MemberGroup *mg;
- while ((mg=mgli.current()))
- {
- if (membersHaveSpecificType(mg->members(),type))
- {
- //printf("mg->header=%s\n",mg->header().data());
- bool hasHeader=mg->header()!="[NOHEADER]";
- ol.startMemberGroupHeader(hasHeader);
- if (hasHeader)
- {
- ol.parseText(mg->header());
- }
- ol.endMemberGroupHeader();
- if (!mg->documentation().isEmpty())
- {
- //printf("Member group has docs!\n");
- ol.startMemberGroupDocs();
- ol.parseDoc("[generated]",-1,0,0,mg->documentation()+"\n",FALSE,FALSE);
- ol.endMemberGroupDocs();
- }
- ol.startMemberGroup();
- //printf("--- mg->writePlainDeclarations ---\n");
- VhdlDocGen::writePlainVHDLDeclarations(mg->members(),ol,cd,nd,fd,gd,type);
- ol.endMemberGroup(hasHeader);
- }
- ++mgli;
- }
- }
-}// writeVHDLDeclarations
-
-#if 0
-/* strips the prefix for record and unit members*/
-void VhdlDocGen::adjustRecordMember(MemberDef *mdef)
-{ //,OutputList & ol) {
- QRegExp regg("[_a-zA-Z\"]");
- QCString nn=mdef->name();
- int j=nn.find(regg,0);
- if (j>0)
- {
- nn=nn.mid(j,nn.length());
- mdef->setName(nn.data());
- }
-}//adjustRecordMember
-#endif
-/* strips the prefix for package and package body */
-
-bool VhdlDocGen::writeClassType( ClassDef *& cd,
- OutputList &ol ,QCString & cname)
-{
- //static ClassDef *prev = 0;
- //if (prev == cd) return TRUE;
- //if (cd != prev) prev=cd;
-
- int id=cd->protection();
- QCString qcs = VhdlDocGen::trTypeString(id+2);
- cname=VhdlDocGen::getClassName(cd);
- ol.startBold();
- ol.writeString(qcs.data());
- ol.writeString(" ");
- ol.endBold();
- //ol.insertMemberAlign();
- return FALSE;
-}// writeClassLink
-
-QCString VhdlDocGen::trVhdlType(int type,bool sing)
-{
- switch(type)
- {
- case VhdlDocGen::LIBRARY:
- if (sing) return "Library";
- else return "Libraries";
- case VhdlDocGen::PACKAGE:
- if (sing) return "Package";
- else return "Packages";
- case VhdlDocGen::SIGNAL:
- if (sing) return "Signal";
- else return "Signals";
- case VhdlDocGen::COMPONENT:
- if (sing) return "Component";
- else return "Components";
- case VhdlDocGen::CONSTANT:
- if (sing) return "Constant";
- else return "Constants";
- case VhdlDocGen::ENTITY:
- if (sing) return "Entity";
- else return "Entities";
- case VhdlDocGen::TYPE:
- if (sing) return "Type";
- else return "Types";
- case VhdlDocGen::SUBTYPE:
- if (sing) return "Subtype";
- else return "Subtypes";
- case VhdlDocGen::FUNCTION:
- if (sing) return "Function";
- else return "Functions";
- case VhdlDocGen::RECORD:
- if (sing) return "Record";
- else return "Records";
- case VhdlDocGen::PROCEDURE:
- if (sing) return "Procedure";
- else return "Procedures";
- case VhdlDocGen::ARCHITECTURE:
- if (sing) return "Architecture";
- else return "Architectures";
- case VhdlDocGen::ATTRIBUTE:
- if (sing) return "Attribute";
- else return "Attributes";
- case VhdlDocGen::PROCESS:
- if (sing) return "Process";
- else return "Processes";
- case VhdlDocGen::PORT:
- if (sing) return "Port";
- else return "Ports";
- case VhdlDocGen::USE:
- if (sing) return "use clause";
- else return "Use Clauses";
- case VhdlDocGen::GENERIC:
- if (sing) return "Generic";
- else return "Generics";
- case VhdlDocGen::PACKAGE_BODY:
- return "Package Body";
- case VhdlDocGen::UNITS:
- return "Units";
- case VhdlDocGen::SHAREDVARIABLE:
- if (sing) return "Shared Variable";
- return "Shared Variables";
- case VhdlDocGen::VFILE:
- if (sing) return "File";
- return "Files";
- case VhdlDocGen::GROUP:
- if (sing) return "Group";
- return "Groups";
- case VhdlDocGen::INSTANTIATION:
- if (sing) return "Instantiation";
- else return "Instantiations";
- case VhdlDocGen::ALIAS:
- if (sing) return "Alias";
- return "Aliases";
- case VhdlDocGen::CONFIG:
- if (sing) return "Configuration";
- return "Configurations";
- case VhdlDocGen::MISCELLANEOUS:
- return "Miscellaneous";
- case VhdlDocGen::UCF_CONST:
- return "Constraints";
- default:
- return "Class";
- }
-}
-
-QCString VhdlDocGen::trDesignUnitHierarchy()
-{
- return "Design Unit Hierarchy";
-}
-
-QCString VhdlDocGen::trDesignUnitList()
-{
- return "Design Unit List";
-}
-
-QCString VhdlDocGen::trDesignUnitMembers()
-{
- return "Design Unit Members";
-}
-
-QCString VhdlDocGen::trDesignUnitListDescription()
-{
- return "Here is a list of all design unit members with links to "
- "the Entities they belong to:";
-}
-
-QCString VhdlDocGen::trDesignUnitIndex()
-{
- return "Design Unit Index";
-}
-
-QCString VhdlDocGen::trDesignUnits()
-{
- return "Design Units";
-}
-
-QCString VhdlDocGen::trFunctionAndProc()
-{
- return "Functions/Procedures/Processes";
-}
-
-
-
-
-
-/* do not insert the same component twice */
-
-bool VhdlDocGen::foundInsertedComponent(const QCString & name,Entry* root)
-{
- QListIterator<BaseInfo> bii(*root->extends);
- BaseInfo *bi=0;
- for (bii.toFirst();(bi=bii.current());++bii)
- {
- if (bi->name==name)
- {
- return TRUE; //
- }
- }
-
- return FALSE;
-}// found component
-
-/*! writes a link if the string is linkable else a formatted string */
-
-void VhdlDocGen::writeStringLink(const MemberDef *mdef,QCString mem, OutputList& ol)
-{
- if (mdef)
- {
- ClassDef *cd=mdef->getClassDef();
- if (cd)
- {
- QCString n=cd->name();
- MemberDef* memdef=VhdlDocGen::findMember(n,mem);
- if (memdef && memdef->isLinkable())
- {
- ol.startBold();
- writeLink(memdef,ol);
- ol.endBold();
- ol.docify(" ");
- return;
- }
- }
- }
- VhdlDocGen::startFonts(mem,"vhdlchar",ol);
-}// found component
-
-void VhdlDocGen::writeCodeFragment( MemberDef *mdef,OutputList& ol)
-{
- // Definition d=(Definition)mdef;
- // QCString fdd=mdef->getDefFileExtension();
- // QCString scope=mdef->getScopeString();
- QCString codeFragment=mdef->documentation();
- //FileDef *fd=mdef->getFileDef();
-
- //int start=mdef->getStartBodyLine();
- //int end=mdef->getEndBodyLine();
- QStringList qsl=QStringList::split("\n",codeFragment);
- writeLink(mdef,ol);
- ol.docify(" ");
- ol.insertMemberAlign();
- int len= qsl.count();
- for(int j=0;j<len;j++)
- {
- QCString q=(QCString)qsl[j];
- VhdlDocGen::writeFormatString(q,ol,mdef);
- ol.lineBreak();
- if (j==2) // only the first three lines are shown
- {
- q = "...";
- VhdlDocGen::writeFormatString(q,ol,mdef);
- break;
- }
- }
-}
-
-void VhdlDocGen::writeSource(MemberDef *mdef,OutputList& ol,QCString & cname)
-{
- QCString codeFragment=mdef->documentation();
- int start=mdef->getStartBodyLine();
- QStringList qsl=QStringList::split("\n",codeFragment);
- ol.startCodeFragment();
- int len = qsl.count();
- QCString lineNumber;
- int j;
- for (j=0;j<len;j++)
- {
- lineNumber.sprintf("%05d",start++);
- lineNumber+=" ";
- ol.startBold();
- ol.docify(lineNumber.data());
- ol.endBold();
- ol.insertMemberAlign();
- QCString q=(QCString)qsl[j];
- VhdlDocGen::writeFormatString(q,ol,mdef);
- ol.docify("\n");
- }
- ol.endCodeFragment();
-
- mdef->writeSourceDef(ol,cname);
- mdef->writeSourceRefs(ol,cname);
- mdef->writeSourceReffedBy(ol,cname);
-}
-
-
-QCString VhdlDocGen::convertFileNameToClassName(QCString name)
-{
-
- QCString n=name;
- n=n.remove(0,6);
-
- int i=0;
-
- while((i=n.find("__"))>0)
- {
- n=n.remove(i,1);
- }
-
- while((i=n.find("_1"))>0)
- {
- n=n.replace(i,2,":");
- }
-
- return n;
-}
-
-void VhdlDocGen::parseUCF(const char* input, Entry* entity,QCString fileName,bool altera)
-{
- QCString ucFile(input);
- int lineNo=0;
- QCString newLine="\n";
- QCString comment("#!");
- QCString brief;
-
- while(!ucFile.isEmpty())
- {
- int i=ucFile.find("\n");
- if (i<0) break;
- lineNo++;
- QCString temp=ucFile.left(i);
- temp=temp.stripWhiteSpace();
- bool bb=temp.stripPrefix("//");
-
- if (!temp.isEmpty())
- {
- if (temp.stripPrefix(comment) )
- {
- brief+=temp;
- brief.append("\\n");
- }
- else if (!temp.stripPrefix("#") && !bb)
- {
- if (altera)
- {
- int i=temp.find("-name");
- if (i>0)
- temp=temp.remove(0,i+5);
-
- temp.stripPrefix("set_location_assignment");
-
- initUCF(entity,0,temp,lineNo,fileName,brief);
- }
- else
- {
- QRegExp ee("[\\s=]");
- int i=temp.find(ee);
- QCString ff=temp.left(i);
- temp.stripPrefix(ff.data());
- ff.append("#");
- if (!temp.isEmpty())
- {
- initUCF(entity,ff.data(),temp,lineNo,fileName,brief);
- }
- }
- }
- }//temp
-
- ucFile=ucFile.remove(0,i+1);
- }// while
-}
-
-static void initUCF(Entry* root,const char* type,QCString & qcs,int line,QCString & fileName,QCString & brief)
-{
- if (qcs.isEmpty())return;
- QRegExp sp("\\s");
- QRegExp reg("[\\s=]");
- QCString n;
- // bool bo=(stricmp(type,qcs.data())==0);
-
- VhdlDocGen::deleteAllChars(qcs,';');
- qcs=qcs.stripWhiteSpace();
-
- int i= qcs.find(reg);
- if (i<0) return;
- if (i==0)
- {
- n=type;
- VhdlDocGen::deleteAllChars(n,'#');
- type="";
- }
- else
- {
- n=qcs.left(i);
- }
- qcs=qcs.remove(0,i+1);
- // qcs.prepend("|");
-
- qcs.stripPrefix("=");
-
- Entry* current=new Entry;
- current->spec=VhdlDocGen::UCF_CONST;
- current->section=Entry::VARIABLE_SEC;
- current->bodyLine=line;
- current->fileName=fileName;
- current->type="ucf_const";
- //if (!bo)
- //current->args=type;
- current->args+=qcs;
- current->lang= SrcLangExt_VHDL ;
-
- // adding dummy name for constraints like VOLTAGE=5,TEMPERATURE=20 C
- if (n.isEmpty())
- {
- n="dummy";
- n+=VhdlDocGen::getRecordNumber();
- }
-
- current->name= n+"_";
- current->name.append(VhdlDocGen::getRecordNumber().data());
-
- if (!brief.isEmpty())
- {
- current->brief=brief;
- current->briefLine=line;
- current->briefFile=fileName;
- brief.resize(0);
- }
-
- root->addSubEntry(current);
-}
-
-
-static void writeUCFLink(const MemberDef* mdef,OutputList &ol)
-{
-
- QCString largs(mdef->argsString());
- QCString n= VhdlDocGen::splitString(largs, '#');
- // VhdlDocGen::adjustRecordMember(mdef);
- bool equ=(n.length()==largs.length());
-
- if (!equ)
- {
- ol.writeString(n.data());
- ol.docify(" ");
- ol.insertMemberAlign();
- }
-
- if (mdef->name().contains("dummy")==0)
- VhdlDocGen::writeLink(mdef,ol);
- if (equ)
- ol.insertMemberAlign();
- ol.docify(" ");
- VhdlDocGen::formatString(largs,ol,mdef);
-}
-
-QCString VhdlDocGen::splitString(QCString& str, char c)
-{
- QCString n=str;
- int i=str.find(c);
- if (i>0)
- {
- n=str.left(i);
- str=str.remove(0,i+1);
- }
- return n;
-}
-
-bool VhdlDocGen::findConstraintFile(LayoutNavEntry *lne)
-{
- FileName *fn=Doxygen::inputNameList->first();
- //LayoutNavEntry *cc = LayoutDocManager::instance().rootNavEntry()->find(LayoutNavEntry::Files);
-
- LayoutNavEntry *kk = lne->parent();// find(LayoutNavEntry::Files);
- // LayoutNavEntry *kks = kk->parent();// find(LayoutNavEntry::Files);
- QCString file;
- QCString co("Constraints");
- while (fn)
- {
- FileDef *fd=fn->first();
- if (fd->name().contains(".ucf") || fd->name().contains(".qsf"))
- {
- file = convertNameToFile(fd->name().data(),FALSE,FALSE);
- LayoutNavEntry *ucf=new LayoutNavEntry(lne,LayoutNavEntry::MainPage,TRUE,file,co,"");
- kk->addChild(ucf);
- break;
- }
- fn=Doxygen::inputNameList->next();
- }
- return FALSE;
-}
-
-void VhdlDocGen::writeAlphbeticalClass(OutputList& ol,const ClassDef* cd,const QCString & cname)
-{
- if (cname.contains("::")==0)
- {
- ClassDef*oo= VhdlDocGen::findArchitecture(cd);
- ol.writeObjectLink(cd->getReference(),
- cd->getOutputFileBase(),0,cname);
- if (oo)
- {
- ol.docify(" [");
- ol.writeObjectLink(oo->getReference(),
- oo->getOutputFileBase(),0,"arch");
- ol.docify("] ");
- }
- }
-}
-
-
-
-
-// for cell_inst : [entity] work.proto [ (label|expr) ]
-QCString VhdlDocGen::parseForConfig(QCString & entity,QCString & arch)
-{
- int index;
- QCString label;
- QCString ent("entity");
- if (!entity.contains(":")) return "";
-
- QRegExp exp("[:()\\s]");
- QStringList ql=QStringList::split(exp,entity,FALSE);
- //int ii=ql.findIndex(ent);
- assert(ql.count()>=2);
- label = (QCString)ql[0];
- entity = (QCString)ql[1];
- if ((index=entity.findRev("."))>=0)
- {
- entity.remove(0,index+1);
- }
-
- if (ql.count()==3)
- {
- arch= (QCString)ql[2];
- ql=QStringList::split(exp,arch,FALSE);
- if (ql.count()>1) // expression
- arch="";
- }
- return label; // label
-}
-
-
-// use (configuration|entity|open) work.test [(cellfor)];
-
-QCString VhdlDocGen::parseForBinding(QCString & entity,QCString & arch)
-{
- int index;
- QRegExp exp("[()\\s]");
-
- QCString label="";
- QStringList ql=QStringList::split(exp,entity,FALSE);
-
- if (ql.contains("open"))
- return "open";
-
- if (ql.count()==1)
- (QCString)ql[0];
- //assert(ql.count()>=2);
-
-
- label=(QCString)ql[0];
-
- entity = (QCString)ql[1];
- if ((index=entity.findRev("."))>=0)
- entity.remove(0,index+1);
-
- if (ql.count()==3)
- arch=(QCString)ql[2];
- return label;
-}
-
-ClassDef* VhdlDocGen::findArchitecture(QCString identifier, QCString entity_name)
-{
- QCString archName=entity_name+"::"+identifier;
- return Doxygen::classSDict->find(archName.data());
-}
-
-
-//@param arch bit0:flipflop
-//@param binding e.g entity work.foo(bar)
-//@param label |label0|label1
-// label0:architecture name
-//@param confVhdl of configuration file (identifier::entity_name) or
-// the architecture if isInlineConf TRUE
-//@param isInlineConf
-//@param confN List of configurations
-
-void assignBinding(ConfNode * conf,QCString label)
-{
- QList<Entry> instList= getVhdlInstList();
- QListIterator<Entry> eli(instList);
- Entry *cur;
- ClassDef *archClass;
- QCString archName,entityName;
- bool allOthers=FALSE;
-
- if (conf->isInlineConf)
- {
- archClass=Doxygen::classSDict->find(conf->confVhdl.data());
- }
- else
- {
- archName= VhdlDocGen::getIndexWord(label.data(),0);
- entityName= VhdlDocGen::getIndexWord(conf->confVhdl.data(),1);
- archClass=VhdlDocGen::findArchitecture(archName,entityName);
- }
-
- if (!archClass)
- {
- fprintf(stderr,"\n architecture %s not found ! ",conf->confVhdl.data());
- return;
- }
-
- archName=archClass->name();
-
- QCString allOt=VhdlDocGen::getIndexWord(conf->arch.data(),0);
-
- if (allOt=="all" || allOt=="others")
- allOthers=TRUE;
-
- for (;(cur=eli.current());++eli)
- {
- if (conf->isInlineConf && (conf->confVhdl!=cur->args))
- continue;
-
- if (!conf->isInlineConf && (archName!=cur->args))
- continue;
-
- if (cur->exception==label || conf->isInlineConf)
- {
- QCString sign,archy;
-
- if (allOthers==FALSE)
- {
- archy=conf->arch;
- sign=cur->name+":"+cur->type;
- }
- else
- {
- sign=cur->type;
- archy=VhdlDocGen::getIndexWord(conf->arch.data(),1);
- }
-
-
- if (archy==sign && !cur->stat)
- {
- // fprintf(stderr," \n label [%s] [%s] [%s]",cur->exception.data(),cur->type.data(),cur->name.data());
- QCString ent1=conf->binding;
- QCString arch1;
- QCString rr=VhdlDocGen::parseForBinding(ent1,arch1);
- arch1=ent1+"::"+arch1;
- //ClassDef *archBind=Doxygen::classSDict->find(arch1.data());
- ClassDef *ent=Doxygen::classSDict->find(ent1.data());
- QCString inst=VhdlDocGen::getIndexWord(cur->args.data(),0);
- ClassDef *cd=Doxygen::classSDict->find(inst.data());
-
- if (cd==0 || ent==0)
- continue;
-
- addInstance(ent,archClass,cd,cur);
- cur->stat=TRUE;
- }
- }
- }//for
-}//assignBinding
-
-
-void assignConfiguration(ConfNode* rootNode,QCString label)
-{
- if (rootNode==NULL) return;
- uint iter;
-
- if (!rootNode->isBinding())
- {
- // printf("\n ARCH %s BIND %s \n",rootNode->arch.data(),rootNode->binding.data());
- assignBinding(rootNode,label);
- return;
- }
- else
- label+="|"+rootNode->arch;
-
-
- for(iter=0;iter<rootNode->confN.count();iter++)
- {
- ConfNode* conf= (ConfNode *)rootNode->confN.at(iter);
- assignConfiguration(conf,label);
- }
-}
-
-/*
-
-// file foo.vhd
-// enitity foo
-// .....
-// end entity
-
-// file foo_arch.vhd
-// architecture xxx of foo is
-// ........
-// end architecture
-
- */
-void VhdlDocGen::computeVhdlComponentRelations()
-{
-
- QCString entity,inst,arch,vhd;
-
- QList<ConfNode> confList = getVhdlConfiguration();
- for (uint iter=0;iter<confList.count(); iter++)
- {
- ConfNode* conf= (ConfNode *)confList.at(iter);
- assignConfiguration(conf,"");
- }
-
- QList<Entry> qsl= getVhdlInstList();
- QListIterator<Entry> eli(qsl);
- Entry *cur;
-
- for (eli.toFirst();(cur=eli.current());++eli)
- {
- if (cur->stat ) // was bind
- continue;
-
- if (cur->includeName=="entity" || cur->includeName=="component" )
- {
- entity=cur->includeName+" "+cur->type;
- QCString rr=VhdlDocGen::parseForBinding(entity,arch);
- }
- else if (cur->includeName.isEmpty())
- {
- entity=cur->type;
- }
- ClassDef *classEntity=Doxygen::classSDict->find(entity);
- inst=VhdlDocGen::getIndexWord(cur->args.data(),0);
- ClassDef *cd=Doxygen::classSDict->find(inst);
- ClassDef *ar=Doxygen::classSDict->find(cur->args);
-
- if (cd==0 || classEntity==0 )
- continue;
-
- addInstance(classEntity,ar,cd,cur);
-
- }
-}
-
-static void addInstance(ClassDef* classEntity, ClassDef* ar,
- ClassDef *cd , Entry *cur,ClassDef* /*archBind*/)
-{
-
- if (classEntity==cd) return;
- QCString bName=classEntity->name();
- //bName+="::"+cur->name;
-
- cd->insertBaseClass(classEntity,bName,Public,Normal,0);
-
- QCString n1=cur->name+"::"+cur->type;
- // n1+="::"+cur->name;
- // classEntity->setName(n1.data());
- // classEntity->_setSymbolName(n1.data());
-
- // if (archBind)
- // cd->insertSubClass(archBind,Public,Normal,0);
- // else
- classEntity->insertSubClass(cd,Public,Normal,0);
-
- if (ar==0) return;
- QCString uu=cur->name;
- MemberDef *md=new MemberDef(
- ar->getDefFileName(), cur->startLine,
- cur->type,uu,uu, 0,
- Public, Normal, cur->stat,Member,
- MemberDef::Variable,
- 0,
- 0);
- md->setLanguage(SrcLangExt_VHDL);
- md->setMemberSpecifiers(VhdlDocGen::INSTANTIATION);
- md->setBriefDescription(cur->brief,cur->briefFile,cur->briefLine);
- md->setBodySegment(cur->startLine,-1) ;
- FileDef *fd=ar->getFileDef();
- md->setBodyDef(fd);
- ar->insertMember(md);
- // printf("\nMemberreference [%p]",md);
-}
-
-void VhdlDocGen::writeRecorUnit(QCString & largs,OutputList& ol ,const MemberDef *mdef)
-{
- QStringList ql=QStringList::split("#",largs,FALSE);
- uint len=ql.count();
- for(uint i=0;i<len;i++)
- {
- QCString n=(QCString)ql[i];
- VhdlDocGen::formatString(n,ol,mdef);
- if ((len-i)>1) ol.lineBreak();
- }
-}
-
-
-void VhdlDocGen::writeRecUnitDocu(
- const MemberDef *md,
- OutputList& ol,
- QCString largs
- )
-{
-
- QStringList ql=QStringList::split("#",largs,FALSE);
- uint len=ql.count();
- ol.startParameterList(TRUE);
- bool first=TRUE;
- for(uint i=0;i<len;i++)
- {
- QCString n=(QCString)ql[i];
- ol.startParameterType(first,"");
- VhdlDocGen::formatString(n,ol,md);
- if ((len-i)>1)
- {
- ol.endParameterName(FALSE,FALSE,FALSE);
- }
- else
- {
- ol.endParameterName(TRUE,FALSE,TRUE);
- }
-
- first=FALSE;
- }
-}//#
-
-void VhdlDocGen::writeCodeFragment(OutputList& ol,int start, QCString & codeFragment,const MemberDef* mdef)
-{
- QStringList qsl=QStringList::split("\n",codeFragment);
- ol.startCodeFragment();
- int len = qsl.count();
- QCString lineNumber;
- int j;
- for (j=0;j<len;j++)
- {
- lineNumber.sprintf("%05d",start++);
- lineNumber+=" ";
- ol.startBold();
- ol.docify(lineNumber.data());
- ol.endBold();
- ol.insertMemberAlign();
- QCString q=(QCString)qsl[j];
- VhdlDocGen::writeFormatString(q,ol,mdef);
- ol.docify("\n");
- }
- ol.endCodeFragment();
-}
-
diff --git a/trunk/src/vhdldocgen.h b/trunk/src/vhdldocgen.h
deleted file mode 100644
index ec51f6a..0000000
--- a/trunk/src/vhdldocgen.h
+++ /dev/null
@@ -1,285 +0,0 @@
-/******************************************************************************
- *
- * Copyright (C) 1997-2012 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.
- *
- */
-
-#ifndef VHDLDOCGEN_H
-#define VHDLDOCGEN_H
-
-/**
- * This class implements functions for parsing and generating
- * vhdl documents
- */
-
-#include <qdict.h>
-#include <qcstring.h>
-#include "layout.h"
-#include "memberlist.h"
-
-class QStringList;
-class Entry;
-class ClassSDict;
-class FileStorage;
-class EntryNav;
-class ClassDef;
-class MemberDef;
-struct Argument;
-
-// wrapper class for the vhdl parser
-class MyParserVhdl
-{
- public:
- uint iFileSize;
-
- ~MyParserVhdl(){}
- MyParserVhdl(){}
-
- int parse(MyParserVhdl*);
- int doLex();
- };
-
-class VhdlDocGen
-{
- public:
-
- enum VhdlClasses // Overlays: Protection
- {
- ENTITYCLASS, // Overlays: Public
- PACKBODYCLASS, // Overlays: Protected
- ARCHITECTURECLASS, // Overlays: Private
- PACKAGECLASS // Overlays: Package
- };
-
- enum VhdlKeyWords
- {
- LIBRARY=1,
- ENTITY,
- PACKAGE_BODY,
- ARCHITECTURE,
- PACKAGE,
- ATTRIBUTE,
- SIGNAL,
- COMPONENT,
- CONSTANT,
- TYPE,
- SUBTYPE,
- FUNCTION,
- RECORD,
- PROCEDURE,
- USE,
- PROCESS,
- PORT,
- UNITS,
- GENERIC,
- INSTANTIATION,
- GROUP,
- VFILE,
- SHAREDVARIABLE,
- CONFIG,
- ALIAS,
- MISCELLANEOUS,
- UCF_CONST
- };
-
- VhdlDocGen();
- virtual ~VhdlDocGen();
- static void init();
- static QCString convertFileNameToClassName(QCString name);
- // --- used by vhdlscanner.l -----------
-
- static QCString getIndexWord(const char* ,int index);
- static bool foundInsertedComponent(const QCString& name,Entry* root);
- static bool deleteCharRev(QCString &s,char c);
- static void deleteAllChars(QCString &s,char c);
- static void parseFuncProto(const char* text,
- QList<Argument>& ,
- QCString& name,
- QCString& ret,
- bool doc=false);
- // -----------------------------------
-
- static void computeVhdlComponentRelations();
-
- static QCString* findKeyWord(const QCString& word);
-
- static ClassDef* getPackageName(const QCString& name);
- static MemberDef* findMember(const QCString& className,
- const QCString& memName);
- static void findAllPackages(const QCString& className,
- QDict<QCString>&);
- static MemberDef* findMemberDef(ClassDef* cd,
- const QCString& key,
- MemberList::ListType type);
- static ClassDef *getClass(const char *name);
- static MemberDef* findFunction(const QList<Argument> &ql,
- const QCString& name,
- const QCString& package, bool type);
- static bool compareString(const QCString& s1,
- const QCString& s2);
- static QCString getClassTitle(const ClassDef*);
- static void writeInlineClassLink(const ClassDef*,
- OutputList &ol);
-
- static bool isConstraint(const MemberDef *mdef)
- { return mdef->getMemberSpecifiers()==VhdlDocGen::UCF_CONST; }
- static bool isConfig(const MemberDef *mdef)
- { return mdef->getMemberSpecifiers()==VhdlDocGen::CONFIG; }
- static bool isAlias(const MemberDef *mdef)
- { return mdef->getMemberSpecifiers()==VhdlDocGen::ALIAS; }
- static bool isLibrary(const MemberDef *mdef)
- { return mdef->getMemberSpecifiers()==VhdlDocGen::LIBRARY; }
- static bool isGeneric(const MemberDef *mdef)
- { return mdef->getMemberSpecifiers()==VhdlDocGen::GENERIC; }
- static bool isPort(const MemberDef *mdef)
- { return mdef->getMemberSpecifiers()==VhdlDocGen::PORT; }
- static bool isComponent(const MemberDef *mdef)
- { return mdef->getMemberSpecifiers()==VhdlDocGen::COMPONENT; }
- static bool isPackage(const MemberDef *mdef)
- { return mdef->getMemberSpecifiers()==VhdlDocGen::USE; }
- static bool isEntity(const MemberDef *mdef)
- { return mdef->getMemberSpecifiers()==VhdlDocGen::ENTITY; }
- static bool isConstant(const MemberDef *mdef)
- { return mdef->getMemberSpecifiers()==VhdlDocGen::CONSTANT; }
- static bool isVType(const MemberDef *mdef)
- { return mdef->getMemberSpecifiers()==VhdlDocGen::TYPE; }
- static bool isSubType(const MemberDef *mdef)
- { return mdef->getMemberSpecifiers()==VhdlDocGen::SUBTYPE; }
- static bool isVhdlFunction(const MemberDef *mdef)
- { return mdef->getMemberSpecifiers()==VhdlDocGen::FUNCTION; }
- static bool isProcess(const MemberDef *mdef)
- { return mdef->getMemberSpecifiers()==VhdlDocGen::PROCESS; }
- static bool isSignal(const MemberDef *mdef)
- { return mdef->getMemberSpecifiers()==VhdlDocGen::SIGNAL; }
- static bool isAttribute(const MemberDef *mdef)
- { return mdef->getMemberSpecifiers()==VhdlDocGen::ATTRIBUTE; }
- static bool isSignals(const MemberDef *mdef)
- { return mdef->getMemberSpecifiers()==VhdlDocGen::SIGNAL; }
- static bool isProcedure(const MemberDef *mdef)
- { return mdef->getMemberSpecifiers()==VhdlDocGen::PROCEDURE; }
- static bool isRecord(const MemberDef *mdef)
- { return mdef->getMemberSpecifiers()==VhdlDocGen::RECORD; }
- static bool isArchitecture(const MemberDef *mdef)
- { return mdef->getMemberSpecifiers()==VhdlDocGen::ARCHITECTURE; }
- static bool isUnit(const MemberDef *mdef)
- { return mdef->getMemberSpecifiers()==VhdlDocGen::UNITS; }
- static bool isPackageBody(const MemberDef *mdef)
- { return mdef->getMemberSpecifiers()==VhdlDocGen::PACKAGE_BODY; }
- static bool isVariable(const MemberDef *mdef)
- { return mdef->getMemberSpecifiers()==VhdlDocGen::SHAREDVARIABLE; }
- static bool isFile(const MemberDef *mdef)
- { return mdef->getMemberSpecifiers()==VhdlDocGen::VFILE; }
- static bool isGroup(const MemberDef *mdef)
- { return mdef->getMemberSpecifiers()==VhdlDocGen::GROUP; }
- static bool isCompInst(const MemberDef *mdef)
- { return mdef->getMemberSpecifiers()==VhdlDocGen::INSTANTIATION; }
- static bool isMisc(const MemberDef *mdef)
- { return mdef->getMemberSpecifiers()==VhdlDocGen::MISCELLANEOUS; }
-
- //-----------------------------------------------------
- // translatable items
-
- static QCString trTypeString(int type);
- static QCString trVhdlType(int type,bool sing=true);
-
- // trClassHierarchy.
- static QCString trDesignUnitHierarchy();
-
- // trCompoundList
- static QCString trDesignUnitList();
-
- // trCompoundMembers.
- static QCString trDesignUnitMembers();
-
- // trCompoundListDescription
- static QCString trDesignUnitListDescription();
-
- // trCompounds
- static QCString trDesignUnits();
-
- // trCompoundIndex
- static QCString trDesignUnitIndex();
-
- // trFunctions
- static QCString trFunctionAndProc();
-
- //-----------------------------------------------------
-
- static void prepareComment(QCString&);
- static void formatString(const QCString&,OutputList& ol,const MemberDef*);
-
- static void writeFormatString(const QCString&,OutputList& ol,const MemberDef*);
- static void writeFunctionProto(OutputList& ol,const ArgumentList *al,const MemberDef*);
- static void writeProcessProto(OutputList& ol,const ArgumentList *al,const MemberDef*);
- static void writeProcedureProto(OutputList& ol, const ArgumentList *al,const MemberDef*);
- static void writeFuncProcDocu(const MemberDef *mdef, OutputList& ol,const ArgumentList* al,bool type=false);
- static void writeRecordProto(const MemberDef *mdef, OutputList& ol,const ArgumentList *al);
-
- static void writeVHDLTypeDocumentation(const MemberDef* mdef, const Definition* d, OutputList &ol);
-
- static void writeVhdlDeclarations(MemberList*,OutputList&,GroupDef*,ClassDef*,FileDef*,NamespaceDef*);
-
- static void writeVHDLDeclaration(MemberDef* mdef,OutputList &ol,
- ClassDef *cd,NamespaceDef *nd,FileDef *fd,GroupDef *gd,
- bool inGroup);
-
- static void writePlainVHDLDeclarations(MemberList* ml,OutputList &ol,
- ClassDef *cd,NamespaceDef *nd,FileDef *fd,GroupDef *gd,int specifier);
-
- static void writeVHDLDeclarations(MemberList* ml,OutputList &ol,
- ClassDef *cd,NamespaceDef *nd,FileDef *fd,GroupDef *gd,
- const char *title,const char *subtitle,bool showEnumValues,int type);
-
- static bool writeClassType(ClassDef *&,OutputList &ol ,QCString & cname);
-
-
- static QCString convertArgumentListToString(const ArgumentList* al,bool f);
- static QCString getProcessNumber();
- static QCString getRecordNumber();
-
- static QCString getClassName(const ClassDef*);
- // obsolete
- // static void adjustRecordMember(MemberDef *mdef);
-
- static void writeLink(const MemberDef* mdef,OutputList &ol);
- static void adjustMemberName(QCString& nn);
- static bool membersHaveSpecificType(MemberList *ml,int type);
- static void startFonts(const QCString& q, const char *keyword,OutputList& ol);
- static bool isNumber(const QCString& s);
- static QCString getProtectionName(int prot);
- static QCString splitString(QCString & str, char c);
- static void parseUCF(const char* input,Entry* entity,QCString f,bool vendor);
-
- static bool findConstraintFile( LayoutNavEntry *lne);
-
- static ClassDef* findArchitecture(const ClassDef *cd);
- static ClassDef* findArchitecture(QCString identifier, QCString entity_name);
-
- static void writeCodeFragment( MemberDef *mdef,OutputList& ol);
- static void writeCodeFragment (OutputList& ol,int start, QCString & codeFragment,const MemberDef* mdef);
-
- static void writeSource(MemberDef *mdef,OutputList& ol,QCString & cname);
- static void writeAlphbeticalClass(OutputList& ol,const ClassDef* cd,const QCString &);
-
- static QCString parseForConfig(QCString & entity,QCString & arch);
- static QCString parseForBinding(QCString & entity,QCString & arch);
-
- private:
- static void findAllArchitectures(QList<QCString>& ql,const ClassDef *cd);
- static bool compareArgList(ArgumentList*,ArgumentList*);
- static void writeVhdlLink(const ClassDef* cdd ,OutputList& ol,QCString& type,QCString& name,QCString& beh);
- static void writeStringLink(const MemberDef *mdef,QCString mem,OutputList& ol);
- static void writeRecUnitDocu( const MemberDef *md, OutputList& ol,QCString largs);
- static void writeRecorUnit(QCString & largs,OutputList& ol ,const MemberDef *mdef);
-};
-
-#endif
diff --git a/trunk/src/vhdlparser.y b/trunk/src/vhdlparser.y
deleted file mode 100644
index fac86e8..0000000
--- a/trunk/src/vhdlparser.y
+++ /dev/null
@@ -1,2392 +0,0 @@
-
-/*********************************************************************************************
- * The original was a VHDL parser description to be used with GMD Compiler
- * Tool Box
- * written from:
- * Jan den Ouden, Jaap Hofstede
- * Department of Computer Science (INF/SPA)
- * University of Twente
- * PB 217, 7500 AE ENSCHEDE, The Netherlands
- * Tel: +31 53 893788
- * Email: hofstede@cs.utwente.nl
- * avail at: ftp.cs.utwente.nl in pub/src/VHDL/Grammar
- *
- * author of YACC transformation:
- * Thomas Dettmer
- * Dortmund University
- * Dept. of Computer Scienc, LS1
- * PB 500 500
- * D-44221 Dortmund (Germany)
- * Phone: +49-231-755-6464
- * e-mail: dettmer@ls1.informatik.uni-dortmund.de
- *****************************************************************
- *
- * This file is intended not to be used for commercial purposes
- * without permission of the University of Twente and permission
- * of the University of Dortmund
- *
- * NOTE THAT THERE IS NO WARRANTY FOR CORRECTNES, COMPLETENESS, SUPPORT
- * OR ANYTHING ELSE.
- *
- *******************************************************/
-/******************************************************************************
- * modified for doxygen by M. Kreis
- * extended to VHDL 93/2002/2008
- ******************************************************************************/
-
-
-%{
-#include <stdio.h>
-#include <qcstring.h>
-#include <qstringlist.h>
-
-#ifndef YYSTYPE
-typedef int YYSTYPE;
-#endif
-
-struct YYMM
-{
- int itype;
- QCString qstr;
-};
-
-// define struct instead of union
-#define YYSTYPE YYMM
-
-#include "membergroup.h"
-#include "vhdldocgen.h"
-#include "doxygen.h"
-#include "searchindex.h"
-#include "vhdlscanner.h"
-#include "commentscan.h"
-#include "entry.h"
-#include "arguments.h"
-
-//-----------------------------variables ---------------------------------------------------------------------------
-static MyParserVhdl* myconv=0;
-
-static struct s_contVhdl s_str;
-static QList<Entry>instFiles;
-static int yyLineNr;
-static Entry* lastCompound;
-static Entry* currentCompound;
-static Entry* lastEntity;
-static Entry* current;
-static Entry* tempEntry;
-static Entry* current_root;
-static QCString compSpec;
-static QCString currName;
-static int levelCounter;
-static QCString confName;
-static QCString genLabels;
-
-static QList<ConfNode> configL;
-static ConfNode* currNode;
-
-static int currP=0;
-
-enum { GEN_SEC=0x1, PARAM_SEC,CONTEXT_SEC,PROTECTED_SEC } ;
-
-static int param_sec = 0;
-static int parse_sec=0;
-
-
-//---------------------------- function --------------------------------------------------------------------------------
-
-int vhdlScanYYlex ();
-void vhdlScanYYerror (char const *);
-
-static void addVhdlType(const QCString &name,int startLine,
- int section,int spec,
- const char* args,const char* type,
- Protection prot=Public);
-static void addCompInst(char *n, char* instName,char* comp,int line);
-
-static void newEntry();
-static void initEntry(Entry *e);
-static bool isFuncProcProced();
-static void popConfig();
-static void pushLabel(QCString label);
-static void popLabel();
-static void addConfigureNode(const char* a,const char*b,
- bool isRoot,bool isLeave,bool inlineConf=FALSE);
-//static bool addLibUseClause(const QCString &type);
-static bool isFuncProcProced();
-static void initEntry(Entry *e);
-static void addProto(const char *s1,const char *s2,const char *s3,
- const char *s4,const char *s5,const char *s6);
-static bool findInstant(QCString inst);
-static void createFunction(const QCString &impure,int spec,
- const QCString &fname);
-
-void newVhdlEntry()
-{
- newEntry();
-}
-
-Entry* getCurrentVhdlEntry()
-{
- return current;
-}
-
-void initVhdlParser()
-{
- lastCompound=0;
- lastEntity=0;
- currentCompound=0;
- lastEntity=0;
- current_root=s_str.root;
- current=new Entry();
- initEntry(current);
-}
-
-QList<Entry> & getVhdlInstList()
-{
- return instFiles;
-}
-
-
-%}
-
-%token
-t_ABSTRLIST
-t_CHARLIST
-t_DIGIT
-t_STRING
-t_LETTER
-t_ACCESS
-t_AFTER
-t_ALIAS
-t_ALL
-t_AND
-t_ARCHITECTURE
-t_ARRAY
-t_ASSERT
-t_ATTRIBUTE
-t_BEGIN
-t_BLOCK
-t_BODY
-t_BUFFER
-t_BUS
-t_CASE
-t_COMPONENT
-t_CONFIGURATION
-t_CONSTANT
-t_DISCONNECT
-t_DOWNTO
-t_ELSE
-t_ELSIF
-t_END
-t_ENTITY
-t_EXIT
-t_FILE
-t_FOR
-t_FUNCTION
-t_GENERATE
-t_GENERIC
-t_GUARDED
-t_IF
-t_IN
-t_INOUT
-t_IS
-t_LABEL
-t_LIBRARY
-t_LINKAGE
-t_LOOP
-t_MAP
-t_NAND
-t_NEW
-t_NEXT
-t_NOR
-t_NULL
-t_OF
-t_ON
-t_OPEN
-t_OR
-t_OTHERS
-t_OUT
-t_PACKAGE
-t_PORT
-t_PROCEDURE
-t_PROCESS
-t_RANGE
-t_RECORD
-t_REGISTER
-t_REPORT
-t_RETURN
-t_SELECT
-t_SEVERITY
-t_SIGNAL
-t_SUBTYPE
-t_THEN
-t_TO
-t_TRANSPORT
-t_TYPE
-t_UNITS
-t_UNTIL
-t_USE
-t_VARIABLE
-t_WAIT
-t_WHEN
-t_WHILE
-t_WITH
-t_XOR
-
-/* new keywords */
-t_IMPURE
-t_PURE
-t_GROUP
-t_POSTPONED
-t_SHARED
-t_XNOR
-t_SLL
-t_SRA
-t_SLA
-t_SRL
-t_ROR
-t_ROL
-t_UNAFFECTED
-/*============== VHDL 2008 keywords ======================= */
-
-t_ASSUME_GUARANTEE
-t_ASSUME
-t_CONTEXT
-t_COVER
-t_DEFAULT
-t_FAIRNESS
-t_FORCE
-t_INERTIAL
-t_LITERAL
-t_PARAMETER
-t_PROTECTED
-t_PROPERTY
-t_REJECT
-t_RELEASE
-t_RESTRICT
-t_RESTRICT_GUARANTEE
-t_SEQUENCE
-t_STRONG
-t_VMODE
-t_VPROP
-t_VUNIT
-
-
-/*============== VHDL binary operators 2008 ======================= */
-
-t_SLSL
-t_SRSR
-t_QQ
-t_QGT
-t_QLT
-t_QG
-t_QL
-t_QEQU
-t_QNEQU
-
-%nonassoc t_EQSym t_NESym t_LTSym t_LESym t_GTSym t_GESym t_QNEQU t_QEQU t_QL t_QG t_QLT t_QGT
-%left t_Plus t_Minus t_Ampersand
-%left MED_PRECEDENCE
-%left t_Star t_Slash t_MOD t_REM
-%nonassoc t_DoubleStar t_ABS t_NOT MAX_PRECEDENCE
-
-/* misc syms */
-/*t_Space */
-
-%token
-t_Apostrophe
-t_LeftParen
-t_RightParen
-t_Comma
-t_VarAsgn
-t_Colon
-t_Semicolon
-t_Arrow
-t_Box
-t_Bar
-t_Dot
-t_Q
-t_At
-t_Neg
-t_LEFTBR
-t_RIGHTBR
-t_ToolDir
-
-%type<qstr> designator literal enumeration_literal physical_literal physical_literal_no_default physical_literal_1
-%type<qstr> lib_clause use_clause sel_list entity_decl entity_start entity_decl_2 entity_decl_1 arch_body arch_start arch_body_1
-%type<qstr> config_decl config_start config_decl_2 config_decl_1 config_decl_3 package_decl package_start package_body pack_body_start package_body_2 package_body_1 common_decltve_item
-%type<qstr> config_decltve_item subprog_decl subprog_body interf_list interf_element interf_element_4 interf_element_3 interf_element_2 interf_element_1 mode
-%type<qstr> association_list association_list_1 association_list_2 gen_association_list gen_association_list_1 gen_association_list_2 association_element gen_association_element formal_part actual_part mark expr and_relation relation primary name name2 sel_name suffix ifts_name
-%type<qstr> attribute_name aggregate element_association_list2 qualified_expr element_association choices choices_1 choices_2 choice type_decl type_decl_1 type_definition enumeration_type_definition enumeration_type_definition_1 enumeration_type_definition_2 physical_type_definition physical_type_definition_1 physical_type_definition_2 base_unit_decl secondary_unit_decl unconstrained_array_definition unconstrained_array_definition_1 unconstrained_array_definition_2 index_subtype_definition constrained_array_definition record_type_definition record_type_definition_1 record_type_definition_2 element_decl
-%type<qstr> access_type_definition file_type_definition subtype_decl subtype_indic subtype_indic_1 subtype_indic1 subtype_indic1_1 range_constraint index_constraint index_constraint_1 index_constraint_2 discrete_range discrete_range1 range_spec direction constant_decl constant_decl_1 signal_decl signal_decl_2 signal_decl_1 variable_decl variable_decl_1 object_class signal_kind alias_decl file_decl file_decl_1 attribute_decl attribute_spec entity_spec entity_name_list entity_name_list_1
-%type<qstr> entity_name_list_2 entity_class block_stat
-%type<qstr> generate_stat generate_stat_1 procs_stat procs_stat1 procs_stat1_1 sensitivity_list sensitivity_list_1 sensitivity_list_2
-%type<qstr> procedure_call_stat comp_decl comp_decl_2 comp_decl_1 block_config block_config_2 block_config_3 block_config_1 block_config_4 block_spec config_item comp_config comp_config_2 comp_config_1 config_spec binding_indic comp_spec
-%type<qstr> inst_list entity_aspect idf_list procs_stat1_6
-%type<qstr> t_Identifier t_StringLit t_BitStringLit t_AbstractLit t_CharacterLit tbox group_name record_type_simple_name
-%type<qstr> entity_class_entry_list entity_class_entry group_constituent_list group_constituent group_declaration group_template_declaration
-%type<qstr> procs_stat1_5 comp_1 mark_comp dot_name fi_dec multiplying_operator factor term adding_op
-%type<qstr> simple_exp alias_spec sigma signature1 mark_stats mark_stats_1 signature
-%type<qstr> protected_type_body protected_type_declaration alias_name_stat vcomp_stat comp_spec_stat
-%type<qstr> sig_stat external_name absolute_pathname relative_pathname package_path_name external_pathname pathname_element_list neg_list pathname_element
-
-%type<qstr> func_name return_is param func_prec iproc ifunc interface_subprogram_decl interface_package_decl package_instantiation_decl
-%type<qstr> subprogram_instantiation_decl
-%type<qstr> context_ref libustcont_stats libustcont_stat context_decl
-
-
-%debug
-
-// for debugging set yydebug=1
-%initial-action { yydebug=0; }
-
-%expect 2
-
-// minimum bison version
-//%require "2.2"
-
-%%
-start: design_file
-
-
-design_file : design_unit_list
-
-design_unit_list: design_unit
- | design_unit_list design_unit
- ;
-
-designator : t_Identifier { $$=$1; }
- | t_StringLit { $$=$1; }
- ;
-
-literal : t_AbstractLit { $$=$1; }
- | t_CharacterLit { $$=$1; }
- | t_BitStringLit { $$=$1; }
- | physical_literal_no_default { $$=$1; }
- | t_NULL { $$="null"; }
- ;
-
-enumeration_literal : t_CharacterLit { $$=$1; }
- | t_Identifier { $$=$1; }
-
-physical_literal : physical_literal_1 t_Identifier { $$=$1+" "+$2; }
-
-physical_literal_1 : /* empty */ { $$=""; }
- | t_AbstractLit { $$=$1; }
-
-physical_literal_no_default : t_AbstractLit t_Identifier { $$=$1+" "+$2; }
-
-idf_list : t_Identifier { $$=$1; }
- | idf_list t_Comma t_Identifier { $$=$1+","+$3}
- ;
-
-/*------------------------------------------
--- Desing Unit
---------------------------------------------*/
-
-design_unit : context_list lib_unit
-
-context_list : /* empty */
- | context_list context_item
-
-lib_unit : entity_decl
- | config_decl
- | package_decl
- | arch_body
- | package_body
- | context_decl
- | package_instantiation_decl
- ;
-
-context_item : lib_clause
- | use_clause
- ;
-
-lib_clause : t_LIBRARY idf_list t_Semicolon
- {
- if ( parse_sec == 0)
- {
- addVhdlType($2,getParsedLine(t_LIBRARY),Entry::VARIABLE_SEC,VhdlDocGen::LIBRARY,$2.data(),"_library_");
- }
- $$="library "+$2;
- }
-
-use_clause : t_USE sel_list t_Semicolon
- {
- QStringList ql1=QStringList::split(",",$2,FALSE);
- for (uint j=0;j<ql1.count();j++)
- {
- QStringList ql=QStringList::split(".",ql1[j],FALSE);
- QCString it=(QCString)ql[1];;
- if ( parse_sec == 0 )
- {
- addVhdlType(it,getParsedLine(t_USE),Entry::VARIABLE_SEC,VhdlDocGen::USE,it.data(),"_use_");
- }
- }
- $$="use "+$2;
- }
-
-sel_list : sel_name { $$=$1; }
- | sel_list t_Comma sel_name { $$=$1+","+$3; }
- ;
-/*------------------------------------------
--- Library Units
---------------------------------------------*/
-
-entity_decl : entity_start error comp_end_dec t_Semicolon
-
-entity_decl : entity_start entity_decl_1 entity_decl_2
- entity_decl_3 entity_decl_4 comp_end_dec t_Semicolon
-
-entity_start: t_ENTITY t_Identifier t_IS
- {
- $$=$2;
- lastEntity=current;
- lastCompound=0;
- /*int k=*/ getParsedLine(t_ENTITY);
- addVhdlType($$,getParsedLine(t_ENTITY),Entry::CLASS_SEC,VhdlDocGen::ENTITY,0,0,Public);
- //fprintf(stderr,"\n entiy %s : at line %d",$$.data(),s_str.yyLineNr);
- }
- ;
-
-entity_decl_5 : /* empty */
- | t_Identifier
- ;
-entity_decl_4 : /* empty */
- | t_BEGIN concurrent_stats
- ;
-entity_decl_3 : /* empty */
- | entity_decl_3 entity_decl_6
- ;
-
-entity_decl_6 : entity_decltve_item
-
-entity_decl_2 : /* empty */ { $$=""; }
- | t_PORT { currP=VhdlDocGen::PORT; } interf_list t_Semicolon { currP=0; }
- ;
-entity_decl_1 : /* empty */ { $$=""; }
- | t_GENERIC { currP=VhdlDocGen::GENERIC;parse_sec=GEN_SEC} interf_list t_Semicolon{ currP=0;parse_sec=0; }
- | t_GENERIC error t_Semicolon{ currP=0; }
- ;
-
-
-arch_body : arch_start arch_body_1 t_BEGIN concurrent_stats t_END arch_body_2 t_Semicolon
-arch_body : arch_start error t_END arch_body_2 t_Semicolon
-
-arch_start : t_ARCHITECTURE t_Identifier t_OF t_Identifier t_IS
- {
- $$=$4;
- $$+="::";
- $$+=$2;
- pushLabel($2);
- lastCompound=current;
- addVhdlType($$,getParsedLine(t_ARCHITECTURE),Entry::CLASS_SEC,VhdlDocGen::ARCHITECTURE,0,0,Private);
- }
-arch_body_2 : /* empty */
-arch_body_2 : t_Identifier
-arch_body_2 : t_ARCHITECTURE t_Identifier
-arch_body_2 : t_ARCHITECTURE
-
-arch_body_1 : /* empty */ { $$=""; }
-arch_body_1 : arch_body_1 arch_body_3
-
-arch_body_3 : block_decltve_item
-
-config_decl : config_start error t_END config_decl_2 t_Semicolon { genLabels.resize(0); }
-config_decl : config_start config_decl_1 block_config t_END config_decl_2 t_Semicolon { genLabels.resize(0); }
- {
- confName="";
- }
-
-
-config_start : t_CONFIGURATION t_Identifier t_OF t_Identifier t_IS
- {
- confName=$2+"::"+$4;
- addVhdlType($2.data(),getParsedLine(t_CONFIGURATION),Entry::VARIABLE_SEC,VhdlDocGen::CONFIG,"configuration",$4.data());
- }
-
-config_decl_2 : /* empty */ { $$=""; }
-config_decl_2 : t_Identifier { $$=$1; }
-config_decl_2 : t_CONFIGURATION { $$="configuration"; }
-config_decl_2 : t_CONFIGURATION t_Identifier { $$=$2; }
-config_decl_1 : /* empty */ { $$=""; }
-config_decl_1 : config_decl_1 config_decl_3 { $$=$1+" "+$2; }
-config_decl_3 : config_decltve_item { $$=$1; }
-
-package_decl : package_start error t_END package_decl_2 t_Semicolon
-package_decl : package_start package_decl_1 t_END package_decl_2 t_Semicolon
-package_start : t_PACKAGE t_Identifier t_IS
- {
- lastCompound=current;
-
-
- Entry *clone=new Entry(*current);
- clone->section=Entry::NAMESPACE_SEC;
- clone->spec=VhdlDocGen::PACKAGE;
- clone->name=$2;
- int line=s_str.iLine;
- clone->startLine=line;
- clone->bodyLine=line;
-
- clone->protection=Package;
- current_root->addSubEntry(clone);
-
-
- addVhdlType($2,line,Entry::CLASS_SEC,VhdlDocGen::PACKAGE,0,0,Package);
- //fprintf(stderr,"\n entiy %s : at line %d",$$.data(),s_str.yyLineNr);
- }
-
-package_decl_2 : /* empty */
-package_decl_2 : t_Identifier { lastCompound=0; }
-package_decl_2 : t_PACKAGE t_Identifier { lastCompound=0; }
-package_decl_2 : t_PACKAGE { lastCompound=0; }
-
-package_decl_1 : /* empty */
-package_decl_1 : package_decl_22
-package_decl_1 : package_decl_1 package_decl_3
-package_decl_3 : package_decltve_item
-
-package_decl_22: gen_interface_list t_Semicolon
-package_decl_22: gen_interface_list
-package_decl_22: gen_interface_list gen_assoc_list
-package_decl_22: gen_interface_list gen_assoc_list t_Semicolon
-
-package_body : pack_body_start error t_END package_body_2 t_Semicolon
-package_body : pack_body_start package_body_1 t_END package_body_2 t_Semicolon
-pack_body_start : t_PACKAGE t_BODY t_Identifier t_IS
- {
- $$=$3;
- lastCompound=current;
- $$.prepend("_");
- addVhdlType($$,getParsedLine(t_PACKAGE) ,Entry::CLASS_SEC,VhdlDocGen::PACKAGE_BODY,0,0,Protected);
- }
-package_body_2 : /* empty */ { $$="";lastCompound=0; }
-package_body_2 : t_Identifier { lastCompound=0; }
-package_body_2 : t_PACKAGE t_BODY { lastCompound=0; }
-package_body_2 : t_PACKAGE t_BODY t_Identifier { lastCompound=0; }
-
-
-package_body_1 : /* empty */ { $$=""; }
-package_body_1 : package_body_1 package_body_3
-package_body_3 : package_body_decltve_item
-
-
-
-/*------------------------------------------
--- Declarative Item
---------------------------------------------*/
-
-common_decltve_item_1: package_decl
-common_decltve_item_1: package_instantiation_decl
-common_decltve_item_1: package_body
-common_decltve_item_1: subprogram_instantiation_decl
-
-
-common_decltve_item: type_decl
-common_decltve_item: subtype_decl
-common_decltve_item: constant_decl
-common_decltve_item: file_decl
-common_decltve_item: alias_decl
-common_decltve_item: subprog_decl
-common_decltve_item: use_clause
-
-entity_decltve_item: common_decltve_item
-entity_decltve_item: subprog_body
-entity_decltve_item: attribute_decl
-entity_decltve_item: attribute_spec
-entity_decltve_item: disconnection_spec
-entity_decltve_item: signal_decl
-entity_decltve_item: variable_decl
-entity_decltve_item: group_template_declaration
-entity_decltve_item: group_declaration
-entity_decltve_item: common_decltve_item_1
-
-
-block_decltve_item: common_decltve_item
-block_decltve_item: subprog_body
-block_decltve_item: comp_decl
-block_decltve_item: attribute_decl
-block_decltve_item: attribute_spec
-block_decltve_item: config_spec
-block_decltve_item: disconnection_spec
-block_decltve_item: signal_decl
-block_decltve_item: variable_decl
-block_decltve_item: group_template_declaration
-block_decltve_item: group_declaration
-block_decltve_item: common_decltve_item_1
-block_decltve_item: tool_directive
-
-block_declarative_part: block_decltve_item
- | block_declarative_part block_decltve_item
-
-
-package_decltve_item: common_decltve_item
-package_decltve_item: comp_decl
-package_decltve_item: attribute_decl
-package_decltve_item: attribute_spec
-package_decltve_item: disconnection_spec
-package_decltve_item: signal_decl
-package_decltve_item: variable_decl
-package_decltve_item: group_template_declaration
-package_decltve_item: group_declaration
-package_decltve_item: package_decl
-package_decltve_item: package_instantiation_decl
-package_decltve_item: subprogram_instantiation_decl
-
-package_body_decltve_item: common_decltve_item
-package_body_decltve_item: subprog_body
-package_body_decltve_item: variable_decl
-package_body_decltve_item: group_template_declaration
-package_body_decltve_item: group_declaration
-package_body_decltve_item: attribute_decl
-package_body_decltve_item: attribute_spec
-package_body_decltve_item: common_decltve_item_1
-
-subprog_decltve_item: common_decltve_item
-subprog_decltve_item: subprog_body
-subprog_decltve_item: attribute_decl
-subprog_decltve_item: attribute_spec
-subprog_decltve_item: variable_decl
-subprog_decltve_item: group_template_declaration
-subprog_decltve_item: group_declaration
-subprog_decltve_item: common_decltve_item_1
-
-procs_decltve_item: common_decltve_item
-procs_decltve_item: subprog_body
-procs_decltve_item: attribute_decl
-procs_decltve_item: attribute_spec
-procs_decltve_item: variable_decl
-procs_decltve_item: group_template_declaration
-procs_decltve_item: group_declaration
-procs_decltve_item: common_decltve_item_1
-
-config_decltve_item: attribute_spec { $$=$1; }
-config_decltve_item: use_clause { $$=$1; }
-config_decltve_item: group_declaration { $$=$1; }
-config_decltve_item: t_USE t_VUNIT idf_list t_Semicolon { $$=$3; }
-
-/*------------------------------------------
--- Subprograms
---------------------------------------------*/
-func_prec: t_PURE { $$="pure"; }
-func_prec: t_IMPURE { $$="impure"; }
-
-subprog_decl: subprog_spec t_Semicolon { currP=0; }
-
-subprog_spec: t_PROCEDURE t_Identifier
- { currP=VhdlDocGen::PROCEDURE; createFunction($2,currP,0); }
- subprog_spec_1 { newEntry(); }
-subprog_spec: func_prec t_FUNCTION designator
- {
- currP=VhdlDocGen::FUNCTION;
- createFunction($1,currP,$3.data());
- }
- subprog_spec_2 t_RETURN mark
- {
- tempEntry=current;
- current->type=$7;
- newEntry();
- }
-
-subprog_spec : t_FUNCTION designator
- {
- currP=VhdlDocGen::FUNCTION;
- createFunction(0,currP,$2.data());
- }
- subprog_spec_2 t_RETURN mark
- {
- tempEntry=current;
- current->type=$6;
- newEntry();
- }
-
-subprog_spec_22: gen_interface_list
-subprog_spec_22: gen_interface_list gen_assoc_list
-
-subprog_spec_33: t_PARAMETER
- { param_sec=PARAM_SEC; }
- interf_list
- { param_sec= 0; }
-subprog_spec_33: { param_sec=PARAM_SEC; }
- interf_list
- { param_sec= 0; }
-
-subprog_spec_2: /* empty */
-subprog_spec_2: subprog_spec_22 subprog_spec_33
-subprog_spec_2: subprog_spec_33
-subprog_spec_2: subprog_spec_22
-
-subprog_spec_1: subprog_spec_2
-
-subprog_body: subprog_spec t_IS subprog_body_1 t_BEGIN seq_stats t_END subprog_body_2 t_Semicolon
- {
- currP=0;
- }
-subprog_body: subprog_spec t_IS error t_END subprog_body_2 t_Semicolon
- {
- currP=0;
- }
-subprog_body_2: /* empty */
-subprog_body_2: designator
-subprog_body_2: t_FUNCTION
-subprog_body_2: t_PROCEDURE
-subprog_body_2: t_PROCEDURE t_Identifier
-subprog_body_2: t_FUNCTION t_Identifier
-subprog_body_2: t_FUNCTION t_STRING
-
-
-subprog_body_1: /* empty */
-//subprog_body_1 : subprogram_instantiation_decl
-subprog_body_1: subprog_body_1 subprog_body_3
-subprog_body_3: subprog_decltve_item
-
-/*--------------------------------------------------
--- Interface Lists and Associaton Lists
-----------------------------------------------------*/
-
-interf_list: t_LeftParen interf_element interf_list_1 t_RightParen { $$=""; }
-interf_list: t_LeftParen error t_RightParen { $$=""; }
-interf_list_1: /* empty */
-interf_list_1: interf_list_1 interf_list_2
-interf_list_2: t_Semicolon interf_element
-
-interf_element: interface_package_decl
- {
- // adding generic : [ package foo is new bar]
- if (parse_sec==GEN_SEC)
- {
- QCString n=current->name;
- addVhdlType(n.data(),getParsedLine(t_PACKAGE),Entry::VARIABLE_SEC,VhdlDocGen::GENERIC,$1.data(),0);
- }
- }
-interf_element: interface_subprogram_decl
- {
- if (parse_sec==GEN_SEC)
- {
- int a=getParsedLine(t_FUNCTION);
- int b=getParsedLine(t_PROCEDURE);
-
- if (a>b) b=a;
-
- QCString n=current->name;
- addVhdlType(n.data(),b,Entry::VARIABLE_SEC,VhdlDocGen::GENERIC,$1.data(),0);
- }
- }
-interf_element: interf_element_1 t_Identifier
- {
- if (parse_sec==GEN_SEC)
- {
- QCString v= $1;
- addVhdlType($2,s_str.iLine,Entry::VARIABLE_SEC,currP,$1.data(),0);
- }
- }
-interf_element: interf_element_1 idf_list t_Colon interf_element_2 subtype_indic interf_element_3 interf_element_4
- {
- QCString b=$2;
- $$=$2+":"+$4+$5+$6+$7;
- if (currP!=VhdlDocGen::COMPONENT)
- {
- if (currP==VhdlDocGen::FUNCTION || currP==VhdlDocGen::PROCEDURE)
- {
- addProto($1.data(),$2.data(),$4.data(),$5.data(),$6.data(),$7.data());
- }
- else
- {
- QCString i=$5+$6+$7;
- if (currP==VhdlDocGen::GENERIC)
- addVhdlType($2,s_str.iLine,Entry::VARIABLE_SEC,currP,i.data(),$4.data());
- else if(parse_sec != GEN_SEC)
- addVhdlType($2,s_str.iLine,Entry::VARIABLE_SEC,currP,i.data(),$4.data());
- }
- // fprintf(stderr,"\n\n <<port %s >>\n",$$.data());
- } // if component
- }
-interf_element_4: /* empty :=*/ { $$=""; }
-interf_element_4: t_VarAsgn expr { $$=":="+$2; }
-interf_element_3: /* empty */ { $$=""; }
-interf_element_3: t_BUFFER { $$="buffer"; }
-interf_element_3: t_BUS { $$="bus"; }
-interf_element_2: /* empty */ { $$=""; }
-interf_element_2: mode { $$=$1; }
-interf_element_1: /* empty */ { $$=""; }
-interf_element_1: object_class { $$=$1; }
-
-mode: t_IN { $$="in"; }
-mode: t_OUT { $$="out"; }
-mode: t_INOUT { $$="inout"; }
-mode: t_BUFFER { $$="buffer"; }
-mode: t_LINKAGE { $$="link"; }
-
-association_list: t_LeftParen association_element association_list_1 t_RightParen { $$="("+$2+")"; }
-association_list_1: /* empty */ { $$=""; }
-association_list_1: association_list_1 association_list_2 { $$=$1+" "+$2; }
-association_list_2: t_Comma association_element { $$=", "+$2; }
-
-gen_association_list : t_LeftParen gen_association_element gen_association_list_1 t_RightParen
- {
- QCString str="( "+$2;
- str.append(" )");
- $$=str;
- }
-gen_association_list: t_LeftParen error t_RightParen { $$=""; }
-gen_association_list: t_LeftParen t_OPEN t_RightParen { $$=" ( open ) "; }
-
-gen_association_list_1: /* empty */ { $$=""; }
-gen_association_list_1: gen_association_list_1 gen_association_list_2 { $$=$1+"?? "+$2; }
-gen_association_list_2: t_Comma gen_association_element { $$=","+$2; }
-
-association_element: formal_part t_Arrow actual_part { $$=$1+"=>"+$3; }
-association_element: actual_part { $$=$1; }
-association_element: t_Box { $$="<>"; }
-association_element: t_DEFAULT { $$="default"; }
-
-/* changed ;gen_association_element : association_element */
-gen_association_element: expr { $$=$1; }
-gen_association_element: choice t_Arrow expr
-gen_association_element: discrete_range1 { $$=$1 ; }
-
-formal_part: name { $$=$1; }
-
-actual_part: expr { $$=$1; }
-actual_part: t_OPEN { $$="open"; }
-actual_part: t_INERTIAL expr { $$="inertial"; }
-
-/*--------------------------------------------------
--- Names and Expressions
-----------------------------------------------------*/
-
-
-
-expr: and_relation { $$=$1; }
-expr: relation { $$=$1; }
-
-shift_op: t_SLL
- | t_SRA
- | t_SLA
- | t_SRL
- | t_ROR
- | t_ROL
- ;
-and_relation: relation shift_op relation
-and_relation: relation t_AND relation
-and_relation: relation t_XOR relation
-and_relation: relation t_OR relation
-and_relation: relation t_NOR relation
-and_relation: relation t_XNOR relation
-and_relation: relation t_NAND relation
-and_relation: and_relation t_NAND relation
-and_relation: and_relation t_NOR relation
-and_relation: and_relation t_XNOR relation
-and_relation: and_relation t_AND relation
-and_relation: and_relation t_OR relation
-and_relation: and_relation t_XOR relation
-
-/* ;relation : unary_operator primary */
-
-relation: t_QQ primary { $$=" ?? "+$2; }
-relation: primary { $$=$1; }
-relation: t_Plus primary %prec MED_PRECEDENCE { $$="+"+$2; }
-relation: t_Minus primary %prec MED_PRECEDENCE { $$="-"+$2; }
-relation: t_ABS primary { $$="abs"+$2; }
-relation: t_NOT primary { $$="not "+$2; }
-relation: primary t_DoubleStar primary { $$=$1+" ** "+$3; }
-relation: t_Minus primary t_DoubleStar primary { $$=$2+" ** "+$4; }
-
-/* ; relation : relation binary_operator primary */
-
-relation: relation t_MOD relation { $$=$1+" mod "+$3; }
-relation: relation t_REM relation { $$=$1+" rem "+$3; }
-relation: relation t_Ampersand relation { $$=$1+" & "+$3; }
-relation: relation t_Star relation { $$=$1+" * "+$3; }
-relation: relation t_Plus relation { $$=$1+" + "+$3; }
-relation: relation t_Minus relation { $$=$1+" - "+$3; }
-relation: relation t_LESym relation { $$=$1+" <= "+$3; }
-relation: relation t_GESym relation { $$=$1+" >= "+$3; }
-relation: relation t_LTSym relation { $$=$1+" < "+$3; }
-relation: relation t_GTSym relation { $$=$1+" > "+$3; }
-relation: relation t_EQSym relation { $$=$1+" == "+$3; }
-relation: relation t_NESym relation { $$=$1+" != "+$3; }
-relation: relation t_Slash relation { $$=$1+" /"+$3; }
-relation: relation t_QNEQU relation { $$=$1+" ?/="+$3; }
-relation: relation t_QEQU relation { $$=$1+" ?="+$3; }
-relation: relation t_QL relation { $$=$1+" ?<"+$3; }
-relation: relation t_QG relation { $$=$1+" ?>"+$3; }
-relation: relation t_QLT relation { $$=$1+" ?<="+$3; }
-relation: relation t_QGT relation { $$=$1+" ?>="+$3; }
-
-simple_exp: t_Minus term { $$ = "-"+$2; }
- | t_Plus term { $$ = "+"+$2; }
- | term { $$ = $1; }
- | simple_exp
- adding_op term { $$ = $1+" "+$2+" "+$3; }
-
-adding_op: t_Ampersand { $$ = "&"; }
- | t_Minus { $$ = "-"; }
- | t_Plus { $$ = "+"; }
- ;
-
-term: factor { $$=$1; }
- | factor multiplying_operator factor { $$ = $1+" "+$2+" "+$3; }
- ;
-
-multiplying_operator: t_Star { $$ = "*"; }
- | t_REM { $$ = "rem"; }
- | t_MOD { $$ = "mod"; }
- | t_Slash { $$ = "/"; }
-
-factor: primary { $$=$1; }
- | t_ABS primary { $$="abs "+$2; }
- | t_NOT primary { $$="not "+$2; }
- | primary t_DoubleStar primary { $$ = $1+" ** "+$3; }
-
-primary: name { $$=$1; }
-primary: literal { $$=$1; }
-primary: aggregate { $$=$1; }
-primary: qualified_expr { $$=$1; }
-primary: allocator { $$=""; }
-primary: t_LeftParen expr t_RightParen { $$="("+$2+")"; }
-
-name: mark { $$=$1; }
-name: name2 { $$=$1; }
-name: external_name { $$=$1; }
-name2: t_StringLit { $$=$1; }
-name2: attribute_name { $$=$1; }
-name2: ifts_name { $$=$1; }
-
-mark: t_Identifier { $$=$1; }
-mark: sel_name { $$=$1; }
-
-sel_name: name t_Dot suffix { $$=$1+"."+$3; }
-
-suffix: designator { $$=$1; }
-suffix: t_CharacterLit { $$=$1; }
-suffix: t_ALL { $$="all"; }
-
-ifts_name: mark gen_association_list { $$=$1+" "+$2; }
-ifts_name: name2 gen_association_list { $$=$1+" "+$2; }
-
-sigma: t_Apostrophe { $$="'"; }
-//sigma : t_LEFTBR signature1 t_RIGHTBR t_Apostrophe { $$="("+$2;;$$.append(")");$$.append("'"); }
-
-attribute_name: mark sigma t_Identifier { $$=$1+"' "+$3; }
-attribute_name: attribute_name t_LeftParen expr t_RightParen
-attribute_name: name2 sigma t_Identifier { $$=$1+" '"+$3; }
-attribute_name: mark sigma t_RANGE { $$=$1+"' range "; }
-attribute_name: name2 sigma t_RANGE { $$=$1+"' range "; }
-
-aggregate : element_association_list2 t_RightParen { $$=$1+" ) "; }
-aggregate : t_LeftParen choices t_Arrow expr t_RightParen { $$="( "+$2+ "=>"+$4+" ) "; }
-
-element_association_list2 : t_LeftParen element_association t_Comma element_association { $$=" ( "+$2+","+$4; }
-element_association_list2 : element_association_list2 t_Comma element_association { $$=$1+","+$3; }
-
-qualified_expr : mark t_Apostrophe t_LeftParen expr t_RightParen { $$=$1+"'("+$4+" ) "; }
-qualified_expr : mark t_Apostrophe aggregate { $$=$1+"'"+$3; }
-
-allocator: t_NEW mark mark allocator_1
-allocator: t_NEW mark allocator_2
-allocator: t_NEW qualified_expr
-allocator_2: /* empty */
-allocator_2: gen_association_list
-allocator_1: /* empty */
-allocator_1: gen_association_list
-
-
-/*--------------------------------------------------
--- Element Association and Choices
-----------------------------------------------------*/
-
-element_association: choices t_Arrow expr { $$=$1+"=> "+$3; }
-element_association: expr { $$=$1; }
-
-choices: choice choices_1 { $$=$1+" "+$2; }
-choices_1: /* empty */ { $$=""; }
-choices_1: choices_1 choices_2 { $$=$1+" "+$2; }
-choices_2: t_Bar choice { $$=" | "+$2; }
-
-choice: expr { $$=$1; }
-choice: discrete_range1 { $$=$1; }
-choice: t_OTHERS { $$="others"; }
-
-/*--------------------------------------------------
--- Type Declarations
-----------------------------------------------------*/
-type_decl: t_TYPE t_Identifier error t_Semicolon { $$=""; }
-type_decl: t_TYPE t_Identifier type_decl_1 t_Semicolon
- {
- addVhdlType($2,getParsedLine(t_TYPE),Entry::VARIABLE_SEC,VhdlDocGen::TYPE,0,$3.data());
- }
-type_decl: t_TYPE error t_Semicolon { $$=""; }
-
-type_decl_1: /* empty */ { $$=""; }
-type_decl_1: t_IS type_definition { $$="is "+$2; }
-
-type_definition: enumeration_type_definition { $$=$1; }
-type_definition: range_constraint { $$=$1; }
-type_definition: physical_type_definition { $$=$1; }
-type_definition: unconstrained_array_definition { $$=$1; }
-type_definition: constrained_array_definition { $$=$1; }
-type_definition: record_type_definition { $$=$1; }
-type_definition: access_type_definition { $$=$1; }
-type_definition: file_type_definition { $$=$1; }
-type_definition: protected_type_declaration { $$=$1; }
-type_definition: protected_type_body { $$=$1; }
-
-
-enumeration_type_definition: t_LeftParen enumeration_literal enumeration_type_definition_1 t_RightParen { $$="( "+$2+" "+$3+" )"; }
-enumeration_type_definition_1: { $$=""; }
-enumeration_type_definition_1: enumeration_type_definition_1 enumeration_type_definition_2 { $$=$1+" "+$2; }
-enumeration_type_definition_2: t_Comma enumeration_literal { $$=","+$2; }
-
-physical_type_definition : range_constraint t_UNITS base_unit_decl
- physical_type_definition_1 t_END unit_stat
- {
- $$=$1;
- current->args=$3+"#"+$4;
- current->args.prepend("units");
- current->spec=VhdlDocGen::UNITS;
- }
-
-unit_stat: t_UNITS t_Identifier
-unit_stat: t_UNITS
-
-physical_type_definition_1: /* empty */ { $$=""; }
-physical_type_definition_1: physical_type_definition_1 physical_type_definition_2 { $$=$1+" "+$2; }
-physical_type_definition_2: secondary_unit_decl { $$=$1+"#"; }
-
-base_unit_decl: t_Identifier t_Semicolon { $$=$1; }
-
-secondary_unit_decl: t_Identifier t_EQSym physical_literal t_Semicolon { $$=$1+"="+$3 }
-
-unconstrained_array_definition: t_ARRAY t_LeftParen
- index_subtype_definition unconstrained_array_definition_1 t_RightParen t_OF
- subtype_indic
- {
- QCString sr1=" array ( "+$3+" "+$4;
- QCString sr2=" ) of "+$7;
- $$=sr1+sr2;
- }
-
-unconstrained_array_definition_1: { $$=""; }
-unconstrained_array_definition_1: unconstrained_array_definition_1 unconstrained_array_definition_2 { $$=$1+" "+$2 }
-unconstrained_array_definition_2: t_Comma index_subtype_definition { $$=", "+$2 }
-
-index_subtype_definition: mark t_RANGE t_Box { $$=$1+" range<> "; }
-
-constrained_array_definition: t_ARRAY index_constraint t_OF subtype_indic { $$=" array "+$2+" of "+$4; }
-
-record_type_simple_name:/*empty*/ { $$=""; }
- | t_Identifier { $$=$1; }
-
-record_type_definition: t_RECORD element_decl record_type_definition_1 t_END
- t_RECORD record_type_simple_name
- {
- QRegExp reg("[\\s]");
- QCString oo=$2+" "+$3;
- current->spec=VhdlDocGen::RECORD;
- current->args=oo;
- current->args.replace(reg,"%");
- current->args.prepend("record");
- $$=$2+" "+$3;
- }
-
-record_type_definition_1: /*empty*/ { $$=""; }
-record_type_definition_1: record_type_definition_1 record_type_definition_2
- {
- $$=$1+" "+$2;
- }
-record_type_definition_2: element_decl { $$=$1; }
-
-element_decl: idf_list t_Colon subtype_indic t_Semicolon { $$=$1+":"+$3+"#"; }
-
-access_type_definition: t_ACCESS subtype_indic { $$="access "+$2; }
-
-file_type_definition: t_FILE t_OF mark { $$="file of "+$3; }
-
-/*--------------------------------------------------
--- Subtypes and Constraints
-----------------------------------------------------*/
-
-subtype_decl: t_SUBTYPE t_Identifier t_IS subtype_indic t_Semicolon
- {
- addVhdlType($2,getParsedLine(t_SUBTYPE),Entry::VARIABLE_SEC,VhdlDocGen::SUBTYPE,0,$4.data());
- }
-subtype_decl: t_SUBTYPE error t_Semicolon { $$=""; }
-subtype_indic: mark subtype_indic_1 { $$=$1+" "+$2; }
-subtype_indic: subtype_indic1 { $$=$1; }
-subtype_indic_1: /* empty */ { $$=""; }
-subtype_indic_1: gen_association_list { $$=$1; }
-
-subtype_indic1: mark mark range_constraint { $$=$1+" "+$2+" "+$3; }
-subtype_indic1: mark range_constraint { $$=$1+" "+$2; }
-subtype_indic1: mark mark subtype_indic1_1 { $$=$1+" "+$2+" "+$3; }
-subtype_indic1_1: /* empty */ { $$=""; }
-subtype_indic1_1: gen_association_list { $$=$1; }
-
-range_constraint: t_RANGE range_spec { $$="range "+$2; }
-//range_constraint : array_constraint
-
-index_constraint: t_LeftParen discrete_range
- index_constraint_1
- t_RightParen { $$="("+$2+" "+$3+")"; }
-index_constraint_1: /* empty */ { $$=""; }
-index_constraint_1: index_constraint_1
- index_constraint_2 { $$=$1+" "+$2; }
-index_constraint_2: t_Comma discrete_range { $$=","+$2; }
-
-discrete_range: subtype_indic { $$=$1; }
-discrete_range: range_spec { $$=$1; }
-
-discrete_range1 : subtype_indic1 { $$=$1; }
-discrete_range1 : expr direction expr { $$=$1+" "+$2+" "+$3; }
-
-range_spec : attribute_name { $$=$1; }
-range_spec : simple_exp direction simple_exp { $$=$1+" "+$2+" "+$3; }
-
-direction : t_TO { $$=" to "; }
-direction : t_DOWNTO { $$=" downto "; }
-
-/*--------------------------------------------------
--- Objects, Aliases, Files, Disconnections
-----------------------------------------------------*/
-
-constant_decl: t_CONSTANT idf_list t_Colon subtype_indic constant_decl_1 t_Semicolon
- {
- QCString it=$4+" "+$5;
- // fprintf(stderr,"\n currP %d \n",currP);
- addVhdlType($2,getParsedLine(t_CONSTANT),Entry::VARIABLE_SEC,VhdlDocGen::CONSTANT,0,it.data());
- }
-constant_decl_1: /* empty */ { $$=""; }
-constant_decl_1: t_VarAsgn expr { $$=":="+$2; }
-
-signal_decl: t_SIGNAL idf_list t_Colon subtype_indic signal_decl_1 signal_decl_2 t_Semicolon
- {
- QCString s=$4+" "+$6;
- addVhdlType($2,getParsedLine(t_SIGNAL),Entry::VARIABLE_SEC,VhdlDocGen::SIGNAL,0,s.data());
- }
-signal_decl_2: /* empty */ { $$=""; }
-signal_decl_2: t_VarAsgn expr { $$=":="+$2; }
-signal_decl_1: /* empty */ { $$=""; }
-signal_decl_1: signal_kind { $$=$1; }
-
-variable_decl: t_VARIABLE idf_list t_Colon subtype_indic variable_decl_1 t_Semicolon
- {
- $$=$2+":"+$4+" "+$5;
- }
-variable_decl: t_SHARED t_VARIABLE idf_list t_Colon subtype_indic variable_decl_1 t_Semicolon
- {
- $$=$5+" "+$6;
- addVhdlType($3,getParsedLine(t_VARIABLE),Entry::VARIABLE_SEC,VhdlDocGen::SHAREDVARIABLE,0,$$.data());
- }
-variable_decl_1: /* empty */ { $$=""; }
-variable_decl_1: t_VarAsgn expr { $$=":="+$2; }
-
-object_class: t_CONSTANT { $$="constant"; }
-object_class: t_SIGNAL { $$="signal"; }
-object_class: t_VARIABLE { $$="variable"; }
-object_class: t_SHARED t_VARIABLE { $$="shared"; }
-object_class: t_FILE { $$="file"; }
-object_class: t_TYPE { $$="type"; }
-
-signal_kind: t_BUS { $$="bus"; }
-signal_kind: t_REGISTER { $$="register"; }
-
-alias_decl: t_ALIAS alias_name_stat alias_spec t_IS name signature t_Semicolon
- {
- QCString s=$3+" is "+$5+$6;
- addVhdlType($2,getParsedLine(t_ALIAS),Entry::VARIABLE_SEC,VhdlDocGen::ALIAS,0,s.data());
- }
-alias_decl: t_ALIAS alias_name_stat alias_spec t_IS error t_Semicolon { $$=""; }
-
-alias_name_stat: t_Identifier { $$=$1; }
-alias_name_stat: t_StringLit { $$=$1; }
-
-alias_spec :/*empty*/ { $$=""; }
- | t_Colon subtype_indic { $$=","+$2; }
- ;
-
-file_decl: t_FILE idf_list t_Colon subtype_indic t_IS file_decl_1 expr t_Semicolon
- {
- addVhdlType($2,getParsedLine(t_FILE),Entry::VARIABLE_SEC,VhdlDocGen::VFILE,0,$4.data());
- }
-
-file_decl: t_FILE idf_list t_Colon t_Identifier fi_dec t_Semicolon
- {
- QCString s=$4+" "+$5;
- addVhdlType($2,getParsedLine(t_FILE),Entry::VARIABLE_SEC,VhdlDocGen::VFILE,0,s.data());
- }
-
-fi_dec: /*empty*/ { $$=""; }
- | t_OPEN expr t_IS expr { $$="open "+$2+" is "+s_str.qstr; }
-
-
-file_decl_1: /* empty */ { $$=""; }
-file_decl_1: mode { $$=$1; }
-
-disconnection_spec: t_DISCONNECT signal_list t_Colon mark t_AFTER expr t_Semicolon
-
-signal_list: name signal_list_1
-signal_list: t_OTHERS
-signal_list: t_ALL
-signal_list_1: /* empty */
-signal_list_1: signal_list_1 signal_list_2
-signal_list_2: t_Comma name
-
-/*--------------------------------------------------
--- Attribute Declarations and Specifications
-----------------------------------------------------*/
-
-attribute_decl: t_ATTRIBUTE t_Identifier t_Colon mark t_Semicolon
- {
- addVhdlType($2,getParsedLine(t_ATTRIBUTE),Entry::VARIABLE_SEC,VhdlDocGen::ATTRIBUTE,0,$4.data());
- }
-
-attribute_spec: t_ATTRIBUTE t_Identifier t_OF entity_spec t_IS expr t_Semicolon
- {
- QCString oo=$4+" is "+$6;
- addVhdlType($2,getParsedLine(t_ATTRIBUTE),Entry::VARIABLE_SEC,VhdlDocGen::ATTRIBUTE,0,oo.data());
- }
-
-entity_spec : entity_name_list signature t_Colon entity_class
-
-entity_name_list: designator entity_name_list_1 { $$=$1+" "+$2; }
-entity_name_list: t_OTHERS { $$="others"; }
-entity_name_list: t_ALL { $$="all"; }
-entity_name_list_1: /* empty */ { $$=""; }
-entity_name_list_1: entity_name_list_1 entity_name_list_2 { $$=$1+" "+$2; }
-entity_name_list_2: t_Comma designator { $$=","+$2; }
-
-entity_class: t_ENTITY { $$="entity"; }
-entity_class: t_ARCHITECTURE { $$="architecture"; }
-entity_class: t_PACKAGE { $$="package"; }
-entity_class: t_CONFIGURATION { $$="configuration"; }
-entity_class: t_COMPONENT { $$="component"; }
-entity_class: t_LABEL { $$="label"; }
-entity_class: t_TYPE { $$="type"; }
-entity_class: t_SUBTYPE { $$="subtype"; }
-entity_class: t_PROCEDURE { $$="procedure"; }
-entity_class: t_FUNCTION { $$=""; }
-entity_class: t_SIGNAL { $$="signal"; }
-entity_class: t_VARIABLE { $$="variable"; }
-entity_class: t_CONSTANT { $$="constant"; }
-entity_class: t_GROUP { $$="group"; }
-entity_class: t_FILE { $$="file"; }
-entity_class: t_UNITS { $$="units"; }
-entity_class: t_LITERAL { $$="literal"; }
-entity_class: t_SEQUENCE { $$="sequence"; }
-entity_class: t_PROPERTY { $$="property"; }
-
-
-/*--------------------------------------------------
--- Schemes
-
---------------------------------------------------------------------------*/
-
-if_generation_scheme: if_scheme
-
-if_scheme: t_IF expr t_GENERATE generate_statement_body if_scheme_1 if_scheme_2
-if_scheme: t_IF lable expr t_GENERATE generate_statement_body if_scheme_1 if_scheme_2
-
-if_scheme_2: /* empty */
-if_scheme_2: t_ELSE t_GENERATE generate_statement_body
-if_scheme_2: t_ELSE lable t_GENERATE generate_statement_body
-if_scheme_1: /* empty */
-if_scheme_1: if_scheme_1 if_scheme_3
-if_scheme_3: t_ELSIF expr t_GENERATE generate_statement_body
-if_scheme_3: t_ELSIF lable expr t_GENERATE generate_statement_body
-
-generation_scheme: for_scheme
-
-iteration_scheme: for_scheme
-iteration_scheme: while_scheme
-
-for_scheme: t_FOR t_Identifier t_IN discrete_range
-for_scheme: t_FOR lable t_Identifier t_IN discrete_range
-
-while_scheme: t_WHILE expr
-
-/*--------------------------------------------------
--- Concurrent Statements
-----------------------------------------------------*/
-
-concurrent_stats: concurrent_stats_1
-concurrent_stats_1: /* empty */
-concurrent_stats_1: concurrent_stats_1 concurrent_stats_2
-concurrent_stats_2: concurrent_stat
-
-concurrent_stat : block_stat
- | concurrent_assertion_stat
- | concurrent_procedure_call
- | concurrent_signal_assign_stat
- | comp_inst_stat
- | generate_stat
- | procs_stat
-
-block_stat: t_Identifier t_Colon t_BLOCK block_stat_0 block_stat_1 block_stat_2
- block_stat_3 block_stat_4 t_BEGIN concurrent_stats t_END t_BLOCK block_stat_5
- t_Semicolon
-block_stat_5: /* empty */
-block_stat_5: t_Identifier
-block_stat_4: /* empty */
-block_stat_4: block_stat_4 block_stat_6
-block_stat_6: block_decltve_item
-block_stat_3: /* empty */
-block_stat_3: t_PORT interf_list t_Semicolon block_stat_7
-//block_sta_7: /* empty */
-block_stat_7: t_PORT t_MAP association_list t_Semicolon
-block_stat_2: /* empty */
-block_stat_2: t_GENERIC interf_list t_Semicolon block_stat_8
-block_stat_8: /* empty */
-block_stat_8: t_GENERIC t_MAP association_list t_Semicolon
-block_stat_1: /* empty */
-block_stat_1: t_LeftParen expr t_RightParen block_stat_0
-block_stat_0: /* empty */
-block_stat_0: t_IS
-
-dot_name: t_Identifier { $$=$1; }
- | dot_name t_Dot t_Identifier { $$=$1+"."+$3; }
- ;
-
-mark_comp: dot_name comp_1 { $$=$1+" "+$2; }
-mark_comp: dot_name { $$=$1; }
-
-comp_1: t_LeftParen t_Identifier t_RightParen { $$="("+$2+")"; }
-
-vcomp_stat: t_CONFIGURATION { $$="configurátion";yyLineNr=s_str.iLine; }
-vcomp_stat: t_ENTITY { $$="entity";yyLineNr=s_str.iLine; }
-vcomp_stat: t_COMPONENT { $$="component";yyLineNr=s_str.iLine; }
-
-comp_inst_stat: t_Identifier t_Colon name { yyLineNr=s_str.iLine; } t_GENERIC t_MAP association_list comp_inst_stat_1 t_Semicolon
- {
- addCompInst($1.data(),$3.data(),0,yyLineNr);
- }
-comp_inst_stat: t_Identifier t_Colon name { yyLineNr=s_str.iLine; } t_PORT t_MAP association_list t_Semicolon
- {
- addCompInst($1.data(),$3.data(),0,yyLineNr);
- }
-
-comp_inst_stat: t_Identifier t_Colon vcomp_stat mark_comp t_PORT t_MAP association_list t_Semicolon
- {
- addCompInst($1.data(),$4.data(),$3.data(),yyLineNr);
- }
-comp_inst_stat: t_Identifier t_Colon vcomp_stat mark_comp t_GENERIC t_MAP association_list comp_inst_stat_1 t_Semicolon
- {
- addCompInst($1.data(),$4.data(),$3.data(),yyLineNr);
- }
-comp_inst_stat_1: /* empty */
-comp_inst_stat_1: t_PORT t_MAP association_list
-
-concurrent_assertion_stat: t_Identifier t_Colon assertion_stat
-concurrent_assertion_stat: assertion_stat
-
-concurrent_assertion_stat: t_Identifier t_Colon t_POSTPONED assertion_stat
-concurrent_assertion_stat: t_POSTPONED assertion_stat
-
-concurrent_procedure_call: t_Identifier t_Colon procedure_call_stat
-concurrent_procedure_call: procedure_call_stat
-
-concurrent_procedure_call: t_Identifier t_Colon t_POSTPONED procedure_call_stat
-concurrent_procedure_call: t_POSTPONED procedure_call_stat
-
-concurrent_signal_assign_stat: t_Identifier t_Colon condal_signal_assign
-concurrent_signal_assign_stat: condal_signal_assign
-
-concurrent_signal_assign_stat: t_Identifier t_Colon t_POSTPONED condal_signal_assign
-concurrent_signal_assign_stat: t_POSTPONED condal_signal_assign
-
-concurrent_signal_assign_stat: t_Identifier t_Colon t_POSTPONED sel_signal_assign
-concurrent_signal_assign_stat: t_POSTPONED sel_signal_assign
-
-concurrent_signal_assign_stat: t_Identifier t_Colon sel_signal_assign
-concurrent_signal_assign_stat: sel_signal_assign
-
-condal_signal_assign: target t_LESym opts condal_wavefrms t_Semicolon
-
-condal_wavefrms: wavefrm
-condal_wavefrms: wavefrm t_WHEN expr
-condal_wavefrms: wavefrm t_WHEN expr t_ELSE condal_wavefrms
-
-wavefrm: wavefrm_element wavefrm_1
-wavefrm: t_UNAFFECTED
-wavefrm_1: /* empty */
-wavefrm_1: wavefrm_1 wavefrm_2
-wavefrm_2: t_Comma wavefrm_element
-
-wavefrm_element: expr wavefrm_element_1
-wavefrm_element_1: /* empty */
-wavefrm_element_1: t_AFTER expr
-wavefrm_element_1: t_NULL wavefrm_element_2
-wavefrm_element_1: t_NULL
-wavefrm_element_2: t_AFTER expr
-
-target: name
-target: aggregate
-
-opts: opts_1 opts_2
-
-opts_2: /* empty */
-opts_2: t_TRANSPORT
-opts_2: t_REJECT expr t_INERTIAL
-opts_2: t_INERTIAL
-
-opts_1: /* empty */
-opts_1: t_GUARDED
-
-sel_signal_assign: t_WITH expr t_SELECT target t_LESym opts sel_wavefrms t_Semicolon
-
-sel_wavefrms: sel_wavefrms_1 wavefrm t_WHEN choices
-sel_wavefrms_1: /* empty */
-sel_wavefrms_1: sel_wavefrms_1 sel_wavefrms_2
-sel_wavefrms_2: wavefrm t_WHEN choices t_Comma
-
-gen_stat1: /* empty */
- | block_declarative_part t_BEGIN
- | t_BEGIN
-
- // problem with double end
- // end;
- // end generate;
-
-generate_statement_body: gen_stat1 concurrent_stats
-
-generate_stat : t_Identifier t_Colon
- { pushLabel($1); }
- generation_scheme t_GENERATE
- gen_stat1 concurrent_stats opstat
-
-// stems from VHDL 2008 generate_statement_body
-opstat: end_stats t_END generate_stat_1 t_Semicolon { popLabel(); }
-opstat: t_END generate_stat_1 t_Semicolon { popLabel(); }
-
-generate_stat: t_Identifier t_Colon
- { pushLabel($1); }
- if_generation_scheme opstat // t_END generate_stat_1 t_Semicolon { popLabel(); }
-generate_stat: t_Identifier t_Colon case_scheme
-
-generate_stat_1: t_GENERATE { $$=""; }
-generate_stat_1: t_GENERATE t_Identifier { $$=$2; }
-
-//end_stats :
-end_stats: t_END t_Semicolon
-end_stats: t_END t_Identifier t_Semicolon
-
-procs_stat: t_Identifier t_Colon procs_stat1
- {
- current->name=$1;
- current->endBodyLine=s_str.yyLineNr;
- newEntry();
- }
-
-procs_stat: procs_stat1
- {
- current->name=VhdlDocGen::getProcessNumber();
- current->endBodyLine=s_str.yyLineNr;
- newEntry();
- }
-
-procs_stat1: procs_stat1_5
- { currP=VhdlDocGen::PROCESS; }
- t_PROCESS procs_stat1_1 procs_stat1_2 t_BEGIN seq_stats t_END
- procs_stat1_3 t_Semicolon
- { currP=0;
- createFunction(currName,VhdlDocGen::PROCESS,$4.data());
- }
-procs_stat1: error t_END procs_stat1_3 t_Semicolon { currP=0; }
-
-procs_stat1_3: /* empty */
-procs_stat1_3: procs_stat1_5 t_PROCESS procs_stat1_6
-
-procs_stat1_5: /* empty */ { $$=""; }
-procs_stat1_5: t_POSTPONED { $$="postponed"; }
-
-procs_stat1_6: /* empty */ { $$=""; }
-procs_stat1_6: t_Identifier { $$=$1; }
-
-procs_stat1_2: /* empty */
-procs_stat1_2: t_IS
-procs_stat1_2: procs_stat1_2 procs_stat1_4
-procs_stat1_4: procs_decltve_item
-procs_stat1_1: /* empty */ { $$=""; }
-procs_stat1_1: t_LeftParen t_ALL t_RightParen { $$="all"; }
-procs_stat1_1: t_LeftParen sensitivity_list t_RightParen { $$=$2; }
-
-sensitivity_list: name sensitivity_list_1 { $$=$1+" "+$2; }
-sensitivity_list_1: /* empty */ { $$=""; }
-sensitivity_list_1: sensitivity_list_1 sensitivity_list_2 { $$=$1+" "+$2; }
-sensitivity_list_2: t_Comma name { $$=","+$2; }
-
-/*--------------------------------------------------
--- Sequential Statements
-----------------------------------------------------*/
-
-seq_stats: seq_stats_1
-seq_stats_1: /* empty */
-seq_stats_1: seq_stats_1 seq_stats_2
-seq_stats_2: seq_stat
-
-seq_stat: assertion_stat
-seq_stat: lable assertion_stat
-seq_stat: case_stat
-seq_stat: exit_stat
-seq_stat: if_stat
-seq_stat: loop_stat
-seq_stat: next_stat
-seq_stat: null_stat
-seq_stat: procedure_call_stat
-seq_stat: return_stat
-seq_stat: lable signal_assign_stat
-seq_stat: signal_assign_stat
-seq_stat: variable_assign_stat
-seq_stat: wait_stat
-seq_stat: lable wait_stat
-seq_stat: report_statement
-
-report_statement: loop_stat_1 t_REPORT expr assertion_stat_2 t_Semicolon
-
-assertion_stat: t_ASSERT expr assertion_stat_1 assertion_stat_2 t_Semicolon
-assertion_stat_2: /* empty */
-assertion_stat_2 : t_SEVERITY expr
-assertion_stat_1 : /* empty */
-assertion_stat_1 : t_REPORT expr
-
-choice_stat : /* empty */
-choice_stat : t_Q
-
-choice_stat_1: /* empty */
-choice_stat_1 : t_Q
-choice_stat_1 : t_Identifier
-
-case_stat : t_CASE choice_stat expr t_IS case_stat_alternative case_stat_1 t_END t_CASE choice_stat_1 t_Semicolon
-case_stat : lable t_CASE choice_stat expr t_IS case_stat_alternative case_stat_1 t_END t_CASE choice_stat_1 t_Semicolon
-
-case_stat : t_CASE error t_END t_CASE choice_stat_1 t_Semicolon
-case_stat_1 : /* empty */
-case_stat_1 : case_stat_1 case_stat_2
-case_stat_2 : case_stat_alternative
-
-case_stat_alternative : t_WHEN choices t_Arrow seq_stats
-
-exit_stat : t_EXIT exit_stat_1 exit_stat_2 t_Semicolon
-exit_stat_2 : /* empty */
-exit_stat_2 : t_WHEN expr
-exit_stat_1 : /* empty */
-exit_stat_1 : t_Identifier
-
-if_stat : t_IF expr t_THEN seq_stats if_stat_1 if_stat_2 t_END t_IF t_Semicolon
-if_stat : t_IF expr t_THEN error t_END t_IF t_Semicolon
-if_stat_2 : /* empty */
-if_stat_2 : t_ELSE seq_stats
-if_stat_1 : /* empty */
-if_stat_1 : if_stat_1 if_stat_3
-if_stat_3 : t_ELSIF expr t_THEN seq_stats
-
-loop_stat: loop_stat_1 loop_stat_2 t_LOOP seq_stats t_END t_LOOP loop_stat_3 t_Semicolon
-loop_stat_3: /* empty */
-loop_stat_3: t_Identifier
-loop_stat_2: /* epty */
-loop_stat_2: iteration_scheme
-loop_stat_1: /* empty */
-loop_stat_1: t_Identifier t_Colon
-
-next_stat: t_NEXT next_stat_1 next_stat_2 t_Semicolon
-next_stat_2: /* empty */
-next_stat_2: t_WHEN expr
-next_stat_1: /* empty */
-next_stat_1: t_Identifier
-
-null_stat: t_NULL t_Semicolon
-
-procedure_call_stat: name t_Semicolon
-
-return_stat: t_RETURN return_stat_1 t_Semicolon
-return_stat_1: /* empty */
-return_stat_1: expr
-
-signal_assign_stat: target t_LESym wavefrm t_Semicolon
- | target t_LESym delay_mechanism wavefrm t_Semicolon
- | target t_LESym t_FORCE inout_stat expr t_Semicolon
- | target t_LESym t_RELEASE inout_stat t_Semicolon
- | selected_signal_assignment
- | conditional_signal_assignment
- ;
-
-variable_assign_stat: variable_assign_stat_1 t_Semicolon
- | conditional_variable_assignment
- | lable selected_variable_assignment
- | selected_variable_assignment
-
-lable: t_Identifier t_Colon
-variable_assign_stat_1: target t_VarAsgn expr
-variable_assign_stat_1: lable target t_VarAsgn expr
-
-wait_stat: t_WAIT wait_stat_1 wait_stat_2 wait_stat_3 t_Semicolon
-wait_stat_3: /* empty */
-wait_stat_3: t_FOR expr
-wait_stat_2: /* empty */
-wait_stat_2: t_UNTIL expr
-wait_stat_1: /* empty */
-wait_stat_1: t_ON sensitivity_list
-
-
-/*--------------------------------------------------
--- Components and Configurations
-----------------------------------------------------*/
-comp_end_dec : t_END { lastEntity=0; lastCompound=0; genLabels.resize(0); }
- | t_END t_COMPONENT entity_decl_5
- | t_END t_ARCHITECTURE entity_decl_5 { lastCompound=0; genLabels.resize(0); }
- | t_END t_ENTITY entity_decl_5 { lastEntity=0; genLabels.resize(0); }
- | t_END t_Identifier { lastEntity=0; lastCompound=0; genLabels.resize(0); }
-
-iss :/*empty*/ { currP=VhdlDocGen::COMPONENT; }
- | t_IS { currP=VhdlDocGen::COMPONENT; }
-
-comp_decl: t_COMPONENT t_Identifier iss comp_decl_1 comp_decl_2 comp_end_dec t_Semicolon
- {
- addVhdlType($2,getParsedLine(t_COMPONENT),Entry::VARIABLE_SEC,VhdlDocGen::COMPONENT,0,0);
- currP=0;
- }
-comp_decl_2: /* empty */ { $$=""; }
-comp_decl_2: t_PORT interf_list t_Semicolon { $$=$2; }
-comp_decl_1: /* empty */ { $$=""; }
-comp_decl_1: t_GENERIC interf_list t_Semicolon { $$=$2; }
-
-block_config: t_FOR block_spec block_config_1 block_config_2 t_END t_FOR t_Semicolon
- {
- popConfig();
- }
-
-block_config: t_FOR error t_END t_FOR t_Semicolon { $$=""; }
-block_config_2: /* empty */ { $$=""; }
-block_config_2: block_config_2 block_config_3 { $$=$1+" "; }
-block_config_3: config_item { $$=$1; }
-block_config_1: /* empty */ { $$=""; }
-block_config_1: block_config_1 block_config_4 { $$=$1; }
-block_config_4: use_clause { $$=$1; }
-
-block_spec: name
- {
- $$=$1;
-
- if (levelCounter==0)
- addConfigureNode($1.data(),NULL,TRUE,FALSE);
- else
- addConfigureNode($1.data(),NULL,FALSE,FALSE);
- }
-
-config_item: block_config { $$=$1; }
-config_item: comp_config { $$=$1; }
-
-comp_config: t_FOR comp_spec comp_config_1 comp_config_2 t_END t_FOR t_Semicolon
- {
- $$=$2+" "+$3+" "+$4;
- popConfig();
- }
-comp_config_2: /* empty */ { $$=""; }
-comp_config_2: block_config { $$=$1; }
-comp_config_1: /*empty*/ { $$=""; }
-
-comp_config_1: binding_indic_1 binding_indic_2 t_Semicolon { $$=""; }
-comp_config_1: t_USE t_VUNIT idf_list t_Semicolon { $$=""; }
-comp_config_1: t_USE binding_indic t_Semicolon
- {
- addConfigureNode(compSpec.data(),$2.data(),FALSE,FALSE);
- }
-
-config_spec: t_FOR comp_spec comp_spec_stat t_Semicolon
- {
- addConfigureNode($2.data(),$3.data(),TRUE,FALSE,TRUE);currNode->confVhdl=lastCompound->name;
- }
-config_spec: t_FOR comp_spec comp_spec_stat t_Semicolon t_END t_FOR t_Semicolon
- {
- addConfigureNode($2.data(),$3.data(),TRUE,FALSE,TRUE);currNode->confVhdl=lastCompound->name;
- }
-
-comp_spec_stat: t_USE binding_indic { $$=$2; }
-comp_spec_stat: t_USE t_VUNIT idf_list t_Semicolon { $$=""; }
-comp_spec_stat: binding_indic_1 binding_indic_2 { $$=""; }
-
-comp_spec: inst_list t_Colon expr
- {
- $$=$1+":"+$3;
- compSpec=$$;
- }
-
-inst_list: idf_list { $$=$1; }
-inst_list: t_ALL { $$="all"; }
-inst_list: t_OTHERS { $$="others"; }
-
-binding_indic : entity_aspect binding_indic_1 binding_indic_2 { $$=$1; }
-
-binding_indic_2:
-binding_indic_2: t_PORT t_MAP association_list
-
-binding_indic_1:
-binding_indic_1: t_GENERIC t_MAP association_list
-
-
-entity_aspect: t_ENTITY name { $$="entity "+$2; }
-entity_aspect: t_CONFIGURATION mark { $$="configuration "+ $2; }
-entity_aspect: t_OPEN { $$="open "; }
- ;
-
-group_constituent: t_Identifier { $$=$1; }
- | t_CharacterLit { $$=$1; }
- ;
-
-group_constituent_list: group_constituent { $$=$1; }
- | group_constituent_list t_Comma group_constituent { $$=$1+","+$3; }
- ;
-
-group_declaration : t_GROUP t_Identifier t_Colon group_name t_LeftParen group_constituent_list t_RightParen t_Semicolon
- {
- // $$=$2+":"+$4+$6;
- $$="("+$4+$6+")";
- addVhdlType($2,getParsedLine(t_GROUP),Entry::VARIABLE_SEC,VhdlDocGen::GROUP,$$.data(),0);
- }
-
-group_template_declaration : t_GROUP t_Identifier t_IS t_LeftParen entity_class_entry_list t_RightParen t_Semicolon
- {
- $$=$2+":"+$5;
- addVhdlType($2,getParsedLine(t_GROUP),Entry::VARIABLE_SEC,VhdlDocGen::GROUP,$5.data(),0);
- }
-
-group_template_declaration: t_GROUP t_Identifier t_IS t_LeftParen error t_Semicolon t_RightParen { $$=""; }
-
-entity_class_entry : entity_class tbox
-
-tbox : /* empty */ { $$=""; }
-tbox : t_Box { $$="<>"; }
-
-entity_class_entry_list: entity_class_entry { $$=$1; }
- | entity_class_entry_list
- t_Comma entity_class_entry { $$=$1+","+$3; }
- ;
-
-group_name: t_Identifier { $$=$1; }
-group_name: t_StringLit { $$=$1; }
-
-t_Identifier: t_LETTER
- {
- $$=s_str.qstr;
- }
-
-t_BitStringLit: t_DIGIT
- {
- $$=s_str.qstr;
- }
-
-t_StringLit: t_STRING
- {
- $$=s_str.qstr;
- }
-
-t_AbstractLit: t_ABSTRLIST
- {
- $$=s_str.qstr;
- }
-
-t_CharacterLit: t_CHARLIST
- {
- $$=s_str.qstr;
- }
-
-
-/*--------------------------------------------------
--- VHDL 2002 extensions
--- to do: must be added
------------------------------------------------------*/
-protected_type_declaration:t_PROTECTED protected_stats t_END protected_stat_1 { $$=""; }
-protected_type_declaration:t_PROTECTED error t_END protected_stat_1 { $$=""; }
-
-protected_stats: /* empty */
-protected_stats: protected_stats protected_stat_decl_1
-protected_stat_decl_1: protected_type_declaration_item
-protected_stat_1: t_PROTECTED
-protected_stat_1: t_PROTECTED t_Identifier
-
-protected_type_declaration_item: use_clause
-protected_type_declaration_item: attribute_spec
-protected_type_declaration_item: subprog_decl
-protected_type_declaration_item: subprogram_instantiation_decl
-
-protected_type_body: t_PROTECTED t_BODY protected_body_stats t_END protected_body_stat_1 { $$=""; }
-protected_type_body: t_PROTECTED t_BODY error t_END protected_body_stat_1 { $$=""; }
-
-protected_body_stats: /* empty */
-protected_body_stats: protected_body_stats protected_body_stat_decl_1
-protected_body_stat_decl_1: protected_type_body_declaration_item
-
-protected_body_stat_1: t_PROTECTED t_BODY
-protected_body_stat_1: t_PROTECTED t_BODY t_Identifier
-
-protected_type_body_declaration_item: subprog_decltve_item // same as subprog
-
-/*--------------------------------------------------
--- VHDL 2008 extensions
--- to do: must be added
------------------------------------------------------*/
-context_ref: t_CONTEXT sel_list t_Semicolon { $$="context "+$2; }
-
-context_decl: t_CONTEXT t_Identifier t_IS { parse_sec=CONTEXT_SEC; } libustcont_stats t_END context_stat_1 t_Semicolon
- {
- parse_sec=0;
- QCString v=$5;
- addVhdlType($2,getParsedLine(t_LIBRARY),Entry::VARIABLE_SEC,VhdlDocGen::LIBRARY,"context",$5.data());
- }
-context_decl: t_CONTEXT t_Identifier t_IS t_END context_stat_1 t_Semicolon
- {
- addVhdlType($2,getParsedLine(t_LIBRARY),Entry::VARIABLE_SEC,VhdlDocGen::LIBRARY,"context",0);
- }
-
-context_stat_1: t_CONTEXT
-context_stat_1: t_CONTEXT t_Identifier
-
-libustcont_stats: libustcont_stat { $$ = $1; }
-libustcont_stats: libustcont_stats libustcont_stat { $$ = $1+"#"+$2; }
-
-libustcont_stat: use_clause { $$ = $1; }
-libustcont_stat: lib_clause { $$ = $1; }
-libustcont_stat: context_ref { $$ = $1; }
-
-package_instantiation_decl: t_PACKAGE t_Identifier t_IS t_NEW dot_name signature t_Semicolon
- {
- $$=" is new "+$5+$6;
- //Entry * pp=lastCompound;
- //Entry * pps=lastEntity ;
- //assert(false);
- addVhdlType($2,getParsedLine(t_PACKAGE),Entry::VARIABLE_SEC,VhdlDocGen::INSTANTIATION,"package",$$.data());
- }
-package_instantiation_decl: t_PACKAGE t_Identifier t_IS t_NEW dot_name signature gen_assoc_list t_Semicolon
- {
- $$=" is new "+$5+$6;
- addVhdlType($2,getParsedLine(t_PACKAGE),Entry::VARIABLE_SEC,VhdlDocGen::INSTANTIATION,"package",$$.data());
- }
-package_instantiation_decl: t_PACKAGE error t_Identifier t_IS t_NEW t_Semicolon { $$=""; }
-
-subprogram_instantiation_decl: t_FUNCTION t_Identifier t_IS t_NEW dot_name signature t_Semicolon
- {
- $$= " is new "+$5+$6;
- addVhdlType($2,getParsedLine(t_FUNCTION),Entry::VARIABLE_SEC,VhdlDocGen::INSTANTIATION,"function ",$$.data());
- }
-subprogram_instantiation_decl: t_FUNCTION t_Identifier t_IS t_NEW dot_name signature gen_assoc_list t_Semicolon
- {
- $$=" is new "+$5+$6;
- addVhdlType($2,getParsedLine(t_FUNCTION),Entry::VARIABLE_SEC,VhdlDocGen::INSTANTIATION,"function ",$$.data());
- }
-subprogram_instantiation_decl: t_FUNCTION t_Identifier t_IS t_NEW error t_Semicolon { $$=""; }
-
-signature:/*empty*/ { $$=""; }
-signature: t_LEFTBR signature1
- t_RIGHTBR { $$="["+$2+" ]"; }
-signature: t_LEFTBR t_RIGHTBR { $$="[ ]"; }
-
-signature1: t_RETURN mark { $$="return "+$2; }
-signature1: mark_stats { $$=$1; }
-signature1: mark_stats t_RETURN mark { $$=$1+" return "+$3; }
-
-mark_stats: mark { $$=$1; }
-mark_stats: mark_stats mark_stats_1 { $$=$1+" "+$2; }
-mark_stats_1: t_Comma mark { $$=" , "+$2; }
-
-case_scheme: t_CASE expr t_GENERATE when_stats ttend t_END t_GENERATE generate_stat_1 t_Semicolon
-case_scheme: t_CASE expr t_GENERATE when_stats t_END t_GENERATE generate_stat_1 t_Semicolon
-case_scheme: t_CASE error t_GENERATE error t_END t_GENERATE generate_stat_1 t_Semicolon
-
-when_stats_1: t_WHEN lable choices t_Arrow generate_statement_body
-when_stats_1: t_WHEN choices t_Arrow generate_statement_body
-when_stats: when_stats when_stats_1
-when_stats: when_stats_1
-
-ttend: t_END t_Semicolon
-ttend: t_END t_Identifier t_Semicolon
-
-conditional_signal_assignment: conditional_waveform_assignment
-conditional_signal_assignment: conditional_force_assignment
-
-conditional_waveform_assignment: target t_LESym wavefrm_element t_WHEN expr else_wave_list t_Semicolon
-conditional_waveform_assignment: target t_LESym delay_mechanism wavefrm_element t_WHEN expr else_wave_list t_Semicolon
-conditional_waveform_assignment: target t_LESym wavefrm_element t_WHEN expr t_Semicolon
-conditional_waveform_assignment: target t_LESym delay_mechanism wavefrm_element t_WHEN expr t_Semicolon
-conditional_waveform_assignment: target t_LESym error t_Semicolon
-
-else_wave_list: t_ELSE expr t_WHEN expr
-else_wave_list: t_ELSE expr
-
-conditional_force_assignment: target t_LESym t_FORCE inout_stat expr t_WHEN expr else_stat t_Semicolon
-conditional_force_assignment: target t_LESym t_FORCE inout_stat expr t_WHEN expr t_Semicolon
-
-selected_signal_assignment : selected_waveform_assignment
-selected_signal_assignment : selected_force_assignment
-
-selected_waveform_assignment: t_WITH expr t_SELECT choice_stat
- target t_LESym delay_stat sel_wave_list
-
-delay_stat:
-delay_stat: delay_mechanism
-
-sel_wave_list: wavefrm_element t_WHEN choices t_Comma sel_wave_list
-sel_wave_list: sel_wave_list_1
-
-sel_wave_list_1: wavefrm_element t_WHEN choices t_Semicolon
-
-selected_force_assignment: t_WITH expr t_SELECT choice_stat target t_LESym t_FORCE
- inout_stat sel_var_list
-
-inout_stat:
-inout_stat: t_IN
-inout_stat: t_OUT
-
-delay_mechanism : t_TRANSPORT
- | t_REJECT expr t_INERTIAL
- | t_INERTIAL
-
-conditional_variable_assignment : variable_assign_stat_1 t_WHEN expr else_stat t_Semicolon
-conditional_variable_assignment : variable_assign_stat_1 t_WHEN expr t_Semicolon
-
-else_stat: t_ELSE expr t_WHEN expr
-else_stat: else_stat t_ELSE expr t_WHEN expr
-else_stat: t_ELSE expr
-
-selected_variable_assignment: t_WITH expr t_SELECT choice_stat select_name t_VarAsgn sel_var_list
-
-sel_var_list: expr t_WHEN choices t_Comma sel_var_list
-sel_var_list: sel_var_list_1
-
-sel_var_list_1: expr t_WHEN choices t_Semicolon
-
-select_name: name
- | aggregate
-
-interface_subprogram_decl: iproc { $$ = $1; }
- | ifunc { $$=$1; }
- ;
-iproc: t_PROCEDURE t_Identifier param { $$ = "procedure "+$2+$3; current->name=$2; }
-
-ifunc: t_FUNCTION func_name param t_RETURN mark return_is
- {
- QCString s=$6;
- if (!s.isEmpty())
- {
- s.prepend(" is ");
- }
- $$=" function "+$2+$3+$5+s;
- current->name=$2;
- }
-ifunc: func_prec t_FUNCTION func_name param t_RETURN mark return_is
- {
- QCString s=$7;
- if (!s.isEmpty())
- {
- s.prepend(" is ");
- }
- $$=$1+" function "+$3+$4+" return "+$6+s;
- current->name=$3;
- }
-
-func_name: t_Identifier { $$=$1; }
- | t_StringLit { $$=$1; } // "?<"
- ;
-
-return_is: /* empty */ { $$=""; }
- | t_IS t_Identifier { $$=$2; }
- | t_IS t_Box { $$="<>"; }
-
-param: /* empty */ { $$=""; }
-param: t_PARAMETER { $$="parameter "; }
-param: t_PARAMETER { parse_sec=PARAM_SEC; }
- t_LeftParen interf_element interf_list_1 t_RightParen
- { parse_sec=0; }
-
-param: t_LeftParen interf_element interf_list_1 t_RightParen { $$="("+$2+")"; }
-
-interface_package_decl: t_PACKAGE t_Identifier t_IS t_NEW dot_name
- {
- $$="package "+$2+" is new "+$5;
- current->name=$2;
- }
-interface_package_decl: t_PACKAGE t_Identifier t_IS t_NEW dot_name gen_assoc_list
- {
- $$="package "+$2+" is new "+$5+"( ... )" ;
- current->name=$2;
- }
-
-gen_assoc_list: t_GENERIC t_MAP association_list
-
-gen_interface_list : t_GENERIC
- {
- //int u=s_str.iLine;
- parse_sec=GEN_SEC;
- }
- interf_list
- {
- QCString vo=$3;
- parse_sec=0;
- }
-
-external_name: t_SLSL sig_stat external_pathname t_Colon subtype_indic t_SRSR
- {
- QCString s="<<"+$2;
- QCString s1=$3+":"+$5+">>";
- $$=s+s1;
- }
-
-sig_stat: t_CONSTANT { $$="constant "; }
-sig_stat: t_SIGNAL { $$="signal "; }
-sig_stat: t_VARIABLE { $$="variable "; }
-
-external_pathname: absolute_pathname { $$=$1; }
- | relative_pathname { $$=$1; }
- | package_path_name { $$=$1; }
- ;
-
-absolute_pathname: t_Dot pathname_element_list t_Identifier { $$="."+$2+$3; }
-absolute_pathname: t_Dot t_Identifier { $$="."+$2; }
-
-relative_pathname: neg_list pathname_element_list t_Identifier { $$=$1+$2+$3; }
-relative_pathname: neg_list t_Identifier { $$=$1+$2; }
-
-neg_list: t_Neg t_Dot { $$="^."; }
-neg_list: neg_list t_Neg t_Dot { $$=$1+"^."; }
-
-pathname_element: t_Identifier { $$=$1; }
- | t_Identifier t_LeftParen expr t_RightParen { $$=$1+"("+$3+")"; }
- ;
-
-pathname_element_list: pathname_element t_Dot { $$=$1+"."; }
- | pathname_element_list pathname_element t_Dot { $$=$1+$2+"."; }
-
-package_path_name: t_At dot_name { $$="@"+$2; }
-
-tool_directive: t_ToolDir
-{
-// fprintf(stderr,"\n tooldir %s",s_str.qstr.data() );
-}
-
-
-%%
-extern FILE* yyout;
-extern YYSTYPE vhdlScanYYlval;
-
-void vhdlScanYYerror(const char* /*str*/)
-{
-// fprintf(stderr,"\n<---error at line %d : [ %s] in file : %s ---->",s_str.yyLineNr,s_str.qstr.data(),s_str.fileName);
- // exit(0);
-}
-
-int MyParserVhdl::parse(MyParserVhdl* conv)
-{
- myconv=conv;
- return vhdlScanYYparse();
-}
-
-int lex(void)
-{
- return myconv->doLex();
-}
-
-struct s_contVhdl* getVhdlCont()
-{
- return &s_str;
-}
-
-Entry* getVhdlCompound()
-{
- if (lastEntity) return lastEntity;
- if (lastCompound) return lastCompound;
- return NULL;
-}
-
-QList<ConfNode>& getVhdlConfiguration() { return configL; }
-
-static void addCompInst(char *n, char* instName, char* comp,int iLine)
-{
-
- current->spec=VhdlDocGen::INSTANTIATION;
- current->section=Entry::VARIABLE_SEC;
- current->startLine=iLine;
- current->bodyLine=iLine;
- current->type=instName; // foo:instname e.g proto or work. proto(ttt)
- current->exception=genLabels; // |arch|label1:label2...
- current->name=n; // foo
- current->args=lastCompound->name; // architecture name
- current->includeName=comp; // component/enity/configuration
-
- //printf(" \n genlable: [%s] inst: [%s] name: [%s] \n",genLabels.data(),instName,n);
-
- if (lastCompound)
- {
- current->args=lastCompound->name;
- if (!findInstant(current->type))
- {
- initEntry(current);
- instFiles.append(new Entry(*current));
- }
- current->reset();
- }
- else
- {
- newEntry();
- }
-}
-
-static void pushLabel(QCString label)
-{
- genLabels+="|"+label;
-}
-
-static void popLabel()
-{
- int u=genLabels.findRev("|");
- if (u<0) return;
- genLabels=genLabels.left(u);
-}
-
-static void popConfig()
-{
- assert(currNode);
- currNode=currNode->prevNode;
- // printf("\n pop arch %s ",currNode->arch.data());
-}
-
-static void addConfigureNode(const char* a,const char*b, bool isRoot,bool isLeave,bool inlineConf)
-{
- struct ConfNode* co;
- QCString ent,arch,lab;
- ent=a;
- lab = VhdlDocGen::parseForConfig(ent,arch);
-
- if (b)
- {
- ent=b;
- lab=VhdlDocGen::parseForBinding(ent,arch);
- }
-
- co=new ConfNode(a,b,confName.data());
- if (inlineConf)
- {
- co->isInlineConf=TRUE;
- }
-
- if (isRoot)
- {
- co->isRoot=TRUE;
- configL.append(co);
- currNode=co;
- currNode->prevNode=currNode;
- }
- else if (!isLeave)
- {
- currNode->addNode(co);
- co->prevNode=currNode;
- currNode=co;
- }
- else
- {
- assert(0);
- co=new ConfNode(a,b,confName.data());
- currNode->addNode(co);
- }
-}// addConfigure
-
-//------------------------------------------------------------------------------------------------------------
-
-static bool isFuncProcProced()
-{
- if (currP==VhdlDocGen::FUNCTION ||
- currP==VhdlDocGen::PROCEDURE ||
- currP==VhdlDocGen::PROCESS
- )
- {
- return TRUE;
- }
- return FALSE;
-}
-
-static void initEntry(Entry *e)
-{
- e->fileName = s_str.fileName;
- e->lang=SrcLangExt_VHDL;
- initGroupInfo(e);
-}
-
-static void addProto(const char *s1,const char *s2,const char *s3,
- const char *s4,const char *s5,const char *s6)
-{
- // (void)s3; // avoid unused warning
- (void)s5; // avoid unused warning
- static QRegExp reg("[\\s]");
- QCString name=s2;
- QStringList ql=QStringList::split(",",name,FALSE);
-
- for (uint u=0;u<ql.count();u++)
- {
- Argument *arg=new Argument;
- arg->name=(QCString)ql[u];
- if (s3)
- {
- arg->type=s3;
- }
- arg->type+=" ";
- arg->type+=s4;
- if (s6)
- {
- arg->type+=s6;
- }
- if (parse_sec==GEN_SEC && param_sec==0)
- {
- arg->defval="gen!";
- }
-
- if (parse_sec==PARAM_SEC)
- {
- assert(false);
- }
-
- arg->defval+=s1;
- arg->attrib="";//s6;
-
- current->argList->append(arg);
- current->args+=s2;
- current->args+=",";
- }
-}
-
-static bool findInstant(QCString inst)
-{
- QListIterator<Entry> eli(instFiles);
- Entry *cur;
-
- for (eli.toFirst();(cur=eli.current());++eli)
- {
- if (stricmp(inst.data(),cur->type.data())==0)
- {
- return TRUE;
- }
- }
- return FALSE;
-}//findInst
-
-static void createFunction(const QCString &impure,int spec,
- const QCString &fname)
-{
- int it=0;
- current->bodyLine=getParsedLine(spec);
- current->spec=spec;
- current->section=Entry::FUNCTION_SEC;
- current->exception=impure;
-
- if (parse_sec==GEN_SEC)
- {
- current->spec= VhdlDocGen::GENERIC;
- current->section=Entry::FUNCTION_SEC;
- }
-
- if (currP==VhdlDocGen::PROCEDURE)
- {
- current->name=impure;
- current->exception="";
- it=t_PROCEDURE;
- }
- else
- {
- current->name=fname;
- it=t_FUNCTION;
- }
-
- if (spec==VhdlDocGen::PROCESS)
- {
- it=t_PROCESS;
- current->args=fname;
- current->name=impure;
- if (!fname.isEmpty())
- {
- QStringList q1=QStringList::split(',',fname);
- for (uint ii=0;ii<q1.count();ii++)
- {
- Argument *arg=new Argument;
- arg->name=(QCString)q1[ii];
- current->argList->append(arg);
- }
- }
- }
-
- current->startLine=getParsedLine(it);
- current->bodyLine=getParsedLine(it);
-}
-
-static void addVhdlType(const QCString &name,int startLine,int section,int spec,
- const char* args,const char* type,Protection prot)
-{
- static QRegExp reg("[\\s]");
-
- //int startLine=getParsedLine(spec);
-
- if (isFuncProcProced())
- {
- return;
- }
-
- if (parse_sec==GEN_SEC)
- {
- spec= VhdlDocGen::GENERIC;
- }
-
- // more than one name ?
- QStringList ql=QStringList::split(",",name,FALSE);
-
- for (uint u=0;u<ql.count();u++)
- {
- current->name=(QCString)ql[u];
- // if (section==Entry::VARIABLE_SEC && !(spec == VhdlDocGen::USE || spec == VhdlDocGen::LIBRARY) )
- // {
- // current->name.prepend(VhdlDocGen::getRecordNumber());
- // }
-
- current->startLine=startLine;
- current->bodyLine=startLine;
- current->section=section;
- current->spec=spec;
- current->fileName=s_str.fileName;
- if (current->args.isEmpty())
- {
- current->args=args;
- current->args.replace(reg,"%"); // insert dummy chars because wihte spaces are removed
- }
- current->type=type;
- current->type.replace(reg,"%"); // insert dummy chars because white spaces are removed
- current->protection=prot;
- newEntry();
- }
-}
-
-static void newEntry()
-{
- if (current->spec==VhdlDocGen::ENTITY ||
- current->spec==VhdlDocGen::PACKAGE ||
- current->spec==VhdlDocGen::ARCHITECTURE ||
- current->spec==VhdlDocGen::PACKAGE_BODY
- )
- {
- current_root->addSubEntry(current);
- }
- else
- {
- if (lastCompound)
- {
- lastCompound->addSubEntry(current);
- }
- else
- {
- if (lastEntity)
- {
- lastEntity->addSubEntry(current);
- }
- else
- {
- current_root->addSubEntry(current);
- }
- }
- }
- current = new Entry ;
- initEntry(current);
-}
-
diff --git a/trunk/src/vhdlscanner.h b/trunk/src/vhdlscanner.h
deleted file mode 100644
index bca6460..0000000
--- a/trunk/src/vhdlscanner.h
+++ /dev/null
@@ -1,131 +0,0 @@
-/******************************************************************************
- *
- *
- *
- * Copyright (C) 1997-2012 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.
- *
- */
-
-#ifndef VHDLSCANNER_H
-#define VHDLSCANNER_H
-
-#include "parserintf.h"
-#include <stdio.h>
-#include <stdlib.h>
-#include <assert.h>
-#include <ctype.h>
-
-#include <qarray.h>
-#include <unistd.h>
-#include <qfile.h>
-#include <qdict.h>
-
-#include "entry.h"
-#include "memberlist.h"
-
-class Entry;
-class ClassSDict;
-class FileStorage;
-class ClassDef;
-class MemberDef;
-class QStringList;
-
-
-/** \brief VHDL parser using state-based lexical scanning.
- *
- * This is the VHDL language parser for doxygen.
- */
-class VHDLLanguageScanner : public ParserInterface
-{
- public:
- virtual ~VHDLLanguageScanner() {}
- void parseInput(const char * fileName,
- const char *fileBuf,
- Entry *root);
- bool needsPreprocessing(const QCString &extension);
- void parseCode(CodeOutputInterface &codeOutIntf,
- const char *scopeName,
- const QCString &input,
- bool isExampleBlock,
- const char *exampleName=0,
- FileDef *fileDef=0,
- int startLine=-1,
- int endLine=-1,
- bool inlineFragment=FALSE,
- MemberDef *memberDef=0,
- bool showLineNumbers=TRUE
- );
- void resetCodeParserState();
- void parsePrototype(const char *text);
-};
-
-// container for vhdlscanner
-struct s_contVhdl
-{
- int yyLineNr; // current line no
- int iLine; // line no of last t_identifier
- QCString qstr; // t_identifier
- QCString fileName; // current file
- Entry* root; // root
-};
-
-struct ConfNode
-{
- ConfNode *prevNode;
- ConfNode(const char* a,const char* b,const char* config)
- {
- arch=a; // architecture e.g. for iobuffer
- binding=b; // binding e.g. use entiy work.xxx(bev)
- confVhdl=config; // configuration foo is bar
- isBind=false;
- prevNode=NULL;
- isRoot=false;
- isInlineConf=false; // primary configuration?
- };
-
- QCString confVhdl;
- QCString arch;
- QCString binding;
- QList<ConfNode> confN;
- bool isBind;
- bool isInlineConf;
- bool isRoot;
-
- void addNode(ConfNode* n) { confN.append(n); }
- bool isBinding() { return binding.isEmpty(); }
-} ;
-
-// returns the current conpound entity,architecture, package,package body
-Entry* getVhdlCompound();
-
-// return the current parsed entry
-Entry* getCurrentVhdlEntry();
-
-void newVhdlEntry();
-
-void initVhdlParser();
-
-struct s_contVhdl* getVhdlCont();
-
-// returns the parsed line
-// @ param object index of vhdl keyword like t_Identifier t_Entity
-int getParsedLine(int object);
-
-void vhdlscanFreeScanner();
-
-// return the list of component instantiations e.g. foo: component bar
-QList<Entry> & getVhdlInstList();
-
-// returns the list of found configurations
-QList<ConfNode>& getVhdlConfiguration();
-
-#endif
diff --git a/trunk/src/vhdlscanner.l b/trunk/src/vhdlscanner.l
deleted file mode 100644
index 9ca68db..0000000
--- a/trunk/src/vhdlscanner.l
+++ /dev/null
@@ -1,991 +0,0 @@
-/************** VHDL scanner in LEX format **********
- *
- * Version 0.2 Wed Aug 11, 1993
- *
- * This scanner is derived from a scanner of the ALLIANCE CAD toolset,
- * release 1.1. That toolset was written from:
- * MASI/CAO-VLSI CAD Team
- * Laboratoire MASI/CAO-VLSI
- * Tour 55-65, 2eme etage, Porte 13
- * Universite Pierre et Marie Curie (PARIS VI)
- * 4, place Jussieu 75252 PARIS Cedex 05, FRANCE
- * The ALLIANCE CAD Toolset can be obtained from ftp site : ftp-masi.ibp.fr
- *
- * This scanner is avail at: ftp.cs.utwente.nl in pub/src/VHDL/Grammar
- * A corresponding Yacc grammar is available at the same site
- *
- * author of this derived scanner version:
- * Thomas Dettmer
- * Dortmund University
- * Dept. of Computer Scienc, LS1
- * PB 500 500
- * D-44221 Dortmund (Germany)
- * Phone: +49-231-755-6464
- * e-mail: dettmer@ls1.informatik.uni-dortmund.de
- *
- *
- ****************************************************************
- *
- * This file is intended not to be used for commercial purposes
- * without permission of the University of Dortmund
- *
- * NOTE THAT THERE IS NO WARRANTY FOR CORRECTNES, COMPLETENESS, SUPPORT
- * OR ANYTHING ELSE.
- *******************************************************/
-/******************************************************************************
- * modified for doxygen by M. Kreis
- * extended to VHDL 93/2002/2008
- ******************************************************************************/
-%{
-
-#ifndef YYSTYPE
- typedef int YYSTYPE;
-#endif
-
-#include <ctype.h>
-#include <search.h>
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <assert.h>
-#include <string.h>
-#include <ctype.h>
-#include "commentscan.h"
-#include "vhdlparser.h"
-#include "vhdlscanner.h"
-
-#include "doxygen.h"
-#include "searchindex.h"
-#include <ctype.h>
-#include "scanner.h"
-#include "vhdldocgen.h"
-#include "util.h"
-#include "bufstr.h"
-#include "message.h"
-#include "vhdlcode.h"
-#include <qmap.h>
-#include "entry.h"
-
-static MyParserVhdl *pconv;
-
-static bool g_lexInit = FALSE;
-static ParserInterface *g_thisParser;
-static struct s_contVhdl* yycont=NULL;
-static Entry* current_root;
-static Entry gBlock;
-
-static int yyLineNr =1;
-//static int yyPrevLine=1;
-//static int yyEndLine=1;
-static int g_lastCommentContext;
-static int inputPosition;
-//static int defineLineContinue=0;
-static int startComment;
-//static int iSize=0;
-static QCString inputVhdlString;
-static QFile inputFile;
-static QCString yyFileName;
-static QList<QCString> qlist;
-
-static QCString lastLetter;
-//static int totLines=0;
-
-//static bool multLineComment=FALSE;
-static bool doxComment=FALSE; // doxygen comment ?
-static QCString strComment;
-static int iDocLine=-1;
-static int* lineIndex=NULL;
-static int num_chars;
-static int prevToken;
-static int iCodeLen;
-
-//static const char * g_inputString; //!< the code fragment as text
-//static int g_inputLines=0; //!<number of line in the code fragment
-//static bool g_needsTermination;
-static QMap<QCString, int> keyMap;
-
-static void handleCommentBlock(const QCString &doc,bool brief);
-static void mapLibPackage(const Entry* ce);
-static Entry* getEntryAtLine(const Entry* ce,int line);
-static bool addLibUseClause(const QCString &type);
-
-static bool varr=false;
-static QCString varName;
-
-#define YY_NEVER_INTERACTIVE 1
-#define YY_USER_ACTION num_chars += vhdlScanYYleng;
-
-#define MAX_KEYWORD_LEN 20
-
-typedef struct
-{
- char nom[MAX_KEYWORD_LEN];
- int kval;
-} el_mc;
-
-static el_mc tab_mc []=
-{
- { "abs", t_ABS },
- { "access", t_ACCESS },
- { "after", t_AFTER },
- { "alias", t_ALIAS },
- { "all", t_ALL },
- { "and", t_AND },
- { "architecture", t_ARCHITECTURE },
- { "array", t_ARRAY },
- { "assert", t_ASSERT },
- { "assume", t_ASSUME },
- { "assume_guarantee", t_ASSUME_GUARANTEE },
- { "attribute", t_ATTRIBUTE },
-
- { "begin", t_BEGIN },
- { "block", t_BLOCK },
- { "body", t_BODY },
- { "buffer", t_BUFFER },
- { "bus", t_BUS },
-
- { "case", t_CASE },
- { "component", t_COMPONENT },
- { "configuration", t_CONFIGURATION },
- { "constant", t_CONSTANT },
- { "context", t_CONTEXT },
- { "cover", t_COVER },
-
- { "default", t_DEFAULT },
- { "disconnect", t_DISCONNECT },
- { "downto", t_DOWNTO },
-
- { "else", t_ELSE },
- { "elsif", t_ELSIF },
- { "end", t_END },
- { "entity", t_ENTITY },
- { "exit", t_EXIT },
-
- { "fairness", t_FAIRNESS },
- { "file", t_FILE },
- { "for", t_FOR },
- { "force", t_FORCE },
- { "function", t_FUNCTION },
-
- { "generate", t_GENERATE },
- { "generic", t_GENERIC },
- { "group", t_GROUP },
- { "guarded", t_GUARDED },
-
- { "if", t_IF },
- { "impure", t_IMPURE },
- { "in", t_IN },
- { "inertial", t_INERTIAL },
- { "inout", t_INOUT },
- { "is", t_IS },
-
- { "label", t_LABEL },
- { "library", t_LIBRARY },
- { "linkage", t_LINKAGE },
- { "literal", t_LITERAL },
- { "loop", t_LOOP },
-
- { "map", t_MAP },
- { "mod", t_MOD },
-
- { "nand", t_NAND },
- { "new", t_NEW },
- { "next", t_NEXT },
- { "nor", t_NOR },
- { "not", t_NOT },
- { "null", t_NULL },
-
- { "of", t_OF },
- { "on", t_ON },
- { "open", t_OPEN },
- { "or", t_OR },
- { "others", t_OTHERS },
- { "out", t_OUT },
-
- { "package", t_PACKAGE },
- { "parameter", t_PARAMETER },
- { "port", t_PORT },
- { "postponed", t_POSTPONED },
- { "procedure", t_PROCEDURE },
- { "process", t_PROCESS },
- { "property", t_PROPERTY },
- { "protected", t_PROTECTED },
- { "pure", t_PURE },
-
- { "range", t_RANGE },
- { "record", t_RECORD },
- { "register", t_REGISTER },
- { "reject", t_REJECT },
- { "release", t_RELEASE },
- { "restrict", t_RESTRICT },
- { "restrict_guarantee", t_RESTRICT_GUARANTEE },
- { "rem", t_REM },
- { "report", t_REPORT },
- { "rol", t_ROL },
- { "ror", t_ROR },
- { "return", t_RETURN },
-
- { "select", t_SELECT },
- { "sequence", t_SEQUENCE },
- { "severity", t_SEVERITY },
- { "signal", t_SIGNAL },
- { "shared", t_SHARED },
- { "sla", t_SLA },
- { "sll", t_SLL },
- { "sra", t_SRA },
- { "srl", t_SRL },
- { "strong", t_STRONG },
- { "subtype", t_SUBTYPE },
-
- { "then", t_THEN },
- { "to", t_TO },
- { "transport", t_TRANSPORT },
- { "type", t_TYPE },
-
- { "unaffected", t_UNAFFECTED },
- { "units", t_UNITS },
- { "until", t_UNTIL },
- { "use", t_USE },
-
- { "variable", t_VARIABLE },
- { "vmode", t_VMODE },
- { "vprop", t_VPROP },
- { "vunit", t_VUNIT },
-
- { "wait", t_WAIT },
- { "when", t_WHEN },
- { "while", t_WHILE },
- { "with", t_WITH },
-
- { "xor", t_XOR },
- { "xnor", t_XNOR },
- { "zz", -1 } // list end
-};
-
-
-static int find_keyword(char *s)
-{
- QCString word(s);
- // keyword ?
- if (word.length() > MAX_KEYWORD_LEN)
- return -1;
-
- word=word.lower();
- QMap<QCString, int>::Iterator it = keyMap.find(word);
- if (it.key())
- return it.data();
-
- return -1;
-}
-
-// update current line
-static void lineCount()
-{
- for (const char* c=vhdlScanYYtext ; *c ; ++c )
- {
- yyLineNr += (*c == '\n') ;
- }
-}
-
-
-static void startCodeBlock(int index){
- int ll=strComment.length();
- iCodeLen=inputVhdlString.findRev(strComment.data())+ll;
- // fprintf(stderr,"\n startin code..%d %d %d\n",iCodeLen,num_chars,ll);
- //assert(false);
- gBlock.reset();
- int len=strComment.length();
- QCString name=strComment.right(len-index);//
- name=VhdlDocGen::getIndexWord(name.data(),1);
- if (!name)
- gBlock.name="misc"+ VhdlDocGen::getRecordNumber();
- else
- gBlock.name=name;
- strComment=strComment.left(index);
- gBlock.startLine=yyLineNr+1;
- gBlock.bodyLine=yyLineNr+1;
- VhdlDocGen::prepareComment(strComment);
- gBlock.brief+=strComment;
-}
-static void makeInlineDoc(int endCode)
-{
- int len=endCode-iCodeLen;
- QCString par=inputVhdlString.mid(iCodeLen,len);
- gBlock.doc=par;
- gBlock.inbodyDocs=par;
- gBlock.section=Entry::VARIABLE_SEC;
- gBlock.spec=VhdlDocGen::MISCELLANEOUS;
- gBlock.fileName = yyFileName;
- gBlock.endBodyLine=yyLineNr-1;
- gBlock.lang=SrcLangExt_VHDL;
- Entry *temp=new Entry(gBlock);
-
- Entry* compound=getVhdlCompound();
-
- if (compound)
- {
- compound->addSubEntry(temp);
- }
- else
- {
- temp->type="misc"; // global code like library ieee...
- current_root->addSubEntry(temp);
- }
- strComment.resize(0);
- gBlock.reset();
-
-
-}// makeInlineDoc
-
-static bool isConstraintFile(const QCString &fileName,const QCString &ext)
-{
- return fileName.right(ext.length())==ext;
-}
-
-//static void resetScanner(const char* s,MyParserVhdl* parse);
-
-#undef YY_INPUT
-#define YY_INPUT(buf,result,max_size) result=vhdlScanYYread(buf,max_size);
-
-
-static int vhdlScanYYread(char *buf,int max_size)
-{
- int c=0;
- while ( c < max_size && inputVhdlString.at(inputPosition) )
- {
- *buf = inputVhdlString.at(inputPosition++) ;
- c++; buf++;
- }
- return c;
-}
-
-%}
-
-upper_case_letter [A-Z]
-digit [0-9]
-special_character [\#\&\'\(\)\*\+\,\-\.\/\:\;\<\=\>\_\|]
-space_character [ \t]
-format_effector [\t\v\r\l\f]
-end_of_line \n
-lower_case_letter [a-z]
-other_special_character [\!\$\@\?\[\\\]\^\`\{\}\~]
-
-graphic_character ({basic_graphic_character}|{lower_case_letter}|{other_special_character})
-basic_graphic_character ({upper_case_letter}|{digit}|{special_character}|{space_character})
-letter ({upper_case_letter}|{lower_case_letter})
-letter_or_digit ({letter}|{digit})
-decimal_literal {integer}(\.{integer})?({exponent})?
-integer {digit}(_?{digit})*
-exponent ([eE][-+]?{integer})
-base {integer}
-based_integer {extended_digit}(_?{extended_digit})*
-extended_digit ({digit}|[a-fA-F])
-
-extended_character [\\]{graphic_character}*[\\]
-
-base_specifier {digit}*(B|b|D|O|o|X|x|"UB"|"UO"|"UX"|"SB"|"SO"|"SX")
-
-vhdl2008tooldir `{graphic_character}+
-
-B [ \t]
-BR [ \t\n\r]
-
-
-%option noyywrap
-%x Comment
-%x Vhdl2008Comment
-%x EndVhdl2008Comment
-%%
-
-{space_character} { /* nothing */ }
-\& { return(t_Ampersand); }
-\' { return(t_Apostrophe); }
-\( { return(t_LeftParen); }
-\) { return(t_RightParen); }
-"**" { return(t_DoubleStar); }
-\* { return(t_Star); }
-\+ { return(t_Plus); }
-\, { return(t_Comma); }
-\- { return(t_Minus); }
-":=" { return(t_VarAsgn); }
-\: { return(t_Colon); }
-\; { return(t_Semicolon); }
-"<=" { return(t_LESym); }
-">=" { return(t_GESym); }
-\< { return(t_LTSym); }
-\> { return(t_GTSym); }
-\= { return(t_EQSym); }
-\/= { return(t_NESym); }
-"=>" { return(t_Arrow); }
-"<>" { return(t_Box); }
-"<<" { return(t_SLSL); }
-">>" { return(t_SRSR); }
-"??" { return(t_QQ); }
-"?>=" { return(t_QGT); }
-"?<=" { return(t_QLT); }
-"?>" { return(t_QG); }
-"?<" { return(t_QL); }
-"?=" { return(t_QEQU); }
-"?/=" { return(t_QNEQU); }
-\? { return(t_Q); }
-\| { return(t_Bar); }
-\. { return(t_Dot); }
-\/ { return(t_Slash); }
-\@ { return(t_At); }
-\^ { return(t_Neg); }
-\[ { return(t_LEFTBR); }
-\] { return(t_RIGHTBR); }
-
-
-{letter}(_?{letter_or_digit})*|{extended_character} {
- int itoken=find_keyword(vhdlScanYYtext);
-
- // fprintf(stderr,"\n <<<< search tok: %s %d %d>>>\n",vhdlScanYYtext,itoken,yyLineNr);
-
- // tokens in vhdlparser.hpp 258..412
- if (itoken>200 && itoken<500 && prevToken!=t_END)
- {
- // printf("\n <<<< insert tok: %s %d %d>>>\n",vhdlScanYYtext,itoken,yyLineNr);
- lineIndex[itoken]=yyLineNr;
- }
-
- // global members
- if (( itoken==t_ARCHITECTURE ) ||
- ( itoken==t_ENTITY) ||
- ( itoken==t_PACKAGE ) ||
- ( itoken==t_LIBRARY ) ||
- ( itoken==t_USE ) ||
- ( itoken==t_CONFIGURATION ) ||
- ( itoken==t_CONTEXT ) )
- {
- lineIndex[itoken]=yyLineNr;
- }
-
- prevToken=itoken;
-
- yycont->qstr=vhdlScanYYtext;
- yycont->yyLineNr=yyLineNr;
- if (itoken== -1)
- {
- yycont->iLine=yyLineNr;
- return ( t_LETTER );
- }
- else
- {
- return ( itoken );
- }
- }
-
-({decimal_literal})|({base}#{based_integer}(\.{based_integer})?#({exponent})?)|({base}:{based_integer}(\.{based_integer})?:({exponent})?) {
- yycont->qstr=vhdlScanYYtext;
- return ( t_ABSTRLIST );
- }
-
-'({graphic_character}|\"|\%)' {
- QCString q(vhdlScanYYtext);
- yycont->qstr=vhdlScanYYtext;
-
- if (q=="'('") // std_logic'('1') ?
- {
- char c=yy_hold_char;
- if (isalpha(c) || isdigit(c))
- {
- unput('\'');
- unput('(');
- return(t_Apostrophe);
- }
- else
- {
- return ( t_CHARLIST );
- }
- }
- return ( t_CHARLIST );
- }
-
-(\"({graphic_character}|(\"\")|\%)*\")|(\%({graphic_character}|(\%\%)|\")*\%) {
- yycont->qstr=vhdlScanYYtext;
- yycont->iLine=yyLineNr;
- return ( t_STRING );
- }
-
-{base_specifier}(\"{extended_digit}(_?{extended_digit})*\"|\%{extended_digit}(_?{extended_digit})*\%) {
- yycont->qstr=vhdlScanYYtext;
- yycont->iLine=yyLineNr;
- return ( t_DIGIT );
- }
-
-{vhdl2008tooldir} {
- yycont->qstr=vhdlScanYYtext;
- yycont->iLine=yyLineNr;
- return(t_ToolDir);
- }
-
-\n {
- yyLineNr++;
- yycont->yyLineNr=yyLineNr;
- }
-
-<*>"--"[^\n]* {
- /* comment */
- QCString qcs(vhdlScanYYtext);
- // vhdl comment ?
- if (qcs.stripPrefix("--!"))
- {
- REJECT;
- }
- }
-. { /* unknown characters */ }
-
-
-<*>{B}*"--!"[^{}\n][^\n]*\n/{B}*"--!" { // multi line comment
- if (iDocLine==-1) iDocLine=yyLineNr;
- QCString qc(vhdlScanYYtext);
- int len=qc.contains('\n')+yyLineNr-1;
- if (YY_START!=Comment) // Start of the comment block
- {
- startComment=yyLineNr;
- g_lastCommentContext=YY_START;
- }
-
- Entry* pTemp=getEntryAtLine(current_root,len);
- if (pTemp)
- { // found one line comment, add it to the entry on this line
- pTemp->briefLine=yyLineNr;
- pTemp->brief+=vhdlScanYYtext;
- pTemp->briefFile=yyFileName;
- pTemp->fileName = yyFileName;
-
- VhdlDocGen::prepareComment(pTemp->brief);
- }
- else
- {
- strComment+=vhdlScanYYtext;
- }
- lineCount();
- BEGIN(Comment);
-}
-
-<Comment>^{B}*"--!"[^\n]* {
- if (iDocLine==-1) iDocLine=yyLineNr;
- strComment+=vhdlScanYYtext;
- int index=strComment.find("\\code");
- if (index>0)
- {
- startCodeBlock(index);
- doxComment=true;
- }
- lineCount();
- BEGIN(Comment);
-}
-
-<Comment>.|\n {
- // found end of comment block
-
- int index =strComment.find("\\code");
- if (index>0)
- {
- startCodeBlock(index);
- }
-
- VhdlDocGen::prepareComment(strComment);
-
-
- if (index==-1 && !doxComment)
- {
- handleCommentBlock(strComment,FALSE);
- }
- strComment.resize(0);;
- unput(*vhdlScanYYtext);
- doxComment=false;
- BEGIN(g_lastCommentContext);
- }
-
-<*>"--!"[^\n]* { // one line comment
- if (iDocLine==-1) iDocLine=yyLineNr;
- QCString qcs(vhdlScanYYtext);
-
- bool isEndCode=qcs.contains("\\endcode");
-
- int index = qcs.find("\\code");
- if (isEndCode)
- {
- int end=inputVhdlString.find(qcs.data(),iCodeLen);
- makeInlineDoc(end);
- }
- else if (index > 0 )
- {
- // assert(false);
- strComment=qcs;
- startCodeBlock(index);
- strComment.resize(0);
- }
-
- //printf("--> handleCommentBlock line %d\n",yyLineNr);
- Entry* pTemp=getEntryAtLine(current_root,yyLineNr);
-
- if (!isEndCode && index==-1)
- {
- int j=qcs.find("--!");
- qcs=qcs.right(qcs.length()-3-j);
-
- if (pTemp)
- {
- pTemp->briefLine=yyLineNr;
- pTemp->fileName = yyFileName;
- qcs=qcs.stripWhiteSpace();
- pTemp->brief+=qcs;
-
- pTemp->briefFile=yyFileName;
- iDocLine=-1;
- }
- else
- {
- handleCommentBlock(qcs,TRUE);
- }
- }//endcode
- }
-
-<*>"/*" {
- strComment+=vhdlScanYYtext;
- if (yy_hold_char=='!') // found comment starting with "/*!"
- {
- doxComment=TRUE;
- }
- BEGIN(Vhdl2008Comment);
- }
-
-<Vhdl2008Comment>[^*]*[*]+ {
- QCString tt(vhdlScanYYtext);
- int len=tt.length();
- yyLineNr+=tt.contains('\n');
-
- // delete * from comments
- // /*!
- // * see vim !
- // */
-
- if (yytext[len-1]=='*' && tt.contains('\n'))
- {
- QCString ss=tt;
- VhdlDocGen::deleteAllChars(ss,' ');
- VhdlDocGen::deleteAllChars(ss,'\t');
- if (ss.data() && ss.at(ss.length()-2)=='\n')
- {
- tt=tt.left(len-1);
- len--;
- }
- }
-
- // fprintf(stderr,"\n << %s >>",tt.data());
- strComment+=tt;
- char c=yy_hold_char;
- if (c =='/')
- {
- unput('*');
- BEGIN(EndVhdl2008Comment);
- }
- else
- {
- BEGIN(Vhdl2008Comment);
- }
- }
-
-<EndVhdl2008Comment>"*/" {
- if (doxComment)
- {
- strComment.stripPrefix("/*!");
- strComment= strComment.left( strComment.length()-1);
- handleCommentBlock( strComment,TRUE);
- }
- doxComment=FALSE;
- strComment.resize(0);
- BEGIN(INITIAL);
- }
-
-
-%%
-
-static void parserInit()
-{
- num_chars=0;
- lineIndex=(int*)malloc(500*sizeof(int));
-
- if (!g_lexInit)
- {
- VhdlDocGen::init();
- el_mc oop;
- int p=0;
- while ((oop=tab_mc[p++]).kval!=-1)
- {
- QCString q(&oop.nom[0]);
- keyMap.insert(q,oop.kval);
- }
- }
-}
-
-void vhdlscanFreeScanner()
-{
-#if defined(YY_FLEX_SUBMINOR_VERSION)
- if (g_lexInit)
- {
- vhdlScanYYlex_destroy();
- }
-#endif
-}
-
-void VHDLLanguageScanner::resetCodeParserState()
-{
-}
-
-bool VHDLLanguageScanner::needsPreprocessing(const QCString & /*extension*/)
-{
- return TRUE;
-}
-
-void VHDLLanguageScanner::parsePrototype(const char *text)
-{
- varName=text;
- varr=true;
-}
-
-// do parsing
-int MyParserVhdl::doLex()
-{
- int token=vhdlScanYYlex();
- //fprintf(stderr,"\ntoken: %d at line: %d",token,yyLineNr);
- return token;
-}
-
-void VHDLLanguageScanner::parseInput(const char *fileName,const char *fileBuf,Entry *root)
-{
- yyFileName=QCString(fileName);
-
- bool xilinx_ucf=isConstraintFile(yyFileName,".ucf");
- bool altera_qsf=isConstraintFile(yyFileName,".qsf");
-
- // support XILINX(ucf) and ALTERA (qsf) file
-
- if (xilinx_ucf)
- {
- VhdlDocGen::parseUCF(fileBuf,root,yyFileName,FALSE);
- return;
- }
- if (altera_qsf)
- {
- VhdlDocGen::parseUCF(fileBuf,root,yyFileName,TRUE);
- return;
- }
-
- ::parserInit();
- yycont=getVhdlCont();
- yycont->root=root;
- yycont->fileName=fileName;
- initVhdlParser();
- QCString pPuffer(" ");
- pPuffer+=fileBuf;
-
- inputFile.setName(fileName);
- if (g_lexInit)
- {
- vhdlScanYYrestart( vhdlScanYYin );
- }
- g_lexInit=TRUE;
- g_thisParser=this;
- inputPosition=0;
- inputVhdlString=fileBuf;
- yyLineNr=1;
- current_root=root;
- pconv=new MyParserVhdl();
- groupEnterFile(fileName,yyLineNr);
- pconv->parse(pconv);
- // resetScanner(NULL,pconv);
- delete pconv;
- Entry* curr=getCurrentVhdlEntry(); // delete last current
- delete curr;
- curr=0;
- free(lineIndex);
- inputFile.close();
- mapLibPackage(root);
-}
-
-void VHDLLanguageScanner::parseCode(CodeOutputInterface &codeOutIntf,
- const char *scopeName,
- const QCString &input,
- bool isExampleBlock,
- const char *exampleName,
- FileDef *fileDef,
- int startLine,
- int endLine,
- bool inlineFragment,
- MemberDef *memberDef,
- bool showLineNumbers
- )
-{
- ::parseVhdlCode(codeOutIntf,scopeName,input,isExampleBlock,exampleName,
- fileDef,startLine,endLine,inlineFragment,memberDef,
- showLineNumbers);
-}
-
-/*
- * adds the library|use statements to the next class (entity|package|architecture|package body
- * library ieee
- * entity xxx
- * .....
- * library
- * package
- * enity zzz
- * .....
- * and so on..
- */
-static void mapLibPackage(const Entry* ce)
-{
- Entry *lastComp=0;
- while (TRUE)
- {
- bool found = FALSE;
- Entry *rt=0;
- //const QList<Entry> *epp=ce->children();
- EntryListIterator eli(*ce->children());
- EntryListIterator eli1=eli;
- for (;(rt=eli.current()),eli1=eli;++eli)
- {
- if (rt->spec==VhdlDocGen::LIBRARY || rt->spec==VhdlDocGen::USE)
- // top level library or use statement
- {
- Entry *temp=0;
- if(!addLibUseClause(rt->name))
- {
- rt->spec=-1;
- rt->section=0;
- // continue;
- }
-
- for (;(temp=eli1.current());++eli1) // find next entity
- {
- if (temp->spec==VhdlDocGen::ENTITY ||
- temp->spec==VhdlDocGen::PACKAGE ||
- temp->spec==VhdlDocGen::ARCHITECTURE ||
- temp->spec==VhdlDocGen::PACKAGE_BODY)
- {
- Entry *ee=new Entry(*rt); //append a copy to entries sublist
- temp->addSubEntry(ee);
- found=TRUE;
- rt->spec=-1; //nullify entry
- rt->section=0;
- lastComp=temp;
- break;
- }
- }//for
- if (lastComp && rt->spec!=-1)
- {
- Entry *ee=new Entry(*rt); //append a copy to entries sublist
- lastComp->addSubEntry(ee);
- found=TRUE;
- rt->spec=-1; //nullify entry
- rt->section=0;
- }
- }//if
- }//for
- if (!found) // nothing left to do
- {
- return;
- }
- }//while
-}//MapLib
-
-static bool addLibUseClause(const QCString &type)
-{
- static bool show=Config_getBool("SHOW_INCLUDE_FILES");
- static bool showIEEESTD=Config_getBool("FORCE_LOCAL_INCLUDES");
-
- if (!show) // all libraries and included packages will not be shown
- {
- return FALSE;
- }
-
- if (!showIEEESTD) // all standard packages and libraries will not be shown
- {
- if (type.lower().stripPrefix("ieee")) return FALSE;
- if (type.lower().stripPrefix("std")) return FALSE;
- }
- return TRUE;
-}
-
-static void handleCommentBlock(const QCString &doc,bool brief)
-{
- int position=0;
- bool needsEntry=FALSE;
- Protection protection=Public;
- int lineNr = iDocLine;
-
- Entry* current=getCurrentVhdlEntry();
-
- if (brief)
- current->briefLine = iDocLine;
- else
- current->docLine = iDocLine;
-
-// printf("parseCommentBlock file<%s>\n [%s]\n",yyFileName.data(),doc.data());
- while (parseCommentBlock(
- g_thisParser,
- current,
- doc, // text
- yyFileName, // file
- lineNr, // line of block start
- brief,
- 0,
- FALSE,
- protection,
- position,
- needsEntry
- )
- )
- {
- //printf("parseCommentBlock position=%d [%s]\n",position,doc.data()+position);
- if (needsEntry) newVhdlEntry();
- }
- if (needsEntry)
- {
- if(varr)
- {
- varr=false;
- current->name=varName;
- current->section=Entry::VARIABLEDOC_SEC;
- varName="";
- strComment.resize(0);
- }
-
- newVhdlEntry();
- }
- iDocLine=-1;
- strComment.resize(0);
-}
-
-// returns the vhdl type parsed at line xxx
-static Entry* getEntryAtLine(const Entry* ce,int line)
-{
- EntryListIterator eli(*ce->children());
- Entry *found=0;
- Entry *rt;
- for (;(rt=eli.current());++eli)
- {
- if (rt->bodyLine==line)
- {
- found=rt;
- } // if
- if (!found)
- {
- found=getEntryAtLine(rt,line);
- }
- }
- return found;
-}// getEntryAtLine
-
-// token index in vhdlparser.hpp 258..416
-int getParsedLine(int object)
-{
- //assert(object>254 && object <416);
- return lineIndex [object];
-}
-
-
diff --git a/trunk/src/xmldocvisitor.cpp b/trunk/src/xmldocvisitor.cpp
deleted file mode 100644
index 15d4caa..0000000
--- a/trunk/src/xmldocvisitor.cpp
+++ /dev/null
@@ -1,1002 +0,0 @@
-/******************************************************************************
- *
- *
- *
- *
- * Copyright (C) 1997-2012 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.
- *
- */
-
-#include "xmldocvisitor.h"
-#include "docparser.h"
-#include "language.h"
-#include "doxygen.h"
-#include "outputgen.h"
-#include "xmlgen.h"
-#include "dot.h"
-#include "message.h"
-#include "util.h"
-#include <qfileinfo.h>
-#include "parserintf.h"
-
-XmlDocVisitor::XmlDocVisitor(FTextStream &t,CodeOutputInterface &ci)
- : DocVisitor(DocVisitor_XML), m_t(t), m_ci(ci), m_insidePre(FALSE), m_hide(FALSE)
-{
-}
-
- //--------------------------------------
- // visitor functions for leaf nodes
- //--------------------------------------
-
-void XmlDocVisitor::visit(DocWord *w)
-{
- if (m_hide) return;
- filter(w->word());
-}
-
-void XmlDocVisitor::visit(DocLinkedWord *w)
-{
- if (m_hide) return;
- startLink(w->ref(),w->file(),w->anchor());
- filter(w->word());
- endLink();
-}
-
-void XmlDocVisitor::visit(DocWhiteSpace *w)
-{
- if (m_hide) return;
- if (m_insidePre)
- {
- m_t << w->chars();
- }
- else
- {
- m_t << " ";
- }
-}
-
-void XmlDocVisitor::visit(DocSymbol *s)
-{
- if (m_hide) return;
- switch(s->symbol())
- {
- case DocSymbol::BSlash: m_t << "\\"; break;
- case DocSymbol::At: m_t << "@"; break;
- case DocSymbol::Less: m_t << "&lt;"; break;
- case DocSymbol::Greater: m_t << "&gt;"; break;
- case DocSymbol::Amp: m_t << "&amp;"; break;
- case DocSymbol::Dollar: m_t << "$"; break;
- case DocSymbol::Hash: m_t << "#"; break;
- case DocSymbol::DoubleColon: m_t << "::"; break;
- case DocSymbol::Percent: m_t << "%"; break;
- case DocSymbol::Copy: m_t << "<copy/>"; break;
- case DocSymbol::Tm: m_t << "<trademark/>"; break;
- case DocSymbol::Reg: m_t << "<registered/>"; break;
- case DocSymbol::Apos: m_t << "'"; break;
- case DocSymbol::Quot: m_t << "\""; break;
- case DocSymbol::Lsquo: m_t << "<lsquo/>"; break;
- case DocSymbol::Rsquo: m_t << "<rsquo/>"; break;
- case DocSymbol::Ldquo: m_t << "<ldquo/>"; break;
- case DocSymbol::Rdquo: m_t << "<rdquo/>"; break;
- case DocSymbol::Ndash: m_t << "<ndash/>"; break;
- case DocSymbol::Mdash: m_t << "<mdash/>"; break;
- case DocSymbol::Uml: m_t << "<umlaut char=\"" << s->letter() << "\"/>"; break;
- case DocSymbol::Acute: m_t << "<acute char=\"" << s->letter() << "\"/>"; break;
- case DocSymbol::Grave: m_t << "<grave char=\"" << s->letter() << "\"/>"; break;
- case DocSymbol::Circ: m_t << "<circ char=\"" << s->letter() << "\"/>"; break;
- case DocSymbol::Tilde: m_t << "<tilde char=\"" << s->letter() << "\"/>"; break;
- case DocSymbol::Szlig: m_t << "<szlig/>"; break;
- case DocSymbol::Cedil: m_t << "<cedil char=\"" << s->letter() << "\"/>"; break;
- case DocSymbol::Ring: m_t << "<ring char=\"" << s->letter() << "\"/>"; break;
- case DocSymbol::Slash: m_t << "<slash char=\"" << s->letter() << "\"/>"; break;
- case DocSymbol::Nbsp: m_t << "<nonbreakablespace/>"; break;
- case DocSymbol::Aelig: m_t << "<aelig/>"; break;
- case DocSymbol::AElig: m_t << "<AElig/>"; break;
- default:
- err("error: unknown symbol found\n");
- }
-}
-
-void XmlDocVisitor::visit(DocURL *u)
-{
- if (m_hide) return;
- m_t << "<ulink url=\"";
- if (u->isEmail()) m_t << "mailto:";
- filter(u->url());
- m_t << "\">";
- filter(u->url());
- m_t << "</ulink>";
-}
-
-void XmlDocVisitor::visit(DocLineBreak *)
-{
- if (m_hide) return;
- m_t << "<linebreak/>\n";
-}
-
-void XmlDocVisitor::visit(DocHorRuler *)
-{
- if (m_hide) return;
- m_t << "<hruler/>\n";
-}
-
-void XmlDocVisitor::visit(DocStyleChange *s)
-{
- if (m_hide) return;
- switch (s->style())
- {
- case DocStyleChange::Bold:
- if (s->enable()) m_t << "<bold>"; else m_t << "</bold>";
- break;
- case DocStyleChange::Italic:
- if (s->enable()) m_t << "<emphasis>"; else m_t << "</emphasis>";
- break;
- case DocStyleChange::Code:
- if (s->enable()) m_t << "<computeroutput>"; else m_t << "</computeroutput>";
- break;
- case DocStyleChange::Subscript:
- if (s->enable()) m_t << "<subscript>"; else m_t << "</subscript>";
- break;
- case DocStyleChange::Superscript:
- if (s->enable()) m_t << "<superscript>"; else m_t << "</superscript>";
- break;
- case DocStyleChange::Center:
- if (s->enable()) m_t << "<center>"; else m_t << "</center>";
- break;
- case DocStyleChange::Small:
- if (s->enable()) m_t << "<small>"; else m_t << "</small>";
- break;
- case DocStyleChange::Preformatted:
- if (s->enable())
- {
- m_t << "<preformatted>";
- m_insidePre=TRUE;
- }
- else
- {
- m_t << "</preformatted>";
- m_insidePre=FALSE;
- }
- break;
- case DocStyleChange::Div: /* HTML only */ break;
- case DocStyleChange::Span: /* HTML only */ break;
- }
-}
-
-void XmlDocVisitor::visit(DocVerbatim *s)
-{
- if (m_hide) return;
- switch(s->type())
- {
- case DocVerbatim::Code: // fall though
- m_t << "<programlisting>";
- Doxygen::parserManager->getParser(m_langExt)
- ->parseCode(m_ci,s->context(),s->text(),
- s->isExample(),s->exampleFile());
- m_t << "</programlisting>";
- break;
- case DocVerbatim::Verbatim:
- m_t << "<verbatim>";
- filter(s->text());
- m_t << "</verbatim>";
- break;
- case DocVerbatim::HtmlOnly:
- m_t << "<htmlonly>";
- filter(s->text());
- m_t << "</htmlonly>";
- break;
- case DocVerbatim::ManOnly:
- m_t << "<manonly>";
- filter(s->text());
- m_t << "</manonly>";
- break;
- case DocVerbatim::LatexOnly:
- m_t << "<latexonly>";
- filter(s->text());
- m_t << "</latexonly>";
- break;
- case DocVerbatim::XmlOnly:
- m_t << s->text();
- break;
- case DocVerbatim::Dot:
- m_t << "<dot>";
- filter(s->text());
- m_t << "</dot>";
- break;
- case DocVerbatim::Msc:
- m_t << "<msc>";
- filter(s->text());
- m_t << "</msc>";
- break;
- }
-}
-
-void XmlDocVisitor::visit(DocAnchor *anc)
-{
- if (m_hide) return;
- m_t << "<anchor id=\"" << anc->file() << "_1" << anc->anchor() << "\"/>";
-}
-
-void XmlDocVisitor::visit(DocInclude *inc)
-{
- if (m_hide) return;
- switch(inc->type())
- {
- case DocInclude::IncWithLines:
- {
- m_t << "<programlisting>";
- QFileInfo cfi( inc->file() );
- FileDef fd( cfi.dirPath(), cfi.fileName() );
- Doxygen::parserManager->getParser(inc->extension())
- ->parseCode(m_ci,inc->context(),
- inc->text(),
- inc->isExample(),
- inc->exampleFile(), &fd);
- m_t << "</programlisting>";
- }
- break;
- case DocInclude::Include:
- m_t << "<programlisting>";
- Doxygen::parserManager->getParser(inc->extension())
- ->parseCode(m_ci,inc->context(),
- inc->text(),
- inc->isExample(),
- inc->exampleFile());
- m_t << "</programlisting>";
- break;
- case DocInclude::DontInclude:
- break;
- case DocInclude::HtmlInclude:
- m_t << "<htmlonly>";
- filter(inc->text());
- m_t << "</htmlonly>";
- break;
- case DocInclude::VerbInclude:
- m_t << "<verbatim>";
- filter(inc->text());
- m_t << "</verbatim>";
- break;
- case DocInclude::Snippet:
- m_t << "<programlisting>";
- Doxygen::parserManager->getParser(inc->extension())
- ->parseCode(m_ci,
- inc->context(),
- extractBlock(inc->text(),inc->blockId()),
- inc->isExample(),
- inc->exampleFile()
- );
- m_t << "</programlisting>";
- break;
- }
-}
-
-void XmlDocVisitor::visit(DocIncOperator *op)
-{
- //printf("DocIncOperator: type=%d first=%d, last=%d text=`%s'\n",
- // op->type(),op->isFirst(),op->isLast(),op->text().data());
- if (op->isFirst())
- {
- if (!m_hide)
- {
- m_t << "<programlisting>";
- }
- pushEnabled();
- m_hide = TRUE;
- }
- if (op->type()!=DocIncOperator::Skip)
- {
- popEnabled();
- if (!m_hide)
- {
- Doxygen::parserManager->getParser(m_langExt)
- ->parseCode(m_ci,op->context(),
- op->text(),op->isExample(),
- op->exampleFile());
- }
- pushEnabled();
- m_hide=TRUE;
- }
- if (op->isLast())
- {
- popEnabled();
- if (!m_hide) m_t << "</programlisting>";
- }
- else
- {
- if (!m_hide) m_t << endl;
- }
-}
-
-void XmlDocVisitor::visit(DocFormula *f)
-{
- if (m_hide) return;
- m_t << "<formula id=\"" << f->id() << "\">";
- filter(f->text());
- m_t << "</formula>";
-}
-
-void XmlDocVisitor::visit(DocIndexEntry *ie)
-{
- if (m_hide) return;
- m_t << "<indexentry>"
- "<primaryie>";
- filter(ie->entry());
- m_t << "</primaryie>"
- "<secondaryie></secondaryie>"
- "</indexentry>";
-}
-
-void XmlDocVisitor::visit(DocSimpleSectSep *)
-{
- m_t << "<simplesectsep/>";
-}
-
-void XmlDocVisitor::visit(DocCite *cite)
-{
- if (m_hide) return;
- if (!cite->file().isEmpty()) startLink(cite->ref(),cite->file(),cite->anchor());
- filter(cite->text());
- if (!cite->file().isEmpty()) endLink();
-}
-
-//--------------------------------------
-// visitor functions for compound nodes
-//--------------------------------------
-
-void XmlDocVisitor::visitPre(DocAutoList *l)
-{
- if (m_hide) return;
- if (l->isEnumList())
- {
- m_t << "<orderedlist>\n";
- }
- else
- {
- m_t << "<itemizedlist>\n";
- }
-}
-
-void XmlDocVisitor::visitPost(DocAutoList *l)
-{
- if (m_hide) return;
- if (l->isEnumList())
- {
- m_t << "</orderedlist>\n";
- }
- else
- {
- m_t << "</itemizedlist>\n";
- }
-}
-
-void XmlDocVisitor::visitPre(DocAutoListItem *)
-{
- if (m_hide) return;
- m_t << "<listitem>";
-}
-
-void XmlDocVisitor::visitPost(DocAutoListItem *)
-{
- if (m_hide) return;
- m_t << "</listitem>";
-}
-
-void XmlDocVisitor::visitPre(DocPara *)
-{
- if (m_hide) return;
- m_t << "<para>";
-}
-
-void XmlDocVisitor::visitPost(DocPara *)
-{
- if (m_hide) return;
- m_t << "</para>";
-}
-
-void XmlDocVisitor::visitPre(DocRoot *)
-{
- //m_t << "<hr><h4><font color=\"red\">New parser:</font></h4>\n";
-}
-
-void XmlDocVisitor::visitPost(DocRoot *)
-{
- //m_t << "<hr><h4><font color=\"red\">Old parser:</font></h4>\n";
-}
-
-void XmlDocVisitor::visitPre(DocSimpleSect *s)
-{
- if (m_hide) return;
- m_t << "<simplesect kind=\"";
- switch(s->type())
- {
- case DocSimpleSect::See:
- m_t << "see"; break;
- case DocSimpleSect::Return:
- m_t << "return"; break;
- case DocSimpleSect::Author:
- m_t << "author"; break;
- case DocSimpleSect::Authors:
- m_t << "authors"; break;
- case DocSimpleSect::Version:
- m_t << "version"; break;
- case DocSimpleSect::Since:
- m_t << "since"; break;
- case DocSimpleSect::Date:
- m_t << "date"; break;
- case DocSimpleSect::Note:
- m_t << "note"; break;
- case DocSimpleSect::Warning:
- m_t << "warning"; break;
- case DocSimpleSect::Pre:
- m_t << "pre"; break;
- case DocSimpleSect::Post:
- m_t << "post"; break;
- case DocSimpleSect::Copyright:
- m_t << "copyright"; break;
- case DocSimpleSect::Invar:
- m_t << "invariant"; break;
- case DocSimpleSect::Remark:
- m_t << "remark"; break;
- case DocSimpleSect::Attention:
- m_t << "attention"; break;
- case DocSimpleSect::User:
- m_t << "par"; break;
- case DocSimpleSect::Rcs:
- m_t << "rcs"; break;
- case DocSimpleSect::Unknown: break;
- }
- m_t << "\">";
-}
-
-void XmlDocVisitor::visitPost(DocSimpleSect *)
-{
- if (m_hide) return;
- m_t << "</simplesect>\n";
-}
-
-void XmlDocVisitor::visitPre(DocTitle *)
-{
- if (m_hide) return;
- m_t << "<title>";
-}
-
-void XmlDocVisitor::visitPost(DocTitle *)
-{
- if (m_hide) return;
- m_t << "</title>";
-}
-
-void XmlDocVisitor::visitPre(DocSimpleList *)
-{
- if (m_hide) return;
- m_t << "<itemizedlist>\n";
-}
-
-void XmlDocVisitor::visitPost(DocSimpleList *)
-{
- if (m_hide) return;
- m_t << "</itemizedlist>\n";
-}
-
-void XmlDocVisitor::visitPre(DocSimpleListItem *)
-{
- if (m_hide) return;
- m_t << "<listitem>";
-}
-
-void XmlDocVisitor::visitPost(DocSimpleListItem *)
-{
- if (m_hide) return;
- m_t << "</listitem>\n";
-}
-
-void XmlDocVisitor::visitPre(DocSection *s)
-{
- if (m_hide) return;
- m_t << "<sect" << s->level() << " id=\"" << s->file();
- if (!s->anchor().isEmpty()) m_t << "_1" << s->anchor();
- m_t << "\">" << endl;
- m_t << "<title>";
- filter(s->title());
- m_t << "</title>" << endl;
-}
-
-void XmlDocVisitor::visitPost(DocSection *s)
-{
- m_t << "</sect" << s->level() << ">\n";
-}
-
-void XmlDocVisitor::visitPre(DocHtmlList *s)
-{
- if (m_hide) return;
- if (s->type()==DocHtmlList::Ordered)
- m_t << "<orderedlist>\n";
- else
- m_t << "<itemizedlist>\n";
-}
-
-void XmlDocVisitor::visitPost(DocHtmlList *s)
-{
- if (m_hide) return;
- if (s->type()==DocHtmlList::Ordered)
- m_t << "</orderedlist>\n";
- else
- m_t << "</itemizedlist>\n";
-}
-
-void XmlDocVisitor::visitPre(DocHtmlListItem *)
-{
- if (m_hide) return;
- m_t << "<listitem>\n";
-}
-
-void XmlDocVisitor::visitPost(DocHtmlListItem *)
-{
- if (m_hide) return;
- m_t << "</listitem>\n";
-}
-
-void XmlDocVisitor::visitPre(DocHtmlDescList *)
-{
- if (m_hide) return;
- m_t << "<variablelist>\n";
-}
-
-void XmlDocVisitor::visitPost(DocHtmlDescList *)
-{
- if (m_hide) return;
- m_t << "</variablelist>\n";
-}
-
-void XmlDocVisitor::visitPre(DocHtmlDescTitle *)
-{
- if (m_hide) return;
- m_t << "<varlistentry><term>";
-}
-
-void XmlDocVisitor::visitPost(DocHtmlDescTitle *)
-{
- if (m_hide) return;
- m_t << "</term></varlistentry>\n";
-}
-
-void XmlDocVisitor::visitPre(DocHtmlDescData *)
-{
- if (m_hide) return;
- m_t << "<listitem>";
-}
-
-void XmlDocVisitor::visitPost(DocHtmlDescData *)
-{
- if (m_hide) return;
- m_t << "</listitem>\n";
-}
-
-void XmlDocVisitor::visitPre(DocHtmlTable *t)
-{
- if (m_hide) return;
- m_t << "<table rows=\"" << t->numRows()
- << "\" cols=\"" << t->numColumns() << "\">" ;
-}
-
-void XmlDocVisitor::visitPost(DocHtmlTable *)
-{
- if (m_hide) return;
- m_t << "</table>\n";
-}
-
-void XmlDocVisitor::visitPre(DocHtmlRow *)
-{
- if (m_hide) return;
- m_t << "<row>\n";
-}
-
-void XmlDocVisitor::visitPost(DocHtmlRow *)
-{
- if (m_hide) return;
- m_t << "</row>\n";
-}
-
-void XmlDocVisitor::visitPre(DocHtmlCell *c)
-{
- if (m_hide) return;
- if (c->isHeading()) m_t << "<entry thead=\"yes\">"; else m_t << "<entry thead=\"no\">";
-}
-
-void XmlDocVisitor::visitPost(DocHtmlCell *)
-{
- if (m_hide) return;
- m_t << "</entry>";
-}
-
-void XmlDocVisitor::visitPre(DocHtmlCaption *)
-{
- if (m_hide) return;
- m_t << "<caption>";
-}
-
-void XmlDocVisitor::visitPost(DocHtmlCaption *)
-{
- if (m_hide) return;
- m_t << "</caption>\n";
-}
-
-void XmlDocVisitor::visitPre(DocInternal *)
-{
- if (m_hide) return;
- m_t << "<internal>";
-}
-
-void XmlDocVisitor::visitPost(DocInternal *)
-{
- if (m_hide) return;
- m_t << "</internal>" << endl;
-}
-
-void XmlDocVisitor::visitPre(DocHRef *href)
-{
- if (m_hide) return;
- m_t << "<ulink url=\"" << href->url() << "\">";
-}
-
-void XmlDocVisitor::visitPost(DocHRef *)
-{
- if (m_hide) return;
- m_t << "</ulink>";
-}
-
-void XmlDocVisitor::visitPre(DocHtmlHeader *header)
-{
- if (m_hide) return;
- m_t << "<heading level=\"" << header->level() << "\">";
-}
-
-void XmlDocVisitor::visitPost(DocHtmlHeader *)
-{
- if (m_hide) return;
- m_t << "</heading>\n";
-}
-
-void XmlDocVisitor::visitPre(DocImage *img)
-{
- if (m_hide) return;
- m_t << "<image type=\"";
- switch(img->type())
- {
- case DocImage::Html: m_t << "html"; break;
- case DocImage::Latex: m_t << "latex"; break;
- case DocImage::Rtf: m_t << "rtf"; break;
- }
- m_t << "\"";
-
- QCString baseName=img->name();
- int i;
- if ((i=baseName.findRev('/'))!=-1 || (i=baseName.findRev('\\'))!=-1)
- {
- baseName=baseName.right(baseName.length()-i-1);
- }
- m_t << " name=\"" << baseName << "\"";
- if (!img->width().isEmpty())
- {
- m_t << " width=\"";
- filter(img->width());
- m_t << "\"";
- }
- else if (!img->height().isEmpty())
- {
- m_t << " height=\"";
- filter(img->height());
- m_t << "\"";
- }
- m_t << ">";
-
- // copy the image to the output dir
- QFile inImage(img->name());
- QFile outImage(Config_getString("XML_OUTPUT")+"/"+baseName.data());
- if (inImage.open(IO_ReadOnly))
- {
- if (outImage.open(IO_WriteOnly))
- {
- char *buffer = new char[inImage.size()];
- inImage.readBlock(buffer,inImage.size());
- outImage.writeBlock(buffer,inImage.size());
- outImage.flush();
- delete[] buffer;
- }
- }
-}
-
-void XmlDocVisitor::visitPost(DocImage *)
-{
- if (m_hide) return;
- m_t << "</image>" << endl;
-}
-
-void XmlDocVisitor::visitPre(DocDotFile *df)
-{
- if (m_hide) return;
- m_t << "<dotfile name=\"" << df->file() << "\">";
-}
-
-void XmlDocVisitor::visitPost(DocDotFile *)
-{
- if (m_hide) return;
- m_t << "</dotfile>" << endl;
-}
-
-void XmlDocVisitor::visitPre(DocMscFile *df)
-{
- if (m_hide) return;
- m_t << "<mscfile name=\"" << df->file() << "\">";
-}
-
-void XmlDocVisitor::visitPost(DocMscFile *)
-{
- if (m_hide) return;
- m_t << "</mscfile>" << endl;
-}
-void XmlDocVisitor::visitPre(DocLink *lnk)
-{
- if (m_hide) return;
- startLink(lnk->ref(),lnk->file(),lnk->anchor());
-}
-
-void XmlDocVisitor::visitPost(DocLink *)
-{
- if (m_hide) return;
- endLink();
-}
-
-void XmlDocVisitor::visitPre(DocRef *ref)
-{
- if (m_hide) return;
- if (!ref->file().isEmpty()) startLink(ref->ref(),ref->file(),ref->anchor());
- if (!ref->hasLinkText()) filter(ref->targetTitle());
-}
-
-void XmlDocVisitor::visitPost(DocRef *ref)
-{
- if (m_hide) return;
- if (!ref->file().isEmpty()) endLink();
- //m_t << " ";
-}
-
-void XmlDocVisitor::visitPre(DocSecRefItem *ref)
-{
- if (m_hide) return;
- m_t << "<tocitem id=\"" << ref->file() << "_1" << ref->anchor() << "\">";
-}
-
-void XmlDocVisitor::visitPost(DocSecRefItem *)
-{
- if (m_hide) return;
- m_t << "</tocitem>" << endl;
-}
-
-void XmlDocVisitor::visitPre(DocSecRefList *)
-{
- if (m_hide) return;
- m_t << "<toclist>" << endl;
-}
-
-void XmlDocVisitor::visitPost(DocSecRefList *)
-{
- if (m_hide) return;
- m_t << "</toclist>" << endl;
-}
-
-//void XmlDocVisitor::visitPre(DocLanguage *l)
-//{
-// if (m_hide) return;
-// m_t << "<language langid=\"" << l->id() << "\">";
-//}
-//
-//void XmlDocVisitor::visitPost(DocLanguage *)
-//{
-// if (m_hide) return;
-// m_t << "</language>" << endl;
-//}
-
-void XmlDocVisitor::visitPre(DocParamSect *s)
-{
- if (m_hide) return;
- m_t << "<parameterlist kind=\"";
- switch(s->type())
- {
- case DocParamSect::Param:
- m_t << "param"; break;
- case DocParamSect::RetVal:
- m_t << "retval"; break;
- case DocParamSect::Exception:
- m_t << "exception"; break;
- case DocParamSect::TemplateParam:
- m_t << "templateparam"; break;
- default:
- ASSERT(0);
- }
- m_t << "\">";
-}
-
-void XmlDocVisitor::visitPost(DocParamSect *)
-{
- if (m_hide) return;
- m_t << "</parameterlist>" << endl;
-}
-
-void XmlDocVisitor::visitPre(DocParamList *pl)
-{
- if (m_hide) return;
- m_t << "<parameteritem>" << endl;
- m_t << "<parameternamelist>" << endl;
- //QStrListIterator li(pl->parameters());
- //const char *s;
- QListIterator<DocNode> li(pl->parameters());
- DocNode *param;
- for (li.toFirst();(param=li.current());++li)
- {
- if (pl->paramTypes().count()>0)
- {
- QListIterator<DocNode> li(pl->paramTypes());
- DocNode *type;
- for (li.toFirst();(type=li.current());++li)
- {
- m_t << "<parametertype>";
- if (type->kind()==DocNode::Kind_Word)
- {
- visit((DocWord*)type);
- }
- else if (type->kind()==DocNode::Kind_LinkedWord)
- {
- visit((DocLinkedWord*)type);
- }
- m_t << "</parametertype>" << endl;
- }
- }
- m_t << "<parametername";
- if (pl->direction()!=DocParamSect::Unspecified)
- {
- m_t << " direction=\"";
- if (pl->direction()==DocParamSect::In)
- {
- m_t << "in";
- }
- else if (pl->direction()==DocParamSect::Out)
- {
- m_t << "out";
- }
- else if (pl->direction()==DocParamSect::InOut)
- {
- m_t << "inout";
- }
- m_t << "\"";
- }
- m_t << ">";
- if (param->kind()==DocNode::Kind_Word)
- {
- visit((DocWord*)param);
- }
- else if (param->kind()==DocNode::Kind_LinkedWord)
- {
- visit((DocLinkedWord*)param);
- }
- m_t << "</parametername>" << endl;
- }
- m_t << "</parameternamelist>" << endl;
- m_t << "<parameterdescription>" << endl;
-}
-
-void XmlDocVisitor::visitPost(DocParamList *)
-{
- if (m_hide) return;
- m_t << "</parameterdescription>" << endl;
- m_t << "</parameteritem>" << endl;
-}
-
-void XmlDocVisitor::visitPre(DocXRefItem *x)
-{
- if (m_hide) return;
- m_t << "<xrefsect id=\"";
- m_t << x->file() << "_1" << x->anchor();
- m_t << "\">";
- m_t << "<xreftitle>";
- filter(x->title());
- m_t << "</xreftitle>";
- m_t << "<xrefdescription>";
-}
-
-void XmlDocVisitor::visitPost(DocXRefItem *)
-{
- if (m_hide) return;
- m_t << "</xrefdescription>";
- m_t << "</xrefsect>";
-}
-
-void XmlDocVisitor::visitPre(DocInternalRef *ref)
-{
- if (m_hide) return;
- startLink(0,ref->file(),ref->anchor());
-}
-
-void XmlDocVisitor::visitPost(DocInternalRef *)
-{
- if (m_hide) return;
- endLink();
- m_t << " ";
-}
-
-void XmlDocVisitor::visitPre(DocCopy *c)
-{
- if (m_hide) return;
- m_t << "<copydoc link=\"" << convertToXML(c->link()) << "\">";
-}
-
-void XmlDocVisitor::visitPost(DocCopy *)
-{
- if (m_hide) return;
- m_t << "</copydoc>" << endl;
-}
-
-void XmlDocVisitor::visitPre(DocText *)
-{
-}
-
-void XmlDocVisitor::visitPost(DocText *)
-{
-}
-
-void XmlDocVisitor::visitPre(DocHtmlBlockQuote *)
-{
- if (m_hide) return;
- m_t << "<blockquote>";
-}
-
-void XmlDocVisitor::visitPost(DocHtmlBlockQuote *)
-{
- if (m_hide) return;
- m_t << "</blockquote>";
-}
-
-
-void XmlDocVisitor::filter(const char *str)
-{
- m_t << convertToXML(str);
-}
-
-void XmlDocVisitor::startLink(const QCString &ref,const QCString &file,const QCString &anchor)
-{
- m_t << "<ref refid=\"" << file;
- if (!anchor.isEmpty()) m_t << "_1" << anchor;
- m_t << "\" kindref=\"";
- if (!anchor.isEmpty()) m_t << "member"; else m_t << "compound";
- m_t << "\"";
- if (!ref.isEmpty()) m_t << " external=\"" << ref << "\"";
- m_t << ">";
-}
-
-void XmlDocVisitor::endLink()
-{
- m_t << "</ref>";
-}
-
-void XmlDocVisitor::pushEnabled()
-{
- m_enabled.push(new bool(m_hide));
-}
-
-void XmlDocVisitor::popEnabled()
-{
- bool *v=m_enabled.pop();
- ASSERT(v!=0);
- m_hide = *v;
- delete v;
-}
-
diff --git a/trunk/src/xmldocvisitor.h b/trunk/src/xmldocvisitor.h
deleted file mode 100644
index dbe4bd5..0000000
--- a/trunk/src/xmldocvisitor.h
+++ /dev/null
@@ -1,163 +0,0 @@
-/******************************************************************************
- *
- *
- *
- *
- * Copyright (C) 1997-2012 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.
- *
- */
-
-#ifndef _XMLDOCVISITOR_H
-#define _XMLDOCVISITOR_H
-
-#include "docvisitor.h"
-#include <qstack.h>
-#include <qcstring.h>
-
-class FTextStream;
-class CodeOutputInterface;
-class QCString;
-
-/*! @brief Concrete visitor implementation for XML output. */
-class XmlDocVisitor : public DocVisitor
-{
- public:
- XmlDocVisitor(FTextStream &t,CodeOutputInterface &ci);
-
- //--------------------------------------
- // visitor functions for leaf nodes
- //--------------------------------------
-
- void visit(DocWord *);
- void visit(DocLinkedWord *);
- void visit(DocWhiteSpace *);
- void visit(DocSymbol *);
- void visit(DocURL *);
- void visit(DocLineBreak *);
- void visit(DocHorRuler *);
- void visit(DocStyleChange *);
- void visit(DocVerbatim *);
- void visit(DocAnchor *);
- void visit(DocInclude *);
- void visit(DocIncOperator *);
- void visit(DocFormula *);
- void visit(DocIndexEntry *);
- void visit(DocSimpleSectSep *);
- void visit(DocCite *);
-
- //--------------------------------------
- // visitor functions for compound nodes
- //--------------------------------------
-
- void visitPre(DocAutoList *);
- void visitPost(DocAutoList *);
- void visitPre(DocAutoListItem *);
- void visitPost(DocAutoListItem *);
- void visitPre(DocPara *) ;
- void visitPost(DocPara *);
- void visitPre(DocRoot *);
- void visitPost(DocRoot *);
- void visitPre(DocSimpleSect *);
- void visitPost(DocSimpleSect *);
- void visitPre(DocTitle *);
- void visitPost(DocTitle *);
- void visitPre(DocSimpleList *);
- void visitPost(DocSimpleList *);
- void visitPre(DocSimpleListItem *);
- void visitPost(DocSimpleListItem *);
- void visitPre(DocSection *);
- void visitPost(DocSection *);
- void visitPre(DocHtmlList *);
- void visitPost(DocHtmlList *) ;
- void visitPre(DocHtmlListItem *);
- void visitPost(DocHtmlListItem *);
- //void visitPre(DocHtmlPre *);
- //void visitPost(DocHtmlPre *);
- void visitPre(DocHtmlDescList *);
- void visitPost(DocHtmlDescList *);
- void visitPre(DocHtmlDescTitle *);
- void visitPost(DocHtmlDescTitle *);
- void visitPre(DocHtmlDescData *);
- void visitPost(DocHtmlDescData *);
- void visitPre(DocHtmlTable *);
- void visitPost(DocHtmlTable *);
- void visitPre(DocHtmlRow *);
- void visitPost(DocHtmlRow *) ;
- void visitPre(DocHtmlCell *);
- void visitPost(DocHtmlCell *);
- void visitPre(DocHtmlCaption *);
- void visitPost(DocHtmlCaption *);
- void visitPre(DocInternal *);
- void visitPost(DocInternal *);
- void visitPre(DocHRef *);
- void visitPost(DocHRef *);
- void visitPre(DocHtmlHeader *);
- void visitPost(DocHtmlHeader *);
- void visitPre(DocImage *);
- void visitPost(DocImage *);
- void visitPre(DocDotFile *);
- void visitPost(DocDotFile *);
-
- void visitPre(DocMscFile *);
- void visitPost(DocMscFile *);
- void visitPre(DocLink *);
- void visitPost(DocLink *);
- void visitPre(DocRef *);
- void visitPost(DocRef *);
- void visitPre(DocSecRefItem *);
- void visitPost(DocSecRefItem *);
- void visitPre(DocSecRefList *);
- void visitPost(DocSecRefList *);
- //void visitPre(DocLanguage *);
- //void visitPost(DocLanguage *);
- void visitPre(DocParamSect *);
- void visitPost(DocParamSect *);
- void visitPre(DocParamList *);
- void visitPost(DocParamList *);
- void visitPre(DocXRefItem *);
- void visitPost(DocXRefItem *);
- void visitPre(DocInternalRef *);
- void visitPost(DocInternalRef *);
- void visitPre(DocCopy *);
- void visitPost(DocCopy *);
- void visitPre(DocText *);
- void visitPost(DocText *);
- void visitPre(DocHtmlBlockQuote *);
- void visitPost(DocHtmlBlockQuote *);
-
- private:
-
- //--------------------------------------
- // helper functions
- //--------------------------------------
-
- void filter(const char *str);
- void startLink(const QCString &ref,const QCString &file,
- const QCString &anchor);
- void endLink();
-
- void pushEnabled();
- void popEnabled();
-
- //--------------------------------------
- // state variables
- //--------------------------------------
-
- FTextStream &m_t;
- CodeOutputInterface &m_ci;
- bool m_insidePre;
- bool m_hide;
- QStack<bool> m_enabled;
- QCString m_langExt;
-};
-
-#endif
diff --git a/trunk/src/xmlgen.cpp b/trunk/src/xmlgen.cpp
deleted file mode 100644
index 5f1532f..0000000
--- a/trunk/src/xmlgen.cpp
+++ /dev/null
@@ -1,2015 +0,0 @@
-/******************************************************************************
- *
- * Copyright (C) 1997-2012 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.
- *
- */
-
-#include <stdlib.h>
-
-#include "qtbc.h"
-#include "xmlgen.h"
-#include "doxygen.h"
-#include "message.h"
-#include "config.h"
-#include "classlist.h"
-#include "util.h"
-#include "defargs.h"
-#include "outputgen.h"
-#include "dot.h"
-#include "pagedef.h"
-#include "filename.h"
-#include "version.h"
-#include "xmldocvisitor.h"
-#include "docparser.h"
-#include "language.h"
-#include "parserintf.h"
-#include "arguments.h"
-
-#include <qdir.h>
-#include <qfile.h>
-#include <qtextstream.h>
-#include <qintdict.h>
-
-// no debug info
-#define XML_DB(x) do {} while(0)
-// debug to stdout
-//#define XML_DB(x) printf x
-// debug inside output
-//#define XML_DB(x) QCString __t;__t.sprintf x;m_t << __t
-
-//------------------
-
-static const char index_xsd[] =
-#include "index_xsd.h"
-;
-
-//------------------
-//
-static const char compound_xsd[] =
-#include "compound_xsd.h"
-;
-
-//------------------
-
-class XmlSectionMapper : public QIntDict<char>
-{
- public:
- XmlSectionMapper() : QIntDict<char>(47)
- {
- insert(MemberList::pubTypes,"public-type");
- insert(MemberList::pubMethods,"public-func");
- insert(MemberList::pubAttribs,"public-attrib");
- insert(MemberList::pubSlots,"public-slot");
- insert(MemberList::signals,"signal");
- insert(MemberList::dcopMethods,"dcop-func");
- insert(MemberList::properties,"property");
- insert(MemberList::events,"event");
- insert(MemberList::pubStaticMethods,"public-static-func");
- insert(MemberList::pubStaticAttribs,"public-static-attrib");
- insert(MemberList::proTypes,"protected-type");
- insert(MemberList::proMethods,"protected-func");
- insert(MemberList::proAttribs,"protected-attrib");
- insert(MemberList::proSlots,"protected-slot");
- insert(MemberList::proStaticMethods,"protected-static-func");
- insert(MemberList::proStaticAttribs,"protected-static-attrib");
- insert(MemberList::pacTypes,"package-type");
- insert(MemberList::pacMethods,"package-func");
- insert(MemberList::pacAttribs,"package-attrib");
- insert(MemberList::pacStaticMethods,"package-static-func");
- insert(MemberList::pacStaticAttribs,"package-static-attrib");
- insert(MemberList::priTypes,"private-type");
- insert(MemberList::priMethods,"private-func");
- insert(MemberList::priAttribs,"private-attrib");
- insert(MemberList::priSlots,"private-slot");
- insert(MemberList::priStaticMethods,"private-static-func");
- insert(MemberList::priStaticAttribs,"private-static-attrib");
- insert(MemberList::friends,"friend");
- insert(MemberList::related,"related");
- insert(MemberList::decDefineMembers,"define");
- insert(MemberList::decProtoMembers,"prototype");
- insert(MemberList::decTypedefMembers,"typedef");
- insert(MemberList::decEnumMembers,"enum");
- insert(MemberList::decFuncMembers,"func");
- insert(MemberList::decVarMembers,"var");
- }
-};
-
-static XmlSectionMapper g_xmlSectionMapper;
-
-
-inline void writeXMLString(FTextStream &t,const char *s)
-{
- t << convertToXML(s);
-}
-
-inline void writeXMLCodeString(FTextStream &t,const char *s, int &col)
-{
- char c;
- while ((c=*s++))
- {
- switch(c)
- {
- case '\t':
- {
- static int tabSize = Config_getInt("TAB_SIZE");
- int spacesToNextTabStop = tabSize - (col%tabSize);
- col+=spacesToNextTabStop;
- while (spacesToNextTabStop--) t << "<sp/>";
- break;
- }
- case ' ': t << "<sp/>"; col++; break;
- case '<': t << "&lt;"; col++; break;
- case '>': t << "&gt;"; col++; break;
- case '&': t << "&amp;"; col++; break;
- case '\'': t << "&apos;"; col++; break;
- case '"': t << "&quot;"; col++; break;
- default: t << c; col++; break;
- }
- }
-}
-
-
-static void writeXMLHeader(FTextStream &t)
-{
- t << "<?xml version='1.0' encoding='UTF-8' standalone='no'?>" << endl;;
- t << "<doxygen xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" ";
- t << "xsi:noNamespaceSchemaLocation=\"compound.xsd\" ";
- t << "version=\"" << versionString << "\">" << endl;
-}
-
-static void writeCombineScript()
-{
- QCString outputDirectory = Config_getString("XML_OUTPUT");
- QCString fileName=outputDirectory+"/combine.xslt";
- QFile f(fileName);
- if (!f.open(IO_WriteOnly))
- {
- err("Cannot open file %s for writing!\n",fileName.data());
- return;
- }
- FTextStream t(&f);
- //t.setEncoding(FTextStream::UnicodeUTF8);
-
- t <<
- "<!-- XSLT script to combine the generated output into a single file. \n"
- " If you have xsltproc you could use:\n"
- " xsltproc combine.xslt index.xml >all.xml\n"
- "-->\n"
- "<xsl:stylesheet xmlns:xsl=\"http://www.w3.org/1999/XSL/Transform\" version=\"1.0\">\n"
- " <xsl:output method=\"xml\" version=\"1.0\" indent=\"no\" standalone=\"yes\" />\n"
- " <xsl:template match=\"/\">\n"
- " <doxygen version=\"{doxygenindex/@version}\">\n"
- " <!-- Load all doxgen generated xml files -->\n"
- " <xsl:for-each select=\"doxygenindex/compound\">\n"
- " <xsl:copy-of select=\"document( concat( @refid, '.xml' ) )/doxygen/*\" />\n"
- " </xsl:for-each>\n"
- " </doxygen>\n"
- " </xsl:template>\n"
- "</xsl:stylesheet>\n";
-
-}
-
-void writeXMLLink(FTextStream &t,const char *extRef,const char *compoundId,
- const char *anchorId,const char *text,const char *tooltip)
-{
- t << "<ref refid=\"" << compoundId;
- if (anchorId) t << "_1" << anchorId;
- t << "\" kindref=\"";
- if (anchorId) t << "member"; else t << "compound";
- t << "\"";
- if (extRef) t << " external=\"" << extRef << "\"";
- if (tooltip) t << " tooltip=\"" << convertToXML(tooltip) << "\"";
- t << ">";
- writeXMLString(t,text);
- t << "</ref>";
-}
-
-class TextGeneratorXMLImpl : public TextGeneratorIntf
-{
- public:
- TextGeneratorXMLImpl(FTextStream &t): m_t(t) {}
- void writeString(const char *s,bool /*keepSpaces*/) const
- {
- writeXMLString(m_t,s);
- }
- void writeBreak(int) const {}
- void writeLink(const char *extRef,const char *file,
- const char *anchor,const char *text
- ) const
- {
- writeXMLLink(m_t,extRef,file,anchor,text,0);
- }
- private:
- FTextStream &m_t;
-};
-
-template<class T> class ValStack
-{
- public:
- ValStack() : m_values(10), m_sp(0), m_size(10) {}
- virtual ~ValStack() {}
- ValStack(const ValStack<T> &s)
- {
- m_values=s.m_values.copy();
- m_sp=s.m_sp;
- m_size=s.m_size;
- }
- ValStack &operator=(const ValStack<T> &s)
- {
- m_values=s.m_values.copy();
- m_sp=s.m_sp;
- m_size=s.m_size;
- return *this;
- }
- void push(T v)
- {
- m_sp++;
- if (m_sp>=m_size)
- {
- m_size+=10;
- m_values.resize(m_size);
- }
- m_values[m_sp]=v;
- }
- T pop()
- {
- ASSERT(m_sp!=0);
- return m_values[m_sp--];
- }
- T& top()
- {
- ASSERT(m_sp!=0);
- return m_values[m_sp];
- }
- bool isEmpty()
- {
- return m_sp==0;
- }
- uint count() const
- {
- return m_sp;
- }
-
- private:
- QArray<T> m_values;
- int m_sp;
- int m_size;
-};
-
-
-class XMLCodeGenerator : public CodeOutputInterface
-{
- public:
-
- XMLCodeGenerator(FTextStream &t) : m_t(t), m_lineNumber(-1),
- m_insideCodeLine(FALSE), m_normalHLNeedStartTag(TRUE),
- m_insideSpecialHL(FALSE) {}
- virtual ~XMLCodeGenerator() { }
-
- void codify(const char *text)
- {
- XML_DB(("(codify \"%s\")\n",text));
- if (m_insideCodeLine && !m_insideSpecialHL && m_normalHLNeedStartTag)
- {
- m_t << "<highlight class=\"normal\">";
- m_normalHLNeedStartTag=FALSE;
- }
- writeXMLCodeString(m_t,text,col);
- }
- void writeCodeLink(const char *ref,const char *file,
- const char *anchor,const char *name,
- const char *tooltip)
- {
- XML_DB(("(writeCodeLink)\n"));
- if (m_insideCodeLine && !m_insideSpecialHL && m_normalHLNeedStartTag)
- {
- m_t << "<highlight class=\"normal\">";
- m_normalHLNeedStartTag=FALSE;
- }
- writeXMLLink(m_t,ref,file,anchor,name,tooltip);
- col+=strlen(name);
- }
- void startCodeLine()
- {
- XML_DB(("(startCodeLine)\n"));
- m_t << "<codeline";
- if (m_lineNumber!=-1)
- {
- m_t << " lineno=\"" << m_lineNumber << "\"";
- if (!m_refId.isEmpty())
- {
- m_t << " refid=\"" << m_refId << "\"";
- if (m_isMemberRef)
- {
- m_t << " refkind=\"member\"";
- }
- else
- {
- m_t << " refkind=\"compound\"";
- }
- }
- if (!m_external.isEmpty())
- {
- m_t << " external=\"" << m_external << "\"";
- }
- }
- m_t << ">";
- m_insideCodeLine=TRUE;
- col=0;
- }
- void endCodeLine()
- {
- XML_DB(("(endCodeLine)\n"));
- if (!m_insideSpecialHL && !m_normalHLNeedStartTag)
- {
- m_t << "</highlight>";
- m_normalHLNeedStartTag=TRUE;
- }
- m_t << "</codeline>" << endl; // non DocBook
- m_lineNumber = -1;
- m_refId.resize(0);
- m_external.resize(0);
- m_insideCodeLine=FALSE;
- }
- void startCodeAnchor(const char *id)
- {
- XML_DB(("(startCodeAnchor)\n"));
- if (m_insideCodeLine && !m_insideSpecialHL && m_normalHLNeedStartTag)
- {
- m_t << "<highlight class=\"normal\">";
- m_normalHLNeedStartTag=FALSE;
- }
- m_t << "<anchor id=\"" << id << "\">";
- }
- void endCodeAnchor()
- {
- XML_DB(("(endCodeAnchor)\n"));
- m_t << "</anchor>";
- }
- void startFontClass(const char *colorClass)
- {
- XML_DB(("(startFontClass)\n"));
- if (m_insideCodeLine && !m_insideSpecialHL && !m_normalHLNeedStartTag)
- {
- m_t << "</highlight>";
- m_normalHLNeedStartTag=TRUE;
- }
- m_t << "<highlight class=\"" << colorClass << "\">"; // non DocBook
- m_insideSpecialHL=TRUE;
- }
- void endFontClass()
- {
- XML_DB(("(endFontClass)\n"));
- m_t << "</highlight>"; // non DocBook
- m_insideSpecialHL=FALSE;
- }
- void writeCodeAnchor(const char *)
- {
- XML_DB(("(writeCodeAnchor)\n"));
- }
- void writeLineNumber(const char *extRef,const char *compId,
- const char *anchorId,int l)
- {
- XML_DB(("(writeLineNumber)\n"));
- // we remember the information provided here to use it
- // at the <codeline> start tag.
- m_lineNumber = l;
- if (compId)
- {
- m_refId=compId;
- if (anchorId) m_refId+=(QCString)"_1"+anchorId;
- m_isMemberRef = anchorId!=0;
- if (extRef) m_external=extRef;
- }
- }
- void linkableSymbol(int, const char *,Definition *,Definition *)
- {
- }
-
- void finish()
- {
- if (m_insideCodeLine) endCodeLine();
- }
-
- private:
- FTextStream &m_t;
- QCString m_refId;
- QCString m_external;
- int m_lineNumber;
- bool m_isMemberRef;
- int col;
-
- bool m_insideCodeLine;
- bool m_normalHLNeedStartTag;
- bool m_insideSpecialHL;
-};
-
-
-static void writeTemplateArgumentList(ArgumentList *al,
- FTextStream &t,
- Definition *scope,
- FileDef *fileScope,
- int indent)
-{
- QCString indentStr;
- indentStr.fill(' ',indent);
- if (al)
- {
- t << indentStr << "<templateparamlist>" << endl;
- ArgumentListIterator ali(*al);
- Argument *a;
- for (ali.toFirst();(a=ali.current());++ali)
- {
- t << indentStr << " <param>" << endl;
- if (!a->type.isEmpty())
- {
- t << indentStr << " <type>";
- linkifyText(TextGeneratorXMLImpl(t),scope,fileScope,0,a->type);
- t << "</type>" << endl;
- }
- if (!a->name.isEmpty())
- {
- t << indentStr << " <declname>" << a->name << "</declname>" << endl;
- t << indentStr << " <defname>" << a->name << "</defname>" << endl;
- }
- if (!a->defval.isEmpty())
- {
- t << indentStr << " <defval>";
- linkifyText(TextGeneratorXMLImpl(t),scope,fileScope,0,a->defval);
- t << "</defval>" << endl;
- }
- t << indentStr << " </param>" << endl;
- }
- t << indentStr << "</templateparamlist>" << endl;
- }
-}
-
-static void writeMemberTemplateLists(MemberDef *md,FTextStream &t)
-{
- LockingPtr<ArgumentList> templMd = md->templateArguments();
- if (templMd!=0) // function template prefix
- {
- writeTemplateArgumentList(templMd.pointer(),t,md->getClassDef(),md->getFileDef(),8);
- }
-}
-
-static void writeTemplateList(ClassDef *cd,FTextStream &t)
-{
- writeTemplateArgumentList(cd->templateArguments(),t,cd,0,4);
-}
-
-static void writeXMLDocBlock(FTextStream &t,
- const QCString &fileName,
- int lineNr,
- Definition *scope,
- MemberDef * md,
- const QCString &text)
-{
- QCString stext = text.stripWhiteSpace();
- if (stext.isEmpty()) return;
- // convert the documentation string into an abstract syntax tree
- DocNode *root = validatingParseDoc(fileName,lineNr,scope,md,text+"\n",FALSE,FALSE);
- // create a code generator
- XMLCodeGenerator *xmlCodeGen = new XMLCodeGenerator(t);
- // create a parse tree visitor for XML
- XmlDocVisitor *visitor = new XmlDocVisitor(t,*xmlCodeGen);
- // visit all nodes
- root->accept(visitor);
- // clean up
- delete visitor;
- delete xmlCodeGen;
- delete root;
-
-}
-
-void writeXMLCodeBlock(FTextStream &t,FileDef *fd)
-{
- ParserInterface *pIntf=Doxygen::parserManager->getParser(fd->getDefFileExtension());
- pIntf->resetCodeParserState();
- XMLCodeGenerator *xmlGen = new XMLCodeGenerator(t);
- pIntf->parseCode(*xmlGen, // codeOutIntf
- 0, // scopeName
- fileToString(fd->absFilePath(),Config_getBool("FILTER_SOURCE_FILES")),
- FALSE, // isExampleBlock
- 0, // exampleName
- fd, // fileDef
- -1, // startLine
- -1, // endLine
- FALSE, // inlineFragement
- 0, // memberDef
- TRUE // showLineNumbers
- );
- xmlGen->finish();
- delete xmlGen;
-}
-
-static void writeMemberReference(FTextStream &t,Definition *def,MemberDef *rmd,const char *tagName)
-{
- QCString scope = rmd->getScopeString();
- QCString name = rmd->name();
- if (!scope.isEmpty() && scope!=def->name())
- {
- name.prepend(scope+getLanguageSpecificSeparator(rmd->getLanguage()));
- }
- t << " <" << tagName << " refid=\"";
- t << rmd->getOutputFileBase() << "_1" << rmd->anchor() << "\"";
- if (rmd->getStartBodyLine()!=-1 && rmd->getBodyDef())
- {
- t << " compoundref=\"" << rmd->getBodyDef()->getOutputFileBase() << "\"";
- t << " startline=\"" << rmd->getStartBodyLine() << "\"";
- if (rmd->getEndBodyLine()!=-1)
- {
- t << " endline=\"" << rmd->getEndBodyLine() << "\"";
- }
- }
- t << ">" << convertToXML(name) << "</" << tagName << ">" << endl;
-
-}
-
-static void stripQualifiers(QCString &typeStr)
-{
- bool done=FALSE;
- while (!done)
- {
- if (typeStr.stripPrefix("static "));
- else if (typeStr.stripPrefix("virtual "));
- else if (typeStr.stripPrefix("volatile "));
- else if (typeStr=="virtual") typeStr="";
- else done=TRUE;
- }
-}
-
-static QCString classOutputFileBase(ClassDef *cd)
-{
- //static bool inlineGroupedClasses = Config_getBool("INLINE_GROUPED_CLASSES");
- //if (inlineGroupedClasses && cd->partOfGroups()!=0)
- return cd->getOutputFileBase();
- //else
- // return cd->getOutputFileBase();
-}
-
-static QCString memberOutputFileBase(MemberDef *md)
-{
- //static bool inlineGroupedClasses = Config_getBool("INLINE_GROUPED_CLASSES");
- //if (inlineGroupedClasses && md->getClassDef() && md->getClassDef()->partOfGroups()!=0)
- // return md->getClassDef()->getXmlOutputFileBase();
- //else
- // return md->getOutputFileBase();
- return md->getOutputFileBase();
-}
-
-
-static void generateXMLForMember(MemberDef *md,FTextStream &ti,FTextStream &t,Definition *def)
-{
-
- // + declaration/definition arg lists
- // + reimplements
- // + reimplementedBy
- // + exceptions
- // + const/volatile specifiers
- // - examples
- // + source definition
- // + source references
- // + source referenced by
- // - body code
- // + template arguments
- // (templateArguments(), definitionTemplateParameterLists())
- // - call graph
-
- // enum values are written as part of the enum
- if (md->memberType()==MemberDef::EnumValue) return;
- if (md->isHidden()) return;
- //if (md->name().at(0)=='@') return; // anonymous member
-
- // group members are only visible in their group
- //if (def->definitionType()!=Definition::TypeGroup && md->getGroupDef()) return;
-
- QCString memType;
- bool isFunc=FALSE;
- switch (md->memberType())
- {
- case MemberDef::Define: memType="define"; break;
- case MemberDef::EnumValue: ASSERT(0); break;
- case MemberDef::Property: memType="property"; break;
- case MemberDef::Event: memType="event"; break;
- case MemberDef::Variable: memType="variable"; break;
- case MemberDef::Typedef: memType="typedef"; break;
- case MemberDef::Enumeration: memType="enum"; break;
- case MemberDef::Function: memType="function"; isFunc=TRUE; break;
- case MemberDef::Signal: memType="signal"; isFunc=TRUE; break;
- case MemberDef::Friend: memType="friend"; isFunc=TRUE; break;
- case MemberDef::DCOP: memType="dcop"; isFunc=TRUE; break;
- case MemberDef::Slot: memType="slot"; isFunc=TRUE; break;
- }
-
- ti << " <member refid=\"" << memberOutputFileBase(md)
- << "_1" << md->anchor() << "\" kind=\"" << memType << "\"><name>"
- << convertToXML(md->name()) << "</name></member>" << endl;
-
- QCString scopeName;
- if (md->getClassDef())
- scopeName=md->getClassDef()->name();
- else if (md->getNamespaceDef())
- scopeName=md->getNamespaceDef()->name();
-
- t << " <memberdef kind=\"";
- //enum { define_t,variable_t,typedef_t,enum_t,function_t } xmlType = function_t;
- t << memType << "\" id=\"";
- if (md->getGroupDef() && def->definitionType()==Definition::TypeGroup)
- {
- t << md->getGroupDef()->getOutputFileBase();
- }
- else
- {
- t << memberOutputFileBase(md);
- }
- t << "_1" // encoded `:' character (see util.cpp:convertNameToFile)
- << md->anchor();
- t << "\" prot=\"";
- switch(md->protection())
- {
- case Public: t << "public"; break;
- case Protected: t << "protected"; break;
- case Private: t << "private"; break;
- case Package: t << "package"; break;
- }
- t << "\"";
-
- t << " static=\"";
- if (md->isStatic()) t << "yes"; else t << "no";
- t << "\"";
-
- if (isFunc)
- {
- LockingPtr<ArgumentList> al = md->argumentList();
- t << " const=\"";
- if (al!=0 && al->constSpecifier) t << "yes"; else t << "no";
- t << "\"";
-
- t << " explicit=\"";
- if (md->isExplicit()) t << "yes"; else t << "no";
- t << "\"";
-
- t << " inline=\"";
- if (md->isInline()) t << "yes"; else t << "no";
- t << "\"";
-
- if (md->isFinal())
- {
- t << " final=\"yes\"";
- }
-
- if (md->isSealed())
- {
- t << " sealed=\"yes\"";
- }
-
- if (md->isNew())
- {
- t << " new=\"yes\"";
- }
-
- if (md->isOptional())
- {
- t << " optional=\"yes\"";
- }
-
- if (md->isRequired())
- {
- t << " required=\"yes\"";
- }
-
- t << " virt=\"";
- switch (md->virtualness())
- {
- case Normal: t << "non-virtual"; break;
- case Virtual: t << "virtual"; break;
- case Pure: t << "pure-virtual"; break;
- default: ASSERT(0);
- }
- t << "\"";
- }
-
- if (md->memberType() == MemberDef::Variable)
- {
- //ArgumentList *al = md->argumentList();
- //t << " volatile=\"";
- //if (al && al->volatileSpecifier) t << "yes"; else t << "no";
-
- t << " mutable=\"";
- if (md->isMutable()) t << "yes"; else t << "no";
- t << "\"";
-
- if (md->isInitonly())
- {
- t << " initonly=\"yes\"";
- }
-
- }
- else if (md->memberType() == MemberDef::Property)
- {
- t << " readable=\"";
- if (md->isReadable()) t << "yes"; else t << "no";
- t << "\"";
-
- t << " writable=\"";
- if (md->isWritable()) t << "yes"; else t << "no";
- t << "\"";
-
- t << " gettable=\"";
- if (md->isGettable()) t << "yes"; else t << "no";
- t << "\"";
-
- t << " settable=\"";
- if (md->isSettable()) t << "yes"; else t << "no";
- t << "\"";
-
- if (md->isAssign() || md->isCopy() || md->isRetain())
- {
- t << " accessor=\"";
- if (md->isAssign()) t << "assign";
- else if (md->isCopy()) t << "copy";
- else if (md->isRetain()) t << "retain";
- t << "\"";
- }
- }
- else if (md->memberType() == MemberDef::Event)
- {
- t << " add=\"";
- if (md->isAddable()) t << "yes"; else t << "no";
- t << "\"";
-
- t << " remove=\"";
- if (md->isRemovable()) t << "yes"; else t << "no";
- t << "\"";
-
- t << " raise=\"";
- if (md->isRaisable()) t << "yes"; else t << "no";
- t << "\"";
- }
-
- t << ">" << endl;
-
- if (md->memberType()!=MemberDef::Define &&
- md->memberType()!=MemberDef::Enumeration
- )
- {
- if (md->memberType()!=MemberDef::Typedef)
- {
- writeMemberTemplateLists(md,t);
- }
- QCString typeStr = md->typeString(); //replaceAnonymousScopes(md->typeString());
- stripQualifiers(typeStr);
- t << " <type>";
- linkifyText(TextGeneratorXMLImpl(t),def,md->getBodyDef(),md->name(),typeStr);
- t << "</type>" << endl;
- t << " <definition>" << convertToXML(md->definition()) << "</definition>" << endl;
- t << " <argsstring>" << convertToXML(md->argsString()) << "</argsstring>" << endl;
- }
-
- t << " <name>" << convertToXML(md->name()) << "</name>" << endl;
-
- if (md->memberType() == MemberDef::Property)
- {
- if (md->isReadable())
- t << " <read>" << convertToXML(md->getReadAccessor()) << "</read>" << endl;
- if (md->isWritable())
- t << " <write>" << convertToXML(md->getWriteAccessor()) << "</write>" << endl;
- }
- if (md->memberType()==MemberDef::Variable && md->bitfieldString())
- {
- QCString bitfield = md->bitfieldString();
- if (bitfield.at(0)==':') bitfield=bitfield.mid(1);
- t << " <bitfield>" << bitfield << "</bitfield>" << endl;
- }
-
- MemberDef *rmd = md->reimplements();
- if (rmd)
- {
- t << " <reimplements refid=\""
- << memberOutputFileBase(rmd) << "_1" << rmd->anchor() << "\">"
- << convertToXML(rmd->name()) << "</reimplements>" << endl;
- }
- LockingPtr<MemberList> rbml = md->reimplementedBy();
- if (rbml!=0)
- {
- MemberListIterator mli(*rbml);
- for (mli.toFirst();(rmd=mli.current());++mli)
- {
- t << " <reimplementedby refid=\""
- << memberOutputFileBase(rmd) << "_1" << rmd->anchor() << "\">"
- << convertToXML(rmd->name()) << "</reimplementedby>" << endl;
- }
- }
-
- if (isFunc) //function
- {
- LockingPtr<ArgumentList> declAl = md->declArgumentList();
- LockingPtr<ArgumentList> defAl = md->argumentList();
- if (declAl!=0 && declAl->count()>0)
- {
- ArgumentListIterator declAli(*declAl);
- ArgumentListIterator defAli(*defAl);
- Argument *a;
- for (declAli.toFirst();(a=declAli.current());++declAli)
- {
- Argument *defArg = defAli.current();
- t << " <param>" << endl;
- if (!a->attrib.isEmpty())
- {
- t << " <attributes>";
- writeXMLString(t,a->attrib);
- t << "</attributes>" << endl;
- }
- if (!a->type.isEmpty())
- {
- t << " <type>";
- linkifyText(TextGeneratorXMLImpl(t),def,md->getBodyDef(),md->name(),a->type);
- t << "</type>" << endl;
- }
- if (!a->name.isEmpty())
- {
- t << " <declname>";
- writeXMLString(t,a->name);
- t << "</declname>" << endl;
- }
- if (defArg && !defArg->name.isEmpty() && defArg->name!=a->name)
- {
- t << " <defname>";
- writeXMLString(t,defArg->name);
- t << "</defname>" << endl;
- }
- if (!a->array.isEmpty())
- {
- t << " <array>";
- writeXMLString(t,a->array);
- t << "</array>" << endl;
- }
- if (!a->defval.isEmpty())
- {
- t << " <defval>";
- linkifyText(TextGeneratorXMLImpl(t),def,md->getBodyDef(),md->name(),a->defval);
- t << "</defval>" << endl;
- }
- if (defArg && defArg->hasDocumentation())
- {
- t << " <briefdescription>";
- writeXMLDocBlock(t,md->getDefFileName(),md->getDefLine(),
- md->getOuterScope(),md,defArg->docs);
- t << "</briefdescription>" << endl;
- }
- t << " </param>" << endl;
- if (defArg) ++defAli;
- }
- }
- }
- else if (md->memberType()==MemberDef::Define &&
- md->argsString()) // define
- {
- if (md->argumentList()->count()==0) // special case for "foo()" to
- // disguish it from "foo".
- {
- t << " <param></param>" << endl;
- }
- else
- {
- ArgumentListIterator ali(*md->argumentList());
- Argument *a;
- for (ali.toFirst();(a=ali.current());++ali)
- {
- t << " <param><defname>" << a->type << "</defname></param>" << endl;
- }
- }
- }
- // avoid that extremely large tables are written to the output.
- // todo: it's better to adhere to MAX_INITIALIZER_LINES.
- if (!md->initializer().isEmpty() && md->initializer().length()<2000)
- {
- t << " <initializer>";
- linkifyText(TextGeneratorXMLImpl(t),def,md->getBodyDef(),md->name(),md->initializer());
- t << "</initializer>" << endl;
- }
-
- if (md->excpString())
- {
- t << " <exceptions>";
- linkifyText(TextGeneratorXMLImpl(t),def,md->getBodyDef(),md->name(),md->excpString());
- t << "</exceptions>" << endl;
- }
-
- if (md->memberType()==MemberDef::Enumeration) // enum
- {
- LockingPtr<MemberList> enumFields = md->enumFieldList();
- if (enumFields!=0)
- {
- MemberListIterator emli(*enumFields);
- MemberDef *emd;
- for (emli.toFirst();(emd=emli.current());++emli)
- {
- ti << " <member refid=\"" << memberOutputFileBase(emd)
- << "_1" << emd->anchor() << "\" kind=\"enumvalue\"><name>"
- << convertToXML(emd->name()) << "</name></member>" << endl;
-
- t << " <enumvalue id=\"" << memberOutputFileBase(emd) << "_1"
- << emd->anchor() << "\" prot=\"";
- switch (emd->protection())
- {
- case Public: t << "public"; break;
- case Protected: t << "protected"; break;
- case Private: t << "private"; break;
- case Package: t << "package"; break;
- }
- t << "\">" << endl;
- t << " <name>";
- writeXMLString(t,emd->name());
- t << "</name>" << endl;
- if (!emd->initializer().isEmpty())
- {
- t << " <initializer>";
- writeXMLString(t,emd->initializer());
- t << "</initializer>" << endl;
- }
- t << " <briefdescription>" << endl;
- writeXMLDocBlock(t,emd->briefFile(),emd->briefLine(),emd->getOuterScope(),emd,emd->briefDescription());
- t << " </briefdescription>" << endl;
- t << " <detaileddescription>" << endl;
- writeXMLDocBlock(t,emd->docFile(),emd->docLine(),emd->getOuterScope(),emd,emd->documentation());
- t << " </detaileddescription>" << endl;
- t << " </enumvalue>" << endl;
- }
- }
- }
- t << " <briefdescription>" << endl;
- writeXMLDocBlock(t,md->briefFile(),md->briefLine(),md->getOuterScope(),md,md->briefDescription());
- t << " </briefdescription>" << endl;
- t << " <detaileddescription>" << endl;
- writeXMLDocBlock(t,md->docFile(),md->docLine(),md->getOuterScope(),md,md->documentation());
- t << " </detaileddescription>" << endl;
- t << " <inbodydescription>" << endl;
- writeXMLDocBlock(t,md->docFile(),md->inbodyLine(),md->getOuterScope(),md,md->inbodyDocumentation());
- t << " </inbodydescription>" << endl;
- if (md->getDefLine()!=-1)
- {
- t << " <location file=\""
- << md->getDefFileName() << "\" line=\""
- << md->getDefLine() << "\"";
- if (md->getStartBodyLine()!=-1)
- {
- FileDef *bodyDef = md->getBodyDef();
- if (bodyDef)
- {
- t << " bodyfile=\"" << bodyDef->absFilePath() << "\"";
- }
- t << " bodystart=\"" << md->getStartBodyLine() << "\" bodyend=\""
- << md->getEndBodyLine() << "\"";
- }
- t << "/>" << endl;
- }
-
- //printf("md->getReferencesMembers()=%p\n",md->getReferencesMembers());
- LockingPtr<MemberSDict> mdict = md->getReferencesMembers();
- if (mdict!=0)
- {
- MemberSDict::Iterator mdi(*mdict);
- MemberDef *rmd;
- for (mdi.toFirst();(rmd=mdi.current());++mdi)
- {
- writeMemberReference(t,def,rmd,"references");
- }
- }
- mdict = md->getReferencedByMembers();
- if (mdict!=0)
- {
- MemberSDict::Iterator mdi(*mdict);
- MemberDef *rmd;
- for (mdi.toFirst();(rmd=mdi.current());++mdi)
- {
- writeMemberReference(t,def,rmd,"referencedby");
- }
- }
-
- t << " </memberdef>" << endl;
-}
-
-static void generateXMLSection(Definition *d,FTextStream &ti,FTextStream &t,
- MemberList *ml,const char *kind,const char *header=0,
- const char *documentation=0)
-{
- if (ml==0) return;
- MemberListIterator mli(*ml);
- MemberDef *md;
- int count=0;
- for (mli.toFirst();(md=mli.current());++mli)
- {
- // namespace members are also inserted in the file scope, but
- // to prevent this duplication in the XML output, we filter those here.
- if (d->definitionType()!=Definition::TypeFile || md->getNamespaceDef()==0)
- {
- count++;
- }
- }
- if (count==0) return; // empty list
-
- t << " <sectiondef kind=\"" << kind << "\">" << endl;
- if (header)
- {
- t << " <header>" << convertToXML(header) << "</header>" << endl;
- }
- if (documentation)
- {
- t << " <description>";
- writeXMLDocBlock(t,d->docFile(),d->docLine(),d,0,documentation);
- t << "</description>" << endl;
- }
- for (mli.toFirst();(md=mli.current());++mli)
- {
- // namespace members are also inserted in the file scope, but
- // to prevent this duplication in the XML output, we filter those here.
- if (d->definitionType()!=Definition::TypeFile || md->getNamespaceDef()==0)
- {
- generateXMLForMember(md,ti,t,d);
- }
- }
- t << " </sectiondef>" << endl;
-}
-
-static void writeListOfAllMembers(ClassDef *cd,FTextStream &t)
-{
- t << " <listofallmembers>" << endl;
- if (cd->memberNameInfoSDict())
- {
- MemberNameInfoSDict::Iterator mnii(*cd->memberNameInfoSDict());
- MemberNameInfo *mni;
- for (mnii.toFirst();(mni=mnii.current());++mnii)
- {
- MemberNameInfoIterator mii(*mni);
- MemberInfo *mi;
- for (mii.toFirst();(mi=mii.current());++mii)
- {
- MemberDef *md=mi->memberDef;
- if (md->name().at(0)!='@') // skip anonymous members
- {
- Protection prot = mi->prot;
- Specifier virt=md->virtualness();
- t << " <member refid=\"" << memberOutputFileBase(md) << "_1" <<
- md->anchor() << "\" prot=\"";
- switch (prot)
- {
- case Public: t << "public"; break;
- case Protected: t << "protected"; break;
- case Private: t << "private"; break;
- case Package: t << "package"; break;
- }
- t << "\" virt=\"";
- switch(virt)
- {
- case Normal: t << "non-virtual"; break;
- case Virtual: t << "virtual"; break;
- case Pure: t << "pure-virtual"; break;
- }
- t << "\"";
- if (!mi->ambiguityResolutionScope.isEmpty())
- {
- t << " ambiguityscope=\"" << convertToXML(mi->ambiguityResolutionScope) << "\"";
- }
- t << "><scope>" << convertToXML(cd->name()) << "</scope><name>" <<
- convertToXML(md->name()) << "</name></member>" << endl;
- }
- }
- }
- }
- t << " </listofallmembers>" << endl;
-}
-
-static void writeInnerClasses(const ClassSDict *cl,FTextStream &t)
-{
- if (cl)
- {
- ClassSDict::Iterator cli(*cl);
- ClassDef *cd;
- for (cli.toFirst();(cd=cli.current());++cli)
- {
- if (!cd->isHidden() && cd->name().find('@')==-1) // skip anonymous scopes
- {
- t << " <innerclass refid=\"" << classOutputFileBase(cd)
- << "\" prot=\"";
- switch(cd->protection())
- {
- case Public: t << "public"; break;
- case Protected: t << "protected"; break;
- case Private: t << "private"; break;
- case Package: t << "package"; break;
- }
- t << "\">" << convertToXML(cd->name()) << "</innerclass>" << endl;
- }
- }
- }
-}
-
-static void writeInnerNamespaces(const NamespaceSDict *nl,FTextStream &t)
-{
- if (nl)
- {
- NamespaceSDict::Iterator nli(*nl);
- NamespaceDef *nd;
- for (nli.toFirst();(nd=nli.current());++nli)
- {
- if (!nd->isHidden() && nd->name().find('@')==-1) // skip anonymouse scopes
- {
- t << " <innernamespace refid=\"" << nd->getOutputFileBase()
- << "\">" << convertToXML(nd->name()) << "</innernamespace>" << endl;
- }
- }
- }
-}
-
-static void writeInnerFiles(const FileList *fl,FTextStream &t)
-{
- if (fl)
- {
- QListIterator<FileDef> fli(*fl);
- FileDef *fd;
- for (fli.toFirst();(fd=fli.current());++fli)
- {
- t << " <innerfile refid=\"" << fd->getOutputFileBase()
- << "\">" << convertToXML(fd->name()) << "</innerfile>" << endl;
- }
- }
-}
-
-static void writeInnerPages(const PageSDict *pl,FTextStream &t)
-{
- if (pl)
- {
- PageSDict::Iterator pli(*pl);
- PageDef *pd;
- for (pli.toFirst();(pd=pli.current());++pli)
- {
- t << " <innerpage refid=\"" << pd->getOutputFileBase();
- if (pd->getGroupDef())
- {
- t << "_" << pd->name();
- }
- t << "\">" << convertToXML(pd->title()) << "</innerpage>" << endl;
- }
- }
-}
-
-static void writeInnerGroups(const GroupList *gl,FTextStream &t)
-{
- if (gl)
- {
- GroupListIterator gli(*gl);
- GroupDef *sgd;
- for (gli.toFirst();(sgd=gli.current());++gli)
- {
- t << " <innergroup refid=\"" << sgd->getOutputFileBase()
- << "\">" << convertToXML(sgd->groupTitle())
- << "</innergroup>" << endl;
- }
- }
-}
-
-static void writeInnerDirs(const DirList *dl,FTextStream &t)
-{
- if (dl)
- {
- QListIterator<DirDef> subdirs(*dl);
- DirDef *subdir;
- for (subdirs.toFirst();(subdir=subdirs.current());++subdirs)
- {
- t << " <innerdir refid=\"" << subdir->getOutputFileBase()
- << "\">" << convertToXML(subdir->displayName()) << "</innerdir>" << endl;
- }
- }
-}
-
-static void generateXMLForClass(ClassDef *cd,FTextStream &ti)
-{
- // + brief description
- // + detailed description
- // + template argument list(s)
- // - include file
- // + member groups
- // + inheritance diagram
- // + list of direct super classes
- // + list of direct sub classes
- // + list of inner classes
- // + collaboration diagram
- // + list of all members
- // + user defined member sections
- // + standard member sections
- // + detailed member documentation
- // - examples using the class
-
- if (cd->isReference()) return; // skip external references.
- if (cd->isHidden()) return; // skip hidden classes.
- if (cd->name().find('@')!=-1) return; // skip anonymous compounds.
- if (cd->templateMaster()!=0) return; // skip generated template instances.
-
- msg("Generating XML output for class %s\n",cd->name().data());
-
- ti << " <compound refid=\"" << classOutputFileBase(cd)
- << "\" kind=\"" << cd->compoundTypeString()
- << "\"><name>" << convertToXML(cd->name()) << "</name>" << endl;
-
- QCString outputDirectory = Config_getString("XML_OUTPUT");
- QCString fileName=outputDirectory+"/"+ classOutputFileBase(cd)+".xml";
- QFile f(fileName);
- if (!f.open(IO_WriteOnly))
- {
- err("Cannot open file %s for writing!\n",fileName.data());
- return;
- }
- FTextStream t(&f);
- //t.setEncoding(FTextStream::UnicodeUTF8);
-
- writeXMLHeader(t);
- t << " <compounddef id=\""
- << classOutputFileBase(cd) << "\" kind=\""
- << cd->compoundTypeString() << "\" prot=\"";
- switch (cd->protection())
- {
- case Public: t << "public"; break;
- case Protected: t << "protected"; break;
- case Private: t << "private"; break;
- case Package: t << "package"; break;
- }
- t << "\">" << endl;
- t << " <compoundname>";
- writeXMLString(t,cd->name());
- t << "</compoundname>" << endl;
- if (cd->baseClasses())
- {
- BaseClassListIterator bcli(*cd->baseClasses());
- BaseClassDef *bcd;
- for (bcli.toFirst();(bcd=bcli.current());++bcli)
- {
- t << " <basecompoundref ";
- if (bcd->classDef->isLinkable())
- {
- t << "refid=\"" << classOutputFileBase(bcd->classDef) << "\" ";
- }
- t << "prot=\"";
- switch (bcd->prot)
- {
- case Public: t << "public"; break;
- case Protected: t << "protected"; break;
- case Private: t << "private"; break;
- case Package: ASSERT(0); break;
- }
- t << "\" virt=\"";
- switch(bcd->virt)
- {
- case Normal: t << "non-virtual"; break;
- case Virtual: t << "virtual"; break;
- case Pure: t <<"pure-virtual"; break;
- }
- t << "\">";
- if (!bcd->templSpecifiers.isEmpty())
- {
- t << convertToXML(
- insertTemplateSpecifierInScope(
- bcd->classDef->name(),bcd->templSpecifiers)
- );
- }
- else
- {
- t << convertToXML(bcd->classDef->displayName());
- }
- t << "</basecompoundref>" << endl;
- }
- }
- if (cd->subClasses())
- {
- BaseClassListIterator bcli(*cd->subClasses());
- BaseClassDef *bcd;
- for (bcli.toFirst();(bcd=bcli.current());++bcli)
- {
- t << " <derivedcompoundref refid=\""
- << classOutputFileBase(bcd->classDef)
- << "\" prot=\"";
- switch (bcd->prot)
- {
- case Public: t << "public"; break;
- case Protected: t << "protected"; break;
- case Private: t << "private"; break;
- case Package: ASSERT(0); break;
- }
- t << "\" virt=\"";
- switch(bcd->virt)
- {
- case Normal: t << "non-virtual"; break;
- case Virtual: t << "virtual"; break;
- case Pure: t << "pure-virtual"; break;
- }
- t << "\">" << convertToXML(bcd->classDef->displayName())
- << "</derivedcompoundref>" << endl;
- }
- }
-
- IncludeInfo *ii=cd->includeInfo();
- if (ii)
- {
- QCString nm = ii->includeName;
- if (nm.isEmpty() && ii->fileDef) nm = ii->fileDef->docName();
- if (!nm.isEmpty())
- {
- t << " <includes";
- if (ii->fileDef && !ii->fileDef->isReference()) // TODO: support external references
- {
- t << " refid=\"" << ii->fileDef->getOutputFileBase() << "\"";
- }
- t << " local=\"" << (ii->local ? "yes" : "no") << "\">";
- t << nm;
- t << "</includes>" << endl;
- }
- }
-
- writeInnerClasses(cd->getClassSDict(),t);
-
- writeTemplateList(cd,t);
- if (cd->getMemberGroupSDict())
- {
- MemberGroupSDict::Iterator mgli(*cd->getMemberGroupSDict());
- MemberGroup *mg;
- for (;(mg=mgli.current());++mgli)
- {
- generateXMLSection(cd,ti,t,mg->members(),"user-defined",mg->header(),
- mg->documentation());
- }
- }
-
- QListIterator<MemberList> mli(cd->getMemberLists());
- MemberList *ml;
- for (mli.toFirst();(ml=mli.current());++mli)
- {
- if ((ml->listType()&MemberList::detailedLists)==0)
- {
- generateXMLSection(cd,ti,t,ml,g_xmlSectionMapper.find(ml->listType()));
- }
- }
-#if 0
- generateXMLSection(cd,ti,t,cd->pubTypes,"public-type");
- generateXMLSection(cd,ti,t,cd->pubMethods,"public-func");
- generateXMLSection(cd,ti,t,cd->pubAttribs,"public-attrib");
- generateXMLSection(cd,ti,t,cd->pubSlots,"public-slot");
- generateXMLSection(cd,ti,t,cd->signals,"signal");
- generateXMLSection(cd,ti,t,cd->dcopMethods,"dcop-func");
- generateXMLSection(cd,ti,t,cd->properties,"property");
- generateXMLSection(cd,ti,t,cd->events,"event");
- generateXMLSection(cd,ti,t,cd->pubStaticMethods,"public-static-func");
- generateXMLSection(cd,ti,t,cd->pubStaticAttribs,"public-static-attrib");
- generateXMLSection(cd,ti,t,cd->proTypes,"protected-type");
- generateXMLSection(cd,ti,t,cd->proMethods,"protected-func");
- generateXMLSection(cd,ti,t,cd->proAttribs,"protected-attrib");
- generateXMLSection(cd,ti,t,cd->proSlots,"protected-slot");
- generateXMLSection(cd,ti,t,cd->proStaticMethods,"protected-static-func");
- generateXMLSection(cd,ti,t,cd->proStaticAttribs,"protected-static-attrib");
- generateXMLSection(cd,ti,t,cd->pacTypes,"package-type");
- generateXMLSection(cd,ti,t,cd->pacMethods,"package-func");
- generateXMLSection(cd,ti,t,cd->pacAttribs,"package-attrib");
- generateXMLSection(cd,ti,t,cd->pacStaticMethods,"package-static-func");
- generateXMLSection(cd,ti,t,cd->pacStaticAttribs,"package-static-attrib");
- generateXMLSection(cd,ti,t,cd->priTypes,"private-type");
- generateXMLSection(cd,ti,t,cd->priMethods,"private-func");
- generateXMLSection(cd,ti,t,cd->priAttribs,"private-attrib");
- generateXMLSection(cd,ti,t,cd->priSlots,"private-slot");
- generateXMLSection(cd,ti,t,cd->priStaticMethods,"private-static-func");
- generateXMLSection(cd,ti,t,cd->priStaticAttribs,"private-static-attrib");
- generateXMLSection(cd,ti,t,cd->friends,"friend");
- generateXMLSection(cd,ti,t,cd->related,"related");
-#endif
-
- t << " <briefdescription>" << endl;
- writeXMLDocBlock(t,cd->briefFile(),cd->briefLine(),cd,0,cd->briefDescription());
- t << " </briefdescription>" << endl;
- t << " <detaileddescription>" << endl;
- writeXMLDocBlock(t,cd->docFile(),cd->docLine(),cd,0,cd->documentation());
- t << " </detaileddescription>" << endl;
- DotClassGraph inheritanceGraph(cd,DotNode::Inheritance);
- if (!inheritanceGraph.isTrivial())
- {
- t << " <inheritancegraph>" << endl;
- inheritanceGraph.writeXML(t);
- t << " </inheritancegraph>" << endl;
- }
- DotClassGraph collaborationGraph(cd,DotNode::Collaboration);
- if (!collaborationGraph.isTrivial())
- {
- t << " <collaborationgraph>" << endl;
- collaborationGraph.writeXML(t);
- t << " </collaborationgraph>" << endl;
- }
- t << " <location file=\""
- << cd->getDefFileName() << "\" line=\""
- << cd->getDefLine() << "\"";
- if (cd->getStartBodyLine()!=-1)
- {
- FileDef *bodyDef = cd->getBodyDef();
- if (bodyDef)
- {
- t << " bodyfile=\"" << bodyDef->absFilePath() << "\"";
- }
- t << " bodystart=\"" << cd->getStartBodyLine() << "\" bodyend=\""
- << cd->getEndBodyLine() << "\"";
- }
- t << "/>" << endl;
- writeListOfAllMembers(cd,t);
- t << " </compounddef>" << endl;
- t << "</doxygen>" << endl;
-
- ti << " </compound>" << endl;
-}
-
-static void generateXMLForNamespace(NamespaceDef *nd,FTextStream &ti)
-{
- // + contained class definitions
- // + contained namespace definitions
- // + member groups
- // + normal members
- // + brief desc
- // + detailed desc
- // + location
- // - files containing (parts of) the namespace definition
-
- if (nd->isReference() || nd->isHidden()) return; // skip external references
-
- ti << " <compound refid=\"" << nd->getOutputFileBase()
- << "\" kind=\"namespace\"" << "><name>"
- << convertToXML(nd->name()) << "</name>" << endl;
-
- QCString outputDirectory = Config_getString("XML_OUTPUT");
- QCString fileName=outputDirectory+"/"+nd->getOutputFileBase()+".xml";
- QFile f(fileName);
- if (!f.open(IO_WriteOnly))
- {
- err("Cannot open file %s for writing!\n",fileName.data());
- return;
- }
- FTextStream t(&f);
- //t.setEncoding(FTextStream::UnicodeUTF8);
-
- writeXMLHeader(t);
- t << " <compounddef id=\""
- << nd->getOutputFileBase() << "\" kind=\"namespace\">" << endl;
- t << " <compoundname>";
- writeXMLString(t,nd->name());
- t << "</compoundname>" << endl;
-
- writeInnerClasses(nd->getClassSDict(),t);
- writeInnerNamespaces(nd->getNamespaceSDict(),t);
-
- if (nd->getMemberGroupSDict())
- {
- MemberGroupSDict::Iterator mgli(*nd->getMemberGroupSDict());
- MemberGroup *mg;
- for (;(mg=mgli.current());++mgli)
- {
- generateXMLSection(nd,ti,t,mg->members(),"user-defined",mg->header(),
- mg->documentation());
- }
- }
-
- QListIterator<MemberList> mli(nd->getMemberLists());
- MemberList *ml;
- for (mli.toFirst();(ml=mli.current());++mli)
- {
- if ((ml->listType()&MemberList::declarationLists)!=0)
- {
- generateXMLSection(nd,ti,t,ml,g_xmlSectionMapper.find(ml->listType()));
- }
- }
-#if 0
- generateXMLSection(nd,ti,t,&nd->decDefineMembers,"define");
- generateXMLSection(nd,ti,t,&nd->decProtoMembers,"prototype");
- generateXMLSection(nd,ti,t,&nd->decTypedefMembers,"typedef");
- generateXMLSection(nd,ti,t,&nd->decEnumMembers,"enum");
- generateXMLSection(nd,ti,t,&nd->decFuncMembers,"func");
- generateXMLSection(nd,ti,t,&nd->decVarMembers,"var");
-#endif
-
- t << " <briefdescription>" << endl;
- writeXMLDocBlock(t,nd->briefFile(),nd->briefLine(),nd,0,nd->briefDescription());
- t << " </briefdescription>" << endl;
- t << " <detaileddescription>" << endl;
- writeXMLDocBlock(t,nd->docFile(),nd->docLine(),nd,0,nd->documentation());
- t << " </detaileddescription>" << endl;
- t << " <location file=\""
- << nd->getDefFileName() << "\" line=\""
- << nd->getDefLine() << "\"/>" << endl;
- t << " </compounddef>" << endl;
- t << "</doxygen>" << endl;
-
- ti << " </compound>" << endl;
-}
-
-static void generateXMLForFile(FileDef *fd,FTextStream &ti)
-{
- // + includes files
- // + includedby files
- // + include graph
- // + included by graph
- // + contained class definitions
- // + contained namespace definitions
- // + member groups
- // + normal members
- // + brief desc
- // + detailed desc
- // + source code
- // + location
- // - number of lines
-
- if (fd->isReference()) return; // skip external references
-
- ti << " <compound refid=\"" << fd->getOutputFileBase()
- << "\" kind=\"file\"><name>" << convertToXML(fd->name())
- << "</name>" << endl;
-
- QCString outputDirectory = Config_getString("XML_OUTPUT");
- QCString fileName=outputDirectory+"/"+fd->getOutputFileBase()+".xml";
- QFile f(fileName);
- if (!f.open(IO_WriteOnly))
- {
- err("Cannot open file %s for writing!\n",fileName.data());
- return;
- }
- FTextStream t(&f);
- //t.setEncoding(FTextStream::UnicodeUTF8);
-
- writeXMLHeader(t);
- t << " <compounddef id=\""
- << fd->getOutputFileBase() << "\" kind=\"file\">" << endl;
- t << " <compoundname>";
- writeXMLString(t,fd->name());
- t << "</compoundname>" << endl;
-
- IncludeInfo *inc;
-
- if (fd->includeFileList())
- {
- QListIterator<IncludeInfo> ili1(*fd->includeFileList());
- for (ili1.toFirst();(inc=ili1.current());++ili1)
- {
- t << " <includes";
- if (inc->fileDef && !inc->fileDef->isReference()) // TODO: support external references
- {
- t << " refid=\"" << inc->fileDef->getOutputFileBase() << "\"";
- }
- t << " local=\"" << (inc->local ? "yes" : "no") << "\">";
- t << inc->includeName;
- t << "</includes>" << endl;
- }
- }
-
- if (fd->includedByFileList())
- {
- QListIterator<IncludeInfo> ili2(*fd->includedByFileList());
- for (ili2.toFirst();(inc=ili2.current());++ili2)
- {
- t << " <includedby";
- if (inc->fileDef && !inc->fileDef->isReference()) // TODO: support external references
- {
- t << " refid=\"" << inc->fileDef->getOutputFileBase() << "\"";
- }
- t << " local=\"" << (inc->local ? "yes" : "no") << "\">";
- t << inc->includeName;
- t << "</includedby>" << endl;
- }
- }
-
- DotInclDepGraph incDepGraph(fd,FALSE);
- if (!incDepGraph.isTrivial())
- {
- t << " <incdepgraph>" << endl;
- incDepGraph.writeXML(t);
- t << " </incdepgraph>" << endl;
- }
-
- DotInclDepGraph invIncDepGraph(fd,TRUE);
- if (!invIncDepGraph.isTrivial())
- {
- t << " <invincdepgraph>" << endl;
- invIncDepGraph.writeXML(t);
- t << " </invincdepgraph>" << endl;
- }
-
- if (fd->getClassSDict())
- {
- writeInnerClasses(fd->getClassSDict(),t);
- }
- if (fd->getNamespaceSDict())
- {
- writeInnerNamespaces(fd->getNamespaceSDict(),t);
- }
-
- if (fd->getMemberGroupSDict())
- {
- MemberGroupSDict::Iterator mgli(*fd->getMemberGroupSDict());
- MemberGroup *mg;
- for (;(mg=mgli.current());++mgli)
- {
- generateXMLSection(fd,ti,t,mg->members(),"user-defined",mg->header(),
- mg->documentation());
- }
- }
-
- QListIterator<MemberList> mli(fd->getMemberLists());
- MemberList *ml;
- for (mli.toFirst();(ml=mli.current());++mli)
- {
- if ((ml->listType()&MemberList::declarationLists)!=0)
- {
- generateXMLSection(fd,ti,t,ml,g_xmlSectionMapper.find(ml->listType()));
- }
- }
-#if 0
- generateXMLSection(fd,ti,t,fd->decDefineMembers,"define");
- generateXMLSection(fd,ti,t,fd->decProtoMembers,"prototype");
- generateXMLSection(fd,ti,t,fd->decTypedefMembers,"typedef");
- generateXMLSection(fd,ti,t,fd->decEnumMembers,"enum");
- generateXMLSection(fd,ti,t,fd->decFuncMembers,"func");
- generateXMLSection(fd,ti,t,fd->decVarMembers,"var");
-#endif
-
- t << " <briefdescription>" << endl;
- writeXMLDocBlock(t,fd->briefFile(),fd->briefLine(),fd,0,fd->briefDescription());
- t << " </briefdescription>" << endl;
- t << " <detaileddescription>" << endl;
- writeXMLDocBlock(t,fd->docFile(),fd->docLine(),fd,0,fd->documentation());
- t << " </detaileddescription>" << endl;
- if (Config_getBool("XML_PROGRAMLISTING"))
- {
- t << " <programlisting>" << endl;
- writeXMLCodeBlock(t,fd);
- t << " </programlisting>" << endl;
- }
- t << " <location file=\"" << fd->getDefFileName() << "\"/>" << endl;
- t << " </compounddef>" << endl;
- t << "</doxygen>" << endl;
-
- ti << " </compound>" << endl;
-}
-
-static void generateXMLForGroup(GroupDef *gd,FTextStream &ti)
-{
- // + members
- // + member groups
- // + files
- // + classes
- // + namespaces
- // - packages
- // + pages
- // + child groups
- // - examples
- // + brief description
- // + detailed description
-
- if (gd->isReference()) return; // skip external references
-
- ti << " <compound refid=\"" << gd->getOutputFileBase()
- << "\" kind=\"group\"><name>" << convertToXML(gd->name()) << "</name>" << endl;
-
- QCString outputDirectory = Config_getString("XML_OUTPUT");
- QCString fileName=outputDirectory+"/"+gd->getOutputFileBase()+".xml";
- QFile f(fileName);
- if (!f.open(IO_WriteOnly))
- {
- err("Cannot open file %s for writing!\n",fileName.data());
- return;
- }
-
- FTextStream t(&f);
- //t.setEncoding(FTextStream::UnicodeUTF8);
- writeXMLHeader(t);
- t << " <compounddef id=\""
- << gd->getOutputFileBase() << "\" kind=\"group\">" << endl;
- t << " <compoundname>" << convertToXML(gd->name()) << "</compoundname>" << endl;
- t << " <title>" << convertToXML(gd->groupTitle()) << "</title>" << endl;
-
- writeInnerFiles(gd->getFiles(),t);
- writeInnerClasses(gd->getClasses(),t);
- writeInnerNamespaces(gd->getNamespaces(),t);
- writeInnerPages(gd->getPages(),t);
- writeInnerGroups(gd->getSubGroups(),t);
-
- if (gd->getMemberGroupSDict())
- {
- MemberGroupSDict::Iterator mgli(*gd->getMemberGroupSDict());
- MemberGroup *mg;
- for (;(mg=mgli.current());++mgli)
- {
- generateXMLSection(gd,ti,t,mg->members(),"user-defined",mg->header(),
- mg->documentation());
- }
- }
-
- QListIterator<MemberList> mli(gd->getMemberLists());
- MemberList *ml;
- for (mli.toFirst();(ml=mli.current());++mli)
- {
- if ((ml->listType()&MemberList::declarationLists)!=0)
- {
- generateXMLSection(gd,ti,t,ml,g_xmlSectionMapper.find(ml->listType()));
- }
- }
-#if 0
- generateXMLSection(gd,ti,t,&gd->decDefineMembers,"define");
- generateXMLSection(gd,ti,t,&gd->decProtoMembers,"prototype");
- generateXMLSection(gd,ti,t,&gd->decTypedefMembers,"typedef");
- generateXMLSection(gd,ti,t,&gd->decEnumMembers,"enum");
- generateXMLSection(gd,ti,t,&gd->decFuncMembers,"func");
- generateXMLSection(gd,ti,t,&gd->decVarMembers,"var");
-#endif
-
- t << " <briefdescription>" << endl;
- writeXMLDocBlock(t,gd->briefFile(),gd->briefLine(),gd,0,gd->briefDescription());
- t << " </briefdescription>" << endl;
- t << " <detaileddescription>" << endl;
- writeXMLDocBlock(t,gd->docFile(),gd->docLine(),gd,0,gd->documentation());
- t << " </detaileddescription>" << endl;
- t << " </compounddef>" << endl;
- t << "</doxygen>" << endl;
-
- ti << " </compound>" << endl;
-}
-
-static void generateXMLForDir(DirDef *dd,FTextStream &ti)
-{
- if (dd->isReference()) return; // skip external references
- ti << " <compound refid=\"" << dd->getOutputFileBase()
- << "\" kind=\"dir\"><name>" << convertToXML(dd->displayName())
- << "</name>" << endl;
-
- QCString outputDirectory = Config_getString("XML_OUTPUT");
- QCString fileName=outputDirectory+"/"+dd->getOutputFileBase()+".xml";
- QFile f(fileName);
- if (!f.open(IO_WriteOnly))
- {
- err("Cannot open file %s for writing!\n",fileName.data());
- return;
- }
-
- FTextStream t(&f);
- //t.setEncoding(FTextStream::UnicodeUTF8);
- writeXMLHeader(t);
- t << " <compounddef id=\""
- << dd->getOutputFileBase() << "\" kind=\"dir\">" << endl;
- t << " <compoundname>" << convertToXML(dd->displayName()) << "</compoundname>" << endl;
-
- writeInnerDirs(&dd->subDirs(),t);
- writeInnerFiles(dd->getFiles(),t);
-
- t << " <briefdescription>" << endl;
- writeXMLDocBlock(t,dd->briefFile(),dd->briefLine(),dd,0,dd->briefDescription());
- t << " </briefdescription>" << endl;
- t << " <detaileddescription>" << endl;
- writeXMLDocBlock(t,dd->docFile(),dd->docLine(),dd,0,dd->documentation());
- t << " </detaileddescription>" << endl;
- t << " <location file=\"" << dd->name() << "\"/>" << endl;
- t << " </compounddef>" << endl;
- t << "</doxygen>" << endl;
-
- ti << " </compound>" << endl;
-}
-
-static void generateXMLForPage(PageDef *pd,FTextStream &ti,bool isExample)
-{
- // + name
- // + title
- // + documentation
-
- const char *kindName = isExample ? "example" : "page";
-
- if (pd->isReference()) return;
-
- QCString pageName = pd->getOutputFileBase();
- if (pd->getGroupDef())
- {
- pageName+=(QCString)"_"+pd->name();
- }
- if (pageName=="index") pageName="indexpage"; // to prevent overwriting the generated index page.
-
- ti << " <compound refid=\"" << pageName
- << "\" kind=\"" << kindName << "\"><name>" << convertToXML(pd->name())
- << "</name>" << endl;
-
- QCString outputDirectory = Config_getString("XML_OUTPUT");
- QCString fileName=outputDirectory+"/"+pageName+".xml";
- QFile f(fileName);
- if (!f.open(IO_WriteOnly))
- {
- err("Cannot open file %s for writing!\n",fileName.data());
- return;
- }
-
- FTextStream t(&f);
- //t.setEncoding(FTextStream::UnicodeUTF8);
- writeXMLHeader(t);
- t << " <compounddef id=\"" << pageName;
- t << "\" kind=\"" << kindName << "\">" << endl;
- t << " <compoundname>" << convertToXML(pd->name())
- << "</compoundname>" << endl;
-
- SectionInfo *si = Doxygen::sectionDict.find(pd->name());
- if (si)
- {
- t << " <title>" << convertToXML(si->title) << "</title>" << endl;
- }
- writeInnerPages(pd->getSubPages(),t);
- t << " <detaileddescription>" << endl;
- if (isExample)
- {
- writeXMLDocBlock(t,pd->docFile(),pd->docLine(),pd,0,
- pd->documentation()+"\n\\include "+pd->name());
- }
- else
- {
- writeXMLDocBlock(t,pd->docFile(),pd->docLine(),pd,0,
- pd->documentation());
- }
- t << " </detaileddescription>" << endl;
-
- t << " </compounddef>" << endl;
- t << "</doxygen>" << endl;
-
- ti << " </compound>" << endl;
-}
-
-void generateXML()
-{
-
- // + classes
- // + namespaces
- // + files
- // + groups
- // + related pages
- // - examples
-
- QCString outputDirectory = Config_getString("XML_OUTPUT");
- if (outputDirectory.isEmpty())
- {
- outputDirectory=QDir::currentDirPath();
- }
- else
- {
- QDir dir(outputDirectory);
- if (!dir.exists())
- {
- dir.setPath(QDir::currentDirPath());
- if (!dir.mkdir(outputDirectory))
- {
- err("error: tag XML_OUTPUT: Output directory `%s' does not "
- "exist and cannot be created\n",outputDirectory.data());
- exit(1);
- }
- else if (!Config_getBool("QUIET"))
- {
- err("notice: Output directory `%s' does not exist. "
- "I have created it for you.\n", outputDirectory.data());
- }
- dir.cd(outputDirectory);
- }
- outputDirectory=dir.absPath();
- }
-
- QDir dir(outputDirectory);
- if (!dir.exists())
- {
- dir.setPath(QDir::currentDirPath());
- if (!dir.mkdir(outputDirectory))
- {
- err("Cannot create directory %s\n",outputDirectory.data());
- return;
- }
- }
- QDir xmlDir(outputDirectory);
- createSubDirs(xmlDir);
- QCString fileName=outputDirectory+"/index.xsd";
- QFile f(fileName);
- if (!f.open(IO_WriteOnly))
- {
- err("Cannot open file %s for writing!\n",fileName.data());
- return;
- }
- f.writeBlock(index_xsd,strlen(index_xsd));
- f.close();
-
- fileName=outputDirectory+"/compound.xsd";
- f.setName(fileName);
- if (!f.open(IO_WriteOnly))
- {
- err("Cannot open file %s for writing!\n",fileName.data());
- return;
- }
- f.writeBlock(compound_xsd,strlen(compound_xsd));
- f.close();
-
- fileName=outputDirectory+"/index.xml";
- f.setName(fileName);
- if (!f.open(IO_WriteOnly))
- {
- err("Cannot open file %s for writing!\n",fileName.data());
- return;
- }
- FTextStream t(&f);
- //t.setEncoding(FTextStream::UnicodeUTF8);
-
- // write index header
- t << "<?xml version='1.0' encoding='UTF-8' standalone='no'?>" << endl;;
- t << "<doxygenindex xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" ";
- t << "xsi:noNamespaceSchemaLocation=\"index.xsd\" ";
- t << "version=\"" << versionString << "\">" << endl;
-
- {
- ClassSDict::Iterator cli(*Doxygen::classSDict);
- ClassDef *cd;
- for (cli.toFirst();(cd=cli.current());++cli)
- {
- generateXMLForClass(cd,t);
- }
- }
- //{
- // ClassSDict::Iterator cli(Doxygen::hiddenClasses);
- // ClassDef *cd;
- // for (cli.toFirst();(cd=cli.current());++cli)
- // {
- // msg("Generating XML output for class %s\n",cd->name().data());
- // generateXMLForClass(cd,t);
- // }
- //}
- NamespaceSDict::Iterator nli(*Doxygen::namespaceSDict);
- NamespaceDef *nd;
- for (nli.toFirst();(nd=nli.current());++nli)
- {
- msg("Generating XML output for namespace %s\n",nd->name().data());
- generateXMLForNamespace(nd,t);
- }
- FileNameListIterator fnli(*Doxygen::inputNameList);
- FileName *fn;
- for (;(fn=fnli.current());++fnli)
- {
- FileNameIterator fni(*fn);
- FileDef *fd;
- for (;(fd=fni.current());++fni)
- {
- msg("Generating XML output for file %s\n",fd->name().data());
- generateXMLForFile(fd,t);
- }
- }
- GroupSDict::Iterator gli(*Doxygen::groupSDict);
- GroupDef *gd;
- for (;(gd=gli.current());++gli)
- {
- msg("Generating XML output for group %s\n",gd->name().data());
- generateXMLForGroup(gd,t);
- }
- {
- PageSDict::Iterator pdi(*Doxygen::pageSDict);
- PageDef *pd=0;
- for (pdi.toFirst();(pd=pdi.current());++pdi)
- {
- msg("Generating XML output for page %s\n",pd->name().data());
- generateXMLForPage(pd,t,FALSE);
- }
- }
- {
- DirDef *dir;
- DirSDict::Iterator sdi(*Doxygen::directories);
- for (sdi.toFirst();(dir=sdi.current());++sdi)
- {
- msg("Generate XML output for dir %s\n",dir->name().data());
- generateXMLForDir(dir,t);
- }
- }
- {
- PageSDict::Iterator pdi(*Doxygen::exampleSDict);
- PageDef *pd=0;
- for (pdi.toFirst();(pd=pdi.current());++pdi)
- {
- msg("Generating XML output for example %s\n",pd->name().data());
- generateXMLForPage(pd,t,TRUE);
- }
- }
- if (Doxygen::mainPage)
- {
- msg("Generating XML output for the main page\n");
- generateXMLForPage(Doxygen::mainPage,t,FALSE);
- }
-
- //t << " </compoundlist>" << endl;
- t << "</doxygenindex>" << endl;
-
- writeCombineScript();
-}
-
-
diff --git a/trunk/src/xmlgen.h b/trunk/src/xmlgen.h
deleted file mode 100644
index 9193956..0000000
--- a/trunk/src/xmlgen.h
+++ /dev/null
@@ -1,20 +0,0 @@
-/******************************************************************************
- *
- *
- *
- * Copyright (C) 1997-2012 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.
- *
- */
-
-#ifndef XMLGEN_H
-#define XMLGEN_H
-
-void generateXML();
-
-#endif